UNPKG

@sanity/visual-editing

Version:

[![npm stat](https://img.shields.io/npm/dm/@sanity/visual-editing.svg?style=flat-square)](https://npm-stat.com/charts.html?package=@sanity/visual-editing) [![npm version](https://img.shields.io/npm/v/@sanity/visual-editing.svg?style=flat-square)](https://

1 lines 16.9 kB
{"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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"}