@bundle-stats/ui 4.18.0-beta.2 → 4.18.0-beta.4

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 (41) hide show
  1. package/lib/components/bundle-assets/bundle-assets.js +1 -1
  2. package/lib/components/bundle-assets/bundle-assets.js.map +1 -1
  3. package/lib/components/bundle-modules/bundle-modules.js +1 -1
  4. package/lib/components/bundle-modules/bundle-modules.js.map +1 -1
  5. package/lib/components/bundle-packages/bundle-packages.js +1 -1
  6. package/lib/components/bundle-packages/bundle-packages.js.map +1 -1
  7. package/lib/components/metrics-display-selector/metrics-display-selector.js +16 -15
  8. package/lib/components/metrics-display-selector/metrics-display-selector.js.map +1 -1
  9. package/lib/components/metrics-display-selector/metrics-display-selector.module.css +27 -1
  10. package/lib/constants.js +8 -1
  11. package/lib/constants.js.map +1 -1
  12. package/lib/hooks/metrics-display-type.js +7 -6
  13. package/lib/hooks/metrics-display-type.js.map +1 -1
  14. package/lib/ui/dropdown/dropdown.js +2 -2
  15. package/lib/ui/dropdown/dropdown.js.map +1 -1
  16. package/lib-esm/components/bundle-assets/bundle-assets.js +2 -2
  17. package/lib-esm/components/bundle-assets/bundle-assets.js.map +1 -1
  18. package/lib-esm/components/bundle-modules/bundle-modules.js +2 -2
  19. package/lib-esm/components/bundle-modules/bundle-modules.js.map +1 -1
  20. package/lib-esm/components/bundle-packages/bundle-packages.js +2 -2
  21. package/lib-esm/components/bundle-packages/bundle-packages.js.map +1 -1
  22. package/lib-esm/components/metrics-display-selector/metrics-display-selector.js +17 -16
  23. package/lib-esm/components/metrics-display-selector/metrics-display-selector.js.map +1 -1
  24. package/lib-esm/components/metrics-display-selector/metrics-display-selector.module.css +27 -1
  25. package/lib-esm/constants.js +7 -0
  26. package/lib-esm/constants.js.map +1 -1
  27. package/lib-esm/hooks/metrics-display-type.js +8 -7
  28. package/lib-esm/hooks/metrics-display-type.js.map +1 -1
  29. package/lib-esm/ui/dropdown/dropdown.js +2 -2
  30. package/lib-esm/ui/dropdown/dropdown.js.map +1 -1
  31. package/package.json +9 -9
  32. package/src/components/bundle-assets/bundle-assets.tsx +2 -2
  33. package/src/components/bundle-modules/bundle-modules.tsx +7 -2
  34. package/src/components/bundle-packages/bundle-packages.jsx +2 -2
  35. package/src/components/metrics-display-selector/metrics-display-selector.module.css +27 -1
  36. package/src/components/metrics-display-selector/metrics-display-selector.tsx +55 -31
  37. package/src/constants.ts +9 -0
  38. package/src/hooks/metrics-display-type.ts +10 -7
  39. package/src/ui/dropdown/dropdown.tsx +4 -2
  40. package/types/constants.d.ts +11 -1
  41. package/types/ui/dropdown/dropdown.d.ts +2 -1
@@ -1,13 +1,12 @@
1
1
  import React from 'react';
2
2
  import cx from 'classnames';
3
- import { MetricsDisplayType } from '../../constants';
3
+ import { MetricsDisplayType, MetricsDisplayGroupByDefault, MetricsDisplayGroupBy, } from '../../constants';
4
4
  import { Button } from '../../ui/button';
5
5
  import { ControlGroup } from '../../ui/control-group';
6
6
  import { Dropdown, DropdownItem } from '../../ui/dropdown';
7
7
  import { Icon } from '../../ui/icon';
8
+ import { FlexStack } from '../../layout/flex-stack';
8
9
  import css from './metrics-display-selector.module.css';
9
- import { FlexStack } from '../../layout';
10
- const DEFAULT_GROUP_BY = '';
11
10
  const METRICS_DISPLAY_MAP = {
12
11
  [MetricsDisplayType.TABLE]: {
13
12
  glyph: Icon.ICONS.TABLE,
@@ -20,32 +19,34 @@ const METRICS_DISPLAY_MAP = {
20
19
  };
21
20
  const displayTypes = Object.values(MetricsDisplayType);
22
21
  export const MetricsDisplaySelector = (props) => {
23
- const { value, groupBy = DEFAULT_GROUP_BY, groups = {}, onSelect, ...restProps } = props;
22
+ const { value, groupBy = MetricsDisplayGroupByDefault, groups = {}, onSelect, ...restProps } = props;
24
23
  return (React.createElement(ControlGroup, { ...restProps }, displayTypes.map((displayType, index) => {
25
24
  const displayGroups = groups === null || groups === void 0 ? void 0 : groups[displayType];
26
25
  const displayProps = METRICS_DISPLAY_MAP[displayType];
27
26
  const isLast = displayTypes.length - 1 === index;
28
27
  const isActive = displayType === value;
29
28
  if (!displayGroups || displayGroups.length === 0) {
30
- return (React.createElement(Button, { outline: true, active: isActive, size: "small", type: "button", glyph: displayProps.glyph, onClick: () => onSelect(displayType), className: isLast && css.itemLast, key: displayType }, displayProps.label));
29
+ return (React.createElement(Button, { outline: true, active: isActive, size: "small", type: "button", glyph: displayProps.glyph, onClick: () => onSelect(displayType), className: cx(isLast && css.itemLast), key: displayType }, displayProps.label));
31
30
  }
32
31
  const displayGroupsData = [
33
- {
34
- value: DEFAULT_GROUP_BY,
35
- label: 'No groups',
36
- },
37
32
  ...displayGroups.map((displayGroup) => ({
38
33
  value: displayGroup,
39
34
  label: `Group by ${displayGroup}`,
40
35
  })),
36
+ {
37
+ value: MetricsDisplayGroupBy.NONE,
38
+ label: 'No group',
39
+ },
41
40
  ];
42
- return (React.createElement(Dropdown, { glyph: displayProps.glyph, label: displayProps.label, className: cx(isLast && css.itemLast, isActive && css.buttonActive), key: displayType }, displayGroupsData.map((displayGroupData) => {
43
- const isGroupActive = isActive && displayGroupData.value === groupBy;
44
- return (React.createElement(DropdownItem, { onClick: () => onSelect(displayType, displayGroupData.value), isActive: isGroupActive, className: cx(css.dropdownItem, isGroupActive && css.dropdownItemActive), key: displayGroupData.value },
45
- React.createElement(FlexStack, { space: "xxxsmall", alignItems: "center" },
46
- React.createElement(Icon, { glyph: Icon.ICONS.CHECK, size: "small", className: css.dropdownItemIcon }),
47
- React.createElement("span", null, displayGroupData.label))));
48
- })));
41
+ return (React.createElement(FlexStack, { className: cx(css.dropdownGroup, isLast && css.itemLast, isActive && css.itemActive), key: displayType },
42
+ React.createElement(Button, { size: "small", glyph: displayProps.glyph, onClick: () => onSelect(displayType), className: css.dropdownGroupButton }, displayProps.label),
43
+ React.createElement(Dropdown, { glyph: Icon.ICONS.CHEVRON_DOWN, placement: "bottom-end", className: css.dropdownGroupAnchor }, displayGroupsData.map((displayGroupData) => {
44
+ const isGroupActive = isActive && displayGroupData.value === groupBy;
45
+ return (React.createElement(DropdownItem, { onClick: () => onSelect(displayType, displayGroupData.value), isActive: isGroupActive, className: cx(css.dropdownItem, isGroupActive && css.dropdownItemActive), key: displayGroupData.value },
46
+ React.createElement(FlexStack, { space: "xxxsmall", alignItems: "center" },
47
+ React.createElement(Icon, { glyph: Icon.ICONS.CHECK, size: "small", className: css.dropdownItemIcon }),
48
+ React.createElement("span", null, displayGroupData.label))));
49
+ }))));
49
50
  })));
50
51
  };
51
52
  //# sourceMappingURL=metrics-display-selector.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"metrics-display-selector.js","sourceRoot":"","sources":["../../../src/components/metrics-display-selector/metrics-display-selector.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"metrics-display-selector.js","sourceRoot":"","sources":["../../../src/components/metrics-display-selector/metrics-display-selector.tsx"],"names":[],"mappings":"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"}
@@ -1,4 +1,30 @@
1
- .buttonActive {
1
+ .dropdownGroup {
2
+ border: 1px solid var(--color-outline);
3
+ }
4
+
5
+ .dropdownGroupButton {
6
+ padding: calc(var(--space-xxsmall) - 1px);
7
+ }
8
+
9
+ .dropdownGroupAnchor {
10
+ border: none;
11
+ border-left: 1px solid var(--color-outline);
12
+ border-radius: 0;
13
+ }
14
+
15
+ .dropdownGroupAnchor:hover,
16
+ .dropdownGroupAnchor:focus,
17
+ .dropdownGroupAnchor:active {
18
+ border-color: var(--color-outline);
19
+ box-shadow: none;
20
+ background: none;
21
+ }
22
+
23
+ .dropdownGroup:hover {
24
+ border-color: var(--color-outline-dark);
25
+ }
26
+
27
+ .itemActive {
2
28
  background: var(--color-highlight);
3
29
  }
4
30
 
@@ -37,6 +37,13 @@ export var MetricsDisplayType;
37
37
  MetricsDisplayType["TABLE"] = "table";
38
38
  MetricsDisplayType["TREEMAP"] = "treemap";
39
39
  })(MetricsDisplayType || (MetricsDisplayType = {}));
40
+ export const MetricsDisplayTypeDefault = MetricsDisplayType.TABLE;
41
+ export var MetricsDisplayGroupBy;
42
+ (function (MetricsDisplayGroupBy) {
43
+ MetricsDisplayGroupBy["FOLDER"] = "folder";
44
+ MetricsDisplayGroupBy["NONE"] = "no-group";
45
+ })(MetricsDisplayGroupBy || (MetricsDisplayGroupBy = {}));
46
+ export const MetricsDisplayGroupByDefault = MetricsDisplayGroupBy.FOLDER;
40
47
  export var ModuleSizeMetric;
41
48
  (function (ModuleSizeMetric) {
42
49
  ModuleSizeMetric["SIZE"] = "value";
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAE3D,MAAM,CAAC,MAAM,IAAI,GAAG;IAClB,QAAQ,EAAE,GAAG;IACb,MAAM,EAAE,SAAS;IACjB,OAAO,EAAE,UAAU;IACnB,QAAQ,EAAE,WAAW;CACtB,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,QAAQ;IAChC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM;IAC9B,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,OAAO;IAChC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,QAAQ;CACnC,CAAC;AAEF,MAAM,CAAC,MAAM,0BAA0B,GAAG,UAAU,CAAC,MAAM,CACzD,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;IAClB,GAAG,GAAG;IACN,CAAC,gCAAgC,QAAQ,EAAE,CAAC,EAAE,QAAQ;CACvD,CAAC,EACF,EAAE,CACH,CAAC;AAEF,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,4BAA4B;IAC5B,4BAA4B;IAC5B,6BAA6B;IAC7B,2BAA2B;CAC5B,CAAC;AACF,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,oBAAoB,EAAE,oBAAoB,CAAC,CAAC;AACnF,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,qBAAqB;IACrB,+BAA+B;IAC/B,uBAAuB;CACxB,CAAC;AACF,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,sBAAsB,EAAE,gCAAgC,CAAC,CAAC;AAEnG,MAAM,CAAC,MAAM,IAAI,GAAG;IAClB,GAAG,EAAE,KAAK;IACV,IAAI,EAAE,MAAM;CACJ,CAAC;AAEX,MAAM,CAAN,IAAY,kBAGX;AAHD,WAAY,kBAAkB;IAC5B,qCAAe,CAAA;IACf,yCAAmB,CAAA;AACrB,CAAC,EAHW,kBAAkB,KAAlB,kBAAkB,QAG7B;AAED,MAAM,CAAN,IAAY,gBAIX;AAJD,WAAY,gBAAgB;IAC1B,kCAAc,CAAA;IACd,oDAAgC,CAAA;IAChC,4CAAwB,CAAA;AAC1B,CAAC,EAJW,gBAAgB,KAAhB,gBAAgB,QAI3B;AAED,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE;QACvB,KAAK,EAAE,MAAM;QACb,OAAO,EAAE,2CAA2C;KACrD;IACD,CAAC,gBAAgB,CAAC,UAAU,CAAC,EAAE;QAC7B,KAAK,EAAE,YAAY;QACnB,OAAO,EAAE,iDAAiD;KAC3D;IACD,CAAC,gBAAgB,CAAC,cAAc,CAAC,EAAE;QACjC,KAAK,EAAE,gBAAgB;QACvB,OAAO,EAAE,uBAAuB;KACjC;CACF,CAAC"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAE3D,MAAM,CAAC,MAAM,IAAI,GAAG;IAClB,QAAQ,EAAE,GAAG;IACb,MAAM,EAAE,SAAS;IACjB,OAAO,EAAE,UAAU;IACnB,QAAQ,EAAE,WAAW;CACtB,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,QAAQ;IAChC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM;IAC9B,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,OAAO;IAChC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,QAAQ;CACnC,CAAC;AAEF,MAAM,CAAC,MAAM,0BAA0B,GAAG,UAAU,CAAC,MAAM,CACzD,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;IAClB,GAAG,GAAG;IACN,CAAC,gCAAgC,QAAQ,EAAE,CAAC,EAAE,QAAQ;CACvD,CAAC,EACF,EAAE,CACH,CAAC;AAEF,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,4BAA4B;IAC5B,4BAA4B;IAC5B,6BAA6B;IAC7B,2BAA2B;CAC5B,CAAC;AACF,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,oBAAoB,EAAE,oBAAoB,CAAC,CAAC;AACnF,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,qBAAqB;IACrB,+BAA+B;IAC/B,uBAAuB;CACxB,CAAC;AACF,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,sBAAsB,EAAE,gCAAgC,CAAC,CAAC;AAEnG,MAAM,CAAC,MAAM,IAAI,GAAG;IAClB,GAAG,EAAE,KAAK;IACV,IAAI,EAAE,MAAM;CACJ,CAAC;AAEX,MAAM,CAAN,IAAY,kBAGX;AAHD,WAAY,kBAAkB;IAC5B,qCAAe,CAAA;IACf,yCAAmB,CAAA;AACrB,CAAC,EAHW,kBAAkB,KAAlB,kBAAkB,QAG7B;AAED,MAAM,CAAC,MAAM,yBAAyB,GAAG,kBAAkB,CAAC,KAAK,CAAC;AAElE,MAAM,CAAN,IAAY,qBAGX;AAHD,WAAY,qBAAqB;IAC/B,0CAAiB,CAAA;IACjB,0CAAiB,CAAA;AACnB,CAAC,EAHW,qBAAqB,KAArB,qBAAqB,QAGhC;AAED,MAAM,CAAC,MAAM,4BAA4B,GAAG,qBAAqB,CAAC,MAAM,CAAC;AAEzE,MAAM,CAAN,IAAY,gBAIX;AAJD,WAAY,gBAAgB;IAC1B,kCAAc,CAAA;IACd,oDAAgC,CAAA;IAChC,4CAAwB,CAAA;AAC1B,CAAC,EAJW,gBAAgB,KAAhB,gBAAgB,QAI3B;AAED,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE;QACvB,KAAK,EAAE,MAAM;QACb,OAAO,EAAE,2CAA2C;KACrD;IACD,CAAC,gBAAgB,CAAC,UAAU,CAAC,EAAE;QAC7B,KAAK,EAAE,YAAY;QACnB,OAAO,EAAE,iDAAiD;KAC3D;IACD,CAAC,gBAAgB,CAAC,cAAc,CAAC,EAAE;QACjC,KAAK,EAAE,gBAAgB;QACvB,OAAO,EAAE,uBAAuB;KACjC;CACF,CAAC"}
@@ -1,9 +1,9 @@
1
1
  import { useCallback, useEffect, useMemo } from 'react';
2
2
  import { useLocalStorage } from 'react-use';
3
3
  import { StringParam, useQueryParams } from 'use-query-params';
4
- import { MetricsDisplayType } from '../constants';
4
+ import { MetricsDisplayType, MetricsDisplayGroupBy } from '../constants';
5
5
  const DEFAULT_VALUE = MetricsDisplayType.TABLE;
6
- const DEFAULT_GROUP_BY = '';
6
+ const GROUP_BY_DEFAULT = MetricsDisplayGroupBy.FOLDER;
7
7
  const QUERY_PARAM_VALUE = 'dt';
8
8
  const QUERY_PARAM_GROUP_BY = 'dtg';
9
9
  export const useMetricsDisplayType = (groups) => {
@@ -14,7 +14,7 @@ export const useMetricsDisplayType = (groups) => {
14
14
  const { [QUERY_PARAM_VALUE]: queryParamValue, [QUERY_PARAM_GROUP_BY]: queryParamGroupBy } = queryParams;
15
15
  const [localStorage, setLocalStorage] = useLocalStorage('storage', {
16
16
  value: DEFAULT_VALUE,
17
- groupBy: DEFAULT_GROUP_BY,
17
+ groupBy: GROUP_BY_DEFAULT,
18
18
  });
19
19
  const value = useMemo(() => {
20
20
  const resolvedValue = queryParamValue !== null && queryParamValue !== void 0 ? queryParamValue : localStorage === null || localStorage === void 0 ? void 0 : localStorage.value;
@@ -30,10 +30,11 @@ export const useMetricsDisplayType = (groups) => {
30
30
  var _a;
31
31
  const resolvedValue = queryParamGroupBy !== null && queryParamGroupBy !== void 0 ? queryParamGroupBy : localStorage === null || localStorage === void 0 ? void 0 : localStorage.groupBy;
32
32
  if (!resolvedValue) {
33
- return DEFAULT_GROUP_BY;
33
+ return GROUP_BY_DEFAULT;
34
34
  }
35
- if (!((_a = groups === null || groups === void 0 ? void 0 : groups[value]) === null || _a === void 0 ? void 0 : _a.includes(resolvedValue))) {
36
- return DEFAULT_GROUP_BY;
35
+ if (resolvedValue !== MetricsDisplayGroupBy.NONE &&
36
+ !((_a = groups === null || groups === void 0 ? void 0 : groups[value]) === null || _a === void 0 ? void 0 : _a.includes(resolvedValue))) {
37
+ return GROUP_BY_DEFAULT;
37
38
  }
38
39
  return resolvedValue;
39
40
  }, [queryParamGroupBy, localStorage === null || localStorage === void 0 ? void 0 : localStorage.groupBy]);
@@ -47,7 +48,7 @@ export const useMetricsDisplayType = (groups) => {
47
48
  setLocalStorage({ value, groupBy });
48
49
  }
49
50
  }, [value, groupBy, setLocalStorage, localStorage]);
50
- const setDisplayType = useCallback((newValue, newGroupBy = DEFAULT_GROUP_BY) => {
51
+ const setDisplayType = useCallback((newValue, newGroupBy = GROUP_BY_DEFAULT) => {
51
52
  setQueryParams({
52
53
  [QUERY_PARAM_VALUE]: newValue,
53
54
  [QUERY_PARAM_GROUP_BY]: newGroupBy,
@@ -1 +1 @@
1
- {"version":3,"file":"metrics-display-type.js","sourceRoot":"","sources":["../../src/hooks/metrics-display-type.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAE/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAElD,MAAM,aAAa,GAAG,kBAAkB,CAAC,KAAK,CAAC;AAC/C,MAAM,gBAAgB,GAAG,EAAE,CAAC;AAG5B,MAAM,iBAAiB,GAAG,IAAI,CAAC;AAE/B,MAAM,oBAAoB,GAAG,KAAK,CAAC;AAYnC,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACnC,MAA2D,EACpC,EAAE;IACzB,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,cAAc,CAAC;QACnD,CAAC,iBAAiB,CAAC,EAAE,WAAW;QAChC,CAAC,oBAAoB,CAAC,EAAE,WAAW;KACpC,CAAC,CAAC;IAEH,MAAM,EAAE,CAAC,iBAAiB,CAAC,EAAE,eAAe,EAAE,CAAC,oBAAoB,CAAC,EAAE,iBAAiB,EAAE,GACvF,WAAW,CAAC;IACd,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,eAAe,CACrD,SAAS,EACT;QACE,KAAK,EAAE,aAAa;QACpB,OAAO,EAAE,gBAAgB;KAC1B,CACF,CAAC;IAKF,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE;QACzB,MAAM,aAAa,GAAG,eAAe,aAAf,eAAe,cAAf,eAAe,GAAI,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,KAAK,CAAC;QAE7D,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,OAAO,aAAa,CAAC;QACvB,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,QAAQ,CAAC,aAAmC,CAAC,EAAE,CAAC;YACrF,OAAO,aAAa,CAAC;QACvB,CAAC;QAED,OAAO,aAAmC,CAAC;IAC7C,CAAC,EAAE,CAAC,eAAe,EAAE,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,KAAK,CAAC,CAAC,CAAC;IAK3C,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE;;QAC3B,MAAM,aAAa,GAAG,iBAAiB,aAAjB,iBAAiB,cAAjB,iBAAiB,GAAI,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,OAAO,CAAC;QAEjE,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,OAAO,gBAAgB,CAAC;QAC1B,CAAC;QAED,IAAI,CAAC,CAAA,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAG,KAAK,CAAC,0CAAE,QAAQ,CAAC,aAAmC,CAAC,CAAA,EAAE,CAAC;YACpE,OAAO,gBAAgB,CAAC;QAC1B,CAAC;QAED,OAAO,aAAa,CAAC;IACvB,CAAC,EAAE,CAAC,iBAAiB,EAAE,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,OAAO,CAAC,CAAC,CAAC;IAK/C,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,KAAK,KAAK,eAAe,IAAI,OAAO,KAAK,iBAAiB,EAAE,CAAC;YAC/D,cAAc,CAAC,EAAE,CAAC,iBAAiB,CAAC,EAAE,KAAK,EAAE,CAAC,oBAAoB,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;QAClF,CAAC;IACH,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,iBAAiB,EAAE,cAAc,CAAC,CAAC,CAAC;IAKzE,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,KAAK,MAAK,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,KAAK,CAAA,IAAI,OAAO,KAAK,YAAY,CAAC,OAAO,EAAE,CAAC;YACtE,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;QACtC,CAAC;IACH,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,YAAY,CAAC,CAAC,CAAC;IAEpD,MAAM,cAAc,GAAG,WAAW,CAChC,CAAC,QAA4B,EAAE,aAAqB,gBAAgB,EAAE,EAAE;QACtE,cAAc,CAAC;YACb,CAAC,iBAAiB,CAAC,EAAE,QAAQ;YAC7B,CAAC,oBAAoB,CAAC,EAAE,UAAU;SACnC,CAAC,CAAC;IACL,CAAC,EACD,CAAC,cAAc,CAAC,CACjB,CAAC;IAEF,OAAO,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC;AAC/F,CAAC,CAAC"}
1
+ {"version":3,"file":"metrics-display-type.js","sourceRoot":"","sources":["../../src/hooks/metrics-display-type.ts"],"names":[],"mappings":"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"}
@@ -8,9 +8,9 @@ export const DropdownItem = (props) => {
8
8
  return (React.createElement(MenuItem, { className: cx(css.item, className, isActive && css.itemActive), ...restProps }));
9
9
  };
10
10
  export const Dropdown = (props) => {
11
- const { className = '', dropdownClassName = '', label = null, ariaLabel = '', glyph = '', disabled = false, children, } = props;
11
+ const { className = '', dropdownClassName = '', label = null, ariaLabel = '', glyph = '', disabled = false, placement, children, } = props;
12
12
  const dropdownAriaLabel = ariaLabel || (typeof label === 'string' ? label : '');
13
- const menuState = useMenuState();
13
+ const menuState = useMenuState({ placement });
14
14
  return (React.createElement(React.Fragment, null,
15
15
  React.createElement(MenuButton, { as: Button, outline: true, size: BUTTON_SIZE.SMALL, glyph: glyph, disabled: disabled, state: menuState, tabIndex: null, className: cx(css.button, className) }, label),
16
16
  React.createElement(Menu, { portal: true, state: menuState, "aria-label": dropdownAriaLabel, className: cx(css.dropdown, dropdownClassName) }, children)));
@@ -1 +1 @@
1
- {"version":3,"file":"dropdown.js","sourceRoot":"","sources":["../../../src/ui/dropdown/dropdown.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAExE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,GAAG,MAAM,uBAAuB,CAAC;AAMxC,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,KAAgE,EAAE,EAAE;IAC/F,MAAM,EAAE,SAAS,GAAG,EAAE,EAAE,QAAQ,GAAG,KAAK,EAAE,GAAG,SAAS,EAAE,GAAG,KAAK,CAAC;IAEjE,OAAO,CACL,oBAAC,QAAQ,IAAC,SAAS,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,IAAI,GAAG,CAAC,UAAU,CAAC,KAAM,SAAS,GAAI,CAC5F,CAAC;AACJ,CAAC,CAAC;AAUF,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,KAAkD,EAAE,EAAE;IAC7E,MAAM,EACJ,SAAS,GAAG,EAAE,EACd,iBAAiB,GAAG,EAAE,EACtB,KAAK,GAAG,IAAI,EACZ,SAAS,GAAG,EAAE,EACd,KAAK,GAAG,EAAE,EACV,QAAQ,GAAG,KAAK,EAChB,QAAQ,GACT,GAAG,KAAK,CAAC;IAEV,MAAM,iBAAiB,GAAG,SAAS,IAAI,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAChF,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;IAEjC,OAAO,CACL;QACE,oBAAC,UAAU,IACT,EAAE,EAAE,MAAM,EACV,OAAO,QACP,IAAI,EAAE,WAAW,CAAC,KAAK,EACvB,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,SAAS,EAChB,QAAQ,EAAE,IAAI,EACd,SAAS,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,IAEnC,KAAK,CACK;QACb,oBAAC,IAAI,IACH,MAAM,QACN,KAAK,EAAE,SAAS,gBACJ,iBAAiB,EAC7B,SAAS,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,EAAE,iBAAiB,CAAC,IAE7C,QAAQ,CACJ,CACN,CACJ,CAAC;AACJ,CAAC,CAAC"}
1
+ {"version":3,"file":"dropdown.js","sourceRoot":"","sources":["../../../src/ui/dropdown/dropdown.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAkB,YAAY,EAAE,MAAM,cAAc,CAAC;AAExF,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,GAAG,MAAM,uBAAuB,CAAC;AAMxC,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,KAAgE,EAAE,EAAE;IAC/F,MAAM,EAAE,SAAS,GAAG,EAAE,EAAE,QAAQ,GAAG,KAAK,EAAE,GAAG,SAAS,EAAE,GAAG,KAAK,CAAC;IAEjE,OAAO,CACL,oBAAC,QAAQ,IAAC,SAAS,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,IAAI,GAAG,CAAC,UAAU,CAAC,KAAM,SAAS,GAAI,CAC5F,CAAC;AACJ,CAAC,CAAC;AAWF,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,KAAkD,EAAE,EAAE;IAC7E,MAAM,EACJ,SAAS,GAAG,EAAE,EACd,iBAAiB,GAAG,EAAE,EACtB,KAAK,GAAG,IAAI,EACZ,SAAS,GAAG,EAAE,EACd,KAAK,GAAG,EAAE,EACV,QAAQ,GAAG,KAAK,EAChB,SAAS,EACT,QAAQ,GACT,GAAG,KAAK,CAAC;IAEV,MAAM,iBAAiB,GAAG,SAAS,IAAI,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAChF,MAAM,SAAS,GAAG,YAAY,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;IAE9C,OAAO,CACL;QACE,oBAAC,UAAU,IACT,EAAE,EAAE,MAAM,EACV,OAAO,QACP,IAAI,EAAE,WAAW,CAAC,KAAK,EACvB,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,SAAS,EAChB,QAAQ,EAAE,IAAI,EACd,SAAS,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,IAEnC,KAAK,CACK;QACb,oBAAC,IAAI,IACH,MAAM,QACN,KAAK,EAAE,SAAS,gBACJ,iBAAiB,EAC7B,SAAS,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,EAAE,iBAAiB,CAAC,IAE7C,QAAQ,CACJ,CACN,CACJ,CAAC;AACJ,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bundle-stats/ui",
3
- "version": "4.18.0-beta.2",
3
+ "version": "4.18.0-beta.4",
4
4
  "description": "UI components for BundleStats projects.",
5
5
  "main": "lib/index.js",
6
6
  "module": "lib-esm/index.js",
@@ -36,13 +36,13 @@
36
36
  },
37
37
  "homepage": "https://github.com/relative-ci/bundle-stats/blob/master/packages/ui#readme",
38
38
  "devDependencies": {
39
- "@babel/preset-env": "7.26.0",
39
+ "@babel/preset-env": "7.26.9",
40
40
  "@babel/preset-react": "7.26.3",
41
41
  "@babel/preset-typescript": "7.26.0",
42
- "@storybook/addon-essentials": "8.4.7",
42
+ "@storybook/addon-essentials": "8.6.3",
43
43
  "@storybook/addon-webpack5-compiler-babel": "3.0.5",
44
- "@storybook/react": "8.4.7",
45
- "@storybook/react-webpack5": "8.4.7",
44
+ "@storybook/react": "8.6.3",
45
+ "@storybook/react-webpack5": "8.6.3",
46
46
  "@types/d3": "7.4.3",
47
47
  "@types/react": "18.3.13",
48
48
  "@types/react-router-dom": "5.3.3",
@@ -61,8 +61,8 @@
61
61
  "react-dom": "18.3.1",
62
62
  "react-router-dom": "5.3.4",
63
63
  "rimraf": "6.0.1",
64
- "storybook": "8.4.7",
65
- "typescript": "5.7.3",
64
+ "storybook": "8.6.3",
65
+ "typescript": "5.8.2",
66
66
  "typescript-plugin-css-modules": "5.1.0"
67
67
  },
68
68
  "peerDependencies": {
@@ -74,7 +74,7 @@
74
74
  "react-router-dom": "^5.0.0"
75
75
  },
76
76
  "dependencies": {
77
- "@bundle-stats/utils": "4.18.0-beta.2",
77
+ "@bundle-stats/utils": "4.18.0-beta.4",
78
78
  "ariakit": "2.0.0-next.44",
79
79
  "d3": "7.9.0",
80
80
  "modern-css-reset": "1.4.0",
@@ -82,5 +82,5 @@
82
82
  "snarkdown": "2.0.0",
83
83
  "use-query-params": "2.2.1"
84
84
  },
85
- "gitHead": "5f0b0fb4f7d313f54ce8d909738c170eb854af8c"
85
+ "gitHead": "a142130bbb412d682acb427deaaa04ea03871587"
86
86
  }
@@ -8,7 +8,7 @@ import { COMPONENT, SECTIONS } from '@bundle-stats/utils';
8
8
  import type { ReportMetricAssetRow, SortAction } from '../../types';
9
9
  import config from '../../config.json';
10
10
  import I18N from '../../i18n';
11
- import { MetricsDisplayType } from '../../constants';
11
+ import { MetricsDisplayGroupBy, MetricsDisplayType } from '../../constants';
12
12
  import { useMetricsDisplayType } from '../../hooks/metrics-display-type';
13
13
  import { Box } from '../../layout/box';
14
14
  import { FlexStack } from '../../layout/flex-stack';
@@ -34,7 +34,7 @@ import { getFilters } from './bundle-assets.utils';
34
34
  import css from './bundle-assets.module.css';
35
35
 
36
36
  const DISPLAY_TYPE_GROUPS = {
37
- [MetricsDisplayType.TREEMAP]: ['folder'],
37
+ [MetricsDisplayType.TREEMAP]: [MetricsDisplayGroupBy.FOLDER],
38
38
  };
39
39
 
40
40
  interface ViewMetricsTreemapProps {
@@ -8,7 +8,12 @@ import { WebpackChunk } from '@bundle-stats/utils';
8
8
  import type { ReportMetricModuleRow, SortAction } from '../../types';
9
9
  import config from '../../config.json';
10
10
  import I18N from '../../i18n';
11
- import { MetricsDisplayType, ModuleSizeMetric, ModuleSizeMetrics } from '../../constants';
11
+ import {
12
+ MetricsDisplayGroupBy,
13
+ MetricsDisplayType,
14
+ ModuleSizeMetric,
15
+ ModuleSizeMetrics,
16
+ } from '../../constants';
12
17
  import { Box } from '../../layout/box';
13
18
  import { FlexStack } from '../../layout/flex-stack';
14
19
  import { Stack } from '../../layout/stack';
@@ -38,7 +43,7 @@ import css from './bundle-modules.module.css';
38
43
  import { useMetricsDisplayType } from '../../hooks/metrics-display-type';
39
44
 
40
45
  const DISPLAY_TYPE_GROUPS = {
41
- [MetricsDisplayType.TREEMAP]: ['folder'],
46
+ [MetricsDisplayType.TREEMAP]: [MetricsDisplayGroupBy.FOLDER],
42
47
  };
43
48
 
44
49
  interface RowHeaderProps {
@@ -26,12 +26,12 @@ import { PackageInfo } from '../package-info';
26
26
  import { SEARCH_PLACEHOLDER } from './bundle-packages.i18n';
27
27
  import css from './bundle-packages.module.css';
28
28
  import { MetricsDisplaySelector } from '../metrics-display-selector';
29
- import { MetricsDisplayType } from '../../constants';
29
+ import { MetricsDisplayGroupBy, MetricsDisplayType } from '../../constants';
30
30
  import { MetricsTreemap, getTreemapNodes, getTreemapNodesGroupedByPath } from '../metrics-treemap';
31
31
  import { useMetricsDisplayType } from '../../hooks/metrics-display-type';
32
32
 
33
33
  const DISPLAY_TYPE_GROUPS = {
34
- [MetricsDisplayType.TREEMAP]: ['folder'],
34
+ [MetricsDisplayType.TREEMAP]: [MetricsDisplayGroupBy.FOLDER],
35
35
  };
36
36
 
37
37
  const getDropdownFilters = ({ compareMode, filters }) => ({
@@ -1,4 +1,30 @@
1
- .buttonActive {
1
+ .dropdownGroup {
2
+ border: 1px solid var(--color-outline);
3
+ }
4
+
5
+ .dropdownGroupButton {
6
+ padding: calc(var(--space-xxsmall) - 1px);
7
+ }
8
+
9
+ .dropdownGroupAnchor {
10
+ border: none;
11
+ border-left: 1px solid var(--color-outline);
12
+ border-radius: 0;
13
+ }
14
+
15
+ .dropdownGroupAnchor:hover,
16
+ .dropdownGroupAnchor:focus,
17
+ .dropdownGroupAnchor:active {
18
+ border-color: var(--color-outline);
19
+ box-shadow: none;
20
+ background: none;
21
+ }
22
+
23
+ .dropdownGroup:hover {
24
+ border-color: var(--color-outline-dark);
25
+ }
26
+
27
+ .itemActive {
2
28
  background: var(--color-highlight);
3
29
  }
4
30
 
@@ -1,15 +1,17 @@
1
1
  import React from 'react';
2
2
  import cx from 'classnames';
3
3
 
4
- import { MetricsDisplayType } from '../../constants';
4
+ import {
5
+ MetricsDisplayType,
6
+ MetricsDisplayGroupByDefault,
7
+ MetricsDisplayGroupBy,
8
+ } from '../../constants';
5
9
  import { Button } from '../../ui/button';
6
10
  import { ControlGroup } from '../../ui/control-group';
7
11
  import { Dropdown, DropdownItem } from '../../ui/dropdown';
8
12
  import { Icon } from '../../ui/icon';
13
+ import { FlexStack } from '../../layout/flex-stack';
9
14
  import css from './metrics-display-selector.module.css';
10
- import { FlexStack } from '../../layout';
11
-
12
- const DEFAULT_GROUP_BY = '';
13
15
 
14
16
  const METRICS_DISPLAY_MAP = {
15
17
  [MetricsDisplayType.TABLE]: {
@@ -35,7 +37,13 @@ export const MetricsDisplaySelector = (
35
37
  props: MetricsDisplaySelectorProps &
36
38
  Omit<React.ComponentProps<typeof ControlGroup>, 'onSelect' | 'value'>,
37
39
  ) => {
38
- const { value, groupBy = DEFAULT_GROUP_BY, groups = {}, onSelect, ...restProps } = props;
40
+ const {
41
+ value,
42
+ groupBy = MetricsDisplayGroupByDefault,
43
+ groups = {},
44
+ onSelect,
45
+ ...restProps
46
+ } = props;
39
47
 
40
48
  return (
41
49
  <ControlGroup {...restProps}>
@@ -54,7 +62,7 @@ export const MetricsDisplaySelector = (
54
62
  type="button"
55
63
  glyph={displayProps.glyph}
56
64
  onClick={() => onSelect(displayType)}
57
- className={isLast && css.itemLast}
65
+ className={cx(isLast && css.itemLast)}
58
66
  key={displayType}
59
67
  >
60
68
  {displayProps.label}
@@ -63,41 +71,57 @@ export const MetricsDisplaySelector = (
63
71
  }
64
72
 
65
73
  const displayGroupsData = [
66
- {
67
- value: DEFAULT_GROUP_BY,
68
- label: 'No groups',
69
- },
70
74
  ...displayGroups.map((displayGroup) => ({
71
75
  value: displayGroup,
72
76
  label: `Group by ${displayGroup}`,
73
77
  })),
78
+ {
79
+ value: MetricsDisplayGroupBy.NONE,
80
+ label: 'No group',
81
+ },
74
82
  ];
75
83
 
76
84
  return (
77
- <Dropdown
78
- glyph={displayProps.glyph}
79
- label={displayProps.label}
80
- className={cx(isLast && css.itemLast, isActive && css.buttonActive)}
85
+ <FlexStack
86
+ className={cx(css.dropdownGroup, isLast && css.itemLast, isActive && css.itemActive)}
81
87
  key={displayType}
82
88
  >
83
- {displayGroupsData.map((displayGroupData) => {
84
- const isGroupActive = isActive && displayGroupData.value === groupBy;
89
+ <Button
90
+ size="small"
91
+ glyph={displayProps.glyph}
92
+ onClick={() => onSelect(displayType)}
93
+ className={css.dropdownGroupButton}
94
+ >
95
+ {displayProps.label}
96
+ </Button>
97
+ <Dropdown
98
+ glyph={Icon.ICONS.CHEVRON_DOWN}
99
+ placement="bottom-end"
100
+ className={css.dropdownGroupAnchor}
101
+ >
102
+ {displayGroupsData.map((displayGroupData) => {
103
+ const isGroupActive = isActive && displayGroupData.value === groupBy;
85
104
 
86
- return (
87
- <DropdownItem
88
- onClick={() => onSelect(displayType, displayGroupData.value)}
89
- isActive={isGroupActive}
90
- className={cx(css.dropdownItem, isGroupActive && css.dropdownItemActive)}
91
- key={displayGroupData.value}
92
- >
93
- <FlexStack space="xxxsmall" alignItems="center">
94
- <Icon glyph={Icon.ICONS.CHECK} size="small" className={css.dropdownItemIcon} />
95
- <span>{displayGroupData.label}</span>
96
- </FlexStack>
97
- </DropdownItem>
98
- );
99
- })}
100
- </Dropdown>
105
+ return (
106
+ <DropdownItem
107
+ onClick={() => onSelect(displayType, displayGroupData.value)}
108
+ isActive={isGroupActive}
109
+ className={cx(css.dropdownItem, isGroupActive && css.dropdownItemActive)}
110
+ key={displayGroupData.value}
111
+ >
112
+ <FlexStack space="xxxsmall" alignItems="center">
113
+ <Icon
114
+ glyph={Icon.ICONS.CHECK}
115
+ size="small"
116
+ className={css.dropdownItemIcon}
117
+ />
118
+ <span>{displayGroupData.label}</span>
119
+ </FlexStack>
120
+ </DropdownItem>
121
+ );
122
+ })}
123
+ </Dropdown>
124
+ </FlexStack>
101
125
  );
102
126
  })}
103
127
  </ControlGroup>
package/src/constants.ts CHANGED
@@ -46,6 +46,15 @@ export enum MetricsDisplayType {
46
46
  TREEMAP = 'treemap',
47
47
  }
48
48
 
49
+ export const MetricsDisplayTypeDefault = MetricsDisplayType.TABLE;
50
+
51
+ export enum MetricsDisplayGroupBy {
52
+ FOLDER = 'folder',
53
+ NONE = 'no-group',
54
+ }
55
+
56
+ export const MetricsDisplayGroupByDefault = MetricsDisplayGroupBy.FOLDER;
57
+
49
58
  export enum ModuleSizeMetric {
50
59
  SIZE = 'value',
51
60
  DUPLICATE_SIZE = 'duplicateSize',
@@ -2,10 +2,10 @@ import { useCallback, useEffect, useMemo } from 'react';
2
2
  import { useLocalStorage } from 'react-use';
3
3
  import { StringParam, useQueryParams } from 'use-query-params';
4
4
 
5
- import { MetricsDisplayType } from '../constants';
5
+ import { MetricsDisplayType, MetricsDisplayGroupBy } from '../constants';
6
6
 
7
7
  const DEFAULT_VALUE = MetricsDisplayType.TABLE;
8
- const DEFAULT_GROUP_BY = '';
8
+ const GROUP_BY_DEFAULT = MetricsDisplayGroupBy.FOLDER;
9
9
 
10
10
  // Display type query param name
11
11
  const QUERY_PARAM_VALUE = 'dt';
@@ -36,7 +36,7 @@ export const useMetricsDisplayType = (
36
36
  'storage',
37
37
  {
38
38
  value: DEFAULT_VALUE,
39
- groupBy: DEFAULT_GROUP_BY,
39
+ groupBy: GROUP_BY_DEFAULT,
40
40
  },
41
41
  );
42
42
 
@@ -64,11 +64,14 @@ export const useMetricsDisplayType = (
64
64
  const resolvedValue = queryParamGroupBy ?? localStorage?.groupBy;
65
65
 
66
66
  if (!resolvedValue) {
67
- return DEFAULT_GROUP_BY;
67
+ return GROUP_BY_DEFAULT;
68
68
  }
69
69
 
70
- if (!groups?.[value]?.includes(resolvedValue as MetricsDisplayType)) {
71
- return DEFAULT_GROUP_BY;
70
+ if (
71
+ resolvedValue !== MetricsDisplayGroupBy.NONE &&
72
+ !groups?.[value]?.includes(resolvedValue as MetricsDisplayType)
73
+ ) {
74
+ return GROUP_BY_DEFAULT;
72
75
  }
73
76
 
74
77
  return resolvedValue;
@@ -93,7 +96,7 @@ export const useMetricsDisplayType = (
93
96
  }, [value, groupBy, setLocalStorage, localStorage]);
94
97
 
95
98
  const setDisplayType = useCallback(
96
- (newValue: MetricsDisplayType, newGroupBy: string = DEFAULT_GROUP_BY) => {
99
+ (newValue: MetricsDisplayType, newGroupBy: string = GROUP_BY_DEFAULT) => {
97
100
  setQueryParams({
98
101
  [QUERY_PARAM_VALUE]: newValue,
99
102
  [QUERY_PARAM_GROUP_BY]: newGroupBy,
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import cx from 'classnames';
3
- import { Menu, MenuButton, MenuItem, useMenuState } from 'ariakit/menu';
3
+ import { Menu, MenuButton, MenuItem, MenuStateProps, useMenuState } from 'ariakit/menu';
4
4
 
5
5
  import { Button, BUTTON_SIZE } from '../button';
6
6
  import css from './dropdown.module.css';
@@ -23,6 +23,7 @@ interface DropdownProps {
23
23
  ariaLabel?: string;
24
24
  glyph?: string;
25
25
  disabled?: boolean;
26
+ placement?: MenuStateProps['placement'];
26
27
  }
27
28
 
28
29
  export const Dropdown = (props: DropdownProps & React.ComponentProps<'div'>) => {
@@ -33,11 +34,12 @@ export const Dropdown = (props: DropdownProps & React.ComponentProps<'div'>) =>
33
34
  ariaLabel = '',
34
35
  glyph = '',
35
36
  disabled = false,
37
+ placement,
36
38
  children,
37
39
  } = props;
38
40
 
39
41
  const dropdownAriaLabel = ariaLabel || (typeof label === 'string' ? label : '');
40
- const menuState = useMenuState();
42
+ const menuState = useMenuState({ placement });
41
43
 
42
44
  return (
43
45
  <>
@@ -1,3 +1,4 @@
1
+ import { SECTIONS } from '@bundle-stats/utils';
1
2
  export declare const URLS: {
2
3
  OVERVIEW: string;
3
4
  ASSETS: string;
@@ -5,7 +6,10 @@ export declare const URLS: {
5
6
  PACKAGES: string;
6
7
  };
7
8
  export declare const SECTION_URLS: {
8
- [x: string]: string;
9
+ [SECTIONS.TOTALS]: string;
10
+ [SECTIONS.ASSETS]: string;
11
+ [SECTIONS.MODULES]: string;
12
+ [SECTIONS.PACKAGES]: string;
9
13
  };
10
14
  export declare const ASSETS_SIZES_FILE_TYPE_MAP: {};
11
15
  export declare const METRICS_WEBPACK_GENERAL: string[];
@@ -20,6 +24,12 @@ export declare enum MetricsDisplayType {
20
24
  TABLE = "table",
21
25
  TREEMAP = "treemap"
22
26
  }
27
+ export declare const MetricsDisplayTypeDefault = MetricsDisplayType.TABLE;
28
+ export declare enum MetricsDisplayGroupBy {
29
+ FOLDER = "folder",
30
+ NONE = "no-group"
31
+ }
32
+ export declare const MetricsDisplayGroupByDefault = MetricsDisplayGroupBy.FOLDER;
23
33
  export declare enum ModuleSizeMetric {
24
34
  SIZE = "value",
25
35
  DUPLICATE_SIZE = "duplicateSize",
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import { MenuItem } from 'ariakit/menu';
2
+ import { MenuItem, MenuStateProps } from 'ariakit/menu';
3
3
  interface DropdownItemProps {
4
4
  isActive?: boolean;
5
5
  }
@@ -10,6 +10,7 @@ interface DropdownProps {
10
10
  ariaLabel?: string;
11
11
  glyph?: string;
12
12
  disabled?: boolean;
13
+ placement?: MenuStateProps['placement'];
13
14
  }
14
15
  export declare const Dropdown: (props: DropdownProps & React.ComponentProps<"div">) => React.JSX.Element;
15
16
  export {};