sanity 5.0.1-next.7 → 5.0.1
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-es/LiveQueries.js +1 -2
- package/lib/_chunks-es/LiveQueries.js.map +1 -1
- package/lib/_chunks-es/PresentationToolGrantsCheck.js +1 -2
- package/lib/_chunks-es/PresentationToolGrantsCheck.js.map +1 -1
- package/lib/_chunks-es/StructureToolProvider.js +1 -6
- package/lib/_chunks-es/StructureToolProvider.js.map +1 -1
- package/lib/_chunks-es/_internal.js +3 -11
- package/lib/_chunks-es/_internal.js.map +1 -1
- package/lib/_chunks-es/createAspectAction.js +1 -1
- package/lib/_chunks-es/createAspectAction.js.map +1 -1
- package/lib/_chunks-es/deleteSchemaAction.js +1 -1
- package/lib/_chunks-es/deleteSchemaAction.js.map +1 -1
- package/lib/_chunks-es/deployApiAction.js +1 -5
- package/lib/_chunks-es/deployApiAction.js.map +1 -1
- package/lib/_chunks-es/deploySchemasAction.js +1 -1
- package/lib/_chunks-es/deploySchemasAction.js.map +1 -1
- package/lib/_chunks-es/index3.js +1 -2
- package/lib/_chunks-es/index3.js.map +1 -1
- package/lib/_chunks-es/listSchemasAction.js +1 -1
- package/lib/_chunks-es/listSchemasAction.js.map +1 -1
- package/lib/_chunks-es/package.js +1 -1
- package/lib/_chunks-es/pane.js +2 -9
- package/lib/_chunks-es/pane.js.map +1 -1
- package/lib/_chunks-es/presentation.js +1 -2
- package/lib/_chunks-es/presentation.js.map +1 -1
- package/lib/_chunks-es/runtime.js +1 -1
- package/lib/_chunks-es/runtime.js.map +1 -1
- package/lib/_chunks-es/schemaStoreOutStrings.js +1 -1
- package/lib/_chunks-es/schemaStoreOutStrings.js.map +1 -1
- package/lib/_chunks-es/uniqueProjectIdDataset.js +1 -1
- package/lib/_chunks-es/uniqueProjectIdDataset.js.map +1 -1
- package/lib/_chunks-es/version.js +1 -1
- package/lib/_internal/cli/threads/extractManifest.cjs +3 -3
- package/lib/_internal/cli/threads/extractManifest.cjs.map +1 -1
- package/lib/_internal/cli/threads/getGraphQLAPIs.cjs +3 -3
- package/lib/_internal/cli/threads/getGraphQLAPIs.cjs.map +1 -1
- package/lib/index.d.ts +2 -3
- package/lib/index.js +78 -121
- package/lib/index.js.map +1 -1
- package/lib/router.js +1 -8
- package/lib/router.js.map +1 -1
- package/package.json +35 -36
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { c } from "react/compiler-runtime";
|
|
2
|
-
import { useContext, useEffect, useState, useLayoutEffect, lazy, Suspense } from "react";
|
|
2
|
+
import { useContext, useEffect, useState, useEffectEvent, useLayoutEffect, lazy, Suspense } from "react";
|
|
3
3
|
import { PresentationSharedStateContext, PresentationContext, PresentationDocumentContext, PresentationNavigateContext, PresentationParamsContext } from "sanity/_singletons";
|
|
4
4
|
import { jsxs, Fragment, jsx } from "react/jsx-runtime";
|
|
5
5
|
import { defineLocaleResourceBundle, usePerspective, useDocumentStore, useDocumentPreviewStore, useTranslation, defineDocumentFieldAction, useWorkspace, pathToString, isRecord, getPublishedId, definePlugin, getVersionFromId, isDocumentSchemaType } from "sanity";
|
|
@@ -11,7 +11,6 @@ import { styled, css } from "styled-components";
|
|
|
11
11
|
import { useIntentLink, useRouter, encodeJsonParams, route } from "sanity/router";
|
|
12
12
|
import { PaneRouterContext, usePaneRouter } from "sanity/structure";
|
|
13
13
|
import { of, isObservable, map } from "rxjs";
|
|
14
|
-
import { useEffectEvent } from "use-effect-event";
|
|
15
14
|
import { uuid } from "@sanity/uuid";
|
|
16
15
|
const useSharedState = (key, value) => {
|
|
17
16
|
const $ = c(5), context = useContext(PresentationSharedStateContext);
|
|
@@ -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/usePresentationPerspectiveStack.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 {useContext} from 'react'\nimport {usePerspective} from 'sanity'\nimport {PaneRouterContext} from 'sanity/structure'\n\nexport function usePresentationPerspectiveStack() {\n const {perspectiveStack} = usePerspective()\n const paneRouter = useContext(PaneRouterContext)\n if (!paneRouter) {\n throw new Error('PaneRouter not found')\n }\n const scheduledDraftPerspective = paneRouter.params?.scheduledDraft\n\n if (scheduledDraftPerspective) {\n return [scheduledDraftPerspective, ...perspectiveStack]\n }\n return perspectiveStack\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} from 'sanity'\n\nimport {\n type DocumentLocationResolver,\n type DocumentLocationResolvers,\n type DocumentLocationsState,\n type DocumentLocationsStatus,\n} from './types'\nimport {usePresentationPerspectiveStack} from './usePresentationPerspectiveStack'\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 = usePresentationPerspectiveStack()\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'\nimport {usePaneRouter} from 'sanity/structure'\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 key={l.href}\n active={active}\n documentId={documentId}\n documentType={schemaType.name}\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 const {params: paneParams} = usePaneRouter()\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 ...paneParams,\n preview: node.href,\n },\n })\n\n const handleCurrentToolClick = useCallback(() => {\n navigate?.({params: {preview: node.href}})\n }, [node.href, navigate])\n\n return (\n <Card\n key={node.href}\n {...(isCurrentTool ? {} : presentationLinkProps)}\n as=\"a\"\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 // oxlint-disable-next-line no-array-index-key\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 // oxlint-disable-next-line 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 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","usePresentationPerspectiveStack","perspectiveStack","usePerspective","paneRouter","PaneRouterContext","scheduledDraftPerspective","params","scheduledDraft","INITIAL_STATE","locations","useDocumentLocations","props","id","resolvers","type","version","documentStore","useDocumentStore","documentPreviewStore","useDocumentPreviewStore","locationsState","setLocationsState","useState","resolver","name","locationsStatus","setLocationsStatus","bb0","undefined","_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","for","margin","t4","t5","transform","transition","l","active","areUrlsMatching","href","t6","t7","v","LocationItem","documentType","node","toolName","currentPresentationToolName","isCurrentTool","navigate","paneParams","usePaneRouter","structureParams","intent","mode","presentationLinkProps","useIntentLink","handleCurrentToolClick","onClick","Symbol","t8","t9","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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"}
|
|
1
|
+
{"version":3,"file":"presentation.js","sources":["../../src/presentation/overlays/useSharedState.ts","../../src/presentation/constants.ts","../../src/presentation/i18n/index.ts","../../src/presentation/usePresentationPerspectiveStack.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 {useContext} from 'react'\nimport {usePerspective} from 'sanity'\nimport {PaneRouterContext} from 'sanity/structure'\n\nexport function usePresentationPerspectiveStack() {\n const {perspectiveStack} = usePerspective()\n const paneRouter = useContext(PaneRouterContext)\n if (!paneRouter) {\n throw new Error('PaneRouter not found')\n }\n const scheduledDraftPerspective = paneRouter.params?.scheduledDraft\n\n if (scheduledDraftPerspective) {\n return [scheduledDraftPerspective, ...perspectiveStack]\n }\n return perspectiveStack\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} from 'sanity'\n\nimport {\n type DocumentLocationResolver,\n type DocumentLocationResolvers,\n type DocumentLocationsState,\n type DocumentLocationsStatus,\n} from './types'\nimport {usePresentationPerspectiveStack} from './usePresentationPerspectiveStack'\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 = usePresentationPerspectiveStack()\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'\nimport {usePaneRouter} from 'sanity/structure'\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 key={l.href}\n active={active}\n documentId={documentId}\n documentType={schemaType.name}\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 const {params: paneParams} = usePaneRouter()\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 ...paneParams,\n preview: node.href,\n },\n })\n\n const handleCurrentToolClick = useCallback(() => {\n navigate?.({params: {preview: node.href}})\n }, [node.href, navigate])\n\n return (\n <Card\n key={node.href}\n {...(isCurrentTool ? {} : presentationLinkProps)}\n as=\"a\"\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 // oxlint-disable-next-line no-array-index-key\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 {\n type ReactNode,\n useCallback,\n useContext,\n useEffectEvent,\n useLayoutEffect,\n useMemo,\n useState,\n} from 'react'\nimport {PresentationDocumentContext} from 'sanity/_singletons'\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 // oxlint-disable-next-line 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 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","usePresentationPerspectiveStack","perspectiveStack","usePerspective","paneRouter","PaneRouterContext","scheduledDraftPerspective","params","scheduledDraft","INITIAL_STATE","locations","useDocumentLocations","props","id","resolvers","type","version","documentStore","useDocumentStore","documentPreviewStore","useDocumentPreviewStore","locationsState","setLocationsState","useState","resolver","name","locationsStatus","setLocationsStatus","bb0","undefined","_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","for","margin","t4","t5","transform","transition","l","active","areUrlsMatching","href","t6","t7","v","LocationItem","documentType","node","toolName","currentPresentationToolName","isCurrentTool","navigate","paneParams","usePaneRouter","structureParams","intent","mode","presentationLinkProps","useIntentLink","handleCurrentToolClick","onClick","Symbol","t8","t9","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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"}
|
|
@@ -2,7 +2,7 @@ import path from "node:path";
|
|
|
2
2
|
import { fileURLToPath } from "node:url";
|
|
3
3
|
import debug$4 from "debug";
|
|
4
4
|
import readPkgUp from "read-pkg-up";
|
|
5
|
-
import escapeRegExp from "lodash
|
|
5
|
+
import { escapeRegExp } from "lodash-es";
|
|
6
6
|
import { createRequire } from "node:module";
|
|
7
7
|
import * as resolve from "resolve.exports";
|
|
8
8
|
import { getAppEnvironmentVariables, getStudioEnvironmentVariables } from "./cli.js";
|