@bundle-stats/ui 3.3.0-alpha.0 → 3.3.0

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 (237) hide show
  1. package/CHANGELOG.md +74 -11
  2. package/lib/app/app.js +124 -104
  3. package/lib/app/app.module.css +11 -4
  4. package/lib/app/app.stories.js +1 -22
  5. package/lib/app/header/header.js +1 -10
  6. package/lib/assets/icons.svg +0 -8
  7. package/lib/components/asset-info/asset-info.module.css +1 -0
  8. package/lib/components/bundle-assets/bundle-assets.js +104 -52
  9. package/lib/components/bundle-assets/bundle-assets.module.css +24 -26
  10. package/lib/components/bundle-assets-totals-table/bundle-assets-totals-table.js +16 -43
  11. package/lib/components/bundle-assets-totals-table/bundle-assets-totals-table.module.css +2 -2
  12. package/lib/components/bundle-assets-totals-table/bundle-assets-totals-table.stories.js +1 -20
  13. package/lib/components/bundle-modules/bundle-modules.js +68 -68
  14. package/lib/components/bundle-modules/bundle-modules.module.css +11 -2
  15. package/lib/components/bundle-modules/bundle-modules.utils.js +14 -10
  16. package/lib/components/bundle-modules/index.js +4 -4
  17. package/lib/components/bundle-packages/bundle-packages.js +100 -44
  18. package/lib/components/bundle-packages/bundle-packages.module.css +17 -21
  19. package/lib/components/delta/delta.module.css +1 -0
  20. package/lib/components/job-header/job-header.js +3 -1
  21. package/lib/components/job-header/job-header.module.css +6 -8
  22. package/lib/components/jobs-header/jobs-header.module.css +5 -0
  23. package/lib/components/metrics-table/metrics-table.js +72 -59
  24. package/lib/components/metrics-table/metrics-table.module.css +18 -7
  25. package/lib/components/metrics-table-search/metrics-table-search.module.css +5 -4
  26. package/lib/components/metrics-table-title/metrics-table-title.js +9 -7
  27. package/lib/components/metrics-table-title/metrics-table-title.module.css +2 -0
  28. package/lib/components/module-info/module-info.js +2 -2
  29. package/lib/components/module-info/module-info.module.css +1 -0
  30. package/lib/components/summary/summary.js +7 -12
  31. package/lib/components/summary/summary.module.css +1 -1
  32. package/lib/components/summary/summary.stories.js +0 -29
  33. package/lib/components/summary-item/summary-item.js +18 -38
  34. package/lib/components/summary-item/summary-item.module.css +1 -34
  35. package/lib/components/summary-item/summary-item.stories.js +53 -51
  36. package/lib/components/total-size-type-title/total-size-type-title.js +7 -3
  37. package/lib/constants.js +4 -4
  38. package/lib/css/default.css +14 -3
  39. package/lib/css/variables.css +17 -17
  40. package/lib/hooks/search-params.js +31 -31
  41. package/lib/layout/box/box.module.css +9 -0
  42. package/lib/layout/footer/footer.module.css +1 -1
  43. package/lib/layout/index.js +8 -0
  44. package/lib/layout/separator.js +48 -0
  45. package/lib/layout/separator.module.css +5 -0
  46. package/lib/ui/alert/alert.js +3 -13
  47. package/lib/ui/dropdown/dropdown.js +21 -26
  48. package/lib/ui/dropdown/dropdown.module.css +11 -12
  49. package/lib/ui/dropdown/dropdown.stories.js +2 -9
  50. package/lib/ui/empty-set/empty-set.js +5 -4
  51. package/lib/ui/empty-set/empty-set.module.css +2 -2
  52. package/lib/ui/filters/filters.container.js +1 -1
  53. package/lib/ui/filters/filters.js +22 -7
  54. package/lib/ui/filters/filters.module.css +3 -3
  55. package/lib/ui/horizontal-bar-chart/horizontal-bar-chart.js +1 -1
  56. package/lib/ui/hover-card/hover-card.js +102 -0
  57. package/lib/ui/hover-card/hover-card.module.css +29 -0
  58. package/lib/ui/hover-card/hover-card.stories.js +56 -0
  59. package/lib/{components/budget-info → ui/hover-card}/index.js +4 -4
  60. package/lib/ui/icon/icon.js +6 -8
  61. package/lib/ui/icon/icon.module.css +1 -0
  62. package/lib/ui/index.js +8 -8
  63. package/lib/ui/table/table.js +5 -74
  64. package/lib/ui/table/table.module.css +41 -25
  65. package/lib/ui/table/table.stories.js +1 -1
  66. package/lib/ui/{popover → tag}/index.js +4 -4
  67. package/lib/ui/tag/tag.js +72 -0
  68. package/lib/ui/tag/tag.module.css +55 -0
  69. package/lib/ui/tag/tag.stories.js +38 -0
  70. package/lib/ui/tooltip/tooltip.js +10 -9
  71. package/lib/ui/tooltip/tooltip.module.css +2 -1
  72. package/lib-esm/app/app.js +119 -103
  73. package/lib-esm/app/app.module.css +11 -4
  74. package/lib-esm/app/app.stories.js +1 -22
  75. package/lib-esm/app/header/header.js +1 -9
  76. package/lib-esm/assets/icons.svg +0 -8
  77. package/lib-esm/components/asset-info/asset-info.module.css +1 -0
  78. package/lib-esm/components/bundle-assets/bundle-assets.js +97 -56
  79. package/lib-esm/components/bundle-assets/bundle-assets.module.css +24 -26
  80. package/lib-esm/components/bundle-assets-totals-table/bundle-assets-totals-table.js +13 -27
  81. package/lib-esm/components/bundle-assets-totals-table/bundle-assets-totals-table.module.css +2 -2
  82. package/lib-esm/components/bundle-assets-totals-table/bundle-assets-totals-table.stories.js +0 -18
  83. package/lib-esm/components/bundle-modules/bundle-modules.js +50 -51
  84. package/lib-esm/components/bundle-modules/bundle-modules.module.css +11 -2
  85. package/lib-esm/components/bundle-modules/bundle-modules.utils.js +14 -6
  86. package/lib-esm/components/bundle-modules/index.js +5 -3
  87. package/lib-esm/components/bundle-packages/bundle-packages.js +88 -41
  88. package/lib-esm/components/bundle-packages/bundle-packages.module.css +17 -21
  89. package/lib-esm/components/delta/delta.module.css +1 -0
  90. package/lib-esm/components/job-header/job-header.js +2 -1
  91. package/lib-esm/components/job-header/job-header.module.css +6 -8
  92. package/lib-esm/components/jobs-header/jobs-header.module.css +5 -0
  93. package/lib-esm/components/metrics-table/metrics-table.js +61 -53
  94. package/lib-esm/components/metrics-table/metrics-table.module.css +18 -7
  95. package/lib-esm/components/metrics-table-search/metrics-table-search.module.css +5 -4
  96. package/lib-esm/components/metrics-table-title/metrics-table-title.js +8 -7
  97. package/lib-esm/components/metrics-table-title/metrics-table-title.module.css +2 -0
  98. package/lib-esm/components/module-info/module-info.js +2 -2
  99. package/lib-esm/components/module-info/module-info.module.css +1 -0
  100. package/lib-esm/components/summary/summary.js +7 -11
  101. package/lib-esm/components/summary/summary.module.css +1 -1
  102. package/lib-esm/components/summary/summary.stories.js +0 -27
  103. package/lib-esm/components/summary-item/summary-item.js +16 -36
  104. package/lib-esm/components/summary-item/summary-item.module.css +1 -34
  105. package/lib-esm/components/summary-item/summary-item.stories.js +38 -50
  106. package/lib-esm/components/total-size-type-title/total-size-type-title.js +6 -3
  107. package/lib-esm/constants.js +4 -4
  108. package/lib-esm/css/default.css +14 -3
  109. package/lib-esm/css/variables.css +17 -17
  110. package/lib-esm/hooks/search-params.js +27 -28
  111. package/lib-esm/layout/box/box.module.css +9 -0
  112. package/lib-esm/layout/footer/footer.module.css +1 -1
  113. package/lib-esm/layout/index.js +1 -0
  114. package/lib-esm/layout/separator.js +28 -0
  115. package/lib-esm/layout/separator.module.css +5 -0
  116. package/lib-esm/ui/alert/alert.js +3 -6
  117. package/lib-esm/ui/dropdown/dropdown.js +20 -25
  118. package/lib-esm/ui/dropdown/dropdown.module.css +11 -12
  119. package/lib-esm/ui/dropdown/dropdown.stories.js +2 -7
  120. package/lib-esm/ui/empty-set/empty-set.js +4 -4
  121. package/lib-esm/ui/empty-set/empty-set.module.css +2 -2
  122. package/lib-esm/ui/filters/filters.js +20 -5
  123. package/lib-esm/ui/filters/filters.module.css +3 -3
  124. package/lib-esm/ui/hover-card/hover-card.js +83 -0
  125. package/lib-esm/ui/hover-card/hover-card.module.css +29 -0
  126. package/lib-esm/ui/hover-card/hover-card.stories.js +35 -0
  127. package/lib-esm/ui/hover-card/index.js +1 -0
  128. package/lib-esm/ui/icon/icon.js +3 -5
  129. package/lib-esm/ui/icon/icon.module.css +1 -0
  130. package/lib-esm/ui/index.js +1 -1
  131. package/lib-esm/ui/table/table.js +5 -65
  132. package/lib-esm/ui/table/table.module.css +41 -25
  133. package/lib-esm/ui/table/table.stories.js +1 -1
  134. package/lib-esm/ui/tag/index.js +1 -0
  135. package/lib-esm/ui/tag/tag.js +45 -0
  136. package/lib-esm/ui/tag/tag.module.css +55 -0
  137. package/lib-esm/ui/tag/tag.stories.js +23 -0
  138. package/lib-esm/ui/tooltip/tooltip.js +10 -9
  139. package/lib-esm/ui/tooltip/tooltip.module.css +2 -1
  140. package/package.json +33 -31
  141. package/src/app/app.jsx +135 -145
  142. package/src/app/app.module.css +11 -4
  143. package/src/app/header/header.jsx +0 -10
  144. package/src/assets/icons.svg +0 -8
  145. package/src/components/asset-info/asset-info.module.css +1 -0
  146. package/src/components/bundle-assets/bundle-assets.jsx +85 -31
  147. package/src/components/bundle-assets/bundle-assets.module.css +24 -26
  148. package/src/components/bundle-assets-totals-table/bundle-assets-totals-table.jsx +13 -26
  149. package/src/components/bundle-assets-totals-table/bundle-assets-totals-table.module.css +2 -2
  150. package/src/components/bundle-modules/bundle-modules.jsx +53 -36
  151. package/src/components/bundle-modules/bundle-modules.module.css +11 -2
  152. package/src/components/bundle-modules/bundle-modules.utils.js +16 -4
  153. package/src/components/bundle-modules/index.jsx +3 -0
  154. package/src/components/bundle-packages/bundle-packages.jsx +89 -39
  155. package/src/components/bundle-packages/bundle-packages.module.css +17 -21
  156. package/src/components/delta/delta.module.css +1 -0
  157. package/src/components/job-header/job-header.jsx +2 -1
  158. package/src/components/job-header/job-header.module.css +6 -8
  159. package/src/components/jobs-header/jobs-header.module.css +5 -0
  160. package/src/components/metrics-table/metrics-table.jsx +53 -44
  161. package/src/components/metrics-table/metrics-table.module.css +18 -7
  162. package/src/components/metrics-table-search/metrics-table-search.module.css +5 -4
  163. package/src/components/metrics-table-title/metrics-table-title.jsx +20 -21
  164. package/src/components/metrics-table-title/metrics-table-title.module.css +2 -0
  165. package/src/components/module-info/module-info.jsx +3 -7
  166. package/src/components/module-info/module-info.module.css +1 -0
  167. package/src/components/summary/summary.jsx +7 -8
  168. package/src/components/summary/summary.module.css +1 -1
  169. package/src/components/summary-item/summary-item.jsx +23 -40
  170. package/src/components/summary-item/summary-item.module.css +1 -34
  171. package/src/components/total-size-type-title/total-size-type-title.jsx +6 -9
  172. package/src/constants.js +11 -7
  173. package/src/css/default.css +14 -3
  174. package/src/css/variables.css +17 -17
  175. package/src/hooks/search-params.js +42 -33
  176. package/src/layout/box/box.module.css +9 -0
  177. package/src/layout/footer/footer.module.css +1 -1
  178. package/src/layout/index.js +1 -0
  179. package/src/layout/separator.jsx +25 -0
  180. package/src/layout/separator.module.css +5 -0
  181. package/src/ui/alert/alert.jsx +2 -7
  182. package/src/ui/dropdown/dropdown.jsx +16 -22
  183. package/src/ui/dropdown/dropdown.module.css +11 -12
  184. package/src/ui/empty-set/empty-set.jsx +25 -21
  185. package/src/ui/empty-set/empty-set.module.css +2 -2
  186. package/src/ui/filters/filters.jsx +64 -53
  187. package/src/ui/filters/filters.module.css +3 -3
  188. package/src/ui/hover-card/hover-card.jsx +73 -0
  189. package/src/ui/hover-card/hover-card.module.css +29 -0
  190. package/src/ui/hover-card/index.js +1 -0
  191. package/src/ui/icon/icon.jsx +11 -9
  192. package/src/ui/icon/icon.module.css +1 -0
  193. package/src/ui/index.js +1 -1
  194. package/src/ui/table/table.jsx +5 -52
  195. package/src/ui/table/table.module.css +41 -25
  196. package/src/ui/tag/index.js +1 -0
  197. package/src/ui/tag/tag.jsx +49 -0
  198. package/src/ui/tag/tag.module.css +55 -0
  199. package/src/ui/tooltip/tooltip.jsx +10 -14
  200. package/src/ui/tooltip/tooltip.module.css +2 -1
  201. package/lib/assets/icons/alert-circle.svg +0 -1
  202. package/lib/assets/icons/check-circle.svg +0 -1
  203. package/lib/components/budget-info/budget-info.js +0 -53
  204. package/lib/components/budget-info/budget-info.module.css +0 -28
  205. package/lib/components/budget-info/budget-info.stories.js +0 -42
  206. package/lib/components/budget-insights/budget-insights.js +0 -200
  207. package/lib/components/budget-insights/budget-insights.module.css +0 -53
  208. package/lib/components/budget-insights/budget-insights.stories.js +0 -104
  209. package/lib/components/budget-insights/index.js +0 -18
  210. package/lib/ui/popover/popover.js +0 -92
  211. package/lib/ui/popover/popover.module.css +0 -66
  212. package/lib/ui/popover/popover.stories.js +0 -26
  213. package/lib-esm/assets/icons/alert-circle.svg +0 -1
  214. package/lib-esm/assets/icons/check-circle.svg +0 -1
  215. package/lib-esm/components/budget-info/budget-info.js +0 -37
  216. package/lib-esm/components/budget-info/budget-info.module.css +0 -28
  217. package/lib-esm/components/budget-info/budget-info.stories.js +0 -26
  218. package/lib-esm/components/budget-info/index.js +0 -1
  219. package/lib-esm/components/budget-insights/budget-insights.js +0 -147
  220. package/lib-esm/components/budget-insights/budget-insights.module.css +0 -53
  221. package/lib-esm/components/budget-insights/budget-insights.stories.js +0 -84
  222. package/lib-esm/components/budget-insights/index.js +0 -1
  223. package/lib-esm/ui/popover/index.js +0 -1
  224. package/lib-esm/ui/popover/popover.js +0 -71
  225. package/lib-esm/ui/popover/popover.module.css +0 -66
  226. package/lib-esm/ui/popover/popover.stories.js +0 -14
  227. package/src/assets/icons/alert-circle.svg +0 -1
  228. package/src/assets/icons/check-circle.svg +0 -1
  229. package/src/components/budget-info/budget-info.jsx +0 -49
  230. package/src/components/budget-info/budget-info.module.css +0 -28
  231. package/src/components/budget-info/index.js +0 -1
  232. package/src/components/budget-insights/budget-insights.jsx +0 -152
  233. package/src/components/budget-insights/budget-insights.module.css +0 -53
  234. package/src/components/budget-insights/index.js +0 -1
  235. package/src/ui/popover/index.js +0 -1
  236. package/src/ui/popover/popover.jsx +0 -79
  237. package/src/ui/popover/popover.module.css +0 -66
@@ -1,49 +0,0 @@
1
- import React from 'react';
2
- import cx from 'classnames';
3
- import PropTypes from 'prop-types';
4
-
5
- import { Icon } from '../../ui/icon';
6
- import { Tooltip } from '../../ui/tooltip';
7
-
8
- import css from './budget-info.module.css';
9
-
10
- export const BudgetInfo = ({ className = '', budget, metric }) => {
11
- const rootClassName = cx(css.root, budget.failed ? css.over : css.under, className);
12
-
13
- return (
14
- <Tooltip
15
- className={rootClassName}
16
- title={
17
- <>
18
- <strong>{metric.label}</strong>
19
- {` is ${budget.failed ? 'over' : 'under'} `}
20
- {metric.formatter(budget.budgetValue)}
21
- {` budget`}
22
- </>
23
- }
24
- >
25
- <Icon
26
- className={css.icon}
27
- glyph={budget.failed ? Icon.ICONS.ALERT_CIRCLE : Icon.ICONS.CHECK_CIRCLE}
28
- size="medium"
29
- />
30
- </Tooltip>
31
- );
32
- };
33
-
34
- BudgetInfo.propTypes = {
35
- budget: PropTypes.shape({
36
- currentValue: PropTypes.number,
37
- budgetValue: PropTypes.number,
38
- failed: PropTypes.bool,
39
- }).isRequired,
40
- metric: PropTypes.shape({
41
- label: PropTypes.string,
42
- formatter: PropTypes.func,
43
- }).isRequired,
44
- className: PropTypes.string,
45
- };
46
-
47
- BudgetInfo.defaultProps = {
48
- className: '',
49
- };
@@ -1,28 +0,0 @@
1
- .root {
2
- display: inline-block;
3
- line-height: 1em;
4
- }
5
-
6
- /* Budget over */
7
- .over .icon {
8
- color: var(--color-danger-light);
9
- }
10
-
11
- .over .icon:hover,
12
- .over .icon:focus,
13
- .over .icon:active
14
- {
15
- color: var(--color-danger);
16
- }
17
-
18
- /* Budget under */
19
- .under .icon {
20
- color: var(--color-success-light);
21
- }
22
-
23
- .under .icon:hover,
24
- .under .icon:focus,
25
- .under .icon:active
26
- {
27
- color: var(--color-success);
28
- }
@@ -1 +0,0 @@
1
- export * from './budget-info';
@@ -1,152 +0,0 @@
1
- import React, { useMemo, useState } from 'react';
2
- import PropTypes from 'prop-types';
3
- import cx from 'classnames';
4
- import { METRIC_COMPONENT_LINKS, getGlobalMetricType } from '@bundle-stats/utils';
5
-
6
- import { Box } from '../../layout/box';
7
- import { Stack } from '../../layout/stack';
8
- import { FlexStack } from '../../layout/flex-stack';
9
- import { Alert } from '../../ui/alert';
10
- import { Icon } from '../../ui/icon';
11
- import { ComponentLink } from '../component-link';
12
- import css from './budget-insights.module.css';
13
-
14
- const Budget = (props) => {
15
- const { className, metricKey, CustomLink, failed, budgetValue } = props;
16
- const metric = getGlobalMetricType(metricKey);
17
- const componentLinkOptions = METRIC_COMPONENT_LINKS.get(metricKey);
18
-
19
- return (
20
- <CustomLink className={cx(css.budget, className)} {...componentLinkOptions?.link}>
21
- <span className={css.budgetLabel}>{metric.label}</span>
22
- {` is ${failed ? 'over' : 'under'} `}
23
- <span className={css.budgetValue}>{metric.formatter(budgetValue)}</span>
24
- {` budget`}
25
- </CustomLink>
26
- );
27
- };
28
-
29
- Budget.propTypes = {
30
- className: PropTypes.string,
31
- metricKey: PropTypes.string.isRequired,
32
- failed: PropTypes.bool.isRequired,
33
- currentValue: PropTypes.number.isRequired,
34
- budgetValue: PropTypes.number.isRequired,
35
- CustomLink: PropTypes.elementType.isRequired,
36
- };
37
-
38
- Budget.defaultProps = {
39
- className: '',
40
- };
41
-
42
- const BudgetsGroup = (props) => {
43
- const { className, kind, source, budgets, CustomLink } = props;
44
- const [showBudgets, setShowBudgets] = useState(false);
45
-
46
- const isFailed = kind === 'danger';
47
-
48
- return (
49
- <Alert kind={kind} padding="none" className={cx(css.group, css[kind], className)}>
50
- <Box
51
- padding={['xsmall', 'small']}
52
- className={css.groupHeader}
53
- as="button"
54
- type="button"
55
- onClick={() => setShowBudgets(!showBudgets)}
56
- >
57
- <FlexStack space="xxsmall" className={css.groupTitle}>
58
- <Icon
59
- className={css.groupIcon}
60
- glyph={isFailed ? Icon.ICONS.ALERT_CIRCLE : Icon.ICONS.CHECK_CIRCLE}
61
- />
62
- <span>
63
- <strong>{budgets.length}</strong>
64
- {` budget ${budgets.length > 1 ? 'checks' : 'check'} ${isFailed ? 'failed' : 'passed'}`}
65
- </span>
66
- <span className={css.groupTitleToggle}>{showBudgets ? 'hide' : 'show'} all</span>
67
- </FlexStack>
68
- </Box>
69
-
70
- {showBudgets && (
71
- <Box padding={['xsmall', 'small']} className={css.groupContent}>
72
- <Stack space="none">
73
- {budgets.map(([key, budget]) => (
74
- <Budget
75
- key={key}
76
- source={source}
77
- metricKey={`${source}.${key}`}
78
- CustomLink={CustomLink}
79
- {...budget}
80
- />
81
- ))}
82
- </Stack>
83
- </Box>
84
- )}
85
- </Alert>
86
- );
87
- };
88
-
89
- BudgetsGroup.propTypes = {
90
- className: PropTypes.string,
91
- kind: PropTypes.oneOf(['success', 'danger']).isRequired,
92
- source: PropTypes.string.isRequired,
93
- budgets: PropTypes.object.isRequired, // eslint-disable-line react/forbid-prop-types
94
- CustomLink: PropTypes.elementType.isRequired,
95
- };
96
-
97
- BudgetsGroup.defaultProps = {
98
- className: '',
99
- };
100
-
101
- export const BudgetInsights = (props) => {
102
- const { className, source, budgets, CustomLink } = props;
103
-
104
- const [failedBudgets, passedBudgets] = useMemo(() => {
105
- const passed = [];
106
- const failed = [];
107
-
108
- Object.entries(budgets).forEach(([key, budget]) => {
109
- if (budget.failed) {
110
- failed.push([key, budget]);
111
- } else {
112
- passed.push([key, budget]);
113
- }
114
- });
115
-
116
- return [failed, passed];
117
- }, [budgets]);
118
-
119
- return (
120
- <Stack className={className} space="xsmall">
121
- {failedBudgets.length > 0 && (
122
- <BudgetsGroup
123
- kind="danger"
124
- source={source}
125
- budgets={failedBudgets}
126
- CustomLink={CustomLink}
127
- />
128
- )}
129
-
130
- {passedBudgets.length > 0 && (
131
- <BudgetsGroup
132
- kind="success"
133
- source={source}
134
- budgets={passedBudgets}
135
- CustomLink={CustomLink}
136
- />
137
- )}
138
- </Stack>
139
- );
140
- };
141
-
142
- BudgetInsights.propTypes = {
143
- className: PropTypes.string,
144
- source: PropTypes.string.isRequired,
145
- budgets: PropTypes.object.isRequired, // eslint-disable-line react/forbid-prop-types
146
- CustomLink: PropTypes.elementType,
147
- };
148
-
149
- BudgetInsights.defaultProps = {
150
- className: '',
151
- CustomLink: ComponentLink,
152
- };
@@ -1,53 +0,0 @@
1
- .groupHeader {
2
- width: 100%;
3
- border: none;
4
- background: none;
5
- cursor: pointer;
6
- color: inherit;
7
- }
8
-
9
- .groupTitle {
10
- width: 100%;
11
- align-items: center;
12
- }
13
-
14
- .groupTitle:hover {
15
- color: var(--color-text-dark);
16
- text-decoration: underline;
17
- }
18
-
19
- .groupTitleToggle {
20
- margin: 0 0 0 auto !important;
21
- }
22
-
23
- .danger .groupIcon {
24
- color: var(--color-danger);
25
- }
26
-
27
- .success .groupIcon {
28
- color: var(--color-success);
29
- }
30
-
31
- .groupContent {
32
- padding-top: 0px;
33
- background: transparent;
34
- }
35
-
36
- .budget {
37
- display: block;
38
- color: var(--color-text);
39
- text-decoration: none;
40
- }
41
-
42
- .budgetLabel,
43
- .budgetValue {
44
- color: var(--color-text-dark);
45
- font-weight: 500;
46
- }
47
-
48
- .budget:hover,
49
- .budget:focus,
50
- .budget:active {
51
- color: var(--color-text);
52
- text-decoration: underline;
53
- }
@@ -1 +0,0 @@
1
- export * from './budget-insights';
@@ -1 +0,0 @@
1
- export * from './popover';
@@ -1,79 +0,0 @@
1
- import React, { useCallback } from 'react';
2
- import PropTypes from 'prop-types';
3
- import cx from 'classnames';
4
- import {
5
- usePopoverState,
6
- Popover as UIPopover,
7
- PopoverDisclosure as UIPopoverDisclosure,
8
- PopoverArrow as UIPopoverArrow,
9
- } from 'reakit/Popover';
10
-
11
- import { Icon } from '../icon';
12
- import css from './popover.module.css';
13
-
14
- export const Popover = ({ className, icon, label, ariaLabel, children }) => {
15
- const popover = usePopoverState({
16
- baseId: process.env.NODE_ENV === 'test' && 'id-test',
17
- gutter: 12,
18
- modal: true,
19
- placement: 'top',
20
- });
21
-
22
- const onCloseButtonClick = useCallback(
23
- (event) => {
24
- event.preventDefault();
25
- popover.toggle();
26
- },
27
- [popover],
28
- );
29
-
30
- const onButtonClick = useCallback(
31
- (event) => {
32
- event.preventDefault();
33
- popover.toggle();
34
- },
35
- [popover],
36
- );
37
-
38
- return (
39
- <>
40
- <UIPopoverDisclosure
41
- className={cx(css.button, className)}
42
- {...popover}
43
- onClick={onButtonClick}
44
- aria-label={ariaLabel}
45
- >
46
- {icon && (typeof icon === 'string' ? <Icon className={css.icon} glyph={icon} /> : icon)}
47
- {label && <span className={css.label}>{label}</span>}
48
- </UIPopoverDisclosure>
49
- <UIPopover className={css.popover} {...popover} tabIndex={0}>
50
- <UIPopoverArrow className={css.arrow} {...popover} size={16} />
51
-
52
- {typeof children === 'function' ? children({ popoverToggle: popover.toggle }) : children}
53
-
54
- <Icon
55
- glyph="close"
56
- as="button"
57
- type="button"
58
- className={css.closeBtn}
59
- onClick={onCloseButtonClick}
60
- />
61
- </UIPopover>
62
- </>
63
- );
64
- };
65
-
66
- Popover.propTypes = {
67
- className: PropTypes.string,
68
- label: PropTypes.element,
69
- icon: PropTypes.oneOfType([PropTypes.string, PropTypes.element]),
70
- children: PropTypes.oneOfType([PropTypes.string, PropTypes.element, PropTypes.func]).isRequired,
71
- ariaLabel: PropTypes.string,
72
- };
73
-
74
- Popover.defaultProps = {
75
- className: '',
76
- icon: '',
77
- label: '',
78
- ariaLabel: 'View more info',
79
- };
@@ -1,66 +0,0 @@
1
- .button {
2
- display: inline-flex;
3
- align-items: center;
4
- justify-content: flex-start;
5
- border: none;
6
- outline: none;
7
- padding: 0;
8
- background: none;
9
- color: inherit;
10
- cursor: pointer;
11
- line-height: inherit;
12
- text-align: inherit;
13
- }
14
-
15
- .button:hover,
16
- .button:active,
17
- .button:focus {
18
- color: var(--color-primary);
19
- }
20
-
21
- .button:hover .label {
22
- text-decoration: underline;
23
- }
24
-
25
- .popover {
26
- padding: var(--space-small) var(--space-large) var(--space-small) var(--space-small);
27
- border-radius: var(--radius-small);
28
- max-width: 360px;
29
- outline: none;
30
- filter: drop-shadow(0 0 var(--space-xxxsmall) var(--color-shadow));
31
- background: var(--color-light);
32
- font-size: var(--size-small);
33
- }
34
-
35
- .arrow svg {
36
- display: block;
37
- }
38
-
39
- .arrow :global .fill {
40
- fill: var(--color-light);
41
- }
42
-
43
- .arrow :global .stroke {
44
- fill: var(--color-light);
45
- }
46
-
47
- .closeBtn {
48
- position: absolute;
49
- right: 0;
50
- top: 0;
51
- width: var(--space-large);
52
- height: var(--space-large);
53
- padding: var(--space-xxsmall);
54
- background: none;
55
- border: none;
56
- cursor: pointer;
57
- color: var(--color-text-ultra-light);
58
- transition: var(--transition-out);
59
- }
60
-
61
- .closeBtn:hover,
62
- .closeBtn:active,
63
- .closeBtn:focus {
64
- color: var(--color-text-light);
65
- transition: var(--transition-in);
66
- }