@sanity/visual-editing
Version:
[](https://npm-stat.com/charts.html?package=@sanity/visual-editing) [](https://
1 lines • 16.9 kB
Source Map (JSON)
{"version":3,"file":"PointerEvents.cjs","sources":["../../src/util/getNodeIcon.tsx","../../src/ui/PopoverPortal.tsx","../../src/ui/telemetry/TelemetryContext.tsx","../../src/ui/telemetry/useTelemetry.tsx","../../src/overlay-components/components/InsertMenu.tsx","../../src/overlay-components/components/PointerEvents.tsx"],"sourcesContent":["import {\n BlockContentIcon,\n CheckmarkCircleIcon,\n CubeIcon,\n ImageIcon,\n NumberIcon,\n StringIcon,\n ThListIcon,\n} from '@sanity/icons'\nimport type {\n SchemaArrayItem,\n SchemaNumberNode,\n SchemaObjectField,\n SchemaStringNode,\n SchemaUnionOption,\n} from '@sanity/presentation-comlink'\n\ntype Option =\n | SchemaNumberNode\n | SchemaStringNode\n | SchemaArrayItem\n | SchemaObjectField\n | SchemaUnionOption\n\nexport function getNodeIcon(option: Option | undefined): React.JSX.Element {\n if (!option) return <CubeIcon />\n\n if (option.type === 'string') {\n return <StringIcon />\n }\n\n if (option.type === 'number') {\n return <NumberIcon />\n }\n\n const {value: node} = option\n\n if ('icon' in option && option.icon) {\n return <div dangerouslySetInnerHTML={{__html: option.icon}} />\n }\n\n const {type} = node\n\n if (type === 'string') {\n return <StringIcon />\n }\n\n if (type === 'boolean') {\n return <CheckmarkCircleIcon />\n }\n\n if (type === 'number') {\n return <NumberIcon />\n }\n\n if (type === 'array' || type === 'union') {\n const of = Array.isArray(node.of) ? node.of : [node.of]\n if (of.some((n) => 'name' in n && n.name === 'block')) {\n return <BlockContentIcon />\n }\n return <ThListIcon />\n }\n\n if (type === 'object') {\n if (option.name === 'image') {\n return <ImageIcon />\n }\n if (option.name === 'block') {\n return <StringIcon />\n }\n }\n\n return <CubeIcon />\n}\n","import {Portal} from '@sanity/ui/_visual-editing'\nimport {type FunctionComponent, type MouseEvent} from 'react'\nimport {css, styled} from 'styled-components'\n\nconst scrollBlockStyles = css`\n overflow-y: scroll;\n overscroll-behavior: contain;\n -ms-overflow-style: none;\n scrollbar-width: none;\n\n &:before {\n content: '';\n display: block;\n height: calc(100% + 1px);\n position: absolute;\n top: 0;\n width: 100%;\n z-index: -1;\n }\n`\n\nconst PortalContainer = styled.div<{$blockScroll: boolean}>`\n height: 100%;\n inset: 0;\n pointer-events: all;\n position: fixed;\n width: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n\n ${(props) => props.$blockScroll && scrollBlockStyles}\n`\nconst PortalBackground = styled.div`\n background: transparent;\n height: 100%;\n inset: 0;\n position: absolute;\n width: 100%;\n`\n\ntype PopoverPortalProps = {\n children?: React.ReactNode\n onDismiss?: () => void\n setBoundaryElement?: (element: HTMLDivElement) => void\n blockScroll?: boolean\n}\n\nexport const PopoverPortal: FunctionComponent<PopoverPortalProps> = (props) => {\n return (\n <Portal>\n <PopoverBackground {...props} />\n </Portal>\n )\n}\n\nexport const PopoverBackground: FunctionComponent<{\n children?: React.ReactNode\n onDismiss?: () => void\n setBoundaryElement?: (element: HTMLDivElement) => void\n blockScroll?: boolean\n}> = (props) => {\n const {children, onDismiss, setBoundaryElement, blockScroll = true} = props\n\n // Prevent the event from propagating to the window, so that the controller's\n // `handleBlur` listener is not triggered. This is needed to prevent the\n // context menu from being dismissed when some click causes parent elements to\n // re-render, and the data-attribute method of preventing propagation fails.\n const handleClick = (event: MouseEvent) => {\n event.stopPropagation()\n }\n\n return (\n <PortalContainer\n data-sanity-overlay-element\n ref={setBoundaryElement}\n onClick={handleClick}\n $blockScroll={blockScroll}\n >\n <PortalBackground\n onMouseDownCapture={() => {\n onDismiss?.()\n }}\n />\n {children}\n </PortalContainer>\n )\n}\n","import {defineEvent} from '@sanity/telemetry'\nimport {createContext} from 'react'\n\nexport const events = {\n 'Visual Editing Drag Sequence Completed': defineEvent({\n name: 'Visual Editing Drag Sequence Completed',\n description: 'An array is successfully reordered using drag and drop.',\n version: 1,\n }),\n 'Visual Editing Drag Minimap Enabled': defineEvent({\n name: 'Visual Editing Drag Minimap Enabled',\n description: 'The zoomed-out minimap view is enabled during a drag sequence.',\n version: 1,\n }),\n 'Visual Editing Context Menu Item Removed': defineEvent({\n name: 'Visual Editing Context Menu Item Removed',\n description: 'An item is removed using the Context Menu.',\n version: 1,\n }),\n 'Visual Editing Context Menu Item Duplicated': defineEvent({\n name: 'Visual Editing Context Menu Item Duplicated',\n description: 'An item is duplicated using the Context Menu.',\n version: 1,\n }),\n 'Visual Editing Context Menu Item Moved': defineEvent({\n name: 'Visual Editing Context Menu Item Moved',\n description: 'An item is moved using the Context Menu.',\n version: 1,\n }),\n 'Visual Editing Context Menu Item Inserted': defineEvent({\n name: 'Visual Editing Context Menu Item Inserted',\n description: 'An item is inserted using the Context Menu.',\n version: 1,\n }),\n 'Visual Editing Insert Menu Item Inserted': defineEvent({\n name: 'Visual Editing Insert Menu Item Inserted',\n description: 'An item is inserted using the Insert Menu.',\n version: 1,\n }),\n 'Visual Editing Overlay Clicked': defineEvent({\n name: 'Visual Editing Overlay Clicked',\n description: 'An Overlay is clicked.',\n version: 1,\n }),\n}\n\ntype EventDataMap = {\n [K in keyof typeof events]: (typeof events)[K] extends ReturnType<typeof defineEvent<infer T>>\n ? T\n : never\n}\n\nexport type TelemetryEventNames = keyof typeof events\n\nexport type TelemetryContextValue = <K extends keyof typeof events>(\n name: K,\n data: EventDataMap[K] extends void ? null | undefined : EventDataMap[K],\n) => void\n\nexport const TelemetryContext = createContext<TelemetryContextValue | undefined>(undefined)\n","import {useContext} from 'react'\nimport {TelemetryContext, type TelemetryContextValue} from './TelemetryContext'\n\nexport function useTelemetry(): TelemetryContextValue {\n const context = useContext(TelemetryContext)\n\n if (!context) {\n throw new Error('Telemetry context is missing')\n }\n\n return context\n}\n","import type {InsertMenuOptions} from '@sanity/insert-menu'\nimport {InsertMenu as SanityInsertMenu} from '@sanity/insert-menu'\nimport type {SchemaUnionNode} from '@sanity/presentation-comlink'\nimport type {SchemaType} from '@sanity/types'\nimport {Popover} from '@sanity/ui/_visual-editing'\nimport {type FunctionComponent} from 'react'\nimport {PopoverPortal} from '../../ui/PopoverPortal'\nimport {getNodeIcon} from '../../util/getNodeIcon'\n\n// @todo How can this be localised?\nconst labels = {\n 'insert-menu.filter.all-items': 'All',\n 'insert-menu.search.no-results': 'No results',\n 'insert-menu.search.placeholder': 'Filter types…',\n 'insert-menu.toggle-grid-view.tooltip': 'Toggle grid view',\n 'insert-menu.toggle-list-view.tooltip': 'Toggle list view',\n} as const\n\nexport interface InsertMenuProps {\n node: SchemaUnionNode\n onSelect: (schemaType: SchemaType) => void\n}\n\nexport const InsertMenu: FunctionComponent<InsertMenuProps> = (props) => {\n const {node, onSelect} = props\n\n const insertMenuOptions = node.options?.insertMenu || {}\n\n const views: InsertMenuOptions['views'] = insertMenuOptions.views?.map((view) => {\n // Map the `previewImageUrls` that Presentation already resolved and\n // serialized back to a function so that InsertMenu can \"resolve\" them\n if (view.name === 'grid') {\n return {\n ...view,\n previewImageUrl: (name) => view.previewImageUrls?.[name],\n }\n }\n return view\n })\n\n return (\n <SanityInsertMenu\n {...insertMenuOptions}\n labels={labels}\n // @ts-expect-error -- @todo map typings\n schemaTypes={node.of.map((type) => ({\n ...type,\n icon: getNodeIcon(type),\n }))}\n onSelect={onSelect}\n views={views}\n />\n )\n}\n\nexport interface InsertMenuPopoverProps extends InsertMenuProps {\n onDismiss: () => void\n referenceElement?: HTMLElement | null\n}\n\nexport const InsertMenuPopover: FunctionComponent<InsertMenuPopoverProps> = (props) => {\n const {node, onDismiss, onSelect, referenceElement} = props\n\n const popoverContent = <InsertMenu node={node} onSelect={onSelect} />\n\n const insertMenuOptions = node.options?.insertMenu || {}\n\n // If the grid view is not enabled, the popover should fit the content. If it\n // is enabled, the popover width needs to be 'forced' to some arbitrary amount\n // to prevent the grid from collapsing to a single column. The '0' size allows\n // for a two column layout\n const width = insertMenuOptions.views?.some((view) => view.name === 'grid') ? 0 : undefined\n\n return (\n <PopoverPortal onDismiss={onDismiss}>\n <Popover\n animate={true}\n constrainSize\n content={popoverContent}\n fallbackPlacements={['bottom']}\n open\n placement={'top'}\n preventOverflow\n referenceElement={referenceElement}\n width={width}\n />\n </PopoverPortal>\n )\n}\n","import type {FunctionComponent, HTMLAttributes, PropsWithChildren} from 'react'\n\nexport const PointerEvents: FunctionComponent<\n PropsWithChildren<HTMLAttributes<HTMLDivElement>>\n> = ({children, style, ...rest}) => {\n return (\n <div style={{...style, pointerEvents: 'all'}} data-sanity-overlay-element {...rest}>\n {children}\n </div>\n )\n}\n"],"names":["getNodeIcon","option","jsx","CubeIcon","type","StringIcon","NumberIcon","value","node","icon","__html","CheckmarkCircleIcon","Array","isArray","of","some","n","name","BlockContentIcon","ThListIcon","ImageIcon","scrollBlockStyles","css","PortalContainer","styled","div","props","$blockScroll","PortalBackground","PopoverPortal","$","_c","t0","Portal","PopoverBackground","children","onDismiss","setBoundaryElement","blockScroll","undefined","handleClick","_temp","t1","t2","jsxs","event","stopPropagation","events","defineEvent","description","version","TelemetryContext","createContext","useTelemetry","context","useContext","Error","labels","InsertMenu","onSelect","options","insertMenu","insertMenuOptions","views","map","_temp2","t3","SanityInsertMenu","InsertMenuPopover","referenceElement","popoverContent","width","_temp3","Symbol","for","Popover","view","previewImageUrl","previewImageUrls","PointerEvents","rest","style","pointerEvents"],"mappings":"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"}