@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.
Files changed (85) hide show
  1. package/breadcrumb-group/internal.d.ts +1 -1
  2. package/breadcrumb-group/internal.d.ts.map +1 -1
  3. package/breadcrumb-group/internal.js.map +1 -1
  4. package/button/internal.d.ts +1 -0
  5. package/button/internal.d.ts.map +1 -1
  6. package/button/internal.js +2 -2
  7. package/button/internal.js.map +1 -1
  8. package/form-field/interfaces.d.ts +10 -0
  9. package/form-field/interfaces.d.ts.map +1 -1
  10. package/form-field/interfaces.js.map +1 -1
  11. package/form-field/internal.d.ts +1 -1
  12. package/form-field/internal.d.ts.map +1 -1
  13. package/form-field/internal.js +5 -4
  14. package/form-field/internal.js.map +1 -1
  15. package/input/internal.d.ts.map +1 -1
  16. package/input/internal.js +16 -4
  17. package/input/internal.js.map +1 -1
  18. package/internal/context/form-field-context.d.ts +6 -2
  19. package/internal/context/form-field-context.d.ts.map +1 -1
  20. package/internal/context/form-field-context.js +7 -1
  21. package/internal/context/form-field-context.js.map +1 -1
  22. package/internal/environment.js +1 -1
  23. package/internal/manifest.json +1 -1
  24. package/internal/types.d.ts +9 -0
  25. package/internal/types.d.ts.map +1 -1
  26. package/internal/types.js +0 -2
  27. package/internal/types.js.map +1 -1
  28. package/package.json +1 -1
  29. package/select/parts/styles.css.js +9 -9
  30. package/select/parts/styles.scoped.css +27 -9
  31. package/select/parts/styles.selectors.js +9 -9
  32. package/table/body-cell/click-away.d.ts +9 -0
  33. package/table/body-cell/click-away.d.ts.map +1 -0
  34. package/table/body-cell/click-away.js +38 -0
  35. package/table/body-cell/click-away.js.map +1 -0
  36. package/table/body-cell/index.d.ts +11 -20
  37. package/table/body-cell/index.d.ts.map +1 -1
  38. package/table/body-cell/index.js +48 -9
  39. package/table/body-cell/index.js.map +1 -1
  40. package/table/body-cell/inline-editor.d.ts +12 -0
  41. package/table/body-cell/inline-editor.d.ts.map +1 -0
  42. package/table/body-cell/inline-editor.js +88 -0
  43. package/table/body-cell/inline-editor.js.map +1 -0
  44. package/table/body-cell/styles.css.js +18 -12
  45. package/table/body-cell/styles.scoped.css +229 -46
  46. package/table/body-cell/styles.selectors.js +18 -12
  47. package/table/body-cell/td-element.d.ts +21 -0
  48. package/table/body-cell/td-element.d.ts.map +1 -0
  49. package/table/body-cell/td-element.js +11 -0
  50. package/table/body-cell/td-element.js.map +1 -0
  51. package/table/body-cell/use-stable-scroll-position.d.ts +17 -0
  52. package/table/body-cell/use-stable-scroll-position.d.ts.map +1 -0
  53. package/table/body-cell/use-stable-scroll-position.js +48 -0
  54. package/table/body-cell/use-stable-scroll-position.js.map +1 -0
  55. package/table/header-cell/index.d.ts +8 -7
  56. package/table/header-cell/index.d.ts.map +1 -1
  57. package/table/header-cell/index.js +6 -2
  58. package/table/header-cell/index.js.map +1 -1
  59. package/table/header-cell/styles.css.js +19 -18
  60. package/table/header-cell/styles.scoped.css +40 -35
  61. package/table/header-cell/styles.selectors.js +19 -18
  62. package/table/header-cell/utils.d.ts +1 -1
  63. package/table/header-cell/utils.d.ts.map +1 -1
  64. package/table/interfaces.d.ts +85 -10
  65. package/table/interfaces.d.ts.map +1 -1
  66. package/table/interfaces.js.map +1 -1
  67. package/table/internal.d.ts.map +1 -1
  68. package/table/internal.js +68 -18
  69. package/table/internal.js.map +1 -1
  70. package/table/thead.d.ts.map +1 -1
  71. package/table/thead.js +1 -1
  72. package/table/thead.js.map +1 -1
  73. package/table/use-table-focus-navigation.d.ts +16 -0
  74. package/table/use-table-focus-navigation.d.ts.map +1 -0
  75. package/table/use-table-focus-navigation.js +131 -0
  76. package/table/use-table-focus-navigation.js.map +1 -0
  77. package/table/utils.d.ts +1 -1
  78. package/table/utils.d.ts.map +1 -1
  79. package/test-utils/dom/table/index.d.ts +4 -0
  80. package/test-utils/dom/table/index.js +21 -5
  81. package/test-utils/dom/table/index.js.map +1 -1
  82. package/test-utils/selectors/table/index.d.ts +4 -0
  83. package/test-utils/selectors/table/index.js +21 -5
  84. package/test-utils/selectors/table/index.js.map +1 -1
  85. 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
- .awsui_placeholder_dwuol_agn1m_93:not(#\9) {
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
- .awsui_item_dwuol_agn1m_98:not(#\9) {
98
+ .awsui_item_dwuol_1dl3j_98:not(#\9) {
99
99
  display: flex;
100
100
  align-items: center;
101
101
  }
102
- .awsui_item_dwuol_agn1m_98 > .awsui_checkbox_dwuol_agn1m_102:not(#\9) {
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
- .awsui_filter_dwuol_agn1m_111:not(#\9) {
111
+ .awsui_filter_dwuol_1dl3j_111:not(#\9) {
112
112
  z-index: 4;
113
113
  flex-shrink: 0;
114
114
  }
115
115
 
116
- .awsui_trigger_dwuol_agn1m_116:not(#\9) {
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-strut_dwuol_agn1m_122:not(#\9) {
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-bottom_dwuol_agn1m_128:not(#\9) {
146
+ .awsui_list-bottom_dwuol_1dl3j_146:not(#\9) {
129
147
  /* used in unit-tests */
130
148
  }
131
149
 
132
- .awsui_selected-icon_dwuol_agn1m_132:not(#\9) {
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-tag_dwuol_agn1m_136 > .awsui_selected-icon_dwuol_agn1m_132:not(#\9) {
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": "awsui_placeholder_dwuol_agn1m_93",
6
- "item": "awsui_item_dwuol_agn1m_98",
7
- "checkbox": "awsui_checkbox_dwuol_agn1m_102",
8
- "filter": "awsui_filter_dwuol_agn1m_111",
9
- "trigger": "awsui_trigger_dwuol_agn1m_116",
10
- "layout-strut": "awsui_layout-strut_dwuol_agn1m_122",
11
- "list-bottom": "awsui_list-bottom_dwuol_agn1m_128",
12
- "selected-icon": "awsui_selected-icon_dwuol_agn1m_132",
13
- "show-label-tag": "awsui_show-label-tag_dwuol_agn1m_136"
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
- interface TableBodyCellProps {
4
- className?: string;
5
- style?: React.CSSProperties;
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 TableBodyCellContent<ItemType>({ item, column, ...rest }: TableBodyCellContentProps<ItemType>): JSX.Element;
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":"AAIA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAG3C,UAAU,kBAAkB;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,SAAS,EAAE,OAAO,GAAG,SAAS,CAAC;IAC/B,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,EAAE,OAAO,CAAC;IACpB,cAAc,EAAE,OAAO,CAAC;IACxB,cAAc,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,wBAAgB,aAAa,CAAC,EAC5B,SAAS,EACT,KAAK,EACL,QAAQ,EACR,SAAS,EACT,UAAU,EACV,SAAS,EACT,UAAU,EACV,cAAc,EACd,cAAc,EACd,SAAS,EACT,WAAW,EACX,YAAY,EACZ,SAAS,GACV,EAAE,kBAAkB,eAyBpB;AAED,UAAU,yBAAyB,CAAC,QAAQ,CAAE,SAAQ,kBAAkB;IACtE,MAAM,EAAE,UAAU,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC9C,IAAI,EAAE,QAAQ,CAAC;CAChB;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,EAAE,yBAAyB,CAAC,QAAQ,CAAC,eAE5G"}
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"}
@@ -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 { useVisualRefresh } from '../../internal/hooks/use-visual-mode';
8
- export function TableBodyCell(_a) {
9
- var className = _a.className, style = _a.style, children = _a.children, wrapLines = _a.wrapLines, isFirstRow = _a.isFirstRow, isLastRow = _a.isLastRow, isSelected = _a.isSelected, isNextSelected = _a.isNextSelected, isPrevSelected = _a.isPrevSelected, isEvenRow = _a.isEvenRow, stripedRows = _a.stripedRows, hasSelection = _a.hasSelection, hasFooter = _a.hasFooter;
10
- var isVisualRefresh = useVisualRefresh();
11
- return (React.createElement("td", { style: style, className: clsx(className, styles['body-cell'], wrapLines && styles['body-cell-wrap'], isFirstRow && styles['body-cell-first-row'], isLastRow && styles['body-cell-last-row'], isSelected && styles['body-cell-selected'], isNextSelected && styles['body-cell-next-selected'], isPrevSelected && styles['body-cell-prev-selected'], !isEvenRow && stripedRows && styles['body-cell-shaded'], stripedRows && styles['has-striped-rows'], isVisualRefresh && styles['is-visual-refresh'], hasSelection && styles['has-selection'], hasFooter && styles['has-footer']) }, children));
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 TableBodyCellContent(_a) {
14
- var item = _a.item, column = _a.column, rest = __rest(_a, ["item", "column"]);
15
- return React.createElement(TableBodyCell, __assign({}, rest), column.cell(item));
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;AAE1B,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AAkBxE,MAAM,UAAU,aAAa,CAAC,EAcT;QAbnB,SAAS,eAAA,EACT,KAAK,WAAA,EACL,QAAQ,cAAA,EACR,SAAS,eAAA,EACT,UAAU,gBAAA,EACV,SAAS,eAAA,EACT,UAAU,gBAAA,EACV,cAAc,oBAAA,EACd,cAAc,oBAAA,EACd,SAAS,eAAA,EACT,WAAW,iBAAA,EACX,YAAY,kBAAA,EACZ,SAAS,eAAA;IAET,IAAM,eAAe,GAAG,gBAAgB,EAAE,CAAC;IAE3C,OAAO,CACL,4BACE,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,IAAI,CACb,SAAS,EACT,MAAM,CAAC,WAAW,CAAC,EACnB,SAAS,IAAI,MAAM,CAAC,gBAAgB,CAAC,EACrC,UAAU,IAAI,MAAM,CAAC,qBAAqB,CAAC,EAC3C,SAAS,IAAI,MAAM,CAAC,oBAAoB,CAAC,EACzC,UAAU,IAAI,MAAM,CAAC,oBAAoB,CAAC,EAC1C,cAAc,IAAI,MAAM,CAAC,yBAAyB,CAAC,EACnD,cAAc,IAAI,MAAM,CAAC,yBAAyB,CAAC,EACnD,CAAC,SAAS,IAAI,WAAW,IAAI,MAAM,CAAC,kBAAkB,CAAC,EACvD,WAAW,IAAI,MAAM,CAAC,kBAAkB,CAAC,EACzC,eAAe,IAAI,MAAM,CAAC,mBAAmB,CAAC,EAC9C,YAAY,IAAI,MAAM,CAAC,eAAe,CAAC,EACvC,SAAS,IAAI,MAAM,CAAC,YAAY,CAAC,CAClC,IAEA,QAAQ,CACN,CACN,CAAC;AACJ,CAAC;AAOD,MAAM,UAAU,oBAAoB,CAAW,EAA8D;IAA5D,IAAA,IAAI,UAAA,EAAE,MAAM,YAAA,EAAK,IAAI,cAAvB,kBAAyB,CAAF;IACpE,OAAO,oBAAC,aAAa,eAAK,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAiB,CAAC;AACtE,CAAC","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 from 'react';\nimport { TableProps } from '../interfaces';\nimport { useVisualRefresh } from '../../internal/hooks/use-visual-mode';\n\ninterface TableBodyCellProps {\n className?: string;\n style?: React.CSSProperties;\n wrapLines: boolean | undefined;\n isFirstRow: boolean;\n isLastRow: boolean;\n isEvenRow?: boolean;\n stripedRows?: boolean;\n isSelected: boolean;\n isNextSelected: boolean;\n isPrevSelected: boolean;\n children?: React.ReactNode;\n hasSelection?: boolean;\n hasFooter?: boolean;\n}\n\nexport function TableBodyCell({\n className,\n style,\n children,\n wrapLines,\n isFirstRow,\n isLastRow,\n isSelected,\n isNextSelected,\n isPrevSelected,\n isEvenRow,\n stripedRows,\n hasSelection,\n hasFooter,\n}: TableBodyCellProps) {\n const isVisualRefresh = useVisualRefresh();\n\n return (\n <td\n style={style}\n className={clsx(\n className,\n styles['body-cell'],\n wrapLines && styles['body-cell-wrap'],\n isFirstRow && styles['body-cell-first-row'],\n isLastRow && styles['body-cell-last-row'],\n isSelected && styles['body-cell-selected'],\n isNextSelected && styles['body-cell-next-selected'],\n isPrevSelected && styles['body-cell-prev-selected'],\n !isEvenRow && stripedRows && styles['body-cell-shaded'],\n stripedRows && styles['has-striped-rows'],\n isVisualRefresh && styles['is-visual-refresh'],\n hasSelection && styles['has-selection'],\n hasFooter && styles['has-footer']\n )}\n >\n {children}\n </td>\n );\n}\n\ninterface TableBodyCellContentProps<ItemType> extends TableBodyCellProps {\n column: TableProps.ColumnDefinition<ItemType>;\n item: ItemType;\n}\n\nexport function TableBodyCellContent<ItemType>({ item, column, ...rest }: TableBodyCellContentProps<ItemType>) {\n return <TableBodyCell {...rest}>{column.cell(item)}</TableBodyCell>;\n}\n"]}
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-cell_c6tup_9o7yk_9",
5
- "body-cell-wrap": "awsui_body-cell-wrap_c6tup_9o7yk_18",
6
- "body-cell-first-row": "awsui_body-cell-first-row_c6tup_9o7yk_30",
7
- "body-cell-last-row": "awsui_body-cell-last-row_c6tup_9o7yk_33",
8
- "body-cell-selected": "awsui_body-cell-selected_c6tup_9o7yk_33",
9
- "has-footer": "awsui_has-footer_c6tup_9o7yk_33",
10
- "body-cell-shaded": "awsui_body-cell-shaded_c6tup_9o7yk_43",
11
- "body-cell-next-selected": "awsui_body-cell-next-selected_c6tup_9o7yk_65",
12
- "body-cell-prev-selected": "awsui_body-cell-prev-selected_c6tup_9o7yk_69",
13
- "is-visual-refresh": "awsui_is-visual-refresh_c6tup_9o7yk_98",
14
- "has-selection": "awsui_has-selection_c6tup_9o7yk_114",
15
- "has-striped-rows": "awsui_has-striped-rows_c6tup_9o7yk_117"
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