@economic/taco 2.10.0 → 2.10.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/Table3/hooks/features/useCurrentRow.d.ts +2 -2
- package/dist/esm/packages/taco/src/components/Table3/Table3.js +2 -2
- package/dist/esm/packages/taco/src/components/Table3/Table3.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/components/rows/Row.js +4 -13
- package/dist/esm/packages/taco/src/components/Table3/components/rows/Row.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/hooks/features/useCurrentRow.js +13 -1
- package/dist/esm/packages/taco/src/components/Table3/hooks/features/useCurrentRow.js.map +1 -1
- package/dist/taco.cjs.development.js +19 -16
- package/dist/taco.cjs.development.js.map +1 -1
- package/dist/taco.cjs.production.min.js +1 -1
- package/dist/taco.cjs.production.min.js.map +1 -1
- package/package.json +2 -2
@@ -1,10 +1,10 @@
|
|
1
1
|
import React from 'react';
|
2
|
-
import { TableStrategy } from '../../types';
|
2
|
+
import { Table3Ref, TableStrategy } from '../../types';
|
3
3
|
declare type CurrentRowHandlerCallback = TableStrategy['scrollToIndex'];
|
4
4
|
export declare function useCurrentRow(defaultCurrentRowIndex: number | undefined): {
|
5
5
|
currentRowIndex: number | undefined;
|
6
6
|
setCurrentRowIndex: React.Dispatch<React.SetStateAction<number | undefined>>;
|
7
7
|
handleFocus: (event: React.FocusEvent, length: number, scrollToIndex: CurrentRowHandlerCallback) => void;
|
8
|
-
handleKeyDown: (event: KeyboardEvent, length: number, scrollToIndex: CurrentRowHandlerCallback) => void;
|
8
|
+
handleKeyDown: (event: KeyboardEvent, length: number, scrollToIndex: CurrentRowHandlerCallback, isEditing: boolean, tableRef: React.RefObject<Table3Ref>) => void;
|
9
9
|
};
|
10
10
|
export {};
|
@@ -54,7 +54,7 @@ const Table = /*#__PURE__*/fixedForwardRef(function Table3(props, ref) {
|
|
54
54
|
return;
|
55
55
|
}
|
56
56
|
tableMeta.hoverState.handleKeyDown(event);
|
57
|
-
tableMeta.currentRow.handleKeyDown(event, table.getRowModel().rows.length, scrollToIndex);
|
57
|
+
tableMeta.currentRow.handleKeyDown(event, table.getRowModel().rows.length, scrollToIndex, tableMeta.editing.isEditing, internalRef);
|
58
58
|
tableMeta.rowClick.handleKeyDown(event, table);
|
59
59
|
tableMeta.rowSelection.handleKeyDown(event, table);
|
60
60
|
tableMeta.editing.handleKeyDown(event);
|
@@ -67,7 +67,7 @@ const Table = /*#__PURE__*/fixedForwardRef(function Table3(props, ref) {
|
|
67
67
|
// See https://github.com/e-conomic/taco/blob/dev/packages/taco/src/components/Table3/strategies/virtualised.tsx#L143
|
68
68
|
// scrollToIndex function changes when row count changes, so it is important to update handlers with new
|
69
69
|
// scrollToIndex function.
|
70
|
-
[scrollToIndex, internalRef.current]);
|
70
|
+
[scrollToIndex, tableMeta.editing.isEditing, internalRef.current]);
|
71
71
|
const handleBlur = event => {
|
72
72
|
tableMeta.editing.handleBlur(event);
|
73
73
|
};
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"Table3.js","sources":["../../../../../../../src/components/Table3/Table3.tsx"],"sourcesContent":["import React from 'react';\nimport cn from 'classnames';\nimport { flexRender, TableMeta } from '@tanstack/react-table';\nimport { FocusScope } from '@react-aria/focus';\nimport { useMergedRef } from '../../hooks/useMergedRef';\nimport { useCssGrid } from './hooks/useCssGrid';\nimport { useTable } from './hooks/useTable';\nimport { useTableRenderStrategy } from './strategies';\nimport { Table3ColumnProps, Table3Props, Table3Ref } from './types';\nimport { Toolbar } from './components/toolbar/Toolbar';\nimport { useColumnFreezingStyle } from './hooks/features/useColumnFreezing';\nimport { useTableRefInstanceSetup } from './hooks/useTableRefInstanceSetup';\nimport { Summary } from './components/columns/footer/Summary';\nimport { useCssVars } from './hooks/useCssVars';\nimport './style.css';\n\nfunction Column<TType = unknown>(_: Table3ColumnProps<TType>) {\n return null;\n}\n\ntype FixedForwardRef = <T, P = {}>(\n render: (props: P, ref: React.Ref<T>) => JSX.Element\n) => (props: P & React.RefAttributes<T>) => JSX.Element;\n\n// Cast the old forwardRef to the new one\nexport const fixedForwardRef = React.forwardRef as FixedForwardRef;\n\nconst Table = fixedForwardRef(function Table3<TType = unknown>(props: Table3Props<TType>, ref: React.Ref<Table3Ref>) {\n const { emptyState: EmptyState, toolbarLeft, toolbarRight } = props;\n const internalRef = useMergedRef<Table3Ref>(ref);\n\n const { table, length } = useTable<TType>(props);\n useTableRefInstanceSetup(table, internalRef);\n\n React.useEffect(() => {\n if (props.autoFocus) {\n internalRef.current?.focus();\n }\n }, []);\n\n const { renderBody, scrollToIndex } = useTableRenderStrategy<TType>(props, table, internalRef);\n const tableMeta = table.options.meta as TableMeta<TType>;\n const state = table.getState();\n\n const bodyRef = React.useRef<HTMLDivElement | null>(null);\n\n React.useEffect(\n () => {\n const handleKeyDown = (event: KeyboardEvent) => {\n const target = event.target as HTMLElement;\n const dialog = target.closest('[role=\"dialog\"]');\n const eventOriginatedFromCombobox = !!target.closest('[role=\"combobox\"]');\n\n // Don't trigger global shortcuts on the table if event originated from a combobox or if table is\n // outside the dialog\n if (eventOriginatedFromCombobox || (dialog && !dialog?.contains(internalRef.current))) {\n return;\n }\n\n tableMeta.hoverState.handleKeyDown(event);\n tableMeta.currentRow.handleKeyDown(event, table.getRowModel().rows.length, scrollToIndex);\n tableMeta.rowClick.handleKeyDown(event, table);\n tableMeta.rowSelection.handleKeyDown(event, table);\n tableMeta.editing.handleKeyDown(event);\n };\n\n document.addEventListener('keydown', handleKeyDown);\n\n return () => {\n document.removeEventListener('keydown', handleKeyDown);\n };\n },\n // See https://github.com/e-conomic/taco/blob/dev/packages/taco/src/components/Table3/strategies/virtualised.tsx#L143\n // scrollToIndex function changes when row count changes, so it is important to update handlers with new\n // scrollToIndex function.\n [scrollToIndex, internalRef.current]\n );\n\n const handleBlur = (event: React.FocusEvent) => {\n tableMeta.editing.handleBlur(event);\n };\n\n const handleFocus = (event: React.FocusEvent) => {\n tableMeta.currentRow.handleFocus(event, table.getRowModel().rows.length, scrollToIndex);\n };\n\n const handleScroll = async (event: React.MouseEvent<HTMLDivElement>) => {\n tableMeta.columnFreezing.handleScroll(event);\n };\n\n const className = cn(\n 'border-grey-300 relative grid h-full w-full flex-grow overflow-auto rounded border bg-white scroll-mt-[41px] focus-visible:outline-none',\n '[&[data-resizing=\"true\"]]:select-none',\n {\n 'text-xs': tableMeta.fontSize.size === 'small',\n 'text-sm': tableMeta.fontSize.size === 'medium',\n 'text-base': tableMeta.fontSize.size === 'large',\n }\n );\n\n // Print tables have \"_print\" as the postfix for the table id, so we can use the it to determine\n // if the table is a print table or not.\n const { style: cssGridStyle } = useCssGrid<TType>(table, tableMeta.isPrinting);\n const { style: cssVars } = useCssVars(tableMeta.rowHeight.height, tableMeta.fontSize.size);\n\n const style = {\n ...cssVars,\n ...cssGridStyle,\n // create a new stacking context so our internal z-indexes don't effect external components\n // https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Positioning/Understanding_z_index/The_stacking_context\n opacity: 0.999,\n };\n\n const columnFreezingStyle = useColumnFreezingStyle(props.id, table);\n const isServerLoadingAndNotReady = tableMeta.isUsingServer && props.length === undefined;\n\n return (\n <>\n {columnFreezingStyle ? <style data-taco=\"table3-column-freezing-styles\">{columnFreezingStyle}</style> : null}\n <Toolbar\n table={table}\n tableProps={props}\n total={length}\n left={toolbarLeft}\n right={toolbarRight}\n scrollToIndex={scrollToIndex}\n />\n <div\n className={className}\n id={props.id}\n data-font-size={tableMeta.fontSize.size}\n data-editing={tableMeta.editing.isEditing}\n data-horizontally-scrolled={tableMeta.columnFreezing.horizontallyScrolled}\n data-pause-hover={tableMeta?.hoverState.isPaused}\n data-resizing={!!state.columnSizingInfo.isResizingColumn}\n data-taco=\"table2\"\n onBlur={handleBlur}\n onFocus={handleFocus}\n onScroll={handleScroll}\n ref={internalRef}\n role=\"table\"\n style={style}\n tabIndex={-1}>\n {isServerLoadingAndNotReady ? null : (\n <div className=\"group/header contents\" data-taco=\"table2-header\" role=\"rowgroup\">\n {table.getHeaderGroups().map(headerGroup => (\n <div className=\"contents\" key={headerGroup.id} role=\"row\">\n {headerGroup.headers.map(header => (\n <React.Fragment key={header.id}>\n {flexRender(header.column.columnDef.header, { ...header.getContext(), scrollToIndex })}\n </React.Fragment>\n ))}\n </div>\n ))}\n </div>\n )}\n {table.getRowModel().rows.length ? (\n <>\n <FocusScope autoFocus={tableMeta.editing.isEditing}>\n <div className=\"group/body contents\" data-taco=\"table2-body\" role=\"rowgroup\" ref={bodyRef}>\n {renderBody()}\n </div>\n </FocusScope>\n {/* This div makes sure that there is always a free space between the rows and footer when\n table height exceeds the cumulative height of all rows. See useCSSGrid.ts */}\n {/* By vertically translating the div a pixel down, we hide the div border below footer so that\n the footer border doesn't appear an extra pixel thick */}\n <div className=\"border-grey-300 col-span-full translate-y-px border-t\" />\n {tableMeta.enableFooter ? (\n <div className=\"group/footer contents\" data-taco=\"table2-footer\" role=\"rowgroup\">\n {table.getFooterGroups().map(footerGroup => (\n <div className=\"contents\" key={footerGroup.id} role=\"row\">\n {footerGroup.headers.map(footer => (\n <React.Fragment key={footer.id}>\n {flexRender(footer.column.columnDef.footer, footer.getContext())}\n </React.Fragment>\n ))}\n </div>\n ))}\n {length ? (\n <Summary currentLength={table.getRowModel().rows.length} length={length} table={table} />\n ) : null}\n </div>\n ) : null}\n </>\n ) : (\n <div className=\"col-span-full min-h-[theme(spacing.8)]\">{EmptyState ? <EmptyState /> : null}</div>\n )}\n </div>\n </>\n );\n});\n\ntype Table3WithStatics = (<TType = unknown>(props: Table3Props<TType> & React.RefAttributes<Table3Ref>) => JSX.Element) & {\n Column: typeof Column;\n};\n\nexport const Table3 = fixedForwardRef(function Table3<TType = unknown>(props: Table3Props<TType>, ref: React.Ref<Table3Ref>) {\n const stringifiedChildren = String(props.children);\n // we force a remount (using key) when the child columns change because there are too many places to add children as an effect\n // this is cheaper from a complexity perspective, and probably performance wise as well\n const key = React.useMemo(() => String('tableKey_' + stringifiedChildren), [stringifiedChildren]);\n return <Table<TType> {...props} key={key} ref={ref} />;\n}) as Table3WithStatics;\nTable3.Column = Column;\n\n// hooks\nexport { useTable3DataLoader } from './hooks/useTableDataLoader';\n\n// types\nexport type {\n useTable3DataFetcher,\n useTable3DataOptions,\n useTable3DataFetcherValues as useTableDataValues,\n} from './hooks/useTableDataLoader';\n\nexport type {\n Table3Ref,\n Table3Props,\n Table3Preset,\n Table3Settings,\n Table3SettingsHandler,\n Table3RowHeight,\n Table3FilterComparator,\n Table3FilterHandler,\n Table3LoadPageHandler,\n Table3LoadAllHandler,\n Table3RowGotoHandler,\n Table3SortHandler,\n Table3Shortcuts,\n Table3ShortcutHandlerFn,\n Table3ShortcutHandlerObject,\n Table3FontSize,\n Table3SortDirection,\n Table3SortFn,\n Table3RowActionRenderer,\n Table3RowSelectionHandler,\n Table3RowExpansionRenderer,\n Table3RowDropHandler,\n Table3RowDragHandler,\n Table3RowClickHandler,\n Table3ColumnProps,\n Table3ColumnAlignment,\n Table3ColumnDataType,\n Table3ColumnHeaderMenu,\n Table3ColumnClassNameHandler,\n Table3ColumnFooterRenderer,\n Table3ColumnRenderer,\n Table3ColumnControlRenderer,\n Table3ColumnControlProps,\n} from './types';\n"],"names":["Column","_","fixedForwardRef","React","forwardRef","Table","Table3","props","ref","emptyState","EmptyState","toolbarLeft","toolbarRight","internalRef","useMergedRef","table","length","useTable","useTableRefInstanceSetup","useEffect","autoFocus","_internalRef$current","current","focus","renderBody","scrollToIndex","useTableRenderStrategy","tableMeta","options","meta","state","getState","bodyRef","useRef","handleKeyDown","event","target","dialog","closest","eventOriginatedFromCombobox","contains","hoverState","currentRow","getRowModel","rows","rowClick","rowSelection","editing","document","addEventListener","removeEventListener","handleBlur","handleFocus","handleScroll","columnFreezing","Promise","resolve","e","reject","className","cn","fontSize","size","style","cssGridStyle","useCssGrid","isPrinting","cssVars","useCssVars","rowHeight","height","opacity","columnFreezingStyle","useColumnFreezingStyle","id","isServerLoadingAndNotReady","isUsingServer","undefined","Toolbar","tableProps","total","left","right","isEditing","horizontallyScrolled","isPaused","columnSizingInfo","isResizingColumn","onBlur","onFocus","onScroll","role","tabIndex","getHeaderGroups","map","headerGroup","key","headers","header","Fragment","flexRender","column","columnDef","getContext","FocusScope","enableFooter","getFooterGroups","footerGroup","footer","Summary","currentLength","stringifiedChildren","String","children","useMemo"],"mappings":"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"}
|
1
|
+
{"version":3,"file":"Table3.js","sources":["../../../../../../../src/components/Table3/Table3.tsx"],"sourcesContent":["import React from 'react';\nimport cn from 'classnames';\nimport { flexRender, TableMeta } from '@tanstack/react-table';\nimport { FocusScope } from '@react-aria/focus';\nimport { useMergedRef } from '../../hooks/useMergedRef';\nimport { useCssGrid } from './hooks/useCssGrid';\nimport { useTable } from './hooks/useTable';\nimport { useTableRenderStrategy } from './strategies';\nimport { Table3ColumnProps, Table3Props, Table3Ref } from './types';\nimport { Toolbar } from './components/toolbar/Toolbar';\nimport { useColumnFreezingStyle } from './hooks/features/useColumnFreezing';\nimport { useTableRefInstanceSetup } from './hooks/useTableRefInstanceSetup';\nimport { Summary } from './components/columns/footer/Summary';\nimport { useCssVars } from './hooks/useCssVars';\nimport './style.css';\n\nfunction Column<TType = unknown>(_: Table3ColumnProps<TType>) {\n return null;\n}\n\ntype FixedForwardRef = <T, P = {}>(\n render: (props: P, ref: React.Ref<T>) => JSX.Element\n) => (props: P & React.RefAttributes<T>) => JSX.Element;\n\n// Cast the old forwardRef to the new one\nexport const fixedForwardRef = React.forwardRef as FixedForwardRef;\n\nconst Table = fixedForwardRef(function Table3<TType = unknown>(props: Table3Props<TType>, ref: React.Ref<Table3Ref>) {\n const { emptyState: EmptyState, toolbarLeft, toolbarRight } = props;\n const internalRef = useMergedRef<Table3Ref>(ref);\n\n const { table, length } = useTable<TType>(props);\n useTableRefInstanceSetup(table, internalRef);\n\n React.useEffect(() => {\n if (props.autoFocus) {\n internalRef.current?.focus();\n }\n }, []);\n\n const { renderBody, scrollToIndex } = useTableRenderStrategy<TType>(props, table, internalRef);\n const tableMeta = table.options.meta as TableMeta<TType>;\n const state = table.getState();\n\n const bodyRef = React.useRef<HTMLDivElement | null>(null);\n\n React.useEffect(\n () => {\n const handleKeyDown = (event: KeyboardEvent) => {\n const target = event.target as HTMLElement;\n const dialog = target.closest('[role=\"dialog\"]');\n const eventOriginatedFromCombobox = !!target.closest('[role=\"combobox\"]');\n\n // Don't trigger global shortcuts on the table if event originated from a combobox or if table is\n // outside the dialog\n if (eventOriginatedFromCombobox || (dialog && !dialog?.contains(internalRef.current))) {\n return;\n }\n\n tableMeta.hoverState.handleKeyDown(event);\n tableMeta.currentRow.handleKeyDown(\n event,\n table.getRowModel().rows.length,\n scrollToIndex,\n tableMeta.editing.isEditing,\n internalRef\n );\n tableMeta.rowClick.handleKeyDown(event, table);\n tableMeta.rowSelection.handleKeyDown(event, table);\n tableMeta.editing.handleKeyDown(event);\n };\n\n document.addEventListener('keydown', handleKeyDown);\n\n return () => {\n document.removeEventListener('keydown', handleKeyDown);\n };\n },\n // See https://github.com/e-conomic/taco/blob/dev/packages/taco/src/components/Table3/strategies/virtualised.tsx#L143\n // scrollToIndex function changes when row count changes, so it is important to update handlers with new\n // scrollToIndex function.\n [scrollToIndex, tableMeta.editing.isEditing, internalRef.current]\n );\n\n const handleBlur = (event: React.FocusEvent) => {\n tableMeta.editing.handleBlur(event);\n };\n\n const handleFocus = (event: React.FocusEvent) => {\n tableMeta.currentRow.handleFocus(event, table.getRowModel().rows.length, scrollToIndex);\n };\n\n const handleScroll = async (event: React.MouseEvent<HTMLDivElement>) => {\n tableMeta.columnFreezing.handleScroll(event);\n };\n\n const className = cn(\n 'border-grey-300 relative grid h-full w-full flex-grow overflow-auto rounded border bg-white scroll-mt-[41px] focus-visible:outline-none',\n '[&[data-resizing=\"true\"]]:select-none',\n {\n 'text-xs': tableMeta.fontSize.size === 'small',\n 'text-sm': tableMeta.fontSize.size === 'medium',\n 'text-base': tableMeta.fontSize.size === 'large',\n }\n );\n\n // Print tables have \"_print\" as the postfix for the table id, so we can use the it to determine\n // if the table is a print table or not.\n const { style: cssGridStyle } = useCssGrid<TType>(table, tableMeta.isPrinting);\n const { style: cssVars } = useCssVars(tableMeta.rowHeight.height, tableMeta.fontSize.size);\n\n const style = {\n ...cssVars,\n ...cssGridStyle,\n // create a new stacking context so our internal z-indexes don't effect external components\n // https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Positioning/Understanding_z_index/The_stacking_context\n opacity: 0.999,\n };\n\n const columnFreezingStyle = useColumnFreezingStyle(props.id, table);\n const isServerLoadingAndNotReady = tableMeta.isUsingServer && props.length === undefined;\n\n return (\n <>\n {columnFreezingStyle ? <style data-taco=\"table3-column-freezing-styles\">{columnFreezingStyle}</style> : null}\n <Toolbar\n table={table}\n tableProps={props}\n total={length}\n left={toolbarLeft}\n right={toolbarRight}\n scrollToIndex={scrollToIndex}\n />\n <div\n className={className}\n id={props.id}\n data-font-size={tableMeta.fontSize.size}\n data-editing={tableMeta.editing.isEditing}\n data-horizontally-scrolled={tableMeta.columnFreezing.horizontallyScrolled}\n data-pause-hover={tableMeta?.hoverState.isPaused}\n data-resizing={!!state.columnSizingInfo.isResizingColumn}\n data-taco=\"table2\"\n onBlur={handleBlur}\n onFocus={handleFocus}\n onScroll={handleScroll}\n ref={internalRef}\n role=\"table\"\n style={style}\n tabIndex={-1}>\n {isServerLoadingAndNotReady ? null : (\n <div className=\"group/header contents\" data-taco=\"table2-header\" role=\"rowgroup\">\n {table.getHeaderGroups().map(headerGroup => (\n <div className=\"contents\" key={headerGroup.id} role=\"row\">\n {headerGroup.headers.map(header => (\n <React.Fragment key={header.id}>\n {flexRender(header.column.columnDef.header, { ...header.getContext(), scrollToIndex })}\n </React.Fragment>\n ))}\n </div>\n ))}\n </div>\n )}\n {table.getRowModel().rows.length ? (\n <>\n <FocusScope autoFocus={tableMeta.editing.isEditing}>\n <div className=\"group/body contents\" data-taco=\"table2-body\" role=\"rowgroup\" ref={bodyRef}>\n {renderBody()}\n </div>\n </FocusScope>\n {/* This div makes sure that there is always a free space between the rows and footer when\n table height exceeds the cumulative height of all rows. See useCSSGrid.ts */}\n {/* By vertically translating the div a pixel down, we hide the div border below footer so that\n the footer border doesn't appear an extra pixel thick */}\n <div className=\"border-grey-300 col-span-full translate-y-px border-t\" />\n {tableMeta.enableFooter ? (\n <div className=\"group/footer contents\" data-taco=\"table2-footer\" role=\"rowgroup\">\n {table.getFooterGroups().map(footerGroup => (\n <div className=\"contents\" key={footerGroup.id} role=\"row\">\n {footerGroup.headers.map(footer => (\n <React.Fragment key={footer.id}>\n {flexRender(footer.column.columnDef.footer, footer.getContext())}\n </React.Fragment>\n ))}\n </div>\n ))}\n {length ? (\n <Summary currentLength={table.getRowModel().rows.length} length={length} table={table} />\n ) : null}\n </div>\n ) : null}\n </>\n ) : (\n <div className=\"col-span-full min-h-[theme(spacing.8)]\">{EmptyState ? <EmptyState /> : null}</div>\n )}\n </div>\n </>\n );\n});\n\ntype Table3WithStatics = (<TType = unknown>(props: Table3Props<TType> & React.RefAttributes<Table3Ref>) => JSX.Element) & {\n Column: typeof Column;\n};\n\nexport const Table3 = fixedForwardRef(function Table3<TType = unknown>(props: Table3Props<TType>, ref: React.Ref<Table3Ref>) {\n const stringifiedChildren = String(props.children);\n // we force a remount (using key) when the child columns change because there are too many places to add children as an effect\n // this is cheaper from a complexity perspective, and probably performance wise as well\n const key = React.useMemo(() => String('tableKey_' + stringifiedChildren), [stringifiedChildren]);\n return <Table<TType> {...props} key={key} ref={ref} />;\n}) as Table3WithStatics;\nTable3.Column = Column;\n\n// hooks\nexport { useTable3DataLoader } from './hooks/useTableDataLoader';\n\n// types\nexport type {\n useTable3DataFetcher,\n useTable3DataOptions,\n useTable3DataFetcherValues as useTableDataValues,\n} from './hooks/useTableDataLoader';\n\nexport type {\n Table3Ref,\n Table3Props,\n Table3Preset,\n Table3Settings,\n Table3SettingsHandler,\n Table3RowHeight,\n Table3FilterComparator,\n Table3FilterHandler,\n Table3LoadPageHandler,\n Table3LoadAllHandler,\n Table3RowGotoHandler,\n Table3SortHandler,\n Table3Shortcuts,\n Table3ShortcutHandlerFn,\n Table3ShortcutHandlerObject,\n Table3FontSize,\n Table3SortDirection,\n Table3SortFn,\n Table3RowActionRenderer,\n Table3RowSelectionHandler,\n Table3RowExpansionRenderer,\n Table3RowDropHandler,\n Table3RowDragHandler,\n Table3RowClickHandler,\n Table3ColumnProps,\n Table3ColumnAlignment,\n Table3ColumnDataType,\n Table3ColumnHeaderMenu,\n Table3ColumnClassNameHandler,\n Table3ColumnFooterRenderer,\n Table3ColumnRenderer,\n Table3ColumnControlRenderer,\n Table3ColumnControlProps,\n} from './types';\n"],"names":["Column","_","fixedForwardRef","React","forwardRef","Table","Table3","props","ref","emptyState","EmptyState","toolbarLeft","toolbarRight","internalRef","useMergedRef","table","length","useTable","useTableRefInstanceSetup","useEffect","autoFocus","_internalRef$current","current","focus","renderBody","scrollToIndex","useTableRenderStrategy","tableMeta","options","meta","state","getState","bodyRef","useRef","handleKeyDown","event","target","dialog","closest","eventOriginatedFromCombobox","contains","hoverState","currentRow","getRowModel","rows","editing","isEditing","rowClick","rowSelection","document","addEventListener","removeEventListener","handleBlur","handleFocus","handleScroll","columnFreezing","Promise","resolve","e","reject","className","cn","fontSize","size","style","cssGridStyle","useCssGrid","isPrinting","cssVars","useCssVars","rowHeight","height","opacity","columnFreezingStyle","useColumnFreezingStyle","id","isServerLoadingAndNotReady","isUsingServer","undefined","Toolbar","tableProps","total","left","right","horizontallyScrolled","isPaused","columnSizingInfo","isResizingColumn","onBlur","onFocus","onScroll","role","tabIndex","getHeaderGroups","map","headerGroup","key","headers","header","Fragment","flexRender","column","columnDef","getContext","FocusScope","enableFooter","getFooterGroups","footerGroup","footer","Summary","currentLength","stringifiedChildren","String","children","useMemo"],"mappings":"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"}
|
@@ -242,19 +242,10 @@ const MemoedRow = /*#__PURE__*/React__default.memo(function MemoedRow(props) {
|
|
242
242
|
const {
|
243
243
|
setIsHovered
|
244
244
|
} = useRowContext();
|
245
|
-
const isCurrentRow = Boolean(attributes['data-current']);
|
246
|
-
// we want tabbing to "start" again at the start of the row each time, only after pressing tab though
|
247
|
-
// so we focus the first cell so when tab is pressed it moves inside the row
|
248
|
-
React__default.useEffect(() => {
|
249
|
-
if (isCurrentRow) {
|
250
|
-
var _ref$current, _ref$current$querySel;
|
251
|
-
(_ref$current = ref.current) === null || _ref$current === void 0 ? void 0 : (_ref$current$querySel = _ref$current.querySelector('[role="cell"]:first-child')) === null || _ref$current$querySel === void 0 ? void 0 : _ref$current$querySel.focus();
|
252
|
-
}
|
253
|
-
}, [isCurrentRow]);
|
254
245
|
// we measure the first cell (since the row has display: contents) so that the virtualiser height is correct
|
255
246
|
React__default.useEffect(() => {
|
256
|
-
var _ref$
|
257
|
-
const firstCell = (_ref$
|
247
|
+
var _ref$current;
|
248
|
+
const firstCell = (_ref$current = ref.current) === null || _ref$current === void 0 ? void 0 : _ref$current.querySelector('[role=cell]:first-child');
|
258
249
|
if (firstCell) {
|
259
250
|
measureRef(firstCell);
|
260
251
|
}
|
@@ -269,9 +260,9 @@ const MemoedRow = /*#__PURE__*/React__default.memo(function MemoedRow(props) {
|
|
269
260
|
};
|
270
261
|
const handleClick = event => {
|
271
262
|
if (typeof onClick === 'function') {
|
272
|
-
var _ref$
|
263
|
+
var _ref$current2;
|
273
264
|
const clickedElement = event.target;
|
274
|
-
if (!((_ref$
|
265
|
+
if (!((_ref$current2 = ref.current) !== null && _ref$current2 !== void 0 && _ref$current2.contains(event.target)) || clickableElements.includes(clickedElement.tagName.toLowerCase()) || clickedElement.closest(clickableElements.map(tag => `[role=row] ${tag}`).join(','))) {
|
275
266
|
return;
|
276
267
|
}
|
277
268
|
onClick(row.original);
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"Row.js","sources":["../../../../../../../../../src/components/Table3/components/rows/Row.tsx"],"sourcesContent":["import React from 'react';\nimport { Row as RTRow, Table as RTable, TableMeta } from '@tanstack/react-table';\nimport cn from 'classnames';\nimport { RowContext, useRowContext } from './RowContext';\nimport { useDropTarget } from '../../../../utils/hooks/useDropTarget';\nimport { Table3RowClickHandler, Table3RowDropHandler } from '../../types';\nimport { useFocusManager } from '@react-aria/focus';\nimport { focusableSelector } from '../../util/editing';\n\nconst FOCUS_MANAGER_OPTIONS = { tabbable: true };\n\ntype RowProps<TType = unknown> = Omit<React.HTMLAttributes<HTMLDivElement>, 'onClick' | 'onDrop'> & {\n index: number;\n isLastRow: boolean;\n measureRef: (el: HTMLElement | null) => void;\n onClick?: Table3RowClickHandler<TType>;\n onDrop?: Table3RowDropHandler<TType>;\n row: RTRow<TType>;\n table: RTable<TType>;\n tableRef: React.RefObject<HTMLDivElement>;\n};\n\nexport function Row<TType = unknown>(props: RowProps<TType>) {\n const focusManager = useFocusManager();\n const tableMeta = props.table.options.meta as TableMeta<TType>;\n const isCurrentRow = tableMeta.currentRow.currentRowIndex === props.index;\n const isDraggingRow = tableMeta.rowDrag.dragging[props.row.id];\n const isFirstRow = props.index === 0;\n // we use non-css hovered state to determine whether to render actions or not, for performance\n const [isHovered, setIsHovered] = React.useState(false);\n\n // tab behaviour is consistent across normal mode and edit mode, handle it here\n const handleKeyDown = (event: React.KeyboardEvent) => {\n if (event.isDefaultPrevented() || event.isPropagationStopped()) {\n return;\n }\n\n if (event.key === 'Tab') {\n tableMeta.hoverState.pause(true);\n let focusedElement: Element;\n\n if (event.shiftKey) {\n // looping backwards\n focusedElement = focusManager.focusPrevious(FOCUS_MANAGER_OPTIONS);\n\n if (focusedElement) {\n // override default behaviour, since we're handling focus internally now\n event.preventDefault();\n } else {\n // there are no previous elements to focus, go up a row or go outside the table\n if (!isFirstRow) {\n event.preventDefault();\n tableMeta.currentRow.setCurrentRowIndex(props.index - 1);\n setTimeout(() => focusManager.focusLast(FOCUS_MANAGER_OPTIONS), 1);\n }\n }\n } else {\n // looping forwards\n focusedElement = focusManager.focusNext(FOCUS_MANAGER_OPTIONS);\n\n if (focusedElement) {\n // override default behaviour, since we're handling focus internally now\n event.preventDefault();\n } else {\n // there are no next elements to focus, go down a row or go outside the table\n if (!props.isLastRow) {\n event.preventDefault();\n tableMeta.currentRow.setCurrentRowIndex(props.index + 1);\n setTimeout(() => focusManager.focusFirst(FOCUS_MANAGER_OPTIONS), 1);\n }\n }\n }\n }\n };\n\n // rows are heavily memoized because performance in our table is critical\n // be careful and selective about props that you pass to the row\n const memoedProps = {\n // aria-grabbed is being deprecated but there is no current alternative api, we use it until there is\n 'aria-grabbed': isDraggingRow ? true : tableMeta.rowDrag.isEnabled ? false : undefined,\n 'data-current': isCurrentRow,\n 'data-selected': props.row.getIsSelected(),\n draggable: tableMeta.rowDrag.isEnabled,\n index: props.index,\n onClick: tableMeta.rowClick.handleClick,\n onDrop: tableMeta.rowDrop.isEnabled ? tableMeta.rowDrop.handleDrop : undefined,\n onKeyDown: handleKeyDown,\n };\n\n let output = <MemoedRow<TType> {...props} {...memoedProps} />;\n\n if (tableMeta.editing.isEditing && (isCurrentRow || (isHovered && !tableMeta.hoverState.isPaused))) {\n output = (\n <EditingRow\n {...props}\n {...memoedProps}\n isFirstRow={isFirstRow}\n setCurrentRowIndex={tableMeta.currentRow.setCurrentRowIndex}\n />\n );\n }\n\n // we store the row index in context because in a virtualised table the row index and the\n // react table row index do not match when, for example, sorting is applied\n const contextValue = React.useMemo(() => ({ isHovered, setIsHovered, rowIndex: props.index }), [isHovered, props.index]);\n\n return <RowContext.Provider value={contextValue}>{output}</RowContext.Provider>;\n}\n\n// turns out we might need some kind of \"state\" for the focused column, but it doesn't need to be react state that re-renders\nlet lastIndex;\n\nfunction getColumnIndex(focusedElement: Element) {\n if (focusedElement) {\n return focusedElement.closest('[role=cell]')?.getAttribute('data-column-index');\n }\n\n return null;\n}\n\n// This code is needed to avoid multiple rows being hovered at the same time (it happens since we use non-css hovering)\nlet previouslyHoveredIndex: number | undefined;\nconst unhoverPreviousRow = (tableRef: React.RefObject<HTMLDivElement>) => {\n if (previouslyHoveredIndex !== undefined) {\n const mouseoutEvent = new MouseEvent('mouseout', { view: window, bubbles: true, cancelable: true });\n const previouslyHovered = tableRef?.current?.querySelector(`[data-row-index=\"${previouslyHoveredIndex}\"]`);\n previouslyHovered?.dispatchEvent(mouseoutEvent);\n }\n};\n\nfunction EditingRow(props) {\n const { isFirstRow, isLastRow, onKeyDown, setCurrentRowIndex, virtualiser, ...attributes } = props;\n const focusManager = useFocusManager();\n const tableMeta = props.table.options.meta as TableMeta<unknown>;\n\n const handleClickCapture = (event: React.FocusEvent) => {\n lastIndex = getColumnIndex(event.target);\n };\n\n const handleArrowLeftKey = event => {\n let focusedElement: Element;\n\n if (event.key === 'ArrowLeft') {\n // We need to perform special behaviour when focus reaches the end of the row,\n // so we don't need default browser behaviour.\n event.stopPropagation();\n event.preventDefault();\n\n // \"CTRL + ArrowLeft\" or \"META + ArrowLeft\" should focus first focusable element of the row\n if (event.ctrlKey || event.metaKey) {\n event.target.blur();\n focusedElement = focusManager.focusFirst(FOCUS_MANAGER_OPTIONS);\n lastIndex = getColumnIndex(focusedElement);\n } else {\n // looping backwards\n focusedElement = focusManager.focusPrevious(FOCUS_MANAGER_OPTIONS);\n\n if (focusedElement) {\n lastIndex = getColumnIndex(focusedElement);\n } else {\n // there are no previous elements to focus, go up a row (if there are rows above)\n if (!isFirstRow) {\n event.preventDefault();\n tableMeta.hoverState.pause(true);\n tableMeta.currentRow.setCurrentRowIndex(props.index - 1);\n setTimeout(() => {\n focusManager.focusLast(FOCUS_MANAGER_OPTIONS);\n // Need to update lastIndex when row got changed and last element got selected.\n lastIndex = getColumnIndex(focusedElement);\n }, 1);\n }\n }\n }\n }\n };\n\n const handleArrowRightKey = event => {\n let focusedElement: Element;\n\n if (event.key === 'ArrowRight') {\n // We need to perform special behaviour when focus reaches the end of the row,\n // so we don't need default browser behaviour.\n event.stopPropagation();\n event.preventDefault();\n\n // \"CTRL + ArrowRight\" or \"META + ArrowRight\" should focus last focusable element of the row\n if (event.ctrlKey || event.metaKey) {\n event.target.blur();\n focusedElement = focusManager.focusLast(FOCUS_MANAGER_OPTIONS);\n lastIndex = getColumnIndex(focusedElement);\n } else {\n // looping forwards\n focusedElement = focusManager.focusNext(FOCUS_MANAGER_OPTIONS);\n\n if (focusedElement) {\n lastIndex = getColumnIndex(focusedElement);\n } else {\n // there are no next elements to focus, go down a row or go outside the table\n if (!props.isLastRow) {\n event.preventDefault();\n tableMeta.hoverState.pause(true);\n tableMeta.currentRow.setCurrentRowIndex(props.index + 1);\n setTimeout(() => {\n focusManager.focusFirst(FOCUS_MANAGER_OPTIONS);\n // Need to update lastIndex when row got changed and last element got selected.\n lastIndex = getColumnIndex(focusedElement);\n }, 1);\n }\n }\n }\n }\n };\n\n React.useEffect(() => {\n // if some row stuck in hovered state, we heed to unhover it when hover state is paused\n if (tableMeta.hoverState.isPaused) {\n unhoverPreviousRow(props.tableRef);\n }\n }, [tableMeta.hoverState.isPaused]);\n\n const handleKeyDown = (event: React.KeyboardEvent) => {\n if (event.isDefaultPrevented() || event.isPropagationStopped() || tableMeta.editing.detailModeEditing) {\n return;\n }\n\n onKeyDown(event); // handles tab behaviour\n handleArrowLeftKey(event);\n handleArrowRightKey(event);\n };\n\n // this ensures we focus either on a field or on the same column when keyboard navigating up/down\n React.useEffect(() => {\n if (tableMeta.currentRow.currentRowIndex === props.index) {\n if (lastIndex !== undefined) {\n const lastIndexCell = props.tableRef.current?.querySelector(\n `[role=\"row\"][data-current=\"true\"] [data-column-index=\"${lastIndex}\"]`\n );\n lastIndexCell?.querySelector(focusableSelector)?.focus();\n } else {\n focusManager.focusFirst(FOCUS_MANAGER_OPTIONS);\n }\n }\n // Need to subscribe to current row index and check is it a current row,\n // for a situation where hovered row is the next row after current row...\n // In this case row will not be re-rendered if user switch to next row, because hovered row also renders EditingRow.\n }, [tableMeta.currentRow.currentRowIndex]);\n\n return <MemoedRow {...attributes} onClickCapture={handleClickCapture} onKeyDown={handleKeyDown} />;\n}\n\n// Memoization\n\nexport type MemoedRowProps<TType = unknown> = RowProps<TType> & {\n 'aria-grabbed'?: boolean;\n 'data-current': boolean;\n 'data-selected': boolean;\n draggable: boolean;\n index: number;\n};\n\nconst clickableElements = ['input', 'button', 'a', 'select', 'option', 'label', 'textarea'];\n\nconst MemoedRow = React.memo(function MemoedRow<TType = unknown>(props: MemoedRowProps<TType>) {\n const { index, isLastRow: _1, measureRef, onClick, onClickCapture, onDrop, row, table, tableRef, ...attributes } = props;\n const ref = React.useRef<HTMLDivElement | null>(null);\n const tableMeta = table.options.meta as TableMeta<TType>;\n const { setIsHovered } = useRowContext();\n const isCurrentRow = Boolean(attributes['data-current']);\n\n // we want tabbing to \"start\" again at the start of the row each time, only after pressing tab though\n // so we focus the first cell so when tab is pressed it moves inside the row\n React.useEffect(() => {\n if (isCurrentRow) {\n (ref.current?.querySelector('[role=\"cell\"]:first-child') as HTMLElement)?.focus();\n }\n }, [isCurrentRow]);\n\n // we measure the first cell (since the row has display: contents) so that the virtualiser height is correct\n React.useEffect(() => {\n const firstCell = ref.current?.querySelector('[role=cell]:first-child');\n\n if (firstCell) {\n measureRef(firstCell as HTMLElement);\n }\n }, [ref.current]);\n\n // we use capture because it also picks up clicks on e.g. select checkboxes\n const handleClickCapture = (event: React.MouseEvent<HTMLDivElement, MouseEvent>) => {\n if (typeof onClickCapture === 'function') {\n onClickCapture(event);\n }\n\n // do this in the next frame, otherwise it remounts the row and prevents row actions on hover from being clickable\n requestAnimationFrame(() => tableMeta.currentRow.setCurrentRowIndex(index));\n };\n\n const handleClick = (event: React.MouseEvent<HTMLDivElement>) => {\n if (typeof onClick === 'function') {\n const clickedElement = event.target as HTMLElement;\n\n if (\n !ref.current?.contains(event.target as HTMLElement) ||\n clickableElements.includes(clickedElement.tagName.toLowerCase()) ||\n clickedElement.closest(clickableElements.map(tag => `[role=row] ${tag}`).join(','))\n ) {\n return;\n }\n\n onClick(row.original);\n }\n };\n\n const handleMouseEnter = () => {\n // When user moving mouse to fast, then some of the rows are getting stuck in hover state,\n // because mouseleave event never got triggered, to avoid this to happen we're saving the index of last hovered row,\n // so that we can unhover it when new row got hovered, and saving it in a variable outside of react to save in performance,\n // since it would be very performance heavy to use state which is bound to mouse events.\n if (previouslyHoveredIndex !== undefined) {\n if (previouslyHoveredIndex !== index) {\n unhoverPreviousRow(tableRef);\n previouslyHoveredIndex = index;\n }\n } else {\n previouslyHoveredIndex = index;\n }\n setIsHovered(true);\n };\n const handleMouseLeave = () => {\n if (previouslyHoveredIndex === index) {\n previouslyHoveredIndex = undefined;\n }\n setIsHovered(false);\n };\n\n const [isDraggedOver, dropTargetProps] = useDropTarget(event => onDrop?.(event, row.original));\n\n const className = cn(\n 'group/row contents',\n // resizing column requires dragging, which means the mouse might (on rare occasions) move over rows and trigger hover state\n // that in turn triggers rendering of e.g. row actions, which could cause janky ui - so don't allow mouse interaction when resizing\n '[[role=\"table\"][data-resizing=\"true\"]_&]:pointer-events-none',\n {\n 'hover:cursor-pointer': typeof onClick === 'function',\n }\n );\n\n return (\n <div\n {...attributes}\n {...(onDrop ? dropTargetProps : undefined)}\n className={className}\n data-row-index={index}\n data-dragged-over={isDraggedOver}\n onClick={handleClick}\n onClickCapture={handleClickCapture}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n role=\"row\"\n ref={ref}\n />\n );\n}) as <TType = unknown>(props: MemoedRowProps<TType>) => JSX.Element;\n"],"names":["FOCUS_MANAGER_OPTIONS","tabbable","Row","props","focusManager","useFocusManager","tableMeta","table","options","meta","isCurrentRow","currentRow","currentRowIndex","index","isDraggingRow","rowDrag","dragging","row","id","isFirstRow","isHovered","setIsHovered","React","useState","handleKeyDown","event","isDefaultPrevented","isPropagationStopped","key","hoverState","pause","focusedElement","shiftKey","focusPrevious","preventDefault","setCurrentRowIndex","setTimeout","focusLast","focusNext","isLastRow","focusFirst","memoedProps","isEnabled","undefined","getIsSelected","draggable","onClick","rowClick","handleClick","onDrop","rowDrop","handleDrop","onKeyDown","output","MemoedRow","editing","isEditing","isPaused","EditingRow","contextValue","useMemo","rowIndex","RowContext","Provider","value","lastIndex","getColumnIndex","_focusedElement$close","closest","getAttribute","previouslyHoveredIndex","unhoverPreviousRow","tableRef","_tableRef$current","mouseoutEvent","MouseEvent","view","window","bubbles","cancelable","previouslyHovered","current","querySelector","dispatchEvent","virtualiser","attributes","handleClickCapture","target","handleArrowLeftKey","stopPropagation","ctrlKey","metaKey","blur","handleArrowRightKey","useEffect","detailModeEditing","_props$tableRef$curre","_lastIndexCell$queryS","lastIndexCell","focusableSelector","focus","onClickCapture","clickableElements","memo","_1","measureRef","ref","useRef","useRowContext","Boolean","_ref$current","_ref$current$querySel","firstCell","_ref$current2","requestAnimationFrame","_ref$current3","clickedElement","contains","includes","tagName","toLowerCase","map","tag","join","original","handleMouseEnter","handleMouseLeave","isDraggedOver","dropTargetProps","useDropTarget","className","cn","onMouseEnter","onMouseLeave","role"],"mappings":"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"}
|
1
|
+
{"version":3,"file":"Row.js","sources":["../../../../../../../../../src/components/Table3/components/rows/Row.tsx"],"sourcesContent":["import React from 'react';\nimport { Row as RTRow, Table as RTable, TableMeta } from '@tanstack/react-table';\nimport cn from 'classnames';\nimport { RowContext, useRowContext } from './RowContext';\nimport { useDropTarget } from '../../../../utils/hooks/useDropTarget';\nimport { Table3RowClickHandler, Table3RowDropHandler } from '../../types';\nimport { useFocusManager } from '@react-aria/focus';\nimport { focusableSelector } from '../../util/editing';\n\nconst FOCUS_MANAGER_OPTIONS = { tabbable: true };\n\ntype RowProps<TType = unknown> = Omit<React.HTMLAttributes<HTMLDivElement>, 'onClick' | 'onDrop'> & {\n index: number;\n isLastRow: boolean;\n measureRef: (el: HTMLElement | null) => void;\n onClick?: Table3RowClickHandler<TType>;\n onDrop?: Table3RowDropHandler<TType>;\n row: RTRow<TType>;\n table: RTable<TType>;\n tableRef: React.RefObject<HTMLDivElement>;\n};\n\nexport function Row<TType = unknown>(props: RowProps<TType>) {\n const focusManager = useFocusManager();\n const tableMeta = props.table.options.meta as TableMeta<TType>;\n const isCurrentRow = tableMeta.currentRow.currentRowIndex === props.index;\n const isDraggingRow = tableMeta.rowDrag.dragging[props.row.id];\n const isFirstRow = props.index === 0;\n // we use non-css hovered state to determine whether to render actions or not, for performance\n const [isHovered, setIsHovered] = React.useState(false);\n\n // tab behaviour is consistent across normal mode and edit mode, handle it here\n const handleKeyDown = (event: React.KeyboardEvent) => {\n if (event.isDefaultPrevented() || event.isPropagationStopped()) {\n return;\n }\n\n if (event.key === 'Tab') {\n tableMeta.hoverState.pause(true);\n let focusedElement: Element;\n\n if (event.shiftKey) {\n // looping backwards\n focusedElement = focusManager.focusPrevious(FOCUS_MANAGER_OPTIONS);\n\n if (focusedElement) {\n // override default behaviour, since we're handling focus internally now\n event.preventDefault();\n } else {\n // there are no previous elements to focus, go up a row or go outside the table\n if (!isFirstRow) {\n event.preventDefault();\n tableMeta.currentRow.setCurrentRowIndex(props.index - 1);\n setTimeout(() => focusManager.focusLast(FOCUS_MANAGER_OPTIONS), 1);\n }\n }\n } else {\n // looping forwards\n focusedElement = focusManager.focusNext(FOCUS_MANAGER_OPTIONS);\n\n if (focusedElement) {\n // override default behaviour, since we're handling focus internally now\n event.preventDefault();\n } else {\n // there are no next elements to focus, go down a row or go outside the table\n if (!props.isLastRow) {\n event.preventDefault();\n tableMeta.currentRow.setCurrentRowIndex(props.index + 1);\n setTimeout(() => focusManager.focusFirst(FOCUS_MANAGER_OPTIONS), 1);\n }\n }\n }\n }\n };\n\n // rows are heavily memoized because performance in our table is critical\n // be careful and selective about props that you pass to the row\n const memoedProps = {\n // aria-grabbed is being deprecated but there is no current alternative api, we use it until there is\n 'aria-grabbed': isDraggingRow ? true : tableMeta.rowDrag.isEnabled ? false : undefined,\n 'data-current': isCurrentRow,\n 'data-selected': props.row.getIsSelected(),\n draggable: tableMeta.rowDrag.isEnabled,\n index: props.index,\n onClick: tableMeta.rowClick.handleClick,\n onDrop: tableMeta.rowDrop.isEnabled ? tableMeta.rowDrop.handleDrop : undefined,\n onKeyDown: handleKeyDown,\n };\n\n let output = <MemoedRow<TType> {...props} {...memoedProps} />;\n\n if (tableMeta.editing.isEditing && (isCurrentRow || (isHovered && !tableMeta.hoverState.isPaused))) {\n output = (\n <EditingRow\n {...props}\n {...memoedProps}\n isFirstRow={isFirstRow}\n setCurrentRowIndex={tableMeta.currentRow.setCurrentRowIndex}\n />\n );\n }\n\n // we store the row index in context because in a virtualised table the row index and the\n // react table row index do not match when, for example, sorting is applied\n const contextValue = React.useMemo(() => ({ isHovered, setIsHovered, rowIndex: props.index }), [isHovered, props.index]);\n\n return <RowContext.Provider value={contextValue}>{output}</RowContext.Provider>;\n}\n\n// turns out we might need some kind of \"state\" for the focused column, but it doesn't need to be react state that re-renders\nlet lastIndex;\n\nfunction getColumnIndex(focusedElement: Element) {\n if (focusedElement) {\n return focusedElement.closest('[role=cell]')?.getAttribute('data-column-index');\n }\n\n return null;\n}\n\n// This code is needed to avoid multiple rows being hovered at the same time (it happens since we use non-css hovering)\nlet previouslyHoveredIndex: number | undefined;\nconst unhoverPreviousRow = (tableRef: React.RefObject<HTMLDivElement>) => {\n if (previouslyHoveredIndex !== undefined) {\n const mouseoutEvent = new MouseEvent('mouseout', { view: window, bubbles: true, cancelable: true });\n const previouslyHovered = tableRef?.current?.querySelector(`[data-row-index=\"${previouslyHoveredIndex}\"]`);\n previouslyHovered?.dispatchEvent(mouseoutEvent);\n }\n};\n\nfunction EditingRow(props) {\n const { isFirstRow, isLastRow, onKeyDown, setCurrentRowIndex, virtualiser, ...attributes } = props;\n const focusManager = useFocusManager();\n const tableMeta = props.table.options.meta as TableMeta<unknown>;\n\n const handleClickCapture = (event: React.FocusEvent) => {\n lastIndex = getColumnIndex(event.target);\n };\n\n const handleArrowLeftKey = event => {\n let focusedElement: Element;\n\n if (event.key === 'ArrowLeft') {\n // We need to perform special behaviour when focus reaches the end of the row,\n // so we don't need default browser behaviour.\n event.stopPropagation();\n event.preventDefault();\n\n // \"CTRL + ArrowLeft\" or \"META + ArrowLeft\" should focus first focusable element of the row\n if (event.ctrlKey || event.metaKey) {\n event.target.blur();\n focusedElement = focusManager.focusFirst(FOCUS_MANAGER_OPTIONS);\n lastIndex = getColumnIndex(focusedElement);\n } else {\n // looping backwards\n focusedElement = focusManager.focusPrevious(FOCUS_MANAGER_OPTIONS);\n\n if (focusedElement) {\n lastIndex = getColumnIndex(focusedElement);\n } else {\n // there are no previous elements to focus, go up a row (if there are rows above)\n if (!isFirstRow) {\n event.preventDefault();\n tableMeta.hoverState.pause(true);\n tableMeta.currentRow.setCurrentRowIndex(props.index - 1);\n setTimeout(() => {\n focusManager.focusLast(FOCUS_MANAGER_OPTIONS);\n // Need to update lastIndex when row got changed and last element got selected.\n lastIndex = getColumnIndex(focusedElement);\n }, 1);\n }\n }\n }\n }\n };\n\n const handleArrowRightKey = event => {\n let focusedElement: Element;\n\n if (event.key === 'ArrowRight') {\n // We need to perform special behaviour when focus reaches the end of the row,\n // so we don't need default browser behaviour.\n event.stopPropagation();\n event.preventDefault();\n\n // \"CTRL + ArrowRight\" or \"META + ArrowRight\" should focus last focusable element of the row\n if (event.ctrlKey || event.metaKey) {\n event.target.blur();\n focusedElement = focusManager.focusLast(FOCUS_MANAGER_OPTIONS);\n lastIndex = getColumnIndex(focusedElement);\n } else {\n // looping forwards\n focusedElement = focusManager.focusNext(FOCUS_MANAGER_OPTIONS);\n\n if (focusedElement) {\n lastIndex = getColumnIndex(focusedElement);\n } else {\n // there are no next elements to focus, go down a row or go outside the table\n if (!props.isLastRow) {\n event.preventDefault();\n tableMeta.hoverState.pause(true);\n tableMeta.currentRow.setCurrentRowIndex(props.index + 1);\n setTimeout(() => {\n focusManager.focusFirst(FOCUS_MANAGER_OPTIONS);\n // Need to update lastIndex when row got changed and last element got selected.\n lastIndex = getColumnIndex(focusedElement);\n }, 1);\n }\n }\n }\n }\n };\n\n React.useEffect(() => {\n // if some row stuck in hovered state, we heed to unhover it when hover state is paused\n if (tableMeta.hoverState.isPaused) {\n unhoverPreviousRow(props.tableRef);\n }\n }, [tableMeta.hoverState.isPaused]);\n\n const handleKeyDown = (event: React.KeyboardEvent) => {\n if (event.isDefaultPrevented() || event.isPropagationStopped() || tableMeta.editing.detailModeEditing) {\n return;\n }\n\n onKeyDown(event); // handles tab behaviour\n handleArrowLeftKey(event);\n handleArrowRightKey(event);\n };\n\n // this ensures we focus either on a field or on the same column when keyboard navigating up/down\n React.useEffect(() => {\n if (tableMeta.currentRow.currentRowIndex === props.index) {\n if (lastIndex !== undefined) {\n const lastIndexCell = props.tableRef.current?.querySelector(\n `[role=\"row\"][data-current=\"true\"] [data-column-index=\"${lastIndex}\"]`\n );\n lastIndexCell?.querySelector(focusableSelector)?.focus();\n } else {\n focusManager.focusFirst(FOCUS_MANAGER_OPTIONS);\n }\n }\n // Need to subscribe to current row index and check is it a current row,\n // for a situation where hovered row is the next row after current row...\n // In this case row will not be re-rendered if user switch to next row, because hovered row also renders EditingRow.\n }, [tableMeta.currentRow.currentRowIndex]);\n\n return <MemoedRow {...attributes} onClickCapture={handleClickCapture} onKeyDown={handleKeyDown} />;\n}\n\n// Memoization\n\nexport type MemoedRowProps<TType = unknown> = RowProps<TType> & {\n 'aria-grabbed'?: boolean;\n 'data-current': boolean;\n 'data-selected': boolean;\n draggable: boolean;\n index: number;\n};\n\nconst clickableElements = ['input', 'button', 'a', 'select', 'option', 'label', 'textarea'];\n\nconst MemoedRow = React.memo(function MemoedRow<TType = unknown>(props: MemoedRowProps<TType>) {\n const { index, isLastRow: _1, measureRef, onClick, onClickCapture, onDrop, row, table, tableRef, ...attributes } = props;\n const ref = React.useRef<HTMLDivElement | null>(null);\n const tableMeta = table.options.meta as TableMeta<TType>;\n const { setIsHovered } = useRowContext();\n\n // we measure the first cell (since the row has display: contents) so that the virtualiser height is correct\n React.useEffect(() => {\n const firstCell = ref.current?.querySelector('[role=cell]:first-child');\n\n if (firstCell) {\n measureRef(firstCell as HTMLElement);\n }\n }, [ref.current]);\n\n // we use capture because it also picks up clicks on e.g. select checkboxes\n const handleClickCapture = (event: React.MouseEvent<HTMLDivElement, MouseEvent>) => {\n if (typeof onClickCapture === 'function') {\n onClickCapture(event);\n }\n\n // do this in the next frame, otherwise it remounts the row and prevents row actions on hover from being clickable\n requestAnimationFrame(() => tableMeta.currentRow.setCurrentRowIndex(index));\n };\n\n const handleClick = (event: React.MouseEvent<HTMLDivElement>) => {\n if (typeof onClick === 'function') {\n const clickedElement = event.target as HTMLElement;\n\n if (\n !ref.current?.contains(event.target as HTMLElement) ||\n clickableElements.includes(clickedElement.tagName.toLowerCase()) ||\n clickedElement.closest(clickableElements.map(tag => `[role=row] ${tag}`).join(','))\n ) {\n return;\n }\n\n onClick(row.original);\n }\n };\n\n const handleMouseEnter = () => {\n // When user moving mouse to fast, then some of the rows are getting stuck in hover state,\n // because mouseleave event never got triggered, to avoid this to happen we're saving the index of last hovered row,\n // so that we can unhover it when new row got hovered, and saving it in a variable outside of react to save in performance,\n // since it would be very performance heavy to use state which is bound to mouse events.\n if (previouslyHoveredIndex !== undefined) {\n if (previouslyHoveredIndex !== index) {\n unhoverPreviousRow(tableRef);\n previouslyHoveredIndex = index;\n }\n } else {\n previouslyHoveredIndex = index;\n }\n setIsHovered(true);\n };\n const handleMouseLeave = () => {\n if (previouslyHoveredIndex === index) {\n previouslyHoveredIndex = undefined;\n }\n setIsHovered(false);\n };\n\n const [isDraggedOver, dropTargetProps] = useDropTarget(event => onDrop?.(event, row.original));\n\n const className = cn(\n 'group/row contents',\n // resizing column requires dragging, which means the mouse might (on rare occasions) move over rows and trigger hover state\n // that in turn triggers rendering of e.g. row actions, which could cause janky ui - so don't allow mouse interaction when resizing\n '[[role=\"table\"][data-resizing=\"true\"]_&]:pointer-events-none',\n {\n 'hover:cursor-pointer': typeof onClick === 'function',\n }\n );\n\n return (\n <div\n {...attributes}\n {...(onDrop ? dropTargetProps : undefined)}\n className={className}\n data-row-index={index}\n data-dragged-over={isDraggedOver}\n onClick={handleClick}\n onClickCapture={handleClickCapture}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n role=\"row\"\n ref={ref}\n />\n );\n}) as <TType = unknown>(props: MemoedRowProps<TType>) => JSX.Element;\n"],"names":["FOCUS_MANAGER_OPTIONS","tabbable","Row","props","focusManager","useFocusManager","tableMeta","table","options","meta","isCurrentRow","currentRow","currentRowIndex","index","isDraggingRow","rowDrag","dragging","row","id","isFirstRow","isHovered","setIsHovered","React","useState","handleKeyDown","event","isDefaultPrevented","isPropagationStopped","key","hoverState","pause","focusedElement","shiftKey","focusPrevious","preventDefault","setCurrentRowIndex","setTimeout","focusLast","focusNext","isLastRow","focusFirst","memoedProps","isEnabled","undefined","getIsSelected","draggable","onClick","rowClick","handleClick","onDrop","rowDrop","handleDrop","onKeyDown","output","MemoedRow","editing","isEditing","isPaused","EditingRow","contextValue","useMemo","rowIndex","RowContext","Provider","value","lastIndex","getColumnIndex","_focusedElement$close","closest","getAttribute","previouslyHoveredIndex","unhoverPreviousRow","tableRef","_tableRef$current","mouseoutEvent","MouseEvent","view","window","bubbles","cancelable","previouslyHovered","current","querySelector","dispatchEvent","virtualiser","attributes","handleClickCapture","target","handleArrowLeftKey","stopPropagation","ctrlKey","metaKey","blur","handleArrowRightKey","useEffect","detailModeEditing","_props$tableRef$curre","_lastIndexCell$queryS","lastIndexCell","focusableSelector","focus","onClickCapture","clickableElements","memo","_1","measureRef","ref","useRef","useRowContext","firstCell","_ref$current","requestAnimationFrame","_ref$current2","clickedElement","contains","includes","tagName","toLowerCase","map","tag","join","original","handleMouseEnter","handleMouseLeave","isDraggedOver","dropTargetProps","useDropTarget","className","cn","onMouseEnter","onMouseLeave","role"],"mappings":";;;;;;;AASA,MAAMA,qBAAqB,GAAG;EAAEC,QAAQ,EAAE;CAAM;SAahCC,GAAGA,CAAkBC,KAAsB;EACvD,MAAMC,YAAY,GAAGC,eAAe,EAAE;EACtC,MAAMC,SAAS,GAAGH,KAAK,CAACI,KAAK,CAACC,OAAO,CAACC,IAAwB;EAC9D,MAAMC,YAAY,GAAGJ,SAAS,CAACK,UAAU,CAACC,eAAe,KAAKT,KAAK,CAACU,KAAK;EACzE,MAAMC,aAAa,GAAGR,SAAS,CAACS,OAAO,CAACC,QAAQ,CAACb,KAAK,CAACc,GAAG,CAACC,EAAE,CAAC;EAC9D,MAAMC,UAAU,GAAGhB,KAAK,CAACU,KAAK,KAAK,CAAC;;EAEpC,MAAM,CAACO,SAAS,EAAEC,YAAY,CAAC,GAAGC,cAAK,CAACC,QAAQ,CAAC,KAAK,CAAC;;EAGvD,MAAMC,aAAa,GAAIC,KAA0B;IAC7C,IAAIA,KAAK,CAACC,kBAAkB,EAAE,IAAID,KAAK,CAACE,oBAAoB,EAAE,EAAE;MAC5D;;IAGJ,IAAIF,KAAK,CAACG,GAAG,KAAK,KAAK,EAAE;MACrBtB,SAAS,CAACuB,UAAU,CAACC,KAAK,CAAC,IAAI,CAAC;MAChC,IAAIC,cAAuB;MAE3B,IAAIN,KAAK,CAACO,QAAQ,EAAE;;QAEhBD,cAAc,GAAG3B,YAAY,CAAC6B,aAAa,CAACjC,qBAAqB,CAAC;QAElE,IAAI+B,cAAc,EAAE;;UAEhBN,KAAK,CAACS,cAAc,EAAE;SACzB,MAAM;;UAEH,IAAI,CAACf,UAAU,EAAE;YACbM,KAAK,CAACS,cAAc,EAAE;YACtB5B,SAAS,CAACK,UAAU,CAACwB,kBAAkB,CAAChC,KAAK,CAACU,KAAK,GAAG,CAAC,CAAC;YACxDuB,UAAU,CAAC,MAAMhC,YAAY,CAACiC,SAAS,CAACrC,qBAAqB,CAAC,EAAE,CAAC,CAAC;;;OAG7E,MAAM;;QAEH+B,cAAc,GAAG3B,YAAY,CAACkC,SAAS,CAACtC,qBAAqB,CAAC;QAE9D,IAAI+B,cAAc,EAAE;;UAEhBN,KAAK,CAACS,cAAc,EAAE;SACzB,MAAM;;UAEH,IAAI,CAAC/B,KAAK,CAACoC,SAAS,EAAE;YAClBd,KAAK,CAACS,cAAc,EAAE;YACtB5B,SAAS,CAACK,UAAU,CAACwB,kBAAkB,CAAChC,KAAK,CAACU,KAAK,GAAG,CAAC,CAAC;YACxDuB,UAAU,CAAC,MAAMhC,YAAY,CAACoC,UAAU,CAACxC,qBAAqB,CAAC,EAAE,CAAC,CAAC;;;;;GAKtF;;;EAID,MAAMyC,WAAW,GAAG;;IAEhB,cAAc,EAAE3B,aAAa,GAAG,IAAI,GAAGR,SAAS,CAACS,OAAO,CAAC2B,SAAS,GAAG,KAAK,GAAGC,SAAS;IACtF,cAAc,EAAEjC,YAAY;IAC5B,eAAe,EAAEP,KAAK,CAACc,GAAG,CAAC2B,aAAa,EAAE;IAC1CC,SAAS,EAAEvC,SAAS,CAACS,OAAO,CAAC2B,SAAS;IACtC7B,KAAK,EAAEV,KAAK,CAACU,KAAK;IAClBiC,OAAO,EAAExC,SAAS,CAACyC,QAAQ,CAACC,WAAW;IACvCC,MAAM,EAAE3C,SAAS,CAAC4C,OAAO,CAACR,SAAS,GAAGpC,SAAS,CAAC4C,OAAO,CAACC,UAAU,GAAGR,SAAS;IAC9ES,SAAS,EAAE5B;GACd;EAED,IAAI6B,MAAM,gBAAG/B,6BAACgC,SAAS,oBAAYnD,KAAK,EAAMsC,WAAW,EAAI;EAE7D,IAAInC,SAAS,CAACiD,OAAO,CAACC,SAAS,KAAK9C,YAAY,IAAKU,SAAS,IAAI,CAACd,SAAS,CAACuB,UAAU,CAAC4B,QAAS,CAAC,EAAE;IAChGJ,MAAM,gBACF/B,6BAACoC,UAAU,oBACHvD,KAAK,EACLsC,WAAW;MACftB,UAAU,EAAEA,UAAU;MACtBgB,kBAAkB,EAAE7B,SAAS,CAACK,UAAU,CAACwB;OAEhD;;;;EAKL,MAAMwB,YAAY,GAAGrC,cAAK,CAACsC,OAAO,CAAC,OAAO;IAAExC,SAAS;IAAEC,YAAY;IAAEwC,QAAQ,EAAE1D,KAAK,CAACU;GAAO,CAAC,EAAE,CAACO,SAAS,EAAEjB,KAAK,CAACU,KAAK,CAAC,CAAC;EAExH,oBAAOS,6BAACwC,UAAU,CAACC,QAAQ;IAACC,KAAK,EAAEL;KAAeN,MAAM,CAAuB;AACnF;AAEA;AACA,IAAIY,SAAS;AAEb,SAASC,cAAcA,CAACnC,cAAuB;EAC3C,IAAIA,cAAc,EAAE;IAAA,IAAAoC,qBAAA;IAChB,QAAAA,qBAAA,GAAOpC,cAAc,CAACqC,OAAO,CAAC,aAAa,CAAC,cAAAD,qBAAA,uBAArCA,qBAAA,CAAuCE,YAAY,CAAC,mBAAmB,CAAC;;EAGnF,OAAO,IAAI;AACf;AAEA;AACA,IAAIC,sBAA0C;AAC9C,MAAMC,kBAAkB,GAAIC,QAAyC;EACjE,IAAIF,sBAAsB,KAAK3B,SAAS,EAAE;IAAA,IAAA8B,iBAAA;IACtC,MAAMC,aAAa,GAAG,IAAIC,UAAU,CAAC,UAAU,EAAE;MAAEC,IAAI,EAAEC,MAAM;MAAEC,OAAO,EAAE,IAAI;MAAEC,UAAU,EAAE;KAAM,CAAC;IACnG,MAAMC,iBAAiB,GAAGR,QAAQ,aAARA,QAAQ,wBAAAC,iBAAA,GAARD,QAAQ,CAAES,OAAO,cAAAR,iBAAA,uBAAjBA,iBAAA,CAAmBS,aAAa,qBAAqBZ,0BAA0B,CAAC;IAC1GU,iBAAiB,aAAjBA,iBAAiB,uBAAjBA,iBAAiB,CAAEG,aAAa,CAACT,aAAa,CAAC;;AAEvD,CAAC;AAED,SAAShB,UAAUA,CAACvD,KAAK;EACrB,MAAM;IAAEgB,UAAU;IAAEoB,SAAS;IAAEa,SAAS;IAAEjB,kBAAkB;IAAEiD,WAAW;IAAE,GAAGC;GAAY,GAAGlF,KAAK;EAClG,MAAMC,YAAY,GAAGC,eAAe,EAAE;EACtC,MAAMC,SAAS,GAAGH,KAAK,CAACI,KAAK,CAACC,OAAO,CAACC,IAA0B;EAEhE,MAAM6E,kBAAkB,GAAI7D,KAAuB;IAC/CwC,SAAS,GAAGC,cAAc,CAACzC,KAAK,CAAC8D,MAAM,CAAC;GAC3C;EAED,MAAMC,kBAAkB,GAAG/D,KAAK;IAC5B,IAAIM,cAAuB;IAE3B,IAAIN,KAAK,CAACG,GAAG,KAAK,WAAW,EAAE;;;MAG3BH,KAAK,CAACgE,eAAe,EAAE;MACvBhE,KAAK,CAACS,cAAc,EAAE;;MAGtB,IAAIT,KAAK,CAACiE,OAAO,IAAIjE,KAAK,CAACkE,OAAO,EAAE;QAChClE,KAAK,CAAC8D,MAAM,CAACK,IAAI,EAAE;QACnB7D,cAAc,GAAG3B,YAAY,CAACoC,UAAU,CAACxC,qBAAqB,CAAC;QAC/DiE,SAAS,GAAGC,cAAc,CAACnC,cAAc,CAAC;OAC7C,MAAM;;QAEHA,cAAc,GAAG3B,YAAY,CAAC6B,aAAa,CAACjC,qBAAqB,CAAC;QAElE,IAAI+B,cAAc,EAAE;UAChBkC,SAAS,GAAGC,cAAc,CAACnC,cAAc,CAAC;SAC7C,MAAM;;UAEH,IAAI,CAACZ,UAAU,EAAE;YACbM,KAAK,CAACS,cAAc,EAAE;YACtB5B,SAAS,CAACuB,UAAU,CAACC,KAAK,CAAC,IAAI,CAAC;YAChCxB,SAAS,CAACK,UAAU,CAACwB,kBAAkB,CAAChC,KAAK,CAACU,KAAK,GAAG,CAAC,CAAC;YACxDuB,UAAU,CAAC;cACPhC,YAAY,CAACiC,SAAS,CAACrC,qBAAqB,CAAC;;cAE7CiE,SAAS,GAAGC,cAAc,CAACnC,cAAc,CAAC;aAC7C,EAAE,CAAC,CAAC;;;;;GAKxB;EAED,MAAM8D,mBAAmB,GAAGpE,KAAK;IAC7B,IAAIM,cAAuB;IAE3B,IAAIN,KAAK,CAACG,GAAG,KAAK,YAAY,EAAE;;;MAG5BH,KAAK,CAACgE,eAAe,EAAE;MACvBhE,KAAK,CAACS,cAAc,EAAE;;MAGtB,IAAIT,KAAK,CAACiE,OAAO,IAAIjE,KAAK,CAACkE,OAAO,EAAE;QAChClE,KAAK,CAAC8D,MAAM,CAACK,IAAI,EAAE;QACnB7D,cAAc,GAAG3B,YAAY,CAACiC,SAAS,CAACrC,qBAAqB,CAAC;QAC9DiE,SAAS,GAAGC,cAAc,CAACnC,cAAc,CAAC;OAC7C,MAAM;;QAEHA,cAAc,GAAG3B,YAAY,CAACkC,SAAS,CAACtC,qBAAqB,CAAC;QAE9D,IAAI+B,cAAc,EAAE;UAChBkC,SAAS,GAAGC,cAAc,CAACnC,cAAc,CAAC;SAC7C,MAAM;;UAEH,IAAI,CAAC5B,KAAK,CAACoC,SAAS,EAAE;YAClBd,KAAK,CAACS,cAAc,EAAE;YACtB5B,SAAS,CAACuB,UAAU,CAACC,KAAK,CAAC,IAAI,CAAC;YAChCxB,SAAS,CAACK,UAAU,CAACwB,kBAAkB,CAAChC,KAAK,CAACU,KAAK,GAAG,CAAC,CAAC;YACxDuB,UAAU,CAAC;cACPhC,YAAY,CAACoC,UAAU,CAACxC,qBAAqB,CAAC;;cAE9CiE,SAAS,GAAGC,cAAc,CAACnC,cAAc,CAAC;aAC7C,EAAE,CAAC,CAAC;;;;;GAKxB;EAEDT,cAAK,CAACwE,SAAS,CAAC;;IAEZ,IAAIxF,SAAS,CAACuB,UAAU,CAAC4B,QAAQ,EAAE;MAC/Bc,kBAAkB,CAACpE,KAAK,CAACqE,QAAQ,CAAC;;GAEzC,EAAE,CAAClE,SAAS,CAACuB,UAAU,CAAC4B,QAAQ,CAAC,CAAC;EAEnC,MAAMjC,aAAa,GAAIC,KAA0B;IAC7C,IAAIA,KAAK,CAACC,kBAAkB,EAAE,IAAID,KAAK,CAACE,oBAAoB,EAAE,IAAIrB,SAAS,CAACiD,OAAO,CAACwC,iBAAiB,EAAE;MACnG;;IAGJ3C,SAAS,CAAC3B,KAAK,CAAC,CAAC;IACjB+D,kBAAkB,CAAC/D,KAAK,CAAC;IACzBoE,mBAAmB,CAACpE,KAAK,CAAC;GAC7B;;EAGDH,cAAK,CAACwE,SAAS,CAAC;IACZ,IAAIxF,SAAS,CAACK,UAAU,CAACC,eAAe,KAAKT,KAAK,CAACU,KAAK,EAAE;MACtD,IAAIoD,SAAS,KAAKtB,SAAS,EAAE;QAAA,IAAAqD,qBAAA,EAAAC,qBAAA;QACzB,MAAMC,aAAa,IAAAF,qBAAA,GAAG7F,KAAK,CAACqE,QAAQ,CAACS,OAAO,cAAAe,qBAAA,uBAAtBA,qBAAA,CAAwBd,aAAa,0DACEjB,aAAa,CACzE;QACDiC,aAAa,aAAbA,aAAa,wBAAAD,qBAAA,GAAbC,aAAa,CAAEhB,aAAa,CAACiB,iBAAiB,CAAC,cAAAF,qBAAA,uBAA/CA,qBAAA,CAAiDG,KAAK,EAAE;OAC3D,MAAM;QACHhG,YAAY,CAACoC,UAAU,CAACxC,qBAAqB,CAAC;;;;;;GAMzD,EAAE,CAACM,SAAS,CAACK,UAAU,CAACC,eAAe,CAAC,CAAC;EAE1C,oBAAOU,6BAACgC,SAAS,oBAAK+B,UAAU;IAAEgB,cAAc,EAAEf,kBAAkB;IAAElC,SAAS,EAAE5B;KAAiB;AACtG;AAYA,MAAM8E,iBAAiB,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,CAAC;AAE3F,MAAMhD,SAAS,gBAAGhC,cAAK,CAACiF,IAAI,CAAC,SAASjD,SAASA,CAAkBnD,KAA4B;EACzF,MAAM;IAAEU,KAAK;IAAE0B,SAAS,EAAEiE,EAAE;IAAEC,UAAU;IAAE3D,OAAO;IAAEuD,cAAc;IAAEpD,MAAM;IAAEhC,GAAG;IAAEV,KAAK;IAAEiE,QAAQ;IAAE,GAAGa;GAAY,GAAGlF,KAAK;EACxH,MAAMuG,GAAG,GAAGpF,cAAK,CAACqF,MAAM,CAAwB,IAAI,CAAC;EACrD,MAAMrG,SAAS,GAAGC,KAAK,CAACC,OAAO,CAACC,IAAwB;EACxD,MAAM;IAAEY;GAAc,GAAGuF,aAAa,EAAE;;EAGxCtF,cAAK,CAACwE,SAAS,CAAC;;IACZ,MAAMe,SAAS,IAAAC,YAAA,GAAGJ,GAAG,CAACzB,OAAO,cAAA6B,YAAA,uBAAXA,YAAA,CAAa5B,aAAa,CAAC,yBAAyB,CAAC;IAEvE,IAAI2B,SAAS,EAAE;MACXJ,UAAU,CAACI,SAAwB,CAAC;;GAE3C,EAAE,CAACH,GAAG,CAACzB,OAAO,CAAC,CAAC;;EAGjB,MAAMK,kBAAkB,GAAI7D,KAAmD;IAC3E,IAAI,OAAO4E,cAAc,KAAK,UAAU,EAAE;MACtCA,cAAc,CAAC5E,KAAK,CAAC;;;IAIzBsF,qBAAqB,CAAC,MAAMzG,SAAS,CAACK,UAAU,CAACwB,kBAAkB,CAACtB,KAAK,CAAC,CAAC;GAC9E;EAED,MAAMmC,WAAW,GAAIvB,KAAuC;IACxD,IAAI,OAAOqB,OAAO,KAAK,UAAU,EAAE;MAAA,IAAAkE,aAAA;MAC/B,MAAMC,cAAc,GAAGxF,KAAK,CAAC8D,MAAqB;MAElD,IACI,GAAAyB,aAAA,GAACN,GAAG,CAACzB,OAAO,cAAA+B,aAAA,eAAXA,aAAA,CAAaE,QAAQ,CAACzF,KAAK,CAAC8D,MAAqB,CAAC,KACnDe,iBAAiB,CAACa,QAAQ,CAACF,cAAc,CAACG,OAAO,CAACC,WAAW,EAAE,CAAC,IAChEJ,cAAc,CAAC7C,OAAO,CAACkC,iBAAiB,CAACgB,GAAG,CAACC,GAAG,kBAAkBA,KAAK,CAAC,CAACC,IAAI,CAAC,GAAG,CAAC,CAAC,EACrF;QACE;;MAGJ1E,OAAO,CAAC7B,GAAG,CAACwG,QAAQ,CAAC;;GAE5B;EAED,MAAMC,gBAAgB,GAAGA;;;;;IAKrB,IAAIpD,sBAAsB,KAAK3B,SAAS,EAAE;MACtC,IAAI2B,sBAAsB,KAAKzD,KAAK,EAAE;QAClC0D,kBAAkB,CAACC,QAAQ,CAAC;QAC5BF,sBAAsB,GAAGzD,KAAK;;KAErC,MAAM;MACHyD,sBAAsB,GAAGzD,KAAK;;IAElCQ,YAAY,CAAC,IAAI,CAAC;GACrB;EACD,MAAMsG,gBAAgB,GAAGA;IACrB,IAAIrD,sBAAsB,KAAKzD,KAAK,EAAE;MAClCyD,sBAAsB,GAAG3B,SAAS;;IAEtCtB,YAAY,CAAC,KAAK,CAAC;GACtB;EAED,MAAM,CAACuG,aAAa,EAAEC,eAAe,CAAC,GAAGC,aAAa,CAACrG,KAAK,IAAIwB,MAAM,aAANA,MAAM,uBAANA,MAAM,CAAGxB,KAAK,EAAER,GAAG,CAACwG,QAAQ,CAAC,CAAC;EAE9F,MAAMM,SAAS,GAAGC,EAAE,CAChB,oBAAoB;;;EAGpB,8DAA8D,EAC9D;IACI,sBAAsB,EAAE,OAAOlF,OAAO,KAAK;GAC9C,CACJ;EAED,oBACIxB,sDACQ+D,UAAU,EACTpC,MAAM,GAAG4E,eAAe,GAAGlF,SAAS;IACzCoF,SAAS,EAAEA,SAAS;sBACJlH,KAAK;yBACF+G,aAAa;IAChC9E,OAAO,EAAEE,WAAW;IACpBqD,cAAc,EAAEf,kBAAkB;IAClC2C,YAAY,EAAEP,gBAAgB;IAC9BQ,YAAY,EAAEP,gBAAgB;IAC9BQ,IAAI,EAAC,KAAK;IACVzB,GAAG,EAAEA;KACP;AAEV,CAAC,CAAmE;;;;"}
|
@@ -9,7 +9,13 @@ function useCurrentRow(defaultCurrentRowIndex) {
|
|
9
9
|
});
|
10
10
|
const moveUp = (length, callback) => move(-1, length, callback);
|
11
11
|
const moveDown = (length, callback) => move(1, length, callback);
|
12
|
-
const
|
12
|
+
const focusFirstElementInCurrentRow = tableRef => {
|
13
|
+
setTimeout(() => {
|
14
|
+
var _tableRef$current, _tableRef$current$que;
|
15
|
+
(_tableRef$current = tableRef.current) === null || _tableRef$current === void 0 ? void 0 : (_tableRef$current$que = _tableRef$current.querySelector('[data-taco="table2-body"] [role="row"] [role="cell"]:first-child')) === null || _tableRef$current$que === void 0 ? void 0 : _tableRef$current$que.focus();
|
16
|
+
}, 1);
|
17
|
+
};
|
18
|
+
const onKeyDown = React__default.useCallback((event, length, scrollToIndex, isEditing, tableRef) => {
|
13
19
|
if (event.defaultPrevented) {
|
14
20
|
return;
|
15
21
|
}
|
@@ -22,6 +28,9 @@ function useCurrentRow(defaultCurrentRowIndex) {
|
|
22
28
|
} else {
|
23
29
|
moveUp(length, scrollToIndex);
|
24
30
|
}
|
31
|
+
if (!isEditing) {
|
32
|
+
focusFirstElementInCurrentRow(tableRef);
|
33
|
+
}
|
25
34
|
return;
|
26
35
|
} else if (event.key === 'ArrowDown') {
|
27
36
|
event.preventDefault();
|
@@ -32,6 +41,9 @@ function useCurrentRow(defaultCurrentRowIndex) {
|
|
32
41
|
} else {
|
33
42
|
moveDown(length, scrollToIndex);
|
34
43
|
}
|
44
|
+
if (!isEditing) {
|
45
|
+
focusFirstElementInCurrentRow(tableRef);
|
46
|
+
}
|
35
47
|
return;
|
36
48
|
}
|
37
49
|
}, []);
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"useCurrentRow.js","sources":["../../../../../../../../../src/components/Table3/hooks/features/useCurrentRow.ts"],"sourcesContent":["import React from 'react';\nimport { TableStrategy } from '../../types';\n\ntype CurrentRowHandlerCallback = TableStrategy['scrollToIndex'];\n\nexport function useCurrentRow(defaultCurrentRowIndex: number | undefined) {\n const [currentRowIndex, setCurrentRowIndex] = React.useState<number | undefined>(defaultCurrentRowIndex);\n\n const move = (direction: -1 | 1, length: number, scrollToIndex: CurrentRowHandlerCallback) =>\n setCurrentRowIndex(currentIndex => {\n const nextIndex = currentIndex !== undefined ? getNextIndex(direction, currentIndex, length) : 0;\n scrollToIndex(direction === -1 ? nextIndex : nextIndex + 3);\n return nextIndex;\n });\n const moveUp = (length: number, callback: CurrentRowHandlerCallback) => move(-1, length, callback);\n const moveDown = (length: number, callback: CurrentRowHandlerCallback) => move(1, length, callback);\n\n const onKeyDown = React.useCallback((event: KeyboardEvent
|
1
|
+
{"version":3,"file":"useCurrentRow.js","sources":["../../../../../../../../../src/components/Table3/hooks/features/useCurrentRow.ts"],"sourcesContent":["import React from 'react';\nimport { Table3Ref, TableStrategy } from '../../types';\n\ntype CurrentRowHandlerCallback = TableStrategy['scrollToIndex'];\n\nexport function useCurrentRow(defaultCurrentRowIndex: number | undefined) {\n const [currentRowIndex, setCurrentRowIndex] = React.useState<number | undefined>(defaultCurrentRowIndex);\n\n const move = (direction: -1 | 1, length: number, scrollToIndex: CurrentRowHandlerCallback) =>\n setCurrentRowIndex(currentIndex => {\n const nextIndex = currentIndex !== undefined ? getNextIndex(direction, currentIndex, length) : 0;\n scrollToIndex(direction === -1 ? nextIndex : nextIndex + 3);\n return nextIndex;\n });\n const moveUp = (length: number, callback: CurrentRowHandlerCallback) => move(-1, length, callback);\n const moveDown = (length: number, callback: CurrentRowHandlerCallback) => move(1, length, callback);\n\n const focusFirstElementInCurrentRow = (tableRef: React.RefObject<Table3Ref>) => {\n setTimeout(() => {\n (\n tableRef.current?.querySelector('[data-taco=\"table2-body\"] [role=\"row\"] [role=\"cell\"]:first-child') as HTMLElement\n )?.focus();\n }, 1);\n };\n\n const onKeyDown = React.useCallback(\n (\n event: KeyboardEvent,\n length: number,\n scrollToIndex: CurrentRowHandlerCallback,\n isEditing: boolean,\n tableRef: React.RefObject<Table3Ref>\n ) => {\n if (event.defaultPrevented) {\n return;\n }\n\n if (event.key === 'ArrowUp') {\n event.preventDefault();\n\n if (event.ctrlKey || event.metaKey) {\n const newIndex = 0;\n setCurrentRowIndex(newIndex);\n scrollToIndex(newIndex);\n } else {\n moveUp(length, scrollToIndex);\n }\n\n if (!isEditing) {\n focusFirstElementInCurrentRow(tableRef);\n }\n\n return;\n } else if (event.key === 'ArrowDown') {\n event.preventDefault();\n\n if (event.ctrlKey || event.metaKey) {\n const newIndex = length - 1;\n setCurrentRowIndex(newIndex);\n scrollToIndex(newIndex);\n } else {\n moveDown(length, scrollToIndex);\n }\n\n if (!isEditing) {\n focusFirstElementInCurrentRow(tableRef);\n }\n\n return;\n }\n },\n []\n );\n\n const onFocus = React.useCallback(\n (event: React.FocusEvent, length: number, scrollToIndex: CurrentRowHandlerCallback) => {\n if (event.isDefaultPrevented()) {\n return;\n }\n\n if (currentRowIndex === undefined && length > 0) {\n // do it in the next tick, otherwise it prevents internal focus from working\n // meaning you have to tab twice to get to the first focusable element\n setTimeout(() => {\n setCurrentRowIndex(0);\n scrollToIndex(0);\n }, 1);\n }\n },\n [currentRowIndex, length]\n );\n\n return {\n currentRowIndex,\n setCurrentRowIndex,\n handleFocus: onFocus,\n handleKeyDown: onKeyDown,\n };\n}\n\nconst getNextIndex = (direction: -1 | 1, currentIndex: number, length: number) => {\n if (direction === -1) {\n return currentIndex - 1 > 0 ? currentIndex - 1 : 0;\n }\n\n return currentIndex + 1 < length ? currentIndex + 1 : currentIndex;\n};\n"],"names":["useCurrentRow","defaultCurrentRowIndex","currentRowIndex","setCurrentRowIndex","React","useState","move","direction","length","scrollToIndex","currentIndex","nextIndex","undefined","getNextIndex","moveUp","callback","moveDown","focusFirstElementInCurrentRow","tableRef","setTimeout","_tableRef$current","current","_tableRef$current$que","querySelector","focus","onKeyDown","useCallback","event","isEditing","defaultPrevented","key","preventDefault","ctrlKey","metaKey","newIndex","onFocus","isDefaultPrevented","handleFocus","handleKeyDown"],"mappings":"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"}
|
@@ -16722,7 +16722,13 @@ function useCurrentRow(defaultCurrentRowIndex) {
|
|
16722
16722
|
});
|
16723
16723
|
const moveUp = (length, callback) => move(-1, length, callback);
|
16724
16724
|
const moveDown = (length, callback) => move(1, length, callback);
|
16725
|
-
const
|
16725
|
+
const focusFirstElementInCurrentRow = tableRef => {
|
16726
|
+
setTimeout(() => {
|
16727
|
+
var _tableRef$current, _tableRef$current$que;
|
16728
|
+
(_tableRef$current = tableRef.current) === null || _tableRef$current === void 0 ? void 0 : (_tableRef$current$que = _tableRef$current.querySelector('[data-taco="table2-body"] [role="row"] [role="cell"]:first-child')) === null || _tableRef$current$que === void 0 ? void 0 : _tableRef$current$que.focus();
|
16729
|
+
}, 1);
|
16730
|
+
};
|
16731
|
+
const onKeyDown = React__default.useCallback((event, length, scrollToIndex, isEditing, tableRef) => {
|
16726
16732
|
if (event.defaultPrevented) {
|
16727
16733
|
return;
|
16728
16734
|
}
|
@@ -16735,6 +16741,9 @@ function useCurrentRow(defaultCurrentRowIndex) {
|
|
16735
16741
|
} else {
|
16736
16742
|
moveUp(length, scrollToIndex);
|
16737
16743
|
}
|
16744
|
+
if (!isEditing) {
|
16745
|
+
focusFirstElementInCurrentRow(tableRef);
|
16746
|
+
}
|
16738
16747
|
return;
|
16739
16748
|
} else if (event.key === 'ArrowDown') {
|
16740
16749
|
event.preventDefault();
|
@@ -16745,6 +16754,9 @@ function useCurrentRow(defaultCurrentRowIndex) {
|
|
16745
16754
|
} else {
|
16746
16755
|
moveDown(length, scrollToIndex);
|
16747
16756
|
}
|
16757
|
+
if (!isEditing) {
|
16758
|
+
focusFirstElementInCurrentRow(tableRef);
|
16759
|
+
}
|
16748
16760
|
return;
|
16749
16761
|
}
|
16750
16762
|
}, []);
|
@@ -19206,19 +19218,10 @@ const MemoedRow = /*#__PURE__*/React__default.memo(function MemoedRow(props) {
|
|
19206
19218
|
const {
|
19207
19219
|
setIsHovered
|
19208
19220
|
} = useRowContext$1();
|
19209
|
-
const isCurrentRow = Boolean(attributes['data-current']);
|
19210
|
-
// we want tabbing to "start" again at the start of the row each time, only after pressing tab though
|
19211
|
-
// so we focus the first cell so when tab is pressed it moves inside the row
|
19212
|
-
React__default.useEffect(() => {
|
19213
|
-
if (isCurrentRow) {
|
19214
|
-
var _ref$current, _ref$current$querySel;
|
19215
|
-
(_ref$current = ref.current) === null || _ref$current === void 0 ? void 0 : (_ref$current$querySel = _ref$current.querySelector('[role="cell"]:first-child')) === null || _ref$current$querySel === void 0 ? void 0 : _ref$current$querySel.focus();
|
19216
|
-
}
|
19217
|
-
}, [isCurrentRow]);
|
19218
19221
|
// we measure the first cell (since the row has display: contents) so that the virtualiser height is correct
|
19219
19222
|
React__default.useEffect(() => {
|
19220
|
-
var _ref$
|
19221
|
-
const firstCell = (_ref$
|
19223
|
+
var _ref$current;
|
19224
|
+
const firstCell = (_ref$current = ref.current) === null || _ref$current === void 0 ? void 0 : _ref$current.querySelector('[role=cell]:first-child');
|
19222
19225
|
if (firstCell) {
|
19223
19226
|
measureRef(firstCell);
|
19224
19227
|
}
|
@@ -19233,9 +19236,9 @@ const MemoedRow = /*#__PURE__*/React__default.memo(function MemoedRow(props) {
|
|
19233
19236
|
};
|
19234
19237
|
const handleClick = event => {
|
19235
19238
|
if (typeof onClick === 'function') {
|
19236
|
-
var _ref$
|
19239
|
+
var _ref$current2;
|
19237
19240
|
const clickedElement = event.target;
|
19238
|
-
if (!((_ref$
|
19241
|
+
if (!((_ref$current2 = ref.current) !== null && _ref$current2 !== void 0 && _ref$current2.contains(event.target)) || clickableElements.includes(clickedElement.tagName.toLowerCase()) || clickedElement.closest(clickableElements.map(tag => `[role=row] ${tag}`).join(','))) {
|
19239
19242
|
return;
|
19240
19243
|
}
|
19241
19244
|
onClick(row.original);
|
@@ -21157,7 +21160,7 @@ const Table$1 = /*#__PURE__*/fixedForwardRef(function Table3(props, ref) {
|
|
21157
21160
|
return;
|
21158
21161
|
}
|
21159
21162
|
tableMeta.hoverState.handleKeyDown(event);
|
21160
|
-
tableMeta.currentRow.handleKeyDown(event, table.getRowModel().rows.length, scrollToIndex);
|
21163
|
+
tableMeta.currentRow.handleKeyDown(event, table.getRowModel().rows.length, scrollToIndex, tableMeta.editing.isEditing, internalRef);
|
21161
21164
|
tableMeta.rowClick.handleKeyDown(event, table);
|
21162
21165
|
tableMeta.rowSelection.handleKeyDown(event, table);
|
21163
21166
|
tableMeta.editing.handleKeyDown(event);
|
@@ -21170,7 +21173,7 @@ const Table$1 = /*#__PURE__*/fixedForwardRef(function Table3(props, ref) {
|
|
21170
21173
|
// See https://github.com/e-conomic/taco/blob/dev/packages/taco/src/components/Table3/strategies/virtualised.tsx#L143
|
21171
21174
|
// scrollToIndex function changes when row count changes, so it is important to update handlers with new
|
21172
21175
|
// scrollToIndex function.
|
21173
|
-
[scrollToIndex, internalRef.current]);
|
21176
|
+
[scrollToIndex, tableMeta.editing.isEditing, internalRef.current]);
|
21174
21177
|
const handleBlur = event => {
|
21175
21178
|
tableMeta.editing.handleBlur(event);
|
21176
21179
|
};
|