sanity 3.92.1-next.40.1f1bdfec39 → 3.92.1-next.41.f6367213ff
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/presentation.js +16 -9
- package/lib/_chunks-cjs/presentation.js.map +1 -1
- package/lib/_chunks-cjs/version.js +1 -1
- package/lib/_chunks-es/presentation.mjs +17 -9
- package/lib/_chunks-es/presentation.mjs.map +1 -1
- package/lib/_chunks-es/version.mjs +1 -1
- package/package.json +10 -10
- package/src/presentation/document/LocationsBanner.tsx +1 -1
- package/src/presentation/document/PresentationDocumentHeader.tsx +29 -22
@@ -1,5 +1,5 @@
|
|
1
1
|
"use strict";
|
2
|
-
var reactCompilerRuntime = require("react-compiler-runtime"), React = require("react"), _singletons = require("sanity/_singletons"), jsxRuntime = require("react/jsx-runtime"), sanity = require("sanity"), icons = require("@sanity/icons"), constants = require("@sanity/preview-url-secret/constants"), ui = require("@sanity/ui"), styledComponents = require("styled-components"), router$1 = require("sanity/router"), rxjs = require("rxjs"), useEffectEvent = require("use-effect-event"), uuid = require("@sanity/uuid");
|
2
|
+
var reactCompilerRuntime = require("react-compiler-runtime"), React = require("react"), _singletons = require("sanity/_singletons"), jsxRuntime = require("react/jsx-runtime"), sanity = require("sanity"), icons = require("@sanity/icons"), constants = require("@sanity/preview-url-secret/constants"), ui = require("@sanity/ui"), theme = require("@sanity/ui/theme"), styledComponents = require("styled-components"), router$1 = require("sanity/router"), rxjs = require("rxjs"), useEffectEvent = require("use-effect-event"), uuid = require("@sanity/uuid");
|
3
3
|
const useSharedState = (key, value) => {
|
4
4
|
const $ = reactCompilerRuntime.c(5), context = React.useContext(_singletons.PresentationSharedStateContext);
|
5
5
|
if (!context)
|
@@ -140,7 +140,7 @@ function LocationsBanner(props) {
|
|
140
140
|
count: locationsCount
|
141
141
|
}), $[7] = isResolving, $[8] = locationsCount, $[9] = message, $[10] = t, $[11] = t2) : t2 = $[11];
|
142
142
|
const title = t2, ToneIcon = tone ? TONE_ICONS[tone] : void 0;
|
143
|
-
if (!resolvers)
|
143
|
+
if (!resolvers || status === "empty")
|
144
144
|
return null;
|
145
145
|
let t3;
|
146
146
|
$[12] === Symbol.for("react.memo_cache_sentinel") ? (t3 = {
|
@@ -250,13 +250,20 @@ function areUrlsMatching(previewUrlString, locationUrlString) {
|
|
250
250
|
return !1;
|
251
251
|
}
|
252
252
|
}
|
253
|
-
const LocationStack = styledComponents.styled(
|
254
|
-
|
253
|
+
const LocationStack = styledComponents.styled.div((props) => {
|
254
|
+
const theme$1 = theme.getTheme_v2(props.theme);
|
255
|
+
return styledComponents.css`
|
256
|
+
display: flex;
|
257
|
+
flex-direction: column;
|
258
|
+
gap: ${ui.rem(theme$1.space[2])};
|
259
|
+
min-height: ${ui.rem(42)};
|
260
|
+
margin-bottom: ${ui.rem(theme$1.space[5])};
|
255
261
|
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
`;
|
262
|
+
&:empty {
|
263
|
+
display: none;
|
264
|
+
}
|
265
|
+
`;
|
266
|
+
});
|
260
267
|
function PresentationDocumentHeader(props) {
|
261
268
|
const $ = reactCompilerRuntime.c(19), {
|
262
269
|
documentId,
|
@@ -279,7 +286,7 @@ function PresentationDocumentHeader(props) {
|
|
279
286
|
} else
|
280
287
|
t2 = $[10];
|
281
288
|
let t3;
|
282
|
-
return $[17] !== t2 ? (t3 = /* @__PURE__ */ jsxRuntime.jsx(LocationStack, {
|
289
|
+
return $[17] !== t2 ? (t3 = /* @__PURE__ */ jsxRuntime.jsx(LocationStack, { children: t2 }), $[17] = t2, $[18] = t3) : t3 = $[18], t3;
|
283
290
|
}
|
284
291
|
function _temp$1(o) {
|
285
292
|
return o.resolve?.locations || o.locate;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"presentation.js","sources":["../../src/presentation/overlays/useSharedState.ts","../../src/presentation/constants.ts","../../src/presentation/i18n/index.ts","../../src/presentation/useDocumentLocations.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/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 {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 {useEffect, useMemo, useState} from 'react'\nimport {isObservable, map, of} from 'rxjs'\nimport {\n type ObjectSchemaType,\n type PreviewableType,\n useDocumentPreviewStore,\n useDocumentStore,\n usePerspective,\n} from 'sanity'\n\nimport {\n type DocumentLocationResolver,\n type DocumentLocationResolvers,\n type DocumentLocationsState,\n type DocumentLocationsStatus,\n} from './types'\n\nconst INITIAL_STATE: DocumentLocationsState = {locations: []}\n\nexport function useDocumentLocations(props: {\n id: string\n version: string | undefined\n resolvers?: DocumentLocationResolver | DocumentLocationResolvers\n type: ObjectSchemaType\n}): {\n state: DocumentLocationsState\n status: DocumentLocationsStatus\n} {\n const {id, resolvers, type, version} = props\n const documentStore = useDocumentStore()\n const documentPreviewStore = useDocumentPreviewStore()\n\n const {perspectiveStack} = usePerspective()\n const [locationsState, setLocationsState] = useState<DocumentLocationsState>(INITIAL_STATE)\n\n const resolver = resolvers && (typeof resolvers === 'function' ? resolvers : resolvers[type.name])\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: type.name, version, perspectiveStack}\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 const doc = {_type: 'reference', _ref: id}\n // Override the preview selection in the schema type to use the user\n // defined selection defined by the resolver\n const _type = {...type, preview: {select: resolver.select}} satisfies PreviewableType\n const options = {perspective: perspectiveStack}\n return documentPreviewStore\n .observeForPreview(doc, _type, options)\n .pipe(map((preview) => resolver.resolve(preview.snapshot || null)))\n }\n\n // Resolver is explicitly provided state\n return of(resolver)\n }, [documentStore, documentPreviewStore, id, resolver, type, version, perspectiveStack])\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 {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 DocumentLocationResolver,\n type DocumentLocationResolvers,\n type PresentationPluginOptions,\n} from '../types'\nimport {useDocumentLocations} from '../useDocumentLocations'\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 options: PresentationPluginOptions\n resolvers?: DocumentLocationResolver | DocumentLocationResolvers\n schemaType: ObjectSchemaType\n showPresentationTitle: boolean\n version: string | undefined\n}): ReactNode {\n const {documentId, options, resolvers, schemaType, showPresentationTitle, version} = props\n\n const {state, status} = useDocumentLocations({\n id: documentId,\n version,\n resolvers,\n type: schemaType,\n })\n\n const isResolving = status === 'resolving'\n\n const {locations, message, tone} = state\n const locationsCount = 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 (!locationsCount) return\n setExpanded((v) => !v)\n }, [locationsCount])\n\n const title = isResolving\n ? t('locations-banner.resolving.text')\n : message || t('locations-banner.locations-count', {count: locationsCount})\n\n const ToneIcon = tone ? TONE_ICONS[tone] : undefined\n\n if (!resolvers) return null\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={locationsCount ? '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 {locationsCount === 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) => {\n let active = false\n if (\n (options.name || DEFAULT_TOOL_NAME) === presentationName &&\n presentation?.params.preview\n ) {\n active = areUrlsMatching(presentation.params.preview, l.href)\n }\n\n return (\n <LocationItem\n active={active}\n documentId={documentId}\n documentType={schemaType.name}\n key={l.href}\n node={l}\n toolName={options.name || DEFAULT_TOOL_NAME}\n />\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\n/**\n * Compares two URLs to determine if they match based on origin, pathname, and search parameters\n * The previewUrl should have all the search parameters that are in the locationUrl\n */\nfunction areUrlsMatching(previewUrlString: string, locationUrlString: string): boolean {\n try {\n const previewUrl = new URL(previewUrlString, location.origin)\n const locationUrl = new URL(locationUrlString, previewUrl.origin)\n\n // First compare origin and pathname\n if (previewUrl.origin !== locationUrl.origin || previewUrl.pathname !== locationUrl.pathname) {\n return false\n }\n\n // Then check search params\n // All search params in locationUrl must exist with the same values in previewUrl\n const locationParams = new URLSearchParams(locationUrl.search)\n const previewParams = new URLSearchParams(previewUrl.search)\n\n for (const [key, value] of locationParams.entries()) {\n if (previewParams.get(key) !== value) {\n return false\n }\n }\n\n return true\n } catch {\n // If URL parsing fails, URLs don't match\n return false\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 {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 version: string | undefined\n options: PresentationPluginOptions\n schemaType: ObjectSchemaType\n}): ReactNode {\n const {documentId, options, schemaType, version} = props\n const context = useContext(PresentationDocumentContext)\n\n const contextOptions = context?.options || []\n const resolvers = contextOptions.map((o) => o.resolve?.locations || o.locate)\n const hasResolvers = resolvers.some(Boolean)\n\n if ((context && context.options[0] !== options) || !hasResolvers) {\n return null\n }\n\n return (\n <LocationStack marginBottom={5} space={5}>\n <Stack space={2}>\n {contextOptions.map((_options, idx) => (\n <LocationsBanner\n key={idx}\n documentId={documentId}\n options={_options}\n resolvers={resolvers[idx]}\n schemaType={schemaType}\n showPresentationTitle={contextOptions.length > 1}\n version={version}\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), [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> = ['preview', 'viewport']\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 {\n definePlugin,\n getPublishedId,\n getVersionFromId,\n type InputProps,\n isDocumentSchemaType,\n} 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 const documentVersion = value?._id ? getVersionFromId(value._id) : undefined\n if (isDocumentSchemaType(props.schemaType)) {\n return (\n <PresentationDocumentProvider options={options}>\n {hasLocationsResolver && documentId && (\n <PresentationDocumentHeader\n documentId={documentId}\n version={documentVersion}\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 {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","presentationLocaleNamespace","presentationUsEnglishLocaleBundle","defineLocaleResourceBundle","locale","namespace","resources","INITIAL_STATE","locations","useDocumentLocations","props","id","resolvers","type","version","documentStore","useDocumentStore","documentPreviewStore","useDocumentPreviewStore","perspectiveStack","usePerspective","locationsState","setLocationsState","useState","resolver","name","locationsStatus","setLocationsStatus","undefined","bb0","params","_result","isObservable","of","doc","_type","_ref","preview","select","options","perspective","t2","resolve","snapshot","observeForPreview","pipe","map","result","sub","subscribe","state","unsubscribe","t3","status","usePresentationTool","throwOnMissingContext","presentation","PresentationContext","useCurrentPresentationToolName","TONE_ICONS","positive","InfoOutlineIcon","caution","WarningOutlineIcon","critical","ErrorOutlineIcon","LocationsBanner","documentId","schemaType","showPresentationTitle","isResolving","message","tone","locationsCount","length","t","useTranslation","presentationName","expanded","setExpanded","_temp","toggle","count","title","ToneIcon","Symbol","for","margin","t4","jsxs","Flex","jsx","Box","Text","t5","Fragment","Card","Spinner","ChevronRightIcon","transform","transition","Stack","l","active","href","t6","t7","v","LocationItem","documentType","node","toolName","currentPresentationToolName","isCurrentTool","navigate","structureParams","intent","mode","presentationLinkProps","useIntentLink","handleCurrentToolClick","onClick","DesktopIcon","t8","t9","areUrlsMatching","previewUrlString","locationUrlString","previewUrl","URL","location","origin","locationUrl","pathname","locationParams","URLSearchParams","search","previewParams","entries","get","LocationStack","styled","rem","PresentationDocumentHeader","PresentationDocumentContext","contextOptions","some","Boolean","hasResolvers","_options","idx","o","locate","PresentationDocumentProvider","children","parent","parentRegister","register","optionsArray","setOptionsArray","options_0","prev","concat","prev_0","filter","options_1","registerEffectEvent","useEffectEvent","useLayoutEffect","useOpenInStructureAction","path","workspace","useWorkspace","navigateIntent","useRouter","tools","findStructureTool","defaultStructureTool","icon","MasterDetailIcon","hidden","onAction","pathToString","renderAsButton","openInStructure","defineDocumentFieldAction","useAction","presentationToolName","results","match","canHandleIntent","tool","modeMatches","isRecord","preservedSearchParamKeys","getIntentState","routerState","payload","searchParams","_searchParams","includes","reduce","acc","window","getPublishedId","Object","templateParams","encodeJsonParams","uuid","PresentationSpinner","width","router","route","create","__unsafe_disableScopedSearchParams","intents","PresentationTool","lazy","BroadcastDisplayedDocument","defineLocations","defineDocuments","presentationTool","definePlugin","console","warn","hasLocationsResolver","PresentationDocumentInput","_id","getVersionFromId","documentVersion","isDocumentSchemaType","renderDefault","Suspense","canHandleCreateIntent","template","canHandleEditIntent","i18n","bundles","document","unstable_fieldActions","a","form","components","input","component","__internalApplicationType","usePresentationNavigate","PresentationNavigateContext","usePresentationParams","PresentationParamsContext"],"mappings":"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"}
|
1
|
+
{"version":3,"file":"presentation.js","sources":["../../src/presentation/overlays/useSharedState.ts","../../src/presentation/constants.ts","../../src/presentation/i18n/index.ts","../../src/presentation/useDocumentLocations.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/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 {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 {useEffect, useMemo, useState} from 'react'\nimport {isObservable, map, of} from 'rxjs'\nimport {\n type ObjectSchemaType,\n type PreviewableType,\n useDocumentPreviewStore,\n useDocumentStore,\n usePerspective,\n} from 'sanity'\n\nimport {\n type DocumentLocationResolver,\n type DocumentLocationResolvers,\n type DocumentLocationsState,\n type DocumentLocationsStatus,\n} from './types'\n\nconst INITIAL_STATE: DocumentLocationsState = {locations: []}\n\nexport function useDocumentLocations(props: {\n id: string\n version: string | undefined\n resolvers?: DocumentLocationResolver | DocumentLocationResolvers\n type: ObjectSchemaType\n}): {\n state: DocumentLocationsState\n status: DocumentLocationsStatus\n} {\n const {id, resolvers, type, version} = props\n const documentStore = useDocumentStore()\n const documentPreviewStore = useDocumentPreviewStore()\n\n const {perspectiveStack} = usePerspective()\n const [locationsState, setLocationsState] = useState<DocumentLocationsState>(INITIAL_STATE)\n\n const resolver = resolvers && (typeof resolvers === 'function' ? resolvers : resolvers[type.name])\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: type.name, version, perspectiveStack}\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 const doc = {_type: 'reference', _ref: id}\n // Override the preview selection in the schema type to use the user\n // defined selection defined by the resolver\n const _type = {...type, preview: {select: resolver.select}} satisfies PreviewableType\n const options = {perspective: perspectiveStack}\n return documentPreviewStore\n .observeForPreview(doc, _type, options)\n .pipe(map((preview) => resolver.resolve(preview.snapshot || null)))\n }\n\n // Resolver is explicitly provided state\n return of(resolver)\n }, [documentStore, documentPreviewStore, id, resolver, type, version, perspectiveStack])\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 {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 DocumentLocationResolver,\n type DocumentLocationResolvers,\n type PresentationPluginOptions,\n} from '../types'\nimport {useDocumentLocations} from '../useDocumentLocations'\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 options: PresentationPluginOptions\n resolvers?: DocumentLocationResolver | DocumentLocationResolvers\n schemaType: ObjectSchemaType\n showPresentationTitle: boolean\n version: string | undefined\n}): ReactNode {\n const {documentId, options, resolvers, schemaType, showPresentationTitle, version} = props\n\n const {state, status} = useDocumentLocations({\n id: documentId,\n version,\n resolvers,\n type: schemaType,\n })\n\n const isResolving = status === 'resolving'\n\n const {locations, message, tone} = state\n const locationsCount = 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 (!locationsCount) return\n setExpanded((v) => !v)\n }, [locationsCount])\n\n const title = isResolving\n ? t('locations-banner.resolving.text')\n : message || t('locations-banner.locations-count', {count: locationsCount})\n\n const ToneIcon = tone ? TONE_ICONS[tone] : undefined\n\n if (!resolvers || status === 'empty') return null\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={locationsCount ? '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 {locationsCount === 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) => {\n let active = false\n if (\n (options.name || DEFAULT_TOOL_NAME) === presentationName &&\n presentation?.params.preview\n ) {\n active = areUrlsMatching(presentation.params.preview, l.href)\n }\n\n return (\n <LocationItem\n active={active}\n documentId={documentId}\n documentType={schemaType.name}\n key={l.href}\n node={l}\n toolName={options.name || DEFAULT_TOOL_NAME}\n />\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\n/**\n * Compares two URLs to determine if they match based on origin, pathname, and search parameters\n * The previewUrl should have all the search parameters that are in the locationUrl\n */\nfunction areUrlsMatching(previewUrlString: string, locationUrlString: string): boolean {\n try {\n const previewUrl = new URL(previewUrlString, location.origin)\n const locationUrl = new URL(locationUrlString, previewUrl.origin)\n\n // First compare origin and pathname\n if (previewUrl.origin !== locationUrl.origin || previewUrl.pathname !== locationUrl.pathname) {\n return false\n }\n\n // Then check search params\n // All search params in locationUrl must exist with the same values in previewUrl\n const locationParams = new URLSearchParams(locationUrl.search)\n const previewParams = new URLSearchParams(previewUrl.search)\n\n for (const [key, value] of locationParams.entries()) {\n if (previewParams.get(key) !== value) {\n return false\n }\n }\n\n return true\n } catch {\n // If URL parsing fails, URLs don't match\n return false\n }\n}\n","import {rem} from '@sanity/ui'\n// eslint-disable-next-line camelcase\nimport {getTheme_v2} from '@sanity/ui/theme'\nimport {type ReactNode, useContext} from 'react'\nimport {type ObjectSchemaType, type PublishedId} from 'sanity'\nimport {PresentationDocumentContext} from 'sanity/_singletons'\nimport {css, styled} from 'styled-components'\n\nimport {type PresentationPluginOptions} from '../types'\nimport {LocationsBanner} from './LocationsBanner'\n\nconst LocationStack = styled.div((props) => {\n const theme = getTheme_v2(props.theme)\n return css`\n display: flex;\n flex-direction: column;\n gap: ${rem(theme.space[2])};\n min-height: ${rem(42)};\n margin-bottom: ${rem(theme.space[5])};\n\n &:empty {\n display: none;\n }\n `\n})\n\nexport function PresentationDocumentHeader(props: {\n documentId: PublishedId\n version: string | undefined\n options: PresentationPluginOptions\n schemaType: ObjectSchemaType\n}): ReactNode {\n const {documentId, options, schemaType, version} = props\n const context = useContext(PresentationDocumentContext)\n\n const contextOptions = context?.options || []\n const resolvers = contextOptions.map((o) => o.resolve?.locations || o.locate)\n const hasResolvers = resolvers.some(Boolean)\n\n if ((context && context.options[0] !== options) || !hasResolvers) {\n return null\n }\n\n return (\n <LocationStack>\n {contextOptions.map((_options, idx) => (\n <LocationsBanner\n key={idx}\n documentId={documentId}\n options={_options}\n resolvers={resolvers[idx]}\n schemaType={schemaType}\n showPresentationTitle={contextOptions.length > 1}\n version={version}\n />\n ))}\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), [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> = ['preview', 'viewport']\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 {\n definePlugin,\n getPublishedId,\n getVersionFromId,\n type InputProps,\n isDocumentSchemaType,\n} 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 const documentVersion = value?._id ? getVersionFromId(value._id) : undefined\n if (isDocumentSchemaType(props.schemaType)) {\n return (\n <PresentationDocumentProvider options={options}>\n {hasLocationsResolver && documentId && (\n <PresentationDocumentHeader\n documentId={documentId}\n version={documentVersion}\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 {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","presentationLocaleNamespace","presentationUsEnglishLocaleBundle","defineLocaleResourceBundle","locale","namespace","resources","INITIAL_STATE","locations","useDocumentLocations","props","id","resolvers","type","version","documentStore","useDocumentStore","documentPreviewStore","useDocumentPreviewStore","perspectiveStack","usePerspective","locationsState","setLocationsState","useState","resolver","name","locationsStatus","setLocationsStatus","undefined","bb0","params","_result","isObservable","of","doc","_type","_ref","preview","select","options","perspective","t2","resolve","snapshot","observeForPreview","pipe","map","result","sub","subscribe","state","unsubscribe","t3","status","usePresentationTool","throwOnMissingContext","presentation","PresentationContext","useCurrentPresentationToolName","TONE_ICONS","positive","InfoOutlineIcon","caution","WarningOutlineIcon","critical","ErrorOutlineIcon","LocationsBanner","documentId","schemaType","showPresentationTitle","isResolving","message","tone","locationsCount","length","t","useTranslation","presentationName","expanded","setExpanded","_temp","toggle","count","title","ToneIcon","Symbol","for","margin","t4","jsxs","Flex","jsx","Box","Text","t5","Fragment","Card","Spinner","ChevronRightIcon","transform","transition","Stack","l","active","href","t6","t7","v","LocationItem","documentType","node","toolName","currentPresentationToolName","isCurrentTool","navigate","structureParams","intent","mode","presentationLinkProps","useIntentLink","handleCurrentToolClick","onClick","DesktopIcon","t8","t9","areUrlsMatching","previewUrlString","locationUrlString","previewUrl","URL","location","origin","locationUrl","pathname","locationParams","URLSearchParams","search","previewParams","entries","get","LocationStack","styled","div","theme","getTheme_v2","css","rem","space","PresentationDocumentHeader","PresentationDocumentContext","contextOptions","some","Boolean","hasResolvers","_options","idx","o","locate","PresentationDocumentProvider","children","parent","parentRegister","register","optionsArray","setOptionsArray","options_0","prev","concat","prev_0","filter","options_1","registerEffectEvent","useEffectEvent","useLayoutEffect","useOpenInStructureAction","path","workspace","useWorkspace","navigateIntent","useRouter","tools","findStructureTool","defaultStructureTool","icon","MasterDetailIcon","hidden","onAction","pathToString","renderAsButton","openInStructure","defineDocumentFieldAction","useAction","presentationToolName","results","match","canHandleIntent","tool","modeMatches","isRecord","preservedSearchParamKeys","getIntentState","routerState","payload","searchParams","_searchParams","includes","reduce","acc","window","getPublishedId","Object","templateParams","encodeJsonParams","uuid","PresentationSpinner","width","router","route","create","__unsafe_disableScopedSearchParams","intents","PresentationTool","lazy","BroadcastDisplayedDocument","defineLocations","defineDocuments","presentationTool","definePlugin","console","warn","hasLocationsResolver","PresentationDocumentInput","_id","getVersionFromId","documentVersion","isDocumentSchemaType","renderDefault","Suspense","canHandleCreateIntent","template","canHandleEditIntent","i18n","bundles","document","unstable_fieldActions","a","form","components","input","component","__internalApplicationType","usePresentationNavigate","PresentationNavigateContext","usePresentationParams","PresentationParamsContext"],"mappings":"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"}
|
@@ -6,7 +6,8 @@ import { defineLocaleResourceBundle, useDocumentStore, useDocumentPreviewStore,
|
|
6
6
|
import { ComposeIcon, ErrorOutlineIcon, WarningOutlineIcon, InfoOutlineIcon, ChevronRightIcon, DesktopIcon, MasterDetailIcon } from "@sanity/icons";
|
7
7
|
import { apiVersion } from "@sanity/preview-url-secret/constants";
|
8
8
|
import { Card, Flex, Box, Spinner, Text, Stack, rem } from "@sanity/ui";
|
9
|
-
import {
|
9
|
+
import { getTheme_v2 } from "@sanity/ui/theme";
|
10
|
+
import { styled, css } from "styled-components";
|
10
11
|
import { useIntentLink, useRouter, encodeJsonParams, route } from "sanity/router";
|
11
12
|
import { of, isObservable, map } from "rxjs";
|
12
13
|
import { useEffectEvent } from "use-effect-event";
|
@@ -149,7 +150,7 @@ function LocationsBanner(props) {
|
|
149
150
|
count: locationsCount
|
150
151
|
}), $[7] = isResolving, $[8] = locationsCount, $[9] = message, $[10] = t, $[11] = t2) : t2 = $[11];
|
151
152
|
const title = t2, ToneIcon = tone ? TONE_ICONS[tone] : void 0;
|
152
|
-
if (!resolvers)
|
153
|
+
if (!resolvers || status === "empty")
|
153
154
|
return null;
|
154
155
|
let t3;
|
155
156
|
$[12] === Symbol.for("react.memo_cache_sentinel") ? (t3 = {
|
@@ -259,13 +260,20 @@ function areUrlsMatching(previewUrlString, locationUrlString) {
|
|
259
260
|
return !1;
|
260
261
|
}
|
261
262
|
}
|
262
|
-
const LocationStack = styled(
|
263
|
-
|
263
|
+
const LocationStack = styled.div((props) => {
|
264
|
+
const theme = getTheme_v2(props.theme);
|
265
|
+
return css`
|
266
|
+
display: flex;
|
267
|
+
flex-direction: column;
|
268
|
+
gap: ${rem(theme.space[2])};
|
269
|
+
min-height: ${rem(42)};
|
270
|
+
margin-bottom: ${rem(theme.space[5])};
|
264
271
|
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
`;
|
272
|
+
&:empty {
|
273
|
+
display: none;
|
274
|
+
}
|
275
|
+
`;
|
276
|
+
});
|
269
277
|
function PresentationDocumentHeader(props) {
|
270
278
|
const $ = c(19), {
|
271
279
|
documentId,
|
@@ -288,7 +296,7 @@ function PresentationDocumentHeader(props) {
|
|
288
296
|
} else
|
289
297
|
t2 = $[10];
|
290
298
|
let t3;
|
291
|
-
return $[17] !== t2 ? (t3 = /* @__PURE__ */ jsx(LocationStack, {
|
299
|
+
return $[17] !== t2 ? (t3 = /* @__PURE__ */ jsx(LocationStack, { children: t2 }), $[17] = t2, $[18] = t3) : t3 = $[18], t3;
|
292
300
|
}
|
293
301
|
function _temp$1(o) {
|
294
302
|
return o.resolve?.locations || o.locate;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"presentation.mjs","sources":["../../src/presentation/overlays/useSharedState.ts","../../src/presentation/constants.ts","../../src/presentation/i18n/index.ts","../../src/presentation/useDocumentLocations.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/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 {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 {useEffect, useMemo, useState} from 'react'\nimport {isObservable, map, of} from 'rxjs'\nimport {\n type ObjectSchemaType,\n type PreviewableType,\n useDocumentPreviewStore,\n useDocumentStore,\n usePerspective,\n} from 'sanity'\n\nimport {\n type DocumentLocationResolver,\n type DocumentLocationResolvers,\n type DocumentLocationsState,\n type DocumentLocationsStatus,\n} from './types'\n\nconst INITIAL_STATE: DocumentLocationsState = {locations: []}\n\nexport function useDocumentLocations(props: {\n id: string\n version: string | undefined\n resolvers?: DocumentLocationResolver | DocumentLocationResolvers\n type: ObjectSchemaType\n}): {\n state: DocumentLocationsState\n status: DocumentLocationsStatus\n} {\n const {id, resolvers, type, version} = props\n const documentStore = useDocumentStore()\n const documentPreviewStore = useDocumentPreviewStore()\n\n const {perspectiveStack} = usePerspective()\n const [locationsState, setLocationsState] = useState<DocumentLocationsState>(INITIAL_STATE)\n\n const resolver = resolvers && (typeof resolvers === 'function' ? resolvers : resolvers[type.name])\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: type.name, version, perspectiveStack}\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 const doc = {_type: 'reference', _ref: id}\n // Override the preview selection in the schema type to use the user\n // defined selection defined by the resolver\n const _type = {...type, preview: {select: resolver.select}} satisfies PreviewableType\n const options = {perspective: perspectiveStack}\n return documentPreviewStore\n .observeForPreview(doc, _type, options)\n .pipe(map((preview) => resolver.resolve(preview.snapshot || null)))\n }\n\n // Resolver is explicitly provided state\n return of(resolver)\n }, [documentStore, documentPreviewStore, id, resolver, type, version, perspectiveStack])\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 {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 DocumentLocationResolver,\n type DocumentLocationResolvers,\n type PresentationPluginOptions,\n} from '../types'\nimport {useDocumentLocations} from '../useDocumentLocations'\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 options: PresentationPluginOptions\n resolvers?: DocumentLocationResolver | DocumentLocationResolvers\n schemaType: ObjectSchemaType\n showPresentationTitle: boolean\n version: string | undefined\n}): ReactNode {\n const {documentId, options, resolvers, schemaType, showPresentationTitle, version} = props\n\n const {state, status} = useDocumentLocations({\n id: documentId,\n version,\n resolvers,\n type: schemaType,\n })\n\n const isResolving = status === 'resolving'\n\n const {locations, message, tone} = state\n const locationsCount = 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 (!locationsCount) return\n setExpanded((v) => !v)\n }, [locationsCount])\n\n const title = isResolving\n ? t('locations-banner.resolving.text')\n : message || t('locations-banner.locations-count', {count: locationsCount})\n\n const ToneIcon = tone ? TONE_ICONS[tone] : undefined\n\n if (!resolvers) return null\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={locationsCount ? '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 {locationsCount === 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) => {\n let active = false\n if (\n (options.name || DEFAULT_TOOL_NAME) === presentationName &&\n presentation?.params.preview\n ) {\n active = areUrlsMatching(presentation.params.preview, l.href)\n }\n\n return (\n <LocationItem\n active={active}\n documentId={documentId}\n documentType={schemaType.name}\n key={l.href}\n node={l}\n toolName={options.name || DEFAULT_TOOL_NAME}\n />\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\n/**\n * Compares two URLs to determine if they match based on origin, pathname, and search parameters\n * The previewUrl should have all the search parameters that are in the locationUrl\n */\nfunction areUrlsMatching(previewUrlString: string, locationUrlString: string): boolean {\n try {\n const previewUrl = new URL(previewUrlString, location.origin)\n const locationUrl = new URL(locationUrlString, previewUrl.origin)\n\n // First compare origin and pathname\n if (previewUrl.origin !== locationUrl.origin || previewUrl.pathname !== locationUrl.pathname) {\n return false\n }\n\n // Then check search params\n // All search params in locationUrl must exist with the same values in previewUrl\n const locationParams = new URLSearchParams(locationUrl.search)\n const previewParams = new URLSearchParams(previewUrl.search)\n\n for (const [key, value] of locationParams.entries()) {\n if (previewParams.get(key) !== value) {\n return false\n }\n }\n\n return true\n } catch {\n // If URL parsing fails, URLs don't match\n return false\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 {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 version: string | undefined\n options: PresentationPluginOptions\n schemaType: ObjectSchemaType\n}): ReactNode {\n const {documentId, options, schemaType, version} = props\n const context = useContext(PresentationDocumentContext)\n\n const contextOptions = context?.options || []\n const resolvers = contextOptions.map((o) => o.resolve?.locations || o.locate)\n const hasResolvers = resolvers.some(Boolean)\n\n if ((context && context.options[0] !== options) || !hasResolvers) {\n return null\n }\n\n return (\n <LocationStack marginBottom={5} space={5}>\n <Stack space={2}>\n {contextOptions.map((_options, idx) => (\n <LocationsBanner\n key={idx}\n documentId={documentId}\n options={_options}\n resolvers={resolvers[idx]}\n schemaType={schemaType}\n showPresentationTitle={contextOptions.length > 1}\n version={version}\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), [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> = ['preview', 'viewport']\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 {\n definePlugin,\n getPublishedId,\n getVersionFromId,\n type InputProps,\n isDocumentSchemaType,\n} 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 const documentVersion = value?._id ? getVersionFromId(value._id) : undefined\n if (isDocumentSchemaType(props.schemaType)) {\n return (\n <PresentationDocumentProvider options={options}>\n {hasLocationsResolver && documentId && (\n <PresentationDocumentHeader\n documentId={documentId}\n version={documentVersion}\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 {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","presentationLocaleNamespace","presentationUsEnglishLocaleBundle","defineLocaleResourceBundle","locale","namespace","resources","INITIAL_STATE","locations","useDocumentLocations","props","id","resolvers","type","version","documentStore","useDocumentStore","documentPreviewStore","useDocumentPreviewStore","perspectiveStack","usePerspective","locationsState","setLocationsState","useState","resolver","name","locationsStatus","setLocationsStatus","undefined","bb0","params","_result","isObservable","of","doc","_type","_ref","preview","select","options","perspective","t2","resolve","snapshot","observeForPreview","pipe","map","result","sub","subscribe","state","unsubscribe","t3","status","usePresentationTool","throwOnMissingContext","presentation","PresentationContext","useCurrentPresentationToolName","TONE_ICONS","positive","InfoOutlineIcon","caution","WarningOutlineIcon","critical","ErrorOutlineIcon","LocationsBanner","documentId","schemaType","showPresentationTitle","isResolving","message","tone","locationsCount","length","t","useTranslation","presentationName","expanded","setExpanded","_temp","toggle","count","title","ToneIcon","Symbol","for","margin","t4","t5","transform","transition","l","active","href","t6","t7","v","LocationItem","documentType","node","toolName","currentPresentationToolName","isCurrentTool","navigate","structureParams","intent","mode","presentationLinkProps","useIntentLink","handleCurrentToolClick","onClick","t8","t9","areUrlsMatching","previewUrlString","locationUrlString","previewUrl","URL","location","origin","locationUrl","pathname","locationParams","URLSearchParams","search","previewParams","entries","get","LocationStack","styled","Stack","rem","PresentationDocumentHeader","PresentationDocumentContext","contextOptions","some","Boolean","hasResolvers","_options","idx","o","locate","PresentationDocumentProvider","children","parent","parentRegister","register","optionsArray","setOptionsArray","options_0","prev","concat","prev_0","filter","options_1","registerEffectEvent","useEffectEvent","useLayoutEffect","useOpenInStructureAction","path","workspace","useWorkspace","navigateIntent","useRouter","tools","findStructureTool","defaultStructureTool","icon","MasterDetailIcon","hidden","onAction","pathToString","renderAsButton","openInStructure","defineDocumentFieldAction","useAction","presentationToolName","results","match","canHandleIntent","tool","modeMatches","isRecord","preservedSearchParamKeys","getIntentState","routerState","payload","searchParams","_searchParams","includes","reduce","acc","window","getPublishedId","Object","templateParams","encodeJsonParams","uuid","PresentationSpinner","width","router","route","create","__unsafe_disableScopedSearchParams","intents","PresentationTool","lazy","BroadcastDisplayedDocument","defineLocations","defineDocuments","presentationTool","definePlugin","console","warn","hasLocationsResolver","PresentationDocumentInput","_id","getVersionFromId","documentVersion","isDocumentSchemaType","renderDefault","canHandleCreateIntent","template","canHandleEditIntent","i18n","bundles","document","unstable_fieldActions","a","form","components","input","component","__internalApplicationType","usePresentationNavigate","PresentationNavigateContext","usePresentationParams","PresentationParamsContext"],"mappings":"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"}
|
1
|
+
{"version":3,"file":"presentation.mjs","sources":["../../src/presentation/overlays/useSharedState.ts","../../src/presentation/constants.ts","../../src/presentation/i18n/index.ts","../../src/presentation/useDocumentLocations.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/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 {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 {useEffect, useMemo, useState} from 'react'\nimport {isObservable, map, of} from 'rxjs'\nimport {\n type ObjectSchemaType,\n type PreviewableType,\n useDocumentPreviewStore,\n useDocumentStore,\n usePerspective,\n} from 'sanity'\n\nimport {\n type DocumentLocationResolver,\n type DocumentLocationResolvers,\n type DocumentLocationsState,\n type DocumentLocationsStatus,\n} from './types'\n\nconst INITIAL_STATE: DocumentLocationsState = {locations: []}\n\nexport function useDocumentLocations(props: {\n id: string\n version: string | undefined\n resolvers?: DocumentLocationResolver | DocumentLocationResolvers\n type: ObjectSchemaType\n}): {\n state: DocumentLocationsState\n status: DocumentLocationsStatus\n} {\n const {id, resolvers, type, version} = props\n const documentStore = useDocumentStore()\n const documentPreviewStore = useDocumentPreviewStore()\n\n const {perspectiveStack} = usePerspective()\n const [locationsState, setLocationsState] = useState<DocumentLocationsState>(INITIAL_STATE)\n\n const resolver = resolvers && (typeof resolvers === 'function' ? resolvers : resolvers[type.name])\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: type.name, version, perspectiveStack}\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 const doc = {_type: 'reference', _ref: id}\n // Override the preview selection in the schema type to use the user\n // defined selection defined by the resolver\n const _type = {...type, preview: {select: resolver.select}} satisfies PreviewableType\n const options = {perspective: perspectiveStack}\n return documentPreviewStore\n .observeForPreview(doc, _type, options)\n .pipe(map((preview) => resolver.resolve(preview.snapshot || null)))\n }\n\n // Resolver is explicitly provided state\n return of(resolver)\n }, [documentStore, documentPreviewStore, id, resolver, type, version, perspectiveStack])\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 {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 DocumentLocationResolver,\n type DocumentLocationResolvers,\n type PresentationPluginOptions,\n} from '../types'\nimport {useDocumentLocations} from '../useDocumentLocations'\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 options: PresentationPluginOptions\n resolvers?: DocumentLocationResolver | DocumentLocationResolvers\n schemaType: ObjectSchemaType\n showPresentationTitle: boolean\n version: string | undefined\n}): ReactNode {\n const {documentId, options, resolvers, schemaType, showPresentationTitle, version} = props\n\n const {state, status} = useDocumentLocations({\n id: documentId,\n version,\n resolvers,\n type: schemaType,\n })\n\n const isResolving = status === 'resolving'\n\n const {locations, message, tone} = state\n const locationsCount = 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 (!locationsCount) return\n setExpanded((v) => !v)\n }, [locationsCount])\n\n const title = isResolving\n ? t('locations-banner.resolving.text')\n : message || t('locations-banner.locations-count', {count: locationsCount})\n\n const ToneIcon = tone ? TONE_ICONS[tone] : undefined\n\n if (!resolvers || status === 'empty') return null\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={locationsCount ? '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 {locationsCount === 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) => {\n let active = false\n if (\n (options.name || DEFAULT_TOOL_NAME) === presentationName &&\n presentation?.params.preview\n ) {\n active = areUrlsMatching(presentation.params.preview, l.href)\n }\n\n return (\n <LocationItem\n active={active}\n documentId={documentId}\n documentType={schemaType.name}\n key={l.href}\n node={l}\n toolName={options.name || DEFAULT_TOOL_NAME}\n />\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\n/**\n * Compares two URLs to determine if they match based on origin, pathname, and search parameters\n * The previewUrl should have all the search parameters that are in the locationUrl\n */\nfunction areUrlsMatching(previewUrlString: string, locationUrlString: string): boolean {\n try {\n const previewUrl = new URL(previewUrlString, location.origin)\n const locationUrl = new URL(locationUrlString, previewUrl.origin)\n\n // First compare origin and pathname\n if (previewUrl.origin !== locationUrl.origin || previewUrl.pathname !== locationUrl.pathname) {\n return false\n }\n\n // Then check search params\n // All search params in locationUrl must exist with the same values in previewUrl\n const locationParams = new URLSearchParams(locationUrl.search)\n const previewParams = new URLSearchParams(previewUrl.search)\n\n for (const [key, value] of locationParams.entries()) {\n if (previewParams.get(key) !== value) {\n return false\n }\n }\n\n return true\n } catch {\n // If URL parsing fails, URLs don't match\n return false\n }\n}\n","import {rem} from '@sanity/ui'\n// eslint-disable-next-line camelcase\nimport {getTheme_v2} from '@sanity/ui/theme'\nimport {type ReactNode, useContext} from 'react'\nimport {type ObjectSchemaType, type PublishedId} from 'sanity'\nimport {PresentationDocumentContext} from 'sanity/_singletons'\nimport {css, styled} from 'styled-components'\n\nimport {type PresentationPluginOptions} from '../types'\nimport {LocationsBanner} from './LocationsBanner'\n\nconst LocationStack = styled.div((props) => {\n const theme = getTheme_v2(props.theme)\n return css`\n display: flex;\n flex-direction: column;\n gap: ${rem(theme.space[2])};\n min-height: ${rem(42)};\n margin-bottom: ${rem(theme.space[5])};\n\n &:empty {\n display: none;\n }\n `\n})\n\nexport function PresentationDocumentHeader(props: {\n documentId: PublishedId\n version: string | undefined\n options: PresentationPluginOptions\n schemaType: ObjectSchemaType\n}): ReactNode {\n const {documentId, options, schemaType, version} = props\n const context = useContext(PresentationDocumentContext)\n\n const contextOptions = context?.options || []\n const resolvers = contextOptions.map((o) => o.resolve?.locations || o.locate)\n const hasResolvers = resolvers.some(Boolean)\n\n if ((context && context.options[0] !== options) || !hasResolvers) {\n return null\n }\n\n return (\n <LocationStack>\n {contextOptions.map((_options, idx) => (\n <LocationsBanner\n key={idx}\n documentId={documentId}\n options={_options}\n resolvers={resolvers[idx]}\n schemaType={schemaType}\n showPresentationTitle={contextOptions.length > 1}\n version={version}\n />\n ))}\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), [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> = ['preview', 'viewport']\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 {\n definePlugin,\n getPublishedId,\n getVersionFromId,\n type InputProps,\n isDocumentSchemaType,\n} 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 const documentVersion = value?._id ? getVersionFromId(value._id) : undefined\n if (isDocumentSchemaType(props.schemaType)) {\n return (\n <PresentationDocumentProvider options={options}>\n {hasLocationsResolver && documentId && (\n <PresentationDocumentHeader\n documentId={documentId}\n version={documentVersion}\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 {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","presentationLocaleNamespace","presentationUsEnglishLocaleBundle","defineLocaleResourceBundle","locale","namespace","resources","INITIAL_STATE","locations","useDocumentLocations","props","id","resolvers","type","version","documentStore","useDocumentStore","documentPreviewStore","useDocumentPreviewStore","perspectiveStack","usePerspective","locationsState","setLocationsState","useState","resolver","name","locationsStatus","setLocationsStatus","undefined","bb0","params","_result","isObservable","of","doc","_type","_ref","preview","select","options","perspective","t2","resolve","snapshot","observeForPreview","pipe","map","result","sub","subscribe","state","unsubscribe","t3","status","usePresentationTool","throwOnMissingContext","presentation","PresentationContext","useCurrentPresentationToolName","TONE_ICONS","positive","InfoOutlineIcon","caution","WarningOutlineIcon","critical","ErrorOutlineIcon","LocationsBanner","documentId","schemaType","showPresentationTitle","isResolving","message","tone","locationsCount","length","t","useTranslation","presentationName","expanded","setExpanded","_temp","toggle","count","title","ToneIcon","Symbol","for","margin","t4","t5","transform","transition","l","active","href","t6","t7","v","LocationItem","documentType","node","toolName","currentPresentationToolName","isCurrentTool","navigate","structureParams","intent","mode","presentationLinkProps","useIntentLink","handleCurrentToolClick","onClick","t8","t9","areUrlsMatching","previewUrlString","locationUrlString","previewUrl","URL","location","origin","locationUrl","pathname","locationParams","URLSearchParams","search","previewParams","entries","get","LocationStack","styled","div","theme","getTheme_v2","css","rem","space","PresentationDocumentHeader","PresentationDocumentContext","contextOptions","some","Boolean","hasResolvers","_options","idx","o","locate","PresentationDocumentProvider","children","parent","parentRegister","register","optionsArray","setOptionsArray","options_0","prev","concat","prev_0","filter","options_1","registerEffectEvent","useEffectEvent","useLayoutEffect","useOpenInStructureAction","path","workspace","useWorkspace","navigateIntent","useRouter","tools","findStructureTool","defaultStructureTool","icon","MasterDetailIcon","hidden","onAction","pathToString","renderAsButton","openInStructure","defineDocumentFieldAction","useAction","presentationToolName","results","match","canHandleIntent","tool","modeMatches","isRecord","preservedSearchParamKeys","getIntentState","routerState","payload","searchParams","_searchParams","includes","reduce","acc","window","getPublishedId","Object","templateParams","encodeJsonParams","uuid","PresentationSpinner","width","router","route","create","__unsafe_disableScopedSearchParams","intents","PresentationTool","lazy","BroadcastDisplayedDocument","defineLocations","defineDocuments","presentationTool","definePlugin","console","warn","hasLocationsResolver","PresentationDocumentInput","_id","getVersionFromId","documentVersion","isDocumentSchemaType","renderDefault","canHandleCreateIntent","template","canHandleEditIntent","i18n","bundles","document","unstable_fieldActions","a","form","components","input","component","__internalApplicationType","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.92.1-next.
|
3
|
+
"version": "3.92.1-next.41.f6367213ff",
|
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",
|
@@ -156,11 +156,11 @@
|
|
156
156
|
"@rexxars/react-json-inspector": "^9.0.1",
|
157
157
|
"@sanity/asset-utils": "^2.2.1",
|
158
158
|
"@sanity/bifur-client": "^0.4.1",
|
159
|
-
"@sanity/cli": "3.92.1-next.
|
159
|
+
"@sanity/cli": "3.92.1-next.41.f6367213ff",
|
160
160
|
"@sanity/client": "^7.6.0",
|
161
161
|
"@sanity/color": "^3.0.6",
|
162
162
|
"@sanity/comlink": "^3.0.5",
|
163
|
-
"@sanity/diff": "3.92.1-next.
|
163
|
+
"@sanity/diff": "3.92.1-next.41.f6367213ff",
|
164
164
|
"@sanity/diff-match-patch": "^3.2.0",
|
165
165
|
"@sanity/diff-patch": "^5.0.0",
|
166
166
|
"@sanity/eventsource": "^5.0.2",
|
@@ -172,16 +172,16 @@
|
|
172
172
|
"@sanity/insert-menu": "^1.1.12",
|
173
173
|
"@sanity/logos": "^2.2.0",
|
174
174
|
"@sanity/message-protocol": "^0.13.0",
|
175
|
-
"@sanity/migrate": "3.92.1-next.
|
176
|
-
"@sanity/mutator": "3.92.1-next.
|
175
|
+
"@sanity/migrate": "3.92.1-next.41.f6367213ff",
|
176
|
+
"@sanity/mutator": "3.92.1-next.41.f6367213ff",
|
177
177
|
"@sanity/presentation-comlink": "^1.0.21",
|
178
178
|
"@sanity/preview-url-secret": "^2.1.11",
|
179
|
-
"@sanity/schema": "3.92.1-next.
|
179
|
+
"@sanity/schema": "3.92.1-next.41.f6367213ff",
|
180
180
|
"@sanity/sdk": "0.0.0-alpha.25",
|
181
181
|
"@sanity/telemetry": "^0.8.0",
|
182
|
-
"@sanity/types": "3.92.1-next.
|
182
|
+
"@sanity/types": "3.92.1-next.41.f6367213ff",
|
183
183
|
"@sanity/ui": "^2.15.18",
|
184
|
-
"@sanity/util": "3.92.1-next.
|
184
|
+
"@sanity/util": "3.92.1-next.41.f6367213ff",
|
185
185
|
"@sanity/uuid": "^3.0.2",
|
186
186
|
"@sentry/react": "^8.33.0",
|
187
187
|
"@tanstack/react-table": "^8.16.0",
|
@@ -288,7 +288,7 @@
|
|
288
288
|
"@repo/dev-aliases": "3.92.0",
|
289
289
|
"@repo/package.config": "3.92.0",
|
290
290
|
"@repo/test-config": "3.92.0",
|
291
|
-
"@sanity/codegen": "3.92.1-next.
|
291
|
+
"@sanity/codegen": "3.92.1-next.41.f6367213ff",
|
292
292
|
"@sanity/generate-help-url": "^3.0.0",
|
293
293
|
"@sanity/pkg-utils": "6.13.4",
|
294
294
|
"@sanity/tsdoc": "1.0.169",
|
@@ -335,5 +335,5 @@
|
|
335
335
|
"engines": {
|
336
336
|
"node": ">=18"
|
337
337
|
},
|
338
|
-
"gitHead": "
|
338
|
+
"gitHead": "f6367213fff469f5edf312d96a0ae6ca98ceffa2"
|
339
339
|
}
|
@@ -65,7 +65,7 @@ export function LocationsBanner(props: {
|
|
65
65
|
|
66
66
|
const ToneIcon = tone ? TONE_ICONS[tone] : undefined
|
67
67
|
|
68
|
-
if (!resolvers) return null
|
68
|
+
if (!resolvers || status === 'empty') return null
|
69
69
|
return (
|
70
70
|
<Card padding={1} radius={2} border tone={tone}>
|
71
71
|
<div style={{margin: -1}}>
|
@@ -1,19 +1,28 @@
|
|
1
|
-
import {rem
|
1
|
+
import {rem} from '@sanity/ui'
|
2
|
+
// eslint-disable-next-line camelcase
|
3
|
+
import {getTheme_v2} from '@sanity/ui/theme'
|
2
4
|
import {type ReactNode, useContext} from 'react'
|
3
5
|
import {type ObjectSchemaType, type PublishedId} from 'sanity'
|
4
6
|
import {PresentationDocumentContext} from 'sanity/_singletons'
|
5
|
-
import {styled} from 'styled-components'
|
7
|
+
import {css, styled} from 'styled-components'
|
6
8
|
|
7
9
|
import {type PresentationPluginOptions} from '../types'
|
8
10
|
import {LocationsBanner} from './LocationsBanner'
|
9
11
|
|
10
|
-
const LocationStack = styled(
|
11
|
-
|
12
|
+
const LocationStack = styled.div((props) => {
|
13
|
+
const theme = getTheme_v2(props.theme)
|
14
|
+
return css`
|
15
|
+
display: flex;
|
16
|
+
flex-direction: column;
|
17
|
+
gap: ${rem(theme.space[2])};
|
18
|
+
min-height: ${rem(42)};
|
19
|
+
margin-bottom: ${rem(theme.space[5])};
|
12
20
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
`
|
21
|
+
&:empty {
|
22
|
+
display: none;
|
23
|
+
}
|
24
|
+
`
|
25
|
+
})
|
17
26
|
|
18
27
|
export function PresentationDocumentHeader(props: {
|
19
28
|
documentId: PublishedId
|
@@ -33,20 +42,18 @@ export function PresentationDocumentHeader(props: {
|
|
33
42
|
}
|
34
43
|
|
35
44
|
return (
|
36
|
-
<LocationStack
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
))}
|
49
|
-
</Stack>
|
45
|
+
<LocationStack>
|
46
|
+
{contextOptions.map((_options, idx) => (
|
47
|
+
<LocationsBanner
|
48
|
+
key={idx}
|
49
|
+
documentId={documentId}
|
50
|
+
options={_options}
|
51
|
+
resolvers={resolvers[idx]}
|
52
|
+
schemaType={schemaType}
|
53
|
+
showPresentationTitle={contextOptions.length > 1}
|
54
|
+
version={version}
|
55
|
+
/>
|
56
|
+
))}
|
50
57
|
</LocationStack>
|
51
58
|
)
|
52
59
|
}
|