@cloudscape-design/components 3.0.533 → 3.0.535

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 (409) hide show
  1. package/alert/styles.css.js +25 -25
  2. package/alert/styles.scoped.css +45 -39
  3. package/alert/styles.selectors.js +25 -25
  4. package/anchor-navigation/styles.css.js +8 -8
  5. package/anchor-navigation/styles.scoped.css +24 -18
  6. package/anchor-navigation/styles.selectors.js +8 -8
  7. package/annotation-context/annotation/styles.css.js +24 -24
  8. package/annotation-context/annotation/styles.scoped.css +36 -30
  9. package/annotation-context/annotation/styles.selectors.js +24 -24
  10. package/app-layout/content-wrapper/styles.css.js +3 -3
  11. package/app-layout/content-wrapper/styles.scoped.css +12 -6
  12. package/app-layout/content-wrapper/styles.selectors.js +3 -3
  13. package/app-layout/drawer/styles.css.js +12 -12
  14. package/app-layout/drawer/styles.scoped.css +26 -20
  15. package/app-layout/drawer/styles.selectors.js +12 -12
  16. package/app-layout/mobile-toolbar/styles.css.js +8 -8
  17. package/app-layout/mobile-toolbar/styles.scoped.css +14 -8
  18. package/app-layout/mobile-toolbar/styles.selectors.js +8 -8
  19. package/app-layout/notifications/styles.css.js +3 -3
  20. package/app-layout/notifications/styles.scoped.css +7 -7
  21. package/app-layout/notifications/styles.selectors.js +3 -3
  22. package/app-layout/split-panel/styles.css.js +2 -2
  23. package/app-layout/split-panel/styles.scoped.css +8 -2
  24. package/app-layout/split-panel/styles.selectors.js +2 -2
  25. package/app-layout/styles.css.js +16 -16
  26. package/app-layout/styles.scoped.css +25 -19
  27. package/app-layout/styles.selectors.js +16 -16
  28. package/app-layout/toggles/styles.css.js +2 -2
  29. package/app-layout/toggles/styles.scoped.css +12 -6
  30. package/app-layout/toggles/styles.selectors.js +2 -2
  31. package/app-layout/visual-refresh/styles.css.js +81 -81
  32. package/app-layout/visual-refresh/styles.scoped.css +294 -288
  33. package/app-layout/visual-refresh/styles.selectors.js +81 -81
  34. package/area-chart/styles.css.js +6 -6
  35. package/area-chart/styles.scoped.css +15 -9
  36. package/area-chart/styles.selectors.js +6 -6
  37. package/attribute-editor/styles.css.js +14 -14
  38. package/attribute-editor/styles.scoped.css +30 -24
  39. package/attribute-editor/styles.selectors.js +14 -14
  40. package/autosuggest/autosuggest-option.d.ts +0 -1
  41. package/autosuggest/autosuggest-option.d.ts.map +1 -1
  42. package/autosuggest/autosuggest-option.js +2 -4
  43. package/autosuggest/autosuggest-option.js.map +1 -1
  44. package/autosuggest/internal.d.ts.map +1 -1
  45. package/autosuggest/internal.js +2 -5
  46. package/autosuggest/internal.js.map +1 -1
  47. package/autosuggest/options-controller.d.ts +2 -1
  48. package/autosuggest/options-controller.d.ts.map +1 -1
  49. package/autosuggest/options-controller.js +15 -3
  50. package/autosuggest/options-controller.js.map +1 -1
  51. package/autosuggest/options-list.d.ts +2 -2
  52. package/autosuggest/options-list.d.ts.map +1 -1
  53. package/autosuggest/options-list.js +2 -2
  54. package/autosuggest/options-list.js.map +1 -1
  55. package/autosuggest/plain-list.d.ts +2 -3
  56. package/autosuggest/plain-list.d.ts.map +1 -1
  57. package/autosuggest/plain-list.js +2 -2
  58. package/autosuggest/plain-list.js.map +1 -1
  59. package/autosuggest/virtual-list.d.ts +1 -1
  60. package/autosuggest/virtual-list.d.ts.map +1 -1
  61. package/autosuggest/virtual-list.js +2 -2
  62. package/autosuggest/virtual-list.js.map +1 -1
  63. package/badge/styles.css.js +5 -5
  64. package/badge/styles.scoped.css +11 -5
  65. package/badge/styles.selectors.js +5 -5
  66. package/box/styles.css.js +190 -190
  67. package/box/styles.scoped.css +253 -235
  68. package/box/styles.selectors.js +190 -190
  69. package/breadcrumb-group/item/styles.css.js +9 -9
  70. package/breadcrumb-group/item/styles.scoped.css +23 -17
  71. package/breadcrumb-group/item/styles.selectors.js +9 -9
  72. package/breadcrumb-group/styles.css.js +7 -7
  73. package/breadcrumb-group/styles.scoped.css +18 -12
  74. package/breadcrumb-group/styles.selectors.js +7 -7
  75. package/button/styles.css.js +20 -20
  76. package/button/styles.scoped.css +157 -151
  77. package/button/styles.selectors.js +20 -20
  78. package/button-dropdown/category-elements/styles.css.js +13 -13
  79. package/button-dropdown/category-elements/styles.scoped.css +29 -23
  80. package/button-dropdown/category-elements/styles.selectors.js +13 -13
  81. package/button-dropdown/item-element/styles.css.js +15 -15
  82. package/button-dropdown/item-element/styles.scoped.css +24 -18
  83. package/button-dropdown/item-element/styles.selectors.js +15 -15
  84. package/button-dropdown/mobile-expandable-group/styles.css.js +5 -5
  85. package/button-dropdown/mobile-expandable-group/styles.scoped.css +11 -5
  86. package/button-dropdown/mobile-expandable-group/styles.selectors.js +5 -5
  87. package/button-dropdown/styles.css.js +15 -15
  88. package/button-dropdown/styles.scoped.css +28 -22
  89. package/button-dropdown/styles.selectors.js +15 -15
  90. package/calendar/styles.css.js +18 -18
  91. package/calendar/styles.scoped.css +44 -38
  92. package/calendar/styles.selectors.js +18 -18
  93. package/cards/styles.css.js +40 -40
  94. package/cards/styles.scoped.css +56 -50
  95. package/cards/styles.selectors.js +40 -40
  96. package/checkbox/styles.css.js +3 -3
  97. package/checkbox/styles.scoped.css +11 -5
  98. package/checkbox/styles.selectors.js +3 -3
  99. package/code-editor/styles.css.js +32 -32
  100. package/code-editor/styles.scoped.css +135 -129
  101. package/code-editor/styles.selectors.js +32 -32
  102. package/collection-preferences/content-display/styles.css.js +11 -11
  103. package/collection-preferences/content-display/styles.scoped.css +29 -17
  104. package/collection-preferences/content-display/styles.selectors.js +11 -11
  105. package/collection-preferences/styles.css.js +37 -37
  106. package/collection-preferences/styles.scoped.css +68 -44
  107. package/collection-preferences/styles.selectors.js +37 -37
  108. package/column-layout/styles.css.js +13 -13
  109. package/column-layout/styles.scoped.css +49 -43
  110. package/column-layout/styles.selectors.js +13 -13
  111. package/container/styles.css.js +30 -30
  112. package/container/styles.scoped.css +60 -54
  113. package/container/styles.selectors.js +30 -30
  114. package/content-layout/styles.css.js +7 -7
  115. package/content-layout/styles.scoped.css +19 -13
  116. package/content-layout/styles.selectors.js +7 -7
  117. package/date-picker/styles.css.js +7 -7
  118. package/date-picker/styles.scoped.css +15 -9
  119. package/date-picker/styles.selectors.js +7 -7
  120. package/date-range-picker/calendar/grids/styles.css.js +25 -25
  121. package/date-range-picker/calendar/grids/styles.scoped.css +48 -42
  122. package/date-range-picker/calendar/grids/styles.selectors.js +25 -25
  123. package/date-range-picker/relative-range/styles.css.js +9 -9
  124. package/date-range-picker/relative-range/styles.scoped.css +19 -13
  125. package/date-range-picker/relative-range/styles.selectors.js +9 -9
  126. package/date-range-picker/styles.css.js +39 -39
  127. package/date-range-picker/styles.scoped.css +54 -48
  128. package/date-range-picker/styles.selectors.js +39 -39
  129. package/drawer/styles.css.js +3 -3
  130. package/drawer/styles.scoped.css +14 -8
  131. package/drawer/styles.selectors.js +3 -3
  132. package/expandable-section/styles.css.js +32 -32
  133. package/expandable-section/styles.scoped.css +68 -62
  134. package/expandable-section/styles.selectors.js +32 -32
  135. package/file-upload/dropzone/styles.css.js +2 -2
  136. package/file-upload/dropzone/styles.scoped.css +8 -2
  137. package/file-upload/dropzone/styles.selectors.js +2 -2
  138. package/file-upload/file-input/styles.css.js +4 -4
  139. package/file-upload/file-input/styles.scoped.css +13 -7
  140. package/file-upload/file-input/styles.selectors.js +4 -4
  141. package/flashbar/styles.css.js +47 -47
  142. package/flashbar/styles.scoped.css +177 -171
  143. package/flashbar/styles.selectors.js +47 -47
  144. package/form/styles.css.js +9 -9
  145. package/form/styles.scoped.css +14 -8
  146. package/form/styles.selectors.js +9 -9
  147. package/form-field/styles.css.js +19 -19
  148. package/form-field/styles.scoped.css +35 -29
  149. package/form-field/styles.selectors.js +19 -19
  150. package/grid/styles.css.js +53 -53
  151. package/grid/styles.scoped.css +60 -54
  152. package/grid/styles.selectors.js +53 -53
  153. package/header/styles.css.js +34 -34
  154. package/header/styles.scoped.css +80 -50
  155. package/header/styles.selectors.js +34 -34
  156. package/help-panel/styles.css.js +4 -4
  157. package/help-panel/styles.scoped.css +69 -63
  158. package/help-panel/styles.selectors.js +4 -4
  159. package/hotspot/styles.css.js +7 -7
  160. package/hotspot/styles.scoped.css +13 -7
  161. package/hotspot/styles.selectors.js +7 -7
  162. package/icon/internal.d.ts.map +1 -1
  163. package/icon/internal.js +1 -1
  164. package/icon/internal.js.map +1 -1
  165. package/icon/styles.css.js +36 -21
  166. package/icon/styles.scoped.css +92 -48
  167. package/icon/styles.selectors.js +36 -21
  168. package/input/styles.css.js +12 -12
  169. package/input/styles.scoped.css +36 -30
  170. package/input/styles.selectors.js +12 -12
  171. package/internal/components/abstract-switch/styles.css.js +13 -13
  172. package/internal/components/abstract-switch/styles.scoped.css +26 -20
  173. package/internal/components/abstract-switch/styles.selectors.js +13 -13
  174. package/internal/components/button-trigger/styles.css.js +10 -10
  175. package/internal/components/button-trigger/styles.scoped.css +30 -24
  176. package/internal/components/button-trigger/styles.selectors.js +10 -10
  177. package/internal/components/chart-filter/styles.css.js +3 -3
  178. package/internal/components/chart-filter/styles.scoped.css +9 -3
  179. package/internal/components/chart-filter/styles.selectors.js +3 -3
  180. package/internal/components/chart-legend/styles.css.js +6 -6
  181. package/internal/components/chart-legend/styles.scoped.css +21 -15
  182. package/internal/components/chart-legend/styles.selectors.js +6 -6
  183. package/internal/components/chart-plot/styles.css.js +5 -5
  184. package/internal/components/chart-plot/styles.scoped.css +11 -5
  185. package/internal/components/chart-plot/styles.selectors.js +5 -5
  186. package/internal/components/chart-popover/styles.css.js +3 -3
  187. package/internal/components/chart-popover/styles.scoped.css +9 -3
  188. package/internal/components/chart-popover/styles.selectors.js +3 -3
  189. package/internal/components/chart-series-details/styles.css.js +20 -20
  190. package/internal/components/chart-series-details/styles.scoped.css +39 -33
  191. package/internal/components/chart-series-details/styles.selectors.js +20 -20
  192. package/internal/components/chart-series-marker/styles.css.js +5 -5
  193. package/internal/components/chart-series-marker/styles.scoped.css +13 -7
  194. package/internal/components/chart-series-marker/styles.selectors.js +5 -5
  195. package/internal/components/chart-wrapper/styles.css.js +9 -9
  196. package/internal/components/chart-wrapper/styles.scoped.css +15 -9
  197. package/internal/components/chart-wrapper/styles.selectors.js +9 -9
  198. package/internal/components/checkbox-icon/styles.css.js +7 -7
  199. package/internal/components/checkbox-icon/styles.scoped.css +14 -8
  200. package/internal/components/checkbox-icon/styles.selectors.js +7 -7
  201. package/internal/components/dropdown/styles.css.js +20 -20
  202. package/internal/components/dropdown/styles.scoped.css +62 -36
  203. package/internal/components/dropdown/styles.selectors.js +20 -20
  204. package/internal/components/dropdown-footer/styles.css.js +3 -3
  205. package/internal/components/dropdown-footer/styles.scoped.css +9 -3
  206. package/internal/components/dropdown-footer/styles.selectors.js +3 -3
  207. package/internal/components/dropdown-status/styles.css.js +2 -2
  208. package/internal/components/dropdown-status/styles.scoped.css +8 -2
  209. package/internal/components/dropdown-status/styles.selectors.js +2 -2
  210. package/internal/components/filtering-token/styles.css.js +7 -7
  211. package/internal/components/filtering-token/styles.scoped.css +19 -13
  212. package/internal/components/filtering-token/styles.selectors.js +7 -7
  213. package/internal/components/handle/styles.css.js +2 -2
  214. package/internal/components/handle/styles.scoped.css +12 -6
  215. package/internal/components/handle/styles.selectors.js +2 -2
  216. package/internal/components/menu-dropdown/styles.css.js +7 -7
  217. package/internal/components/menu-dropdown/styles.scoped.css +19 -13
  218. package/internal/components/menu-dropdown/styles.selectors.js +7 -7
  219. package/internal/components/option/styles.css.js +17 -17
  220. package/internal/components/option/styles.scoped.css +35 -29
  221. package/internal/components/option/styles.selectors.js +17 -17
  222. package/internal/components/options-list/styles.css.js +2 -2
  223. package/internal/components/options-list/styles.scoped.css +8 -2
  224. package/internal/components/options-list/styles.selectors.js +2 -2
  225. package/internal/components/screenreader-only/styles.css.js +1 -1
  226. package/internal/components/screenreader-only/styles.scoped.css +7 -1
  227. package/internal/components/screenreader-only/styles.selectors.js +1 -1
  228. package/internal/components/selectable-item/styles.css.js +16 -16
  229. package/internal/components/selectable-item/styles.scoped.css +35 -29
  230. package/internal/components/selectable-item/styles.selectors.js +16 -16
  231. package/internal/components/token-list/styles.css.js +9 -9
  232. package/internal/components/token-list/styles.scoped.css +26 -20
  233. package/internal/components/token-list/styles.selectors.js +9 -9
  234. package/internal/context/single-tab-stop-navigation-context.js +1 -1
  235. package/internal/context/single-tab-stop-navigation-context.js.map +1 -1
  236. package/internal/environment.js +1 -1
  237. package/internal/environment.json +1 -1
  238. package/internal/generated/custom-css-properties/index.d.ts.map +1 -1
  239. package/internal/generated/custom-css-properties/index.js +46 -40
  240. package/internal/generated/custom-css-properties/index.js.map +1 -1
  241. package/internal/manifest.json +1 -1
  242. package/internal/utils/scrollable-containers.d.ts +1 -1
  243. package/internal/utils/scrollable-containers.js +1 -1
  244. package/internal/utils/scrollable-containers.js.map +1 -1
  245. package/link/styles.css.js +20 -20
  246. package/link/styles.scoped.css +77 -71
  247. package/link/styles.selectors.js +20 -20
  248. package/mixed-line-bar-chart/styles.css.js +11 -11
  249. package/mixed-line-bar-chart/styles.scoped.css +23 -17
  250. package/mixed-line-bar-chart/styles.selectors.js +11 -11
  251. package/modal/styles.css.js +23 -23
  252. package/modal/styles.scoped.css +44 -38
  253. package/modal/styles.selectors.js +23 -23
  254. package/multiselect/styles.css.js +2 -2
  255. package/multiselect/styles.scoped.css +8 -2
  256. package/multiselect/styles.selectors.js +2 -2
  257. package/package.json +1 -1
  258. package/pagination/styles.css.js +9 -9
  259. package/pagination/styles.scoped.css +29 -23
  260. package/pagination/styles.selectors.js +9 -9
  261. package/pie-chart/styles.css.js +27 -27
  262. package/pie-chart/styles.scoped.css +54 -48
  263. package/pie-chart/styles.selectors.js +27 -27
  264. package/popover/styles.css.js +50 -50
  265. package/popover/styles.scoped.css +94 -64
  266. package/popover/styles.selectors.js +50 -50
  267. package/progress-bar/styles.css.js +18 -18
  268. package/progress-bar/styles.scoped.css +44 -32
  269. package/progress-bar/styles.selectors.js +18 -18
  270. package/property-filter/property-filter-autosuggest.js +2 -1
  271. package/property-filter/property-filter-autosuggest.js.map +1 -1
  272. package/property-filter/styles.css.js +31 -31
  273. package/property-filter/styles.scoped.css +39 -33
  274. package/property-filter/styles.selectors.js +31 -31
  275. package/radio-group/styles.css.js +9 -9
  276. package/radio-group/styles.scoped.css +21 -15
  277. package/radio-group/styles.selectors.js +9 -9
  278. package/segmented-control/styles.css.js +14 -14
  279. package/segmented-control/styles.scoped.css +39 -33
  280. package/segmented-control/styles.selectors.js +14 -14
  281. package/select/parts/styles.css.js +16 -16
  282. package/select/parts/styles.scoped.css +22 -16
  283. package/select/parts/styles.selectors.js +16 -16
  284. package/select/styles.css.js +1 -1
  285. package/select/styles.scoped.css +7 -1
  286. package/select/styles.selectors.js +1 -1
  287. package/side-navigation/styles.css.js +28 -28
  288. package/side-navigation/styles.scoped.css +44 -38
  289. package/side-navigation/styles.selectors.js +28 -28
  290. package/space-between/styles.css.js +23 -23
  291. package/space-between/styles.scoped.css +30 -24
  292. package/space-between/styles.selectors.js +23 -23
  293. package/spinner/styles.css.js +13 -13
  294. package/spinner/styles.scoped.css +58 -26
  295. package/spinner/styles.selectors.js +13 -13
  296. package/split-panel/styles.css.js +55 -55
  297. package/split-panel/styles.scoped.css +87 -75
  298. package/split-panel/styles.selectors.js +55 -55
  299. package/status-indicator/styles.css.js +23 -23
  300. package/status-indicator/styles.scoped.css +35 -29
  301. package/status-indicator/styles.selectors.js +23 -23
  302. package/table/body-cell/disabled-inline-editor.d.ts.map +1 -1
  303. package/table/body-cell/disabled-inline-editor.js +3 -1
  304. package/table/body-cell/disabled-inline-editor.js.map +1 -1
  305. package/table/body-cell/index.d.ts.map +1 -1
  306. package/table/body-cell/index.js +3 -1
  307. package/table/body-cell/index.js.map +1 -1
  308. package/table/body-cell/styles.css.js +30 -30
  309. package/table/body-cell/styles.scoped.css +107 -77
  310. package/table/body-cell/styles.selectors.js +30 -30
  311. package/table/body-cell/td-element.d.ts.map +1 -1
  312. package/table/body-cell/td-element.js +6 -3
  313. package/table/body-cell/td-element.js.map +1 -1
  314. package/table/header-cell/index.d.ts.map +1 -1
  315. package/table/header-cell/index.js +7 -4
  316. package/table/header-cell/index.js.map +1 -1
  317. package/table/header-cell/styles.css.js +24 -24
  318. package/table/header-cell/styles.scoped.css +86 -38
  319. package/table/header-cell/styles.selectors.js +24 -24
  320. package/table/header-cell/th-element.d.ts +2 -1
  321. package/table/header-cell/th-element.d.ts.map +1 -1
  322. package/table/header-cell/th-element.js +9 -5
  323. package/table/header-cell/th-element.js.map +1 -1
  324. package/table/interfaces.d.ts +5 -0
  325. package/table/interfaces.d.ts.map +1 -1
  326. package/table/interfaces.js.map +1 -1
  327. package/table/internal.d.ts.map +1 -1
  328. package/table/internal.js +53 -45
  329. package/table/internal.js.map +1 -1
  330. package/table/no-data-cell.js +1 -1
  331. package/table/no-data-cell.js.map +1 -1
  332. package/table/resizer/index.d.ts.map +1 -1
  333. package/table/resizer/index.js +4 -2
  334. package/table/resizer/index.js.map +1 -1
  335. package/table/resizer/styles.css.js +8 -8
  336. package/table/resizer/styles.scoped.css +20 -14
  337. package/table/resizer/styles.selectors.js +8 -8
  338. package/table/selection/selection-control.d.ts +3 -1
  339. package/table/selection/selection-control.d.ts.map +1 -1
  340. package/table/selection/selection-control.js +2 -2
  341. package/table/selection/selection-control.js.map +1 -1
  342. package/table/selection/styles.css.js +3 -3
  343. package/table/selection/styles.scoped.css +9 -3
  344. package/table/selection/styles.selectors.js +3 -3
  345. package/table/sticky-scrollbar/styles.css.js +6 -6
  346. package/table/sticky-scrollbar/styles.scoped.css +13 -7
  347. package/table/sticky-scrollbar/styles.selectors.js +6 -6
  348. package/table/styles.css.js +35 -35
  349. package/table/styles.scoped.css +46 -40
  350. package/table/styles.selectors.js +35 -35
  351. package/table/table-role/grid-navigation.d.ts.map +1 -1
  352. package/table/table-role/grid-navigation.js +38 -24
  353. package/table/table-role/grid-navigation.js.map +1 -1
  354. package/table/table-role/table-role-helper.d.ts.map +1 -1
  355. package/table/table-role/table-role-helper.js +1 -3
  356. package/table/table-role/table-role-helper.js.map +1 -1
  357. package/table/table-role/utils.d.ts +1 -0
  358. package/table/table-role/utils.d.ts.map +1 -1
  359. package/table/table-role/utils.js +7 -2
  360. package/table/table-role/utils.js.map +1 -1
  361. package/table/thead.d.ts.map +1 -1
  362. package/table/thead.js +2 -2
  363. package/table/thead.js.map +1 -1
  364. package/table/use-table-focus-navigation.d.ts +9 -1
  365. package/table/use-table-focus-navigation.d.ts.map +1 -1
  366. package/table/use-table-focus-navigation.js +3 -3
  367. package/table/use-table-focus-navigation.js.map +1 -1
  368. package/tabs/styles.css.js +21 -21
  369. package/tabs/styles.scoped.css +51 -39
  370. package/tabs/styles.selectors.js +21 -21
  371. package/tag-editor/styles.css.js +3 -3
  372. package/tag-editor/styles.scoped.css +16 -10
  373. package/tag-editor/styles.selectors.js +3 -3
  374. package/text-content/styles.css.js +1 -1
  375. package/text-content/styles.scoped.css +66 -60
  376. package/text-content/styles.selectors.js +1 -1
  377. package/text-filter/styles.css.js +3 -3
  378. package/text-filter/styles.scoped.css +9 -3
  379. package/text-filter/styles.selectors.js +3 -3
  380. package/textarea/styles.css.js +4 -4
  381. package/textarea/styles.scoped.css +18 -12
  382. package/textarea/styles.selectors.js +4 -4
  383. package/tiles/styles.css.js +29 -29
  384. package/tiles/styles.scoped.css +76 -70
  385. package/tiles/styles.selectors.js +29 -29
  386. package/toggle/styles.css.js +8 -8
  387. package/toggle/styles.scoped.css +19 -13
  388. package/toggle/styles.selectors.js +8 -8
  389. package/token-group/styles.css.js +8 -8
  390. package/token-group/styles.scoped.css +22 -16
  391. package/token-group/styles.selectors.js +8 -8
  392. package/top-navigation/1.0-beta/styles.css.js +25 -25
  393. package/top-navigation/1.0-beta/styles.scoped.css +48 -42
  394. package/top-navigation/1.0-beta/styles.selectors.js +25 -25
  395. package/top-navigation/styles.css.js +47 -47
  396. package/top-navigation/styles.scoped.css +72 -66
  397. package/top-navigation/styles.selectors.js +47 -47
  398. package/tutorial-panel/components/tutorial-detail-view/styles.css.js +20 -20
  399. package/tutorial-panel/components/tutorial-detail-view/styles.scoped.css +27 -21
  400. package/tutorial-panel/components/tutorial-detail-view/styles.selectors.js +20 -20
  401. package/tutorial-panel/components/tutorial-list/styles.css.js +18 -18
  402. package/tutorial-panel/components/tutorial-list/styles.scoped.css +33 -27
  403. package/tutorial-panel/components/tutorial-list/styles.selectors.js +18 -18
  404. package/tutorial-panel/styles.css.js +1 -1
  405. package/tutorial-panel/styles.scoped.css +7 -1
  406. package/tutorial-panel/styles.selectors.js +1 -1
  407. package/wizard/styles.css.js +32 -32
  408. package/wizard/styles.scoped.css +74 -68
  409. package/wizard/styles.selectors.js +32 -32
@@ -2,6 +2,12 @@
2
2
  Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3
3
  SPDX-License-Identifier: Apache-2.0
4
4
  */
5
+ /* stylelint-disable @cloudscape-design/no-implicit-descendant, plugin/no-unsupported-browser-features, selector-combinator-disallowed-list */
6
+ /* stylelint-enable @cloudscape-design/no-implicit-descendant, plugin/no-unsupported-browser-features, selector-combinator-disallowed-list */
7
+ /*
8
+ Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
9
+ SPDX-License-Identifier: Apache-2.0
10
+ */
5
11
  /*
6
12
  Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
7
13
  SPDX-License-Identifier: Apache-2.0
@@ -94,7 +100,7 @@ surrounding text. (WCAG F73) https://www.w3.org/WAI/WCAG21/Techniques/failures/F
94
100
  Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
95
101
  SPDX-License-Identifier: Apache-2.0
96
102
  */
97
- .awsui_root_wih1l_chj77_97:not(#\9) {
103
+ .awsui_root_wih1l_c80nw_103:not(#\9) {
98
104
  font-size: var(--font-size-body-m-x4okxb, 14px);
99
105
  line-height: var(--line-height-body-m-30ar75, 20px);
100
106
  color: var(--color-text-body-default-at06ol, #000716);
@@ -105,7 +111,7 @@ surrounding text. (WCAG F73) https://www.w3.org/WAI/WCAG21/Techniques/failures/F
105
111
  inline-size: 100%;
106
112
  }
107
113
 
108
- .awsui_tools_wih1l_chj77_108:not(#\9) {
114
+ .awsui_tools_wih1l_c80nw_114:not(#\9) {
109
115
  display: flex;
110
116
  align-items: flex-end;
111
117
  flex-wrap: wrap;
@@ -113,67 +119,67 @@ surrounding text. (WCAG F73) https://www.w3.org/WAI/WCAG21/Techniques/failures/F
113
119
  padding-block-end: var(--space-table-header-tools-bottom-25ubsj, 0px);
114
120
  padding-inline: 0;
115
121
  }
116
- .awsui_tools-filtering_wih1l_chj77_116:not(#\9) {
122
+ .awsui_tools-filtering_wih1l_c80nw_122:not(#\9) {
117
123
  max-inline-size: 100%;
118
124
  margin-inline-end: var(--space-l-t419sm, 20px);
119
125
  }
120
126
  @supports (flex-basis: fit-content) {
121
- .awsui_tools-filtering_wih1l_chj77_116:not(#\9) {
127
+ .awsui_tools-filtering_wih1l_c80nw_122:not(#\9) {
122
128
  flex: 1 1 fit-content;
123
129
  }
124
130
  }
125
131
  @supports not (flex-basis: fit-content) {
126
- .awsui_tools-filtering_wih1l_chj77_116:not(#\9) {
132
+ .awsui_tools-filtering_wih1l_c80nw_122:not(#\9) {
127
133
  flex: 1 1 auto;
128
134
  }
129
135
  }
130
- .awsui_tools-align-right_wih1l_chj77_130:not(#\9) {
136
+ .awsui_tools-align-right_wih1l_c80nw_136:not(#\9) {
131
137
  display: flex;
132
138
  margin-inline-start: auto;
133
139
  }
134
- .awsui_tools-pagination_wih1l_chj77_134 + .awsui_tools-preferences_wih1l_chj77_134:not(#\9) {
140
+ .awsui_tools-pagination_wih1l_c80nw_140 + .awsui_tools-preferences_wih1l_c80nw_140:not(#\9) {
135
141
  border-inline-start: var(--border-divider-section-width-1061zr, 1px) solid var(--color-border-divider-default-j74lyz, #b6bec9);
136
142
  box-sizing: border-box;
137
143
  margin-inline-start: var(--space-xs-zb16t3, 8px);
138
144
  padding-inline-start: var(--space-xs-zb16t3, 8px);
139
145
  }
140
- .awsui_tools-small_wih1l_chj77_140 > .awsui_tools-filtering_wih1l_chj77_116:not(#\9) {
146
+ .awsui_tools-small_wih1l_c80nw_146 > .awsui_tools-filtering_wih1l_c80nw_122:not(#\9) {
141
147
  margin-inline-end: 0;
142
148
  margin-block-end: var(--space-scaled-xs-26e2du, 8px);
143
149
  flex-basis: 100%;
144
150
  }
145
151
 
146
- .awsui_table_wih1l_chj77_146:not(#\9) {
152
+ .awsui_table_wih1l_c80nw_152:not(#\9) {
147
153
  inline-size: 100%;
148
154
  border-spacing: 0;
149
155
  position: relative;
150
156
  box-sizing: border-box;
151
157
  }
152
- .awsui_table-layout-fixed_wih1l_chj77_152:not(#\9) {
158
+ .awsui_table-layout-fixed_wih1l_c80nw_158:not(#\9) {
153
159
  table-layout: fixed;
154
160
  }
155
161
 
156
- .awsui_wrapper_wih1l_chj77_156:not(#\9) {
162
+ .awsui_wrapper_wih1l_c80nw_162:not(#\9) {
157
163
  position: relative;
158
164
  box-sizing: border-box;
159
165
  inline-size: 100%;
160
166
  overflow-x: auto;
161
167
  scrollbar-width: none; /* Hide scrollbar in Firefox */
162
168
  }
163
- .awsui_wrapper_wih1l_chj77_156.awsui_variant-stacked_wih1l_chj77_163 > .awsui_table_wih1l_chj77_146:not(#\9), .awsui_wrapper_wih1l_chj77_156.awsui_variant-stacked_wih1l_chj77_163 > .awsui_wrapper-content-measure_wih1l_chj77_163:not(#\9), .awsui_wrapper_wih1l_chj77_156.awsui_variant-container_wih1l_chj77_163 > .awsui_table_wih1l_chj77_146:not(#\9), .awsui_wrapper_wih1l_chj77_156.awsui_variant-container_wih1l_chj77_163 > .awsui_wrapper-content-measure_wih1l_chj77_163:not(#\9) {
169
+ .awsui_wrapper_wih1l_c80nw_162.awsui_variant-stacked_wih1l_c80nw_169 > .awsui_table_wih1l_c80nw_152:not(#\9), .awsui_wrapper_wih1l_c80nw_162.awsui_variant-stacked_wih1l_c80nw_169 > .awsui_wrapper-content-measure_wih1l_c80nw_169:not(#\9), .awsui_wrapper_wih1l_c80nw_162.awsui_variant-container_wih1l_c80nw_169 > .awsui_table_wih1l_c80nw_152:not(#\9), .awsui_wrapper_wih1l_c80nw_162.awsui_variant-container_wih1l_c80nw_169 > .awsui_wrapper-content-measure_wih1l_c80nw_169:not(#\9) {
164
170
  padding-inline: var(--space-table-horizontal-8davlm, 20px);
165
171
  }
166
- .awsui_wrapper_wih1l_chj77_156.awsui_variant-container_wih1l_chj77_163:not(#\9):not(.awsui_has-footer_wih1l_chj77_166) {
172
+ .awsui_wrapper_wih1l_c80nw_162.awsui_variant-container_wih1l_c80nw_169:not(#\9):not(.awsui_has-footer_wih1l_c80nw_172) {
167
173
  padding-block-end: var(--space-table-content-bottom-9yr834, 4px);
168
174
  }
169
- .awsui_wrapper_wih1l_chj77_156:not(#\9):not(.awsui_has-header_wih1l_chj77_169) {
175
+ .awsui_wrapper_wih1l_c80nw_162:not(#\9):not(.awsui_has-header_wih1l_c80nw_175) {
170
176
  border-start-end-radius: var(--border-radius-container-wqv1zi, 16px);
171
177
  border-start-start-radius: var(--border-radius-container-wqv1zi, 16px);
172
178
  }
173
- .awsui_wrapper_wih1l_chj77_156:not(#\9)::-webkit-scrollbar {
179
+ .awsui_wrapper_wih1l_c80nw_162:not(#\9)::-webkit-scrollbar {
174
180
  display: none; /* Hide scrollbar in Safari and Chrome */
175
181
  }
176
- body[data-awsui-focus-visible=true] .awsui_wrapper_wih1l_chj77_156:not(#\9):focus {
182
+ body[data-awsui-focus-visible=true] .awsui_wrapper_wih1l_c80nw_162:not(#\9):focus {
177
183
  outline: 2px dotted transparent;
178
184
  outline-offset: 2px;
179
185
  border-start-start-radius: var(--border-radius-container-wqv1zi, 16px);
@@ -183,19 +189,19 @@ body[data-awsui-focus-visible=true] .awsui_wrapper_wih1l_chj77_156:not(#\9):focu
183
189
  box-shadow: 0 0 0 2px var(--color-border-item-focused-b2ntyl, #0972d3);
184
190
  }
185
191
 
186
- .awsui_cell-merged_wih1l_chj77_186:not(#\9) {
192
+ .awsui_cell-merged_wih1l_c80nw_192:not(#\9) {
187
193
  text-align: center;
188
194
  padding-block: 0;
189
195
  padding-inline: 0;
190
196
  }
191
- .awsui_cell-merged_wih1l_chj77_186.awsui_has-footer_wih1l_chj77_166:not(#\9) {
197
+ .awsui_cell-merged_wih1l_c80nw_192.awsui_has-footer_wih1l_c80nw_172:not(#\9) {
192
198
  /*
193
199
  Add a bottom border to the body cell of an empty table as a separator between the
194
200
  table and the footer
195
201
  */
196
202
  border-block-end: var(--border-divider-section-width-1061zr, 1px) solid var(--color-border-divider-default-j74lyz, #b6bec9);
197
203
  }
198
- .awsui_cell-merged-content_wih1l_chj77_198:not(#\9) {
204
+ .awsui_cell-merged-content_wih1l_c80nw_204:not(#\9) {
199
205
  box-sizing: border-box;
200
206
  inline-size: 100%;
201
207
  padding-block-start: var(--space-scaled-m-mo5yse, 16px);
@@ -205,7 +211,7 @@ body[data-awsui-focus-visible=true] .awsui_wrapper_wih1l_chj77_156:not(#\9):focu
205
211
  /* stylelint-enable plugin/no-unsupported-browser-features */
206
212
  }
207
213
  @supports (position: sticky) {
208
- .awsui_cell-merged-content_wih1l_chj77_198:not(#\9) {
214
+ .awsui_cell-merged-content_wih1l_c80nw_204:not(#\9) {
209
215
  position: sticky;
210
216
  inset-inline-start: 0;
211
217
  margin-block: 0;
@@ -213,11 +219,11 @@ body[data-awsui-focus-visible=true] .awsui_wrapper_wih1l_chj77_156:not(#\9):focu
213
219
  }
214
220
  }
215
221
 
216
- .awsui_empty_wih1l_chj77_216:not(#\9) {
222
+ .awsui_empty_wih1l_c80nw_222:not(#\9) {
217
223
  color: var(--color-text-empty-2wfcyr, #5f6b7a);
218
224
  }
219
225
 
220
- .awsui_loading_wih1l_chj77_220:not(#\9) {
226
+ .awsui_loading_wih1l_c80nw_226:not(#\9) {
221
227
  /* used in test-utils */
222
228
  }
223
229
 
@@ -226,14 +232,14 @@ The min/max/width token values in Visual Refresh should align
226
232
  the table header and body cells selection control with the table
227
233
  filter search icon.
228
234
  */
229
- .awsui_selection-control_wih1l_chj77_229:not(#\9) {
235
+ .awsui_selection-control_wih1l_c80nw_235:not(#\9) {
230
236
  box-sizing: border-box;
231
237
  max-inline-size: var(--size-table-selection-horizontal-oqvl1b, 40px);
232
238
  min-inline-size: var(--size-table-selection-horizontal-oqvl1b, 40px);
233
239
  position: relative;
234
240
  inline-size: var(--size-table-selection-horizontal-oqvl1b, 40px);
235
241
  }
236
- .awsui_selection-control_wih1l_chj77_229.awsui_selection-control-header_wih1l_chj77_236:not(#\9) {
242
+ .awsui_selection-control_wih1l_c80nw_235.awsui_selection-control-header_wih1l_c80nw_242:not(#\9) {
237
243
  padding-block: var(--space-scaled-xs-26e2du, 8px);
238
244
  padding-inline: var(--space-scaled-l-0hpmd7, 20px);
239
245
  border-inline-start: var(--border-item-width-yel47s, 2px) solid transparent;
@@ -243,12 +249,12 @@ filter search icon.
243
249
  The dynamic height dark header needs a background that will cover
244
250
  the default white background of the container component.
245
251
  */
246
- .awsui_dark-header_wih1l_chj77_246:not(#\9) {
252
+ .awsui_dark-header_wih1l_c80nw_252:not(#\9) {
247
253
  background-color: var(--color-background-layout-main-nx09lr, #ffffff);
248
254
  color: var(--color-text-body-default-at06ol, #000716);
249
255
  }
250
256
 
251
- .awsui_header-secondary_wih1l_chj77_251:not(#\9) {
257
+ .awsui_header-secondary_wih1l_c80nw_257:not(#\9) {
252
258
  overflow: auto;
253
259
  -ms-overflow-style: none; /* Internet Explorer 10+ */
254
260
  scrollbar-width: none; /* Firefox */
@@ -260,39 +266,39 @@ the default white background of the container component.
260
266
  border-end-end-radius: 0;
261
267
  background: var(--color-background-table-header-82ew8p, #ffffff);
262
268
  }
263
- .awsui_header-secondary_wih1l_chj77_251.awsui_variant-stacked_wih1l_chj77_163 > .awsui_table_wih1l_chj77_146:not(#\9), .awsui_header-secondary_wih1l_chj77_251.awsui_variant-container_wih1l_chj77_163 > .awsui_table_wih1l_chj77_146:not(#\9) {
269
+ .awsui_header-secondary_wih1l_c80nw_257.awsui_variant-stacked_wih1l_c80nw_169 > .awsui_table_wih1l_c80nw_152:not(#\9), .awsui_header-secondary_wih1l_c80nw_257.awsui_variant-container_wih1l_c80nw_169 > .awsui_table_wih1l_c80nw_152:not(#\9) {
264
270
  padding-inline: var(--space-table-horizontal-8davlm, 20px);
265
271
  }
266
- .awsui_header-secondary_wih1l_chj77_251:not(#\9)::-webkit-scrollbar {
272
+ .awsui_header-secondary_wih1l_c80nw_257:not(#\9)::-webkit-scrollbar {
267
273
  display: none; /* Safari and Chrome */
268
274
  }
269
- .awsui_header-secondary_wih1l_chj77_251.awsui_table-has-header_wih1l_chj77_269:not(#\9) {
275
+ .awsui_header-secondary_wih1l_c80nw_257.awsui_table-has-header_wih1l_c80nw_275:not(#\9) {
270
276
  border-block-start: var(--border-divider-list-width-27y3k5, 1px) solid var(--color-border-container-divider-p2uygo, transparent);
271
277
  }
272
278
 
273
- .awsui_header-controls_wih1l_chj77_273:not(#\9) {
279
+ .awsui_header-controls_wih1l_c80nw_279:not(#\9) {
274
280
  padding-block: var(--space-container-header-top-5qav00, 12px) var(--space-container-header-bottom-vj01hn, 8px);
275
281
  }
276
- .awsui_header-controls_wih1l_chj77_273.awsui_variant-full-page_wih1l_chj77_276:not(#\9) {
282
+ .awsui_header-controls_wih1l_c80nw_279.awsui_variant-full-page_wih1l_c80nw_282:not(#\9) {
277
283
  padding-block: 0 calc(var(--space-container-header-bottom-vj01hn, 8px) + var(--space-table-header-tools-full-page-bottom-xulfq9, 4px));
278
284
  }
279
- .awsui_header-controls_wih1l_chj77_273.awsui_variant-stacked_wih1l_chj77_163:not(#\9), .awsui_header-controls_wih1l_chj77_273.awsui_variant-container_wih1l_chj77_163:not(#\9) {
285
+ .awsui_header-controls_wih1l_c80nw_279.awsui_variant-stacked_wih1l_c80nw_169:not(#\9), .awsui_header-controls_wih1l_c80nw_279.awsui_variant-container_wih1l_c80nw_169:not(#\9) {
280
286
  padding-inline: calc(var(--space-table-horizontal-8davlm, 20px) + var(--space-table-header-horizontal-wl3ykr, 0px));
281
287
  }
282
- .awsui_header-controls_wih1l_chj77_273.awsui_variant-embedded_wih1l_chj77_282:not(#\9), .awsui_header-controls_wih1l_chj77_273.awsui_variant-borderless_wih1l_chj77_282:not(#\9) {
288
+ .awsui_header-controls_wih1l_c80nw_279.awsui_variant-embedded_wih1l_c80nw_288:not(#\9), .awsui_header-controls_wih1l_c80nw_279.awsui_variant-borderless_wih1l_c80nw_288:not(#\9) {
283
289
  padding-inline: var(--space-table-header-horizontal-wl3ykr, 0px);
284
290
  padding-block-start: var(--space-table-embedded-header-top-bfjeam, 0px);
285
291
  }
286
292
 
287
- .awsui_footer-wrapper_wih1l_chj77_287.awsui_variant-stacked_wih1l_chj77_163:not(#\9), .awsui_footer-wrapper_wih1l_chj77_287.awsui_variant-container_wih1l_chj77_163:not(#\9) {
293
+ .awsui_footer-wrapper_wih1l_c80nw_293.awsui_variant-stacked_wih1l_c80nw_169:not(#\9), .awsui_footer-wrapper_wih1l_c80nw_293.awsui_variant-container_wih1l_c80nw_169:not(#\9) {
288
294
  padding-inline: var(--space-table-horizontal-8davlm, 20px);
289
295
  }
290
296
 
291
- .awsui_footer_wih1l_chj77_287:not(#\9) {
297
+ .awsui_footer_wih1l_c80nw_293:not(#\9) {
292
298
  padding-block: var(--space-scaled-s-aqzyko, 12px);
293
299
  padding-inline: var(--space-table-footer-horizontal-ptapb9, 0px);
294
300
  }
295
- .awsui_footer-with-pagination_wih1l_chj77_295:not(#\9) {
301
+ .awsui_footer-with-pagination_wih1l_c80nw_301:not(#\9) {
296
302
  display: flex;
297
303
  flex-direction: row;
298
304
  justify-content: space-between;
@@ -300,12 +306,12 @@ the default white background of the container component.
300
306
  flex-wrap: wrap;
301
307
  gap: var(--space-scaled-s-aqzyko, 12px);
302
308
  }
303
- .awsui_footer-pagination_wih1l_chj77_303:not(#\9) {
309
+ .awsui_footer-pagination_wih1l_c80nw_309:not(#\9) {
304
310
  margin-inline-start: auto;
305
311
  }
306
312
 
307
- .awsui_thead-active_wih1l_chj77_307:not(#\9),
308
- .awsui_row_wih1l_chj77_308:not(#\9),
309
- .awsui_row-selected_wih1l_chj77_309:not(#\9) {
313
+ .awsui_thead-active_wih1l_c80nw_313:not(#\9),
314
+ .awsui_row_wih1l_c80nw_314:not(#\9),
315
+ .awsui_row-selected_wih1l_c80nw_315:not(#\9) {
310
316
  /* used in test-utils */
311
317
  }
@@ -2,40 +2,40 @@
2
2
  // es-module interop with Babel and Typescript
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
4
  module.exports.default = {
5
- "root": "awsui_root_wih1l_chj77_97",
6
- "tools": "awsui_tools_wih1l_chj77_108",
7
- "tools-filtering": "awsui_tools-filtering_wih1l_chj77_116",
8
- "tools-align-right": "awsui_tools-align-right_wih1l_chj77_130",
9
- "tools-pagination": "awsui_tools-pagination_wih1l_chj77_134",
10
- "tools-preferences": "awsui_tools-preferences_wih1l_chj77_134",
11
- "tools-small": "awsui_tools-small_wih1l_chj77_140",
12
- "table": "awsui_table_wih1l_chj77_146",
13
- "table-layout-fixed": "awsui_table-layout-fixed_wih1l_chj77_152",
14
- "wrapper": "awsui_wrapper_wih1l_chj77_156",
15
- "variant-stacked": "awsui_variant-stacked_wih1l_chj77_163",
16
- "wrapper-content-measure": "awsui_wrapper-content-measure_wih1l_chj77_163",
17
- "variant-container": "awsui_variant-container_wih1l_chj77_163",
18
- "has-footer": "awsui_has-footer_wih1l_chj77_166",
19
- "has-header": "awsui_has-header_wih1l_chj77_169",
20
- "cell-merged": "awsui_cell-merged_wih1l_chj77_186",
21
- "cell-merged-content": "awsui_cell-merged-content_wih1l_chj77_198",
22
- "empty": "awsui_empty_wih1l_chj77_216",
23
- "loading": "awsui_loading_wih1l_chj77_220",
24
- "selection-control": "awsui_selection-control_wih1l_chj77_229",
25
- "selection-control-header": "awsui_selection-control-header_wih1l_chj77_236",
26
- "dark-header": "awsui_dark-header_wih1l_chj77_246",
27
- "header-secondary": "awsui_header-secondary_wih1l_chj77_251",
28
- "table-has-header": "awsui_table-has-header_wih1l_chj77_269",
29
- "header-controls": "awsui_header-controls_wih1l_chj77_273",
30
- "variant-full-page": "awsui_variant-full-page_wih1l_chj77_276",
31
- "variant-embedded": "awsui_variant-embedded_wih1l_chj77_282",
32
- "variant-borderless": "awsui_variant-borderless_wih1l_chj77_282",
33
- "footer-wrapper": "awsui_footer-wrapper_wih1l_chj77_287",
34
- "footer": "awsui_footer_wih1l_chj77_287",
35
- "footer-with-pagination": "awsui_footer-with-pagination_wih1l_chj77_295",
36
- "footer-pagination": "awsui_footer-pagination_wih1l_chj77_303",
37
- "thead-active": "awsui_thead-active_wih1l_chj77_307",
38
- "row": "awsui_row_wih1l_chj77_308",
39
- "row-selected": "awsui_row-selected_wih1l_chj77_309"
5
+ "root": "awsui_root_wih1l_c80nw_103",
6
+ "tools": "awsui_tools_wih1l_c80nw_114",
7
+ "tools-filtering": "awsui_tools-filtering_wih1l_c80nw_122",
8
+ "tools-align-right": "awsui_tools-align-right_wih1l_c80nw_136",
9
+ "tools-pagination": "awsui_tools-pagination_wih1l_c80nw_140",
10
+ "tools-preferences": "awsui_tools-preferences_wih1l_c80nw_140",
11
+ "tools-small": "awsui_tools-small_wih1l_c80nw_146",
12
+ "table": "awsui_table_wih1l_c80nw_152",
13
+ "table-layout-fixed": "awsui_table-layout-fixed_wih1l_c80nw_158",
14
+ "wrapper": "awsui_wrapper_wih1l_c80nw_162",
15
+ "variant-stacked": "awsui_variant-stacked_wih1l_c80nw_169",
16
+ "wrapper-content-measure": "awsui_wrapper-content-measure_wih1l_c80nw_169",
17
+ "variant-container": "awsui_variant-container_wih1l_c80nw_169",
18
+ "has-footer": "awsui_has-footer_wih1l_c80nw_172",
19
+ "has-header": "awsui_has-header_wih1l_c80nw_175",
20
+ "cell-merged": "awsui_cell-merged_wih1l_c80nw_192",
21
+ "cell-merged-content": "awsui_cell-merged-content_wih1l_c80nw_204",
22
+ "empty": "awsui_empty_wih1l_c80nw_222",
23
+ "loading": "awsui_loading_wih1l_c80nw_226",
24
+ "selection-control": "awsui_selection-control_wih1l_c80nw_235",
25
+ "selection-control-header": "awsui_selection-control-header_wih1l_c80nw_242",
26
+ "dark-header": "awsui_dark-header_wih1l_c80nw_252",
27
+ "header-secondary": "awsui_header-secondary_wih1l_c80nw_257",
28
+ "table-has-header": "awsui_table-has-header_wih1l_c80nw_275",
29
+ "header-controls": "awsui_header-controls_wih1l_c80nw_279",
30
+ "variant-full-page": "awsui_variant-full-page_wih1l_c80nw_282",
31
+ "variant-embedded": "awsui_variant-embedded_wih1l_c80nw_288",
32
+ "variant-borderless": "awsui_variant-borderless_wih1l_c80nw_288",
33
+ "footer-wrapper": "awsui_footer-wrapper_wih1l_c80nw_293",
34
+ "footer": "awsui_footer_wih1l_c80nw_293",
35
+ "footer-with-pagination": "awsui_footer-with-pagination_wih1l_c80nw_301",
36
+ "footer-pagination": "awsui_footer-pagination_wih1l_c80nw_309",
37
+ "thead-active": "awsui_thead-active_wih1l_c80nw_313",
38
+ "row": "awsui_row_wih1l_c80nw_314",
39
+ "row-selected": "awsui_row-selected_wih1l_c80nw_315"
40
40
  };
41
41
 
@@ -1 +1 @@
1
- {"version":3,"file":"grid-navigation.d.ts","sourceRoot":"lib/default/","sources":["table/table-role/grid-navigation.tsx"],"names":[],"mappings":";AAWA,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":"lib/default/","sources":["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"}
@@ -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, } from './utils';
5
+ import { defaultIsSuppressed, findTableRowByAriaRowIndex, findTableRowCellByAriaColIndex, getClosestCell, isElementDisabled, } 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';
@@ -51,18 +51,21 @@ class GridNavigationProcessor {
51
51
  this._table = null;
52
52
  // State
53
53
  this.focusedCell = null;
54
- this.focusables = new Map();
54
+ this.focusables = new Set();
55
55
  this.focusHandlers = new Map();
56
+ this.focusablesState = new WeakMap();
56
57
  this.focusTarget = null;
57
- this.registerFocusable = (focusable, changeHandler) => {
58
- this.focusables.set(focusable, false);
59
- this.focusHandlers.set(focusable, changeHandler);
60
- const isFocusable = this.focusTarget === focusable || this.isSuppressed(focusable);
61
- if (isFocusable) {
62
- this.focusables.set(focusable, isFocusable);
63
- changeHandler(isFocusable);
58
+ this.registerFocusable = (focusableElement, changeHandler) => {
59
+ var _a;
60
+ this.focusables.add(focusableElement);
61
+ this.focusHandlers.set(focusableElement, changeHandler);
62
+ const isFocusable = (_a = this.focusablesState.get(focusableElement)) !== null && _a !== void 0 ? _a : false;
63
+ const newIsFocusable = this.focusTarget === focusableElement || this.isSuppressed(focusableElement);
64
+ if (newIsFocusable !== isFocusable) {
65
+ this.focusablesState.set(focusableElement, newIsFocusable);
66
+ changeHandler(newIsFocusable);
64
67
  }
65
- return () => this.unregisterFocusable(focusable);
68
+ return () => this.unregisterFocusable(focusableElement);
66
69
  };
67
70
  this.unregisterFocusable = (focusable) => {
68
71
  this.focusables.delete(focusable);
@@ -111,8 +114,6 @@ class GridNavigationProcessor {
111
114
  return;
112
115
  }
113
116
  const from = this.focusedCell;
114
- const minExtreme = Number.NEGATIVE_INFINITY;
115
- const maxExtreme = Number.POSITIVE_INFINITY;
116
117
  if (this.isSuppressed(document.activeElement) || !this.isRegistered(document.activeElement)) {
117
118
  return;
118
119
  }
@@ -137,16 +138,16 @@ class GridNavigationProcessor {
137
138
  return this.moveFocusBy(from, { y: this.pageSize, x: 0 });
138
139
  case KeyCode.home:
139
140
  event.preventDefault();
140
- return this.moveFocusBy(from, { y: 0, x: minExtreme });
141
+ return this.moveFocusBy(from, { y: 0, x: -Infinity });
141
142
  case KeyCode.end:
142
143
  event.preventDefault();
143
- return this.moveFocusBy(from, { y: 0, x: maxExtreme });
144
+ return this.moveFocusBy(from, { y: 0, x: Infinity });
144
145
  case -KeyCode.home:
145
146
  event.preventDefault();
146
- return this.moveFocusBy(from, { y: minExtreme, x: minExtreme });
147
+ return this.moveFocusBy(from, { y: -Infinity, x: -Infinity });
147
148
  case -KeyCode.end:
148
149
  event.preventDefault();
149
- return this.moveFocusBy(from, { y: maxExtreme, x: maxExtreme });
150
+ return this.moveFocusBy(from, { y: Infinity, x: Infinity });
150
151
  default:
151
152
  return;
152
153
  }
@@ -162,7 +163,7 @@ class GridNavigationProcessor {
162
163
  this.table.removeEventListener('focusin', this.onFocusin);
163
164
  this.table.removeEventListener('focusout', this.onFocusout);
164
165
  this.table.removeEventListener('keydown', this.onKeydown);
165
- [...this.focusables.keys()].forEach(this.unregisterFocusable);
166
+ this.focusables.forEach(this.unregisterFocusable);
166
167
  };
167
168
  }
168
169
  cleanup() {
@@ -196,16 +197,22 @@ class GridNavigationProcessor {
196
197
  (_a = this.getNextFocusable(cell, delta)) === null || _a === void 0 ? void 0 : _a.focus();
197
198
  }
198
199
  updateFocusTarget() {
200
+ var _a;
199
201
  this.focusTarget = this.getSingleFocusable();
200
- for (const [focusableElement, isFocusable] of this.focusables) {
202
+ for (const focusableElement of this.focusables) {
203
+ const isFocusable = (_a = this.focusablesState.get(focusableElement)) !== null && _a !== void 0 ? _a : false;
201
204
  const newIsFocusable = this.focusTarget === focusableElement || this.isSuppressed(focusableElement);
202
205
  if (newIsFocusable !== isFocusable) {
203
- this.focusables.set(focusableElement, newIsFocusable);
206
+ this.focusablesState.set(focusableElement, newIsFocusable);
204
207
  this.focusHandlers.get(focusableElement)(newIsFocusable);
205
208
  }
206
209
  }
207
210
  }
208
211
  isSuppressed(element) {
212
+ // Omit calculation as irrelevant until the table receives focus.
213
+ if (!this.focusedCell) {
214
+ return false;
215
+ }
209
216
  return !element || defaultIsSuppressed(element);
210
217
  }
211
218
  isRegistered(element) {
@@ -255,11 +262,18 @@ class GridNavigationProcessor {
255
262
  if (targetCell === cellElement && delta.x !== 0) {
256
263
  return null;
257
264
  }
258
- // Return cell interactive content or the cell itself.
259
265
  const targetCellFocusables = this.getFocusablesFrom(targetCell);
260
- const focusIndex = delta.x < 0 ? targetCellFocusables.length - 1 : delta.x > 0 ? 0 : from.elementIndex;
261
- const focusTarget = (_a = targetCellFocusables[focusIndex]) !== null && _a !== void 0 ? _a : targetCell;
262
- return focusTarget;
266
+ // When delta.x = 0 keep element index if possible.
267
+ let focusIndex = from.elementIndex;
268
+ // Use first element index when moving to the right or to extreme left.
269
+ if ((isFinite(delta.x) && delta.x > 0) || delta.x === -Infinity) {
270
+ focusIndex = 0;
271
+ }
272
+ // Use last element index when moving to the left or to extreme right.
273
+ if ((isFinite(delta.x) && delta.x < 0) || delta.x === Infinity) {
274
+ focusIndex = targetCellFocusables.length - 1;
275
+ }
276
+ return (_a = targetCellFocusables[focusIndex]) !== null && _a !== void 0 ? _a : targetCell;
263
277
  }
264
278
  getSingleFocusable() {
265
279
  var _a;
@@ -275,7 +289,7 @@ class GridNavigationProcessor {
275
289
  return focusTarget;
276
290
  }
277
291
  getFocusablesFrom(target) {
278
- return getAllFocusables(target).filter(el => this.focusables.has(el));
292
+ return getAllFocusables(target).filter(el => this.focusables.has(el) && !isElementDisabled(el));
279
293
  }
280
294
  }
281
295
  //# sourceMappingURL=grid-navigation.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"grid-navigation.js","sourceRoot":"lib/default/","sources":["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} 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 focusables = new Map<Element, boolean>();\n private focusHandlers = new Map<Element, FocusableChangeHandler>();\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.keys()].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 = (focusable: Element, changeHandler: FocusableChangeHandler) => {\n this.focusables.set(focusable, false);\n this.focusHandlers.set(focusable, changeHandler);\n const isFocusable = this.focusTarget === focusable || this.isSuppressed(focusable);\n if (isFocusable) {\n this.focusables.set(focusable, isFocusable);\n changeHandler(isFocusable);\n }\n return () => this.unregisterFocusable(focusable);\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 cellElement = getClosestCell(this.focusedCell.element);\n if (this.focusedCell.element === cellElement) {\n this.getFocusablesFrom(cellElement)[0]?.focus();\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 const minExtreme = Number.NEGATIVE_INFINITY;\n const maxExtreme = Number.POSITIVE_INFINITY;\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: minExtreme });\n\n case KeyCode.end:\n event.preventDefault();\n return this.moveFocusBy(from, { y: 0, x: maxExtreme });\n\n case -KeyCode.home:\n event.preventDefault();\n return this.moveFocusBy(from, { y: minExtreme, x: minExtreme });\n\n case -KeyCode.end:\n event.preventDefault();\n return this.moveFocusBy(from, { y: maxExtreme, x: maxExtreme });\n\n default:\n return;\n }\n };\n\n private moveFocusBy(cell: FocusedCell, delta: { x: number; y: number }) {\n this.getNextFocusable(cell, delta)?.focus();\n }\n\n private updateFocusTarget() {\n this.focusTarget = this.getSingleFocusable();\n for (const [focusableElement, isFocusable] of this.focusables) {\n const newIsFocusable = this.focusTarget === focusableElement || this.isSuppressed(focusableElement);\n if (newIsFocusable !== isFocusable) {\n this.focusables.set(focusableElement, newIsFocusable);\n this.focusHandlers.get(focusableElement)!(newIsFocusable);\n }\n }\n }\n\n private isSuppressed(element: null | Element) {\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 this.focusedCell = { rowIndex, colIndex, element: focusedElement, elementIndex };\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 if (delta.x && from.elementIndex !== -1 && 0 <= nextElementIndex && nextElementIndex < cellFocusables.length) {\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 // Return cell interactive content or the cell itself.\n const targetCellFocusables = this.getFocusablesFrom(targetCell);\n const focusIndex = delta.x < 0 ? targetCellFocusables.length - 1 : delta.x > 0 ? 0 : from.elementIndex;\n const focusTarget = targetCellFocusables[focusIndex] ?? targetCell;\n return focusTarget;\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));\n }\n}\n"]}
1
+ {"version":3,"file":"grid-navigation.js","sourceRoot":"lib/default/","sources":["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 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: Element, 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 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 cellElement = getClosestCell(this.focusedCell.element);\n if (this.focusedCell.element === cellElement) {\n this.getFocusablesFrom(cellElement)[0]?.focus();\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 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 this.focusedCell = { rowIndex, colIndex, element: focusedElement, elementIndex };\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 if (delta.x && from.elementIndex !== -1 && 0 <= nextElementIndex && nextElementIndex < cellFocusables.length) {\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 +1 @@
1
- {"version":3,"file":"table-role-helper.d.ts","sourceRoot":"lib/default/","sources":["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;IAAE,SAAS,EAAE,SAAS,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,uDAa5G;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE;IAClD,SAAS,EAAE,SAAS,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B,0DAeA;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE;IAAE,SAAS,EAAE,SAAS,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,OAAO,CAAA;CAAE,0DAa/G"}
1
+ {"version":3,"file":"table-role-helper.d.ts","sourceRoot":"lib/default/","sources":["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;IAAE,SAAS,EAAE,SAAS,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,uDAa5G;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"}
@@ -30,7 +30,7 @@ export function getTableRoleProps(options) {
30
30
  export function getTableWrapperRoleProps(options) {
31
31
  const nativeProps = {};
32
32
  // When the table is scrollable, the wrapper is made focusable so that keyboard users can scroll it horizontally with arrow keys.
33
- if (options.isScrollable && options.tableRole !== 'grid') {
33
+ if (options.isScrollable) {
34
34
  nativeProps.role = 'region';
35
35
  nativeProps.tabIndex = 0;
36
36
  nativeProps['aria-label'] = options.ariaLabel;
@@ -61,7 +61,6 @@ export function getTableColHeaderRoleProps(options) {
61
61
  const nativeProps = {};
62
62
  nativeProps.scope = 'col';
63
63
  if (options.tableRole === 'grid') {
64
- nativeProps.tabIndex = -1;
65
64
  nativeProps['aria-colindex'] = options.colIndex + 1;
66
65
  }
67
66
  if (options.sortingStatus) {
@@ -72,7 +71,6 @@ export function getTableColHeaderRoleProps(options) {
72
71
  export function getTableCellRoleProps(options) {
73
72
  const nativeProps = {};
74
73
  if (options.tableRole === 'grid') {
75
- nativeProps.tabIndex = -1;
76
74
  nativeProps['aria-colindex'] = options.colIndex + 1;
77
75
  }
78
76
  if (options.isRowHeader) {