@bundle-stats/ui 4.0.1 → 4.0.5-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 (54) hide show
  1. package/lib/components/metric/metric.js +40 -25
  2. package/lib/components/metric/metric.module.css +4 -14
  3. package/lib/components/metrics-table-title/metrics-table-title.js +1 -1
  4. package/lib/components/metrics-table-title/metrics-table-title.module.css +3 -3
  5. package/lib/components/summary-item/summary-item.js +3 -1
  6. package/lib/components/summary-item/summary-item.module.css +0 -9
  7. package/lib/components/total-size-type-title/total-size-type-title.js +6 -3
  8. package/lib/components/total-size-type-title/total-size-type-title.module.css +9 -1
  9. package/lib/i18n.js +2 -2
  10. package/lib/ui/dropdown/dropdown.module.css +3 -2
  11. package/lib/ui/filters/filters.js +11 -8
  12. package/lib/ui/filters/filters.module.css +11 -12
  13. package/lib/ui/hover-card/hover-card.js +8 -2
  14. package/lib/ui/skeleton/skeleton.js +11 -5
  15. package/lib/ui/skeleton/skeleton.module.css +6 -2
  16. package/lib/ui/skeleton/skeleton.stories.js +44 -9
  17. package/lib/ui/sort-dropdown/sort-dropdown.js +90 -30
  18. package/lib/ui/sort-dropdown/sort-dropdown.module.css +5 -3
  19. package/lib-esm/components/metric/metric.js +40 -15
  20. package/lib-esm/components/metric/metric.module.css +4 -14
  21. package/lib-esm/components/metrics-table-title/metrics-table-title.js +1 -1
  22. package/lib-esm/components/metrics-table-title/metrics-table-title.module.css +3 -3
  23. package/lib-esm/components/summary-item/summary-item.js +3 -1
  24. package/lib-esm/components/summary-item/summary-item.module.css +0 -9
  25. package/lib-esm/components/total-size-type-title/total-size-type-title.js +6 -3
  26. package/lib-esm/components/total-size-type-title/total-size-type-title.module.css +9 -1
  27. package/lib-esm/i18n.js +2 -2
  28. package/lib-esm/ui/dropdown/dropdown.module.css +3 -2
  29. package/lib-esm/ui/filters/filters.js +9 -7
  30. package/lib-esm/ui/filters/filters.module.css +11 -12
  31. package/lib-esm/ui/hover-card/hover-card.js +8 -2
  32. package/lib-esm/ui/skeleton/skeleton.js +10 -4
  33. package/lib-esm/ui/skeleton/skeleton.module.css +6 -2
  34. package/lib-esm/ui/skeleton/skeleton.stories.js +28 -5
  35. package/lib-esm/ui/sort-dropdown/sort-dropdown.js +72 -23
  36. package/lib-esm/ui/sort-dropdown/sort-dropdown.module.css +5 -3
  37. package/package.json +5 -5
  38. package/src/components/metric/metric.jsx +32 -24
  39. package/src/components/metric/metric.module.css +4 -14
  40. package/src/components/metrics-table-title/metrics-table-title.jsx +1 -1
  41. package/src/components/metrics-table-title/metrics-table-title.module.css +3 -3
  42. package/src/components/summary-item/summary-item.jsx +3 -3
  43. package/src/components/summary-item/summary-item.module.css +0 -9
  44. package/src/components/total-size-type-title/total-size-type-title.jsx +3 -3
  45. package/src/components/total-size-type-title/total-size-type-title.module.css +9 -1
  46. package/src/i18n.js +2 -2
  47. package/src/ui/dropdown/dropdown.module.css +3 -2
  48. package/src/ui/filters/filters.jsx +24 -18
  49. package/src/ui/filters/filters.module.css +11 -12
  50. package/src/ui/hover-card/hover-card.jsx +11 -3
  51. package/src/ui/skeleton/skeleton.jsx +7 -3
  52. package/src/ui/skeleton/skeleton.module.css +6 -2
  53. package/src/ui/sort-dropdown/sort-dropdown.jsx +70 -27
  54. package/src/ui/sort-dropdown/sort-dropdown.module.css +5 -3
@@ -24,8 +24,8 @@ const resolveComponent = (as, href) => {
24
24
  };
25
25
 
26
26
  export const HoverCard = (props) => {
27
- const { className, hoverCardClassName, href, as, label, children } = props;
28
- const state = useHovercardState({ gutter: 8 });
27
+ const { className, anchorClassName, hoverCardClassName, href, as, label, children } = props;
28
+ const state = useHovercardState({ gutter: 8, timeout: 700 });
29
29
  const hoverCardProps = useHovercard({ state, portal: true });
30
30
 
31
31
  // Fallback to span if no href
@@ -37,7 +37,12 @@ export const HoverCard = (props) => {
37
37
 
38
38
  return (
39
39
  <div className={cx(css.root, className)}>
40
- <HovercardAnchor state={state} href={href} className={css.anchor} as={Component}>
40
+ <HovercardAnchor
41
+ state={state}
42
+ href={href}
43
+ className={cx(css.anchor, anchorClassName)}
44
+ as={Component}
45
+ >
41
46
  {label}
42
47
  </HovercardAnchor>
43
48
  <Hovercard
@@ -59,6 +64,8 @@ HoverCard.propTypes = {
59
64
  className: PropTypes.string,
60
65
  /** Adopted child class name for hover card */
61
66
  hoverCardClassName: PropTypes.string,
67
+ /** Adopted child class name for anchor */
68
+ anchorClassName: PropTypes.string,
62
69
  /** Anchor label */
63
70
  label: PropTypes.node,
64
71
  /** Anchor href */
@@ -72,6 +79,7 @@ HoverCard.propTypes = {
72
79
  HoverCard.defaultProps = {
73
80
  className: '',
74
81
  hoverCardClassName: '',
82
+ anchorClassName: '',
75
83
  label: '',
76
84
  as: '',
77
85
  href: '',
@@ -5,16 +5,20 @@ import cx from 'classnames';
5
5
  import css from './skeleton.module.css';
6
6
 
7
7
  export const Skeleton = (props) => {
8
- const { className, ...restProps } = props;
9
- const rootClassName = cx(css.root, className);
8
+ const { className, as: Component, block, ...restProps } = props;
9
+ const rootClassName = cx(css.root, className, block && css.block);
10
10
 
11
- return <span className={rootClassName} {...restProps} />;
11
+ return <Component className={rootClassName} {...restProps} />;
12
12
  };
13
13
 
14
14
  Skeleton.propTypes = {
15
15
  className: PropTypes.string,
16
+ as: PropTypes.elementType,
17
+ block: PropTypes.bool,
16
18
  };
17
19
 
18
20
  Skeleton.defaultProps = {
19
21
  className: '',
22
+ as: 'span',
23
+ block: false,
20
24
  };
@@ -1,8 +1,8 @@
1
1
  .root {
2
- display: block;
3
- background: linear-gradient(transparent 10%, currentColor 10.1%, currentColor 90%, transparent 90.1%);
2
+ background: linear-gradient(transparent 12.5%, currentColor 12.6%, currentColor 86.4%, transparent 86.5%);
4
3
  opacity: 0.06;
5
4
  pointer-events: none;
5
+ min-width: 6em;
6
6
  }
7
7
 
8
8
  /** empty char to keep the text height */
@@ -11,3 +11,7 @@
11
11
  content: '\A0';
12
12
  color: transparent;
13
13
  }
14
+
15
+ .block {
16
+ background: currentColor;
17
+ }
@@ -1,4 +1,4 @@
1
- import React from 'react';
1
+ import React, { useMemo } from 'react';
2
2
  import PropTypes from 'prop-types';
3
3
  import cx from 'classnames';
4
4
 
@@ -6,6 +6,65 @@ import { Dropdown } from '../dropdown';
6
6
  import { Icon } from '../icon';
7
7
  import css from './sort-dropdown.module.css';
8
8
 
9
+ const Item = ({
10
+ className,
11
+ as: Component,
12
+ id,
13
+ label,
14
+ active,
15
+ direction,
16
+ defaultDirection,
17
+ getButtonOnClick,
18
+ ...restProps }) => {
19
+
20
+ const buttonProps = useMemo(() => {
21
+ let resolveNextDirection = defaultDirection;
22
+
23
+ if (active) {
24
+ resolveNextDirection = direction === 'asc' ? 'desc' : 'asc';
25
+ }
26
+
27
+ if (resolveNextDirection === 'desc') {
28
+ return {
29
+ className: css.itemAsc,
30
+ onClick: getButtonOnClick(id, 'desc'),
31
+ title: `Order data by ${label} descending`,
32
+ };
33
+ }
34
+
35
+ return {
36
+ onClick: getButtonOnClick(id, 'asc'),
37
+ title: `Order data by ${label} ascending`,
38
+ };
39
+ }, [active, direction, defaultDirection, id, label]);
40
+
41
+ return (
42
+ <Component
43
+ {...restProps}
44
+ {...buttonProps}
45
+ className={cx(className, css.item, active && css.itemActive, buttonProps.className)}
46
+ >
47
+ <Icon className={css.itemIcon} glyph="arrow" />
48
+ <span className={css.itemLabel}>{label}</span>
49
+ </Component>
50
+ );
51
+ };
52
+
53
+ Item.propTypes = {
54
+ className: PropTypes.string,
55
+ as: PropTypes.element.isRequired,
56
+ id: PropTypes.string.isRequired,
57
+ label: PropTypes.string.isRequired,
58
+ active: PropTypes.bool.isRequired,
59
+ direction: PropTypes.string.isRequired,
60
+ defaultDirection: PropTypes.string.isRequired,
61
+ getButtonOnClick: PropTypes.func.isRequired,
62
+ };
63
+
64
+ Item.defaultProps = {
65
+ className: '',
66
+ };
67
+
9
68
  export const SortDropdown = (props) => {
10
69
  const { className, label, fields, field, direction, onChange } = props;
11
70
  const rootClassName = cx(css.root, className);
@@ -23,36 +82,20 @@ export const SortDropdown = (props) => {
23
82
  return (
24
83
  <div className={css.items}>
25
84
  {Object.entries(fields).map(([key, item]) => {
26
- const buttonProps =
27
- direction === 'asc'
28
- ? {
29
- className: css.itemAsc,
30
- onClick: getButtonOnClick(key, 'desc'),
31
- title: `Order data by ${item.label} descending`,
32
- }
33
- : {
34
- onClick: getButtonOnClick(key, 'asc'),
35
- title: `Order data by ${item.label} ascending`,
36
- };
37
-
38
85
  const isActive = field === key;
39
86
 
40
87
  return (
41
- <MenuItem
88
+ <Item
42
89
  key={key}
43
- {...menu}
44
- {...buttonProps}
45
- className={cx(
46
- buttonProps.className,
47
- menuItemClassName,
48
- css.item,
49
- isActive && menuItemActiveClassName,
50
- isActive && css.active,
51
- )}
52
- >
53
- <span className={css.itemLabel}>{item.label}</span>
54
- <Icon className={css.itemIcon} glyph="arrow" />
55
- </MenuItem>
90
+ as={MenuItem}
91
+ className={cx(menuItemClassName, isActive && menuItemActiveClassName)}
92
+ id={key}
93
+ label={item.label}
94
+ direction={direction}
95
+ defaultDirection={item.defaultDirection}
96
+ active={isActive}
97
+ getButtonOnClick={getButtonOnClick}
98
+ />
56
99
  );
57
100
  })}
58
101
  </div>
@@ -4,7 +4,9 @@
4
4
  }
5
5
 
6
6
  .itemIcon {
7
- display: none;
7
+ flex: 0 0 auto;
8
+ visibility: hidden;
9
+ margin-right: var(--space-xxxsmall);
8
10
  }
9
11
 
10
12
  .itemLabel {
@@ -15,6 +17,6 @@
15
17
  transform: rotate(180deg);
16
18
  }
17
19
 
18
- .item.active .itemIcon {
19
- display: block;
20
+ .itemActive .itemIcon {
21
+ visibility: visible;
20
22
  }