@cloudscape-design/components 3.0.153 → 3.0.154
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/breadcrumb-group/internal.d.ts +1 -1
- package/breadcrumb-group/internal.d.ts.map +1 -1
- package/breadcrumb-group/internal.js.map +1 -1
- package/button/internal.d.ts +1 -0
- package/button/internal.d.ts.map +1 -1
- package/button/internal.js +2 -2
- package/button/internal.js.map +1 -1
- package/form-field/interfaces.d.ts +10 -0
- package/form-field/interfaces.d.ts.map +1 -1
- package/form-field/interfaces.js.map +1 -1
- package/form-field/internal.d.ts +1 -1
- package/form-field/internal.d.ts.map +1 -1
- package/form-field/internal.js +5 -4
- package/form-field/internal.js.map +1 -1
- package/input/internal.d.ts.map +1 -1
- package/input/internal.js +16 -4
- package/input/internal.js.map +1 -1
- package/internal/context/form-field-context.d.ts +6 -2
- package/internal/context/form-field-context.d.ts.map +1 -1
- package/internal/context/form-field-context.js +7 -1
- package/internal/context/form-field-context.js.map +1 -1
- package/internal/environment.js +1 -1
- package/internal/manifest.json +1 -1
- package/internal/types.d.ts +9 -0
- package/internal/types.d.ts.map +1 -1
- package/internal/types.js +0 -2
- package/internal/types.js.map +1 -1
- package/package.json +1 -1
- package/select/parts/styles.css.js +9 -9
- package/select/parts/styles.scoped.css +27 -9
- package/select/parts/styles.selectors.js +9 -9
- package/table/body-cell/click-away.d.ts +9 -0
- package/table/body-cell/click-away.d.ts.map +1 -0
- package/table/body-cell/click-away.js +38 -0
- package/table/body-cell/click-away.js.map +1 -0
- package/table/body-cell/index.d.ts +11 -20
- package/table/body-cell/index.d.ts.map +1 -1
- package/table/body-cell/index.js +48 -9
- package/table/body-cell/index.js.map +1 -1
- package/table/body-cell/inline-editor.d.ts +12 -0
- package/table/body-cell/inline-editor.d.ts.map +1 -0
- package/table/body-cell/inline-editor.js +88 -0
- package/table/body-cell/inline-editor.js.map +1 -0
- package/table/body-cell/styles.css.js +18 -12
- package/table/body-cell/styles.scoped.css +229 -46
- package/table/body-cell/styles.selectors.js +18 -12
- package/table/body-cell/td-element.d.ts +21 -0
- package/table/body-cell/td-element.d.ts.map +1 -0
- package/table/body-cell/td-element.js +11 -0
- package/table/body-cell/td-element.js.map +1 -0
- package/table/body-cell/use-stable-scroll-position.d.ts +17 -0
- package/table/body-cell/use-stable-scroll-position.d.ts.map +1 -0
- package/table/body-cell/use-stable-scroll-position.js +48 -0
- package/table/body-cell/use-stable-scroll-position.js.map +1 -0
- package/table/header-cell/index.d.ts +8 -7
- package/table/header-cell/index.d.ts.map +1 -1
- package/table/header-cell/index.js +6 -2
- package/table/header-cell/index.js.map +1 -1
- package/table/header-cell/styles.css.js +19 -18
- package/table/header-cell/styles.scoped.css +40 -35
- package/table/header-cell/styles.selectors.js +19 -18
- package/table/header-cell/utils.d.ts +1 -1
- package/table/header-cell/utils.d.ts.map +1 -1
- package/table/interfaces.d.ts +85 -10
- package/table/interfaces.d.ts.map +1 -1
- package/table/interfaces.js.map +1 -1
- package/table/internal.d.ts.map +1 -1
- package/table/internal.js +68 -18
- package/table/internal.js.map +1 -1
- package/table/thead.d.ts.map +1 -1
- package/table/thead.js +1 -1
- package/table/thead.js.map +1 -1
- package/table/use-table-focus-navigation.d.ts +16 -0
- package/table/use-table-focus-navigation.d.ts.map +1 -0
- package/table/use-table-focus-navigation.js +131 -0
- package/table/use-table-focus-navigation.js.map +1 -0
- package/table/utils.d.ts +1 -1
- package/table/utils.d.ts.map +1 -1
- package/test-utils/dom/table/index.d.ts +4 -0
- package/test-utils/dom/table/index.js +21 -5
- package/test-utils/dom/table/index.js.map +1 -1
- package/test-utils/selectors/table/index.d.ts +4 -0
- package/test-utils/selectors/table/index.js +21 -5
- package/test-utils/selectors/table/index.js.map +1 -1
- package/test-utils/tsconfig.tsbuildinfo +1 -1
|
@@ -90,16 +90,16 @@ surrounding text. (WCAG F73) https://www.w3.org/WAI/WCAG21/Techniques/failures/F
|
|
|
90
90
|
Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
91
91
|
SPDX-License-Identifier: Apache-2.0
|
|
92
92
|
*/
|
|
93
|
-
.
|
|
93
|
+
.awsui_placeholder_dwuol_1dl3j_93:not(#\9) {
|
|
94
94
|
color: var(--color-text-input-placeholder-j53j3c, #5f6b7a);
|
|
95
95
|
font-style: italic;
|
|
96
96
|
}
|
|
97
97
|
|
|
98
|
-
.
|
|
98
|
+
.awsui_item_dwuol_1dl3j_98:not(#\9) {
|
|
99
99
|
display: flex;
|
|
100
100
|
align-items: center;
|
|
101
101
|
}
|
|
102
|
-
.
|
|
102
|
+
.awsui_item_dwuol_1dl3j_98 > .awsui_checkbox_dwuol_1dl3j_102:not(#\9) {
|
|
103
103
|
position: relative;
|
|
104
104
|
min-height: var(--size-control-n9i4yo, 16px);
|
|
105
105
|
min-width: var(--size-control-n9i4yo, 16px);
|
|
@@ -108,31 +108,49 @@ surrounding text. (WCAG F73) https://www.w3.org/WAI/WCAG21/Techniques/failures/F
|
|
|
108
108
|
margin-right: var(--space-field-horizontal-89h2yr, 12px);
|
|
109
109
|
}
|
|
110
110
|
|
|
111
|
-
.
|
|
111
|
+
.awsui_filter_dwuol_1dl3j_111:not(#\9) {
|
|
112
112
|
z-index: 4;
|
|
113
113
|
flex-shrink: 0;
|
|
114
114
|
}
|
|
115
115
|
|
|
116
|
-
.
|
|
116
|
+
.awsui_trigger_dwuol_1dl3j_116:not(#\9) {
|
|
117
117
|
white-space: nowrap;
|
|
118
118
|
overflow: hidden;
|
|
119
119
|
text-overflow: ellipsis;
|
|
120
120
|
}
|
|
121
|
+
.awsui_trigger_dwuol_1dl3j_116[data-awsui-focus-visible=true]:not(#\9):focus {
|
|
122
|
+
position: relative;
|
|
123
|
+
}
|
|
124
|
+
.awsui_trigger_dwuol_1dl3j_116[data-awsui-focus-visible=true]:not(#\9):focus {
|
|
125
|
+
outline: 2px dotted transparent;
|
|
126
|
+
outline-offset: calc(calc(-1 * var(--space-scaled-xs-6859qs, 8px)) - 1px);
|
|
127
|
+
}
|
|
128
|
+
.awsui_trigger_dwuol_1dl3j_116[data-awsui-focus-visible=true]:not(#\9):focus::before {
|
|
129
|
+
content: " ";
|
|
130
|
+
display: block;
|
|
131
|
+
position: absolute;
|
|
132
|
+
left: calc(-1 * calc(-1 * var(--space-scaled-xs-6859qs, 8px)));
|
|
133
|
+
top: calc(-1 * calc(-1 * var(--space-scaled-xxs-95dhkm, 4px)));
|
|
134
|
+
width: calc(100% + 2 * calc(-1 * var(--space-scaled-xs-6859qs, 8px)));
|
|
135
|
+
height: calc(100% + 2 * calc(-1 * var(--space-scaled-xxs-95dhkm, 4px)));
|
|
136
|
+
border-radius: var(--border-radius-control-default-focus-ring-7661kz, 4px);
|
|
137
|
+
box-shadow: 0 0 0 2px var(--color-border-item-focused-ap3b6s, #0972d3);
|
|
138
|
+
}
|
|
121
139
|
|
|
122
|
-
.awsui_layout-
|
|
140
|
+
.awsui_layout-strut_dwuol_1dl3j_140:not(#\9) {
|
|
123
141
|
width: 100%;
|
|
124
142
|
position: relative;
|
|
125
143
|
transform: translate3d(0, 0, 0);
|
|
126
144
|
}
|
|
127
145
|
|
|
128
|
-
.awsui_list-
|
|
146
|
+
.awsui_list-bottom_dwuol_1dl3j_146:not(#\9) {
|
|
129
147
|
/* used in unit-tests */
|
|
130
148
|
}
|
|
131
149
|
|
|
132
|
-
.awsui_selected-
|
|
150
|
+
.awsui_selected-icon_dwuol_1dl3j_150:not(#\9) {
|
|
133
151
|
color: var(--color-border-item-focused-ap3b6s, #0972d3);
|
|
134
152
|
}
|
|
135
153
|
|
|
136
|
-
.awsui_show-label-
|
|
154
|
+
.awsui_show-label-tag_dwuol_1dl3j_154 > .awsui_selected-icon_dwuol_1dl3j_150:not(#\9) {
|
|
137
155
|
padding-left: var(--space-scaled-s-cu1hzn, 12px);
|
|
138
156
|
}
|
|
@@ -2,14 +2,14 @@
|
|
|
2
2
|
// es-module interop with Babel and Typescript
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
4
|
module.exports.default = {
|
|
5
|
-
"placeholder": "
|
|
6
|
-
"item": "
|
|
7
|
-
"checkbox": "
|
|
8
|
-
"filter": "
|
|
9
|
-
"trigger": "
|
|
10
|
-
"layout-strut": "awsui_layout-
|
|
11
|
-
"list-bottom": "awsui_list-
|
|
12
|
-
"selected-icon": "awsui_selected-
|
|
13
|
-
"show-label-tag": "awsui_show-label-
|
|
5
|
+
"placeholder": "awsui_placeholder_dwuol_1dl3j_93",
|
|
6
|
+
"item": "awsui_item_dwuol_1dl3j_98",
|
|
7
|
+
"checkbox": "awsui_checkbox_dwuol_1dl3j_102",
|
|
8
|
+
"filter": "awsui_filter_dwuol_1dl3j_111",
|
|
9
|
+
"trigger": "awsui_trigger_dwuol_1dl3j_116",
|
|
10
|
+
"layout-strut": "awsui_layout-strut_dwuol_1dl3j_140",
|
|
11
|
+
"list-bottom": "awsui_list-bottom_dwuol_1dl3j_146",
|
|
12
|
+
"selected-icon": "awsui_selected-icon_dwuol_1dl3j_150",
|
|
13
|
+
"show-label-tag": "awsui_show-label-tag_dwuol_1dl3j_154"
|
|
14
14
|
};
|
|
15
15
|
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export declare function useClickAway(onClick: () => void): React.MutableRefObject<any>;
|
|
3
|
+
interface ClickAwayActive {
|
|
4
|
+
onClick: () => void;
|
|
5
|
+
children: React.ReactNode;
|
|
6
|
+
}
|
|
7
|
+
export declare function ClickAway({ onClick, children }: ClickAwayActive): JSX.Element;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=click-away.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"click-away.d.ts","sourceRoot":"","sources":["../../../../src/table/body-cell/click-away.tsx"],"names":[],"mappings":"AAEA,OAAO,KAA4B,MAAM,OAAO,CAAC;AAIjD,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,IAAI,+BAgB/C;AAED,UAAU,eAAe;IACvB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AACD,wBAAgB,SAAS,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,eAAe,eAa/D"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
import React, { useEffect, useRef } from 'react';
|
|
4
|
+
import { containsOrEqual } from '../../internal/utils/dom';
|
|
5
|
+
import { useStableEventHandler } from '../../internal/hooks/use-stable-event-handler';
|
|
6
|
+
export function useClickAway(onClick) {
|
|
7
|
+
var awayRef = useRef(null);
|
|
8
|
+
var onClickStable = useStableEventHandler(onClick);
|
|
9
|
+
useEffect(function () {
|
|
10
|
+
function handleClick(event) {
|
|
11
|
+
if (!containsOrEqual(awayRef.current, event.target)) {
|
|
12
|
+
onClickStable();
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
// contains returns wrong result if the next render would remove the element
|
|
16
|
+
// but capture phase happens before the render, so returns correct result
|
|
17
|
+
// Ref: https://github.com/facebook/react/issues/20325
|
|
18
|
+
document.addEventListener('click', handleClick, { capture: true });
|
|
19
|
+
return function () { return document.removeEventListener('click', handleClick, { capture: true }); };
|
|
20
|
+
}, [onClickStable]);
|
|
21
|
+
return awayRef;
|
|
22
|
+
}
|
|
23
|
+
export function ClickAway(_a) {
|
|
24
|
+
var onClick = _a.onClick, children = _a.children;
|
|
25
|
+
var onClickStable = useStableEventHandler(onClick);
|
|
26
|
+
var ref = useRef(null);
|
|
27
|
+
useEffect(function () {
|
|
28
|
+
function handleClick(event) {
|
|
29
|
+
if (!containsOrEqual(ref.current, event.target)) {
|
|
30
|
+
onClickStable();
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
document.addEventListener('click', handleClick, true);
|
|
34
|
+
return function () { return document.removeEventListener('click', handleClick, true); };
|
|
35
|
+
}, [onClickStable]);
|
|
36
|
+
return React.createElement("span", { ref: ref }, children);
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=click-away.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"click-away.js","sourceRoot":"","sources":["../../../../src/table/body-cell/click-away.tsx"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,sCAAsC;AACtC,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,+CAA+C,CAAC;AAEtF,MAAM,UAAU,YAAY,CAAC,OAAmB;IAC9C,IAAM,OAAO,GAAG,MAAM,CAAM,IAAI,CAAC,CAAC;IAClC,IAAM,aAAa,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;IACrD,SAAS,CAAC;QACR,SAAS,WAAW,CAAC,KAAY;YAC/B,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,MAAc,CAAC,EAAE;gBAC3D,aAAa,EAAE,CAAC;aACjB;QACH,CAAC;QACD,4EAA4E;QAC5E,yEAAyE;QACzE,sDAAsD;QACtD,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QACnE,OAAO,cAAM,OAAA,QAAQ,CAAC,mBAAmB,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EAArE,CAAqE,CAAC;IACrF,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;IACpB,OAAO,OAAO,CAAC;AACjB,CAAC;AAMD,MAAM,UAAU,SAAS,CAAC,EAAsC;QAApC,OAAO,aAAA,EAAE,QAAQ,cAAA;IAC3C,IAAM,aAAa,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;IACrD,IAAM,GAAG,GAAG,MAAM,CAAkB,IAAI,CAAC,CAAC;IAC1C,SAAS,CAAC;QACR,SAAS,WAAW,CAAC,KAAY;YAC/B,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,MAAc,CAAC,EAAE;gBACvD,aAAa,EAAE,CAAC;aACjB;QACH,CAAC;QACD,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;QACtD,OAAO,cAAM,OAAA,QAAQ,CAAC,mBAAmB,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,CAAC,EAAxD,CAAwD,CAAC;IACxE,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;IACpB,OAAO,8BAAM,GAAG,EAAE,GAAG,IAAG,QAAQ,CAAQ,CAAC;AAC3C,CAAC","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport React, { useEffect, useRef } from 'react';\nimport { containsOrEqual } from '../../internal/utils/dom';\nimport { useStableEventHandler } from '../../internal/hooks/use-stable-event-handler';\n\nexport function useClickAway(onClick: () => void) {\n const awayRef = useRef<any>(null);\n const onClickStable = useStableEventHandler(onClick);\n useEffect(() => {\n function handleClick(event: Event) {\n if (!containsOrEqual(awayRef.current, event.target as Node)) {\n onClickStable();\n }\n }\n // contains returns wrong result if the next render would remove the element\n // but capture phase happens before the render, so returns correct result\n // Ref: https://github.com/facebook/react/issues/20325\n document.addEventListener('click', handleClick, { capture: true });\n return () => document.removeEventListener('click', handleClick, { capture: true });\n }, [onClickStable]);\n return awayRef;\n}\n\ninterface ClickAwayActive {\n onClick: () => void;\n children: React.ReactNode;\n}\nexport function ClickAway({ onClick, children }: ClickAwayActive) {\n const onClickStable = useStableEventHandler(onClick);\n const ref = useRef<HTMLSpanElement>(null);\n useEffect(() => {\n function handleClick(event: Event) {\n if (!containsOrEqual(ref.current, event.target as Node)) {\n onClickStable();\n }\n }\n document.addEventListener('click', handleClick, true);\n return () => document.removeEventListener('click', handleClick, true);\n }, [onClickStable]);\n return <span ref={ref}>{children}</span>;\n}\n"]}
|
|
@@ -1,25 +1,16 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
1
|
import { TableProps } from '../interfaces';
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
wrapLines: boolean | undefined;
|
|
7
|
-
isFirstRow: boolean;
|
|
8
|
-
isLastRow: boolean;
|
|
9
|
-
isEvenRow?: boolean;
|
|
10
|
-
stripedRows?: boolean;
|
|
11
|
-
isSelected: boolean;
|
|
12
|
-
isNextSelected: boolean;
|
|
13
|
-
isPrevSelected: boolean;
|
|
14
|
-
children?: React.ReactNode;
|
|
15
|
-
hasSelection?: boolean;
|
|
16
|
-
hasFooter?: boolean;
|
|
17
|
-
}
|
|
18
|
-
export declare function TableBodyCell({ className, style, children, wrapLines, isFirstRow, isLastRow, isSelected, isNextSelected, isPrevSelected, isEvenRow, stripedRows, hasSelection, hasFooter, }: TableBodyCellProps): JSX.Element;
|
|
19
|
-
interface TableBodyCellContentProps<ItemType> extends TableBodyCellProps {
|
|
20
|
-
column: TableProps.ColumnDefinition<ItemType>;
|
|
2
|
+
import { TableTdElementProps } from './td-element';
|
|
3
|
+
interface TableBodyCellProps<ItemType, ValueType> extends TableTdElementProps {
|
|
4
|
+
column: TableProps.EditableColumnDefinition<ItemType, ValueType>;
|
|
21
5
|
item: ItemType;
|
|
6
|
+
isEditing: boolean;
|
|
7
|
+
onEditStart: () => void;
|
|
8
|
+
onEditEnd: () => void;
|
|
9
|
+
submitEdit?: TableProps.SubmitEditFunction<ItemType, ValueType>;
|
|
10
|
+
ariaLabels: TableProps['ariaLabels'];
|
|
22
11
|
}
|
|
23
|
-
export declare function
|
|
12
|
+
export declare function TableBodyCell<ItemType, ValueType>({ isEditable, ...rest }: TableBodyCellProps<ItemType, ValueType> & {
|
|
13
|
+
isEditable: boolean;
|
|
14
|
+
}): JSX.Element;
|
|
24
15
|
export {};
|
|
25
16
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/table/body-cell/index.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/table/body-cell/index.tsx"],"names":[],"mappings":"AASA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAkB,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAcnE,UAAU,kBAAkB,CAAC,QAAQ,EAAE,SAAS,CAAE,SAAQ,mBAAmB;IAC3E,MAAM,EAAE,UAAU,CAAC,wBAAwB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IACjE,IAAI,EAAE,QAAQ,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,UAAU,CAAC,EAAE,UAAU,CAAC,kBAAkB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IAChE,UAAU,EAAE,UAAU,CAAC,YAAY,CAAC,CAAC;CACtC;AAsFD,wBAAgB,aAAa,CAAC,QAAQ,EAAE,SAAS,EAAE,EACjD,UAAU,EACV,GAAG,IAAI,EACR,EAAE,kBAAkB,CAAC,QAAQ,EAAE,SAAS,CAAC,GAAG;IAAE,UAAU,EAAE,OAAO,CAAA;CAAE,eAMnE"}
|
package/table/body-cell/index.js
CHANGED
|
@@ -3,15 +3,54 @@ import { __assign, __rest } from "tslib";
|
|
|
3
3
|
// SPDX-License-Identifier: Apache-2.0
|
|
4
4
|
import clsx from 'clsx';
|
|
5
5
|
import styles from './styles.css.js';
|
|
6
|
-
import React from 'react';
|
|
7
|
-
import
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
6
|
+
import React, { useCallback, useRef } from 'react';
|
|
7
|
+
import useFocusVisible from '../../internal/hooks/focus-visible';
|
|
8
|
+
import { useEffectOnUpdate } from '../../internal/hooks/use-effect-on-update';
|
|
9
|
+
import Button from '../../button/internal';
|
|
10
|
+
import { TableTdElement } from './td-element';
|
|
11
|
+
import { InlineEditor } from './inline-editor';
|
|
12
|
+
import { useStableScrollPosition } from './use-stable-scroll-position';
|
|
13
|
+
var readonlyState = Object.freeze({
|
|
14
|
+
isEditing: false,
|
|
15
|
+
currentValue: undefined,
|
|
16
|
+
setValue: function () { }
|
|
17
|
+
});
|
|
18
|
+
var submitHandlerFallback = function () {
|
|
19
|
+
throw new Error('The function `handleSubmit` is required for editable columns');
|
|
20
|
+
};
|
|
21
|
+
function TableCellEditable(_a) {
|
|
22
|
+
var _b;
|
|
23
|
+
var className = _a.className, item = _a.item, column = _a.column, isEditing = _a.isEditing, onEditStart = _a.onEditStart, onEditEnd = _a.onEditEnd, submitEdit = _a.submitEdit, ariaLabels = _a.ariaLabels, isVisualRefresh = _a.isVisualRefresh, rest = __rest(_a, ["className", "item", "column", "isEditing", "onEditStart", "onEditEnd", "submitEdit", "ariaLabels", "isVisualRefresh"]);
|
|
24
|
+
var editActivateRef = useRef(null);
|
|
25
|
+
var cellRef = useRef(null);
|
|
26
|
+
var focusVisible = useFocusVisible();
|
|
27
|
+
var _c = useStableScrollPosition(cellRef), storeScrollPosition = _c.storeScrollPosition, restoreScrollPosition = _c.restoreScrollPosition;
|
|
28
|
+
var handleEditStart = function () {
|
|
29
|
+
storeScrollPosition();
|
|
30
|
+
if (!isEditing) {
|
|
31
|
+
onEditStart();
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
var scheduleRestoreScrollPosition = useCallback(function () { return setTimeout(restoreScrollPosition, 0); }, [restoreScrollPosition]);
|
|
35
|
+
var tdNativeAttributes = __assign(__assign({}, focusVisible), { onFocus: scheduleRestoreScrollPosition, 'data-inline-editing-active': isEditing.toString() });
|
|
36
|
+
useEffectOnUpdate(function () {
|
|
37
|
+
if (!isEditing && editActivateRef.current) {
|
|
38
|
+
editActivateRef.current.focus({ preventScroll: true });
|
|
39
|
+
}
|
|
40
|
+
var timer = scheduleRestoreScrollPosition();
|
|
41
|
+
return function () { return clearTimeout(timer); };
|
|
42
|
+
}, [isEditing, scheduleRestoreScrollPosition]);
|
|
43
|
+
return (React.createElement(TableTdElement, __assign({}, rest, { nativeAttributes: tdNativeAttributes, className: clsx(className, styles['body-cell-editable'], isEditing && styles['body-cell-edit-active'], isVisualRefresh && styles['is-visual-refresh']), onClick: handleEditStart, ref: cellRef }), isEditing ? (React.createElement(InlineEditor, { ariaLabels: ariaLabels, column: column, item: item, onEditEnd: onEditEnd, submitEdit: submitEdit !== null && submitEdit !== void 0 ? submitEdit : submitHandlerFallback, __onRender: restoreScrollPosition })) : (React.createElement(React.Fragment, null,
|
|
44
|
+
column.cell(item, readonlyState),
|
|
45
|
+
React.createElement("span", { className: styles['body-cell-editor'] },
|
|
46
|
+
React.createElement(Button, { __hideFocusOutline: true, __internalRootRef: editActivateRef, ariaLabel: (_b = ariaLabels === null || ariaLabels === void 0 ? void 0 : ariaLabels.activateEditLabel) === null || _b === void 0 ? void 0 : _b.call(ariaLabels, column), formAction: "none", iconName: "edit", variant: "inline-icon" }))))));
|
|
12
47
|
}
|
|
13
|
-
export function
|
|
14
|
-
var
|
|
15
|
-
|
|
48
|
+
export function TableBodyCell(_a) {
|
|
49
|
+
var isEditable = _a.isEditable, rest = __rest(_a, ["isEditable"]);
|
|
50
|
+
if (isEditable || rest.isEditing) {
|
|
51
|
+
return React.createElement(TableCellEditable, __assign({}, rest));
|
|
52
|
+
}
|
|
53
|
+
var column = rest.column, item = rest.item;
|
|
54
|
+
return React.createElement(TableTdElement, __assign({}, rest), column.cell(item, readonlyState));
|
|
16
55
|
}
|
|
17
56
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/table/body-cell/index.tsx"],"names":[],"mappings":";AAAA,qEAAqE;AACrE,sCAAsC;AACtC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,MAAM,MAAM,iBAAiB,CAAC;AACrC,OAAO,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/table/body-cell/index.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport clsx from 'clsx';\nimport styles from './styles.css.js';\nimport React, { useCallback, useRef } from 'react';\nimport useFocusVisible from '../../internal/hooks/focus-visible';\nimport { useEffectOnUpdate } from '../../internal/hooks/use-effect-on-update';\nimport Button from '../../button/internal';\nimport { ButtonProps } from '../../button/interfaces';\nimport { TableProps } from '../interfaces';\nimport { TableTdElement, TableTdElementProps } from './td-element';\nimport { InlineEditor } from './inline-editor';\nimport { useStableScrollPosition } from './use-stable-scroll-position';\n\nconst readonlyState = Object.freeze({\n isEditing: false,\n currentValue: undefined,\n setValue: () => {},\n});\n\nconst submitHandlerFallback = () => {\n throw new Error('The function `handleSubmit` is required for editable columns');\n};\n\ninterface TableBodyCellProps<ItemType, ValueType> extends TableTdElementProps {\n column: TableProps.EditableColumnDefinition<ItemType, ValueType>;\n item: ItemType;\n isEditing: boolean;\n onEditStart: () => void;\n onEditEnd: () => void;\n submitEdit?: TableProps.SubmitEditFunction<ItemType, ValueType>;\n ariaLabels: TableProps['ariaLabels'];\n}\n\nfunction TableCellEditable<ItemType, ValueType>({\n className,\n item,\n column,\n isEditing,\n onEditStart,\n onEditEnd,\n submitEdit,\n ariaLabels,\n isVisualRefresh,\n ...rest\n}: TableBodyCellProps<ItemType, ValueType>) {\n const editActivateRef = useRef<ButtonProps.Ref>(null);\n const cellRef = useRef<HTMLTableCellElement>(null);\n const focusVisible = useFocusVisible();\n const { storeScrollPosition, restoreScrollPosition } = useStableScrollPosition(cellRef);\n\n const handleEditStart = () => {\n storeScrollPosition();\n if (!isEditing) {\n onEditStart();\n }\n };\n\n const scheduleRestoreScrollPosition = useCallback(\n () => setTimeout(restoreScrollPosition, 0),\n [restoreScrollPosition]\n );\n\n const tdNativeAttributes = {\n ...(focusVisible as Record<string, string>),\n onFocus: scheduleRestoreScrollPosition,\n 'data-inline-editing-active': isEditing.toString(),\n };\n\n useEffectOnUpdate(() => {\n if (!isEditing && editActivateRef.current) {\n editActivateRef.current.focus({ preventScroll: true });\n }\n const timer = scheduleRestoreScrollPosition();\n return () => clearTimeout(timer);\n }, [isEditing, scheduleRestoreScrollPosition]);\n\n return (\n <TableTdElement\n {...rest}\n nativeAttributes={tdNativeAttributes as TableTdElementProps['nativeAttributes']}\n className={clsx(\n className,\n styles['body-cell-editable'],\n isEditing && styles['body-cell-edit-active'],\n isVisualRefresh && styles['is-visual-refresh']\n )}\n onClick={handleEditStart}\n ref={cellRef}\n >\n {isEditing ? (\n <InlineEditor\n ariaLabels={ariaLabels}\n column={column}\n item={item}\n onEditEnd={onEditEnd}\n submitEdit={submitEdit ?? submitHandlerFallback}\n __onRender={restoreScrollPosition}\n />\n ) : (\n <>\n {column.cell(item, readonlyState)}\n <span className={styles['body-cell-editor']}>\n <Button\n __hideFocusOutline={true}\n __internalRootRef={editActivateRef}\n ariaLabel={ariaLabels?.activateEditLabel?.(column)}\n formAction=\"none\"\n iconName=\"edit\"\n variant=\"inline-icon\"\n />\n </span>\n </>\n )}\n </TableTdElement>\n );\n}\n\nexport function TableBodyCell<ItemType, ValueType>({\n isEditable,\n ...rest\n}: TableBodyCellProps<ItemType, ValueType> & { isEditable: boolean }) {\n if (isEditable || rest.isEditing) {\n return <TableCellEditable {...rest} />;\n }\n const { column, item } = rest;\n return <TableTdElement {...rest}>{column.cell(item, readonlyState)}</TableTdElement>;\n}\n"]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { TableProps } from '../interfaces';
|
|
2
|
+
interface InlineEditorProps<ItemType, ValueType> {
|
|
3
|
+
ariaLabels: TableProps['ariaLabels'];
|
|
4
|
+
column: TableProps.EditableColumnDefinition<ItemType, ValueType>;
|
|
5
|
+
item: ItemType;
|
|
6
|
+
onEditEnd: () => void;
|
|
7
|
+
submitEdit: TableProps.SubmitEditFunction<ItemType, ValueType>;
|
|
8
|
+
__onRender?: () => void;
|
|
9
|
+
}
|
|
10
|
+
export declare function InlineEditor<ItemType, ValueType>({ ariaLabels, item, column, onEditEnd, submitEdit, __onRender, }: InlineEditorProps<ItemType, ValueType>): JSX.Element;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=inline-editor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inline-editor.d.ts","sourceRoot":"","sources":["../../../../src/table/body-cell/inline-editor.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAO3C,UAAU,iBAAiB,CAAC,QAAQ,EAAE,SAAS;IAC7C,UAAU,EAAE,UAAU,CAAC,YAAY,CAAC,CAAC;IACrC,MAAM,EAAE,UAAU,CAAC,wBAAwB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IACjE,IAAI,EAAE,QAAQ,CAAC;IACf,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,UAAU,EAAE,UAAU,CAAC,kBAAkB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IAC/D,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;CACzB;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,SAAS,EAAE,EAChD,UAAU,EACV,IAAI,EACJ,MAAM,EACN,SAAS,EACT,UAAU,EACV,UAAU,GACX,EAAE,iBAAiB,CAAC,QAAQ,EAAE,SAAS,CAAC,eAqGxC"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { __awaiter, __generator } from "tslib";
|
|
2
|
+
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
3
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
import React, { useEffect, useState } from 'react';
|
|
5
|
+
import Button from '../../button/internal';
|
|
6
|
+
import FormField from '../../form-field/internal';
|
|
7
|
+
import SpaceBetween from '../../space-between/internal';
|
|
8
|
+
import { useClickAway } from './click-away';
|
|
9
|
+
import styles from './styles.css.js';
|
|
10
|
+
// A function that does nothing
|
|
11
|
+
var noop = function () { return undefined; };
|
|
12
|
+
export function InlineEditor(_a) {
|
|
13
|
+
var _b, _c;
|
|
14
|
+
var ariaLabels = _a.ariaLabels, item = _a.item, column = _a.column, onEditEnd = _a.onEditEnd, submitEdit = _a.submitEdit, __onRender = _a.__onRender;
|
|
15
|
+
var _d = useState(false), currentEditLoading = _d[0], setCurrentEditLoading = _d[1];
|
|
16
|
+
var _e = useState(), currentEditValue = _e[0], setCurrentEditValue = _e[1];
|
|
17
|
+
var cellContext = {
|
|
18
|
+
isEditing: true,
|
|
19
|
+
currentValue: currentEditValue,
|
|
20
|
+
setValue: setCurrentEditValue
|
|
21
|
+
};
|
|
22
|
+
function finishEdit(cancel) {
|
|
23
|
+
if (cancel === void 0) { cancel = false; }
|
|
24
|
+
if (!cancel) {
|
|
25
|
+
setCurrentEditValue(undefined);
|
|
26
|
+
}
|
|
27
|
+
onEditEnd();
|
|
28
|
+
}
|
|
29
|
+
function onSubmitClick(evt) {
|
|
30
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
31
|
+
var e_1;
|
|
32
|
+
return __generator(this, function (_a) {
|
|
33
|
+
switch (_a.label) {
|
|
34
|
+
case 0:
|
|
35
|
+
evt.preventDefault();
|
|
36
|
+
if (currentEditValue === undefined) {
|
|
37
|
+
finishEdit();
|
|
38
|
+
return [2 /*return*/];
|
|
39
|
+
}
|
|
40
|
+
setCurrentEditLoading(true);
|
|
41
|
+
_a.label = 1;
|
|
42
|
+
case 1:
|
|
43
|
+
_a.trys.push([1, 3, , 4]);
|
|
44
|
+
return [4 /*yield*/, submitEdit(item, column, currentEditValue)];
|
|
45
|
+
case 2:
|
|
46
|
+
_a.sent();
|
|
47
|
+
setCurrentEditLoading(false);
|
|
48
|
+
finishEdit();
|
|
49
|
+
return [3 /*break*/, 4];
|
|
50
|
+
case 3:
|
|
51
|
+
e_1 = _a.sent();
|
|
52
|
+
setCurrentEditLoading(false);
|
|
53
|
+
return [3 /*break*/, 4];
|
|
54
|
+
case 4: return [2 /*return*/];
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
function onCancel() {
|
|
60
|
+
if (currentEditLoading) {
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
finishEdit(true);
|
|
64
|
+
}
|
|
65
|
+
function handleEscape(event) {
|
|
66
|
+
if (event.key === 'Escape') {
|
|
67
|
+
onCancel();
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
var clickAwayRef = useClickAway(onCancel);
|
|
71
|
+
useEffect(function () {
|
|
72
|
+
if (__onRender) {
|
|
73
|
+
var timer_1 = setTimeout(__onRender, 1);
|
|
74
|
+
return function () { return clearTimeout(timer_1); };
|
|
75
|
+
}
|
|
76
|
+
}, [__onRender]);
|
|
77
|
+
// asserting non-undefined editConfig here because this component is unreachable otherwise
|
|
78
|
+
var _f = column.editConfig, _g = _f.ariaLabel, ariaLabel = _g === void 0 ? undefined : _g, _h = _f.validation, validation = _h === void 0 ? noop : _h, errorIconAriaLabel = _f.errorIconAriaLabel;
|
|
79
|
+
return (React.createElement("form", { ref: clickAwayRef, onSubmit: onSubmitClick, onKeyDown: handleEscape, className: styles['body-cell-editor-form'] },
|
|
80
|
+
React.createElement(FormField, { stretch: true, label: ariaLabel, __hideLabel: true, __disableGutters: true, __useReactAutofocus: true, i18nStrings: { errorIconAriaLabel: errorIconAriaLabel }, errorText: validation(item, currentEditValue) },
|
|
81
|
+
React.createElement("div", { className: styles['body-cell-editor-row'] },
|
|
82
|
+
column.cell(item, cellContext),
|
|
83
|
+
React.createElement("span", { className: styles['body-cell-editor-controls'] },
|
|
84
|
+
React.createElement(SpaceBetween, { direction: "horizontal", size: "xxs" },
|
|
85
|
+
!currentEditLoading ? (React.createElement(Button, { ariaLabel: (_b = ariaLabels === null || ariaLabels === void 0 ? void 0 : ariaLabels.cancelEditLabel) === null || _b === void 0 ? void 0 : _b.call(ariaLabels, column), formAction: "none", iconName: "close", variant: "inline-icon", onClick: onCancel })) : null,
|
|
86
|
+
React.createElement(Button, { ariaLabel: (_c = ariaLabels === null || ariaLabels === void 0 ? void 0 : ariaLabels.submitEditLabel) === null || _c === void 0 ? void 0 : _c.call(ariaLabels, column), formAction: "submit", iconName: "check", variant: "inline-icon", loading: currentEditLoading })))))));
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=inline-editor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inline-editor.js","sourceRoot":"","sources":["../../../../src/table/body-cell/inline-editor.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport React, { useEffect, useState } from 'react';\nimport Button from '../../button/internal';\nimport FormField from '../../form-field/internal';\nimport SpaceBetween from '../../space-between/internal';\nimport { useClickAway } from './click-away';\nimport { TableProps } from '../interfaces';\nimport styles from './styles.css.js';\nimport { Optional } from '../../internal/types';\n\n// A function that does nothing\nconst noop = () => undefined;\n\ninterface InlineEditorProps<ItemType, ValueType> {\n ariaLabels: TableProps['ariaLabels'];\n column: TableProps.EditableColumnDefinition<ItemType, ValueType>;\n item: ItemType;\n onEditEnd: () => void;\n submitEdit: TableProps.SubmitEditFunction<ItemType, ValueType>;\n __onRender?: () => void;\n}\n\nexport function InlineEditor<ItemType, ValueType>({\n ariaLabels,\n item,\n column,\n onEditEnd,\n submitEdit,\n __onRender,\n}: InlineEditorProps<ItemType, ValueType>) {\n const [currentEditLoading, setCurrentEditLoading] = useState(false);\n const [currentEditValue, setCurrentEditValue] = useState<Optional<ValueType>>();\n\n const cellContext = {\n isEditing: true,\n currentValue: currentEditValue,\n setValue: setCurrentEditValue,\n };\n\n function finishEdit(cancel = false) {\n if (!cancel) {\n setCurrentEditValue(undefined);\n }\n onEditEnd();\n }\n\n async function onSubmitClick(evt: React.FormEvent) {\n evt.preventDefault();\n if (currentEditValue === undefined) {\n finishEdit();\n return;\n }\n\n setCurrentEditLoading(true);\n try {\n await submitEdit(item, column, currentEditValue);\n setCurrentEditLoading(false);\n finishEdit();\n } catch (e) {\n setCurrentEditLoading(false);\n }\n }\n\n function onCancel() {\n if (currentEditLoading) {\n return;\n }\n finishEdit(true);\n }\n\n function handleEscape(event: React.KeyboardEvent): void {\n if (event.key === 'Escape') {\n onCancel();\n }\n }\n\n const clickAwayRef = useClickAway(onCancel);\n\n useEffect(() => {\n if (__onRender) {\n const timer = setTimeout(__onRender, 1);\n return () => clearTimeout(timer);\n }\n }, [__onRender]);\n\n // asserting non-undefined editConfig here because this component is unreachable otherwise\n const { ariaLabel = undefined, validation = noop, errorIconAriaLabel } = column.editConfig!;\n\n return (\n <form\n ref={clickAwayRef}\n onSubmit={onSubmitClick}\n onKeyDown={handleEscape}\n className={styles['body-cell-editor-form']}\n >\n <FormField\n stretch={true}\n label={ariaLabel}\n __hideLabel={true}\n __disableGutters={true}\n __useReactAutofocus={true}\n i18nStrings={{ errorIconAriaLabel }}\n errorText={validation(item, currentEditValue)}\n >\n <div className={styles['body-cell-editor-row']}>\n {column.cell(item, cellContext)}\n <span className={styles['body-cell-editor-controls']}>\n <SpaceBetween direction=\"horizontal\" size=\"xxs\">\n {!currentEditLoading ? (\n <Button\n ariaLabel={ariaLabels?.cancelEditLabel?.(column)}\n formAction=\"none\"\n iconName=\"close\"\n variant=\"inline-icon\"\n onClick={onCancel}\n />\n ) : null}\n <Button\n ariaLabel={ariaLabels?.submitEditLabel?.(column)}\n formAction=\"submit\"\n iconName=\"check\"\n variant=\"inline-icon\"\n loading={currentEditLoading}\n />\n </SpaceBetween>\n </span>\n </div>\n </FormField>\n </form>\n );\n}\n"]}
|
|
@@ -1,17 +1,23 @@
|
|
|
1
1
|
|
|
2
2
|
import './styles.scoped.css';
|
|
3
3
|
export default {
|
|
4
|
-
"body-cell": "awsui_body-
|
|
5
|
-
"body-cell-wrap": "awsui_body-cell-
|
|
6
|
-
"
|
|
7
|
-
"
|
|
8
|
-
"body-cell-
|
|
9
|
-
"
|
|
10
|
-
"
|
|
11
|
-
"body-cell-
|
|
12
|
-
"body-cell-
|
|
13
|
-
"
|
|
14
|
-
"has-
|
|
15
|
-
"
|
|
4
|
+
"body-cell": "awsui_body-cell_c6tup_17cg6_93",
|
|
5
|
+
"body-cell-wrap": "awsui_body-cell-wrap_c6tup_17cg6_102",
|
|
6
|
+
"is-visual-refresh": "awsui_is-visual-refresh_c6tup_17cg6_114",
|
|
7
|
+
"has-striped-rows": "awsui_has-striped-rows_c6tup_17cg6_126",
|
|
8
|
+
"body-cell-edit-active": "awsui_body-cell-edit-active_c6tup_17cg6_129",
|
|
9
|
+
"body-cell-editable": "awsui_body-cell-editable_c6tup_17cg6_129",
|
|
10
|
+
"has-selection": "awsui_has-selection_c6tup_17cg6_135",
|
|
11
|
+
"body-cell-first-row": "awsui_body-cell-first-row_c6tup_17cg6_141",
|
|
12
|
+
"body-cell-last-row": "awsui_body-cell-last-row_c6tup_17cg6_144",
|
|
13
|
+
"body-cell-selected": "awsui_body-cell-selected_c6tup_17cg6_144",
|
|
14
|
+
"has-footer": "awsui_has-footer_c6tup_17cg6_144",
|
|
15
|
+
"body-cell-shaded": "awsui_body-cell-shaded_c6tup_17cg6_154",
|
|
16
|
+
"body-cell-next-selected": "awsui_body-cell-next-selected_c6tup_17cg6_176",
|
|
17
|
+
"body-cell-prev-selected": "awsui_body-cell-prev-selected_c6tup_17cg6_180",
|
|
18
|
+
"body-cell-editor": "awsui_body-cell-editor_c6tup_17cg6_204",
|
|
19
|
+
"body-cell-editor-form": "awsui_body-cell-editor-form_c6tup_17cg6_214",
|
|
20
|
+
"body-cell-editor-row": "awsui_body-cell-editor-row_c6tup_17cg6_223",
|
|
21
|
+
"body-cell-editor-controls": "awsui_body-cell-editor-controls_c6tup_17cg6_233"
|
|
16
22
|
};
|
|
17
23
|
|