sanity 3.72.1 → 3.72.2-use-live-content-api.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/lib/_chunks-cjs/LiveQueries.js +236 -163
  2. package/lib/_chunks-cjs/LiveQueries.js.map +1 -1
  3. package/lib/_chunks-cjs/PresentationToolGrantsCheck.js +3 -7
  4. package/lib/_chunks-cjs/PresentationToolGrantsCheck.js.map +1 -1
  5. package/lib/_chunks-cjs/buildAction.js +3 -0
  6. package/lib/_chunks-cjs/buildAction.js.map +1 -1
  7. package/lib/_chunks-cjs/presentation.js +3 -4
  8. package/lib/_chunks-cjs/presentation.js.map +1 -1
  9. package/lib/_chunks-cjs/version.js +1 -1
  10. package/lib/_chunks-es/LiveQueries.mjs +235 -162
  11. package/lib/_chunks-es/LiveQueries.mjs.map +1 -1
  12. package/lib/_chunks-es/PresentationToolGrantsCheck.mjs +2 -4
  13. package/lib/_chunks-es/PresentationToolGrantsCheck.mjs.map +1 -1
  14. package/lib/_chunks-es/presentation.mjs +3 -3
  15. package/lib/_chunks-es/presentation.mjs.map +1 -1
  16. package/lib/_chunks-es/version.mjs +1 -1
  17. package/lib/_internal/cli/threads/validateDocuments.js +1 -1
  18. package/lib/_internal/cli/threads/validateDocuments.js.map +1 -1
  19. package/lib/_legacy/LiveQueries.esm.js +235 -162
  20. package/lib/_legacy/LiveQueries.esm.js.map +1 -1
  21. package/lib/_legacy/PresentationToolGrantsCheck.esm.js +2 -4
  22. package/lib/_legacy/PresentationToolGrantsCheck.esm.js.map +1 -1
  23. package/lib/_legacy/presentation.esm.js +3 -3
  24. package/lib/_legacy/presentation.esm.js.map +1 -1
  25. package/lib/_legacy/version.esm.js +1 -1
  26. package/package.json +13 -14
  27. package/src/_internal/cli/server/buildVendorDependencies.ts +1 -0
  28. package/src/_internal/cli/threads/validateDocuments.ts +2 -2
  29. package/src/presentation/PresentationTool.tsx +10 -21
  30. package/src/presentation/constants.ts +4 -16
  31. package/src/presentation/loader/LiveQueries.tsx +79 -234
  32. package/src/presentation/loader/useLiveEvents.ts +75 -0
  33. package/src/presentation/loader/useLiveQueries.ts +127 -0
  34. package/src/presentation/loader/utils.ts +2 -125
  35. package/src/presentation/types.ts +1 -18
  36. package/lib/_chunks-cjs/LoaderQueries.js +0 -281
  37. package/lib/_chunks-cjs/LoaderQueries.js.map +0 -1
  38. package/lib/_chunks-cjs/utils.js +0 -70
  39. package/lib/_chunks-cjs/utils.js.map +0 -1
  40. package/lib/_chunks-es/LoaderQueries.mjs +0 -288
  41. package/lib/_chunks-es/LoaderQueries.mjs.map +0 -1
  42. package/lib/_chunks-es/utils.mjs +0 -74
  43. package/lib/_chunks-es/utils.mjs.map +0 -1
  44. package/lib/_legacy/LoaderQueries.esm.js +0 -288
  45. package/lib/_legacy/LoaderQueries.esm.js.map +0 -1
  46. package/lib/_legacy/utils.esm.js +0 -74
  47. package/lib/_legacy/utils.esm.js.map +0 -1
  48. package/src/presentation/loader/LoaderQueries.tsx +0 -564
@@ -4,6 +4,7 @@ import { PresentationSharedStateContext, PresentationContext, PresentationDocume
4
4
  import { jsxs, Fragment, jsx } from "react/jsx-runtime";
5
5
  import { useDocumentStore, isRecord, isReference, getDraftId, defineLocaleResourceBundle, useTranslation, defineDocumentFieldAction, useWorkspace, pathToString, getPublishedId, definePlugin, isDocumentSchemaType } from "sanity";
6
6
  import { ComposeIcon, InfoOutlineIcon, ChevronRightIcon, DesktopIcon, WarningOutlineIcon, ErrorOutlineIcon, MasterDetailIcon } from "@sanity/icons";
7
+ import { apiVersion } from "@sanity/preview-url-secret/constants";
7
8
  import { Card, Flex, Box, Spinner, Text, Stack, rem } from "@sanity/ui";
8
9
  import { styled } from "styled-components";
9
10
  import get from "lodash/get.js";
@@ -23,7 +24,7 @@ const useSharedState = (key, value) => {
23
24
  $[0] !== key || $[1] !== setValue || $[2] !== value ? (t0 = () => {
24
25
  setValue(key, value);
25
26
  }, t1 = [key, value, setValue], $[0] = key, $[1] = setValue, $[2] = value, $[3] = t0, $[4] = t1) : (t0 = $[3], t1 = $[4]), useEffect(t0, t1);
26
- }, DEFAULT_TOOL_ICON = ComposeIcon, DEFAULT_TOOL_NAME = "presentation", DEFAULT_TOOL_TITLE = "Presentation", EDIT_INTENT_MODE = "presentation", MAX_TIME_TO_OVERLAYS_CONNECTION = 3e3, API_VERSION = "2023-10-16", MIN_LOADER_QUERY_LISTEN_HEARTBEAT_INTERVAL = 1e3, LIVE_QUERY_CACHE_BATCH_SIZE = 100, LIVE_QUERY_CACHE_SIZE = 2048, POPUP_CHECK_INTERVAL = 1e3;
27
+ }, DEFAULT_TOOL_ICON = ComposeIcon, DEFAULT_TOOL_NAME = "presentation", DEFAULT_TOOL_TITLE = "Presentation", EDIT_INTENT_MODE = "presentation", MAX_TIME_TO_OVERLAYS_CONNECTION = 3e3, API_VERSION = apiVersion, MIN_LOADER_QUERY_LISTEN_HEARTBEAT_INTERVAL = 1e3, LOADER_QUERY_GC_INTERVAL = 3e4, POPUP_CHECK_INTERVAL = 1e3;
27
28
  function keysOf(value) {
28
29
  return Object.keys(value);
29
30
  }
@@ -594,8 +595,7 @@ export {
594
595
  API_VERSION,
595
596
  DEFAULT_TOOL_NAME,
596
597
  EDIT_INTENT_MODE,
597
- LIVE_QUERY_CACHE_BATCH_SIZE,
598
- LIVE_QUERY_CACHE_SIZE,
598
+ LOADER_QUERY_GC_INTERVAL,
599
599
  MAX_TIME_TO_OVERLAYS_CONNECTION,
600
600
  MIN_LOADER_QUERY_LISTEN_HEARTBEAT_INTERVAL,
601
601
  POPUP_CHECK_INTERVAL,
@@ -1 +1 @@
1
- {"version":3,"file":"presentation.esm.js","sources":["../../src/presentation/overlays/useSharedState.ts","../../src/presentation/constants.ts","../../src/presentation/util/props.ts","../../src/presentation/useDocumentLocations.ts","../../src/presentation/i18n/index.ts","../../src/presentation/usePresentationTool.ts","../../src/presentation/document/useCurrentPresentationToolName.ts","../../src/presentation/document/LocationsBanner.tsx","../../src/presentation/document/PresentationDocumentHeader.tsx","../../src/presentation/document/PresentationDocumentProvider.tsx","../../src/presentation/fieldActions/openInStructure.ts","../../src/presentation/getIntentState.ts","../../src/presentation/PresentationSpinner.tsx","../../src/presentation/router.ts","../../src/presentation/plugin.tsx","../../src/presentation/reducers/presentationReducer.ts","../../src/presentation/usePresentationNavigate.ts","../../src/presentation/usePresentationParams.ts"],"sourcesContent":["import {type Serializable} from '@sanity/presentation-comlink'\nimport {useContext, useEffect} from 'react'\nimport {PresentationSharedStateContext} from 'sanity/_singletons'\n\n/** @public */\nexport const useSharedState = (key: string, value: Serializable): undefined => {\n const context = useContext(PresentationSharedStateContext)\n\n if (!context) {\n throw new Error('Preview Snapshots context is missing')\n }\n\n const {setValue} = context\n\n useEffect(() => {\n setValue(key, value)\n }, [key, value, setValue])\n\n return undefined\n}\n","import {ComposeIcon} from '@sanity/icons'\n\nexport const DEFAULT_TOOL_ICON = ComposeIcon\nexport const DEFAULT_TOOL_NAME = 'presentation'\nexport const DEFAULT_TOOL_TITLE = 'Presentation'\n\nexport const EDIT_INTENT_MODE = 'presentation'\n\n// How long we wait until an iframe is loaded until we consider it to be slow and possibly failed\nexport const MAX_TIME_TO_OVERLAYS_CONNECTION = 3_000 // ms\n\n// The API version to use when using `@sanity/client`\nexport const API_VERSION = '2023-10-16'\n\n// Heartbeats shouldn't fire on intervals that are so short it causes performance issues\nexport const MIN_LOADER_QUERY_LISTEN_HEARTBEAT_INTERVAL = 1000 // ms\n\n// Batch size for fetching documents building up the cache\nexport const LIVE_QUERY_CACHE_BATCH_SIZE = 100\n\n// Total cache size for documents that are live queried\nexport const LIVE_QUERY_CACHE_SIZE = 2048\n\n// The interval at which we check if existing popups have been closed\nexport const POPUP_CHECK_INTERVAL = 1000 // ms\n\ndeclare global {\n const PRESENTATION_ENABLE_LIVE_DRAFT_EVENTS: unknown\n}\n\n// Feature flag that uses the new Live Draft Content API instead of the Listen API + Mendoza events\nexport const LIVE_DRAFT_EVENTS_ENABLED =\n typeof PRESENTATION_ENABLE_LIVE_DRAFT_EVENTS === 'string'\n ? PRESENTATION_ENABLE_LIVE_DRAFT_EVENTS === 'true'\n : false\n","import {\n combineLatest,\n from,\n isObservable,\n map,\n mergeAll,\n Observable,\n of,\n scan,\n switchMap,\n} from 'rxjs'\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Props<K extends keyof any, T> = {\n [P in K]: T | Observable<T>\n}\n\nfunction keysOf<T extends object>(value: T) {\n return Object.keys(value) as (keyof T)[]\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction setKey(source: Record<string, unknown>, key: any, value: unknown) {\n return {\n ...source,\n [key]: value,\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function props<K extends keyof any, T>(options: {wait?: boolean} = {}) {\n return (source: Observable<Props<K, T>>): Observable<Record<string, unknown>> => {\n return new Observable<Props<K, T>>((observer) => source.subscribe(observer)).pipe(\n switchMap((object) => {\n const keyObservables = keysOf(object).map((key) => {\n const value = object[key]\n return isObservable(value) ? from(value).pipe(map((val) => [key, val])) : of([key, value])\n })\n\n return options.wait\n ? combineLatest(keyObservables).pipe(\n map((pairs) => pairs.reduce((acc, [key, value]) => setKey(acc, key, value), {})),\n )\n : from(keyObservables).pipe(\n mergeAll(),\n scan((acc, [key, value]) => setKey(acc, key, value), {}),\n )\n }),\n )\n }\n}\n","/* eslint-disable @typescript-eslint/no-shadow */\nimport {get} from 'lodash'\nimport {useEffect, useMemo, useState} from 'react'\nimport {isObservable, map, type Observable, of, switchMap} from 'rxjs'\nimport {\n type DocumentStore,\n getDraftId,\n isRecord,\n isReference,\n type Previewable,\n type SanityDocument,\n useDocumentStore,\n} from 'sanity'\n\nimport {\n type DocumentLocationResolver,\n type DocumentLocationResolverObject,\n type DocumentLocationResolvers,\n type DocumentLocationsState,\n type DocumentLocationsStatus,\n} from './types'\nimport {props} from './util/props'\n\nconst INITIAL_STATE: DocumentLocationsState = {locations: []}\n\nfunction getDocumentId(value: Previewable) {\n if (isReference(value)) {\n return value._ref\n }\n return '_id' in value ? value._id : undefined\n}\n\nfunction cleanPreviewable(id: string | undefined, previewable: Previewable) {\n const clean: Record<string, unknown> = id ? {...previewable, _id: id} : {...previewable}\n\n if (clean._type === 'reference') {\n delete clean._type\n delete clean._ref\n delete clean._weak\n delete clean._dataset\n delete clean._projectId\n delete clean._strengthenOnPublish\n }\n\n return clean\n}\n\nfunction listen(id: string, fields: string[], store: DocumentStore) {\n const projection = fields.join(', ')\n const query = {\n fetch: `*[_id==$id][0]{${projection}}`,\n // TODO: is it more performant to use `||` instead of `in`?\n listen: `*[_id in [$id,$draftId]]`,\n }\n const params = {id, draftId: getDraftId(id)}\n return store.listenQuery(query, params, {\n perspective: 'previewDrafts',\n }) as Observable<SanityDocument | null>\n}\n\nfunction observeDocument(\n value: Previewable | null,\n paths: string[][],\n store: DocumentStore,\n): Observable<Record<string, unknown> | null> {\n if (!value || typeof value !== 'object') {\n return of(value)\n }\n\n const id = getDocumentId(value)\n const currentValue = cleanPreviewable(id, value)\n\n const headlessPaths = paths.filter((path) => !(path[0] in currentValue))\n\n if (id && headlessPaths.length) {\n const fields = [...new Set(headlessPaths.map((path: string[]) => path[0]))]\n return listen(id, fields, store).pipe(\n switchMap((snapshot) => {\n if (snapshot) {\n return observeDocument(snapshot, paths, store)\n }\n return of(null)\n }),\n )\n }\n\n const leads: Record<string, string[][]> = {}\n paths.forEach((path) => {\n const [head, ...tail] = path\n if (!leads[head]) {\n leads[head] = []\n }\n leads[head].push(tail)\n })\n const next = Object.keys(leads).reduce((res: Record<string, unknown>, head) => {\n const tails = leads[head].filter((tail) => tail.length > 0)\n if (tails.length === 0) {\n res[head] = isRecord(value) ? (value as Record<string, unknown>)[head] : undefined\n } else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n res[head] = observeDocument((value as any)[head], tails, store)\n }\n return res\n }, currentValue)\n\n return of(next).pipe(props({wait: true}))\n}\n\nfunction observeForLocations(\n documentId: string,\n resolver: DocumentLocationResolverObject<string>,\n documentStore: DocumentStore,\n) {\n const {select} = resolver\n const paths = Object.values(select).map((value) => String(value).split('.')) || []\n const doc = {_type: 'reference', _ref: documentId}\n return observeDocument(doc, paths, documentStore).pipe(\n map((doc) => {\n return Object.keys(select).reduce<Record<string, unknown>>((acc, key) => {\n acc[key] = get(doc, select[key])\n return acc\n }, {})\n }),\n map(resolver.resolve),\n )\n}\n\nexport function useDocumentLocations(props: {\n id: string\n resolvers?: DocumentLocationResolver | DocumentLocationResolvers\n type: string\n}): {\n state: DocumentLocationsState\n status: DocumentLocationsStatus\n} {\n const {id, resolvers, type} = props\n const documentStore = useDocumentStore()\n const [locationsState, setLocationsState] = useState<DocumentLocationsState>(INITIAL_STATE)\n\n const resolver = resolvers && (typeof resolvers === 'function' ? resolvers : resolvers[type])\n\n const [locationsStatus, setLocationsStatus] = useState<DocumentLocationsStatus>(\n resolver ? 'resolving' : 'empty',\n )\n\n const result = useMemo(() => {\n if (!resolver) return undefined\n\n // Original/advanced resolver which requires explicit use of Observables\n if (typeof resolver === 'function') {\n const params = {id, type}\n const context = {documentStore}\n const _result = resolver(params, context)\n return isObservable(_result) ? _result : of(_result)\n }\n\n // Simplified resolver pattern which abstracts away Observable logic\n if ('select' in resolver && 'resolve' in resolver) {\n return observeForLocations(id, resolver, documentStore)\n }\n\n // Resolver is explicitly provided state\n return of(resolver)\n }, [documentStore, id, resolver, type])\n\n useEffect(() => {\n const sub = result?.subscribe((state) => {\n setLocationsState(state || INITIAL_STATE)\n setLocationsStatus(state ? 'resolved' : 'empty')\n })\n\n return () => sub?.unsubscribe()\n }, [result])\n\n return {\n state: locationsState,\n status: locationsStatus,\n }\n}\n","import {defineLocaleResourceBundle} from 'sanity'\n\n/**\n * The locale namespace for the presentation tool\n *\n * @public\n */\nexport const presentationLocaleNamespace = 'presentation' as const\n\n/**\n * The default locale bundle for the presentation tool, which is US English.\n *\n * @internal\n */\nexport const presentationUsEnglishLocaleBundle = defineLocaleResourceBundle({\n locale: 'en-US',\n namespace: presentationLocaleNamespace,\n resources: () => import('./resources'),\n})\n","import {useContext} from 'react'\nimport {PresentationContext} from 'sanity/_singletons'\n\nimport {type PresentationContextValue} from './types'\n\nexport function usePresentationTool(throwOnMissingContext?: true): PresentationContextValue\nexport function usePresentationTool(throwOnMissingContext: false): PresentationContextValue | null\nexport function usePresentationTool(throwOnMissingContext = true): PresentationContextValue | null {\n const presentation = useContext(PresentationContext)\n\n if (throwOnMissingContext && !presentation) {\n throw new Error('Presentation context is missing')\n }\n\n return presentation\n}\n","import {usePresentationTool} from '../usePresentationTool'\n\nexport function useCurrentPresentationToolName(): string | undefined {\n return usePresentationTool(false)?.name ?? undefined\n}\n","import {\n ChevronRightIcon,\n DesktopIcon,\n ErrorOutlineIcon,\n InfoOutlineIcon,\n WarningOutlineIcon,\n} from '@sanity/icons'\nimport {Box, Card, Flex, Spinner, Stack, Text} from '@sanity/ui'\nimport {type ComponentType, type ReactNode, useCallback, useContext, useState} from 'react'\nimport {type ObjectSchemaType, useTranslation} from 'sanity'\nimport {PresentationContext} from 'sanity/_singletons'\nimport {useIntentLink} from 'sanity/router'\n\nimport {DEFAULT_TOOL_NAME, DEFAULT_TOOL_TITLE} from '../constants'\nimport {presentationLocaleNamespace} from '../i18n'\nimport {\n type DocumentLocation,\n type DocumentLocationsState,\n type PresentationPluginOptions,\n} from '../types'\nimport {useCurrentPresentationToolName} from './useCurrentPresentationToolName'\n\nconst TONE_ICONS: Record<'positive' | 'caution' | 'critical', ComponentType> = {\n positive: InfoOutlineIcon,\n caution: WarningOutlineIcon,\n critical: ErrorOutlineIcon,\n}\n\nexport function LocationsBanner(props: {\n documentId: string\n isResolving: boolean\n options: PresentationPluginOptions\n schemaType: ObjectSchemaType\n showPresentationTitle: boolean\n state: DocumentLocationsState\n}): ReactNode {\n const {documentId, isResolving, options, schemaType, showPresentationTitle} = props\n const {locations, message, tone} = props.state\n const len = locations?.length || 0\n\n const {t} = useTranslation(presentationLocaleNamespace)\n const presentation = useContext(PresentationContext)\n const presentationName = presentation?.name\n const [expanded, setExpanded] = useState(false)\n const toggle = useCallback(() => {\n if (!len) return\n setExpanded((v) => !v)\n }, [len])\n\n const title = isResolving\n ? t('locations-banner.resolving.text')\n : message || t('locations-banner.locations-count', {count: len})\n\n const ToneIcon = tone ? TONE_ICONS[tone] : undefined\n\n return (\n <Card padding={1} radius={2} border tone={tone}>\n <div style={{margin: -1}}>\n {!locations && (\n <Flex align=\"flex-start\" gap={3} padding={3}>\n {tone && ToneIcon && (\n <Box flex=\"none\">\n <Text size={1}>\n <ToneIcon />\n </Text>\n </Box>\n )}\n <Box flex={1}>\n <Text size={1} weight=\"medium\">\n {showPresentationTitle && <>{options.title || DEFAULT_TOOL_TITLE} &middot; </>}\n {title}\n </Text>\n </Box>\n </Flex>\n )}\n {locations && (\n <>\n <Card\n as={len ? 'button' : undefined}\n onClick={toggle}\n padding={3}\n radius={1}\n tone=\"inherit\"\n >\n <Flex gap={3}>\n <Box flex=\"none\">\n {isResolving ? (\n <Spinner size={1} />\n ) : (\n <Text size={1}>\n {len === 0 ? (\n <InfoOutlineIcon />\n ) : (\n <ChevronRightIcon\n style={{\n transform: `rotate(${expanded ? '90deg' : 0})`,\n transition: 'transform 100ms ease-in-out',\n }}\n />\n )}\n </Text>\n )}\n </Box>\n <Box flex={1}>\n <Text size={1} weight=\"medium\">\n {showPresentationTitle && <>{options.title || DEFAULT_TOOL_TITLE} &middot; </>}\n {title}\n </Text>\n </Box>\n </Flex>\n </Card>\n <Stack hidden={!expanded} marginTop={1} space={1}>\n {locations.map((l, index) => (\n <LocationItem\n active={\n (options.name || DEFAULT_TOOL_NAME) === presentationName &&\n l.href === presentation?.params.preview\n }\n documentId={documentId}\n documentType={schemaType.name}\n key={index}\n node={l}\n toolName={options.name || DEFAULT_TOOL_NAME}\n />\n ))}\n </Stack>\n </>\n )}\n </div>\n </Card>\n )\n}\n\nfunction LocationItem(props: {\n active: boolean\n documentId: string\n documentType: string\n node: DocumentLocation\n toolName: string\n}) {\n const {documentId, documentType, node, active, toolName} = props\n const presentation = useContext(PresentationContext)\n const currentPresentationToolName = useCurrentPresentationToolName()\n const isCurrentTool = toolName === currentPresentationToolName\n const navigate = presentation?.navigate\n\n const presentationLinkProps = useIntentLink({\n intent: 'edit',\n params: {\n id: documentId,\n type: documentType,\n mode: 'presentation',\n presentation: toolName,\n ...presentation?.structureParams,\n preview: node.href,\n },\n })\n\n const handleCurrentToolClick = useCallback(() => {\n navigate?.({}, {preview: node.href})\n }, [node.href, navigate])\n\n return (\n <Card\n {...(isCurrentTool ? {} : presentationLinkProps)}\n as=\"a\"\n key={node.href}\n onClick={isCurrentTool ? handleCurrentToolClick : presentationLinkProps.onClick}\n padding={3}\n radius={1}\n pressed={active}\n tone=\"inherit\"\n >\n <Flex gap={3}>\n <Box flex=\"none\">\n <Text size={1}>\n <DesktopIcon />\n </Text>\n </Box>\n <Stack flex={1} space={2}>\n <Text size={1} weight=\"medium\">\n {node.title}\n </Text>\n <Text muted size={1} textOverflow=\"ellipsis\">\n {node.href}\n </Text>\n </Stack>\n </Flex>\n </Card>\n )\n}\n","import {rem, Stack} from '@sanity/ui'\nimport {type ReactNode, useContext} from 'react'\nimport {type ObjectSchemaType, type PublishedId} from 'sanity'\nimport {PresentationDocumentContext} from 'sanity/_singletons'\nimport {styled} from 'styled-components'\n\nimport {type PresentationPluginOptions} from '../types'\nimport {useDocumentLocations} from '../useDocumentLocations'\nimport {LocationsBanner} from './LocationsBanner'\n\nconst LocationStack = styled(Stack)`\n min-height: ${rem(42)};\n\n & + &:empty {\n display: none;\n }\n`\n\nexport function PresentationDocumentHeader(props: {\n documentId: PublishedId\n options: PresentationPluginOptions\n schemaType: ObjectSchemaType\n}): ReactNode {\n const {documentId, options, schemaType} = props\n\n const context = useContext(PresentationDocumentContext)\n const {state, status} = useDocumentLocations({\n id: documentId,\n resolvers: options.resolve?.locations || options.locate,\n type: schemaType.name,\n })\n\n if ((context && context.options[0] !== options) || status === 'empty') {\n return null\n }\n\n const contextOptions = context?.options || []\n\n return (\n <LocationStack marginBottom={5} space={5}>\n <Stack space={2}>\n {contextOptions.map(\n (\n // eslint-disable-next-line @typescript-eslint/no-shadow\n options,\n idx,\n ) => (\n <LocationsBanner\n documentId={documentId}\n isResolving={status === 'resolving'}\n key={idx}\n options={options}\n schemaType={schemaType}\n showPresentationTitle={contextOptions.length > 1}\n state={state}\n />\n ),\n )}\n </Stack>\n </LocationStack>\n )\n}\n","import {type ReactNode, useCallback, useContext, useLayoutEffect, useMemo, useState} from 'react'\nimport {PresentationDocumentContext} from 'sanity/_singletons'\nimport {useEffectEvent} from 'use-effect-event'\n\nimport {type PresentationPluginOptions} from '../types'\nimport {type PresentationDocumentContextValue} from './types'\n\n/** @internal */\nexport function PresentationDocumentProvider(props: {\n children?: ReactNode\n options: PresentationPluginOptions\n}): React.JSX.Element {\n const {children, options} = props\n const parent = useContext(PresentationDocumentContext)\n const parentRegister = parent?.register\n\n const [optionsArray, setOptionsArray] = useState<PresentationPluginOptions[]>(() => [])\n\n const register = useCallback(\n // eslint-disable-next-line @typescript-eslint/no-shadow\n (options: PresentationPluginOptions) => {\n if (parentRegister) {\n return parentRegister(options)\n }\n\n setOptionsArray((prev) => [options].concat(prev))\n\n return () => {\n setOptionsArray((prev) => prev.filter((o) => o !== options))\n }\n },\n [parentRegister],\n )\n\n const context: PresentationDocumentContextValue = useMemo(\n () => ({\n options: parent?.options || optionsArray,\n register,\n }),\n [optionsArray, parent, register],\n )\n\n // eslint-disable-next-line @typescript-eslint/no-shadow\n const registerEffectEvent = useEffectEvent((options: PresentationPluginOptions) =>\n register(options),\n )\n useLayoutEffect(() => registerEffectEvent(options), [registerEffectEvent, options])\n\n return (\n <PresentationDocumentContext.Provider value={context}>\n {children}\n </PresentationDocumentContext.Provider>\n )\n}\n","import {MasterDetailIcon} from '@sanity/icons'\nimport {useContext, useMemo} from 'react'\nimport {\n defineDocumentFieldAction,\n type DocumentFieldActionGroup,\n type DocumentFieldActionItem,\n type DocumentFieldActionProps,\n isRecord,\n pathToString,\n type Tool,\n useWorkspace,\n} from 'sanity'\nimport {PresentationContext} from 'sanity/_singletons'\nimport {useRouter} from 'sanity/router'\n\nimport {DEFAULT_TOOL_NAME} from '../constants'\n\nfunction useOpenInStructureAction(\n props: DocumentFieldActionProps,\n): DocumentFieldActionItem | DocumentFieldActionGroup {\n const {documentId, documentType, path} = props\n const workspace = useWorkspace()\n const {navigateIntent} = useRouter()\n const presentation = useContext(PresentationContext)\n\n const defaultStructureTool = useMemo(\n () =>\n findStructureTool(\n workspace.tools,\n documentId,\n documentType,\n presentation?.name || DEFAULT_TOOL_NAME,\n ),\n [documentId, documentType, workspace.tools, presentation],\n )\n\n return {\n type: 'action',\n hidden: !presentation || path.length > 0 || !defaultStructureTool,\n icon: defaultStructureTool?.icon || MasterDetailIcon,\n title: `Open in ${defaultStructureTool?.title || 'Structure'}`,\n onAction() {\n navigateIntent('edit', {\n id: documentId,\n type: documentType,\n mode: 'structure',\n path: pathToString(path),\n })\n },\n renderAsButton: true,\n }\n}\n\nexport const openInStructure = defineDocumentFieldAction({\n name: 'presentation/openInStructure',\n useAction: useOpenInStructureAction,\n})\n\nfunction findStructureTool(\n tools: Tool[],\n documentId: string,\n documentType: string,\n presentationToolName?: string,\n): Tool | undefined {\n const results = tools\n .filter((t) => t.name !== presentationToolName)\n .map((t) => {\n const match = t.canHandleIntent?.(\n 'edit',\n {\n id: documentId,\n type: documentType,\n mode: 'structure',\n },\n {},\n )\n\n return {tool: t, match}\n })\n\n const modeMatches = results.filter((t) => isRecord(t.match) && t.match.mode)\n\n if (modeMatches.length > 0) {\n return modeMatches[0].tool\n }\n\n const matches = results.filter((t) => t.match)\n\n return matches[0]?.tool\n}\n","import {uuid} from '@sanity/uuid'\nimport {getPublishedId} from 'sanity'\nimport {encodeJsonParams, type RouterState, type SearchParam} from 'sanity/router'\n\nimport {type PresentationSearchParams, type PresentationStateParams} from './types'\n\nconst preservedSearchParamKeys: Array<keyof PresentationSearchParams> = [\n 'preview',\n 'perspective',\n 'viewport',\n]\n\n/**\n * @internal\n */\nexport function getIntentState(\n intent: string,\n params: Record<string, string>,\n routerState: RouterState | undefined,\n payload: unknown,\n):\n | (PresentationStateParams & {_searchParams: SearchParam[]})\n | {intent: string; params: Record<string, string>; payload: unknown} {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const {id, mode, path, presentation, type, ...searchParams} = params\n\n const preservedSearchParams = (routerState?._searchParams || [])\n // @todo Casting https://github.com/microsoft/TypeScript/issues/14520\n .filter(([key]) => preservedSearchParamKeys.includes(key as keyof PresentationSearchParams))\n .reduce((acc, [key, value]) => ({...acc, [key]: value}), {} as Record<string, string>)\n\n const _searchParams = {\n ...preservedSearchParams,\n ...searchParams,\n }\n\n if (intent === 'edit' && id) {\n _searchParams.preview =\n _searchParams.preview || new URLSearchParams(window.location.search).get('preview') || '/'\n return {\n type: type || '*',\n id: getPublishedId(id),\n path,\n _searchParams: Object.entries(_searchParams),\n }\n }\n\n if (intent === 'create') {\n _searchParams.preview =\n _searchParams.preview || new URLSearchParams(window.location.search).get('preview') || '/'\n\n if (payload && typeof payload === 'object') {\n _searchParams.templateParams = encodeJsonParams(payload as Record<string, unknown>)\n }\n\n return {\n type: type || '*',\n id: id || uuid(),\n _searchParams: Object.entries(_searchParams),\n }\n }\n return {intent, params, payload}\n}\n","import {Flex, Spinner} from '@sanity/ui'\n\nexport function PresentationSpinner(): React.JSX.Element {\n return (\n <Flex align=\"center\" direction=\"column\" height=\"fill\" justify=\"center\" style={{width: '100%'}}>\n <Spinner />\n </Flex>\n )\n}\n","import {route} from 'sanity/router'\n\n// eslint-disable-next-line camelcase\nexport const router = route.create('/', {__unsafe_disableScopedSearchParams: true}, [\n route.intents('/intent'),\n route.create(':type', [route.create(':id', [route.create(':path')])]),\n])\n","import {type SanityDocument} from '@sanity/client'\nimport {lazy, Suspense} from 'react'\nimport {definePlugin, getPublishedId, type InputProps, isDocumentSchemaType} from 'sanity'\n\nimport {DEFAULT_TOOL_ICON, DEFAULT_TOOL_NAME, EDIT_INTENT_MODE} from './constants'\nimport {PresentationDocumentHeader} from './document/PresentationDocumentHeader'\nimport {PresentationDocumentProvider} from './document/PresentationDocumentProvider'\nimport {openInStructure} from './fieldActions/openInStructure'\nimport {getIntentState} from './getIntentState'\nimport {presentationUsEnglishLocaleBundle} from './i18n'\nimport {PresentationSpinner} from './PresentationSpinner'\nimport {router} from './router'\nimport {\n type DocumentLocationResolverObject,\n type DocumentLocationsState,\n type DocumentResolver,\n type PresentationPluginOptions,\n} from './types'\n\nconst PresentationTool = lazy(() => import('./PresentationToolGrantsCheck'))\nconst BroadcastDisplayedDocument = lazy(() => import('./loader/BroadcastDisplayedDocument'))\n\n/**\n * Define locations for a given document type.\n * This function doesn't do anything itself, it is used to provide type information.\n * @param resolver - resolver that return locations for a document.\n * @public\n */\nexport function defineLocations<K extends string>(\n resolver: DocumentLocationResolverObject<K> | DocumentLocationsState,\n): typeof resolver {\n return resolver\n}\n\n/**\n * Define documents for a given location.\n * This function doesn't do anything itself, it is used to provide type information.\n * @param resolvers - resolvers that return documents.\n * @public\n */\nexport function defineDocuments(resolvers: DocumentResolver[]): typeof resolvers {\n return resolvers\n}\n\n/** @public */\nexport const presentationTool = definePlugin<PresentationPluginOptions>((options) => {\n const toolName = options.name || DEFAULT_TOOL_NAME\n\n if ('locate' in options) {\n // eslint-disable-next-line no-console\n console.warn('Presentation’s `locate` option is deprecated. Use `resolve.locations` instead.')\n }\n\n const hasLocationsResolver = !!(options.resolve?.locations || options.locate)\n\n function PresentationDocumentInput(props: InputProps) {\n const value = props.value as SanityDocument\n const documentId = value?._id ? getPublishedId(value?._id) : undefined\n\n if (isDocumentSchemaType(props.schemaType)) {\n return (\n <PresentationDocumentProvider options={options}>\n {hasLocationsResolver && documentId && (\n <PresentationDocumentHeader\n documentId={documentId}\n options={options}\n schemaType={props.schemaType}\n />\n )}\n <Suspense fallback={<PresentationSpinner />}>{props.renderDefault(props)}</Suspense>\n <Suspense key=\"broadcast-displayed-document\">\n <BroadcastDisplayedDocument key={documentId} value={value} />\n </Suspense>\n </PresentationDocumentProvider>\n )\n }\n\n return props.renderDefault(props)\n }\n\n function canHandleCreateIntent(params: Record<string, unknown>) {\n // We can't handle create intents without a `type` parameter\n if (!('type' in params)) {\n return false\n }\n\n if ('presentation' in params && params.presentation !== toolName) {\n return false\n }\n\n return 'template' in params ? {template: true} : true\n }\n\n function canHandleEditIntent(params: Record<string, unknown>) {\n // We can't handle edit intents without `type` or `id` parameters\n if (!('type' in params) || !('id' in params)) {\n return false\n }\n\n if ('presentation' in params && params.presentation !== toolName) {\n return false\n }\n\n return 'mode' in params ? {mode: params.mode === EDIT_INTENT_MODE} : true\n }\n\n return {\n i18n: {\n bundles: [presentationUsEnglishLocaleBundle],\n },\n document: {\n unstable_fieldActions: (prev) => {\n return [\n ...prev.filter((a) => a.name !== openInStructure.name), // prevent duplication\n openInStructure,\n ]\n },\n },\n\n form: {\n components: {\n input: PresentationDocumentInput,\n },\n },\n\n tools: [\n {\n icon: options.icon || DEFAULT_TOOL_ICON,\n name: toolName,\n title: options.title,\n component: PresentationTool,\n options,\n canHandleIntent(intent, params) {\n if (intent === 'create') return canHandleCreateIntent(params)\n if (intent === 'edit') return canHandleEditIntent(params)\n return false\n },\n getIntentState,\n router,\n __internalApplicationType: 'sanity/presentation',\n },\n ],\n }\n})\n","import {type Dispatch, type Reducer} from 'react'\nimport {boolean, fallback, object, parse, picklist} from 'valibot'\n\n/** @public */\nexport interface PresentationState {\n mainDocument: boolean\n iframe: {\n status: 'loading' | 'loaded' | 'refreshing' | 'reloading'\n }\n visualEditing: {\n overlaysEnabled: boolean\n }\n}\n\n/** @public */\nexport const ACTION_IFRAME_LOADED = 'ACTION_IFRAME_LOADED'\n/** @public */\nexport const ACTION_IFRAME_REFRESH = 'ACTION_IFRAME_REFRESH'\n/** @public */\nexport const ACTION_IFRAME_RELOAD = 'ACTION_IFRAME_RELOAD'\n/** @public */\nexport const ACTION_VISUAL_EDITING_OVERLAYS_TOGGLE = 'ACTION_VISUAL_EDITING_OVERLAYS_TOGGLE'\n\n/** @public */\nexport interface IframeLoadedAction {\n type: typeof ACTION_IFRAME_LOADED\n}\n/** @public */\nexport interface IframeRefreshAction {\n type: typeof ACTION_IFRAME_REFRESH\n}\n/** @public */\nexport interface IframeReloadAction {\n type: typeof ACTION_IFRAME_RELOAD\n}\n/** @public */\nexport interface VisualEditingOverlaysToggleAction {\n type: typeof ACTION_VISUAL_EDITING_OVERLAYS_TOGGLE\n enabled: boolean\n}\n\n/** @public */\nexport type PresentationAction =\n | IframeLoadedAction\n | IframeRefreshAction\n | IframeReloadAction\n | VisualEditingOverlaysToggleAction\n\nexport const presentationReducer: Reducer<\n Readonly<PresentationState>,\n Readonly<PresentationAction>\n> = (state, action) => {\n switch (action.type) {\n case ACTION_IFRAME_LOADED:\n return state.iframe.status === 'loaded'\n ? state\n : {\n ...state,\n iframe: {\n ...state.iframe,\n status: 'loaded',\n },\n }\n case ACTION_IFRAME_REFRESH:\n return state.iframe.status === 'refreshing'\n ? state\n : {\n ...state,\n iframe: {\n ...state.iframe,\n status: 'refreshing',\n },\n }\n case ACTION_IFRAME_RELOAD:\n return state.iframe.status === 'reloading'\n ? state\n : {\n ...state,\n iframe: {\n ...state.iframe,\n status: 'reloading',\n },\n }\n case ACTION_VISUAL_EDITING_OVERLAYS_TOGGLE:\n return toggleVisualEditingOverlays(state, action)\n default:\n return state\n }\n}\n\nconst toggleVisualEditingOverlays: Reducer<\n Readonly<PresentationState>,\n Readonly<VisualEditingOverlaysToggleAction>\n> = (state, action) => {\n if (state.visualEditing.overlaysEnabled === action.enabled) return state\n return {\n ...state,\n visualEditing: {\n ...state.visualEditing,\n overlaysEnabled: action.enabled,\n },\n }\n}\n\nconst mainDocumentSchema = fallback(boolean(), false)\n\nconst iframeStatusSchema = picklist(['loading', 'loaded', 'refreshing', 'reloading'])\n\nconst initStateSchema = object({\n mainDocument: mainDocumentSchema,\n iframe: object({\n status: iframeStatusSchema,\n }),\n visualEditing: object({overlaysEnabled: boolean()}),\n})\n\nconst INITIAL_PRESENTATION_STATE = {\n mainDocument: false,\n iframe: {\n status: 'loading',\n },\n visualEditing: {\n overlaysEnabled: false,\n },\n} as const satisfies PresentationState\n\nexport function presentationReducerInit(\n state: Readonly<Partial<PresentationState>>,\n): Readonly<PresentationState> {\n return parse(initStateSchema, {...INITIAL_PRESENTATION_STATE, ...state})\n}\n\n/** @public */\nexport type DispatchPresentationAction = Dispatch<Readonly<PresentationAction>>\n","import {useContext} from 'react'\nimport {PresentationNavigateContext} from 'sanity/_singletons'\n\nimport {type PresentationNavigateContextValue} from './types'\n\n/** @public */\nexport function usePresentationNavigate(): PresentationNavigateContextValue {\n const navigate = useContext(PresentationNavigateContext)\n\n if (!navigate) {\n throw new Error('Presentation navigate context is missing')\n }\n\n return navigate\n}\n\nexport type {PresentationNavigateContextValue}\n","import {useContext} from 'react'\nimport {PresentationParamsContext} from 'sanity/_singletons'\n\nimport {type PresentationParamsContextValue} from './types'\n\n/** @public */\nexport function usePresentationParams(throwOnMissingContext?: true): PresentationParamsContextValue\n/** @public */\nexport function usePresentationParams(\n throwOnMissingContext: false,\n): PresentationParamsContextValue | null\n/** @public */\nexport function usePresentationParams(\n throwOnMissingContext = true,\n): PresentationParamsContextValue | null {\n const params = useContext(PresentationParamsContext)\n\n if (throwOnMissingContext && !params) {\n throw new Error('Presentation params context is missing')\n }\n\n return params\n}\n"],"names":["useSharedState","key","value","$","_c","context","useContext","PresentationSharedStateContext","Error","setValue","t0","t1","useEffect","DEFAULT_TOOL_ICON","ComposeIcon","DEFAULT_TOOL_NAME","DEFAULT_TOOL_TITLE","EDIT_INTENT_MODE","MAX_TIME_TO_OVERLAYS_CONNECTION","API_VERSION","MIN_LOADER_QUERY_LISTEN_HEARTBEAT_INTERVAL","LIVE_QUERY_CACHE_BATCH_SIZE","LIVE_QUERY_CACHE_SIZE","POPUP_CHECK_INTERVAL","keysOf","Object","keys","setKey","source","props","options","Observable","observer","subscribe","pipe","switchMap","object","keyObservables","map","isObservable","from","val","of","wait","combineLatest","pairs","reduce","acc","mergeAll","scan","INITIAL_STATE","locations","getDocumentId","isReference","_ref","_id","undefined","cleanPreviewable","id","previewable","clean","_type","_weak","_dataset","_projectId","_strengthenOnPublish","listen","fields","store","query","fetch","join","params","draftId","getDraftId","listenQuery","perspective","observeDocument","paths","currentValue","headlessPaths","filter","path","length","Set","snapshot","leads","forEach","head","tail","push","next","res","tails","isRecord","observeForLocations","documentId","resolver","documentStore","select","values","String","split","doc","get","resolve","useDocumentLocations","resolvers","type","useDocumentStore","locationsState","setLocationsState","useState","locationsStatus","setLocationsStatus","bb0","_result","result","t2","sub","state","unsubscribe","t3","status","presentationLocaleNamespace","presentationUsEnglishLocaleBundle","defineLocaleResourceBundle","locale","namespace","resources","usePresentationTool","throwOnMissingContext","presentation","PresentationContext","useCurrentPresentationToolName","name","TONE_ICONS","positive","InfoOutlineIcon","caution","WarningOutlineIcon","critical","ErrorOutlineIcon","LocationsBanner","isResolving","schemaType","showPresentationTitle","message","tone","len","t","useTranslation","presentationName","expanded","setExpanded","_temp","toggle","count","title","ToneIcon","Symbol","for","margin","t4","transform","transition","l","index","href","preview","t5","t6","v","LocationItem","documentType","node","active","toolName","currentPresentationToolName","isCurrentTool","navigate","structureParams","intent","mode","presentationLinkProps","useIntentLink","handleCurrentToolClick","onClick","t7","t8","t9","LocationStack","styled","Stack","rem","PresentationDocumentHeader","PresentationDocumentContext","locate","contextOptions","options_0","idx","PresentationDocumentProvider","children","parent","parentRegister","register","optionsArray","setOptionsArray","prev","concat","prev_0","o","options_1","registerEffectEvent","useEffectEvent","useLayoutEffect","useOpenInStructureAction","workspace","useWorkspace","navigateIntent","useRouter","tools","findStructureTool","defaultStructureTool","icon","MasterDetailIcon","hidden","onAction","pathToString","renderAsButton","openInStructure","defineDocumentFieldAction","useAction","presentationToolName","results","match","canHandleIntent","tool","modeMatches","preservedSearchParamKeys","getIntentState","routerState","payload","searchParams","_searchParams","includes","URLSearchParams","window","location","search","getPublishedId","entries","templateParams","encodeJsonParams","uuid","PresentationSpinner","width","router","route","create","__unsafe_disableScopedSearchParams","intents","PresentationTool","lazy","BroadcastDisplayedDocument","defineLocations","defineDocuments","presentationTool","definePlugin","console","warn","hasLocationsResolver","PresentationDocumentInput","isDocumentSchemaType","renderDefault","canHandleCreateIntent","template","canHandleEditIntent","i18n","bundles","document","unstable_fieldActions","a","form","components","input","component","__internalApplicationType","ACTION_IFRAME_LOADED","ACTION_IFRAME_REFRESH","ACTION_IFRAME_RELOAD","ACTION_VISUAL_EDITING_OVERLAYS_TOGGLE","presentationReducer","action","iframe","toggleVisualEditingOverlays","visualEditing","overlaysEnabled","enabled","mainDocumentSchema","fallback","boolean","iframeStatusSchema","picklist","initStateSchema","mainDocument","INITIAL_PRESENTATION_STATE","presentationReducerInit","parse","usePresentationNavigate","PresentationNavigateContext","usePresentationParams","PresentationParamsContext"],"mappings":"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"}
1
+ {"version":3,"file":"presentation.esm.js","sources":["../../src/presentation/overlays/useSharedState.ts","../../src/presentation/constants.ts","../../src/presentation/util/props.ts","../../src/presentation/useDocumentLocations.ts","../../src/presentation/i18n/index.ts","../../src/presentation/usePresentationTool.ts","../../src/presentation/document/useCurrentPresentationToolName.ts","../../src/presentation/document/LocationsBanner.tsx","../../src/presentation/document/PresentationDocumentHeader.tsx","../../src/presentation/document/PresentationDocumentProvider.tsx","../../src/presentation/fieldActions/openInStructure.ts","../../src/presentation/getIntentState.ts","../../src/presentation/PresentationSpinner.tsx","../../src/presentation/router.ts","../../src/presentation/plugin.tsx","../../src/presentation/reducers/presentationReducer.ts","../../src/presentation/usePresentationNavigate.ts","../../src/presentation/usePresentationParams.ts"],"sourcesContent":["import {type Serializable} from '@sanity/presentation-comlink'\nimport {useContext, useEffect} from 'react'\nimport {PresentationSharedStateContext} from 'sanity/_singletons'\n\n/** @public */\nexport const useSharedState = (key: string, value: Serializable): undefined => {\n const context = useContext(PresentationSharedStateContext)\n\n if (!context) {\n throw new Error('Preview Snapshots context is missing')\n }\n\n const {setValue} = context\n\n useEffect(() => {\n setValue(key, value)\n }, [key, value, setValue])\n\n return undefined\n}\n","import {ComposeIcon} from '@sanity/icons'\nimport {apiVersion} from '@sanity/preview-url-secret/constants'\n\nexport const DEFAULT_TOOL_ICON = ComposeIcon\nexport const DEFAULT_TOOL_NAME = 'presentation'\nexport const DEFAULT_TOOL_TITLE = 'Presentation'\n\nexport const EDIT_INTENT_MODE = 'presentation'\n\n// How long we wait until an iframe is loaded until we consider it to be slow and possibly failed\nexport const MAX_TIME_TO_OVERLAYS_CONNECTION = 3_000 // ms\n\n// The API version to use when using `@sanity/client`\nexport const API_VERSION = apiVersion\n\n// Heartbeats shouldn't fire on intervals that are so short it causes performance issues\nexport const MIN_LOADER_QUERY_LISTEN_HEARTBEAT_INTERVAL = 1000 // ms\n\n// How often the list over loader queries should be garbage collected\nexport const LOADER_QUERY_GC_INTERVAL = 30_000 // ms\n\n// The interval at which we check if existing popups have been closed\nexport const POPUP_CHECK_INTERVAL = 1000 // ms\n","import {\n combineLatest,\n from,\n isObservable,\n map,\n mergeAll,\n Observable,\n of,\n scan,\n switchMap,\n} from 'rxjs'\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Props<K extends keyof any, T> = {\n [P in K]: T | Observable<T>\n}\n\nfunction keysOf<T extends object>(value: T) {\n return Object.keys(value) as (keyof T)[]\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction setKey(source: Record<string, unknown>, key: any, value: unknown) {\n return {\n ...source,\n [key]: value,\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function props<K extends keyof any, T>(options: {wait?: boolean} = {}) {\n return (source: Observable<Props<K, T>>): Observable<Record<string, unknown>> => {\n return new Observable<Props<K, T>>((observer) => source.subscribe(observer)).pipe(\n switchMap((object) => {\n const keyObservables = keysOf(object).map((key) => {\n const value = object[key]\n return isObservable(value) ? from(value).pipe(map((val) => [key, val])) : of([key, value])\n })\n\n return options.wait\n ? combineLatest(keyObservables).pipe(\n map((pairs) => pairs.reduce((acc, [key, value]) => setKey(acc, key, value), {})),\n )\n : from(keyObservables).pipe(\n mergeAll(),\n scan((acc, [key, value]) => setKey(acc, key, value), {}),\n )\n }),\n )\n }\n}\n","/* eslint-disable @typescript-eslint/no-shadow */\nimport {get} from 'lodash'\nimport {useEffect, useMemo, useState} from 'react'\nimport {isObservable, map, type Observable, of, switchMap} from 'rxjs'\nimport {\n type DocumentStore,\n getDraftId,\n isRecord,\n isReference,\n type Previewable,\n type SanityDocument,\n useDocumentStore,\n} from 'sanity'\n\nimport {\n type DocumentLocationResolver,\n type DocumentLocationResolverObject,\n type DocumentLocationResolvers,\n type DocumentLocationsState,\n type DocumentLocationsStatus,\n} from './types'\nimport {props} from './util/props'\n\nconst INITIAL_STATE: DocumentLocationsState = {locations: []}\n\nfunction getDocumentId(value: Previewable) {\n if (isReference(value)) {\n return value._ref\n }\n return '_id' in value ? value._id : undefined\n}\n\nfunction cleanPreviewable(id: string | undefined, previewable: Previewable) {\n const clean: Record<string, unknown> = id ? {...previewable, _id: id} : {...previewable}\n\n if (clean._type === 'reference') {\n delete clean._type\n delete clean._ref\n delete clean._weak\n delete clean._dataset\n delete clean._projectId\n delete clean._strengthenOnPublish\n }\n\n return clean\n}\n\nfunction listen(id: string, fields: string[], store: DocumentStore) {\n const projection = fields.join(', ')\n const query = {\n fetch: `*[_id==$id][0]{${projection}}`,\n // TODO: is it more performant to use `||` instead of `in`?\n listen: `*[_id in [$id,$draftId]]`,\n }\n const params = {id, draftId: getDraftId(id)}\n return store.listenQuery(query, params, {\n perspective: 'previewDrafts',\n }) as Observable<SanityDocument | null>\n}\n\nfunction observeDocument(\n value: Previewable | null,\n paths: string[][],\n store: DocumentStore,\n): Observable<Record<string, unknown> | null> {\n if (!value || typeof value !== 'object') {\n return of(value)\n }\n\n const id = getDocumentId(value)\n const currentValue = cleanPreviewable(id, value)\n\n const headlessPaths = paths.filter((path) => !(path[0] in currentValue))\n\n if (id && headlessPaths.length) {\n const fields = [...new Set(headlessPaths.map((path: string[]) => path[0]))]\n return listen(id, fields, store).pipe(\n switchMap((snapshot) => {\n if (snapshot) {\n return observeDocument(snapshot, paths, store)\n }\n return of(null)\n }),\n )\n }\n\n const leads: Record<string, string[][]> = {}\n paths.forEach((path) => {\n const [head, ...tail] = path\n if (!leads[head]) {\n leads[head] = []\n }\n leads[head].push(tail)\n })\n const next = Object.keys(leads).reduce((res: Record<string, unknown>, head) => {\n const tails = leads[head].filter((tail) => tail.length > 0)\n if (tails.length === 0) {\n res[head] = isRecord(value) ? (value as Record<string, unknown>)[head] : undefined\n } else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n res[head] = observeDocument((value as any)[head], tails, store)\n }\n return res\n }, currentValue)\n\n return of(next).pipe(props({wait: true}))\n}\n\nfunction observeForLocations(\n documentId: string,\n resolver: DocumentLocationResolverObject<string>,\n documentStore: DocumentStore,\n) {\n const {select} = resolver\n const paths = Object.values(select).map((value) => String(value).split('.')) || []\n const doc = {_type: 'reference', _ref: documentId}\n return observeDocument(doc, paths, documentStore).pipe(\n map((doc) => {\n return Object.keys(select).reduce<Record<string, unknown>>((acc, key) => {\n acc[key] = get(doc, select[key])\n return acc\n }, {})\n }),\n map(resolver.resolve),\n )\n}\n\nexport function useDocumentLocations(props: {\n id: string\n resolvers?: DocumentLocationResolver | DocumentLocationResolvers\n type: string\n}): {\n state: DocumentLocationsState\n status: DocumentLocationsStatus\n} {\n const {id, resolvers, type} = props\n const documentStore = useDocumentStore()\n const [locationsState, setLocationsState] = useState<DocumentLocationsState>(INITIAL_STATE)\n\n const resolver = resolvers && (typeof resolvers === 'function' ? resolvers : resolvers[type])\n\n const [locationsStatus, setLocationsStatus] = useState<DocumentLocationsStatus>(\n resolver ? 'resolving' : 'empty',\n )\n\n const result = useMemo(() => {\n if (!resolver) return undefined\n\n // Original/advanced resolver which requires explicit use of Observables\n if (typeof resolver === 'function') {\n const params = {id, type}\n const context = {documentStore}\n const _result = resolver(params, context)\n return isObservable(_result) ? _result : of(_result)\n }\n\n // Simplified resolver pattern which abstracts away Observable logic\n if ('select' in resolver && 'resolve' in resolver) {\n return observeForLocations(id, resolver, documentStore)\n }\n\n // Resolver is explicitly provided state\n return of(resolver)\n }, [documentStore, id, resolver, type])\n\n useEffect(() => {\n const sub = result?.subscribe((state) => {\n setLocationsState(state || INITIAL_STATE)\n setLocationsStatus(state ? 'resolved' : 'empty')\n })\n\n return () => sub?.unsubscribe()\n }, [result])\n\n return {\n state: locationsState,\n status: locationsStatus,\n }\n}\n","import {defineLocaleResourceBundle} from 'sanity'\n\n/**\n * The locale namespace for the presentation tool\n *\n * @public\n */\nexport const presentationLocaleNamespace = 'presentation' as const\n\n/**\n * The default locale bundle for the presentation tool, which is US English.\n *\n * @internal\n */\nexport const presentationUsEnglishLocaleBundle = defineLocaleResourceBundle({\n locale: 'en-US',\n namespace: presentationLocaleNamespace,\n resources: () => import('./resources'),\n})\n","import {useContext} from 'react'\nimport {PresentationContext} from 'sanity/_singletons'\n\nimport {type PresentationContextValue} from './types'\n\nexport function usePresentationTool(throwOnMissingContext?: true): PresentationContextValue\nexport function usePresentationTool(throwOnMissingContext: false): PresentationContextValue | null\nexport function usePresentationTool(throwOnMissingContext = true): PresentationContextValue | null {\n const presentation = useContext(PresentationContext)\n\n if (throwOnMissingContext && !presentation) {\n throw new Error('Presentation context is missing')\n }\n\n return presentation\n}\n","import {usePresentationTool} from '../usePresentationTool'\n\nexport function useCurrentPresentationToolName(): string | undefined {\n return usePresentationTool(false)?.name ?? undefined\n}\n","import {\n ChevronRightIcon,\n DesktopIcon,\n ErrorOutlineIcon,\n InfoOutlineIcon,\n WarningOutlineIcon,\n} from '@sanity/icons'\nimport {Box, Card, Flex, Spinner, Stack, Text} from '@sanity/ui'\nimport {type ComponentType, type ReactNode, useCallback, useContext, useState} from 'react'\nimport {type ObjectSchemaType, useTranslation} from 'sanity'\nimport {PresentationContext} from 'sanity/_singletons'\nimport {useIntentLink} from 'sanity/router'\n\nimport {DEFAULT_TOOL_NAME, DEFAULT_TOOL_TITLE} from '../constants'\nimport {presentationLocaleNamespace} from '../i18n'\nimport {\n type DocumentLocation,\n type DocumentLocationsState,\n type PresentationPluginOptions,\n} from '../types'\nimport {useCurrentPresentationToolName} from './useCurrentPresentationToolName'\n\nconst TONE_ICONS: Record<'positive' | 'caution' | 'critical', ComponentType> = {\n positive: InfoOutlineIcon,\n caution: WarningOutlineIcon,\n critical: ErrorOutlineIcon,\n}\n\nexport function LocationsBanner(props: {\n documentId: string\n isResolving: boolean\n options: PresentationPluginOptions\n schemaType: ObjectSchemaType\n showPresentationTitle: boolean\n state: DocumentLocationsState\n}): ReactNode {\n const {documentId, isResolving, options, schemaType, showPresentationTitle} = props\n const {locations, message, tone} = props.state\n const len = locations?.length || 0\n\n const {t} = useTranslation(presentationLocaleNamespace)\n const presentation = useContext(PresentationContext)\n const presentationName = presentation?.name\n const [expanded, setExpanded] = useState(false)\n const toggle = useCallback(() => {\n if (!len) return\n setExpanded((v) => !v)\n }, [len])\n\n const title = isResolving\n ? t('locations-banner.resolving.text')\n : message || t('locations-banner.locations-count', {count: len})\n\n const ToneIcon = tone ? TONE_ICONS[tone] : undefined\n\n return (\n <Card padding={1} radius={2} border tone={tone}>\n <div style={{margin: -1}}>\n {!locations && (\n <Flex align=\"flex-start\" gap={3} padding={3}>\n {tone && ToneIcon && (\n <Box flex=\"none\">\n <Text size={1}>\n <ToneIcon />\n </Text>\n </Box>\n )}\n <Box flex={1}>\n <Text size={1} weight=\"medium\">\n {showPresentationTitle && <>{options.title || DEFAULT_TOOL_TITLE} &middot; </>}\n {title}\n </Text>\n </Box>\n </Flex>\n )}\n {locations && (\n <>\n <Card\n as={len ? 'button' : undefined}\n onClick={toggle}\n padding={3}\n radius={1}\n tone=\"inherit\"\n >\n <Flex gap={3}>\n <Box flex=\"none\">\n {isResolving ? (\n <Spinner size={1} />\n ) : (\n <Text size={1}>\n {len === 0 ? (\n <InfoOutlineIcon />\n ) : (\n <ChevronRightIcon\n style={{\n transform: `rotate(${expanded ? '90deg' : 0})`,\n transition: 'transform 100ms ease-in-out',\n }}\n />\n )}\n </Text>\n )}\n </Box>\n <Box flex={1}>\n <Text size={1} weight=\"medium\">\n {showPresentationTitle && <>{options.title || DEFAULT_TOOL_TITLE} &middot; </>}\n {title}\n </Text>\n </Box>\n </Flex>\n </Card>\n <Stack hidden={!expanded} marginTop={1} space={1}>\n {locations.map((l, index) => (\n <LocationItem\n active={\n (options.name || DEFAULT_TOOL_NAME) === presentationName &&\n l.href === presentation?.params.preview\n }\n documentId={documentId}\n documentType={schemaType.name}\n key={index}\n node={l}\n toolName={options.name || DEFAULT_TOOL_NAME}\n />\n ))}\n </Stack>\n </>\n )}\n </div>\n </Card>\n )\n}\n\nfunction LocationItem(props: {\n active: boolean\n documentId: string\n documentType: string\n node: DocumentLocation\n toolName: string\n}) {\n const {documentId, documentType, node, active, toolName} = props\n const presentation = useContext(PresentationContext)\n const currentPresentationToolName = useCurrentPresentationToolName()\n const isCurrentTool = toolName === currentPresentationToolName\n const navigate = presentation?.navigate\n\n const presentationLinkProps = useIntentLink({\n intent: 'edit',\n params: {\n id: documentId,\n type: documentType,\n mode: 'presentation',\n presentation: toolName,\n ...presentation?.structureParams,\n preview: node.href,\n },\n })\n\n const handleCurrentToolClick = useCallback(() => {\n navigate?.({}, {preview: node.href})\n }, [node.href, navigate])\n\n return (\n <Card\n {...(isCurrentTool ? {} : presentationLinkProps)}\n as=\"a\"\n key={node.href}\n onClick={isCurrentTool ? handleCurrentToolClick : presentationLinkProps.onClick}\n padding={3}\n radius={1}\n pressed={active}\n tone=\"inherit\"\n >\n <Flex gap={3}>\n <Box flex=\"none\">\n <Text size={1}>\n <DesktopIcon />\n </Text>\n </Box>\n <Stack flex={1} space={2}>\n <Text size={1} weight=\"medium\">\n {node.title}\n </Text>\n <Text muted size={1} textOverflow=\"ellipsis\">\n {node.href}\n </Text>\n </Stack>\n </Flex>\n </Card>\n )\n}\n","import {rem, Stack} from '@sanity/ui'\nimport {type ReactNode, useContext} from 'react'\nimport {type ObjectSchemaType, type PublishedId} from 'sanity'\nimport {PresentationDocumentContext} from 'sanity/_singletons'\nimport {styled} from 'styled-components'\n\nimport {type PresentationPluginOptions} from '../types'\nimport {useDocumentLocations} from '../useDocumentLocations'\nimport {LocationsBanner} from './LocationsBanner'\n\nconst LocationStack = styled(Stack)`\n min-height: ${rem(42)};\n\n & + &:empty {\n display: none;\n }\n`\n\nexport function PresentationDocumentHeader(props: {\n documentId: PublishedId\n options: PresentationPluginOptions\n schemaType: ObjectSchemaType\n}): ReactNode {\n const {documentId, options, schemaType} = props\n\n const context = useContext(PresentationDocumentContext)\n const {state, status} = useDocumentLocations({\n id: documentId,\n resolvers: options.resolve?.locations || options.locate,\n type: schemaType.name,\n })\n\n if ((context && context.options[0] !== options) || status === 'empty') {\n return null\n }\n\n const contextOptions = context?.options || []\n\n return (\n <LocationStack marginBottom={5} space={5}>\n <Stack space={2}>\n {contextOptions.map(\n (\n // eslint-disable-next-line @typescript-eslint/no-shadow\n options,\n idx,\n ) => (\n <LocationsBanner\n documentId={documentId}\n isResolving={status === 'resolving'}\n key={idx}\n options={options}\n schemaType={schemaType}\n showPresentationTitle={contextOptions.length > 1}\n state={state}\n />\n ),\n )}\n </Stack>\n </LocationStack>\n )\n}\n","import {type ReactNode, useCallback, useContext, useLayoutEffect, useMemo, useState} from 'react'\nimport {PresentationDocumentContext} from 'sanity/_singletons'\nimport {useEffectEvent} from 'use-effect-event'\n\nimport {type PresentationPluginOptions} from '../types'\nimport {type PresentationDocumentContextValue} from './types'\n\n/** @internal */\nexport function PresentationDocumentProvider(props: {\n children?: ReactNode\n options: PresentationPluginOptions\n}): React.JSX.Element {\n const {children, options} = props\n const parent = useContext(PresentationDocumentContext)\n const parentRegister = parent?.register\n\n const [optionsArray, setOptionsArray] = useState<PresentationPluginOptions[]>(() => [])\n\n const register = useCallback(\n // eslint-disable-next-line @typescript-eslint/no-shadow\n (options: PresentationPluginOptions) => {\n if (parentRegister) {\n return parentRegister(options)\n }\n\n setOptionsArray((prev) => [options].concat(prev))\n\n return () => {\n setOptionsArray((prev) => prev.filter((o) => o !== options))\n }\n },\n [parentRegister],\n )\n\n const context: PresentationDocumentContextValue = useMemo(\n () => ({\n options: parent?.options || optionsArray,\n register,\n }),\n [optionsArray, parent, register],\n )\n\n // eslint-disable-next-line @typescript-eslint/no-shadow\n const registerEffectEvent = useEffectEvent((options: PresentationPluginOptions) =>\n register(options),\n )\n useLayoutEffect(() => registerEffectEvent(options), [registerEffectEvent, options])\n\n return (\n <PresentationDocumentContext.Provider value={context}>\n {children}\n </PresentationDocumentContext.Provider>\n )\n}\n","import {MasterDetailIcon} from '@sanity/icons'\nimport {useContext, useMemo} from 'react'\nimport {\n defineDocumentFieldAction,\n type DocumentFieldActionGroup,\n type DocumentFieldActionItem,\n type DocumentFieldActionProps,\n isRecord,\n pathToString,\n type Tool,\n useWorkspace,\n} from 'sanity'\nimport {PresentationContext} from 'sanity/_singletons'\nimport {useRouter} from 'sanity/router'\n\nimport {DEFAULT_TOOL_NAME} from '../constants'\n\nfunction useOpenInStructureAction(\n props: DocumentFieldActionProps,\n): DocumentFieldActionItem | DocumentFieldActionGroup {\n const {documentId, documentType, path} = props\n const workspace = useWorkspace()\n const {navigateIntent} = useRouter()\n const presentation = useContext(PresentationContext)\n\n const defaultStructureTool = useMemo(\n () =>\n findStructureTool(\n workspace.tools,\n documentId,\n documentType,\n presentation?.name || DEFAULT_TOOL_NAME,\n ),\n [documentId, documentType, workspace.tools, presentation],\n )\n\n return {\n type: 'action',\n hidden: !presentation || path.length > 0 || !defaultStructureTool,\n icon: defaultStructureTool?.icon || MasterDetailIcon,\n title: `Open in ${defaultStructureTool?.title || 'Structure'}`,\n onAction() {\n navigateIntent('edit', {\n id: documentId,\n type: documentType,\n mode: 'structure',\n path: pathToString(path),\n })\n },\n renderAsButton: true,\n }\n}\n\nexport const openInStructure = defineDocumentFieldAction({\n name: 'presentation/openInStructure',\n useAction: useOpenInStructureAction,\n})\n\nfunction findStructureTool(\n tools: Tool[],\n documentId: string,\n documentType: string,\n presentationToolName?: string,\n): Tool | undefined {\n const results = tools\n .filter((t) => t.name !== presentationToolName)\n .map((t) => {\n const match = t.canHandleIntent?.(\n 'edit',\n {\n id: documentId,\n type: documentType,\n mode: 'structure',\n },\n {},\n )\n\n return {tool: t, match}\n })\n\n const modeMatches = results.filter((t) => isRecord(t.match) && t.match.mode)\n\n if (modeMatches.length > 0) {\n return modeMatches[0].tool\n }\n\n const matches = results.filter((t) => t.match)\n\n return matches[0]?.tool\n}\n","import {uuid} from '@sanity/uuid'\nimport {getPublishedId} from 'sanity'\nimport {encodeJsonParams, type RouterState, type SearchParam} from 'sanity/router'\n\nimport {type PresentationSearchParams, type PresentationStateParams} from './types'\n\nconst preservedSearchParamKeys: Array<keyof PresentationSearchParams> = [\n 'preview',\n 'perspective',\n 'viewport',\n]\n\n/**\n * @internal\n */\nexport function getIntentState(\n intent: string,\n params: Record<string, string>,\n routerState: RouterState | undefined,\n payload: unknown,\n):\n | (PresentationStateParams & {_searchParams: SearchParam[]})\n | {intent: string; params: Record<string, string>; payload: unknown} {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const {id, mode, path, presentation, type, ...searchParams} = params\n\n const preservedSearchParams = (routerState?._searchParams || [])\n // @todo Casting https://github.com/microsoft/TypeScript/issues/14520\n .filter(([key]) => preservedSearchParamKeys.includes(key as keyof PresentationSearchParams))\n .reduce((acc, [key, value]) => ({...acc, [key]: value}), {} as Record<string, string>)\n\n const _searchParams = {\n ...preservedSearchParams,\n ...searchParams,\n }\n\n if (intent === 'edit' && id) {\n _searchParams.preview =\n _searchParams.preview || new URLSearchParams(window.location.search).get('preview') || '/'\n return {\n type: type || '*',\n id: getPublishedId(id),\n path,\n _searchParams: Object.entries(_searchParams),\n }\n }\n\n if (intent === 'create') {\n _searchParams.preview =\n _searchParams.preview || new URLSearchParams(window.location.search).get('preview') || '/'\n\n if (payload && typeof payload === 'object') {\n _searchParams.templateParams = encodeJsonParams(payload as Record<string, unknown>)\n }\n\n return {\n type: type || '*',\n id: id || uuid(),\n _searchParams: Object.entries(_searchParams),\n }\n }\n return {intent, params, payload}\n}\n","import {Flex, Spinner} from '@sanity/ui'\n\nexport function PresentationSpinner(): React.JSX.Element {\n return (\n <Flex align=\"center\" direction=\"column\" height=\"fill\" justify=\"center\" style={{width: '100%'}}>\n <Spinner />\n </Flex>\n )\n}\n","import {route} from 'sanity/router'\n\n// eslint-disable-next-line camelcase\nexport const router = route.create('/', {__unsafe_disableScopedSearchParams: true}, [\n route.intents('/intent'),\n route.create(':type', [route.create(':id', [route.create(':path')])]),\n])\n","import {type SanityDocument} from '@sanity/client'\nimport {lazy, Suspense} from 'react'\nimport {definePlugin, getPublishedId, type InputProps, isDocumentSchemaType} from 'sanity'\n\nimport {DEFAULT_TOOL_ICON, DEFAULT_TOOL_NAME, EDIT_INTENT_MODE} from './constants'\nimport {PresentationDocumentHeader} from './document/PresentationDocumentHeader'\nimport {PresentationDocumentProvider} from './document/PresentationDocumentProvider'\nimport {openInStructure} from './fieldActions/openInStructure'\nimport {getIntentState} from './getIntentState'\nimport {presentationUsEnglishLocaleBundle} from './i18n'\nimport {PresentationSpinner} from './PresentationSpinner'\nimport {router} from './router'\nimport {\n type DocumentLocationResolverObject,\n type DocumentLocationsState,\n type DocumentResolver,\n type PresentationPluginOptions,\n} from './types'\n\nconst PresentationTool = lazy(() => import('./PresentationToolGrantsCheck'))\nconst BroadcastDisplayedDocument = lazy(() => import('./loader/BroadcastDisplayedDocument'))\n\n/**\n * Define locations for a given document type.\n * This function doesn't do anything itself, it is used to provide type information.\n * @param resolver - resolver that return locations for a document.\n * @public\n */\nexport function defineLocations<K extends string>(\n resolver: DocumentLocationResolverObject<K> | DocumentLocationsState,\n): typeof resolver {\n return resolver\n}\n\n/**\n * Define documents for a given location.\n * This function doesn't do anything itself, it is used to provide type information.\n * @param resolvers - resolvers that return documents.\n * @public\n */\nexport function defineDocuments(resolvers: DocumentResolver[]): typeof resolvers {\n return resolvers\n}\n\n/** @public */\nexport const presentationTool = definePlugin<PresentationPluginOptions>((options) => {\n const toolName = options.name || DEFAULT_TOOL_NAME\n\n if ('locate' in options) {\n // eslint-disable-next-line no-console\n console.warn('Presentation’s `locate` option is deprecated. Use `resolve.locations` instead.')\n }\n\n const hasLocationsResolver = !!(options.resolve?.locations || options.locate)\n\n function PresentationDocumentInput(props: InputProps) {\n const value = props.value as SanityDocument\n const documentId = value?._id ? getPublishedId(value?._id) : undefined\n\n if (isDocumentSchemaType(props.schemaType)) {\n return (\n <PresentationDocumentProvider options={options}>\n {hasLocationsResolver && documentId && (\n <PresentationDocumentHeader\n documentId={documentId}\n options={options}\n schemaType={props.schemaType}\n />\n )}\n <Suspense fallback={<PresentationSpinner />}>{props.renderDefault(props)}</Suspense>\n <Suspense key=\"broadcast-displayed-document\">\n <BroadcastDisplayedDocument key={documentId} value={value} />\n </Suspense>\n </PresentationDocumentProvider>\n )\n }\n\n return props.renderDefault(props)\n }\n\n function canHandleCreateIntent(params: Record<string, unknown>) {\n // We can't handle create intents without a `type` parameter\n if (!('type' in params)) {\n return false\n }\n\n if ('presentation' in params && params.presentation !== toolName) {\n return false\n }\n\n return 'template' in params ? {template: true} : true\n }\n\n function canHandleEditIntent(params: Record<string, unknown>) {\n // We can't handle edit intents without `type` or `id` parameters\n if (!('type' in params) || !('id' in params)) {\n return false\n }\n\n if ('presentation' in params && params.presentation !== toolName) {\n return false\n }\n\n return 'mode' in params ? {mode: params.mode === EDIT_INTENT_MODE} : true\n }\n\n return {\n i18n: {\n bundles: [presentationUsEnglishLocaleBundle],\n },\n document: {\n unstable_fieldActions: (prev) => {\n return [\n ...prev.filter((a) => a.name !== openInStructure.name), // prevent duplication\n openInStructure,\n ]\n },\n },\n\n form: {\n components: {\n input: PresentationDocumentInput,\n },\n },\n\n tools: [\n {\n icon: options.icon || DEFAULT_TOOL_ICON,\n name: toolName,\n title: options.title,\n component: PresentationTool,\n options,\n canHandleIntent(intent, params) {\n if (intent === 'create') return canHandleCreateIntent(params)\n if (intent === 'edit') return canHandleEditIntent(params)\n return false\n },\n getIntentState,\n router,\n __internalApplicationType: 'sanity/presentation',\n },\n ],\n }\n})\n","import {type Dispatch, type Reducer} from 'react'\nimport {boolean, fallback, object, parse, picklist} from 'valibot'\n\n/** @public */\nexport interface PresentationState {\n mainDocument: boolean\n iframe: {\n status: 'loading' | 'loaded' | 'refreshing' | 'reloading'\n }\n visualEditing: {\n overlaysEnabled: boolean\n }\n}\n\n/** @public */\nexport const ACTION_IFRAME_LOADED = 'ACTION_IFRAME_LOADED'\n/** @public */\nexport const ACTION_IFRAME_REFRESH = 'ACTION_IFRAME_REFRESH'\n/** @public */\nexport const ACTION_IFRAME_RELOAD = 'ACTION_IFRAME_RELOAD'\n/** @public */\nexport const ACTION_VISUAL_EDITING_OVERLAYS_TOGGLE = 'ACTION_VISUAL_EDITING_OVERLAYS_TOGGLE'\n\n/** @public */\nexport interface IframeLoadedAction {\n type: typeof ACTION_IFRAME_LOADED\n}\n/** @public */\nexport interface IframeRefreshAction {\n type: typeof ACTION_IFRAME_REFRESH\n}\n/** @public */\nexport interface IframeReloadAction {\n type: typeof ACTION_IFRAME_RELOAD\n}\n/** @public */\nexport interface VisualEditingOverlaysToggleAction {\n type: typeof ACTION_VISUAL_EDITING_OVERLAYS_TOGGLE\n enabled: boolean\n}\n\n/** @public */\nexport type PresentationAction =\n | IframeLoadedAction\n | IframeRefreshAction\n | IframeReloadAction\n | VisualEditingOverlaysToggleAction\n\nexport const presentationReducer: Reducer<\n Readonly<PresentationState>,\n Readonly<PresentationAction>\n> = (state, action) => {\n switch (action.type) {\n case ACTION_IFRAME_LOADED:\n return state.iframe.status === 'loaded'\n ? state\n : {\n ...state,\n iframe: {\n ...state.iframe,\n status: 'loaded',\n },\n }\n case ACTION_IFRAME_REFRESH:\n return state.iframe.status === 'refreshing'\n ? state\n : {\n ...state,\n iframe: {\n ...state.iframe,\n status: 'refreshing',\n },\n }\n case ACTION_IFRAME_RELOAD:\n return state.iframe.status === 'reloading'\n ? state\n : {\n ...state,\n iframe: {\n ...state.iframe,\n status: 'reloading',\n },\n }\n case ACTION_VISUAL_EDITING_OVERLAYS_TOGGLE:\n return toggleVisualEditingOverlays(state, action)\n default:\n return state\n }\n}\n\nconst toggleVisualEditingOverlays: Reducer<\n Readonly<PresentationState>,\n Readonly<VisualEditingOverlaysToggleAction>\n> = (state, action) => {\n if (state.visualEditing.overlaysEnabled === action.enabled) return state\n return {\n ...state,\n visualEditing: {\n ...state.visualEditing,\n overlaysEnabled: action.enabled,\n },\n }\n}\n\nconst mainDocumentSchema = fallback(boolean(), false)\n\nconst iframeStatusSchema = picklist(['loading', 'loaded', 'refreshing', 'reloading'])\n\nconst initStateSchema = object({\n mainDocument: mainDocumentSchema,\n iframe: object({\n status: iframeStatusSchema,\n }),\n visualEditing: object({overlaysEnabled: boolean()}),\n})\n\nconst INITIAL_PRESENTATION_STATE = {\n mainDocument: false,\n iframe: {\n status: 'loading',\n },\n visualEditing: {\n overlaysEnabled: false,\n },\n} as const satisfies PresentationState\n\nexport function presentationReducerInit(\n state: Readonly<Partial<PresentationState>>,\n): Readonly<PresentationState> {\n return parse(initStateSchema, {...INITIAL_PRESENTATION_STATE, ...state})\n}\n\n/** @public */\nexport type DispatchPresentationAction = Dispatch<Readonly<PresentationAction>>\n","import {useContext} from 'react'\nimport {PresentationNavigateContext} from 'sanity/_singletons'\n\nimport {type PresentationNavigateContextValue} from './types'\n\n/** @public */\nexport function usePresentationNavigate(): PresentationNavigateContextValue {\n const navigate = useContext(PresentationNavigateContext)\n\n if (!navigate) {\n throw new Error('Presentation navigate context is missing')\n }\n\n return navigate\n}\n\nexport type {PresentationNavigateContextValue}\n","import {useContext} from 'react'\nimport {PresentationParamsContext} from 'sanity/_singletons'\n\nimport {type PresentationParamsContextValue} from './types'\n\n/** @public */\nexport function usePresentationParams(throwOnMissingContext?: true): PresentationParamsContextValue\n/** @public */\nexport function usePresentationParams(\n throwOnMissingContext: false,\n): PresentationParamsContextValue | null\n/** @public */\nexport function usePresentationParams(\n throwOnMissingContext = true,\n): PresentationParamsContextValue | null {\n const params = useContext(PresentationParamsContext)\n\n if (throwOnMissingContext && !params) {\n throw new Error('Presentation params context is missing')\n }\n\n return params\n}\n"],"names":["useSharedState","key","value","$","_c","context","useContext","PresentationSharedStateContext","Error","setValue","t0","t1","useEffect","DEFAULT_TOOL_ICON","ComposeIcon","DEFAULT_TOOL_NAME","DEFAULT_TOOL_TITLE","EDIT_INTENT_MODE","MAX_TIME_TO_OVERLAYS_CONNECTION","API_VERSION","apiVersion","MIN_LOADER_QUERY_LISTEN_HEARTBEAT_INTERVAL","LOADER_QUERY_GC_INTERVAL","POPUP_CHECK_INTERVAL","keysOf","Object","keys","setKey","source","props","options","Observable","observer","subscribe","pipe","switchMap","object","keyObservables","map","isObservable","from","val","of","wait","combineLatest","pairs","reduce","acc","mergeAll","scan","INITIAL_STATE","locations","getDocumentId","isReference","_ref","_id","undefined","cleanPreviewable","id","previewable","clean","_type","_weak","_dataset","_projectId","_strengthenOnPublish","listen","fields","store","query","fetch","join","params","draftId","getDraftId","listenQuery","perspective","observeDocument","paths","currentValue","headlessPaths","filter","path","length","Set","snapshot","leads","forEach","head","tail","push","next","res","tails","isRecord","observeForLocations","documentId","resolver","documentStore","select","values","String","split","doc","get","resolve","useDocumentLocations","resolvers","type","useDocumentStore","locationsState","setLocationsState","useState","locationsStatus","setLocationsStatus","bb0","_result","result","t2","sub","state","unsubscribe","t3","status","presentationLocaleNamespace","presentationUsEnglishLocaleBundle","defineLocaleResourceBundle","locale","namespace","resources","usePresentationTool","throwOnMissingContext","presentation","PresentationContext","useCurrentPresentationToolName","name","TONE_ICONS","positive","InfoOutlineIcon","caution","WarningOutlineIcon","critical","ErrorOutlineIcon","LocationsBanner","isResolving","schemaType","showPresentationTitle","message","tone","len","t","useTranslation","presentationName","expanded","setExpanded","_temp","toggle","count","title","ToneIcon","Symbol","for","margin","t4","transform","transition","l","index","href","preview","t5","t6","v","LocationItem","documentType","node","active","toolName","currentPresentationToolName","isCurrentTool","navigate","structureParams","intent","mode","presentationLinkProps","useIntentLink","handleCurrentToolClick","onClick","t7","t8","t9","LocationStack","styled","Stack","rem","PresentationDocumentHeader","PresentationDocumentContext","locate","contextOptions","options_0","idx","PresentationDocumentProvider","children","parent","parentRegister","register","optionsArray","setOptionsArray","prev","concat","prev_0","o","options_1","registerEffectEvent","useEffectEvent","useLayoutEffect","useOpenInStructureAction","workspace","useWorkspace","navigateIntent","useRouter","tools","findStructureTool","defaultStructureTool","icon","MasterDetailIcon","hidden","onAction","pathToString","renderAsButton","openInStructure","defineDocumentFieldAction","useAction","presentationToolName","results","match","canHandleIntent","tool","modeMatches","preservedSearchParamKeys","getIntentState","routerState","payload","searchParams","_searchParams","includes","URLSearchParams","window","location","search","getPublishedId","entries","templateParams","encodeJsonParams","uuid","PresentationSpinner","width","router","route","create","__unsafe_disableScopedSearchParams","intents","PresentationTool","lazy","BroadcastDisplayedDocument","defineLocations","defineDocuments","presentationTool","definePlugin","console","warn","hasLocationsResolver","PresentationDocumentInput","isDocumentSchemaType","renderDefault","canHandleCreateIntent","template","canHandleEditIntent","i18n","bundles","document","unstable_fieldActions","a","form","components","input","component","__internalApplicationType","ACTION_IFRAME_LOADED","ACTION_IFRAME_REFRESH","ACTION_IFRAME_RELOAD","ACTION_VISUAL_EDITING_OVERLAYS_TOGGLE","presentationReducer","action","iframe","toggleVisualEditingOverlays","visualEditing","overlaysEnabled","enabled","mainDocumentSchema","fallback","boolean","iframeStatusSchema","picklist","initStateSchema","mainDocument","INITIAL_PRESENTATION_STATE","presentationReducerInit","parse","usePresentationNavigate","PresentationNavigateContext","usePresentationParams","PresentationParamsContext"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- const SANITY_VERSION = "3.72.1";
1
+ const SANITY_VERSION = "3.72.2-use-live-content-api.9+9a60bd7465";
2
2
  export {
3
3
  SANITY_VERSION
4
4
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sanity",
3
- "version": "3.72.1",
3
+ "version": "3.72.2-use-live-content-api.9+9a60bd7465",
4
4
  "description": "Sanity is a real-time content infrastructure with a scalable, hosted backend featuring a Graph Oriented Query Language (GROQ), asset pipelines and fast edge caches",
5
5
  "keywords": [
6
6
  "sanity",
@@ -160,11 +160,11 @@
160
160
  "@rexxars/react-json-inspector": "^9.0.1",
161
161
  "@sanity/asset-utils": "^2.0.6",
162
162
  "@sanity/bifur-client": "^0.4.1",
163
- "@sanity/cli": "3.72.1",
163
+ "@sanity/cli": "3.72.2-use-live-content-api.9+9a60bd7465",
164
164
  "@sanity/client": "^6.27.2",
165
165
  "@sanity/color": "^3.0.0",
166
166
  "@sanity/comlink": "^3.0.1",
167
- "@sanity/diff": "3.72.1",
167
+ "@sanity/diff": "3.72.2-use-live-content-api.9+9a60bd7465",
168
168
  "@sanity/diff-match-patch": "^3.1.1",
169
169
  "@sanity/eventsource": "^5.0.0",
170
170
  "@sanity/export": "^3.42.2",
@@ -173,15 +173,15 @@
173
173
  "@sanity/import": "^3.37.9",
174
174
  "@sanity/insert-menu": "1.0.20",
175
175
  "@sanity/logos": "^2.1.13",
176
- "@sanity/migrate": "3.72.1",
177
- "@sanity/mutator": "3.72.1",
176
+ "@sanity/migrate": "3.72.2-use-live-content-api.9+9a60bd7465",
177
+ "@sanity/mutator": "3.72.2-use-live-content-api.9+9a60bd7465",
178
178
  "@sanity/presentation-comlink": "^1.0.4",
179
179
  "@sanity/preview-url-secret": "^2.1.4",
180
- "@sanity/schema": "3.72.1",
180
+ "@sanity/schema": "3.72.2-use-live-content-api.9+9a60bd7465",
181
181
  "@sanity/telemetry": "^0.7.7",
182
- "@sanity/types": "3.72.1",
183
- "@sanity/ui": "^2.11.6",
184
- "@sanity/util": "3.72.1",
182
+ "@sanity/types": "3.72.2-use-live-content-api.9+9a60bd7465",
183
+ "@sanity/ui": "^2.11.7",
184
+ "@sanity/util": "3.72.2-use-live-content-api.9+9a60bd7465",
185
185
  "@sanity/uuid": "^3.0.2",
186
186
  "@sentry/react": "^8.33.0",
187
187
  "@tanstack/react-table": "^8.16.0",
@@ -210,7 +210,7 @@
210
210
  "exif-component": "^1.0.1",
211
211
  "fast-deep-equal": "3.1.3",
212
212
  "form-data": "^4.0.0",
213
- "framer-motion": "^11.15.0",
213
+ "framer-motion": "^12.0.0",
214
214
  "get-it": "^8.6.7",
215
215
  "get-random-values-esm": "1.0.2",
216
216
  "groq-js": "^1.14.2",
@@ -227,7 +227,6 @@
227
227
  "lodash": "^4.17.21",
228
228
  "log-symbols": "^2.2.0",
229
229
  "mendoza": "^3.0.0",
230
- "mnemonist": "0.39.8",
231
230
  "module-alias": "^2.2.2",
232
231
  "nano-pubsub": "^3.0.0",
233
232
  "nanoid": "^3.1.30",
@@ -272,7 +271,7 @@
272
271
  "use-sync-external-store": "^1.2.0",
273
272
  "uuid": "^11.0.5",
274
273
  "valibot": "0.31.1",
275
- "vite": "^5.4.11",
274
+ "vite": "^6.0.11",
276
275
  "yargs": "^17.3.0"
277
276
  },
278
277
  "devDependencies": {
@@ -281,7 +280,7 @@
281
280
  "@repo/dev-aliases": "3.72.1",
282
281
  "@repo/package.config": "3.72.1",
283
282
  "@repo/test-config": "3.72.1",
284
- "@sanity/codegen": "3.72.1",
283
+ "@sanity/codegen": "3.72.2-use-live-content-api.9+9a60bd7465",
285
284
  "@sanity/generate-help-url": "^3.0.0",
286
285
  "@sanity/pkg-utils": "6.13.4",
287
286
  "@sanity/tsdoc": "1.0.169",
@@ -325,5 +324,5 @@
325
324
  "engines": {
326
325
  "node": ">=18"
327
326
  },
328
- "gitHead": "18d237097767c6be572834973bd01aea46dd3526"
327
+ "gitHead": "9a60bd746593cdd5276ae4357be2cc77f0a70a9b"
329
328
  }
@@ -223,6 +223,7 @@ export async function buildVendorDependencies({
223
223
  define: {'process.env.NODE_ENV': JSON.stringify('production')},
224
224
 
225
225
  build: {
226
+ commonjsOptions: {strictRequires: 'auto'},
226
227
  minify: true,
227
228
  emptyOutDir: false, // Rely on CLI to do this
228
229
  outDir: path.join(outputDir, VENDOR_DIR),
@@ -117,8 +117,8 @@ const idRegex = /^[^-][A-Z0-9._-]*$/i
117
117
  // during testing, the `doc` endpoint 502'ed if given an invalid ID
118
118
  const isValidId = (id: unknown) => typeof id === 'string' && idRegex.test(id)
119
119
  const shouldIncludeDocument = (document: SanityDocument) => {
120
- // Filter out system documents
121
- return !document._type.startsWith('system.')
120
+ // Filter out system documents and sanity documents
121
+ return !document._type.startsWith('system.') && !document._type.startsWith('sanity.')
122
122
  }
123
123
 
124
124
  async function* readerToGenerator(reader: ReadableStreamDefaultReader<Uint8Array>) {
@@ -33,7 +33,7 @@ import {type RouterContextValue, useRouter} from 'sanity/router'
33
33
  import {styled} from 'styled-components'
34
34
  import {useEffectEvent} from 'use-effect-event'
35
35
 
36
- import {DEFAULT_TOOL_NAME, EDIT_INTENT_MODE, LIVE_DRAFT_EVENTS_ENABLED} from './constants'
36
+ import {DEFAULT_TOOL_NAME, EDIT_INTENT_MODE} from './constants'
37
37
  import PostMessageFeatures from './features/PostMessageFeatures'
38
38
  import {debounce} from './lib/debounce'
39
39
  import {SharedStateProvider} from './overlays/SharedStateProvider'
@@ -70,7 +70,6 @@ import {usePopups} from './usePopups'
70
70
  import {usePreviewUrl} from './usePreviewUrl'
71
71
  import {useStatus} from './useStatus'
72
72
 
73
- const LoaderQueries = lazy(() => import('./loader/LoaderQueries'))
74
73
  const LiveQueries = lazy(() => import('./loader/LiveQueries'))
75
74
  const PostMessageDocuments = lazy(() => import('./overlays/PostMessageDocuments'))
76
75
  const PostMessageRefreshMutations = lazy(() => import('./editor/PostMessageRefreshMutations'))
@@ -582,25 +581,15 @@ export default function PresentationTool(props: {
582
581
  </PresentationNavigateProvider>
583
582
  </PresentationProvider>
584
583
  <Suspense>
585
- {controller &&
586
- (LIVE_DRAFT_EVENTS_ENABLED ? (
587
- <LiveQueries
588
- controller={controller}
589
- perspective={perspective}
590
- liveDocument={displayedDocument}
591
- onDocumentsOnPage={setDocumentsOnPage}
592
- onLoadersConnection={setLoadersConnection}
593
- />
594
- ) : (
595
- <LoaderQueries
596
- controller={controller}
597
- perspective={perspective}
598
- liveDocument={displayedDocument}
599
- onDocumentsOnPage={setDocumentsOnPage}
600
- onLoadersConnection={setLoadersConnection}
601
- documentsOnPage={documentsOnPage}
602
- />
603
- ))}
584
+ {controller && (
585
+ <LiveQueries
586
+ controller={controller}
587
+ perspective={perspective}
588
+ liveDocument={displayedDocument}
589
+ onDocumentsOnPage={setDocumentsOnPage}
590
+ onLoadersConnection={setLoadersConnection}
591
+ />
592
+ )}
604
593
  {visualEditingComlink && params.id && params.type && (
605
594
  <PostMessageRefreshMutations
606
595
  comlink={visualEditingComlink}
@@ -1,4 +1,5 @@
1
1
  import {ComposeIcon} from '@sanity/icons'
2
+ import {apiVersion} from '@sanity/preview-url-secret/constants'
2
3
 
3
4
  export const DEFAULT_TOOL_ICON = ComposeIcon
4
5
  export const DEFAULT_TOOL_NAME = 'presentation'
@@ -10,26 +11,13 @@ export const EDIT_INTENT_MODE = 'presentation'
10
11
  export const MAX_TIME_TO_OVERLAYS_CONNECTION = 3_000 // ms
11
12
 
12
13
  // The API version to use when using `@sanity/client`
13
- export const API_VERSION = '2023-10-16'
14
+ export const API_VERSION = apiVersion
14
15
 
15
16
  // Heartbeats shouldn't fire on intervals that are so short it causes performance issues
16
17
  export const MIN_LOADER_QUERY_LISTEN_HEARTBEAT_INTERVAL = 1000 // ms
17
18
 
18
- // Batch size for fetching documents building up the cache
19
- export const LIVE_QUERY_CACHE_BATCH_SIZE = 100
20
-
21
- // Total cache size for documents that are live queried
22
- export const LIVE_QUERY_CACHE_SIZE = 2048
19
+ // How often the list over loader queries should be garbage collected
20
+ export const LOADER_QUERY_GC_INTERVAL = 30_000 // ms
23
21
 
24
22
  // The interval at which we check if existing popups have been closed
25
23
  export const POPUP_CHECK_INTERVAL = 1000 // ms
26
-
27
- declare global {
28
- const PRESENTATION_ENABLE_LIVE_DRAFT_EVENTS: unknown
29
- }
30
-
31
- // Feature flag that uses the new Live Draft Content API instead of the Listen API + Mendoza events
32
- export const LIVE_DRAFT_EVENTS_ENABLED =
33
- typeof PRESENTATION_ENABLE_LIVE_DRAFT_EVENTS === 'string'
34
- ? PRESENTATION_ENABLE_LIVE_DRAFT_EVENTS === 'true'
35
- : false