@hitachivantara/uikit-react-core 3.62.7 → 3.63.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.
- package/CHANGELOG.md +18 -0
- package/dist/AppSwitcher/Action/Action.d.ts +75 -0
- package/dist/AppSwitcher/Action/Action.js +304 -0
- package/dist/AppSwitcher/Action/Action.js.map +1 -0
- package/dist/AppSwitcher/Action/index.d.ts +2 -0
- package/dist/AppSwitcher/Action/index.js +14 -0
- package/dist/AppSwitcher/Action/index.js.map +1 -0
- package/dist/AppSwitcher/Action/styles.js +60 -0
- package/dist/AppSwitcher/Action/styles.js.map +1 -0
- package/dist/AppSwitcher/AppSwitcher.d.ts +67 -0
- package/dist/AppSwitcher/AppSwitcher.js +282 -0
- package/dist/AppSwitcher/AppSwitcher.js.map +1 -0
- package/dist/AppSwitcher/TitleWithTooltip.js +76 -0
- package/dist/AppSwitcher/TitleWithTooltip.js.map +1 -0
- package/dist/AppSwitcher/index.d.ts +5 -0
- package/dist/AppSwitcher/index.js +24 -0
- package/dist/AppSwitcher/index.js.map +1 -0
- package/dist/AppSwitcher/styles.js +95 -0
- package/dist/AppSwitcher/styles.js.map +1 -0
- package/dist/Chart/chartPlotlyOverrides.js +2 -2
- package/dist/Chart/chartPlotlyOverrides.js.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -1
- package/dist/legacy/AppSwitcher/Action/Action.d.ts +75 -0
- package/dist/legacy/AppSwitcher/Action/Action.js +259 -0
- package/dist/legacy/AppSwitcher/Action/Action.js.map +1 -0
- package/dist/legacy/AppSwitcher/Action/index.d.ts +2 -0
- package/dist/legacy/AppSwitcher/Action/index.js +3 -0
- package/dist/legacy/AppSwitcher/Action/index.js.map +1 -0
- package/dist/legacy/AppSwitcher/Action/styles.js +52 -0
- package/dist/legacy/AppSwitcher/Action/styles.js.map +1 -0
- package/dist/legacy/AppSwitcher/AppSwitcher.d.ts +67 -0
- package/dist/legacy/AppSwitcher/AppSwitcher.js +260 -0
- package/dist/legacy/AppSwitcher/AppSwitcher.js.map +1 -0
- package/dist/legacy/AppSwitcher/TitleWithTooltip.js +45 -0
- package/dist/legacy/AppSwitcher/TitleWithTooltip.js.map +1 -0
- package/dist/legacy/AppSwitcher/index.d.ts +5 -0
- package/dist/legacy/AppSwitcher/index.js +3 -0
- package/dist/legacy/AppSwitcher/index.js.map +1 -0
- package/dist/legacy/AppSwitcher/styles.js +78 -0
- package/dist/legacy/AppSwitcher/styles.js.map +1 -0
- package/dist/legacy/Chart/chartPlotlyOverrides.js +2 -2
- package/dist/legacy/Chart/chartPlotlyOverrides.js.map +1 -1
- package/dist/legacy/index.d.ts +3 -0
- package/dist/legacy/index.js +1 -0
- package/dist/legacy/index.js.map +1 -1
- package/dist/modern/AppSwitcher/Action/Action.d.ts +75 -0
- package/dist/modern/AppSwitcher/Action/Action.js +242 -0
- package/dist/modern/AppSwitcher/Action/Action.js.map +1 -0
- package/dist/modern/AppSwitcher/Action/index.d.ts +2 -0
- package/dist/modern/AppSwitcher/Action/index.js +3 -0
- package/dist/modern/AppSwitcher/Action/index.js.map +1 -0
- package/dist/modern/AppSwitcher/Action/styles.js +50 -0
- package/dist/modern/AppSwitcher/Action/styles.js.map +1 -0
- package/dist/modern/AppSwitcher/AppSwitcher.d.ts +67 -0
- package/dist/modern/AppSwitcher/AppSwitcher.js +254 -0
- package/dist/modern/AppSwitcher/AppSwitcher.js.map +1 -0
- package/dist/modern/AppSwitcher/TitleWithTooltip.js +41 -0
- package/dist/modern/AppSwitcher/TitleWithTooltip.js.map +1 -0
- package/dist/modern/AppSwitcher/index.d.ts +5 -0
- package/dist/modern/AppSwitcher/index.js +3 -0
- package/dist/modern/AppSwitcher/index.js.map +1 -0
- package/dist/modern/AppSwitcher/styles.js +67 -0
- package/dist/modern/AppSwitcher/styles.js.map +1 -0
- package/dist/modern/Chart/chartPlotlyOverrides.js +2 -2
- package/dist/modern/Chart/chartPlotlyOverrides.js.map +1 -1
- package/dist/modern/index.d.ts +3 -0
- package/dist/modern/index.js +1 -0
- package/dist/modern/index.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { StandardProps } from "@material-ui/core";
|
|
3
|
+
|
|
4
|
+
export interface HvAppSwitcherActionApplication {
|
|
5
|
+
/**
|
|
6
|
+
* Id of the application.
|
|
7
|
+
*/
|
|
8
|
+
id?: string;
|
|
9
|
+
/**
|
|
10
|
+
* Name of the application, this is the value that will be displayed on the component.
|
|
11
|
+
*/
|
|
12
|
+
name: string;
|
|
13
|
+
/**
|
|
14
|
+
* The color to be applied to the item's border and to the default icon.
|
|
15
|
+
* You can use either an HEX or color name from the palette.
|
|
16
|
+
*/
|
|
17
|
+
color?: string;
|
|
18
|
+
/**
|
|
19
|
+
* URL with the icon location to be used to represent the application.
|
|
20
|
+
* iconUrl will only be used if no iconElement is provided.
|
|
21
|
+
*/
|
|
22
|
+
iconUrl?: string;
|
|
23
|
+
/**
|
|
24
|
+
* Element to be added as the icon representing the application.
|
|
25
|
+
* The iconElement will be the primary option to be displayed.
|
|
26
|
+
*/
|
|
27
|
+
iconElement?: React.ReactNode;
|
|
28
|
+
/**
|
|
29
|
+
* Small description of the application.
|
|
30
|
+
*/
|
|
31
|
+
description?: string;
|
|
32
|
+
/**
|
|
33
|
+
* URL where the application is accesible.
|
|
34
|
+
*/
|
|
35
|
+
url?: string;
|
|
36
|
+
/**
|
|
37
|
+
* Defines if the application should be opened in the same tab or in a new one.
|
|
38
|
+
*/
|
|
39
|
+
target?: "_top" | "_blank";
|
|
40
|
+
/**
|
|
41
|
+
* If true, the item will be disabled.
|
|
42
|
+
*/
|
|
43
|
+
disabled?: boolean;
|
|
44
|
+
/**
|
|
45
|
+
* True when the application is selected, false otherwise.
|
|
46
|
+
*/
|
|
47
|
+
isSelected?: boolean;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export type HvAppSwitcherActionClassKey =
|
|
51
|
+
| "root"
|
|
52
|
+
| "typography"
|
|
53
|
+
| "selected"
|
|
54
|
+
| "icon"
|
|
55
|
+
| "iconUrl"
|
|
56
|
+
| "title"
|
|
57
|
+
| "iconInfo";
|
|
58
|
+
|
|
59
|
+
export interface HvAppSwitcherActionProps
|
|
60
|
+
extends StandardProps<React.HTMLAttributes<HTMLElement>, HvAppSwitcherActionClassKey> {
|
|
61
|
+
/**
|
|
62
|
+
* The application data to be used to render the Action object.
|
|
63
|
+
*/
|
|
64
|
+
application: HvAppSwitcherActionApplication;
|
|
65
|
+
/**
|
|
66
|
+
* Callback triggered when the action is clicked.
|
|
67
|
+
*/
|
|
68
|
+
onClickCallback?: (event: MouseEvent, application?: HvAppSwitcherActionApplication) => void;
|
|
69
|
+
/**
|
|
70
|
+
* Must return a boolean stating if the action element is selected or not.
|
|
71
|
+
*/
|
|
72
|
+
isSelectedCallback?: (application?: HvAppSwitcherActionApplication) => boolean;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
export default function HvAppSwitcherAction(props: HvAppSwitcherActionProps): JSX.Element | null;
|
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
2
|
+
|
|
3
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
4
|
+
|
|
5
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
6
|
+
|
|
7
|
+
import "core-js/modules/web.dom-collections.iterator.js";
|
|
8
|
+
import React, { useState } from "react";
|
|
9
|
+
import PropTypes from "prop-types";
|
|
10
|
+
import clsx from "clsx";
|
|
11
|
+
import { useTheme, withStyles } from "@material-ui/core";
|
|
12
|
+
import { Info } from "@hitachivantara/uikit-react-icons";
|
|
13
|
+
import { HvTypography, HvAvatar, HvTooltip, HvListItem } from "../..";
|
|
14
|
+
import styles from "./styles";
|
|
15
|
+
import TitleWithTooltip from "../TitleWithTooltip";
|
|
16
|
+
|
|
17
|
+
const getColor = (theme, color, defaultColor) => theme.palette[color] || color || defaultColor;
|
|
18
|
+
|
|
19
|
+
const Action = props => {
|
|
20
|
+
const {
|
|
21
|
+
id,
|
|
22
|
+
className,
|
|
23
|
+
classes,
|
|
24
|
+
application,
|
|
25
|
+
onClickCallback = () => {},
|
|
26
|
+
isSelectedCallback = () => false
|
|
27
|
+
} = props;
|
|
28
|
+
const {
|
|
29
|
+
name,
|
|
30
|
+
description,
|
|
31
|
+
disabled,
|
|
32
|
+
iconElement,
|
|
33
|
+
iconUrl,
|
|
34
|
+
url,
|
|
35
|
+
target
|
|
36
|
+
} = application;
|
|
37
|
+
const theme = useTheme();
|
|
38
|
+
const color = disabled ? theme.hv.palette.atmosphere.atmo5 : getColor(theme, application.color, theme.hv.palette.accent.acce1);
|
|
39
|
+
const [validIconUrl, setValidIconUrl] = useState(true);
|
|
40
|
+
|
|
41
|
+
const renderApplicationIcon = () => {
|
|
42
|
+
if (iconElement) {
|
|
43
|
+
return iconElement;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
if (iconUrl && validIconUrl) {
|
|
47
|
+
return /*#__PURE__*/React.createElement("img", {
|
|
48
|
+
className: classes.iconUrl,
|
|
49
|
+
src: iconUrl,
|
|
50
|
+
onError: () => {
|
|
51
|
+
setValidIconUrl(false);
|
|
52
|
+
},
|
|
53
|
+
alt: description
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
const brokenTitle = name.split(" ");
|
|
58
|
+
const initials = brokenTitle[0].substring(0, 1) + (brokenTitle[1] ? brokenTitle[1].substring(0, 1) : "");
|
|
59
|
+
return /*#__PURE__*/React.createElement(HvAvatar, {
|
|
60
|
+
size: "SM",
|
|
61
|
+
backgroundColor: color,
|
|
62
|
+
variant: "square"
|
|
63
|
+
}, initials);
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
const isSelected = isSelectedCallback(application);
|
|
67
|
+
/**
|
|
68
|
+
* Handles the onClick event and triggers the appropriate callback if it exists.
|
|
69
|
+
*/
|
|
70
|
+
|
|
71
|
+
const handleOnClick = event => {
|
|
72
|
+
if (disabled) {
|
|
73
|
+
event.preventDefault();
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
onClickCallback === null || onClickCallback === void 0 ? void 0 : onClickCallback(event, _objectSpread(_objectSpread({}, application), {}, {
|
|
78
|
+
isSelected
|
|
79
|
+
}));
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
const isLink = url != null;
|
|
83
|
+
return /*#__PURE__*/React.createElement(HvListItem, {
|
|
84
|
+
id: id,
|
|
85
|
+
interactive: true,
|
|
86
|
+
tabIndex: 0,
|
|
87
|
+
selected: isSelected,
|
|
88
|
+
disabled: disabled,
|
|
89
|
+
className: clsx(className, classes.root, disabled && classes.disabled, isSelected && classes.selected)
|
|
90
|
+
}, /*#__PURE__*/React.createElement(HvTypography, {
|
|
91
|
+
component: isLink ? "a" : "button",
|
|
92
|
+
href: isLink ? url : undefined,
|
|
93
|
+
target: isLink ? target || "_top" : undefined,
|
|
94
|
+
className: classes.typography,
|
|
95
|
+
onClick: handleOnClick,
|
|
96
|
+
style: {
|
|
97
|
+
borderColor: color
|
|
98
|
+
}
|
|
99
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
100
|
+
className: classes.icon
|
|
101
|
+
}, renderApplicationIcon()), /*#__PURE__*/React.createElement(TitleWithTooltip, {
|
|
102
|
+
title: name,
|
|
103
|
+
className: classes.title
|
|
104
|
+
}), description && /*#__PURE__*/React.createElement(HvTooltip, {
|
|
105
|
+
disableFocusListener: true,
|
|
106
|
+
disableTouchListener: true,
|
|
107
|
+
title: /*#__PURE__*/React.createElement(HvTypography, null, description)
|
|
108
|
+
}, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(Info, {
|
|
109
|
+
className: classes.iconInfo,
|
|
110
|
+
role: "img",
|
|
111
|
+
"aria-label": description
|
|
112
|
+
})))));
|
|
113
|
+
};
|
|
114
|
+
|
|
115
|
+
process.env.NODE_ENV !== "production" ? Action.propTypes = {
|
|
116
|
+
/**
|
|
117
|
+
* Identifier to be applied to the root element.
|
|
118
|
+
*/
|
|
119
|
+
id: PropTypes.string,
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* Class names to be applied to the root element.
|
|
123
|
+
*/
|
|
124
|
+
className: PropTypes.string,
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* A Jss object used to override or extend the component styles.
|
|
128
|
+
*/
|
|
129
|
+
classes: PropTypes.shape({
|
|
130
|
+
/**
|
|
131
|
+
* Styles applied to the component root class.
|
|
132
|
+
*/
|
|
133
|
+
root: PropTypes.string,
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* Styles applied to the component root class when disabled.
|
|
137
|
+
*/
|
|
138
|
+
disabled: PropTypes.string,
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* Styles applied to the typography element.
|
|
142
|
+
*/
|
|
143
|
+
typography: PropTypes.string,
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* Styles applied to the component root class when selected.
|
|
147
|
+
*/
|
|
148
|
+
selected: PropTypes.string,
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* Styles applied to the icon container.
|
|
152
|
+
*/
|
|
153
|
+
icon: PropTypes.string,
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* Styles applied to the icon.
|
|
157
|
+
*/
|
|
158
|
+
iconUrl: PropTypes.string,
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* Styles applied to the action title element.
|
|
162
|
+
*/
|
|
163
|
+
title: PropTypes.string,
|
|
164
|
+
|
|
165
|
+
/**
|
|
166
|
+
* Styles applied to the info icon element.
|
|
167
|
+
*/
|
|
168
|
+
iconInfo: PropTypes.string
|
|
169
|
+
}).isRequired,
|
|
170
|
+
|
|
171
|
+
/**
|
|
172
|
+
* The application data to be used to render the Action object.
|
|
173
|
+
*/
|
|
174
|
+
application: PropTypes.shape({
|
|
175
|
+
/**
|
|
176
|
+
* Id of the application.
|
|
177
|
+
*/
|
|
178
|
+
id: PropTypes.string,
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* Name of the application, this is the value that will be displayed on the component.
|
|
182
|
+
*/
|
|
183
|
+
name: PropTypes.string.isRequired,
|
|
184
|
+
|
|
185
|
+
/**
|
|
186
|
+
* The color to be applied to the item's border and to the default icon.
|
|
187
|
+
* You can use either an HEX or color name from the palette.
|
|
188
|
+
*/
|
|
189
|
+
color: PropTypes.string,
|
|
190
|
+
|
|
191
|
+
/**
|
|
192
|
+
* URL with the icon location to be used to represent the application.
|
|
193
|
+
* iconUrl will only be used if no iconElement is provided.
|
|
194
|
+
*/
|
|
195
|
+
iconUrl: PropTypes.string,
|
|
196
|
+
|
|
197
|
+
/**
|
|
198
|
+
* Element to be added as the icon representing the application.
|
|
199
|
+
* The iconElement will be the primary option to be displayed.
|
|
200
|
+
*/
|
|
201
|
+
iconElement: PropTypes.element,
|
|
202
|
+
|
|
203
|
+
/**
|
|
204
|
+
* Small description of the application.
|
|
205
|
+
*/
|
|
206
|
+
description: PropTypes.string,
|
|
207
|
+
|
|
208
|
+
/**
|
|
209
|
+
* URL where the application is accessible.
|
|
210
|
+
*/
|
|
211
|
+
url: PropTypes.string,
|
|
212
|
+
|
|
213
|
+
/**
|
|
214
|
+
* Defines if the application should be opened in the same tab or in a new one.
|
|
215
|
+
*/
|
|
216
|
+
target: PropTypes.oneOf(["_top", "_blank"]),
|
|
217
|
+
|
|
218
|
+
/**
|
|
219
|
+
* If true, the item will be disabled.
|
|
220
|
+
*/
|
|
221
|
+
disabled: PropTypes.bool,
|
|
222
|
+
|
|
223
|
+
/**
|
|
224
|
+
* True when the application is selected, false otherwise.
|
|
225
|
+
*/
|
|
226
|
+
isSelected: PropTypes.bool
|
|
227
|
+
}).isRequired,
|
|
228
|
+
|
|
229
|
+
/**
|
|
230
|
+
* Callback triggered when the action is clicked.
|
|
231
|
+
*/
|
|
232
|
+
onClickCallback: PropTypes.func,
|
|
233
|
+
|
|
234
|
+
/**
|
|
235
|
+
* Must return a boolean stating if the action element is selected or not.
|
|
236
|
+
*/
|
|
237
|
+
isSelectedCallback: PropTypes.func
|
|
238
|
+
} : void 0;
|
|
239
|
+
export default withStyles(styles, {
|
|
240
|
+
name: "HvAppSwitcherAction"
|
|
241
|
+
})(Action);
|
|
242
|
+
//# sourceMappingURL=Action.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/AppSwitcher/Action/Action.js"],"names":["React","useState","PropTypes","clsx","useTheme","withStyles","Info","HvTypography","HvAvatar","HvTooltip","HvListItem","styles","TitleWithTooltip","getColor","theme","color","defaultColor","palette","Action","props","id","className","classes","application","onClickCallback","isSelectedCallback","name","description","disabled","iconElement","iconUrl","url","target","hv","atmosphere","atmo5","accent","acce1","validIconUrl","setValidIconUrl","renderApplicationIcon","brokenTitle","split","initials","substring","isSelected","handleOnClick","event","preventDefault","isLink","root","selected","undefined","typography","borderColor","icon","title","iconInfo","propTypes","string","shape","isRequired","element","oneOf","bool","func"],"mappings":"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","sourcesContent":["import React, { useState } from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport clsx from \"clsx\";\nimport { useTheme, withStyles } from \"@material-ui/core\";\n\nimport { Info } from \"@hitachivantara/uikit-react-icons\";\nimport { HvTypography, HvAvatar, HvTooltip, HvListItem } from \"../..\";\n\nimport styles from \"./styles\";\n\nimport TitleWithTooltip from \"../TitleWithTooltip\";\n\nconst getColor = (theme, color, defaultColor) => theme.palette[color] || color || defaultColor;\n\nconst Action = (props) => {\n const {\n id,\n className,\n classes,\n application,\n onClickCallback = () => {},\n isSelectedCallback = () => false,\n } = props;\n\n const { name, description, disabled, iconElement, iconUrl, url, target } = application;\n\n const theme = useTheme();\n const color = disabled\n ? theme.hv.palette.atmosphere.atmo5\n : getColor(theme, application.color, theme.hv.palette.accent.acce1);\n\n const [validIconUrl, setValidIconUrl] = useState(true);\n\n const renderApplicationIcon = () => {\n if (iconElement) {\n return iconElement;\n }\n\n if (iconUrl && validIconUrl) {\n return (\n <img\n className={classes.iconUrl}\n src={iconUrl}\n onError={() => {\n setValidIconUrl(false);\n }}\n alt={description}\n />\n );\n }\n\n const brokenTitle = name.split(\" \");\n const initials =\n brokenTitle[0].substring(0, 1) + (brokenTitle[1] ? brokenTitle[1].substring(0, 1) : \"\");\n\n return (\n <HvAvatar size=\"SM\" backgroundColor={color} variant=\"square\">\n {initials}\n </HvAvatar>\n );\n };\n\n const isSelected = isSelectedCallback(application);\n\n /**\n * Handles the onClick event and triggers the appropriate callback if it exists.\n */\n const handleOnClick = (event) => {\n if (disabled) {\n event.preventDefault();\n return;\n }\n\n onClickCallback?.(event, { ...application, isSelected });\n };\n\n const isLink = url != null;\n\n return (\n <HvListItem\n id={id}\n interactive\n tabIndex={0}\n selected={isSelected}\n disabled={disabled}\n className={clsx(className, classes.root, {\n [classes.disabled]: disabled,\n [classes.selected]: isSelected,\n })}\n >\n <HvTypography\n component={isLink ? \"a\" : \"button\"}\n href={isLink ? url : undefined}\n target={isLink ? target || \"_top\" : undefined}\n className={classes.typography}\n onClick={handleOnClick}\n style={{ borderColor: color }}\n >\n <div className={classes.icon}>{renderApplicationIcon()}</div>\n\n <TitleWithTooltip title={name} className={classes.title} />\n\n {description && (\n <HvTooltip\n disableFocusListener\n disableTouchListener\n title={<HvTypography>{description}</HvTypography>}\n >\n <div>\n <Info className={classes.iconInfo} role=\"img\" aria-label={description} />\n </div>\n </HvTooltip>\n )}\n </HvTypography>\n </HvListItem>\n );\n};\n\nAction.propTypes = {\n /**\n * Identifier to be applied to the root element.\n */\n id: PropTypes.string,\n\n /**\n * Class names to be applied to the root element.\n */\n className: PropTypes.string,\n /**\n * A Jss object used to override or extend the component styles.\n */\n classes: PropTypes.shape({\n /**\n * Styles applied to the component root class.\n */\n root: PropTypes.string,\n /**\n * Styles applied to the component root class when disabled.\n */\n disabled: PropTypes.string,\n /**\n * Styles applied to the typography element.\n */\n typography: PropTypes.string,\n /**\n * Styles applied to the component root class when selected.\n */\n selected: PropTypes.string,\n /**\n * Styles applied to the icon container.\n */\n icon: PropTypes.string,\n /**\n * Styles applied to the icon.\n */\n iconUrl: PropTypes.string,\n /**\n * Styles applied to the action title element.\n */\n title: PropTypes.string,\n /**\n * Styles applied to the info icon element.\n */\n iconInfo: PropTypes.string,\n }).isRequired,\n\n /**\n * The application data to be used to render the Action object.\n */\n application: PropTypes.shape({\n /**\n * Id of the application.\n */\n id: PropTypes.string,\n /**\n * Name of the application, this is the value that will be displayed on the component.\n */\n name: PropTypes.string.isRequired,\n /**\n * The color to be applied to the item's border and to the default icon.\n * You can use either an HEX or color name from the palette.\n */\n color: PropTypes.string,\n /**\n * URL with the icon location to be used to represent the application.\n * iconUrl will only be used if no iconElement is provided.\n */\n iconUrl: PropTypes.string,\n /**\n * Element to be added as the icon representing the application.\n * The iconElement will be the primary option to be displayed.\n */\n iconElement: PropTypes.element,\n /**\n * Small description of the application.\n */\n description: PropTypes.string,\n /**\n * URL where the application is accessible.\n */\n url: PropTypes.string,\n /**\n * Defines if the application should be opened in the same tab or in a new one.\n */\n target: PropTypes.oneOf([\"_top\", \"_blank\"]),\n /**\n * If true, the item will be disabled.\n */\n disabled: PropTypes.bool,\n /**\n * True when the application is selected, false otherwise.\n */\n isSelected: PropTypes.bool,\n }).isRequired,\n\n /**\n * Callback triggered when the action is clicked.\n */\n onClickCallback: PropTypes.func,\n /**\n * Must return a boolean stating if the action element is selected or not.\n */\n isSelectedCallback: PropTypes.func,\n};\n\nexport default withStyles(styles, { name: \"HvAppSwitcherAction\" })(Action);\n"],"file":"Action.js"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/AppSwitcher/Action/index.js"],"names":["Action"],"mappings":"AAAA,OAAOA,MAAP,MAAmB,UAAnB;AAEA,eAAeA,MAAf","sourcesContent":["import Action from \"./Action\";\n\nexport default Action;\n"],"file":"index.js"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
const styles = theme => ({
|
|
2
|
+
root: {
|
|
3
|
+
width: "100%",
|
|
4
|
+
maxWidth: 280,
|
|
5
|
+
minHeight: 52,
|
|
6
|
+
marginRight: theme.hv.spacing.sm
|
|
7
|
+
},
|
|
8
|
+
disabled: {},
|
|
9
|
+
selected: {},
|
|
10
|
+
typography: {
|
|
11
|
+
display: "flex",
|
|
12
|
+
justifyContent: "flex-start",
|
|
13
|
+
alignItems: "center",
|
|
14
|
+
width: "100%",
|
|
15
|
+
minHeight: 52,
|
|
16
|
+
padding: `6px ${theme.hv.spacing.xs}px`,
|
|
17
|
+
border: "none",
|
|
18
|
+
borderLeft: `solid 2px ${theme.hv.palette.accent.acce1}`,
|
|
19
|
+
cursor: "pointer",
|
|
20
|
+
textDecoration: "inherit",
|
|
21
|
+
color: "inherit",
|
|
22
|
+
backgroundColor: "inherit",
|
|
23
|
+
"$disabled &": {
|
|
24
|
+
cursor: "not-allowed"
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
icon: {
|
|
28
|
+
display: "flex",
|
|
29
|
+
minWidth: 40,
|
|
30
|
+
justifyContent: "center"
|
|
31
|
+
},
|
|
32
|
+
title: {
|
|
33
|
+
flexGrow: 1,
|
|
34
|
+
margin: `0 ${theme.hv.spacing.xs}px`,
|
|
35
|
+
textAlign: "left",
|
|
36
|
+
overflow: "hidden",
|
|
37
|
+
whiteSpace: "nowrap",
|
|
38
|
+
textOverflow: "ellipsis",
|
|
39
|
+
color: "inherit"
|
|
40
|
+
},
|
|
41
|
+
iconInfo: {
|
|
42
|
+
minWidth: 32
|
|
43
|
+
},
|
|
44
|
+
iconUrl: {
|
|
45
|
+
width: 32
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
export default styles;
|
|
50
|
+
//# sourceMappingURL=styles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/AppSwitcher/Action/styles.js"],"names":["styles","theme","root","width","maxWidth","minHeight","marginRight","hv","spacing","sm","disabled","selected","typography","display","justifyContent","alignItems","padding","xs","border","borderLeft","palette","accent","acce1","cursor","textDecoration","color","backgroundColor","icon","minWidth","title","flexGrow","margin","textAlign","overflow","whiteSpace","textOverflow","iconInfo","iconUrl"],"mappings":"AAAA,MAAMA,MAAM,GAAIC,KAAD,KAAY;AACzBC,EAAAA,IAAI,EAAE;AACJC,IAAAA,KAAK,EAAE,MADH;AAEJC,IAAAA,QAAQ,EAAE,GAFN;AAGJC,IAAAA,SAAS,EAAE,EAHP;AAIJC,IAAAA,WAAW,EAAEL,KAAK,CAACM,EAAN,CAASC,OAAT,CAAiBC;AAJ1B,GADmB;AAOzBC,EAAAA,QAAQ,EAAE,EAPe;AAQzBC,EAAAA,QAAQ,EAAE,EARe;AAUzBC,EAAAA,UAAU,EAAE;AACVC,IAAAA,OAAO,EAAE,MADC;AAEVC,IAAAA,cAAc,EAAE,YAFN;AAGVC,IAAAA,UAAU,EAAE,QAHF;AAKVZ,IAAAA,KAAK,EAAE,MALG;AAMVE,IAAAA,SAAS,EAAE,EAND;AAQVW,IAAAA,OAAO,EAAG,OAAMf,KAAK,CAACM,EAAN,CAASC,OAAT,CAAiBS,EAAG,IAR1B;AAUVC,IAAAA,MAAM,EAAE,MAVE;AAWVC,IAAAA,UAAU,EAAG,aAAYlB,KAAK,CAACM,EAAN,CAASa,OAAT,CAAiBC,MAAjB,CAAwBC,KAAM,EAX7C;AAaVC,IAAAA,MAAM,EAAE,SAbE;AAeVC,IAAAA,cAAc,EAAE,SAfN;AAgBVC,IAAAA,KAAK,EAAE,SAhBG;AAiBVC,IAAAA,eAAe,EAAE,SAjBP;AAmBV,mBAAe;AACbH,MAAAA,MAAM,EAAE;AADK;AAnBL,GAVa;AAkCzBI,EAAAA,IAAI,EAAE;AACJd,IAAAA,OAAO,EAAE,MADL;AAEJe,IAAAA,QAAQ,EAAE,EAFN;AAGJd,IAAAA,cAAc,EAAE;AAHZ,GAlCmB;AAwCzBe,EAAAA,KAAK,EAAE;AACLC,IAAAA,QAAQ,EAAE,CADL;AAELC,IAAAA,MAAM,EAAG,KAAI9B,KAAK,CAACM,EAAN,CAASC,OAAT,CAAiBS,EAAG,IAF5B;AAILe,IAAAA,SAAS,EAAE,MAJN;AAMLC,IAAAA,QAAQ,EAAE,QANL;AAOLC,IAAAA,UAAU,EAAE,QAPP;AAQLC,IAAAA,YAAY,EAAE,UART;AAULV,IAAAA,KAAK,EAAE;AAVF,GAxCkB;AAqDzBW,EAAAA,QAAQ,EAAE;AACRR,IAAAA,QAAQ,EAAE;AADF,GArDe;AAyDzBS,EAAAA,OAAO,EAAE;AACPlC,IAAAA,KAAK,EAAE;AADA;AAzDgB,CAAZ,CAAf;;AA8DA,eAAeH,MAAf","sourcesContent":["const styles = (theme) => ({\n root: {\n width: \"100%\",\n maxWidth: 280,\n minHeight: 52,\n marginRight: theme.hv.spacing.sm,\n },\n disabled: {},\n selected: {},\n\n typography: {\n display: \"flex\",\n justifyContent: \"flex-start\",\n alignItems: \"center\",\n\n width: \"100%\",\n minHeight: 52,\n\n padding: `6px ${theme.hv.spacing.xs}px`,\n\n border: \"none\",\n borderLeft: `solid 2px ${theme.hv.palette.accent.acce1}`,\n\n cursor: \"pointer\",\n\n textDecoration: \"inherit\",\n color: \"inherit\",\n backgroundColor: \"inherit\",\n\n \"$disabled &\": {\n cursor: \"not-allowed\",\n },\n },\n\n icon: {\n display: \"flex\",\n minWidth: 40,\n justifyContent: \"center\",\n },\n\n title: {\n flexGrow: 1,\n margin: `0 ${theme.hv.spacing.xs}px`,\n\n textAlign: \"left\",\n\n overflow: \"hidden\",\n whiteSpace: \"nowrap\",\n textOverflow: \"ellipsis\",\n\n color: \"inherit\",\n },\n\n iconInfo: {\n minWidth: 32,\n },\n\n iconUrl: {\n width: 32,\n },\n});\n\nexport default styles;\n"],"file":"styles.js"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { StandardProps } from "@material-ui/core";
|
|
3
|
+
|
|
4
|
+
import { HvAppSwitcherActionApplication } from "./Action";
|
|
5
|
+
|
|
6
|
+
export type HvAppSwitcherClassKey =
|
|
7
|
+
| "root"
|
|
8
|
+
| "single"
|
|
9
|
+
| "dual"
|
|
10
|
+
| "fluid"
|
|
11
|
+
| "title"
|
|
12
|
+
| "actionsContainer"
|
|
13
|
+
| "footerContainer"
|
|
14
|
+
| "closed"
|
|
15
|
+
| "open"
|
|
16
|
+
| "item"
|
|
17
|
+
| "itemSelected"
|
|
18
|
+
| "itemDisabled"
|
|
19
|
+
| "itemTrigger"
|
|
20
|
+
| "itemIcon"
|
|
21
|
+
| "itemTitle"
|
|
22
|
+
| "itemInfoIcon";
|
|
23
|
+
|
|
24
|
+
export interface HvAppSwitcherProps
|
|
25
|
+
extends StandardProps<React.HTMLAttributes<HTMLElement>, HvAppSwitcherClassKey> {
|
|
26
|
+
/**
|
|
27
|
+
* Number of columns to render. One, two, or whatever fits the component's width.
|
|
28
|
+
*/
|
|
29
|
+
layout?: "single" | "dual" | "fluid";
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Title to be displayed on the header of the component.
|
|
33
|
+
*/
|
|
34
|
+
title?: string;
|
|
35
|
+
/**
|
|
36
|
+
* The list of applications to be used to render the actions on the component.
|
|
37
|
+
*/
|
|
38
|
+
applications: HvAppSwitcherActionApplication[];
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Triggered when an action is clicked.
|
|
42
|
+
*/
|
|
43
|
+
onActionClickedCallback?: (
|
|
44
|
+
event: MouseEvent,
|
|
45
|
+
application?: HvAppSwitcherActionApplication
|
|
46
|
+
) => void;
|
|
47
|
+
/**
|
|
48
|
+
* Must return a boolean stating if the action element is selected or not.
|
|
49
|
+
*/
|
|
50
|
+
isActionSelectedCallback?: (application?: HvAppSwitcherActionApplication) => boolean;
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Element to be added to the header container, if none is provided a label with the title will be added.
|
|
54
|
+
*/
|
|
55
|
+
header?: string | React.ReactNode;
|
|
56
|
+
/**
|
|
57
|
+
* Element to be added to the footer container.
|
|
58
|
+
*/
|
|
59
|
+
footer?: string | React.ReactNode;
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Flag stating if the panel is opened or closed.
|
|
63
|
+
*/
|
|
64
|
+
isOpen?: boolean;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
export default function HvAppSwitcher(props: HvAppSwitcherProps): JSX.Element | null;
|