@handsontable/react-wrapper 0.0.0-next-7cc7ef7-20241028

Sign up to get free protection for your applications and to get access to all the features.
Files changed (43) hide show
  1. package/LICENSE.txt +25 -0
  2. package/README.md +136 -0
  3. package/commonjs/react-handsontable.js +2139 -0
  4. package/commonjs/src/helpers.d.ts +105 -0
  5. package/commonjs/src/hotColumn.d.ts +5 -0
  6. package/commonjs/src/hotColumnContext.d.ts +16 -0
  7. package/commonjs/src/hotEditor.d.ts +33 -0
  8. package/commonjs/src/hotTable.d.ts +29 -0
  9. package/commonjs/src/hotTableContext.d.ts +55 -0
  10. package/commonjs/src/hotTableInner.d.ts +5 -0
  11. package/commonjs/src/index.d.ts +5 -0
  12. package/commonjs/src/renderersPortalManager.d.ts +6 -0
  13. package/commonjs/src/settingsMapper.d.ts +18 -0
  14. package/commonjs/src/types.d.ts +78 -0
  15. package/dist/react-handsontable.js +1133 -0
  16. package/dist/react-handsontable.js.map +1 -0
  17. package/dist/react-handsontable.min.js +31 -0
  18. package/dist/react-handsontable.min.js.map +1 -0
  19. package/dist/src/helpers.d.ts +105 -0
  20. package/dist/src/hotColumn.d.ts +5 -0
  21. package/dist/src/hotColumnContext.d.ts +16 -0
  22. package/dist/src/hotEditor.d.ts +33 -0
  23. package/dist/src/hotTable.d.ts +29 -0
  24. package/dist/src/hotTableContext.d.ts +55 -0
  25. package/dist/src/hotTableInner.d.ts +5 -0
  26. package/dist/src/index.d.ts +5 -0
  27. package/dist/src/renderersPortalManager.d.ts +6 -0
  28. package/dist/src/settingsMapper.d.ts +18 -0
  29. package/dist/src/types.d.ts +78 -0
  30. package/es/react-handsontable.mjs +2125 -0
  31. package/handsontable-non-commercial-license.pdf +0 -0
  32. package/helpers.d.ts +105 -0
  33. package/hotColumn.d.ts +5 -0
  34. package/hotColumnContext.d.ts +16 -0
  35. package/hotEditor.d.ts +33 -0
  36. package/hotTable.d.ts +29 -0
  37. package/hotTableContext.d.ts +55 -0
  38. package/hotTableInner.d.ts +5 -0
  39. package/index.d.ts +5 -0
  40. package/package.json +130 -0
  41. package/renderersPortalManager.d.ts +6 -0
  42. package/settingsMapper.d.ts +18 -0
  43. package/types.d.ts +78 -0
@@ -0,0 +1,105 @@
1
+ import React, { ComponentType, CSSProperties, DependencyList, EffectCallback, ReactNode, ReactPortal } from 'react';
2
+ import { HotTableProps } from './types';
3
+ /**
4
+ * Warning message for the `autoRowSize`/`autoColumnSize` compatibility check.
5
+ */
6
+ export declare const AUTOSIZE_WARNING: string;
7
+ /**
8
+ * Warning message for the `hot-renderer` obsolete renderer passing method.
9
+ */
10
+ export declare const OBSOLETE_HOTRENDERER_WARNING: string;
11
+ /**
12
+ * Warning message for the `hot-editor` obsolete editor passing method.
13
+ */
14
+ export declare const OBSOLETE_HOTEDITOR_WARNING: string;
15
+ /**
16
+ * Warning message for the unexpected children of HotTable component.
17
+ */
18
+ export declare const UNEXPECTED_HOTTABLE_CHILDREN_WARNING: string;
19
+ /**
20
+ * Warning message for the unexpected children of HotColumn component.
21
+ */
22
+ export declare const UNEXPECTED_HOTCOLUMN_CHILDREN_WARNING: string;
23
+ /**
24
+ * Message for the warning thrown if the Handsontable instance has been destroyed.
25
+ */
26
+ export declare const HOT_DESTROYED_WARNING: string;
27
+ /**
28
+ * Default classname given to the wrapper container.
29
+ */
30
+ export declare const DEFAULT_CLASSNAME = "hot-wrapper-editor-container";
31
+ /**
32
+ * Logs warn to the console if the `console` object is exposed.
33
+ *
34
+ * @param {...*} args Values which will be logged.
35
+ */
36
+ export declare function warn(...args: any[]): void;
37
+ /**
38
+ * Detect if `hot-renderer` or `hot-editor` is defined, and if so, throw an incompatibility warning.
39
+ *
40
+ * @returns {boolean} 'true' if the warning was issued
41
+ */
42
+ export declare function displayObsoleteRenderersEditorsWarning(children: ReactNode): boolean;
43
+ /**
44
+ * Detect if children of specified type are defined, and if so, throw an incompatibility warning.
45
+ *
46
+ * @param {ReactNode} children Component children nodes
47
+ * @param {ComponentType} Component Component type to check
48
+ * @returns {boolean} 'true' if the warning was issued
49
+ */
50
+ export declare function displayChildrenOfTypeWarning(children: ReactNode, Component: ComponentType): boolean;
51
+ /**
52
+ * Detect if children is defined, and if so, throw an incompatibility warning.
53
+ *
54
+ * @param {ReactNode} children Component children nodes
55
+ * @returns {boolean} 'true' if the warning was issued
56
+ */
57
+ export declare function displayAnyChildrenWarning(children: ReactNode): boolean;
58
+ /**
59
+ * Create an editor portal.
60
+ *
61
+ * @param {Document} doc Document to be used.
62
+ * @param {ComponentType} Editor Editor component or render function.
63
+ * @returns {ReactPortal} The portal for the editor.
64
+ */
65
+ export declare function createEditorPortal(doc: Document | null, Editor: HotTableProps['editor'] | undefined): ReactPortal | null;
66
+ /**
67
+ * Render a cell component to an external DOM node.
68
+ *
69
+ * @param {React.ReactElement} rElement React element to be used as a base for the component.
70
+ * @param {Document} [ownerDocument] The owner document to set the portal up into.
71
+ * @param {String} portalKey The key to be used for the portal.
72
+ * @param {HTMLElement} [cachedContainer] The cached container to be used for the portal.
73
+ * @returns {{portal: ReactPortal, portalContainer: HTMLElement}} An object containing the portal and its container.
74
+ */
75
+ export declare function createPortal(rElement: React.ReactElement, ownerDocument: Document | null | undefined, portalKey: string, cachedContainer?: HTMLElement): {
76
+ portal: ReactPortal;
77
+ portalContainer: HTMLElement;
78
+ };
79
+ /**
80
+ * Get an object containing the `id`, `className` and `style` keys, representing the corresponding props passed to the
81
+ * component.
82
+ *
83
+ * @param {HotTableProps} props Object containing the React element props.
84
+ * @param {Boolean} randomizeId If set to `true`, the function will randomize the `id` property when no `id` was present in the `prop` object.
85
+ * @returns An object containing the `id`, `className` and `style` keys, representing the corresponding props passed to the
86
+ * component.
87
+ */
88
+ export declare function getContainerAttributesProps(props: HotTableProps, randomizeId?: boolean): {
89
+ id?: string;
90
+ className: string;
91
+ style: CSSProperties;
92
+ };
93
+ /**
94
+ * Checks if the environment that the code runs in is a browser.
95
+ *
96
+ * @returns {boolean}
97
+ */
98
+ export declare function isCSR(): boolean;
99
+ /**
100
+ * A variant of useEffect hook that does not trigger on initial mount, only updates
101
+ *
102
+ * @param effect Effect function
103
+ * @param deps Effect dependencies
104
+ */
105
+ export declare function useUpdateEffect(effect: EffectCallback, deps?: DependencyList): void;
@@ -0,0 +1,5 @@
1
+ import React, { FC } from 'react';
2
+ import { HotColumnProps } from './types';
3
+ declare const isHotColumn: (childNode: any) => childNode is React.ReactElement<any, string | ((props: any, deprecatedLegacyContext?: any) => React.ReactElement<any, any> | null) | (new (props: any, deprecatedLegacyContext?: any) => React.Component<any, any, any>)>;
4
+ declare const HotColumn: FC<HotColumnProps>;
5
+ export { HotColumn, isHotColumn };
@@ -0,0 +1,16 @@
1
+ import { FC, PropsWithChildren } from 'react';
2
+ export interface HotColumnContextImpl {
3
+ /**
4
+ * Column index within a HotTable.
5
+ */
6
+ readonly columnIndex: number;
7
+ /**
8
+ * Get the `Document` object corresponding to the main component element.
9
+ *
10
+ * @returns The `Document` object used by the component.
11
+ */
12
+ readonly getOwnerDocument: () => Document | null;
13
+ }
14
+ declare const HotColumnContextProvider: FC<PropsWithChildren<HotColumnContextImpl>>;
15
+ declare const useHotColumnContext: () => HotColumnContextImpl;
16
+ export { useHotColumnContext, HotColumnContextProvider };
@@ -0,0 +1,33 @@
1
+ import { DependencyList, FC, MutableRefObject, ReactNode, Ref, RefObject } from 'react';
2
+ import Handsontable from 'handsontable/base';
3
+ import { HotEditorHooks, UseHotEditorImpl } from './types';
4
+ /**
5
+ * Create a class to be passed to the Handsontable's settings.
6
+ *
7
+ * @param {RefObject<HotEditorHooks>} hooksRef Reference to component-based editor overridden hooks object.
8
+ * @param {RefObject} instanceRef Reference to Handsontable-native custom editor class instance.
9
+ * @returns {Function} A class to be passed to the Handsontable editor settings.
10
+ */
11
+ export declare function makeEditorClass(hooksRef: MutableRefObject<HotEditorHooks | null>, instanceRef: MutableRefObject<Handsontable.editors.BaseEditor | null>): typeof Handsontable.editors.BaseEditor;
12
+ interface EditorContextProviderProps {
13
+ hooksRef: Ref<HotEditorHooks>;
14
+ hotCustomEditorInstanceRef: RefObject<Handsontable.editors.BaseEditor>;
15
+ children: ReactNode;
16
+ }
17
+ /**
18
+ * Provider of the context that exposes Handsontable-native editor instance and passes hooks object
19
+ * for custom editor components.
20
+ *
21
+ * @param {Ref} hooksRef Reference for component-based editor overridden hooks object.
22
+ * @param {RefObject} hotCustomEditorInstanceRef Reference to Handsontable-native editor instance.
23
+ */
24
+ export declare const EditorContextProvider: FC<EditorContextProviderProps>;
25
+ /**
26
+ * Hook that allows encapsulating custom behaviours of component-based editor by customizing passed ref with overridden hooks object.
27
+ *
28
+ * @param {HotEditorHooks} overriddenHooks Overrides specific for the custom editor.
29
+ * @param {DependencyList} deps Overridden hooks object React dependency list.
30
+ * @returns {UseHotEditorImpl} Editor API methods
31
+ */
32
+ export declare function useHotEditor<T>(overriddenHooks?: HotEditorHooks, deps?: DependencyList): UseHotEditorImpl<T>;
33
+ export {};
@@ -0,0 +1,29 @@
1
+ import { ForwardRefExoticComponent, RefAttributes } from 'react';
2
+ import { HotTableProps, HotTableRef } from './types';
3
+ interface Version {
4
+ version?: string;
5
+ }
6
+ declare type HotTable = ForwardRefExoticComponent<HotTableProps & RefAttributes<HotTableRef>> & Version;
7
+ /**
8
+ * A Handsontable-ReactJS wrapper.
9
+ *
10
+ * To implement, use the `HotTable` tag with properties corresponding to Handsontable options.
11
+ * For example:
12
+ *
13
+ * ```js
14
+ * <HotTable id="hot" data={dataObject} contextMenu={true} colHeaders={true} width={600} height={300} stretchH="all" />
15
+ *
16
+ * // is analogous to
17
+ * let hot = new Handsontable(document.getElementById('hot'), {
18
+ * data: dataObject,
19
+ * contextMenu: true,
20
+ * colHeaders: true,
21
+ * width: 600
22
+ * height: 300
23
+ * });
24
+ *
25
+ * ```
26
+ */
27
+ declare const HotTable: HotTable;
28
+ export default HotTable;
29
+ export { HotTable };
@@ -0,0 +1,55 @@
1
+ import Handsontable from 'handsontable/base';
2
+ import { ComponentType, FC, PropsWithChildren } from 'react';
3
+ import { ScopeIdentifier, HotRendererProps } from './types';
4
+ import { RenderersPortalManagerRef } from './renderersPortalManager';
5
+ export interface HotTableContextImpl {
6
+ /**
7
+ * Map with column indexes (or a string = 'global') as keys, and booleans as values. Each key represents a component-based editor
8
+ * declared for the used column index, or a global one, if the key is the `global` string.
9
+ */
10
+ readonly componentRendererColumns: Map<ScopeIdentifier, boolean>;
11
+ /**
12
+ * Array of object containing the column settings.
13
+ */
14
+ readonly columnsSettings: Handsontable.ColumnSettings[];
15
+ /**
16
+ * Sets the column settings based on information received from HotColumn.
17
+ *
18
+ * @param {HotTableProps} columnSettings Column settings object.
19
+ * @param {Number} columnIndex Column index.
20
+ */
21
+ readonly emitColumnSettings: (columnSettings: Handsontable.ColumnSettings, columnIndex: number) => void;
22
+ /**
23
+ * Return a renderer wrapper function for the provided renderer component.
24
+ *
25
+ * @param {ComponentType<HotRendererProps>} Renderer React renderer component.
26
+ * @returns {Handsontable.renderers.BaseRenderer} The Handsontable rendering function.
27
+ */
28
+ readonly getRendererWrapper: (Renderer: ComponentType<HotRendererProps>) => typeof Handsontable.renderers.BaseRenderer;
29
+ /**
30
+ * Clears portals cache.
31
+ */
32
+ readonly clearPortalCache: () => void;
33
+ /**
34
+ * Clears rendered cells cache.
35
+ */
36
+ readonly clearRenderedCellCache: () => void;
37
+ /**
38
+ * Set the renderers portal manager dispatch function.
39
+ *
40
+ * @param {RenderersPortalManagerRef} pm The PortalManager dispatch function.
41
+ */
42
+ readonly setRenderersPortalManagerRef: (pm: RenderersPortalManagerRef) => void;
43
+ /**
44
+ * Puts cell portals into portal manager and purges portals cache.
45
+ */
46
+ readonly pushCellPortalsIntoPortalManager: () => void;
47
+ }
48
+ declare const HotTableContextProvider: FC<PropsWithChildren>;
49
+ /**
50
+ * Exposes the table context object to components
51
+ *
52
+ * @returns HotTableContext
53
+ */
54
+ declare function useHotTableContext(): HotTableContextImpl;
55
+ export { HotTableContextProvider, useHotTableContext };
@@ -0,0 +1,5 @@
1
+ import React from 'react';
2
+ import { HotTableProps, HotTableRef } from './types';
3
+ declare const HotTableInner: React.ForwardRefExoticComponent<HotTableProps & React.RefAttributes<HotTableRef>>;
4
+ export default HotTableInner;
5
+ export { HotTableInner };
@@ -0,0 +1,5 @@
1
+ export * from './hotColumn';
2
+ export * from './hotTable';
3
+ export { useHotEditor } from './hotEditor';
4
+ export * from './types';
5
+ export { default } from './hotTable';
@@ -0,0 +1,6 @@
1
+ import React, { Dispatch, ReactPortal } from 'react';
2
+ export declare type RenderersPortalManagerRef = Dispatch<ReactPortal[]>;
3
+ /**
4
+ * Component used to manage the renderer component portals.
5
+ */
6
+ export declare const RenderersPortalManager: React.ForwardRefExoticComponent<React.RefAttributes<React.Dispatch<React.ReactPortal[]>>>;
@@ -0,0 +1,18 @@
1
+ import Handsontable from 'handsontable/base';
2
+ import { HotTableProps } from './types';
3
+ export declare class SettingsMapper {
4
+ /**
5
+ * Parse component settings into Handsontable-compatible settings.
6
+ *
7
+ * @param {Object} properties Object containing properties from the HotTable object.
8
+ * @param {Object} additionalSettings Additional settings.
9
+ * @param {boolean} additionalSettings.isInit Flag determining whether the settings are being set during initialization.
10
+ * @param {string[]} additionalSettings.initOnlySettingKeys Array of keys that can be set only during initialization.
11
+ * @returns {Object} Handsontable-compatible settings object.
12
+ */
13
+ static getSettings(properties: HotTableProps, { prevProps, isInit, initOnlySettingKeys }?: {
14
+ prevProps?: HotTableProps;
15
+ isInit?: boolean;
16
+ initOnlySettingKeys?: Array<keyof Handsontable.GridSettings>;
17
+ }): Handsontable.GridSettings;
18
+ }
@@ -0,0 +1,78 @@
1
+ import Handsontable from 'handsontable/base';
2
+ import { ComponentType, CSSProperties, Dispatch, DispatchWithoutAction, ReactNode } from 'react';
3
+ /**
4
+ * Type of the identifier under which the cached components are stored.
5
+ */
6
+ export declare type ScopeIdentifier = 'global' | number;
7
+ /**
8
+ * Interface for the props of the component-based renderers.
9
+ */
10
+ export interface HotRendererProps {
11
+ instance: Handsontable.Core;
12
+ TD: HTMLTableCellElement;
13
+ row: number;
14
+ col: number;
15
+ prop: string | number;
16
+ value: any;
17
+ cellProperties: Handsontable.CellProperties;
18
+ }
19
+ /**
20
+ * Interface for component-based editor overridden hooks object.
21
+ */
22
+ export interface HotEditorHooks {
23
+ onOpen?: () => void;
24
+ onClose?: () => void;
25
+ onPrepare?: (row: number, column: number, prop: string | number, TD: HTMLTableCellElement, originalValue: any, cellProperties: Handsontable.CellProperties) => void;
26
+ onFocus?: () => void;
27
+ }
28
+ /**
29
+ * Interface for custom component-based editor API exposed by useHotEditor
30
+ */
31
+ export interface UseHotEditorImpl<T> {
32
+ value?: T;
33
+ setValue: Dispatch<T>;
34
+ isOpen: boolean;
35
+ finishEditing: DispatchWithoutAction;
36
+ row?: number;
37
+ col?: number;
38
+ }
39
+ /**
40
+ * Helper type to expose GridSettings/ColumnSettings props with native renderers/editors separately
41
+ * from component-based render prop.
42
+ */
43
+ declare type ReplaceRenderersEditors<T extends Pick<Handsontable.GridSettings, 'renderer' | 'editor'>> = Omit<T, 'renderer' | 'editor'> & {
44
+ hotRenderer?: T['renderer'];
45
+ renderer?: ComponentType<HotRendererProps>;
46
+ hotEditor?: T['editor'];
47
+ editor?: ComponentType;
48
+ };
49
+ /**
50
+ * Interface for the `prop` of the HotTable component - extending the default Handsontable settings with additional,
51
+ * component-related properties.
52
+ */
53
+ export interface HotTableProps extends ReplaceRenderersEditors<Handsontable.GridSettings> {
54
+ id?: string;
55
+ className?: string;
56
+ style?: CSSProperties;
57
+ children?: ReactNode;
58
+ }
59
+ /**
60
+ * Properties related to the HotColumn architecture.
61
+ */
62
+ export interface HotColumnProps extends ReplaceRenderersEditors<Handsontable.ColumnSettings> {
63
+ children?: ReactNode;
64
+ }
65
+ /**
66
+ * Type of interface exposed to parent components by HotTable instance via React ref
67
+ */
68
+ export interface HotTableRef {
69
+ /**
70
+ * Reference to the main Handsontable DOM element.
71
+ */
72
+ hotElementRef: HTMLElement;
73
+ /**
74
+ * Reference to the Handsontable instance.
75
+ */
76
+ hotInstance: Handsontable | null;
77
+ }
78
+ export {};