@cloudscape-design/components 3.0.1333 → 3.0.1335

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 (361) hide show
  1. package/alert/styles.css.js +27 -27
  2. package/alert/styles.scoped.css +50 -50
  3. package/alert/styles.selectors.js +27 -27
  4. package/annotation-context/annotation/styles.css.js +13 -13
  5. package/annotation-context/annotation/styles.scoped.css +21 -21
  6. package/annotation-context/annotation/styles.selectors.js +13 -13
  7. package/app-layout/classic.d.ts +1 -0
  8. package/app-layout/classic.d.ts.map +1 -1
  9. package/app-layout/index.d.ts.map +1 -1
  10. package/app-layout/index.js +2 -1
  11. package/app-layout/index.js.map +1 -1
  12. package/app-layout/interfaces.d.ts +16 -1
  13. package/app-layout/interfaces.d.ts.map +1 -1
  14. package/app-layout/interfaces.js.map +1 -1
  15. package/app-layout/internal.d.ts +1 -0
  16. package/app-layout/internal.d.ts.map +1 -1
  17. package/app-layout/notifications/styles.css.js +3 -3
  18. package/app-layout/notifications/styles.scoped.css +7 -7
  19. package/app-layout/notifications/styles.selectors.js +3 -3
  20. package/app-layout/visual-refresh/index.d.ts +1 -0
  21. package/app-layout/visual-refresh/index.d.ts.map +1 -1
  22. package/app-layout/visual-refresh/styles.css.js +86 -86
  23. package/app-layout/visual-refresh/styles.scoped.css +262 -262
  24. package/app-layout/visual-refresh/styles.selectors.js +86 -86
  25. package/app-layout/visual-refresh-toolbar/compute-layout.d.ts +4 -0
  26. package/app-layout/visual-refresh-toolbar/compute-layout.d.ts.map +1 -1
  27. package/app-layout/visual-refresh-toolbar/compute-layout.js +2 -2
  28. package/app-layout/visual-refresh-toolbar/compute-layout.js.map +1 -1
  29. package/app-layout/visual-refresh-toolbar/drawer/styles.css.js +32 -32
  30. package/app-layout/visual-refresh-toolbar/drawer/styles.scoped.css +93 -93
  31. package/app-layout/visual-refresh-toolbar/drawer/styles.selectors.js +32 -32
  32. package/app-layout/visual-refresh-toolbar/interfaces.d.ts +2 -0
  33. package/app-layout/visual-refresh-toolbar/interfaces.d.ts.map +1 -1
  34. package/app-layout/visual-refresh-toolbar/interfaces.js.map +1 -1
  35. package/app-layout/visual-refresh-toolbar/navigation/index.d.ts +3 -1
  36. package/app-layout/visual-refresh-toolbar/navigation/index.d.ts.map +1 -1
  37. package/app-layout/visual-refresh-toolbar/navigation/index.js +11 -5
  38. package/app-layout/visual-refresh-toolbar/navigation/index.js.map +1 -1
  39. package/app-layout/visual-refresh-toolbar/navigation/styles.css.js +6 -4
  40. package/app-layout/visual-refresh-toolbar/navigation/styles.scoped.css +34 -15
  41. package/app-layout/visual-refresh-toolbar/navigation/styles.selectors.js +6 -4
  42. package/app-layout/visual-refresh-toolbar/skeleton/skeleton-parts.d.ts.map +1 -1
  43. package/app-layout/visual-refresh-toolbar/skeleton/skeleton-parts.js +4 -2
  44. package/app-layout/visual-refresh-toolbar/skeleton/skeleton-parts.js.map +1 -1
  45. package/app-layout/visual-refresh-toolbar/skeleton/styles.css.js +30 -29
  46. package/app-layout/visual-refresh-toolbar/skeleton/styles.scoped.css +72 -67
  47. package/app-layout/visual-refresh-toolbar/skeleton/styles.selectors.js +30 -29
  48. package/app-layout/visual-refresh-toolbar/state/interfaces.d.ts +1 -0
  49. package/app-layout/visual-refresh-toolbar/state/interfaces.d.ts.map +1 -1
  50. package/app-layout/visual-refresh-toolbar/state/interfaces.js.map +1 -1
  51. package/app-layout/visual-refresh-toolbar/state/props-merger.d.ts.map +1 -1
  52. package/app-layout/visual-refresh-toolbar/state/props-merger.js +2 -0
  53. package/app-layout/visual-refresh-toolbar/state/props-merger.js.map +1 -1
  54. package/app-layout/visual-refresh-toolbar/state/use-app-layout.d.ts +2 -0
  55. package/app-layout/visual-refresh-toolbar/state/use-app-layout.d.ts.map +1 -1
  56. package/app-layout/visual-refresh-toolbar/state/use-app-layout.js +26 -3
  57. package/app-layout/visual-refresh-toolbar/state/use-app-layout.js.map +1 -1
  58. package/app-layout/visual-refresh-toolbar/state/use-skeleton-slots-attributes.d.ts.map +1 -1
  59. package/app-layout/visual-refresh-toolbar/state/use-skeleton-slots-attributes.js +2 -1
  60. package/app-layout/visual-refresh-toolbar/state/use-skeleton-slots-attributes.js.map +1 -1
  61. package/app-layout/visual-refresh-toolbar/toolbar/index.d.ts +1 -0
  62. package/app-layout/visual-refresh-toolbar/toolbar/index.d.ts.map +1 -1
  63. package/app-layout/visual-refresh-toolbar/toolbar/index.js.map +1 -1
  64. package/app-layout/visual-refresh-toolbar/toolbar/styles.css.js +14 -14
  65. package/app-layout/visual-refresh-toolbar/toolbar/styles.scoped.css +36 -36
  66. package/app-layout/visual-refresh-toolbar/toolbar/styles.selectors.js +14 -14
  67. package/app-layout/visual-refresh-toolbar/widget-areas/before-main-slot.d.ts.map +1 -1
  68. package/app-layout/visual-refresh-toolbar/widget-areas/before-main-slot.js +3 -3
  69. package/app-layout/visual-refresh-toolbar/widget-areas/before-main-slot.js.map +1 -1
  70. package/app-layout-toolbar/index.d.ts.map +1 -1
  71. package/app-layout-toolbar/index.js +2 -1
  72. package/app-layout-toolbar/index.js.map +1 -1
  73. package/attribute-editor/styles.css.js +15 -15
  74. package/attribute-editor/styles.scoped.css +29 -29
  75. package/attribute-editor/styles.selectors.js +15 -15
  76. package/box/interfaces.d.ts +1 -1
  77. package/box/interfaces.d.ts.map +1 -1
  78. package/box/interfaces.js.map +1 -1
  79. package/box/styles.css.js +220 -224
  80. package/box/styles.scoped.css +293 -313
  81. package/box/styles.selectors.js +220 -224
  82. package/breadcrumb-group/item/styles.css.js +7 -7
  83. package/breadcrumb-group/item/styles.scoped.css +30 -30
  84. package/breadcrumb-group/item/styles.selectors.js +7 -7
  85. package/button/internal.d.ts +2 -0
  86. package/button/internal.d.ts.map +1 -1
  87. package/button/internal.js +2 -1
  88. package/button/internal.js.map +1 -1
  89. package/button/styles.css.js +23 -22
  90. package/button/styles.scoped.css +261 -256
  91. package/button/styles.selectors.js +23 -22
  92. package/button-dropdown/internal-interfaces.d.ts +11 -0
  93. package/button-dropdown/internal-interfaces.d.ts.map +1 -1
  94. package/button-dropdown/internal-interfaces.js.map +1 -1
  95. package/button-dropdown/internal.d.ts.map +1 -1
  96. package/button-dropdown/internal.js +3 -2
  97. package/button-dropdown/internal.js.map +1 -1
  98. package/button-dropdown/item-element/styles.css.js +21 -21
  99. package/button-dropdown/item-element/styles.scoped.css +37 -37
  100. package/button-dropdown/item-element/styles.selectors.js +21 -21
  101. package/button-group/copy-to-clipboard-item.d.ts +15 -0
  102. package/button-group/copy-to-clipboard-item.d.ts.map +1 -0
  103. package/button-group/copy-to-clipboard-item.js +38 -0
  104. package/button-group/copy-to-clipboard-item.js.map +1 -0
  105. package/button-group/index.d.ts.map +1 -1
  106. package/button-group/index.js +9 -1
  107. package/button-group/index.js.map +1 -1
  108. package/button-group/interfaces.d.ts +38 -2
  109. package/button-group/interfaces.d.ts.map +1 -1
  110. package/button-group/interfaces.js.map +1 -1
  111. package/button-group/internal-interfaces.d.ts +1 -1
  112. package/button-group/internal-interfaces.d.ts.map +1 -1
  113. package/button-group/internal-interfaces.js.map +1 -1
  114. package/button-group/internal.d.ts.map +1 -1
  115. package/button-group/internal.js +2 -2
  116. package/button-group/internal.js.map +1 -1
  117. package/button-group/item-element.d.ts +2 -0
  118. package/button-group/item-element.d.ts.map +1 -1
  119. package/button-group/item-element.js +13 -3
  120. package/button-group/item-element.js.map +1 -1
  121. package/checkbox/styles.css.js +3 -3
  122. package/checkbox/styles.scoped.css +11 -11
  123. package/checkbox/styles.selectors.js +3 -3
  124. package/code-editor/styles.css.js +33 -33
  125. package/code-editor/styles.scoped.css +139 -139
  126. package/code-editor/styles.selectors.js +33 -33
  127. package/content-layout/styles.css.js +14 -14
  128. package/content-layout/styles.scoped.css +27 -27
  129. package/content-layout/styles.selectors.js +14 -14
  130. package/dropdown/styles.css.js +20 -20
  131. package/dropdown/styles.scoped.css +49 -49
  132. package/dropdown/styles.selectors.js +20 -20
  133. package/file-token-group/styles.css.js +23 -23
  134. package/file-token-group/styles.scoped.css +36 -36
  135. package/file-token-group/styles.selectors.js +23 -23
  136. package/flashbar/styles.css.js +50 -50
  137. package/flashbar/styles.scoped.css +192 -192
  138. package/flashbar/styles.selectors.js +50 -50
  139. package/help-panel/styles.css.js +6 -6
  140. package/help-panel/styles.scoped.css +72 -72
  141. package/help-panel/styles.selectors.js +6 -6
  142. package/i18n/messages/all.all.js +1 -1
  143. package/i18n/messages/all.all.json +1 -1
  144. package/i18n/messages/all.ar.js +1 -1
  145. package/i18n/messages/all.ar.json +1 -1
  146. package/i18n/messages/all.de.js +1 -1
  147. package/i18n/messages/all.de.json +1 -1
  148. package/i18n/messages/all.en-GB.js +1 -1
  149. package/i18n/messages/all.en-GB.json +1 -1
  150. package/i18n/messages/all.en.js +1 -1
  151. package/i18n/messages/all.en.json +1 -1
  152. package/i18n/messages/all.es.js +1 -1
  153. package/i18n/messages/all.es.json +1 -1
  154. package/i18n/messages/all.fr.js +1 -1
  155. package/i18n/messages/all.fr.json +1 -1
  156. package/i18n/messages/all.id.js +1 -1
  157. package/i18n/messages/all.id.json +1 -1
  158. package/i18n/messages/all.it.js +1 -1
  159. package/i18n/messages/all.it.json +1 -1
  160. package/i18n/messages/all.ja.js +1 -1
  161. package/i18n/messages/all.ja.json +1 -1
  162. package/i18n/messages/all.ko.js +1 -1
  163. package/i18n/messages/all.ko.json +1 -1
  164. package/i18n/messages/all.pt-BR.js +1 -1
  165. package/i18n/messages/all.pt-BR.json +1 -1
  166. package/i18n/messages/all.tr.js +1 -1
  167. package/i18n/messages/all.tr.json +1 -1
  168. package/i18n/messages/all.zh-CN.js +1 -1
  169. package/i18n/messages/all.zh-CN.json +1 -1
  170. package/i18n/messages/all.zh-TW.js +1 -1
  171. package/i18n/messages/all.zh-TW.json +1 -1
  172. package/i18n/messages-types.d.ts +19 -0
  173. package/i18n/messages-types.d.ts.map +1 -1
  174. package/i18n/messages-types.js.map +1 -1
  175. package/input/styles.css.js +18 -18
  176. package/input/styles.scoped.css +82 -82
  177. package/input/styles.selectors.js +18 -18
  178. package/internal/base-component/styles.scoped.css +155 -3
  179. package/internal/components/abstract-switch/index.d.ts.map +1 -1
  180. package/internal/components/abstract-switch/index.js +7 -1
  181. package/internal/components/abstract-switch/index.js.map +1 -1
  182. package/internal/components/drag-handle-wrapper/styles.css.js +30 -30
  183. package/internal/components/drag-handle-wrapper/styles.scoped.css +58 -58
  184. package/internal/components/drag-handle-wrapper/styles.selectors.js +30 -30
  185. package/internal/components/option/styles.css.js +17 -17
  186. package/internal/components/option/styles.scoped.css +31 -31
  187. package/internal/components/option/styles.selectors.js +17 -17
  188. package/internal/components/radio-button/styles.css.js +7 -7
  189. package/internal/components/radio-button/styles.scoped.css +18 -18
  190. package/internal/components/radio-button/styles.selectors.js +7 -7
  191. package/internal/components/selectable-item/styles.css.js +22 -22
  192. package/internal/components/selectable-item/styles.scoped.css +57 -57
  193. package/internal/components/selectable-item/styles.selectors.js +22 -22
  194. package/internal/components/token-list/styles.css.js +10 -10
  195. package/internal/components/token-list/styles.scoped.css +25 -25
  196. package/internal/components/token-list/styles.selectors.js +10 -10
  197. package/internal/environment.js +2 -2
  198. package/internal/environment.json +2 -2
  199. package/internal/generated/custom-css-properties/index.d.ts +1 -0
  200. package/internal/generated/custom-css-properties/index.d.ts.map +1 -1
  201. package/internal/generated/custom-css-properties/index.js +173 -172
  202. package/internal/generated/custom-css-properties/index.js.map +1 -1
  203. package/internal/generated/styles/tokens.d.ts +37 -38
  204. package/internal/generated/styles/tokens.js +37 -38
  205. package/internal/generated/theming/index.cjs +625 -774
  206. package/internal/generated/theming/index.cjs.d.ts +63 -9
  207. package/internal/generated/theming/index.d.ts +63 -9
  208. package/internal/generated/theming/index.js +625 -774
  209. package/internal/manifest.json +1 -1
  210. package/item-card/styles.css.js +14 -14
  211. package/item-card/styles.scoped.css +63 -63
  212. package/item-card/styles.selectors.js +14 -14
  213. package/link/styles.css.js +21 -21
  214. package/link/styles.scoped.css +117 -117
  215. package/link/styles.selectors.js +21 -21
  216. package/manifest.json +2 -2
  217. package/modal/styles.css.js +31 -31
  218. package/modal/styles.scoped.css +48 -48
  219. package/modal/styles.selectors.js +31 -31
  220. package/package.json +95 -1
  221. package/progress-bar/styles.css.js +18 -18
  222. package/progress-bar/styles.scoped.css +48 -48
  223. package/progress-bar/styles.selectors.js +18 -18
  224. package/prompt-input/styles.css.js +26 -26
  225. package/prompt-input/styles.scoped.css +105 -105
  226. package/prompt-input/styles.selectors.js +26 -26
  227. package/segmented-control/styles.css.js +16 -16
  228. package/segmented-control/styles.scoped.css +46 -46
  229. package/segmented-control/styles.selectors.js +16 -16
  230. package/side-navigation/implementation.d.ts.map +1 -1
  231. package/side-navigation/implementation.js +6 -4
  232. package/side-navigation/implementation.js.map +1 -1
  233. package/side-navigation/parts.d.ts +7 -1
  234. package/side-navigation/parts.d.ts.map +1 -1
  235. package/side-navigation/parts.js +45 -32
  236. package/side-navigation/parts.js.map +1 -1
  237. package/side-navigation/styles.css.js +48 -47
  238. package/side-navigation/styles.scoped.css +79 -78
  239. package/side-navigation/styles.selectors.js +48 -47
  240. package/side-navigation/util.d.ts +1 -0
  241. package/side-navigation/util.d.ts.map +1 -1
  242. package/side-navigation/util.js +5 -0
  243. package/side-navigation/util.js.map +1 -1
  244. package/slider/styles.css.js +26 -26
  245. package/slider/styles.scoped.css +165 -165
  246. package/slider/styles.selectors.js +26 -26
  247. package/spinner/styles.css.js +13 -13
  248. package/spinner/styles.scoped.css +39 -39
  249. package/spinner/styles.selectors.js +13 -13
  250. package/status-indicator/internal-interfaces.d.ts +2 -0
  251. package/status-indicator/internal-interfaces.d.ts.map +1 -0
  252. package/status-indicator/internal-interfaces.js +2 -0
  253. package/status-indicator/internal-interfaces.js.map +1 -0
  254. package/status-indicator/internal.d.ts +6 -2
  255. package/status-indicator/internal.d.ts.map +1 -1
  256. package/status-indicator/internal.js +1 -0
  257. package/status-indicator/internal.js.map +1 -1
  258. package/status-indicator/styles.css.js +25 -24
  259. package/status-indicator/styles.scoped.css +59 -53
  260. package/status-indicator/styles.selectors.js +25 -24
  261. package/steps/interfaces.d.ts +4 -2
  262. package/steps/interfaces.d.ts.map +1 -1
  263. package/steps/interfaces.js.map +1 -1
  264. package/steps/internal.d.ts.map +1 -1
  265. package/steps/internal.js +36 -12
  266. package/steps/internal.js.map +1 -1
  267. package/steps/styles.css.js +17 -13
  268. package/steps/styles.scoped.css +99 -42
  269. package/steps/styles.selectors.js +17 -13
  270. package/table/clear-sort.d.ts +12 -0
  271. package/table/clear-sort.d.ts.map +1 -0
  272. package/table/clear-sort.js +15 -0
  273. package/table/clear-sort.js.map +1 -0
  274. package/table/header-cell/index.d.ts +7 -1
  275. package/table/header-cell/index.d.ts.map +1 -1
  276. package/table/header-cell/index.js +122 -33
  277. package/table/header-cell/index.js.map +1 -1
  278. package/table/header-cell/sort-menu.d.ts +21 -0
  279. package/table/header-cell/sort-menu.d.ts.map +1 -0
  280. package/table/header-cell/sort-menu.js +50 -0
  281. package/table/header-cell/sort-menu.js.map +1 -0
  282. package/table/header-cell/styles.css.js +38 -33
  283. package/table/header-cell/styles.scoped.css +101 -76
  284. package/table/header-cell/styles.selectors.js +38 -33
  285. package/table/header-cell/th-element.d.ts +8 -0
  286. package/table/header-cell/th-element.d.ts.map +1 -1
  287. package/table/header-cell/th-element.js +6 -2
  288. package/table/header-cell/th-element.js.map +1 -1
  289. package/table/index.d.ts.map +1 -1
  290. package/table/index.js +1 -0
  291. package/table/index.js.map +1 -1
  292. package/table/interfaces.d.ts +67 -1
  293. package/table/interfaces.d.ts.map +1 -1
  294. package/table/interfaces.js.map +1 -1
  295. package/table/internal.d.ts.map +1 -1
  296. package/table/internal.js +21 -3
  297. package/table/internal.js.map +1 -1
  298. package/table/multi-column-sort/live-announcement.d.ts +20 -0
  299. package/table/multi-column-sort/live-announcement.d.ts.map +1 -0
  300. package/table/multi-column-sort/live-announcement.js +68 -0
  301. package/table/multi-column-sort/live-announcement.js.map +1 -0
  302. package/table/multi-column-sort/utils.d.ts +52 -0
  303. package/table/multi-column-sort/utils.d.ts.map +1 -0
  304. package/table/multi-column-sort/utils.js +76 -0
  305. package/table/multi-column-sort/utils.js.map +1 -0
  306. package/table/styles.css.js +37 -36
  307. package/table/styles.scoped.css +46 -43
  308. package/table/styles.selectors.js +37 -36
  309. package/table/thead.d.ts +3 -0
  310. package/table/thead.d.ts.map +1 -1
  311. package/table/thead.js +3 -3
  312. package/table/thead.js.map +1 -1
  313. package/table/tools-header.d.ts +2 -0
  314. package/table/tools-header.d.ts.map +1 -1
  315. package/table/tools-header.js +4 -3
  316. package/table/tools-header.js.map +1 -1
  317. package/tabs/styles.css.js +30 -30
  318. package/tabs/styles.scoped.css +76 -76
  319. package/tabs/styles.selectors.js +30 -30
  320. package/tag-editor/styles.css.js +3 -3
  321. package/tag-editor/styles.scoped.css +13 -13
  322. package/tag-editor/styles.selectors.js +3 -3
  323. package/test-utils/dom/button-group/index.d.ts +4 -0
  324. package/test-utils/dom/button-group/index.js +8 -0
  325. package/test-utils/dom/button-group/index.js.map +1 -1
  326. package/test-utils/dom/steps/index.d.ts +4 -0
  327. package/test-utils/dom/steps/index.js +6 -0
  328. package/test-utils/dom/steps/index.js.map +1 -1
  329. package/test-utils/dom/table/index.d.ts +77 -0
  330. package/test-utils/dom/table/index.js +87 -2
  331. package/test-utils/dom/table/index.js.map +1 -1
  332. package/test-utils/selectors/button-group/index.d.ts +4 -0
  333. package/test-utils/selectors/button-group/index.js +8 -0
  334. package/test-utils/selectors/button-group/index.js.map +1 -1
  335. package/test-utils/selectors/steps/index.d.ts +4 -0
  336. package/test-utils/selectors/steps/index.js +6 -0
  337. package/test-utils/selectors/steps/index.js.map +1 -1
  338. package/test-utils/selectors/table/index.d.ts +77 -0
  339. package/test-utils/selectors/table/index.js +87 -2
  340. package/test-utils/selectors/table/index.js.map +1 -1
  341. package/text-content/styles.css.js +1 -1
  342. package/text-content/styles.scoped.css +66 -66
  343. package/text-content/styles.selectors.js +1 -1
  344. package/textarea/styles.css.js +5 -5
  345. package/textarea/styles.scoped.css +45 -45
  346. package/textarea/styles.selectors.js +5 -5
  347. package/toggle/styles.css.js +10 -10
  348. package/toggle/styles.scoped.css +23 -23
  349. package/toggle/styles.selectors.js +10 -10
  350. package/token/styles.css.js +14 -14
  351. package/token/styles.scoped.css +47 -47
  352. package/token/styles.selectors.js +14 -14
  353. package/tooltip/internal.d.ts.map +1 -1
  354. package/tooltip/internal.js +2 -1
  355. package/tooltip/internal.js.map +1 -1
  356. package/tooltip/styles.css.js +7 -0
  357. package/tooltip/styles.scoped.css +165 -0
  358. package/tooltip/styles.selectors.js +8 -0
  359. package/top-navigation/use-top-navigation.d.ts.map +1 -1
  360. package/top-navigation/use-top-navigation.js +2 -5
  361. package/top-navigation/use-top-navigation.js.map +1 -1
@@ -178,15 +178,19 @@
178
178
  */
179
179
  /* Style used for links in slots/components that are text heavy, to help links stand out among
180
180
  surrounding text. (WCAG F73) https://www.w3.org/WAI/WCAG21/Techniques/failures/F73#description */
181
- .awsui_connector_gxp9y_1jjrl_181:not(#\9) {
181
+ .awsui_connector_gxp9y_1jagc_181:not(#\9) {
182
182
  background-color: var(--color-border-divider-default-nr68jt, #c6c6cd);
183
183
  }
184
184
 
185
- .awsui_connector_gxp9y_1jjrl_181.awsui_connector-hidden_gxp9y_1jjrl_185:not(#\9) {
185
+ .awsui_connector_gxp9y_1jagc_181.awsui_connector-hidden_gxp9y_1jagc_185:not(#\9) {
186
186
  background-color: transparent;
187
187
  }
188
188
 
189
- .awsui_root_gxp9y_1jjrl_189:not(#\9) {
189
+ .awsui_header_gxp9y_1jagc_189:not(#\9) {
190
+ /* used in test-utils */
191
+ }
192
+
193
+ .awsui_root_gxp9y_1jagc_193:not(#\9) {
190
194
  border-collapse: separate;
191
195
  border-spacing: 0;
192
196
  box-sizing: border-box;
@@ -219,66 +223,61 @@ surrounding text. (WCAG F73) https://www.w3.org/WAI/WCAG21/Techniques/failures/F
219
223
  min-inline-size: 0;
220
224
  word-break: break-word;
221
225
  }
222
- .awsui_root_gxp9y_1jjrl_189 > .awsui_list_gxp9y_1jjrl_222:not(#\9) {
226
+ .awsui_root_gxp9y_1jagc_193 > .awsui_list_gxp9y_1jagc_226:not(#\9) {
223
227
  list-style: none;
224
228
  padding-inline-start: 0;
225
229
  margin-block: 0;
226
230
  }
227
- .awsui_root_gxp9y_1jjrl_189 > .awsui_list_gxp9y_1jjrl_222 > .awsui_container_gxp9y_1jjrl_227:not(#\9) {
231
+ .awsui_root_gxp9y_1jagc_193 > .awsui_list_gxp9y_1jagc_226 > .awsui_container_gxp9y_1jagc_231:not(#\9) {
228
232
  display: grid;
229
233
  grid-template-columns: var(--space-static-l-n53k41, 20px) 1fr;
230
234
  grid-template-rows: minmax(var(--space-static-l-n53k41, 20px), auto);
231
235
  }
232
- .awsui_root_gxp9y_1jjrl_189 > .awsui_list_gxp9y_1jjrl_222 > .awsui_container_gxp9y_1jjrl_227 > .awsui_header_gxp9y_1jjrl_232:not(#\9) {
236
+ .awsui_root_gxp9y_1jagc_193 > .awsui_list_gxp9y_1jagc_226 > .awsui_container_gxp9y_1jagc_231 > .awsui_annotation_gxp9y_1jagc_236:not(#\9) {
237
+ justify-self: flex-end;
238
+ min-inline-size: 0;
239
+ color: var(--color-text-status-inactive-gy7337, #656871);
240
+ }
241
+ .awsui_root_gxp9y_1jagc_193 > .awsui_list_gxp9y_1jagc_226 > .awsui_container_gxp9y_1jagc_231 > .awsui_step-layout_gxp9y_1jagc_241:not(#\9) {
233
242
  display: flex;
234
243
  gap: var(--space-xxs-hwfkai, 4px);
235
244
  grid-row: 1;
236
245
  grid-column: 1/span 2;
237
246
  }
238
- .awsui_root_gxp9y_1jjrl_189 > .awsui_list_gxp9y_1jjrl_222 > .awsui_container_gxp9y_1jjrl_227 > .awsui_details_gxp9y_1jjrl_238:not(#\9) {
247
+ .awsui_root_gxp9y_1jagc_193 > .awsui_list_gxp9y_1jagc_226 > .awsui_container_gxp9y_1jagc_231 > .awsui_details_gxp9y_1jagc_247:not(#\9) {
239
248
  align-items: center;
240
249
  grid-row: 2;
241
250
  grid-column: 2;
242
251
  margin-block-end: var(--space-static-xs-gnm0mz, 8px);
243
252
  }
244
- .awsui_root_gxp9y_1jjrl_189 > .awsui_list_gxp9y_1jjrl_222 > .awsui_container_gxp9y_1jjrl_227 > .awsui_connector_gxp9y_1jjrl_181:not(#\9) {
245
- grid-row: 2;
246
- grid-column: 1;
247
- margin-block: 0;
248
- border-block: 0;
249
- border-inline: 0;
250
- inline-size: var(--border-divider-list-width-tdfx1x, 1px);
251
- block-size: auto;
252
- min-block-size: var(--space-static-xs-gnm0mz, 8px);
253
- position: relative;
254
- inset-inline-end: var(--space-static-xxxs-yidks1, 2px);
255
- }
256
- .awsui_root_gxp9y_1jjrl_189 > .awsui_list_gxp9y_1jjrl_222 > :not(#\9):last-of-type > .awsui_connector_gxp9y_1jjrl_181 {
257
- display: none;
258
- }
259
- .awsui_root_gxp9y_1jjrl_189 > .awsui_list_gxp9y_1jjrl_222.awsui_custom_gxp9y_1jjrl_259 > .awsui_details_gxp9y_1jjrl_238:not(#\9) {
253
+ .awsui_root_gxp9y_1jagc_193 > .awsui_list_gxp9y_1jagc_226.awsui_custom_gxp9y_1jagc_253 > .awsui_details_gxp9y_1jagc_247:not(#\9) {
260
254
  margin-block-end: 0;
261
255
  }
262
256
 
263
- .awsui_horizontal_gxp9y_1jjrl_263 > .awsui_list_gxp9y_1jjrl_222:not(#\9) {
257
+ .awsui_horizontal_gxp9y_1jagc_257 > .awsui_list_gxp9y_1jagc_226:not(#\9) {
264
258
  display: grid;
265
259
  align-items: flex-start;
266
260
  grid-template-columns: repeat(auto-fit, minmax(0, 1fr));
261
+ grid-template-rows: auto minmax(var(--space-static-l-n53k41, 20px), auto) auto;
267
262
  grid-auto-flow: column;
268
263
  }
269
- .awsui_horizontal_gxp9y_1jjrl_263 > .awsui_list_gxp9y_1jjrl_222 > .awsui_container_gxp9y_1jjrl_227:not(#\9) {
270
- display: grid;
271
- grid-template-columns: var(--space-static-l-n53k41, 20px) 1fr;
272
- grid-template-rows: minmax(var(--space-static-l-n53k41, 20px), auto);
264
+ .awsui_horizontal_gxp9y_1jagc_257 > .awsui_list_gxp9y_1jagc_226 > .awsui_container_gxp9y_1jagc_231:not(#\9) {
265
+ grid-row: 1/-1;
266
+ grid-template-rows: subgrid;
273
267
  align-items: center;
274
268
  }
275
- .awsui_horizontal_gxp9y_1jjrl_263 > .awsui_list_gxp9y_1jjrl_222 > .awsui_container_gxp9y_1jjrl_227 > .awsui_header_gxp9y_1jjrl_232:not(#\9) {
276
- display: flex;
269
+ .awsui_horizontal_gxp9y_1jagc_257 > .awsui_list_gxp9y_1jagc_226 > .awsui_container_gxp9y_1jagc_231 > .awsui_annotation_gxp9y_1jagc_236:not(#\9) {
270
+ justify-self: flex-start;
271
+ align-self: flex-end;
277
272
  grid-row: 1;
278
273
  grid-column: 1/span 2;
274
+ padding-inline-end: var(--space-xs-ymlm0b, 8px);
275
+ }
276
+ .awsui_horizontal_gxp9y_1jagc_257 > .awsui_list_gxp9y_1jagc_226 > .awsui_container_gxp9y_1jagc_231 > .awsui_step-layout_gxp9y_1jagc_241:not(#\9) {
277
+ grid-row: 2;
279
278
  align-items: center;
280
279
  }
281
- .awsui_horizontal_gxp9y_1jjrl_263 > .awsui_list_gxp9y_1jjrl_222 > .awsui_container_gxp9y_1jjrl_227 > .awsui_header_gxp9y_1jjrl_232 > .awsui_connector_gxp9y_1jjrl_181:not(#\9) {
280
+ .awsui_horizontal_gxp9y_1jagc_257 > .awsui_list_gxp9y_1jagc_226 > .awsui_container_gxp9y_1jagc_231 > .awsui_step-layout_gxp9y_1jagc_241 > .awsui_connector_gxp9y_1jagc_181:not(#\9) {
282
281
  display: block;
283
282
  flex: 1;
284
283
  margin-block: 0;
@@ -291,27 +290,59 @@ surrounding text. (WCAG F73) https://www.w3.org/WAI/WCAG21/Techniques/failures/F
291
290
  min-inline-size: var(--space-static-xs-gnm0mz, 8px);
292
291
  margin-inline-end: var(--space-static-xxs-ns94dp, 4px);
293
292
  }
294
- .awsui_horizontal_gxp9y_1jjrl_263 > .awsui_list_gxp9y_1jjrl_222 > .awsui_container_gxp9y_1jjrl_227 > .awsui_horizontal-header_gxp9y_1jjrl_294:not(#\9) {
295
- grid-row: 2;
296
- grid-column: 1/span 3;
297
- padding-inline-end: var(--space-xs-ymlm0b, 8px);
298
- }
299
- .awsui_horizontal_gxp9y_1jjrl_263 > .awsui_list_gxp9y_1jjrl_222 > .awsui_container_gxp9y_1jjrl_227 > .awsui_details_gxp9y_1jjrl_238:not(#\9) {
293
+ .awsui_horizontal_gxp9y_1jagc_257 > .awsui_list_gxp9y_1jagc_226 > .awsui_container_gxp9y_1jagc_231 > .awsui_content_gxp9y_1jagc_293:not(#\9) {
294
+ align-self: flex-start;
300
295
  grid-row: 3;
301
296
  grid-column: 1/span 3;
297
+ min-inline-size: 0;
302
298
  padding-inline-end: var(--space-xs-ymlm0b, 8px);
303
299
  }
304
- .awsui_horizontal_gxp9y_1jjrl_263 > .awsui_list_gxp9y_1jjrl_222 > .awsui_container_gxp9y_1jjrl_227:not(#\9):last-child > .awsui_header_gxp9y_1jjrl_232 > .awsui_connector_gxp9y_1jjrl_181 {
300
+ .awsui_horizontal_gxp9y_1jagc_257 > .awsui_list_gxp9y_1jagc_226 > .awsui_container_gxp9y_1jagc_231 > .awsui_content_gxp9y_1jagc_293 > .awsui_details_gxp9y_1jagc_247:not(#\9) {
301
+ margin-block-end: var(--space-static-xs-gnm0mz, 8px);
302
+ }
303
+ .awsui_horizontal_gxp9y_1jagc_257 > .awsui_list_gxp9y_1jagc_226 > .awsui_container_gxp9y_1jagc_231:not(#\9):last-child > .awsui_step-layout_gxp9y_1jagc_241 > .awsui_connector_gxp9y_1jagc_181 {
304
+ display: none;
305
+ }
306
+
307
+ .awsui_vertical_gxp9y_1jagc_307 > .awsui_list_gxp9y_1jagc_226 > .awsui_container_gxp9y_1jagc_231 > .awsui_step-layout_gxp9y_1jagc_241:not(#\9) {
308
+ display: grid;
309
+ grid-template-columns: subgrid;
310
+ grid-template-rows: auto 1fr;
311
+ gap: 0;
312
+ }
313
+ .awsui_vertical_gxp9y_1jagc_307 > .awsui_list_gxp9y_1jagc_226 > .awsui_container_gxp9y_1jagc_231 > .awsui_step-layout_gxp9y_1jagc_241 > :not(#\9):first-child {
314
+ grid-column: 1/-1;
315
+ }
316
+ .awsui_vertical_gxp9y_1jagc_307 > .awsui_list_gxp9y_1jagc_226 > .awsui_container_gxp9y_1jagc_231 > .awsui_step-layout_gxp9y_1jagc_241 > .awsui_details_gxp9y_1jagc_247:not(#\9) {
317
+ grid-row: 2;
318
+ grid-column: 2;
319
+ margin-block-end: var(--space-static-xs-gnm0mz, 8px);
320
+ }
321
+ .awsui_vertical_gxp9y_1jagc_307 > .awsui_list_gxp9y_1jagc_226 > .awsui_container_gxp9y_1jagc_231 > .awsui_step-layout_gxp9y_1jagc_241 > .awsui_connector-continuation_gxp9y_1jagc_321:not(#\9) {
322
+ grid-row: 2;
323
+ grid-column: 1;
324
+ justify-self: center;
325
+ margin-block: 0;
326
+ margin-inline: 0;
327
+ border-block: 0;
328
+ border-inline: 0;
329
+ inline-size: var(--border-divider-list-width-tdfx1x, 1px);
330
+ block-size: auto;
331
+ min-block-size: var(--space-static-xs-gnm0mz, 8px);
332
+ position: relative;
333
+ inset-inline-end: var(--space-static-xxxs-yidks1, 2px);
334
+ }
335
+ .awsui_vertical_gxp9y_1jagc_307 > .awsui_list_gxp9y_1jagc_226 > :not(#\9):last-of-type > .awsui_step-layout_gxp9y_1jagc_241 > .awsui_connector-continuation_gxp9y_1jagc_321 {
305
336
  display: none;
306
337
  }
307
338
 
308
- .awsui_root_gxp9y_1jjrl_189 > .awsui_list_gxp9y_1jjrl_222 > .awsui_container_gxp9y_1jjrl_227.awsui_custom-vertical_gxp9y_1jjrl_308 > .awsui_rail_gxp9y_1jjrl_308:not(#\9) {
339
+ .awsui_root_gxp9y_1jagc_193 > .awsui_list_gxp9y_1jagc_226 > .awsui_container_gxp9y_1jagc_231.awsui_custom-vertical_gxp9y_1jagc_339 > .awsui_rail_gxp9y_1jagc_339:not(#\9) {
309
340
  grid-column: 1;
310
341
  display: flex;
311
342
  flex-direction: column;
312
343
  align-items: center;
313
344
  }
314
- .awsui_root_gxp9y_1jjrl_189 > .awsui_list_gxp9y_1jjrl_222 > .awsui_container_gxp9y_1jjrl_227.awsui_custom-vertical_gxp9y_1jjrl_308 > .awsui_rail_gxp9y_1jjrl_308 > .awsui_connector_gxp9y_1jjrl_181:not(#\9) {
345
+ .awsui_root_gxp9y_1jagc_193 > .awsui_list_gxp9y_1jagc_226 > .awsui_container_gxp9y_1jagc_231.awsui_custom-vertical_gxp9y_1jagc_339 > .awsui_rail_gxp9y_1jagc_339 > .awsui_connector_gxp9y_1jagc_181:not(#\9) {
315
346
  grid-row: auto;
316
347
  grid-column: auto;
317
348
  flex: 1 1 auto;
@@ -323,11 +354,37 @@ surrounding text. (WCAG F73) https://www.w3.org/WAI/WCAG21/Techniques/failures/F
323
354
  inset-inline-end: 0;
324
355
  margin-block: var(--space-static-xxs-ns94dp, 4px) 0;
325
356
  }
326
- .awsui_root_gxp9y_1jjrl_189 > .awsui_list_gxp9y_1jjrl_222 > .awsui_container_gxp9y_1jjrl_227.awsui_custom-vertical_gxp9y_1jjrl_308 > .awsui_content_gxp9y_1jjrl_326:not(#\9) {
357
+ .awsui_root_gxp9y_1jagc_193 > .awsui_list_gxp9y_1jagc_226 > .awsui_container_gxp9y_1jagc_231.awsui_custom-vertical_gxp9y_1jagc_339 > .awsui_content_gxp9y_1jagc_293:not(#\9) {
327
358
  grid-column: 2;
328
359
  min-inline-size: 0;
329
360
  }
330
361
 
331
- .awsui_root_gxp9y_1jjrl_189 > .awsui_list_gxp9y_1jjrl_222 > .awsui_container_gxp9y_1jjrl_227.awsui_custom-vertical_gxp9y_1jjrl_308:not(#\9):last-of-type > .awsui_rail_gxp9y_1jjrl_308 > .awsui_connector_gxp9y_1jjrl_181 {
362
+ .awsui_root_gxp9y_1jagc_193 > .awsui_list_gxp9y_1jagc_226.awsui_with-annotation_gxp9y_1jagc_362:not(#\9) {
363
+ display: grid;
364
+ grid-template-columns: fit-content(50%) var(--space-static-l-n53k41, 20px) 1fr;
365
+ }
366
+ .awsui_root_gxp9y_1jagc_193 > .awsui_list_gxp9y_1jagc_226.awsui_with-annotation_gxp9y_1jagc_362 > .awsui_container_gxp9y_1jagc_231:not(#\9) {
367
+ grid-column: 1/-1;
368
+ grid-template-columns: subgrid;
369
+ }
370
+ .awsui_root_gxp9y_1jagc_193 > .awsui_list_gxp9y_1jagc_226.awsui_with-annotation_gxp9y_1jagc_362 > .awsui_container_gxp9y_1jagc_231 > .awsui_annotation_gxp9y_1jagc_236:not(#\9) {
371
+ grid-row: 1;
372
+ grid-column: 1;
373
+ padding-inline-end: var(--space-xxs-hwfkai, 4px);
374
+ }
375
+ .awsui_root_gxp9y_1jagc_193 > .awsui_list_gxp9y_1jagc_226.awsui_with-annotation_gxp9y_1jagc_362 > .awsui_container_gxp9y_1jagc_231:not(#\9):not(.awsui_custom-vertical_gxp9y_1jagc_339) > .awsui_step-layout_gxp9y_1jagc_241 {
376
+ grid-column: 2/span 2;
377
+ }
378
+ .awsui_root_gxp9y_1jagc_193 > .awsui_list_gxp9y_1jagc_226.awsui_with-annotation_gxp9y_1jagc_362 > .awsui_container_gxp9y_1jagc_231:not(#\9):not(.awsui_custom-vertical_gxp9y_1jagc_339) > .awsui_details_gxp9y_1jagc_247 {
379
+ grid-column: 3;
380
+ }
381
+ .awsui_root_gxp9y_1jagc_193 > .awsui_list_gxp9y_1jagc_226.awsui_with-annotation_gxp9y_1jagc_362 > .awsui_container_gxp9y_1jagc_231.awsui_custom-vertical_gxp9y_1jagc_339 > .awsui_rail_gxp9y_1jagc_339:not(#\9) {
382
+ grid-column: 2;
383
+ }
384
+ .awsui_root_gxp9y_1jagc_193 > .awsui_list_gxp9y_1jagc_226.awsui_with-annotation_gxp9y_1jagc_362 > .awsui_container_gxp9y_1jagc_231.awsui_custom-vertical_gxp9y_1jagc_339 > .awsui_content_gxp9y_1jagc_293:not(#\9) {
385
+ grid-column: 3;
386
+ }
387
+
388
+ .awsui_root_gxp9y_1jagc_193 > .awsui_list_gxp9y_1jagc_226 > .awsui_container_gxp9y_1jagc_231.awsui_custom-vertical_gxp9y_1jagc_339:not(#\9):last-of-type > .awsui_rail_gxp9y_1jagc_339 > .awsui_connector_gxp9y_1jagc_181 {
332
389
  display: none;
333
390
  }
@@ -2,18 +2,22 @@
2
2
  // es-module interop with Babel and Typescript
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
4
  module.exports.default = {
5
- "connector": "awsui_connector_gxp9y_1jjrl_181",
6
- "connector-hidden": "awsui_connector-hidden_gxp9y_1jjrl_185",
7
- "root": "awsui_root_gxp9y_1jjrl_189",
8
- "list": "awsui_list_gxp9y_1jjrl_222",
9
- "container": "awsui_container_gxp9y_1jjrl_227",
10
- "header": "awsui_header_gxp9y_1jjrl_232",
11
- "details": "awsui_details_gxp9y_1jjrl_238",
12
- "custom": "awsui_custom_gxp9y_1jjrl_259",
13
- "horizontal": "awsui_horizontal_gxp9y_1jjrl_263",
14
- "horizontal-header": "awsui_horizontal-header_gxp9y_1jjrl_294",
15
- "custom-vertical": "awsui_custom-vertical_gxp9y_1jjrl_308",
16
- "rail": "awsui_rail_gxp9y_1jjrl_308",
17
- "content": "awsui_content_gxp9y_1jjrl_326"
5
+ "connector": "awsui_connector_gxp9y_1jagc_181",
6
+ "connector-hidden": "awsui_connector-hidden_gxp9y_1jagc_185",
7
+ "header": "awsui_header_gxp9y_1jagc_189",
8
+ "root": "awsui_root_gxp9y_1jagc_193",
9
+ "list": "awsui_list_gxp9y_1jagc_226",
10
+ "container": "awsui_container_gxp9y_1jagc_231",
11
+ "annotation": "awsui_annotation_gxp9y_1jagc_236",
12
+ "step-layout": "awsui_step-layout_gxp9y_1jagc_241",
13
+ "details": "awsui_details_gxp9y_1jagc_247",
14
+ "custom": "awsui_custom_gxp9y_1jagc_253",
15
+ "horizontal": "awsui_horizontal_gxp9y_1jagc_257",
16
+ "content": "awsui_content_gxp9y_1jagc_293",
17
+ "vertical": "awsui_vertical_gxp9y_1jagc_307",
18
+ "connector-continuation": "awsui_connector-continuation_gxp9y_1jagc_321",
19
+ "custom-vertical": "awsui_custom-vertical_gxp9y_1jagc_339",
20
+ "rail": "awsui_rail_gxp9y_1jagc_339",
21
+ "with-annotation": "awsui_with-annotation_gxp9y_1jagc_362"
18
22
  };
19
23
 
@@ -0,0 +1,12 @@
1
+ import { TableProps } from './interfaces';
2
+ interface ClearSortButtonProps<T> {
3
+ multiColumnSort: TableProps.MultiColumnSort<T>;
4
+ i18nStrings?: TableProps.I18nStrings;
5
+ onClearSort?: () => void;
6
+ }
7
+ export declare function ClearSortButton<T>({
8
+ multiColumnSort,
9
+ i18nStrings,
10
+ onClearSort
11
+ }: ClearSortButtonProps<T>): JSX.Element;
12
+ export {};
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clear-sort.d.ts","sourceRoot":"","sources":["../../../src/table/clear-sort.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,UAAU,oBAAoB,CAAC,CAAC;IAC9B,eAAe,EAAE,UAAU,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IAC/C,WAAW,CAAC,EAAE,UAAU,CAAC,WAAW,CAAC;IACrC,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;CAC1B;AAED,wBAAgB,eAAe,CAAC,CAAC,EAAE,EAAE,eAAe,EAAE,WAAW,EAAE,WAAW,EAAE,EAAE,oBAAoB,CAAC,CAAC,CAAC,eAcxG"}
@@ -0,0 +1,15 @@
1
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ import React from 'react';
4
+ import InternalButton from '../button/internal';
5
+ import { useInternalI18n } from '../i18n/context';
6
+ import { fireNonCancelableEvent } from '../internal/events';
7
+ export function ClearSortButton({ multiColumnSort, i18nStrings, onClearSort }) {
8
+ var _a;
9
+ const i18n = useInternalI18n('table');
10
+ return (React.createElement(InternalButton, { variant: "inline-link", formAction: "none", onClick: () => {
11
+ fireNonCancelableEvent(multiColumnSort.onChange, { sortingColumns: [] });
12
+ onClearSort === null || onClearSort === void 0 ? void 0 : onClearSort();
13
+ } }, (_a = i18n('i18nStrings.clearSort', i18nStrings === null || i18nStrings === void 0 ? void 0 : i18nStrings.clearSort)) !== null && _a !== void 0 ? _a : ''));
14
+ }
15
+ //# sourceMappingURL=clear-sort.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clear-sort.js","sourceRoot":"","sources":["../../../src/table/clear-sort.tsx"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,sCAAsC;AACtC,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,cAAc,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAS5D,MAAM,UAAU,eAAe,CAAI,EAAE,eAAe,EAAE,WAAW,EAAE,WAAW,EAA2B;;IACvG,MAAM,IAAI,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IACtC,OAAO,CACL,oBAAC,cAAc,IACb,OAAO,EAAC,aAAa,EACrB,UAAU,EAAC,MAAM,EACjB,OAAO,EAAE,GAAG,EAAE;YACZ,sBAAsB,CAAC,eAAe,CAAC,QAAQ,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC,CAAC;YACzE,WAAW,aAAX,WAAW,uBAAX,WAAW,EAAI,CAAC;QAClB,CAAC,IAEA,MAAA,IAAI,CAAC,uBAAuB,EAAE,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,SAAS,CAAC,mCAAI,EAAE,CAC7C,CAClB,CAAC;AACJ,CAAC","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport React from 'react';\n\nimport InternalButton from '../button/internal';\nimport { useInternalI18n } from '../i18n/context';\nimport { fireNonCancelableEvent } from '../internal/events';\nimport { TableProps } from './interfaces';\n\ninterface ClearSortButtonProps<T> {\n multiColumnSort: TableProps.MultiColumnSort<T>;\n i18nStrings?: TableProps.I18nStrings;\n onClearSort?: () => void;\n}\n\nexport function ClearSortButton<T>({ multiColumnSort, i18nStrings, onClearSort }: ClearSortButtonProps<T>) {\n const i18n = useInternalI18n('table');\n return (\n <InternalButton\n variant=\"inline-link\"\n formAction=\"none\"\n onClick={() => {\n fireNonCancelableEvent(multiColumnSort.onChange, { sortingColumns: [] });\n onClearSort?.();\n }}\n >\n {i18n('i18nStrings.clearSort', i18nStrings?.clearSort) ?? ''}\n </InternalButton>\n );\n}\n"]}
@@ -7,6 +7,9 @@ export interface TableHeaderCellProps<ItemType> extends BaseHeaderCellProps {
7
7
  sortingDisabled?: boolean;
8
8
  stuck?: boolean;
9
9
  onClick(detail: TableProps.SortingState<any>): void;
10
+ multiColumnSort?: TableProps.MultiColumnSort<ItemType>;
11
+ i18nStrings?: TableProps.I18nStrings;
12
+ ariaLabels?: TableProps.AriaLabels<ItemType>;
10
13
  updateColumn: (columnId: PropertyKey, newWidth: number) => void;
11
14
  isEditable?: boolean;
12
15
  columnId: PropertyKey;
@@ -51,5 +54,8 @@ export declare function TableHeaderCell<ItemType>({
51
54
  columnGroupId,
52
55
  isLastChildOfGroup,
53
56
  isLast,
54
- tableVariant
57
+ tableVariant,
58
+ multiColumnSort,
59
+ i18nStrings,
60
+ ariaLabels
55
61
  }: TableHeaderCellProps<ItemType>): JSX.Element;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/table/header-cell/index.tsx"],"names":[],"mappings":"AAaA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAOrD,MAAM,WAAW,oBAAoB,CAAC,QAAQ,CAAE,SAAQ,mBAAmB;IACzE,MAAM,EAAE,UAAU,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC9C,mBAAmB,CAAC,EAAE,UAAU,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IACzD,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,MAAM,EAAE,UAAU,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;IACpD,YAAY,EAAE,CAAC,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAChE,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,WAAW,CAAC;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,EACxC,QAAQ,EACR,MAAM,EACN,mBAAmB,EACnB,iBAAiB,EACjB,eAAe,EACf,SAAS,EACT,gBAAgB,EAChB,KAAK,EACL,MAAM,EACN,MAAM,EACN,WAAW,EACX,OAAO,EACP,QAAQ,EACR,YAAY,EACZ,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,UAAU,EACV,QAAQ,EACR,WAAW,EACX,OAAO,EACP,SAAS,EACT,sBAAsB,EACtB,kBAAkB,EAClB,YAAY,EACZ,iBAAiB,EACjB,OAAO,EACP,OAAO,EACP,OAAO,EACP,aAAa,EACb,kBAAkB,EAClB,MAAM,EACN,YAAY,GACb,EAAE,oBAAoB,CAAC,QAAQ,CAAC,eAsJhC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/table/header-cell/index.tsx"],"names":[],"mappings":"AAeA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAU3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAQrD,MAAM,WAAW,oBAAoB,CAAC,QAAQ,CAAE,SAAQ,mBAAmB;IACzE,MAAM,EAAE,UAAU,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC9C,mBAAmB,CAAC,EAAE,UAAU,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IACzD,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,MAAM,EAAE,UAAU,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;IACpD,eAAe,CAAC,EAAE,UAAU,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;IACvD,WAAW,CAAC,EAAE,UAAU,CAAC,WAAW,CAAC;IACrC,UAAU,CAAC,EAAE,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC7C,YAAY,EAAE,CAAC,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAChE,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,WAAW,CAAC;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,EACxC,QAAQ,EACR,MAAM,EACN,mBAAmB,EACnB,iBAAiB,EACjB,eAAe,EACf,SAAS,EACT,gBAAgB,EAChB,KAAK,EACL,MAAM,EACN,MAAM,EACN,WAAW,EACX,OAAO,EACP,QAAQ,EACR,YAAY,EACZ,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,UAAU,EACV,QAAQ,EACR,WAAW,EACX,OAAO,EACP,SAAS,EACT,sBAAsB,EACtB,kBAAkB,EAClB,YAAY,EACZ,iBAAiB,EACjB,OAAO,EACP,OAAO,EACP,OAAO,EACP,aAAa,EACb,kBAAkB,EAClB,MAAM,EACN,YAAY,EACZ,eAAe,EACf,WAAW,EACX,UAAU,GACX,EAAE,oBAAoB,CAAC,QAAQ,CAAC,eAuQhC"}
@@ -7,23 +7,99 @@ import { useSingleTabStopNavigation } from '@cloudscape-design/component-toolkit
7
7
  import { getAnalyticsMetadataAttribute } from '@cloudscape-design/component-toolkit/internal/analytics-metadata';
8
8
  import { useInternalI18n } from '../../i18n/context';
9
9
  import InternalIcon from '../../icon/internal';
10
+ import ScreenreaderOnly from '../../internal/components/screenreader-only';
11
+ import { fireNonCancelableEvent } from '../../internal/events';
10
12
  import { KeyCode } from '../../internal/keycode';
13
+ import { appendSort, getSortIndex, removeSort, replaceSort, setDirection, toggleDirection, } from '../multi-column-sort/utils';
11
14
  import { Divider, Resizer } from '../resizer';
15
+ import { SortMenu } from './sort-menu';
12
16
  import { TableThElement } from './th-element';
13
17
  import { getSortingIconName, getSortingStatus, isSorted } from './utils';
14
18
  import analyticsSelectors from '../analytics-metadata/styles.css.js';
15
19
  import styles from './styles.css.js';
16
- export function TableHeaderCell({ tabIndex, column, activeSortingColumn, sortingDescending, sortingDisabled, wrapLines, focusedComponent, stuck, sticky, hidden, stripedRows, onClick, colIndex, updateColumn, resizableColumns, resizableStyle, onResizeFinish, isEditable, columnId, stickyState, cellRef, tableRole, resizerRoleDescription, resizerTooltipText, isExpandable, hasDynamicContent, variant, colSpan, rowSpan, columnGroupId, isLastChildOfGroup, isLast, tableVariant, }) {
20
+ export function TableHeaderCell({ tabIndex, column, activeSortingColumn, sortingDescending, sortingDisabled, wrapLines, focusedComponent, stuck, sticky, hidden, stripedRows, onClick, colIndex, updateColumn, resizableColumns, resizableStyle, onResizeFinish, isEditable, columnId, stickyState, cellRef, tableRole, resizerRoleDescription, resizerTooltipText, isExpandable, hasDynamicContent, variant, colSpan, rowSpan, columnGroupId, isLastChildOfGroup, isLast, tableVariant, multiColumnSort, i18nStrings, ariaLabels, }) {
17
21
  var _a;
18
22
  const i18n = useInternalI18n('table');
19
23
  const sortable = !!column.sortingComparator || !!column.sortingField;
20
- const sorted = !!activeSortingColumn && isSorted(column, activeSortingColumn);
21
- const sortingStatus = getSortingStatus(sortable, sorted, !!sortingDescending, !!sortingDisabled);
22
24
  const isGrouped = !!columnGroupId || (rowSpan !== null && rowSpan !== void 0 ? rowSpan : 1) > 1;
23
- const handleClick = () => onClick({
24
- sortingColumn: column,
25
- isDescending: sorted ? !sortingDescending : false,
26
- });
25
+ // The sort menu only renders for a sortable, enabled column under multi-column sort.
26
+ const hasSortMenu = !!multiColumnSort && sortable && !sortingDisabled;
27
+ // Multi-column sort context derived from `multiColumnSort.sortingColumns` when present.
28
+ const multiSortIndex = multiColumnSort ? getSortIndex(multiColumnSort.sortingColumns, column) : null;
29
+ const multiSortEntry = multiSortIndex !== null && multiColumnSort ? multiColumnSort.sortingColumns[multiSortIndex - 1] : undefined;
30
+ const inMultiSort = multiSortIndex !== null;
31
+ const isPrimaryMultiSort = multiSortIndex === 1;
32
+ // Priority badges are only meaningful when 2+ columns are sorted; with a single column, the position number adds no information.
33
+ const showPriorityBadge = !!multiColumnSort && multiColumnSort.sortingColumns.length >= 2 && multiSortIndex !== null;
34
+ // For multi-sort, derive sorted/descending from the matching entry; otherwise fall back to single-sort props.
35
+ const sorted = multiColumnSort ? inMultiSort : !!activeSortingColumn && isSorted(column, activeSortingColumn);
36
+ const descending = multiColumnSort ? !!(multiSortEntry === null || multiSortEntry === void 0 ? void 0 : multiSortEntry.isDescending) : !!sortingDescending;
37
+ const sortingStatus = getSortingStatus(sortable, sorted, descending, !!sortingDisabled);
38
+ // In multi-sort, only the primary column declares aria-sort (ARIA only allows one column sorted at a time).
39
+ const suppressAriaSort = !!multiColumnSort && inMultiSort && !isPrimaryMultiSort;
40
+ // Screen-reader-only text appended to a sorted column header. The visible header text supplies the column name;
41
+ // this adds the sort direction (only when `aria-sort` is suppressed, i.e. secondary columns) and the sort priority.
42
+ const sortDirectionLabel = descending
43
+ ? i18n('ariaLabels.sortDescending', ariaLabels === null || ariaLabels === void 0 ? void 0 : ariaLabels.sortDescending)
44
+ : i18n('ariaLabels.sortAscending', ariaLabels === null || ariaLabels === void 0 ? void 0 : ariaLabels.sortAscending);
45
+ const sortPriorityLabel = i18n('ariaLabels.sortPriority', ariaLabels === null || ariaLabels === void 0 ? void 0 : ariaLabels.sortPriority, format => ({ priority }) => format({ priority }));
46
+ const sortAccessibleText = inMultiSort
47
+ ? [
48
+ suppressAriaSort ? sortDirectionLabel : undefined,
49
+ showPriorityBadge ? sortPriorityLabel === null || sortPriorityLabel === void 0 ? void 0 : sortPriorityLabel({ priority: multiSortIndex !== null && multiSortIndex !== void 0 ? multiSortIndex : 0 }) : undefined,
50
+ ]
51
+ .filter(Boolean)
52
+ .join(' ')
53
+ : '';
54
+ const handleClick = (shiftKey = false) => {
55
+ if (multiColumnSort) {
56
+ const current = multiColumnSort.sortingColumns;
57
+ let next;
58
+ if (shiftKey && !inMultiSort) {
59
+ next = appendSort(current, column, false);
60
+ }
61
+ else if (inMultiSort) {
62
+ next = toggleDirection(current, column);
63
+ }
64
+ else {
65
+ next = replaceSort(column, false);
66
+ }
67
+ fireNonCancelableEvent(multiColumnSort.onChange, { sortingColumns: next });
68
+ return;
69
+ }
70
+ onClick({
71
+ sortingColumn: column,
72
+ isDescending: sorted ? !sortingDescending : false,
73
+ });
74
+ };
75
+ const handleSortMenuAction = (action) => {
76
+ // The sort menu is only rendered when `multiColumnSort` is set (see render below), so this guard
77
+ // exists purely to narrow the type for the accesses that follow and is unreachable at runtime.
78
+ /* istanbul ignore next */
79
+ if (!multiColumnSort) {
80
+ return;
81
+ }
82
+ const current = multiColumnSort.sortingColumns;
83
+ let next;
84
+ switch (action) {
85
+ case 'sort-ascending':
86
+ next = inMultiSort ? setDirection(current, column, false) : replaceSort(column, false);
87
+ break;
88
+ case 'sort-descending':
89
+ next = inMultiSort ? setDirection(current, column, true) : replaceSort(column, true);
90
+ break;
91
+ case 'add-to-sort-ascending':
92
+ next = appendSort(current, column, false);
93
+ break;
94
+ case 'add-to-sort-descending':
95
+ next = appendSort(current, column, true);
96
+ break;
97
+ case 'remove-from-sort':
98
+ next = removeSort(current, column);
99
+ break;
100
+ }
101
+ fireNonCancelableEvent(multiColumnSort.onChange, { sortingColumns: next });
102
+ };
27
103
  // Elements with role="button" do not have the default behavior of <button>, where pressing
28
104
  // Enter or Space will trigger a click event. Therefore we need to add this ourselves.
29
105
  // The native <button> element cannot be used due to a misaligned implementation in Firefox:
@@ -31,7 +107,7 @@ export function TableHeaderCell({ tabIndex, column, activeSortingColumn, sorting
31
107
  const handleKeyPress = ({ nativeEvent: e }) => {
32
108
  if (e.keyCode === KeyCode.enter || e.keyCode === KeyCode.space) {
33
109
  e.preventDefault();
34
- handleClick();
110
+ handleClick(e.shiftKey);
35
111
  }
36
112
  };
37
113
  const headerId = useUniqueId('table-header-');
@@ -47,7 +123,7 @@ export function TableHeaderCell({ tabIndex, column, activeSortingColumn, sorting
47
123
  useResizeObserver(hasDynamicContent ? cellRefObject : () => null, entry => {
48
124
  updateColumn(columnId, entry.borderBoxWidth);
49
125
  });
50
- return (React.createElement(TableThElement, { resizableStyle: resizableStyle, cellRef: cellRefCombined, sortingStatus: sortingStatus, sortingDisabled: sortingDisabled, focusedComponent: focusedComponent, stuck: stuck, sticky: sticky, resizable: resizableColumns, hidden: hidden, stripedRows: stripedRows, colIndex: colIndex, columnId: columnId, stickyState: stickyState, tableRole: tableRole, variant: variant, tableVariant: tableVariant, colSpan: colSpan, rowSpan: rowSpan, columnGroupId: columnGroupId, isLast: isLast, ...(sortingDisabled
126
+ return (React.createElement(TableThElement, { resizableStyle: resizableStyle, cellRef: cellRefCombined, sortingStatus: sortingStatus, sortingDisabled: sortingDisabled, suppressAriaSort: suppressAriaSort, focusedComponent: focusedComponent, stuck: stuck, sticky: sticky, resizable: resizableColumns, hidden: hidden, stripedRows: stripedRows, colIndex: colIndex, columnId: columnId, stickyState: stickyState, tableRole: tableRole, variant: variant, tableVariant: tableVariant, colSpan: colSpan, rowSpan: rowSpan, columnGroupId: columnGroupId, isLast: isLast, ...(sortingDisabled
51
127
  ? {}
52
128
  : getAnalyticsMetadataAttribute({
53
129
  action: 'sort',
@@ -55,32 +131,45 @@ export function TableHeaderCell({ tabIndex, column, activeSortingColumn, sorting
55
131
  position: `${colIndex + 1}`,
56
132
  columnId: column.id ? `${column.id}` : '',
57
133
  label: `.${analyticsSelectors['header-cell-text']}`,
58
- sortingDescending: `${!sortingDescending}`,
134
+ sortingDescending: `${!descending}`,
59
135
  },
60
136
  })) },
61
- React.createElement("div", { ref: clickableHeaderRef, "data-focus-id": `sorting-control-${String(columnId)}`, className: clsx(styles['header-cell-content'], {
62
- [styles['header-cell-fake-focus']]: focusedComponent === `sorting-control-${String(columnId)}`,
63
- [styles['header-cell-content-expandable']]: isExpandable,
64
- }), "aria-label": column.ariaLabel
65
- ? column.ariaLabel({
66
- sorted: sorted,
67
- descending: sorted && !!sortingDescending,
68
- disabled: !!sortingDisabled,
69
- })
70
- : undefined, ...(sortingStatus && !sortingDisabled
71
- ? {
72
- onKeyPress: handleKeyPress,
73
- tabIndex: clickableHeaderTabIndex,
74
- role: 'button',
75
- onClick: handleClick,
76
- }
77
- : {}) },
78
- React.createElement("div", { className: clsx(styles['header-cell-text'], analyticsSelectors['header-cell-text'], wrapLines && styles['header-cell-text-wrap']), id: headerId },
79
- column.header,
80
- isEditable ? (React.createElement("span", { className: styles['edit-icon'] },
81
- React.createElement(InternalIcon, { name: "edit", ariaLabel: i18n('columnDefinitions.editConfig.editIconAriaLabel', (_a = column.editConfig) === null || _a === void 0 ? void 0 : _a.editIconAriaLabel) }))) : null),
82
- sortingStatus && (React.createElement("span", { className: styles['sorting-icon'] },
83
- React.createElement(InternalIcon, { name: getSortingIconName(sortingStatus) })))),
137
+ React.createElement("div", { className: clsx(styles['header-cell-main'], hasSortMenu && styles['header-cell-main-with-menu']) },
138
+ React.createElement("div", { ref: clickableHeaderRef, "data-focus-id": `sorting-control-${String(columnId)}`, className: clsx(styles['header-cell-content'], {
139
+ [styles['header-cell-fake-focus']]: focusedComponent === `sorting-control-${String(columnId)}`,
140
+ [styles['header-cell-content-expandable']]: isExpandable,
141
+ [styles['header-cell-content-multi-sorted']]: showPriorityBadge,
142
+ [styles['header-cell-content-with-menu']]: hasSortMenu,
143
+ }), "aria-label": column.ariaLabel
144
+ ? column.ariaLabel({
145
+ sorted: sorted,
146
+ descending: sorted && descending,
147
+ disabled: !!sortingDisabled,
148
+ sortIndex: multiSortIndex !== null && multiSortIndex !== void 0 ? multiSortIndex : undefined,
149
+ })
150
+ : undefined, ...(sortingStatus && !sortingDisabled
151
+ ? {
152
+ onKeyPress: handleKeyPress,
153
+ tabIndex: clickableHeaderTabIndex,
154
+ role: 'button',
155
+ onClick: event => handleClick(event.shiftKey),
156
+ // Prevent the browser from extending the text selection on Shift+click.
157
+ onMouseDown: (event) => {
158
+ if (event.shiftKey) {
159
+ event.preventDefault();
160
+ }
161
+ },
162
+ }
163
+ : {}) },
164
+ React.createElement("div", { className: clsx(styles['header-cell-text'], analyticsSelectors['header-cell-text'], wrapLines && styles['header-cell-text-wrap']), id: headerId },
165
+ column.header,
166
+ isEditable ? (React.createElement("span", { className: styles['edit-icon'] },
167
+ React.createElement(InternalIcon, { name: "edit", ariaLabel: i18n('columnDefinitions.editConfig.editIconAriaLabel', (_a = column.editConfig) === null || _a === void 0 ? void 0 : _a.editIconAriaLabel) }))) : null),
168
+ sortAccessibleText && React.createElement(ScreenreaderOnly, null, sortAccessibleText),
169
+ sortingStatus && (React.createElement("span", { className: styles['sorting-icon'] },
170
+ showPriorityBadge && (React.createElement("span", { className: styles['sort-priority-badge'], "aria-hidden": "true" }, multiSortIndex)),
171
+ React.createElement(InternalIcon, { name: getSortingIconName(sortingStatus) })))),
172
+ hasSortMenu && (React.createElement(SortMenu, { column: column, inSort: inMultiSort, isSortedAscending: inMultiSort && !descending, isSortedDescending: inMultiSort && descending, i18nStrings: i18nStrings, ariaLabel: ariaLabels === null || ariaLabels === void 0 ? void 0 : ariaLabels.sortMenuTriggerLabel, ariaDescribedby: headerId, onAction: handleSortMenuAction }))),
84
173
  resizableColumns ? (React.createElement(Resizer, { tabIndex: tabIndex, focusId: `resize-control-${String(columnId)}`, showFocusRing: focusedComponent === `resize-control-${String(columnId)}`, onWidthUpdate: newWidth => updateColumn(columnId, newWidth), onWidthUpdateCommit: onResizeFinish, ariaLabelledby: headerId, minWidth: typeof column.minWidth === 'string' ? parseInt(column.minWidth) : column.minWidth, roleDescription: i18n('ariaLabels.resizerRoleDescription', resizerRoleDescription),
85
174
  // TODO: Replace with this when strings are available
86
175
  // tooltipText={i18n('ariaLabels.resizerTooltipText', resizerTooltipText)}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/table/header-cell/index.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport React, { useRef } from 'react';\nimport clsx from 'clsx';\n\nimport { useMergeRefs, useResizeObserver, useUniqueId } from '@cloudscape-design/component-toolkit/internal';\nimport { useSingleTabStopNavigation } from '@cloudscape-design/component-toolkit/internal';\nimport { getAnalyticsMetadataAttribute } from '@cloudscape-design/component-toolkit/internal/analytics-metadata';\n\nimport { useInternalI18n } from '../../i18n/context';\nimport InternalIcon from '../../icon/internal';\nimport { KeyCode } from '../../internal/keycode';\nimport { GeneratedAnalyticsMetadataTableSort } from '../analytics-metadata/interfaces';\nimport { TableProps } from '../interfaces';\nimport { Divider, Resizer } from '../resizer';\nimport { BaseHeaderCellProps } from './common-props';\nimport { TableThElement } from './th-element';\nimport { getSortingIconName, getSortingStatus, isSorted } from './utils';\n\nimport analyticsSelectors from '../analytics-metadata/styles.css.js';\nimport styles from './styles.css.js';\n\nexport interface TableHeaderCellProps<ItemType> extends BaseHeaderCellProps {\n column: TableProps.ColumnDefinition<ItemType>;\n activeSortingColumn?: TableProps.SortingColumn<ItemType>;\n sortingDescending?: boolean;\n sortingDisabled?: boolean;\n stuck?: boolean;\n onClick(detail: TableProps.SortingState<any>): void;\n updateColumn: (columnId: PropertyKey, newWidth: number) => void;\n isEditable?: boolean;\n columnId: PropertyKey;\n isExpandable?: boolean;\n hasDynamicContent?: boolean;\n colSpan?: number;\n rowSpan?: number;\n columnGroupId?: string;\n isLastChildOfGroup?: boolean;\n isLast?: boolean;\n}\n\nexport function TableHeaderCell<ItemType>({\n tabIndex,\n column,\n activeSortingColumn,\n sortingDescending,\n sortingDisabled,\n wrapLines,\n focusedComponent,\n stuck,\n sticky,\n hidden,\n stripedRows,\n onClick,\n colIndex,\n updateColumn,\n resizableColumns,\n resizableStyle,\n onResizeFinish,\n isEditable,\n columnId,\n stickyState,\n cellRef,\n tableRole,\n resizerRoleDescription,\n resizerTooltipText,\n isExpandable,\n hasDynamicContent,\n variant,\n colSpan,\n rowSpan,\n columnGroupId,\n isLastChildOfGroup,\n isLast,\n tableVariant,\n}: TableHeaderCellProps<ItemType>) {\n const i18n = useInternalI18n('table');\n const sortable = !!column.sortingComparator || !!column.sortingField;\n const sorted = !!activeSortingColumn && isSorted(column, activeSortingColumn);\n const sortingStatus = getSortingStatus(sortable, sorted, !!sortingDescending, !!sortingDisabled);\n const isGrouped = !!columnGroupId || (rowSpan ?? 1) > 1;\n const handleClick = () =>\n onClick({\n sortingColumn: column,\n isDescending: sorted ? !sortingDescending : false,\n });\n\n // Elements with role=\"button\" do not have the default behavior of <button>, where pressing\n // Enter or Space will trigger a click event. Therefore we need to add this ourselves.\n // The native <button> element cannot be used due to a misaligned implementation in Firefox:\n // https://bugzilla.mozilla.org/show_bug.cgi?id=843003\n const handleKeyPress = ({ nativeEvent: e }: React.KeyboardEvent) => {\n if (e.keyCode === KeyCode.enter || e.keyCode === KeyCode.space) {\n e.preventDefault();\n handleClick();\n }\n };\n\n const headerId = useUniqueId('table-header-');\n\n const clickableHeaderRef = useRef<HTMLDivElement>(null);\n const { tabIndex: clickableHeaderTabIndex } = useSingleTabStopNavigation(clickableHeaderRef, { tabIndex });\n\n const cellRefObject = useRef<HTMLElement>(null);\n const cellRefCombined = useMergeRefs(cellRef, cellRefObject);\n\n // Keep sticky and non-sticky headers in sync for dynamic cell\n // content changes. This is only needed when:\n // - Column has dynamic content\n // - This is the non-sticky version of a sticky header (hidden === true)\n // - Columns are not resizable\n useResizeObserver(hasDynamicContent ? cellRefObject : () => null, entry => {\n updateColumn(columnId, entry.borderBoxWidth);\n });\n\n return (\n <TableThElement\n resizableStyle={resizableStyle}\n cellRef={cellRefCombined}\n sortingStatus={sortingStatus}\n sortingDisabled={sortingDisabled}\n focusedComponent={focusedComponent}\n stuck={stuck}\n sticky={sticky}\n resizable={resizableColumns}\n hidden={hidden}\n stripedRows={stripedRows}\n colIndex={colIndex}\n columnId={columnId}\n stickyState={stickyState}\n tableRole={tableRole}\n variant={variant}\n tableVariant={tableVariant}\n colSpan={colSpan}\n rowSpan={rowSpan}\n columnGroupId={columnGroupId}\n isLast={isLast}\n {...(sortingDisabled\n ? {}\n : getAnalyticsMetadataAttribute({\n action: 'sort',\n detail: {\n position: `${colIndex + 1}`,\n columnId: column.id ? `${column.id}` : '',\n label: `.${analyticsSelectors['header-cell-text']}`,\n sortingDescending: `${!sortingDescending}`,\n },\n } as GeneratedAnalyticsMetadataTableSort))}\n >\n <div\n ref={clickableHeaderRef}\n data-focus-id={`sorting-control-${String(columnId)}`}\n className={clsx(styles['header-cell-content'], {\n [styles['header-cell-fake-focus']]: focusedComponent === `sorting-control-${String(columnId)}`,\n [styles['header-cell-content-expandable']]: isExpandable,\n })}\n aria-label={\n column.ariaLabel\n ? column.ariaLabel({\n sorted: sorted,\n descending: sorted && !!sortingDescending,\n disabled: !!sortingDisabled,\n })\n : undefined\n }\n {...(sortingStatus && !sortingDisabled\n ? {\n onKeyPress: handleKeyPress,\n tabIndex: clickableHeaderTabIndex,\n role: 'button',\n onClick: handleClick,\n }\n : {})}\n >\n <div\n className={clsx(\n styles['header-cell-text'],\n analyticsSelectors['header-cell-text'],\n wrapLines && styles['header-cell-text-wrap']\n )}\n id={headerId}\n >\n {column.header}\n {isEditable ? (\n <span className={styles['edit-icon']}>\n <InternalIcon\n name=\"edit\"\n ariaLabel={i18n('columnDefinitions.editConfig.editIconAriaLabel', column.editConfig?.editIconAriaLabel)}\n />\n </span>\n ) : null}\n </div>\n {sortingStatus && (\n <span className={styles['sorting-icon']}>\n <InternalIcon name={getSortingIconName(sortingStatus)} />\n </span>\n )}\n </div>\n {resizableColumns ? (\n <Resizer\n tabIndex={tabIndex}\n focusId={`resize-control-${String(columnId)}`}\n showFocusRing={focusedComponent === `resize-control-${String(columnId)}`}\n onWidthUpdate={newWidth => updateColumn(columnId, newWidth)}\n onWidthUpdateCommit={onResizeFinish}\n ariaLabelledby={headerId}\n minWidth={typeof column.minWidth === 'string' ? parseInt(column.minWidth) : column.minWidth}\n roleDescription={i18n('ariaLabels.resizerRoleDescription', resizerRoleDescription)}\n // TODO: Replace with this when strings are available\n // tooltipText={i18n('ariaLabels.resizerTooltipText', resizerTooltipText)}\n tooltipText={resizerTooltipText}\n isBorderless={variant === 'full-page' || variant === 'embedded' || variant === 'borderless'}\n isLast={isLast}\n isGrouped={isGrouped}\n dividerPosition={isLastChildOfGroup ? 'top' : undefined}\n />\n ) : (\n <Divider\n className={styles['resize-divider']}\n position={isLastChildOfGroup ? 'top' : undefined}\n isGrouped={isGrouped}\n />\n )}\n </TableThElement>\n );\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/table/header-cell/index.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport React, { useRef } from 'react';\nimport clsx from 'clsx';\n\nimport { useMergeRefs, useResizeObserver, useUniqueId } from '@cloudscape-design/component-toolkit/internal';\nimport { useSingleTabStopNavigation } from '@cloudscape-design/component-toolkit/internal';\nimport { getAnalyticsMetadataAttribute } from '@cloudscape-design/component-toolkit/internal/analytics-metadata';\n\nimport { useInternalI18n } from '../../i18n/context';\nimport InternalIcon from '../../icon/internal';\nimport ScreenreaderOnly from '../../internal/components/screenreader-only';\nimport { fireNonCancelableEvent } from '../../internal/events';\nimport { KeyCode } from '../../internal/keycode';\nimport { GeneratedAnalyticsMetadataTableSort } from '../analytics-metadata/interfaces';\nimport { TableProps } from '../interfaces';\nimport {\n appendSort,\n getSortIndex,\n removeSort,\n replaceSort,\n setDirection,\n toggleDirection,\n} from '../multi-column-sort/utils';\nimport { Divider, Resizer } from '../resizer';\nimport { BaseHeaderCellProps } from './common-props';\nimport { SortMenu, SortMenuAction } from './sort-menu';\nimport { TableThElement } from './th-element';\nimport { getSortingIconName, getSortingStatus, isSorted } from './utils';\n\nimport analyticsSelectors from '../analytics-metadata/styles.css.js';\nimport styles from './styles.css.js';\n\nexport interface TableHeaderCellProps<ItemType> extends BaseHeaderCellProps {\n column: TableProps.ColumnDefinition<ItemType>;\n activeSortingColumn?: TableProps.SortingColumn<ItemType>;\n sortingDescending?: boolean;\n sortingDisabled?: boolean;\n stuck?: boolean;\n onClick(detail: TableProps.SortingState<any>): void;\n multiColumnSort?: TableProps.MultiColumnSort<ItemType>;\n i18nStrings?: TableProps.I18nStrings;\n ariaLabels?: TableProps.AriaLabels<ItemType>;\n updateColumn: (columnId: PropertyKey, newWidth: number) => void;\n isEditable?: boolean;\n columnId: PropertyKey;\n isExpandable?: boolean;\n hasDynamicContent?: boolean;\n colSpan?: number;\n rowSpan?: number;\n columnGroupId?: string;\n isLastChildOfGroup?: boolean;\n isLast?: boolean;\n}\n\nexport function TableHeaderCell<ItemType>({\n tabIndex,\n column,\n activeSortingColumn,\n sortingDescending,\n sortingDisabled,\n wrapLines,\n focusedComponent,\n stuck,\n sticky,\n hidden,\n stripedRows,\n onClick,\n colIndex,\n updateColumn,\n resizableColumns,\n resizableStyle,\n onResizeFinish,\n isEditable,\n columnId,\n stickyState,\n cellRef,\n tableRole,\n resizerRoleDescription,\n resizerTooltipText,\n isExpandable,\n hasDynamicContent,\n variant,\n colSpan,\n rowSpan,\n columnGroupId,\n isLastChildOfGroup,\n isLast,\n tableVariant,\n multiColumnSort,\n i18nStrings,\n ariaLabels,\n}: TableHeaderCellProps<ItemType>) {\n const i18n = useInternalI18n('table');\n const sortable = !!column.sortingComparator || !!column.sortingField;\n const isGrouped = !!columnGroupId || (rowSpan ?? 1) > 1;\n // The sort menu only renders for a sortable, enabled column under multi-column sort.\n const hasSortMenu = !!multiColumnSort && sortable && !sortingDisabled;\n\n // Multi-column sort context — derived from `multiColumnSort.sortingColumns` when present.\n const multiSortIndex = multiColumnSort ? getSortIndex(multiColumnSort.sortingColumns, column) : null;\n const multiSortEntry =\n multiSortIndex !== null && multiColumnSort ? multiColumnSort.sortingColumns[multiSortIndex - 1] : undefined;\n const inMultiSort = multiSortIndex !== null;\n const isPrimaryMultiSort = multiSortIndex === 1;\n // Priority badges are only meaningful when 2+ columns are sorted; with a single column, the position number adds no information.\n const showPriorityBadge = !!multiColumnSort && multiColumnSort.sortingColumns.length >= 2 && multiSortIndex !== null;\n\n // For multi-sort, derive sorted/descending from the matching entry; otherwise fall back to single-sort props.\n const sorted = multiColumnSort ? inMultiSort : !!activeSortingColumn && isSorted(column, activeSortingColumn);\n const descending = multiColumnSort ? !!multiSortEntry?.isDescending : !!sortingDescending;\n const sortingStatus = getSortingStatus(sortable, sorted, descending, !!sortingDisabled);\n // In multi-sort, only the primary column declares aria-sort (ARIA only allows one column sorted at a time).\n const suppressAriaSort = !!multiColumnSort && inMultiSort && !isPrimaryMultiSort;\n\n // Screen-reader-only text appended to a sorted column header. The visible header text supplies the column name;\n // this adds the sort direction (only when `aria-sort` is suppressed, i.e. secondary columns) and the sort priority.\n const sortDirectionLabel = descending\n ? i18n('ariaLabels.sortDescending', ariaLabels?.sortDescending)\n : i18n('ariaLabels.sortAscending', ariaLabels?.sortAscending);\n const sortPriorityLabel = i18n(\n 'ariaLabels.sortPriority',\n ariaLabels?.sortPriority,\n format =>\n ({ priority }) =>\n format({ priority })\n );\n const sortAccessibleText = inMultiSort\n ? [\n suppressAriaSort ? sortDirectionLabel : undefined,\n showPriorityBadge ? sortPriorityLabel?.({ priority: multiSortIndex ?? 0 }) : undefined,\n ]\n .filter(Boolean)\n .join(' ')\n : '';\n const handleClick = (shiftKey = false) => {\n if (multiColumnSort) {\n const current = multiColumnSort.sortingColumns;\n let next: ReadonlyArray<TableProps.SortingState<ItemType>>;\n if (shiftKey && !inMultiSort) {\n next = appendSort(current, column, false);\n } else if (inMultiSort) {\n next = toggleDirection(current, column);\n } else {\n next = replaceSort(column, false);\n }\n fireNonCancelableEvent(multiColumnSort.onChange, { sortingColumns: next });\n return;\n }\n onClick({\n sortingColumn: column,\n isDescending: sorted ? !sortingDescending : false,\n });\n };\n\n const handleSortMenuAction = (action: SortMenuAction) => {\n // The sort menu is only rendered when `multiColumnSort` is set (see render below), so this guard\n // exists purely to narrow the type for the accesses that follow and is unreachable at runtime.\n /* istanbul ignore next */\n if (!multiColumnSort) {\n return;\n }\n const current = multiColumnSort.sortingColumns;\n let next: ReadonlyArray<TableProps.SortingState<ItemType>>;\n switch (action) {\n case 'sort-ascending':\n next = inMultiSort ? setDirection(current, column, false) : replaceSort(column, false);\n break;\n case 'sort-descending':\n next = inMultiSort ? setDirection(current, column, true) : replaceSort(column, true);\n break;\n case 'add-to-sort-ascending':\n next = appendSort(current, column, false);\n break;\n case 'add-to-sort-descending':\n next = appendSort(current, column, true);\n break;\n case 'remove-from-sort':\n next = removeSort(current, column);\n break;\n }\n fireNonCancelableEvent(multiColumnSort.onChange, { sortingColumns: next });\n };\n\n // Elements with role=\"button\" do not have the default behavior of <button>, where pressing\n // Enter or Space will trigger a click event. Therefore we need to add this ourselves.\n // The native <button> element cannot be used due to a misaligned implementation in Firefox:\n // https://bugzilla.mozilla.org/show_bug.cgi?id=843003\n const handleKeyPress = ({ nativeEvent: e }: React.KeyboardEvent) => {\n if (e.keyCode === KeyCode.enter || e.keyCode === KeyCode.space) {\n e.preventDefault();\n handleClick(e.shiftKey);\n }\n };\n\n const headerId = useUniqueId('table-header-');\n\n const clickableHeaderRef = useRef<HTMLDivElement>(null);\n const { tabIndex: clickableHeaderTabIndex } = useSingleTabStopNavigation(clickableHeaderRef, { tabIndex });\n\n const cellRefObject = useRef<HTMLElement>(null);\n const cellRefCombined = useMergeRefs(cellRef, cellRefObject);\n\n // Keep sticky and non-sticky headers in sync for dynamic cell\n // content changes. This is only needed when:\n // - Column has dynamic content\n // - This is the non-sticky version of a sticky header (hidden === true)\n // - Columns are not resizable\n useResizeObserver(hasDynamicContent ? cellRefObject : () => null, entry => {\n updateColumn(columnId, entry.borderBoxWidth);\n });\n\n return (\n <TableThElement\n resizableStyle={resizableStyle}\n cellRef={cellRefCombined}\n sortingStatus={sortingStatus}\n sortingDisabled={sortingDisabled}\n suppressAriaSort={suppressAriaSort}\n focusedComponent={focusedComponent}\n stuck={stuck}\n sticky={sticky}\n resizable={resizableColumns}\n hidden={hidden}\n stripedRows={stripedRows}\n colIndex={colIndex}\n columnId={columnId}\n stickyState={stickyState}\n tableRole={tableRole}\n variant={variant}\n tableVariant={tableVariant}\n colSpan={colSpan}\n rowSpan={rowSpan}\n columnGroupId={columnGroupId}\n isLast={isLast}\n {...(sortingDisabled\n ? {}\n : getAnalyticsMetadataAttribute({\n action: 'sort',\n detail: {\n position: `${colIndex + 1}`,\n columnId: column.id ? `${column.id}` : '',\n label: `.${analyticsSelectors['header-cell-text']}`,\n sortingDescending: `${!descending}`,\n },\n } as GeneratedAnalyticsMetadataTableSort))}\n >\n <div className={clsx(styles['header-cell-main'], hasSortMenu && styles['header-cell-main-with-menu'])}>\n <div\n ref={clickableHeaderRef}\n data-focus-id={`sorting-control-${String(columnId)}`}\n className={clsx(styles['header-cell-content'], {\n [styles['header-cell-fake-focus']]: focusedComponent === `sorting-control-${String(columnId)}`,\n [styles['header-cell-content-expandable']]: isExpandable,\n [styles['header-cell-content-multi-sorted']]: showPriorityBadge,\n [styles['header-cell-content-with-menu']]: hasSortMenu,\n })}\n aria-label={\n column.ariaLabel\n ? column.ariaLabel({\n sorted: sorted,\n descending: sorted && descending,\n disabled: !!sortingDisabled,\n sortIndex: multiSortIndex ?? undefined,\n })\n : undefined\n }\n {...(sortingStatus && !sortingDisabled\n ? {\n onKeyPress: handleKeyPress,\n tabIndex: clickableHeaderTabIndex,\n role: 'button',\n onClick: event => handleClick(event.shiftKey),\n // Prevent the browser from extending the text selection on Shift+click.\n onMouseDown: (event: React.MouseEvent) => {\n if (event.shiftKey) {\n event.preventDefault();\n }\n },\n }\n : {})}\n >\n <div\n className={clsx(\n styles['header-cell-text'],\n analyticsSelectors['header-cell-text'],\n wrapLines && styles['header-cell-text-wrap']\n )}\n id={headerId}\n >\n {column.header}\n {isEditable ? (\n <span className={styles['edit-icon']}>\n <InternalIcon\n name=\"edit\"\n ariaLabel={i18n(\n 'columnDefinitions.editConfig.editIconAriaLabel',\n column.editConfig?.editIconAriaLabel\n )}\n />\n </span>\n ) : null}\n </div>\n {sortAccessibleText && <ScreenreaderOnly>{sortAccessibleText}</ScreenreaderOnly>}\n {sortingStatus && (\n <span className={styles['sorting-icon']}>\n {showPriorityBadge && (\n <span className={styles['sort-priority-badge']} aria-hidden=\"true\">\n {multiSortIndex}\n </span>\n )}\n <InternalIcon name={getSortingIconName(sortingStatus)} />\n </span>\n )}\n </div>\n {hasSortMenu && (\n <SortMenu<ItemType>\n column={column}\n inSort={inMultiSort}\n isSortedAscending={inMultiSort && !descending}\n isSortedDescending={inMultiSort && descending}\n i18nStrings={i18nStrings}\n ariaLabel={ariaLabels?.sortMenuTriggerLabel}\n ariaDescribedby={headerId}\n onAction={handleSortMenuAction}\n />\n )}\n </div>\n {resizableColumns ? (\n <Resizer\n tabIndex={tabIndex}\n focusId={`resize-control-${String(columnId)}`}\n showFocusRing={focusedComponent === `resize-control-${String(columnId)}`}\n onWidthUpdate={newWidth => updateColumn(columnId, newWidth)}\n onWidthUpdateCommit={onResizeFinish}\n ariaLabelledby={headerId}\n minWidth={typeof column.minWidth === 'string' ? parseInt(column.minWidth) : column.minWidth}\n roleDescription={i18n('ariaLabels.resizerRoleDescription', resizerRoleDescription)}\n // TODO: Replace with this when strings are available\n // tooltipText={i18n('ariaLabels.resizerTooltipText', resizerTooltipText)}\n tooltipText={resizerTooltipText}\n isBorderless={variant === 'full-page' || variant === 'embedded' || variant === 'borderless'}\n isLast={isLast}\n isGrouped={isGrouped}\n dividerPosition={isLastChildOfGroup ? 'top' : undefined}\n />\n ) : (\n <Divider\n className={styles['resize-divider']}\n position={isLastChildOfGroup ? 'top' : undefined}\n isGrouped={isGrouped}\n />\n )}\n </TableThElement>\n );\n}\n"]}