@bundle-stats/ui 4.23.0-beta.1 → 4.23.0-beta.10

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 (324) hide show
  1. package/lib/app/app.js +2 -1
  2. package/lib/app/app.js.map +1 -1
  3. package/lib/app/app.module.css +8 -9
  4. package/lib/app/header/header.module.css +1 -3
  5. package/lib/components/asset-name/asset-name.js +8 -7
  6. package/lib/components/asset-name/asset-name.js.map +1 -1
  7. package/lib/components/asset-name/asset-name.module.css +11 -10
  8. package/lib/components/bundle-assets/bundle-assets.js +4 -2
  9. package/lib/components/bundle-assets/bundle-assets.js.map +1 -1
  10. package/lib/components/bundle-assets/bundle-assets.module.css +0 -12
  11. package/lib/components/bundle-assets/index.js +2 -1
  12. package/lib/components/bundle-assets/index.js.map +1 -1
  13. package/lib/components/bundle-assets-totals/bundle-assets-totals.js +4 -2
  14. package/lib/components/bundle-assets-totals/bundle-assets-totals.js.map +1 -1
  15. package/lib/components/bundle-modules/bundle-modules.js +5 -3
  16. package/lib/components/bundle-modules/bundle-modules.js.map +1 -1
  17. package/lib/components/bundle-modules/bundle-modules.module.css +2 -16
  18. package/lib/components/bundle-modules/index.js +2 -1
  19. package/lib/components/bundle-modules/index.js.map +1 -1
  20. package/lib/components/bundle-packages/bundle-packages.js +5 -3
  21. package/lib/components/bundle-packages/bundle-packages.js.map +1 -1
  22. package/lib/components/bundle-packages/bundle-packages.module.css +18 -22
  23. package/lib/components/entry-info/entry-info.js +4 -2
  24. package/lib/components/entry-info/entry-info.js.map +1 -1
  25. package/lib/components/entry-info/entry-info.module.css +7 -2
  26. package/lib/components/jobs-header/jobs-header.js +1 -1
  27. package/lib/components/jobs-header/jobs-header.js.map +1 -1
  28. package/lib/components/jobs-header/jobs-header.module.css +0 -1
  29. package/lib/components/metric-change-legend/metric-change-legend.js +2 -2
  30. package/lib/components/metric-change-legend/metric-change-legend.js.map +1 -1
  31. package/lib/components/metric-change-legend/metric-change-legend.module.css +11 -0
  32. package/lib/components/metric-run-info/metric-run-info.js +4 -11
  33. package/lib/components/metric-run-info/metric-run-info.js.map +1 -1
  34. package/lib/components/metrics-display-selector/metrics-display-selector.module.css +0 -2
  35. package/lib/components/metrics-table/metrics-table.js +31 -20
  36. package/lib/components/metrics-table/metrics-table.js.map +1 -1
  37. package/lib/components/metrics-table/metrics-table.module.css +4 -12
  38. package/lib/components/metrics-table-options/metrics-table-options.js +5 -6
  39. package/lib/components/metrics-table-options/metrics-table-options.js.map +1 -1
  40. package/lib/components/metrics-table-row-count/index.js +18 -0
  41. package/lib/components/metrics-table-row-count/index.js.map +1 -0
  42. package/lib/components/metrics-table-row-count/metrics-table-row-count.js +17 -0
  43. package/lib/components/metrics-table-row-count/metrics-table-row-count.js.map +1 -0
  44. package/lib/components/metrics-table-row-count/metrics-table-row-count.module.css +5 -0
  45. package/lib/components/metrics-treemap/metrics-treemap.constants.js +3 -1
  46. package/lib/components/metrics-treemap/metrics-treemap.constants.js.map +1 -1
  47. package/lib/components/metrics-treemap/metrics-treemap.js +46 -113
  48. package/lib/components/metrics-treemap/metrics-treemap.js.map +1 -1
  49. package/lib/components/metrics-treemap/metrics-treemap.module.css +3 -274
  50. package/lib/components/metrics-treemap/metrics-treemap.utils.js +81 -16
  51. package/lib/components/metrics-treemap/metrics-treemap.utils.js.map +1 -1
  52. package/lib/components/metrics-treemap/tile/index.js +18 -0
  53. package/lib/components/metrics-treemap/tile/index.js.map +1 -0
  54. package/lib/components/metrics-treemap/tile/tile.js +79 -0
  55. package/lib/components/metrics-treemap/tile/tile.js.map +1 -0
  56. package/lib/components/metrics-treemap/tile/tile.module.css +145 -0
  57. package/lib/components/metrics-treemap/tile-group/index.js +18 -0
  58. package/lib/components/metrics-treemap/tile-group/index.js.map +1 -0
  59. package/lib/components/metrics-treemap/tile-group/tile-group.js +75 -0
  60. package/lib/components/metrics-treemap/tile-group/tile-group.js.map +1 -0
  61. package/lib/components/metrics-treemap/tile-group/tile-group.module.css +57 -0
  62. package/lib/components/metrics-treemap/tile-group-title/index.js +18 -0
  63. package/lib/components/metrics-treemap/tile-group-title/index.js.map +1 -0
  64. package/lib/components/metrics-treemap/tile-group-title/tile-group-title.js +24 -0
  65. package/lib/components/metrics-treemap/tile-group-title/tile-group-title.js.map +1 -0
  66. package/lib/components/metrics-treemap/tile-group-title/tile-group-title.module.css +48 -0
  67. package/lib/components/sort-button/sort-button.module.css +0 -2
  68. package/lib/components/summary/summary.js +5 -4
  69. package/lib/components/summary/summary.js.map +1 -1
  70. package/lib/components/summary/summary.module.css +10 -14
  71. package/lib/css/default.css +7 -4
  72. package/lib/css/variables.css +36 -25
  73. package/lib/layout/flex-stack/flex-stack.js +2 -2
  74. package/lib/layout/flex-stack/flex-stack.js.map +1 -1
  75. package/lib/layout/flex-stack/flex-stack.module.css +65 -10
  76. package/lib/query-state.js +6 -3
  77. package/lib/query-state.js.map +1 -1
  78. package/lib/ui/button/button.js +3 -2
  79. package/lib/ui/button/button.js.map +1 -1
  80. package/lib/ui/button/button.module.css +38 -27
  81. package/lib/ui/control-group/control-group.js +1 -1
  82. package/lib/ui/control-group/control-group.js.map +1 -1
  83. package/lib/ui/copy-to-clipboard/copy-to-clipboard.module.css +2 -2
  84. package/lib/ui/dialog/dialog.js +3 -1
  85. package/lib/ui/dialog/dialog.js.map +1 -1
  86. package/lib/ui/dialog/dialog.module.css +5 -0
  87. package/lib/ui/dropdown/dropdown.js +11 -3
  88. package/lib/ui/dropdown/dropdown.js.map +1 -1
  89. package/lib/ui/dropdown/dropdown.module.css +49 -7
  90. package/lib/ui/filters/filters.js +28 -16
  91. package/lib/ui/filters/filters.js.map +1 -1
  92. package/lib/ui/filters/filters.module.css +3 -19
  93. package/lib/ui/hover-card/hover-card.js +7 -1
  94. package/lib/ui/hover-card/hover-card.js.map +1 -1
  95. package/lib/ui/hover-card/hover-card.module.css +5 -6
  96. package/lib/ui/input/input.module.css +2 -2
  97. package/lib/ui/table/table.module.css +12 -5
  98. package/lib/ui/tabs/tabs.module.css +13 -9
  99. package/lib/ui/tag/tag.module.css +0 -2
  100. package/lib/ui/textarea/textarea.module.css +2 -2
  101. package/lib/ui/toolbar/toolbar.js +2 -1
  102. package/lib/ui/toolbar/toolbar.js.map +1 -1
  103. package/lib/ui/toolbar/toolbar.module.css +0 -6
  104. package/lib/ui/tooltip/tooltip.js +6 -1
  105. package/lib/ui/tooltip/tooltip.js.map +1 -1
  106. package/lib/ui/tooltip/tooltip.module.css +1 -1
  107. package/lib/utils/index.js +1 -0
  108. package/lib/utils/index.js.map +1 -1
  109. package/lib/utils/portal.js +10 -0
  110. package/lib/utils/portal.js.map +1 -0
  111. package/lib-esm/app/app.js +2 -1
  112. package/lib-esm/app/app.js.map +1 -1
  113. package/lib-esm/app/app.module.css +8 -9
  114. package/lib-esm/app/header/header.module.css +1 -3
  115. package/lib-esm/components/asset-name/asset-name.js +8 -7
  116. package/lib-esm/components/asset-name/asset-name.js.map +1 -1
  117. package/lib-esm/components/asset-name/asset-name.module.css +11 -10
  118. package/lib-esm/components/bundle-assets/bundle-assets.js +4 -2
  119. package/lib-esm/components/bundle-assets/bundle-assets.js.map +1 -1
  120. package/lib-esm/components/bundle-assets/bundle-assets.module.css +0 -12
  121. package/lib-esm/components/bundle-assets/index.js +2 -1
  122. package/lib-esm/components/bundle-assets/index.js.map +1 -1
  123. package/lib-esm/components/bundle-assets-totals/bundle-assets-totals.js +4 -2
  124. package/lib-esm/components/bundle-assets-totals/bundle-assets-totals.js.map +1 -1
  125. package/lib-esm/components/bundle-modules/bundle-modules.js +5 -3
  126. package/lib-esm/components/bundle-modules/bundle-modules.js.map +1 -1
  127. package/lib-esm/components/bundle-modules/bundle-modules.module.css +2 -16
  128. package/lib-esm/components/bundle-modules/index.js +2 -1
  129. package/lib-esm/components/bundle-modules/index.js.map +1 -1
  130. package/lib-esm/components/bundle-packages/bundle-packages.js +5 -3
  131. package/lib-esm/components/bundle-packages/bundle-packages.js.map +1 -1
  132. package/lib-esm/components/bundle-packages/bundle-packages.module.css +18 -22
  133. package/lib-esm/components/entry-info/entry-info.js +4 -2
  134. package/lib-esm/components/entry-info/entry-info.js.map +1 -1
  135. package/lib-esm/components/entry-info/entry-info.module.css +7 -2
  136. package/lib-esm/components/jobs-header/jobs-header.js +1 -1
  137. package/lib-esm/components/jobs-header/jobs-header.js.map +1 -1
  138. package/lib-esm/components/jobs-header/jobs-header.module.css +0 -1
  139. package/lib-esm/components/metric-change-legend/metric-change-legend.js +2 -2
  140. package/lib-esm/components/metric-change-legend/metric-change-legend.js.map +1 -1
  141. package/lib-esm/components/metric-change-legend/metric-change-legend.module.css +11 -0
  142. package/lib-esm/components/metric-run-info/metric-run-info.js +5 -12
  143. package/lib-esm/components/metric-run-info/metric-run-info.js.map +1 -1
  144. package/lib-esm/components/metrics-display-selector/metrics-display-selector.module.css +0 -2
  145. package/lib-esm/components/metrics-table/metrics-table.js +32 -20
  146. package/lib-esm/components/metrics-table/metrics-table.js.map +1 -1
  147. package/lib-esm/components/metrics-table/metrics-table.module.css +4 -12
  148. package/lib-esm/components/metrics-table-options/metrics-table-options.js +6 -7
  149. package/lib-esm/components/metrics-table-options/metrics-table-options.js.map +1 -1
  150. package/lib-esm/components/metrics-table-row-count/index.js +2 -0
  151. package/lib-esm/components/metrics-table-row-count/index.js.map +1 -0
  152. package/lib-esm/components/metrics-table-row-count/metrics-table-row-count.js +10 -0
  153. package/lib-esm/components/metrics-table-row-count/metrics-table-row-count.js.map +1 -0
  154. package/lib-esm/components/metrics-table-row-count/metrics-table-row-count.module.css +5 -0
  155. package/lib-esm/components/metrics-treemap/metrics-treemap.constants.js +2 -0
  156. package/lib-esm/components/metrics-treemap/metrics-treemap.constants.js.map +1 -1
  157. package/lib-esm/components/metrics-treemap/metrics-treemap.js +52 -120
  158. package/lib-esm/components/metrics-treemap/metrics-treemap.js.map +1 -1
  159. package/lib-esm/components/metrics-treemap/metrics-treemap.module.css +3 -274
  160. package/lib-esm/components/metrics-treemap/metrics-treemap.utils.js +80 -18
  161. package/lib-esm/components/metrics-treemap/metrics-treemap.utils.js.map +1 -1
  162. package/lib-esm/components/metrics-treemap/tile/index.js +2 -0
  163. package/lib-esm/components/metrics-treemap/tile/index.js.map +1 -0
  164. package/lib-esm/components/metrics-treemap/tile/tile.js +40 -0
  165. package/lib-esm/components/metrics-treemap/tile/tile.js.map +1 -0
  166. package/lib-esm/components/metrics-treemap/tile/tile.module.css +145 -0
  167. package/lib-esm/components/metrics-treemap/tile-group/index.js +2 -0
  168. package/lib-esm/components/metrics-treemap/tile-group/index.js.map +1 -0
  169. package/lib-esm/components/metrics-treemap/tile-group/tile-group.js +35 -0
  170. package/lib-esm/components/metrics-treemap/tile-group/tile-group.js.map +1 -0
  171. package/lib-esm/components/metrics-treemap/tile-group/tile-group.module.css +57 -0
  172. package/lib-esm/components/metrics-treemap/tile-group-title/index.js +2 -0
  173. package/lib-esm/components/metrics-treemap/tile-group-title/index.js.map +1 -0
  174. package/lib-esm/components/metrics-treemap/tile-group-title/tile-group-title.js +17 -0
  175. package/lib-esm/components/metrics-treemap/tile-group-title/tile-group-title.js.map +1 -0
  176. package/lib-esm/components/metrics-treemap/tile-group-title/tile-group-title.module.css +48 -0
  177. package/lib-esm/components/sort-button/sort-button.module.css +0 -2
  178. package/lib-esm/components/summary/summary.js +5 -4
  179. package/lib-esm/components/summary/summary.js.map +1 -1
  180. package/lib-esm/components/summary/summary.module.css +10 -14
  181. package/lib-esm/css/default.css +7 -4
  182. package/lib-esm/css/variables.css +36 -25
  183. package/lib-esm/layout/flex-stack/flex-stack.js +3 -2
  184. package/lib-esm/layout/flex-stack/flex-stack.js.map +1 -1
  185. package/lib-esm/layout/flex-stack/flex-stack.module.css +65 -10
  186. package/lib-esm/query-state.js +7 -4
  187. package/lib-esm/query-state.js.map +1 -1
  188. package/lib-esm/ui/button/button.js +3 -2
  189. package/lib-esm/ui/button/button.js.map +1 -1
  190. package/lib-esm/ui/button/button.module.css +38 -27
  191. package/lib-esm/ui/control-group/control-group.js +1 -1
  192. package/lib-esm/ui/control-group/control-group.js.map +1 -1
  193. package/lib-esm/ui/copy-to-clipboard/copy-to-clipboard.module.css +2 -2
  194. package/lib-esm/ui/dialog/dialog.js +3 -1
  195. package/lib-esm/ui/dialog/dialog.js.map +1 -1
  196. package/lib-esm/ui/dialog/dialog.module.css +5 -0
  197. package/lib-esm/ui/dropdown/dropdown.js +9 -2
  198. package/lib-esm/ui/dropdown/dropdown.js.map +1 -1
  199. package/lib-esm/ui/dropdown/dropdown.module.css +49 -7
  200. package/lib-esm/ui/filters/filters.js +29 -17
  201. package/lib-esm/ui/filters/filters.js.map +1 -1
  202. package/lib-esm/ui/filters/filters.module.css +3 -19
  203. package/lib-esm/ui/hover-card/hover-card.js +7 -1
  204. package/lib-esm/ui/hover-card/hover-card.js.map +1 -1
  205. package/lib-esm/ui/hover-card/hover-card.module.css +5 -6
  206. package/lib-esm/ui/input/input.module.css +2 -2
  207. package/lib-esm/ui/table/table.module.css +12 -5
  208. package/lib-esm/ui/tabs/tabs.module.css +13 -9
  209. package/lib-esm/ui/tag/tag.module.css +0 -2
  210. package/lib-esm/ui/textarea/textarea.module.css +2 -2
  211. package/lib-esm/ui/toolbar/toolbar.js +2 -1
  212. package/lib-esm/ui/toolbar/toolbar.js.map +1 -1
  213. package/lib-esm/ui/toolbar/toolbar.module.css +0 -6
  214. package/lib-esm/ui/tooltip/tooltip.js +6 -1
  215. package/lib-esm/ui/tooltip/tooltip.js.map +1 -1
  216. package/lib-esm/ui/tooltip/tooltip.module.css +1 -1
  217. package/lib-esm/utils/index.js +1 -0
  218. package/lib-esm/utils/index.js.map +1 -1
  219. package/lib-esm/utils/portal.js +6 -0
  220. package/lib-esm/utils/portal.js.map +1 -0
  221. package/package.json +17 -17
  222. package/src/app/app.jsx +3 -2
  223. package/src/app/app.module.css +8 -9
  224. package/src/app/header/header.module.css +1 -3
  225. package/src/components/asset-name/asset-name.module.css +11 -10
  226. package/src/components/asset-name/asset-name.tsx +17 -14
  227. package/src/components/bundle-assets/bundle-assets.module.css +0 -12
  228. package/src/components/bundle-assets/bundle-assets.tsx +8 -1
  229. package/src/components/bundle-assets/index.tsx +3 -1
  230. package/src/components/bundle-assets-totals/bundle-assets-totals.jsx +6 -4
  231. package/src/components/bundle-modules/bundle-modules.module.css +2 -16
  232. package/src/components/bundle-modules/bundle-modules.tsx +10 -3
  233. package/src/components/bundle-modules/index.tsx +3 -1
  234. package/src/components/bundle-packages/bundle-packages.jsx +14 -3
  235. package/src/components/bundle-packages/bundle-packages.module.css +18 -22
  236. package/src/components/entry-info/entry-info.module.css +7 -2
  237. package/src/components/entry-info/entry-info.tsx +9 -3
  238. package/src/components/jobs-header/jobs-header.module.css +0 -1
  239. package/src/components/jobs-header/jobs-header.tsx +2 -2
  240. package/src/components/metric-change-legend/metric-change-legend.module.css +11 -0
  241. package/src/components/metric-change-legend/metric-change-legend.tsx +2 -2
  242. package/src/components/metric-run-info/metric-run-info.stories.tsx +9 -0
  243. package/src/components/metric-run-info/metric-run-info.tsx +10 -12
  244. package/src/components/metrics-display-selector/metrics-display-selector.module.css +0 -2
  245. package/src/components/metrics-table/metrics-table.module.css +4 -12
  246. package/src/components/metrics-table/metrics-table.tsx +70 -39
  247. package/src/components/metrics-table-options/metrics-table-options.tsx +14 -15
  248. package/src/components/metrics-table-row-count/index.ts +1 -0
  249. package/src/components/metrics-table-row-count/metrics-table-row-count.module.css +5 -0
  250. package/src/components/metrics-table-row-count/metrics-table-row-count.tsx +21 -0
  251. package/src/components/metrics-treemap/metrics-treemap.constants.ts +9 -0
  252. package/src/components/metrics-treemap/metrics-treemap.module.css +3 -274
  253. package/src/components/metrics-treemap/metrics-treemap.stories.utils.ts +46 -0
  254. package/src/components/metrics-treemap/metrics-treemap.tsx +123 -428
  255. package/src/components/metrics-treemap/metrics-treemap.utils.ts +161 -27
  256. package/src/components/metrics-treemap/tile/index.ts +1 -0
  257. package/src/components/metrics-treemap/tile/tile.module.css +145 -0
  258. package/src/components/metrics-treemap/tile/tile.stories.tsx +139 -0
  259. package/src/components/metrics-treemap/tile/tile.tsx +121 -0
  260. package/src/components/metrics-treemap/tile-group/index.ts +1 -0
  261. package/src/components/metrics-treemap/tile-group/tile-group.module.css +57 -0
  262. package/src/components/metrics-treemap/tile-group/tile-group.stories.tsx +163 -0
  263. package/src/components/metrics-treemap/tile-group/tile-group.tsx +177 -0
  264. package/src/components/metrics-treemap/tile-group-title/index.ts +1 -0
  265. package/src/components/metrics-treemap/tile-group-title/tile-group-title.module.css +48 -0
  266. package/src/components/metrics-treemap/tile-group-title/tile-group-title.stories.tsx +88 -0
  267. package/src/components/metrics-treemap/tile-group-title/tile-group-title.tsx +51 -0
  268. package/src/components/sort-button/sort-button.module.css +0 -2
  269. package/src/components/summary/summary.module.css +10 -14
  270. package/src/components/summary/summary.tsx +9 -8
  271. package/src/css/default.css +7 -4
  272. package/src/css/variables.css +36 -25
  273. package/src/layout/flex-stack/flex-stack.module.css +65 -10
  274. package/src/layout/flex-stack/flex-stack.stories.tsx +68 -9
  275. package/src/layout/flex-stack/flex-stack.tsx +24 -4
  276. package/src/query-state.tsx +9 -4
  277. package/src/ui/button/button.module.css +38 -27
  278. package/src/ui/button/button.stories.tsx +1 -1
  279. package/src/ui/button/button.tsx +3 -1
  280. package/src/ui/control-group/control-group.tsx +1 -1
  281. package/src/ui/copy-to-clipboard/copy-to-clipboard.module.css +2 -2
  282. package/src/ui/dialog/dialog.module.css +5 -0
  283. package/src/ui/dialog/dialog.stories.tsx +8 -0
  284. package/src/ui/dialog/dialog.tsx +7 -0
  285. package/src/ui/dropdown/dropdown.module.css +49 -7
  286. package/src/ui/dropdown/dropdown.stories.tsx +6 -0
  287. package/src/ui/dropdown/dropdown.tsx +13 -2
  288. package/src/ui/filters/filters.module.css +3 -19
  289. package/src/ui/filters/filters.tsx +131 -67
  290. package/src/ui/hover-card/hover-card.module.css +5 -6
  291. package/src/ui/hover-card/hover-card.tsx +7 -1
  292. package/src/ui/input/input.module.css +2 -2
  293. package/src/ui/table/table.module.css +12 -5
  294. package/src/ui/tabs/tabs.module.css +13 -9
  295. package/src/ui/tag/tag.module.css +0 -2
  296. package/src/ui/textarea/textarea.module.css +2 -2
  297. package/src/ui/toolbar/toolbar.jsx +4 -1
  298. package/src/ui/toolbar/toolbar.module.css +0 -6
  299. package/src/ui/tooltip/tooltip.module.css +1 -1
  300. package/src/ui/tooltip/tooltip.tsx +6 -1
  301. package/src/utils/index.ts +1 -0
  302. package/src/utils/portal.ts +9 -0
  303. package/types/components/metric-run-info/metric-run-info.d.ts +1 -0
  304. package/types/components/metrics-table/metrics-table.d.ts +2 -1
  305. package/types/components/metrics-table-row-count/index.d.ts +1 -0
  306. package/types/components/metrics-table-row-count/metrics-table-row-count.d.ts +7 -0
  307. package/types/components/metrics-treemap/metrics-treemap.constants.d.ts +2 -0
  308. package/types/components/metrics-treemap/metrics-treemap.utils.d.ts +16 -5
  309. package/types/components/metrics-treemap/tile/index.d.ts +1 -0
  310. package/types/components/metrics-treemap/tile/tile.d.ts +11 -0
  311. package/types/components/metrics-treemap/tile-group/index.d.ts +1 -0
  312. package/types/components/metrics-treemap/tile-group/tile-group.d.ts +20 -0
  313. package/types/components/metrics-treemap/tile-group-title/index.d.ts +1 -0
  314. package/types/components/metrics-treemap/tile-group-title/tile-group-title.d.ts +12 -0
  315. package/types/layout/flex-stack/flex-stack.d.ts +6 -2
  316. package/types/ui/button/button.d.ts +1 -0
  317. package/types/ui/dropdown/dropdown.d.ts +3 -1
  318. package/types/ui/filters/filters.d.ts +2 -1
  319. package/types/utils/index.d.ts +1 -0
  320. package/types/utils/portal.d.ts +1 -0
  321. package/vitest.config.ts +4 -0
  322. package/lib/components/metrics-table-options/metrics-table-options.module.css +0 -15
  323. package/lib-esm/components/metrics-table-options/metrics-table-options.module.css +0 -15
  324. package/src/components/metrics-table-options/metrics-table-options.module.css +0 -15
@@ -9,6 +9,7 @@ import {
9
9
  } from 'ariakit/dialog';
10
10
 
11
11
  import { Stack } from '../../layout/stack';
12
+ import { getCreatePortalElement } from '../../utils/portal';
12
13
  import { BUTTON_GLYPHS, Button } from '../button';
13
14
  import css from './dialog.module.css';
14
15
 
@@ -16,6 +17,11 @@ export const useDialogState = (options: DialogStateProps = {}) => {
16
17
  return useAriakitDialogState({ animated: true, ...options });
17
18
  };
18
19
 
20
+ /**
21
+ * Raise the z-index of the overlays nested inside the dialog
22
+ */
23
+ const createPortalElement = getCreatePortalElement(css.portal);
24
+
19
25
  type AriakitDialogProps = ComponentProps<typeof AriakitDialog>;
20
26
 
21
27
  type DialogProps = {
@@ -48,6 +54,7 @@ export const Dialog = (props: DialogProps) => {
48
54
  className: css.backdrop,
49
55
  }}
50
56
  portal
57
+ portalElement={createPortalElement}
51
58
  className={rootClassName}
52
59
  >
53
60
  {!modal && (
@@ -13,9 +13,12 @@
13
13
  border-radius: var(--radius-small);
14
14
  box-shadow: var(--shadow-layer);
15
15
  background: var(--color-background);
16
- min-width: 12em;
17
- z-index: var(--layer-high);
18
- padding: calc(var(--space-xxxsmall) / 2);
16
+ min-width: 16em;
17
+ z-index: var(--layer-overlay);
18
+ padding: var(--space-xxxsmall);
19
+ color: var(--color-text-light);
20
+ font-size: var(--size-small);
21
+ line-height: var(--line-height);
19
22
  opacity: 0;
20
23
  transition: var(--transition-out);
21
24
  }
@@ -40,14 +43,15 @@
40
43
  outline: none;
41
44
  border: 0;
42
45
  border-radius: var(--radius-small);
43
- padding: calc(var(--space-xxxsmall) + var(--space-xxxsmall) / 2);
46
+ padding: var(--space-xxxsmall);
44
47
  background: none;
48
+ color: inherit;
49
+ font-size: inherit;
50
+ line-height: inherit;
45
51
  text-align: left;
46
- color: var(--color-text-light);
47
- font-size: var(--size-small);
48
- line-height: var(--line-height);
49
52
  text-decoration: none;
50
53
  cursor: default;
54
+ transition: var(--transition-out);
51
55
  }
52
56
 
53
57
  .item[data-active-item],
@@ -56,6 +60,7 @@
56
60
  .item:active {
57
61
  background: var(--color-highlight);
58
62
  color: var(--color-text);
63
+ transition: var(--transition-in);
59
64
  }
60
65
 
61
66
  .itemActive {
@@ -69,3 +74,40 @@
69
74
  background: var(--color-highlight-info);
70
75
  color: var(--color-primary-dark);
71
76
  }
77
+
78
+ .item + .item {
79
+ margin-top: calc(var(--space-xxxsmall) / 2);
80
+ }
81
+
82
+ .group {
83
+ position: relative;
84
+ padding: calc(var(--space-xxxsmall) / 2 + 1px) 0 calc(var(--space-xxxsmall) / 2);
85
+ }
86
+
87
+ .group::before {
88
+ content: ' ';
89
+ display: block;
90
+ position: absolute;
91
+ left: var(--space-xxxsmall);
92
+ right: var(--space-xxxsmall);
93
+ top: 0px;
94
+ height: 1px;
95
+ border: none;
96
+ background: var(--color-outline);
97
+ }
98
+
99
+ .group:first-child {
100
+ padding-top: 0;
101
+ }
102
+
103
+ .group:first-child::before {
104
+ display: none;
105
+ }
106
+
107
+ .group:last-child {
108
+ padding-bottom: 0;
109
+ }
110
+
111
+ .group:empty {
112
+ display: none;
113
+ }
@@ -15,6 +15,12 @@ const meta = {
15
15
  <>
16
16
  <DropdownItem>Option 1</DropdownItem>
17
17
  <DropdownItem>Option 2</DropdownItem>
18
+ <DropdownItem as="a" href="#">
19
+ Option 3
20
+ </DropdownItem>
21
+ <DropdownItem as="button" onClick={() => alert('Select option')}>
22
+ Option 4
23
+ </DropdownItem>
18
24
  </>
19
25
  ),
20
26
  },
@@ -1,11 +1,20 @@
1
- import React from 'react';
1
+ import React, { ComponentProps } from 'react';
2
2
  import cx from 'classnames';
3
3
  import { Menu, MenuButton, MenuItem, MenuStateProps, useMenuState } from 'ariakit/menu';
4
+ import isNull from 'lodash/isNull';
5
+ import isUndefined from 'lodash/isUndefined';
4
6
 
5
7
  import { Button, BUTTON_SIZE } from '../button';
6
8
  import css from './dropdown.module.css';
7
9
  import { Icon } from '../icon';
8
10
 
11
+ export type DropdownGroupProps = ComponentProps<'div'>;
12
+
13
+ export const DropdownGroup = (props: DropdownGroupProps) => {
14
+ const { className, ...restProps } = props;
15
+ return <div className={cx(css.group, className)} {...restProps} />;
16
+ };
17
+
9
18
  interface DropdownItemProps {
10
19
  isActive?: boolean;
11
20
  }
@@ -37,7 +46,7 @@ export const Dropdown = (props: DropdownProps & React.ComponentProps<'div'>) =>
37
46
  label = null,
38
47
  ariaLabel = '',
39
48
  glyph = '',
40
- showChevron = true,
49
+ showChevron: initialShowChevron,
41
50
  disabled = false,
42
51
  placement,
43
52
  gutter = 4,
@@ -47,6 +56,7 @@ export const Dropdown = (props: DropdownProps & React.ComponentProps<'div'>) =>
47
56
 
48
57
  const dropdownAriaLabel = ariaLabel || (typeof label === 'string' ? label : '');
49
58
  const menuState = useMenuState({ animated: true, placement, gutter, shift });
59
+ const showChevron = isUndefined(initialShowChevron) ? !isNull(label) : initialShowChevron;
50
60
 
51
61
  return (
52
62
  <>
@@ -58,6 +68,7 @@ export const Dropdown = (props: DropdownProps & React.ComponentProps<'div'>) =>
58
68
  rightGlyph={showChevron ? Icon.ICONS.CHEVRON_DOWN : undefined}
59
69
  disabled={disabled}
60
70
  state={menuState}
71
+ toggleOnClick
61
72
  tabIndex={null}
62
73
  className={cx(css.button, className)}
63
74
  >
@@ -45,9 +45,9 @@
45
45
  transition: var(--transition-out);
46
46
  }
47
47
 
48
- .filterSingle:hover,
48
+ .filterSingle:focus,
49
49
  .filterSingle:active,
50
- .filterSingle:focus {
50
+ .filterSingle:hover {
51
51
  border-color: var(--color-outline-dark);
52
52
  transition: var(--transition-in);
53
53
  }
@@ -72,8 +72,6 @@
72
72
  right: 2px;
73
73
  top: 50%;
74
74
  transform: translateY(-50%);
75
- padding: var(--space-xxxsmall);
76
- font-size: var(--size-xsmall);
77
75
  line-height: 1.1;
78
76
  }
79
77
 
@@ -101,23 +99,9 @@
101
99
  text-transform: lowercase;
102
100
  }
103
101
 
104
- .filterGroupSearchWrapper {
105
- padding-bottom: var(--space-xxxsmall);
106
- margin-bottom: var(--space-xxxsmall);
107
- border-bottom: 1px solid var(--color-outline);
108
- }
109
-
110
102
  .filterGroupSearchNotFound {
111
- padding: var(--space-xxsmall) 0;
112
103
  text-align: center;
104
+ min-height: calc(10 * (var(--space-small) + 2 * var(--space-xxxsmall)));
113
105
  font-size: var(--size-small);
114
106
  color: var(--color-text-light);
115
107
  }
116
-
117
- .filterGroupActions {
118
- margin-top: var(--space-xxxsmall);
119
- padding-top: var(--space-xxxsmall);
120
- padding-bottom: var(--space-xxxsmall);
121
- margin-bottom: calc(0px - var(--space-xxxsmall));
122
- border-top: 1px solid var(--color-outline);
123
- }
@@ -6,7 +6,7 @@ import { FlexStack } from '../../layout/flex-stack';
6
6
  import { Stack } from '../../layout/stack';
7
7
  import { Button } from '../button';
8
8
  import { ControlGroup } from '../control-group';
9
- import { Dropdown, DropdownItem } from '../dropdown';
9
+ import { Dropdown, DropdownGroup, DropdownItem } from '../dropdown';
10
10
  import { InputSearch } from '../input-search';
11
11
  import * as I18N from './filters.i18n';
12
12
  import { getGroupFiltersLabelSuffix, LABELS } from './filters.utils';
@@ -20,12 +20,7 @@ const Filter = (props: FilterBooleanProps) => {
20
20
  const { className = '', label, name, ...inputProps } = props;
21
21
 
22
22
  return (
23
- <FlexStack
24
- space="xxxsmall"
25
- alignItems="center"
26
- as="label"
27
- className={cx(css.filter, className)}
28
- >
23
+ <FlexStack gap="xxxsmall" alignItems="center" as="label" className={cx(css.filter, className)}>
29
24
  <input
30
25
  type="checkbox"
31
26
  id={`filter-${name}`}
@@ -40,12 +35,85 @@ const Filter = (props: FilterBooleanProps) => {
40
35
  );
41
36
  };
42
37
 
38
+ const getGroupItemKey = (groupKey: string, itemKey: string): string => `${groupKey}.${itemKey}`;
39
+
40
+ type ToggleFilters = (newFilters: Record<string, boolean>) => void;
41
+
42
+ type GetOnGroupCheck = (value: boolean, overrides?: Record<string, boolean>) => () => void;
43
+
44
+ interface FilterDropdownItemProps {
45
+ className?: string;
46
+ id: string;
47
+ label: string;
48
+ checked: boolean;
49
+ disabled?: boolean;
50
+ onChange: FilterBooleanProps['onChange'];
51
+ toggleFilters: ToggleFilters;
52
+ getOnGroupCheck: GetOnGroupCheck;
53
+ }
54
+
55
+ const FilterDropdownItem = (props: FilterDropdownItemProps) => {
56
+ const { className, id, label, checked, disabled, onChange, toggleFilters, getOnGroupCheck } =
57
+ props;
58
+
59
+ /**
60
+ * Toggle the filter when the menu item itself is activated: ariakit fires a click on the menu
61
+ * item when pressing Enter/Space, and clicking the item padding targets it directly. Clicks on
62
+ * the nested label/checkbox and on the only button are handled by their own handlers.
63
+ */
64
+ const onItemClick = useCallback(
65
+ (event: React.MouseEvent<HTMLDivElement>) => {
66
+ if (disabled || event.target !== event.currentTarget) {
67
+ return;
68
+ }
69
+
70
+ toggleFilters({ [id]: !checked });
71
+ },
72
+ [disabled, toggleFilters, id, checked],
73
+ );
74
+
75
+ /**
76
+ * Check only the current filter of the group
77
+ */
78
+ const onOnlyClick = useCallback(
79
+ () => getOnGroupCheck(false, { [id]: true })(),
80
+ [getOnGroupCheck, id],
81
+ );
82
+
83
+ return (
84
+ <DropdownItem
85
+ onClick={onItemClick}
86
+ hideOnClick={false}
87
+ className={cx(css.filterGroupItem, className)}
88
+ >
89
+ <Filter
90
+ label={label}
91
+ name={id}
92
+ onChange={onChange}
93
+ checked={checked}
94
+ disabled={disabled}
95
+ className={css.filterGroupItemFilter}
96
+ />
97
+ <Button
98
+ solid
99
+ size="xsmall"
100
+ type="button"
101
+ onClick={onOnlyClick}
102
+ disabled={disabled}
103
+ className={css.filterGroupOnlyButton}
104
+ >
105
+ {I18N.ONLY}
106
+ </Button>
107
+ </DropdownItem>
108
+ );
109
+ };
110
+
43
111
  interface FilterGroupProps extends React.ComponentProps<'div'> {
44
112
  groupKey: string;
45
113
  data: FilterGroupFieldData;
46
114
  values: Record<string, boolean>;
47
115
  onCheckboxChange: FilterBooleanProps['onChange'];
48
- toggleFilters: (newFilters: Record<string, boolean>) => void;
116
+ toggleFilters: ToggleFilters;
49
117
  }
50
118
 
51
119
  const FilterGroup = (props: FilterGroupProps) => {
@@ -70,22 +138,24 @@ const FilterGroup = (props: FilterGroupProps) => {
70
138
  </>
71
139
  );
72
140
 
73
- const getOnGroupCheck =
74
- (value: boolean, overrides = {}) =>
75
- () => {
76
- const newFilters = groupItems.reduce(
77
- (agg, { key: itemKey }) => ({
78
- ...agg,
79
- [`${groupKey}.${itemKey}`]: value,
80
- }),
81
- {},
82
- );
83
-
84
- toggleFilters({
85
- ...newFilters,
86
- ...overrides,
87
- });
88
- };
141
+ const getOnGroupCheck: GetOnGroupCheck = useCallback(
142
+ (value, overrides = {}) =>
143
+ () => {
144
+ const newFilters = groupItems.reduce(
145
+ (agg, { key: itemKey }) => ({
146
+ ...agg,
147
+ [getGroupItemKey(groupKey, itemKey)]: value,
148
+ }),
149
+ {},
150
+ );
151
+
152
+ toggleFilters({
153
+ ...newFilters,
154
+ ...overrides,
155
+ });
156
+ },
157
+ [groupItems, groupKey, toggleFilters],
158
+ );
89
159
 
90
160
  const filteredGroupItems = useMemo(() => {
91
161
  if (!search) {
@@ -102,63 +172,57 @@ const FilterGroup = (props: FilterGroupProps) => {
102
172
  ariaLabel={`${groupLabel}: ${filterSuffix}`}
103
173
  >
104
174
  {groupItems.length > 10 && (
105
- <div className={css.filterGroupSearchWrapper}>
175
+ <DropdownGroup>
106
176
  <InputSearch
107
177
  defaultValue={search}
108
178
  onChange={setSearch}
109
179
  placeholder={I18N.GROUP_SEARCH}
110
180
  debounceWait={0}
111
181
  />
112
- </div>
182
+ </DropdownGroup>
113
183
  )}
114
- <div className={css.filterGroupItems}>
184
+ <DropdownGroup className={css.filterGroupItems}>
115
185
  {filteredGroupItems.length === 0 && (
116
- <Stack className={css.filterGroupSearchNotFound}>
117
- <p>{I18N.GROUP_NOT_FOUND}</p>
118
- <div>
119
- <Button
120
- size="small"
121
- kind="primary"
122
- type="button"
123
- onClick={() => setSearch('')}
124
- className={css.filterGroupSearchNotFoundClear}
125
- >
126
- {I18N.GROUP_SEARCH_CLEAR}
127
- </Button>
128
- </div>
129
- </Stack>
186
+ <FlexStack
187
+ alignItems="center"
188
+ justifyContent="center"
189
+ className={css.filterGroupSearchNotFound}
190
+ >
191
+ <Stack space="xxxsmall">
192
+ <p>{I18N.GROUP_NOT_FOUND}</p>
193
+ <div>
194
+ <Button
195
+ solid
196
+ size="xsmall"
197
+ type="button"
198
+ onClick={() => setSearch('')}
199
+ className={css.filterGroupSearchNotFoundClear}
200
+ >
201
+ {I18N.GROUP_SEARCH_CLEAR}
202
+ </Button>
203
+ </div>
204
+ </Stack>
205
+ </FlexStack>
130
206
  )}
131
207
  {filteredGroupItems.map(({ key: itemKey, ...itemData }) => {
132
- const id = [groupKey, itemKey].join('.');
133
- const getOnOnlyClick = () => getOnGroupCheck(false, { [id]: true });
208
+ const id = getGroupItemKey(groupKey, itemKey);
134
209
 
135
210
  return (
136
- <DropdownItem key={id} className={css.filterGroupItem}>
137
- <Filter
138
- label={itemData.label}
139
- name={id}
140
- onChange={onCheckboxChange}
141
- checked={values[id]}
142
- disabled={itemData.disabled}
143
- className={css.filterGroupItemFilter}
144
- />
145
- <Button
146
- kind="info"
147
- solid
148
- size="small"
149
- type="button"
150
- onClick={getOnOnlyClick()}
151
- disabled={itemData.disabled}
152
- className={css.filterGroupOnlyButton}
153
- >
154
- {I18N.ONLY}
155
- </Button>
156
- </DropdownItem>
211
+ <FilterDropdownItem
212
+ key={id}
213
+ id={id}
214
+ label={itemData.label}
215
+ checked={values[id]}
216
+ disabled={itemData.disabled}
217
+ onChange={onCheckboxChange}
218
+ toggleFilters={toggleFilters}
219
+ getOnGroupCheck={getOnGroupCheck}
220
+ />
157
221
  );
158
222
  })}
159
- </div>
223
+ </DropdownGroup>
160
224
  {filteredGroupItems.length !== 0 && (
161
- <div className={css.filterGroupActions}>
225
+ <DropdownGroup className={css.filterGroupActions}>
162
226
  {areAllGroupItemsChecked ? (
163
227
  <DropdownItem id="clear-all" onClick={getOnGroupCheck(false)} role="button">
164
228
  {I18N.CLEAR}
@@ -168,7 +232,7 @@ const FilterGroup = (props: FilterGroupProps) => {
168
232
  {I18N.CHECK}
169
233
  </DropdownItem>
170
234
  )}
171
- </div>
235
+ </DropdownGroup>
172
236
  )}
173
237
  </Dropdown>
174
238
  );
@@ -10,17 +10,16 @@
10
10
  transition: var(--transition-out);
11
11
  }
12
12
 
13
+ .anchor:focus,
14
+ .anchor:active,
13
15
  .anchor:hover {
14
- color: var(--color-primary);
15
- transition: var(--transition-in);
16
- }
17
-
18
- .anchor:focus {
16
+ color: var(--color-accent-dark);
19
17
  outline: 0;
18
+ transition: var(--transition-in);
20
19
  }
21
20
 
22
21
  .hoverCard {
23
- z-index: var(--layer-high);
22
+ z-index: var(--layer-overlay);
24
23
  padding: var(--space-small);
25
24
  border-radius: var(--radius-medium);
26
25
  width: calc(100vw - 2 * var(--space-small));
@@ -31,7 +31,13 @@ export const HoverCard = (props: HoverCardProps) => {
31
31
  children,
32
32
  } = props;
33
33
 
34
- const state = useHovercardState({ animated: true, gutter: 8, timeout: 300, placement: 'top' });
34
+ const state = useHovercardState({
35
+ animated: true,
36
+ gutter: 8,
37
+ timeout: 300,
38
+ overflowPadding: 48,
39
+ placement: 'top',
40
+ });
35
41
  const hovercardProps = useHovercard({ state, portal: true });
36
42
 
37
43
  // Fallback to span if no href
@@ -3,7 +3,7 @@
3
3
  border-radius: var(--radius-small);
4
4
  color: var(--color-text-light);
5
5
  width: 100%;
6
- transition: var(--transition-in);
6
+ transition: var(--transition-out);
7
7
  appearance: none;
8
8
  outline: none;
9
9
  }
@@ -27,7 +27,7 @@
27
27
  .root:focus {
28
28
  border-color: var(--color-outline-dark);
29
29
  color: inherit;
30
- transition: var(--transition-out);
30
+ transition: var(--transition-in);
31
31
  }
32
32
 
33
33
  /** Size modifier */
@@ -33,21 +33,28 @@
33
33
  border-top: 0;
34
34
  }
35
35
 
36
- .root tbody td a {
36
+ .root tbody a {
37
37
  color: inherit;
38
38
  text-decoration: none;
39
39
  }
40
40
 
41
- .root tbody td a:hover,
42
- .root tbody td a:focus,
43
- .root tbody td a:active {
44
- color: var(--color-primary);
41
+ .root tbody a:focus,
42
+ .root tbody a:active,
43
+ .root tbody a:hover {
44
+ color: var(--color-accent);
45
45
  text-decoration: underline;
46
46
  }
47
47
 
48
+ /* hover current row */
49
+ .root tbody tr th,
50
+ .root tbody tr td {
51
+ transition: var(--transition-out);
52
+ }
53
+
48
54
  .root tbody tr:hover th,
49
55
  .root tbody tr:hover td {
50
56
  background-color: var(--color-highlight-warning);
57
+ transition: var(--transition-in);
51
58
  }
52
59
 
53
60
  .empty {
@@ -13,7 +13,7 @@
13
13
  color: var(--color-text-ultra-light);
14
14
  font-weight: bold;
15
15
  text-decoration: none;
16
- transition: var(--ui-transition-out);
16
+ transition: var(--transition-out);
17
17
  }
18
18
 
19
19
  .item::after {
@@ -24,27 +24,31 @@
24
24
  right: 0;
25
25
  bottom: -1px;
26
26
  height: 2px;
27
- background: transparent;
27
+ background: currentColor;
28
+ opacity: 0;
29
+ transition: var(--transition-out);
28
30
  }
29
31
 
30
- .item:hover,
32
+ .item:focus,
31
33
  .item:active,
32
- .item:focus {
33
- color: var(--color-primary);
34
+ .item:hover {
35
+ color: var(--color-accent);
34
36
  outline: none;
35
- transition: var(--ui-transition-out);
36
37
  }
37
38
 
38
39
  .item:hover::after,
39
40
  .item:active::after,
40
41
  .item:focus::after {
41
- background: currentColor;
42
+ opacity: 1;
43
+ transition: var(--transition-in);
42
44
  }
43
45
 
44
46
  .itemActive {
45
- color: var(--color-primary);
47
+ color: var(--color-accent);
48
+ transition: var(--transition-in);
46
49
  }
47
50
 
48
51
  .itemActive::after {
49
- background: currentColor;
52
+ opacity: 1;
53
+ transition: var(--transition-in);
50
54
  }
@@ -10,7 +10,6 @@
10
10
 
11
11
  a.root {
12
12
  text-decoration: none;
13
- transition: var(--transition-out);
14
13
  }
15
14
 
16
15
  a.root:hover,
@@ -19,7 +18,6 @@ a.root:active {
19
18
  opacity: 0.8;
20
19
  color: var(--color-light);
21
20
  text-decoration: none;
22
- transition: var(--transition-in);
23
21
  }
24
22
 
25
23
  /** Kind variation */
@@ -4,7 +4,7 @@
4
4
  color: var(--color-text-light);
5
5
  width: 100%;
6
6
  resize: vertical;
7
- transition: var(--transition-in);
7
+ transition: var(--transition-out);
8
8
  appearance: none;
9
9
  outline: none;
10
10
  }
@@ -28,7 +28,7 @@
28
28
  .root:focus {
29
29
  border-color: var(--color-outline-dark);
30
30
  color: inherit;
31
- transition: var(--transition-out);
31
+ transition: var(--transition-in);
32
32
  }
33
33
 
34
34
  .root[readonly=''] {
@@ -2,6 +2,7 @@ import React from 'react';
2
2
  import cx from 'classnames';
3
3
  import PropTypes from 'prop-types';
4
4
 
5
+ import { FlexStack } from '../../layout/flex-stack';
5
6
  import css from './toolbar.module.css';
6
7
 
7
8
  export const Toolbar = (props) => {
@@ -12,7 +13,9 @@ export const Toolbar = (props) => {
12
13
  <div className={rootClassName}>
13
14
  <div className={css.content}>{children}</div>
14
15
  {renderActions && (
15
- <div className={css.actions}>{renderActions({ actionClassName: css.action })}</div>
16
+ <FlexStack gap="xsmall" alignItems="center" className={css.actions}>
17
+ {renderActions({ actionClassName: css.action })}
18
+ </FlexStack>
16
19
  )}
17
20
  </div>
18
21
  );
@@ -6,18 +6,12 @@
6
6
 
7
7
  .actions {
8
8
  margin-top: var(--space-xsmall);
9
- display: flex;
10
- align-items: center;
11
9
  }
12
10
 
13
11
  .action {
14
12
  flex: 0 0 auto;
15
13
  }
16
14
 
17
- .action + .action {
18
- margin-left: var(--space-xsmall);
19
- }
20
-
21
15
  @media (min-width: 768px) {
22
16
  .root {
23
17
  display: flex;