@bundle-stats/ui 3.2.6-beta.1 → 3.2.6-beta.2
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.
- package/CHANGELOG.md +3 -1
- package/lib/components/bundle-assets/bundle-assets.js +8 -6
- package/lib/components/bundle-assets/bundle-assets.module.css +5 -0
- package/lib/components/bundle-modules/bundle-modules.js +4 -5
- package/lib/components/bundle-packages/bundle-packages.js +6 -4
- package/lib/components/bundle-packages/bundle-packages.module.css +4 -0
- package/lib/components/metrics-table-title/metrics-table-title.js +9 -7
- package/lib/components/metrics-table-title/metrics-table-title.module.css +2 -0
- package/lib/components/module-info/module-info.module.css +1 -0
- package/lib/components/summary-item/summary-item.js +14 -17
- package/lib/components/summary-item/summary-item.module.css +1 -19
- package/lib/components/total-size-type-title/total-size-type-title.js +7 -3
- package/lib/css/variables.css +1 -1
- package/lib/hooks/search-params.js +6 -6
- package/lib/ui/dropdown/dropdown.js +15 -24
- package/lib/ui/dropdown/dropdown.module.css +7 -7
- package/lib/ui/dropdown/dropdown.stories.js +2 -9
- package/lib/ui/hover-card/hover-card.js +100 -0
- package/lib/ui/hover-card/hover-card.module.css +52 -0
- package/lib/ui/hover-card/hover-card.stories.js +56 -0
- package/lib/ui/{popover → hover-card}/index.js +4 -4
- package/lib/ui/icon/icon.js +6 -6
- package/lib/ui/index.js +0 -8
- package/lib/ui/tooltip/tooltip.js +10 -9
- package/lib-esm/components/bundle-assets/bundle-assets.js +8 -6
- package/lib-esm/components/bundle-assets/bundle-assets.module.css +5 -0
- package/lib-esm/components/bundle-modules/bundle-modules.js +4 -5
- package/lib-esm/components/bundle-packages/bundle-packages.js +6 -4
- package/lib-esm/components/bundle-packages/bundle-packages.module.css +4 -0
- package/lib-esm/components/metrics-table-title/metrics-table-title.js +8 -7
- package/lib-esm/components/metrics-table-title/metrics-table-title.module.css +2 -0
- package/lib-esm/components/module-info/module-info.module.css +1 -0
- package/lib-esm/components/summary-item/summary-item.js +13 -17
- package/lib-esm/components/summary-item/summary-item.module.css +1 -19
- package/lib-esm/components/total-size-type-title/total-size-type-title.js +6 -3
- package/lib-esm/css/variables.css +1 -1
- package/lib-esm/hooks/search-params.js +6 -6
- package/lib-esm/ui/dropdown/dropdown.js +14 -23
- package/lib-esm/ui/dropdown/dropdown.module.css +7 -7
- package/lib-esm/ui/dropdown/dropdown.stories.js +2 -7
- package/lib-esm/ui/hover-card/hover-card.js +86 -0
- package/lib-esm/ui/hover-card/hover-card.module.css +52 -0
- package/lib-esm/ui/hover-card/hover-card.stories.js +35 -0
- package/lib-esm/ui/hover-card/index.js +1 -0
- package/lib-esm/ui/icon/icon.js +3 -3
- package/lib-esm/ui/index.js +0 -1
- package/lib-esm/ui/tooltip/tooltip.js +10 -9
- package/package.json +5 -5
- package/src/components/bundle-assets/bundle-assets.jsx +38 -36
- package/src/components/bundle-assets/bundle-assets.module.css +5 -0
- package/src/components/bundle-modules/bundle-modules.jsx +24 -14
- package/src/components/bundle-packages/bundle-packages.jsx +11 -3
- package/src/components/bundle-packages/bundle-packages.module.css +4 -0
- package/src/components/metrics-table-title/metrics-table-title.jsx +20 -21
- package/src/components/metrics-table-title/metrics-table-title.module.css +2 -0
- package/src/components/module-info/module-info.jsx +1 -5
- package/src/components/module-info/module-info.module.css +1 -0
- package/src/components/summary-item/summary-item.jsx +20 -26
- package/src/components/summary-item/summary-item.module.css +1 -19
- package/src/components/total-size-type-title/total-size-type-title.jsx +6 -9
- package/src/css/variables.css +1 -1
- package/src/hooks/search-params.js +18 -11
- package/src/ui/dropdown/dropdown.jsx +9 -17
- package/src/ui/dropdown/dropdown.module.css +7 -7
- package/src/ui/hover-card/hover-card.jsx +79 -0
- package/src/ui/hover-card/hover-card.module.css +52 -0
- package/src/ui/hover-card/index.js +1 -0
- package/src/ui/icon/icon.jsx +11 -7
- package/src/ui/index.js +0 -1
- package/src/ui/tooltip/tooltip.jsx +10 -14
- package/lib/ui/popover/popover.js +0 -92
- package/lib/ui/popover/popover.module.css +0 -66
- package/lib/ui/popover/popover.stories.js +0 -26
- package/lib-esm/ui/popover/index.js +0 -1
- package/lib-esm/ui/popover/popover.js +0 -71
- package/lib-esm/ui/popover/popover.module.css +0 -66
- package/lib-esm/ui/popover/popover.stories.js +0 -14
- package/src/ui/popover/index.js +0 -1
- package/src/ui/popover/popover.jsx +0 -79
- package/src/ui/popover/popover.module.css +0 -66
|
@@ -3,7 +3,8 @@ import PropTypes from 'prop-types';
|
|
|
3
3
|
import cx from 'classnames';
|
|
4
4
|
import { getGlobalMetricType, getMetricRunInfo } from '@bundle-stats/utils';
|
|
5
5
|
|
|
6
|
-
import {
|
|
6
|
+
import { HoverCard } from '../../ui/hover-card';
|
|
7
|
+
import { Icon } from '../../ui/icon';
|
|
7
8
|
import { Skeleton } from '../../ui/skeleton';
|
|
8
9
|
import { Stack } from '../../layout/stack';
|
|
9
10
|
import { FlexStack } from '../../layout/flex-stack';
|
|
@@ -11,32 +12,25 @@ import { Metric } from '../metric';
|
|
|
11
12
|
import { Delta } from '../delta';
|
|
12
13
|
import css from './summary-item.module.css';
|
|
13
14
|
|
|
14
|
-
const
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
</p>
|
|
29
|
-
)}
|
|
30
|
-
</Stack>
|
|
31
|
-
);
|
|
32
|
-
};
|
|
33
|
-
|
|
34
|
-
MetricInfoPopover.propTypes = {
|
|
15
|
+
const MetricInfo = ({ description, url }) => (
|
|
16
|
+
<Stack space="xxxsmall">
|
|
17
|
+
<p>{description}</p>
|
|
18
|
+
{url && (
|
|
19
|
+
<p>
|
|
20
|
+
<a href={url} className={css.readMoreLink}>
|
|
21
|
+
Read more
|
|
22
|
+
</a>
|
|
23
|
+
</p>
|
|
24
|
+
)}
|
|
25
|
+
</Stack>
|
|
26
|
+
);
|
|
27
|
+
|
|
28
|
+
MetricInfo.propTypes = {
|
|
35
29
|
description: PropTypes.string.isRequired,
|
|
36
30
|
url: PropTypes.string,
|
|
37
31
|
};
|
|
38
32
|
|
|
39
|
-
|
|
33
|
+
MetricInfo.defaultProps = {
|
|
40
34
|
url: '',
|
|
41
35
|
};
|
|
42
36
|
|
|
@@ -65,9 +59,9 @@ export const SummaryItem = ({
|
|
|
65
59
|
<span>{metric.label}</span>
|
|
66
60
|
|
|
67
61
|
{showMetricDescriptionTooltip && (
|
|
68
|
-
<
|
|
69
|
-
<
|
|
70
|
-
</
|
|
62
|
+
<HoverCard className={css.icon} label={<Icon glyph="help" />}>
|
|
63
|
+
<MetricInfo {...metric} />
|
|
64
|
+
</HoverCard>
|
|
71
65
|
)}
|
|
72
66
|
</FlexStack>
|
|
73
67
|
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
.title {
|
|
2
|
+
align-items: center;
|
|
2
3
|
color: var(--color-text-ultra-light);
|
|
3
4
|
font-weight: bold;
|
|
4
5
|
font-size: var(--size-xsmall);
|
|
@@ -7,25 +8,6 @@
|
|
|
7
8
|
white-space: nowrap;
|
|
8
9
|
}
|
|
9
10
|
|
|
10
|
-
.readMoreBtn {
|
|
11
|
-
appearance: none;
|
|
12
|
-
padding: 0;
|
|
13
|
-
border: 0;
|
|
14
|
-
background: none;
|
|
15
|
-
cursor: pointer;
|
|
16
|
-
/* simulate link */
|
|
17
|
-
color: var(--color-primary);
|
|
18
|
-
text-decoration: underline;
|
|
19
|
-
line-height: var(--space-small);
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
.readMoreBtn:hover,
|
|
23
|
-
.readMoreBtn:active,
|
|
24
|
-
.readMoreBtn:focus {
|
|
25
|
-
color: var(--color-primary-dark);
|
|
26
|
-
text-decoration: none;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
11
|
.currentMetric {
|
|
30
12
|
display: block;
|
|
31
13
|
color: var(--color-heading);
|
|
@@ -1,31 +1,28 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import PropTypes from 'prop-types';
|
|
3
|
-
import cx from 'classnames'
|
|
3
|
+
import cx from 'classnames';
|
|
4
4
|
|
|
5
5
|
import config from '../../config.json';
|
|
6
6
|
import I18N from '../../i18n';
|
|
7
7
|
import { FlexStack } from '../../layout/flex-stack';
|
|
8
8
|
import { Stack } from '../../layout/stack';
|
|
9
|
-
import {
|
|
9
|
+
import { Icon } from '../../ui/icon';
|
|
10
|
+
import { HoverCard } from '../../ui/hover-card';
|
|
10
11
|
import css from './total-size-type-title.module.css';
|
|
11
12
|
|
|
12
13
|
export const TotalSizeTypeTitle = ({ className }) => (
|
|
13
14
|
<FlexStack space="xxxsmall" className={cx(css.title, className)}>
|
|
14
15
|
<span>{I18N.ASSET_TOTALS}</span>
|
|
15
|
-
<
|
|
16
|
+
<HoverCard label={<Icon glyph="help" />}>
|
|
16
17
|
<Stack space="xxxsmall">
|
|
17
18
|
<p>{I18N.ASSET_TOTALS_INFO}</p>
|
|
18
19
|
<p>
|
|
19
|
-
<a
|
|
20
|
-
href={config.documentation.assets}
|
|
21
|
-
target="_blank"
|
|
22
|
-
rel="noreferrer"
|
|
23
|
-
>
|
|
20
|
+
<a href={config.documentation.assets} target="_blank" rel="noreferrer">
|
|
24
21
|
{I18N.READ_MORE}
|
|
25
22
|
</a>
|
|
26
23
|
</p>
|
|
27
24
|
</Stack>
|
|
28
|
-
</
|
|
25
|
+
</HoverCard>
|
|
29
26
|
</FlexStack>
|
|
30
27
|
);
|
|
31
28
|
|
package/src/css/variables.css
CHANGED
|
@@ -170,7 +170,7 @@
|
|
|
170
170
|
--color-outline-warning: var(--color-yellow-200);
|
|
171
171
|
--color-outline-danger: var(--color-red-100);
|
|
172
172
|
|
|
173
|
-
--color-shadow: rgba(0, 0, 0, 0.
|
|
173
|
+
--color-shadow: rgba(0, 0, 0, 0.2);
|
|
174
174
|
|
|
175
175
|
--transition-in: all 0.2s ease-in;
|
|
176
176
|
--transition-out: all 0.17s ease-out;
|
|
@@ -25,7 +25,8 @@ const getSearchPattern = (search) => {
|
|
|
25
25
|
};
|
|
26
26
|
|
|
27
27
|
const getSearchReducer =
|
|
28
|
-
({ defaultFilters, allEntriesFilters, setParentState }) =>
|
|
28
|
+
({ defaultFilters, allEntriesFilters, setParentState }) =>
|
|
29
|
+
(state, action) => {
|
|
29
30
|
const { type, payload } = action;
|
|
30
31
|
|
|
31
32
|
switch (type) {
|
|
@@ -116,29 +117,35 @@ export const useSearchParams = ({
|
|
|
116
117
|
// Update state when the custom filters/search are changing - initial load or route updates
|
|
117
118
|
useLayoutEffect(() => {
|
|
118
119
|
// Run a deep comparison to prevent circular setState triggering
|
|
119
|
-
if (parentSearch === search
|
|
120
|
+
if (parentSearch === search && isEqual(initialFilters, filters)) {
|
|
120
121
|
return;
|
|
121
122
|
}
|
|
122
123
|
|
|
123
124
|
dispatch({ type: ACTION_SET, payload: generateState(initialFilters, parentSearch) });
|
|
124
|
-
}, [search, filters,
|
|
125
|
+
}, [dispatch, search, filters, parentSearch, initialFilters]);
|
|
125
126
|
|
|
126
127
|
/** Callbacks */
|
|
127
|
-
const handleUpdateSearch = useCallback(
|
|
128
|
-
|
|
129
|
-
|
|
128
|
+
const handleUpdateSearch = useCallback(
|
|
129
|
+
(newValue) => {
|
|
130
|
+
dispatch({ type: ACTION_SET_SEARCH, payload: newValue });
|
|
131
|
+
},
|
|
132
|
+
[dispatch],
|
|
133
|
+
);
|
|
130
134
|
|
|
131
|
-
const handleUpdateFilters = useCallback(
|
|
132
|
-
|
|
133
|
-
|
|
135
|
+
const handleUpdateFilters = useCallback(
|
|
136
|
+
(newFilters) => {
|
|
137
|
+
dispatch({ type: ACTION_SET_FILTERS, payload: newFilters });
|
|
138
|
+
},
|
|
139
|
+
[dispatch],
|
|
140
|
+
);
|
|
134
141
|
|
|
135
142
|
const handleResetFilters = useCallback(() => {
|
|
136
143
|
dispatch({ type: ACTION_RESET_DEFAULT });
|
|
137
|
-
}, []);
|
|
144
|
+
}, [dispatch]);
|
|
138
145
|
|
|
139
146
|
const handleResetAllFilters = useCallback(() => {
|
|
140
147
|
dispatch({ type: ACTION_RESET_ALL });
|
|
141
|
-
}, []);
|
|
148
|
+
}, [dispatch]);
|
|
142
149
|
|
|
143
150
|
return {
|
|
144
151
|
search,
|
|
@@ -1,37 +1,36 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import PropTypes from 'prop-types';
|
|
3
3
|
import cx from 'classnames';
|
|
4
|
-
import { Menu,
|
|
4
|
+
import { Menu, MenuButton, MenuItem, useMenuState } from 'ariakit/menu';
|
|
5
5
|
|
|
6
6
|
import { FlexStack } from '../../layout/flex-stack';
|
|
7
7
|
import { Icon } from '../icon';
|
|
8
8
|
import css from './dropdown.module.css';
|
|
9
9
|
|
|
10
10
|
export const Dropdown = (props) => {
|
|
11
|
-
const { className, label, ariaLabel, glyph,
|
|
12
|
-
const rootClassName = cx(css.root,
|
|
13
|
-
|
|
14
|
-
const menu = useMenuState({ baseId: process.env.NODE_ENV === 'test' && 'id-test', modal: true });
|
|
11
|
+
const { className, label, ariaLabel, glyph, children } = props;
|
|
12
|
+
const rootClassName = cx(css.root, className);
|
|
13
|
+
const menuState = useMenuState();
|
|
15
14
|
|
|
16
15
|
return (
|
|
17
|
-
|
|
18
|
-
<MenuButton {
|
|
16
|
+
<div className={rootClassName}>
|
|
17
|
+
<MenuButton state={menuState} className={css.button} tabIndex={null}>
|
|
19
18
|
<FlexStack space="xxxsmall">
|
|
20
19
|
{glyph && <Icon className={css.labelIcon} glyph={glyph} />}
|
|
21
20
|
{label}
|
|
22
21
|
</FlexStack>
|
|
23
22
|
</MenuButton>
|
|
24
|
-
<Menu {
|
|
23
|
+
<Menu state={menuState} aria-label={ariaLabel || label} className={css.dropdown}>
|
|
25
24
|
{typeof children === 'function'
|
|
26
25
|
? children({
|
|
27
26
|
MenuItem,
|
|
28
|
-
menu,
|
|
27
|
+
menu: menuState,
|
|
29
28
|
menuItemClassName: css.menuItem,
|
|
30
29
|
menuItemActiveClassName: css.menuItemActive,
|
|
31
30
|
})
|
|
32
31
|
: children}
|
|
33
32
|
</Menu>
|
|
34
|
-
|
|
33
|
+
</div>
|
|
35
34
|
);
|
|
36
35
|
};
|
|
37
36
|
|
|
@@ -40,7 +39,6 @@ Dropdown.defaultProps = {
|
|
|
40
39
|
label: null,
|
|
41
40
|
ariaLabel: '',
|
|
42
41
|
glyph: null,
|
|
43
|
-
activeLabel: false,
|
|
44
42
|
};
|
|
45
43
|
|
|
46
44
|
Dropdown.propTypes = {
|
|
@@ -56,12 +54,6 @@ Dropdown.propTypes = {
|
|
|
56
54
|
/** Icon glyph */
|
|
57
55
|
glyph: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),
|
|
58
56
|
|
|
59
|
-
/** Dropdown open state */
|
|
60
|
-
open: PropTypes.bool.isRequired,
|
|
61
|
-
|
|
62
|
-
/** Active label flag */
|
|
63
|
-
activeLabel: PropTypes.bool,
|
|
64
|
-
|
|
65
57
|
/** Content */
|
|
66
58
|
children: PropTypes.oneOfType([PropTypes.string, PropTypes.element, PropTypes.func]).isRequired,
|
|
67
59
|
};
|
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
.root {
|
|
2
|
+
display: inline-block;
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
.button {
|
|
2
6
|
background: none;
|
|
3
7
|
border: none;
|
|
4
8
|
padding: 0;
|
|
@@ -18,9 +22,9 @@
|
|
|
18
22
|
color: var(--color-text-light);
|
|
19
23
|
}
|
|
20
24
|
|
|
21
|
-
.
|
|
22
|
-
.
|
|
23
|
-
.
|
|
25
|
+
.button:hover,
|
|
26
|
+
.button:focus,
|
|
27
|
+
.button:active {
|
|
24
28
|
outline: none;
|
|
25
29
|
box-shadow: 0 0 var(--space-xxxsmall) var(--color-shadow);
|
|
26
30
|
border-color: var(--color-outline-dark);
|
|
@@ -44,10 +48,6 @@
|
|
|
44
48
|
box-shadow: 0 2px var(--space-xsmall) var(--color-shadow);
|
|
45
49
|
}
|
|
46
50
|
|
|
47
|
-
.activeLabel .label {
|
|
48
|
-
color: var(--color-text);
|
|
49
|
-
}
|
|
50
|
-
|
|
51
51
|
.menuItem {
|
|
52
52
|
display: block;
|
|
53
53
|
appearance: none;
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import PropTypes from 'prop-types';
|
|
3
|
+
import cx from 'classnames';
|
|
4
|
+
import {
|
|
5
|
+
Hovercard,
|
|
6
|
+
HovercardAnchor,
|
|
7
|
+
HovercardArrow,
|
|
8
|
+
useHovercard,
|
|
9
|
+
useHovercardState,
|
|
10
|
+
} from 'ariakit/hovercard';
|
|
11
|
+
|
|
12
|
+
import { Icon } from '../icon';
|
|
13
|
+
import css from './hover-card.module.css';
|
|
14
|
+
|
|
15
|
+
const resolveComponent = (as, href) => {
|
|
16
|
+
if (as) {
|
|
17
|
+
return as;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
if (href) {
|
|
21
|
+
return 'a';
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
return 'span';
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
export const HoverCard = (props) => {
|
|
28
|
+
const { className, href, as, label, children } = props;
|
|
29
|
+
const state = useHovercardState({ gutter: 8 });
|
|
30
|
+
const hoverCardProps = useHovercard({ state, portal: true });
|
|
31
|
+
|
|
32
|
+
// Fallback to span if no href
|
|
33
|
+
const Component = resolveComponent(as, href);
|
|
34
|
+
|
|
35
|
+
return (
|
|
36
|
+
<div className={cx(css.root, className)}>
|
|
37
|
+
<HovercardAnchor state={state} href={href} className={css.anchor} as={Component}>
|
|
38
|
+
{label}
|
|
39
|
+
</HovercardAnchor>
|
|
40
|
+
<Hovercard
|
|
41
|
+
{...hoverCardProps}
|
|
42
|
+
state={state}
|
|
43
|
+
className={css.hoverCard}
|
|
44
|
+
style={{ zIndex: 10000 }}
|
|
45
|
+
>
|
|
46
|
+
<HovercardArrow size={24} />
|
|
47
|
+
{typeof children === 'function' ? children({ close: state.hide }) : children}
|
|
48
|
+
<Icon
|
|
49
|
+
glyph="close"
|
|
50
|
+
size="small"
|
|
51
|
+
as="button"
|
|
52
|
+
type="button"
|
|
53
|
+
className={css.closeBtn}
|
|
54
|
+
onClick={state.hide}
|
|
55
|
+
/>
|
|
56
|
+
</Hovercard>
|
|
57
|
+
</div>
|
|
58
|
+
);
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
HoverCard.propTypes = {
|
|
62
|
+
/** Adopted child class name */
|
|
63
|
+
className: PropTypes.string,
|
|
64
|
+
/** Anchor label */
|
|
65
|
+
label: PropTypes.node,
|
|
66
|
+
/** Anchor href */
|
|
67
|
+
href: PropTypes.string,
|
|
68
|
+
/** Anchor component */
|
|
69
|
+
as: PropTypes.elementType,
|
|
70
|
+
/** Hover card component */
|
|
71
|
+
children: PropTypes.oneOfType([PropTypes.node, PropTypes.func]).isRequired,
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
HoverCard.defaultProps = {
|
|
75
|
+
className: '',
|
|
76
|
+
label: '',
|
|
77
|
+
as: '',
|
|
78
|
+
href: '',
|
|
79
|
+
};
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
.root {
|
|
2
|
+
display: inline-block;
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
.anchor {
|
|
6
|
+
display: inline-block;
|
|
7
|
+
color: inherit;
|
|
8
|
+
text-decoration: none;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
a.anchor,
|
|
12
|
+
buton.anchor {
|
|
13
|
+
cursor: pointer;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
a.anchor:hover,
|
|
17
|
+
button.anchor:hover {
|
|
18
|
+
color: var(--color-primary);
|
|
19
|
+
text-decoration: underline;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
.hoverCard {
|
|
23
|
+
padding: var(--space-xsmall) var(--space-large) var(--space-xsmall) var(--space-small);
|
|
24
|
+
border-radius: var(--radius-medium);
|
|
25
|
+
max-width: 320px;
|
|
26
|
+
outline: none;
|
|
27
|
+
filter: drop-shadow(0 0 var(--space-xxsmall) var(--color-shadow));
|
|
28
|
+
will-change: filter;
|
|
29
|
+
background: var(--color-light);
|
|
30
|
+
font-size: var(--size-small);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.closeBtn {
|
|
34
|
+
position: absolute;
|
|
35
|
+
right: 0;
|
|
36
|
+
top: var(--space-xxxsmall);
|
|
37
|
+
width: var(--space-large);
|
|
38
|
+
height: var(--space-large);
|
|
39
|
+
padding: var(--space-xxsmall);
|
|
40
|
+
background: none;
|
|
41
|
+
border: none;
|
|
42
|
+
cursor: pointer;
|
|
43
|
+
color: var(--color-text-ultra-light);
|
|
44
|
+
transition: var(--transition-out);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
.closeBtn:hover,
|
|
48
|
+
.closeBtn:active,
|
|
49
|
+
.closeBtn:focus {
|
|
50
|
+
color: var(--color-text-light);
|
|
51
|
+
transition: var(--transition-in);
|
|
52
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './hover-card';
|
package/src/ui/icon/icon.jsx
CHANGED
|
@@ -18,13 +18,17 @@ const ICONS = {
|
|
|
18
18
|
WARNING: 'warning',
|
|
19
19
|
};
|
|
20
20
|
|
|
21
|
-
export const Icon = (
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
21
|
+
export const Icon = (props) => {
|
|
22
|
+
const { className, glyph, as: Component, size, ...restProps } = props;
|
|
23
|
+
|
|
24
|
+
return (
|
|
25
|
+
<Component className={cx(css.root, className, css[size])} {...restProps}>
|
|
26
|
+
<svg className={css.icon}>
|
|
27
|
+
<use xlinkHref={`#${glyph}`} />
|
|
28
|
+
</svg>
|
|
29
|
+
</Component>
|
|
30
|
+
);
|
|
31
|
+
};
|
|
28
32
|
|
|
29
33
|
Icon.ICONS = ICONS;
|
|
30
34
|
|
package/src/ui/index.js
CHANGED
|
@@ -10,7 +10,6 @@ export { Input } from './input';
|
|
|
10
10
|
export { Loader } from './loader';
|
|
11
11
|
export { Logo } from './logo';
|
|
12
12
|
export { Panels } from './panels';
|
|
13
|
-
export { Popover } from './popover';
|
|
14
13
|
export { Skeleton } from './skeleton';
|
|
15
14
|
export { SortDropdown } from './sort-dropdown';
|
|
16
15
|
export { Table } from './table';
|
|
@@ -3,10 +3,10 @@ import PropTypes from 'prop-types';
|
|
|
3
3
|
import cx from 'classnames';
|
|
4
4
|
import {
|
|
5
5
|
Tooltip as UITooltip,
|
|
6
|
+
TooltipAnchor as UITooltipAnchor,
|
|
6
7
|
TooltipArrow as UITooltipArrow,
|
|
7
|
-
TooltipReference as UITooltipReference,
|
|
8
8
|
useTooltipState,
|
|
9
|
-
} from '
|
|
9
|
+
} from 'ariakit/tooltip';
|
|
10
10
|
|
|
11
11
|
import css from './tooltip.module.css';
|
|
12
12
|
|
|
@@ -21,26 +21,22 @@ export const Tooltip = (props) => {
|
|
|
21
21
|
...restProps
|
|
22
22
|
} = props;
|
|
23
23
|
|
|
24
|
-
const
|
|
25
|
-
const tooltipProps = useTooltipState({
|
|
26
|
-
baseId: process.env.NODE_ENV === 'test' && 'id-test',
|
|
27
|
-
placement: 'top',
|
|
28
|
-
});
|
|
24
|
+
const tooltip = useTooltipState({ placement: 'top' });
|
|
29
25
|
|
|
30
26
|
return (
|
|
31
27
|
<>
|
|
32
|
-
<
|
|
28
|
+
<UITooltipAnchor
|
|
33
29
|
as={Component}
|
|
34
|
-
className={
|
|
35
|
-
{
|
|
30
|
+
className={cx(css.root, className)}
|
|
31
|
+
state={tooltip}
|
|
32
|
+
{...(ref ? { ref } : {})}
|
|
36
33
|
{...restProps}
|
|
37
|
-
{...tooltipProps}
|
|
38
34
|
>
|
|
39
35
|
{children}
|
|
40
|
-
</
|
|
36
|
+
</UITooltipAnchor>
|
|
41
37
|
{title && (
|
|
42
|
-
<UITooltip {
|
|
43
|
-
<UITooltipArrow {
|
|
38
|
+
<UITooltip state={tooltip} className={cx(css.tooltip, darkMode && css.tooltipDarkMode)}>
|
|
39
|
+
<UITooltipArrow state={tooltip} className={css.arrow} size={12} />
|
|
44
40
|
{title}
|
|
45
41
|
</UITooltip>
|
|
46
42
|
)}
|
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
|
|
4
|
-
|
|
5
|
-
Object.defineProperty(exports, "__esModule", {
|
|
6
|
-
value: true
|
|
7
|
-
});
|
|
8
|
-
exports.Popover = void 0;
|
|
9
|
-
|
|
10
|
-
var _react = _interopRequireWildcard(require("react"));
|
|
11
|
-
|
|
12
|
-
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
13
|
-
|
|
14
|
-
var _classnames = _interopRequireDefault(require("classnames"));
|
|
15
|
-
|
|
16
|
-
var _Popover = require("reakit/Popover");
|
|
17
|
-
|
|
18
|
-
var _icon = require("../icon");
|
|
19
|
-
|
|
20
|
-
var _popoverModule = _interopRequireDefault(require("./popover.module.css"));
|
|
21
|
-
|
|
22
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
23
|
-
|
|
24
|
-
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
25
|
-
|
|
26
|
-
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
27
|
-
|
|
28
|
-
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
|
29
|
-
|
|
30
|
-
var Popover = function Popover(_ref) {
|
|
31
|
-
var className = _ref.className,
|
|
32
|
-
icon = _ref.icon,
|
|
33
|
-
label = _ref.label,
|
|
34
|
-
ariaLabel = _ref.ariaLabel,
|
|
35
|
-
children = _ref.children;
|
|
36
|
-
var popover = (0, _Popover.usePopoverState)({
|
|
37
|
-
baseId: process.env.NODE_ENV === 'test' && 'id-test',
|
|
38
|
-
gutter: 12,
|
|
39
|
-
modal: true,
|
|
40
|
-
placement: 'top'
|
|
41
|
-
});
|
|
42
|
-
var onCloseButtonClick = (0, _react.useCallback)(function (event) {
|
|
43
|
-
event.preventDefault();
|
|
44
|
-
popover.toggle();
|
|
45
|
-
}, [popover]);
|
|
46
|
-
var onButtonClick = (0, _react.useCallback)(function (event) {
|
|
47
|
-
event.preventDefault();
|
|
48
|
-
popover.toggle();
|
|
49
|
-
}, [popover]);
|
|
50
|
-
return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(_Popover.PopoverDisclosure, _extends({
|
|
51
|
-
className: (0, _classnames["default"])(_popoverModule["default"].button, className)
|
|
52
|
-
}, popover, {
|
|
53
|
-
onClick: onButtonClick,
|
|
54
|
-
"aria-label": ariaLabel
|
|
55
|
-
}), icon && (typeof icon === 'string' ? /*#__PURE__*/_react["default"].createElement(_icon.Icon, {
|
|
56
|
-
className: _popoverModule["default"].icon,
|
|
57
|
-
glyph: icon
|
|
58
|
-
}) : icon), label && /*#__PURE__*/_react["default"].createElement("span", {
|
|
59
|
-
className: _popoverModule["default"].label
|
|
60
|
-
}, label)), /*#__PURE__*/_react["default"].createElement(_Popover.Popover, _extends({
|
|
61
|
-
className: _popoverModule["default"].popover
|
|
62
|
-
}, popover, {
|
|
63
|
-
tabIndex: 0
|
|
64
|
-
}), /*#__PURE__*/_react["default"].createElement(_Popover.PopoverArrow, _extends({
|
|
65
|
-
className: _popoverModule["default"].arrow
|
|
66
|
-
}, popover, {
|
|
67
|
-
size: 16
|
|
68
|
-
})), typeof children === 'function' ? children({
|
|
69
|
-
popoverToggle: popover.toggle
|
|
70
|
-
}) : children, /*#__PURE__*/_react["default"].createElement(_icon.Icon, {
|
|
71
|
-
glyph: "close",
|
|
72
|
-
as: "button",
|
|
73
|
-
type: "button",
|
|
74
|
-
className: _popoverModule["default"].closeBtn,
|
|
75
|
-
onClick: onCloseButtonClick
|
|
76
|
-
})));
|
|
77
|
-
};
|
|
78
|
-
|
|
79
|
-
exports.Popover = Popover;
|
|
80
|
-
Popover.propTypes = {
|
|
81
|
-
className: _propTypes["default"].string,
|
|
82
|
-
label: _propTypes["default"].element,
|
|
83
|
-
icon: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].element]),
|
|
84
|
-
children: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].element, _propTypes["default"].func]).isRequired,
|
|
85
|
-
ariaLabel: _propTypes["default"].string
|
|
86
|
-
};
|
|
87
|
-
Popover.defaultProps = {
|
|
88
|
-
className: '',
|
|
89
|
-
icon: '',
|
|
90
|
-
label: '',
|
|
91
|
-
ariaLabel: 'View more info'
|
|
92
|
-
};
|