@handsontable/react-wrapper 17.0.0-rc1 → 17.0.0-rc10

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.
@@ -1 +1 @@
1
- {"version":3,"file":"react-handsontable.min.js","sources":["../src/helpers.tsx","../src/settingsMapper.ts","../src/hotTableContext.tsx","../src/hotColumnContext.tsx","../src/hotEditor.tsx","../src/hotColumn.tsx","../src/renderersPortalManager.tsx","../../../node_modules/.pnpm/prop-types@15.8.1/node_modules/prop-types/index.js","../../../node_modules/.pnpm/prop-types@15.8.1/node_modules/prop-types/factoryWithThrowingShims.js","../../../node_modules/.pnpm/prop-types@15.8.1/node_modules/prop-types/lib/ReactPropTypesSecret.js","../src/hotTableInner.tsx","../src/hotTable.tsx"],"sourcesContent":["import React, {\n ComponentType,\n CSSProperties,\n DependencyList,\n EffectCallback,\n ReactNode,\n ReactPortal,\n useEffect,\n} from 'react';\nimport ReactDOM from 'react-dom';\nimport { HotTableProps } from './types';\n\nlet bulkComponentContainer: DocumentFragment | null = null;\n\n/**\n * Warning message for the `autoRowSize`/`autoColumnSize` compatibility check.\n */\nexport const AUTOSIZE_WARNING = 'Your `HotTable` configuration includes `autoRowSize`/`autoColumnSize` options, which are not compatible with ' +\n ' the component-based renderers`. Disable `autoRowSize` and `autoColumnSize` to prevent row and column misalignment.';\n\n/**\n * Warning message for the `hot-renderer` obsolete renderer passing method.\n */\nexport const OBSOLETE_HOTRENDERER_WARNING = 'Providing a component-based renderer using `hot-renderer`-annotated component is no longer supported. ' +\n 'Pass your component using `renderer` prop of the `HotTable` or `HotColumn` component instead.';\n\n/**\n * Warning message for the `hot-editor` obsolete editor passing method.\n */\nexport const OBSOLETE_HOTEDITOR_WARNING = 'Providing a component-based editor using `hot-editor`-annotated component is no longer supported. ' +\n 'Pass your component using `editor` prop of the `HotTable` or `HotColumn` component instead.';\n\n/**\n * Warning message for the unexpected children of HotTable component.\n */\nexport const UNEXPECTED_HOTTABLE_CHILDREN_WARNING = 'Unexpected children nodes found in HotTable component. ' +\n 'Only HotColumn components are allowed.';\n\n/**\n * Warning message for the unexpected children of HotColumn component.\n */\nexport const UNEXPECTED_HOTCOLUMN_CHILDREN_WARNING = 'Unexpected children nodes found in HotColumn component. ' +\n 'HotColumn components do not support any children.';\n\n/**\n * Message for the warning thrown if the Handsontable instance has been destroyed.\n */\nexport const HOT_DESTROYED_WARNING = 'The Handsontable instance bound to this component was destroyed and cannot be' +\n ' used properly.';\n\n/**\n * Default classname given to the wrapper container.\n */\nexport const DEFAULT_CLASSNAME = 'hot-wrapper-editor-container';\n\n/**\n * Logs warn to the console if the `console` object is exposed.\n *\n * @param {...*} args Values which will be logged.\n */\nexport function warn(...args: any[]) {\n if (typeof console !== 'undefined') {\n console.warn(...args);\n }\n}\n\n/**\n * Detect if `hot-renderer` or `hot-editor` is defined, and if so, throw an incompatibility warning.\n *\n * @returns {boolean} 'true' if the warning was issued\n */\nexport function displayObsoleteRenderersEditorsWarning(children: ReactNode): boolean {\n if (hasChildElementOfType(children, 'hot-renderer')) {\n warn(OBSOLETE_HOTRENDERER_WARNING);\n return true;\n }\n if (hasChildElementOfType(children, 'hot-editor')) {\n warn(OBSOLETE_HOTEDITOR_WARNING);\n return true;\n }\n\n return false\n}\n\n/**\n * Detect if children of specified type are defined, and if so, throw an incompatibility warning.\n *\n * @param {ReactNode} children Component children nodes\n * @param {ComponentType} Component Component type to check\n * @returns {boolean} 'true' if the warning was issued\n */\nexport function displayChildrenOfTypeWarning(children: ReactNode, Component: ComponentType): boolean {\n const childrenArray: ReactNode[] = React.Children.toArray(children);\n\n if (childrenArray.some((child) => (child as React.ReactElement).type !== Component)) {\n warn(UNEXPECTED_HOTTABLE_CHILDREN_WARNING);\n return true;\n }\n\n return false\n}\n\n/**\n * Detect if children is defined, and if so, throw an incompatibility warning.\n *\n * @param {ReactNode} children Component children nodes\n * @returns {boolean} 'true' if the warning was issued\n */\nexport function displayAnyChildrenWarning(children: ReactNode): boolean {\n const childrenArray: ReactNode[] = React.Children.toArray(children);\n\n if (childrenArray.length) {\n warn(UNEXPECTED_HOTCOLUMN_CHILDREN_WARNING);\n return true;\n }\n\n return false\n}\n\n/**\n * Check the existence of elements of the provided `type` from the `HotColumn` component's children.\n *\n * @param {ReactNode} children HotTable children array.\n * @param {String} type Either `'hot-renderer'` or `'hot-editor'`.\n * @returns {boolean} `true` if the child of that type was found, `false` otherwise.\n */\nfunction hasChildElementOfType(children: ReactNode, type: 'hot-renderer' | 'hot-editor'): boolean {\n const childrenArray: ReactNode[] = React.Children.toArray(children);\n\n return childrenArray.some((child) => {\n return (child as React.ReactElement).props[type] !== void 0;\n });\n}\n\n/**\n * Create an editor portal.\n *\n * @param {Document} doc Document to be used.\n * @param {ComponentType} Editor Editor component or render function.\n * @returns {ReactPortal} The portal for the editor.\n */\nexport function createEditorPortal(doc: Document | null, Editor: HotTableProps['editor'] | undefined | boolean): ReactPortal | null {\n if (!doc || !Editor || typeof Editor === 'boolean') {\n return null;\n }\n\n const editorElement = <Editor />;\n const containerProps = getContainerAttributesProps({}, false);\n\n containerProps.className = `${DEFAULT_CLASSNAME} ${containerProps.className}`;\n\n return ReactDOM.createPortal(\n <div {...containerProps}>\n {editorElement}\n </div>\n , doc.body);\n}\n\n/**\n * Render a cell component to an external DOM node.\n *\n * @param {React.ReactElement} rElement React element to be used as a base for the component.\n * @param {Document} [ownerDocument] The owner document to set the portal up into.\n * @param {String} portalKey The key to be used for the portal.\n * @param {HTMLElement} [cachedContainer] The cached container to be used for the portal.\n * @returns {{portal: ReactPortal, portalContainer: HTMLElement}} An object containing the portal and its container.\n */\nexport function createPortal(rElement: React.ReactElement, ownerDocument: Document | null = document, portalKey: string, cachedContainer?: HTMLElement): {\n portal: ReactPortal,\n portalContainer: HTMLElement,\n} {\n if (!ownerDocument) {\n ownerDocument = document;\n }\n\n if (!bulkComponentContainer) {\n bulkComponentContainer = ownerDocument.createDocumentFragment();\n }\n\n const portalContainer = cachedContainer ?? ownerDocument.createElement('DIV');\n bulkComponentContainer.appendChild(portalContainer);\n\n return {\n portal: ReactDOM.createPortal(rElement, portalContainer, portalKey),\n portalContainer\n };\n}\n\n/**\n * Get an object containing the `id`, `className` and `style` keys, representing the corresponding props passed to the\n * component.\n *\n * @param {HotTableProps} props Object containing the React element props.\n * @param {Boolean} randomizeId If set to `true`, the function will randomize the `id` property when no `id` was present in the `prop` object.\n * @returns An object containing the `id`, `className` and `style` keys, representing the corresponding props passed to the\n * component.\n */\nexport function getContainerAttributesProps(props: HotTableProps, randomizeId: boolean = true): {id?: string, className: string, style: CSSProperties} {\n return {\n id: props.id || (randomizeId ? 'hot-' + Math.random().toString(36).substring(5) : undefined),\n className: props.className || '',\n style: props.style || {},\n };\n}\n\n/**\n * Checks if the environment that the code runs in is a browser.\n *\n * @returns {boolean}\n */\nexport function isCSR(): boolean {\n return typeof window !== 'undefined';\n}\n\n/**\n * A variant of useEffect hook that does not trigger on initial mount, only updates\n *\n * @param effect Effect function\n * @param deps Effect dependencies\n */\nexport function useUpdateEffect(effect: EffectCallback, deps?: DependencyList): void {\n const notInitialRender = React.useRef(false);\n\n useEffect(() => {\n if (notInitialRender.current) {\n return effect();\n } else {\n notInitialRender.current = true;\n }\n }, deps);\n}\n","import Handsontable from 'handsontable/base';\nimport { HotTableProps } from './types';\n\nexport class SettingsMapper {\n /**\n * Parse component settings into Handsontable-compatible settings.\n *\n * @param {Object} properties Object containing properties from the HotTable object.\n * @param {Object} additionalSettings Additional settings.\n * @param {boolean} additionalSettings.isInit Flag determining whether the settings are being set during initialization.\n * @param {string[]} additionalSettings.initOnlySettingKeys Array of keys that can be set only during initialization.\n * @returns {Object} Handsontable-compatible settings object.\n */\n static getSettings(\n properties: HotTableProps,\n {\n prevProps = {},\n isInit = false,\n initOnlySettingKeys = []\n }: {\n prevProps?: HotTableProps;\n isInit?: boolean;\n initOnlySettingKeys?: Array<keyof Handsontable.GridSettings>\n } = {}): Handsontable.GridSettings {\n const shouldSkipProp = (key: keyof Handsontable.GridSettings) => {\n // Omit settings that can be set only during initialization and are intentionally modified.\n if (!isInit && initOnlySettingKeys.includes(key)) {\n return prevProps[key] === properties[key];\n }\n return false;\n };\n let newSettings: Handsontable.GridSettings = {};\n\n for (const key in properties) {\n if (\n key !== 'children' &&\n !shouldSkipProp(key as keyof Handsontable.GridSettings) &&\n properties.hasOwnProperty(key)\n ) {\n (newSettings as any)[key] = properties[key as keyof HotTableProps];\n }\n }\n\n return newSettings;\n }\n}\n","import Handsontable from 'handsontable/base';\nimport React, {\n ComponentType,\n FC,\n PropsWithChildren,\n ReactPortal,\n createContext,\n useCallback,\n useRef,\n useMemo,\n useContext,\n} from 'react';\nimport { ScopeIdentifier, HotRendererProps } from './types'\nimport { createPortal } from './helpers'\nimport { RenderersPortalManagerRef } from './renderersPortalManager'\n\nexport interface HotTableContextImpl {\n /**\n * Map with column indexes (or a string = 'global') as keys, and booleans as values. Each key represents a component-based editor\n * declared for the used column index, or a global one, if the key is the `global` string.\n */\n readonly componentRendererColumns: Map<ScopeIdentifier, boolean>;\n\n /**\n * Array of object containing the column settings.\n */\n readonly columnsSettings: Handsontable.ColumnSettings[];\n\n /**\n * Sets the column settings based on information received from HotColumn.\n *\n * @param {HotTableProps} columnSettings Column settings object.\n * @param {Number} columnIndex Column index.\n */\n readonly emitColumnSettings: (columnSettings: Handsontable.ColumnSettings, columnIndex: number) => void;\n\n /**\n * Return a renderer wrapper function for the provided renderer component.\n *\n * @param {ComponentType<HotRendererProps>} Renderer React renderer component.\n * @returns {Handsontable.renderers.BaseRenderer} The Handsontable rendering function.\n */\n readonly getRendererWrapper: (Renderer: ComponentType<HotRendererProps>) => typeof Handsontable.renderers.BaseRenderer;\n\n /**\n * Clears portals cache.\n */\n readonly clearPortalCache: () => void;\n\n /**\n * Clears rendered cells cache.\n */\n readonly clearRenderedCellCache: () => void;\n\n /**\n * Set the renderers portal manager dispatch function.\n *\n * @param {RenderersPortalManagerRef} pm The PortalManager dispatch function.\n */\n readonly setRenderersPortalManagerRef: (pm: RenderersPortalManagerRef) => void;\n\n /**\n * Puts cell portals into portal manager and purges portals cache.\n */\n readonly pushCellPortalsIntoPortalManager: () => void;\n}\n\nconst HotTableContext = createContext<HotTableContextImpl | undefined>(undefined);\n\nconst HotTableContextProvider: FC<PropsWithChildren> = ({ children }) => {\n const columnsSettings = useRef<Handsontable.ColumnSettings[]>([]);\n\n const setHotColumnSettings = useCallback((columnSettings: Handsontable.ColumnSettings, columnIndex: number) => {\n columnsSettings.current[columnIndex] = columnSettings;\n }, [])\n\n const componentRendererColumns = useRef<Map<number | 'global', boolean>>(new Map());\n const renderedCellCache = useRef<Map<string, HTMLTableCellElement>>(new Map());\n const clearRenderedCellCache = useCallback(() => renderedCellCache.current.clear(), []);\n const portalCache = useRef<Map<string, ReactPortal>>(new Map());\n const clearPortalCache = useCallback(() => portalCache.current.clear(), []);\n const portalContainerCache = useRef<Map<string, HTMLElement>>(new Map());\n\n const getRendererWrapper = useCallback((Renderer: ComponentType<HotRendererProps>): typeof Handsontable.renderers.BaseRenderer => {\n return function __internalRenderer(instance, TD, row, col, prop, value, cellProperties) {\n const key = `${row}-${col}`;\n\n // Handsontable.Core type is missing guid\n const instanceGuid = (instance as unknown as { guid: string }).guid;\n\n const portalContainerKey = `${instanceGuid}-${key}`\n const portalKey = `${key}-${instanceGuid}`\n\n if (renderedCellCache.current.has(key)) {\n TD.innerHTML = renderedCellCache.current.get(key)!.innerHTML;\n }\n\n if (TD && !TD.getAttribute('ghost-table')) {\n const cachedPortal = portalCache.current.get(portalKey);\n const cachedPortalContainer = portalContainerCache.current.get(portalContainerKey);\n\n while (TD.firstChild) {\n TD.removeChild(TD.firstChild);\n }\n\n // if portal already exists, do not recreate\n if (cachedPortal && cachedPortalContainer) {\n TD.appendChild(cachedPortalContainer);\n } else {\n const rendererElement = (\n <Renderer instance={instance}\n TD={TD}\n row={row}\n col={col}\n prop={prop}\n value={value}\n cellProperties={cellProperties}/>\n );\n\n const {portal, portalContainer} = createPortal(rendererElement, TD.ownerDocument, portalKey, cachedPortalContainer);\n\n portalContainerCache.current.set(portalContainerKey, portalContainer);\n TD.appendChild(portalContainer);\n\n portalCache.current.set(portalKey, portal);\n }\n }\n\n renderedCellCache.current.set(`${row}-${col}`, TD);\n return TD;\n };\n }, []);\n\n const renderersPortalManager = useRef<RenderersPortalManagerRef>(() => undefined);\n\n const setRenderersPortalManagerRef = useCallback((pmComponent: RenderersPortalManagerRef) => {\n renderersPortalManager.current = pmComponent;\n }, []);\n\n const pushCellPortalsIntoPortalManager = useCallback(() => {\n renderersPortalManager.current!([...portalCache.current.values()]);\n }, []);\n\n const contextImpl: HotTableContextImpl = useMemo(() => ({\n componentRendererColumns: componentRendererColumns.current,\n columnsSettings: columnsSettings.current,\n emitColumnSettings: setHotColumnSettings,\n getRendererWrapper,\n clearPortalCache,\n clearRenderedCellCache,\n setRenderersPortalManagerRef,\n pushCellPortalsIntoPortalManager\n }), [setHotColumnSettings, getRendererWrapper, clearRenderedCellCache, setRenderersPortalManagerRef, pushCellPortalsIntoPortalManager]);\n\n return (\n <HotTableContext.Provider value={contextImpl}>{children}</HotTableContext.Provider>\n );\n};\n\n/**\n * Exposes the table context object to components\n *\n * @returns HotTableContext\n */\nfunction useHotTableContext(): HotTableContextImpl {\n return useContext(HotTableContext)!;\n}\n\nexport { HotTableContextProvider, useHotTableContext };\n","import React, {\n FC,\n PropsWithChildren,\n createContext,\n useContext,\n useMemo,\n} from 'react';\n\nexport interface HotColumnContextImpl {\n /**\n * Column index within a HotTable.\n */\n readonly columnIndex: number;\n\n /**\n * Get the `Document` object corresponding to the main component element.\n *\n * @returns The `Document` object used by the component.\n */\n readonly getOwnerDocument: () => Document | null;\n}\n\nconst HotColumnContext = createContext<HotColumnContextImpl | undefined>(undefined);\n\nconst HotColumnContextProvider: FC<PropsWithChildren<HotColumnContextImpl>> = ({ columnIndex, getOwnerDocument, children }) => {\n\n const contextImpl: HotColumnContextImpl = useMemo(() => ({\n columnIndex,\n getOwnerDocument\n }), [columnIndex, getOwnerDocument]);\n\n return (\n <HotColumnContext.Provider value={contextImpl}>{children}</HotColumnContext.Provider>\n );\n};\n\nconst useHotColumnContext = () => useContext(HotColumnContext)!;\n\nexport { useHotColumnContext, HotColumnContextProvider };\n","import React, {\n DependencyList,\n FC,\n MutableRefObject,\n ReactNode,\n Ref,\n RefObject,\n createContext,\n useContext,\n useDeferredValue,\n useImperativeHandle,\n useMemo,\n useState,\n useRef,\n useCallback,\n useEffect,\n Dispatch,\n} from 'react';\nimport Handsontable from 'handsontable/base';\nimport { HotEditorHooks, UseHotEditorImpl } from './types';\n\ntype HookPropName = keyof Handsontable.editors.BaseEditor | 'constructor';\n\nconst AbstractMethods: (keyof Handsontable.editors.BaseEditor)[] = [\n 'close',\n 'focus',\n 'open',\n];\nconst ExcludedMethods: (keyof Handsontable.editors.BaseEditor)[] = [\n 'getValue',\n 'setValue',\n];\n\nconst MethodsMap: Partial<\n Record<keyof Handsontable.editors.BaseEditor, keyof HotEditorHooks>\n> = {\n open: 'onOpen',\n close: 'onClose',\n prepare: 'onPrepare',\n focus: 'onFocus',\n};\n\n/**\n * Create a class to be passed to the Handsontable's settings.\n *\n * @param {RefObject<HotEditorHooks>} hooksRef Reference to component-based editor overridden hooks object.\n * @param {RefObject} instanceRef Reference to Handsontable-native custom editor class instance.\n * @returns {Function} A class to be passed to the Handsontable editor settings.\n */\nexport function makeEditorClass(\n hooksRef: MutableRefObject<HotEditorHooks | null>,\n instanceRef: MutableRefObject<Handsontable.editors.BaseEditor | null>\n): typeof Handsontable.editors.BaseEditor {\n return class CustomEditor\n extends Handsontable.editors.BaseEditor\n implements Handsontable.editors.BaseEditor {\n private value: any;\n\n constructor(hotInstance: Handsontable.Core) {\n super(hotInstance);\n instanceRef.current = this;\n\n (\n Object.getOwnPropertyNames(\n Handsontable.editors.BaseEditor.prototype\n ) as HookPropName[]\n ).forEach((propName) => {\n if (propName === 'constructor' || ExcludedMethods.includes(propName)) {\n return;\n }\n\n const baseMethod = Handsontable.editors.BaseEditor.prototype[propName];\n (CustomEditor.prototype as any)[propName] = function (\n this: CustomEditor,\n ...args: any[]\n ) {\n let result;\n\n if (!AbstractMethods.includes(propName)) {\n result = baseMethod.call(this, ...args); // call super\n }\n\n if (\n MethodsMap[propName] &&\n hooksRef.current?.[MethodsMap[propName]!]\n ) {\n result = (hooksRef.current[MethodsMap[propName]!] as any).call(\n this,\n ...args\n );\n }\n\n return result;\n }.bind(this);\n });\n }\n\n focus() { }\n\n getValue() {\n return this.value;\n }\n\n setValue(newValue: any) {\n this.value = newValue;\n }\n\n open() { }\n\n close() { }\n };\n}\n\ninterface EditorContextType {\n hooksRef: Ref<HotEditorHooks>;\n hotCustomEditorInstanceRef: RefObject<Handsontable.editors.BaseEditor>;\n}\n\n/**\n * Context to provide Handsontable-native custom editor class instance to overridden hooks object.\n */\nexport const EditorContext = createContext<EditorContextType | undefined>(\n undefined\n);\n\ninterface EditorContextProviderProps {\n hooksRef: Ref<HotEditorHooks>;\n hotCustomEditorInstanceRef: RefObject<Handsontable.editors.BaseEditor>;\n children: ReactNode;\n}\n\n/**\n * Provider of the context that exposes Handsontable-native editor instance and passes hooks object\n * for custom editor components.\n *\n * @param {Ref} hooksRef Reference for component-based editor overridden hooks object.\n * @param {RefObject} hotCustomEditorInstanceRef Reference to Handsontable-native editor instance.\n */\nexport const EditorContextProvider: FC<EditorContextProviderProps> = ({\n hooksRef,\n hotCustomEditorInstanceRef,\n children,\n}) => {\n return (\n <EditorContext.Provider value={{ hooksRef, hotCustomEditorInstanceRef }}>\n {children}\n </EditorContext.Provider>\n );\n};\n\n/**\n * Hook that allows encapsulating custom behaviours of component-based editor by customizing passed ref with overridden hooks object.\n *\n * @param {HotEditorHooks} overriddenHooks Overrides specific for the custom editor.\n * @param {DependencyList} deps Overridden hooks object React dependency list.\n * @returns {UseHotEditorImpl} Editor API methods\n */\nexport function useHotEditor<T>(\n overriddenHooks?: HotEditorHooks,\n deps?: DependencyList\n): UseHotEditorImpl<T> {\n const { hooksRef, hotCustomEditorInstanceRef } =\n useContext(EditorContext)!;\n const [rerenderTrigger, setRerenderTrigger] = useState(0);\n const [editorValue, setEditorValue] = useState<T>();\n\n // return a deferred value that allows for optimizing performance by delaying the update of a value until the next render.\n const deferredValue = useDeferredValue(editorValue);\n\n useImperativeHandle(\n hooksRef,\n () => ({\n ...overriddenHooks,\n onOpen() {\n setEditorValue(hotCustomEditorInstanceRef.current?.getValue());\n overriddenHooks?.onOpen?.();\n setRerenderTrigger((t) => t + 1);\n },\n }),\n deps\n );\n\n return useMemo(\n () => ({\n get value(): T | undefined {\n return deferredValue;\n },\n setValue(newValue) {\n setEditorValue(newValue);\n hotCustomEditorInstanceRef.current?.setValue(newValue);\n },\n get isOpen() {\n return hotCustomEditorInstanceRef.current?.isOpened() ?? false;\n },\n finishEditing() {\n hotCustomEditorInstanceRef.current?.finishEditing();\n },\n get row() {\n return hotCustomEditorInstanceRef.current?.row;\n },\n get col() {\n return hotCustomEditorInstanceRef.current?.col;\n },\n }),\n [rerenderTrigger, hotCustomEditorInstanceRef, deferredValue]\n );\n}\n\n\ntype EditorChildrenProps<T> = {\n value: T;\n setValue: Dispatch<T>;\n finishEditing: () => void;\n isOpen: boolean;\n row: number | undefined;\n col: number | undefined;\n mainElementRef: React.RefObject<HTMLDivElement>;\n}\n\n// Render prop function type\ntype EditorRenderProp<T> = (props: EditorChildrenProps<T>) => React.ReactNode;\n\n// EditorComponent props - children typed to work with JSX syntax\ntype EditorComponentProps = {\n onPrepare?: (row: number, column: number, prop: string | number, TD: HTMLTableCellElement, originalValue: any, cellProperties: Handsontable.CellProperties) => void;\n onOpen?: () => void;\n onClose?: () => void;\n onFocus?: () => void;\n shortcutsGroup?: string;\n shortcuts?: {\n keys: string[][];\n callback: (props: any, event: KeyboardEvent) => boolean | void;\n group?: string;\n runOnlyIf?: () => boolean;\n captureCtrl?: boolean;\n preventDefault?: boolean;\n stopPropagation?: boolean;\n relativeToGroup?: string;\n position?: \"before\" | \"after\";\n forwardToContext?: any;\n }[];\n}\n\n\nexport function EditorComponent<T = any>({\n onPrepare,\n onClose,\n onOpen,\n onFocus,\n children,\n shortcutsGroup = \"custom-editor\",\n shortcuts,\n}: EditorComponentProps & { children?: EditorRenderProp<T> }): React.ReactElement {\n const mainElementRef = useRef<HTMLDivElement>(null);\n const currentValue = useRef<T>(undefined);\n const { hotCustomEditorInstanceRef } = useContext(EditorContext)!;\n\n const registerShortcuts = useCallback(() => {\n if (!hotCustomEditorInstanceRef.current?.hot) return;\n\n hotCustomEditorInstanceRef.current?.hot?.getShortcutManager().setActiveContextName(\"editor\");\n\n const shortcutManager = hotCustomEditorInstanceRef.current?.hot?.getShortcutManager();\n const editorContext = shortcutManager.getContext('editor');\n const contextConfig = {\n group: shortcutsGroup,\n };\n\n if (shortcuts) {\n editorContext?.addShortcuts(shortcuts.map(shortcut => ({\n ...shortcut,\n group: shortcut.group || shortcutsGroup,\n relativeToGroup: shortcut.relativeToGroup ||\n 'editorManager.handlingEditor',\n position: shortcut.position || 'before',\n callback: (event: KeyboardEvent) =>\n shortcut.callback({ value: currentValue.current, setValue, finishEditing }, event),\n })),\n //@ts-ignore\n contextConfig\n );\n }\n }, [shortcuts]);\n\n\n const unRegisterShortcuts = useCallback(() => {\n if (!hotCustomEditorInstanceRef.current?.hot) return;\n\n const shortcutManager = hotCustomEditorInstanceRef.current?.hot?.getShortcutManager();\n const editorContext = shortcutManager.getContext(\"editor\")!;\n editorContext.removeShortcutsByGroup(shortcutsGroup);\n\n }, [shortcuts]);\n\n const { value, setValue, finishEditing, isOpen, col, row } = useHotEditor<T>({\n onOpen: () => {\n if (!mainElementRef.current) return;\n mainElementRef.current.style.display = 'block';\n onOpen?.();\n registerShortcuts();\n },\n onClose: () => {\n if (!mainElementRef.current) return;\n mainElementRef.current.style.display = 'none';\n onClose?.();\n unRegisterShortcuts();\n },\n onPrepare: (_row, _column, _prop, TD, _originalValue, _cellProperties) => {\n\n if (!mainElementRef.current) return;\n const tdPosition = TD.getBoundingClientRect();\n mainElementRef.current.style.left = `${tdPosition.left + window.pageXOffset - 1}px`;\n mainElementRef.current.style.top = `${tdPosition.top + window.pageYOffset - 1}px`;\n mainElementRef.current.style.width = `${tdPosition.width + 1}px`;\n mainElementRef.current.style.height = `${tdPosition.height + 1}px`;\n onPrepare?.(_row, _column, _prop, TD, _originalValue, _cellProperties);\n },\n onFocus: () => {\n onFocus?.();\n },\n });\n\n useEffect(() => {\n currentValue.current = value;\n }, [value]);\n\n const stopMousedownPropagation = (e: React.MouseEvent) => {\n e.stopPropagation();\n };\n\n\n return (\n <div\n ref={mainElementRef}\n style={{\n display: 'none',\n position: 'absolute',\n background: '#fff',\n border: '0px',\n padding: '0px',\n zIndex: 999,\n }}\n onMouseDown={stopMousedownPropagation}\n >\n\n {(children as EditorRenderProp<T>)({ value: value as T, setValue, finishEditing, mainElementRef: mainElementRef as React.RefObject<HTMLDivElement>, isOpen, col, row })}\n\n </div>\n );\n};","import React, {\n FC,\n ReactElement,\n useEffect,\n useRef,\n} from 'react';\nimport { HotTableProps, HotColumnProps, HotEditorHooks } from './types';\nimport {\n createEditorPortal,\n displayAnyChildrenWarning,\n displayObsoleteRenderersEditorsWarning\n} from './helpers';\nimport { SettingsMapper } from './settingsMapper';\nimport Handsontable from 'handsontable/base';\nimport { useHotTableContext } from './hotTableContext'\nimport { useHotColumnContext } from './hotColumnContext'\nimport { EditorContextProvider, makeEditorClass } from './hotEditor';\n\nconst isHotColumn = (childNode: any): childNode is ReactElement => childNode.type === HotColumn;\n\nconst internalProps = ['_columnIndex', '_getOwnerDocument', 'children'];\n\nconst HotColumn: FC<HotColumnProps> = (props) => {\n const { componentRendererColumns, emitColumnSettings, getRendererWrapper } = useHotTableContext();\n const { columnIndex, getOwnerDocument } = useHotColumnContext();\n\n /**\n * Reference to component-based editor overridden hooks object.\n */\n const localEditorHooksRef = useRef<HotEditorHooks | null>(null);\n\n /**\n * Reference to HOT-native custom editor class instance.\n */\n const localEditorClassInstance = useRef<Handsontable.editors.BaseEditor | null>(null);\n\n /**\n * Logic performed after mounting & updating of the HotColumn component.\n */\n useEffect(() => {\n\n /**\n * Filter out all the internal properties and return an object with just the Handsontable-related props.\n *\n * @returns {Object}\n */\n const getSettingsProps = (): HotTableProps => {\n return Object.keys(props)\n .filter(key => !internalProps.includes(key))\n .reduce<HotTableProps>((obj, key) => {\n (obj as any)[key] = props[key];\n return obj;\n }, {});\n };\n\n /**\n * Create the column settings based on the data provided to the `HotColumn` component and its child components.\n */\n const createColumnSettings = (): Handsontable.ColumnSettings => {\n const columnSettings = SettingsMapper.getSettings(getSettingsProps()) as unknown as Handsontable.ColumnSettings;\n\n if (props.renderer) {\n columnSettings.renderer = getRendererWrapper(props.renderer);\n componentRendererColumns.set(columnIndex, true);\n } else if (props.hotRenderer) {\n columnSettings.renderer = props.hotRenderer;\n }\n\n if (props.editor) {\n columnSettings.editor = makeEditorClass(localEditorHooksRef, localEditorClassInstance);\n } else if (props.hotEditor) {\n columnSettings.editor = props.hotEditor;\n }\n\n return columnSettings\n };\n\n const columnSettings = createColumnSettings();\n emitColumnSettings(columnSettings, columnIndex);\n\n if (!displayObsoleteRenderersEditorsWarning(props.children)) {\n displayAnyChildrenWarning(props.children);\n }\n });\n\n const editorPortal = createEditorPortal(getOwnerDocument(), props.editor);\n\n /**\n * Render the portals of the editors, if there are any.\n *\n * @returns {ReactElement}\n */\n return (\n <EditorContextProvider hooksRef={localEditorHooksRef}\n hotCustomEditorInstanceRef={localEditorClassInstance}>\n {editorPortal}\n </EditorContextProvider>\n )\n}\n\nexport { HotColumn, isHotColumn };\n","import React, {\n Dispatch,\n ReactPortal,\n forwardRef,\n Fragment,\n useImperativeHandle,\n useState,\n} from 'react';\n\nexport type RenderersPortalManagerRef = Dispatch<ReactPortal[]>;\n\n/**\n * Component used to manage the renderer component portals.\n */\nexport const RenderersPortalManager = forwardRef<RenderersPortalManagerRef, {}>((_, ref) => {\n const [portals, setPortals] = useState<ReactPortal[]>([]);\n useImperativeHandle(ref, () => setPortals);\n\n return (\n <Fragment>\n {portals}\n </Fragment>\n );\n});\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n var ReactIs = require('react-is');\n\n // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = require('./factoryWithThrowingShims')();\n}\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function() {\n function shim(props, propName, componentName, location, propFullName, secret) {\n if (secret === ReactPropTypesSecret) {\n // It is still safe when called from React.\n return;\n }\n var err = new Error(\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n 'Use PropTypes.checkPropTypes() to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n err.name = 'Invariant Violation';\n throw err;\n };\n shim.isRequired = shim;\n function getShim() {\n return shim;\n };\n // Important!\n // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n var ReactPropTypes = {\n array: shim,\n bigint: shim,\n bool: shim,\n func: shim,\n number: shim,\n object: shim,\n string: shim,\n symbol: shim,\n\n any: shim,\n arrayOf: getShim,\n element: shim,\n elementType: shim,\n instanceOf: getShim,\n node: shim,\n objectOf: getShim,\n oneOf: getShim,\n oneOfType: getShim,\n shape: getShim,\n exact: getShim,\n\n checkPropTypes: emptyFunctionWithReset,\n resetWarningCache: emptyFunction\n };\n\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","import React, {\n Children,\n Fragment,\n useEffect,\n useCallback,\n useImperativeHandle,\n useRef,\n forwardRef\n} from 'react';\nimport Handsontable from 'handsontable/base';\nimport { SettingsMapper } from './settingsMapper';\nimport { RenderersPortalManager } from './renderersPortalManager';\nimport { HotColumn, isHotColumn } from './hotColumn';\nimport { HotEditorHooks, HotTableProps, HotTableRef } from './types';\nimport {\n HOT_DESTROYED_WARNING,\n AUTOSIZE_WARNING,\n createEditorPortal,\n getContainerAttributesProps,\n isCSR,\n warn,\n displayObsoleteRenderersEditorsWarning,\n useUpdateEffect,\n displayChildrenOfTypeWarning\n} from './helpers';\nimport PropTypes from 'prop-types';\nimport { getRenderer } from 'handsontable/renderers/registry';\nimport { getEditor } from 'handsontable/editors/registry';\nimport { useHotTableContext } from './hotTableContext'\nimport { HotColumnContextProvider } from './hotColumnContext'\nimport { EditorContextProvider, makeEditorClass } from './hotEditor';\n\nconst HotTableInner = forwardRef<\n HotTableRef,\n HotTableProps\n>((props, ref) => {\n\n /**\n * Reference to the Handsontable instance.\n */\n const __hotInstance = useRef<Handsontable | null>(null);\n\n /**\n * Reference to the main Handsontable DOM element.\n */\n const hotElementRef = useRef<HTMLDivElement>(null);\n\n /**\n * Reference to component-based editor overridden hooks object.\n */\n const globalEditorHooksRef = useRef<HotEditorHooks | null>(null);\n\n /**\n * Reference to HOT-native custom editor class instance.\n */\n const globalEditorClassInstance = useRef<Handsontable.editors.BaseEditor | null>(null);\n\n /**\n * Reference to the previous props object.\n */\n const prevProps = useRef<HotTableProps>();\n\n /**\n * HotTable context exposing helper functions.\n */\n const context = useHotTableContext();\n\n /**\n * Getter for the property storing the Handsontable instance.\n */\n const getHotInstance = useCallback((): Handsontable | null => {\n if (!__hotInstance.current || !__hotInstance.current.isDestroyed) {\n\n // Will return the Handsontable instance or `null` if it's not yet been created.\n return __hotInstance.current;\n\n } else {\n console.warn(HOT_DESTROYED_WARNING);\n\n return null;\n }\n }, [__hotInstance]);\n\n const isHotInstanceDestroyed = useCallback((): boolean => {\n return !__hotInstance.current || __hotInstance.current.isDestroyed;\n }, [__hotInstance]);\n\n /**\n * Clear both the editor and the renderer cache.\n */\n const clearCache = useCallback((): void => {\n context.clearRenderedCellCache();\n context.componentRendererColumns.clear();\n }, [context]);\n\n /**\n * Get the `Document` object corresponding to the main component element.\n *\n * @returns The `Document` object used by the component.\n */\n const getOwnerDocument = useCallback((): Document | null => {\n if (isCSR()) {\n return hotElementRef.current ? hotElementRef.current.ownerDocument : document;\n }\n\n return null;\n }, [hotElementRef]);\n\n /**\n * Create a new settings object containing the column settings and global editors and renderers.\n *\n * @returns {Handsontable.GridSettings} New global set of settings for Handsontable.\n */\n const createNewGlobalSettings = (init: boolean = false, prevProps: HotTableProps = {}): Handsontable.GridSettings => {\n const initOnlySettingKeys = !isHotInstanceDestroyed() ? // Needed for React's double-rendering.\n ((getHotInstance()?.getSettings() as any)?._initOnlySettings || []) :\n [];\n const newSettings = SettingsMapper.getSettings(\n props, {\n prevProps,\n isInit: init,\n initOnlySettingKeys\n }\n );\n\n if (context.columnsSettings.length) {\n newSettings.columns = context.columnsSettings;\n }\n\n if (props.renderer) {\n newSettings.renderer = context.getRendererWrapper(props.renderer);\n context.componentRendererColumns.set('global', true);\n } else {\n newSettings.renderer = props.hotRenderer || getRenderer('text');\n }\n\n if (props.editor) {\n newSettings.editor = makeEditorClass(globalEditorHooksRef, globalEditorClassInstance);\n } else {\n newSettings.editor = props.hotEditor || getEditor('text');\n }\n\n return newSettings;\n };\n\n /**\n * Detect if `autoRowSize` or `autoColumnSize` is defined, and if so, throw an incompatibility warning.\n */\n const displayAutoSizeWarning = (hotInstance: Handsontable | null): void => {\n if (\n hotInstance &&\n (\n hotInstance.getPlugin('autoRowSize')?.enabled ||\n hotInstance.getPlugin('autoColumnSize')?.enabled\n )\n ) {\n if (context.componentRendererColumns.size > 0) {\n warn(AUTOSIZE_WARNING);\n }\n }\n };\n\n /**\n * Initialize Handsontable after the component has mounted.\n */\n useEffect(() => {\n const newGlobalSettings = createNewGlobalSettings(true);\n\n // Update prevProps with the current props\n prevProps.current = props;\n\n __hotInstance.current = new Handsontable.Core(hotElementRef.current!, newGlobalSettings);\n\n /**\n * Handsontable's `beforeViewRender` hook callback.\n */\n __hotInstance.current.addHook('beforeViewRender', () => {\n context.clearPortalCache();\n context.clearRenderedCellCache();\n });\n\n /**\n * Handsontable's `afterViewRender` hook callback.\n */\n __hotInstance.current.addHook('afterViewRender', () => {\n context.pushCellPortalsIntoPortalManager();\n });\n\n __hotInstance.current.init();\n\n displayAutoSizeWarning(__hotInstance.current);\n\n if (!displayObsoleteRenderersEditorsWarning(props.children)) {\n displayChildrenOfTypeWarning(props.children, HotColumn);\n }\n\n /**\n * Destroy the Handsontable instance when the parent component unmounts.\n */\n return () => {\n clearCache();\n getHotInstance()?.destroy();\n }\n }, []);\n\n /**\n * Logic performed after the component update.\n */\n useUpdateEffect((): void => {\n clearCache();\n\n const hotInstance = getHotInstance();\n\n const newGlobalSettings = createNewGlobalSettings(false, prevProps.current);\n\n // Update prevProps with the current props\n prevProps.current = props;\n\n hotInstance?.updateSettings(newGlobalSettings, false);\n\n displayAutoSizeWarning(hotInstance);\n displayObsoleteRenderersEditorsWarning(props.children);\n });\n\n /**\n * Interface exposed to parent components by HotTable instance via React ref\n */\n useImperativeHandle(ref, () => ({\n get hotElementRef() {\n return hotElementRef.current!;\n },\n get hotInstance() {\n return getHotInstance();\n }\n }));\n\n /**\n * Render the component.\n */\n const hotColumnWrapped = Children.toArray(props.children)\n .filter(isHotColumn)\n .map((childNode, columnIndex) => (\n <HotColumnContextProvider columnIndex={columnIndex}\n getOwnerDocument={getOwnerDocument}\n key={columnIndex}>\n {childNode}\n </HotColumnContextProvider>\n ));\n\n const containerProps = getContainerAttributesProps(props);\n const editorPortal = createEditorPortal(getOwnerDocument(), props.editor);\n\n return (\n <Fragment>\n <div ref={hotElementRef} {...containerProps}>\n {hotColumnWrapped}\n </div>\n <RenderersPortalManager ref={context.setRenderersPortalManagerRef} />\n <EditorContextProvider hooksRef={globalEditorHooksRef}\n hotCustomEditorInstanceRef={globalEditorClassInstance}>\n {editorPortal}\n </EditorContextProvider>\n </Fragment>\n );\n});\n\n/**\n * Prop types to be checked at runtime.\n */\nHotTableInner.propTypes = {\n style: PropTypes.object,\n id: PropTypes.string,\n className: PropTypes.string\n};\n\nexport default HotTableInner;\nexport { HotTableInner };\n","import React, {\n ForwardRefExoticComponent,\n RefAttributes,\n useId,\n forwardRef,\n} from 'react';\nimport * as packageJson from '../package.json';\nimport { HotTableInner } from './hotTableInner';\nimport { HotTableProps, HotTableRef } from './types';\nimport { HotTableContextProvider } from './hotTableContext';\n\ninterface Version {\n version?: string;\n}\n\ntype HotTable = ForwardRefExoticComponent<HotTableProps & RefAttributes<HotTableRef>> & Version;\n\n/**\n * A Handsontable-ReactJS wrapper.\n *\n * To implement, use the `HotTable` tag with properties corresponding to Handsontable options.\n * For example:\n *\n * ```js\n * <HotTable id=\"hot\" data={dataObject} contextMenu={true} colHeaders={true} width={600} height={300} stretchH=\"all\" />\n *\n * // is analogous to\n * let hot = new Handsontable(document.getElementById('hot'), {\n * data: dataObject,\n * contextMenu: true,\n * colHeaders: true,\n * width: 600\n * height: 300\n * });\n *\n * ```\n */\nconst HotTable: HotTable = forwardRef<HotTableRef, HotTableProps>(({ children, ...props }, ref) => {\n const componentId = props.id ?? useId();\n\n return (\n <HotTableContextProvider>\n <HotTableInner id={componentId} {...props} ref={ref}>\n {children}\n </HotTableInner>\n </HotTableContextProvider>\n );\n})\n\n/**\n * Package version.\n *\n * @returns The version number of the package.\n */\nHotTable.version = (packageJson as any).version;\n\nexport default HotTable;\nexport { HotTable };\n"],"names":["bulkComponentContainer","warn","_console","console","apply","arguments","displayObsoleteRenderersEditorsWarning","children","hasChildElementOfType","type","React","Children","toArray","some","child","props","createEditorPortal","doc","Editor","editorElement","createElement","containerProps","getContainerAttributesProps","className","concat","ReactDOM","createPortal","body","id","Math","random","toString","substring","undefined","style","SettingsMapper","_createClass","_classCallCheck","key","value","properties","_ref","length","_ref$prevProps","prevProps","_ref$isInit","isInit","_ref$initOnlySettingK","initOnlySettingKeys","shouldSkipProp","includes","newSettings","hasOwnProperty","HotTableContext","createContext","HotTableContextProvider","columnsSettings","useRef","setHotColumnSettings","useCallback","columnSettings","columnIndex","current","componentRendererColumns","Map","renderedCellCache","clearRenderedCellCache","clear","portalCache","clearPortalCache","portalContainerCache","getRendererWrapper","Renderer","instance","TD","row","col","prop","cellProperties","instanceGuid","guid","portalContainerKey","portalKey","has","innerHTML","get","getAttribute","cachedPortal","cachedPortalContainer","firstChild","removeChild","appendChild","_createPortal","rElement","ownerDocument","document","cachedContainer","createDocumentFragment","portalContainer","portal","set","renderersPortalManager","setRenderersPortalManagerRef","pmComponent","pushCellPortalsIntoPortalManager","_toConsumableArray","values","contextImpl","useMemo","emitColumnSettings","Provider","useHotTableContext","useContext","HotColumnContext","HotColumnContextProvider","getOwnerDocument","AbstractMethods","ExcludedMethods","MethodsMap","open","close","prepare","focus","makeEditorClass","hooksRef","instanceRef","_Handsontable$editors","CustomEditor","hotInstance","_this","_callSuper","this","Object","getOwnPropertyNames","Handsontable","editors","BaseEditor","prototype","forEach","propName","baseMethod","_hooksRef$current","result","_hooksRef$current$Met","_len","args","Array","_key","call","bind","_inherits","newValue","EditorContext","EditorContextProvider","hotCustomEditorInstanceRef","useHotEditor","overriddenHooks","deps","_useContext","_useState2","_slicedToArray","useState","rerenderTrigger","setRerenderTrigger","_useState4","setEditorValue","deferredValue","useDeferredValue","useImperativeHandle","_objectSpread","onOpen","_hotCustomEditorInsta","_overriddenHooks$onOp","getValue","t","setValue","_hotCustomEditorInsta2","isOpen","_hotCustomEditorInsta3","_hotCustomEditorInsta4","isOpened","finishEditing","_hotCustomEditorInsta5","_hotCustomEditorInsta6","_hotCustomEditorInsta7","isHotColumn","childNode","HotColumn","internalProps","_useHotTableContext","_useHotColumnContext","localEditorHooksRef","localEditorClassInstance","useEffect","getSettings","keys","filter","reduce","obj","renderer","hotRenderer","editor","hotEditor","createColumnSettings","editorPortal","RenderersPortalManager","forwardRef","_","ref","portals","setPortals","Fragment","propTypesModule","exports","ReactPropTypesSecret","ReactPropTypesSecret_1","emptyFunction","emptyFunctionWithReset","resetWarningCache","factoryWithThrowingShims","shim","componentName","location","propFullName","secret","err","Error","name","getShim","isRequired","ReactPropTypes","array","bigint","bool","func","number","object","string","symbol","any","arrayOf","element","elementType","instanceOf","node","objectOf","oneOf","oneOfType","shape","exact","checkPropTypes","PropTypes","require$$2","HotTableInner","effect","notInitialRender","__hotInstance","hotElementRef","globalEditorHooksRef","globalEditorClassInstance","context","getHotInstance","isDestroyed","isHotInstanceDestroyed","clearCache","window","createNewGlobalSettings","_getHotInstance","init","_initOnlySettings","columns","getRenderer","getEditor","displayAutoSizeWarning","_hotInstance$getPlugi","_hotInstance$getPlugi2","getPlugin","enabled","size","Component","newGlobalSettings","Core","addHook","_getHotInstance2","destroy","updateSettings","hotColumnWrapped","map","assign","propTypes","HotTable","_props$id","_objectWithoutProperties","_excluded","componentId","useId","version","_ref2","onPrepare","onClose","onFocus","_ref2$shortcutsGroup","shortcutsGroup","shortcuts","mainElementRef","currentValue","registerShortcuts","_hotCustomEditorInsta8","_hotCustomEditorInsta9","_hotCustomEditorInsta0","hot","getShortcutManager","setActiveContextName","editorContext","getContext","contextConfig","group","addShortcuts","shortcut","relativeToGroup","position","callback","event","unRegisterShortcuts","_hotCustomEditorInsta1","_hotCustomEditorInsta10","removeShortcutsByGroup","_useHotEditor","display","_row","_column","_prop","_originalValue","_cellProperties","tdPosition","getBoundingClientRect","left","pageXOffset","top","pageYOffset","width","height","background","border","padding","zIndex","onMouseDown","e","stopPropagation"],"mappings":"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","x_google_ignoreList":[7,8,9]}
1
+ {"version":3,"file":"react-handsontable.min.js","sources":["../src/helpers.tsx","../src/settingsMapper.ts","../src/hotTableContext.tsx","../src/hotColumnContext.tsx","../src/hotEditor.tsx","../src/hotColumn.tsx","../src/renderersPortalManager.tsx","../../../node_modules/.pnpm/prop-types@15.8.1/node_modules/prop-types/index.js","../../../node_modules/.pnpm/prop-types@15.8.1/node_modules/prop-types/factoryWithThrowingShims.js","../../../node_modules/.pnpm/prop-types@15.8.1/node_modules/prop-types/lib/ReactPropTypesSecret.js","../src/hotTableInner.tsx","../src/hotTable.tsx"],"sourcesContent":["import React, {\n ComponentType,\n CSSProperties,\n DependencyList,\n EffectCallback,\n ReactNode,\n ReactPortal,\n useEffect,\n} from 'react';\nimport ReactDOM from 'react-dom';\nimport { HotTableProps } from './types';\n\nlet bulkComponentContainer: DocumentFragment | null = null;\n\n/**\n * Warning message for the `autoRowSize`/`autoColumnSize` compatibility check.\n */\nexport const AUTOSIZE_WARNING = 'Your `HotTable` configuration includes `autoRowSize`/`autoColumnSize` options, which are not compatible with ' +\n ' the component-based renderers`. Disable `autoRowSize` and `autoColumnSize` to prevent row and column misalignment.';\n\n/**\n * Warning message for the `hot-renderer` obsolete renderer passing method.\n */\nexport const OBSOLETE_HOTRENDERER_WARNING = 'Providing a component-based renderer using `hot-renderer`-annotated component is no longer supported. ' +\n 'Pass your component using `renderer` prop of the `HotTable` or `HotColumn` component instead.';\n\n/**\n * Warning message for the `hot-editor` obsolete editor passing method.\n */\nexport const OBSOLETE_HOTEDITOR_WARNING = 'Providing a component-based editor using `hot-editor`-annotated component is no longer supported. ' +\n 'Pass your component using `editor` prop of the `HotTable` or `HotColumn` component instead.';\n\n/**\n * Warning message for the unexpected children of HotTable component.\n */\nexport const UNEXPECTED_HOTTABLE_CHILDREN_WARNING = 'Unexpected children nodes found in HotTable component. ' +\n 'Only HotColumn components are allowed.';\n\n/**\n * Warning message for the unexpected children of HotColumn component.\n */\nexport const UNEXPECTED_HOTCOLUMN_CHILDREN_WARNING = 'Unexpected children nodes found in HotColumn component. ' +\n 'HotColumn components do not support any children.';\n\n/**\n * Message for the warning thrown if the Handsontable instance has been destroyed.\n */\nexport const HOT_DESTROYED_WARNING = 'The Handsontable instance bound to this component was destroyed and cannot be' +\n ' used properly.';\n\n/**\n * Default classname given to the wrapper container.\n */\nexport const DEFAULT_CLASSNAME = 'hot-wrapper-editor-container';\n\n/**\n * Logs warn to the console if the `console` object is exposed.\n *\n * @param {...*} args Values which will be logged.\n */\nexport function warn(...args: any[]) {\n if (typeof console !== 'undefined') {\n console.warn(...args);\n }\n}\n\n/**\n * Detect if `hot-renderer` or `hot-editor` is defined, and if so, throw an incompatibility warning.\n *\n * @returns {boolean} 'true' if the warning was issued\n */\nexport function displayObsoleteRenderersEditorsWarning(children: ReactNode): boolean {\n if (hasChildElementOfType(children, 'hot-renderer')) {\n warn(OBSOLETE_HOTRENDERER_WARNING);\n return true;\n }\n if (hasChildElementOfType(children, 'hot-editor')) {\n warn(OBSOLETE_HOTEDITOR_WARNING);\n return true;\n }\n\n return false\n}\n\n/**\n * Detect if children of specified type are defined, and if so, throw an incompatibility warning.\n *\n * @param {ReactNode} children Component children nodes\n * @param {ComponentType} Component Component type to check\n * @returns {boolean} 'true' if the warning was issued\n */\nexport function displayChildrenOfTypeWarning(children: ReactNode, Component: ComponentType): boolean {\n const childrenArray: ReactNode[] = React.Children.toArray(children);\n\n if (childrenArray.some((child) => (child as React.ReactElement).type !== Component)) {\n warn(UNEXPECTED_HOTTABLE_CHILDREN_WARNING);\n return true;\n }\n\n return false\n}\n\n/**\n * Detect if children is defined, and if so, throw an incompatibility warning.\n *\n * @param {ReactNode} children Component children nodes\n * @returns {boolean} 'true' if the warning was issued\n */\nexport function displayAnyChildrenWarning(children: ReactNode): boolean {\n const childrenArray: ReactNode[] = React.Children.toArray(children);\n\n if (childrenArray.length) {\n warn(UNEXPECTED_HOTCOLUMN_CHILDREN_WARNING);\n return true;\n }\n\n return false\n}\n\n/**\n * Check the existence of elements of the provided `type` from the `HotColumn` component's children.\n *\n * @param {ReactNode} children HotTable children array.\n * @param {String} type Either `'hot-renderer'` or `'hot-editor'`.\n * @returns {boolean} `true` if the child of that type was found, `false` otherwise.\n */\nfunction hasChildElementOfType(children: ReactNode, type: 'hot-renderer' | 'hot-editor'): boolean {\n const childrenArray: ReactNode[] = React.Children.toArray(children);\n\n return childrenArray.some((child) => {\n return (child as React.ReactElement).props[type] !== void 0;\n });\n}\n\n/**\n * Create an editor portal.\n *\n * @param {Document} doc Document to be used.\n * @param {ComponentType} Editor Editor component or render function.\n * @returns {ReactPortal} The portal for the editor.\n */\nexport function createEditorPortal(doc: Document | null, Editor: HotTableProps['editor'] | undefined | boolean): ReactPortal | null {\n if (!doc || !Editor || typeof Editor === 'boolean') {\n return null;\n }\n\n const editorElement = <Editor />;\n const containerProps = getContainerAttributesProps({}, false);\n\n containerProps.className = `${DEFAULT_CLASSNAME} ${containerProps.className}`;\n\n return ReactDOM.createPortal(\n <div {...containerProps}>\n {editorElement}\n </div>\n , doc.body);\n}\n\n/**\n * Render a cell component to an external DOM node.\n *\n * @param {React.ReactElement} rElement React element to be used as a base for the component.\n * @param {Document} [ownerDocument] The owner document to set the portal up into.\n * @param {String} portalKey The key to be used for the portal.\n * @param {HTMLElement} [cachedContainer] The cached container to be used for the portal.\n * @returns {{portal: ReactPortal, portalContainer: HTMLElement}} An object containing the portal and its container.\n */\nexport function createPortal(rElement: React.ReactElement, ownerDocument: Document | null = document, portalKey: string, cachedContainer?: HTMLElement): {\n portal: ReactPortal,\n portalContainer: HTMLElement,\n} {\n if (!ownerDocument) {\n ownerDocument = document;\n }\n\n if (!bulkComponentContainer) {\n bulkComponentContainer = ownerDocument.createDocumentFragment();\n }\n\n const portalContainer = cachedContainer ?? ownerDocument.createElement('DIV');\n bulkComponentContainer.appendChild(portalContainer);\n\n return {\n portal: ReactDOM.createPortal(rElement, portalContainer, portalKey),\n portalContainer\n };\n}\n\n/**\n * Get an object containing the `id`, `className` and `style` keys, representing the corresponding props passed to the\n * component.\n *\n * @param {HotTableProps} props Object containing the React element props.\n * @param {Boolean} randomizeId If set to `true`, the function will randomize the `id` property when no `id` was present in the `prop` object.\n * @returns An object containing the `id`, `className` and `style` keys, representing the corresponding props passed to the\n * component.\n */\nexport function getContainerAttributesProps(props: HotTableProps, randomizeId: boolean = true): {id?: string, className: string, style: CSSProperties} {\n return {\n id: props.id || (randomizeId ? 'hot-' + Math.random().toString(36).substring(5) : undefined),\n className: props.className || '',\n style: props.style || {},\n };\n}\n\n/**\n * Checks if the environment that the code runs in is a browser.\n *\n * @returns {boolean}\n */\nexport function isCSR(): boolean {\n return typeof window !== 'undefined';\n}\n\n/**\n * A variant of useEffect hook that does not trigger on initial mount, only updates\n *\n * @param effect Effect function\n * @param deps Effect dependencies\n */\nexport function useUpdateEffect(effect: EffectCallback, deps?: DependencyList): void {\n const notInitialRender = React.useRef(false);\n\n useEffect(() => {\n if (notInitialRender.current) {\n return effect();\n } else {\n notInitialRender.current = true;\n }\n }, deps);\n}\n","import Handsontable from 'handsontable/base';\nimport { HotTableProps } from './types';\n\nexport class SettingsMapper {\n /**\n * Parse component settings into Handsontable-compatible settings.\n *\n * @param {Object} properties Object containing properties from the HotTable object.\n * @param {Object} additionalSettings Additional settings.\n * @param {boolean} additionalSettings.isInit Flag determining whether the settings are being set during initialization.\n * @param {string[]} additionalSettings.initOnlySettingKeys Array of keys that can be set only during initialization.\n * @returns {Object} Handsontable-compatible settings object.\n */\n static getSettings(\n properties: HotTableProps,\n {\n prevProps = {},\n isInit = false,\n initOnlySettingKeys = []\n }: {\n prevProps?: HotTableProps;\n isInit?: boolean;\n initOnlySettingKeys?: Array<keyof Handsontable.GridSettings>\n } = {}): Handsontable.GridSettings {\n const shouldSkipProp = (key: keyof Handsontable.GridSettings) => {\n // Omit settings that can be set only during initialization and are intentionally modified.\n if (!isInit && initOnlySettingKeys.includes(key)) {\n return prevProps[key] === properties[key];\n }\n return false;\n };\n let newSettings: Handsontable.GridSettings = {};\n\n for (const key in properties) {\n if (\n key !== 'children' &&\n !shouldSkipProp(key as keyof Handsontable.GridSettings) &&\n properties.hasOwnProperty(key)\n ) {\n (newSettings as any)[key] = properties[key as keyof HotTableProps];\n }\n }\n\n return newSettings;\n }\n}\n","import Handsontable from 'handsontable/base';\nimport React, {\n ComponentType,\n FC,\n PropsWithChildren,\n ReactPortal,\n createContext,\n useCallback,\n useRef,\n useMemo,\n useContext,\n} from 'react';\nimport { ScopeIdentifier, HotRendererProps } from './types'\nimport { createPortal } from './helpers'\nimport { RenderersPortalManagerRef } from './renderersPortalManager'\n\nexport interface HotTableContextImpl {\n /**\n * Map with column indexes (or a string = 'global') as keys, and booleans as values. Each key represents a component-based editor\n * declared for the used column index, or a global one, if the key is the `global` string.\n */\n readonly componentRendererColumns: Map<ScopeIdentifier, boolean>;\n\n /**\n * Array of object containing the column settings.\n */\n readonly columnsSettings: Handsontable.ColumnSettings[];\n\n /**\n * Sets the column settings based on information received from HotColumn.\n *\n * @param {HotTableProps} columnSettings Column settings object.\n * @param {Number} columnIndex Column index.\n */\n readonly emitColumnSettings: (columnSettings: Handsontable.ColumnSettings, columnIndex: number) => void;\n\n /**\n * Return a renderer wrapper function for the provided renderer component.\n *\n * @param {ComponentType<HotRendererProps>} Renderer React renderer component.\n * @returns {Handsontable.renderers.BaseRenderer} The Handsontable rendering function.\n */\n readonly getRendererWrapper: (Renderer: ComponentType<HotRendererProps>) => typeof Handsontable.renderers.BaseRenderer;\n\n /**\n * Clears portals cache.\n */\n readonly clearPortalCache: () => void;\n\n /**\n * Clears rendered cells cache.\n */\n readonly clearRenderedCellCache: () => void;\n\n /**\n * Set the renderers portal manager dispatch function.\n *\n * @param {RenderersPortalManagerRef} pm The PortalManager dispatch function.\n */\n readonly setRenderersPortalManagerRef: (pm: RenderersPortalManagerRef) => void;\n\n /**\n * Puts cell portals into portal manager and purges portals cache.\n */\n readonly pushCellPortalsIntoPortalManager: () => void;\n}\n\nconst HotTableContext = createContext<HotTableContextImpl | undefined>(undefined);\n\nconst HotTableContextProvider: FC<PropsWithChildren> = ({ children }) => {\n const columnsSettings = useRef<Handsontable.ColumnSettings[]>([]);\n\n const setHotColumnSettings = useCallback((columnSettings: Handsontable.ColumnSettings, columnIndex: number) => {\n columnsSettings.current[columnIndex] = columnSettings;\n }, [])\n\n const componentRendererColumns = useRef<Map<number | 'global', boolean>>(new Map());\n const renderedCellCache = useRef<Map<string, HTMLTableCellElement>>(new Map());\n const clearRenderedCellCache = useCallback(() => renderedCellCache.current.clear(), []);\n const portalCache = useRef<Map<string, ReactPortal>>(new Map());\n const clearPortalCache = useCallback(() => portalCache.current.clear(), []);\n const portalContainerCache = useRef<Map<string, HTMLElement>>(new Map());\n\n const getRendererWrapper = useCallback((Renderer: ComponentType<HotRendererProps>): typeof Handsontable.renderers.BaseRenderer => {\n return function __internalRenderer(instance, TD, row, col, prop, value, cellProperties) {\n const key = `${row}-${col}`;\n\n // Handsontable.Core type is missing guid\n const instanceGuid = (instance as unknown as { guid: string }).guid;\n\n const portalContainerKey = `${instanceGuid}-${key}`\n const portalKey = `${key}-${instanceGuid}`\n\n if (renderedCellCache.current.has(key)) {\n TD.innerHTML = renderedCellCache.current.get(key)!.innerHTML;\n }\n\n if (TD && !TD.getAttribute('ghost-table')) {\n const cachedPortal = portalCache.current.get(portalKey);\n const cachedPortalContainer = portalContainerCache.current.get(portalContainerKey);\n\n while (TD.firstChild) {\n TD.removeChild(TD.firstChild);\n }\n\n // if portal already exists, do not recreate\n if (cachedPortal && cachedPortalContainer) {\n TD.appendChild(cachedPortalContainer);\n } else {\n const rendererElement = (\n <Renderer instance={instance}\n TD={TD}\n row={row}\n col={col}\n prop={prop}\n value={value}\n cellProperties={cellProperties}/>\n );\n\n const {portal, portalContainer} = createPortal(rendererElement, TD.ownerDocument, portalKey, cachedPortalContainer);\n\n portalContainerCache.current.set(portalContainerKey, portalContainer);\n TD.appendChild(portalContainer);\n\n portalCache.current.set(portalKey, portal);\n }\n }\n\n renderedCellCache.current.set(`${row}-${col}`, TD);\n return TD;\n };\n }, []);\n\n const renderersPortalManager = useRef<RenderersPortalManagerRef>(() => undefined);\n\n const setRenderersPortalManagerRef = useCallback((pmComponent: RenderersPortalManagerRef) => {\n renderersPortalManager.current = pmComponent;\n }, []);\n\n const pushCellPortalsIntoPortalManager = useCallback(() => {\n renderersPortalManager.current!([...portalCache.current.values()]);\n }, []);\n\n const contextImpl: HotTableContextImpl = useMemo(() => ({\n componentRendererColumns: componentRendererColumns.current,\n columnsSettings: columnsSettings.current,\n emitColumnSettings: setHotColumnSettings,\n getRendererWrapper,\n clearPortalCache,\n clearRenderedCellCache,\n setRenderersPortalManagerRef,\n pushCellPortalsIntoPortalManager\n }), [setHotColumnSettings, getRendererWrapper, clearRenderedCellCache, setRenderersPortalManagerRef, pushCellPortalsIntoPortalManager]);\n\n return (\n <HotTableContext.Provider value={contextImpl}>{children}</HotTableContext.Provider>\n );\n};\n\n/**\n * Exposes the table context object to components\n *\n * @returns HotTableContext\n */\nfunction useHotTableContext(): HotTableContextImpl {\n return useContext(HotTableContext)!;\n}\n\nexport { HotTableContextProvider, useHotTableContext };\n","import React, {\n FC,\n PropsWithChildren,\n createContext,\n useContext,\n useMemo,\n} from 'react';\n\nexport interface HotColumnContextImpl {\n /**\n * Column index within a HotTable.\n */\n readonly columnIndex: number;\n\n /**\n * Get the `Document` object corresponding to the main component element.\n *\n * @returns The `Document` object used by the component.\n */\n readonly getOwnerDocument: () => Document | null;\n}\n\nconst HotColumnContext = createContext<HotColumnContextImpl | undefined>(undefined);\n\nconst HotColumnContextProvider: FC<PropsWithChildren<HotColumnContextImpl>> = ({ columnIndex, getOwnerDocument, children }) => {\n\n const contextImpl: HotColumnContextImpl = useMemo(() => ({\n columnIndex,\n getOwnerDocument\n }), [columnIndex, getOwnerDocument]);\n\n return (\n <HotColumnContext.Provider value={contextImpl}>{children}</HotColumnContext.Provider>\n );\n};\n\nconst useHotColumnContext = () => useContext(HotColumnContext)!;\n\nexport { useHotColumnContext, HotColumnContextProvider };\n","import React, {\n DependencyList,\n FC,\n MutableRefObject,\n ReactNode,\n Ref,\n RefObject,\n createContext,\n useContext,\n useDeferredValue,\n useImperativeHandle,\n useMemo,\n useState,\n useRef,\n useCallback,\n useEffect,\n Dispatch,\n} from 'react';\nimport Handsontable from 'handsontable/base';\nimport { HotEditorHooks, UseHotEditorImpl } from './types';\n\ntype HookPropName = keyof Handsontable.editors.BaseEditor | 'constructor';\n\nconst AbstractMethods: (keyof Handsontable.editors.BaseEditor)[] = [\n 'close',\n 'focus',\n 'open',\n];\nconst ExcludedMethods: (keyof Handsontable.editors.BaseEditor)[] = [\n 'getValue',\n 'setValue',\n];\n\nconst MethodsMap: Partial<\n Record<keyof Handsontable.editors.BaseEditor, keyof HotEditorHooks>\n> = {\n open: 'onOpen',\n close: 'onClose',\n prepare: 'onPrepare',\n focus: 'onFocus',\n};\n\n/**\n * Create a class to be passed to the Handsontable's settings.\n *\n * @param {RefObject<HotEditorHooks>} hooksRef Reference to component-based editor overridden hooks object.\n * @param {RefObject} instanceRef Reference to Handsontable-native custom editor class instance.\n * @returns {Function} A class to be passed to the Handsontable editor settings.\n */\nexport function makeEditorClass(\n hooksRef: MutableRefObject<HotEditorHooks | null>,\n instanceRef: MutableRefObject<Handsontable.editors.BaseEditor | null>\n): typeof Handsontable.editors.BaseEditor {\n return class CustomEditor\n extends Handsontable.editors.BaseEditor\n implements Handsontable.editors.BaseEditor {\n private value: any;\n\n constructor(hotInstance: Handsontable.Core) {\n super(hotInstance);\n instanceRef.current = this;\n\n (\n Object.getOwnPropertyNames(\n Handsontable.editors.BaseEditor.prototype\n ) as HookPropName[]\n ).forEach((propName) => {\n if (propName === 'constructor' || ExcludedMethods.includes(propName)) {\n return;\n }\n\n const baseMethod = Handsontable.editors.BaseEditor.prototype[propName];\n (CustomEditor.prototype as any)[propName] = function (\n this: CustomEditor,\n ...args: any[]\n ) {\n let result;\n\n if (!AbstractMethods.includes(propName)) {\n result = baseMethod.call(this, ...args); // call super\n }\n\n if (\n MethodsMap[propName] &&\n hooksRef.current?.[MethodsMap[propName]!]\n ) {\n result = (hooksRef.current[MethodsMap[propName]!] as any).call(\n this,\n ...args\n );\n }\n\n return result;\n }.bind(this);\n });\n }\n\n focus() { }\n\n getValue() {\n return this.value;\n }\n\n setValue(newValue: any) {\n this.value = newValue;\n }\n\n open() { }\n\n close() { }\n };\n}\n\ninterface EditorContextType {\n hooksRef: Ref<HotEditorHooks>;\n hotCustomEditorInstanceRef: RefObject<Handsontable.editors.BaseEditor>;\n}\n\n/**\n * Context to provide Handsontable-native custom editor class instance to overridden hooks object.\n */\nexport const EditorContext = createContext<EditorContextType | undefined>(\n undefined\n);\n\ninterface EditorContextProviderProps {\n hooksRef: Ref<HotEditorHooks>;\n hotCustomEditorInstanceRef: RefObject<Handsontable.editors.BaseEditor>;\n children: ReactNode;\n}\n\n/**\n * Provider of the context that exposes Handsontable-native editor instance and passes hooks object\n * for custom editor components.\n *\n * @param {Ref} hooksRef Reference for component-based editor overridden hooks object.\n * @param {RefObject} hotCustomEditorInstanceRef Reference to Handsontable-native editor instance.\n */\nexport const EditorContextProvider: FC<EditorContextProviderProps> = ({\n hooksRef,\n hotCustomEditorInstanceRef,\n children,\n}) => {\n return (\n <EditorContext.Provider value={{ hooksRef, hotCustomEditorInstanceRef }}>\n {children}\n </EditorContext.Provider>\n );\n};\n\ntype EditorWithPosition = Handsontable.editors.BaseEditor & { position?: string };\n\n/**\n * Applies editor overlay position/dimensions to an element.\n * @returns true if position was applied, false if editor should close (e.g. cell no longer available).\n */\nfunction applyEditorPosition(\n el: HTMLElement,\n editor: EditorWithPosition,\n hot: Handsontable.Core,\n td: Element | null | undefined\n): boolean {\n const rootWindow = hot.rootWindow || window;\n const pageX = rootWindow.pageXOffset ?? 0;\n const pageY = rootWindow.pageYOffset ?? 0;\n const isRtl = typeof hot.isRtl === 'function' && hot.isRtl();\n const position = editor.position;\n\n const applyTdRect = (rect: DOMRect) => {\n el.style.top = `${pageY + rect.top - 1}px`;\n el.style.width = `${rect.width + 1}px`;\n el.style.height = `${rect.height + 1}px`;\n\n if (isRtl) {\n el.style.right = `${pageX + rect.right}px`;\n el.style.left = 'auto';\n } else {\n el.style.left = `${pageX + rect.left - 1}px`;\n el.style.right = 'auto';\n }\n };\n\n if (position === 'portal') {\n const cell = td ?? (typeof editor.getEditedCell === 'function' ? editor.getEditedCell.call(editor) : null);\n\n if (!cell?.getBoundingClientRect) {\n return false;\n }\n\n applyTdRect(cell.getBoundingClientRect());\n\n return true;\n }\n\n const getEditedCellRect = editor.getEditedCellRect;\n const rect = typeof getEditedCellRect === 'function' ? getEditedCellRect.call(editor) : null;\n\n if (rect) {\n const rootElement = hot.rootElement;\n\n if (rootElement?.getBoundingClientRect) {\n const rootRect = rootElement.getBoundingClientRect();\n\n el.style.top = `${pageY + rootRect.top + rect.top}px`;\n el.style.width = `${rect.width}px`;\n el.style.height = `${rect.height}px`;\n\n if (isRtl) {\n el.style.right = `${pageX + rootRect.right - rect.start}px`;\n el.style.left = 'auto';\n } else {\n el.style.left = `${pageX + rootRect.left + rect.start}px`;\n el.style.right = 'auto';\n }\n\n return true;\n }\n }\n\n if (td?.getBoundingClientRect) {\n applyTdRect(td.getBoundingClientRect());\n\n return true;\n }\n\n return false;\n}\n\n/**\n * Hook that allows encapsulating custom behaviours of component-based editor by customizing passed ref with overridden hooks object.\n *\n * @param {HotEditorHooks} overriddenHooks Overrides specific for the custom editor.\n * @param {DependencyList} deps Overridden hooks object React dependency list.\n * @returns {UseHotEditorImpl} Editor API methods\n */\nexport function useHotEditor<T>(\n overriddenHooks?: HotEditorHooks,\n deps?: DependencyList\n): UseHotEditorImpl<T> {\n const { hooksRef, hotCustomEditorInstanceRef } =\n useContext(EditorContext)!;\n const [rerenderTrigger, setRerenderTrigger] = useState(0);\n const [editorValue, setEditorValue] = useState<T>();\n\n // return a deferred value that allows for optimizing performance by delaying the update of a value until the next render.\n const deferredValue = useDeferredValue(editorValue);\n\n useImperativeHandle(\n hooksRef,\n () => ({\n ...overriddenHooks,\n onOpen() {\n setEditorValue(hotCustomEditorInstanceRef.current?.getValue());\n overriddenHooks?.onOpen?.();\n setRerenderTrigger((t) => t + 1);\n },\n }),\n deps\n );\n\n return useMemo(\n () => ({\n get value(): T | undefined {\n return deferredValue;\n },\n setValue(newValue) {\n setEditorValue(newValue);\n hotCustomEditorInstanceRef.current?.setValue(newValue);\n },\n get isOpen() {\n return hotCustomEditorInstanceRef.current?.isOpened() ?? false;\n },\n finishEditing() {\n hotCustomEditorInstanceRef.current?.finishEditing();\n },\n get row() {\n return hotCustomEditorInstanceRef.current?.row;\n },\n get col() {\n return hotCustomEditorInstanceRef.current?.col;\n },\n }),\n [rerenderTrigger, hotCustomEditorInstanceRef, deferredValue]\n );\n}\n\n\ntype EditorChildrenProps<T> = {\n value: T;\n setValue: Dispatch<T>;\n finishEditing: () => void;\n isOpen: boolean;\n row: number | undefined;\n col: number | undefined;\n mainElementRef: React.RefObject<HTMLDivElement>;\n}\n\n// Render prop function type\ntype EditorRenderProp<T> = (props: EditorChildrenProps<T>) => React.ReactNode;\n\n// EditorComponent props - children typed to work with JSX syntax\ntype EditorComponentProps = {\n onPrepare?: (row: number, column: number, prop: string | number, TD: HTMLTableCellElement, originalValue: any, cellProperties: Handsontable.CellProperties) => void;\n onOpen?: () => void;\n onClose?: () => void;\n onFocus?: () => void;\n shortcutsGroup?: string;\n shortcuts?: {\n keys: string[][];\n callback: (props: any, event: KeyboardEvent) => boolean | void;\n group?: string;\n runOnlyIf?: () => boolean;\n captureCtrl?: boolean;\n preventDefault?: boolean;\n stopPropagation?: boolean;\n relativeToGroup?: string;\n position?: \"before\" | \"after\";\n forwardToContext?: any;\n }[];\n}\n\n\nexport function EditorComponent<T = any>({\n onPrepare,\n onClose,\n onOpen,\n onFocus,\n children,\n shortcutsGroup = \"custom-editor\",\n shortcuts,\n}: EditorComponentProps & { children?: EditorRenderProp<T> }): React.ReactElement {\n const mainElementRef = useRef<HTMLDivElement>(null);\n const currentValue = useRef<T>(undefined);\n const [themeClassName, setThemeClassName] = useState<string | undefined>();\n const { hotCustomEditorInstanceRef } = useContext(EditorContext)!;\n\n const registerShortcuts = useCallback(() => {\n if (!hotCustomEditorInstanceRef.current?.hot) return;\n\n hotCustomEditorInstanceRef.current?.hot?.getShortcutManager().setActiveContextName(\"editor\");\n\n const shortcutManager = hotCustomEditorInstanceRef.current?.hot?.getShortcutManager();\n const editorContext = shortcutManager.getContext('editor');\n const contextConfig = {\n group: shortcutsGroup,\n };\n\n if (shortcuts) {\n editorContext?.addShortcuts(shortcuts.map(shortcut => ({\n ...shortcut,\n group: shortcut.group || shortcutsGroup,\n relativeToGroup: shortcut.relativeToGroup ||\n 'editorManager.handlingEditor',\n position: shortcut.position || 'before',\n callback: (event: KeyboardEvent) =>\n shortcut.callback({ value: currentValue.current, setValue, finishEditing }, event),\n })),\n //@ts-ignore\n contextConfig\n );\n }\n }, [shortcuts]);\n\n\n const unRegisterShortcuts = useCallback(() => {\n if (!hotCustomEditorInstanceRef.current?.hot) return;\n\n const shortcutManager = hotCustomEditorInstanceRef.current?.hot?.getShortcutManager();\n const editorContext = shortcutManager.getContext(\"editor\")!;\n editorContext.removeShortcutsByGroup(shortcutsGroup);\n }, [shortcuts]);\n\n const refreshDimensions = useCallback(() => {\n const editor = hotCustomEditorInstanceRef.current as EditorWithPosition | null;\n const el = mainElementRef.current;\n\n if (!editor || !el) return;\n\n const hot = editor.hot;\n\n if (!hot) return;\n\n if (typeof editor.isOpened !== 'function' || !editor.isOpened()) return;\n\n if (!applyEditorPosition(el, editor, hot, null) && typeof editor.close === 'function') {\n editor.close();\n }\n }, []);\n\n const unRegisterScrollHooks = useCallback(() => {\n const editor = hotCustomEditorInstanceRef.current;\n const hot = editor?.hot;\n\n if (!hot || typeof hot.removeHook !== 'function') return;\n\n hot.removeHook('afterScrollHorizontally', refreshDimensions);\n hot.removeHook('afterScrollVertically', refreshDimensions);\n }, [refreshDimensions]);\n\n const registerScrollHooks = useCallback(() => {\n const editor = hotCustomEditorInstanceRef.current;\n const hot = editor?.hot;\n\n if (!hot || typeof hot.addHook !== 'function') return;\n\n hot.addHook('afterScrollHorizontally', refreshDimensions);\n hot.addHook('afterScrollVertically', refreshDimensions);\n }, [refreshDimensions]);\n\n const { value, setValue, finishEditing, isOpen, col, row } = useHotEditor<T>({\n onOpen: () => {\n if (!mainElementRef.current) return;\n\n const themeName = hotCustomEditorInstanceRef.current?.hot.getCurrentThemeName();\n\n if (themeName) setThemeClassName(themeName);\n \n mainElementRef.current.style.display = 'block';\n \n onOpen?.();\n\n const el = mainElementRef.current;\n const editor = hotCustomEditorInstanceRef.current as EditorWithPosition | null;\n\n if (el && editor?.hot) {\n applyEditorPosition(el, editor, editor.hot, null);\n }\n\n registerShortcuts();\n registerScrollHooks();\n },\n onClose: () => {\n if (!mainElementRef.current) return;\n \n mainElementRef.current.style.display = 'none';\n\n onClose?.();\n unRegisterShortcuts();\n unRegisterScrollHooks();\n },\n onPrepare: (_row, _column, _prop, TD, _originalValue, _cellProperties) => {\n onPrepare?.(_row, _column, _prop, TD, _originalValue, _cellProperties);\n },\n onFocus: () => {\n onFocus?.();\n },\n });\n\n useEffect(() => {\n currentValue.current = value;\n }, [value]);\n\n const stopMousedownPropagation = (e: React.MouseEvent) => {\n e.stopPropagation();\n };\n\n\n return (\n <div\n ref={mainElementRef}\n className={themeClassName}\n style={{\n display: 'none',\n position: 'absolute',\n background: '#fff',\n border: '0px',\n padding: '0px',\n zIndex: 100,\n }}\n onMouseDown={stopMousedownPropagation}\n >\n {(children as EditorRenderProp<T>)({ value: value as T, setValue, finishEditing, mainElementRef: mainElementRef as React.RefObject<HTMLDivElement>, isOpen, col, row })}\n </div>\n );\n};","import React, {\n FC,\n ReactElement,\n useEffect,\n useRef,\n} from 'react';\nimport { HotTableProps, HotColumnProps, HotEditorHooks } from './types';\nimport {\n createEditorPortal,\n displayAnyChildrenWarning,\n displayObsoleteRenderersEditorsWarning\n} from './helpers';\nimport { SettingsMapper } from './settingsMapper';\nimport Handsontable from 'handsontable/base';\nimport { useHotTableContext } from './hotTableContext'\nimport { useHotColumnContext } from './hotColumnContext'\nimport { EditorContextProvider, makeEditorClass } from './hotEditor';\n\nconst isHotColumn = (childNode: any): childNode is ReactElement => childNode.type === HotColumn;\n\nconst internalProps = ['_columnIndex', '_getOwnerDocument', 'children'];\n\nconst HotColumn: FC<HotColumnProps> = (props) => {\n const { componentRendererColumns, emitColumnSettings, getRendererWrapper } = useHotTableContext();\n const { columnIndex, getOwnerDocument } = useHotColumnContext();\n\n /**\n * Reference to component-based editor overridden hooks object.\n */\n const localEditorHooksRef = useRef<HotEditorHooks | null>(null);\n\n /**\n * Reference to HOT-native custom editor class instance.\n */\n const localEditorClassInstance = useRef<Handsontable.editors.BaseEditor | null>(null);\n\n /**\n * Logic performed after mounting & updating of the HotColumn component.\n */\n useEffect(() => {\n\n /**\n * Filter out all the internal properties and return an object with just the Handsontable-related props.\n *\n * @returns {Object}\n */\n const getSettingsProps = (): HotTableProps => {\n return Object.keys(props)\n .filter(key => !internalProps.includes(key))\n .reduce<HotTableProps>((obj, key) => {\n (obj as any)[key] = props[key];\n return obj;\n }, {});\n };\n\n /**\n * Create the column settings based on the data provided to the `HotColumn` component and its child components.\n */\n const createColumnSettings = (): Handsontable.ColumnSettings => {\n const columnSettings = SettingsMapper.getSettings(getSettingsProps()) as unknown as Handsontable.ColumnSettings;\n\n if (props.renderer) {\n columnSettings.renderer = getRendererWrapper(props.renderer);\n componentRendererColumns.set(columnIndex, true);\n } else if (props.hotRenderer) {\n columnSettings.renderer = props.hotRenderer;\n }\n\n if (props.editor) {\n columnSettings.editor = makeEditorClass(localEditorHooksRef, localEditorClassInstance);\n } else if (props.hotEditor) {\n columnSettings.editor = props.hotEditor;\n }\n\n return columnSettings\n };\n\n const columnSettings = createColumnSettings();\n emitColumnSettings(columnSettings, columnIndex);\n\n if (!displayObsoleteRenderersEditorsWarning(props.children)) {\n displayAnyChildrenWarning(props.children);\n }\n });\n\n const editorPortal = createEditorPortal(getOwnerDocument(), props.editor);\n\n /**\n * Render the portals of the editors, if there are any.\n *\n * @returns {ReactElement}\n */\n return (\n <EditorContextProvider hooksRef={localEditorHooksRef}\n hotCustomEditorInstanceRef={localEditorClassInstance}>\n {editorPortal}\n </EditorContextProvider>\n )\n}\n\nexport { HotColumn, isHotColumn };\n","import React, {\n Dispatch,\n ReactPortal,\n forwardRef,\n Fragment,\n useImperativeHandle,\n useState,\n} from 'react';\n\nexport type RenderersPortalManagerRef = Dispatch<ReactPortal[]>;\n\n/**\n * Component used to manage the renderer component portals.\n */\nexport const RenderersPortalManager = forwardRef<RenderersPortalManagerRef, {}>((_, ref) => {\n const [portals, setPortals] = useState<ReactPortal[]>([]);\n useImperativeHandle(ref, () => setPortals);\n\n return (\n <Fragment>\n {portals}\n </Fragment>\n );\n});\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n var ReactIs = require('react-is');\n\n // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = require('./factoryWithThrowingShims')();\n}\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function() {\n function shim(props, propName, componentName, location, propFullName, secret) {\n if (secret === ReactPropTypesSecret) {\n // It is still safe when called from React.\n return;\n }\n var err = new Error(\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n 'Use PropTypes.checkPropTypes() to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n err.name = 'Invariant Violation';\n throw err;\n };\n shim.isRequired = shim;\n function getShim() {\n return shim;\n };\n // Important!\n // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n var ReactPropTypes = {\n array: shim,\n bigint: shim,\n bool: shim,\n func: shim,\n number: shim,\n object: shim,\n string: shim,\n symbol: shim,\n\n any: shim,\n arrayOf: getShim,\n element: shim,\n elementType: shim,\n instanceOf: getShim,\n node: shim,\n objectOf: getShim,\n oneOf: getShim,\n oneOfType: getShim,\n shape: getShim,\n exact: getShim,\n\n checkPropTypes: emptyFunctionWithReset,\n resetWarningCache: emptyFunction\n };\n\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","import React, {\n Children,\n Fragment,\n useEffect,\n useCallback,\n useImperativeHandle,\n useRef,\n forwardRef\n} from 'react';\nimport Handsontable from 'handsontable/base';\nimport { SettingsMapper } from './settingsMapper';\nimport { RenderersPortalManager } from './renderersPortalManager';\nimport { HotColumn, isHotColumn } from './hotColumn';\nimport { HotEditorHooks, HotTableProps, HotTableRef } from './types';\nimport {\n HOT_DESTROYED_WARNING,\n AUTOSIZE_WARNING,\n createEditorPortal,\n getContainerAttributesProps,\n isCSR,\n warn,\n displayObsoleteRenderersEditorsWarning,\n useUpdateEffect,\n displayChildrenOfTypeWarning\n} from './helpers';\nimport PropTypes from 'prop-types';\nimport { getRenderer } from 'handsontable/renderers/registry';\nimport { getEditor } from 'handsontable/editors/registry';\nimport { useHotTableContext } from './hotTableContext'\nimport { HotColumnContextProvider } from './hotColumnContext'\nimport { EditorContextProvider, makeEditorClass } from './hotEditor';\n\nconst HotTableInner = forwardRef<\n HotTableRef,\n HotTableProps\n>((props, ref) => {\n\n /**\n * Reference to the Handsontable instance.\n */\n const __hotInstance = useRef<Handsontable | null>(null);\n\n /**\n * Reference to the main Handsontable DOM element.\n */\n const hotElementRef = useRef<HTMLDivElement>(null);\n\n /**\n * Reference to component-based editor overridden hooks object.\n */\n const globalEditorHooksRef = useRef<HotEditorHooks | null>(null);\n\n /**\n * Reference to HOT-native custom editor class instance.\n */\n const globalEditorClassInstance = useRef<Handsontable.editors.BaseEditor | null>(null);\n\n /**\n * Reference to the previous props object.\n */\n const prevProps = useRef<HotTableProps>();\n\n /**\n * HotTable context exposing helper functions.\n */\n const context = useHotTableContext();\n\n /**\n * Getter for the property storing the Handsontable instance.\n */\n const getHotInstance = useCallback((): Handsontable | null => {\n if (!__hotInstance.current || !__hotInstance.current.isDestroyed) {\n\n // Will return the Handsontable instance or `null` if it's not yet been created.\n return __hotInstance.current;\n\n } else {\n console.warn(HOT_DESTROYED_WARNING);\n\n return null;\n }\n }, [__hotInstance]);\n\n const isHotInstanceDestroyed = useCallback((): boolean => {\n return !__hotInstance.current || __hotInstance.current.isDestroyed;\n }, [__hotInstance]);\n\n /**\n * Clear both the editor and the renderer cache.\n */\n const clearCache = useCallback((): void => {\n context.clearRenderedCellCache();\n context.componentRendererColumns.clear();\n }, [context]);\n\n /**\n * Get the `Document` object corresponding to the main component element.\n *\n * @returns The `Document` object used by the component.\n */\n const getOwnerDocument = useCallback((): Document | null => {\n if (isCSR()) {\n return hotElementRef.current ? hotElementRef.current.ownerDocument : document;\n }\n\n return null;\n }, [hotElementRef]);\n\n /**\n * Create a new settings object containing the column settings and global editors and renderers.\n *\n * @returns {Handsontable.GridSettings} New global set of settings for Handsontable.\n */\n const createNewGlobalSettings = (init: boolean = false, prevProps: HotTableProps = {}): Handsontable.GridSettings => {\n const initOnlySettingKeys = !isHotInstanceDestroyed() ? // Needed for React's double-rendering.\n ((getHotInstance()?.getSettings() as any)?._initOnlySettings || []) :\n [];\n const newSettings = SettingsMapper.getSettings(\n props, {\n prevProps,\n isInit: init,\n initOnlySettingKeys\n }\n );\n\n if (context.columnsSettings.length) {\n newSettings.columns = context.columnsSettings;\n }\n\n if (props.renderer) {\n newSettings.renderer = context.getRendererWrapper(props.renderer);\n context.componentRendererColumns.set('global', true);\n } else {\n newSettings.renderer = props.hotRenderer || getRenderer('text');\n }\n\n if (props.editor) {\n newSettings.editor = makeEditorClass(globalEditorHooksRef, globalEditorClassInstance);\n } else {\n newSettings.editor = props.hotEditor || getEditor('text');\n }\n\n return newSettings;\n };\n\n /**\n * Detect if `autoRowSize` or `autoColumnSize` is defined, and if so, throw an incompatibility warning.\n */\n const displayAutoSizeWarning = (hotInstance: Handsontable | null): void => {\n if (\n hotInstance &&\n (\n hotInstance.getPlugin('autoRowSize')?.enabled ||\n hotInstance.getPlugin('autoColumnSize')?.enabled\n )\n ) {\n if (context.componentRendererColumns.size > 0) {\n warn(AUTOSIZE_WARNING);\n }\n }\n };\n\n /**\n * Initialize Handsontable after the component has mounted.\n */\n useEffect(() => {\n const newGlobalSettings = createNewGlobalSettings(true);\n\n // Update prevProps with the current props\n prevProps.current = props;\n\n __hotInstance.current = new Handsontable.Core(hotElementRef.current!, newGlobalSettings);\n\n /**\n * Handsontable's `beforeViewRender` hook callback.\n */\n __hotInstance.current.addHook('beforeViewRender', () => {\n context.clearPortalCache();\n context.clearRenderedCellCache();\n });\n\n /**\n * Handsontable's `afterViewRender` hook callback.\n */\n __hotInstance.current.addHook('afterViewRender', () => {\n context.pushCellPortalsIntoPortalManager();\n });\n\n __hotInstance.current.init();\n\n displayAutoSizeWarning(__hotInstance.current);\n\n if (!displayObsoleteRenderersEditorsWarning(props.children)) {\n displayChildrenOfTypeWarning(props.children, HotColumn);\n }\n\n /**\n * Destroy the Handsontable instance when the parent component unmounts.\n */\n return () => {\n clearCache();\n getHotInstance()?.destroy();\n }\n }, []);\n\n /**\n * Logic performed after the component update.\n */\n useUpdateEffect((): void => {\n clearCache();\n\n const hotInstance = getHotInstance();\n\n const newGlobalSettings = createNewGlobalSettings(false, prevProps.current);\n\n // Update prevProps with the current props\n prevProps.current = props;\n\n hotInstance?.updateSettings(newGlobalSettings, false);\n\n displayAutoSizeWarning(hotInstance);\n displayObsoleteRenderersEditorsWarning(props.children);\n });\n\n /**\n * Interface exposed to parent components by HotTable instance via React ref\n */\n useImperativeHandle(ref, () => ({\n get hotElementRef() {\n return hotElementRef.current!;\n },\n get hotInstance() {\n return getHotInstance();\n }\n }));\n\n /**\n * Render the component.\n */\n const hotColumnWrapped = Children.toArray(props.children)\n .filter(isHotColumn)\n .map((childNode, columnIndex) => (\n <HotColumnContextProvider columnIndex={columnIndex}\n getOwnerDocument={getOwnerDocument}\n key={columnIndex}>\n {childNode}\n </HotColumnContextProvider>\n ));\n\n const containerProps = getContainerAttributesProps(props);\n const editorPortal = createEditorPortal(getOwnerDocument(), props.editor);\n\n return (\n <Fragment>\n <div ref={hotElementRef} {...containerProps}>\n {hotColumnWrapped}\n </div>\n <RenderersPortalManager ref={context.setRenderersPortalManagerRef} />\n <EditorContextProvider hooksRef={globalEditorHooksRef}\n hotCustomEditorInstanceRef={globalEditorClassInstance}>\n {editorPortal}\n </EditorContextProvider>\n </Fragment>\n );\n});\n\n/**\n * Prop types to be checked at runtime.\n */\nHotTableInner.propTypes = {\n style: PropTypes.object,\n id: PropTypes.string,\n className: PropTypes.string\n};\n\nexport default HotTableInner;\nexport { HotTableInner };\n","import React, {\n ForwardRefExoticComponent,\n RefAttributes,\n useId,\n forwardRef,\n} from 'react';\nimport * as packageJson from '../package.json';\nimport { HotTableInner } from './hotTableInner';\nimport { HotTableProps, HotTableRef } from './types';\nimport { HotTableContextProvider } from './hotTableContext';\n\ninterface Version {\n version?: string;\n}\n\ntype HotTable = ForwardRefExoticComponent<HotTableProps & RefAttributes<HotTableRef>> & Version;\n\n/**\n * A Handsontable-ReactJS wrapper.\n *\n * To implement, use the `HotTable` tag with properties corresponding to Handsontable options.\n * For example:\n *\n * ```js\n * <HotTable id=\"hot\" data={dataObject} contextMenu={true} colHeaders={true} width={600} height={300} stretchH=\"all\" />\n *\n * // is analogous to\n * let hot = new Handsontable(document.getElementById('hot'), {\n * data: dataObject,\n * contextMenu: true,\n * colHeaders: true,\n * width: 600\n * height: 300\n * });\n *\n * ```\n */\nconst HotTable: HotTable = forwardRef<HotTableRef, HotTableProps>(({ children, ...props }, ref) => {\n const componentId = props.id ?? useId();\n\n return (\n <HotTableContextProvider>\n <HotTableInner id={componentId} {...props} ref={ref}>\n {children}\n </HotTableInner>\n </HotTableContextProvider>\n );\n})\n\n/**\n * Package version.\n *\n * @returns The version number of the package.\n */\nHotTable.version = (packageJson as any).version;\n\nexport default HotTable;\nexport { HotTable };\n"],"names":["bulkComponentContainer","warn","_console","console","apply","arguments","displayObsoleteRenderersEditorsWarning","children","hasChildElementOfType","type","React","Children","toArray","some","child","props","createEditorPortal","doc","Editor","editorElement","createElement","containerProps","getContainerAttributesProps","className","concat","ReactDOM","createPortal","body","id","Math","random","toString","substring","undefined","style","SettingsMapper","_createClass","_classCallCheck","key","value","properties","_ref","length","_ref$prevProps","prevProps","_ref$isInit","isInit","_ref$initOnlySettingK","initOnlySettingKeys","shouldSkipProp","includes","newSettings","hasOwnProperty","HotTableContext","createContext","HotTableContextProvider","columnsSettings","useRef","setHotColumnSettings","useCallback","columnSettings","columnIndex","current","componentRendererColumns","Map","renderedCellCache","clearRenderedCellCache","clear","portalCache","clearPortalCache","portalContainerCache","getRendererWrapper","Renderer","instance","TD","row","col","prop","cellProperties","instanceGuid","guid","portalContainerKey","portalKey","has","innerHTML","get","getAttribute","cachedPortal","cachedPortalContainer","firstChild","removeChild","appendChild","_createPortal","rElement","ownerDocument","document","cachedContainer","createDocumentFragment","portalContainer","portal","set","renderersPortalManager","setRenderersPortalManagerRef","pmComponent","pushCellPortalsIntoPortalManager","_toConsumableArray","values","contextImpl","useMemo","emitColumnSettings","Provider","useHotTableContext","useContext","HotColumnContext","HotColumnContextProvider","getOwnerDocument","AbstractMethods","ExcludedMethods","MethodsMap","open","close","prepare","focus","makeEditorClass","hooksRef","instanceRef","_Handsontable$editors","CustomEditor","hotInstance","_this","_callSuper","this","Object","getOwnPropertyNames","Handsontable","editors","BaseEditor","prototype","forEach","propName","baseMethod","_hooksRef$current","result","_hooksRef$current$Met","_len","args","Array","_key","call","bind","_inherits","newValue","EditorContext","EditorContextProvider","hotCustomEditorInstanceRef","applyEditorPosition","el","editor","hot","td","_rootWindow$pageXOffs","_rootWindow$pageYOffs","rootWindow","window","pageX","pageXOffset","pageY","pageYOffset","isRtl","position","cell","getEditedCell","getBoundingClientRect","rect","top","width","height","right","left","applyTdRect","getEditedCellRect","rootElement","rootRect","start","useHotEditor","overriddenHooks","deps","_useContext","_useState2","_slicedToArray","useState","rerenderTrigger","setRerenderTrigger","_useState4","setEditorValue","deferredValue","useDeferredValue","useImperativeHandle","_objectSpread","onOpen","_hotCustomEditorInsta","_overriddenHooks$onOp","getValue","t","setValue","_hotCustomEditorInsta2","isOpen","_hotCustomEditorInsta3","_hotCustomEditorInsta4","isOpened","finishEditing","_hotCustomEditorInsta5","_hotCustomEditorInsta6","_hotCustomEditorInsta7","isHotColumn","childNode","HotColumn","internalProps","_useHotTableContext","_useHotColumnContext","localEditorHooksRef","localEditorClassInstance","useEffect","getSettings","keys","filter","reduce","obj","renderer","hotRenderer","hotEditor","createColumnSettings","editorPortal","RenderersPortalManager","forwardRef","_","ref","portals","setPortals","Fragment","propTypesModule","exports","ReactPropTypesSecret","ReactPropTypesSecret_1","emptyFunction","emptyFunctionWithReset","resetWarningCache","factoryWithThrowingShims","shim","componentName","location","propFullName","secret","err","Error","name","getShim","isRequired","ReactPropTypes","array","bigint","bool","func","number","object","string","symbol","any","arrayOf","element","elementType","instanceOf","node","objectOf","oneOf","oneOfType","shape","exact","checkPropTypes","PropTypes","require$$2","HotTableInner","effect","notInitialRender","__hotInstance","hotElementRef","globalEditorHooksRef","globalEditorClassInstance","context","getHotInstance","isDestroyed","isHotInstanceDestroyed","clearCache","createNewGlobalSettings","_getHotInstance","init","_initOnlySettings","columns","getRenderer","getEditor","displayAutoSizeWarning","_hotInstance$getPlugi","_hotInstance$getPlugi2","getPlugin","enabled","size","Component","newGlobalSettings","Core","addHook","_getHotInstance2","destroy","updateSettings","hotColumnWrapped","map","assign","propTypes","HotTable","_props$id","_objectWithoutProperties","_excluded","componentId","useId","version","_ref2","onPrepare","onClose","onFocus","_ref2$shortcutsGroup","shortcutsGroup","shortcuts","mainElementRef","currentValue","_useState6","themeClassName","setThemeClassName","registerShortcuts","_hotCustomEditorInsta8","_hotCustomEditorInsta9","_hotCustomEditorInsta0","getShortcutManager","setActiveContextName","editorContext","getContext","contextConfig","group","addShortcuts","shortcut","relativeToGroup","callback","event","unRegisterShortcuts","_hotCustomEditorInsta1","_hotCustomEditorInsta10","removeShortcutsByGroup","refreshDimensions","unRegisterScrollHooks","removeHook","registerScrollHooks","_useHotEditor","_hotCustomEditorInsta11","themeName","getCurrentThemeName","display","_row","_column","_prop","_originalValue","_cellProperties","background","border","padding","zIndex","onMouseDown","e","stopPropagation"],"mappings":"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","x_google_ignoreList":[7,8,9]}
@@ -617,6 +617,58 @@ var EditorContextProvider = function EditorContextProvider(_ref) {
617
617
  }
618
618
  }, children);
619
619
  };
620
+ /**
621
+ * Applies editor overlay position/dimensions to an element.
622
+ * @returns true if position was applied, false if editor should close (e.g. cell no longer available).
623
+ */
624
+ function applyEditorPosition(el, editor, hot, td) {
625
+ var _rootWindow$pageXOffs, _rootWindow$pageYOffs;
626
+ var rootWindow = hot.rootWindow || window;
627
+ var pageX = (_rootWindow$pageXOffs = rootWindow.pageXOffset) !== null && _rootWindow$pageXOffs !== void 0 ? _rootWindow$pageXOffs : 0;
628
+ var pageY = (_rootWindow$pageYOffs = rootWindow.pageYOffset) !== null && _rootWindow$pageYOffs !== void 0 ? _rootWindow$pageYOffs : 0;
629
+ var isRtl = typeof hot.isRtl === 'function' && hot.isRtl();
630
+ var position = editor.position;
631
+ var applyTdRect = function applyTdRect(rect) {
632
+ el.style.top = "".concat(pageY + rect.top - 1, "px");
633
+ el.style.width = "".concat(rect.width + 1, "px");
634
+ el.style.height = "".concat(rect.height + 1, "px");
635
+ if (isRtl) {
636
+ el.style.right = "".concat(pageX + rect.right, "px");
637
+ el.style.left = 'auto';
638
+ } else {
639
+ el.style.left = "".concat(pageX + rect.left - 1, "px");
640
+ el.style.right = 'auto';
641
+ }
642
+ };
643
+ if (position === 'portal') {
644
+ var cell = typeof editor.getEditedCell === 'function' ? editor.getEditedCell.call(editor) : null;
645
+ if (!(cell !== null && cell !== void 0 && cell.getBoundingClientRect)) {
646
+ return false;
647
+ }
648
+ applyTdRect(cell.getBoundingClientRect());
649
+ return true;
650
+ }
651
+ var getEditedCellRect = editor.getEditedCellRect;
652
+ var rect = typeof getEditedCellRect === 'function' ? getEditedCellRect.call(editor) : null;
653
+ if (rect) {
654
+ var rootElement = hot.rootElement;
655
+ if (rootElement !== null && rootElement !== void 0 && rootElement.getBoundingClientRect) {
656
+ var rootRect = rootElement.getBoundingClientRect();
657
+ el.style.top = "".concat(pageY + rootRect.top + rect.top, "px");
658
+ el.style.width = "".concat(rect.width, "px");
659
+ el.style.height = "".concat(rect.height, "px");
660
+ if (isRtl) {
661
+ el.style.right = "".concat(pageX + rootRect.right - rect.start, "px");
662
+ el.style.left = 'auto';
663
+ } else {
664
+ el.style.left = "".concat(pageX + rootRect.left + rect.start, "px");
665
+ el.style.right = 'auto';
666
+ }
667
+ return true;
668
+ }
669
+ }
670
+ return false;
671
+ }
620
672
  /**
621
673
  * Hook that allows encapsulating custom behaviours of component-based editor by customizing passed ref with overridden hooks object.
622
674
  *
@@ -690,6 +742,10 @@ function EditorComponent(_ref2) {
690
742
  shortcuts = _ref2.shortcuts;
691
743
  var mainElementRef = useRef(null);
692
744
  var currentValue = useRef(undefined);
745
+ var _useState5 = useState(),
746
+ _useState6 = _slicedToArray(_useState5, 2),
747
+ themeClassName = _useState6[0],
748
+ setThemeClassName = _useState6[1];
693
749
  var _useContext2 = useContext(EditorContext),
694
750
  hotCustomEditorInstanceRef = _useContext2.hotCustomEditorInstanceRef;
695
751
  var registerShortcuts = useCallback(function () {
@@ -727,26 +783,55 @@ function EditorComponent(_ref2) {
727
783
  var editorContext = shortcutManager.getContext("editor");
728
784
  editorContext.removeShortcutsByGroup(shortcutsGroup);
729
785
  }, [shortcuts]);
786
+ var refreshDimensions = useCallback(function () {
787
+ var editor = hotCustomEditorInstanceRef.current;
788
+ var el = mainElementRef.current;
789
+ if (!editor || !el) return;
790
+ var hot = editor.hot;
791
+ if (!hot) return;
792
+ if (typeof editor.isOpened !== 'function' || !editor.isOpened()) return;
793
+ if (!applyEditorPosition(el, editor, hot) && typeof editor.close === 'function') {
794
+ editor.close();
795
+ }
796
+ }, []);
797
+ var unRegisterScrollHooks = useCallback(function () {
798
+ var editor = hotCustomEditorInstanceRef.current;
799
+ var hot = editor === null || editor === void 0 ? void 0 : editor.hot;
800
+ if (!hot || typeof hot.removeHook !== 'function') return;
801
+ hot.removeHook('afterScrollHorizontally', refreshDimensions);
802
+ hot.removeHook('afterScrollVertically', refreshDimensions);
803
+ }, [refreshDimensions]);
804
+ var registerScrollHooks = useCallback(function () {
805
+ var editor = hotCustomEditorInstanceRef.current;
806
+ var hot = editor === null || editor === void 0 ? void 0 : editor.hot;
807
+ if (!hot || typeof hot.addHook !== 'function') return;
808
+ hot.addHook('afterScrollHorizontally', refreshDimensions);
809
+ hot.addHook('afterScrollVertically', refreshDimensions);
810
+ }, [refreshDimensions]);
730
811
  var _useHotEditor = useHotEditor({
731
812
  onOpen: function onOpen() {
813
+ var _hotCustomEditorInsta11;
732
814
  if (!mainElementRef.current) return;
815
+ var themeName = (_hotCustomEditorInsta11 = hotCustomEditorInstanceRef.current) === null || _hotCustomEditorInsta11 === void 0 ? void 0 : _hotCustomEditorInsta11.hot.getCurrentThemeName();
816
+ if (themeName) setThemeClassName(themeName);
733
817
  mainElementRef.current.style.display = 'block';
734
818
  _onOpen === null || _onOpen === void 0 || _onOpen();
819
+ var el = mainElementRef.current;
820
+ var editor = hotCustomEditorInstanceRef.current;
821
+ if (el && editor !== null && editor !== void 0 && editor.hot) {
822
+ applyEditorPosition(el, editor, editor.hot);
823
+ }
735
824
  registerShortcuts();
825
+ registerScrollHooks();
736
826
  },
737
827
  onClose: function onClose() {
738
828
  if (!mainElementRef.current) return;
739
829
  mainElementRef.current.style.display = 'none';
740
830
  _onClose === null || _onClose === void 0 || _onClose();
741
831
  unRegisterShortcuts();
832
+ unRegisterScrollHooks();
742
833
  },
743
834
  onPrepare: function onPrepare(_row, _column, _prop, TD, _originalValue, _cellProperties) {
744
- if (!mainElementRef.current) return;
745
- var tdPosition = TD.getBoundingClientRect();
746
- mainElementRef.current.style.left = "".concat(tdPosition.left + window.pageXOffset - 1, "px");
747
- mainElementRef.current.style.top = "".concat(tdPosition.top + window.pageYOffset - 1, "px");
748
- mainElementRef.current.style.width = "".concat(tdPosition.width + 1, "px");
749
- mainElementRef.current.style.height = "".concat(tdPosition.height + 1, "px");
750
835
  _onPrepare === null || _onPrepare === void 0 || _onPrepare(_row, _column, _prop, TD, _originalValue, _cellProperties);
751
836
  },
752
837
  onFocus: function onFocus() {
@@ -767,13 +852,14 @@ function EditorComponent(_ref2) {
767
852
  };
768
853
  return React.createElement("div", {
769
854
  ref: mainElementRef,
855
+ className: themeClassName,
770
856
  style: {
771
857
  display: 'none',
772
858
  position: 'absolute',
773
859
  background: '#fff',
774
860
  border: '0px',
775
861
  padding: '0px',
776
- zIndex: 999
862
+ zIndex: 100
777
863
  },
778
864
  onMouseDown: stopMousedownPropagation
779
865
  }, children({
@@ -860,7 +946,7 @@ var HotColumn = function HotColumn(props) {
860
946
  }, editorPortal);
861
947
  };
862
948
 
863
- var version="17.0.0-rc1";
949
+ var version="17.0.0-rc10";
864
950
 
865
951
  /**
866
952
  * Component used to manage the renderer component portals.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@handsontable/react-wrapper",
3
- "version": "17.0.0-rc1",
3
+ "version": "17.0.0-rc10",
4
4
  "description": "Best Data Grid for React with Spreadsheet Look and Feel.",
5
5
  "author": "Handsoncode <hello@handsoncode.net> (https://handsoncode.net)",
6
6
  "homepage": "https://handsontable.com",