@bundle-stats/ui 4.13.0-beta.0 → 4.13.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 (207) hide show
  1. package/lib/app/app.js +4 -8
  2. package/lib/app/app.js.map +1 -1
  3. package/lib/app/app.module.css +2 -2
  4. package/lib/components/bundle-assets/bundle-assets.js +12 -5
  5. package/lib/components/bundle-assets/bundle-assets.js.map +1 -1
  6. package/lib/components/bundle-assets/bundle-assets.module.css +0 -5
  7. package/lib/components/bundle-assets/index.js +2 -2
  8. package/lib/components/bundle-assets/index.js.map +1 -1
  9. package/lib/components/bundle-assets-totals/bundle-assets-totals.js +22 -11
  10. package/lib/components/bundle-assets-totals/bundle-assets-totals.js.map +1 -1
  11. package/lib/components/bundle-modules/bundle-modules.js +22 -12
  12. package/lib/components/bundle-modules/bundle-modules.js.map +1 -1
  13. package/lib/components/bundle-modules/bundle-modules.module.css +0 -5
  14. package/lib/components/bundle-modules/index.js +2 -2
  15. package/lib/components/bundle-modules/index.js.map +1 -1
  16. package/lib/components/bundle-packages/bundle-packages.js +10 -3
  17. package/lib/components/bundle-packages/bundle-packages.js.map +1 -1
  18. package/lib/components/bundle-packages/bundle-packages.module.css +0 -5
  19. package/lib/components/bundle-packages/index.js +2 -2
  20. package/lib/components/bundle-packages/index.js.map +1 -1
  21. package/lib/components/index.js +1 -3
  22. package/lib/components/index.js.map +1 -1
  23. package/lib/components/jobs-header/jobs-header.module.css +0 -4
  24. package/lib/components/metrics-display-selector/metrics-display-selector.js +4 -10
  25. package/lib/components/metrics-display-selector/metrics-display-selector.js.map +1 -1
  26. package/lib/components/metrics-table/metrics-table.i18n.js +1 -6
  27. package/lib/components/metrics-table/metrics-table.i18n.js.map +1 -1
  28. package/lib/components/metrics-table/metrics-table.js +4 -37
  29. package/lib/components/metrics-table/metrics-table.js.map +1 -1
  30. package/lib/components/metrics-table/metrics-table.module.css +1 -44
  31. package/lib/components/{total-size-type-title → metrics-table-header}/index.js +1 -1
  32. package/lib/components/metrics-table-header/index.js.map +1 -0
  33. package/lib/components/metrics-table-header/metrics-table-header.i18n.js +9 -0
  34. package/lib/components/metrics-table-header/metrics-table-header.i18n.js.map +1 -0
  35. package/lib/components/metrics-table-header/metrics-table-header.js +79 -0
  36. package/lib/components/metrics-table-header/metrics-table-header.js.map +1 -0
  37. package/lib/components/metrics-table-header/metrics-table-header.module.css +51 -0
  38. package/lib/components/metrics-table-options/metrics-table-options.js +2 -2
  39. package/lib/components/metrics-table-options/metrics-table-options.js.map +1 -1
  40. package/lib/components/metrics-table-title/metrics-table-title.js +1 -1
  41. package/lib/components/metrics-table-title/metrics-table-title.js.map +1 -1
  42. package/lib/components/metrics-table-title/metrics-table-title.module.css +4 -4
  43. package/lib/components/metrics-treemap/metrics-treemap.js +66 -51
  44. package/lib/components/metrics-treemap/metrics-treemap.js.map +1 -1
  45. package/lib/components/metrics-treemap/metrics-treemap.module.css +89 -56
  46. package/lib/components/sort-button/sort-button.module.css +1 -0
  47. package/lib/css/variables.css +11 -11
  48. package/lib/hooks/entry-info.js +12 -0
  49. package/lib/hooks/entry-info.js.map +1 -0
  50. package/lib/layout/flex-stack/flex-stack.js +3 -4
  51. package/lib/layout/flex-stack/flex-stack.js.map +1 -1
  52. package/lib/layout/flex-stack/flex-stack.module.css +19 -23
  53. package/lib/query-state.js +1 -1
  54. package/lib/query-state.js.map +1 -1
  55. package/lib/ui/button/button.module.css +1 -0
  56. package/lib/ui/dropdown/dropdown.js +10 -40
  57. package/lib/ui/dropdown/dropdown.js.map +1 -1
  58. package/lib/ui/dropdown/index.js.map +1 -1
  59. package/lib/ui/filters/filters.js +33 -35
  60. package/lib/ui/filters/filters.js.map +1 -1
  61. package/lib/ui/filters/filters.module.css +55 -67
  62. package/lib/ui/hover-card/hover-card.js +1 -1
  63. package/lib/ui/hover-card/hover-card.js.map +1 -1
  64. package/lib/ui/toolbar/toolbar.module.css +1 -3
  65. package/lib-esm/app/app.js +4 -8
  66. package/lib-esm/app/app.js.map +1 -1
  67. package/lib-esm/app/app.module.css +2 -2
  68. package/lib-esm/components/bundle-assets/bundle-assets.js +12 -5
  69. package/lib-esm/components/bundle-assets/bundle-assets.js.map +1 -1
  70. package/lib-esm/components/bundle-assets/bundle-assets.module.css +0 -5
  71. package/lib-esm/components/bundle-assets/index.js +3 -3
  72. package/lib-esm/components/bundle-assets/index.js.map +1 -1
  73. package/lib-esm/components/bundle-assets-totals/bundle-assets-totals.js +23 -12
  74. package/lib-esm/components/bundle-assets-totals/bundle-assets-totals.js.map +1 -1
  75. package/lib-esm/components/bundle-modules/bundle-modules.js +22 -12
  76. package/lib-esm/components/bundle-modules/bundle-modules.js.map +1 -1
  77. package/lib-esm/components/bundle-modules/bundle-modules.module.css +0 -5
  78. package/lib-esm/components/bundle-modules/index.js +2 -2
  79. package/lib-esm/components/bundle-modules/index.js.map +1 -1
  80. package/lib-esm/components/bundle-packages/bundle-packages.js +10 -3
  81. package/lib-esm/components/bundle-packages/bundle-packages.js.map +1 -1
  82. package/lib-esm/components/bundle-packages/bundle-packages.module.css +0 -5
  83. package/lib-esm/components/bundle-packages/index.js +3 -3
  84. package/lib-esm/components/bundle-packages/index.js.map +1 -1
  85. package/lib-esm/components/index.js +0 -1
  86. package/lib-esm/components/index.js.map +1 -1
  87. package/lib-esm/components/jobs-header/jobs-header.module.css +0 -4
  88. package/lib-esm/components/metrics-display-selector/metrics-display-selector.js +4 -10
  89. package/lib-esm/components/metrics-display-selector/metrics-display-selector.js.map +1 -1
  90. package/lib-esm/components/metrics-table/metrics-table.i18n.js +0 -5
  91. package/lib-esm/components/metrics-table/metrics-table.i18n.js.map +1 -1
  92. package/lib-esm/components/metrics-table/metrics-table.js +4 -37
  93. package/lib-esm/components/metrics-table/metrics-table.js.map +1 -1
  94. package/lib-esm/components/metrics-table/metrics-table.module.css +1 -44
  95. package/lib-esm/components/metrics-table-header/index.js +2 -0
  96. package/lib-esm/components/metrics-table-header/index.js.map +1 -0
  97. package/lib-esm/components/metrics-table-header/metrics-table-header.i18n.js +6 -0
  98. package/lib-esm/components/metrics-table-header/metrics-table-header.i18n.js.map +1 -0
  99. package/lib-esm/components/metrics-table-header/metrics-table-header.js +49 -0
  100. package/lib-esm/components/metrics-table-header/metrics-table-header.js.map +1 -0
  101. package/lib-esm/components/metrics-table-header/metrics-table-header.module.css +51 -0
  102. package/lib-esm/components/metrics-table-options/metrics-table-options.js +3 -3
  103. package/lib-esm/components/metrics-table-options/metrics-table-options.js.map +1 -1
  104. package/lib-esm/components/metrics-table-title/metrics-table-title.js +1 -1
  105. package/lib-esm/components/metrics-table-title/metrics-table-title.js.map +1 -1
  106. package/lib-esm/components/metrics-table-title/metrics-table-title.module.css +4 -4
  107. package/lib-esm/components/metrics-treemap/metrics-treemap.js +69 -53
  108. package/lib-esm/components/metrics-treemap/metrics-treemap.js.map +1 -1
  109. package/lib-esm/components/metrics-treemap/metrics-treemap.module.css +89 -56
  110. package/lib-esm/components/sort-button/sort-button.module.css +1 -0
  111. package/lib-esm/css/variables.css +11 -11
  112. package/lib-esm/hooks/entry-info.js +8 -0
  113. package/lib-esm/hooks/entry-info.js.map +1 -0
  114. package/lib-esm/layout/flex-stack/flex-stack.js +3 -4
  115. package/lib-esm/layout/flex-stack/flex-stack.js.map +1 -1
  116. package/lib-esm/layout/flex-stack/flex-stack.module.css +19 -23
  117. package/lib-esm/query-state.js +1 -1
  118. package/lib-esm/query-state.js.map +1 -1
  119. package/lib-esm/ui/button/button.module.css +1 -0
  120. package/lib-esm/ui/dropdown/dropdown.js +8 -39
  121. package/lib-esm/ui/dropdown/dropdown.js.map +1 -1
  122. package/lib-esm/ui/dropdown/index.js.map +1 -1
  123. package/lib-esm/ui/filters/filters.js +34 -36
  124. package/lib-esm/ui/filters/filters.js.map +1 -1
  125. package/lib-esm/ui/filters/filters.module.css +55 -67
  126. package/lib-esm/ui/hover-card/hover-card.js +1 -1
  127. package/lib-esm/ui/hover-card/hover-card.js.map +1 -1
  128. package/lib-esm/ui/toolbar/toolbar.module.css +1 -3
  129. package/package.json +8 -10
  130. package/src/app/app.jsx +4 -12
  131. package/src/app/app.module.css +2 -2
  132. package/src/components/bundle-assets/bundle-assets.jsx +24 -7
  133. package/src/components/bundle-assets/bundle-assets.module.css +0 -5
  134. package/src/components/bundle-assets/index.jsx +8 -3
  135. package/src/components/bundle-assets-totals/bundle-assets-totals.jsx +55 -24
  136. package/src/components/bundle-modules/bundle-modules.module.css +0 -5
  137. package/src/components/bundle-modules/bundle-modules.tsx +60 -42
  138. package/src/components/bundle-modules/index.tsx +2 -2
  139. package/src/components/bundle-packages/bundle-packages.jsx +19 -5
  140. package/src/components/bundle-packages/bundle-packages.module.css +0 -5
  141. package/src/components/bundle-packages/index.jsx +8 -3
  142. package/src/components/index.js +0 -1
  143. package/src/components/jobs-header/jobs-header.module.css +0 -4
  144. package/src/components/metrics-display-selector/metrics-display-selector.tsx +8 -12
  145. package/src/components/metrics-table/metrics-table.i18n.ts +0 -7
  146. package/src/components/metrics-table/metrics-table.module.css +1 -44
  147. package/src/components/metrics-table/metrics-table.tsx +17 -153
  148. package/src/components/metrics-table-header/index.ts +1 -0
  149. package/src/components/metrics-table-header/metrics-table-header.i18n.ts +6 -0
  150. package/src/components/metrics-table-header/metrics-table-header.module.css +51 -0
  151. package/src/components/metrics-table-header/metrics-table-header.tsx +172 -0
  152. package/src/components/metrics-table-options/metrics-table-options.jsx +4 -10
  153. package/src/components/metrics-table-title/metrics-table-title.jsx +1 -1
  154. package/src/components/metrics-table-title/metrics-table-title.module.css +4 -4
  155. package/src/components/metrics-treemap/metrics-treemap.module.css +89 -56
  156. package/src/components/metrics-treemap/metrics-treemap.tsx +151 -118
  157. package/src/components/sort-button/sort-button.module.css +1 -0
  158. package/src/css/variables.css +11 -11
  159. package/src/hooks/entry-info.ts +19 -0
  160. package/src/layout/flex-stack/flex-stack.module.css +19 -23
  161. package/src/layout/flex-stack/flex-stack.tsx +2 -8
  162. package/src/query-state.tsx +1 -1
  163. package/src/ui/button/button.module.css +1 -0
  164. package/src/ui/dropdown/dropdown.stories.tsx +25 -0
  165. package/src/ui/dropdown/dropdown.tsx +66 -0
  166. package/src/ui/filters/filters.module.css +55 -67
  167. package/src/ui/filters/filters.stories.tsx +109 -0
  168. package/src/ui/filters/filters.tsx +128 -167
  169. package/src/ui/hover-card/hover-card.tsx +1 -1
  170. package/src/ui/toolbar/toolbar.module.css +1 -3
  171. package/types/components/bundle-assets-totals/bundle-assets-totals.d.ts +5 -1
  172. package/types/components/index.d.ts +0 -1
  173. package/types/components/metrics-display-selector/metrics-display-selector.d.ts +2 -2
  174. package/types/components/metrics-table/metrics-table.d.ts +4 -10
  175. package/types/components/metrics-table/metrics-table.i18n.d.ts +0 -5
  176. package/types/components/metrics-table-header/index.d.ts +1 -0
  177. package/types/components/metrics-table-header/metrics-table-header.d.ts +15 -0
  178. package/types/components/metrics-table-header/metrics-table-header.i18n.d.ts +5 -0
  179. package/types/hooks/entry-info.d.ts +8 -0
  180. package/types/ui/dropdown/dropdown.d.ts +12 -47
  181. package/types/ui/dropdown/index.d.ts +1 -1
  182. package/types/ui/filters/filters.d.ts +2 -7
  183. package/lib/components/bundle-assets-totals/bundle-assets-totals.module.css +0 -7
  184. package/lib/components/total-size-type-title/index.js.map +0 -1
  185. package/lib/components/total-size-type-title/total-size-type-title.js +0 -32
  186. package/lib/components/total-size-type-title/total-size-type-title.js.map +0 -1
  187. package/lib/components/total-size-type-title/total-size-type-title.module.css +0 -14
  188. package/lib/hooks/show-entry.js +0 -13
  189. package/lib/hooks/show-entry.js.map +0 -1
  190. package/lib-esm/components/bundle-assets-totals/bundle-assets-totals.module.css +0 -7
  191. package/lib-esm/components/total-size-type-title/index.js +0 -2
  192. package/lib-esm/components/total-size-type-title/index.js.map +0 -1
  193. package/lib-esm/components/total-size-type-title/total-size-type-title.js +0 -25
  194. package/lib-esm/components/total-size-type-title/total-size-type-title.js.map +0 -1
  195. package/lib-esm/components/total-size-type-title/total-size-type-title.module.css +0 -14
  196. package/lib-esm/hooks/show-entry.js +0 -9
  197. package/lib-esm/hooks/show-entry.js.map +0 -1
  198. package/src/components/bundle-assets-totals/bundle-assets-totals.module.css +0 -7
  199. package/src/components/total-size-type-title/index.js +0 -1
  200. package/src/components/total-size-type-title/total-size-type-title.jsx +0 -41
  201. package/src/components/total-size-type-title/total-size-type-title.module.css +0 -14
  202. package/src/hooks/show-entry.ts +0 -17
  203. package/src/ui/dropdown/dropdown.jsx +0 -88
  204. package/types/components/total-size-type-title/index.d.ts +0 -1
  205. package/types/components/total-size-type-title/total-size-type-title.d.ts +0 -14
  206. package/types/hooks/show-entry.d.ts +0 -10
  207. /package/src/ui/dropdown/{index.js → index.ts} +0 -0
@@ -0,0 +1,51 @@
1
+ /* columns */
2
+ .root .col {
3
+ padding-top: var(--space-xxsmall);
4
+ padding-bottom: var(--space-xxsmall);
5
+ }
6
+
7
+ .root .metric {
8
+ width: 55%;
9
+ vertical-align: middle;
10
+ }
11
+
12
+ .root .job {
13
+ padding-top: var(--space-xxsmall);
14
+ text-align: right;
15
+ }
16
+
17
+ .root .value {
18
+ text-align: right;
19
+ vertical-align: baseline;
20
+ width: 15%;
21
+ }
22
+
23
+ .root .delta {
24
+ text-align: right;
25
+ font-size: var(--size-xsmall);
26
+ vertical-align: baseline;
27
+ width: 10%;
28
+ color: pink;
29
+ }
30
+
31
+ .root .deltaPercentage {
32
+ width: 5%;
33
+ }
34
+
35
+ .jobName {
36
+ white-space: nowrap;
37
+ }
38
+
39
+ /* columns overrides for showHeaderSum */
40
+ .showHeaderSum .job {
41
+ border-bottom: 0;
42
+ padding-bottom: 0;
43
+ }
44
+
45
+ .showHeaderSum .sum {
46
+ padding-top: 0;
47
+ font-size: var(--size-small);
48
+ vertical-align: middle;
49
+ text-transform: none;
50
+ }
51
+
@@ -0,0 +1,172 @@
1
+ import React from 'react';
2
+ import cx from 'classnames';
3
+ import sum from 'lodash/sum';
4
+ import {
5
+ METRIC_TYPE_CONFIGS,
6
+ MetricTypes,
7
+ type ReportMetricRow,
8
+ getMetricRunInfo,
9
+ } from '@bundle-stats/utils';
10
+
11
+ import { Table } from '../../ui/table';
12
+ import { Delta } from '../delta';
13
+ import { JobName } from '../job-name';
14
+ import { Metric } from '../metric';
15
+ import { SortButton } from '../sort-button';
16
+ import * as I18N from './metrics-table-header.i18n';
17
+ import css from './metrics-table-header.module.css';
18
+
19
+ const METRIC_TYPE = METRIC_TYPE_CONFIGS[MetricTypes.FileSize];
20
+ const BASELINE_COLUMN_SPAN = 1;
21
+ const CURRENT_COLUMN_SPAN = 3;
22
+
23
+ interface JobColumnProps {
24
+ job: { label: string; internalBuildNumber: number };
25
+ isBaseline: boolean;
26
+ }
27
+
28
+ const JobColumn = ({ job, isBaseline }: JobColumnProps) => {
29
+ const colSpan = isBaseline ? BASELINE_COLUMN_SPAN : CURRENT_COLUMN_SPAN;
30
+ const { label, internalBuildNumber } = job;
31
+
32
+ if (!job) {
33
+ return <Table.Th colSpan={colSpan}>-</Table.Th>;
34
+ }
35
+
36
+ return (
37
+ <Table.Th className={cx(css.col, css.job)} colSpan={colSpan}>
38
+ <JobName
39
+ title={isBaseline ? I18N.BASELINE_TITLE : I18N.CURRENT_TITLE}
40
+ internalBuildNumber={internalBuildNumber}
41
+ className={css.jobName}
42
+ >
43
+ {label}
44
+ </JobName>
45
+ </Table.Th>
46
+ );
47
+ };
48
+
49
+ const getRowsRunTotal = (rows: Array<ReportMetricRow>, runIndex: number): number =>
50
+ sum(rows.map((row) => row?.runs?.[runIndex]?.value || 0));
51
+
52
+ interface ColumnSumProps {
53
+ rows: Array<ReportMetricRow>;
54
+ isBaseline: boolean;
55
+ runIndex: number;
56
+ sort?: any;
57
+ updateSort?: (val: any) => void;
58
+ }
59
+
60
+ const SumColumn = ({ rows, isBaseline, runIndex, updateSort, sort }: ColumnSumProps) => {
61
+ const currentRunTotal = getRowsRunTotal(rows, runIndex);
62
+ const baselineRunTotal = !isBaseline ? getRowsRunTotal(rows, runIndex + 1) : 0;
63
+ const total = getMetricRunInfo(METRIC_TYPE, currentRunTotal, baselineRunTotal);
64
+ const fieldPath = `runs[${runIndex}]`;
65
+
66
+ return (
67
+ <>
68
+ <Table.Th className={cx(css.col, css.value, css.sum)}>
69
+ <SortButton
70
+ fieldPath={fieldPath}
71
+ fieldName="value"
72
+ label={I18N.SORT_VALUE}
73
+ updateSort={updateSort}
74
+ sort={sort}
75
+ >
76
+ <Metric value={total.displayValue} />
77
+ </SortButton>
78
+ </Table.Th>
79
+ {!isBaseline && (
80
+ <>
81
+ <Table.Th className={cx(css.col, css.delta, css.sum)}>
82
+ <SortButton
83
+ fieldPath={fieldPath}
84
+ fieldName="delta"
85
+ label={I18N.SORT_CHANGE}
86
+ updateSort={updateSort}
87
+ sort={sort}
88
+ >
89
+ {'delta' in total && (
90
+ <Delta displayValue={total.displayDelta} deltaType={total.deltaType} />
91
+ )}
92
+ </SortButton>
93
+ </Table.Th>
94
+ <Table.Th className={cx(css.col, css.delta, css.deltaPercentage, css.sum)}>
95
+ <SortButton
96
+ fieldPath={fieldPath}
97
+ fieldName="deltaPercentage"
98
+ label={I18N.SORT_PERCENTUAL_CHANGE}
99
+ updateSort={updateSort}
100
+ sort={sort}
101
+ >
102
+ {'delta' in total && (
103
+ <Delta displayValue={total.displayDeltaPercentage} deltaType={total.deltaType} />
104
+ )}
105
+ </SortButton>
106
+ </Table.Th>
107
+ </>
108
+ )}
109
+ </>
110
+ );
111
+ };
112
+
113
+ interface MetricsTableHeaderProps {
114
+ /**
115
+ * Metric column title
116
+ */
117
+ metricTitle?: React.ReactNode;
118
+ /**
119
+ * Show column sum flag
120
+ */
121
+ showSum?: boolean;
122
+ /**
123
+ * Array of jobs
124
+ */
125
+ jobs: Array<{ label: string; internalBuildNumber: number }>;
126
+ /**
127
+ * Report rows
128
+ */
129
+ rows: Array<ReportMetricRow>;
130
+ /**
131
+ * Sort field data
132
+ */
133
+ sort?: any;
134
+ /**
135
+ * Update sort field
136
+ */
137
+ updateSort?: (val: any) => void;
138
+ }
139
+
140
+ export const MetricsTableHeader = (
141
+ props: MetricsTableHeaderProps & React.ComponentProps<'thead'>,
142
+ ) => {
143
+ const { className = '', metricTitle = '', showSum = false, jobs, rows, sort, updateSort } = props;
144
+
145
+ const rootClassName = cx(css.root, showSum && css.showHeaderSum, className);
146
+
147
+ return (
148
+ <Table.THead className={rootClassName}>
149
+ <Table.Tr>
150
+ <Table.Th className={cx(css.col, css.metric)} rowSpan={showSum ? 2 : 1}>
151
+ {metricTitle || ' '}
152
+ </Table.Th>
153
+ {jobs.map((job, runIndex) => (
154
+ <JobColumn job={job} isBaseline={runIndex === jobs.length - 1} />
155
+ ))}
156
+ </Table.Tr>
157
+ {showSum && (
158
+ <Table.Tr>
159
+ {jobs.map((_, runIndex) => (
160
+ <SumColumn
161
+ rows={rows}
162
+ isBaseline={runIndex === jobs.length - 1}
163
+ runIndex={runIndex}
164
+ updateSort={updateSort}
165
+ sort={sort}
166
+ />
167
+ ))}
168
+ </Table.Tr>
169
+ )}
170
+ </Table.THead>
171
+ );
172
+ };
@@ -2,23 +2,17 @@ import React from 'react';
2
2
  import PropTypes from 'prop-types';
3
3
 
4
4
  import I18N from '../../i18n';
5
- import { Dropdown } from '../../ui/dropdown';
5
+ import { Dropdown, DropdownItem } from '../../ui/dropdown';
6
6
 
7
7
  export const MetricsTableOptions = (props) => {
8
- const { className, handleViewAll, handleResetFilters, ...restProps } = props;
8
+ const { className, handleViewAll, handleResetFilters, ...restProps } = props;
9
9
 
10
10
  return (
11
11
  <Dropdown className={className} glyph="more-vertical" {...restProps}>
12
12
  {handleResetFilters && (
13
- <Dropdown.Item onClick={handleResetFilters}>
14
- {I18N.RESET_FILTERS}
15
- </Dropdown.Item>
16
- )}
17
- {handleViewAll && (
18
- <Dropdown.Item onClick={handleViewAll}>
19
- {I18N.VIEW_ALL}
20
- </Dropdown.Item>
13
+ <DropdownItem onClick={handleResetFilters}>{I18N.RESET_FILTERS}</DropdownItem>
21
14
  )}
15
+ {handleViewAll && <DropdownItem onClick={handleViewAll}>{I18N.VIEW_ALL}</DropdownItem>}
22
16
  </Dropdown>
23
17
  );
24
18
  };
@@ -15,7 +15,7 @@ export const MetricsTableTitle = (props) => {
15
15
  const rootClassName = cx(css.root, className);
16
16
 
17
17
  return (
18
- <Stack space="xxsmall" className={rootClassName}>
18
+ <Stack space="none" className={rootClassName}>
19
19
  <FlexStack space="xxxsmall" alignItems="center" as="h3" className={css.title}>
20
20
  <span>{title}</span>
21
21
 
@@ -1,8 +1,9 @@
1
1
  .root {
2
+ color: var(--color-text-ultra-light);
2
3
  }
3
4
 
4
5
  .title {
5
- color: var(--color-text-light);
6
+ color: inherit;
6
7
  font-size: 1em;
7
8
  font-weight: bold;
8
9
  text-transform: uppercase;
@@ -18,8 +19,7 @@
18
19
  }
19
20
 
20
21
  .info {
21
- color: var(--color-text-light);
22
+ font-size: var(--size-small);
22
23
  font-family: var(--font-family-fixed);
23
- font-size: var(--size-xsmall);
24
- font-weight: bold;
24
+ font-weight: normal;
25
25
  }
@@ -12,6 +12,7 @@
12
12
  height: 100%;
13
13
  fill: var(--color-text);
14
14
  font-family: var(--font-family);
15
+ background: var(--color-background);
15
16
  }
16
17
 
17
18
  /** Tile overlay fill background transition */
@@ -20,29 +21,14 @@
20
21
  transition-property: opacity;
21
22
  }
22
23
 
23
- .tileOverlay {
24
- fill: var(--color-outline);
25
- transition: var(--ui-transition-out);
26
- transition-property: opacity;
27
- opacity: 0.4;
28
- }
29
-
30
- .root .tile:hover .tileOverlay {
31
- transition: var(--ui-transition-in);
32
- opacity: 0.8;
33
- }
34
-
35
- /** Tile content */
36
- .tileContent {
24
+ /** Leaf wrapper button */
25
+ .leaf {
26
+ position: absolute;
37
27
  appearance: none;
38
28
  border: 0;
39
- border-radius: none;
29
+ border-radius: 0;
40
30
  padding: 0;
41
31
  background: none;
42
-
43
- width: 100%;
44
- height: 100%;
45
- padding: var(--space-xxsmall) var(--space-small);
46
32
  display: flex;
47
33
  align-items: center;
48
34
  font-family: var(--font-family-fixed);
@@ -51,77 +37,116 @@
51
37
  text-align: left;
52
38
  }
53
39
 
54
- .tileContentWrapper {
40
+ .leaf::before {
41
+ content: "";
42
+ display: block;
43
+ position: absolute;
44
+ z-index: 1;
45
+ left: 0;
46
+ top: 0;
55
47
  width: 100%;
56
- max-height: 100%;
48
+ height: 100%;
49
+ background-color: currentColor;
50
+ color: var(--color-background);
51
+ transition: var(--ui-transition-out);
52
+ transition-property: opacity;
53
+ opacity: 0.6;
54
+ }
55
+
56
+ .leaf:hover::before {
57
+ transition: var(--ui-transition-in);
58
+ opacity: 0.4;
59
+ }
60
+
61
+ .leafContent {
62
+ position: relative;
63
+ z-index: 1;
64
+ width: 100%;
65
+ height: 100%;
57
66
  display: flex;
58
67
  flex-flow: column;
59
- gap: 4px;
68
+ justify-content: center;
69
+ padding: var(--space-xxsmall) var(--space-xxsmall);
70
+ gap: var(--space-xxxsmall);
71
+ line-height: var(--line-height-heading);
72
+ }
73
+
74
+ /** Align label to other elements on the first column leafs */
75
+ .leafFirstCol .leafContent {
76
+ padding-left: var(--space-small);
60
77
  }
61
78
 
62
- .tileContentLabel {
63
- margin-right: calc(0px - var(--space-xxsmall)); /* take more space if necessary */
64
- margin-bottom: calc(0px - 2px);
65
- flex: 1 1 auto;
66
- max-width: calc(100% + var(--space-xxsmall)); /* take more space if necessary */
79
+ .leadContentLabel {
80
+ flex: 0 1 auto;
81
+ width: 100%;
82
+ min-width: 0;
83
+ max-height: calc(2em * var(--line-height-heading));
67
84
  overflow: hidden;
68
- word-break: break-word;
69
85
  }
70
86
 
71
- .tileContentValue {
87
+ .leadContentValue {
72
88
  flex: 0 0 auto;
73
89
  max-width: calc(100% + var(--space-xxsmall));
74
- margin-right: calc(0px - var(--space-xxsmall)); /* take more space if necessary */
75
90
  white-space: nowrap;
76
91
  overflow: hidden;
77
92
  }
78
93
 
79
- .tileContentMetric {
94
+ .leadContentMetric {
80
95
  font-weight: bold;
81
96
  }
82
97
 
83
- .tileContentDelta {
98
+ .leadContentDelta {
84
99
  margin-left: var(--space-xxxsmall);
85
100
  }
86
101
 
87
102
  /** Tile size variation */
88
- .tileSmall .tileContent {
103
+ .leafSmall .leafContent {
104
+ padding: var(--space-xxxsmall) var(--space-xxsmall);
105
+ gap: 0;
89
106
  font-size: var(--size-xsmall);
90
107
  }
91
108
 
92
- .tileSmall .tileContentLabel {
109
+ .leafSmall .leadContentLabel {
93
110
  margin-top: 0;
94
111
  }
95
112
 
96
113
  /** Tile diff variation */
97
- .tile-NO_CHANGE .tileContent {
114
+ .leaf-NO_CHANGE {
98
115
  color: var(--color-text-light);
99
116
  }
100
117
 
101
- .tile-HIGH_NEGATIVE .tileOverlay {
102
- fill: var(--color-red-100);
118
+ .leaf-NO_CHANGE::before {
119
+ color: var(--color-gray-50);
120
+ opacity: 0.4;
121
+ }
122
+
123
+ .leaf-NO_CHANGE:hover::before {
124
+ opacity: 0.2;
103
125
  }
104
126
 
105
- .tile-NEGATIVE .tileOverlay {
106
- fill: var(--color-red-50);
127
+ .leaf-HIGH_NEGATIVE::before {
128
+ color: var(--color-red-100);
107
129
  }
108
130
 
109
- .tile-LOW_NEGATIVE .tileOverlay {
110
- fill: var(--color-red-25);
131
+ .leaf-NEGATIVE::before {
132
+ color: var(--color-red-50);
111
133
  }
112
134
 
113
- .tile-LOW_POSITIVE .tileOverlay {
114
- fill: var(--color-green-25);
135
+ .leaf-LOW_NEGATIVE::before {
136
+ color: var(--color-red-25);
115
137
  }
116
138
 
117
- .tile-POSITIVE .tileOverlay {
118
- fill: var(--color-green-50);
139
+ .leaf-LOW_POSITIVE::before {
140
+ color: var(--color-green-25);
119
141
  }
120
142
 
121
- .tile-HIGH_POSITIVE .tileOverlay {
122
- fill: var(--color-green-100);
143
+ .leaf-POSITIVE::before {
144
+ color: var(--color-green-50);
123
145
  }
124
146
 
147
+ .leaf-HIGH_POSITIVE::before {
148
+ color: var(--color-green-100);
149
+ }
125
150
 
126
151
  /** empty message */
127
152
  .emptyMessage {
@@ -140,7 +165,12 @@
140
165
  text-align: center;
141
166
  }
142
167
 
143
- /** tooltip content */
168
+ /** tooltip */
169
+ .leafContentTooltipAnchor {
170
+ width: 100%;
171
+ height: 100%;
172
+ }
173
+
144
174
  .tooltip {
145
175
  z-index: var(--layer-xxhigh);
146
176
  padding: var(--space-xsmall) var(--space-small);
@@ -152,17 +182,20 @@
152
182
  will-change: filter;
153
183
  background: var(--color-light);
154
184
  font-size: var(--size-small);
185
+ pointer-events: none;
155
186
  }
156
187
 
157
- .tooltipArrow {
158
- border: var(--space-xxsmall) solid var(--color-background);
159
- border-width: var(--space-xxsmall) var(--space-xxsmall) 0;
160
- border-left-color: transparent;
161
- border-right-color: transparent;
162
- position: absolute;
163
- top: 100%;
188
+ /* prevent tooltip portal wrapper from capturing events */
189
+ div[role="presentation"]:has(.tooltip) {
190
+ pointer-events: none;
191
+ }
192
+
193
+
194
+ .leafTooltipArrow svg {
195
+ display: block;
196
+ fill: var(--color-background) !important;
164
197
  }
165
198
 
166
- .tooltipContentTitle {
199
+ .leafTooltipContentTitle {
167
200
  font-size: var(--size-medium);
168
201
  }