@balena/ui-shared-components 12.4.1-build-upgrade-storybook-9-fba88cb98491f125cc47aebf3788416039651e33-1 → 12.4.1-build-remove-unused-icon-abf38bf8f1d9d6827561fcd27fe2fe90534402d9-1

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.
@@ -1,8 +1,9 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { Avatar, Box, Button, Collapse, Typography } from '@mui/material';
3
3
  import { useMemo, useState } from 'react';
4
- import ArrowDropDownIcon from '@mui/icons-material/ArrowDropDown';
5
- import ArrowDropUpIcon from '@mui/icons-material/ArrowDropUp';
4
+ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
5
+ import { faCaretDown } from '@fortawesome/free-solid-svg-icons/faCaretDown';
6
+ import { faCaretUp } from '@fortawesome/free-solid-svg-icons/faCaretUp';
6
7
  /**
7
8
  * This will collapse a long list and allow to expand it by clicking the "expand" button.
8
9
  */
@@ -21,5 +22,5 @@ export const CollapsedList = ({ list, collapseItems = 3, }) => {
21
22
  }
22
23
  return (_jsxs(Box, { display: "flex", flexDirection: "column", justifyContent: "center", children: [_jsx(Collapse, { in: showMore, collapsedSize: collapseItems * 33, children: listItems }), list.length > collapseItems && (_jsxs(Button, { onClick: () => {
23
24
  setShowMore(!showMore);
24
- }, children: [showMore ? 'Less' : 'More', showMore ? _jsx(ArrowDropUpIcon, {}) : _jsx(ArrowDropDownIcon, {})] }))] }));
25
+ }, children: [showMore ? 'Less' : 'More', showMore ? (_jsx(FontAwesomeIcon, { icon: faCaretUp })) : (_jsx(FontAwesomeIcon, { icon: faCaretDown }))] }))] }));
25
26
  };
@@ -1,17 +1,15 @@
1
1
  import { __rest } from "tslib";
2
2
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
3
  import { Avatar, Box, Checkbox, Chip, Divider, FormControl, FormControlLabel, FormLabel, InputAdornment, Radio, RadioGroup, TextField, Tooltip, Typography, IconButton, Autocomplete, Stack, Accordion, AccordionSummary, AccordionDetails, accordionSummaryClasses, } from '@mui/material';
4
- import HelpIcon from '@mui/icons-material/Help';
5
4
  import { memo, useCallback, useEffect, useMemo, useState } from 'react';
6
5
  import { getPreferredVersionOpts, transformVersions } from './version';
7
6
  import { OsTypeSelector } from './OsTypeSelector';
8
7
  import { VariantSelector } from './VariantSelector';
9
- import ArticleIcon from '@mui/icons-material/Article';
8
+ import { faFileLines } from '@fortawesome/free-solid-svg-icons/faFileLines';
10
9
  import { MUILinkWithTracking } from '../MUILinkWithTracking';
11
- import { Visibility, VisibilityOff } from '@mui/icons-material';
12
10
  import { FALLBACK_LOGO_UNKNOWN_DEVICE } from './utils';
13
11
  import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
14
- import { faChevronRight, faTriangleExclamation, } from '@fortawesome/free-solid-svg-icons';
12
+ import { faChevronRight, faEye, faEyeSlash, faQuestionCircle, faTriangleExclamation, } from '@fortawesome/free-solid-svg-icons';
15
13
  import { Callout } from '../Callout';
16
14
  import { token } from '../../utils/token';
17
15
  const POLL_INTERVAL_DOCS = 'https://www.balena.io/docs/reference/supervisor/bandwidth-reduction/#side-effects--warnings';
@@ -120,7 +118,7 @@ export const ImageForm = memo(function ImageForm({ compatibleDeviceTypes, osVers
120
118
  }, renderInput: (_a) => {
121
119
  var _b;
122
120
  var { InputProps } = _a, params = __rest(_a, ["InputProps"]);
123
- return (_jsx(TextField, Object.assign({}, params, { label: _jsxs(Stack, { direction: "row", alignItems: "center", gap: 1, children: ["Device type", _jsx(Tooltip, { title: "Applications can support any devices that share the same architecture as their default device type.", children: _jsx(HelpIcon, { color: "info", sx: { fontSize: '1rem' } }) })] }), slotProps: {
121
+ return (_jsx(TextField, Object.assign({}, params, { label: _jsxs(Stack, { direction: "row", alignItems: "center", gap: 1, children: ["Device type", _jsx(Tooltip, { title: "Applications can support any devices that share the same architecture as their default device type.", children: _jsx(FontAwesomeIcon, { icon: faQuestionCircle, color: "info", fontSize: "1rem" }) })] }), slotProps: {
124
122
  input: Object.assign(Object.assign({}, InputProps), { startAdornment: (_jsx(Avatar, { variant: "square", src: (_b = model.deviceType.logo) !== null && _b !== void 0 ? _b : FALLBACK_LOGO_UNKNOWN_DEVICE, sx: { mr: 3, width: '20px', height: '20px' } })) }),
125
123
  } })));
126
124
  }, onChange: (_event, value) => {
@@ -167,7 +165,7 @@ export const ImageForm = memo(function ImageForm({ compatibleDeviceTypes, osVers
167
165
  setShowPassword((show) => !show);
168
166
  }, onMouseDown: (event) => {
169
167
  event.preventDefault();
170
- }, edge: "end", children: showPassword ? _jsx(VisibilityOff, {}) : _jsx(Visibility, {}) }) })),
168
+ }, edge: "end", children: showPassword ? (_jsx(FontAwesomeIcon, { icon: faEyeSlash })) : (_jsx(FontAwesomeIcon, { icon: faEye })) }) })),
171
169
  },
172
170
  }, onChange: (event) => {
173
171
  onChange({ wifiKey: event.target.value });
@@ -194,7 +192,8 @@ export const ImageForm = memo(function ImageForm({ compatibleDeviceTypes, osVers
194
192
  display: 'flex',
195
193
  alignItems: 'center',
196
194
  height: '1.5rem',
197
- }, children: _jsx(ArticleIcon, { sx: { ml: 1, fontSize: '1.15rem' } }) })] }) }), _jsx(TextField, { name: "provisioningKeyName", value: (_a = model.provisioningKeyName) !== null && _a !== void 0 ? _a : '', slotProps: {
195
+ gap: 1,
196
+ }, children: _jsx(FontAwesomeIcon, { icon: faFileLines, fontSize: "1.15rem" }) })] }) }), _jsx(TextField, { name: "provisioningKeyName", value: (_a = model.provisioningKeyName) !== null && _a !== void 0 ? _a : '', slotProps: {
198
197
  htmlInput: {
199
198
  name: 'provisioningKeyName',
200
199
  autoComplete: 'provisioningKeyName-auto-complete',
@@ -1,10 +1,11 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { Box, InputLabel, MenuItem, Select, Tooltip, Typography, Stack, } from '@mui/material';
3
3
  import { getOsTypeName } from './utils';
4
- import ArticleIcon from '@mui/icons-material/Article';
5
4
  import { MUILinkWithTracking } from '../MUILinkWithTracking';
6
5
  import { OsTypesEnum } from './models';
7
6
  import { Chip } from '../Chip';
7
+ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
8
+ import { faFileLines } from '@fortawesome/free-solid-svg-icons';
8
9
  const OsTypeOption = ({ osType }) => {
9
10
  if (!osType) {
10
11
  return _jsx(Typography, { variant: "body1", children: "Select OS type..." });
@@ -30,7 +31,7 @@ export const OsTypeSelector = ({ supportedOsTypes, hasEsrVersions, selectedOsTyp
30
31
  };
31
32
  });
32
33
  const selectedOsType = selectOsTypes.find((osType) => osType.slug === selectedOsTypeSlug && osType.supportedForDeviceType);
33
- return (_jsxs(Stack, { flex: 1, children: [_jsx(Stack, { direction: "row", alignItems: "center", gap: 1, children: _jsxs(InputLabel, { id: "newAppApplicationType-label", sx: { display: 'flex', alignItems: 'center', gap: 1 }, children: ["OS type", _jsx(MUILinkWithTracking, { sx: { height: 12 }, href: "https://www.balena.io/docs/reference/OS/extended-support-release", children: _jsx(ArticleIcon, { sx: { fontSize: '1rem' } }) })] }) }), _jsx(Select, { id: "newAppApplicationType", fullWidth: true, disabled: supportedOsTypes.length === 0, value: (_a = selectedOsType === null || selectedOsType === void 0 ? void 0 : selectedOsType.slug) !== null && _a !== void 0 ? _a : OsTypesEnum.DEFAULT, renderValue: (selected) => (_jsx(Box, { display: "flex", width: "100%", children: _jsx(OsTypeOption, { osType: selectOsTypes.find((osType) => selected === osType.slug) }) })), onChange: (event) => {
34
+ return (_jsxs(Stack, { flex: 1, children: [_jsx(Stack, { direction: "row", alignItems: "center", gap: 1, children: _jsxs(InputLabel, { id: "newAppApplicationType-label", sx: { display: 'flex', alignItems: 'center', gap: 1 }, children: ["OS type", _jsx(MUILinkWithTracking, { sx: { height: 12 }, href: "https://www.balena.io/docs/reference/OS/extended-support-release", children: _jsx(FontAwesomeIcon, { icon: faFileLines, fontSize: "1rem" }) })] }) }), _jsx(Select, { id: "newAppApplicationType", fullWidth: true, disabled: supportedOsTypes.length === 0, value: (_a = selectedOsType === null || selectedOsType === void 0 ? void 0 : selectedOsType.slug) !== null && _a !== void 0 ? _a : OsTypesEnum.DEFAULT, renderValue: (selected) => (_jsx(Box, { display: "flex", width: "100%", children: _jsx(OsTypeOption, { osType: selectOsTypes.find((osType) => selected === osType.slug) }) })), onChange: (event) => {
34
35
  const osType = selectOsTypes.find((os) => os.slug === event.target.value);
35
36
  if (!osType.disabled) {
36
37
  onSelectedOsTypeChange(osType.slug);
@@ -2,12 +2,13 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
2
2
  import { FormControl, FormControlLabel, FormLabel, Radio, RadioGroup, Stack, Tooltip, Typography, } from '@mui/material';
3
3
  import { MUILinkWithTracking } from '../MUILinkWithTracking';
4
4
  import { getOsVariantDisplayText } from './utils';
5
- import { Lightbulb } from '@mui/icons-material';
6
5
  import { token } from '../../utils/token';
7
6
  import { Callout } from '../Callout';
7
+ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
8
+ import { faLightbulb } from '@fortawesome/free-solid-svg-icons';
8
9
  const variantInfo = (selected) => ({
9
10
  dev: {
10
- title: (_jsxs(Stack, { gap: 1, direction: "row", alignItems: "center", children: [_jsx(Typography, { children: getOsVariantDisplayText('dev') }), _jsxs(Typography, { variant: "bodySm", color: token('color.text.accent'), alignItems: "center", display: "flex", children: [_jsx(Lightbulb, { sx: { width: 14, height: 14 } }), "Recommended for first time users"] })] })),
11
+ title: (_jsxs(Stack, { gap: 1, direction: "row", alignItems: "center", children: [_jsx(Typography, { children: getOsVariantDisplayText('dev') }), _jsxs(Typography, { variant: "bodySm", color: token('color.text.accent'), alignItems: "center", display: "flex", children: [_jsx(FontAwesomeIcon, { icon: faLightbulb, width: 14, height: 14 }), "Recommended for first time users"] })] })),
11
12
  description: (_jsxs(Stack, { gap: 1, children: [_jsxs(Typography, { children: ["Development images should be used when you are developing an application and want to use the fast", ' ', _jsx(MUILinkWithTracking, { href: "https://balena.io/docs/development/local-mode/", children: "local mode" }), ' ', "workflow."] }), selected === 'dev' && (_jsxs(Callout, { severity: "warning", size: "sm", children: ["This variant should never be used in production for security reasons.", ' ', _jsx(MUILinkWithTracking, { href: "https://docs.balena.io/reference/OS/overview/#development-vs-production-mode", children: "Learn more" }), "."] }))] })),
12
13
  },
13
14
  prod: {
@@ -5,7 +5,6 @@ import { FALLBACK_LOGO_UNKNOWN_DEVICE, isUrlAccessible, stripVersionBuild, } fro
5
5
  import { ImageForm } from './ImageForm';
6
6
  import { ApplicationInstructions } from './ApplicationInstructions';
7
7
  import { DropDownButton } from '../DropDownButton';
8
- import DownloadIcon from '@mui/icons-material/Download';
9
8
  import pickBy from 'lodash/pickBy';
10
9
  import debounce from 'lodash/debounce';
11
10
  import isEmpty from 'lodash/isEmpty';
@@ -15,6 +14,8 @@ import { enqueueSnackbar } from 'notistack';
15
14
  import { DialogWithCloseButton } from '../DialogWithCloseButton';
16
15
  import { Callout } from '../Callout';
17
16
  import { Spinner } from '../Spinner';
17
+ import { faDownload } from '@fortawesome/free-solid-svg-icons';
18
+ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
18
19
  const etcherLogoBase64 = 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iODAwIiBoZWlnaHQ9IjYwMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KIDxnPgogIDx0aXRsZT5FdGNoZXI8L3RpdGxlPgogIDxnIGlkPSJzdmdfMSIgc3Ryb2tlPSJudWxsIj4KICAgPHBhdGggaWQ9InN2Z18yIiBjbGFzcz0ic3QxIiBkPSJtNDEyLjkwMzgzLDM1OC4wNjcxM2wwLDE3MS40OTU4M2M3LjQ5MjU0LC0xLjY2NTAxIDE0LjE1MjU3LC0zLjMzMDAyIDIwLjgxMjYsLTcuNDkyNTRsMTQyLjM1ODE5LC04MS41ODUzOWMyMC44MTI2LC0xMS42NTUwNiAzMy4zMDAxNiwtMzQuMTMyNjYgMzMuMzAwMTYsLTU4LjI3NTI4bDAsLTE2Mi4zMzgyOGMwLC02LjY2MDAzIC0wLjgzMjUsLTEzLjMyMDA2IC0zLjMzMDAyLC0xOS4xNDc1OWwtMTU0LjAxMzI0LDg5LjA3NzkzYy0zMi40Njc2NiwyMi40Nzc2MSAtMzkuMTI3NjksNDMuMjkwMjEgLTM5LjEyNzY5LDY4LjI2NTMzbDAsLTAuMDAwMDF6IiBmaWxsPSIjQTVERTM3IiBzdHJva2U9Im51bGwiLz4KICAgPHBhdGggaWQ9InN2Z18zIiBjbGFzcz0ic3QyIiBkPSJtNjYyLjY1NTAzLDE2Ny40MjM3MWwtNTYuNjEwMjcsMzIuNDY3NjZjMS42NjUwMSw1LjgyNzUzIDMuMzMwMDIsMTIuNDg3NTYgMy4zMzAwMiwxOS4xNDc1OWwwLDE2My4xNzA3OWMwLDI0LjE0MjYyIC0xMy4zMjAwNiw0Ni42MjAyMiAtMzMuMzAwMTYsNTguMjc1MjhsLTE0Mi4zNTgxOSw4MS41ODUzOWMtNi42NjAwMywzLjMzMDAyIC0xMy4zMjAwNiw1LjgyNzUzIC0yMC44MTI2LDcuNDkyNTRsMCw2NC45MzUzMWM5Ljk5MDA1LC0xLjY2NTAxIDE5Ljk4MDEsLTQuOTk1MDIgMjguMzA1MTQsLTkuOTkwMDVsMTg0LjgxNTg5LC0xMDUuNzI4MDFjMjUuODA3NjIsLTE0Ljk4NTA3IDQxLjYyNTIsLTQyLjQ1NzcgNDEuNjI1MiwtNzIuNDI3ODVsMCwtMjExLjQ1NjAyYzAsLTkuMTU3NTQgLTEuNjY1MDEsLTE4LjMxNTA5IC00Ljk5NTAyLC0yNy40NzI2M2wtMC4wMDAwMSwweiIgZmlsbD0iI0M4RjE3OCIgc3Ryb2tlPSJudWxsIi8+CiAgIDxwYXRoIGlkPSJzdmdfNCIgY2xhc3M9InN0MSIgZD0ibTM5OS41ODM3NiwzMDMuOTU0MzZjOC4zMjUwNCwtMTMuMzIwMDYgMjAuODEyNiwtMjUuODA3NjIgMzkuMTI3NjksLTM2LjYzMDE4bDE1NS42NzgyNSwtODkuOTEwNDNjLTQuOTk1MDIsLTYuNjYwMDMgLTExLjY1NTA2LC0xMi40ODc1NiAtMTguMzE1MDksLTE2LjY1MDA4bC0xNDIuMzU4MTksLTgxLjU4NTM5Yy0yMC44MTI2LC0xMS42NTUwNiAtNDYuNjIwMjIsLTExLjY1NTA2IC02Ny40MzI4MiwwbC0xNDEuNTI1NjgsODEuNTg1MzljLTcuNDkyNTQsNC4xNjI1MiAtMTMuMzIwMDYsOS45OTAwNSAtMTkuMTQ3NTksMTYuNjUwMDhsMTU0Ljg0NTc1LDg5LjkxMDQzYzE4LjMxNTA5LDExLjY1NTA2IDMwLjgwMjY1LDIzLjMxMDExIDM5LjEyNzY5LDM2LjYzMDE4bC0wLjAwMDAxLDB6IiBmaWxsPSIjQTVERTM3IiBzdHJva2U9Im51bGwiLz4KICAgPHBhdGggaWQ9InN2Z181IiBjbGFzcz0ic3QyIiBkPSJtMjI0Ljc1NzkyLDE2MS41OTYxOGwxNDEuNTI1NjgsLTgxLjU4NTM5YzIwLjgxMjYsLTExLjY1NTA2IDQ2LjYyMDIyLC0xMS42NTUwNiA2Ny40MzI4MiwwbDE0Mi4zNTgxOSw4MS41ODUzOWM3LjQ5MjU0LDQuMTYyNTIgMTMuMzIwMDYsOS45OTAwNSAxOC4zMTUwOSwxNi42NTAwOGw1Ni42MTAyNywtMzIuNDY3NjZjLTYuNjYwMDMsLTkuMTU3NTQgLTE0Ljk4NTA3LC0xNi42NTAwOCAtMjQuOTc1MTIsLTIxLjY0NTFsLTE4NC44MTU4OSwtMTA3LjM5MzAyYy0yNS44MDc2MiwtMTQuOTg1MDcgLTU3LjQ0Mjc4LC0xNC45ODUwNyAtODMuMjUwNCwwbC0xODMuMTUwODgsMTA2LjU2MDUxYy05Ljk5MDA1LDUuODI3NTMgLTE4LjMxNTA5LDEzLjMyMDA2IC0yNC45NzUxMiwyMi40Nzc2MWw1Ni42MTAyNywzMi40Njc2NmM0LjE2MjUyLC02LjY2MDAzIDEwLjgyMjU1LC0xMi40ODc1NiAxOC4zMTUwOSwtMTYuNjUwMDh6IiBmaWxsPSIjQzhGMTc4IiBzdHJva2U9Im51bGwiLz4KICAgPHBhdGggaWQ9InN2Z182IiBjbGFzcz0ic3QyIiBkPSJtMzY2LjI4MzYsNTIyLjA3MDQxbC0xNDEuNTI1NjgsLTgxLjU4NTM5Yy0yMC44MTI2LC0xMS42NTUwNiAtMzMuMzAwMTYsLTM0LjEzMjY2IC0zMy4zMDAxNiwtNTguMjc1MjhsMCwtMTYzLjE3MDc5YzAsLTYuNjYwMDMgMC44MzI1LC0xMi40ODc1NiAyLjQ5NzUxLC0xOC4zMTUwOWwtNTYuNjEwMjcsLTMyLjQ2NzY2Yy0zLjMzMDAyLDkuMTU3NTQgLTQuOTk1MDIsMTcuNDgyNTggLTQuOTk1MDIsMjYuNjQwMTNsMCwyMTIuMjg4NTJjMCwyOS45NzAxNCAxNS44MTc1OCw1Ny40NDI3OCA0MS42MjUyLDcxLjU5NTM0bDE4My45ODMzOSwxMDUuNzI4MDFjOC4zMjUwNCw0Ljk5NTAyIDE4LjMxNTA5LDguMzI1MDQgMjguMzA1MTQsOS45OTAwNWwwLC02NC45MzUzMWMtNi42NjAwMywtMC44MzI1IC0xMy4zMjAwNiwtMy4zMzAwMiAtMTkuOTgwMSwtNy40OTI1NGwtMC4wMDAwMSwwLjAwMDAxeiIgZmlsbD0iI0M4RjE3OCIgc3Ryb2tlPSJudWxsIi8+CiAgIDxwYXRoIGlkPSJzdmdfNyIgY2xhc3M9InN0MSIgZD0ibTM0Ny4xMzYwMSwyODguOTY5MjlsLTE1My4xODA3NCwtODguMjQ1NDJjLTEuNjY1MDEsNS44Mjc1MyAtMi40OTc1MSwxMi40ODc1NiAtMi40OTc1MSwxOC4zMTUwOWwwLDE2My4xNzA3OWMwLDI0LjE0MjYyIDEyLjQ4NzU2LDQ2LjYyMDIyIDMzLjMwMDE2LDU4LjI3NTI4bDE0MS41MjU2OCw4MS41ODUzOWM2LjY2MDAzLDMuMzMwMDIgMTMuMzIwMDYsNS44Mjc1MyAyMC44MTI2LDcuNDkyNTRsMCwtMTcxLjQ5NTgzYy0wLjgzMjUsLTI0Ljk3NTEyIC03LjQ5MjU0LC00NS43ODc3MiAtMzkuOTYwMTksLTY5LjA5NzgzbDAsLTAuMDAwMDF6IiBmaWxsPSIjQTVERTM3IiBzdHJva2U9Im51bGwiLz4KICA8L2c+CiA8L2c+Cgo8L3N2Zz4=';
19
20
  const ETCHER_OPEN_IMAGE_URL = 'https://www.balena.io/etcher/open-image-url';
20
21
  export var ActionType;
@@ -150,7 +151,7 @@ export const DownloadImageDialog = ({ open, applicationId, releaseId, compatible
150
151
  onDownloadStart === null || onDownloadStart === void 0 ? void 0 : onDownloadStart(formModel, ActionType.downloadOs);
151
152
  formElement.current.submit();
152
153
  }),
153
- children: (_jsxs(_Fragment, { children: [_jsx(DownloadIcon, {}), " Download balenaOS", ' ', formModel.version && downloadSize ? ` (~${downloadSize})` : ''] })),
154
+ children: (_jsxs(_Fragment, { children: [_jsx(FontAwesomeIcon, { icon: faDownload }), " Download balenaOS", ' ', formModel.version && downloadSize ? ` (~${downloadSize})` : ''] })),
154
155
  },
155
156
  ];
156
157
  if (downloadConfig) {
@@ -164,7 +165,7 @@ export const DownloadImageDialog = ({ open, applicationId, releaseId, compatible
164
165
  onDownloadStart === null || onDownloadStart === void 0 ? void 0 : onDownloadStart(formModel, ActionType.downloadConfigFile);
165
166
  await downloadConfig(formModel);
166
167
  },
167
- children: (_jsxs(_Fragment, { children: [_jsx(DownloadIcon, {}), " Download configuration file only"] })),
168
+ children: (_jsxs(_Fragment, { children: [_jsx(FontAwesomeIcon, { icon: faDownload }), " Download configuration file only"] })),
168
169
  });
169
170
  }
170
171
  return dropDownButtonActions;
@@ -6,8 +6,9 @@ import { ButtonWithTracking } from '../ButtonWithTracking';
6
6
  import { useAnalyticsContext } from '../../contexts/AnalyticsContext';
7
7
  import groupBy from 'lodash/groupBy';
8
8
  import flatMap from 'lodash/flatMap';
9
- import { KeyboardArrowDown, KeyboardArrowUp, ArrowDropDown, ArrowDropUp, } from '@mui/icons-material';
10
9
  import { Tooltip } from '../Tooltip';
10
+ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
11
+ import { faCaretDown, faCaretUp, faChevronDown, faChevronUp, } from '@fortawesome/free-solid-svg-icons';
11
12
  /**
12
13
  * This component implements a Dropdown button using MUI (This can be removed as soon as MUI implements it. Check
13
14
  * progress: https://mui.com/material-ui/discover-more/roadmap/#new-components)
@@ -49,9 +50,9 @@ export const DropDownButton = (_a) => {
49
50
  };
50
51
  return (_jsxs(_Fragment, { children: [children ? (_jsx(Button, Object.assign({ "aria-controls": anchorEl ? 'dropdown' : undefined, "aria-expanded": anchorEl ? 'true' : undefined, onClick: (event) => {
51
52
  setAnchorEl(event.currentTarget);
52
- }, endIcon: anchorEl ? _jsx(KeyboardArrowUp, {}) : _jsx(KeyboardArrowDown, {}) }, buttonProps, { children: children }))) : (_jsxs(ButtonGroup, Object.assign({ variant: "contained", disableElevation: true }, buttonProps, { children: [_jsx(ButtonWithTracking, { onClick: handleClick, eventName: memoizedItems[selectedIndex].eventName, eventProperties: memoizedItems[selectedIndex].eventProperties, tooltip: memoizedItems[selectedIndex].tooltip, children: memoizedItems[selectedIndex].children }), _jsx(Button, { onClick: handleToggle,
53
+ }, endIcon: anchorEl ? (_jsx(FontAwesomeIcon, { icon: faChevronUp })) : (_jsx(FontAwesomeIcon, { icon: faChevronDown })) }, buttonProps, { children: children }))) : (_jsxs(ButtonGroup, Object.assign({ variant: "contained", disableElevation: true }, buttonProps, { children: [_jsx(ButtonWithTracking, { onClick: handleClick, eventName: memoizedItems[selectedIndex].eventName, eventProperties: memoizedItems[selectedIndex].eventProperties, tooltip: memoizedItems[selectedIndex].tooltip, children: memoizedItems[selectedIndex].children }), _jsx(Button, { onClick: handleToggle,
53
54
  // It doesn't look good without it, hence the addition.
54
- sx: (theme) => ({ pl: 2, pr: `calc(${theme.spacing(2)} + 2px)` }), children: anchorEl ? _jsx(ArrowDropUp, {}) : _jsx(ArrowDropDown, {}) })] }))), _jsx(Menu, { anchorEl: anchorEl, open: !!anchorEl, onClose: () => {
55
+ sx: (theme) => ({ pl: 2, pr: `calc(${theme.spacing(2)} + 2px)` }), children: anchorEl ? (_jsx(FontAwesomeIcon, { icon: faCaretUp })) : (_jsx(FontAwesomeIcon, { icon: faCaretDown })) })] }))), _jsx(Menu, { anchorEl: anchorEl, open: !!anchorEl, onClose: () => {
55
56
  setAnchorEl(null);
56
57
  }, children: memoizedItems.map((item, index) => (_jsx(MenuItemWithTracking, Object.assign({}, item, { onClick: (event) => {
57
58
  handleMenuItemClick(event, index);
@@ -1,7 +1,8 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { FormControl, IconButton, InputAdornment, TextField, } from '@mui/material';
3
3
  import { Suspense, lazy, useState } from 'react';
4
- import { Visibility, VisibilityOff } from '@mui/icons-material';
4
+ import { faEye, faEyeSlash } from '@fortawesome/free-solid-svg-icons';
5
+ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
5
6
  const PasswordStrength = lazy(async () => {
6
7
  const importedModule = await import('../PasswordStrength');
7
8
  return {
@@ -27,6 +28,6 @@ export const PasswordWidget = ({ id, label, value, disabled, name, placeholder,
27
28
  setShowPassword((show) => !show);
28
29
  }, onMouseDown: (event) => {
29
30
  event.preventDefault();
30
- }, edge: "end", children: showPassword ? _jsx(VisibilityOff, {}) : _jsx(Visibility, {}) }) })),
31
+ }, edge: "end", children: showPassword ? (_jsx(FontAwesomeIcon, { icon: faEyeSlash })) : (_jsx(FontAwesomeIcon, { icon: faEye })) }) })),
31
32
  } }), options.showPasswordStrengthMeter && (_jsx(Suspense, { fallback: null, children: _jsx(PasswordStrength, { password: value }) }))] }));
32
33
  };
@@ -1,7 +1,6 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
- import { Code } from '@mui/icons-material';
3
2
  import { Copy } from '../../../../Copy';
4
3
  import { JsonTypes, truncateHash, widgetFactory } from '../utils';
5
4
  export const HashWidget = widgetFactory('Hash', {}, [JsonTypes.string])(({ value, }) => {
6
- return (_jsx(Copy, { copy: value, children: _jsx(Code, { children: truncateHash(value) }) }));
5
+ return _jsx(Copy, { copy: value, children: truncateHash(value) });
7
6
  });
@@ -1,5 +1,6 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  import * as React from 'react';
3
+ import * as uuid from 'uuid';
3
4
  import find from 'lodash/find';
4
5
  import startsWith from 'lodash/startsWith';
5
6
  import isEmpty from 'lodash/isEmpty';
@@ -8,7 +9,6 @@ import { Callout } from '../Callout';
8
9
  import { useTranslation } from '../../hooks/useTranslations';
9
10
  import { stopKeyDownEvent, withPreventDefault, } from '../../utils/eventHandling';
10
11
  import { SimpleConfirmationDialog, } from '../SimpleConfirmationDialog';
11
- import { useRandomUUID } from '../../hooks/useRandomUUID';
12
12
  const RESERVED_NAMESPACES = ['io.resin.', 'io.balena.'];
13
13
  const newTagValidationRules = (t, key, existingTags) => {
14
14
  return [
@@ -42,8 +42,7 @@ export const AddTagForm = ({ itemType, existingTags, overridableTags = [], addTa
42
42
  const [confirmationDialogOptions, setConfirmationDialogOptions] = React.useState();
43
43
  const tagKeyInput = React.useRef(null);
44
44
  const valueInput = React.useRef(null);
45
- const formId = useRandomUUID();
46
- const formUuid = `add-tag-form-${formId}`;
45
+ const formUuid = `add-tag-form-${uuid.v1()}`;
47
46
  const checkNewTagValidity = (key) => {
48
47
  const failedRule = newTagValidationRules(t, key, existingTags).find((rule) => rule.test());
49
48
  const hasErrors = !!failedRule;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@balena/ui-shared-components",
3
- "version": "12.4.1-build-upgrade-storybook-9-fba88cb98491f125cc47aebf3788416039651e33-1",
3
+ "version": "12.4.1-build-remove-unused-icon-abf38bf8f1d9d6827561fcd27fe2fe90534402d9-1",
4
4
  "main": "./dist/index.js",
5
5
  "sideEffects": false,
6
6
  "files": [
@@ -17,7 +17,6 @@
17
17
  "@emotion/styled": "^11.10.6",
18
18
  "@fortawesome/free-solid-svg-icons": "^6.5.1",
19
19
  "@fortawesome/react-fontawesome": "^0.2.0",
20
- "@mui/icons-material": "^6.3.1",
21
20
  "@mui/lab": "6.0.0-beta.24",
22
21
  "@mui/material": "^6.3.1",
23
22
  "@mui/styled-engine-sc": "^6.3.1",
@@ -39,7 +38,6 @@
39
38
  "jest": "^29.7.0",
40
39
  "lodash": "^4.17.21",
41
40
  "notistack": "^3.0.1",
42
- "qs": "^6.14.0",
43
41
  "react": "^18.2.0",
44
42
  "react-dom": "^18.2.0",
45
43
  "react-dropzone": "^14.2.3",
@@ -56,11 +54,17 @@
56
54
  },
57
55
  "devDependencies": {
58
56
  "@balena/lint": "^9.3.0",
59
- "@storybook/addon-docs": "^9.0.0",
60
- "@storybook/addon-links": "^9.0.0",
61
- "@storybook/addon-onboarding": "^9.0.0",
57
+ "@storybook/addon-essentials": "^8.6.12",
58
+ "@storybook/addon-interactions": "^8.6.12",
59
+ "@storybook/addon-links": "^8.6.12",
60
+ "@storybook/addon-onboarding": "^8.6.12",
62
61
  "@storybook/addon-webpack5-compiler-swc": "^3.0.0",
63
- "@storybook/react-webpack5": "^9.0.0",
62
+ "@storybook/blocks": "^8.6.12",
63
+ "@storybook/manager-api": "^8.6.12",
64
+ "@storybook/react": "^8.6.12",
65
+ "@storybook/react-webpack5": "^8.6.12",
66
+ "@storybook/test": "^8.6.12",
67
+ "@storybook/theming": "^8.6.12",
64
68
  "@types/color": "^4.2.0",
65
69
  "@types/color-hash": "^2.0.0",
66
70
  "@types/lodash": "^4.17.14",
@@ -70,11 +74,11 @@
70
74
  "@types/react-dom": "^18.0.11",
71
75
  "@types/react-helmet": "^6.1.6",
72
76
  "@types/zxcvbn": "^4.4.4",
73
- "eslint-plugin-storybook": "^9.0.0",
77
+ "eslint-plugin-storybook": "^0.12.0",
74
78
  "husky": "^9.0.0",
75
79
  "lint-staged": "^15.0.0",
76
80
  "prop-types": "^15.8.1",
77
- "storybook": "^9.0.0",
81
+ "storybook": "^8.6.12",
78
82
  "ts-loader": "^9.5.1",
79
83
  "webpack": "^5.88.2"
80
84
  },
@@ -133,9 +137,6 @@
133
137
  },
134
138
  "homepage": "https://github.com/balena-io/ui-shared-components#readme",
135
139
  "versionist": {
136
- "publishedAt": "2025-05-29T14:39:50.239Z"
137
- },
138
- "overrides": {
139
- "storybook": "$storybook"
140
+ "publishedAt": "2025-05-29T14:45:04.810Z"
140
141
  }
141
142
  }