@cloudscape-design/components 3.0.116 → 3.0.118

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 (113) hide show
  1. package/area-chart/model/use-chart-model.d.ts.map +1 -1
  2. package/area-chart/model/use-chart-model.js +2 -1
  3. package/area-chart/model/use-chart-model.js.map +1 -1
  4. package/area-chart/model/utils.d.ts +0 -6
  5. package/area-chart/model/utils.d.ts.map +1 -1
  6. package/area-chart/model/utils.js +0 -52
  7. package/area-chart/model/utils.js.map +1 -1
  8. package/button/index.d.ts.map +1 -1
  9. package/button/index.js +2 -2
  10. package/button/index.js.map +1 -1
  11. package/button/interfaces.d.ts +4 -0
  12. package/button/interfaces.d.ts.map +1 -1
  13. package/button/interfaces.js.map +1 -1
  14. package/button/internal.d.ts.map +1 -1
  15. package/button/internal.js +10 -5
  16. package/button/internal.js.map +1 -1
  17. package/button-dropdown/index.d.ts.map +1 -1
  18. package/button-dropdown/index.js +2 -2
  19. package/button-dropdown/index.js.map +1 -1
  20. package/button-dropdown/interfaces.d.ts +4 -0
  21. package/button-dropdown/interfaces.d.ts.map +1 -1
  22. package/button-dropdown/interfaces.js.map +1 -1
  23. package/button-dropdown/internal.d.ts.map +1 -1
  24. package/button-dropdown/internal.js +2 -2
  25. package/button-dropdown/internal.js.map +1 -1
  26. package/cards/index.d.ts.map +1 -1
  27. package/cards/index.js +3 -1
  28. package/cards/index.js.map +1 -1
  29. package/code-editor/index.d.ts.map +1 -1
  30. package/code-editor/index.js +3 -1
  31. package/code-editor/index.js.map +1 -1
  32. package/expandable-section/expandable-section-header.d.ts +12 -4
  33. package/expandable-section/expandable-section-header.d.ts.map +1 -1
  34. package/expandable-section/expandable-section-header.js +51 -11
  35. package/expandable-section/expandable-section-header.js.map +1 -1
  36. package/expandable-section/interfaces.d.ts +21 -3
  37. package/expandable-section/interfaces.d.ts.map +1 -1
  38. package/expandable-section/interfaces.js.map +1 -1
  39. package/expandable-section/internal.d.ts +1 -1
  40. package/expandable-section/internal.d.ts.map +1 -1
  41. package/expandable-section/internal.js +2 -2
  42. package/expandable-section/internal.js.map +1 -1
  43. package/expandable-section/styles.css.js +21 -20
  44. package/expandable-section/styles.scoped.css +56 -39
  45. package/expandable-section/styles.selectors.js +21 -20
  46. package/flashbar/flash.d.ts +3 -3
  47. package/flashbar/flash.d.ts.map +1 -1
  48. package/flashbar/flash.js +31 -15
  49. package/flashbar/flash.js.map +1 -1
  50. package/flashbar/index.d.ts.map +1 -1
  51. package/flashbar/index.js +61 -14
  52. package/flashbar/index.js.map +1 -1
  53. package/flashbar/interfaces.d.ts +16 -0
  54. package/flashbar/interfaces.d.ts.map +1 -1
  55. package/flashbar/interfaces.js.map +1 -1
  56. package/flashbar/styles.css.js +33 -29
  57. package/flashbar/styles.scoped.css +151 -112
  58. package/flashbar/styles.selectors.js +33 -29
  59. package/help-panel/index.d.ts.map +1 -1
  60. package/help-panel/index.js +3 -1
  61. package/help-panel/index.js.map +1 -1
  62. package/internal/components/chart-status-container/index.d.ts +2 -2
  63. package/internal/components/chart-status-container/index.d.ts.map +1 -1
  64. package/internal/components/chart-status-container/index.js +2 -3
  65. package/internal/components/chart-status-container/index.js.map +1 -1
  66. package/internal/components/live-region/index.d.ts +2 -1
  67. package/internal/components/live-region/index.d.ts.map +1 -1
  68. package/internal/components/live-region/index.js +6 -5
  69. package/internal/components/live-region/index.js.map +1 -1
  70. package/internal/environment.js +1 -1
  71. package/internal/manifest.json +1 -1
  72. package/internal/utils/throttle.d.ts +10 -0
  73. package/internal/utils/throttle.d.ts.map +1 -0
  74. package/internal/utils/throttle.js +57 -0
  75. package/internal/utils/throttle.js.map +1 -0
  76. package/package.json +1 -1
  77. package/s3-resource-selector/s3-in-context/index.d.ts.map +1 -1
  78. package/s3-resource-selector/s3-in-context/index.js +3 -1
  79. package/s3-resource-selector/s3-in-context/index.js.map +1 -1
  80. package/side-navigation/internal.js +2 -2
  81. package/side-navigation/internal.js.map +1 -1
  82. package/table/internal.d.ts.map +1 -1
  83. package/table/internal.js +3 -1
  84. package/table/internal.js.map +1 -1
  85. package/tag-editor/index.d.ts.map +1 -1
  86. package/tag-editor/index.js +3 -1
  87. package/tag-editor/index.js.map +1 -1
  88. package/test-utils/dom/flashbar/flash.js +1 -1
  89. package/test-utils/dom/flashbar/flash.js.map +1 -1
  90. package/test-utils/dom/flashbar/index.js +1 -1
  91. package/test-utils/dom/flashbar/index.js.map +1 -1
  92. package/test-utils/selectors/flashbar/flash.js +1 -1
  93. package/test-utils/selectors/flashbar/flash.js.map +1 -1
  94. package/test-utils/selectors/flashbar/index.js +1 -1
  95. package/test-utils/selectors/flashbar/index.js.map +1 -1
  96. package/test-utils/tsconfig.tsbuildinfo +1 -1
  97. package/tiles/styles.css.js +28 -28
  98. package/tiles/styles.scoped.css +69 -68
  99. package/tiles/styles.selectors.js +28 -28
  100. package/tutorial-panel/components/tutorial-detail-view/task.js +1 -1
  101. package/tutorial-panel/components/tutorial-detail-view/task.js.map +1 -1
  102. package/tutorial-panel/components/tutorial-list/index.d.ts.map +1 -1
  103. package/tutorial-panel/components/tutorial-list/index.js +3 -1
  104. package/tutorial-panel/components/tutorial-list/index.js.map +1 -1
  105. package/wizard/index.d.ts.map +1 -1
  106. package/wizard/index.js +2 -20
  107. package/wizard/index.js.map +1 -1
  108. package/wizard/styles.css.js +32 -31
  109. package/wizard/styles.scoped.css +71 -59
  110. package/wizard/styles.selectors.js +32 -31
  111. package/wizard/wizard-form.d.ts.map +1 -1
  112. package/wizard/wizard-form.js +15 -3
  113. package/wizard/wizard-form.js.map +1 -1
@@ -2,34 +2,38 @@
2
2
  // es-module interop with Babel and Typescript
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
4
  module.exports.default = {
5
- "flash-refresh": "awsui_flash-refresh_1q84n_14a50_93",
6
- "enter": "awsui_enter_1q84n_14a50_93",
7
- "flash-body": "awsui_flash-body_1q84n_14a50_108",
8
- "flash-message": "awsui_flash-message_1q84n_14a50_108",
9
- "flash-header": "awsui_flash-header_1q84n_14a50_108",
10
- "flash-content": "awsui_flash-content_1q84n_14a50_109",
11
- "action-button-wrapper": "awsui_action-button-wrapper_1q84n_14a50_110",
12
- "dismiss-button-wrapper": "awsui_dismiss-button-wrapper_1q84n_14a50_111",
13
- "flash-icon": "awsui_flash-icon_1q84n_14a50_134",
14
- "entering": "awsui_entering_1q84n_14a50_147",
15
- "entered": "awsui_entered_1q84n_14a50_168",
16
- "exiting": "awsui_exiting_1q84n_14a50_273",
17
- "flashbar": "awsui_flashbar_1q84n_14a50_295",
18
- "flash": "awsui_flash_1q84n_14a50_93",
19
- "flash-text": "awsui_flash-text_1q84n_14a50_359",
20
- "dismiss-button": "awsui_dismiss-button_1q84n_14a50_111",
21
- "breakpoint-default": "awsui_breakpoint-default_1q84n_14a50_401",
22
- "action-button": "awsui_action-button_1q84n_14a50_110",
23
- "flash-type-success": "awsui_flash-type-success_1q84n_14a50_414",
24
- "flash-type-error": "awsui_flash-type-error_1q84n_14a50_418",
25
- "flash-type-warning": "awsui_flash-type-warning_1q84n_14a50_422",
26
- "flash-type-info": "awsui_flash-type-info_1q84n_14a50_426",
27
- "stack": "awsui_stack_1q84n_14a50_430",
28
- "expanded": "awsui_expanded_1q84n_14a50_435",
29
- "collapsed": "awsui_collapsed_1q84n_14a50_449",
30
- "item": "awsui_item_1q84n_14a50_455",
31
- "visual-refresh": "awsui_visual-refresh_1q84n_14a50_465",
32
- "toggle": "awsui_toggle_1q84n_14a50_472",
33
- "icon": "awsui_icon_1q84n_14a50_535"
5
+ "flash-refresh": "awsui_flash-refresh_1q84n_1la8c_93",
6
+ "enter": "awsui_enter_1q84n_1la8c_93",
7
+ "flash-body": "awsui_flash-body_1q84n_1la8c_108",
8
+ "flash-message": "awsui_flash-message_1q84n_1la8c_108",
9
+ "flash-header": "awsui_flash-header_1q84n_1la8c_108",
10
+ "flash-content": "awsui_flash-content_1q84n_1la8c_109",
11
+ "action-button-wrapper": "awsui_action-button-wrapper_1q84n_1la8c_110",
12
+ "dismiss-button-wrapper": "awsui_dismiss-button-wrapper_1q84n_1la8c_111",
13
+ "flash-icon": "awsui_flash-icon_1q84n_1la8c_134",
14
+ "entering": "awsui_entering_1q84n_1la8c_147",
15
+ "entered": "awsui_entered_1q84n_1la8c_168",
16
+ "exiting": "awsui_exiting_1q84n_1la8c_273",
17
+ "flashbar": "awsui_flashbar_1q84n_1la8c_295",
18
+ "flash": "awsui_flash_1q84n_1la8c_93",
19
+ "flash-list": "awsui_flash-list_1q84n_1la8c_350",
20
+ "flash-focus-container": "awsui_flash-focus-container_1q84n_1la8c_386",
21
+ "flash-text": "awsui_flash-text_1q84n_1la8c_392",
22
+ "dismiss-button": "awsui_dismiss-button_1q84n_1la8c_111",
23
+ "breakpoint-default": "awsui_breakpoint-default_1q84n_1la8c_433",
24
+ "flash-list-item": "awsui_flash-list-item_1q84n_1la8c_433",
25
+ "action-button": "awsui_action-button_1q84n_1la8c_110",
26
+ "flash-type-success": "awsui_flash-type-success_1q84n_1la8c_446",
27
+ "flash-type-error": "awsui_flash-type-error_1q84n_1la8c_450",
28
+ "flash-type-warning": "awsui_flash-type-warning_1q84n_1la8c_454",
29
+ "flash-type-info": "awsui_flash-type-info_1q84n_1la8c_458",
30
+ "stack": "awsui_stack_1q84n_1la8c_462",
31
+ "expanded": "awsui_expanded_1q84n_1la8c_467",
32
+ "collapsed": "awsui_collapsed_1q84n_1la8c_481",
33
+ "item": "awsui_item_1q84n_1la8c_487",
34
+ "visual-refresh": "awsui_visual-refresh_1q84n_1la8c_497",
35
+ "flash-items": "awsui_flash-items_1q84n_1la8c_503",
36
+ "toggle": "awsui_toggle_1q84n_1la8c_510",
37
+ "icon": "awsui_icon_1q84n_1la8c_573"
34
38
  };
35
39
 
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/help-panel/index.tsx"],"names":[],"mappings":"AASA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,EAAE,cAAc,EAAE,CAAC;AAE1B,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,SAAS,EAAE,EAAE,cAAc,eAkBjH"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/help-panel/index.tsx"],"names":[],"mappings":"AASA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAG9C,OAAO,EAAE,cAAc,EAAE,CAAC;AAE1B,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,SAAS,EAAE,EAAE,cAAc,eAoBjH"}
@@ -8,13 +8,15 @@ import InternalStatusIndicator from '../status-indicator/internal';
8
8
  import styles from './styles.css.js';
9
9
  import { applyDisplayName } from '../internal/utils/apply-display-name';
10
10
  import useBaseComponent from '../internal/hooks/use-base-component';
11
+ import LiveRegion from '../internal/components/live-region';
11
12
  export default function HelpPanel(_a) {
12
13
  var header = _a.header, footer = _a.footer, children = _a.children, loading = _a.loading, loadingText = _a.loadingText, restProps = __rest(_a, ["header", "footer", "children", "loading", "loadingText"]);
13
14
  var __internalRootRef = useBaseComponent('HelpPanel').__internalRootRef;
14
15
  var baseProps = getBaseProps(restProps);
15
16
  var containerProps = __assign(__assign({}, baseProps), { className: clsx(baseProps.className, styles['help-panel']) });
16
17
  return loading ? (React.createElement("div", __assign({}, containerProps, { ref: __internalRootRef }),
17
- React.createElement(InternalStatusIndicator, { type: "loading" }, loadingText))) : (React.createElement("div", __assign({}, containerProps, { ref: __internalRootRef }),
18
+ React.createElement(InternalStatusIndicator, { type: "loading" },
19
+ React.createElement(LiveRegion, { visible: true }, loadingText)))) : (React.createElement("div", __assign({}, containerProps, { ref: __internalRootRef }),
18
20
  header && React.createElement("div", { className: clsx(styles.header) }, header),
19
21
  React.createElement("div", { className: clsx(styles.content) }, children),
20
22
  footer && React.createElement("div", { className: styles.footer }, footer)));
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/help-panel/index.tsx"],"names":[],"mappings":";AAAA,qEAAqE;AACrE,sCAAsC;AACtC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,uBAAuB,MAAM,8BAA8B,CAAC;AACnE,OAAO,MAAM,MAAM,iBAAiB,CAAC;AACrC,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AACxE,OAAO,gBAAgB,MAAM,sCAAsC,CAAC;AAKpE,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,EAAgF;IAA9E,IAAA,MAAM,YAAA,EAAE,MAAM,YAAA,EAAE,QAAQ,cAAA,EAAE,OAAO,aAAA,EAAE,WAAW,iBAAA,EAAK,SAAS,cAA9D,0DAAgE,CAAF;IACtF,IAAA,iBAAiB,GAAK,gBAAgB,CAAC,WAAW,CAAC,kBAAlC,CAAmC;IAC5D,IAAM,SAAS,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;IAC1C,IAAM,cAAc,yBACf,SAAS,KACZ,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC,GAC3D,CAAC;IACF,OAAO,OAAO,CAAC,CAAC,CAAC,CACf,wCAAS,cAAc,IAAE,GAAG,EAAE,iBAAiB;QAC7C,oBAAC,uBAAuB,IAAC,IAAI,EAAC,SAAS,IAAE,WAAW,CAA2B,CAC3E,CACP,CAAC,CAAC,CAAC,CACF,wCAAS,cAAc,IAAE,GAAG,EAAE,iBAAiB;QAC5C,MAAM,IAAI,6BAAK,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAG,MAAM,CAAO;QAC9D,6BAAK,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAG,QAAQ,CAAO;QACrD,MAAM,IAAI,6BAAK,SAAS,EAAE,MAAM,CAAC,MAAM,IAAG,MAAM,CAAO,CACpD,CACP,CAAC;AACJ,CAAC;AAED,gBAAgB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport clsx from 'clsx';\nimport React from 'react';\nimport { getBaseProps } from '../internal/base-component';\nimport InternalStatusIndicator from '../status-indicator/internal';\nimport styles from './styles.css.js';\nimport { applyDisplayName } from '../internal/utils/apply-display-name';\nimport useBaseComponent from '../internal/hooks/use-base-component';\nimport { HelpPanelProps } from './interfaces';\n\nexport { HelpPanelProps };\n\nexport default function HelpPanel({ header, footer, children, loading, loadingText, ...restProps }: HelpPanelProps) {\n const { __internalRootRef } = useBaseComponent('HelpPanel');\n const baseProps = getBaseProps(restProps);\n const containerProps = {\n ...baseProps,\n className: clsx(baseProps.className, styles['help-panel']),\n };\n return loading ? (\n <div {...containerProps} ref={__internalRootRef}>\n <InternalStatusIndicator type=\"loading\">{loadingText}</InternalStatusIndicator>\n </div>\n ) : (\n <div {...containerProps} ref={__internalRootRef}>\n {header && <div className={clsx(styles.header)}>{header}</div>}\n <div className={clsx(styles.content)}>{children}</div>\n {footer && <div className={styles.footer}>{footer}</div>}\n </div>\n );\n}\n\napplyDisplayName(HelpPanel, 'HelpPanel');\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/help-panel/index.tsx"],"names":[],"mappings":";AAAA,qEAAqE;AACrE,sCAAsC;AACtC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,uBAAuB,MAAM,8BAA8B,CAAC;AACnE,OAAO,MAAM,MAAM,iBAAiB,CAAC;AACrC,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AACxE,OAAO,gBAAgB,MAAM,sCAAsC,CAAC;AAEpE,OAAO,UAAU,MAAM,oCAAoC,CAAC;AAI5D,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,EAAgF;IAA9E,IAAA,MAAM,YAAA,EAAE,MAAM,YAAA,EAAE,QAAQ,cAAA,EAAE,OAAO,aAAA,EAAE,WAAW,iBAAA,EAAK,SAAS,cAA9D,0DAAgE,CAAF;IACtF,IAAA,iBAAiB,GAAK,gBAAgB,CAAC,WAAW,CAAC,kBAAlC,CAAmC;IAC5D,IAAM,SAAS,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;IAC1C,IAAM,cAAc,yBACf,SAAS,KACZ,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC,GAC3D,CAAC;IACF,OAAO,OAAO,CAAC,CAAC,CAAC,CACf,wCAAS,cAAc,IAAE,GAAG,EAAE,iBAAiB;QAC7C,oBAAC,uBAAuB,IAAC,IAAI,EAAC,SAAS;YACrC,oBAAC,UAAU,IAAC,OAAO,EAAE,IAAI,IAAG,WAAW,CAAc,CAC7B,CACtB,CACP,CAAC,CAAC,CAAC,CACF,wCAAS,cAAc,IAAE,GAAG,EAAE,iBAAiB;QAC5C,MAAM,IAAI,6BAAK,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAG,MAAM,CAAO;QAC9D,6BAAK,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAG,QAAQ,CAAO;QACrD,MAAM,IAAI,6BAAK,SAAS,EAAE,MAAM,CAAC,MAAM,IAAG,MAAM,CAAO,CACpD,CACP,CAAC;AACJ,CAAC;AAED,gBAAgB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport clsx from 'clsx';\nimport React from 'react';\nimport { getBaseProps } from '../internal/base-component';\nimport InternalStatusIndicator from '../status-indicator/internal';\nimport styles from './styles.css.js';\nimport { applyDisplayName } from '../internal/utils/apply-display-name';\nimport useBaseComponent from '../internal/hooks/use-base-component';\nimport { HelpPanelProps } from './interfaces';\nimport LiveRegion from '../internal/components/live-region';\n\nexport { HelpPanelProps };\n\nexport default function HelpPanel({ header, footer, children, loading, loadingText, ...restProps }: HelpPanelProps) {\n const { __internalRootRef } = useBaseComponent('HelpPanel');\n const baseProps = getBaseProps(restProps);\n const containerProps = {\n ...baseProps,\n className: clsx(baseProps.className, styles['help-panel']),\n };\n return loading ? (\n <div {...containerProps} ref={__internalRootRef}>\n <InternalStatusIndicator type=\"loading\">\n <LiveRegion visible={true}>{loadingText}</LiveRegion>\n </InternalStatusIndicator>\n </div>\n ) : (\n <div {...containerProps} ref={__internalRootRef}>\n {header && <div className={clsx(styles.header)}>{header}</div>}\n <div className={clsx(styles.content)}>{children}</div>\n {footer && <div className={styles.footer}>{footer}</div>}\n </div>\n );\n}\n\napplyDisplayName(HelpPanel, 'HelpPanel');\n"]}
@@ -22,6 +22,6 @@ export declare function getChartStatus<T, U>({ externalData, visibleData, status
22
22
  isNoMatch: boolean;
23
23
  showChart: boolean;
24
24
  };
25
- declare const ChartStatusContainer: ({ statusType, errorText, loadingText, recoveryText, noMatch, empty, onRecoveryClick, isNoMatch, isEmpty, showChart, }: ChartStatusContainerProps) => JSX.Element;
26
- export default ChartStatusContainer;
25
+ export default function ChartStatusContainer({ statusType, errorText, loadingText, recoveryText, noMatch, empty, onRecoveryClick, isNoMatch, isEmpty, showChart, }: ChartStatusContainerProps): JSX.Element;
26
+ export {};
27
27
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/internal/components/chart-status-container/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAkB,MAAM,OAAO,CAAC;AAEvC,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAA0B,yBAAyB,EAAE,MAAM,cAAc,CAAC;AAMjF,UAAU,yBAA0B,SAAQ,kBAAkB;IAC5D,UAAU,EAAE,SAAS,GAAG,UAAU,GAAG,OAAO,CAAC;IAE7C,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAE1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,eAAe,CAAC,EAAE,yBAAyB,CAAC;IAG5C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,wBAAgB,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,EACnC,YAAY,EACZ,WAAW,EACX,UAAU,GACX,EAAE;IACD,YAAY,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;IAC/B,WAAW,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;IAC9B,UAAU,EAAE,SAAS,GAAG,UAAU,GAAG,OAAO,CAAC;CAC9C;;;;EAKA;AAED,QAAA,MAAM,oBAAoB,0HAWvB,yBAAyB,gBAqC3B,CAAC;AAEF,eAAe,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/internal/components/chart-status-container/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAkB,MAAM,OAAO,CAAC;AAEvC,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAA0B,yBAAyB,EAAE,MAAM,cAAc,CAAC;AAMjF,UAAU,yBAA0B,SAAQ,kBAAkB;IAC5D,UAAU,EAAE,SAAS,GAAG,UAAU,GAAG,OAAO,CAAC;IAE7C,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAE1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,eAAe,CAAC,EAAE,yBAAyB,CAAC;IAG5C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,wBAAgB,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,EACnC,YAAY,EACZ,WAAW,EACX,UAAU,GACX,EAAE;IACD,YAAY,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;IAC/B,WAAW,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;IAC9B,UAAU,EAAE,SAAS,GAAG,UAAU,GAAG,OAAO,CAAC;CAC9C;;;;EAKA;AAED,MAAM,CAAC,OAAO,UAAU,oBAAoB,CAAC,EAC3C,UAAU,EACV,SAAS,EACT,WAAW,EACX,YAAY,EACZ,OAAO,EACP,KAAK,EACL,eAAe,EACf,SAAS,EACT,OAAO,EACP,SAAS,GACV,EAAE,yBAAyB,eAqC3B"}
@@ -12,7 +12,7 @@ export function getChartStatus(_a) {
12
12
  var showChart = statusType === 'finished' && !isEmpty;
13
13
  return { isEmpty: isEmpty, isNoMatch: isNoMatch, showChart: showChart };
14
14
  }
15
- var ChartStatusContainer = function (_a) {
15
+ export default function ChartStatusContainer(_a) {
16
16
  var statusType = _a.statusType, errorText = _a.errorText, loadingText = _a.loadingText, recoveryText = _a.recoveryText, noMatch = _a.noMatch, empty = _a.empty, onRecoveryClick = _a.onRecoveryClick, isNoMatch = _a.isNoMatch, isEmpty = _a.isEmpty, showChart = _a.showChart;
17
17
  var statusContainer = useMemo(function () {
18
18
  var handleRecoveryClick = function (event) {
@@ -36,6 +36,5 @@ var ChartStatusContainer = function (_a) {
36
36
  }
37
37
  }, [statusType, onRecoveryClick, isEmpty, isNoMatch, recoveryText, loadingText, errorText, empty, noMatch]);
38
38
  return (React.createElement("div", { className: styles.root, "aria-live": "polite", "aria-atomic": "true" }, !showChart && statusContainer));
39
- };
40
- export default ChartStatusContainer;
39
+ }
41
40
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/internal/components/chart-status-container/index.tsx"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,sCAAsC;AACtC,OAAO,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAGvC,OAAO,EAAE,sBAAsB,EAA6B,MAAM,cAAc,CAAC;AACjF,OAAO,uBAAuB,MAAM,oCAAoC,CAAC;AACzE,OAAO,YAAY,MAAM,wBAAwB,CAAC;AAElD,OAAO,MAAM,MAAM,iBAAiB,CAAC;AAoBrC,MAAM,UAAU,cAAc,CAAO,EAQpC;QAPC,YAAY,kBAAA,EACZ,WAAW,iBAAA,EACX,UAAU,gBAAA;IAMV,IAAM,OAAO,GAAG,CAAC,WAAW,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,CAAC;IACzD,IAAM,SAAS,GAAG,OAAO,IAAI,WAAW,CAAC,MAAM,KAAK,YAAY,CAAC,MAAM,CAAC;IACxE,IAAM,SAAS,GAAG,UAAU,KAAK,UAAU,IAAI,CAAC,OAAO,CAAC;IACxD,OAAO,EAAE,OAAO,SAAA,EAAE,SAAS,WAAA,EAAE,SAAS,WAAA,EAAE,CAAC;AAC3C,CAAC;AAED,IAAM,oBAAoB,GAAG,UAAC,EAWF;QAV1B,UAAU,gBAAA,EACV,SAAS,eAAA,EACT,WAAW,iBAAA,EACX,YAAY,kBAAA,EACZ,OAAO,aAAA,EACP,KAAK,WAAA,EACL,eAAe,qBAAA,EACf,SAAS,eAAA,EACT,OAAO,aAAA,EACP,SAAS,eAAA;IAET,IAAM,eAAe,GAAG,OAAO,CAAC;QAC9B,IAAM,mBAAmB,GAAG,UAAC,KAAkB;YAC7C,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,sBAAsB,CAAC,eAAe,CAAC,CAAC;QAC1C,CAAC,CAAC;QACF,IAAI,UAAU,KAAK,OAAO,EAAE;YAC1B,OAAO,CACL;gBACE,oBAAC,uBAAuB,IAAC,IAAI,EAAC,OAAO,IAAE,SAAS,CAA2B;gBAAC,GAAG;gBAC9E,YAAY,IAAI,CACf,oBAAC,YAAY,IAAC,QAAQ,EAAE,mBAAmB,EAAE,OAAO,EAAC,UAAU,IAC5D,YAAY,CACA,CAChB,CACI,CACR,CAAC;SACH;QAED,IAAI,UAAU,KAAK,SAAS,EAAE;YAC5B,OAAO,oBAAC,uBAAuB,IAAC,IAAI,EAAC,SAAS,IAAE,WAAW,CAA2B,CAAC;SACxF;QAED,IAAI,SAAS,EAAE;YACb,OAAO,6BAAK,SAAS,EAAE,MAAM,CAAC,KAAK,IAAG,OAAO,CAAO,CAAC;SACtD;QAED,IAAI,OAAO,EAAE;YACX,OAAO,6BAAK,SAAS,EAAE,MAAM,CAAC,KAAK,IAAG,KAAK,CAAO,CAAC;SACpD;IACH,CAAC,EAAE,CAAC,UAAU,EAAE,eAAe,EAAE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;IAE5G,OAAO,CACL,6BAAK,SAAS,EAAE,MAAM,CAAC,IAAI,eAAY,QAAQ,iBAAa,MAAM,IAC/D,CAAC,SAAS,IAAI,eAAe,CAC1B,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,oBAAoB,CAAC","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport React, { useMemo } from 'react';\n\nimport { BaseComponentProps } from '../../base-component';\nimport { fireNonCancelableEvent, NonCancelableEventHandler } from '../../events';\nimport InternalStatusIndicator from '../../../status-indicator/internal';\nimport InternalLink from '../../../link/internal';\n\nimport styles from './styles.css.js';\n\ninterface ChartStatusContainerProps extends BaseComponentProps {\n statusType: 'loading' | 'finished' | 'error';\n\n empty?: React.ReactNode;\n noMatch?: React.ReactNode;\n\n loadingText?: string;\n errorText?: string;\n recoveryText?: string;\n\n onRecoveryClick?: NonCancelableEventHandler;\n\n // From `getChartStatus`\n isEmpty?: boolean;\n isNoMatch?: boolean;\n showChart?: boolean;\n}\n\nexport function getChartStatus<T, U>({\n externalData,\n visibleData,\n statusType,\n}: {\n externalData: ReadonlyArray<T>;\n visibleData: ReadonlyArray<U>;\n statusType: 'loading' | 'finished' | 'error';\n}) {\n const isEmpty = !visibleData || visibleData.length === 0;\n const isNoMatch = isEmpty && visibleData.length !== externalData.length;\n const showChart = statusType === 'finished' && !isEmpty;\n return { isEmpty, isNoMatch, showChart };\n}\n\nconst ChartStatusContainer = ({\n statusType,\n errorText,\n loadingText,\n recoveryText,\n noMatch,\n empty,\n onRecoveryClick,\n isNoMatch,\n isEmpty,\n showChart,\n}: ChartStatusContainerProps) => {\n const statusContainer = useMemo(() => {\n const handleRecoveryClick = (event: CustomEvent) => {\n event.preventDefault();\n fireNonCancelableEvent(onRecoveryClick);\n };\n if (statusType === 'error') {\n return (\n <span>\n <InternalStatusIndicator type=\"error\">{errorText}</InternalStatusIndicator>{' '}\n {recoveryText && (\n <InternalLink onFollow={handleRecoveryClick} variant=\"recovery\">\n {recoveryText}\n </InternalLink>\n )}\n </span>\n );\n }\n\n if (statusType === 'loading') {\n return <InternalStatusIndicator type=\"loading\">{loadingText}</InternalStatusIndicator>;\n }\n\n if (isNoMatch) {\n return <div className={styles.empty}>{noMatch}</div>;\n }\n\n if (isEmpty) {\n return <div className={styles.empty}>{empty}</div>;\n }\n }, [statusType, onRecoveryClick, isEmpty, isNoMatch, recoveryText, loadingText, errorText, empty, noMatch]);\n\n return (\n <div className={styles.root} aria-live=\"polite\" aria-atomic=\"true\">\n {!showChart && statusContainer}\n </div>\n );\n};\n\nexport default ChartStatusContainer;\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/internal/components/chart-status-container/index.tsx"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,sCAAsC;AACtC,OAAO,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAGvC,OAAO,EAAE,sBAAsB,EAA6B,MAAM,cAAc,CAAC;AACjF,OAAO,uBAAuB,MAAM,oCAAoC,CAAC;AACzE,OAAO,YAAY,MAAM,wBAAwB,CAAC;AAElD,OAAO,MAAM,MAAM,iBAAiB,CAAC;AAoBrC,MAAM,UAAU,cAAc,CAAO,EAQpC;QAPC,YAAY,kBAAA,EACZ,WAAW,iBAAA,EACX,UAAU,gBAAA;IAMV,IAAM,OAAO,GAAG,CAAC,WAAW,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,CAAC;IACzD,IAAM,SAAS,GAAG,OAAO,IAAI,WAAW,CAAC,MAAM,KAAK,YAAY,CAAC,MAAM,CAAC;IACxE,IAAM,SAAS,GAAG,UAAU,KAAK,UAAU,IAAI,CAAC,OAAO,CAAC;IACxD,OAAO,EAAE,OAAO,SAAA,EAAE,SAAS,WAAA,EAAE,SAAS,WAAA,EAAE,CAAC;AAC3C,CAAC;AAED,MAAM,CAAC,OAAO,UAAU,oBAAoB,CAAC,EAWjB;QAV1B,UAAU,gBAAA,EACV,SAAS,eAAA,EACT,WAAW,iBAAA,EACX,YAAY,kBAAA,EACZ,OAAO,aAAA,EACP,KAAK,WAAA,EACL,eAAe,qBAAA,EACf,SAAS,eAAA,EACT,OAAO,aAAA,EACP,SAAS,eAAA;IAET,IAAM,eAAe,GAAG,OAAO,CAAC;QAC9B,IAAM,mBAAmB,GAAG,UAAC,KAAkB;YAC7C,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,sBAAsB,CAAC,eAAe,CAAC,CAAC;QAC1C,CAAC,CAAC;QACF,IAAI,UAAU,KAAK,OAAO,EAAE;YAC1B,OAAO,CACL;gBACE,oBAAC,uBAAuB,IAAC,IAAI,EAAC,OAAO,IAAE,SAAS,CAA2B;gBAAC,GAAG;gBAC9E,YAAY,IAAI,CACf,oBAAC,YAAY,IAAC,QAAQ,EAAE,mBAAmB,EAAE,OAAO,EAAC,UAAU,IAC5D,YAAY,CACA,CAChB,CACI,CACR,CAAC;SACH;QAED,IAAI,UAAU,KAAK,SAAS,EAAE;YAC5B,OAAO,oBAAC,uBAAuB,IAAC,IAAI,EAAC,SAAS,IAAE,WAAW,CAA2B,CAAC;SACxF;QAED,IAAI,SAAS,EAAE;YACb,OAAO,6BAAK,SAAS,EAAE,MAAM,CAAC,KAAK,IAAG,OAAO,CAAO,CAAC;SACtD;QAED,IAAI,OAAO,EAAE;YACX,OAAO,6BAAK,SAAS,EAAE,MAAM,CAAC,KAAK,IAAG,KAAK,CAAO,CAAC;SACpD;IACH,CAAC,EAAE,CAAC,UAAU,EAAE,eAAe,EAAE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;IAE5G,OAAO,CACL,6BAAK,SAAS,EAAE,MAAM,CAAC,IAAI,eAAY,QAAQ,iBAAa,MAAM,IAC/D,CAAC,SAAS,IAAI,eAAe,CAC1B,CACP,CAAC;AACJ,CAAC","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport React, { useMemo } from 'react';\n\nimport { BaseComponentProps } from '../../base-component';\nimport { fireNonCancelableEvent, NonCancelableEventHandler } from '../../events';\nimport InternalStatusIndicator from '../../../status-indicator/internal';\nimport InternalLink from '../../../link/internal';\n\nimport styles from './styles.css.js';\n\ninterface ChartStatusContainerProps extends BaseComponentProps {\n statusType: 'loading' | 'finished' | 'error';\n\n empty?: React.ReactNode;\n noMatch?: React.ReactNode;\n\n loadingText?: string;\n errorText?: string;\n recoveryText?: string;\n\n onRecoveryClick?: NonCancelableEventHandler;\n\n // From `getChartStatus`\n isEmpty?: boolean;\n isNoMatch?: boolean;\n showChart?: boolean;\n}\n\nexport function getChartStatus<T, U>({\n externalData,\n visibleData,\n statusType,\n}: {\n externalData: ReadonlyArray<T>;\n visibleData: ReadonlyArray<U>;\n statusType: 'loading' | 'finished' | 'error';\n}) {\n const isEmpty = !visibleData || visibleData.length === 0;\n const isNoMatch = isEmpty && visibleData.length !== externalData.length;\n const showChart = statusType === 'finished' && !isEmpty;\n return { isEmpty, isNoMatch, showChart };\n}\n\nexport default function ChartStatusContainer({\n statusType,\n errorText,\n loadingText,\n recoveryText,\n noMatch,\n empty,\n onRecoveryClick,\n isNoMatch,\n isEmpty,\n showChart,\n}: ChartStatusContainerProps) {\n const statusContainer = useMemo(() => {\n const handleRecoveryClick = (event: CustomEvent) => {\n event.preventDefault();\n fireNonCancelableEvent(onRecoveryClick);\n };\n if (statusType === 'error') {\n return (\n <span>\n <InternalStatusIndicator type=\"error\">{errorText}</InternalStatusIndicator>{' '}\n {recoveryText && (\n <InternalLink onFollow={handleRecoveryClick} variant=\"recovery\">\n {recoveryText}\n </InternalLink>\n )}\n </span>\n );\n }\n\n if (statusType === 'loading') {\n return <InternalStatusIndicator type=\"loading\">{loadingText}</InternalStatusIndicator>;\n }\n\n if (isNoMatch) {\n return <div className={styles.empty}>{noMatch}</div>;\n }\n\n if (isEmpty) {\n return <div className={styles.empty}>{empty}</div>;\n }\n }, [statusType, onRecoveryClick, isEmpty, isNoMatch, recoveryText, loadingText, errorText, empty, noMatch]);\n\n return (\n <div className={styles.root} aria-live=\"polite\" aria-atomic=\"true\">\n {!showChart && statusContainer}\n </div>\n );\n}\n"]}
@@ -3,6 +3,7 @@ import { ScreenreaderOnlyProps } from '../screenreader-only/index.js';
3
3
  export interface LiveRegionProps extends ScreenreaderOnlyProps {
4
4
  assertive?: boolean;
5
5
  delay?: number;
6
+ visible?: boolean;
6
7
  children: React.ReactNode;
7
8
  }
8
9
  declare const _default: React.MemoExoticComponent<typeof LiveRegion>;
@@ -40,5 +41,5 @@ declare const _default: React.MemoExoticComponent<typeof LiveRegion>;
40
41
  </>
41
42
  */
42
43
  export default _default;
43
- declare function LiveRegion({ assertive, delay, children, ...restProps }: LiveRegionProps): JSX.Element;
44
+ declare function LiveRegion({ assertive, delay, visible, children, ...restProps }: LiveRegionProps): JSX.Element;
44
45
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/internal/components/live-region/index.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAkC,MAAM,OAAO,CAAC;AACvD,OAAyB,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAGxF,MAAM,WAAW,eAAgB,SAAQ,qBAAqB;IAC5D,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgCE;AACF,wBAAgC;AAEhC,iBAAS,UAAU,CAAC,EAAE,SAAiB,EAAE,KAAU,EAAE,QAAQ,EAAE,GAAG,SAAS,EAAE,EAAE,eAAe,eAoD7F"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/internal/components/live-region/index.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAkC,MAAM,OAAO,CAAC;AACvD,OAAyB,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAGxF,MAAM,WAAW,eAAgB,SAAQ,qBAAqB;IAC5D,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgCE;AACF,wBAAgC;AAEhC,iBAAS,UAAU,CAAC,EAAE,SAAiB,EAAE,KAAU,EAAE,OAAe,EAAE,QAAQ,EAAE,GAAG,SAAS,EAAE,EAAE,eAAe,eA0D9G"}
@@ -41,7 +41,7 @@ import styles from './styles.css.js';
41
41
  */
42
42
  export default memo(LiveRegion);
43
43
  function LiveRegion(_a) {
44
- var _b = _a.assertive, assertive = _b === void 0 ? false : _b, _c = _a.delay, delay = _c === void 0 ? 10 : _c, children = _a.children, restProps = __rest(_a, ["assertive", "delay", "children"]);
44
+ var _b = _a.assertive, assertive = _b === void 0 ? false : _b, _c = _a.delay, delay = _c === void 0 ? 10 : _c, _d = _a.visible, visible = _d === void 0 ? false : _d, children = _a.children, restProps = __rest(_a, ["assertive", "delay", "visible", "children"]);
45
45
  var sourceRef = useRef(null);
46
46
  var targetRef = useRef(null);
47
47
  /*
@@ -81,10 +81,11 @@ function LiveRegion(_a) {
81
81
  }
82
82
  };
83
83
  });
84
- return (React.createElement(ScreenreaderOnly, __assign({}, restProps, { className: clsx(styles.root, restProps.className) }),
85
- React.createElement("span", { "aria-hidden": "true" },
86
- React.createElement("span", { ref: sourceRef }, children)),
87
- React.createElement("span", { ref: targetRef, "aria-atomic": "true", "aria-live": assertive ? 'assertive' : 'polite' })));
84
+ return (React.createElement(React.Fragment, null,
85
+ visible && React.createElement("span", { ref: sourceRef }, children),
86
+ React.createElement(ScreenreaderOnly, __assign({}, restProps, { className: clsx(styles.root, restProps.className) }),
87
+ !visible && (React.createElement("span", { ref: sourceRef, "aria-hidden": "true" }, children)),
88
+ React.createElement("span", { ref: targetRef, "aria-atomic": "true", "aria-live": assertive ? 'assertive' : 'polite' }))));
88
89
  }
89
90
  // This only extracts text content from the node including all its children which is enough for now.
90
91
  // To make it more powerful, it is possible to create a more sophisticated extractor with respect to
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/internal/components/live-region/index.tsx"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,sCAAsC;;AAEtC,0DAA0D;AAE1D,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AACvD,OAAO,gBAA2C,MAAM,+BAA+B,CAAC;AACxF,OAAO,MAAM,MAAM,iBAAiB,CAAC;AAQrC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgCE;AACF,eAAe,IAAI,CAAC,UAAU,CAAC,CAAC;AAEhC,SAAS,UAAU,CAAC,EAA0E;IAAxE,IAAA,iBAAiB,EAAjB,SAAS,mBAAG,KAAK,KAAA,EAAE,aAAU,EAAV,KAAK,mBAAG,EAAE,KAAA,EAAE,QAAQ,cAAA,EAAK,SAAS,cAAvD,kCAAyD,CAAF;IACzE,IAAM,SAAS,GAAG,MAAM,CAAkB,IAAI,CAAC,CAAC;IAChD,IAAM,SAAS,GAAG,MAAM,CAAkB,IAAI,CAAC,CAAC;IAEhD;;;;;;;;;;MAUE;IACF,SAAS,CAAC;QACR,SAAS,gBAAgB;YACvB,IAAI,SAAS,CAAC,OAAO,IAAI,SAAS,CAAC,OAAO,EAAE;gBAC1C,IAAM,aAAa,GAAG,gBAAgB,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;gBAC1D,IAAM,aAAa,GAAG,gBAAgB,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;gBAC1D,IAAI,aAAa,KAAK,aAAa,EAAE;oBACnC,gEAAgE;oBAChE,2DAA2D;oBAC3D,sDAAsD;oBACtD,SAAS,CAAC,OAAO,CAAC,SAAS,GAAG,aAAa,CAAC;iBAC7C;aACF;QACH,CAAC;QAED,IAAI,SAAwB,CAAC;QAC7B,IAAI,KAAK,EAAE;YACT,SAAS,GAAG,UAAU,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;SACjD;aAAM;YACL,gBAAgB,EAAE,CAAC;SACpB;QAED,OAAO;YACL,IAAI,SAAS,EAAE;gBACb,YAAY,CAAC,SAAS,CAAC,CAAC;aACzB;QACH,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,OAAO,CACL,oBAAC,gBAAgB,eAAK,SAAS,IAAE,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,SAAS,CAAC;QAChF,6CAAkB,MAAM;YACtB,8BAAM,GAAG,EAAE,SAAS,IAAG,QAAQ,CAAQ,CAClC;QAEP,8BAAM,GAAG,EAAE,SAAS,iBAAc,MAAM,eAAY,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,GAAS,CAC9E,CACpB,CAAC;AACJ,CAAC;AAED,oGAAoG;AACpG,oGAAoG;AACpG,0FAA0F;AAC1F,SAAS,gBAAgB,CAAC,IAAiB;IACzC,OAAO,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AAC5D,CAAC","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\n/* eslint-disable @cloudscape-design/prefer-live-region */\n\nimport clsx from 'clsx';\nimport React, { memo, useEffect, useRef } from 'react';\nimport ScreenreaderOnly, { ScreenreaderOnlyProps } from '../screenreader-only/index.js';\nimport styles from './styles.css.js';\n\nexport interface LiveRegionProps extends ScreenreaderOnlyProps {\n assertive?: boolean;\n delay?: number;\n children: React.ReactNode;\n}\n\n/**\n The live region is hidden in the layout, but visible for screen readers.\n It's purpose it to announce changes e.g. when custom navigation logic is used.\n\n The way live region works differently in different browsers and screen readers and\n it is recommended to manually test every new implementation.\n\n If you notice there are different words being merged together,\n check if there are text nodes not being wrapped in elements, like:\n <LiveRegion>\n {title}\n <span><Details /></span>\n </LiveRegion>\n\n To fix, wrap \"title\" in an element:\n <LiveRegion>\n <span>{title}</span>\n <span><Details /></span>\n </LiveRegion>\n\n Or create a single text node if possible:\n <LiveRegion>\n {`${title} ${details}`}\n </LiveRegion>\n\n The live region is always atomic, because non-atomic regions can be treated by screen readers\n differently and produce unexpected results. To imitate non-atomic announcements simply use\n multiple live regions:\n <>\n <LiveRegion>{title}</LiveRegion>\n <LiveRegion><Details /></LiveRegion>\n </>\n*/\nexport default memo(LiveRegion);\n\nfunction LiveRegion({ assertive = false, delay = 10, children, ...restProps }: LiveRegionProps) {\n const sourceRef = useRef<HTMLSpanElement>(null);\n const targetRef = useRef<HTMLSpanElement>(null);\n\n /*\n When React state changes, React often produces too many DOM updates, causing NVDA to\n issue many announcements for the same logical event (See https://github.com/nvaccess/nvda/issues/7996).\n\n The code below imitates a debouncing, scheduling a callback every time new React state\n update is detected. When a callback resolves, it copies content from a muted element\n to the live region, which is recognized by screen readers as an update.\n\n If the use case requires no announcement to be ignored, use delay = 0, but ensure it\n does not impact the performance. If it does, prefer using a string as children prop.\n */\n useEffect(() => {\n function updateLiveRegion() {\n if (targetRef.current && sourceRef.current) {\n const sourceContent = extractInnerText(sourceRef.current);\n const targetContent = extractInnerText(targetRef.current);\n if (targetContent !== sourceContent) {\n // The aria-atomic does not work properly in Voice Over, causing\n // certain parts of the content to be ignored. To fix that,\n // we assign the source text content as a single node.\n targetRef.current.innerText = sourceContent;\n }\n }\n }\n\n let timeoutId: null | number;\n if (delay) {\n timeoutId = setTimeout(updateLiveRegion, delay);\n } else {\n updateLiveRegion();\n }\n\n return () => {\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n };\n });\n\n return (\n <ScreenreaderOnly {...restProps} className={clsx(styles.root, restProps.className)}>\n <span aria-hidden=\"true\">\n <span ref={sourceRef}>{children}</span>\n </span>\n\n <span ref={targetRef} aria-atomic=\"true\" aria-live={assertive ? 'assertive' : 'polite'}></span>\n </ScreenreaderOnly>\n );\n}\n\n// This only extracts text content from the node including all its children which is enough for now.\n// To make it more powerful, it is possible to create a more sophisticated extractor with respect to\n// ARIA properties to ignore aria-hidden nodes and read ARIA labels from the live content.\nfunction extractInnerText(node: HTMLElement) {\n return (node.innerText || '').replace(/\\s+/g, ' ').trim();\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/internal/components/live-region/index.tsx"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,sCAAsC;;AAEtC,0DAA0D;AAE1D,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AACvD,OAAO,gBAA2C,MAAM,+BAA+B,CAAC;AACxF,OAAO,MAAM,MAAM,iBAAiB,CAAC;AASrC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgCE;AACF,eAAe,IAAI,CAAC,UAAU,CAAC,CAAC;AAEhC,SAAS,UAAU,CAAC,EAA2F;IAAzF,IAAA,iBAAiB,EAAjB,SAAS,mBAAG,KAAK,KAAA,EAAE,aAAU,EAAV,KAAK,mBAAG,EAAE,KAAA,EAAE,eAAe,EAAf,OAAO,mBAAG,KAAK,KAAA,EAAE,QAAQ,cAAA,EAAK,SAAS,cAAxE,6CAA0E,CAAF;IAC1F,IAAM,SAAS,GAAG,MAAM,CAAkB,IAAI,CAAC,CAAC;IAChD,IAAM,SAAS,GAAG,MAAM,CAAkB,IAAI,CAAC,CAAC;IAEhD;;;;;;;;;;MAUE;IACF,SAAS,CAAC;QACR,SAAS,gBAAgB;YACvB,IAAI,SAAS,CAAC,OAAO,IAAI,SAAS,CAAC,OAAO,EAAE;gBAC1C,IAAM,aAAa,GAAG,gBAAgB,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;gBAC1D,IAAM,aAAa,GAAG,gBAAgB,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;gBAC1D,IAAI,aAAa,KAAK,aAAa,EAAE;oBACnC,gEAAgE;oBAChE,2DAA2D;oBAC3D,sDAAsD;oBACtD,SAAS,CAAC,OAAO,CAAC,SAAS,GAAG,aAAa,CAAC;iBAC7C;aACF;QACH,CAAC;QAED,IAAI,SAAwB,CAAC;QAC7B,IAAI,KAAK,EAAE;YACT,SAAS,GAAG,UAAU,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;SACjD;aAAM;YACL,gBAAgB,EAAE,CAAC;SACpB;QAED,OAAO;YACL,IAAI,SAAS,EAAE;gBACb,YAAY,CAAC,SAAS,CAAC,CAAC;aACzB;QACH,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,OAAO,CACL;QACG,OAAO,IAAI,8BAAM,GAAG,EAAE,SAAS,IAAG,QAAQ,CAAQ;QAEnD,oBAAC,gBAAgB,eAAK,SAAS,IAAE,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,SAAS,CAAC;YAC/E,CAAC,OAAO,IAAI,CACX,8BAAM,GAAG,EAAE,SAAS,iBAAc,MAAM,IACrC,QAAQ,CACJ,CACR;YAED,8BAAM,GAAG,EAAE,SAAS,iBAAc,MAAM,eAAY,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,GAAS,CAC9E,CAClB,CACJ,CAAC;AACJ,CAAC;AAED,oGAAoG;AACpG,oGAAoG;AACpG,0FAA0F;AAC1F,SAAS,gBAAgB,CAAC,IAAiB;IACzC,OAAO,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AAC5D,CAAC","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\n/* eslint-disable @cloudscape-design/prefer-live-region */\n\nimport clsx from 'clsx';\nimport React, { memo, useEffect, useRef } from 'react';\nimport ScreenreaderOnly, { ScreenreaderOnlyProps } from '../screenreader-only/index.js';\nimport styles from './styles.css.js';\n\nexport interface LiveRegionProps extends ScreenreaderOnlyProps {\n assertive?: boolean;\n delay?: number;\n visible?: boolean;\n children: React.ReactNode;\n}\n\n/**\n The live region is hidden in the layout, but visible for screen readers.\n It's purpose it to announce changes e.g. when custom navigation logic is used.\n\n The way live region works differently in different browsers and screen readers and\n it is recommended to manually test every new implementation.\n\n If you notice there are different words being merged together,\n check if there are text nodes not being wrapped in elements, like:\n <LiveRegion>\n {title}\n <span><Details /></span>\n </LiveRegion>\n\n To fix, wrap \"title\" in an element:\n <LiveRegion>\n <span>{title}</span>\n <span><Details /></span>\n </LiveRegion>\n\n Or create a single text node if possible:\n <LiveRegion>\n {`${title} ${details}`}\n </LiveRegion>\n\n The live region is always atomic, because non-atomic regions can be treated by screen readers\n differently and produce unexpected results. To imitate non-atomic announcements simply use\n multiple live regions:\n <>\n <LiveRegion>{title}</LiveRegion>\n <LiveRegion><Details /></LiveRegion>\n </>\n*/\nexport default memo(LiveRegion);\n\nfunction LiveRegion({ assertive = false, delay = 10, visible = false, children, ...restProps }: LiveRegionProps) {\n const sourceRef = useRef<HTMLSpanElement>(null);\n const targetRef = useRef<HTMLSpanElement>(null);\n\n /*\n When React state changes, React often produces too many DOM updates, causing NVDA to\n issue many announcements for the same logical event (See https://github.com/nvaccess/nvda/issues/7996).\n\n The code below imitates a debouncing, scheduling a callback every time new React state\n update is detected. When a callback resolves, it copies content from a muted element\n to the live region, which is recognized by screen readers as an update.\n\n If the use case requires no announcement to be ignored, use delay = 0, but ensure it\n does not impact the performance. If it does, prefer using a string as children prop.\n */\n useEffect(() => {\n function updateLiveRegion() {\n if (targetRef.current && sourceRef.current) {\n const sourceContent = extractInnerText(sourceRef.current);\n const targetContent = extractInnerText(targetRef.current);\n if (targetContent !== sourceContent) {\n // The aria-atomic does not work properly in Voice Over, causing\n // certain parts of the content to be ignored. To fix that,\n // we assign the source text content as a single node.\n targetRef.current.innerText = sourceContent;\n }\n }\n }\n\n let timeoutId: null | number;\n if (delay) {\n timeoutId = setTimeout(updateLiveRegion, delay);\n } else {\n updateLiveRegion();\n }\n\n return () => {\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n };\n });\n\n return (\n <>\n {visible && <span ref={sourceRef}>{children}</span>}\n\n <ScreenreaderOnly {...restProps} className={clsx(styles.root, restProps.className)}>\n {!visible && (\n <span ref={sourceRef} aria-hidden=\"true\">\n {children}\n </span>\n )}\n\n <span ref={targetRef} aria-atomic=\"true\" aria-live={assertive ? 'assertive' : 'polite'}></span>\n </ScreenreaderOnly>\n </>\n );\n}\n\n// This only extracts text content from the node including all its children which is enough for now.\n// To make it more powerful, it is possible to create a more sophisticated extractor with respect to\n// ARIA properties to ignore aria-hidden nodes and read ARIA labels from the live content.\nfunction extractInnerText(node: HTMLElement) {\n return (node.innerText || '').replace(/\\s+/g, ' ').trim();\n}\n"]}
@@ -1,5 +1,5 @@
1
1
 
2
- export var PACKAGE_VERSION = '3.0.0 (080546b)';
2
+ export var PACKAGE_VERSION = '3.0.0 (52ac61a)';
3
3
  export var THEME = 'open-source-visual-refresh';
4
4
  export var ALWAYS_VISUAL_REFRESH = true;
5
5
 
@@ -1,3 +1,3 @@
1
1
  {
2
- "commit": "080546bf4721c92ffd30297c13d2a9a3e66aecfa"
2
+ "commit": "52ac61a9e8175214a620a50a8d3c56e061138b40"
3
3
  }
@@ -0,0 +1,10 @@
1
+ export interface ThrottleOptions {
2
+ leading?: boolean;
3
+ trailing?: boolean;
4
+ }
5
+ export interface ThrottledFunction<F extends (...args: any) => any> {
6
+ (...args: Parameters<F>): void;
7
+ cancel(): void;
8
+ }
9
+ export declare function throttle<F extends (...args: any) => any>(func: F, delay: number, { trailing }?: ThrottleOptions): ThrottledFunction<F>;
10
+ //# sourceMappingURL=throttle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"throttle.d.ts","sourceRoot":"","sources":["../../../../src/internal/utils/throttle.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,KAAK,GAAG;IAChE,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAC/B,MAAM,IAAI,IAAI,CAAC;CAChB;AAED,wBAAgB,QAAQ,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,KAAK,GAAG,EACtD,IAAI,EAAE,CAAC,EACP,KAAK,EAAE,MAAM,EACb,EAAE,QAAe,EAAE,GAAE,eAAoB,GACxC,iBAAiB,CAAC,CAAC,CAAC,CAqDtB"}
@@ -0,0 +1,57 @@
1
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ export function throttle(func, delay, _a) {
4
+ var _b = _a === void 0 ? {} : _a, _c = _b.trailing, trailing = _c === void 0 ? true : _c;
5
+ var pending = null;
6
+ var lastInvokeTime = null;
7
+ var timerId = null;
8
+ // Runs on every animation frame until timer stopped.
9
+ function pendingFunc() {
10
+ if (pending === null || lastInvokeTime === null) {
11
+ return;
12
+ }
13
+ var invokeTime = Date.now();
14
+ var shouldInvoke = invokeTime - lastInvokeTime >= delay;
15
+ if (shouldInvoke) {
16
+ func.apply(pending["this"], pending.args);
17
+ lastInvokeTime = invokeTime;
18
+ pending = null;
19
+ timerId = null;
20
+ }
21
+ else if (trailing) {
22
+ startTimer();
23
+ }
24
+ }
25
+ function startTimer() {
26
+ if (timerId) {
27
+ cancelAnimationFrame(timerId);
28
+ }
29
+ timerId = requestAnimationFrame(pendingFunc);
30
+ }
31
+ // Decorated client function with delay mechanism.
32
+ function throttled() {
33
+ var args = [];
34
+ for (var _i = 0; _i < arguments.length; _i++) {
35
+ args[_i] = arguments[_i];
36
+ }
37
+ if (lastInvokeTime === null) {
38
+ lastInvokeTime = Date.now();
39
+ func.apply(this, args);
40
+ }
41
+ else {
42
+ pending = { "this": this, args: args };
43
+ startTimer();
44
+ }
45
+ }
46
+ // Prevents delayed function from execution when no longer needed.
47
+ throttled.cancel = function () {
48
+ if (timerId) {
49
+ cancelAnimationFrame(timerId);
50
+ }
51
+ pending = null;
52
+ lastInvokeTime = null;
53
+ timerId = null;
54
+ };
55
+ return throttled;
56
+ }
57
+ //# sourceMappingURL=throttle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"throttle.js","sourceRoot":"","sources":["../../../../src/internal/utils/throttle.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,sCAAsC;AAYtC,MAAM,UAAU,QAAQ,CACtB,IAAO,EACP,KAAa,EACb,EAAyC;QAAzC,qBAAuC,EAAE,KAAA,EAAvC,gBAAe,EAAf,QAAQ,mBAAG,IAAI,KAAA;IAEjB,IAAI,OAAO,GAAoC,IAAI,CAAC;IACpD,IAAI,cAAc,GAAkB,IAAI,CAAC;IACzC,IAAI,OAAO,GAAkB,IAAI,CAAC;IAElC,qDAAqD;IACrD,SAAS,WAAW;QAClB,IAAI,OAAO,KAAK,IAAI,IAAI,cAAc,KAAK,IAAI,EAAE;YAC/C,OAAO;SACR;QAED,IAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC9B,IAAM,YAAY,GAAG,UAAU,GAAG,cAAc,IAAI,KAAK,CAAC;QAE1D,IAAI,YAAY,EAAE;YAChB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAI,CAAA,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;YACvC,cAAc,GAAG,UAAU,CAAC;YAC5B,OAAO,GAAG,IAAI,CAAC;YACf,OAAO,GAAG,IAAI,CAAC;SAChB;aAAM,IAAI,QAAQ,EAAE;YACnB,UAAU,EAAE,CAAC;SACd;IACH,CAAC;IAED,SAAS,UAAU;QACjB,IAAI,OAAO,EAAE;YACX,oBAAoB,CAAC,OAAO,CAAC,CAAC;SAC/B;QACD,OAAO,GAAG,qBAAqB,CAAC,WAAW,CAAC,CAAC;IAC/C,CAAC;IAED,kDAAkD;IAClD,SAAS,SAAS;QAAY,cAAY;aAAZ,UAAY,EAAZ,qBAAY,EAAZ,IAAY;YAAZ,yBAAY;;QACxC,IAAI,cAAc,KAAK,IAAI,EAAE;YAC3B,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC5B,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;SACxB;aAAM;YACL,OAAO,GAAG,EAAE,MAAI,EAAE,IAAI,EAAE,IAAI,MAAA,EAAE,CAAC;YAC/B,UAAU,EAAE,CAAC;SACd;IACH,CAAC;IAED,kEAAkE;IAClE,SAAS,CAAC,MAAM,GAAG;QACjB,IAAI,OAAO,EAAE;YACX,oBAAoB,CAAC,OAAO,CAAC,CAAC;SAC/B;QACD,OAAO,GAAG,IAAI,CAAC;QACf,cAAc,GAAG,IAAI,CAAC;QACtB,OAAO,GAAG,IAAI,CAAC;IACjB,CAAC,CAAC;IAEF,OAAO,SAAS,CAAC;AACnB,CAAC","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nexport interface ThrottleOptions {\n leading?: boolean;\n trailing?: boolean;\n}\n\nexport interface ThrottledFunction<F extends (...args: any) => any> {\n (...args: Parameters<F>): void;\n cancel(): void;\n}\n\nexport function throttle<F extends (...args: any) => any>(\n func: F,\n delay: number,\n { trailing = true }: ThrottleOptions = {}\n): ThrottledFunction<F> {\n let pending: null | { this: any; args: any } = null;\n let lastInvokeTime: null | number = null;\n let timerId: null | number = null;\n\n // Runs on every animation frame until timer stopped.\n function pendingFunc() {\n if (pending === null || lastInvokeTime === null) {\n return;\n }\n\n const invokeTime = Date.now();\n const shouldInvoke = invokeTime - lastInvokeTime >= delay;\n\n if (shouldInvoke) {\n func.apply(pending.this, pending.args);\n lastInvokeTime = invokeTime;\n pending = null;\n timerId = null;\n } else if (trailing) {\n startTimer();\n }\n }\n\n function startTimer() {\n if (timerId) {\n cancelAnimationFrame(timerId);\n }\n timerId = requestAnimationFrame(pendingFunc);\n }\n\n // Decorated client function with delay mechanism.\n function throttled(this: any, ...args: any) {\n if (lastInvokeTime === null) {\n lastInvokeTime = Date.now();\n func.apply(this, args);\n } else {\n pending = { this: this, args };\n startTimer();\n }\n }\n\n // Prevents delayed function from execution when no longer needed.\n throttled.cancel = () => {\n if (timerId) {\n cancelAnimationFrame(timerId);\n }\n pending = null;\n lastInvokeTime = null;\n timerId = null;\n };\n\n return throttled;\n}\n"]}
package/package.json CHANGED
@@ -112,6 +112,6 @@
112
112
  "./internal/base-component/index.js",
113
113
  "./internal/base-component/styles.css.js"
114
114
  ],
115
- "version": "3.0.116",
115
+ "version": "3.0.118",
116
116
  "license": "Apache-2.0"
117
117
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/s3-resource-selector/s3-in-context/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAU3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAKxD,UAAU,gBAAgB;IACxB,WAAW,EAAE,uBAAuB,CAAC,WAAW,GAAG,SAAS,CAAC;IAC7D,QAAQ,EAAE,uBAAuB,CAAC,QAAQ,CAAC;IAC3C,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,OAAO,EAAE,OAAO,GAAG,SAAS,CAAC;IAC7B,oBAAoB,EAAE,MAAM,GAAG,SAAS,CAAC;IACzC,oBAAoB,EAAE,uBAAuB,CAAC,sBAAsB,CAAC,CAAC;IACtE,aAAa,EAAE,uBAAuB,CAAC,eAAe,CAAC,CAAC;IACxD,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,EAAE,CAAC,WAAW,EAAE,uBAAuB,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;CAClG;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,IAAI,IAAI,CAAC;CACf;AAED,eAAO,MAAM,WAAW,yFAkHvB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/s3-resource-selector/s3-in-context/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAU3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAMxD,UAAU,gBAAgB;IACxB,WAAW,EAAE,uBAAuB,CAAC,WAAW,GAAG,SAAS,CAAC;IAC7D,QAAQ,EAAE,uBAAuB,CAAC,QAAQ,CAAC;IAC3C,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,OAAO,EAAE,OAAO,GAAG,SAAS,CAAC;IAC7B,oBAAoB,EAAE,MAAM,GAAG,SAAS,CAAC;IACzC,oBAAoB,EAAE,uBAAuB,CAAC,sBAAsB,CAAC,CAAC;IACtE,aAAa,EAAE,uBAAuB,CAAC,eAAe,CAAC,CAAC;IACxD,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,EAAE,CAAC,WAAW,EAAE,uBAAuB,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;CAClG;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,IAAI,IAAI,CAAC;CACf;AAED,eAAO,MAAM,WAAW,yFAoHvB,CAAC"}
@@ -12,6 +12,7 @@ import { useVersionsFetch } from './use-versions-fetch';
12
12
  import { validate, getErrorText } from './validation';
13
13
  import styles from './styles.css.js';
14
14
  import { SearchInput } from './search-input';
15
+ import LiveRegion from '../../internal/components/live-region';
15
16
  export var S3InContext = React.forwardRef(function (_a, ref) {
16
17
  var i18nStrings = _a.i18nStrings, resource = _a.resource, viewHref = _a.viewHref, invalid = _a.invalid, inputAriaDescribedby = _a.inputAriaDescribedby, selectableItemsTypes = _a.selectableItemsTypes, fetchVersions = _a.fetchVersions, onChange = _a.onChange, onBrowse = _a.onBrowse;
17
18
  var isInputBlurredRef = useRef(true);
@@ -57,6 +58,7 @@ export var S3InContext = React.forwardRef(function (_a, ref) {
57
58
  React.createElement("div", null,
58
59
  React.createElement(InternalButton, { className: styles['browse-button'], disabled: loading, formAction: "none", onClick: onBrowse }, i18nStrings === null || i18nStrings === void 0 ? void 0 : i18nStrings.inContextBrowseButton))),
59
60
  React.createElement("div", { role: "alert", "aria-live": "assertive", "aria-atomic": "true" }, loading && (React.createElement(InternalBox, { margin: { top: 's' } },
60
- React.createElement(InternalStatusIndicator, { type: "loading" }, i18nStrings === null || i18nStrings === void 0 ? void 0 : i18nStrings.inContextLoadingText))))));
61
+ React.createElement(InternalStatusIndicator, { type: "loading" },
62
+ React.createElement(LiveRegion, { visible: true }, i18nStrings === null || i18nStrings === void 0 ? void 0 : i18nStrings.inContextLoadingText)))))));
61
63
  });
62
64
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/s3-resource-selector/s3-in-context/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 React, { useState, useEffect, useRef } from 'react';\nimport InternalBox from '../../box/internal';\nimport { InternalButton } from '../../button/internal';\nimport InternalFormField from '../../form-field/internal';\nimport { InputProps } from '../../input/interfaces';\nimport InternalSelect from '../../select/internal';\nimport InternalStatusIndicator from '../../status-indicator/internal';\nimport { NonCancelableCustomEvent } from '../../internal/events';\nimport useForwardFocus from '../../internal/hooks/forward-focus';\nimport { useVersionsFetch } from './use-versions-fetch';\nimport { S3ResourceSelectorProps } from '../interfaces';\nimport { validate, getErrorText } from './validation';\nimport styles from './styles.css.js';\nimport { SearchInput } from './search-input';\n\ninterface S3InContextProps {\n i18nStrings: S3ResourceSelectorProps.I18nStrings | undefined;\n resource: S3ResourceSelectorProps.Resource;\n viewHref: string | undefined;\n invalid: boolean | undefined;\n inputAriaDescribedby: string | undefined;\n selectableItemsTypes: S3ResourceSelectorProps['selectableItemsTypes'];\n fetchVersions: S3ResourceSelectorProps['fetchVersions'];\n onBrowse: () => void;\n onChange: (newResource: S3ResourceSelectorProps.Resource, errorText: string | undefined) => void;\n}\n\nexport interface S3InContextRef {\n focus(): void;\n}\n\nexport const S3InContext = React.forwardRef(\n (\n {\n i18nStrings,\n resource,\n viewHref,\n invalid,\n inputAriaDescribedby,\n selectableItemsTypes,\n fetchVersions,\n onChange,\n onBrowse,\n }: S3InContextProps,\n ref: React.Ref<S3InContextRef>\n ) => {\n const isInputBlurredRef = useRef(true);\n const [isInputTouched, setInputTouched] = useState(false);\n const { versions, loading, loadVersions, resetVersions } = useVersionsFetch(fetchVersions);\n const inputRef = useRef<HTMLInputElement>(null);\n\n useForwardFocus(ref, inputRef);\n\n const uri = resource.uri;\n const supportsVersions = selectableItemsTypes && selectableItemsTypes.indexOf('versions') > -1;\n const selectedVersion = versions.filter(version => version.value === resource.versionId)[0] || null;\n\n function handleUriChange(event: NonCancelableCustomEvent<InputProps.ChangeDetail>) {\n const uri = event.detail.value;\n const errorCode = isInputTouched ? validate(uri) : undefined;\n resetVersions();\n onChange({ uri }, getErrorText(i18nStrings, errorCode));\n }\n\n function handleUriBlur() {\n isInputBlurredRef.current = true;\n setInputTouched(true);\n const errorCode = validate(resource.uri);\n onChange(resource, getErrorText(i18nStrings, errorCode));\n if (supportsVersions) {\n loadVersions(resource.uri);\n }\n }\n\n useEffect(() => {\n if (!isInputBlurredRef.current || !supportsVersions) {\n return;\n }\n const { cancel } = loadVersions(uri) ?? {};\n return cancel;\n }, [uri, supportsVersions, loadVersions]);\n\n return (\n <div className={styles.root}>\n <div className={styles.layout}>\n <InternalFormField className={styles['layout-uri']} label={i18nStrings?.inContextUriLabel} stretch={true}>\n <SearchInput\n ref={inputRef}\n value={uri}\n ariaDescribedby={inputAriaDescribedby}\n placeholder={i18nStrings?.inContextInputPlaceholder}\n onChange={handleUriChange}\n invalid={invalid}\n onFocus={() => (isInputBlurredRef.current = false)}\n onBlur={handleUriBlur}\n />\n </InternalFormField>\n {supportsVersions && (\n <InternalFormField\n className={styles['layout-version']}\n label={i18nStrings?.inContextVersionSelectLabel}\n stretch={true}\n >\n <InternalSelect\n selectedOption={selectedVersion}\n placeholder={i18nStrings?.inContextSelectPlaceholder}\n disabled={versions.length === 0}\n options={versions}\n onChange={event => onChange({ ...resource, versionId: event.detail.selectedOption.value }, undefined)}\n invalid={false} // invalid state should not highlight the select, only the text input\n />\n </InternalFormField>\n )}\n <div>\n <InternalButton\n className={styles['view-button']}\n disabled={!viewHref}\n href={viewHref}\n target=\"_blank\"\n iconName=\"external\"\n iconAlign=\"right\"\n formAction=\"none\"\n ariaLabel={i18nStrings?.inContextViewButtonAriaLabel}\n >\n {i18nStrings?.inContextViewButton}\n </InternalButton>\n </div>\n <div className={styles['layout-divider']} />\n <div>\n <InternalButton className={styles['browse-button']} disabled={loading} formAction=\"none\" onClick={onBrowse}>\n {i18nStrings?.inContextBrowseButton}\n </InternalButton>\n </div>\n </div>\n\n <div role=\"alert\" aria-live=\"assertive\" aria-atomic=\"true\">\n {loading && (\n <InternalBox margin={{ top: 's' }}>\n <InternalStatusIndicator type=\"loading\">{i18nStrings?.inContextLoadingText}</InternalStatusIndicator>\n </InternalBox>\n )}\n </div>\n </div>\n );\n }\n);\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/s3-resource-selector/s3-in-context/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 React, { useState, useEffect, useRef } from 'react';\nimport InternalBox from '../../box/internal';\nimport { InternalButton } from '../../button/internal';\nimport InternalFormField from '../../form-field/internal';\nimport { InputProps } from '../../input/interfaces';\nimport InternalSelect from '../../select/internal';\nimport InternalStatusIndicator from '../../status-indicator/internal';\nimport { NonCancelableCustomEvent } from '../../internal/events';\nimport useForwardFocus from '../../internal/hooks/forward-focus';\nimport { useVersionsFetch } from './use-versions-fetch';\nimport { S3ResourceSelectorProps } from '../interfaces';\nimport { validate, getErrorText } from './validation';\nimport styles from './styles.css.js';\nimport { SearchInput } from './search-input';\nimport LiveRegion from '../../internal/components/live-region';\n\ninterface S3InContextProps {\n i18nStrings: S3ResourceSelectorProps.I18nStrings | undefined;\n resource: S3ResourceSelectorProps.Resource;\n viewHref: string | undefined;\n invalid: boolean | undefined;\n inputAriaDescribedby: string | undefined;\n selectableItemsTypes: S3ResourceSelectorProps['selectableItemsTypes'];\n fetchVersions: S3ResourceSelectorProps['fetchVersions'];\n onBrowse: () => void;\n onChange: (newResource: S3ResourceSelectorProps.Resource, errorText: string | undefined) => void;\n}\n\nexport interface S3InContextRef {\n focus(): void;\n}\n\nexport const S3InContext = React.forwardRef(\n (\n {\n i18nStrings,\n resource,\n viewHref,\n invalid,\n inputAriaDescribedby,\n selectableItemsTypes,\n fetchVersions,\n onChange,\n onBrowse,\n }: S3InContextProps,\n ref: React.Ref<S3InContextRef>\n ) => {\n const isInputBlurredRef = useRef(true);\n const [isInputTouched, setInputTouched] = useState(false);\n const { versions, loading, loadVersions, resetVersions } = useVersionsFetch(fetchVersions);\n const inputRef = useRef<HTMLInputElement>(null);\n\n useForwardFocus(ref, inputRef);\n\n const uri = resource.uri;\n const supportsVersions = selectableItemsTypes && selectableItemsTypes.indexOf('versions') > -1;\n const selectedVersion = versions.filter(version => version.value === resource.versionId)[0] || null;\n\n function handleUriChange(event: NonCancelableCustomEvent<InputProps.ChangeDetail>) {\n const uri = event.detail.value;\n const errorCode = isInputTouched ? validate(uri) : undefined;\n resetVersions();\n onChange({ uri }, getErrorText(i18nStrings, errorCode));\n }\n\n function handleUriBlur() {\n isInputBlurredRef.current = true;\n setInputTouched(true);\n const errorCode = validate(resource.uri);\n onChange(resource, getErrorText(i18nStrings, errorCode));\n if (supportsVersions) {\n loadVersions(resource.uri);\n }\n }\n\n useEffect(() => {\n if (!isInputBlurredRef.current || !supportsVersions) {\n return;\n }\n const { cancel } = loadVersions(uri) ?? {};\n return cancel;\n }, [uri, supportsVersions, loadVersions]);\n\n return (\n <div className={styles.root}>\n <div className={styles.layout}>\n <InternalFormField className={styles['layout-uri']} label={i18nStrings?.inContextUriLabel} stretch={true}>\n <SearchInput\n ref={inputRef}\n value={uri}\n ariaDescribedby={inputAriaDescribedby}\n placeholder={i18nStrings?.inContextInputPlaceholder}\n onChange={handleUriChange}\n invalid={invalid}\n onFocus={() => (isInputBlurredRef.current = false)}\n onBlur={handleUriBlur}\n />\n </InternalFormField>\n {supportsVersions && (\n <InternalFormField\n className={styles['layout-version']}\n label={i18nStrings?.inContextVersionSelectLabel}\n stretch={true}\n >\n <InternalSelect\n selectedOption={selectedVersion}\n placeholder={i18nStrings?.inContextSelectPlaceholder}\n disabled={versions.length === 0}\n options={versions}\n onChange={event => onChange({ ...resource, versionId: event.detail.selectedOption.value }, undefined)}\n invalid={false} // invalid state should not highlight the select, only the text input\n />\n </InternalFormField>\n )}\n <div>\n <InternalButton\n className={styles['view-button']}\n disabled={!viewHref}\n href={viewHref}\n target=\"_blank\"\n iconName=\"external\"\n iconAlign=\"right\"\n formAction=\"none\"\n ariaLabel={i18nStrings?.inContextViewButtonAriaLabel}\n >\n {i18nStrings?.inContextViewButton}\n </InternalButton>\n </div>\n <div className={styles['layout-divider']} />\n <div>\n <InternalButton className={styles['browse-button']} disabled={loading} formAction=\"none\" onClick={onBrowse}>\n {i18nStrings?.inContextBrowseButton}\n </InternalButton>\n </div>\n </div>\n\n <div role=\"alert\" aria-live=\"assertive\" aria-atomic=\"true\">\n {loading && (\n <InternalBox margin={{ top: 's' }}>\n <InternalStatusIndicator type=\"loading\">\n <LiveRegion visible={true}>{i18nStrings?.inContextLoadingText}</LiveRegion>\n </InternalStatusIndicator>\n </InternalBox>\n )}\n </div>\n </div>\n );\n }\n);\n"]}
@@ -74,7 +74,7 @@ function Section(_a) {
74
74
  var _a;
75
75
  setExpanded((_a = definition.defaultExpanded) !== null && _a !== void 0 ? _a : true);
76
76
  }, [definition]);
77
- return (React.createElement(InternalExpandableSection, { variant: "footer", expanded: expanded, onChange: onExpandedChange, className: styles.section, header: definition.text },
77
+ return (React.createElement(InternalExpandableSection, { variant: "footer", expanded: expanded, onChange: onExpandedChange, className: styles.section, headerText: definition.text },
78
78
  React.createElement(ItemList, { variant: "section", items: definition.items, fireFollow: fireFollow, fireChange: fireChange, activeHref: activeHref })));
79
79
  }
80
80
  function LinkGroup(_a) {
@@ -119,7 +119,7 @@ function ExpandableLinkGroup(_a) {
119
119
  fireChange(definition, true);
120
120
  }
121
121
  };
122
- return (React.createElement(InternalExpandableSection, { className: styles['expandable-link-group'], variant: "navigation", expanded: userExpanded !== null && userExpanded !== void 0 ? userExpanded : expanded, onChange: onExpandedChange, header: React.createElement(Link, { definition: { type: 'link', href: definition.href, text: definition.text }, expanded: userExpanded !== null && userExpanded !== void 0 ? userExpanded : expanded, fireFollow: onHeaderFollow, fireChange: fireChange, activeHref: activeHref }) },
122
+ return (React.createElement(InternalExpandableSection, { className: styles['expandable-link-group'], variant: "navigation", expanded: userExpanded !== null && userExpanded !== void 0 ? userExpanded : expanded, onChange: onExpandedChange, headerText: React.createElement(Link, { definition: { type: 'link', href: definition.href, text: definition.text }, expanded: userExpanded !== null && userExpanded !== void 0 ? userExpanded : expanded, fireFollow: onHeaderFollow, fireChange: fireChange, activeHref: activeHref }) },
123
123
  React.createElement(ItemList, { variant: "expandable-link-group", items: definition.items, fireFollow: fireFollow, fireChange: fireChange, activeHref: activeHref })));
124
124
  }
125
125
  //# sourceMappingURL=internal.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"internal.js","sourceRoot":"","sources":["../../../src/side-navigation/internal.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, { useCallback, useState, useEffect, useMemo } from 'react';\nimport clsx from 'clsx';\nimport { ExpandableSectionProps } from '../expandable-section/interfaces';\nimport InternalExpandableSection from '../expandable-section/internal';\nimport InternalIcon from '../icon/internal';\n\nimport { SideNavigationProps } from './interfaces';\nimport styles from './styles.css.js';\nimport { NonCancelableCustomEvent, isPlainLeftClick } from '../internal/events';\nimport useFocusVisible from '../internal/hooks/focus-visible';\nimport { hasActiveLink } from './util';\nimport { checkSafeUrl } from '../internal/utils/check-safe-url';\n\ninterface BaseItemComponentProps {\n activeHref?: string;\n fireChange: (item: SideNavigationProps.Section | SideNavigationProps.ExpandableLinkGroup, expanded: boolean) => void;\n fireFollow: (\n item:\n | SideNavigationProps.Link\n | SideNavigationProps.Header\n | SideNavigationProps.LinkGroup\n | SideNavigationProps.ExpandableLinkGroup,\n event: React.SyntheticEvent | Event\n ) => void;\n}\n\nexport interface HeaderProps extends BaseItemComponentProps {\n definition: SideNavigationProps.Header;\n}\n\nexport function Header({ definition, activeHref, fireFollow }: HeaderProps) {\n checkSafeUrl('SideNavigation', definition.href);\n const focusVisible = useFocusVisible();\n\n const onClick = useCallback(\n (event: React.MouseEvent) => {\n if (isPlainLeftClick(event)) {\n fireFollow(definition, event);\n }\n },\n [fireFollow, definition]\n );\n\n return (\n <>\n <div className={styles.header}>\n <a\n {...focusVisible}\n href={definition.href}\n className={clsx(styles['header-link'], { [styles['header-link--has-logo']]: !!definition.logo })}\n aria-current={definition.href === activeHref ? 'page' : undefined}\n onClick={onClick}\n >\n {definition.logo && (\n <img\n className={clsx(styles['header-logo'], {\n [styles['header-logo--stretched']]: !definition.text,\n })}\n {...definition.logo}\n />\n )}\n <span className={styles['header-link-text']}>{definition.text}</span>\n </a>\n </div>\n <Divider variant=\"header\" />\n </>\n );\n}\n\nexport interface ItemListProps extends BaseItemComponentProps {\n items: ReadonlyArray<SideNavigationProps.Item>;\n variant: 'section' | 'link-group' | 'expandable-link-group' | 'root';\n}\n\nexport function ItemList({ variant, items, activeHref, fireChange, fireFollow }: ItemListProps) {\n return (\n <ul className={clsx(styles.list, styles[`list-variant-${variant}`])}>\n {items.map((item, i) => (\n <li key={i} className={styles['list-item']}>\n {item.type === 'divider' && <Divider variant=\"default\" />}\n {item.type === 'link' && (\n <Link definition={item} activeHref={activeHref} fireChange={fireChange} fireFollow={fireFollow} />\n )}\n {item.type === 'section' && (\n <Section definition={item} activeHref={activeHref} fireChange={fireChange} fireFollow={fireFollow} />\n )}\n {item.type === 'link-group' && (\n <LinkGroup definition={item} activeHref={activeHref} fireChange={fireChange} fireFollow={fireFollow} />\n )}\n {item.type === 'expandable-link-group' && (\n <ExpandableLinkGroup\n definition={item}\n activeHref={activeHref}\n fireChange={fireChange}\n fireFollow={fireFollow}\n />\n )}\n </li>\n ))}\n </ul>\n );\n}\n\ninterface DividerProps {\n variant: 'default' | 'header';\n}\n\nfunction Divider({ variant = 'default' }: DividerProps) {\n return <hr className={clsx(styles.divider, styles[`divider-${variant}`])} />;\n}\n\ninterface LinkProps extends BaseItemComponentProps {\n definition: SideNavigationProps.Link;\n expanded?: boolean;\n}\n\nfunction Link({ definition, expanded, activeHref, fireFollow }: LinkProps) {\n checkSafeUrl('SideNavigation', definition.href);\n const isActive = definition.href === activeHref;\n const focusVisible = useFocusVisible();\n\n const onClick = useCallback(\n (event: React.MouseEvent) => {\n // Prevent the click event from toggling outer expandable sections.\n event.stopPropagation();\n\n if (isPlainLeftClick(event)) {\n fireFollow(definition, event);\n }\n },\n [fireFollow, definition]\n );\n\n return (\n <>\n {/* https://github.com/yannickcr/eslint-plugin-react/issues/2962 */}\n {/* eslint-disable-next-line react/jsx-no-target-blank */}\n <a\n {...focusVisible}\n href={definition.href}\n className={clsx(styles.link, { [styles['link-active']]: isActive })}\n target={definition.external ? '_blank' : undefined}\n rel={definition.external ? 'noopener noreferrer' : undefined}\n aria-expanded={expanded}\n aria-current={definition.href === activeHref ? 'page' : undefined}\n onClick={onClick}\n >\n {definition.text}\n {definition.external && (\n <span\n aria-label={definition.externalIconAriaLabel}\n role={definition.externalIconAriaLabel ? 'img' : undefined}\n >\n <InternalIcon name=\"external\" className={styles['external-icon']} />\n </span>\n )}\n </a>\n {definition.info && <span className={styles.info}>{definition.info}</span>}\n </>\n );\n}\n\ninterface SectionProps extends BaseItemComponentProps {\n definition: SideNavigationProps.Section;\n}\n\nfunction Section({ definition, activeHref, fireFollow, fireChange }: SectionProps) {\n const [expanded, setExpanded] = useState<boolean>(definition.defaultExpanded ?? true);\n\n const onExpandedChange = useCallback(\n (e: NonCancelableCustomEvent<ExpandableSectionProps.ChangeDetail>) => {\n fireChange(definition, e.detail.expanded);\n setExpanded(e.detail.expanded);\n },\n [definition, fireChange]\n );\n\n useEffect(() => {\n setExpanded(definition.defaultExpanded ?? true);\n }, [definition]);\n\n return (\n <InternalExpandableSection\n variant=\"footer\"\n expanded={expanded}\n onChange={onExpandedChange}\n className={styles.section}\n header={definition.text}\n >\n <ItemList\n variant=\"section\"\n items={definition.items}\n fireFollow={fireFollow}\n fireChange={fireChange}\n activeHref={activeHref}\n />\n </InternalExpandableSection>\n );\n}\n\ninterface LinkGroupProps extends BaseItemComponentProps {\n definition: SideNavigationProps.LinkGroup;\n}\n\nfunction LinkGroup({ definition, activeHref, fireFollow, fireChange }: LinkGroupProps) {\n checkSafeUrl('SideNavigation', definition.href);\n\n return (\n <>\n <Link\n definition={{ type: 'link', href: definition.href, text: definition.text }}\n fireFollow={(_, event) => fireFollow(definition, event)}\n fireChange={fireChange}\n activeHref={activeHref}\n />\n <ItemList\n variant=\"link-group\"\n items={definition.items}\n fireFollow={fireFollow}\n fireChange={fireChange}\n activeHref={activeHref}\n />\n </>\n );\n}\n\ninterface ExpandableLinkGroupProps extends BaseItemComponentProps {\n definition: SideNavigationProps.ExpandableLinkGroup;\n}\n\nfunction ExpandableLinkGroup({ definition, fireFollow, fireChange, activeHref }: ExpandableLinkGroupProps) {\n // Check whether the definition contains an active link and memoize it to avoid\n // rechecking every time.\n const containsActiveLink = useMemo(() => {\n return activeHref ? hasActiveLink(definition.items, activeHref) : false;\n }, [activeHref, definition.items]);\n\n const [expanded, setExpanded] = useState<boolean>(() => {\n return definition.defaultExpanded ?? (definition.href === activeHref || containsActiveLink);\n });\n\n const [userExpanded, setUserExpanded] = useState<boolean | undefined>();\n\n // Reset user expansion status when the items property is updated.\n useEffect(() => setUserExpanded(undefined), [definition]);\n\n // By default, the expandable section is open when there's an active link inside.\n useEffect(() => {\n setExpanded(definition.href === activeHref || containsActiveLink);\n }, [definition.href, containsActiveLink, activeHref]);\n\n // If the definition object itself is updated, reset the expansion state to default.\n useEffect(() => {\n if (definition.defaultExpanded !== undefined) {\n setExpanded(definition.defaultExpanded);\n }\n }, [definition]);\n\n const onExpandedChange = useCallback(\n (e: NonCancelableCustomEvent<ExpandableSectionProps.ChangeDetail>) => {\n fireChange(definition, e.detail.expanded);\n setUserExpanded(e.detail.expanded);\n },\n [definition, fireChange]\n );\n\n const onHeaderFollow: LinkProps['fireFollow'] = (_, event) => {\n fireFollow(definition, event);\n setUserExpanded(true);\n if (!expanded) {\n fireChange(definition, true);\n }\n };\n\n return (\n <InternalExpandableSection\n className={styles['expandable-link-group']}\n variant=\"navigation\"\n expanded={userExpanded ?? expanded}\n onChange={onExpandedChange}\n header={\n <Link\n definition={{ type: 'link', href: definition.href, text: definition.text }}\n expanded={userExpanded ?? expanded}\n fireFollow={onHeaderFollow}\n fireChange={fireChange}\n activeHref={activeHref}\n />\n }\n >\n <ItemList\n variant=\"expandable-link-group\"\n items={definition.items}\n fireFollow={fireFollow}\n fireChange={fireChange}\n activeHref={activeHref}\n />\n </InternalExpandableSection>\n );\n}\n"]}
1
+ {"version":3,"file":"internal.js","sourceRoot":"","sources":["../../../src/side-navigation/internal.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, { useCallback, useState, useEffect, useMemo } from 'react';\nimport clsx from 'clsx';\nimport { ExpandableSectionProps } from '../expandable-section/interfaces';\nimport InternalExpandableSection from '../expandable-section/internal';\nimport InternalIcon from '../icon/internal';\n\nimport { SideNavigationProps } from './interfaces';\nimport styles from './styles.css.js';\nimport { NonCancelableCustomEvent, isPlainLeftClick } from '../internal/events';\nimport useFocusVisible from '../internal/hooks/focus-visible';\nimport { hasActiveLink } from './util';\nimport { checkSafeUrl } from '../internal/utils/check-safe-url';\n\ninterface BaseItemComponentProps {\n activeHref?: string;\n fireChange: (item: SideNavigationProps.Section | SideNavigationProps.ExpandableLinkGroup, expanded: boolean) => void;\n fireFollow: (\n item:\n | SideNavigationProps.Link\n | SideNavigationProps.Header\n | SideNavigationProps.LinkGroup\n | SideNavigationProps.ExpandableLinkGroup,\n event: React.SyntheticEvent | Event\n ) => void;\n}\n\nexport interface HeaderProps extends BaseItemComponentProps {\n definition: SideNavigationProps.Header;\n}\n\nexport function Header({ definition, activeHref, fireFollow }: HeaderProps) {\n checkSafeUrl('SideNavigation', definition.href);\n const focusVisible = useFocusVisible();\n\n const onClick = useCallback(\n (event: React.MouseEvent) => {\n if (isPlainLeftClick(event)) {\n fireFollow(definition, event);\n }\n },\n [fireFollow, definition]\n );\n\n return (\n <>\n <div className={styles.header}>\n <a\n {...focusVisible}\n href={definition.href}\n className={clsx(styles['header-link'], { [styles['header-link--has-logo']]: !!definition.logo })}\n aria-current={definition.href === activeHref ? 'page' : undefined}\n onClick={onClick}\n >\n {definition.logo && (\n <img\n className={clsx(styles['header-logo'], {\n [styles['header-logo--stretched']]: !definition.text,\n })}\n {...definition.logo}\n />\n )}\n <span className={styles['header-link-text']}>{definition.text}</span>\n </a>\n </div>\n <Divider variant=\"header\" />\n </>\n );\n}\n\nexport interface ItemListProps extends BaseItemComponentProps {\n items: ReadonlyArray<SideNavigationProps.Item>;\n variant: 'section' | 'link-group' | 'expandable-link-group' | 'root';\n}\n\nexport function ItemList({ variant, items, activeHref, fireChange, fireFollow }: ItemListProps) {\n return (\n <ul className={clsx(styles.list, styles[`list-variant-${variant}`])}>\n {items.map((item, i) => (\n <li key={i} className={styles['list-item']}>\n {item.type === 'divider' && <Divider variant=\"default\" />}\n {item.type === 'link' && (\n <Link definition={item} activeHref={activeHref} fireChange={fireChange} fireFollow={fireFollow} />\n )}\n {item.type === 'section' && (\n <Section definition={item} activeHref={activeHref} fireChange={fireChange} fireFollow={fireFollow} />\n )}\n {item.type === 'link-group' && (\n <LinkGroup definition={item} activeHref={activeHref} fireChange={fireChange} fireFollow={fireFollow} />\n )}\n {item.type === 'expandable-link-group' && (\n <ExpandableLinkGroup\n definition={item}\n activeHref={activeHref}\n fireChange={fireChange}\n fireFollow={fireFollow}\n />\n )}\n </li>\n ))}\n </ul>\n );\n}\n\ninterface DividerProps {\n variant: 'default' | 'header';\n}\n\nfunction Divider({ variant = 'default' }: DividerProps) {\n return <hr className={clsx(styles.divider, styles[`divider-${variant}`])} />;\n}\n\ninterface LinkProps extends BaseItemComponentProps {\n definition: SideNavigationProps.Link;\n expanded?: boolean;\n}\n\nfunction Link({ definition, expanded, activeHref, fireFollow }: LinkProps) {\n checkSafeUrl('SideNavigation', definition.href);\n const isActive = definition.href === activeHref;\n const focusVisible = useFocusVisible();\n\n const onClick = useCallback(\n (event: React.MouseEvent) => {\n // Prevent the click event from toggling outer expandable sections.\n event.stopPropagation();\n\n if (isPlainLeftClick(event)) {\n fireFollow(definition, event);\n }\n },\n [fireFollow, definition]\n );\n\n return (\n <>\n {/* https://github.com/yannickcr/eslint-plugin-react/issues/2962 */}\n {/* eslint-disable-next-line react/jsx-no-target-blank */}\n <a\n {...focusVisible}\n href={definition.href}\n className={clsx(styles.link, { [styles['link-active']]: isActive })}\n target={definition.external ? '_blank' : undefined}\n rel={definition.external ? 'noopener noreferrer' : undefined}\n aria-expanded={expanded}\n aria-current={definition.href === activeHref ? 'page' : undefined}\n onClick={onClick}\n >\n {definition.text}\n {definition.external && (\n <span\n aria-label={definition.externalIconAriaLabel}\n role={definition.externalIconAriaLabel ? 'img' : undefined}\n >\n <InternalIcon name=\"external\" className={styles['external-icon']} />\n </span>\n )}\n </a>\n {definition.info && <span className={styles.info}>{definition.info}</span>}\n </>\n );\n}\n\ninterface SectionProps extends BaseItemComponentProps {\n definition: SideNavigationProps.Section;\n}\n\nfunction Section({ definition, activeHref, fireFollow, fireChange }: SectionProps) {\n const [expanded, setExpanded] = useState<boolean>(definition.defaultExpanded ?? true);\n\n const onExpandedChange = useCallback(\n (e: NonCancelableCustomEvent<ExpandableSectionProps.ChangeDetail>) => {\n fireChange(definition, e.detail.expanded);\n setExpanded(e.detail.expanded);\n },\n [definition, fireChange]\n );\n\n useEffect(() => {\n setExpanded(definition.defaultExpanded ?? true);\n }, [definition]);\n\n return (\n <InternalExpandableSection\n variant=\"footer\"\n expanded={expanded}\n onChange={onExpandedChange}\n className={styles.section}\n headerText={definition.text}\n >\n <ItemList\n variant=\"section\"\n items={definition.items}\n fireFollow={fireFollow}\n fireChange={fireChange}\n activeHref={activeHref}\n />\n </InternalExpandableSection>\n );\n}\n\ninterface LinkGroupProps extends BaseItemComponentProps {\n definition: SideNavigationProps.LinkGroup;\n}\n\nfunction LinkGroup({ definition, activeHref, fireFollow, fireChange }: LinkGroupProps) {\n checkSafeUrl('SideNavigation', definition.href);\n\n return (\n <>\n <Link\n definition={{ type: 'link', href: definition.href, text: definition.text }}\n fireFollow={(_, event) => fireFollow(definition, event)}\n fireChange={fireChange}\n activeHref={activeHref}\n />\n <ItemList\n variant=\"link-group\"\n items={definition.items}\n fireFollow={fireFollow}\n fireChange={fireChange}\n activeHref={activeHref}\n />\n </>\n );\n}\n\ninterface ExpandableLinkGroupProps extends BaseItemComponentProps {\n definition: SideNavigationProps.ExpandableLinkGroup;\n}\n\nfunction ExpandableLinkGroup({ definition, fireFollow, fireChange, activeHref }: ExpandableLinkGroupProps) {\n // Check whether the definition contains an active link and memoize it to avoid\n // rechecking every time.\n const containsActiveLink = useMemo(() => {\n return activeHref ? hasActiveLink(definition.items, activeHref) : false;\n }, [activeHref, definition.items]);\n\n const [expanded, setExpanded] = useState<boolean>(() => {\n return definition.defaultExpanded ?? (definition.href === activeHref || containsActiveLink);\n });\n\n const [userExpanded, setUserExpanded] = useState<boolean | undefined>();\n\n // Reset user expansion status when the items property is updated.\n useEffect(() => setUserExpanded(undefined), [definition]);\n\n // By default, the expandable section is open when there's an active link inside.\n useEffect(() => {\n setExpanded(definition.href === activeHref || containsActiveLink);\n }, [definition.href, containsActiveLink, activeHref]);\n\n // If the definition object itself is updated, reset the expansion state to default.\n useEffect(() => {\n if (definition.defaultExpanded !== undefined) {\n setExpanded(definition.defaultExpanded);\n }\n }, [definition]);\n\n const onExpandedChange = useCallback(\n (e: NonCancelableCustomEvent<ExpandableSectionProps.ChangeDetail>) => {\n fireChange(definition, e.detail.expanded);\n setUserExpanded(e.detail.expanded);\n },\n [definition, fireChange]\n );\n\n const onHeaderFollow: LinkProps['fireFollow'] = (_, event) => {\n fireFollow(definition, event);\n setUserExpanded(true);\n if (!expanded) {\n fireChange(definition, true);\n }\n };\n\n return (\n <InternalExpandableSection\n className={styles['expandable-link-group']}\n variant=\"navigation\"\n expanded={userExpanded ?? expanded}\n onChange={onExpandedChange}\n headerText={\n <Link\n definition={{ type: 'link', href: definition.href, text: definition.text }}\n expanded={userExpanded ?? expanded}\n fireFollow={onHeaderFollow}\n fireChange={fireChange}\n activeHref={activeHref}\n />\n }\n >\n <ItemList\n variant=\"expandable-link-group\"\n items={definition.items}\n fireFollow={fireFollow}\n fireChange={fireChange}\n activeHref={activeHref}\n />\n </InternalExpandableSection>\n );\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../../../src/table/internal.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,mBAAmB,EAAc,MAAM,cAAc,CAAC;AAgC/D,QAAA,MAAM,aAAa,qBA6TK,CAAC;AAEzB,eAAe,aAAa,CAAC"}
1
+ {"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../../../src/table/internal.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,mBAAmB,EAAc,MAAM,cAAc,CAAC;AAiC/D,QAAA,MAAM,aAAa,qBA6TK,CAAC;AAEzB,eAAe,aAAa,CAAC"}
package/table/internal.js CHANGED
@@ -28,6 +28,7 @@ import useFocusVisible from '../internal/hooks/focus-visible';
28
28
  import { useMergeRefs } from '../internal/hooks/use-merge-refs';
29
29
  import useMouseDownTarget from './use-mouse-down-target';
30
30
  import { useDynamicOverlap } from '../app-layout/visual-refresh/hooks/use-dynamic-overlap';
31
+ import LiveRegion from '../internal/components/live-region';
31
32
  var InternalTable = React.forwardRef(function (_a, ref) {
32
33
  var _b;
33
34
  var header = _a.header, footer = _a.footer, empty = _a.empty, filter = _a.filter, pagination = _a.pagination, preferences = _a.preferences, items = _a.items, columnDefinitions = _a.columnDefinitions, trackBy = _a.trackBy, loading = _a.loading, loadingText = _a.loadingText, selectionType = _a.selectionType, selectedItems = _a.selectedItems, isItemDisabled = _a.isItemDisabled, ariaLabels = _a.ariaLabels, onSelectionChange = _a.onSelectionChange, onSortingChange = _a.onSortingChange, sortingColumn = _a.sortingColumn, sortingDescending = _a.sortingDescending, sortingDisabled = _a.sortingDisabled, visibleColumns = _a.visibleColumns, stickyHeader = _a.stickyHeader, stickyHeaderVerticalOffset = _a.stickyHeaderVerticalOffset, onRowClick = _a.onRowClick, onRowContextMenu = _a.onRowContextMenu, wrapLines = _a.wrapLines, resizableColumns = _a.resizableColumns, onColumnWidthsChange = _a.onColumnWidthsChange, variant = _a.variant, __internalRootRef = _a.__internalRootRef, rest = __rest(_a, ["header", "footer", "empty", "filter", "pagination", "preferences", "items", "columnDefinitions", "trackBy", "loading", "loadingText", "selectionType", "selectedItems", "isItemDisabled", "ariaLabels", "onSelectionChange", "onSortingChange", "sortingColumn", "sortingDescending", "sortingDisabled", "visibleColumns", "stickyHeader", "stickyHeaderVerticalOffset", "onRowClick", "onRowContextMenu", "wrapLines", "resizableColumns", "onColumnWidthsChange", "variant", "__internalRootRef"]);
@@ -135,7 +136,8 @@ var InternalTable = React.forwardRef(function (_a, ref) {
135
136
  React.createElement("td", { colSpan: selectionType ? visibleColumnDefinitions.length + 1 : visibleColumnDefinitions.length, className: styles['cell-merged'] },
136
137
  React.createElement("div", { className: styles['cell-merged-content'], style: {
137
138
  width: (supportsStickyPosition() && containerWidth && Math.floor(containerWidth)) || undefined
138
- } }, loading ? (React.createElement(InternalStatusIndicator, { type: "loading", className: styles.loading, wrapText: true }, loadingText)) : (React.createElement("div", { className: styles.empty }, empty)))))) : (items.map(function (item, rowIndex) {
139
+ } }, loading ? (React.createElement(InternalStatusIndicator, { type: "loading", className: styles.loading, wrapText: true },
140
+ React.createElement(LiveRegion, { visible: true }, loadingText))) : (React.createElement("div", { className: styles.empty }, empty)))))) : (items.map(function (item, rowIndex) {
139
141
  var firstVisible = rowIndex === 0;
140
142
  var lastVisible = rowIndex === items.length - 1;
141
143
  var isSelected = !!selectionType && isItemSelected(item);