@pega/lists-react 9.0.0-build.11.5 → 9.0.0-build.11.6
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/lib/Core/Components/ContextMenu/ContextMenuContainer.d.ts +6 -15
- package/lib/Core/Components/ContextMenu/ContextMenuContainer.d.ts.map +1 -1
- package/lib/Core/Components/ContextMenu/ContextMenuContainer.js +91 -165
- package/lib/Core/Components/ContextMenu/ContextMenuContainer.js.map +1 -1
- package/lib/Core/Components/TestIdConstants.d.ts +1 -0
- package/lib/Core/Components/TestIdConstants.js +2 -1
- package/lib/Core/Components/TestIdConstants.js.map +1 -1
- package/lib/Core/Views/Table/StyledTableContainer.d.ts.map +1 -1
- package/lib/Core/Views/Table/StyledTableContainer.js +0 -10
- package/lib/Core/Views/Table/StyledTableContainer.js.map +1 -1
- package/lib/Core/Views/Table/TableA11y.d.ts.map +1 -1
- package/lib/Core/Views/Table/TableA11y.js +3 -2
- package/lib/Core/Views/Table/TableA11y.js.map +1 -1
- package/package.json +7 -7
|
@@ -1,17 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import type { RsCoreTypes } from 'pega-repeating-structures-core';
|
|
2
|
+
export default function ContextMenuContainer({ view, selector }: {
|
|
3
|
+
view: RsCoreTypes.View;
|
|
4
|
+
selector: {
|
|
5
|
+
query: string;
|
|
6
|
+
};
|
|
4
7
|
}): import("react/jsx-runtime").JSX.Element | null;
|
|
5
|
-
declare namespace ContextMenuContainer {
|
|
6
|
-
namespace propTypes {
|
|
7
|
-
let view: PropTypes.Validator<{
|
|
8
|
-
[x: string]: any;
|
|
9
|
-
}>;
|
|
10
|
-
let selector: PropTypes.Validator<{
|
|
11
|
-
[x: string]: any;
|
|
12
|
-
}>;
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
export default ContextMenuContainer;
|
|
16
|
-
import PropTypes from 'prop-types';
|
|
17
8
|
//# sourceMappingURL=ContextMenuContainer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ContextMenuContainer.d.ts","sourceRoot":"","sources":["../../../../Core/Components/ContextMenu/ContextMenuContainer.
|
|
1
|
+
{"version":3,"file":"ContextMenuContainer.d.ts","sourceRoot":"","sources":["../../../../Core/Components/ContextMenu/ContextMenuContainer.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AA0FlE,MAAM,CAAC,OAAO,UAAU,oBAAoB,CAAC,EAC3C,IAAI,EACJ,QAAQ,EACT,EAAE;IACD,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC;IACvB,QAAQ,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CAC7B,kDAyGA"}
|
|
@@ -1,136 +1,55 @@
|
|
|
1
|
-
import { jsx as _jsx
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
4
|
-
import
|
|
5
|
-
import { mix } from 'polished';
|
|
6
|
-
import { Popover, Icon, useElement, useOuterEvent, tryCatch } from '@pega/cosmos-react-core';
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useState, useMemo, useEffect, useCallback } from 'react';
|
|
3
|
+
import { v4 as uuidV4 } from 'uuid';
|
|
4
|
+
import { Popover, Icon, useElement, useOuterEvent, Menu, isInstance } from '@pega/cosmos-react-core';
|
|
7
5
|
import { getRowContextData, getScrollerElem, isFilterApplied } from 'pega-repeating-structures-core';
|
|
8
|
-
import { createClassName as cx } from '../../Utils';
|
|
9
6
|
import useTranslate from '../../Hooks/useTranslate';
|
|
10
7
|
import useScrollAway from '../../Hooks/useScrollAway';
|
|
8
|
+
import TestIdConstants from '../TestIdConstants';
|
|
11
9
|
import { applyFilter, quickFilterEnabled, removeFilter } from './QuickFilter';
|
|
12
10
|
import copyText from './CopyPaste';
|
|
13
|
-
const
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
white-space: nowrap;
|
|
20
|
-
overflow: hidden;
|
|
21
|
-
text-overflow: ellipsis;
|
|
22
|
-
padding: 0.25rem;
|
|
23
|
-
border-radius: 0.156rem;
|
|
24
|
-
box-sizing: border-box;
|
|
25
|
-
cursor: pointer;
|
|
26
|
-
margin-top: 0.125rem;
|
|
27
|
-
margin-bottom: 0.125rem;
|
|
28
|
-
:hover {
|
|
29
|
-
background-color: ${hoverColor};
|
|
30
|
-
box-shadow: ${theme.base.shadow['focus-inset']};
|
|
31
|
-
}
|
|
32
|
-
`;
|
|
33
|
-
});
|
|
34
|
-
const StyledListItem = styled.div(({ theme }) => {
|
|
35
|
-
return css `
|
|
36
|
-
button {
|
|
37
|
-
display: flex;
|
|
38
|
-
align-items: center;
|
|
39
|
-
/* stylelint-disable unit-allowed-list */
|
|
40
|
-
padding: 4px 8px;
|
|
41
|
-
}
|
|
42
|
-
.label {
|
|
43
|
-
padding-left: 14px;
|
|
44
|
-
vertical-align: text-top;
|
|
45
|
-
}
|
|
46
|
-
.disabled {
|
|
47
|
-
padding-left: 14px;
|
|
48
|
-
vertical-align: text-top;
|
|
49
|
-
opacity: ${theme.base['disabled-opacity']};
|
|
50
|
-
}
|
|
51
|
-
`;
|
|
52
|
-
});
|
|
53
|
-
const StyledButton = styled.button `
|
|
54
|
-
display: block;
|
|
55
|
-
text-align: start;
|
|
56
|
-
background: none;
|
|
57
|
-
border: none;
|
|
58
|
-
line-height: 1;
|
|
59
|
-
outline: none;
|
|
60
|
-
cursor: pointer;
|
|
61
|
-
color: ${props => props.theme.base.palette['foreground-color']};
|
|
62
|
-
border-radius: 0;
|
|
63
|
-
`;
|
|
64
|
-
const getDefaultMenuItems = (column, rowContextData, targetCell, columns, filterExpression, actionColumnFiltering, actionClearFiltering, translate) => {
|
|
65
|
-
const isFiltered = isFilterApplied(column, filterExpression);
|
|
66
|
-
return [
|
|
67
|
-
{
|
|
11
|
+
const getMenuItems = (targetCell, column, rowContextData, view, translate) => {
|
|
12
|
+
const { columns = [], state: { filterExpression } = {}, type: { applyFilter: applyViewFilter, clearFilter } } = view;
|
|
13
|
+
const defaultMenuItems = [];
|
|
14
|
+
if (quickFilterEnabled(columns, column.field.id)) {
|
|
15
|
+
const isFiltered = filterExpression && isFilterApplied(column, filterExpression);
|
|
16
|
+
defaultMenuItems.push({
|
|
68
17
|
id: 'quickFilter',
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
show: !!quickFilterEnabled(columns, column.field.id),
|
|
72
|
-
disabled: false,
|
|
18
|
+
visual: isFiltered ? _jsx(Icon, { name: 'times' }) : _jsx(Icon, { name: 'filter' }),
|
|
19
|
+
primary: isFiltered ? translate('Remove filter') : translate('Filter by this'),
|
|
73
20
|
onClick: () => {
|
|
74
21
|
if (isFiltered) {
|
|
75
|
-
|
|
22
|
+
removeFilter(filterExpression, targetCell, applyViewFilter, clearFilter);
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
applyFilter(columns, targetCell, rowContextData, filterExpression, applyViewFilter);
|
|
76
26
|
}
|
|
77
|
-
return applyFilter(columns, targetCell, rowContextData, filterExpression, actionColumnFiltering);
|
|
78
27
|
}
|
|
79
|
-
}
|
|
80
|
-
{
|
|
81
|
-
id: 'copyText',
|
|
82
|
-
icon: 'copy',
|
|
83
|
-
label: translate('Copy text'),
|
|
84
|
-
show: true,
|
|
85
|
-
disabled: false,
|
|
86
|
-
onClick: () => copyText(targetCell)
|
|
87
|
-
},
|
|
88
|
-
{
|
|
89
|
-
id: 'pasteText',
|
|
90
|
-
icon: 'documents',
|
|
91
|
-
label: translate('Paste text'),
|
|
92
|
-
show: true,
|
|
93
|
-
disabled: true,
|
|
94
|
-
onClick: () => { }
|
|
95
|
-
}
|
|
96
|
-
];
|
|
97
|
-
};
|
|
98
|
-
const getMenuItems = (targetCell, column, rowContextData, columns, filterExpression, actionColumnFiltering, actionClearFiltering, translate) => {
|
|
99
|
-
const fieldContextOptions = column.field?.contextMenuOptions || [];
|
|
100
|
-
return [
|
|
101
|
-
...getDefaultMenuItems(column, rowContextData, targetCell, columns, filterExpression, actionColumnFiltering, actionClearFiltering, translate),
|
|
102
|
-
...fieldContextOptions
|
|
103
|
-
];
|
|
104
|
-
};
|
|
105
|
-
const shouldOverrideContextMenu = (targetCell, columns) => {
|
|
106
|
-
if (!targetCell) {
|
|
107
|
-
return false;
|
|
28
|
+
});
|
|
108
29
|
}
|
|
30
|
+
defaultMenuItems.push({
|
|
31
|
+
id: 'copyText',
|
|
32
|
+
visual: _jsx(Icon, { name: 'copy' }),
|
|
33
|
+
primary: translate('Copy text'),
|
|
34
|
+
onClick: () => copyText(targetCell)
|
|
35
|
+
});
|
|
36
|
+
const fieldSpecificMenuItems = (column.field?.contextMenuOptions || []).map(option => ({
|
|
37
|
+
id: option.id,
|
|
38
|
+
visual: option.icon ? _jsx(Icon, { name: option.icon }) : undefined,
|
|
39
|
+
primary: option.label || '',
|
|
40
|
+
onClick: () => option.onClick?.(targetCell)
|
|
41
|
+
}));
|
|
42
|
+
return [...defaultMenuItems, ...fieldSpecificMenuItems];
|
|
43
|
+
};
|
|
44
|
+
const shouldOverrideContextMenu = (targetCell, columns = []) => {
|
|
109
45
|
const { colId } = targetCell.dataset;
|
|
110
46
|
const { field } = columns.find(col => col.field.id.toString() === colId?.toString()) || {};
|
|
111
47
|
return !(!field || field?.noContextMenu);
|
|
112
48
|
};
|
|
113
|
-
const MenuItem = ({ menu = {}, target = {}, column = {}, rowContextData = {}, onMenuItemClick = () => { } }) => {
|
|
114
|
-
const { onClick = () => { }, icon, disabled = false, show = true, label } = menu;
|
|
115
|
-
if (!show) {
|
|
116
|
-
return null;
|
|
117
|
-
}
|
|
118
|
-
return (_jsx(StyledContent, { onClick: () => {
|
|
119
|
-
onMenuItemClick();
|
|
120
|
-
onClick(target, column, rowContextData);
|
|
121
|
-
}, children: _jsx(StyledListItem, { children: _jsxs(StyledButton, { children: [icon && _jsx(Icon, { name: icon }), _jsx("span", { className: cx('label', { disabled }), children: label })] }) }) }));
|
|
122
|
-
};
|
|
123
|
-
MenuItem.propTypes = {
|
|
124
|
-
menu: PropTypes.objectOf(PropTypes.any),
|
|
125
|
-
target: PropTypes.objectOf(PropTypes.any),
|
|
126
|
-
column: PropTypes.objectOf(PropTypes.any),
|
|
127
|
-
rowContextData: PropTypes.objectOf(PropTypes.any),
|
|
128
|
-
onMenuItemClick: PropTypes.func
|
|
129
|
-
};
|
|
130
49
|
export default function ContextMenuContainer({ view, selector }) {
|
|
131
|
-
const { columns, data, state: { paginationOptions
|
|
50
|
+
const { columns = [], data = [], state: { paginationOptions } = {}, domContainer } = view;
|
|
132
51
|
const [translate] = useTranslate();
|
|
133
|
-
const
|
|
52
|
+
const [menuContext, setMenuContext] = useState(null);
|
|
134
53
|
const [showMenu, setShowMenu] = useState(false);
|
|
135
54
|
const [menuItems, setMenuItems] = useState([]);
|
|
136
55
|
const [popperRef, setPopperRef] = useElement();
|
|
@@ -141,63 +60,70 @@ export default function ContextMenuContainer({ view, selector }) {
|
|
|
141
60
|
useScrollAway(popperRef, scrollerElem, () => {
|
|
142
61
|
setShowMenu(false);
|
|
143
62
|
});
|
|
144
|
-
|
|
145
|
-
if (
|
|
146
|
-
|
|
63
|
+
useEffect(() => {
|
|
64
|
+
if (!showMenu) {
|
|
65
|
+
const targetCell = menuContext?.targetCell;
|
|
66
|
+
if (targetCell) {
|
|
67
|
+
targetCell.removeAttribute('data-context-menu-active');
|
|
68
|
+
targetCell.removeAttribute('aria-expanded');
|
|
69
|
+
targetCell.removeAttribute('aria-controls');
|
|
70
|
+
}
|
|
71
|
+
setMenuContext(null);
|
|
147
72
|
}
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
73
|
+
}, [showMenu]);
|
|
74
|
+
const contextMenuListener = useCallback((e) => {
|
|
75
|
+
const target = e.target;
|
|
76
|
+
if (!isInstance(target, Element))
|
|
77
|
+
return;
|
|
78
|
+
const targetElement = target.closest(selector.query.toString());
|
|
79
|
+
if (!isInstance(targetElement, HTMLElement))
|
|
80
|
+
return;
|
|
81
|
+
if (shouldOverrideContextMenu(targetElement, columns) && !target.closest('a')) {
|
|
155
82
|
e.stopPropagation();
|
|
156
83
|
e.preventDefault();
|
|
157
|
-
|
|
158
|
-
const
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
targetElement.
|
|
162
|
-
|
|
84
|
+
const { colId } = targetElement.dataset;
|
|
85
|
+
const column = columns.find(col => col.field.id.toString() === colId?.toString());
|
|
86
|
+
if (!column)
|
|
87
|
+
return;
|
|
88
|
+
targetElement.setAttribute('data-context-menu-active', 'true');
|
|
89
|
+
targetElement.setAttribute('aria-expanded', 'true');
|
|
90
|
+
const menuId = `rs-context-menu-${uuidV4()}`;
|
|
91
|
+
targetElement.setAttribute('aria-controls', menuId);
|
|
92
|
+
const rowContextData = getRowContextData(data, paginationOptions || {}, targetElement);
|
|
93
|
+
const options = getMenuItems(targetElement, column, rowContextData, view, translate);
|
|
94
|
+
if (!options.length)
|
|
95
|
+
return;
|
|
163
96
|
setShowMenu(true);
|
|
164
97
|
setMenuItems(options);
|
|
98
|
+
setMenuContext({
|
|
99
|
+
column,
|
|
100
|
+
targetCell: targetElement,
|
|
101
|
+
rowContextData,
|
|
102
|
+
menuId
|
|
103
|
+
});
|
|
165
104
|
}
|
|
166
|
-
}, [
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
contextMenuRef.rowContextData,
|
|
172
|
-
data,
|
|
173
|
-
paginationOptions,
|
|
174
|
-
filterExpression,
|
|
175
|
-
applyViewFilter,
|
|
176
|
-
clearFilter,
|
|
177
|
-
translate
|
|
178
|
-
]);
|
|
105
|
+
}, [selector, columns, data, paginationOptions, translate, view]);
|
|
106
|
+
const onKeydown = useCallback(({ key }) => {
|
|
107
|
+
if (key === 'Escape')
|
|
108
|
+
setShowMenu(false);
|
|
109
|
+
}, []);
|
|
179
110
|
useEffect(() => {
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
111
|
+
const abortController = new AbortController();
|
|
112
|
+
if (!domContainer)
|
|
113
|
+
return;
|
|
114
|
+
domContainer.addEventListener('contextmenu', contextMenuListener, {
|
|
115
|
+
signal: abortController.signal
|
|
116
|
+
});
|
|
117
|
+
document.addEventListener('keydown', onKeydown, {
|
|
118
|
+
signal: abortController.signal
|
|
119
|
+
});
|
|
184
120
|
return () => {
|
|
185
|
-
|
|
186
|
-
domContainer.removeEventListener('contextmenu', contextMenuListener);
|
|
187
|
-
domContainer.removeEventListener('keydown', onMenuItemClick);
|
|
188
|
-
}
|
|
121
|
+
abortController.abort();
|
|
189
122
|
};
|
|
190
|
-
}, [domContainer, contextMenuListener
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
return null;
|
|
196
|
-
}
|
|
197
|
-
return (_jsx(Popover, { portal: true, ref: setPopperRef, target: contextMenuRef.targetCell, children: _jsx(StyledPopover, { children: menuItems.map(menu => (_jsx(MenuItem, { onMenuItemClick: onMenuItemClick, target: contextMenuRef.targetCell, column: contextMenuRef.column, rowContextData: contextMenuRef.rowContextData, menu: menu }, menu.id))) }) }));
|
|
123
|
+
}, [domContainer, contextMenuListener]);
|
|
124
|
+
return showMenu && menuContext ? (_jsx(Popover, { ref: setPopperRef, target: menuContext.targetCell, children: _jsx(Menu, { id: menuContext.menuId, items: menuItems, onItemClick: (_, e) => {
|
|
125
|
+
e.preventDefault();
|
|
126
|
+
setShowMenu(false);
|
|
127
|
+
}, focusControlEl: menuContext.targetCell, className: 'action-menu', "data-testid": TestIdConstants.contextMenu, "data-test-id": 'action-menu' }) })) : null;
|
|
198
128
|
}
|
|
199
|
-
ContextMenuContainer.propTypes = {
|
|
200
|
-
view: PropTypes.objectOf(PropTypes.any).isRequired,
|
|
201
|
-
selector: PropTypes.objectOf(PropTypes.any).isRequired
|
|
202
|
-
};
|
|
203
129
|
//# sourceMappingURL=ContextMenuContainer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ContextMenuContainer.js","sourceRoot":"","sources":["../../../../Core/Components/ContextMenu/ContextMenuContainer.jsx"],"names":[],"mappings":"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","sourcesContent":["import PropTypes from 'prop-types';\nimport { useRef, useState, useMemo, useEffect, useCallback } from 'react';\nimport styled, { css } from 'styled-components';\nimport { mix } from 'polished';\n\nimport { Popover, Icon, useElement, useOuterEvent, tryCatch } from '@pega/cosmos-react-core';\nimport {\n getRowContextData,\n getScrollerElem,\n isFilterApplied\n} from 'pega-repeating-structures-core';\n\nimport { createClassName as cx } from '../../Utils';\nimport useTranslate from '../../Hooks/useTranslate';\nimport useScrollAway from '../../Hooks/useScrollAway';\n\nimport { applyFilter, quickFilterEnabled, removeFilter } from './QuickFilter';\nimport copyText from './CopyPaste';\n\nconst StyledPopover = styled.div`\n width: 10rem;\n`;\n\nconst StyledContent = styled.div(({ theme }) => {\n const hoverColor = tryCatch(() =>\n mix(0.95, theme.base.palette['primary-background'], theme.base.palette.interactive)\n );\n return css`\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n padding: 0.25rem;\n border-radius: 0.156rem;\n box-sizing: border-box;\n cursor: pointer;\n margin-top: 0.125rem;\n margin-bottom: 0.125rem;\n :hover {\n background-color: ${hoverColor};\n box-shadow: ${theme.base.shadow['focus-inset']};\n }\n `;\n});\n\nconst StyledListItem = styled.div(({ theme }) => {\n return css`\n button {\n display: flex;\n align-items: center;\n /* stylelint-disable unit-allowed-list */\n padding: 4px 8px;\n }\n .label {\n padding-left: 14px;\n vertical-align: text-top;\n }\n .disabled {\n padding-left: 14px;\n vertical-align: text-top;\n opacity: ${theme.base['disabled-opacity']};\n }\n `;\n});\n\nconst StyledButton = styled.button`\n display: block;\n text-align: start;\n background: none;\n border: none;\n line-height: 1;\n outline: none;\n cursor: pointer;\n color: ${props => props.theme.base.palette['foreground-color']};\n border-radius: 0;\n`;\n\nconst getDefaultMenuItems = (\n column,\n rowContextData,\n targetCell,\n columns,\n filterExpression,\n actionColumnFiltering,\n actionClearFiltering,\n translate\n) => {\n const isFiltered = isFilterApplied(column, filterExpression);\n return [\n {\n id: 'quickFilter',\n icon: isFiltered ? 'times' : 'filter',\n label: isFiltered ? translate('Remove filter') : translate('Filter by this'),\n show: !!quickFilterEnabled(columns, column.field.id),\n disabled: false,\n onClick: () => {\n if (isFiltered) {\n return removeFilter(\n filterExpression,\n targetCell,\n actionColumnFiltering,\n actionClearFiltering\n );\n }\n return applyFilter(\n columns,\n targetCell,\n rowContextData,\n filterExpression,\n actionColumnFiltering\n );\n }\n },\n {\n id: 'copyText',\n icon: 'copy',\n label: translate('Copy text'),\n show: true,\n disabled: false,\n onClick: () => copyText(targetCell)\n },\n {\n id: 'pasteText',\n icon: 'documents',\n label: translate('Paste text'),\n show: true,\n disabled: true,\n onClick: () => {}\n }\n ];\n};\n\nconst getMenuItems = (\n targetCell,\n column,\n rowContextData,\n columns,\n filterExpression,\n actionColumnFiltering,\n actionClearFiltering,\n translate\n) => {\n const fieldContextOptions = column.field?.contextMenuOptions || [];\n return [\n ...getDefaultMenuItems(\n column,\n rowContextData,\n targetCell,\n columns,\n filterExpression,\n actionColumnFiltering,\n actionClearFiltering,\n translate\n ),\n ...fieldContextOptions\n ];\n};\n\nconst shouldOverrideContextMenu = (targetCell, columns) => {\n if (!targetCell) {\n return false;\n }\n const { colId } = targetCell.dataset;\n\n const { field } = columns.find(col => col.field.id.toString() === colId?.toString()) || {};\n return !(!field || field?.noContextMenu);\n};\n\nconst MenuItem = ({\n menu = {},\n target = {},\n column = {},\n rowContextData = {},\n onMenuItemClick = () => {}\n}) => {\n const { onClick = () => {}, icon, disabled = false, show = true, label } = menu;\n if (!show) {\n return null;\n }\n\n return (\n <StyledContent\n onClick={() => {\n onMenuItemClick();\n onClick(target, column, rowContextData);\n }}\n >\n <StyledListItem>\n <StyledButton>\n {icon && <Icon name={icon} />}\n <span className={cx('label', { disabled })}>{label}</span>\n </StyledButton>\n </StyledListItem>\n </StyledContent>\n );\n};\n\nMenuItem.propTypes = {\n menu: PropTypes.objectOf(PropTypes.any),\n target: PropTypes.objectOf(PropTypes.any),\n column: PropTypes.objectOf(PropTypes.any),\n rowContextData: PropTypes.objectOf(PropTypes.any),\n onMenuItemClick: PropTypes.func\n};\n\nexport default function ContextMenuContainer({ view, selector }) {\n const {\n columns,\n data,\n state: { paginationOptions, filterExpression } = {},\n domContainer,\n type: { applyFilter: applyViewFilter, clearFilter }\n } = view;\n const [translate] = useTranslate();\n const contextMenuRef = useRef({}).current;\n const [showMenu, setShowMenu] = useState(false);\n const [menuItems, setMenuItems] = useState([]);\n const [popperRef, setPopperRef] = useElement();\n const scrollerElem = useMemo(() => getScrollerElem(view), [view]);\n\n useOuterEvent('mousedown', [popperRef], () => {\n setShowMenu(false);\n });\n\n useScrollAway(popperRef, scrollerElem, () => {\n setShowMenu(false);\n });\n\n const onMenuItemClick = useCallback(event => {\n if (event && event.key !== 'Escape') {\n return;\n }\n setShowMenu(false);\n }, []);\n\n const contextMenuListener = useCallback(\n e => {\n const targetElement = selector ? e.target.closest(selector.query.toString()) : e.target;\n if (\n shouldOverrideContextMenu(targetElement, columns) &&\n // TODO: We will add \"Open link in new tab\" option in context menu once the custom context menu is made accessible.\n !e.target.closest('a')\n ) {\n e.stopPropagation();\n e.preventDefault();\n contextMenuRef.targetCell = targetElement;\n const { colId } = contextMenuRef.targetCell.dataset;\n contextMenuRef.column = columns.find(col => col.field.id.toString() === colId?.toString());\n contextMenuRef.rowContextData = getRowContextData(data, paginationOptions, targetElement);\n targetElement.classList.add('selection-border', 'disable-select');\n const options = getMenuItems(\n targetElement,\n contextMenuRef.column,\n contextMenuRef.rowContextData,\n columns,\n filterExpression,\n applyViewFilter,\n clearFilter,\n translate\n );\n setShowMenu(true);\n setMenuItems(options);\n }\n },\n\n [\n selector,\n columns,\n contextMenuRef.targetCell,\n contextMenuRef.column,\n contextMenuRef.rowContextData,\n data,\n paginationOptions,\n filterExpression,\n applyViewFilter,\n clearFilter,\n translate\n ]\n );\n\n useEffect(() => {\n if (domContainer) {\n domContainer.addEventListener('contextmenu', contextMenuListener);\n domContainer.addEventListener('keydown', onMenuItemClick);\n }\n return () => {\n if (domContainer) {\n domContainer.removeEventListener('contextmenu', contextMenuListener);\n domContainer.removeEventListener('keydown', onMenuItemClick);\n }\n };\n }, [domContainer, contextMenuListener, onMenuItemClick]);\n\n if (!contextMenuRef.targetCell || !showMenu || !domContainer) {\n if (contextMenuRef.targetCell && selector) {\n contextMenuRef.targetCell.classList.remove('selection-border', 'disable-select');\n }\n return null;\n }\n\n return (\n <Popover portal ref={setPopperRef} target={contextMenuRef.targetCell}>\n <StyledPopover>\n {menuItems.map(menu => (\n <MenuItem\n key={menu.id}\n onMenuItemClick={onMenuItemClick}\n target={contextMenuRef.targetCell}\n column={contextMenuRef.column}\n rowContextData={contextMenuRef.rowContextData}\n menu={menu}\n />\n ))}\n </StyledPopover>\n </Popover>\n );\n}\n\nContextMenuContainer.propTypes = {\n view: PropTypes.objectOf(PropTypes.any).isRequired,\n selector: PropTypes.objectOf(PropTypes.any).isRequired\n};\n"]}
|
|
1
|
+
{"version":3,"file":"ContextMenuContainer.js","sourceRoot":"","sources":["../../../../Core/Components/ContextMenu/ContextMenuContainer.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useState, useMemo, useEffect, useCallback } from 'react';\nimport { v4 as uuidV4 } from 'uuid';\n\nimport type { RsCoreTypes } from 'pega-repeating-structures-core';\nimport type { MenuItemProps } from '@pega/cosmos-react-core';\nimport {\n Popover,\n Icon,\n useElement,\n useOuterEvent,\n Menu,\n isInstance\n} from '@pega/cosmos-react-core';\nimport {\n getRowContextData,\n getScrollerElem,\n isFilterApplied\n} from 'pega-repeating-structures-core';\n\nimport useTranslate from '../../Hooks/useTranslate';\nimport useScrollAway from '../../Hooks/useScrollAway';\nimport TestIdConstants from '../TestIdConstants';\n\nimport { applyFilter, quickFilterEnabled, removeFilter } from './QuickFilter';\nimport copyText from './CopyPaste';\n\ntype MenuContext = {\n targetCell: HTMLElement;\n column: RsCoreTypes.Column;\n rowContextData: RsCoreTypes.RowData;\n menuId: string;\n} | null;\n\nconst getMenuItems = (\n targetCell: HTMLElement,\n column: RsCoreTypes.Column,\n rowContextData: RsCoreTypes.RowData,\n view: RsCoreTypes.View,\n translate: (key: string) => string\n): MenuItemProps[] => {\n const {\n columns = [],\n state: { filterExpression } = {},\n type: { applyFilter: applyViewFilter, clearFilter }\n } = view;\n const defaultMenuItems: MenuItemProps[] = [];\n\n if (quickFilterEnabled(columns, column.field.id)) {\n const isFiltered = filterExpression && isFilterApplied(column, filterExpression);\n defaultMenuItems.push({\n id: 'quickFilter',\n visual: isFiltered ? <Icon name='times' /> : <Icon name='filter' />,\n primary: isFiltered ? translate('Remove filter') : translate('Filter by this'),\n\n onClick: () => {\n if (isFiltered) {\n removeFilter(filterExpression, targetCell, applyViewFilter, clearFilter);\n } else {\n applyFilter(columns, targetCell, rowContextData, filterExpression, applyViewFilter);\n }\n }\n });\n }\n\n defaultMenuItems.push({\n id: 'copyText',\n visual: <Icon name='copy' />,\n primary: translate('Copy text'),\n onClick: () => copyText(targetCell)\n });\n\n const fieldSpecificMenuItems: MenuItemProps[] = (column.field?.contextMenuOptions || []).map(\n option => ({\n id: option.id,\n visual: option.icon ? <Icon name={option.icon} /> : undefined,\n primary: option.label || '',\n onClick: () => option.onClick?.(targetCell)\n })\n );\n\n return [...defaultMenuItems, ...fieldSpecificMenuItems];\n};\n\nconst shouldOverrideContextMenu = (\n targetCell: HTMLElement,\n columns: RsCoreTypes.Column[] = []\n): boolean => {\n const { colId } = targetCell.dataset;\n\n const { field } = columns.find(col => col.field.id.toString() === colId?.toString()) || {};\n return !(!field || field?.noContextMenu);\n};\n\nexport default function ContextMenuContainer({\n view,\n selector\n}: {\n view: RsCoreTypes.View;\n selector: { query: string };\n}) {\n const { columns = [], data = [], state: { paginationOptions } = {}, domContainer } = view;\n\n const [translate] = useTranslate();\n const [menuContext, setMenuContext] = useState<MenuContext>(null);\n const [showMenu, setShowMenu] = useState(false);\n const [menuItems, setMenuItems] = useState<MenuItemProps[]>([]);\n const [popperRef, setPopperRef] = useElement();\n const scrollerElem = useMemo(() => getScrollerElem(view), [view]);\n\n useOuterEvent('mousedown', [popperRef], () => {\n setShowMenu(false);\n });\n\n useScrollAway(popperRef, scrollerElem, () => {\n setShowMenu(false);\n });\n\n useEffect(() => {\n if (!showMenu) {\n const targetCell = menuContext?.targetCell;\n if (targetCell) {\n targetCell.removeAttribute('data-context-menu-active');\n targetCell.removeAttribute('aria-expanded');\n targetCell.removeAttribute('aria-controls');\n }\n setMenuContext(null);\n }\n }, [showMenu]);\n\n const contextMenuListener = useCallback(\n (e: MouseEvent) => {\n const target = e.target;\n if (!isInstance(target, Element)) return;\n\n const targetElement = target.closest(selector.query.toString());\n if (!isInstance(targetElement, HTMLElement)) return;\n\n if (shouldOverrideContextMenu(targetElement, columns) && !target.closest('a')) {\n e.stopPropagation();\n e.preventDefault();\n\n const { colId } = targetElement.dataset;\n const column = columns.find(col => col.field.id.toString() === colId?.toString());\n if (!column) return;\n\n targetElement.setAttribute('data-context-menu-active', 'true');\n targetElement.setAttribute('aria-expanded', 'true');\n const menuId = `rs-context-menu-${uuidV4()}`;\n targetElement.setAttribute('aria-controls', menuId);\n\n const rowContextData = getRowContextData(data, paginationOptions || {}, targetElement);\n const options = getMenuItems(targetElement, column, rowContextData, view, translate);\n if (!options.length) return;\n\n setShowMenu(true);\n setMenuItems(options);\n setMenuContext({\n column,\n targetCell: targetElement,\n rowContextData,\n menuId\n });\n }\n },\n [selector, columns, data, paginationOptions, translate, view]\n );\n\n const onKeydown = useCallback(({ key }: KeyboardEvent) => {\n if (key === 'Escape') setShowMenu(false);\n }, []);\n\n useEffect(() => {\n const abortController = new AbortController();\n if (!domContainer) return;\n\n domContainer.addEventListener('contextmenu', contextMenuListener, {\n signal: abortController.signal\n });\n document.addEventListener('keydown', onKeydown, {\n signal: abortController.signal\n });\n\n return () => {\n abortController.abort();\n };\n }, [domContainer, contextMenuListener]);\n\n return showMenu && menuContext ? (\n <Popover ref={setPopperRef} target={menuContext.targetCell}>\n <Menu\n id={menuContext.menuId}\n items={menuItems}\n onItemClick={(_, e) => {\n e.preventDefault();\n setShowMenu(false);\n }}\n focusControlEl={menuContext.targetCell}\n className='action-menu'\n data-testid={TestIdConstants.contextMenu}\n // TODO: remove this older test-id syntax after checking usage across the test suites\n data-test-id='action-menu'\n />\n </Popover>\n ) : null;\n}\n"]}
|
|
@@ -9,6 +9,7 @@ export default {
|
|
|
9
9
|
groupHeader: 'group-header',
|
|
10
10
|
groupHeaderCount: 'group-header-count',
|
|
11
11
|
groupHeaderGroupBy: 'group-header-group-by',
|
|
12
|
-
hierarchicalCell: 'hierarchical-cell'
|
|
12
|
+
hierarchicalCell: 'hierarchical-cell',
|
|
13
|
+
contextMenu: 'repeat-context-menu'
|
|
13
14
|
};
|
|
14
15
|
//# sourceMappingURL=TestIdConstants.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TestIdConstants.js","sourceRoot":"","sources":["../../../Core/Components/TestIdConstants.js"],"names":[],"mappings":"AAAA,eAAe;IACb,YAAY,EAAE,sBAAsB;IACpC,WAAW,EAAE,qBAAqB;IAClC,UAAU,EAAE,oBAAoB;IAChC,iBAAiB,EAAE,4BAA4B;IAC/C,SAAS,EAAE,mBAAmB;IAC9B,qBAAqB,EAAE,yBAAyB;IAChD,gBAAgB,EAAE,oBAAoB;IACtC,WAAW,EAAE,cAAc;IAC3B,gBAAgB,EAAE,oBAAoB;IACtC,kBAAkB,EAAE,uBAAuB;IAC3C,gBAAgB,EAAE,mBAAmB;
|
|
1
|
+
{"version":3,"file":"TestIdConstants.js","sourceRoot":"","sources":["../../../Core/Components/TestIdConstants.js"],"names":[],"mappings":"AAAA,eAAe;IACb,YAAY,EAAE,sBAAsB;IACpC,WAAW,EAAE,qBAAqB;IAClC,UAAU,EAAE,oBAAoB;IAChC,iBAAiB,EAAE,4BAA4B;IAC/C,SAAS,EAAE,mBAAmB;IAC9B,qBAAqB,EAAE,yBAAyB;IAChD,gBAAgB,EAAE,oBAAoB;IACtC,WAAW,EAAE,cAAc;IAC3B,gBAAgB,EAAE,oBAAoB;IACtC,kBAAkB,EAAE,uBAAuB;IAC3C,gBAAgB,EAAE,mBAAmB;IACrC,WAAW,EAAE,qBAAqB;CACnC,CAAC","sourcesContent":["export default {\n filterButton: 'repeat-filter-button',\n groupButton: 'repeat-group-button',\n sortButton: 'repeat-sort-button',\n moreOptionsButton: 'repeat-more-options-button',\n noRecords: 'repeat-no-records',\n aggregateDisplayValue: 'aggregate-display-value',\n columnFilterIcon: 'column-filter-icon',\n groupHeader: 'group-header',\n groupHeaderCount: 'group-header-count',\n groupHeaderGroupBy: 'group-header-group-by',\n hierarchicalCell: 'hierarchical-cell',\n contextMenu: 'repeat-context-menu'\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StyledTableContainer.d.ts","sourceRoot":"","sources":["../../../../Core/Views/Table/StyledTableContainer.jsx"],"names":[],"mappings":";AAkBA,
|
|
1
|
+
{"version":3,"file":"StyledTableContainer.d.ts","sourceRoot":"","sources":["../../../../Core/Views/Table/StyledTableContainer.jsx"],"names":[],"mappings":";AAkBA,oNAy4BG"}
|
|
@@ -163,7 +163,6 @@ const StyledTableContainer = styled(forwardRef((props, ref) => _jsx("div", { ref
|
|
|
163
163
|
outline: 0.125rem auto var(--medium-blue);
|
|
164
164
|
}
|
|
165
165
|
|
|
166
|
-
.cell.selection-border:focus,
|
|
167
166
|
.cell.editable-cell:focus {
|
|
168
167
|
outline: none 0;
|
|
169
168
|
}
|
|
@@ -872,15 +871,6 @@ const StyledTableContainer = styled(forwardRef((props, ref) => _jsx("div", { ref
|
|
|
872
871
|
}
|
|
873
872
|
}
|
|
874
873
|
|
|
875
|
-
.selection-border {
|
|
876
|
-
border: 0.125rem solid var(--medium-blue) !important;
|
|
877
|
-
}
|
|
878
|
-
|
|
879
|
-
.disable-select {
|
|
880
|
-
user-select: none; /* supported by Chrome and Firefox */
|
|
881
|
-
-webkit-user-select: none; /* Safari */
|
|
882
|
-
}
|
|
883
|
-
|
|
884
874
|
.popper {
|
|
885
875
|
div.row {
|
|
886
876
|
display: flex;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StyledTableContainer.js","sourceRoot":"","sources":["../../../../Core/Views/Table/StyledTableContainer.jsx"],"names":[],"mappings":"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","sourcesContent":["import { forwardRef } from 'react';\nimport styled, { css } from 'styled-components';\nimport {\n getLuminance,\n meetsContrastGuidelines,\n mix,\n readableColor,\n transparentize\n} from 'polished';\n\nimport { StyledStatus } from '@pega/cosmos-react-core/lib/components/Badges/Status';\nimport { StyledRadioCheck } from '@pega/cosmos-react-core/lib/components/RadioCheck/RadioCheck';\nimport { StyledLabel, calculateFontSize, tryCatch } from '@pega/cosmos-react-core';\n\nimport { generateRSDataContainerHeightStyles, generateRSHeightStyles } from '../../Utils/styles';\n\nimport { CellIcon } from './CellWrapper';\n\nconst StyledTableContainer = styled(forwardRef((props, ref) => <div ref={ref} {...props} />))(({\n theme,\n view,\n isFullscreen\n}) => {\n const isAggregationApplied = view.columns?.filter(c => !c.hidden).some(c => c.aggregated);\n const fontSize = calculateFontSize(theme.base['font-size'], theme.base['font-scale']);\n const showFreezeLine =\n view.state.responsive?.sm &&\n !(view.hasNoRecords || view.hasNoFrozenColumns || view.bHideFreezeLine);\n const selectedRowColor = tryCatch(() =>\n mix(0.85, theme.base.palette['primary-background'], theme.base.palette.interactive)\n );\n const lightGreyColor = theme.base.colors.gray['extra-light'];\n const freezeLineShadowTransparent = transparentize(\n 0.9,\n theme.components.table.header['foreground-color']\n );\n const oddRowBackgroundColor =\n getLuminance(theme.components.table.body['secondary-background-color']) > 0.5\n ? theme.components.table.body['secondary-background-color']\n : mix(\n 0.75,\n theme.components.table.body['background-color'],\n theme.components.table.body['secondary-background-color']\n );\n\n const headerForegroundContrast = meetsContrastGuidelines(\n theme.components.table.header['foreground-color'],\n theme.components.table.header['background-color']\n ).AA;\n const usableHeaderForeground = headerForegroundContrast\n ? theme.components.table.header['foreground-color']\n : readableColor(\n theme.components.table.header['foreground-color'],\n theme.components.table.header['background-color']\n );\n const oddRowContrast = meetsContrastGuidelines(\n theme.components.table.body['foreground-color'],\n oddRowBackgroundColor\n ).AA;\n const useableOddRowForeground = oddRowContrast\n ? theme.components.table.body['foreground-color']\n : readableColor(theme.components.table.body['foreground-color'], oddRowBackgroundColor);\n\n return css`\n --primary-background: ${theme.base.palette['primary-background']};\n --secondary-background: ${theme.components.table.header['background-color']};\n --forground-color: ${theme.base.palette['foreground-color']};\n --interactive: ${theme.base.palette.interactive};\n --medium-blue: ${theme.base.colors.blue.medium};\n --border-color: ${theme.base.palette['border-line']};\n --border-color-freeze: #a5a5a5;\n --border-width: 0.062rem;\n --border-style: var(--border-width) solid var(--border-color);\n --font-stretch: ${theme.components.table.typography['font-stretch']};\n --letter-spacing: ${theme.components.table.typography['letter-spacing']};\n --cell-padding: ${theme.base.spacing};\n --cell-vertical-padding: calc(${theme.base.spacing} * 0.5);\n --header-cell-padding: 0 0.125rem 0 var(--cell-padding);\n --header-bg-color: var(--secondary-background);\n --header-fg-color: ${usableHeaderForeground};\n --default-group-header-height: 1.5rem;\n --group-header-height: var(--default-group-header-height);\n --box-sizing: content-box;\n --animation-ease: ${theme.base.animation.timing.ease};\n --font-weight-semi-bold: ${theme.base['font-weight']['semi-bold']};\n --row-height-multiplier: 1.125;\n --cell-fixed-position: sticky;\n position: relative;\n ${() => generateRSHeightStyles({ view, isFullscreen })}\n\n .small-screen-table {\n --cell-fixed-position: static;\n }\n\n .container {\n ${() => generateRSDataContainerHeightStyles()};\n border: var(--border-style);\n border-radius: var(--border-radius, ${theme.base['border-radius']});\n position: relative;\n letter-spacing: var(--letter-spacing);\n font-stretch: var(--font-stretch);\n }\n\n .hide-rows-till-ready .row[aria-rowindex] {\n visibility: hidden;\n }\n\n .table-drag-proxy {\n background: rgba(0, 0, 0, 0.21);\n position: absolute;\n top: 0;\n bottom: 0;\n z-index: 6;\n pointer-events: none;\n display: none;\n }\n\n .table-drag-line {\n background: #999999;\n position: absolute;\n top: 0;\n bottom: 0;\n width: 0.12rem;\n z-index: 6;\n pointer-events: none;\n display: none;\n }\n\n .cell-fixed {\n z-index: 1;\n }\n\n .group-wrapper {\n overflow: hidden;\n display: inline-flex;\n line-height: var(--group-header-height);\n\n .group-context-count {\n display: inline-flex;\n overflow: hidden;\n }\n }\n\n /* In review mode(Ex: Tabs) cosmos components are rendered and mark up is not compatible with\n group-wrapper cell. Overridden css in group-header when dl exists inside that class which indicates\n mark up is generated from cosmos which differentiates from normal table cell markup */\n .group-wrapper .group-context-count dl {\n grid-template-columns: auto;\n }\n\n .fallback,\n .fallback-footer {\n height: var(--row-height);\n background-color: var(--header-bg-color);\n color: var(--header-fg-color);\n position: absolute;\n width: 100%;\n z-index: -1;\n box-sizing: var(--box-sizing);\n }\n\n .fallback {\n /* stylelint-disable unit-allowed-list */\n top: -1px;\n border-bottom: var(--border-style);\n }\n\n .fallback-footer {\n top: 0;\n border-top: var(--border-style);\n }\n\n .sticky-header {\n display: grid;\n position: sticky;\n top: 0;\n z-index: 6;\n border-start-start-radius: inherit;\n border-start-end-radius: inherit;\n }\n\n .cell {\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n\n .icons-ph {\n /* Maintaining action button aspect ratio of 1:1 with 24*24px width and height */\n min-width: 1.5rem;\n }\n\n &.custom-item {\n width: 10em;\n }\n }\n\n .cell:focus {\n outline: 0.125rem auto var(--medium-blue);\n }\n\n .cell.selection-border:focus,\n .cell.editable-cell:focus {\n outline: none 0;\n }\n\n .editable-cell > span {\n height: 100%;\n display: flex;\n padding: 0 6px;\n align-items: center;\n }\n\n .row {\n display: inline-flex;\n height: var(--row-height);\n outline: none 0;\n transition: transform 0.5s var(--animation-ease);\n box-sizing: var(--box-sizing);\n position: relative;\n\n > .row-select-handle {\n display: flex;\n justify-content: center;\n &:active {\n outline: none;\n }\n\n > .header-lable-container {\n min-width: 20px;\n }\n /* stylelint-disable selector-max-class */\n &.cell-fixed > .cell-content {\n flex-grow: unset;\n }\n }\n\n > .cell,\n .group-header-aggregation-row > .cell {\n transition: transform 0.5s var(--animation-ease);\n border-right: var(--border-style);\n position: relative;\n ${!theme.components.table['striped-rows'] &&\n css`\n border-bottom: var(--border-style);\n `}\n display: flex;\n align-items: center;\n\n &::after {\n opacity: 1;\n transition: opacity 0.1s var(--animation-ease);\n }\n\n .row-action-menu {\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n &.cell-action {\n position: sticky;\n z-index: 4;\n right: 0;\n border-right: 0;\n justify-content: center;\n border-left: var(--border-style);\n\n /* The below styles are needed to avoid ellipses in safari when no text is present\n and to hide the 'Actions' label */\n\n /* stylelint-disable max-nesting-depth */\n\n div.header-label {\n text-overflow: unset;\n }\n }\n &.aggregateCell {\n background-color: var(--header-bg-color);\n }\n }\n\n /** Adds bottom border to the last row of a group, when striped-rows are enabled */\n &:has(+ .group-header-row) > .cell {\n ${theme.components.table['striped-rows'] &&\n css`\n border-bottom: var(--border-style);\n `}\n }\n &.header > .cell {\n border-bottom: var(--border-style);\n }\n .group-header-aggregation-row {\n > .cell {\n &.cell-action {\n overflow: initial;\n\n /* extending border on the top left of row action cell as we need to show border for at the end group label value when row actions are present */\n &::before {\n content: '';\n position: absolute;\n inline-size: 0;\n inset-inline-start: calc(var(--border-width) * -1);\n inset-block-start: calc(var(--group-header-height) * -1);\n block-size: var(--group-header-height);\n border-inline-start: var(--border-style);\n }\n }\n }\n }\n\n > .cell-action {\n background-color: var(--primary-background);\n }\n\n > .row-reorder-handle {\n padding: 0;\n border-right: 0 !important;\n justify-content: center;\n cursor: move;\n }\n\n .aggregateCell.cell {\n border-right: none;\n }\n\n > .cell.cell-fixed,\n .group-header-aggregation-row > .cell-fixed {\n position: var(--cell-fixed-position);\n z-index: 4;\n\n ${showFreezeLine &&\n css`\n &.cell-last-frozen {\n border-right: solid 1px var(--border-color-freeze);\n box-shadow: calc(${theme.base.spacing} * 0.25) 0 0 0 ${freezeLineShadowTransparent};\n transition: 0.5s;\n }\n `}\n\n /* As the row select column and row dragDrop column always have to be frozen */\n &[data-col-id='RowSelect'],\n &[data-col-id='RowDragDrop'],\n &[data-col-id='RowError'] {\n position: sticky;\n flex-shrink: 0;\n z-index: 5;\n }\n }\n\n > .cell.cell-fixed:focus-within,\n .group-header-aggregation-row > .cell-fixed {\n z-index: 6;\n }\n\n &.click {\n cursor: pointer;\n }\n\n &:last-child {\n border-end-start-radius: inherit;\n border-end-end-radius: inherit;\n\n > .cell {\n &:first-child {\n border-end-start-radius: inherit;\n }\n\n &:last-child {\n border-end-end-radius: inherit;\n }\n\n ${theme.components.table['striped-rows'] &&\n css`\n border-bottom: var(--border-style);\n `}\n }\n }\n }\n .row:not(.row-error):not(.group-header-row):not(.header) {\n .cell-fixed {\n background: var(--primary-background);\n }\n .cell-fixed.aggregateCell {\n background: var(--header-bg-color);\n }\n }\n ${theme.components.table['striped-rows'] &&\n css`\n /* Targets rows with an odd data-index attribute, excluding group header rows */\n .row[data-index$='1']:not(.group-header-row):not(.header),\n .row[data-index$='3']:not(.group-header-row):not(.header),\n .row[data-index$='5']:not(.group-header-row):not(.header),\n .row[data-index$='7']:not(.group-header-row):not(.header),\n .row[data-index$='9']:not(.group-header-row):not(.header) {\n background: ${oddRowBackgroundColor};\n color: ${useableOddRowForeground};\n .cell-fixed {\n background: ${oddRowBackgroundColor};\n color: ${useableOddRowForeground};\n }\n > .cell-action {\n background: ${oddRowBackgroundColor};\n }\n }\n .row[data-index$='0']:not(.group-header-row):not(.header),\n .row[data-index$='2']:not(.group-header-row):not(.header),\n .row[data-index$='4']:not(.group-header-row):not(.header),\n .row[data-index$='6']:not(.group-header-row):not(.header),\n .row[data-index$='8']:not(.group-header-row):not(.header) {\n background: var(--primary-background);\n .cell-fixed {\n background: var(--primary-background);\n }\n > .cell-action {\n background: var(--primary-background);\n }\n }\n `}\n\n .row-error {\n background: ${mix(\n 0.1,\n theme.components['form-field'].error['status-color'],\n theme.base.palette['primary-background']\n )};\n\n /* stylelint-disable no-descending-specificity */\n .cell-fixed,\n .cell-action {\n background: inherit;\n }\n\n > .cell:not(.cell-fixed):not(.cell-action) {\n background: none;\n }\n }\n\n .sort-info-container {\n .sort-sequence {\n font-size: 0.625rem;\n color: ${theme.base.colors.gray['extra-dark']};\n }\n }\n\n .filter-info-container {\n display: flex;\n justify-content: center;\n align-items: center;\n\n svg {\n width: 14px;\n height: 14px;\n }\n }\n\n .cell.row-error-column {\n padding: 0;\n border-right: 0;\n text-align: right;\n outline: none;\n\n /* Focus handling will be done as part of interation 2: EPIC-88751 */\n\n svg {\n color: ${theme.base.colors.red.medium};\n }\n }\n\n .editable-cell {\n padding: 0;\n border: 2px solid ${theme.base.palette.interactive} !important;\n box-shadow: 0 0 1px 1px rgba(0, 118, 209) !important;\n }\n\n .editable-cell input {\n border: none;\n outline: none;\n min-width: calc(100%);\n min-height: 0;\n max-height: 100%;\n box-shadow: none !important;\n border-radius: 0;\n }\n\n .editable-cell.align-right input {\n justify-content: right;\n }\n\n &.show-expand-collapse-all {\n .row > .cell-first {\n padding-left: calc(var(--expand-collapse-all-width) + var(--cell-padding) + 0.25rem);\n &.row-reorder-handle,\n &.row-error-column {\n padding: 0;\n }\n &.row-select-handle {\n padding-left: calc(var(--expand-collapse-all-width) + 0.25rem);\n }\n }\n\n .row-container .row > .cell-first {\n &.row-select-handle {\n padding-inline-start: calc(\n var(--expand-collapse-all-width) - var(--cell-padding) + 0.25rem\n );\n }\n }\n\n /* stylelint-enable selector-max-class */\n .expand-collapse-all {\n position: absolute;\n width: var(--expand-collapse-all-width);\n z-index: 10;\n height: var(--row-height);\n background-color: var(--header-bg-color);\n color: var(--header-fg-color);\n border-right: var(--border-style);\n border-bottom: var(--border-style);\n border-start-start-radius: ${theme.base['border-radius']};\n padding-inline-start: 0.125rem;\n margin-inline-start: 0.25rem;\n display: flex;\n align-items: center;\n justify-content: center;\n\n &::before {\n content: '';\n position: absolute;\n inset-block-start: 0;\n inset-inline-start: -0.25rem;\n width: 0.25rem;\n height: 100%;\n background-color: var(--header-bg-color);\n z-index: 12;\n }\n\n > button {\n color: var(--forground-color);\n :focus {\n box-shadow: ${theme.base.shadow.focus};\n }\n }\n }\n .no-border-right {\n border-right: 0;\n }\n }\n\n /* stylelint-disable selector-max-class */\n\n .scroll-end {\n &.row-container > .row:last-child {\n & > .cell,\n & .group-header-aggregation-row > .cell {\n border-bottom: 0;\n }\n }\n }\n\n /* stylelint-enable selector-max-class */\n .header {\n font-weight: var(--font-weight-semi-bold);\n position: relative; /* This is required to position .border-fix element */\n border-start-start-radius: inherit;\n border-start-end-radius: inherit;\n\n > .cell.row-error-column {\n border-right: 0;\n }\n > .cell {\n display: flex;\n justify-content: space-between;\n align-items: center;\n z-index: 2;\n position: relative;\n cursor: pointer;\n background-color: var(--header-bg-color);\n color: var(--header-fg-color);\n font-weight: ${theme.base['font-weight'].bold};\n font-size: ${fontSize.xxs};\n border-right: var(--border-style);\n padding: var(--header-cell-padding);\n\n &:first-child {\n border-start-start-radius: inherit;\n }\n\n &:last-child {\n border-start-end-radius: inherit;\n }\n\n .header-lable-container {\n display: inline-flex;\n overflow: hidden;\n text-overflow: ellipsis;\n font-size: ${fontSize.xs};\n font-weight: var(--font-weight-semi-bold);\n align-items: center;\n gap: 0.125rem;\n }\n\n .header-label {\n overflow: hidden;\n text-overflow: ellipsis;\n\n /* To avoid browser tooltip when we get ellipsis in safari */\n &::after {\n content: '';\n display: block;\n }\n\n /* To utilize smart tooltip making it as a non-box element */\n /* stylelint-disable selector-max-class */\n .cell-content {\n display: contents;\n }\n }\n }\n\n > .row-reorder-handle {\n padding: 0;\n }\n\n > .row-select-handle {\n /* Nullifying padding applied from .header > .cell */\n padding: 0;\n justify-content: center;\n }\n\n > .cell-first {\n padding: 0 var(--cell-padding);\n }\n\n .row {\n border-bottom: none;\n }\n }\n\n /* 4 selectors required as aggregateCell of only footer need this effect */\n\n .pContainer:not(.pContainerScroll) .footer .aggregateCell.cell {\n border-bottom: none;\n }\n\n /* stylelint-enable selector-max-class */\n .row .cell.cell-last {\n border-right: 0;\n flex-grow: 1;\n }\n\n .row-container {\n --data-row-height: calc(\n var(--hit-area) * var(--row-height-multiplier) + var(--cell-vertical-padding)\n );\n --group-header-height: ${isAggregationApplied\n ? 'var(--default-group-header-height)'\n : 'var(--data-row-height)'};\n &:not(.wrap-content-height) > .row:not(.group-header-row) {\n height: var(--data-row-height);\n }\n\n & > .row:not(.group-header-row) {\n min-width: 100%;\n }\n border-end-start-radius: inherit;\n border-end-end-radius: inherit;\n\n & > .row .cell-content {\n /*\n * Using box sizing content-box so that the padding is not considered for the alignment of the cell content.\n * Vertical alignment is done using flex and max-height below even though the .cell-content might overflow due to padding + content size.\n */\n box-sizing: content-box;\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n word-break: break-all;\n flex-grow: 1;\n\n /* Adding padding on .cell-content so that focus rings can appear properly and doesn't clip due to overflow: hidden */\n padding: var(--cell-vertical-padding) var(--cell-padding);\n\n /* setting max-height so that the elements with more height like RTL, align with the row density height */\n max-height: var(--data-row-height);\n\n /* hiding scroll bar in case the cell render introduces scrollbar based on its implementation */\n & * {\n scrollbar-width: none;\n }\n\n /* in case of combine columns, removing padding from parent cell-content as children already have the padding */\n &:has(.combined-cell) {\n padding: 0;\n\n /* stylelint-disable-next-line selector-max-class */\n .cell-content {\n flex-grow: unset;\n }\n }\n }\n }\n\n .row .aggregateCell .cell-content {\n line-height: initial;\n padding: 0;\n }\n\n .short-height,\n .medium-height {\n ${StyledStatus} {\n white-space: nowrap;\n }\n }\n\n .short-height {\n ${StyledRadioCheck} ${StyledLabel} {\n min-height: auto;\n }\n }\n\n .medium-height {\n --row-height-multiplier: 4 / 3;\n }\n\n .tall-height {\n --row-height-multiplier: calc(4 / 3 + 0.5);\n > .row:not(.group-header-row) {\n > .cell {\n display: inline-grid;\n align-items: start;\n white-space: normal;\n word-break: break-all;\n grid-auto-flow: column;\n\n :has(> ${CellIcon}) {\n /* Adds spacing between children when icons are rendered alongside cell content in the cell container. */\n justify-content: space-between;\n }\n\n /* stylelint-disable selector-max-class */\n /* stylelint-disable-next-line selector-max-compound-selectors */\n > .cell-content > .combined-cell > .combined-cell-content,\n > .cell-content {\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 2;\n white-space: inherit;\n word-break: inherit;\n }\n\n ${CellIcon} {\n margin-block-start: 0.375rem;\n }\n }\n }\n }\n\n .wrap-content-height {\n --row-height-multiplier: 4 / 3;\n --row-min-height: calc(\n var(--hit-area) * var(--row-height-multiplier) + var(--cell-vertical-padding) * 2\n );\n --group-header-height: ${isAggregationApplied\n ? 'var(--default-group-header-height)'\n : 'var(--row-min-height)'};\n\n > .row:not(.group-header-row) {\n height: auto;\n min-height: var(--row-min-height);\n > .cell {\n white-space: normal;\n\n /* -- For BUG-625508 -- */\n word-break: break-word;\n display: inline-grid;\n align-items: start;\n padding-top: var(--cell-vertical-padding);\n padding-bottom: var(--cell-vertical-padding);\n grid-auto-flow: column;\n\n :has(> ${CellIcon}) {\n /* Adds spacing between children when icons are rendered alongside cell content in the cell container. */\n justify-content: space-between;\n }\n\n /* stylelint-disable-next-line selector-max-compound-selectors */\n > .cell-content > .combined-cell > .combined-cell-content,\n > .cell-content {\n /* for full-content, the row cells should adjust according to content */\n max-height: none;\n white-space: inherit;\n word-break: inherit;\n }\n\n ${CellIcon} {\n margin-block-start: 0.375rem;\n }\n }\n }\n }\n\n .footer {\n .row {\n .cell {\n padding: 0;\n }\n }\n }\n\n /* stylelint-disable no-duplicate-selectors */\n .row-container {\n position: absolute;\n display: grid;\n width: 100%;\n font-size: ${fontSize.s};\n\n > .group-header-row,\n .hierarchical-group-footer-row {\n height: var(--group-header-height);\n .cell {\n padding: 0;\n border-right-width: 0;\n }\n }\n\n > .hierarchical-group-header-row {\n height: var(--group-header-height);\n }\n input.checkbox-on-hover + label {\n opacity: 0;\n }\n input.checkbox-on-hover:checked + label {\n opacity: 1;\n }\n .row.selected-row {\n background-color: ${selectedRowColor};\n\n > .cell,\n .cell-fixed,\n .cell-action {\n background-color: ${selectedRowColor};\n }\n }\n .row-on-hover:hover {\n background-color: ${lightGreyColor};\n input.checkbox-on-hover + label {\n opacity: 1;\n }\n\n > .cell,\n .cell-fixed,\n .cell-action {\n background-color: ${lightGreyColor};\n }\n }\n .row.hierarchical-group-footer-row {\n .cell-fixed {\n background: ${lightGreyColor};\n }\n }\n }\n\n /* stylelint-enable selector-max-class */\n\n .toolbar-button-applied {\n padding: 0 8px;\n margin: 0 calc(${theme.base.spacing} / 4);\n }\n\n .toolbar-button {\n padding: 0 8px;\n margin: 0 calc(${theme.base.spacing} / 4);\n }\n\n .column-resizer {\n cursor: col-resize;\n position: absolute;\n top: 0;\n right: 0;\n z-index: 3;\n width: 0.25rem;\n height: 100%;\n }\n\n .column-resizer:hover,\n .column-resizer:active {\n background: var(--interactive);\n }\n\n .align-right {\n justify-content: right;\n\n .cell-content {\n text-align: right;\n }\n }\n\n .align-left {\n justify-content: left;\n\n .cell-content {\n text-align: left;\n }\n }\n\n .align-center {\n justify-content: center;\n\n .cell-content {\n text-align: center;\n }\n }\n\n .selection-border {\n border: 0.125rem solid var(--medium-blue) !important;\n }\n\n .disable-select {\n user-select: none; /* supported by Chrome and Firefox */\n -webkit-user-select: none; /* Safari */\n }\n\n .popper {\n div.row {\n display: flex;\n vertical-align: middle;\n line-height: unset;\n border-bottom: none;\n outline: none 0;\n height: auto;\n }\n }\n `;\n});\n\nexport default StyledTableContainer;\n"]}
|
|
1
|
+
{"version":3,"file":"StyledTableContainer.js","sourceRoot":"","sources":["../../../../Core/Views/Table/StyledTableContainer.jsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AACnC,OAAO,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EACL,YAAY,EACZ,uBAAuB,EACvB,GAAG,EACH,aAAa,EACb,cAAc,EACf,MAAM,UAAU,CAAC;AAElB,OAAO,EAAE,YAAY,EAAE,MAAM,sDAAsD,CAAC;AACpF,OAAO,EAAE,gBAAgB,EAAE,MAAM,8DAA8D,CAAC;AAChG,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAEnF,OAAO,EAAE,mCAAmC,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAEjG,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,MAAM,oBAAoB,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,cAAK,GAAG,EAAE,GAAG,KAAM,KAAK,GAAI,CAAC,CAAC,CAAC,CAAC,EAC7F,KAAK,EACL,IAAI,EACJ,YAAY,EACb,EAAE,EAAE;IACH,MAAM,oBAAoB,GAAG,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;IAC1F,MAAM,QAAQ,GAAG,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;IACtF,MAAM,cAAc,GAClB,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE;QACzB,CAAC,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,eAAe,CAAC,CAAC;IAC1E,MAAM,gBAAgB,GAAG,QAAQ,CAAC,GAAG,EAAE,CACrC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CACpF,CAAC;IACF,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC7D,MAAM,2BAA2B,GAAG,cAAc,CAChD,GAAG,EACH,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAClD,CAAC;IACF,MAAM,qBAAqB,GACzB,YAAY,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC,GAAG,GAAG;QAC3E,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC;QAC3D,CAAC,CAAC,GAAG,CACD,IAAI,EACJ,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,EAC/C,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAC1D,CAAC;IAER,MAAM,wBAAwB,GAAG,uBAAuB,CACtD,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,kBAAkB,CAAC,EACjD,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAClD,CAAC,EAAE,CAAC;IACL,MAAM,sBAAsB,GAAG,wBAAwB;QACrD,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,kBAAkB,CAAC;QACnD,CAAC,CAAC,aAAa,CACX,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,kBAAkB,CAAC,EACjD,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAClD,CAAC;IACN,MAAM,cAAc,GAAG,uBAAuB,CAC5C,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,EAC/C,qBAAqB,CACtB,CAAC,EAAE,CAAC;IACL,MAAM,uBAAuB,GAAG,cAAc;QAC5C,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC;QACjD,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,EAAE,qBAAqB,CAAC,CAAC;IAE1F,OAAO,GAAG,CAAA;4BACgB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC;8BACtC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,kBAAkB,CAAC;yBACtD,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC;qBAC1C,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW;qBAC9B,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM;sBAC5B,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;;;;sBAIjC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,cAAc,CAAC;wBAC/C,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,gBAAgB,CAAC;sBACrD,KAAK,CAAC,IAAI,CAAC,OAAO;oCACJ,KAAK,CAAC,IAAI,CAAC,OAAO;;;yBAG7B,sBAAsB;;;;wBAIvB,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI;+BACzB,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,WAAW,CAAC;;;;MAI/D,GAAG,EAAE,CAAC,sBAAsB,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;;;;;;;QAOlD,GAAG,EAAE,CAAC,mCAAmC,EAAE;;4CAEP,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UA+I7D,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,cAAc,CAAC;QACzC,GAAG,CAAA;;SAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAuCC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,cAAc,CAAC;QACxC,GAAG,CAAA;;SAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UA4CC,cAAc;QAChB,GAAG,CAAA;;;+BAGoB,KAAK,CAAC,IAAI,CAAC,OAAO,kBAAkB,2BAA2B;;;SAGrF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;YAkCG,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,cAAc,CAAC;QACxC,GAAG,CAAA;;WAEF;;;;;;;;;;;;MAYL,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,cAAc,CAAC;QACxC,GAAG,CAAA;;;;;;;sBAOe,qBAAqB;iBAC1B,uBAAuB;;wBAEhB,qBAAqB;mBAC1B,uBAAuB;;;wBAGlB,qBAAqB;;;;;;;;;;;;;;;;KAgBxC;;;oBAGe,GAAG,CACf,GAAG,EACH,KAAK,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,EACpD,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,CACzC;;;;;;;;;;;;;;;;iBAgBU,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC;;;;;;;;;;;;;;;;;;;;;;;;iBAwBpC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM;;;;;;0BAMnB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qCAgDnB,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC;;;;;;;;;;;;;;;;;;;;;0BAqBtC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uBAuC1B,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI;qBAChC,QAAQ,CAAC,GAAG;;;;;;;;;;;;;;;;uBAgBV,QAAQ,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+BA2DH,oBAAoB;QAC3C,CAAC,CAAC,oCAAoC;QACtC,CAAC,CAAC,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAqD1B,YAAY;;;;;;QAMZ,gBAAgB,IAAI,WAAW;;;;;;;;;;;;;;;;;;;mBAmBpB,QAAQ;;;;;;;;;;;;;;;;YAgBf,QAAQ;;;;;;;;;;;;+BAYW,oBAAoB;QAC3C,CAAC,CAAC,oCAAoC;QACtC,CAAC,CAAC,uBAAuB;;;;;;;;;;;;;;;;mBAgBd,QAAQ;;;;;;;;;;;;;;YAcf,QAAQ;;;;;;;;;;;;;;;;;;;;mBAoBD,QAAQ,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;4BAqBD,gBAAgB;;;;;8BAKd,gBAAgB;;;;4BAIlB,cAAc;;;;;;;;8BAQZ,cAAc;;;;;wBAKpB,cAAc;;;;;;;;;uBASf,KAAK,CAAC,IAAI,CAAC,OAAO;;;;;uBAKlB,KAAK,CAAC,IAAI,CAAC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDtC,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,eAAe,oBAAoB,CAAC","sourcesContent":["import { forwardRef } from 'react';\nimport styled, { css } from 'styled-components';\nimport {\n getLuminance,\n meetsContrastGuidelines,\n mix,\n readableColor,\n transparentize\n} from 'polished';\n\nimport { StyledStatus } from '@pega/cosmos-react-core/lib/components/Badges/Status';\nimport { StyledRadioCheck } from '@pega/cosmos-react-core/lib/components/RadioCheck/RadioCheck';\nimport { StyledLabel, calculateFontSize, tryCatch } from '@pega/cosmos-react-core';\n\nimport { generateRSDataContainerHeightStyles, generateRSHeightStyles } from '../../Utils/styles';\n\nimport { CellIcon } from './CellWrapper';\n\nconst StyledTableContainer = styled(forwardRef((props, ref) => <div ref={ref} {...props} />))(({\n theme,\n view,\n isFullscreen\n}) => {\n const isAggregationApplied = view.columns?.filter(c => !c.hidden).some(c => c.aggregated);\n const fontSize = calculateFontSize(theme.base['font-size'], theme.base['font-scale']);\n const showFreezeLine =\n view.state.responsive?.sm &&\n !(view.hasNoRecords || view.hasNoFrozenColumns || view.bHideFreezeLine);\n const selectedRowColor = tryCatch(() =>\n mix(0.85, theme.base.palette['primary-background'], theme.base.palette.interactive)\n );\n const lightGreyColor = theme.base.colors.gray['extra-light'];\n const freezeLineShadowTransparent = transparentize(\n 0.9,\n theme.components.table.header['foreground-color']\n );\n const oddRowBackgroundColor =\n getLuminance(theme.components.table.body['secondary-background-color']) > 0.5\n ? theme.components.table.body['secondary-background-color']\n : mix(\n 0.75,\n theme.components.table.body['background-color'],\n theme.components.table.body['secondary-background-color']\n );\n\n const headerForegroundContrast = meetsContrastGuidelines(\n theme.components.table.header['foreground-color'],\n theme.components.table.header['background-color']\n ).AA;\n const usableHeaderForeground = headerForegroundContrast\n ? theme.components.table.header['foreground-color']\n : readableColor(\n theme.components.table.header['foreground-color'],\n theme.components.table.header['background-color']\n );\n const oddRowContrast = meetsContrastGuidelines(\n theme.components.table.body['foreground-color'],\n oddRowBackgroundColor\n ).AA;\n const useableOddRowForeground = oddRowContrast\n ? theme.components.table.body['foreground-color']\n : readableColor(theme.components.table.body['foreground-color'], oddRowBackgroundColor);\n\n return css`\n --primary-background: ${theme.base.palette['primary-background']};\n --secondary-background: ${theme.components.table.header['background-color']};\n --forground-color: ${theme.base.palette['foreground-color']};\n --interactive: ${theme.base.palette.interactive};\n --medium-blue: ${theme.base.colors.blue.medium};\n --border-color: ${theme.base.palette['border-line']};\n --border-color-freeze: #a5a5a5;\n --border-width: 0.062rem;\n --border-style: var(--border-width) solid var(--border-color);\n --font-stretch: ${theme.components.table.typography['font-stretch']};\n --letter-spacing: ${theme.components.table.typography['letter-spacing']};\n --cell-padding: ${theme.base.spacing};\n --cell-vertical-padding: calc(${theme.base.spacing} * 0.5);\n --header-cell-padding: 0 0.125rem 0 var(--cell-padding);\n --header-bg-color: var(--secondary-background);\n --header-fg-color: ${usableHeaderForeground};\n --default-group-header-height: 1.5rem;\n --group-header-height: var(--default-group-header-height);\n --box-sizing: content-box;\n --animation-ease: ${theme.base.animation.timing.ease};\n --font-weight-semi-bold: ${theme.base['font-weight']['semi-bold']};\n --row-height-multiplier: 1.125;\n --cell-fixed-position: sticky;\n position: relative;\n ${() => generateRSHeightStyles({ view, isFullscreen })}\n\n .small-screen-table {\n --cell-fixed-position: static;\n }\n\n .container {\n ${() => generateRSDataContainerHeightStyles()};\n border: var(--border-style);\n border-radius: var(--border-radius, ${theme.base['border-radius']});\n position: relative;\n letter-spacing: var(--letter-spacing);\n font-stretch: var(--font-stretch);\n }\n\n .hide-rows-till-ready .row[aria-rowindex] {\n visibility: hidden;\n }\n\n .table-drag-proxy {\n background: rgba(0, 0, 0, 0.21);\n position: absolute;\n top: 0;\n bottom: 0;\n z-index: 6;\n pointer-events: none;\n display: none;\n }\n\n .table-drag-line {\n background: #999999;\n position: absolute;\n top: 0;\n bottom: 0;\n width: 0.12rem;\n z-index: 6;\n pointer-events: none;\n display: none;\n }\n\n .cell-fixed {\n z-index: 1;\n }\n\n .group-wrapper {\n overflow: hidden;\n display: inline-flex;\n line-height: var(--group-header-height);\n\n .group-context-count {\n display: inline-flex;\n overflow: hidden;\n }\n }\n\n /* In review mode(Ex: Tabs) cosmos components are rendered and mark up is not compatible with\n group-wrapper cell. Overridden css in group-header when dl exists inside that class which indicates\n mark up is generated from cosmos which differentiates from normal table cell markup */\n .group-wrapper .group-context-count dl {\n grid-template-columns: auto;\n }\n\n .fallback,\n .fallback-footer {\n height: var(--row-height);\n background-color: var(--header-bg-color);\n color: var(--header-fg-color);\n position: absolute;\n width: 100%;\n z-index: -1;\n box-sizing: var(--box-sizing);\n }\n\n .fallback {\n /* stylelint-disable unit-allowed-list */\n top: -1px;\n border-bottom: var(--border-style);\n }\n\n .fallback-footer {\n top: 0;\n border-top: var(--border-style);\n }\n\n .sticky-header {\n display: grid;\n position: sticky;\n top: 0;\n z-index: 6;\n border-start-start-radius: inherit;\n border-start-end-radius: inherit;\n }\n\n .cell {\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n\n .icons-ph {\n /* Maintaining action button aspect ratio of 1:1 with 24*24px width and height */\n min-width: 1.5rem;\n }\n\n &.custom-item {\n width: 10em;\n }\n }\n\n .cell:focus {\n outline: 0.125rem auto var(--medium-blue);\n }\n\n .cell.editable-cell:focus {\n outline: none 0;\n }\n\n .editable-cell > span {\n height: 100%;\n display: flex;\n padding: 0 6px;\n align-items: center;\n }\n\n .row {\n display: inline-flex;\n height: var(--row-height);\n outline: none 0;\n transition: transform 0.5s var(--animation-ease);\n box-sizing: var(--box-sizing);\n position: relative;\n\n > .row-select-handle {\n display: flex;\n justify-content: center;\n &:active {\n outline: none;\n }\n\n > .header-lable-container {\n min-width: 20px;\n }\n /* stylelint-disable selector-max-class */\n &.cell-fixed > .cell-content {\n flex-grow: unset;\n }\n }\n\n > .cell,\n .group-header-aggregation-row > .cell {\n transition: transform 0.5s var(--animation-ease);\n border-right: var(--border-style);\n position: relative;\n ${!theme.components.table['striped-rows'] &&\n css`\n border-bottom: var(--border-style);\n `}\n display: flex;\n align-items: center;\n\n &::after {\n opacity: 1;\n transition: opacity 0.1s var(--animation-ease);\n }\n\n .row-action-menu {\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n &.cell-action {\n position: sticky;\n z-index: 4;\n right: 0;\n border-right: 0;\n justify-content: center;\n border-left: var(--border-style);\n\n /* The below styles are needed to avoid ellipses in safari when no text is present\n and to hide the 'Actions' label */\n\n /* stylelint-disable max-nesting-depth */\n\n div.header-label {\n text-overflow: unset;\n }\n }\n &.aggregateCell {\n background-color: var(--header-bg-color);\n }\n }\n\n /** Adds bottom border to the last row of a group, when striped-rows are enabled */\n &:has(+ .group-header-row) > .cell {\n ${theme.components.table['striped-rows'] &&\n css`\n border-bottom: var(--border-style);\n `}\n }\n &.header > .cell {\n border-bottom: var(--border-style);\n }\n .group-header-aggregation-row {\n > .cell {\n &.cell-action {\n overflow: initial;\n\n /* extending border on the top left of row action cell as we need to show border for at the end group label value when row actions are present */\n &::before {\n content: '';\n position: absolute;\n inline-size: 0;\n inset-inline-start: calc(var(--border-width) * -1);\n inset-block-start: calc(var(--group-header-height) * -1);\n block-size: var(--group-header-height);\n border-inline-start: var(--border-style);\n }\n }\n }\n }\n\n > .cell-action {\n background-color: var(--primary-background);\n }\n\n > .row-reorder-handle {\n padding: 0;\n border-right: 0 !important;\n justify-content: center;\n cursor: move;\n }\n\n .aggregateCell.cell {\n border-right: none;\n }\n\n > .cell.cell-fixed,\n .group-header-aggregation-row > .cell-fixed {\n position: var(--cell-fixed-position);\n z-index: 4;\n\n ${showFreezeLine &&\n css`\n &.cell-last-frozen {\n border-right: solid 1px var(--border-color-freeze);\n box-shadow: calc(${theme.base.spacing} * 0.25) 0 0 0 ${freezeLineShadowTransparent};\n transition: 0.5s;\n }\n `}\n\n /* As the row select column and row dragDrop column always have to be frozen */\n &[data-col-id='RowSelect'],\n &[data-col-id='RowDragDrop'],\n &[data-col-id='RowError'] {\n position: sticky;\n flex-shrink: 0;\n z-index: 5;\n }\n }\n\n > .cell.cell-fixed:focus-within,\n .group-header-aggregation-row > .cell-fixed {\n z-index: 6;\n }\n\n &.click {\n cursor: pointer;\n }\n\n &:last-child {\n border-end-start-radius: inherit;\n border-end-end-radius: inherit;\n\n > .cell {\n &:first-child {\n border-end-start-radius: inherit;\n }\n\n &:last-child {\n border-end-end-radius: inherit;\n }\n\n ${theme.components.table['striped-rows'] &&\n css`\n border-bottom: var(--border-style);\n `}\n }\n }\n }\n .row:not(.row-error):not(.group-header-row):not(.header) {\n .cell-fixed {\n background: var(--primary-background);\n }\n .cell-fixed.aggregateCell {\n background: var(--header-bg-color);\n }\n }\n ${theme.components.table['striped-rows'] &&\n css`\n /* Targets rows with an odd data-index attribute, excluding group header rows */\n .row[data-index$='1']:not(.group-header-row):not(.header),\n .row[data-index$='3']:not(.group-header-row):not(.header),\n .row[data-index$='5']:not(.group-header-row):not(.header),\n .row[data-index$='7']:not(.group-header-row):not(.header),\n .row[data-index$='9']:not(.group-header-row):not(.header) {\n background: ${oddRowBackgroundColor};\n color: ${useableOddRowForeground};\n .cell-fixed {\n background: ${oddRowBackgroundColor};\n color: ${useableOddRowForeground};\n }\n > .cell-action {\n background: ${oddRowBackgroundColor};\n }\n }\n .row[data-index$='0']:not(.group-header-row):not(.header),\n .row[data-index$='2']:not(.group-header-row):not(.header),\n .row[data-index$='4']:not(.group-header-row):not(.header),\n .row[data-index$='6']:not(.group-header-row):not(.header),\n .row[data-index$='8']:not(.group-header-row):not(.header) {\n background: var(--primary-background);\n .cell-fixed {\n background: var(--primary-background);\n }\n > .cell-action {\n background: var(--primary-background);\n }\n }\n `}\n\n .row-error {\n background: ${mix(\n 0.1,\n theme.components['form-field'].error['status-color'],\n theme.base.palette['primary-background']\n )};\n\n /* stylelint-disable no-descending-specificity */\n .cell-fixed,\n .cell-action {\n background: inherit;\n }\n\n > .cell:not(.cell-fixed):not(.cell-action) {\n background: none;\n }\n }\n\n .sort-info-container {\n .sort-sequence {\n font-size: 0.625rem;\n color: ${theme.base.colors.gray['extra-dark']};\n }\n }\n\n .filter-info-container {\n display: flex;\n justify-content: center;\n align-items: center;\n\n svg {\n width: 14px;\n height: 14px;\n }\n }\n\n .cell.row-error-column {\n padding: 0;\n border-right: 0;\n text-align: right;\n outline: none;\n\n /* Focus handling will be done as part of interation 2: EPIC-88751 */\n\n svg {\n color: ${theme.base.colors.red.medium};\n }\n }\n\n .editable-cell {\n padding: 0;\n border: 2px solid ${theme.base.palette.interactive} !important;\n box-shadow: 0 0 1px 1px rgba(0, 118, 209) !important;\n }\n\n .editable-cell input {\n border: none;\n outline: none;\n min-width: calc(100%);\n min-height: 0;\n max-height: 100%;\n box-shadow: none !important;\n border-radius: 0;\n }\n\n .editable-cell.align-right input {\n justify-content: right;\n }\n\n &.show-expand-collapse-all {\n .row > .cell-first {\n padding-left: calc(var(--expand-collapse-all-width) + var(--cell-padding) + 0.25rem);\n &.row-reorder-handle,\n &.row-error-column {\n padding: 0;\n }\n &.row-select-handle {\n padding-left: calc(var(--expand-collapse-all-width) + 0.25rem);\n }\n }\n\n .row-container .row > .cell-first {\n &.row-select-handle {\n padding-inline-start: calc(\n var(--expand-collapse-all-width) - var(--cell-padding) + 0.25rem\n );\n }\n }\n\n /* stylelint-enable selector-max-class */\n .expand-collapse-all {\n position: absolute;\n width: var(--expand-collapse-all-width);\n z-index: 10;\n height: var(--row-height);\n background-color: var(--header-bg-color);\n color: var(--header-fg-color);\n border-right: var(--border-style);\n border-bottom: var(--border-style);\n border-start-start-radius: ${theme.base['border-radius']};\n padding-inline-start: 0.125rem;\n margin-inline-start: 0.25rem;\n display: flex;\n align-items: center;\n justify-content: center;\n\n &::before {\n content: '';\n position: absolute;\n inset-block-start: 0;\n inset-inline-start: -0.25rem;\n width: 0.25rem;\n height: 100%;\n background-color: var(--header-bg-color);\n z-index: 12;\n }\n\n > button {\n color: var(--forground-color);\n :focus {\n box-shadow: ${theme.base.shadow.focus};\n }\n }\n }\n .no-border-right {\n border-right: 0;\n }\n }\n\n /* stylelint-disable selector-max-class */\n\n .scroll-end {\n &.row-container > .row:last-child {\n & > .cell,\n & .group-header-aggregation-row > .cell {\n border-bottom: 0;\n }\n }\n }\n\n /* stylelint-enable selector-max-class */\n .header {\n font-weight: var(--font-weight-semi-bold);\n position: relative; /* This is required to position .border-fix element */\n border-start-start-radius: inherit;\n border-start-end-radius: inherit;\n\n > .cell.row-error-column {\n border-right: 0;\n }\n > .cell {\n display: flex;\n justify-content: space-between;\n align-items: center;\n z-index: 2;\n position: relative;\n cursor: pointer;\n background-color: var(--header-bg-color);\n color: var(--header-fg-color);\n font-weight: ${theme.base['font-weight'].bold};\n font-size: ${fontSize.xxs};\n border-right: var(--border-style);\n padding: var(--header-cell-padding);\n\n &:first-child {\n border-start-start-radius: inherit;\n }\n\n &:last-child {\n border-start-end-radius: inherit;\n }\n\n .header-lable-container {\n display: inline-flex;\n overflow: hidden;\n text-overflow: ellipsis;\n font-size: ${fontSize.xs};\n font-weight: var(--font-weight-semi-bold);\n align-items: center;\n gap: 0.125rem;\n }\n\n .header-label {\n overflow: hidden;\n text-overflow: ellipsis;\n\n /* To avoid browser tooltip when we get ellipsis in safari */\n &::after {\n content: '';\n display: block;\n }\n\n /* To utilize smart tooltip making it as a non-box element */\n /* stylelint-disable selector-max-class */\n .cell-content {\n display: contents;\n }\n }\n }\n\n > .row-reorder-handle {\n padding: 0;\n }\n\n > .row-select-handle {\n /* Nullifying padding applied from .header > .cell */\n padding: 0;\n justify-content: center;\n }\n\n > .cell-first {\n padding: 0 var(--cell-padding);\n }\n\n .row {\n border-bottom: none;\n }\n }\n\n /* 4 selectors required as aggregateCell of only footer need this effect */\n\n .pContainer:not(.pContainerScroll) .footer .aggregateCell.cell {\n border-bottom: none;\n }\n\n /* stylelint-enable selector-max-class */\n .row .cell.cell-last {\n border-right: 0;\n flex-grow: 1;\n }\n\n .row-container {\n --data-row-height: calc(\n var(--hit-area) * var(--row-height-multiplier) + var(--cell-vertical-padding)\n );\n --group-header-height: ${isAggregationApplied\n ? 'var(--default-group-header-height)'\n : 'var(--data-row-height)'};\n &:not(.wrap-content-height) > .row:not(.group-header-row) {\n height: var(--data-row-height);\n }\n\n & > .row:not(.group-header-row) {\n min-width: 100%;\n }\n border-end-start-radius: inherit;\n border-end-end-radius: inherit;\n\n & > .row .cell-content {\n /*\n * Using box sizing content-box so that the padding is not considered for the alignment of the cell content.\n * Vertical alignment is done using flex and max-height below even though the .cell-content might overflow due to padding + content size.\n */\n box-sizing: content-box;\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n word-break: break-all;\n flex-grow: 1;\n\n /* Adding padding on .cell-content so that focus rings can appear properly and doesn't clip due to overflow: hidden */\n padding: var(--cell-vertical-padding) var(--cell-padding);\n\n /* setting max-height so that the elements with more height like RTL, align with the row density height */\n max-height: var(--data-row-height);\n\n /* hiding scroll bar in case the cell render introduces scrollbar based on its implementation */\n & * {\n scrollbar-width: none;\n }\n\n /* in case of combine columns, removing padding from parent cell-content as children already have the padding */\n &:has(.combined-cell) {\n padding: 0;\n\n /* stylelint-disable-next-line selector-max-class */\n .cell-content {\n flex-grow: unset;\n }\n }\n }\n }\n\n .row .aggregateCell .cell-content {\n line-height: initial;\n padding: 0;\n }\n\n .short-height,\n .medium-height {\n ${StyledStatus} {\n white-space: nowrap;\n }\n }\n\n .short-height {\n ${StyledRadioCheck} ${StyledLabel} {\n min-height: auto;\n }\n }\n\n .medium-height {\n --row-height-multiplier: 4 / 3;\n }\n\n .tall-height {\n --row-height-multiplier: calc(4 / 3 + 0.5);\n > .row:not(.group-header-row) {\n > .cell {\n display: inline-grid;\n align-items: start;\n white-space: normal;\n word-break: break-all;\n grid-auto-flow: column;\n\n :has(> ${CellIcon}) {\n /* Adds spacing between children when icons are rendered alongside cell content in the cell container. */\n justify-content: space-between;\n }\n\n /* stylelint-disable selector-max-class */\n /* stylelint-disable-next-line selector-max-compound-selectors */\n > .cell-content > .combined-cell > .combined-cell-content,\n > .cell-content {\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 2;\n white-space: inherit;\n word-break: inherit;\n }\n\n ${CellIcon} {\n margin-block-start: 0.375rem;\n }\n }\n }\n }\n\n .wrap-content-height {\n --row-height-multiplier: 4 / 3;\n --row-min-height: calc(\n var(--hit-area) * var(--row-height-multiplier) + var(--cell-vertical-padding) * 2\n );\n --group-header-height: ${isAggregationApplied\n ? 'var(--default-group-header-height)'\n : 'var(--row-min-height)'};\n\n > .row:not(.group-header-row) {\n height: auto;\n min-height: var(--row-min-height);\n > .cell {\n white-space: normal;\n\n /* -- For BUG-625508 -- */\n word-break: break-word;\n display: inline-grid;\n align-items: start;\n padding-top: var(--cell-vertical-padding);\n padding-bottom: var(--cell-vertical-padding);\n grid-auto-flow: column;\n\n :has(> ${CellIcon}) {\n /* Adds spacing between children when icons are rendered alongside cell content in the cell container. */\n justify-content: space-between;\n }\n\n /* stylelint-disable-next-line selector-max-compound-selectors */\n > .cell-content > .combined-cell > .combined-cell-content,\n > .cell-content {\n /* for full-content, the row cells should adjust according to content */\n max-height: none;\n white-space: inherit;\n word-break: inherit;\n }\n\n ${CellIcon} {\n margin-block-start: 0.375rem;\n }\n }\n }\n }\n\n .footer {\n .row {\n .cell {\n padding: 0;\n }\n }\n }\n\n /* stylelint-disable no-duplicate-selectors */\n .row-container {\n position: absolute;\n display: grid;\n width: 100%;\n font-size: ${fontSize.s};\n\n > .group-header-row,\n .hierarchical-group-footer-row {\n height: var(--group-header-height);\n .cell {\n padding: 0;\n border-right-width: 0;\n }\n }\n\n > .hierarchical-group-header-row {\n height: var(--group-header-height);\n }\n input.checkbox-on-hover + label {\n opacity: 0;\n }\n input.checkbox-on-hover:checked + label {\n opacity: 1;\n }\n .row.selected-row {\n background-color: ${selectedRowColor};\n\n > .cell,\n .cell-fixed,\n .cell-action {\n background-color: ${selectedRowColor};\n }\n }\n .row-on-hover:hover {\n background-color: ${lightGreyColor};\n input.checkbox-on-hover + label {\n opacity: 1;\n }\n\n > .cell,\n .cell-fixed,\n .cell-action {\n background-color: ${lightGreyColor};\n }\n }\n .row.hierarchical-group-footer-row {\n .cell-fixed {\n background: ${lightGreyColor};\n }\n }\n }\n\n /* stylelint-enable selector-max-class */\n\n .toolbar-button-applied {\n padding: 0 8px;\n margin: 0 calc(${theme.base.spacing} / 4);\n }\n\n .toolbar-button {\n padding: 0 8px;\n margin: 0 calc(${theme.base.spacing} / 4);\n }\n\n .column-resizer {\n cursor: col-resize;\n position: absolute;\n top: 0;\n right: 0;\n z-index: 3;\n width: 0.25rem;\n height: 100%;\n }\n\n .column-resizer:hover,\n .column-resizer:active {\n background: var(--interactive);\n }\n\n .align-right {\n justify-content: right;\n\n .cell-content {\n text-align: right;\n }\n }\n\n .align-left {\n justify-content: left;\n\n .cell-content {\n text-align: left;\n }\n }\n\n .align-center {\n justify-content: center;\n\n .cell-content {\n text-align: center;\n }\n }\n\n .popper {\n div.row {\n display: flex;\n vertical-align: middle;\n line-height: unset;\n border-bottom: none;\n outline: none 0;\n height: auto;\n }\n }\n `;\n});\n\nexport default StyledTableContainer;\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableA11y.d.ts","sourceRoot":"","sources":["../../../../Core/Views/Table/TableA11y.js"],"names":[],"mappings":";AA6BA;IACE,gLAoBC;IARC,4BAAwB;IACxB,qBAA2B;IAC3B,oBAAqB;IACrB,4BAA+B;IAC/B,oBAAoC;IACpC,eAA0B;IAC1B,+BAAkC;IAClC,uBAA0B;IAG5B,cAGC;IAED,wEAaC;IAED,8CAEC;IAED,kCAIC;IAED,6EAkBC;IAGD,wEA8BC;IAGD,gFA+BC;IAGD,iFA4BC;IAED,gFAYC;IAGD,wDAkBC;IAED,qGAmCC;IAED,yFASC;IAED,6CAsCC;IAED,+CAWC;IAED,
|
|
1
|
+
{"version":3,"file":"TableA11y.d.ts","sourceRoot":"","sources":["../../../../Core/Views/Table/TableA11y.js"],"names":[],"mappings":";AA6BA;IACE,gLAoBC;IARC,4BAAwB;IACxB,qBAA2B;IAC3B,oBAAqB;IACrB,4BAA+B;IAC/B,oBAAoC;IACpC,eAA0B;IAC1B,+BAAkC;IAClC,uBAA0B;IAG5B,cAGC;IAED,wEAaC;IAED,8CAEC;IAED,kCAIC;IAED,6EAkBC;IAGD,wEA8BC;IAGD,gFA+BC;IAGD,iFA4BC;IAED,gFAYC;IAGD,wDAkBC;IAED,qGAmCC;IAED,yFASC;IAED,6CAsCC;IAED,+CAWC;IAED,kCAQC;IAED,6EAYC;IAGD,2CAKC;IAED,4GAeC;IAED,2JAkCC;IAGD,sIAmCC;IAED,0CAIC;IAED,qCAwCC;IAED,wFAsBC;IAED,+BAWC;IAED,kCAcC;IAED,sCAeC;IAED,6CAoBC;IAED,qCAkBC;IAGD,8BAkFC;IAmBD,qDAWC;IAED,+CAIC;IAED,4BA8BC;IAED,+BAEC;IAED,qCAcC;IAED,sEAqCC;CACF;yBA9zB4C,gCAAgC"}
|
|
@@ -289,8 +289,9 @@ class TableA11y extends BaseA11y {
|
|
|
289
289
|
return true;
|
|
290
290
|
}
|
|
291
291
|
stopEventHandler(event) {
|
|
292
|
-
return (
|
|
293
|
-
event.target.
|
|
292
|
+
return (event.target.getAttribute('data-context-menu-active') === 'true' ||
|
|
293
|
+
(!event.target.closest(this.selectors.stickyGroupHeaderSelector) &&
|
|
294
|
+
event.target.getAttribute('aria-expanded')) === 'true' ||
|
|
294
295
|
event.target.closest('.popper') ||
|
|
295
296
|
!Object.values(this.keys).includes(event.keyCode));
|
|
296
297
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableA11y.js","sourceRoot":"","sources":["../../../../Core/Views/Table/TableA11y.js"],"names":[],"mappings":"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","sourcesContent":["import { BaseA11y, rowErrorColumnMeta } from 'pega-repeating-structures-core';\n\nconst sortOrder = {\n row: 'aria-rowindex',\n column: 'aria-colindex'\n};\n\nconst TAB_INDEX = 'tabindex';\nconst DATA_INDEX = 'data-index';\nconst HEADER_MENU = '.header-menu';\nconst HEADER = 'header';\nconst ARIA_DESCRIBEDBY = 'aria-describedby';\n\nfunction gainFocus(element) {\n element.setAttribute(TAB_INDEX, 0);\n element.focus();\n}\n\nfunction getHeaderColumnToFocusOnCtrlHome(columns) {\n return columns.find(column => {\n return !!column.querySelector(HEADER_MENU);\n });\n}\n\nfunction setFocusToFocusableElementOrCell(focusableElements, cell) {\n if (focusableElements.length === 1) focusableElements[0].focus();\n else gainFocus(cell);\n}\n\nclass TableA11y extends BaseA11y {\n constructor(\n selectors,\n focusableSelectors,\n // eslint-disable-next-line default-param-last\n customKeys = {},\n container,\n announcePolite,\n translate,\n actionableSelectors,\n ariaLabel\n ) {\n super(selectors, focusableSelectors, customKeys, container, actionableSelectors, ariaLabel);\n this.nextRowIndex = null;\n this.nextColumnIndex = null;\n this.targetIndex = -2;\n this.ctrlHomeKeyPressed = false;\n this.announcePolite = announcePolite;\n this.translate = translate;\n this.isTableLoaderFocussed = false;\n this.dataEntryMode = false;\n }\n\n reset() {\n this.nextRowIndex = null;\n this.nextColumnIndex = null;\n }\n\n getFocusableElementsInCell(column, isCalledFromEsc = false) {\n if (column) {\n const scalarListTag = '.scalarlist-component';\n const scalarListComponent = column.querySelector(scalarListTag);\n if (scalarListComponent) return [scalarListComponent];\n const elementsInColumn = column.querySelectorAll(\n this.focusableSelectors.concat(this.actionableSelectors).join(',')\n );\n if (!isCalledFromEsc && elementsInColumn.length > 1) {\n return [];\n }\n return column.querySelectorAll(this.focusableSelectors.join(','));\n }\n }\n\n getActionableElementsInCell(column) {\n return column.querySelectorAll(this.actionableSelectors.join(','));\n }\n\n getSortedColumns(row) {\n return [...row.querySelectorAll(this.selectors.focusElementSelector)].sort(\n (colA, colB) => colA.getAttribute(sortOrder.column) - colB.getAttribute(sortOrder.column)\n );\n }\n\n handleRightKeyPressForExpandCollapseAll(selectAllSelector) {\n const row = this.container.querySelector(this.selectors.parentElementSelector);\n let firstActionMenuSelector;\n if (row) {\n const sortedColumns = this.getSortedColumns(row);\n if (sortedColumns.length > 0) {\n const firstSortedColumnSelector = sortedColumns[0];\n firstActionMenuSelector = this.getFocusableElementsInCell(firstSortedColumnSelector);\n if (firstActionMenuSelector.length > 0) {\n return gainFocus(firstActionMenuSelector[0]);\n }\n const selectAllCheckboxSelector = this.container.querySelectorAll(selectAllSelector);\n if (selectAllCheckboxSelector.length === 0 && firstActionMenuSelector.length === 0) {\n return gainFocus(firstSortedColumnSelector);\n }\n }\n }\n return null;\n }\n\n // Below method is added to handle key events for expand and collapse all button\n handleExpandCollapseAllEvents(event, selectAllSelector) {\n const { keyCode, shiftKey } = event;\n switch (keyCode) {\n case this.keys.RIGHT: {\n event.preventDefault();\n this.handleRightKeyPressForExpandCollapseAll(selectAllSelector);\n break;\n }\n case this.keys.DOWN: {\n event.preventDefault();\n const stickyCells = this.container.querySelector(this.selectors.stickyGroupHeaderSelector);\n const nextfirstCell = stickyCells;\n const nextfirstCellChild = nextfirstCell.nextSibling;\n gainFocus(nextfirstCellChild);\n break;\n }\n case this.keys.UP:\n case this.keys.LEFT:\n event.preventDefault();\n break;\n case this.keys.TAB: {\n const currentCol = this.container\n .getRootNode()\n .activeElement.closest(this.selectors.focusElementSelector);\n this.containerTabHandler(event, currentCol, shiftKey);\n break;\n }\n default:\n break;\n }\n }\n\n // Below method is added to add/remove aria-label for rows with errors. Aria-label is added on first focus and removed if traversing in the same row\n handleAnnouncementForErrors(nextItem, currentCol, keyCode) {\n let elementWithErrorMessage = currentCol.querySelector('[data-error-message-set]');\n elementWithErrorMessage = currentCol.dataset.errorMessageSet\n ? currentCol\n : elementWithErrorMessage;\n const ARIA_LABEL = 'aria-label';\n if (elementWithErrorMessage) {\n const { ariaLabel: previousAriaLabel } = elementWithErrorMessage.dataset ?? {};\n if (previousAriaLabel) elementWithErrorMessage.setAttribute(ARIA_LABEL, previousAriaLabel);\n else elementWithErrorMessage.removeAttribute(ARIA_LABEL);\n }\n\n if (\n (keyCode !== this.keys.UP && keyCode !== this.keys.DOWN) ||\n nextItem\n .closest(this.selectors.focusElementSelector)\n ?.classList.contains(rowErrorColumnMeta.options.classList[0])\n )\n return;\n\n let errorMessage = nextItem.closest(this.selectors.parentElementSelector)?.dataset.errorMessage;\n if (errorMessage) {\n if (!nextItem.classList.contains(this.selectors.focusElementSelector.split('.')[1])) {\n if (nextItem.hasAttribute(ARIA_LABEL)) {\n errorMessage += `, ${nextItem.getAttribute(ARIA_LABEL)}`;\n nextItem.dataset.ariaLabel = nextItem.getAttribute(ARIA_LABEL);\n } else errorMessage += `, ${nextItem.textContent}`;\n }\n nextItem.setAttribute(ARIA_LABEL, errorMessage);\n nextItem.dataset.errorMessageSet = true;\n }\n }\n\n // Below method is added to set the focus on expand and collapse all button if left arrow key is pressed from actions button or select all checkbox\n handleKeyleftForButtonMoreSelectAll(event, selectAllSelector) {\n const { keyCode } = event;\n const row = this.container.querySelector(this.selectors.parentElementSelector);\n let firstActionMenuSelector;\n if (row) {\n const sortedColumns = this.getSortedColumns(row);\n if (sortedColumns.length > 0) {\n const firstSortedColumnSelector = sortedColumns[0];\n firstActionMenuSelector = this.getFocusableElementsInCell(firstSortedColumnSelector);\n const selectAllCheckboxSelector = this.container.querySelectorAll(selectAllSelector);\n if (\n ((firstActionMenuSelector.length > 0 && event.target === firstActionMenuSelector[0]) ||\n (selectAllCheckboxSelector.length === 0 &&\n firstActionMenuSelector.length === 0 &&\n event.target === firstSortedColumnSelector)) &&\n keyCode === this.keys.LEFT &&\n this.container.querySelector(this.selectors.expandCollpaseAll)\n ) {\n const expandCollapseSelector = this.container.querySelector(\n this.selectors.expandCollpaseAll\n );\n const expandCollapseButton = this.getFocusableElementsInCell(expandCollapseSelector);\n gainFocus(expandCollapseButton[0]);\n return true;\n }\n }\n }\n return false;\n }\n\n handleScrollOnUpArrowForGroupHeaders(event, pContainerSelector) {\n const pContainer = this.container.querySelector(pContainerSelector);\n if (\n pContainer &&\n event.keyCode === this.keys.UP &&\n event.target.getBoundingClientRect().y -\n (pContainer.firstChild.getBoundingClientRect().y +\n pContainer.firstChild.getBoundingClientRect().height) <\n event.target.getBoundingClientRect().height * 2\n ) {\n pContainer.scrollTop -= event.target.getBoundingClientRect().height * 2;\n }\n }\n\n // Used to update this.targetIndex on keydown which is later used by handleGroupHeaderEvents\n updateTargetColumnIndexForGroupHeader(event) {\n const { target, keyCode } = event;\n if (\n this.targetIndex === null ||\n this.targetIndex === -1 ||\n keyCode === this.keys.UP ||\n keyCode === this.keys.DOWN\n ) {\n if (target.closest(this.selectors.expandCollpaseAll)) {\n this.targetIndex = -1;\n return;\n }\n const cell = target.closest(this.selectors.focusElementSelector);\n let row = target.closest(this.selectors.parentElementSelector);\n row = this.getSortedColumns(row);\n\n this.targetIndex = [...row].indexOf(cell);\n }\n }\n\n handleUpDownKeyPressForGroupHeader(keyCode, target, cellToFocus, event) {\n // If the group header is at the last row and DOWN key is press then\n if (\n keyCode === this.keys.DOWN &&\n target.closest(this.selectors.parentElementSelector).nextElementSibling === null\n ) {\n // if footer exists\n const footer = this.container.querySelector(this.selectors.footer);\n const index = this.targetIndex < 0 ? 0 : this.targetIndex;\n if (footer) {\n const cell = this.getSortedColumns(\n footer.querySelector(this.selectors.parentElementSelector)\n )[index];\n setFocusToFocusableElementOrCell(this.getFocusableElementsInCell(cell), cell);\n }\n return true;\n }\n // If the focus came to the group header from the expand all button\n if (keyCode === this.keys.UP && this.targetIndex === -1) {\n this.container.querySelector(this.selectors.expandCollpaseAll).children[0].focus();\n } else {\n event.preventDefault();\n // If initially the group header is clicked and the keyboard is used\n if (cellToFocus && !cellToFocus.hasAttribute('tabindex')) {\n cellToFocus.setAttribute('tabindex', -1);\n }\n // Flushing the -1 index\n if (keyCode === this.keys.DOWN && this.targetIndex === -1) {\n this.targetIndex = 0;\n }\n if (cellToFocus) {\n cellToFocus.focus();\n }\n }\n return true;\n }\n\n handleLeftRightKeyPressForGroupHeader(keyCode, target, cellToFocus) {\n if (cellToFocus && !cellToFocus.hasAttribute('tabindex')) {\n cellToFocus.setAttribute('tabindex', -1);\n }\n\n if (!this.targetIndex) this.targetIndex = 0;\n if (cellToFocus) {\n setFocusToFocusableElementOrCell(this.getFocusableElementsInCell(cellToFocus), cellToFocus);\n }\n }\n\n handleGroupHeaderEvents(event) {\n const { keyCode, target, ctrlKey } = event;\n const index = this.targetIndex < 0 ? 0 : this.targetIndex;\n const cellToFocus = this.getSortedColumns(target.closest(this.selectors.parentElementSelector))[\n index\n ];\n\n switch (keyCode) {\n case this.keys.UP:\n case this.keys.DOWN: {\n return this.handleUpDownKeyPressForGroupHeader(keyCode, target, cellToFocus, event);\n }\n case this.keys.RIGHT:\n {\n // To Prevent Scrolling\n event.preventDefault();\n const row = target.closest(this.selectors.parentElementSelector);\n if (row.querySelector('.aggregate-button')) {\n const firstFocusableElementInRow = this.getSortedColumns(row)[0];\n this.handleLeftRightKeyPressForGroupHeader(keyCode, target, firstFocusableElementInRow);\n return false;\n }\n }\n break;\n case this.keys.TAB:\n if (cellToFocus) {\n cellToFocus.focus();\n }\n break;\n case this.keys.HOME:\n if (ctrlKey) {\n this.handleCtrlHomeKeypress();\n }\n break;\n default:\n break;\n }\n return true;\n }\n\n checkEventsForGroupHeader(event) {\n if (\n event.target &&\n (event.target.closest(this.selectors.focusElementSelector) ||\n event.target.closest(this.selectors.expandCollpaseAll))\n ) {\n this.updateTargetColumnIndexForGroupHeader(event);\n } else if (event.target && event.target.closest(this.selectors.stickyGroupHeaderSelector)) {\n return this.handleGroupHeaderEvents(event);\n }\n return true;\n }\n\n stopEventHandler(event) {\n return (\n (!event.target.closest(this.selectors.stickyGroupHeaderSelector) &&\n event.target.getAttribute('aria-expanded')) === 'true' ||\n event.target.closest('.popper') ||\n !Object.values(this.keys).includes(event.keyCode)\n );\n }\n\n handleLeftKeyPressOnAggregateCells(target, aggregateCell) {\n const firstCell = this.getSortedColumns(\n target.closest(this.selectors.parentElementSelector)\n )[0];\n if (firstCell === target.closest(aggregateCell)) {\n const groupHeaderButton = target\n .closest(this.selectors.parentElementSelector)\n ?.querySelector('.stickyGroupHeader > button');\n groupHeaderButton.focus();\n return false;\n }\n return true;\n }\n\n // eslint-disable-next-line class-methods-use-this\n isAccessibleElement(element) {\n return (\n !(element.hasAttribute('aria-hidden') && element.getAttribute('aria-hidden') === 'true') &&\n !(element.hasAttribute(TAB_INDEX) && element.getAttribute(TAB_INDEX) === '-1')\n );\n }\n\n getNextAccessibleElement(cellInputableElements, shiftKey = false, currentElementIndex = -1) {\n if (shiftKey) {\n cellInputableElements = [...cellInputableElements]\n .reverse()\n .slice(\n currentElementIndex !== -1 ? cellInputableElements.length - currentElementIndex : 0,\n cellInputableElements.length\n );\n } else {\n cellInputableElements = [...cellInputableElements].slice(\n currentElementIndex + 1,\n cellInputableElements.length\n );\n }\n return cellInputableElements.find(element => this.isAccessibleElement(element));\n }\n\n getAdjacentColumnCell(\n shiftKey,\n currentColumnIndex,\n currentEleParentIndex,\n sortedColumns,\n parentElements,\n currentCol\n ) {\n let nextColumnCell = null;\n if (shiftKey) {\n if (currentColumnIndex - 1 >= 0) {\n nextColumnCell = sortedColumns[sortedColumns.indexOf(currentCol) - 1];\n } else if (currentEleParentIndex - 1 >= 0) {\n sortedColumns = [\n ...parentElements[currentEleParentIndex - 1].querySelectorAll(\n this.selectors.focusElementSelector\n )\n ];\n currentEleParentIndex -= 1;\n nextColumnCell = sortedColumns[sortedColumns.length - 1];\n }\n } else if (currentColumnIndex + 1 < sortedColumns.length) {\n nextColumnCell = sortedColumns[sortedColumns.indexOf(currentCol) + 1];\n } else if (currentEleParentIndex + 1 < parentElements.length) {\n sortedColumns = [\n ...parentElements[currentEleParentIndex + 1].querySelectorAll(\n this.selectors.focusElementSelector\n )\n ];\n currentEleParentIndex += 1;\n\n nextColumnCell = sortedColumns[0];\n }\n return [nextColumnCell, sortedColumns, currentEleParentIndex];\n }\n\n // This method is to recursively find the next column cell with actionable or focusable elements and skip any empty cells\n getNextColumnCellInTaborder(\n sortedColumns,\n currentCol,\n shiftKey,\n parentElements,\n currentEleParentIndex\n ) {\n if (!currentCol) {\n return null;\n }\n let nextColumnCell = null;\n const currentColumnIndex = sortedColumns.indexOf(currentCol);\n [nextColumnCell, sortedColumns, currentEleParentIndex] = this.getAdjacentColumnCell(\n shiftKey,\n currentColumnIndex,\n currentEleParentIndex,\n sortedColumns,\n parentElements,\n currentCol\n );\n const elements =\n nextColumnCell &&\n nextColumnCell.querySelectorAll(\n [...this.actionableSelectors, ...this.focusableSelectors].join(',')\n );\n if (elements?.length) {\n return nextColumnCell;\n }\n return this.getNextColumnCellInTaborder(\n sortedColumns,\n nextColumnCell,\n shiftKey,\n parentElements,\n currentEleParentIndex\n );\n }\n\n isFocusableElement(element) {\n const colItem = element?.closest(this.selectors.focusElementSelector);\n if (!colItem) return false;\n return [...colItem.querySelectorAll(this.focusableSelectors.join(','))].includes(element);\n }\n\n handleTabKey(shiftKey) {\n const parentElements = this.container.querySelectorAll(this.selectors.parentElementSelector);\n const rootNode = this.container.getRootNode();\n const currentCol = rootNode.activeElement?.closest(this.selectors.focusElementSelector);\n const currentEleParentIndex = [...parentElements].indexOf(\n currentCol.closest(this.selectors.parentElementSelector)\n );\n const currentColumnElements = Array.from(\n currentCol.querySelectorAll(\n [...this.actionableSelectors, ...this.focusableSelectors].join(',')\n )\n );\n const currentEleIndex = currentColumnElements.indexOf(rootNode.activeElement);\n\n const sortedColumns = this.getSortedColumns(\n currentCol.closest(this.selectors.parentElementSelector)\n );\n\n const nextColumnCell = this.getNextColumnCellInTaborder(\n sortedColumns,\n currentCol,\n shiftKey,\n parentElements,\n currentEleParentIndex\n );\n\n if (\n (!shiftKey && currentEleIndex + 1 < currentColumnElements.length) ||\n (shiftKey && currentEleIndex - 1 >= 0)\n ) {\n return false;\n }\n if (nextColumnCell) {\n const nextColumnCellElements = nextColumnCell.querySelectorAll(\n [...this.actionableSelectors, ...this.focusableSelectors].join(',')\n );\n if (nextColumnCellElements.length !== 0) return false;\n }\n this.updateDataEntry();\n return true;\n }\n\n updateDataEntry(updateForHandler, focusElements, nextFocusElement) {\n switch (updateForHandler) {\n case 'click':\n if (focusElements.length === 1) {\n const hasFocusableElement = Array.from(focusElements).some(element =>\n this.focusableSelectors.some(selector => element.matches(selector))\n );\n this.dataEntryMode = !hasFocusableElement;\n } else if (nextFocusElement) {\n this.dataEntryMode = true;\n } else {\n this.dataEntryMode = false;\n }\n break;\n\n case 'enter':\n this.dataEntryMode = true;\n break;\n\n default:\n this.dataEntryMode = false;\n }\n }\n\n clickHandler(event) {\n const cell = event?.target?.closest(this.selectors.focusElementSelector);\n if (cell && cell !== event.target) {\n const focusElements = cell.querySelectorAll(\n this.focusableSelectors.concat(this.actionableSelectors).join(',')\n );\n const nextFocusElement = this.getNextAccessibleElement(focusElements);\n this.updateDataEntry('click', focusElements, nextFocusElement);\n } else {\n this.updateDataEntry();\n }\n }\n\n handleEnterKey(target) {\n const focusElements = target.querySelectorAll(\n this.focusableSelectors.concat(this.actionableSelectors).join(',')\n );\n const nextFocusElement = this.getNextAccessibleElement(focusElements);\n // register escape event for RTE to support event bubbling\n if (nextFocusElement?.nodeName === 'IFRAME') {\n this.registerEscapeEventForRTE(nextFocusElement);\n target.tabIndex = -1;\n } else if (nextFocusElement) {\n this.updateDataEntry('enter');\n gainFocus(nextFocusElement);\n target.tabIndex = -1;\n }\n }\n\n handleEscapeKey(target) {\n const cell = target.closest(this.selectors.focusElementSelector);\n if (\n cell &&\n (this.getFocusableElementsInCell(cell, true).length > 1 ||\n this.getActionableElementsInCell(cell).length >= 1)\n ) {\n this.updateDataEntry();\n gainFocus(cell);\n }\n if (this.getFocusableElementsInCell(cell, true).length === 1) {\n this.updateDataEntry();\n }\n\n return !cell;\n }\n\n registerEscapeEventForRTE(target) {\n const iframeContent = target.contentWindow || target.contentDocument;\n if (iframeContent?.document) {\n this.updateDataEntry('enter');\n iframeContent.document.querySelector(\"[contenteditable='true']\").focus();\n if (!iframeContent.document.escapeKeyHandlerInjected) {\n iframeContent.document.addEventListener('keydown', event => {\n if (event.keyCode === this.keys.ESCAPE) {\n const escapeEvent = new KeyboardEvent('keydown', {\n key: 'Escape',\n code: 'Escape',\n keyCode: this.keys.ESCAPE,\n bubbles: true\n });\n target.dispatchEvent(escapeEvent);\n }\n });\n }\n iframeContent.document.escapeKeyHandlerInjected = true;\n }\n }\n\n tableLoaderHandler(event) {\n const { keyCode } = event;\n switch (keyCode) {\n case this.keys.LEFT:\n case this.keys.RIGHT:\n case this.keys.UP:\n case this.keys.DOWN: {\n event.preventDefault();\n break;\n }\n case this.keys.TAB: {\n this.tabHandler(event);\n this.isTableLoaderFocussed = false;\n break;\n }\n default:\n break;\n }\n }\n\n // Below method is overridden to handle key events for expand and collapse all button, group headers\n a11yHandler(event) {\n const buttonMoreSelector = '.button-more';\n const selectAllSelector = '.select-all-checkbox';\n const selectHeaderWithoutCheckbox = '.row-select-handle';\n const pContainerSelector = '.pContainer';\n const aggregateCell = '.aggregateCell';\n const rootNode = this.container.getRootNode();\n let shouldCallSuper = true;\n const tableLoader = this.container.querySelector(this.selectors.tableLoader);\n const currentCol = rootNode.activeElement.closest(this.selectors.focusElementSelector);\n\n // Handling the key handling events for Loading indicator\n if (tableLoader && tableLoader === event.target) {\n this.tableLoaderHandler(event);\n return;\n }\n\n // Handling events related to group header\n if (this.container.querySelector(this.selectors.stickyGroupHeaderSelector)) {\n shouldCallSuper = this.checkEventsForGroupHeader(event);\n }\n\n // To handle left click from first aggregate cell\n if (event.target && event.target.closest(aggregateCell) && event.keyCode === this.keys.LEFT) {\n shouldCallSuper = this.handleLeftKeyPressOnAggregateCells(event.target, aggregateCell);\n }\n\n // Arrow key handlers restriction for data entry mode\n if (\n event.target &&\n this.dataEntryMode &&\n currentCol !== rootNode.activeElement &&\n (event.keyCode === this.keys.RIGHT ||\n event.keyCode === this.keys.LEFT ||\n event.keyCode === this.keys.UP ||\n event.keyCode === this.keys.DOWN)\n ) {\n return;\n }\n // Enter key handler\n if (event.target && event.keyCode === this.keys.ENTER) {\n this.handleEnterKey(event.target);\n }\n\n // Escape key handler\n if (event.target && event.keyCode === this.keys.ESCAPE) {\n this.handleEscapeKey(event.target);\n }\n\n // Tab key handler\n if (\n event.target &&\n event.keyCode === this.keys.TAB &&\n this.dataEntryMode &&\n currentCol !== rootNode.activeElement\n ) {\n shouldCallSuper = this.handleTabKey(event.shiftKey);\n }\n\n if (!shouldCallSuper) return;\n\n // Handling events for expand and collapse all button & handling scrolling for group header\n if (event.target && event.target.closest(this.selectors.expandCollpaseAll)) {\n this.handleExpandCollapseAllEvents(event, selectAllSelector);\n return;\n }\n if (event.target && event.target.closest(this.selectors.stickyGroupHeaderSelector)) {\n this.handleScrollOnUpArrowForGroupHeaders(event, pContainerSelector);\n }\n if (\n event.target &&\n (event.target.closest(buttonMoreSelector) ||\n event.target.closest(selectAllSelector) ||\n event.target.closest(selectHeaderWithoutCheckbox))\n ) {\n if (!this.handleKeyleftForButtonMoreSelectAll(event, selectAllSelector)) {\n // if focus is not handed in handleKeyLeftForButtonMoreSelectAll then invoke super.a11yHandler\n super.a11yHandler(event);\n }\n return;\n }\n super.a11yHandler(event);\n }\n\n // Below method is overridden to set the focus on expand and collapse all button if grouping is applied, to set the focus on table loader if navigated from toolbar by pressing tab key\n focusFirstElement() {\n if (this.container.querySelector(this.selectors.tableLoader)) {\n const tableLoadingIndicator = this.container.querySelector(this.selectors.tableLoader);\n tableLoadingIndicator.focus();\n this.isTableLoaderFocussed = true;\n return;\n }\n if (this.container.querySelector(this.selectors.expandCollpaseAll)) {\n const expandCollapseSelector = this.container.querySelector(this.selectors.expandCollpaseAll);\n const expandCollapseButton = this.getFocusableElementsInCell(expandCollapseSelector);\n gainFocus(expandCollapseButton[0]);\n return;\n }\n super.focusFirstElement();\n }\n\n setFocusOnLoader(loader, currentCol) {\n super.setFocusOnLoader(loader, currentCol);\n const nextRowIndexDirection = loader.classList.contains(this.selectors.aboveLoader.substr(1))\n ? -1\n : 1;\n this.nextColumnIndex = currentCol.getAttribute(sortOrder.column);\n this.nextRowIndex =\n parseInt(\n currentCol.closest(this.selectors.parentElementSelector).getAttribute(sortOrder.row),\n 10\n ) + nextRowIndexDirection;\n }\n\n dynamicLoadersKeyDownHandler(event) {\n if (super.dynamicLoadersKeyDownHandler(event)) {\n this.reset();\n }\n }\n\n itemsLoadedCallback() {\n if (this.ctrlHomeKeyPressed) {\n // ctrl+Home keypress happens on any cell but when initial rows are not present in container fetch happens for those rows\n // on rerender of the container focus the row1 data col1 of the table\n this.ctrlHomeKeyPressed = false;\n this.handleCtrlHomeKeypress();\n }\n // Below if condition is written to announce Loading completed once the table loader is hidden and we are also shifting the\n // focus on firstfocusableelement once the table Loader is hidden\n if (this.isTableLoaderFocussed && !this.container.querySelector(this.selectors.tableLoader)) {\n this.announcePolite({\n message: this.translate('Loading completed'),\n type: 'info'\n });\n this.focusFirstElement();\n this.isTableLoaderFocussed = false;\n }\n if (this.nextRowIndex && this.nextColumnIndex) {\n const row = this.container.querySelector(`[${sortOrder.row}='${this.nextRowIndex}']`);\n if (row) {\n const column = row.querySelector(`[${sortOrder.column}='${this.nextColumnIndex}']`);\n const restoreFocusRef = {\n columnIndex: [\n ...this.container.querySelectorAll(this.selectors.focusElementSelector)\n ].indexOf(column)\n };\n this.reset();\n this.setFocusToCell(restoreFocusRef);\n }\n }\n }\n\n isFirstDataRowInDOM() {\n return !!this.container.querySelector(`[${DATA_INDEX}='0']`);\n }\n\n getFocusableElementOnCtrlHome() {\n if (this.isFirstDataRowInDOM() && this.selectors.parentElementSelector) {\n const firstRow = this.container.querySelector(this.selectors.parentElementSelector);\n const sortedColumns = this.getSortedColumns(firstRow);\n if (firstRow.classList.contains(HEADER)) {\n // when header row is present focus first data column in the header\n return getHeaderColumnToFocusOnCtrlHome(sortedColumns);\n }\n // when there's no header focus row2 col1 element\n return sortedColumns[0];\n }\n // fetch 1st set of rows by setting scrollTop to 0 & then focus (handled in itemsLoadedCallback)\n this.ctrlHomeKeyPressed = true;\n return null;\n }\n\n toggleStyleFormatAriaDescription(nextCol, currentCol) {\n const nextColFocusableElements = this.getFocusableElementsInCell(nextCol);\n const currentColFocusableElements = this.getFocusableElementsInCell(currentCol);\n\n if (nextColFocusableElements.length === 1) {\n const nextFocusableElement = nextColFocusableElements[0];\n const nextElementAriaDescribedby = nextFocusableElement.getAttribute(ARIA_DESCRIBEDBY);\n\n const styleFormatId = nextCol.getAttribute('data-style-format');\n if (styleFormatId) {\n const combinedAriaDescribedby = [styleFormatId, nextElementAriaDescribedby]\n .filter(Boolean)\n .join(' ');\n nextFocusableElement.setAttribute(ARIA_DESCRIBEDBY, combinedAriaDescribedby);\n }\n }\n\n if (currentColFocusableElements.length === 1) {\n const currentFocusableElement = currentColFocusableElements[0];\n\n let originalAriaDescribedby = [];\n const currentAriaDescribedby = currentFocusableElement.getAttribute(ARIA_DESCRIBEDBY);\n if (currentAriaDescribedby) {\n originalAriaDescribedby = currentAriaDescribedby\n .split(' ')\n .filter(\n ariaDescribedby => ariaDescribedby !== currentCol.getAttribute('data-style-format')\n )\n .filter(Boolean);\n }\n\n if (originalAriaDescribedby.length) {\n currentFocusableElement.setAttribute(ARIA_DESCRIBEDBY, originalAriaDescribedby.join(' '));\n } else {\n currentFocusableElement.removeAttribute(ARIA_DESCRIBEDBY);\n }\n }\n }\n}\n\nexport default TableA11y;\n"]}
|
|
1
|
+
{"version":3,"file":"TableA11y.js","sourceRoot":"","sources":["../../../../Core/Views/Table/TableA11y.js"],"names":[],"mappings":"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","sourcesContent":["import { BaseA11y, rowErrorColumnMeta } from 'pega-repeating-structures-core';\n\nconst sortOrder = {\n row: 'aria-rowindex',\n column: 'aria-colindex'\n};\n\nconst TAB_INDEX = 'tabindex';\nconst DATA_INDEX = 'data-index';\nconst HEADER_MENU = '.header-menu';\nconst HEADER = 'header';\nconst ARIA_DESCRIBEDBY = 'aria-describedby';\n\nfunction gainFocus(element) {\n element.setAttribute(TAB_INDEX, 0);\n element.focus();\n}\n\nfunction getHeaderColumnToFocusOnCtrlHome(columns) {\n return columns.find(column => {\n return !!column.querySelector(HEADER_MENU);\n });\n}\n\nfunction setFocusToFocusableElementOrCell(focusableElements, cell) {\n if (focusableElements.length === 1) focusableElements[0].focus();\n else gainFocus(cell);\n}\n\nclass TableA11y extends BaseA11y {\n constructor(\n selectors,\n focusableSelectors,\n // eslint-disable-next-line default-param-last\n customKeys = {},\n container,\n announcePolite,\n translate,\n actionableSelectors,\n ariaLabel\n ) {\n super(selectors, focusableSelectors, customKeys, container, actionableSelectors, ariaLabel);\n this.nextRowIndex = null;\n this.nextColumnIndex = null;\n this.targetIndex = -2;\n this.ctrlHomeKeyPressed = false;\n this.announcePolite = announcePolite;\n this.translate = translate;\n this.isTableLoaderFocussed = false;\n this.dataEntryMode = false;\n }\n\n reset() {\n this.nextRowIndex = null;\n this.nextColumnIndex = null;\n }\n\n getFocusableElementsInCell(column, isCalledFromEsc = false) {\n if (column) {\n const scalarListTag = '.scalarlist-component';\n const scalarListComponent = column.querySelector(scalarListTag);\n if (scalarListComponent) return [scalarListComponent];\n const elementsInColumn = column.querySelectorAll(\n this.focusableSelectors.concat(this.actionableSelectors).join(',')\n );\n if (!isCalledFromEsc && elementsInColumn.length > 1) {\n return [];\n }\n return column.querySelectorAll(this.focusableSelectors.join(','));\n }\n }\n\n getActionableElementsInCell(column) {\n return column.querySelectorAll(this.actionableSelectors.join(','));\n }\n\n getSortedColumns(row) {\n return [...row.querySelectorAll(this.selectors.focusElementSelector)].sort(\n (colA, colB) => colA.getAttribute(sortOrder.column) - colB.getAttribute(sortOrder.column)\n );\n }\n\n handleRightKeyPressForExpandCollapseAll(selectAllSelector) {\n const row = this.container.querySelector(this.selectors.parentElementSelector);\n let firstActionMenuSelector;\n if (row) {\n const sortedColumns = this.getSortedColumns(row);\n if (sortedColumns.length > 0) {\n const firstSortedColumnSelector = sortedColumns[0];\n firstActionMenuSelector = this.getFocusableElementsInCell(firstSortedColumnSelector);\n if (firstActionMenuSelector.length > 0) {\n return gainFocus(firstActionMenuSelector[0]);\n }\n const selectAllCheckboxSelector = this.container.querySelectorAll(selectAllSelector);\n if (selectAllCheckboxSelector.length === 0 && firstActionMenuSelector.length === 0) {\n return gainFocus(firstSortedColumnSelector);\n }\n }\n }\n return null;\n }\n\n // Below method is added to handle key events for expand and collapse all button\n handleExpandCollapseAllEvents(event, selectAllSelector) {\n const { keyCode, shiftKey } = event;\n switch (keyCode) {\n case this.keys.RIGHT: {\n event.preventDefault();\n this.handleRightKeyPressForExpandCollapseAll(selectAllSelector);\n break;\n }\n case this.keys.DOWN: {\n event.preventDefault();\n const stickyCells = this.container.querySelector(this.selectors.stickyGroupHeaderSelector);\n const nextfirstCell = stickyCells;\n const nextfirstCellChild = nextfirstCell.nextSibling;\n gainFocus(nextfirstCellChild);\n break;\n }\n case this.keys.UP:\n case this.keys.LEFT:\n event.preventDefault();\n break;\n case this.keys.TAB: {\n const currentCol = this.container\n .getRootNode()\n .activeElement.closest(this.selectors.focusElementSelector);\n this.containerTabHandler(event, currentCol, shiftKey);\n break;\n }\n default:\n break;\n }\n }\n\n // Below method is added to add/remove aria-label for rows with errors. Aria-label is added on first focus and removed if traversing in the same row\n handleAnnouncementForErrors(nextItem, currentCol, keyCode) {\n let elementWithErrorMessage = currentCol.querySelector('[data-error-message-set]');\n elementWithErrorMessage = currentCol.dataset.errorMessageSet\n ? currentCol\n : elementWithErrorMessage;\n const ARIA_LABEL = 'aria-label';\n if (elementWithErrorMessage) {\n const { ariaLabel: previousAriaLabel } = elementWithErrorMessage.dataset ?? {};\n if (previousAriaLabel) elementWithErrorMessage.setAttribute(ARIA_LABEL, previousAriaLabel);\n else elementWithErrorMessage.removeAttribute(ARIA_LABEL);\n }\n\n if (\n (keyCode !== this.keys.UP && keyCode !== this.keys.DOWN) ||\n nextItem\n .closest(this.selectors.focusElementSelector)\n ?.classList.contains(rowErrorColumnMeta.options.classList[0])\n )\n return;\n\n let errorMessage = nextItem.closest(this.selectors.parentElementSelector)?.dataset.errorMessage;\n if (errorMessage) {\n if (!nextItem.classList.contains(this.selectors.focusElementSelector.split('.')[1])) {\n if (nextItem.hasAttribute(ARIA_LABEL)) {\n errorMessage += `, ${nextItem.getAttribute(ARIA_LABEL)}`;\n nextItem.dataset.ariaLabel = nextItem.getAttribute(ARIA_LABEL);\n } else errorMessage += `, ${nextItem.textContent}`;\n }\n nextItem.setAttribute(ARIA_LABEL, errorMessage);\n nextItem.dataset.errorMessageSet = true;\n }\n }\n\n // Below method is added to set the focus on expand and collapse all button if left arrow key is pressed from actions button or select all checkbox\n handleKeyleftForButtonMoreSelectAll(event, selectAllSelector) {\n const { keyCode } = event;\n const row = this.container.querySelector(this.selectors.parentElementSelector);\n let firstActionMenuSelector;\n if (row) {\n const sortedColumns = this.getSortedColumns(row);\n if (sortedColumns.length > 0) {\n const firstSortedColumnSelector = sortedColumns[0];\n firstActionMenuSelector = this.getFocusableElementsInCell(firstSortedColumnSelector);\n const selectAllCheckboxSelector = this.container.querySelectorAll(selectAllSelector);\n if (\n ((firstActionMenuSelector.length > 0 && event.target === firstActionMenuSelector[0]) ||\n (selectAllCheckboxSelector.length === 0 &&\n firstActionMenuSelector.length === 0 &&\n event.target === firstSortedColumnSelector)) &&\n keyCode === this.keys.LEFT &&\n this.container.querySelector(this.selectors.expandCollpaseAll)\n ) {\n const expandCollapseSelector = this.container.querySelector(\n this.selectors.expandCollpaseAll\n );\n const expandCollapseButton = this.getFocusableElementsInCell(expandCollapseSelector);\n gainFocus(expandCollapseButton[0]);\n return true;\n }\n }\n }\n return false;\n }\n\n handleScrollOnUpArrowForGroupHeaders(event, pContainerSelector) {\n const pContainer = this.container.querySelector(pContainerSelector);\n if (\n pContainer &&\n event.keyCode === this.keys.UP &&\n event.target.getBoundingClientRect().y -\n (pContainer.firstChild.getBoundingClientRect().y +\n pContainer.firstChild.getBoundingClientRect().height) <\n event.target.getBoundingClientRect().height * 2\n ) {\n pContainer.scrollTop -= event.target.getBoundingClientRect().height * 2;\n }\n }\n\n // Used to update this.targetIndex on keydown which is later used by handleGroupHeaderEvents\n updateTargetColumnIndexForGroupHeader(event) {\n const { target, keyCode } = event;\n if (\n this.targetIndex === null ||\n this.targetIndex === -1 ||\n keyCode === this.keys.UP ||\n keyCode === this.keys.DOWN\n ) {\n if (target.closest(this.selectors.expandCollpaseAll)) {\n this.targetIndex = -1;\n return;\n }\n const cell = target.closest(this.selectors.focusElementSelector);\n let row = target.closest(this.selectors.parentElementSelector);\n row = this.getSortedColumns(row);\n\n this.targetIndex = [...row].indexOf(cell);\n }\n }\n\n handleUpDownKeyPressForGroupHeader(keyCode, target, cellToFocus, event) {\n // If the group header is at the last row and DOWN key is press then\n if (\n keyCode === this.keys.DOWN &&\n target.closest(this.selectors.parentElementSelector).nextElementSibling === null\n ) {\n // if footer exists\n const footer = this.container.querySelector(this.selectors.footer);\n const index = this.targetIndex < 0 ? 0 : this.targetIndex;\n if (footer) {\n const cell = this.getSortedColumns(\n footer.querySelector(this.selectors.parentElementSelector)\n )[index];\n setFocusToFocusableElementOrCell(this.getFocusableElementsInCell(cell), cell);\n }\n return true;\n }\n // If the focus came to the group header from the expand all button\n if (keyCode === this.keys.UP && this.targetIndex === -1) {\n this.container.querySelector(this.selectors.expandCollpaseAll).children[0].focus();\n } else {\n event.preventDefault();\n // If initially the group header is clicked and the keyboard is used\n if (cellToFocus && !cellToFocus.hasAttribute('tabindex')) {\n cellToFocus.setAttribute('tabindex', -1);\n }\n // Flushing the -1 index\n if (keyCode === this.keys.DOWN && this.targetIndex === -1) {\n this.targetIndex = 0;\n }\n if (cellToFocus) {\n cellToFocus.focus();\n }\n }\n return true;\n }\n\n handleLeftRightKeyPressForGroupHeader(keyCode, target, cellToFocus) {\n if (cellToFocus && !cellToFocus.hasAttribute('tabindex')) {\n cellToFocus.setAttribute('tabindex', -1);\n }\n\n if (!this.targetIndex) this.targetIndex = 0;\n if (cellToFocus) {\n setFocusToFocusableElementOrCell(this.getFocusableElementsInCell(cellToFocus), cellToFocus);\n }\n }\n\n handleGroupHeaderEvents(event) {\n const { keyCode, target, ctrlKey } = event;\n const index = this.targetIndex < 0 ? 0 : this.targetIndex;\n const cellToFocus = this.getSortedColumns(target.closest(this.selectors.parentElementSelector))[\n index\n ];\n\n switch (keyCode) {\n case this.keys.UP:\n case this.keys.DOWN: {\n return this.handleUpDownKeyPressForGroupHeader(keyCode, target, cellToFocus, event);\n }\n case this.keys.RIGHT:\n {\n // To Prevent Scrolling\n event.preventDefault();\n const row = target.closest(this.selectors.parentElementSelector);\n if (row.querySelector('.aggregate-button')) {\n const firstFocusableElementInRow = this.getSortedColumns(row)[0];\n this.handleLeftRightKeyPressForGroupHeader(keyCode, target, firstFocusableElementInRow);\n return false;\n }\n }\n break;\n case this.keys.TAB:\n if (cellToFocus) {\n cellToFocus.focus();\n }\n break;\n case this.keys.HOME:\n if (ctrlKey) {\n this.handleCtrlHomeKeypress();\n }\n break;\n default:\n break;\n }\n return true;\n }\n\n checkEventsForGroupHeader(event) {\n if (\n event.target &&\n (event.target.closest(this.selectors.focusElementSelector) ||\n event.target.closest(this.selectors.expandCollpaseAll))\n ) {\n this.updateTargetColumnIndexForGroupHeader(event);\n } else if (event.target && event.target.closest(this.selectors.stickyGroupHeaderSelector)) {\n return this.handleGroupHeaderEvents(event);\n }\n return true;\n }\n\n stopEventHandler(event) {\n return (\n event.target.getAttribute('data-context-menu-active') === 'true' ||\n (!event.target.closest(this.selectors.stickyGroupHeaderSelector) &&\n event.target.getAttribute('aria-expanded')) === 'true' ||\n event.target.closest('.popper') ||\n !Object.values(this.keys).includes(event.keyCode)\n );\n }\n\n handleLeftKeyPressOnAggregateCells(target, aggregateCell) {\n const firstCell = this.getSortedColumns(\n target.closest(this.selectors.parentElementSelector)\n )[0];\n if (firstCell === target.closest(aggregateCell)) {\n const groupHeaderButton = target\n .closest(this.selectors.parentElementSelector)\n ?.querySelector('.stickyGroupHeader > button');\n groupHeaderButton.focus();\n return false;\n }\n return true;\n }\n\n // eslint-disable-next-line class-methods-use-this\n isAccessibleElement(element) {\n return (\n !(element.hasAttribute('aria-hidden') && element.getAttribute('aria-hidden') === 'true') &&\n !(element.hasAttribute(TAB_INDEX) && element.getAttribute(TAB_INDEX) === '-1')\n );\n }\n\n getNextAccessibleElement(cellInputableElements, shiftKey = false, currentElementIndex = -1) {\n if (shiftKey) {\n cellInputableElements = [...cellInputableElements]\n .reverse()\n .slice(\n currentElementIndex !== -1 ? cellInputableElements.length - currentElementIndex : 0,\n cellInputableElements.length\n );\n } else {\n cellInputableElements = [...cellInputableElements].slice(\n currentElementIndex + 1,\n cellInputableElements.length\n );\n }\n return cellInputableElements.find(element => this.isAccessibleElement(element));\n }\n\n getAdjacentColumnCell(\n shiftKey,\n currentColumnIndex,\n currentEleParentIndex,\n sortedColumns,\n parentElements,\n currentCol\n ) {\n let nextColumnCell = null;\n if (shiftKey) {\n if (currentColumnIndex - 1 >= 0) {\n nextColumnCell = sortedColumns[sortedColumns.indexOf(currentCol) - 1];\n } else if (currentEleParentIndex - 1 >= 0) {\n sortedColumns = [\n ...parentElements[currentEleParentIndex - 1].querySelectorAll(\n this.selectors.focusElementSelector\n )\n ];\n currentEleParentIndex -= 1;\n nextColumnCell = sortedColumns[sortedColumns.length - 1];\n }\n } else if (currentColumnIndex + 1 < sortedColumns.length) {\n nextColumnCell = sortedColumns[sortedColumns.indexOf(currentCol) + 1];\n } else if (currentEleParentIndex + 1 < parentElements.length) {\n sortedColumns = [\n ...parentElements[currentEleParentIndex + 1].querySelectorAll(\n this.selectors.focusElementSelector\n )\n ];\n currentEleParentIndex += 1;\n\n nextColumnCell = sortedColumns[0];\n }\n return [nextColumnCell, sortedColumns, currentEleParentIndex];\n }\n\n // This method is to recursively find the next column cell with actionable or focusable elements and skip any empty cells\n getNextColumnCellInTaborder(\n sortedColumns,\n currentCol,\n shiftKey,\n parentElements,\n currentEleParentIndex\n ) {\n if (!currentCol) {\n return null;\n }\n let nextColumnCell = null;\n const currentColumnIndex = sortedColumns.indexOf(currentCol);\n [nextColumnCell, sortedColumns, currentEleParentIndex] = this.getAdjacentColumnCell(\n shiftKey,\n currentColumnIndex,\n currentEleParentIndex,\n sortedColumns,\n parentElements,\n currentCol\n );\n const elements =\n nextColumnCell &&\n nextColumnCell.querySelectorAll(\n [...this.actionableSelectors, ...this.focusableSelectors].join(',')\n );\n if (elements?.length) {\n return nextColumnCell;\n }\n return this.getNextColumnCellInTaborder(\n sortedColumns,\n nextColumnCell,\n shiftKey,\n parentElements,\n currentEleParentIndex\n );\n }\n\n isFocusableElement(element) {\n const colItem = element?.closest(this.selectors.focusElementSelector);\n if (!colItem) return false;\n return [...colItem.querySelectorAll(this.focusableSelectors.join(','))].includes(element);\n }\n\n handleTabKey(shiftKey) {\n const parentElements = this.container.querySelectorAll(this.selectors.parentElementSelector);\n const rootNode = this.container.getRootNode();\n const currentCol = rootNode.activeElement?.closest(this.selectors.focusElementSelector);\n const currentEleParentIndex = [...parentElements].indexOf(\n currentCol.closest(this.selectors.parentElementSelector)\n );\n const currentColumnElements = Array.from(\n currentCol.querySelectorAll(\n [...this.actionableSelectors, ...this.focusableSelectors].join(',')\n )\n );\n const currentEleIndex = currentColumnElements.indexOf(rootNode.activeElement);\n\n const sortedColumns = this.getSortedColumns(\n currentCol.closest(this.selectors.parentElementSelector)\n );\n\n const nextColumnCell = this.getNextColumnCellInTaborder(\n sortedColumns,\n currentCol,\n shiftKey,\n parentElements,\n currentEleParentIndex\n );\n\n if (\n (!shiftKey && currentEleIndex + 1 < currentColumnElements.length) ||\n (shiftKey && currentEleIndex - 1 >= 0)\n ) {\n return false;\n }\n if (nextColumnCell) {\n const nextColumnCellElements = nextColumnCell.querySelectorAll(\n [...this.actionableSelectors, ...this.focusableSelectors].join(',')\n );\n if (nextColumnCellElements.length !== 0) return false;\n }\n this.updateDataEntry();\n return true;\n }\n\n updateDataEntry(updateForHandler, focusElements, nextFocusElement) {\n switch (updateForHandler) {\n case 'click':\n if (focusElements.length === 1) {\n const hasFocusableElement = Array.from(focusElements).some(element =>\n this.focusableSelectors.some(selector => element.matches(selector))\n );\n this.dataEntryMode = !hasFocusableElement;\n } else if (nextFocusElement) {\n this.dataEntryMode = true;\n } else {\n this.dataEntryMode = false;\n }\n break;\n\n case 'enter':\n this.dataEntryMode = true;\n break;\n\n default:\n this.dataEntryMode = false;\n }\n }\n\n clickHandler(event) {\n const cell = event?.target?.closest(this.selectors.focusElementSelector);\n if (cell && cell !== event.target) {\n const focusElements = cell.querySelectorAll(\n this.focusableSelectors.concat(this.actionableSelectors).join(',')\n );\n const nextFocusElement = this.getNextAccessibleElement(focusElements);\n this.updateDataEntry('click', focusElements, nextFocusElement);\n } else {\n this.updateDataEntry();\n }\n }\n\n handleEnterKey(target) {\n const focusElements = target.querySelectorAll(\n this.focusableSelectors.concat(this.actionableSelectors).join(',')\n );\n const nextFocusElement = this.getNextAccessibleElement(focusElements);\n // register escape event for RTE to support event bubbling\n if (nextFocusElement?.nodeName === 'IFRAME') {\n this.registerEscapeEventForRTE(nextFocusElement);\n target.tabIndex = -1;\n } else if (nextFocusElement) {\n this.updateDataEntry('enter');\n gainFocus(nextFocusElement);\n target.tabIndex = -1;\n }\n }\n\n handleEscapeKey(target) {\n const cell = target.closest(this.selectors.focusElementSelector);\n if (\n cell &&\n (this.getFocusableElementsInCell(cell, true).length > 1 ||\n this.getActionableElementsInCell(cell).length >= 1)\n ) {\n this.updateDataEntry();\n gainFocus(cell);\n }\n if (this.getFocusableElementsInCell(cell, true).length === 1) {\n this.updateDataEntry();\n }\n\n return !cell;\n }\n\n registerEscapeEventForRTE(target) {\n const iframeContent = target.contentWindow || target.contentDocument;\n if (iframeContent?.document) {\n this.updateDataEntry('enter');\n iframeContent.document.querySelector(\"[contenteditable='true']\").focus();\n if (!iframeContent.document.escapeKeyHandlerInjected) {\n iframeContent.document.addEventListener('keydown', event => {\n if (event.keyCode === this.keys.ESCAPE) {\n const escapeEvent = new KeyboardEvent('keydown', {\n key: 'Escape',\n code: 'Escape',\n keyCode: this.keys.ESCAPE,\n bubbles: true\n });\n target.dispatchEvent(escapeEvent);\n }\n });\n }\n iframeContent.document.escapeKeyHandlerInjected = true;\n }\n }\n\n tableLoaderHandler(event) {\n const { keyCode } = event;\n switch (keyCode) {\n case this.keys.LEFT:\n case this.keys.RIGHT:\n case this.keys.UP:\n case this.keys.DOWN: {\n event.preventDefault();\n break;\n }\n case this.keys.TAB: {\n this.tabHandler(event);\n this.isTableLoaderFocussed = false;\n break;\n }\n default:\n break;\n }\n }\n\n // Below method is overridden to handle key events for expand and collapse all button, group headers\n a11yHandler(event) {\n const buttonMoreSelector = '.button-more';\n const selectAllSelector = '.select-all-checkbox';\n const selectHeaderWithoutCheckbox = '.row-select-handle';\n const pContainerSelector = '.pContainer';\n const aggregateCell = '.aggregateCell';\n const rootNode = this.container.getRootNode();\n let shouldCallSuper = true;\n const tableLoader = this.container.querySelector(this.selectors.tableLoader);\n const currentCol = rootNode.activeElement.closest(this.selectors.focusElementSelector);\n\n // Handling the key handling events for Loading indicator\n if (tableLoader && tableLoader === event.target) {\n this.tableLoaderHandler(event);\n return;\n }\n\n // Handling events related to group header\n if (this.container.querySelector(this.selectors.stickyGroupHeaderSelector)) {\n shouldCallSuper = this.checkEventsForGroupHeader(event);\n }\n\n // To handle left click from first aggregate cell\n if (event.target && event.target.closest(aggregateCell) && event.keyCode === this.keys.LEFT) {\n shouldCallSuper = this.handleLeftKeyPressOnAggregateCells(event.target, aggregateCell);\n }\n\n // Arrow key handlers restriction for data entry mode\n if (\n event.target &&\n this.dataEntryMode &&\n currentCol !== rootNode.activeElement &&\n (event.keyCode === this.keys.RIGHT ||\n event.keyCode === this.keys.LEFT ||\n event.keyCode === this.keys.UP ||\n event.keyCode === this.keys.DOWN)\n ) {\n return;\n }\n // Enter key handler\n if (event.target && event.keyCode === this.keys.ENTER) {\n this.handleEnterKey(event.target);\n }\n\n // Escape key handler\n if (event.target && event.keyCode === this.keys.ESCAPE) {\n this.handleEscapeKey(event.target);\n }\n\n // Tab key handler\n if (\n event.target &&\n event.keyCode === this.keys.TAB &&\n this.dataEntryMode &&\n currentCol !== rootNode.activeElement\n ) {\n shouldCallSuper = this.handleTabKey(event.shiftKey);\n }\n\n if (!shouldCallSuper) return;\n\n // Handling events for expand and collapse all button & handling scrolling for group header\n if (event.target && event.target.closest(this.selectors.expandCollpaseAll)) {\n this.handleExpandCollapseAllEvents(event, selectAllSelector);\n return;\n }\n if (event.target && event.target.closest(this.selectors.stickyGroupHeaderSelector)) {\n this.handleScrollOnUpArrowForGroupHeaders(event, pContainerSelector);\n }\n if (\n event.target &&\n (event.target.closest(buttonMoreSelector) ||\n event.target.closest(selectAllSelector) ||\n event.target.closest(selectHeaderWithoutCheckbox))\n ) {\n if (!this.handleKeyleftForButtonMoreSelectAll(event, selectAllSelector)) {\n // if focus is not handed in handleKeyLeftForButtonMoreSelectAll then invoke super.a11yHandler\n super.a11yHandler(event);\n }\n return;\n }\n super.a11yHandler(event);\n }\n\n // Below method is overridden to set the focus on expand and collapse all button if grouping is applied, to set the focus on table loader if navigated from toolbar by pressing tab key\n focusFirstElement() {\n if (this.container.querySelector(this.selectors.tableLoader)) {\n const tableLoadingIndicator = this.container.querySelector(this.selectors.tableLoader);\n tableLoadingIndicator.focus();\n this.isTableLoaderFocussed = true;\n return;\n }\n if (this.container.querySelector(this.selectors.expandCollpaseAll)) {\n const expandCollapseSelector = this.container.querySelector(this.selectors.expandCollpaseAll);\n const expandCollapseButton = this.getFocusableElementsInCell(expandCollapseSelector);\n gainFocus(expandCollapseButton[0]);\n return;\n }\n super.focusFirstElement();\n }\n\n setFocusOnLoader(loader, currentCol) {\n super.setFocusOnLoader(loader, currentCol);\n const nextRowIndexDirection = loader.classList.contains(this.selectors.aboveLoader.substr(1))\n ? -1\n : 1;\n this.nextColumnIndex = currentCol.getAttribute(sortOrder.column);\n this.nextRowIndex =\n parseInt(\n currentCol.closest(this.selectors.parentElementSelector).getAttribute(sortOrder.row),\n 10\n ) + nextRowIndexDirection;\n }\n\n dynamicLoadersKeyDownHandler(event) {\n if (super.dynamicLoadersKeyDownHandler(event)) {\n this.reset();\n }\n }\n\n itemsLoadedCallback() {\n if (this.ctrlHomeKeyPressed) {\n // ctrl+Home keypress happens on any cell but when initial rows are not present in container fetch happens for those rows\n // on rerender of the container focus the row1 data col1 of the table\n this.ctrlHomeKeyPressed = false;\n this.handleCtrlHomeKeypress();\n }\n // Below if condition is written to announce Loading completed once the table loader is hidden and we are also shifting the\n // focus on firstfocusableelement once the table Loader is hidden\n if (this.isTableLoaderFocussed && !this.container.querySelector(this.selectors.tableLoader)) {\n this.announcePolite({\n message: this.translate('Loading completed'),\n type: 'info'\n });\n this.focusFirstElement();\n this.isTableLoaderFocussed = false;\n }\n if (this.nextRowIndex && this.nextColumnIndex) {\n const row = this.container.querySelector(`[${sortOrder.row}='${this.nextRowIndex}']`);\n if (row) {\n const column = row.querySelector(`[${sortOrder.column}='${this.nextColumnIndex}']`);\n const restoreFocusRef = {\n columnIndex: [\n ...this.container.querySelectorAll(this.selectors.focusElementSelector)\n ].indexOf(column)\n };\n this.reset();\n this.setFocusToCell(restoreFocusRef);\n }\n }\n }\n\n isFirstDataRowInDOM() {\n return !!this.container.querySelector(`[${DATA_INDEX}='0']`);\n }\n\n getFocusableElementOnCtrlHome() {\n if (this.isFirstDataRowInDOM() && this.selectors.parentElementSelector) {\n const firstRow = this.container.querySelector(this.selectors.parentElementSelector);\n const sortedColumns = this.getSortedColumns(firstRow);\n if (firstRow.classList.contains(HEADER)) {\n // when header row is present focus first data column in the header\n return getHeaderColumnToFocusOnCtrlHome(sortedColumns);\n }\n // when there's no header focus row2 col1 element\n return sortedColumns[0];\n }\n // fetch 1st set of rows by setting scrollTop to 0 & then focus (handled in itemsLoadedCallback)\n this.ctrlHomeKeyPressed = true;\n return null;\n }\n\n toggleStyleFormatAriaDescription(nextCol, currentCol) {\n const nextColFocusableElements = this.getFocusableElementsInCell(nextCol);\n const currentColFocusableElements = this.getFocusableElementsInCell(currentCol);\n\n if (nextColFocusableElements.length === 1) {\n const nextFocusableElement = nextColFocusableElements[0];\n const nextElementAriaDescribedby = nextFocusableElement.getAttribute(ARIA_DESCRIBEDBY);\n\n const styleFormatId = nextCol.getAttribute('data-style-format');\n if (styleFormatId) {\n const combinedAriaDescribedby = [styleFormatId, nextElementAriaDescribedby]\n .filter(Boolean)\n .join(' ');\n nextFocusableElement.setAttribute(ARIA_DESCRIBEDBY, combinedAriaDescribedby);\n }\n }\n\n if (currentColFocusableElements.length === 1) {\n const currentFocusableElement = currentColFocusableElements[0];\n\n let originalAriaDescribedby = [];\n const currentAriaDescribedby = currentFocusableElement.getAttribute(ARIA_DESCRIBEDBY);\n if (currentAriaDescribedby) {\n originalAriaDescribedby = currentAriaDescribedby\n .split(' ')\n .filter(\n ariaDescribedby => ariaDescribedby !== currentCol.getAttribute('data-style-format')\n )\n .filter(Boolean);\n }\n\n if (originalAriaDescribedby.length) {\n currentFocusableElement.setAttribute(ARIA_DESCRIBEDBY, originalAriaDescribedby.join(' '));\n } else {\n currentFocusableElement.removeAttribute(ARIA_DESCRIBEDBY);\n }\n }\n }\n}\n\nexport default TableA11y;\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pega/lists-react",
|
|
3
|
-
"version": "9.0.0-build.11.
|
|
3
|
+
"version": "9.0.0-build.11.6",
|
|
4
4
|
"description": "Repeating view structures such as Table, Gallery(Repeating layouts), Kanban etc.",
|
|
5
5
|
"license": "SEE LICENSE IN LICENSE",
|
|
6
6
|
"author": "Pegasystems",
|
|
@@ -14,9 +14,9 @@
|
|
|
14
14
|
"build": "tsc -b tsconfig.build.json"
|
|
15
15
|
},
|
|
16
16
|
"dependencies": {
|
|
17
|
-
"@pega/cosmos-react-condition-builder": "9.0.0-build.11.
|
|
18
|
-
"@pega/cosmos-react-core": "9.0.0-build.11.
|
|
19
|
-
"@pega/cosmos-react-rte": "9.0.0-build.11.
|
|
17
|
+
"@pega/cosmos-react-condition-builder": "9.0.0-build.11.6",
|
|
18
|
+
"@pega/cosmos-react-core": "9.0.0-build.11.6",
|
|
19
|
+
"@pega/cosmos-react-rte": "9.0.0-build.11.6",
|
|
20
20
|
"@types/lodash.get": "^4.4.9",
|
|
21
21
|
"@types/react": "^17.0.62 || ^18.3.3",
|
|
22
22
|
"@types/react-dom": "^17.0.20 || ^18.3.0",
|
|
@@ -24,8 +24,8 @@
|
|
|
24
24
|
"dayjs": "^1.11.13",
|
|
25
25
|
"fast-deep-equal": "^3.1.3",
|
|
26
26
|
"lodash.get": "^4.4.2",
|
|
27
|
-
"pega-repeating-structures-core": "npm:@pega/lists-core@9.0.0-build.11.
|
|
28
|
-
"pega-ui-list-data-apis": "npm:@pega/lists-core-utils@9.0.0-build.11.
|
|
27
|
+
"pega-repeating-structures-core": "npm:@pega/lists-core@9.0.0-build.11.6",
|
|
28
|
+
"pega-ui-list-data-apis": "npm:@pega/lists-core-utils@9.0.0-build.11.6",
|
|
29
29
|
"polished": "^4.1.0",
|
|
30
30
|
"prop-types": "^15.8.1",
|
|
31
31
|
"react": "^17.0.0 || ^18.0.0",
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
"@testing-library/react": "^16.0.0",
|
|
45
45
|
"@testing-library/user-event": "^14.6.1",
|
|
46
46
|
"jest-axe": "^8.0.0",
|
|
47
|
-
"srs-utils": "9.0.0-build.11.
|
|
47
|
+
"srs-utils": "9.0.0-build.11.6",
|
|
48
48
|
"typescript": "~5.8.3"
|
|
49
49
|
}
|
|
50
50
|
}
|