@cloudscape-design/components 3.0.601 → 3.0.603

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 (90) hide show
  1. package/app-layout/classic.d.ts +5 -0
  2. package/app-layout/classic.d.ts.map +1 -1
  3. package/app-layout/classic.js +10 -18
  4. package/app-layout/classic.js.map +1 -1
  5. package/app-layout/defaults.d.ts +0 -1
  6. package/app-layout/defaults.d.ts.map +1 -1
  7. package/app-layout/defaults.js +1 -2
  8. package/app-layout/defaults.js.map +1 -1
  9. package/app-layout/implementation.d.ts +5 -0
  10. package/app-layout/implementation.d.ts.map +1 -1
  11. package/app-layout/index.d.ts.map +1 -1
  12. package/app-layout/index.js +31 -6
  13. package/app-layout/index.js.map +1 -1
  14. package/app-layout/interfaces.d.ts +1 -1
  15. package/app-layout/interfaces.d.ts.map +1 -1
  16. package/app-layout/interfaces.js.map +1 -1
  17. package/app-layout/internal.d.ts +5 -0
  18. package/app-layout/internal.d.ts.map +1 -1
  19. package/app-layout/utils/use-resize.d.ts +2 -1
  20. package/app-layout/utils/use-resize.d.ts.map +1 -1
  21. package/app-layout/utils/use-resize.js +7 -9
  22. package/app-layout/utils/use-resize.js.map +1 -1
  23. package/app-layout/visual-refresh/context.d.ts +1 -4
  24. package/app-layout/visual-refresh/context.d.ts.map +1 -1
  25. package/app-layout/visual-refresh/context.js +28 -64
  26. package/app-layout/visual-refresh/context.js.map +1 -1
  27. package/app-layout/visual-refresh/drawers.js +4 -4
  28. package/app-layout/visual-refresh/drawers.js.map +1 -1
  29. package/app-layout/visual-refresh/index.d.ts +5 -0
  30. package/app-layout/visual-refresh/index.d.ts.map +1 -1
  31. package/app-layout/visual-refresh/layout.js +2 -2
  32. package/app-layout/visual-refresh/layout.js.map +1 -1
  33. package/app-layout/visual-refresh/main.js +2 -2
  34. package/app-layout/visual-refresh/main.js.map +1 -1
  35. package/app-layout/visual-refresh/mobile-toolbar.js +3 -3
  36. package/app-layout/visual-refresh/mobile-toolbar.js.map +1 -1
  37. package/app-layout/visual-refresh/navigation.d.ts.map +1 -1
  38. package/app-layout/visual-refresh/navigation.js +10 -12
  39. package/app-layout/visual-refresh/navigation.js.map +1 -1
  40. package/app-layout/visual-refresh/split-panel.d.ts.map +1 -1
  41. package/app-layout/visual-refresh/split-panel.js +5 -5
  42. package/app-layout/visual-refresh/split-panel.js.map +1 -1
  43. package/app-layout/visual-refresh/styles.css.js +81 -81
  44. package/app-layout/visual-refresh/styles.scoped.css +169 -181
  45. package/app-layout/visual-refresh/styles.selectors.js +81 -81
  46. package/app-layout/visual-refresh/tools.d.ts.map +1 -1
  47. package/app-layout/visual-refresh/tools.js +2 -3
  48. package/app-layout/visual-refresh/tools.js.map +1 -1
  49. package/internal/environment.js +1 -1
  50. package/internal/environment.json +1 -1
  51. package/internal/manifest.json +1 -1
  52. package/package.json +1 -1
  53. package/table/body-cell/index.d.ts.map +1 -1
  54. package/table/body-cell/index.js +6 -3
  55. package/table/body-cell/index.js.map +1 -1
  56. package/table/body-cell/td-element.d.ts +6 -2
  57. package/table/body-cell/td-element.d.ts.map +1 -1
  58. package/table/body-cell/td-element.js +5 -5
  59. package/table/body-cell/td-element.js.map +1 -1
  60. package/table/expandable-rows/expand-toggle-button.d.ts +6 -2
  61. package/table/expandable-rows/expand-toggle-button.d.ts.map +1 -1
  62. package/table/expandable-rows/expand-toggle-button.js +1 -6
  63. package/table/expandable-rows/expand-toggle-button.js.map +1 -1
  64. package/table/expandable-rows/expandable-rows-utils.d.ts +3 -2
  65. package/table/expandable-rows/expandable-rows-utils.d.ts.map +1 -1
  66. package/table/expandable-rows/expandable-rows-utils.js.map +1 -1
  67. package/table/internal.d.ts.map +1 -1
  68. package/table/internal.js +5 -7
  69. package/table/internal.js.map +1 -1
  70. package/table/selection/selection-control.d.ts +1 -3
  71. package/table/selection/selection-control.d.ts.map +1 -1
  72. package/table/selection/selection-control.js +5 -3
  73. package/table/selection/selection-control.js.map +1 -1
  74. package/table/table-role/grid-navigation.d.ts.map +1 -1
  75. package/table/table-role/grid-navigation.js +5 -4
  76. package/table/table-role/grid-navigation.js.map +1 -1
  77. package/table/table-role/table-role-helper.d.ts +3 -5
  78. package/table/table-role/table-role-helper.d.ts.map +1 -1
  79. package/table/table-role/table-role-helper.js +8 -4
  80. package/table/table-role/table-role-helper.js.map +1 -1
  81. package/table/table-role/utils.d.ts +1 -0
  82. package/table/table-role/utils.d.ts.map +1 -1
  83. package/table/table-role/utils.js +4 -1
  84. package/table/table-role/utils.js.map +1 -1
  85. package/table/thead.d.ts.map +1 -1
  86. package/table/thead.js +1 -1
  87. package/table/thead.js.map +1 -1
  88. package/top-navigation/parts/overflow-menu/menu-item.d.ts.map +1 -1
  89. package/top-navigation/parts/overflow-menu/menu-item.js +2 -1
  90. package/top-navigation/parts/overflow-menu/menu-item.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"expandable-rows-utils.js","sourceRoot":"","sources":["../../../../src/table/expandable-rows/expandable-rows-utils.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { useInternalI18n } from '../../i18n/context';\nimport { fireNonCancelableEvent } from '../../internal/events';\nimport { TableProps } from '../interfaces';\nimport { ItemSet } from '../selection/utils';\n\nexport interface ExpandableItemProps extends ExpandableItemPlacement {\n isExpandable: boolean;\n isExpanded: boolean;\n onExpandableItemToggle: () => void;\n expandButtonLabel?: string;\n collapseButtonLabel?: string;\n}\n\nexport interface ExpandableItemPlacement {\n level: number;\n setSize: number;\n posInSet: number;\n}\n\nexport function useExpandableTableProps<T>({\n items,\n expandableRows,\n trackBy,\n ariaLabels,\n}: {\n items: readonly T[];\n expandableRows?: TableProps.ExpandableRows<T>;\n trackBy?: TableProps.TrackBy<T>;\n ariaLabels?: TableProps.AriaLabels<T>;\n}) {\n const i18n = useInternalI18n('table');\n const isExpandable = !!expandableRows;\n\n const expandedSet = new ItemSet(trackBy, expandableRows?.expandedItems ?? []);\n\n let allItems = items;\n const itemToPlacement = new Map<T, ExpandableItemPlacement>();\n const getItemLevel = (item: T) => itemToPlacement.get(item)?.level ?? 0;\n\n if (isExpandable) {\n const visibleItems = new Array<T>();\n\n const traverse = (item: T, placement: ExpandableItemPlacement) => {\n itemToPlacement.set(item, placement);\n\n visibleItems.push(item);\n if (expandedSet.has(item)) {\n const children = expandableRows.getItemChildren(item);\n expandableRows\n .getItemChildren(item)\n .forEach((child, index) =>\n traverse(child, { level: placement.level + 1, setSize: children.length, posInSet: index + 1 })\n );\n }\n };\n items.forEach((item, index) => traverse(item, { level: 1, setSize: items.length, posInSet: index + 1 }));\n\n for (let index = 0; index < visibleItems.length; index++) {\n const item = visibleItems[index];\n if (expandedSet.has(item)) {\n let insertionIndex = index + 1;\n for (insertionIndex; insertionIndex < visibleItems.length; insertionIndex++) {\n const insertionItem = visibleItems[insertionIndex];\n if (getItemLevel(item) >= getItemLevel(insertionItem)) {\n break;\n }\n }\n insertionIndex--;\n }\n }\n\n allItems = visibleItems;\n }\n\n const getExpandableItemProps = (item: T): ExpandableItemProps => {\n const { level, setSize, posInSet } = itemToPlacement.get(item) ?? { level: 1, setSize: 1, posInSet: 1 };\n return {\n level,\n setSize,\n posInSet,\n isExpandable: expandableRows?.isItemExpandable(item) ?? true,\n isExpanded: expandedSet.has(item),\n onExpandableItemToggle: () =>\n fireNonCancelableEvent(expandableRows?.onExpandableItemToggle, { item, expanded: !expandedSet.has(item) }),\n expandButtonLabel: i18n('ariaLabels.expandButtonLabel', ariaLabels?.expandButtonLabel?.(item)),\n collapseButtonLabel: i18n('ariaLabels.collapseButtonLabel', ariaLabels?.collapseButtonLabel?.(item)),\n };\n };\n\n return { isExpandable, allItems, getExpandableItemProps };\n}\n"]}
1
+ {"version":3,"file":"expandable-rows-utils.js","sourceRoot":"","sources":["../../../../src/table/expandable-rows/expandable-rows-utils.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,sCAAsC;AAEtC,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAE/D,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAgB7C,MAAM,UAAU,uBAAuB,CAAI,EACzC,KAAK,EACL,cAAc,EACd,OAAO,EACP,UAAU,GAMX;;IACC,MAAM,IAAI,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IACtC,MAAM,YAAY,GAAG,CAAC,CAAC,cAAc,CAAC;IAEtC,MAAM,WAAW,GAAG,IAAI,OAAO,CAAC,OAAO,EAAE,MAAA,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,aAAa,mCAAI,EAAE,CAAC,CAAC;IAE9E,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,MAAM,eAAe,GAAG,IAAI,GAAG,EAA8B,CAAC;IAC9D,MAAM,YAAY,GAAG,CAAC,IAAO,EAAE,EAAE,eAAC,OAAA,MAAA,MAAA,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,0CAAE,KAAK,mCAAI,CAAC,CAAA,EAAA,CAAC;IAExE,IAAI,YAAY,EAAE;QAChB,MAAM,YAAY,GAAG,IAAI,KAAK,EAAK,CAAC;QAEpC,MAAM,QAAQ,GAAG,CAAC,IAAO,EAAE,SAAkC,EAAE,EAAE;YAC/D,eAAe,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YAErC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACxB,IAAI,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;gBACzB,MAAM,QAAQ,GAAG,cAAc,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;gBACtD,cAAc;qBACX,eAAe,CAAC,IAAI,CAAC;qBACrB,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CACxB,QAAQ,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,CAAC,KAAK,GAAG,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC,CAC/F,CAAC;aACL;QACH,CAAC,CAAC;QACF,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QAEzG,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YACxD,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;YACjC,IAAI,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;gBACzB,IAAI,cAAc,GAAG,KAAK,GAAG,CAAC,CAAC;gBAC/B,KAAK,cAAc,EAAE,cAAc,GAAG,YAAY,CAAC,MAAM,EAAE,cAAc,EAAE,EAAE;oBAC3E,MAAM,aAAa,GAAG,YAAY,CAAC,cAAc,CAAC,CAAC;oBACnD,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,aAAa,CAAC,EAAE;wBACrD,MAAM;qBACP;iBACF;gBACD,cAAc,EAAE,CAAC;aAClB;SACF;QAED,QAAQ,GAAG,YAAY,CAAC;KACzB;IAED,MAAM,sBAAsB,GAAG,CAAC,IAAO,EAAuB,EAAE;;QAC9D,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,MAAA,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,mCAAI,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;QACxG,OAAO;YACL,KAAK;YACL,OAAO;YACP,QAAQ;YACR,YAAY,EAAE,MAAA,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,gBAAgB,CAAC,IAAI,CAAC,mCAAI,IAAI;YAC5D,UAAU,EAAE,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;YACjC,sBAAsB,EAAE,GAAG,EAAE,CAC3B,sBAAsB,CAAC,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,sBAAsB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5G,iBAAiB,EAAE,IAAI,CAAC,8BAA8B,EAAE,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,iBAAiB,2DAAG,IAAI,CAAC,CAAC;YAC9F,mBAAmB,EAAE,IAAI,CAAC,gCAAgC,EAAE,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,mBAAmB,2DAAG,IAAI,CAAC,CAAC;SACrG,CAAC;IACJ,CAAC,CAAC;IAEF,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,sBAAsB,EAAE,CAAC;AAC5D,CAAC","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { useInternalI18n } from '../../i18n/context';\nimport { fireNonCancelableEvent } from '../../internal/events';\nimport { TableProps } from '../interfaces';\nimport { ItemSet } from '../selection/utils';\n\ninterface ExpandableItemProps extends ExpandableItemPlacement {\n isExpandable: boolean;\n isExpanded: boolean;\n onExpandableItemToggle: () => void;\n expandButtonLabel?: string;\n collapseButtonLabel?: string;\n}\n\ninterface ExpandableItemPlacement {\n level: number;\n setSize: number;\n posInSet: number;\n}\n\nexport function useExpandableTableProps<T>({\n items,\n expandableRows,\n trackBy,\n ariaLabels,\n}: {\n items: readonly T[];\n expandableRows?: TableProps.ExpandableRows<T>;\n trackBy?: TableProps.TrackBy<T>;\n ariaLabels?: TableProps.AriaLabels<T>;\n}) {\n const i18n = useInternalI18n('table');\n const isExpandable = !!expandableRows;\n\n const expandedSet = new ItemSet(trackBy, expandableRows?.expandedItems ?? []);\n\n let allItems = items;\n const itemToPlacement = new Map<T, ExpandableItemPlacement>();\n const getItemLevel = (item: T) => itemToPlacement.get(item)?.level ?? 0;\n\n if (isExpandable) {\n const visibleItems = new Array<T>();\n\n const traverse = (item: T, placement: ExpandableItemPlacement) => {\n itemToPlacement.set(item, placement);\n\n visibleItems.push(item);\n if (expandedSet.has(item)) {\n const children = expandableRows.getItemChildren(item);\n expandableRows\n .getItemChildren(item)\n .forEach((child, index) =>\n traverse(child, { level: placement.level + 1, setSize: children.length, posInSet: index + 1 })\n );\n }\n };\n items.forEach((item, index) => traverse(item, { level: 1, setSize: items.length, posInSet: index + 1 }));\n\n for (let index = 0; index < visibleItems.length; index++) {\n const item = visibleItems[index];\n if (expandedSet.has(item)) {\n let insertionIndex = index + 1;\n for (insertionIndex; insertionIndex < visibleItems.length; insertionIndex++) {\n const insertionItem = visibleItems[insertionIndex];\n if (getItemLevel(item) >= getItemLevel(insertionItem)) {\n break;\n }\n }\n insertionIndex--;\n }\n }\n\n allItems = visibleItems;\n }\n\n const getExpandableItemProps = (item: T): ExpandableItemProps => {\n const { level, setSize, posInSet } = itemToPlacement.get(item) ?? { level: 1, setSize: 1, posInSet: 1 };\n return {\n level,\n setSize,\n posInSet,\n isExpandable: expandableRows?.isItemExpandable(item) ?? true,\n isExpanded: expandedSet.has(item),\n onExpandableItemToggle: () =>\n fireNonCancelableEvent(expandableRows?.onExpandableItemToggle, { item, expanded: !expandedSet.has(item) }),\n expandButtonLabel: i18n('ariaLabels.expandButtonLabel', ariaLabels?.expandButtonLabel?.(item)),\n collapseButtonLabel: i18n('ariaLabels.collapseButtonLabel', ariaLabels?.collapseButtonLabel?.(item)),\n };\n };\n\n return { isExpandable, allItems, getExpandableItemProps };\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;AA0D/D,eAAO,MAAM,sBAAsB,qBAWX,CAAC;AAEzB,QAAA,MAAM,aAAa,qBAweK,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;AA0D/D,eAAO,MAAM,sBAAsB,qBAWX,CAAC;AAEzB,QAAA,MAAM,aAAa,qBAueK,CAAC;AAEzB,eAAe,aAAa,CAAC"}
package/table/internal.js CHANGED
@@ -254,7 +254,7 @@ const InternalTable = React.forwardRef((_a, ref) => {
254
254
  stickyState,
255
255
  tableRole,
256
256
  };
257
- const expandableProps = getExpandableItemProps(item);
257
+ const expandableItemProps = getExpandableItemProps(item);
258
258
  return (React.createElement("tr", Object.assign({ key: getItemKey(trackBy, item, rowIndex), className: clsx(styles.row, sharedCellProps.isSelected && styles['row-selected']), onFocus: ({ currentTarget }) => {
259
259
  var _a;
260
260
  // When an element inside table row receives focus we want to adjust the scroll.
@@ -263,24 +263,22 @@ const InternalTable = React.forwardRef((_a, ref) => {
263
263
  if (!currentTarget.contains(getMouseDownTarget())) {
264
264
  (_a = stickyHeaderRef.current) === null || _a === void 0 ? void 0 : _a.scrollToRow(currentTarget);
265
265
  }
266
- } }, focusMarkers.item, { onClick: onRowClickHandler && onRowClickHandler.bind(null, rowIndex, item), onContextMenu: onRowContextMenuHandler && onRowContextMenuHandler.bind(null, rowIndex, item) }, getTableRowRoleProps({ tableRole, firstIndex, rowIndex, expandableProps })),
266
+ } }, focusMarkers.item, { onClick: onRowClickHandler && onRowClickHandler.bind(null, rowIndex, item), onContextMenu: onRowContextMenuHandler && onRowContextMenuHandler.bind(null, rowIndex, item) }, getTableRowRoleProps(Object.assign({ tableRole, firstIndex, rowIndex }, expandableItemProps))),
267
267
  hasSelection && (React.createElement(TableTdElement, Object.assign({}, sharedCellProps, { className: clsx(styles['selection-control']), wrapLines: false, hasSelection: true, columnId: selectionColumnId, colIndex: 0 }),
268
- React.createElement(SelectionControl, Object.assign({ tableRole: tableRole, onFocusDown: moveFocusDown, onFocusUp: moveFocusUp, onShiftToggle: updateShiftToggle }, getItemSelectionProps(item))))),
268
+ React.createElement(SelectionControl, Object.assign({ onFocusDown: moveFocusDown, onFocusUp: moveFocusUp, onShiftToggle: updateShiftToggle }, getItemSelectionProps(item))))),
269
269
  visibleColumnDefinitions.map((column, colIndex) => {
270
270
  var _a;
271
271
  const isEditing = cellEditing.checkEditing({ rowIndex, colIndex });
272
272
  const successfulEdit = cellEditing.checkLastSuccessfulEdit({ rowIndex, colIndex });
273
273
  const isEditable = !!column.editConfig && !cellEditing.isLoading;
274
+ const expandableCellProps = isExpandable && colIndex === 0 ? expandableItemProps : undefined;
274
275
  return (React.createElement(TableBodyCell, Object.assign({ key: getColumnKey(column, colIndex) }, sharedCellProps, { style: resizableColumns
275
276
  ? {}
276
277
  : {
277
278
  width: column.width,
278
279
  minWidth: column.minWidth,
279
280
  maxWidth: column.maxWidth,
280
- }, ariaLabels: ariaLabels, column: column, item: item, wrapLines: wrapLines, isEditable: isEditable, isEditing: isEditing, isRowHeader: column.isRowHeader, successfulEdit: successfulEdit, onEditStart: () => cellEditing.startEdit({ rowIndex, colIndex }), onEditEnd: editCancelled => cellEditing.completeEdit({ rowIndex, colIndex }, editCancelled), submitEdit: cellEditing.submitEdit, columnId: (_a = column.id) !== null && _a !== void 0 ? _a : colIndex, colIndex: colIndex + colIndexOffset,
281
- // Expandable props only apply to the first data column of the table.
282
- // When present, the cell content is decorated with expand toggles and extra paddings.
283
- expandableProps: isExpandable && colIndex === 0 ? expandableProps : undefined })));
281
+ }, ariaLabels: ariaLabels, column: column, item: item, wrapLines: wrapLines, isEditable: isEditable, isEditing: isEditing, isRowHeader: column.isRowHeader, successfulEdit: successfulEdit, onEditStart: () => cellEditing.startEdit({ rowIndex, colIndex }), onEditEnd: editCancelled => cellEditing.completeEdit({ rowIndex, colIndex }, editCancelled), submitEdit: cellEditing.submitEdit, columnId: (_a = column.id) !== null && _a !== void 0 ? _a : colIndex, colIndex: colIndex + colIndexOffset }, expandableCellProps)));
284
282
  })));
285
283
  }))))),
286
284
  resizableColumns && React.createElement(ResizeTracker, null)),
@@ -1 +1 @@
1
- {"version":3,"file":"internal.js","sourceRoot":"","sources":["../../../src/table/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 clsx from 'clsx';\nimport React, { useCallback, useImperativeHandle, useRef } from 'react';\nimport { TableForwardRefType, TableProps } from './interfaces';\nimport { getVisualContextClassname } from '../internal/components/visual-context';\nimport InternalContainer, { InternalContainerProps } from '../container/internal';\nimport { getBaseProps } from '../internal/base-component';\nimport ToolsHeader from './tools-header';\nimport Thead, { TheadProps } from './thead';\nimport { TableBodyCell } from './body-cell';\nimport { supportsStickyPosition } from '../internal/utils/dom';\nimport { checkSortingState, getColumnKey, getItemKey, getVisibleColumnDefinitions, toContainerVariant } from './utils';\nimport { useRowEvents } from './use-row-events';\nimport { SelectionControl, focusMarkers, useSelectionFocusMove, useSelection } from './selection';\nimport { fireNonCancelableEvent } from '../internal/events';\nimport { isDevelopment } from '../internal/is-development';\nimport { ColumnWidthDefinition, ColumnWidthsProvider, DEFAULT_COLUMN_WIDTH } from './use-column-widths';\nimport { useScrollSync } from '../internal/hooks/use-scroll-sync';\nimport { ResizeTracker } from './resizer';\nimport styles from './styles.css.js';\nimport headerStyles from '../header/styles.css.js';\nimport { InternalBaseComponentProps } from '../internal/hooks/use-base-component';\nimport { useVisualRefresh } from '../internal/hooks/use-visual-mode';\nimport StickyHeader, { StickyHeaderRef } from './sticky-header';\nimport { useMergeRefs } from '../internal/hooks/use-merge-refs';\nimport useMouseDownTarget from '../internal/hooks/use-mouse-down-target';\nimport { useDynamicOverlap } from '../internal/hooks/use-dynamic-overlap';\nimport LiveRegion from '../internal/components/live-region';\nimport useTableFocusNavigation from './use-table-focus-navigation';\nimport { SomeRequired } from '../internal/types';\nimport { TableTdElement } from './body-cell/td-element';\nimport { useStickyColumns } from './sticky-columns';\nimport { StickyScrollbar } from './sticky-scrollbar';\nimport { checkColumnWidths } from './column-widths-utils';\nimport { useMobile } from '../internal/hooks/use-mobile';\nimport { useContainerQuery } from '@cloudscape-design/component-toolkit';\nimport {\n GridNavigationProvider,\n TableRole,\n getTableRoleProps,\n getTableRowRoleProps,\n getTableWrapperRoleProps,\n} from './table-role';\nimport { useCellEditing } from './use-cell-editing';\nimport { LinkDefaultVariantContext } from '../internal/context/link-default-variant-context';\nimport { CollectionLabelContext } from '../internal/context/collection-label-context';\nimport { useFunnelSubStep } from '../internal/analytics/hooks/use-funnel';\nimport { NoDataCell } from './no-data-cell';\nimport { usePerformanceMarks } from '../internal/hooks/use-performance-marks';\nimport { getContentHeaderClassName } from '../internal/utils/content-header-utils';\nimport { useExpandableTableProps } from './expandable-rows/expandable-rows-utils';\n\nconst GRID_NAVIGATION_PAGE_SIZE = 10;\nconst SELECTION_COLUMN_WIDTH = 54;\nconst selectionColumnId = Symbol('selection-column-id');\n\ntype InternalTableProps<T> = SomeRequired<TableProps<T>, 'items' | 'selectedItems' | 'variant'> &\n InternalBaseComponentProps & {\n __funnelSubStepProps?: InternalContainerProps['__funnelSubStepProps'];\n };\n\nexport const InternalTableAsSubstep = React.forwardRef(\n <T,>(props: InternalTableProps<T>, ref: React.Ref<TableProps.Ref>) => {\n const { funnelSubStepProps } = useFunnelSubStep();\n\n const tableProps: InternalTableProps<T> = {\n ...props,\n __funnelSubStepProps: funnelSubStepProps,\n };\n\n return <InternalTable {...tableProps} ref={ref} />;\n }\n) as TableForwardRefType;\n\nconst InternalTable = React.forwardRef(\n <T,>(\n {\n header,\n footer,\n empty,\n filter,\n pagination,\n preferences,\n items,\n columnDefinitions,\n trackBy,\n loading,\n loadingText,\n selectionType,\n selectedItems,\n isItemDisabled,\n ariaLabels,\n onSelectionChange,\n onSortingChange,\n sortingColumn,\n sortingDescending,\n sortingDisabled,\n visibleColumns,\n stickyHeader,\n stickyHeaderVerticalOffset,\n onRowClick,\n onRowContextMenu,\n wrapLines,\n stripedRows,\n contentDensity,\n submitEdit,\n onEditCancel,\n resizableColumns,\n onColumnWidthsChange,\n variant,\n __internalRootRef,\n totalItemsCount,\n firstIndex,\n renderAriaLive,\n stickyColumns,\n columnDisplay,\n enableKeyboardNavigation,\n expandableRows,\n __funnelSubStepProps,\n ...rest\n }: InternalTableProps<T>,\n ref: React.Ref<TableProps.Ref>\n ) => {\n // Keyboard navigation defaults to `true` for tables with expandable rows.\n if (expandableRows && enableKeyboardNavigation === undefined) {\n enableKeyboardNavigation = true;\n }\n\n const baseProps = getBaseProps(rest);\n stickyHeader = stickyHeader && supportsStickyPosition();\n const isMobile = useMobile();\n\n const { isExpandable, allItems, getExpandableItemProps } = useExpandableTableProps({\n items,\n expandableRows,\n trackBy,\n ariaLabels,\n });\n\n const [containerWidth, wrapperMeasureRef] = useContainerQuery<number>(rect => rect.contentBoxWidth);\n const wrapperMeasureRefObject = useRef(null);\n const wrapperMeasureMergedRef = useMergeRefs(wrapperMeasureRef, wrapperMeasureRefObject);\n\n const [tableWidth, tableMeasureRef] = useContainerQuery<number>(rect => rect.contentBoxWidth);\n const tableRefObject = useRef(null);\n\n const secondaryWrapperRef = React.useRef<HTMLDivElement>(null);\n const theadRef = useRef<HTMLTableRowElement>(null);\n const stickyHeaderRef = React.useRef<StickyHeaderRef>(null);\n const scrollbarRef = React.useRef<HTMLDivElement>(null);\n const { cancelEdit, ...cellEditing } = useCellEditing({ onCancel: onEditCancel, onSubmit: submitEdit });\n\n usePerformanceMarks(\n 'table',\n true,\n tableRefObject,\n () => {\n const headerText =\n toolsHeaderWrapper.current?.querySelector<HTMLElement>(`.${headerStyles['heading-text']}`)?.innerText ??\n toolsHeaderWrapper.current?.innerText;\n\n return {\n loading: loading ?? false,\n header: headerText,\n };\n },\n [loading]\n );\n\n useImperativeHandle(\n ref,\n () => ({\n scrollToTop: stickyHeaderRef.current?.scrollToTop || (() => undefined),\n cancelEdit,\n }),\n [cancelEdit]\n );\n\n const wrapperRefObject = useRef(null);\n const handleScroll = useScrollSync([wrapperRefObject, scrollbarRef, secondaryWrapperRef]);\n\n const { moveFocusDown, moveFocusUp, moveFocus } = useSelectionFocusMove(selectionType, allItems.length);\n const { onRowClickHandler, onRowContextMenuHandler } = useRowEvents({ onRowClick, onRowContextMenu });\n\n const visibleColumnDefinitions = getVisibleColumnDefinitions({\n columnDefinitions,\n columnDisplay,\n visibleColumns,\n });\n\n const { isItemSelected, getSelectAllProps, getItemSelectionProps, updateShiftToggle } = useSelection({\n items: allItems,\n trackBy,\n selectedItems,\n selectionType,\n isItemDisabled,\n onSelectionChange,\n ariaLabels,\n loading,\n });\n\n if (isDevelopment) {\n if (resizableColumns) {\n checkColumnWidths(columnDefinitions);\n }\n if (sortingColumn?.sortingComparator) {\n checkSortingState(columnDefinitions, sortingColumn.sortingComparator);\n }\n }\n\n const isVisualRefresh = useVisualRefresh();\n const computedVariant = isVisualRefresh\n ? variant\n : ['embedded', 'full-page'].indexOf(variant) > -1\n ? 'container'\n : variant;\n const hasHeader = !!(header || filter || pagination || preferences);\n const hasSelection = !!selectionType;\n const hasFooterPagination = isMobile && variant === 'full-page' && !!pagination;\n const hasFooter = !!footer || hasFooterPagination;\n\n const headerIdRef = useRef<string | undefined>(undefined);\n const isLabelledByHeader = !ariaLabels?.tableLabel && !!header;\n const setHeaderRef = useCallback((id: string) => {\n headerIdRef.current = id;\n }, []);\n\n const visibleColumnWidthsWithSelection: ColumnWidthDefinition[] = [];\n const visibleColumnIdsWithSelection: PropertyKey[] = [];\n if (hasSelection) {\n visibleColumnWidthsWithSelection.push({ id: selectionColumnId, width: SELECTION_COLUMN_WIDTH });\n visibleColumnIdsWithSelection.push(selectionColumnId);\n }\n for (let columnIndex = 0; columnIndex < visibleColumnDefinitions.length; columnIndex++) {\n const columnId = getColumnKey(visibleColumnDefinitions[columnIndex], columnIndex);\n visibleColumnWidthsWithSelection.push({ ...visibleColumnDefinitions[columnIndex], id: columnId });\n visibleColumnIdsWithSelection.push(columnId);\n }\n\n const stickyState = useStickyColumns({\n visibleColumns: visibleColumnIdsWithSelection,\n stickyColumnsFirst: (stickyColumns?.first ?? 0) + (stickyColumns?.first && hasSelection ? 1 : 0),\n stickyColumnsLast: stickyColumns?.last || 0,\n });\n\n const hasStickyColumns = !!((stickyColumns?.first ?? 0) + (stickyColumns?.last ?? 0) > 0);\n const hasEditableCells = !!columnDefinitions.find(col => col.editConfig);\n\n let tableRole: TableRole = 'table';\n if (isExpandable) {\n tableRole = 'treegrid';\n } else if (enableKeyboardNavigation) {\n tableRole = 'grid';\n } else if (hasEditableCells) {\n tableRole = 'grid-default';\n }\n\n const theadProps: TheadProps = {\n selectionType,\n getSelectAllProps,\n columnDefinitions: visibleColumnDefinitions,\n variant: computedVariant,\n wrapLines,\n resizableColumns,\n sortingColumn,\n sortingDisabled,\n sortingDescending,\n onSortingChange,\n onFocusMove: moveFocus,\n onResizeFinish(newWidth) {\n const widthsDetail = columnDefinitions.map(\n (column, index) =>\n newWidth.get(getColumnKey(column, index)) || (column.width as number) || DEFAULT_COLUMN_WIDTH\n );\n const widthsChanged = widthsDetail.some((width, index) => columnDefinitions[index].width !== width);\n if (widthsChanged) {\n fireNonCancelableEvent(onColumnWidthsChange, { widths: widthsDetail });\n }\n },\n singleSelectionHeaderAriaLabel: ariaLabels?.selectionGroupLabel,\n resizerRoleDescription: ariaLabels?.resizerRoleDescription,\n stripedRows,\n stickyState,\n selectionColumnId,\n tableRole,\n isExpandable,\n };\n\n const wrapperRef = useMergeRefs(wrapperRefObject, stickyState.refs.wrapper);\n const tableRef = useMergeRefs(tableMeasureRef, tableRefObject, stickyState.refs.table);\n\n const wrapperProps = getTableWrapperRoleProps({\n tableRole,\n isScrollable: !!(tableWidth && containerWidth && tableWidth > containerWidth),\n ariaLabel: ariaLabels?.tableLabel,\n });\n\n const getMouseDownTarget = useMouseDownTarget();\n\n const hasDynamicHeight = computedVariant === 'full-page';\n const overlapElement = useDynamicOverlap({ disabled: !hasDynamicHeight });\n useTableFocusNavigation({\n enableKeyboardNavigation,\n selectionType,\n tableRoot: tableRefObject,\n columnDefinitions: visibleColumnDefinitions,\n numRows: allItems?.length,\n });\n const toolsHeaderWrapper = useRef<HTMLDivElement>(null);\n // If is mobile, we take into consideration the AppLayout's mobile bar and we subtract the tools wrapper height so only the table header is sticky\n const toolsHeaderHeight =\n (toolsHeaderWrapper?.current as HTMLDivElement | null)?.getBoundingClientRect().height ?? 0;\n\n const colIndexOffset = selectionType ? 1 : 0;\n const totalColumnsCount = visibleColumnDefinitions.length + colIndexOffset;\n\n return (\n <LinkDefaultVariantContext.Provider value={{ defaultVariant: 'primary' }}>\n <ColumnWidthsProvider\n visibleColumns={visibleColumnWidthsWithSelection}\n resizableColumns={resizableColumns}\n containerRef={wrapperMeasureRefObject}\n >\n <InternalContainer\n {...baseProps}\n __internalRootRef={__internalRootRef}\n className={clsx(baseProps.className, styles.root)}\n __funnelSubStepProps={__funnelSubStepProps}\n header={\n <>\n {hasHeader && (\n <div\n ref={overlapElement}\n className={clsx(hasDynamicHeight && [styles['dark-header'], getContentHeaderClassName()])}\n >\n <div\n ref={toolsHeaderWrapper}\n className={clsx(styles['header-controls'], styles[`variant-${computedVariant}`])}\n >\n <CollectionLabelContext.Provider value={{ assignId: setHeaderRef }}>\n <ToolsHeader\n header={header}\n filter={filter}\n pagination={pagination}\n preferences={preferences}\n />\n </CollectionLabelContext.Provider>\n </div>\n </div>\n )}\n {stickyHeader && (\n <StickyHeader\n ref={stickyHeaderRef}\n variant={computedVariant}\n theadProps={theadProps}\n wrapperRef={wrapperRefObject}\n theadRef={theadRef}\n secondaryWrapperRef={secondaryWrapperRef}\n tableRef={tableRefObject}\n onScroll={handleScroll}\n tableHasHeader={hasHeader}\n contentDensity={contentDensity}\n tableRole={tableRole}\n />\n )}\n </>\n }\n disableHeaderPaddings={true}\n disableContentPaddings={true}\n variant={toContainerVariant(computedVariant)}\n __disableFooterPaddings={true}\n __disableFooterDivider={true}\n __disableStickyMobile={false}\n footer={\n hasFooter ? (\n <div className={clsx(styles['footer-wrapper'], styles[`variant-${computedVariant}`])}>\n <div className={clsx(styles.footer, hasFooterPagination && styles['footer-with-pagination'])}>\n {footer && <span>{footer}</span>}\n {hasFooterPagination && <div className={styles['footer-pagination']}>{pagination}</div>}\n </div>\n </div>\n ) : null\n }\n __stickyHeader={stickyHeader}\n __mobileStickyOffset={toolsHeaderHeight}\n __stickyOffset={stickyHeaderVerticalOffset}\n {...focusMarkers.root}\n >\n <div\n ref={wrapperRef}\n className={clsx(styles.wrapper, styles[`variant-${computedVariant}`], {\n [styles['has-footer']]: hasFooter,\n [styles['has-header']]: hasHeader,\n })}\n style={stickyState.style.wrapper}\n onScroll={handleScroll}\n {...wrapperProps}\n >\n <div className={styles['wrapper-content-measure']} ref={wrapperMeasureMergedRef}></div>\n {!!renderAriaLive && !!firstIndex && (\n <LiveRegion>\n <span>\n {renderAriaLive({ totalItemsCount, firstIndex, lastIndex: firstIndex + items.length - 1 })}\n </span>\n </LiveRegion>\n )}\n <GridNavigationProvider\n keyboardNavigation={!!enableKeyboardNavigation}\n pageSize={GRID_NAVIGATION_PAGE_SIZE}\n getTable={() => tableRefObject.current}\n >\n <table\n ref={tableRef}\n className={clsx(\n styles.table,\n resizableColumns && styles['table-layout-fixed'],\n contentDensity === 'compact' && getVisualContextClassname('compact-table')\n )}\n {...getTableRoleProps({\n tableRole,\n totalItemsCount,\n totalColumnsCount: totalColumnsCount,\n ariaLabel: ariaLabels?.tableLabel,\n ariaLabelledBy: isLabelledByHeader && headerIdRef.current ? headerIdRef.current : undefined,\n })}\n >\n <Thead\n ref={theadRef}\n hidden={stickyHeader}\n onFocusedComponentChange={focusId => stickyHeaderRef.current?.setFocus(focusId)}\n {...theadProps}\n />\n <tbody>\n {loading || allItems.length === 0 ? (\n <tr>\n <NoDataCell\n totalColumnsCount={totalColumnsCount}\n hasFooter={hasFooter}\n loading={loading}\n loadingText={loadingText}\n empty={empty}\n tableRef={tableRefObject}\n containerRef={wrapperMeasureRefObject}\n />\n </tr>\n ) : (\n allItems.map((item, rowIndex) => {\n const isFirstRow = rowIndex === 0;\n const isLastRow = rowIndex === allItems.length - 1;\n const sharedCellProps = {\n isFirstRow,\n isLastRow,\n isVisualRefresh,\n isSelected: hasSelection && isItemSelected(item),\n isPrevSelected: hasSelection && !isFirstRow && isItemSelected(allItems[rowIndex - 1]),\n isNextSelected: hasSelection && !isLastRow && isItemSelected(allItems[rowIndex + 1]),\n isEvenRow: rowIndex % 2 === 0,\n hasFooter,\n stripedRows,\n stickyState,\n tableRole,\n };\n const expandableProps = getExpandableItemProps(item);\n return (\n <tr\n key={getItemKey(trackBy, item, rowIndex)}\n className={clsx(styles.row, sharedCellProps.isSelected && styles['row-selected'])}\n onFocus={({ currentTarget }) => {\n // When an element inside table row receives focus we want to adjust the scroll.\n // However, that behaviour is unwanted when the focus is received as result of a click\n // as it causes the click to never reach the target element.\n if (!currentTarget.contains(getMouseDownTarget())) {\n stickyHeaderRef.current?.scrollToRow(currentTarget);\n }\n }}\n {...focusMarkers.item}\n onClick={onRowClickHandler && onRowClickHandler.bind(null, rowIndex, item)}\n onContextMenu={\n onRowContextMenuHandler && onRowContextMenuHandler.bind(null, rowIndex, item)\n }\n {...getTableRowRoleProps({ tableRole, firstIndex, rowIndex, expandableProps })}\n >\n {hasSelection && (\n <TableTdElement\n {...sharedCellProps}\n className={clsx(styles['selection-control'])}\n wrapLines={false}\n hasSelection={true}\n columnId={selectionColumnId}\n colIndex={0}\n >\n <SelectionControl\n tableRole={tableRole}\n onFocusDown={moveFocusDown}\n onFocusUp={moveFocusUp}\n onShiftToggle={updateShiftToggle}\n {...getItemSelectionProps(item)}\n />\n </TableTdElement>\n )}\n\n {visibleColumnDefinitions.map((column, colIndex) => {\n const isEditing = cellEditing.checkEditing({ rowIndex, colIndex });\n const successfulEdit = cellEditing.checkLastSuccessfulEdit({ rowIndex, colIndex });\n const isEditable = !!column.editConfig && !cellEditing.isLoading;\n return (\n <TableBodyCell\n key={getColumnKey(column, colIndex)}\n {...sharedCellProps}\n style={\n resizableColumns\n ? {}\n : {\n width: column.width,\n minWidth: column.minWidth,\n maxWidth: column.maxWidth,\n }\n }\n ariaLabels={ariaLabels}\n column={column}\n item={item}\n wrapLines={wrapLines}\n isEditable={isEditable}\n isEditing={isEditing}\n isRowHeader={column.isRowHeader}\n successfulEdit={successfulEdit}\n onEditStart={() => cellEditing.startEdit({ rowIndex, colIndex })}\n onEditEnd={editCancelled =>\n cellEditing.completeEdit({ rowIndex, colIndex }, editCancelled)\n }\n submitEdit={cellEditing.submitEdit}\n columnId={column.id ?? colIndex}\n colIndex={colIndex + colIndexOffset}\n // Expandable props only apply to the first data column of the table.\n // When present, the cell content is decorated with expand toggles and extra paddings.\n expandableProps={isExpandable && colIndex === 0 ? expandableProps : undefined}\n />\n );\n })}\n </tr>\n );\n })\n )}\n </tbody>\n </table>\n </GridNavigationProvider>\n\n {resizableColumns && <ResizeTracker />}\n </div>\n\n <StickyScrollbar\n ref={scrollbarRef}\n wrapperRef={wrapperRefObject}\n tableRef={tableRefObject}\n onScroll={handleScroll}\n hasStickyColumns={hasStickyColumns}\n />\n </InternalContainer>\n </ColumnWidthsProvider>\n </LinkDefaultVariantContext.Provider>\n );\n }\n) as TableForwardRefType;\n\nexport default InternalTable;\n"]}
1
+ {"version":3,"file":"internal.js","sourceRoot":"","sources":["../../../src/table/internal.tsx"],"names":[],"mappings":";AAAA,qEAAqE;AACrE,sCAAsC;AACtC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,KAAK,EAAE,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAExE,OAAO,EAAE,yBAAyB,EAAE,MAAM,uCAAuC,CAAC;AAClF,OAAO,iBAA6C,MAAM,uBAAuB,CAAC;AAClF,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,WAAW,MAAM,gBAAgB,CAAC;AACzC,OAAO,KAAqB,MAAM,SAAS,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,UAAU,EAAE,2BAA2B,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AACvH,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAClG,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAyB,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AACxG,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,MAAM,MAAM,iBAAiB,CAAC;AACrC,OAAO,YAAY,MAAM,yBAAyB,CAAC;AAEnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,YAAiC,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAChE,OAAO,kBAAkB,MAAM,yCAAyC,CAAC;AACzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAC1E,OAAO,UAAU,MAAM,oCAAoC,CAAC;AAC5D,OAAO,uBAAuB,MAAM,8BAA8B,CAAC;AAEnE,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AACzE,OAAO,EACL,sBAAsB,EAEtB,iBAAiB,EACjB,oBAAoB,EACpB,wBAAwB,GACzB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,yBAAyB,EAAE,MAAM,kDAAkD,CAAC;AAC7F,OAAO,EAAE,sBAAsB,EAAE,MAAM,8CAA8C,CAAC;AACtF,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAC1E,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAC;AAC9E,OAAO,EAAE,yBAAyB,EAAE,MAAM,wCAAwC,CAAC;AACnF,OAAO,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAC;AAElF,MAAM,yBAAyB,GAAG,EAAE,CAAC;AACrC,MAAM,sBAAsB,GAAG,EAAE,CAAC;AAClC,MAAM,iBAAiB,GAAG,MAAM,CAAC,qBAAqB,CAAC,CAAC;AAOxD,MAAM,CAAC,MAAM,sBAAsB,GAAG,KAAK,CAAC,UAAU,CACpD,CAAK,KAA4B,EAAE,GAA8B,EAAE,EAAE;IACnE,MAAM,EAAE,kBAAkB,EAAE,GAAG,gBAAgB,EAAE,CAAC;IAElD,MAAM,UAAU,mCACX,KAAK,KACR,oBAAoB,EAAE,kBAAkB,GACzC,CAAC;IAEF,OAAO,oBAAC,aAAa,oBAAK,UAAU,IAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AACrD,CAAC,CACqB,CAAC;AAEzB,MAAM,aAAa,GAAG,KAAK,CAAC,UAAU,CACpC,CACE,EA4CwB,EACxB,GAA8B,EAC9B,EAAE;;QA9CF,EACE,MAAM,EACN,MAAM,EACN,KAAK,EACL,MAAM,EACN,UAAU,EACV,WAAW,EACX,KAAK,EACL,iBAAiB,EACjB,OAAO,EACP,OAAO,EACP,WAAW,EACX,aAAa,EACb,aAAa,EACb,cAAc,EACd,UAAU,EACV,iBAAiB,EACjB,eAAe,EACf,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,cAAc,EACd,YAAY,EACZ,0BAA0B,EAC1B,UAAU,EACV,gBAAgB,EAChB,SAAS,EACT,WAAW,EACX,cAAc,EACd,UAAU,EACV,YAAY,EACZ,gBAAgB,EAChB,oBAAoB,EACpB,OAAO,EACP,iBAAiB,EACjB,eAAe,EACf,UAAU,EACV,cAAc,EACd,aAAa,EACb,aAAa,EACb,wBAAwB,EACxB,cAAc,EACd,oBAAoB,OAEE,EADnB,IAAI,cA3CT,+rBA4CC,CADQ;IAIT,0EAA0E;IAC1E,IAAI,cAAc,IAAI,wBAAwB,KAAK,SAAS,EAAE;QAC5D,wBAAwB,GAAG,IAAI,CAAC;KACjC;IAED,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IACrC,YAAY,GAAG,YAAY,IAAI,sBAAsB,EAAE,CAAC;IACxD,MAAM,QAAQ,GAAG,SAAS,EAAE,CAAC;IAE7B,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,sBAAsB,EAAE,GAAG,uBAAuB,CAAC;QACjF,KAAK;QACL,cAAc;QACd,OAAO;QACP,UAAU;KACX,CAAC,CAAC;IAEH,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,iBAAiB,CAAS,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IACpG,MAAM,uBAAuB,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,uBAAuB,GAAG,YAAY,CAAC,iBAAiB,EAAE,uBAAuB,CAAC,CAAC;IAEzF,MAAM,CAAC,UAAU,EAAE,eAAe,CAAC,GAAG,iBAAiB,CAAS,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAC9F,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IAEpC,MAAM,mBAAmB,GAAG,KAAK,CAAC,MAAM,CAAiB,IAAI,CAAC,CAAC;IAC/D,MAAM,QAAQ,GAAG,MAAM,CAAsB,IAAI,CAAC,CAAC;IACnD,MAAM,eAAe,GAAG,KAAK,CAAC,MAAM,CAAkB,IAAI,CAAC,CAAC;IAC5D,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,CAAiB,IAAI,CAAC,CAAC;IACxD,MAAM,KAAiC,cAAc,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,EAAjG,EAAE,UAAU,OAAqF,EAAhF,WAAW,cAA5B,cAA8B,CAAmE,CAAC;IAExG,mBAAmB,CACjB,OAAO,EACP,IAAI,EACJ,cAAc,EACd,GAAG,EAAE;;QACH,MAAM,UAAU,GACd,MAAA,MAAA,MAAA,kBAAkB,CAAC,OAAO,0CAAE,aAAa,CAAc,IAAI,YAAY,CAAC,cAAc,CAAC,EAAE,CAAC,0CAAE,SAAS,mCACrG,MAAA,kBAAkB,CAAC,OAAO,0CAAE,SAAS,CAAC;QAExC,OAAO;YACL,OAAO,EAAE,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,KAAK;YACzB,MAAM,EAAE,UAAU;SACnB,CAAC;IACJ,CAAC,EACD,CAAC,OAAO,CAAC,CACV,CAAC;IAEF,mBAAmB,CACjB,GAAG,EACH,GAAG,EAAE;;QAAC,OAAA,CAAC;YACL,WAAW,EAAE,CAAA,MAAA,eAAe,CAAC,OAAO,0CAAE,WAAW,KAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC;YACtE,UAAU;SACX,CAAC,CAAA;KAAA,EACF,CAAC,UAAU,CAAC,CACb,CAAC;IAEF,MAAM,gBAAgB,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IACtC,MAAM,YAAY,GAAG,aAAa,CAAC,CAAC,gBAAgB,EAAE,YAAY,EAAE,mBAAmB,CAAC,CAAC,CAAC;IAE1F,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG,qBAAqB,CAAC,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IACxG,MAAM,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,GAAG,YAAY,CAAC,EAAE,UAAU,EAAE,gBAAgB,EAAE,CAAC,CAAC;IAEtG,MAAM,wBAAwB,GAAG,2BAA2B,CAAC;QAC3D,iBAAiB;QACjB,aAAa;QACb,cAAc;KACf,CAAC,CAAC;IAEH,MAAM,EAAE,cAAc,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,GAAG,YAAY,CAAC;QACnG,KAAK,EAAE,QAAQ;QACf,OAAO;QACP,aAAa;QACb,aAAa;QACb,cAAc;QACd,iBAAiB;QACjB,UAAU;QACV,OAAO;KACR,CAAC,CAAC;IAEH,IAAI,aAAa,EAAE;QACjB,IAAI,gBAAgB,EAAE;YACpB,iBAAiB,CAAC,iBAAiB,CAAC,CAAC;SACtC;QACD,IAAI,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,iBAAiB,EAAE;YACpC,iBAAiB,CAAC,iBAAiB,EAAE,aAAa,CAAC,iBAAiB,CAAC,CAAC;SACvE;KACF;IAED,MAAM,eAAe,GAAG,gBAAgB,EAAE,CAAC;IAC3C,MAAM,eAAe,GAAG,eAAe;QACrC,CAAC,CAAC,OAAO;QACT,CAAC,CAAC,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACjD,CAAC,CAAC,WAAW;YACb,CAAC,CAAC,OAAO,CAAC;IACZ,MAAM,SAAS,GAAG,CAAC,CAAC,CAAC,MAAM,IAAI,MAAM,IAAI,UAAU,IAAI,WAAW,CAAC,CAAC;IACpE,MAAM,YAAY,GAAG,CAAC,CAAC,aAAa,CAAC;IACrC,MAAM,mBAAmB,GAAG,QAAQ,IAAI,OAAO,KAAK,WAAW,IAAI,CAAC,CAAC,UAAU,CAAC;IAChF,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,IAAI,mBAAmB,CAAC;IAElD,MAAM,WAAW,GAAG,MAAM,CAAqB,SAAS,CAAC,CAAC;IAC1D,MAAM,kBAAkB,GAAG,CAAC,CAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,UAAU,CAAA,IAAI,CAAC,CAAC,MAAM,CAAC;IAC/D,MAAM,YAAY,GAAG,WAAW,CAAC,CAAC,EAAU,EAAE,EAAE;QAC9C,WAAW,CAAC,OAAO,GAAG,EAAE,CAAC;IAC3B,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,gCAAgC,GAA4B,EAAE,CAAC;IACrE,MAAM,6BAA6B,GAAkB,EAAE,CAAC;IACxD,IAAI,YAAY,EAAE;QAChB,gCAAgC,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,iBAAiB,EAAE,KAAK,EAAE,sBAAsB,EAAE,CAAC,CAAC;QAChG,6BAA6B,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;KACvD;IACD,KAAK,IAAI,WAAW,GAAG,CAAC,EAAE,WAAW,GAAG,wBAAwB,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE;QACtF,MAAM,QAAQ,GAAG,YAAY,CAAC,wBAAwB,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC,CAAC;QAClF,gCAAgC,CAAC,IAAI,iCAAM,wBAAwB,CAAC,WAAW,CAAC,KAAE,EAAE,EAAE,QAAQ,IAAG,CAAC;QAClG,6BAA6B,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;KAC9C;IAED,MAAM,WAAW,GAAG,gBAAgB,CAAC;QACnC,cAAc,EAAE,6BAA6B;QAC7C,kBAAkB,EAAE,CAAC,MAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,KAAK,mCAAI,CAAC,CAAC,GAAG,CAAC,CAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,KAAK,KAAI,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAChG,iBAAiB,EAAE,CAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,IAAI,KAAI,CAAC;KAC5C,CAAC,CAAC;IAEH,MAAM,gBAAgB,GAAG,CAAC,CAAC,CAAC,CAAC,MAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,KAAK,mCAAI,CAAC,CAAC,GAAG,CAAC,MAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,IAAI,mCAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1F,MAAM,gBAAgB,GAAG,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAEzE,IAAI,SAAS,GAAc,OAAO,CAAC;IACnC,IAAI,YAAY,EAAE;QAChB,SAAS,GAAG,UAAU,CAAC;KACxB;SAAM,IAAI,wBAAwB,EAAE;QACnC,SAAS,GAAG,MAAM,CAAC;KACpB;SAAM,IAAI,gBAAgB,EAAE;QAC3B,SAAS,GAAG,cAAc,CAAC;KAC5B;IAED,MAAM,UAAU,GAAe;QAC7B,aAAa;QACb,iBAAiB;QACjB,iBAAiB,EAAE,wBAAwB;QAC3C,OAAO,EAAE,eAAe;QACxB,SAAS;QACT,gBAAgB;QAChB,aAAa;QACb,eAAe;QACf,iBAAiB;QACjB,eAAe;QACf,WAAW,EAAE,SAAS;QACtB,cAAc,CAAC,QAAQ;YACrB,MAAM,YAAY,GAAG,iBAAiB,CAAC,GAAG,CACxC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAChB,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,IAAK,MAAM,CAAC,KAAgB,IAAI,oBAAoB,CAChG,CAAC;YACF,MAAM,aAAa,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC;YACpG,IAAI,aAAa,EAAE;gBACjB,sBAAsB,CAAC,oBAAoB,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;aACxE;QACH,CAAC;QACD,8BAA8B,EAAE,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,mBAAmB;QAC/D,sBAAsB,EAAE,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,sBAAsB;QAC1D,WAAW;QACX,WAAW;QACX,iBAAiB;QACjB,SAAS;QACT,YAAY;KACb,CAAC;IAEF,MAAM,UAAU,GAAG,YAAY,CAAC,gBAAgB,EAAE,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC5E,MAAM,QAAQ,GAAG,YAAY,CAAC,eAAe,EAAE,cAAc,EAAE,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAEvF,MAAM,YAAY,GAAG,wBAAwB,CAAC;QAC5C,SAAS;QACT,YAAY,EAAE,CAAC,CAAC,CAAC,UAAU,IAAI,cAAc,IAAI,UAAU,GAAG,cAAc,CAAC;QAC7E,SAAS,EAAE,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,UAAU;KAClC,CAAC,CAAC;IAEH,MAAM,kBAAkB,GAAG,kBAAkB,EAAE,CAAC;IAEhD,MAAM,gBAAgB,GAAG,eAAe,KAAK,WAAW,CAAC;IACzD,MAAM,cAAc,GAAG,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC,gBAAgB,EAAE,CAAC,CAAC;IAC1E,uBAAuB,CAAC;QACtB,wBAAwB;QACxB,aAAa;QACb,SAAS,EAAE,cAAc;QACzB,iBAAiB,EAAE,wBAAwB;QAC3C,OAAO,EAAE,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,MAAM;KAC1B,CAAC,CAAC;IACH,MAAM,kBAAkB,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IACxD,kJAAkJ;IAClJ,MAAM,iBAAiB,GACrB,MAAA,MAAC,kBAAkB,aAAlB,kBAAkB,uBAAlB,kBAAkB,CAAE,OAAiC,0CAAE,qBAAqB,GAAG,MAAM,mCAAI,CAAC,CAAC;IAE9F,MAAM,cAAc,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7C,MAAM,iBAAiB,GAAG,wBAAwB,CAAC,MAAM,GAAG,cAAc,CAAC;IAE3E,OAAO,CACL,oBAAC,yBAAyB,CAAC,QAAQ,IAAC,KAAK,EAAE,EAAE,cAAc,EAAE,SAAS,EAAE;QACtE,oBAAC,oBAAoB,IACnB,cAAc,EAAE,gCAAgC,EAChD,gBAAgB,EAAE,gBAAgB,EAClC,YAAY,EAAE,uBAAuB;YAErC,oBAAC,iBAAiB,oBACZ,SAAS,IACb,iBAAiB,EAAE,iBAAiB,EACpC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,EACjD,oBAAoB,EAAE,oBAAoB,EAC1C,MAAM,EACJ;oBACG,SAAS,IAAI,CACZ,6BACE,GAAG,EAAE,cAAc,EACnB,SAAS,EAAE,IAAI,CAAC,gBAAgB,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,yBAAyB,EAAE,CAAC,CAAC;wBAEzF,6BACE,GAAG,EAAE,kBAAkB,EACvB,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC,WAAW,eAAe,EAAE,CAAC,CAAC;4BAEhF,oBAAC,sBAAsB,CAAC,QAAQ,IAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE;gCAChE,oBAAC,WAAW,IACV,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,UAAU,EACtB,WAAW,EAAE,WAAW,GACxB,CAC8B,CAC9B,CACF,CACP;oBACA,YAAY,IAAI,CACf,oBAAC,YAAY,IACX,GAAG,EAAE,eAAe,EACpB,OAAO,EAAE,eAAe,EACxB,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,gBAAgB,EAC5B,QAAQ,EAAE,QAAQ,EAClB,mBAAmB,EAAE,mBAAmB,EACxC,QAAQ,EAAE,cAAc,EACxB,QAAQ,EAAE,YAAY,EACtB,cAAc,EAAE,SAAS,EACzB,cAAc,EAAE,cAAc,EAC9B,SAAS,EAAE,SAAS,GACpB,CACH,CACA,EAEL,qBAAqB,EAAE,IAAI,EAC3B,sBAAsB,EAAE,IAAI,EAC5B,OAAO,EAAE,kBAAkB,CAAC,eAAe,CAAC,EAC5C,uBAAuB,EAAE,IAAI,EAC7B,sBAAsB,EAAE,IAAI,EAC5B,qBAAqB,EAAE,KAAK,EAC5B,MAAM,EACJ,SAAS,CAAC,CAAC,CAAC,CACV,6BAAK,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC,WAAW,eAAe,EAAE,CAAC,CAAC;oBAClF,6BAAK,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,mBAAmB,IAAI,MAAM,CAAC,wBAAwB,CAAC,CAAC;wBACzF,MAAM,IAAI,kCAAO,MAAM,CAAQ;wBAC/B,mBAAmB,IAAI,6BAAK,SAAS,EAAE,MAAM,CAAC,mBAAmB,CAAC,IAAG,UAAU,CAAO,CACnF,CACF,CACP,CAAC,CAAC,CAAC,IAAI,EAEV,cAAc,EAAE,YAAY,EAC5B,oBAAoB,EAAE,iBAAiB,EACvC,cAAc,EAAE,0BAA0B,IACtC,YAAY,CAAC,IAAI;gBAErB,2CACE,GAAG,EAAE,UAAU,EACf,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,WAAW,eAAe,EAAE,CAAC,EAAE;wBACpE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE,SAAS;wBACjC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE,SAAS;qBAClC,CAAC,EACF,KAAK,EAAE,WAAW,CAAC,KAAK,CAAC,OAAO,EAChC,QAAQ,EAAE,YAAY,IAClB,YAAY;oBAEhB,6BAAK,SAAS,EAAE,MAAM,CAAC,yBAAyB,CAAC,EAAE,GAAG,EAAE,uBAAuB,GAAQ;oBACtF,CAAC,CAAC,cAAc,IAAI,CAAC,CAAC,UAAU,IAAI,CACnC,oBAAC,UAAU;wBACT,kCACG,cAAc,CAAC,EAAE,eAAe,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,CACrF,CACI,CACd;oBACD,oBAAC,sBAAsB,IACrB,kBAAkB,EAAE,CAAC,CAAC,wBAAwB,EAC9C,QAAQ,EAAE,yBAAyB,EACnC,QAAQ,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,OAAO;wBAEtC,6CACE,GAAG,EAAE,QAAQ,EACb,SAAS,EAAE,IAAI,CACb,MAAM,CAAC,KAAK,EACZ,gBAAgB,IAAI,MAAM,CAAC,oBAAoB,CAAC,EAChD,cAAc,KAAK,SAAS,IAAI,yBAAyB,CAAC,eAAe,CAAC,CAC3E,IACG,iBAAiB,CAAC;4BACpB,SAAS;4BACT,eAAe;4BACf,iBAAiB,EAAE,iBAAiB;4BACpC,SAAS,EAAE,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,UAAU;4BACjC,cAAc,EAAE,kBAAkB,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;yBAC5F,CAAC;4BAEF,oBAAC,KAAK,kBACJ,GAAG,EAAE,QAAQ,EACb,MAAM,EAAE,YAAY,EACpB,wBAAwB,EAAE,OAAO,CAAC,EAAE,WAAC,OAAA,MAAA,eAAe,CAAC,OAAO,0CAAE,QAAQ,CAAC,OAAO,CAAC,CAAA,EAAA,IAC3E,UAAU,EACd;4BACF,mCACG,OAAO,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAClC;gCACE,oBAAC,UAAU,IACT,iBAAiB,EAAE,iBAAiB,EACpC,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,OAAO,EAChB,WAAW,EAAE,WAAW,EACxB,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,cAAc,EACxB,YAAY,EAAE,uBAAuB,GACrC,CACC,CACN,CAAC,CAAC,CAAC,CACF,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE;gCAC9B,MAAM,UAAU,GAAG,QAAQ,KAAK,CAAC,CAAC;gCAClC,MAAM,SAAS,GAAG,QAAQ,KAAK,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;gCACnD,MAAM,eAAe,GAAG;oCACtB,UAAU;oCACV,SAAS;oCACT,eAAe;oCACf,UAAU,EAAE,YAAY,IAAI,cAAc,CAAC,IAAI,CAAC;oCAChD,cAAc,EAAE,YAAY,IAAI,CAAC,UAAU,IAAI,cAAc,CAAC,QAAQ,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;oCACrF,cAAc,EAAE,YAAY,IAAI,CAAC,SAAS,IAAI,cAAc,CAAC,QAAQ,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;oCACpF,SAAS,EAAE,QAAQ,GAAG,CAAC,KAAK,CAAC;oCAC7B,SAAS;oCACT,WAAW;oCACX,WAAW;oCACX,SAAS;iCACV,CAAC;gCACF,MAAM,mBAAmB,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC;gCACzD,OAAO,CACL,0CACE,GAAG,EAAE,UAAU,CAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,EACxC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,eAAe,CAAC,UAAU,IAAI,MAAM,CAAC,cAAc,CAAC,CAAC,EACjF,OAAO,EAAE,CAAC,EAAE,aAAa,EAAE,EAAE,EAAE;;wCAC7B,gFAAgF;wCAChF,sFAAsF;wCACtF,4DAA4D;wCAC5D,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,kBAAkB,EAAE,CAAC,EAAE;4CACjD,MAAA,eAAe,CAAC,OAAO,0CAAE,WAAW,CAAC,aAAa,CAAC,CAAC;yCACrD;oCACH,CAAC,IACG,YAAY,CAAC,IAAI,IACrB,OAAO,EAAE,iBAAiB,IAAI,iBAAiB,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,EAC1E,aAAa,EACX,uBAAuB,IAAI,uBAAuB,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,IAE3E,oBAAoB,iBAAG,SAAS,EAAE,UAAU,EAAE,QAAQ,IAAK,mBAAmB,EAAG;oCAEpF,YAAY,IAAI,CACf,oBAAC,cAAc,oBACT,eAAe,IACnB,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,EAC5C,SAAS,EAAE,KAAK,EAChB,YAAY,EAAE,IAAI,EAClB,QAAQ,EAAE,iBAAiB,EAC3B,QAAQ,EAAE,CAAC;wCAEX,oBAAC,gBAAgB,kBACf,WAAW,EAAE,aAAa,EAC1B,SAAS,EAAE,WAAW,EACtB,aAAa,EAAE,iBAAiB,IAC5B,qBAAqB,CAAC,IAAI,CAAC,EAC/B,CACa,CAClB;oCAEA,wBAAwB,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE;;wCACjD,MAAM,SAAS,GAAG,WAAW,CAAC,YAAY,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;wCACnE,MAAM,cAAc,GAAG,WAAW,CAAC,uBAAuB,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;wCACnF,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC,UAAU,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC;wCACjE,MAAM,mBAAmB,GACvB,YAAY,IAAI,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,SAAS,CAAC;wCACnE,OAAO,CACL,oBAAC,aAAa,kBACZ,GAAG,EAAE,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,IAC/B,eAAe,IACnB,KAAK,EACH,gBAAgB;gDACd,CAAC,CAAC,EAAE;gDACJ,CAAC,CAAC;oDACE,KAAK,EAAE,MAAM,CAAC,KAAK;oDACnB,QAAQ,EAAE,MAAM,CAAC,QAAQ;oDACzB,QAAQ,EAAE,MAAM,CAAC,QAAQ;iDAC1B,EAEP,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,SAAS,EACpB,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,MAAM,CAAC,WAAW,EAC/B,cAAc,EAAE,cAAc,EAC9B,WAAW,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAChE,SAAS,EAAE,aAAa,CAAC,EAAE,CACzB,WAAW,CAAC,YAAY,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,aAAa,CAAC,EAEjE,UAAU,EAAE,WAAW,CAAC,UAAU,EAClC,QAAQ,EAAE,MAAA,MAAM,CAAC,EAAE,mCAAI,QAAQ,EAC/B,QAAQ,EAAE,QAAQ,GAAG,cAAc,IAC/B,mBAAmB,EACvB,CACH,CAAC;oCACJ,CAAC,CAAC,CACC,CACN,CAAC;4BACJ,CAAC,CAAC,CACH,CACK,CACF,CACe;oBAExB,gBAAgB,IAAI,oBAAC,aAAa,OAAG,CAClC;gBAEN,oBAAC,eAAe,IACd,GAAG,EAAE,YAAY,EACjB,UAAU,EAAE,gBAAgB,EAC5B,QAAQ,EAAE,cAAc,EACxB,QAAQ,EAAE,YAAY,EACtB,gBAAgB,EAAE,gBAAgB,GAClC,CACgB,CACC,CACY,CACtC,CAAC;AACJ,CAAC,CACqB,CAAC;AAEzB,eAAe,aAAa,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, { useCallback, useImperativeHandle, useRef } from 'react';\nimport { TableForwardRefType, TableProps } from './interfaces';\nimport { getVisualContextClassname } from '../internal/components/visual-context';\nimport InternalContainer, { InternalContainerProps } from '../container/internal';\nimport { getBaseProps } from '../internal/base-component';\nimport ToolsHeader from './tools-header';\nimport Thead, { TheadProps } from './thead';\nimport { TableBodyCell } from './body-cell';\nimport { supportsStickyPosition } from '../internal/utils/dom';\nimport { checkSortingState, getColumnKey, getItemKey, getVisibleColumnDefinitions, toContainerVariant } from './utils';\nimport { useRowEvents } from './use-row-events';\nimport { SelectionControl, focusMarkers, useSelectionFocusMove, useSelection } from './selection';\nimport { fireNonCancelableEvent } from '../internal/events';\nimport { isDevelopment } from '../internal/is-development';\nimport { ColumnWidthDefinition, ColumnWidthsProvider, DEFAULT_COLUMN_WIDTH } from './use-column-widths';\nimport { useScrollSync } from '../internal/hooks/use-scroll-sync';\nimport { ResizeTracker } from './resizer';\nimport styles from './styles.css.js';\nimport headerStyles from '../header/styles.css.js';\nimport { InternalBaseComponentProps } from '../internal/hooks/use-base-component';\nimport { useVisualRefresh } from '../internal/hooks/use-visual-mode';\nimport StickyHeader, { StickyHeaderRef } from './sticky-header';\nimport { useMergeRefs } from '../internal/hooks/use-merge-refs';\nimport useMouseDownTarget from '../internal/hooks/use-mouse-down-target';\nimport { useDynamicOverlap } from '../internal/hooks/use-dynamic-overlap';\nimport LiveRegion from '../internal/components/live-region';\nimport useTableFocusNavigation from './use-table-focus-navigation';\nimport { SomeRequired } from '../internal/types';\nimport { TableTdElement } from './body-cell/td-element';\nimport { useStickyColumns } from './sticky-columns';\nimport { StickyScrollbar } from './sticky-scrollbar';\nimport { checkColumnWidths } from './column-widths-utils';\nimport { useMobile } from '../internal/hooks/use-mobile';\nimport { useContainerQuery } from '@cloudscape-design/component-toolkit';\nimport {\n GridNavigationProvider,\n TableRole,\n getTableRoleProps,\n getTableRowRoleProps,\n getTableWrapperRoleProps,\n} from './table-role';\nimport { useCellEditing } from './use-cell-editing';\nimport { LinkDefaultVariantContext } from '../internal/context/link-default-variant-context';\nimport { CollectionLabelContext } from '../internal/context/collection-label-context';\nimport { useFunnelSubStep } from '../internal/analytics/hooks/use-funnel';\nimport { NoDataCell } from './no-data-cell';\nimport { usePerformanceMarks } from '../internal/hooks/use-performance-marks';\nimport { getContentHeaderClassName } from '../internal/utils/content-header-utils';\nimport { useExpandableTableProps } from './expandable-rows/expandable-rows-utils';\n\nconst GRID_NAVIGATION_PAGE_SIZE = 10;\nconst SELECTION_COLUMN_WIDTH = 54;\nconst selectionColumnId = Symbol('selection-column-id');\n\ntype InternalTableProps<T> = SomeRequired<TableProps<T>, 'items' | 'selectedItems' | 'variant'> &\n InternalBaseComponentProps & {\n __funnelSubStepProps?: InternalContainerProps['__funnelSubStepProps'];\n };\n\nexport const InternalTableAsSubstep = React.forwardRef(\n <T,>(props: InternalTableProps<T>, ref: React.Ref<TableProps.Ref>) => {\n const { funnelSubStepProps } = useFunnelSubStep();\n\n const tableProps: InternalTableProps<T> = {\n ...props,\n __funnelSubStepProps: funnelSubStepProps,\n };\n\n return <InternalTable {...tableProps} ref={ref} />;\n }\n) as TableForwardRefType;\n\nconst InternalTable = React.forwardRef(\n <T,>(\n {\n header,\n footer,\n empty,\n filter,\n pagination,\n preferences,\n items,\n columnDefinitions,\n trackBy,\n loading,\n loadingText,\n selectionType,\n selectedItems,\n isItemDisabled,\n ariaLabels,\n onSelectionChange,\n onSortingChange,\n sortingColumn,\n sortingDescending,\n sortingDisabled,\n visibleColumns,\n stickyHeader,\n stickyHeaderVerticalOffset,\n onRowClick,\n onRowContextMenu,\n wrapLines,\n stripedRows,\n contentDensity,\n submitEdit,\n onEditCancel,\n resizableColumns,\n onColumnWidthsChange,\n variant,\n __internalRootRef,\n totalItemsCount,\n firstIndex,\n renderAriaLive,\n stickyColumns,\n columnDisplay,\n enableKeyboardNavigation,\n expandableRows,\n __funnelSubStepProps,\n ...rest\n }: InternalTableProps<T>,\n ref: React.Ref<TableProps.Ref>\n ) => {\n // Keyboard navigation defaults to `true` for tables with expandable rows.\n if (expandableRows && enableKeyboardNavigation === undefined) {\n enableKeyboardNavigation = true;\n }\n\n const baseProps = getBaseProps(rest);\n stickyHeader = stickyHeader && supportsStickyPosition();\n const isMobile = useMobile();\n\n const { isExpandable, allItems, getExpandableItemProps } = useExpandableTableProps({\n items,\n expandableRows,\n trackBy,\n ariaLabels,\n });\n\n const [containerWidth, wrapperMeasureRef] = useContainerQuery<number>(rect => rect.contentBoxWidth);\n const wrapperMeasureRefObject = useRef(null);\n const wrapperMeasureMergedRef = useMergeRefs(wrapperMeasureRef, wrapperMeasureRefObject);\n\n const [tableWidth, tableMeasureRef] = useContainerQuery<number>(rect => rect.contentBoxWidth);\n const tableRefObject = useRef(null);\n\n const secondaryWrapperRef = React.useRef<HTMLDivElement>(null);\n const theadRef = useRef<HTMLTableRowElement>(null);\n const stickyHeaderRef = React.useRef<StickyHeaderRef>(null);\n const scrollbarRef = React.useRef<HTMLDivElement>(null);\n const { cancelEdit, ...cellEditing } = useCellEditing({ onCancel: onEditCancel, onSubmit: submitEdit });\n\n usePerformanceMarks(\n 'table',\n true,\n tableRefObject,\n () => {\n const headerText =\n toolsHeaderWrapper.current?.querySelector<HTMLElement>(`.${headerStyles['heading-text']}`)?.innerText ??\n toolsHeaderWrapper.current?.innerText;\n\n return {\n loading: loading ?? false,\n header: headerText,\n };\n },\n [loading]\n );\n\n useImperativeHandle(\n ref,\n () => ({\n scrollToTop: stickyHeaderRef.current?.scrollToTop || (() => undefined),\n cancelEdit,\n }),\n [cancelEdit]\n );\n\n const wrapperRefObject = useRef(null);\n const handleScroll = useScrollSync([wrapperRefObject, scrollbarRef, secondaryWrapperRef]);\n\n const { moveFocusDown, moveFocusUp, moveFocus } = useSelectionFocusMove(selectionType, allItems.length);\n const { onRowClickHandler, onRowContextMenuHandler } = useRowEvents({ onRowClick, onRowContextMenu });\n\n const visibleColumnDefinitions = getVisibleColumnDefinitions({\n columnDefinitions,\n columnDisplay,\n visibleColumns,\n });\n\n const { isItemSelected, getSelectAllProps, getItemSelectionProps, updateShiftToggle } = useSelection({\n items: allItems,\n trackBy,\n selectedItems,\n selectionType,\n isItemDisabled,\n onSelectionChange,\n ariaLabels,\n loading,\n });\n\n if (isDevelopment) {\n if (resizableColumns) {\n checkColumnWidths(columnDefinitions);\n }\n if (sortingColumn?.sortingComparator) {\n checkSortingState(columnDefinitions, sortingColumn.sortingComparator);\n }\n }\n\n const isVisualRefresh = useVisualRefresh();\n const computedVariant = isVisualRefresh\n ? variant\n : ['embedded', 'full-page'].indexOf(variant) > -1\n ? 'container'\n : variant;\n const hasHeader = !!(header || filter || pagination || preferences);\n const hasSelection = !!selectionType;\n const hasFooterPagination = isMobile && variant === 'full-page' && !!pagination;\n const hasFooter = !!footer || hasFooterPagination;\n\n const headerIdRef = useRef<string | undefined>(undefined);\n const isLabelledByHeader = !ariaLabels?.tableLabel && !!header;\n const setHeaderRef = useCallback((id: string) => {\n headerIdRef.current = id;\n }, []);\n\n const visibleColumnWidthsWithSelection: ColumnWidthDefinition[] = [];\n const visibleColumnIdsWithSelection: PropertyKey[] = [];\n if (hasSelection) {\n visibleColumnWidthsWithSelection.push({ id: selectionColumnId, width: SELECTION_COLUMN_WIDTH });\n visibleColumnIdsWithSelection.push(selectionColumnId);\n }\n for (let columnIndex = 0; columnIndex < visibleColumnDefinitions.length; columnIndex++) {\n const columnId = getColumnKey(visibleColumnDefinitions[columnIndex], columnIndex);\n visibleColumnWidthsWithSelection.push({ ...visibleColumnDefinitions[columnIndex], id: columnId });\n visibleColumnIdsWithSelection.push(columnId);\n }\n\n const stickyState = useStickyColumns({\n visibleColumns: visibleColumnIdsWithSelection,\n stickyColumnsFirst: (stickyColumns?.first ?? 0) + (stickyColumns?.first && hasSelection ? 1 : 0),\n stickyColumnsLast: stickyColumns?.last || 0,\n });\n\n const hasStickyColumns = !!((stickyColumns?.first ?? 0) + (stickyColumns?.last ?? 0) > 0);\n const hasEditableCells = !!columnDefinitions.find(col => col.editConfig);\n\n let tableRole: TableRole = 'table';\n if (isExpandable) {\n tableRole = 'treegrid';\n } else if (enableKeyboardNavigation) {\n tableRole = 'grid';\n } else if (hasEditableCells) {\n tableRole = 'grid-default';\n }\n\n const theadProps: TheadProps = {\n selectionType,\n getSelectAllProps,\n columnDefinitions: visibleColumnDefinitions,\n variant: computedVariant,\n wrapLines,\n resizableColumns,\n sortingColumn,\n sortingDisabled,\n sortingDescending,\n onSortingChange,\n onFocusMove: moveFocus,\n onResizeFinish(newWidth) {\n const widthsDetail = columnDefinitions.map(\n (column, index) =>\n newWidth.get(getColumnKey(column, index)) || (column.width as number) || DEFAULT_COLUMN_WIDTH\n );\n const widthsChanged = widthsDetail.some((width, index) => columnDefinitions[index].width !== width);\n if (widthsChanged) {\n fireNonCancelableEvent(onColumnWidthsChange, { widths: widthsDetail });\n }\n },\n singleSelectionHeaderAriaLabel: ariaLabels?.selectionGroupLabel,\n resizerRoleDescription: ariaLabels?.resizerRoleDescription,\n stripedRows,\n stickyState,\n selectionColumnId,\n tableRole,\n isExpandable,\n };\n\n const wrapperRef = useMergeRefs(wrapperRefObject, stickyState.refs.wrapper);\n const tableRef = useMergeRefs(tableMeasureRef, tableRefObject, stickyState.refs.table);\n\n const wrapperProps = getTableWrapperRoleProps({\n tableRole,\n isScrollable: !!(tableWidth && containerWidth && tableWidth > containerWidth),\n ariaLabel: ariaLabels?.tableLabel,\n });\n\n const getMouseDownTarget = useMouseDownTarget();\n\n const hasDynamicHeight = computedVariant === 'full-page';\n const overlapElement = useDynamicOverlap({ disabled: !hasDynamicHeight });\n useTableFocusNavigation({\n enableKeyboardNavigation,\n selectionType,\n tableRoot: tableRefObject,\n columnDefinitions: visibleColumnDefinitions,\n numRows: allItems?.length,\n });\n const toolsHeaderWrapper = useRef<HTMLDivElement>(null);\n // If is mobile, we take into consideration the AppLayout's mobile bar and we subtract the tools wrapper height so only the table header is sticky\n const toolsHeaderHeight =\n (toolsHeaderWrapper?.current as HTMLDivElement | null)?.getBoundingClientRect().height ?? 0;\n\n const colIndexOffset = selectionType ? 1 : 0;\n const totalColumnsCount = visibleColumnDefinitions.length + colIndexOffset;\n\n return (\n <LinkDefaultVariantContext.Provider value={{ defaultVariant: 'primary' }}>\n <ColumnWidthsProvider\n visibleColumns={visibleColumnWidthsWithSelection}\n resizableColumns={resizableColumns}\n containerRef={wrapperMeasureRefObject}\n >\n <InternalContainer\n {...baseProps}\n __internalRootRef={__internalRootRef}\n className={clsx(baseProps.className, styles.root)}\n __funnelSubStepProps={__funnelSubStepProps}\n header={\n <>\n {hasHeader && (\n <div\n ref={overlapElement}\n className={clsx(hasDynamicHeight && [styles['dark-header'], getContentHeaderClassName()])}\n >\n <div\n ref={toolsHeaderWrapper}\n className={clsx(styles['header-controls'], styles[`variant-${computedVariant}`])}\n >\n <CollectionLabelContext.Provider value={{ assignId: setHeaderRef }}>\n <ToolsHeader\n header={header}\n filter={filter}\n pagination={pagination}\n preferences={preferences}\n />\n </CollectionLabelContext.Provider>\n </div>\n </div>\n )}\n {stickyHeader && (\n <StickyHeader\n ref={stickyHeaderRef}\n variant={computedVariant}\n theadProps={theadProps}\n wrapperRef={wrapperRefObject}\n theadRef={theadRef}\n secondaryWrapperRef={secondaryWrapperRef}\n tableRef={tableRefObject}\n onScroll={handleScroll}\n tableHasHeader={hasHeader}\n contentDensity={contentDensity}\n tableRole={tableRole}\n />\n )}\n </>\n }\n disableHeaderPaddings={true}\n disableContentPaddings={true}\n variant={toContainerVariant(computedVariant)}\n __disableFooterPaddings={true}\n __disableFooterDivider={true}\n __disableStickyMobile={false}\n footer={\n hasFooter ? (\n <div className={clsx(styles['footer-wrapper'], styles[`variant-${computedVariant}`])}>\n <div className={clsx(styles.footer, hasFooterPagination && styles['footer-with-pagination'])}>\n {footer && <span>{footer}</span>}\n {hasFooterPagination && <div className={styles['footer-pagination']}>{pagination}</div>}\n </div>\n </div>\n ) : null\n }\n __stickyHeader={stickyHeader}\n __mobileStickyOffset={toolsHeaderHeight}\n __stickyOffset={stickyHeaderVerticalOffset}\n {...focusMarkers.root}\n >\n <div\n ref={wrapperRef}\n className={clsx(styles.wrapper, styles[`variant-${computedVariant}`], {\n [styles['has-footer']]: hasFooter,\n [styles['has-header']]: hasHeader,\n })}\n style={stickyState.style.wrapper}\n onScroll={handleScroll}\n {...wrapperProps}\n >\n <div className={styles['wrapper-content-measure']} ref={wrapperMeasureMergedRef}></div>\n {!!renderAriaLive && !!firstIndex && (\n <LiveRegion>\n <span>\n {renderAriaLive({ totalItemsCount, firstIndex, lastIndex: firstIndex + items.length - 1 })}\n </span>\n </LiveRegion>\n )}\n <GridNavigationProvider\n keyboardNavigation={!!enableKeyboardNavigation}\n pageSize={GRID_NAVIGATION_PAGE_SIZE}\n getTable={() => tableRefObject.current}\n >\n <table\n ref={tableRef}\n className={clsx(\n styles.table,\n resizableColumns && styles['table-layout-fixed'],\n contentDensity === 'compact' && getVisualContextClassname('compact-table')\n )}\n {...getTableRoleProps({\n tableRole,\n totalItemsCount,\n totalColumnsCount: totalColumnsCount,\n ariaLabel: ariaLabels?.tableLabel,\n ariaLabelledBy: isLabelledByHeader && headerIdRef.current ? headerIdRef.current : undefined,\n })}\n >\n <Thead\n ref={theadRef}\n hidden={stickyHeader}\n onFocusedComponentChange={focusId => stickyHeaderRef.current?.setFocus(focusId)}\n {...theadProps}\n />\n <tbody>\n {loading || allItems.length === 0 ? (\n <tr>\n <NoDataCell\n totalColumnsCount={totalColumnsCount}\n hasFooter={hasFooter}\n loading={loading}\n loadingText={loadingText}\n empty={empty}\n tableRef={tableRefObject}\n containerRef={wrapperMeasureRefObject}\n />\n </tr>\n ) : (\n allItems.map((item, rowIndex) => {\n const isFirstRow = rowIndex === 0;\n const isLastRow = rowIndex === allItems.length - 1;\n const sharedCellProps = {\n isFirstRow,\n isLastRow,\n isVisualRefresh,\n isSelected: hasSelection && isItemSelected(item),\n isPrevSelected: hasSelection && !isFirstRow && isItemSelected(allItems[rowIndex - 1]),\n isNextSelected: hasSelection && !isLastRow && isItemSelected(allItems[rowIndex + 1]),\n isEvenRow: rowIndex % 2 === 0,\n hasFooter,\n stripedRows,\n stickyState,\n tableRole,\n };\n const expandableItemProps = getExpandableItemProps(item);\n return (\n <tr\n key={getItemKey(trackBy, item, rowIndex)}\n className={clsx(styles.row, sharedCellProps.isSelected && styles['row-selected'])}\n onFocus={({ currentTarget }) => {\n // When an element inside table row receives focus we want to adjust the scroll.\n // However, that behaviour is unwanted when the focus is received as result of a click\n // as it causes the click to never reach the target element.\n if (!currentTarget.contains(getMouseDownTarget())) {\n stickyHeaderRef.current?.scrollToRow(currentTarget);\n }\n }}\n {...focusMarkers.item}\n onClick={onRowClickHandler && onRowClickHandler.bind(null, rowIndex, item)}\n onContextMenu={\n onRowContextMenuHandler && onRowContextMenuHandler.bind(null, rowIndex, item)\n }\n {...getTableRowRoleProps({ tableRole, firstIndex, rowIndex, ...expandableItemProps })}\n >\n {hasSelection && (\n <TableTdElement\n {...sharedCellProps}\n className={clsx(styles['selection-control'])}\n wrapLines={false}\n hasSelection={true}\n columnId={selectionColumnId}\n colIndex={0}\n >\n <SelectionControl\n onFocusDown={moveFocusDown}\n onFocusUp={moveFocusUp}\n onShiftToggle={updateShiftToggle}\n {...getItemSelectionProps(item)}\n />\n </TableTdElement>\n )}\n\n {visibleColumnDefinitions.map((column, colIndex) => {\n const isEditing = cellEditing.checkEditing({ rowIndex, colIndex });\n const successfulEdit = cellEditing.checkLastSuccessfulEdit({ rowIndex, colIndex });\n const isEditable = !!column.editConfig && !cellEditing.isLoading;\n const expandableCellProps =\n isExpandable && colIndex === 0 ? expandableItemProps : undefined;\n return (\n <TableBodyCell\n key={getColumnKey(column, colIndex)}\n {...sharedCellProps}\n style={\n resizableColumns\n ? {}\n : {\n width: column.width,\n minWidth: column.minWidth,\n maxWidth: column.maxWidth,\n }\n }\n ariaLabels={ariaLabels}\n column={column}\n item={item}\n wrapLines={wrapLines}\n isEditable={isEditable}\n isEditing={isEditing}\n isRowHeader={column.isRowHeader}\n successfulEdit={successfulEdit}\n onEditStart={() => cellEditing.startEdit({ rowIndex, colIndex })}\n onEditEnd={editCancelled =>\n cellEditing.completeEdit({ rowIndex, colIndex }, editCancelled)\n }\n submitEdit={cellEditing.submitEdit}\n columnId={column.id ?? colIndex}\n colIndex={colIndex + colIndexOffset}\n {...expandableCellProps}\n />\n );\n })}\n </tr>\n );\n })\n )}\n </tbody>\n </table>\n </GridNavigationProvider>\n\n {resizableColumns && <ResizeTracker />}\n </div>\n\n <StickyScrollbar\n ref={scrollbarRef}\n wrapperRef={wrapperRefObject}\n tableRef={tableRefObject}\n onScroll={handleScroll}\n hasStickyColumns={hasStickyColumns}\n />\n </InternalContainer>\n </ColumnWidthsProvider>\n </LinkDefaultVariantContext.Provider>\n );\n }\n) as TableForwardRefType;\n\nexport default InternalTable;\n"]}
@@ -1,8 +1,6 @@
1
1
  import { KeyboardEventHandler } from 'react';
2
2
  import { SelectionProps } from './interfaces';
3
- import { TableRole } from '../table-role';
4
3
  export interface SelectionControlProps extends SelectionProps {
5
- tableRole?: TableRole;
6
4
  onShiftToggle?(shiftPressed: boolean): void;
7
5
  onFocusUp?: KeyboardEventHandler;
8
6
  onFocusDown?: KeyboardEventHandler;
@@ -10,5 +8,5 @@ export interface SelectionControlProps extends SelectionProps {
10
8
  tabIndex?: -1;
11
9
  focusedComponent?: null | string;
12
10
  }
13
- export declare function SelectionControl({ tableRole, selectionType, indeterminate, onShiftToggle, onFocusUp, onFocusDown, name, ariaLabel, focusedComponent, ...sharedProps }: SelectionControlProps): JSX.Element;
11
+ export declare function SelectionControl({ selectionType, indeterminate, onShiftToggle, onFocusUp, onFocusDown, name, ariaLabel, focusedComponent, ...sharedProps }: SelectionControlProps): JSX.Element;
14
12
  //# sourceMappingURL=selection-control.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"selection-control.d.ts","sourceRoot":"","sources":["../../../../src/table/selection/selection-control.tsx"],"names":[],"mappings":"AAGA,OAAc,EAAiB,oBAAoB,EAAc,MAAM,OAAO,CAAC;AAO/E,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE1C,MAAM,WAAW,qBAAsB,SAAQ,cAAc;IAC3D,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,aAAa,CAAC,CAAC,YAAY,EAAE,OAAO,GAAG,IAAI,CAAC;IAC5C,SAAS,CAAC,EAAE,oBAAoB,CAAC;IACjC,WAAW,CAAC,EAAE,oBAAoB,CAAC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;IACd,gBAAgB,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC;CAClC;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,SAAS,EACT,aAAa,EACb,aAAqB,EACrB,aAAa,EACb,SAAS,EACT,WAAW,EACX,IAAI,EACJ,SAAS,EACT,gBAAgB,EAChB,GAAG,WAAW,EACf,EAAE,qBAAqB,eA2EvB"}
1
+ {"version":3,"file":"selection-control.d.ts","sourceRoot":"","sources":["../../../../src/table/selection/selection-control.tsx"],"names":[],"mappings":"AAGA,OAAc,EAAiB,oBAAoB,EAA0B,MAAM,OAAO,CAAC;AAO3F,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAG9C,MAAM,WAAW,qBAAsB,SAAQ,cAAc;IAC3D,aAAa,CAAC,CAAC,YAAY,EAAE,OAAO,GAAG,IAAI,CAAC;IAC5C,SAAS,CAAC,EAAE,oBAAoB,CAAC;IACjC,WAAW,CAAC,EAAE,oBAAoB,CAAC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;IACd,gBAAgB,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC;CAClC;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,aAAa,EACb,aAAqB,EACrB,aAAa,EACb,SAAS,EACT,WAAW,EACX,IAAI,EACJ,SAAS,EACT,gBAAgB,EAChB,GAAG,WAAW,EACf,EAAE,qBAAqB,eA4EvB"}
@@ -2,16 +2,18 @@ import { __rest } from "tslib";
2
2
  // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3
3
  // SPDX-License-Identifier: Apache-2.0
4
4
  import clsx from 'clsx';
5
- import React from 'react';
5
+ import React, { useContext } from 'react';
6
6
  import { KeyCode } from '../../internal/keycode';
7
7
  import { useUniqueId } from '../../internal/hooks/use-unique-id';
8
8
  import InternalCheckbox from '../../checkbox/internal';
9
9
  import RadioButton from '../../radio-group/radio-button';
10
10
  import styles from './styles.css.js';
11
+ import { SingleTabStopNavigationContext } from '../../internal/context/single-tab-stop-navigation-context';
11
12
  export function SelectionControl(_a) {
12
- var { tableRole, selectionType, indeterminate = false, onShiftToggle, onFocusUp, onFocusDown, name, ariaLabel, focusedComponent } = _a, sharedProps = __rest(_a, ["tableRole", "selectionType", "indeterminate", "onShiftToggle", "onFocusUp", "onFocusDown", "name", "ariaLabel", "focusedComponent"]);
13
+ var { selectionType, indeterminate = false, onShiftToggle, onFocusUp, onFocusDown, name, ariaLabel, focusedComponent } = _a, sharedProps = __rest(_a, ["selectionType", "indeterminate", "onShiftToggle", "onFocusUp", "onFocusDown", "name", "ariaLabel", "focusedComponent"]);
13
14
  const controlId = useUniqueId();
14
15
  const isMultiSelection = selectionType === 'multi';
16
+ const { navigationActive } = useContext(SingleTabStopNavigationContext);
15
17
  const setShiftState = (event) => {
16
18
  if (isMultiSelection) {
17
19
  onShiftToggle && onShiftToggle(event.shiftKey);
@@ -29,7 +31,7 @@ export function SelectionControl(_a) {
29
31
  // native checkboxes do not have focus move via keyboard, we implement it here programmatically
30
32
  const handleKeyDown = (event) => {
31
33
  setShiftState(event);
32
- if (isMultiSelection && tableRole !== 'grid') {
34
+ if (isMultiSelection && !navigationActive) {
33
35
  if (event.keyCode === KeyCode.up) {
34
36
  event.preventDefault();
35
37
  onFocusUp && onFocusUp(event);
@@ -1 +1 @@
1
- {"version":3,"file":"selection-control.js","sourceRoot":"","sources":["../../../../src/table/selection/selection-control.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 React, { KeyboardEvent, KeyboardEventHandler, MouseEvent } from 'react';\nimport { KeyCode } from '../../internal/keycode';\nimport { useUniqueId } from '../../internal/hooks/use-unique-id';\nimport InternalCheckbox from '../../checkbox/internal';\nimport RadioButton from '../../radio-group/radio-button';\n\nimport styles from './styles.css.js';\nimport { SelectionProps } from './interfaces';\nimport { TableRole } from '../table-role';\n\nexport interface SelectionControlProps extends SelectionProps {\n tableRole?: TableRole;\n onShiftToggle?(shiftPressed: boolean): void;\n onFocusUp?: KeyboardEventHandler;\n onFocusDown?: KeyboardEventHandler;\n ariaLabel?: string;\n tabIndex?: -1;\n focusedComponent?: null | string;\n}\n\nexport function SelectionControl({\n tableRole,\n selectionType,\n indeterminate = false,\n onShiftToggle,\n onFocusUp,\n onFocusDown,\n name,\n ariaLabel,\n focusedComponent,\n ...sharedProps\n}: SelectionControlProps) {\n const controlId = useUniqueId();\n const isMultiSelection = selectionType === 'multi';\n\n const setShiftState = (event: KeyboardEvent | MouseEvent) => {\n if (isMultiSelection) {\n onShiftToggle && onShiftToggle(event.shiftKey);\n }\n };\n\n const onMouseDownHandler = (event: MouseEvent) => {\n setShiftState(event);\n if (isMultiSelection) {\n // To overcome an issue\n // If you shift+click or ctrl+click on a label for a checkbox, checkbox is not checked.\n // https://bugzilla.mozilla.org/show_bug.cgi?id=559506\n event.preventDefault();\n }\n };\n\n // native checkboxes do not have focus move via keyboard, we implement it here programmatically\n const handleKeyDown = (event: KeyboardEvent) => {\n setShiftState(event);\n if (isMultiSelection && tableRole !== 'grid') {\n if (event.keyCode === KeyCode.up) {\n event.preventDefault();\n onFocusUp && onFocusUp(event);\n }\n if (event.keyCode === KeyCode.down) {\n event.preventDefault();\n onFocusDown && onFocusDown(event);\n }\n }\n };\n\n const handleClick = (event: MouseEvent) => {\n const target = event.currentTarget;\n const nativeInput = (target.tagName === 'INPUT' ? target : target.querySelector('input')) as HTMLInputElement;\n // Clicking on input, does not focus it on Firefox (AWSUI-11345)\n nativeInput?.focus();\n };\n\n const selector = isMultiSelection ? (\n <InternalCheckbox\n {...sharedProps}\n showOutline={focusedComponent === 'selection-control'}\n controlId={controlId}\n data-focus-id=\"selection-control\"\n indeterminate={indeterminate}\n />\n ) : (\n <RadioButton {...sharedProps} controlId={controlId} name={name} value={''} label={''} />\n );\n\n return (\n <>\n <label\n onKeyDown={handleKeyDown}\n onKeyUp={setShiftState}\n onMouseDown={onMouseDownHandler}\n onMouseUp={setShiftState}\n onClick={handleClick}\n htmlFor={controlId}\n className={clsx(styles.label, styles.root)}\n aria-label={ariaLabel}\n title={ariaLabel}\n >\n {selector}\n </label>\n {/* HACK: IE11 collapses td's height to 0, if it contains only an absolutely positioned label */}\n <span className={clsx(styles.stud)} aria-hidden={true}>\n &nbsp;\n </span>\n </>\n );\n}\n"]}
1
+ {"version":3,"file":"selection-control.js","sourceRoot":"","sources":["../../../../src/table/selection/selection-control.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 React, { KeyboardEvent, KeyboardEventHandler, MouseEvent, useContext } from 'react';\nimport { KeyCode } from '../../internal/keycode';\nimport { useUniqueId } from '../../internal/hooks/use-unique-id';\nimport InternalCheckbox from '../../checkbox/internal';\nimport RadioButton from '../../radio-group/radio-button';\n\nimport styles from './styles.css.js';\nimport { SelectionProps } from './interfaces';\nimport { SingleTabStopNavigationContext } from '../../internal/context/single-tab-stop-navigation-context';\n\nexport interface SelectionControlProps extends SelectionProps {\n onShiftToggle?(shiftPressed: boolean): void;\n onFocusUp?: KeyboardEventHandler;\n onFocusDown?: KeyboardEventHandler;\n ariaLabel?: string;\n tabIndex?: -1;\n focusedComponent?: null | string;\n}\n\nexport function SelectionControl({\n selectionType,\n indeterminate = false,\n onShiftToggle,\n onFocusUp,\n onFocusDown,\n name,\n ariaLabel,\n focusedComponent,\n ...sharedProps\n}: SelectionControlProps) {\n const controlId = useUniqueId();\n const isMultiSelection = selectionType === 'multi';\n const { navigationActive } = useContext(SingleTabStopNavigationContext);\n\n const setShiftState = (event: KeyboardEvent | MouseEvent) => {\n if (isMultiSelection) {\n onShiftToggle && onShiftToggle(event.shiftKey);\n }\n };\n\n const onMouseDownHandler = (event: MouseEvent) => {\n setShiftState(event);\n if (isMultiSelection) {\n // To overcome an issue\n // If you shift+click or ctrl+click on a label for a checkbox, checkbox is not checked.\n // https://bugzilla.mozilla.org/show_bug.cgi?id=559506\n event.preventDefault();\n }\n };\n\n // native checkboxes do not have focus move via keyboard, we implement it here programmatically\n const handleKeyDown = (event: KeyboardEvent) => {\n setShiftState(event);\n if (isMultiSelection && !navigationActive) {\n if (event.keyCode === KeyCode.up) {\n event.preventDefault();\n onFocusUp && onFocusUp(event);\n }\n if (event.keyCode === KeyCode.down) {\n event.preventDefault();\n onFocusDown && onFocusDown(event);\n }\n }\n };\n\n const handleClick = (event: MouseEvent) => {\n const target = event.currentTarget;\n const nativeInput = (target.tagName === 'INPUT' ? target : target.querySelector('input')) as HTMLInputElement;\n // Clicking on input, does not focus it on Firefox (AWSUI-11345)\n nativeInput?.focus();\n };\n\n const selector = isMultiSelection ? (\n <InternalCheckbox\n {...sharedProps}\n showOutline={focusedComponent === 'selection-control'}\n controlId={controlId}\n data-focus-id=\"selection-control\"\n indeterminate={indeterminate}\n />\n ) : (\n <RadioButton {...sharedProps} controlId={controlId} name={name} value={''} label={''} />\n );\n\n return (\n <>\n <label\n onKeyDown={handleKeyDown}\n onKeyUp={setShiftState}\n onMouseDown={onMouseDownHandler}\n onMouseUp={setShiftState}\n onClick={handleClick}\n htmlFor={controlId}\n className={clsx(styles.label, styles.root)}\n aria-label={ariaLabel}\n title={ariaLabel}\n >\n {selector}\n </label>\n {/* HACK: IE11 collapses td's height to 0, if it contains only an absolutely positioned label */}\n <span className={clsx(styles.stud)} aria-hidden={true}>\n &nbsp;\n </span>\n </>\n );\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"grid-navigation.d.ts","sourceRoot":"","sources":["../../../../src/table/table-role/grid-navigation.tsx"],"names":[],"mappings":";AAYA,OAAO,EAAe,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAUhE;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,EAAE,kBAAkB,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,mBAAmB,eAoC/G"}
1
+ {"version":3,"file":"grid-navigation.d.ts","sourceRoot":"","sources":["../../../../src/table/table-role/grid-navigation.tsx"],"names":[],"mappings":";AAaA,OAAO,EAAe,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAUhE;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,EAAE,kBAAkB,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,mBAAmB,eAoC/G"}
@@ -2,7 +2,7 @@
2
2
  // SPDX-License-Identifier: Apache-2.0
3
3
  import React from 'react';
4
4
  import { useEffect, useMemo } from 'react';
5
- import { defaultIsSuppressed, findTableRowByAriaRowIndex, findTableRowCellByAriaColIndex, getClosestCell, isElementDisabled, } from './utils';
5
+ import { defaultIsSuppressed, findTableRowByAriaRowIndex, findTableRowCellByAriaColIndex, getClosestCell, isElementDisabled, isTableCell, } from './utils';
6
6
  import { KeyCode } from '../../internal/keycode';
7
7
  import { useStableCallback } from '@cloudscape-design/component-toolkit/internal';
8
8
  import { nodeBelongs } from '../../internal/utils/node-belongs';
@@ -57,7 +57,7 @@ class GridNavigationProcessor {
57
57
  this.focusablesState = new WeakMap();
58
58
  this.focusTarget = null;
59
59
  this.registerFocusable = (focusableElement, changeHandler) => {
60
- var _a, _b, _c;
60
+ var _a, _b;
61
61
  this.focusables.add(focusableElement);
62
62
  this.focusHandlers.set(focusableElement, changeHandler);
63
63
  const isFocusable = (_a = this.focusablesState.get(focusableElement)) !== null && _a !== void 0 ? _a : false;
@@ -67,7 +67,8 @@ class GridNavigationProcessor {
67
67
  changeHandler(newIsFocusable);
68
68
  }
69
69
  // When newly registered element belongs to the focused cell the focus must transition to it.
70
- if (((_b = this.focusedCell) === null || _b === void 0 ? void 0 : _b.element.tagName) === 'TD' && ((_c = this.focusedCell) === null || _c === void 0 ? void 0 : _c.element.contains(focusableElement))) {
70
+ const focusedElement = (_b = this.focusedCell) === null || _b === void 0 ? void 0 : _b.element;
71
+ if (focusedElement && isTableCell(focusedElement) && focusedElement.contains(focusableElement)) {
71
72
  // Scroll is unnecessary when moving focus from a cell to element within the cell.
72
73
  focusableElement.focus({ preventScroll: true });
73
74
  }
@@ -89,7 +90,7 @@ class GridNavigationProcessor {
89
90
  // Focusing on cell is not eligible when it contains focusable elements in the content.
90
91
  // If content focusables are available - move the focus to the first one.
91
92
  const focusedElement = this.focusedCell.element;
92
- const nextTarget = focusedElement.tagName === 'TD' ? this.getFocusablesFrom(focusedElement)[0] : null;
93
+ const nextTarget = isTableCell(focusedElement) ? this.getFocusablesFrom(focusedElement)[0] : null;
93
94
  if (nextTarget) {
94
95
  // Scroll is unnecessary when moving focus from a cell to element within the cell.
95
96
  nextTarget.focus({ preventScroll: true });
@@ -1 +1 @@
1
- {"version":3,"file":"grid-navigation.js","sourceRoot":"","sources":["../../../../src/table/table-role/grid-navigation.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\n\nimport React from 'react';\nimport { useEffect, useMemo } from 'react';\nimport {\n defaultIsSuppressed,\n findTableRowByAriaRowIndex,\n findTableRowCellByAriaColIndex,\n getClosestCell,\n isElementDisabled,\n} from './utils';\nimport { FocusedCell, GridNavigationProps } from './interfaces';\nimport { KeyCode } from '../../internal/keycode';\nimport { useStableCallback } from '@cloudscape-design/component-toolkit/internal';\nimport { nodeBelongs } from '../../internal/utils/node-belongs';\nimport { getAllFocusables } from '../../internal/components/focus-lock/utils';\nimport {\n SingleTabStopNavigationContext,\n FocusableChangeHandler,\n} from '../../internal/context/single-tab-stop-navigation-context';\n\n/**\n * Makes table navigable with keyboard commands.\n * See grid-navigation.md\n */\nexport function GridNavigationProvider({ keyboardNavigation, pageSize, getTable, children }: GridNavigationProps) {\n const gridNavigation = useMemo(() => new GridNavigationProcessor(), []);\n\n const getTableStable = useStableCallback(getTable);\n\n // Initialize the processor with the table container assuming it is mounted synchronously and only once.\n useEffect(() => {\n if (keyboardNavigation) {\n const table = getTableStable();\n table && gridNavigation.init(table);\n }\n return () => gridNavigation.cleanup();\n }, [keyboardNavigation, gridNavigation, getTableStable]);\n\n // Notify the processor of the props change.\n useEffect(() => {\n gridNavigation.update({ pageSize });\n }, [gridNavigation, pageSize]);\n\n // Notify the processor of the new render.\n useEffect(() => {\n if (keyboardNavigation) {\n gridNavigation.refresh();\n }\n });\n\n return (\n <SingleTabStopNavigationContext.Provider\n value={{\n navigationActive: keyboardNavigation,\n registerFocusable: gridNavigation.registerFocusable,\n }}\n >\n {children}\n </SingleTabStopNavigationContext.Provider>\n );\n}\n\n/**\n * This helper encapsulates the grid navigation behaviors which are:\n * 1. Responding to keyboard commands and moving the focus accordingly;\n * 2. Muting table interactive elements for only one to be user-focusable at a time;\n * 3. Suppressing the above behaviors when focusing an element inside a dialog or when instructed explicitly.\n */\nclass GridNavigationProcessor {\n // Props\n private _pageSize = 0;\n private _table: null | HTMLTableElement = null;\n\n // State\n private focusedCell: null | FocusedCell = null;\n private keepUserIndex = false;\n private focusables = new Set<Element>();\n private focusHandlers = new Map<Element, FocusableChangeHandler>();\n private focusablesState = new WeakMap<Element, boolean>();\n private focusTarget: null | Element = null;\n\n public init(table: HTMLTableElement) {\n this._table = table;\n\n this.table.addEventListener('focusin', this.onFocusin);\n this.table.addEventListener('focusout', this.onFocusout);\n this.table.addEventListener('keydown', this.onKeydown);\n\n this.updateFocusTarget();\n\n this.cleanup = () => {\n this.table.removeEventListener('focusin', this.onFocusin);\n this.table.removeEventListener('focusout', this.onFocusout);\n this.table.removeEventListener('keydown', this.onKeydown);\n this.focusables.forEach(this.unregisterFocusable);\n };\n }\n\n public cleanup() {\n // Do nothing before initialized.\n }\n\n public update({ pageSize }: { pageSize: number }) {\n this._pageSize = pageSize;\n }\n\n public refresh() {\n // Timeout ensures the newly rendered content elements are registered.\n setTimeout(() => {\n if (this._table) {\n // Update focused cell indices in case table rows, columns, or firstIndex change.\n this.updateFocusedCell(this.focusedCell?.element);\n this.updateFocusTarget();\n }\n }, 0);\n }\n\n public registerFocusable = (focusableElement: HTMLElement, changeHandler: FocusableChangeHandler) => {\n this.focusables.add(focusableElement);\n this.focusHandlers.set(focusableElement, changeHandler);\n const isFocusable = this.focusablesState.get(focusableElement) ?? false;\n const newIsFocusable = this.focusTarget === focusableElement || this.isSuppressed(focusableElement);\n if (newIsFocusable !== isFocusable) {\n this.focusablesState.set(focusableElement, newIsFocusable);\n changeHandler(newIsFocusable);\n }\n // When newly registered element belongs to the focused cell the focus must transition to it.\n if (this.focusedCell?.element.tagName === 'TD' && this.focusedCell?.element.contains(focusableElement)) {\n // Scroll is unnecessary when moving focus from a cell to element within the cell.\n focusableElement.focus({ preventScroll: true });\n }\n return () => this.unregisterFocusable(focusableElement);\n };\n\n public unregisterFocusable = (focusable: Element) => {\n this.focusables.delete(focusable);\n this.focusHandlers.delete(focusable);\n };\n\n private get pageSize() {\n return this._pageSize;\n }\n\n private get table(): HTMLTableElement {\n if (!this._table) {\n throw new Error('Invariant violation: GridNavigationProcessor is used before initialization.');\n }\n return this._table;\n }\n\n private onFocusin = (event: FocusEvent) => {\n if (!(event.target instanceof HTMLElement)) {\n return;\n }\n\n this.updateFocusedCell(event.target);\n if (!this.focusedCell) {\n return;\n }\n\n this.updateFocusTarget();\n\n // Focusing on cell is not eligible when it contains focusable elements in the content.\n // If content focusables are available - move the focus to the first one.\n const focusedElement = this.focusedCell.element;\n const nextTarget = focusedElement.tagName === 'TD' ? this.getFocusablesFrom(focusedElement)[0] : null;\n if (nextTarget) {\n // Scroll is unnecessary when moving focus from a cell to element within the cell.\n nextTarget.focus({ preventScroll: true });\n } else {\n this.keepUserIndex = false;\n }\n };\n\n private onFocusout = () => {\n // When focus leaves the cell and the cell no longer belong to the table it indicates the focused element has been unmounted.\n // In that case the focus needs to be restored on the same coordinates.\n setTimeout(() => {\n if (this.focusedCell && !nodeBelongs(this.table, this.focusedCell.element)) {\n this.moveFocusBy(this.focusedCell, { x: 0, y: 0 });\n }\n }, 0);\n };\n\n private onKeydown = (event: KeyboardEvent) => {\n if (!this.focusedCell) {\n return;\n }\n\n const ctrlKey = event.ctrlKey ? 1 : 0;\n const altKey = event.altKey ? 1 : 0;\n const shiftKey = event.shiftKey ? 1 : 0;\n const metaKey = event.metaKey ? 1 : 0;\n const numModifiersPressed = ctrlKey + altKey + shiftKey + metaKey;\n\n let key = event.keyCode;\n if (numModifiersPressed === 1 && event.ctrlKey) {\n key = -key;\n } else if (numModifiersPressed) {\n return;\n }\n\n const from = this.focusedCell;\n\n if (this.isSuppressed(document.activeElement) || !this.isRegistered(document.activeElement)) {\n return;\n }\n\n switch (key) {\n case KeyCode.up:\n event.preventDefault();\n return this.moveFocusBy(from, { y: -1, x: 0 });\n\n case KeyCode.down:\n event.preventDefault();\n return this.moveFocusBy(from, { y: 1, x: 0 });\n\n case KeyCode.left:\n event.preventDefault();\n return this.moveFocusBy(from, { y: 0, x: -1 });\n\n case KeyCode.right:\n event.preventDefault();\n return this.moveFocusBy(from, { y: 0, x: 1 });\n\n case KeyCode.pageUp:\n event.preventDefault();\n return this.moveFocusBy(from, { y: -this.pageSize, x: 0 });\n\n case KeyCode.pageDown:\n event.preventDefault();\n return this.moveFocusBy(from, { y: this.pageSize, x: 0 });\n\n case KeyCode.home:\n event.preventDefault();\n return this.moveFocusBy(from, { y: 0, x: -Infinity });\n\n case KeyCode.end:\n event.preventDefault();\n return this.moveFocusBy(from, { y: 0, x: Infinity });\n\n case -KeyCode.home:\n event.preventDefault();\n return this.moveFocusBy(from, { y: -Infinity, x: -Infinity });\n\n case -KeyCode.end:\n event.preventDefault();\n return this.moveFocusBy(from, { y: Infinity, x: Infinity });\n\n default:\n return;\n }\n };\n\n private moveFocusBy(cell: FocusedCell, delta: { x: number; y: number }) {\n // For vertical moves preserve column- and element indices set by user.\n // It allows keeping indices while moving over disabled actions or cells with colspan > 1.\n if (delta.y !== 0 && delta.x === 0) {\n this.keepUserIndex = true;\n }\n this.getNextFocusable(cell, delta)?.focus();\n }\n\n private updateFocusTarget() {\n this.focusTarget = this.getSingleFocusable();\n for (const focusableElement of this.focusables) {\n const isFocusable = this.focusablesState.get(focusableElement) ?? false;\n const newIsFocusable = this.focusTarget === focusableElement || this.isSuppressed(focusableElement);\n if (newIsFocusable !== isFocusable) {\n this.focusablesState.set(focusableElement, newIsFocusable);\n this.focusHandlers.get(focusableElement)!(newIsFocusable);\n }\n }\n }\n\n private isSuppressed(element: null | Element) {\n // Omit calculation as irrelevant until the table receives focus.\n if (!this.focusedCell) {\n return false;\n }\n return !element || defaultIsSuppressed(element);\n }\n\n private isRegistered(element: null | Element) {\n return !element || this.focusables.has(element);\n }\n\n private updateFocusedCell(focusedElement?: HTMLElement): void {\n if (!focusedElement) {\n return;\n }\n\n const cellElement = getClosestCell(focusedElement);\n const rowElement = cellElement?.closest('tr');\n if (!cellElement || !rowElement) {\n return;\n }\n\n const colIndex = parseInt(cellElement.getAttribute('aria-colindex') ?? '');\n const rowIndex = parseInt(rowElement.getAttribute('aria-rowindex') ?? '');\n if (isNaN(colIndex) || isNaN(rowIndex)) {\n return;\n }\n\n const cellFocusables = this.getFocusablesFrom(cellElement);\n const elementIndex = cellFocusables.indexOf(focusedElement);\n\n const prevColIndex = this.focusedCell?.colIndex ?? -1;\n const prevElementIndex = this.focusedCell?.elementIndex ?? -1;\n this.focusedCell = {\n rowIndex,\n colIndex: this.keepUserIndex && prevColIndex !== -1 ? prevColIndex : colIndex,\n elementIndex: this.keepUserIndex && prevElementIndex !== -1 ? prevElementIndex : elementIndex,\n element: focusedElement,\n };\n }\n\n private getNextFocusable(from: FocusedCell, delta: { y: number; x: number }) {\n // Find next row to move focus into (can be null if the top/bottom is reached).\n const targetAriaRowIndex = from.rowIndex + delta.y;\n const targetRow = findTableRowByAriaRowIndex(this.table, targetAriaRowIndex, delta.y);\n if (!targetRow) {\n return null;\n }\n\n // Return next interactive cell content element if available.\n const cellElement = getClosestCell(from.element);\n const cellFocusables = cellElement ? this.getFocusablesFrom(cellElement) : [];\n const nextElementIndex = from.elementIndex + delta.x;\n const isValidDirection = !!delta.x;\n const isValidIndex = from.elementIndex !== -1 && 0 <= nextElementIndex && nextElementIndex < cellFocusables.length;\n const isTargetDifferent = from.element !== cellFocusables[nextElementIndex];\n if (isValidDirection && isValidIndex && isTargetDifferent) {\n return cellFocusables[nextElementIndex];\n }\n\n // Find next cell to focus or move focus into (can be null if the left/right edge is reached).\n const targetAriaColIndex = from.colIndex + delta.x;\n const targetCell = findTableRowCellByAriaColIndex(targetRow, targetAriaColIndex, delta.x);\n if (!targetCell) {\n return null;\n }\n\n // When target cell matches the current cell it means we reached the left or right boundary.\n if (targetCell === cellElement && delta.x !== 0) {\n return null;\n }\n\n const targetCellFocusables = this.getFocusablesFrom(targetCell);\n\n // When delta.x = 0 keep element index if possible.\n let focusIndex = from.elementIndex;\n // Use first element index when moving to the right or to extreme left.\n if ((isFinite(delta.x) && delta.x > 0) || delta.x === -Infinity) {\n focusIndex = 0;\n }\n // Use last element index when moving to the left or to extreme right.\n if ((isFinite(delta.x) && delta.x < 0) || delta.x === Infinity) {\n focusIndex = targetCellFocusables.length - 1;\n }\n\n return targetCellFocusables[focusIndex] ?? targetCell;\n }\n\n private getSingleFocusable() {\n const cell = this.focusedCell;\n const firstTableCell = this.table.querySelector('td,th') as null | HTMLTableCellElement;\n\n // A single element of the table is made user-focusable.\n // It defaults to the first interactive element of the first cell or the first cell itself otherwise.\n let focusTarget: null | HTMLElement =\n (firstTableCell && this.getFocusablesFrom(firstTableCell)[0]) ?? firstTableCell;\n\n // When a navigation-focused element is present in the table it is used for user-navigation instead.\n if (cell) {\n focusTarget = this.getNextFocusable(cell, { x: 0, y: 0 });\n }\n\n return focusTarget;\n }\n\n private getFocusablesFrom(target: HTMLElement) {\n return getAllFocusables(target).filter(el => this.focusables.has(el) && !isElementDisabled(el));\n }\n}\n"]}
1
+ {"version":3,"file":"grid-navigation.js","sourceRoot":"","sources":["../../../../src/table/table-role/grid-navigation.tsx"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,sCAAsC;AAEtC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAC3C,OAAO,EACL,mBAAmB,EACnB,0BAA0B,EAC1B,8BAA8B,EAC9B,cAAc,EACd,iBAAiB,EACjB,WAAW,GACZ,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;AAClF,OAAO,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,4CAA4C,CAAC;AAC9E,OAAO,EACL,8BAA8B,GAE/B,MAAM,2DAA2D,CAAC;AAEnE;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CAAC,EAAE,kBAAkB,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAuB;IAC9G,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,uBAAuB,EAAE,EAAE,EAAE,CAAC,CAAC;IAExE,MAAM,cAAc,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAEnD,wGAAwG;IACxG,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,kBAAkB,EAAE;YACtB,MAAM,KAAK,GAAG,cAAc,EAAE,CAAC;YAC/B,KAAK,IAAI,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SACrC;QACD,OAAO,GAAG,EAAE,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;IACxC,CAAC,EAAE,CAAC,kBAAkB,EAAE,cAAc,EAAE,cAAc,CAAC,CAAC,CAAC;IAEzD,4CAA4C;IAC5C,SAAS,CAAC,GAAG,EAAE;QACb,cAAc,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;IACtC,CAAC,EAAE,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC,CAAC;IAE/B,0CAA0C;IAC1C,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,kBAAkB,EAAE;YACtB,cAAc,CAAC,OAAO,EAAE,CAAC;SAC1B;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,CACL,oBAAC,8BAA8B,CAAC,QAAQ,IACtC,KAAK,EAAE;YACL,gBAAgB,EAAE,kBAAkB;YACpC,iBAAiB,EAAE,cAAc,CAAC,iBAAiB;SACpD,IAEA,QAAQ,CAC+B,CAC3C,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,uBAAuB;IAA7B;QACE,QAAQ;QACA,cAAS,GAAG,CAAC,CAAC;QACd,WAAM,GAA4B,IAAI,CAAC;QAE/C,QAAQ;QACA,gBAAW,GAAuB,IAAI,CAAC;QACvC,kBAAa,GAAG,KAAK,CAAC;QACtB,eAAU,GAAG,IAAI,GAAG,EAAW,CAAC;QAChC,kBAAa,GAAG,IAAI,GAAG,EAAmC,CAAC;QAC3D,oBAAe,GAAG,IAAI,OAAO,EAAoB,CAAC;QAClD,gBAAW,GAAmB,IAAI,CAAC;QAsCpC,sBAAiB,GAAG,CAAC,gBAA6B,EAAE,aAAqC,EAAE,EAAE;;YAClG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;YACtC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,gBAAgB,EAAE,aAAa,CAAC,CAAC;YACxD,MAAM,WAAW,GAAG,MAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,gBAAgB,CAAC,mCAAI,KAAK,CAAC;YACxE,MAAM,cAAc,GAAG,IAAI,CAAC,WAAW,KAAK,gBAAgB,IAAI,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC;YACpG,IAAI,cAAc,KAAK,WAAW,EAAE;gBAClC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,gBAAgB,EAAE,cAAc,CAAC,CAAC;gBAC3D,aAAa,CAAC,cAAc,CAAC,CAAC;aAC/B;YACD,6FAA6F;YAC7F,MAAM,cAAc,GAAG,MAAA,IAAI,CAAC,WAAW,0CAAE,OAAO,CAAC;YACjD,IAAI,cAAc,IAAI,WAAW,CAAC,cAAc,CAAC,IAAI,cAAc,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE;gBAC9F,kFAAkF;gBAClF,gBAAgB,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;aACjD;YACD,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,CAAC;QAC1D,CAAC,CAAC;QAEK,wBAAmB,GAAG,CAAC,SAAkB,EAAE,EAAE;YAClD,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAClC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACvC,CAAC,CAAC;QAaM,cAAS,GAAG,CAAC,KAAiB,EAAE,EAAE;YACxC,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,YAAY,WAAW,CAAC,EAAE;gBAC1C,OAAO;aACR;YAED,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACrC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;gBACrB,OAAO;aACR;YAED,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAEzB,uFAAuF;YACvF,yEAAyE;YACzE,MAAM,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;YAChD,MAAM,UAAU,GAAG,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAClG,IAAI,UAAU,EAAE;gBACd,kFAAkF;gBAClF,UAAU,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;aAC3C;iBAAM;gBACL,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;aAC5B;QACH,CAAC,CAAC;QAEM,eAAU,GAAG,GAAG,EAAE;YACxB,6HAA6H;YAC7H,uEAAuE;YACvE,UAAU,CAAC,GAAG,EAAE;gBACd,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE;oBAC1E,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;iBACpD;YACH,CAAC,EAAE,CAAC,CAAC,CAAC;QACR,CAAC,CAAC;QAEM,cAAS,GAAG,CAAC,KAAoB,EAAE,EAAE;YAC3C,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;gBACrB,OAAO;aACR;YAED,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACtC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACpC,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACxC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACtC,MAAM,mBAAmB,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;YAElE,IAAI,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC;YACxB,IAAI,mBAAmB,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE;gBAC9C,GAAG,GAAG,CAAC,GAAG,CAAC;aACZ;iBAAM,IAAI,mBAAmB,EAAE;gBAC9B,OAAO;aACR;YAED,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC;YAE9B,IAAI,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE;gBAC3F,OAAO;aACR;YAED,QAAQ,GAAG,EAAE;gBACX,KAAK,OAAO,CAAC,EAAE;oBACb,KAAK,CAAC,cAAc,EAAE,CAAC;oBACvB,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;gBAEjD,KAAK,OAAO,CAAC,IAAI;oBACf,KAAK,CAAC,cAAc,EAAE,CAAC;oBACvB,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;gBAEhD,KAAK,OAAO,CAAC,IAAI;oBACf,KAAK,CAAC,cAAc,EAAE,CAAC;oBACvB,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;gBAEjD,KAAK,OAAO,CAAC,KAAK;oBAChB,KAAK,CAAC,cAAc,EAAE,CAAC;oBACvB,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;gBAEhD,KAAK,OAAO,CAAC,MAAM;oBACjB,KAAK,CAAC,cAAc,EAAE,CAAC;oBACvB,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;gBAE7D,KAAK,OAAO,CAAC,QAAQ;oBACnB,KAAK,CAAC,cAAc,EAAE,CAAC;oBACvB,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;gBAE5D,KAAK,OAAO,CAAC,IAAI;oBACf,KAAK,CAAC,cAAc,EAAE,CAAC;oBACvB,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;gBAExD,KAAK,OAAO,CAAC,GAAG;oBACd,KAAK,CAAC,cAAc,EAAE,CAAC;oBACvB,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;gBAEvD,KAAK,CAAC,OAAO,CAAC,IAAI;oBAChB,KAAK,CAAC,cAAc,EAAE,CAAC;oBACvB,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;gBAEhE,KAAK,CAAC,OAAO,CAAC,GAAG;oBACf,KAAK,CAAC,cAAc,EAAE,CAAC;oBACvB,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;gBAE9D;oBACE,OAAO;aACV;QACH,CAAC,CAAC;IAoIJ,CAAC;IAhTQ,IAAI,CAAC,KAAuB;QACjC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QAEpB,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACvD,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QACzD,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAEvD,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEzB,IAAI,CAAC,OAAO,GAAG,GAAG,EAAE;YAClB,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;YAC1D,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YAC5D,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;YAC1D,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACpD,CAAC,CAAC;IACJ,CAAC;IAEM,OAAO;QACZ,iCAAiC;IACnC,CAAC;IAEM,MAAM,CAAC,EAAE,QAAQ,EAAwB;QAC9C,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;IAC5B,CAAC;IAEM,OAAO;QACZ,sEAAsE;QACtE,UAAU,CAAC,GAAG,EAAE;;YACd,IAAI,IAAI,CAAC,MAAM,EAAE;gBACf,iFAAiF;gBACjF,IAAI,CAAC,iBAAiB,CAAC,MAAA,IAAI,CAAC,WAAW,0CAAE,OAAO,CAAC,CAAC;gBAClD,IAAI,CAAC,iBAAiB,EAAE,CAAC;aAC1B;QACH,CAAC,EAAE,CAAC,CAAC,CAAC;IACR,CAAC;IAyBD,IAAY,QAAQ;QAClB,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,IAAY,KAAK;QACf,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAChB,MAAM,IAAI,KAAK,CAAC,6EAA6E,CAAC,CAAC;SAChG;QACD,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IA0GO,WAAW,CAAC,IAAiB,EAAE,KAA+B;;QACpE,uEAAuE;QACvE,0FAA0F;QAC1F,IAAI,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,KAAK,CAAC,EAAE;YAClC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;SAC3B;QACD,MAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,KAAK,CAAC,0CAAE,KAAK,EAAE,CAAC;IAC9C,CAAC;IAEO,iBAAiB;;QACvB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC7C,KAAK,MAAM,gBAAgB,IAAI,IAAI,CAAC,UAAU,EAAE;YAC9C,MAAM,WAAW,GAAG,MAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,gBAAgB,CAAC,mCAAI,KAAK,CAAC;YACxE,MAAM,cAAc,GAAG,IAAI,CAAC,WAAW,KAAK,gBAAgB,IAAI,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC;YACpG,IAAI,cAAc,KAAK,WAAW,EAAE;gBAClC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,gBAAgB,EAAE,cAAc,CAAC,CAAC;gBAC3D,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,gBAAgB,CAAE,CAAC,cAAc,CAAC,CAAC;aAC3D;SACF;IACH,CAAC;IAEO,YAAY,CAAC,OAAuB;QAC1C,iEAAiE;QACjE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YACrB,OAAO,KAAK,CAAC;SACd;QACD,OAAO,CAAC,OAAO,IAAI,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAClD,CAAC;IAEO,YAAY,CAAC,OAAuB;QAC1C,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAClD,CAAC;IAEO,iBAAiB,CAAC,cAA4B;;QACpD,IAAI,CAAC,cAAc,EAAE;YACnB,OAAO;SACR;QAED,MAAM,WAAW,GAAG,cAAc,CAAC,cAAc,CAAC,CAAC;QACnD,MAAM,UAAU,GAAG,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAC9C,IAAI,CAAC,WAAW,IAAI,CAAC,UAAU,EAAE;YAC/B,OAAO;SACR;QAED,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAA,WAAW,CAAC,YAAY,CAAC,eAAe,CAAC,mCAAI,EAAE,CAAC,CAAC;QAC3E,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAA,UAAU,CAAC,YAAY,CAAC,eAAe,CAAC,mCAAI,EAAE,CAAC,CAAC;QAC1E,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,EAAE;YACtC,OAAO;SACR;QAED,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;QAC3D,MAAM,YAAY,GAAG,cAAc,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QAE5D,MAAM,YAAY,GAAG,MAAA,MAAA,IAAI,CAAC,WAAW,0CAAE,QAAQ,mCAAI,CAAC,CAAC,CAAC;QACtD,MAAM,gBAAgB,GAAG,MAAA,MAAA,IAAI,CAAC,WAAW,0CAAE,YAAY,mCAAI,CAAC,CAAC,CAAC;QAC9D,IAAI,CAAC,WAAW,GAAG;YACjB,QAAQ;YACR,QAAQ,EAAE,IAAI,CAAC,aAAa,IAAI,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ;YAC7E,YAAY,EAAE,IAAI,CAAC,aAAa,IAAI,gBAAgB,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,YAAY;YAC7F,OAAO,EAAE,cAAc;SACxB,CAAC;IACJ,CAAC;IAEO,gBAAgB,CAAC,IAAiB,EAAE,KAA+B;;QACzE,+EAA+E;QAC/E,MAAM,kBAAkB,GAAG,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC;QACnD,MAAM,SAAS,GAAG,0BAA0B,CAAC,IAAI,CAAC,KAAK,EAAE,kBAAkB,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;QACtF,IAAI,CAAC,SAAS,EAAE;YACd,OAAO,IAAI,CAAC;SACb;QAED,6DAA6D;QAC7D,MAAM,WAAW,GAAG,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACjD,MAAM,cAAc,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9E,MAAM,gBAAgB,GAAG,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,CAAC,CAAC;QACrD,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QACnC,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,gBAAgB,IAAI,gBAAgB,GAAG,cAAc,CAAC,MAAM,CAAC;QACnH,MAAM,iBAAiB,GAAG,IAAI,CAAC,OAAO,KAAK,cAAc,CAAC,gBAAgB,CAAC,CAAC;QAC5E,IAAI,gBAAgB,IAAI,YAAY,IAAI,iBAAiB,EAAE;YACzD,OAAO,cAAc,CAAC,gBAAgB,CAAC,CAAC;SACzC;QAED,8FAA8F;QAC9F,MAAM,kBAAkB,GAAG,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC;QACnD,MAAM,UAAU,GAAG,8BAA8B,CAAC,SAAS,EAAE,kBAAkB,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;QAC1F,IAAI,CAAC,UAAU,EAAE;YACf,OAAO,IAAI,CAAC;SACb;QAED,4FAA4F;QAC5F,IAAI,UAAU,KAAK,WAAW,IAAI,KAAK,CAAC,CAAC,KAAK,CAAC,EAAE;YAC/C,OAAO,IAAI,CAAC;SACb;QAED,MAAM,oBAAoB,GAAG,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;QAEhE,mDAAmD;QACnD,IAAI,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC;QACnC,uEAAuE;QACvE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE;YAC/D,UAAU,GAAG,CAAC,CAAC;SAChB;QACD,sEAAsE;QACtE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,KAAK,QAAQ,EAAE;YAC9D,UAAU,GAAG,oBAAoB,CAAC,MAAM,GAAG,CAAC,CAAC;SAC9C;QAED,OAAO,MAAA,oBAAoB,CAAC,UAAU,CAAC,mCAAI,UAAU,CAAC;IACxD,CAAC;IAEO,kBAAkB;;QACxB,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC;QAC9B,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,OAAO,CAAgC,CAAC;QAExF,wDAAwD;QACxD,qGAAqG;QACrG,IAAI,WAAW,GACb,MAAA,CAAC,cAAc,IAAI,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,mCAAI,cAAc,CAAC;QAElF,oGAAoG;QACpG,IAAI,IAAI,EAAE;YACR,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;SAC3D;QAED,OAAO,WAAW,CAAC;IACrB,CAAC;IAEO,iBAAiB,CAAC,MAAmB;QAC3C,OAAO,gBAAgB,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC;IAClG,CAAC;CACF","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport React from 'react';\nimport { useEffect, useMemo } from 'react';\nimport {\n defaultIsSuppressed,\n findTableRowByAriaRowIndex,\n findTableRowCellByAriaColIndex,\n getClosestCell,\n isElementDisabled,\n isTableCell,\n} from './utils';\nimport { FocusedCell, GridNavigationProps } from './interfaces';\nimport { KeyCode } from '../../internal/keycode';\nimport { useStableCallback } from '@cloudscape-design/component-toolkit/internal';\nimport { nodeBelongs } from '../../internal/utils/node-belongs';\nimport { getAllFocusables } from '../../internal/components/focus-lock/utils';\nimport {\n SingleTabStopNavigationContext,\n FocusableChangeHandler,\n} from '../../internal/context/single-tab-stop-navigation-context';\n\n/**\n * Makes table navigable with keyboard commands.\n * See grid-navigation.md\n */\nexport function GridNavigationProvider({ keyboardNavigation, pageSize, getTable, children }: GridNavigationProps) {\n const gridNavigation = useMemo(() => new GridNavigationProcessor(), []);\n\n const getTableStable = useStableCallback(getTable);\n\n // Initialize the processor with the table container assuming it is mounted synchronously and only once.\n useEffect(() => {\n if (keyboardNavigation) {\n const table = getTableStable();\n table && gridNavigation.init(table);\n }\n return () => gridNavigation.cleanup();\n }, [keyboardNavigation, gridNavigation, getTableStable]);\n\n // Notify the processor of the props change.\n useEffect(() => {\n gridNavigation.update({ pageSize });\n }, [gridNavigation, pageSize]);\n\n // Notify the processor of the new render.\n useEffect(() => {\n if (keyboardNavigation) {\n gridNavigation.refresh();\n }\n });\n\n return (\n <SingleTabStopNavigationContext.Provider\n value={{\n navigationActive: keyboardNavigation,\n registerFocusable: gridNavigation.registerFocusable,\n }}\n >\n {children}\n </SingleTabStopNavigationContext.Provider>\n );\n}\n\n/**\n * This helper encapsulates the grid navigation behaviors which are:\n * 1. Responding to keyboard commands and moving the focus accordingly;\n * 2. Muting table interactive elements for only one to be user-focusable at a time;\n * 3. Suppressing the above behaviors when focusing an element inside a dialog or when instructed explicitly.\n */\nclass GridNavigationProcessor {\n // Props\n private _pageSize = 0;\n private _table: null | HTMLTableElement = null;\n\n // State\n private focusedCell: null | FocusedCell = null;\n private keepUserIndex = false;\n private focusables = new Set<Element>();\n private focusHandlers = new Map<Element, FocusableChangeHandler>();\n private focusablesState = new WeakMap<Element, boolean>();\n private focusTarget: null | Element = null;\n\n public init(table: HTMLTableElement) {\n this._table = table;\n\n this.table.addEventListener('focusin', this.onFocusin);\n this.table.addEventListener('focusout', this.onFocusout);\n this.table.addEventListener('keydown', this.onKeydown);\n\n this.updateFocusTarget();\n\n this.cleanup = () => {\n this.table.removeEventListener('focusin', this.onFocusin);\n this.table.removeEventListener('focusout', this.onFocusout);\n this.table.removeEventListener('keydown', this.onKeydown);\n this.focusables.forEach(this.unregisterFocusable);\n };\n }\n\n public cleanup() {\n // Do nothing before initialized.\n }\n\n public update({ pageSize }: { pageSize: number }) {\n this._pageSize = pageSize;\n }\n\n public refresh() {\n // Timeout ensures the newly rendered content elements are registered.\n setTimeout(() => {\n if (this._table) {\n // Update focused cell indices in case table rows, columns, or firstIndex change.\n this.updateFocusedCell(this.focusedCell?.element);\n this.updateFocusTarget();\n }\n }, 0);\n }\n\n public registerFocusable = (focusableElement: HTMLElement, changeHandler: FocusableChangeHandler) => {\n this.focusables.add(focusableElement);\n this.focusHandlers.set(focusableElement, changeHandler);\n const isFocusable = this.focusablesState.get(focusableElement) ?? false;\n const newIsFocusable = this.focusTarget === focusableElement || this.isSuppressed(focusableElement);\n if (newIsFocusable !== isFocusable) {\n this.focusablesState.set(focusableElement, newIsFocusable);\n changeHandler(newIsFocusable);\n }\n // When newly registered element belongs to the focused cell the focus must transition to it.\n const focusedElement = this.focusedCell?.element;\n if (focusedElement && isTableCell(focusedElement) && focusedElement.contains(focusableElement)) {\n // Scroll is unnecessary when moving focus from a cell to element within the cell.\n focusableElement.focus({ preventScroll: true });\n }\n return () => this.unregisterFocusable(focusableElement);\n };\n\n public unregisterFocusable = (focusable: Element) => {\n this.focusables.delete(focusable);\n this.focusHandlers.delete(focusable);\n };\n\n private get pageSize() {\n return this._pageSize;\n }\n\n private get table(): HTMLTableElement {\n if (!this._table) {\n throw new Error('Invariant violation: GridNavigationProcessor is used before initialization.');\n }\n return this._table;\n }\n\n private onFocusin = (event: FocusEvent) => {\n if (!(event.target instanceof HTMLElement)) {\n return;\n }\n\n this.updateFocusedCell(event.target);\n if (!this.focusedCell) {\n return;\n }\n\n this.updateFocusTarget();\n\n // Focusing on cell is not eligible when it contains focusable elements in the content.\n // If content focusables are available - move the focus to the first one.\n const focusedElement = this.focusedCell.element;\n const nextTarget = isTableCell(focusedElement) ? this.getFocusablesFrom(focusedElement)[0] : null;\n if (nextTarget) {\n // Scroll is unnecessary when moving focus from a cell to element within the cell.\n nextTarget.focus({ preventScroll: true });\n } else {\n this.keepUserIndex = false;\n }\n };\n\n private onFocusout = () => {\n // When focus leaves the cell and the cell no longer belong to the table it indicates the focused element has been unmounted.\n // In that case the focus needs to be restored on the same coordinates.\n setTimeout(() => {\n if (this.focusedCell && !nodeBelongs(this.table, this.focusedCell.element)) {\n this.moveFocusBy(this.focusedCell, { x: 0, y: 0 });\n }\n }, 0);\n };\n\n private onKeydown = (event: KeyboardEvent) => {\n if (!this.focusedCell) {\n return;\n }\n\n const ctrlKey = event.ctrlKey ? 1 : 0;\n const altKey = event.altKey ? 1 : 0;\n const shiftKey = event.shiftKey ? 1 : 0;\n const metaKey = event.metaKey ? 1 : 0;\n const numModifiersPressed = ctrlKey + altKey + shiftKey + metaKey;\n\n let key = event.keyCode;\n if (numModifiersPressed === 1 && event.ctrlKey) {\n key = -key;\n } else if (numModifiersPressed) {\n return;\n }\n\n const from = this.focusedCell;\n\n if (this.isSuppressed(document.activeElement) || !this.isRegistered(document.activeElement)) {\n return;\n }\n\n switch (key) {\n case KeyCode.up:\n event.preventDefault();\n return this.moveFocusBy(from, { y: -1, x: 0 });\n\n case KeyCode.down:\n event.preventDefault();\n return this.moveFocusBy(from, { y: 1, x: 0 });\n\n case KeyCode.left:\n event.preventDefault();\n return this.moveFocusBy(from, { y: 0, x: -1 });\n\n case KeyCode.right:\n event.preventDefault();\n return this.moveFocusBy(from, { y: 0, x: 1 });\n\n case KeyCode.pageUp:\n event.preventDefault();\n return this.moveFocusBy(from, { y: -this.pageSize, x: 0 });\n\n case KeyCode.pageDown:\n event.preventDefault();\n return this.moveFocusBy(from, { y: this.pageSize, x: 0 });\n\n case KeyCode.home:\n event.preventDefault();\n return this.moveFocusBy(from, { y: 0, x: -Infinity });\n\n case KeyCode.end:\n event.preventDefault();\n return this.moveFocusBy(from, { y: 0, x: Infinity });\n\n case -KeyCode.home:\n event.preventDefault();\n return this.moveFocusBy(from, { y: -Infinity, x: -Infinity });\n\n case -KeyCode.end:\n event.preventDefault();\n return this.moveFocusBy(from, { y: Infinity, x: Infinity });\n\n default:\n return;\n }\n };\n\n private moveFocusBy(cell: FocusedCell, delta: { x: number; y: number }) {\n // For vertical moves preserve column- and element indices set by user.\n // It allows keeping indices while moving over disabled actions or cells with colspan > 1.\n if (delta.y !== 0 && delta.x === 0) {\n this.keepUserIndex = true;\n }\n this.getNextFocusable(cell, delta)?.focus();\n }\n\n private updateFocusTarget() {\n this.focusTarget = this.getSingleFocusable();\n for (const focusableElement of this.focusables) {\n const isFocusable = this.focusablesState.get(focusableElement) ?? false;\n const newIsFocusable = this.focusTarget === focusableElement || this.isSuppressed(focusableElement);\n if (newIsFocusable !== isFocusable) {\n this.focusablesState.set(focusableElement, newIsFocusable);\n this.focusHandlers.get(focusableElement)!(newIsFocusable);\n }\n }\n }\n\n private isSuppressed(element: null | Element) {\n // Omit calculation as irrelevant until the table receives focus.\n if (!this.focusedCell) {\n return false;\n }\n return !element || defaultIsSuppressed(element);\n }\n\n private isRegistered(element: null | Element) {\n return !element || this.focusables.has(element);\n }\n\n private updateFocusedCell(focusedElement?: HTMLElement): void {\n if (!focusedElement) {\n return;\n }\n\n const cellElement = getClosestCell(focusedElement);\n const rowElement = cellElement?.closest('tr');\n if (!cellElement || !rowElement) {\n return;\n }\n\n const colIndex = parseInt(cellElement.getAttribute('aria-colindex') ?? '');\n const rowIndex = parseInt(rowElement.getAttribute('aria-rowindex') ?? '');\n if (isNaN(colIndex) || isNaN(rowIndex)) {\n return;\n }\n\n const cellFocusables = this.getFocusablesFrom(cellElement);\n const elementIndex = cellFocusables.indexOf(focusedElement);\n\n const prevColIndex = this.focusedCell?.colIndex ?? -1;\n const prevElementIndex = this.focusedCell?.elementIndex ?? -1;\n this.focusedCell = {\n rowIndex,\n colIndex: this.keepUserIndex && prevColIndex !== -1 ? prevColIndex : colIndex,\n elementIndex: this.keepUserIndex && prevElementIndex !== -1 ? prevElementIndex : elementIndex,\n element: focusedElement,\n };\n }\n\n private getNextFocusable(from: FocusedCell, delta: { y: number; x: number }) {\n // Find next row to move focus into (can be null if the top/bottom is reached).\n const targetAriaRowIndex = from.rowIndex + delta.y;\n const targetRow = findTableRowByAriaRowIndex(this.table, targetAriaRowIndex, delta.y);\n if (!targetRow) {\n return null;\n }\n\n // Return next interactive cell content element if available.\n const cellElement = getClosestCell(from.element);\n const cellFocusables = cellElement ? this.getFocusablesFrom(cellElement) : [];\n const nextElementIndex = from.elementIndex + delta.x;\n const isValidDirection = !!delta.x;\n const isValidIndex = from.elementIndex !== -1 && 0 <= nextElementIndex && nextElementIndex < cellFocusables.length;\n const isTargetDifferent = from.element !== cellFocusables[nextElementIndex];\n if (isValidDirection && isValidIndex && isTargetDifferent) {\n return cellFocusables[nextElementIndex];\n }\n\n // Find next cell to focus or move focus into (can be null if the left/right edge is reached).\n const targetAriaColIndex = from.colIndex + delta.x;\n const targetCell = findTableRowCellByAriaColIndex(targetRow, targetAriaColIndex, delta.x);\n if (!targetCell) {\n return null;\n }\n\n // When target cell matches the current cell it means we reached the left or right boundary.\n if (targetCell === cellElement && delta.x !== 0) {\n return null;\n }\n\n const targetCellFocusables = this.getFocusablesFrom(targetCell);\n\n // When delta.x = 0 keep element index if possible.\n let focusIndex = from.elementIndex;\n // Use first element index when moving to the right or to extreme left.\n if ((isFinite(delta.x) && delta.x > 0) || delta.x === -Infinity) {\n focusIndex = 0;\n }\n // Use last element index when moving to the left or to extreme right.\n if ((isFinite(delta.x) && delta.x < 0) || delta.x === Infinity) {\n focusIndex = targetCellFocusables.length - 1;\n }\n\n return targetCellFocusables[focusIndex] ?? targetCell;\n }\n\n private getSingleFocusable() {\n const cell = this.focusedCell;\n const firstTableCell = this.table.querySelector('td,th') as null | HTMLTableCellElement;\n\n // A single element of the table is made user-focusable.\n // It defaults to the first interactive element of the first cell or the first cell itself otherwise.\n let focusTarget: null | HTMLElement =\n (firstTableCell && this.getFocusablesFrom(firstTableCell)[0]) ?? firstTableCell;\n\n // When a navigation-focused element is present in the table it is used for user-navigation instead.\n if (cell) {\n focusTarget = this.getNextFocusable(cell, { x: 0, y: 0 });\n }\n\n return focusTarget;\n }\n\n private getFocusablesFrom(target: HTMLElement) {\n return getAllFocusables(target).filter(el => this.focusables.has(el) && !isElementDisabled(el));\n }\n}\n"]}
@@ -20,11 +20,9 @@ export declare function getTableRowRoleProps(options: {
20
20
  tableRole: TableRole;
21
21
  rowIndex: number;
22
22
  firstIndex?: number;
23
- expandableProps?: {
24
- level: number;
25
- setSize: number;
26
- posInSet: number;
27
- };
23
+ level?: number;
24
+ setSize?: number;
25
+ posInSet?: number;
28
26
  }): import("react").HTMLAttributes<HTMLTableRowElement>;
29
27
  export declare function getTableColHeaderRoleProps(options: {
30
28
  tableRole: TableRole;
@@ -1 +1 @@
1
- {"version":3,"file":"table-role-helper.d.ts","sourceRoot":"","sources":["../../../../src/table/table-role/table-role-helper.ts"],"names":[],"mappings":";AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,KAAK,aAAa,GAAG,UAAU,GAAG,WAAW,GAAG,YAAY,CAAC;AAa7D,wBAAgB,iBAAiB,CAAC,OAAO,EAAE;IACzC,SAAS,EAAE,SAAS,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B,GAAG,KAAK,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,CAuB9C;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE;IAAE,SAAS,EAAE,SAAS,CAAC;IAAC,YAAY,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,kDAWpH;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE;IAAE,SAAS,EAAE,SAAS,CAAA;CAAE,uDAS3E;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE;IAC5C,SAAS,EAAE,SAAS,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;CACxE,uDAkBA;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE;IAClD,SAAS,EAAE,SAAS,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B,0DAcA;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE;IAAE,SAAS,EAAE,SAAS,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,OAAO,CAAA;CAAE,0DAY/G"}
1
+ {"version":3,"file":"table-role-helper.d.ts","sourceRoot":"","sources":["../../../../src/table/table-role/table-role-helper.ts"],"names":[],"mappings":";AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,KAAK,aAAa,GAAG,UAAU,GAAG,WAAW,GAAG,YAAY,CAAC;AAa7D,wBAAgB,iBAAiB,CAAC,OAAO,EAAE;IACzC,SAAS,EAAE,SAAS,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B,GAAG,KAAK,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,CAuB9C;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE;IAAE,SAAS,EAAE,SAAS,CAAC;IAAC,YAAY,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,kDAWpH;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE;IAAE,SAAS,EAAE,SAAS,CAAA;CAAE,uDAS3E;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE;IAC5C,SAAS,EAAE,SAAS,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,uDAsBA;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE;IAClD,SAAS,EAAE,SAAS,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B,0DAcA;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE;IAAE,SAAS,EAAE,SAAS,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,OAAO,CAAA;CAAE,0DAY/G"}
@@ -55,10 +55,14 @@ export function getTableRowRoleProps(options) {
55
55
  else if (options.firstIndex !== undefined) {
56
56
  nativeProps['aria-rowindex'] = options.firstIndex + options.rowIndex + 1;
57
57
  }
58
- if (options.tableRole === 'treegrid' && options.expandableProps) {
59
- nativeProps['aria-level'] = options.expandableProps.level;
60
- nativeProps['aria-setsize'] = options.expandableProps.setSize;
61
- nativeProps['aria-posinset'] = options.expandableProps.posInSet;
58
+ if (options.tableRole === 'treegrid' && options.level && options.level !== 0) {
59
+ nativeProps['aria-level'] = options.level;
60
+ }
61
+ if (options.tableRole === 'treegrid' && options.setSize) {
62
+ nativeProps['aria-setsize'] = options.setSize;
63
+ }
64
+ if (options.tableRole === 'treegrid' && options.posInSet) {
65
+ nativeProps['aria-posinset'] = options.posInSet;
62
66
  }
63
67
  return nativeProps;
64
68
  }