@cloudscape-design/components-themeable 3.0.165 → 3.0.167

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 (148) hide show
  1. package/lib/internal/manifest.json +1 -1
  2. package/lib/internal/scss/code-editor/resizable-box/styles.scss +37 -0
  3. package/lib/internal/scss/code-editor/styles.scss +1 -29
  4. package/lib/internal/scss/select/parts/styles.scss +9 -0
  5. package/lib/internal/scss/table/body-cell/styles.scss +131 -29
  6. package/lib/internal/scss/table/header-cell/styles.scss +15 -7
  7. package/lib/internal/template/button/internal.d.ts +1 -0
  8. package/lib/internal/template/button/internal.d.ts.map +1 -1
  9. package/lib/internal/template/button/internal.js +2 -2
  10. package/lib/internal/template/button/internal.js.map +1 -1
  11. package/lib/internal/template/code-editor/index.d.ts.map +1 -1
  12. package/lib/internal/template/code-editor/index.js +5 -8
  13. package/lib/internal/template/code-editor/index.js.map +1 -1
  14. package/lib/internal/template/code-editor/pane.d.ts.map +1 -1
  15. package/lib/internal/template/code-editor/pane.js +4 -4
  16. package/lib/internal/template/code-editor/pane.js.map +1 -1
  17. package/lib/internal/template/code-editor/resizable-box/index.d.ts +9 -0
  18. package/lib/internal/template/code-editor/resizable-box/index.d.ts.map +1 -0
  19. package/lib/internal/template/code-editor/resizable-box/index.js +44 -0
  20. package/lib/internal/template/code-editor/resizable-box/index.js.map +1 -0
  21. package/lib/internal/template/code-editor/resizable-box/styles.css.js +8 -0
  22. package/lib/internal/template/code-editor/resizable-box/styles.scoped.css +62 -0
  23. package/lib/internal/template/code-editor/resizable-box/styles.selectors.js +9 -0
  24. package/lib/internal/template/code-editor/styles.css.js +32 -33
  25. package/lib/internal/template/code-editor/styles.scoped.css +157 -199
  26. package/lib/internal/template/code-editor/styles.selectors.js +32 -33
  27. package/lib/internal/template/form-field/interfaces.d.ts +10 -0
  28. package/lib/internal/template/form-field/interfaces.d.ts.map +1 -1
  29. package/lib/internal/template/form-field/interfaces.js.map +1 -1
  30. package/lib/internal/template/form-field/internal.d.ts +1 -1
  31. package/lib/internal/template/form-field/internal.d.ts.map +1 -1
  32. package/lib/internal/template/form-field/internal.js +5 -4
  33. package/lib/internal/template/form-field/internal.js.map +1 -1
  34. package/lib/internal/template/input/internal.d.ts.map +1 -1
  35. package/lib/internal/template/input/internal.js +16 -4
  36. package/lib/internal/template/input/internal.js.map +1 -1
  37. package/lib/internal/template/internal/components/live-region/index.d.ts +1 -1
  38. package/lib/internal/template/internal/components/live-region/index.d.ts.map +1 -1
  39. package/lib/internal/template/internal/components/live-region/index.js +29 -6
  40. package/lib/internal/template/internal/components/live-region/index.js.map +1 -1
  41. package/lib/internal/template/internal/context/form-field-context.d.ts +6 -2
  42. package/lib/internal/template/internal/context/form-field-context.d.ts.map +1 -1
  43. package/lib/internal/template/internal/context/form-field-context.js +7 -1
  44. package/lib/internal/template/internal/context/form-field-context.js.map +1 -1
  45. package/lib/internal/template/internal/environment.js +1 -1
  46. package/lib/internal/template/internal/hooks/use-telemetry/index.d.ts.map +1 -1
  47. package/lib/internal/template/internal/hooks/use-telemetry/index.js +4 -0
  48. package/lib/internal/template/internal/hooks/use-telemetry/index.js.map +1 -1
  49. package/lib/internal/template/internal/metrics.d.ts +2 -2
  50. package/lib/internal/template/internal/metrics.d.ts.map +1 -1
  51. package/lib/internal/template/internal/metrics.js +20 -17
  52. package/lib/internal/template/internal/metrics.js.map +1 -1
  53. package/lib/internal/template/internal/types.d.ts +9 -0
  54. package/lib/internal/template/internal/types.d.ts.map +1 -1
  55. package/lib/internal/template/internal/types.js +0 -2
  56. package/lib/internal/template/internal/types.js.map +1 -1
  57. package/lib/internal/template/internal/vendor/d3-scale.js +8 -8
  58. package/lib/internal/template/package.json +0 -1
  59. package/lib/internal/template/progress-bar/index.d.ts.map +1 -1
  60. package/lib/internal/template/progress-bar/index.js +14 -3
  61. package/lib/internal/template/progress-bar/index.js.map +1 -1
  62. package/lib/internal/template/select/parts/styles.css.js +9 -9
  63. package/lib/internal/template/select/parts/styles.scoped.css +27 -9
  64. package/lib/internal/template/select/parts/styles.selectors.js +9 -9
  65. package/lib/internal/template/side-navigation/internal.d.ts.map +1 -1
  66. package/lib/internal/template/side-navigation/internal.js +2 -2
  67. package/lib/internal/template/side-navigation/internal.js.map +1 -1
  68. package/lib/internal/template/table/body-cell/click-away.d.ts +9 -0
  69. package/lib/internal/template/table/body-cell/click-away.d.ts.map +1 -0
  70. package/lib/internal/template/table/body-cell/click-away.js +38 -0
  71. package/lib/internal/template/table/body-cell/click-away.js.map +1 -0
  72. package/lib/internal/template/table/body-cell/index.d.ts +10 -19
  73. package/lib/internal/template/table/body-cell/index.d.ts.map +1 -1
  74. package/lib/internal/template/table/body-cell/index.js +49 -9
  75. package/lib/internal/template/table/body-cell/index.js.map +1 -1
  76. package/lib/internal/template/table/body-cell/inline-editor.d.ts +12 -0
  77. package/lib/internal/template/table/body-cell/inline-editor.d.ts.map +1 -0
  78. package/lib/internal/template/table/body-cell/inline-editor.js +88 -0
  79. package/lib/internal/template/table/body-cell/inline-editor.js.map +1 -0
  80. package/lib/internal/template/table/body-cell/styles.css.js +18 -12
  81. package/lib/internal/template/table/body-cell/styles.scoped.css +229 -46
  82. package/lib/internal/template/table/body-cell/styles.selectors.js +18 -12
  83. package/lib/internal/template/table/body-cell/td-element.d.ts +21 -0
  84. package/lib/internal/template/table/body-cell/td-element.d.ts.map +1 -0
  85. package/lib/internal/template/table/body-cell/td-element.js +11 -0
  86. package/lib/internal/template/table/body-cell/td-element.js.map +1 -0
  87. package/lib/internal/template/table/body-cell/use-stable-scroll-position.d.ts +17 -0
  88. package/lib/internal/template/table/body-cell/use-stable-scroll-position.d.ts.map +1 -0
  89. package/lib/internal/template/table/body-cell/use-stable-scroll-position.js +48 -0
  90. package/lib/internal/template/table/body-cell/use-stable-scroll-position.js.map +1 -0
  91. package/lib/internal/template/table/header-cell/index.d.ts +8 -7
  92. package/lib/internal/template/table/header-cell/index.d.ts.map +1 -1
  93. package/lib/internal/template/table/header-cell/index.js +6 -2
  94. package/lib/internal/template/table/header-cell/index.js.map +1 -1
  95. package/lib/internal/template/table/header-cell/styles.css.js +19 -18
  96. package/lib/internal/template/table/header-cell/styles.scoped.css +40 -35
  97. package/lib/internal/template/table/header-cell/styles.selectors.js +19 -18
  98. package/lib/internal/template/table/interfaces.d.ts +73 -6
  99. package/lib/internal/template/table/interfaces.d.ts.map +1 -1
  100. package/lib/internal/template/table/interfaces.js.map +1 -1
  101. package/lib/internal/template/table/internal.d.ts.map +1 -1
  102. package/lib/internal/template/table/internal.js +68 -18
  103. package/lib/internal/template/table/internal.js.map +1 -1
  104. package/lib/internal/template/table/thead.d.ts.map +1 -1
  105. package/lib/internal/template/table/thead.js +1 -1
  106. package/lib/internal/template/table/thead.js.map +1 -1
  107. package/lib/internal/template/table/use-table-focus-navigation.d.ts +16 -0
  108. package/lib/internal/template/table/use-table-focus-navigation.d.ts.map +1 -0
  109. package/lib/internal/template/table/use-table-focus-navigation.js +131 -0
  110. package/lib/internal/template/table/use-table-focus-navigation.js.map +1 -0
  111. package/lib/internal/template/tabs/index.d.ts +1 -1
  112. package/lib/internal/template/tabs/index.d.ts.map +1 -1
  113. package/lib/internal/template/tabs/index.js +2 -2
  114. package/lib/internal/template/tabs/index.js.map +1 -1
  115. package/lib/internal/template/tabs/interfaces.d.ts +14 -0
  116. package/lib/internal/template/tabs/interfaces.d.ts.map +1 -1
  117. package/lib/internal/template/tabs/interfaces.js.map +1 -1
  118. package/lib/internal/template/tabs/tab-header-bar.d.ts +2 -1
  119. package/lib/internal/template/tabs/tab-header-bar.d.ts.map +1 -1
  120. package/lib/internal/template/tabs/tab-header-bar.js +3 -7
  121. package/lib/internal/template/tabs/tab-header-bar.js.map +1 -1
  122. package/lib/internal/template/test-utils/dom/table/index.d.ts +4 -0
  123. package/lib/internal/template/test-utils/dom/table/index.js +21 -5
  124. package/lib/internal/template/test-utils/dom/table/index.js.map +1 -1
  125. package/lib/internal/template/test-utils/selectors/table/index.d.ts +4 -0
  126. package/lib/internal/template/test-utils/selectors/table/index.js +21 -5
  127. package/lib/internal/template/test-utils/selectors/table/index.js.map +1 -1
  128. package/lib/internal/template/test-utils/tsconfig.tsbuildinfo +1 -1
  129. package/lib/internal/template/wizard/internal/analytics.js +3 -3
  130. package/lib/internal/template/wizard/internal/analytics.js.map +1 -1
  131. package/package.json +1 -1
  132. package/lib/internal/template/code-editor/resize-handler.d.ts +0 -3
  133. package/lib/internal/template/code-editor/resize-handler.d.ts.map +0 -1
  134. package/lib/internal/template/code-editor/resize-handler.js +0 -7
  135. package/lib/internal/template/code-editor/resize-handler.js.map +0 -1
  136. package/lib/internal/template/internal/components/dynamic-aria-live/index.d.ts +0 -28
  137. package/lib/internal/template/internal/components/dynamic-aria-live/index.d.ts.map +0 -1
  138. package/lib/internal/template/internal/components/dynamic-aria-live/index.js +0 -38
  139. package/lib/internal/template/internal/components/dynamic-aria-live/index.js.map +0 -1
  140. package/lib/internal/template/internal/components/live-region/aria-liva-tag.d.ts +0 -13
  141. package/lib/internal/template/internal/components/live-region/aria-liva-tag.d.ts.map +0 -1
  142. package/lib/internal/template/internal/components/live-region/aria-liva-tag.js +0 -18
  143. package/lib/internal/template/internal/components/live-region/aria-liva-tag.js.map +0 -1
  144. package/lib/internal/template/internal/components/live-region/utils.d.ts +0 -8
  145. package/lib/internal/template/internal/components/live-region/utils.d.ts.map +0 -1
  146. package/lib/internal/template/internal/components/live-region/utils.js +0 -24
  147. package/lib/internal/template/internal/components/live-region/utils.js.map +0 -1
  148. package/lib/internal/template/package-lock.json +0 -15689
@@ -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 {
2
+ import { TableTdElementProps } from './td-element';
3
+ interface TableBodyCellProps<ItemType> extends TableTdElementProps {
20
4
  column: TableProps.ColumnDefinition<ItemType>;
21
5
  item: ItemType;
6
+ isEditing: boolean;
7
+ onEditStart: () => void;
8
+ onEditEnd: () => void;
9
+ submitEdit?: TableProps.SubmitEditFunction<ItemType>;
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>({ isEditable, ...rest }: TableBodyCellProps<ItemType> & {
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;AAenE,UAAU,kBAAkB,CAAC,QAAQ,CAAE,SAAQ,mBAAmB;IAChE,MAAM,EAAE,UAAU,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC9C,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,CAAC,CAAC;IACrD,UAAU,EAAE,UAAU,CAAC,YAAY,CAAC,CAAC;CACtC;AAsFD,wBAAgB,aAAa,CAAC,QAAQ,EAAE,EACtC,UAAU,EACV,GAAG,IAAI,EACR,EAAE,kBAAkB,CAAC,QAAQ,CAAC,GAAG;IAAE,UAAU,EAAE,OAAO,CAAA;CAAE,eAMxD"}
@@ -3,15 +3,55 @@ 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
+ /* istanbul ignore next */
17
+ setValue: function () { }
18
+ });
19
+ var submitHandlerFallback = function () {
20
+ throw new Error('The function `handleSubmit` is required for editable columns');
21
+ };
22
+ function TableCellEditable(_a) {
23
+ var _b;
24
+ 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"]);
25
+ var editActivateRef = useRef(null);
26
+ var cellRef = useRef(null);
27
+ var focusVisible = useFocusVisible();
28
+ var _c = useStableScrollPosition(cellRef), storeScrollPosition = _c.storeScrollPosition, restoreScrollPosition = _c.restoreScrollPosition;
29
+ var handleEditStart = function () {
30
+ storeScrollPosition();
31
+ if (!isEditing) {
32
+ onEditStart();
33
+ }
34
+ };
35
+ var scheduleRestoreScrollPosition = useCallback(function () { return setTimeout(restoreScrollPosition, 0); }, [restoreScrollPosition]);
36
+ var tdNativeAttributes = __assign(__assign({}, focusVisible), { onFocus: scheduleRestoreScrollPosition, 'data-inline-editing-active': isEditing.toString() });
37
+ useEffectOnUpdate(function () {
38
+ if (!isEditing && editActivateRef.current) {
39
+ editActivateRef.current.focus({ preventScroll: true });
40
+ }
41
+ var timer = scheduleRestoreScrollPosition();
42
+ return function () { return clearTimeout(timer); };
43
+ }, [isEditing, scheduleRestoreScrollPosition]);
44
+ 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,
45
+ column.cell(item, readonlyState),
46
+ React.createElement("span", { className: styles['body-cell-editor'] },
47
+ 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
48
  }
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));
49
+ export function TableBodyCell(_a) {
50
+ var isEditable = _a.isEditable, rest = __rest(_a, ["isEditable"]);
51
+ if (isEditable || rest.isEditing) {
52
+ return React.createElement(TableCellEditable, __assign({}, rest));
53
+ }
54
+ var column = rest.column, item = rest.item;
55
+ return React.createElement(TableTdElement, __assign({}, rest), column.cell(item, readonlyState));
16
56
  }
17
57
  //# 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 /* istanbul ignore next */\n setValue: () => {},\n});\n\nconst submitHandlerFallback = () => {\n throw new Error('The function `handleSubmit` is required for editable columns');\n};\n\ninterface TableBodyCellProps<ItemType> extends TableTdElementProps {\n column: TableProps.ColumnDefinition<ItemType>;\n item: ItemType;\n isEditing: boolean;\n onEditStart: () => void;\n onEditEnd: () => void;\n submitEdit?: TableProps.SubmitEditFunction<ItemType>;\n ariaLabels: TableProps['ariaLabels'];\n}\n\nfunction TableCellEditable<ItemType>({\n className,\n item,\n column,\n isEditing,\n onEditStart,\n onEditEnd,\n submitEdit,\n ariaLabels,\n isVisualRefresh,\n ...rest\n}: TableBodyCellProps<ItemType>) {\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>({\n isEditable,\n ...rest\n}: TableBodyCellProps<ItemType> & { 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> {
3
+ ariaLabels: TableProps['ariaLabels'];
4
+ column: TableProps.ColumnDefinition<ItemType>;
5
+ item: ItemType;
6
+ onEditEnd: () => void;
7
+ submitEdit: TableProps.SubmitEditFunction<ItemType>;
8
+ __onRender?: () => void;
9
+ }
10
+ export declare function InlineEditor<ItemType>({ ariaLabels, item, column, onEditEnd, submitEdit, __onRender, }: InlineEditorProps<ItemType>): 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;IAClC,UAAU,EAAE,UAAU,CAAC,YAAY,CAAC,CAAC;IACrC,MAAM,EAAE,UAAU,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC9C,IAAI,EAAE,QAAQ,CAAC;IACf,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,UAAU,EAAE,UAAU,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IACpD,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;CACzB;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,EACrC,UAAU,EACV,IAAI,EACJ,MAAM,EACN,SAAS,EACT,UAAU,EACV,UAAU,GACX,EAAE,iBAAiB,CAAC,QAAQ,CAAC,eAqG7B"}
@@ -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> {\n ariaLabels: TableProps['ariaLabels'];\n column: TableProps.ColumnDefinition<ItemType>;\n item: ItemType;\n onEditEnd: () => void;\n submitEdit: TableProps.SubmitEditFunction<ItemType>;\n __onRender?: () => void;\n}\n\nexport function InlineEditor<ItemType>({\n ariaLabels,\n item,\n column,\n onEditEnd,\n submitEdit,\n __onRender,\n}: InlineEditorProps<ItemType>) {\n const [currentEditLoading, setCurrentEditLoading] = useState(false);\n const [currentEditValue, setCurrentEditValue] = useState<Optional<any>>();\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_nv0er_9",
5
- "body-cell-wrap": "awsui_body-cell-wrap_c6tup_nv0er_18",
6
- "body-cell-first-row": "awsui_body-cell-first-row_c6tup_nv0er_30",
7
- "body-cell-last-row": "awsui_body-cell-last-row_c6tup_nv0er_33",
8
- "body-cell-selected": "awsui_body-cell-selected_c6tup_nv0er_33",
9
- "has-footer": "awsui_has-footer_c6tup_nv0er_33",
10
- "body-cell-shaded": "awsui_body-cell-shaded_c6tup_nv0er_43",
11
- "body-cell-next-selected": "awsui_body-cell-next-selected_c6tup_nv0er_65",
12
- "body-cell-prev-selected": "awsui_body-cell-prev-selected_c6tup_nv0er_69",
13
- "is-visual-refresh": "awsui_is-visual-refresh_c6tup_nv0er_98",
14
- "has-selection": "awsui_has-selection_c6tup_nv0er_114",
15
- "has-striped-rows": "awsui_has-striped-rows_c6tup_nv0er_117"
4
+ "body-cell": "awsui_body-cell_c6tup_164cf_93",
5
+ "body-cell-wrap": "awsui_body-cell-wrap_c6tup_164cf_102",
6
+ "is-visual-refresh": "awsui_is-visual-refresh_c6tup_164cf_114",
7
+ "has-striped-rows": "awsui_has-striped-rows_c6tup_164cf_126",
8
+ "body-cell-edit-active": "awsui_body-cell-edit-active_c6tup_164cf_129",
9
+ "body-cell-editable": "awsui_body-cell-editable_c6tup_164cf_129",
10
+ "has-selection": "awsui_has-selection_c6tup_164cf_135",
11
+ "body-cell-first-row": "awsui_body-cell-first-row_c6tup_164cf_141",
12
+ "body-cell-last-row": "awsui_body-cell-last-row_c6tup_164cf_144",
13
+ "body-cell-selected": "awsui_body-cell-selected_c6tup_164cf_144",
14
+ "has-footer": "awsui_has-footer_c6tup_164cf_144",
15
+ "body-cell-shaded": "awsui_body-cell-shaded_c6tup_164cf_154",
16
+ "body-cell-next-selected": "awsui_body-cell-next-selected_c6tup_164cf_176",
17
+ "body-cell-prev-selected": "awsui_body-cell-prev-selected_c6tup_164cf_180",
18
+ "body-cell-editor": "awsui_body-cell-editor_c6tup_164cf_204",
19
+ "body-cell-editor-form": "awsui_body-cell-editor-form_c6tup_164cf_214",
20
+ "body-cell-editor-row": "awsui_body-cell-editor-row_c6tup_164cf_223",
21
+ "body-cell-editor-controls": "awsui_body-cell-editor-controls_c6tup_164cf_233"
16
22
  };
17
23