@bundle-stats/ui 4.2.1 → 4.2.3-beta.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 (93) hide show
  1. package/lib/app/app.js +17 -5
  2. package/lib/app/app.js.map +1 -1
  3. package/lib/components/index.js +3 -1
  4. package/lib/components/index.js.map +1 -1
  5. package/lib/components/insight-icon/index.js +18 -0
  6. package/lib/components/insight-icon/index.js.map +1 -0
  7. package/lib/components/insight-icon/insight-icon.js +25 -0
  8. package/lib/components/insight-icon/insight-icon.js.map +1 -0
  9. package/lib/components/insight-icon/insight-icon.module.css +24 -0
  10. package/lib/components/insights/insights.js +6 -13
  11. package/lib/components/insights/insights.js.map +1 -1
  12. package/lib/components/insights/insights.module.css +0 -21
  13. package/lib/components/metrics-table-search/metrics-table-search.module.css +0 -6
  14. package/lib/components/summary/summary.js +1 -1
  15. package/lib/components/summary/summary.js.map +1 -1
  16. package/lib/components/summary/summary.module.css +0 -8
  17. package/lib/css/variables.css +2 -0
  18. package/lib/layout/box/box.js +2 -22
  19. package/lib/layout/box/box.js.map +1 -1
  20. package/lib/layout/box/box.module.css +11 -0
  21. package/lib/layout/box/index.js +15 -3
  22. package/lib/layout/box/index.js.map +1 -1
  23. package/lib/ui/container/container.js +1 -10
  24. package/lib/ui/container/container.js.map +1 -1
  25. package/lib/ui/container/index.js +15 -3
  26. package/lib/ui/container/index.js.map +1 -1
  27. package/lib/ui/dropdown/dropdown.module.css +1 -2
  28. package/lib/ui/filters/filters.module.css +1 -5
  29. package/lib/ui/input/input.module.css +3 -4
  30. package/lib-esm/app/app.js +18 -6
  31. package/lib-esm/app/app.js.map +1 -1
  32. package/lib-esm/components/index.js +1 -0
  33. package/lib-esm/components/index.js.map +1 -1
  34. package/lib-esm/components/insight-icon/index.js +2 -0
  35. package/lib-esm/components/insight-icon/index.js.map +1 -0
  36. package/lib-esm/components/insight-icon/insight-icon.js +18 -0
  37. package/lib-esm/components/insight-icon/insight-icon.js.map +1 -0
  38. package/lib-esm/components/insight-icon/insight-icon.module.css +24 -0
  39. package/lib-esm/components/insights/insights.js +7 -14
  40. package/lib-esm/components/insights/insights.js.map +1 -1
  41. package/lib-esm/components/insights/insights.module.css +0 -21
  42. package/lib-esm/components/metrics-table-search/metrics-table-search.module.css +0 -6
  43. package/lib-esm/components/summary/summary.js +1 -1
  44. package/lib-esm/components/summary/summary.js.map +1 -1
  45. package/lib-esm/components/summary/summary.module.css +0 -8
  46. package/lib-esm/css/variables.css +2 -0
  47. package/lib-esm/layout/box/box.js +3 -23
  48. package/lib-esm/layout/box/box.js.map +1 -1
  49. package/lib-esm/layout/box/box.module.css +11 -0
  50. package/lib-esm/layout/box/index.js +1 -1
  51. package/lib-esm/layout/box/index.js.map +1 -1
  52. package/lib-esm/ui/container/container.js +1 -10
  53. package/lib-esm/ui/container/container.js.map +1 -1
  54. package/lib-esm/ui/container/index.js +1 -1
  55. package/lib-esm/ui/container/index.js.map +1 -1
  56. package/lib-esm/ui/dropdown/dropdown.module.css +1 -2
  57. package/lib-esm/ui/filters/filters.module.css +1 -5
  58. package/lib-esm/ui/input/input.module.css +3 -4
  59. package/package.json +5 -5
  60. package/src/app/app.jsx +21 -10
  61. package/src/components/index.js +1 -0
  62. package/src/components/insight-icon/index.ts +1 -0
  63. package/src/components/insight-icon/insight-icon.module.css +24 -0
  64. package/src/components/insight-icon/insight-icon.tsx +27 -0
  65. package/src/components/insights/insights.module.css +0 -21
  66. package/src/components/insights/insights.stories.tsx +26 -22
  67. package/src/components/insights/insights.tsx +8 -19
  68. package/src/components/metrics-table-search/metrics-table-search.module.css +0 -6
  69. package/src/components/summary/summary.jsx +1 -0
  70. package/src/components/summary/summary.module.css +0 -8
  71. package/src/css/variables.css +2 -0
  72. package/src/layout/box/box.module.css +11 -0
  73. package/src/layout/box/box.stories.tsx +44 -0
  74. package/src/layout/box/box.tsx +46 -0
  75. package/src/layout/box/index.ts +1 -0
  76. package/src/ui/container/container.stories.tsx +29 -0
  77. package/src/ui/container/container.tsx +19 -0
  78. package/src/ui/container/index.ts +1 -0
  79. package/src/ui/dropdown/dropdown.module.css +1 -2
  80. package/src/ui/filters/filters.module.css +1 -5
  81. package/src/ui/input/input.module.css +3 -4
  82. package/types/components/index.d.ts +1 -0
  83. package/types/components/insight-icon/index.d.ts +1 -0
  84. package/types/components/insight-icon/insight-icon.d.ts +7 -0
  85. package/types/components/insights/insights.d.ts +2 -2
  86. package/types/layout/box/box.d.ts +11 -25
  87. package/types/layout/box/index.d.ts +1 -1
  88. package/types/ui/container/container.d.ts +5 -17
  89. package/types/ui/container/index.d.ts +1 -1
  90. package/src/layout/box/box.jsx +0 -67
  91. package/src/layout/box/index.js +0 -1
  92. package/src/ui/container/container.jsx +0 -24
  93. package/src/ui/container/index.js +0 -1
@@ -0,0 +1,2 @@
1
+ export * from './insight-icon';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/insight-icon/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC"}
@@ -0,0 +1,18 @@
1
+ import React from 'react';
2
+ import cx from 'classnames';
3
+ import { InsightType } from '@bundle-stats/utils';
4
+ import { Icon } from '../../ui/icon';
5
+ import css from './insight-icon.module.css';
6
+ const InsightTypeIconMap = new Map([
7
+ [InsightType.ERROR, Icon.ICONS.ERROR],
8
+ [InsightType.WARNING, Icon.ICONS.WARNING],
9
+ [InsightType.INFO, Icon.ICONS.INFO],
10
+ ]);
11
+ export const InsightIcon = (props) => {
12
+ const { className, type } = props;
13
+ const resolvedType = Object.values(InsightType).includes(type) ? type : InsightType.WARNING;
14
+ const rootClassName = cx(css.root, css[resolvedType], className);
15
+ const glyph = InsightTypeIconMap.get(resolvedType);
16
+ return React.createElement(Icon, { glyph: glyph, className: rootClassName });
17
+ };
18
+ //# sourceMappingURL=insight-icon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"insight-icon.js","sourceRoot":"","sources":["../../../src/components/insight-icon/insight-icon.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElD,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAErC,OAAO,GAAG,MAAM,2BAA2B,CAAC;AAE5C,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC;IACjC,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;IACrC,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;IACzC,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;CACpC,CAAC,CAAC;AAMH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,KAAuB,EAAE,EAAE;IACrD,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC;IAClC,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC;IAC5F,MAAM,aAAa,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,YAAY,CAAC,EAAE,SAAS,CAAC,CAAC;IACjE,MAAM,KAAK,GAAG,kBAAkB,CAAC,GAAG,CAAC,YAAY,CAAW,CAAC;IAE7D,OAAO,oBAAC,IAAI,IAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,aAAa,GAAI,CAAC;AAC1D,CAAC,CAAC"}
@@ -0,0 +1,24 @@
1
+ .root {
2
+ width: calc(var(--space-small) + 6px);
3
+ height: calc(var(--space-small) + 6px);
4
+ padding: 3px;
5
+ border-radius: 50%;
6
+ background: var(--color-highlight);
7
+ }
8
+
9
+ .error {
10
+ background: var(--color-red-50);
11
+ color: var(--color-danger);
12
+ }
13
+
14
+ .warning {
15
+ padding-top: 1px;
16
+ background: var(--color-yellow-200);
17
+ color: var(--color-yellow-900);
18
+ }
19
+
20
+ .info {
21
+ background: var(--color-highlight-info);
22
+ color: var(--color-info);
23
+ }
24
+
@@ -1,24 +1,17 @@
1
1
  import React from 'react';
2
- import cx from 'classnames';
3
- import { InsightType, getInsightList } from '@bundle-stats/utils';
2
+ import { getInsightList } from '@bundle-stats/utils';
4
3
  import { FlexStack } from '../../layout/flex-stack';
5
4
  import { Stack } from '../../layout/stack';
6
- import { Icon } from '../../ui/icon';
7
5
  import { ComponentLink } from '../component-link';
6
+ import { InsightIcon } from '../insight-icon';
8
7
  import css from './insights.module.css';
9
- const InsightTypeIconMap = new Map([
10
- [InsightType.ERROR, Icon.ICONS.ERROR],
11
- [InsightType.WARNING, Icon.ICONS.WARNING],
12
- [InsightType.INFO, Icon.ICONS.INFO],
13
- ]);
14
8
  export const Insights = (props) => {
15
- const { duplicatePackages, newPackages, customComponentLink: CustomComponentLink = ComponentLink, ...restProps } = props;
16
- const insights = getInsightList({ duplicatePackages, newPackages });
17
- return (React.createElement(Stack, { space: "xxsmall", ...restProps }, insights.map(({ name, insight, link }) => {
18
- const glyph = InsightTypeIconMap.get(insight.type);
9
+ const { insights, customComponentLink: CustomComponentLink = ComponentLink, ...restProps } = props;
10
+ const insightList = getInsightList(insights);
11
+ return (React.createElement(Stack, { space: "xxsmall", ...restProps }, insightList.map(({ name, insight, link }) => {
19
12
  const { text } = insight.data;
20
- return (React.createElement(FlexStack, { key: name, space: "xxsmall", alignItems: "center", as: CustomComponentLink, ...link, className: cx(css.entry, css[insight.type]) },
21
- glyph && React.createElement(Icon, { glyph: glyph, className: css.icon }),
13
+ return (React.createElement(FlexStack, { key: name, space: "xxsmall", alignItems: "center", as: CustomComponentLink, ...link, className: css.entry },
14
+ React.createElement(InsightIcon, { type: insight.type, className: css.icon }),
22
15
  React.createElement("span", null, text)));
23
16
  })));
24
17
  };
@@ -1 +1 @@
1
- {"version":3,"file":"insights.js","sourceRoot":"","sources":["../../../src/components/insights/insights.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAElE,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD,OAAO,GAAG,MAAM,uBAAuB,CAAC;AAExC,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC;IACjC,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;IACrC,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;IACzC,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;CACpC,CAAC,CAAC;AAQH,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,KAAoB,EAAE,EAAE;IAC/C,MAAM,EACJ,iBAAiB,EACjB,WAAW,EACX,mBAAmB,EAAE,mBAAmB,GAAG,aAAa,EACxD,GAAG,SAAS,EACb,GAAG,KAAK,CAAC;IAEV,MAAM,QAAQ,GAAG,cAAc,CAAC,EAAE,iBAAiB,EAAE,WAAW,EAAE,CAAC,CAAC;IAEpE,OAAO,CACL,oBAAC,KAAK,IAAC,KAAK,EAAC,SAAS,KAAK,SAAS,IACjC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE;QACxC,MAAM,KAAK,GAAG,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACnD,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,IAAwB,CAAC;QAElD,OAAO,CACL,oBAAC,SAAS,IACR,GAAG,EAAE,IAAI,EACT,KAAK,EAAC,SAAS,EACf,UAAU,EAAC,QAAQ,EACnB,EAAE,EAAE,mBAAmB,KACnB,IAAI,EACR,SAAS,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAE1C,KAAK,IAAI,oBAAC,IAAI,IAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,CAAC,IAAI,GAAI;YACrD,kCAAO,IAAI,CAAQ,CACT,CACb,CAAC;IACJ,CAAC,CAAC,CACI,CACT,CAAC;AACJ,CAAC,CAAC"}
1
+ {"version":3,"file":"insights.js","sourceRoot":"","sources":["../../../src/components/insights/insights.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAmB,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAEtE,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C,OAAO,GAAG,MAAM,uBAAuB,CAAC;AAOxC,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,KAAoB,EAAE,EAAE;IAC/C,MAAM,EACJ,QAAQ,EACR,mBAAmB,EAAE,mBAAmB,GAAG,aAAa,EACxD,GAAG,SAAS,EACb,GAAG,KAAK,CAAC;IAEV,MAAM,WAAW,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IAE7C,OAAO,CACL,oBAAC,KAAK,IAAC,KAAK,EAAC,SAAS,KAAK,SAAS,IACjC,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE;QAC3C,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,IAAwB,CAAC;QAClD,OAAO,CACL,oBAAC,SAAS,IACR,GAAG,EAAE,IAAI,EACT,KAAK,EAAC,SAAS,EACf,UAAU,EAAC,QAAQ,EACnB,EAAE,EAAE,mBAAmB,KACnB,IAAI,EACR,SAAS,EAAE,GAAG,CAAC,KAAK;YAEpB,oBAAC,WAAW,IAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,CAAC,IAAI,GAAI;YACxD,kCAAO,IAAI,CAAQ,CACT,CACb,CAAC;IACJ,CAAC,CAAC,CACI,CACT,CAAC;AACJ,CAAC,CAAC"}
@@ -1,26 +1,5 @@
1
1
  .icon {
2
2
  flex: 0 0 auto;
3
- width: calc(var(--space-small) + 6px);
4
- height: calc(var(--space-small) + 6px);
5
- padding: 3px;
6
- border-radius: 50%;
7
- background: var(--color-highlight);
8
- }
9
-
10
- .error .icon {
11
- background: var(--color-red-50);
12
- color: var(--color-danger);
13
- }
14
-
15
- .warning .icon {
16
- padding-top: 1px;
17
- background: var(--color-yellow-200);
18
- color: var(--color-yellow-900);
19
- }
20
-
21
- .info .icon {
22
- background: var(--color-highlight-info);
23
- color: var(--color-info);
24
3
  }
25
4
 
26
5
  .entry {
@@ -5,13 +5,7 @@
5
5
  }
6
6
 
7
7
  .input {
8
- border-radius: var(--radius-small);
9
8
  height: var(--space-large);
10
- border-color: var(--color-outline);
11
- }
12
-
13
- .input:focus {
14
- border-color: var(--color-outline-dark);
15
9
  }
16
10
 
17
11
  .cancelButton {
@@ -12,7 +12,7 @@ import css from './summary.module.css';
12
12
  export const Summary = ({ className, size, keys, data, loading, showSummaryItemDelta, summaryItemLink: SummaryItemCustomLink, }) => (React.createElement(Box, { className: cx(css.root, className) },
13
13
  React.createElement(FlexStack, { space: "small", className: css.items }, Array.from(METRIC_COMPONENT_LINKS)
14
14
  .filter(([metricId]) => keys.includes(metricId))
15
- .map(([metricId, metricOptions]) => (React.createElement(Box, { key: metricId, outline: true, padding: "small", as: SummaryItemCustomLink, ...metricOptions.link, className: css.item },
15
+ .map(([metricId, metricOptions]) => (React.createElement(Box, { key: metricId, outline: true, outlineHover: true, padding: "small", as: SummaryItemCustomLink, ...metricOptions.link, className: css.item },
16
16
  React.createElement(SummaryItem, { size: size, id: metricId, data: get(data, metricId), loading: loading, showMetricDescription: true, showDelta: showSummaryItemDelta && metricOptions.showDelta !== false })))))));
17
17
  Summary.defaultProps = {
18
18
  className: '',
@@ -1 +1 @@
1
- {"version":3,"file":"summary.js","sourceRoot":"","sources":["../../../src/components/summary/summary.jsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,SAAS,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,GAAG,MAAM,YAAY,CAAC;AAC7B,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAE7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,GAAG,MAAM,sBAAsB,CAAC;AAEvC,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,EACtB,SAAS,EACT,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,OAAO,EACP,oBAAoB,EACpB,eAAe,EAAE,qBAAqB,GACvC,EAAE,EAAE,CAAC,CACJ,oBAAC,GAAG,IAAC,SAAS,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC;IACrC,oBAAC,SAAS,IAAC,KAAK,EAAC,OAAO,EAAC,SAAS,EAAE,GAAG,CAAC,KAAK,IAC1C,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC;SAChC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;SAC/C,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,aAAa,CAAC,EAAE,EAAE,CAAC,CAClC,oBAAC,GAAG,IACF,GAAG,EAAE,QAAQ,EACb,OAAO,QACP,OAAO,EAAC,OAAO,EACf,EAAE,EAAE,qBAAqB,KACrB,aAAa,CAAC,IAAI,EACtB,SAAS,EAAE,GAAG,CAAC,IAAI;QAEnB,oBAAC,WAAW,IACV,IAAI,EAAE,IAAI,EACV,EAAE,EAAE,QAAQ,EACZ,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,EACzB,OAAO,EAAE,OAAO,EAChB,qBAAqB,QACrB,SAAS,EAAE,oBAAoB,IAAI,aAAa,CAAC,SAAS,KAAK,KAAK,GACpE,CACE,CACP,CAAC,CACM,CACR,CACP,CAAC;AAEF,OAAO,CAAC,YAAY,GAAG;IACrB,SAAS,EAAE,EAAE;IACb,IAAI,EAAE,IAAI;IACV,OAAO,EAAE,KAAK;IACd,IAAI,EAAE,EAAE;IACR,IAAI,EAAE,uBAAuB;IAC7B,oBAAoB,EAAE,IAAI;IAC1B,eAAe,EAAE,aAAa;CAC/B,CAAC;AAEF,OAAO,CAAC,SAAS,GAAG;IAClB,SAAS,EAAE,SAAS,CAAC,MAAM;IAC3B,IAAI,EAAE,SAAS,CAAC,MAAM;IACtB,IAAI,EAAE,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC;IACzC,IAAI,EAAE,SAAS,CAAC,KAAK,CAAC;QACpB,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC,KAAK,CAAC;YAClC,QAAQ,EAAE,SAAS,CAAC,MAAM;YAC1B,OAAO,EAAE,SAAS,CAAC,MAAM;SAC1B,CAAC;KACH,CAAC;IACF,OAAO,EAAE,SAAS,CAAC,IAAI;IACvB,oBAAoB,EAAE,SAAS,CAAC,IAAI;IACpC,eAAe,EAAE,SAAS,CAAC,WAAW;CACvC,CAAC"}
1
+ {"version":3,"file":"summary.js","sourceRoot":"","sources":["../../../src/components/summary/summary.jsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,SAAS,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,GAAG,MAAM,YAAY,CAAC;AAC7B,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAE7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,GAAG,MAAM,sBAAsB,CAAC;AAEvC,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,EACtB,SAAS,EACT,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,OAAO,EACP,oBAAoB,EACpB,eAAe,EAAE,qBAAqB,GACvC,EAAE,EAAE,CAAC,CACJ,oBAAC,GAAG,IAAC,SAAS,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC;IACrC,oBAAC,SAAS,IAAC,KAAK,EAAC,OAAO,EAAC,SAAS,EAAE,GAAG,CAAC,KAAK,IAC1C,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC;SAChC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;SAC/C,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,aAAa,CAAC,EAAE,EAAE,CAAC,CAClC,oBAAC,GAAG,IACF,GAAG,EAAE,QAAQ,EACb,OAAO,QACP,YAAY,QACZ,OAAO,EAAC,OAAO,EACf,EAAE,EAAE,qBAAqB,KACrB,aAAa,CAAC,IAAI,EACtB,SAAS,EAAE,GAAG,CAAC,IAAI;QAEnB,oBAAC,WAAW,IACV,IAAI,EAAE,IAAI,EACV,EAAE,EAAE,QAAQ,EACZ,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,EACzB,OAAO,EAAE,OAAO,EAChB,qBAAqB,QACrB,SAAS,EAAE,oBAAoB,IAAI,aAAa,CAAC,SAAS,KAAK,KAAK,GACpE,CACE,CACP,CAAC,CACM,CACR,CACP,CAAC;AAEF,OAAO,CAAC,YAAY,GAAG;IACrB,SAAS,EAAE,EAAE;IACb,IAAI,EAAE,IAAI;IACV,OAAO,EAAE,KAAK;IACd,IAAI,EAAE,EAAE;IACR,IAAI,EAAE,uBAAuB;IAC7B,oBAAoB,EAAE,IAAI;IAC1B,eAAe,EAAE,aAAa;CAC/B,CAAC;AAEF,OAAO,CAAC,SAAS,GAAG;IAClB,SAAS,EAAE,SAAS,CAAC,MAAM;IAC3B,IAAI,EAAE,SAAS,CAAC,MAAM;IACtB,IAAI,EAAE,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC;IACzC,IAAI,EAAE,SAAS,CAAC,KAAK,CAAC;QACpB,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC,KAAK,CAAC;YAClC,QAAQ,EAAE,SAAS,CAAC,MAAM;YAC1B,OAAO,EAAE,SAAS,CAAC,MAAM;SAC1B,CAAC;KACH,CAAC;IACF,OAAO,EAAE,SAAS,CAAC,IAAI;IACvB,oBAAoB,EAAE,SAAS,CAAC,IAAI;IACpC,eAAe,EAAE,SAAS,CAAC,WAAW;CACvC,CAAC"}
@@ -1,6 +1,5 @@
1
1
  .root {
2
2
  width: 100%;
3
- overflow: auto;
4
3
  }
5
4
 
6
5
  .item {
@@ -8,10 +7,3 @@
8
7
  min-width: 16em;
9
8
  text-decoration: none;
10
9
  }
11
-
12
- .item:hover,
13
- .item:active,
14
- .item:focus {
15
- border-color: var(--color-outline-dark);
16
- outline: none;
17
- }
@@ -190,6 +190,8 @@
190
190
  --radius-medium: 5px;
191
191
  --radius-large: 9px;
192
192
 
193
+ --outline-hover: 0 0 0 3px var(--color-highlight);
194
+
193
195
  /** Layout */
194
196
  --max-width: 80rem;
195
197
  }
@@ -1,33 +1,13 @@
1
1
  import React from 'react';
2
- import PropTypes from 'prop-types';
3
2
  import cx from 'classnames';
4
- import { NO_SPACE, SPACES } from '../../constants';
3
+ import { NO_SPACE } from '../../constants';
5
4
  import css from './box.module.css';
6
5
  export const Box = (props) => {
7
- const { className, as: Component, padding, horizontalPadding, verticalPadding, outline, ...restProps } = props;
6
+ const { className = '', as: Component = 'div', padding = NO_SPACE, horizontalPadding = '', verticalPadding = '', outline = false, outlineHover = false, ...restProps } = props;
8
7
  const [resolvedPadding, resolvedVerticalPadding, resolvedHorizontalPadding] = Array.isArray(padding)
9
8
  ? [null, ...padding]
10
9
  : [padding, verticalPadding, horizontalPadding];
11
- const rootClassName = cx(css.root, className, resolvedPadding && css[`padding-${resolvedPadding}`], resolvedVerticalPadding && css[`vertical-padding-${resolvedVerticalPadding}`], resolvedHorizontalPadding && css[`horizontal-padding-${resolvedHorizontalPadding}`], outline && css.outline);
10
+ const rootClassName = cx(css.root, className, resolvedPadding && css[`padding-${resolvedPadding}`], resolvedVerticalPadding && css[`vertical-padding-${resolvedVerticalPadding}`], resolvedHorizontalPadding && css[`horizontal-padding-${resolvedHorizontalPadding}`], outline && css.outline, outlineHover && css.outlineHover);
12
11
  return React.createElement(Component, { ...restProps, className: rootClassName });
13
12
  };
14
- Box.defaultProps = {
15
- className: '',
16
- as: 'div',
17
- padding: NO_SPACE,
18
- horizontalPadding: '',
19
- verticalPadding: '',
20
- outline: false,
21
- };
22
- Box.propTypes = {
23
- className: PropTypes.string,
24
- as: PropTypes.elementType,
25
- padding: PropTypes.oneOfType([
26
- PropTypes.oneOf(SPACES),
27
- PropTypes.arrayOf(PropTypes.oneOf(SPACES)),
28
- ]),
29
- horizontalPadding: PropTypes.oneOf(SPACES),
30
- verticalPadding: PropTypes.oneOf(SPACES),
31
- outline: PropTypes.bool,
32
- };
33
13
  //# sourceMappingURL=box.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"box.js","sourceRoot":"","sources":["../../../src/layout/box/box.jsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,SAAS,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,GAAG,MAAM,kBAAkB,CAAC;AAEnC,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,KAAK,EAAE,EAAE;IAC3B,MAAM,EACJ,SAAS,EACT,EAAE,EAAE,SAAS,EACb,OAAO,EACP,iBAAiB,EACjB,eAAe,EACf,OAAO,EACP,GAAG,SAAS,EACb,GAAG,KAAK,CAAC;IAEV,MAAM,CAAC,eAAe,EAAE,uBAAuB,EAAE,yBAAyB,CAAC,GAAG,KAAK,CAAC,OAAO,CACzF,OAAO,CACR;QACC,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,OAAO,CAAC;QACpB,CAAC,CAAC,CAAC,OAAO,EAAE,eAAe,EAAE,iBAAiB,CAAC,CAAC;IAElD,MAAM,aAAa,GAAG,EAAE,CACtB,GAAG,CAAC,IAAI,EACR,SAAS,EACT,eAAe,IAAI,GAAG,CAAC,WAAW,eAAe,EAAE,CAAC,EACpD,uBAAuB,IAAI,GAAG,CAAC,oBAAoB,uBAAuB,EAAE,CAAC,EAC7E,yBAAyB,IAAI,GAAG,CAAC,sBAAsB,yBAAyB,EAAE,CAAC,EACnF,OAAO,IAAI,GAAG,CAAC,OAAO,CACvB,CAAC;IAEF,OAAO,oBAAC,SAAS,OAAK,SAAS,EAAE,SAAS,EAAE,aAAa,GAAI,CAAC;AAChE,CAAC,CAAC;AAEF,GAAG,CAAC,YAAY,GAAG;IACjB,SAAS,EAAE,EAAE;IACb,EAAE,EAAE,KAAK;IACT,OAAO,EAAE,QAAQ;IACjB,iBAAiB,EAAE,EAAE;IACrB,eAAe,EAAE,EAAE;IACnB,OAAO,EAAE,KAAK;CACf,CAAC;AAEF,GAAG,CAAC,SAAS,GAAG;IAEd,SAAS,EAAE,SAAS,CAAC,MAAM;IAG3B,EAAE,EAAE,SAAS,CAAC,WAAW;IAGzB,OAAO,EAAE,SAAS,CAAC,SAAS,CAAC;QAC3B,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC;QACvB,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;KAC3C,CAAC;IAGF,iBAAiB,EAAE,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC;IAG1C,eAAe,EAAE,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC;IAGxC,OAAO,EAAE,SAAS,CAAC,IAAI;CACxB,CAAC"}
1
+ {"version":3,"file":"box.js","sourceRoot":"","sources":["../../../src/layout/box/box.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,OAAO,EAAE,QAAQ,EAAU,MAAM,iBAAiB,CAAC;AAEnD,OAAO,GAAG,MAAM,kBAAkB,CAAC;AAWnC,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,KAAe,EAAE,EAAE;IACrC,MAAM,EACJ,SAAS,GAAG,EAAE,EACd,EAAE,EAAE,SAAS,GAAG,KAAK,EACrB,OAAO,GAAG,QAAQ,EAClB,iBAAiB,GAAG,EAAE,EACtB,eAAe,GAAG,EAAE,EACpB,OAAO,GAAG,KAAK,EACf,YAAY,GAAG,KAAK,EACpB,GAAG,SAAS,EACb,GAAG,KAAK,CAAC;IAEV,MAAM,CAAC,eAAe,EAAE,uBAAuB,EAAE,yBAAyB,CAAC,GAAG,KAAK,CAAC,OAAO,CACzF,OAAO,CACR;QACC,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,OAAO,CAAC;QACpB,CAAC,CAAC,CAAC,OAAO,EAAE,eAAe,EAAE,iBAAiB,CAAC,CAAC;IAElD,MAAM,aAAa,GAAG,EAAE,CACtB,GAAG,CAAC,IAAI,EACR,SAAS,EACT,eAAe,IAAI,GAAG,CAAC,WAAW,eAAe,EAAE,CAAC,EACpD,uBAAuB,IAAI,GAAG,CAAC,oBAAoB,uBAAuB,EAAE,CAAC,EAC7E,yBAAyB,IAAI,GAAG,CAAC,sBAAsB,yBAAyB,EAAE,CAAC,EACnF,OAAO,IAAI,GAAG,CAAC,OAAO,EACtB,YAAY,IAAI,GAAG,CAAC,YAAY,CACjC,CAAC;IAEF,OAAO,oBAAC,SAAS,OAAK,SAAS,EAAE,SAAS,EAAE,aAAa,GAAI,CAAC;AAChE,CAAC,CAAC"}
@@ -15,6 +15,17 @@
15
15
  border-radius: 0 0 var(--radius-medium) var(--radius-medium);
16
16
  }
17
17
 
18
+ .outlineHover {
19
+ transition: var(--transition-out);
20
+ }
21
+
22
+ .outlineHover:focus,
23
+ .outlineHover:active,
24
+ .outlineHover:hover {
25
+ box-shadow: var(--outline-hover);
26
+ transition: var(--transition-in);
27
+ }
28
+
18
29
  .padding-xxxsmall {
19
30
  padding: var(--space-xxxsmall);
20
31
  }
@@ -1,2 +1,2 @@
1
- export { Box } from './box';
1
+ export * from './box';
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/layout/box/index.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/layout/box/index.ts"],"names":[],"mappings":"AAAA,cAAc,OAAO,CAAC"}
@@ -1,15 +1,6 @@
1
1
  import React from 'react';
2
- import PropTypes from 'prop-types';
3
2
  import cx from 'classnames';
4
3
  import css from './container.module.css';
5
- export const Container = ({ className, as: Component, ...restProps }) => (React.createElement(Component, { className: cx(css.root, className) },
4
+ export const Container = ({ as: Component = 'div', className = '', ...restProps }) => (React.createElement(Component, { className: cx(css.root, className) },
6
5
  React.createElement("div", { className: css.inner, ...restProps })));
7
- Container.defaultProps = {
8
- className: '',
9
- as: 'div',
10
- };
11
- Container.propTypes = {
12
- className: PropTypes.string,
13
- as: PropTypes.elementType,
14
- };
15
6
  //# sourceMappingURL=container.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"container.js","sourceRoot":"","sources":["../../../src/ui/container/container.jsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,SAAS,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,OAAO,GAAG,MAAM,wBAAwB,CAAC;AAEzC,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,GAAG,SAAS,EAAE,EAAE,EAAE,CAAC,CACvE,oBAAC,SAAS,IAAC,SAAS,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC;IAC3C,6BAAK,SAAS,EAAE,GAAG,CAAC,KAAK,KAAM,SAAS,GAAI,CAClC,CACb,CAAC;AAEF,SAAS,CAAC,YAAY,GAAG;IACvB,SAAS,EAAE,EAAE;IACb,EAAE,EAAE,KAAK;CACV,CAAC;AAEF,SAAS,CAAC,SAAS,GAAG;IAEpB,SAAS,EAAE,SAAS,CAAC,MAAM;IAG3B,EAAE,EAAE,SAAS,CAAC,WAAW;CAC1B,CAAC"}
1
+ {"version":3,"file":"container.js","sourceRoot":"","sources":["../../../src/ui/container/container.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,YAAY,CAAC;AAG5B,OAAO,GAAG,MAAM,wBAAwB,CAAC;AAMzC,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,EACxB,EAAE,EAAE,SAAS,GAAG,KAAK,EACrB,SAAS,GAAG,EAAE,EACd,GAAG,SAAS,EACG,EAAE,EAAE,CAAC,CACpB,oBAAC,SAAS,IAAC,SAAS,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC;IAC3C,6BAAK,SAAS,EAAE,GAAG,CAAC,KAAK,KAAM,SAAS,GAAI,CAClC,CACb,CAAC"}
@@ -1,2 +1,2 @@
1
- export { Container } from './container';
1
+ export * from './container';
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ui/container/index.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ui/container/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC"}
@@ -25,8 +25,7 @@
25
25
  .button:focus,
26
26
  .button:active {
27
27
  outline: none;
28
- box-shadow: var(--shadow-layer);
29
- border-color: var(--color-outline-dark);
28
+ box-shadow: var(--outline-hover);
30
29
  color: var(--color-text);
31
30
  }
32
31
 
@@ -83,11 +83,7 @@
83
83
  .filterStandalone:active .filterCheckbox,
84
84
  .filterStandalone:focus .filterCheckbox {
85
85
  z-index: var(--layout-xlow); /* show collapsed border */
86
- box-shadow: var(--shadow-layer);
87
- }
88
-
89
- .filterStandalone:hover .filterCheckbox {
90
- border-color: var(--color-outline-dark);
86
+ box-shadow: var(--outline-hover);
91
87
  color: var(--color-text);
92
88
  }
93
89
 
@@ -1,6 +1,6 @@
1
1
  .root {
2
- border: 1px solid var(--color-outline);;
3
- border-radius: 0;
2
+ border: 1px solid var(--color-outline);
3
+ border-radius: var(--radius-small);
4
4
  color: var(--color-text-light);
5
5
  width: 100%;
6
6
  transition: var(--transition-in);
@@ -25,8 +25,7 @@
25
25
  }
26
26
 
27
27
  .root:focus {
28
- border-color: var(--color-outline-dark);
29
- box-shadow: var(--shadow-layer);
28
+ box-shadow: var(--outline-hover);
30
29
  color: inherit;
31
30
  transition: var(--transition-out);
32
31
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bundle-stats/ui",
3
- "version": "4.2.1",
3
+ "version": "4.2.3-beta.0",
4
4
  "description": "UI components for BundleStats projects.",
5
5
  "main": "lib/index.js",
6
6
  "module": "lib-esm/index.js",
@@ -58,9 +58,9 @@
58
58
  "enzyme-to-json": "3.6.2",
59
59
  "hex-rgb": "5.0.0",
60
60
  "identity-obj-proxy": "3.0.0",
61
- "jest": "29.4.2",
61
+ "jest": "29.4.3",
62
62
  "jest-date-mock": "1.0.8",
63
- "jest-environment-jsdom": "29.4.2",
63
+ "jest-environment-jsdom": "29.4.3",
64
64
  "lodash": "4.17.21",
65
65
  "postcss": "8.4.21",
66
66
  "prop-types": "15.8.1",
@@ -80,11 +80,11 @@
80
80
  "react-router-dom": "^5.0.0"
81
81
  },
82
82
  "dependencies": {
83
- "@bundle-stats/utils": "^4.2.1",
83
+ "@bundle-stats/utils": "^4.2.3-beta.0",
84
84
  "ariakit": "2.0.0-next.43",
85
85
  "modern-css-reset": "1.4.0",
86
86
  "query-string": "7.1.3",
87
87
  "use-query-params": "2.2.0"
88
88
  },
89
- "gitHead": "3b459555254b118e145c127dfde8d003792148b3"
89
+ "gitHead": "a4664a4c6318b73774aae3666f5ae6c778025ea1"
90
90
  }
package/src/app/app.jsx CHANGED
@@ -1,5 +1,6 @@
1
1
  import React, { useContext, useEffect, useMemo } from 'react';
2
2
  import PropTypes from 'prop-types';
3
+ import isEmpty from 'lodash/isEmpty';
3
4
  import { HashRouter, NavLink, Route, Switch, useLocation } from 'react-router-dom';
4
5
  import { COMPONENT } from '@bundle-stats/utils';
5
6
 
@@ -70,24 +71,34 @@ JobsProvider.propTypes = {
70
71
  const OverviewContent = () => {
71
72
  const { jobs } = useContext(JobsContext);
72
73
 
73
- const duplicatePackagesInsight = jobs[0].insights?.webpack?.duplicatePackagesV3;
74
- const newPackagesInsight = jobs[0].insights?.webpack?.newPackages;
74
+ const insightsByName = useMemo(() => {
75
+ const webpackInsights = jobs?.[0]?.insights?.webpack;
76
+
77
+ if (!webpackInsights) {
78
+ return null
79
+ }
80
+
81
+ const res = {
82
+ ...(webpackInsights.duplicatePackagesV3 && { duplicatePackages: webpackInsights.duplicatePackagesV3 }),
83
+ ...(webpackInsights.newPackages && { newPackages: webpackInsights.newPackages }),
84
+ };
85
+
86
+ if (isEmpty(res)) {
87
+ return null;
88
+ }
89
+
90
+ return res;
91
+ }, [jobs]);
75
92
 
76
- console.info(duplicatePackagesInsight, newPackagesInsight);
77
93
 
78
94
  return (
79
95
  <Stack space="medium">
80
- {(duplicatePackagesInsight || newPackagesInsight) && (
96
+ {insightsByName && (
81
97
  <Container>
82
98
  <Stack space="xsmall">
83
99
  <MetricsTableTitle title="Insights" />
84
100
  <Box padding="small" outline>
85
- <Insights
86
- duplicatePackages={duplicatePackagesInsight}
87
- newPackages={newPackagesInsight}
88
- summary={jobs[0].summary?.webpack}
89
- showDelta={jobs.length > 1}
90
- />
101
+ <Insights insights={insightsByName} />
91
102
  </Box>
92
103
  </Stack>
93
104
  </Container>
@@ -6,6 +6,7 @@ export { BundlePackages } from './bundle-packages';
6
6
  export { BundleModules } from './bundle-modules';
7
7
  export { ComponentLink } from './component-link';
8
8
  export { Delta } from './delta';
9
+ export { InsightIcon } from './insight-icon';
9
10
  export { Insights } from './insights';
10
11
  export { JobName } from './job-name';
11
12
  export { JobHeader } from './job-header';
@@ -0,0 +1 @@
1
+ export * from './insight-icon';
@@ -0,0 +1,24 @@
1
+ .root {
2
+ width: calc(var(--space-small) + 6px);
3
+ height: calc(var(--space-small) + 6px);
4
+ padding: 3px;
5
+ border-radius: 50%;
6
+ background: var(--color-highlight);
7
+ }
8
+
9
+ .error {
10
+ background: var(--color-red-50);
11
+ color: var(--color-danger);
12
+ }
13
+
14
+ .warning {
15
+ padding-top: 1px;
16
+ background: var(--color-yellow-200);
17
+ color: var(--color-yellow-900);
18
+ }
19
+
20
+ .info {
21
+ background: var(--color-highlight-info);
22
+ color: var(--color-info);
23
+ }
24
+
@@ -0,0 +1,27 @@
1
+ import React from 'react';
2
+ import cx from 'classnames';
3
+ import { InsightType } from '@bundle-stats/utils';
4
+
5
+ import { Icon } from '../../ui/icon';
6
+ // @ts-ignore
7
+ import css from './insight-icon.module.css';
8
+
9
+ const InsightTypeIconMap = new Map([
10
+ [InsightType.ERROR, Icon.ICONS.ERROR],
11
+ [InsightType.WARNING, Icon.ICONS.WARNING],
12
+ [InsightType.INFO, Icon.ICONS.INFO],
13
+ ]);
14
+
15
+ interface InsightIconProps extends React.HTMLAttributes<'span'> {
16
+ type: InsightType;
17
+ }
18
+
19
+ export const InsightIcon = (props: InsightIconProps) => {
20
+ const { className, type } = props;
21
+ const resolvedType = Object.values(InsightType).includes(type) ? type : InsightType.WARNING;
22
+ const rootClassName = cx(css.root, css[resolvedType], className);
23
+ const glyph = InsightTypeIconMap.get(resolvedType) as string;
24
+
25
+ return <Icon glyph={glyph} className={rootClassName} />;
26
+ };
27
+
@@ -1,26 +1,5 @@
1
1
  .icon {
2
2
  flex: 0 0 auto;
3
- width: calc(var(--space-small) + 6px);
4
- height: calc(var(--space-small) + 6px);
5
- padding: 3px;
6
- border-radius: 50%;
7
- background: var(--color-highlight);
8
- }
9
-
10
- .error .icon {
11
- background: var(--color-red-50);
12
- color: var(--color-danger);
13
- }
14
-
15
- .warning .icon {
16
- padding-top: 1px;
17
- background: var(--color-yellow-200);
18
- color: var(--color-yellow-900);
19
- }
20
-
21
- .info .icon {
22
- background: var(--color-highlight-info);
23
- color: var(--color-info);
24
3
  }
25
4
 
26
5
  .entry {
@@ -14,18 +14,20 @@ const Template = (props: any) => <Insights {...props} />;
14
14
  export const Default = Template.bind({});
15
15
 
16
16
  Default.args = {
17
- duplicatePackages: {
18
- type: 'error',
19
- data: {
20
- packages: { 'package-a': ['package-a', 'package-a~1'] },
21
- text: 'Bundle introduced 1 and removed 2 duplicate packages',
17
+ insights: {
18
+ duplicatePackages: {
19
+ type: 'error',
20
+ data: {
21
+ packages: { 'package-a': ['package-a', 'package-a~1'] },
22
+ text: 'Bundle introduced 1 and removed 2 duplicate packages',
23
+ },
22
24
  },
23
- },
24
- newPackages: {
25
- type: 'warning',
26
- data: {
27
- text: 'Bundle introduced 2 new packages: package-c, package-d',
28
- packages: ['package-c', 'package-d'],
25
+ newPackages: {
26
+ type: 'warning',
27
+ data: {
28
+ text: 'Bundle introduced 2 new packages: package-c, package-d',
29
+ packages: ['package-c', 'package-d'],
30
+ },
29
31
  },
30
32
  },
31
33
  };
@@ -33,18 +35,20 @@ Default.args = {
33
35
  export const Info = Template.bind({});
34
36
 
35
37
  Info.args = {
36
- duplicatePackages: {
37
- type: 'info',
38
- data: {
39
- packages: { 'package-a': ['package-a', 'package-a~1'] },
40
- text: 'Bundle removed 1 duplicate packages',
38
+ insights: {
39
+ duplicatePackages: {
40
+ type: 'info',
41
+ data: {
42
+ packages: { 'package-a': ['package-a', 'package-a~1'] },
43
+ text: 'Bundle removed 1 duplicate packages',
44
+ },
41
45
  },
42
- },
43
- newPackages: {
44
- type: 'warning',
45
- data: {
46
- text: 'Bundle introduced 2 new packages: package-c, package-d',
47
- packages: ['package-c', 'package-d'],
46
+ newPackages: {
47
+ type: 'warning',
48
+ data: {
49
+ text: 'Bundle introduced 2 new packages: package-c, package-d',
50
+ packages: ['package-c', 'package-d'],
51
+ },
48
52
  },
49
53
  },
50
54
  };