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.
- package/lib/_chunks-cjs/LiveQueries.js +236 -163
- package/lib/_chunks-cjs/LiveQueries.js.map +1 -1
- package/lib/_chunks-cjs/PresentationToolGrantsCheck.js +3 -7
- package/lib/_chunks-cjs/PresentationToolGrantsCheck.js.map +1 -1
- package/lib/_chunks-cjs/buildAction.js +3 -0
- package/lib/_chunks-cjs/buildAction.js.map +1 -1
- package/lib/_chunks-cjs/presentation.js +3 -4
- package/lib/_chunks-cjs/presentation.js.map +1 -1
- package/lib/_chunks-cjs/version.js +1 -1
- package/lib/_chunks-es/LiveQueries.mjs +235 -162
- package/lib/_chunks-es/LiveQueries.mjs.map +1 -1
- package/lib/_chunks-es/PresentationToolGrantsCheck.mjs +2 -4
- package/lib/_chunks-es/PresentationToolGrantsCheck.mjs.map +1 -1
- package/lib/_chunks-es/presentation.mjs +3 -3
- package/lib/_chunks-es/presentation.mjs.map +1 -1
- package/lib/_chunks-es/version.mjs +1 -1
- package/lib/_internal/cli/threads/validateDocuments.js +1 -1
- package/lib/_internal/cli/threads/validateDocuments.js.map +1 -1
- package/lib/_legacy/LiveQueries.esm.js +235 -162
- package/lib/_legacy/LiveQueries.esm.js.map +1 -1
- package/lib/_legacy/PresentationToolGrantsCheck.esm.js +2 -4
- package/lib/_legacy/PresentationToolGrantsCheck.esm.js.map +1 -1
- package/lib/_legacy/presentation.esm.js +3 -3
- package/lib/_legacy/presentation.esm.js.map +1 -1
- package/lib/_legacy/version.esm.js +1 -1
- package/package.json +13 -14
- package/src/_internal/cli/server/buildVendorDependencies.ts +1 -0
- package/src/_internal/cli/threads/validateDocuments.ts +2 -2
- package/src/presentation/PresentationTool.tsx +10 -21
- package/src/presentation/constants.ts +4 -16
- package/src/presentation/loader/LiveQueries.tsx +79 -234
- package/src/presentation/loader/useLiveEvents.ts +75 -0
- package/src/presentation/loader/useLiveQueries.ts +127 -0
- package/src/presentation/loader/utils.ts +2 -125
- package/src/presentation/types.ts +1 -18
- package/lib/_chunks-cjs/LoaderQueries.js +0 -281
- package/lib/_chunks-cjs/LoaderQueries.js.map +0 -1
- package/lib/_chunks-cjs/utils.js +0 -70
- package/lib/_chunks-cjs/utils.js.map +0 -1
- package/lib/_chunks-es/LoaderQueries.mjs +0 -288
- package/lib/_chunks-es/LoaderQueries.mjs.map +0 -1
- package/lib/_chunks-es/utils.mjs +0 -74
- package/lib/_chunks-es/utils.mjs.map +0 -1
- package/lib/_legacy/LoaderQueries.esm.js +0 -288
- package/lib/_legacy/LoaderQueries.esm.js.map +0 -1
- package/lib/_legacy/utils.esm.js +0 -74
- package/lib/_legacy/utils.esm.js.map +0 -1
- 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 =
|
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
|
-
|
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} · </>}\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} · </>}\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} · </>}\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} · </>}\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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"}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "sanity",
|
3
|
-
"version": "3.72.
|
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.
|
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.
|
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.
|
177
|
-
"@sanity/mutator": "3.72.
|
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.
|
180
|
+
"@sanity/schema": "3.72.2-use-live-content-api.9+9a60bd7465",
|
181
181
|
"@sanity/telemetry": "^0.7.7",
|
182
|
-
"@sanity/types": "3.72.
|
183
|
-
"@sanity/ui": "^2.11.
|
184
|
-
"@sanity/util": "3.72.
|
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": "^
|
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": "^
|
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.
|
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": "
|
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
|
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
|
-
|
587
|
-
|
588
|
-
|
589
|
-
|
590
|
-
|
591
|
-
|
592
|
-
|
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 =
|
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
|
-
//
|
19
|
-
export const
|
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
|