cozy-bar 17.1.0 → 18.1.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.
@@ -3,6 +3,7 @@ import { render, fireEvent } from '@testing-library/react'
3
3
  import { ButtonCozyHome } from './ButtonCozyHome'
4
4
  import { isFlagshipApp } from 'cozy-device-helper'
5
5
  import { useWebviewIntent } from 'cozy-intent'
6
+ import { BarLike } from 'test/lib/BarLike'
6
7
 
7
8
  jest.mock('cozy-device-helper')
8
9
  jest.mock('cozy-intent', () => ({
@@ -19,7 +20,11 @@ describe('ButtonCozyHome', () => {
19
20
  // We need to use a testid because
20
21
  // - the a tag has no text to query it (just an icon)
21
22
  // - an "a" tag without href is not seen as a link by queryByRole
22
- const { getByTestId } = render(<ButtonCozyHome />)
23
+ const { getByTestId } = render(
24
+ <BarLike>
25
+ <ButtonCozyHome />
26
+ </BarLike>
27
+ )
23
28
  const linkElement = getByTestId('buttonCozyHome')
24
29
 
25
30
  fireEvent.click(linkElement)
@@ -30,7 +35,11 @@ describe('ButtonCozyHome', () => {
30
35
  it('renders a link with homeHref for non-flagship apps with homeHref', () => {
31
36
  isFlagshipApp.mockReturnValue(false)
32
37
 
33
- const { queryByRole } = render(<ButtonCozyHome homeHref="/home" />)
38
+ const { queryByRole } = render(
39
+ <BarLike>
40
+ <ButtonCozyHome homeHref="/home" />
41
+ </BarLike>
42
+ )
34
43
  const linkElement = queryByRole('link')
35
44
 
36
45
  expect(linkElement).toHaveAttribute('href', '/home')
@@ -39,7 +48,11 @@ describe('ButtonCozyHome', () => {
39
48
  it('renders a span without href for non-flagship apps without homeHref', () => {
40
49
  isFlagshipApp.mockReturnValue(false)
41
50
 
42
- const { queryByRole } = render(<ButtonCozyHome />)
51
+ const { queryByRole } = render(
52
+ <BarLike>
53
+ <ButtonCozyHome />
54
+ </BarLike>
55
+ )
43
56
  const linkElement = queryByRole('link')
44
57
 
45
58
  expect(linkElement).toBeNull()
@@ -17,6 +17,14 @@ var _AppIcon = _interopRequireDefault(require("cozy-ui/transpiled/react/AppIcon"
17
17
 
18
18
  var _stack = _interopRequireDefault(require("../../lib/stack"));
19
19
 
20
+ var _isTwakeTheme = require("cozy-ui/transpiled/react/helpers/isTwakeTheme");
21
+
22
+ var _Breakpoints = require("cozy-ui/transpiled/react/providers/Breakpoints");
23
+
24
+ var _Icon = _interopRequireDefault(require("cozy-ui/transpiled/react/Icon"));
25
+
26
+ var _TwakeWorkplace = _interopRequireDefault(require("cozy-ui/transpiled/react/Icons/TwakeWorkplace"));
27
+
20
28
  /* Generated with node_modules/.bin/svgr src/assets/sprites/icon-cozy-home.svg */
21
29
  function SvgIconCozyHome(props) {
22
30
  return /*#__PURE__*/_react.default.createElement("svg", (0, _extends2.default)({
@@ -41,6 +49,17 @@ var IconCozyHome = function IconCozyHome(_ref) {
41
49
  var className = _ref.className,
42
50
  isInvertedTheme = _ref.isInvertedTheme;
43
51
 
52
+ var _useBreakpoints = (0, _Breakpoints.useBreakpoints)(),
53
+ isMobile = _useBreakpoints.isMobile;
54
+
55
+ if ((0, _isTwakeTheme.isTwakeTheme)()) {
56
+ return /*#__PURE__*/_react.default.createElement(_Icon.default, {
57
+ icon: _TwakeWorkplace.default,
58
+ size: isMobile ? 28 : 32,
59
+ className: isMobile ? 'u-ml-half' : undefined
60
+ });
61
+ }
62
+
44
63
  var fetchIcon = function fetchIcon() {
45
64
  if (isInvertedTheme) {
46
65
  return "".concat(_stack.default.get.cozyURL(), "/assets/images/icon-cozy-home-inverted.svg");
@@ -0,0 +1,103 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = exports.AppsMenuContent = void 0;
9
+
10
+ var _react = _interopRequireDefault(require("react"));
11
+
12
+ var _reactRedux = require("react-redux");
13
+
14
+ var _propTypes = _interopRequireDefault(require("prop-types"));
15
+
16
+ var _Typography = _interopRequireDefault(require("cozy-ui/transpiled/react/Typography"));
17
+
18
+ var _applications = require("cozy-client/dist/models/applications");
19
+
20
+ var _AppItem = _interopRequireDefault(require("./components/AppItem"));
21
+
22
+ var _AppItemPlaceholder = _interopRequireDefault(require("./components/AppItemPlaceholder"));
23
+
24
+ var _useI18n2 = _interopRequireDefault(require("../useI18n"));
25
+
26
+ var _reducers = require("../../lib/reducers");
27
+
28
+ var styles = {
29
+ "apps-menu-grid": "apps-menu-grid",
30
+ "apps-menu-grid-item-wrapper": "apps-menu-grid-item-wrapper",
31
+ "apps-menu-grid-item": "apps-menu-grid-item"
32
+ };
33
+
34
+ var sorter = function sorter(fn) {
35
+ return function (itemA, itemB) {
36
+ return fn(itemA) > fn(itemB);
37
+ };
38
+ };
39
+
40
+ var AppsMenuContent = function AppsMenuContent(_ref) {
41
+ var isFetchingApps = _ref.isFetchingApps,
42
+ apps = _ref.apps,
43
+ homeApp = _ref.homeApp;
44
+
45
+ var _useI18n = (0, _useI18n2.default)(),
46
+ t = _useI18n.t;
47
+
48
+ if (!isFetchingApps && (!apps || !apps.length)) {
49
+ return /*#__PURE__*/_react.default.createElement(_Typography.default, {
50
+ className: "u-mh-half",
51
+ color: "error"
52
+ }, t('no_apps'));
53
+ }
54
+
55
+ if (isFetchingApps) {
56
+ return /*#__PURE__*/_react.default.createElement("div", {
57
+ className: styles['apps-menu-grid']
58
+ }, /*#__PURE__*/_react.default.createElement(_AppItemPlaceholder.default, {
59
+ key: "1"
60
+ }), /*#__PURE__*/_react.default.createElement(_AppItemPlaceholder.default, {
61
+ key: "2"
62
+ }), /*#__PURE__*/_react.default.createElement(_AppItemPlaceholder.default, {
63
+ key: "3"
64
+ }));
65
+ }
66
+
67
+ var homeSlug = homeApp && homeApp.slug;
68
+ var displayedApps = apps.filter(function (app) {
69
+ return app.slug !== homeSlug;
70
+ }).sort(sorter(_applications.getAppDisplayName));
71
+ return /*#__PURE__*/_react.default.createElement("div", {
72
+ className: styles['apps-menu-grid']
73
+ }, displayedApps.map(function (app, index) {
74
+ return /*#__PURE__*/_react.default.createElement(_AppItem.default, {
75
+ key: index,
76
+ app: app
77
+ });
78
+ }));
79
+ };
80
+
81
+ exports.AppsMenuContent = AppsMenuContent;
82
+ AppsMenuContent.propTypes = {
83
+ apps: _propTypes.default.array,
84
+ isFetchingApps: _propTypes.default.bool.isRequired,
85
+ homeApp: _propTypes.default.shape({
86
+ isCurrentApp: _propTypes.default.bool,
87
+ slug: _propTypes.default.string,
88
+ href: _propTypes.default.string
89
+ }),
90
+ className: _propTypes.default.string
91
+ };
92
+
93
+ var mapStateToProps = function mapStateToProps(state) {
94
+ return {
95
+ isFetchingApps: (0, _reducers.isFetchingApps)(state),
96
+ apps: (0, _reducers.getApps)(state),
97
+ homeApp: (0, _reducers.getHomeApp)(state)
98
+ };
99
+ };
100
+
101
+ var _default = (0, _reactRedux.connect)(mapStateToProps)(AppsMenuContent);
102
+
103
+ exports.default = _default;
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = exports.AppItem = void 0;
9
+
10
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
+
12
+ var _react = _interopRequireDefault(require("react"));
13
+
14
+ var _applications = require("cozy-client/dist/models/applications");
15
+
16
+ var _Buttons = _interopRequireDefault(require("cozy-ui/transpiled/react/Buttons"));
17
+
18
+ var _AppIcon = _interopRequireDefault(require("cozy-ui/transpiled/react/AppIcon"));
19
+
20
+ var _AppLinker = _interopRequireDefault(require("cozy-ui/transpiled/react/AppLinker"));
21
+
22
+ var _Typography = _interopRequireDefault(require("cozy-ui/transpiled/react/Typography"));
23
+
24
+ var _classnames = _interopRequireDefault(require("classnames"));
25
+
26
+ var _proptypes = require("../../../proptypes");
27
+
28
+ var _stack = _interopRequireDefault(require("../../../lib/stack"));
29
+
30
+ var styles = {
31
+ "apps-menu-grid": "apps-menu-grid",
32
+ "apps-menu-grid-item-wrapper": "apps-menu-grid-item-wrapper",
33
+ "apps-menu-grid-item": "apps-menu-grid-item"
34
+ };
35
+
36
+ var AppItem = function AppItem(_ref) {
37
+ var app = _ref.app;
38
+ var appName = (0, _applications.getAppDisplayName)(app);
39
+ return /*#__PURE__*/_react.default.createElement(_AppLinker.default, {
40
+ href: app.href || '',
41
+ app: app
42
+ }, function (_ref2) {
43
+ var onClick = _ref2.onClick,
44
+ href = _ref2.href;
45
+ return /*#__PURE__*/_react.default.createElement(_Buttons.default, {
46
+ height: "auto",
47
+ component: "a",
48
+ variant: "text",
49
+ href: href,
50
+ title: appName,
51
+ onClick: onClick,
52
+ className: (0, _classnames.default)(styles['apps-menu-grid-item-wrapper'], 'u-bdrs-5'),
53
+ label: /*#__PURE__*/_react.default.createElement("div", {
54
+ className: styles['apps-menu-grid-item']
55
+ }, /*#__PURE__*/_react.default.createElement(_AppIcon.default, (0, _extends2.default)({
56
+ app: app,
57
+ key: app.slug
58
+ }, _stack.default.get.iconProps())), /*#__PURE__*/_react.default.createElement(_Typography.default, {
59
+ variant: "caption",
60
+ noWrap: true,
61
+ className: "u-mt-half"
62
+ }, appName))
63
+ });
64
+ });
65
+ };
66
+
67
+ exports.AppItem = AppItem;
68
+ AppItem.propTypes = {
69
+ app: _proptypes.appShape.isRequired
70
+ };
71
+ var _default = AppItem;
72
+ exports.default = _default;
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = exports.AppItemPlaceholder = void 0;
9
+
10
+ var _react = _interopRequireDefault(require("react"));
11
+
12
+ var _Skeleton = _interopRequireDefault(require("cozy-ui/transpiled/react/Skeleton"));
13
+
14
+ var AppItemPlaceholder = function AppItemPlaceholder() {
15
+ return /*#__PURE__*/_react.default.createElement(_Skeleton.default, {
16
+ variant: "rect",
17
+ width: 48,
18
+ height: 48,
19
+ className: "u-m-1 u-bdrs-5"
20
+ });
21
+ };
22
+
23
+ exports.AppItemPlaceholder = AppItemPlaceholder;
24
+ var _default = AppItemPlaceholder;
25
+ exports.default = _default;
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+
3
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
4
+
5
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
6
+
7
+ Object.defineProperty(exports, "__esModule", {
8
+ value: true
9
+ });
10
+ exports.default = void 0;
11
+
12
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
13
+
14
+ var _react = _interopRequireWildcard(require("react"));
15
+
16
+ var _AppsMenuContent = _interopRequireDefault(require("./AppsMenuContent"));
17
+
18
+ var _IconButton = _interopRequireDefault(require("cozy-ui/transpiled/react/IconButton"));
19
+
20
+ var _Icon = _interopRequireDefault(require("cozy-ui/transpiled/react/Icon"));
21
+
22
+ var _Menu = _interopRequireDefault(require("cozy-ui/transpiled/react/Menu"));
23
+
24
+ var _Mosaic = _interopRequireDefault(require("cozy-ui/transpiled/react/Icons/Mosaic"));
25
+
26
+ var _Breakpoints = require("cozy-ui/transpiled/react/providers/Breakpoints");
27
+
28
+ var _CozyDialogs = require("cozy-ui/transpiled/react/CozyDialogs");
29
+
30
+ var AppsMenu = function AppsMenu() {
31
+ var _useState = (0, _react.useState)(false),
32
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
33
+ isOpen = _useState2[0],
34
+ setOpen = _useState2[1];
35
+
36
+ var containerRef = (0, _react.useRef)();
37
+ var buttonRef = (0, _react.useRef)();
38
+
39
+ var _useBreakpoints = (0, _Breakpoints.useBreakpoints)(),
40
+ isMobile = _useBreakpoints.isMobile;
41
+
42
+ var toggleMenu = function toggleMenu() {
43
+ setOpen(!isOpen);
44
+ };
45
+
46
+ return /*#__PURE__*/_react.default.createElement("nav", {
47
+ ref: containerRef
48
+ }, /*#__PURE__*/_react.default.createElement(_IconButton.default, {
49
+ ref: buttonRef,
50
+ onClick: toggleMenu,
51
+ className: "u-p-half"
52
+ }, /*#__PURE__*/_react.default.createElement(_Icon.default, {
53
+ icon: _Mosaic.default,
54
+ size: "18"
55
+ })), isMobile ? /*#__PURE__*/_react.default.createElement(_CozyDialogs.ConfirmDialog, {
56
+ open: isOpen,
57
+ onClose: toggleMenu,
58
+ content: /*#__PURE__*/_react.default.createElement(_AppsMenuContent.default, null)
59
+ }) : /*#__PURE__*/_react.default.createElement(_Menu.default, {
60
+ open: isOpen,
61
+ anchorEl: buttonRef.current,
62
+ container: containerRef.current,
63
+ getContentAnchorEl: null,
64
+ onClose: toggleMenu,
65
+ anchorOrigin: {
66
+ vertical: 'bottom',
67
+ horizontal: 'left'
68
+ },
69
+ transformOrigin: {
70
+ vertical: -10,
71
+ horizontal: 0
72
+ }
73
+ }, /*#__PURE__*/_react.default.createElement(_AppsMenuContent.default, null)));
74
+ };
75
+
76
+ var _default = AppsMenu;
77
+ exports.default = _default;
@@ -19,14 +19,22 @@ var _reactRedux = require("react-redux");
19
19
 
20
20
  var _propTypes = _interopRequireDefault(require("prop-types"));
21
21
 
22
+ var _Grid = _interopRequireDefault(require("cozy-ui/transpiled/react/Grid"));
23
+
24
+ var _Divider = _interopRequireDefault(require("cozy-ui/transpiled/react/Divider"));
25
+
22
26
  var _Breakpoints = require("cozy-ui/transpiled/react/providers/Breakpoints");
23
27
 
24
28
  var _Icon = _interopRequireDefault(require("cozy-ui/transpiled/react/Icon"));
25
29
 
30
+ var _AppTitle = _interopRequireDefault(require("cozy-ui/transpiled/react/AppTitle"));
31
+
26
32
  var _cozyDeviceHelper = require("cozy-device-helper");
27
33
 
28
34
  var _cozyFlags = _interopRequireDefault(require("cozy-flags"));
29
35
 
36
+ var _isTwakeTheme = require("cozy-ui/transpiled/react/helpers/isTwakeTheme");
37
+
30
38
  var _ButtonCozyHome = require("./Apps/ButtonCozyHome");
31
39
 
32
40
  var _Banner = _interopRequireDefault(require("./Banner"));
@@ -37,6 +45,12 @@ var _Settings = _interopRequireDefault(require("./Settings"));
37
45
 
38
46
  var _Apps = _interopRequireDefault(require("./Apps"));
39
47
 
48
+ var _AppsMenu = _interopRequireDefault(require("./AppsMenu"));
49
+
50
+ var _UserMenu = _interopRequireDefault(require("./UserMenu"));
51
+
52
+ var _HelpLink = _interopRequireDefault(require("./HelpLink"));
53
+
40
54
  var _reducers = require("../lib/reducers");
41
55
 
42
56
  var _useI18n2 = _interopRequireDefault(require("./useI18n"));
@@ -76,7 +90,8 @@ var Bar = function Bar(_ref) {
76
90
  appNamePrefix = _ref.appNamePrefix,
77
91
  appSlug = _ref.appSlug,
78
92
  iconPath = _ref.iconPath,
79
- hasFetchedApps = _ref.hasFetchedApps;
93
+ hasFetchedApps = _ref.hasFetchedApps,
94
+ homeApp = _ref.homeApp;
80
95
  var client = (0, _cozyClient.useClient)();
81
96
 
82
97
  var _useI18n = (0, _useI18n2.default)(),
@@ -90,7 +105,7 @@ var Bar = function Bar(_ref) {
90
105
  drawerVisible = _useState2[0],
91
106
  setDrawerVisible = _useState2[1];
92
107
 
93
- var showDrawerAndBurger = !isPublic && isMobile;
108
+ var showDrawerAndBurger = !isPublic && isMobile && !(0, _isTwakeTheme.isTwakeTheme)();
94
109
  var showSettings = !isPublic && !isMobile;
95
110
  var fetchInitialData = (0, _react.useCallback)(function () {
96
111
  if (!isPublic) {
@@ -125,7 +140,7 @@ var Bar = function Bar(_ref) {
125
140
  };
126
141
 
127
142
  var renderCenter = function renderCenter() {
128
- return /*#__PURE__*/_react.default.createElement(_Apps.default, {
143
+ return (0, _isTwakeTheme.isTwakeTheme)() ? null : /*#__PURE__*/_react.default.createElement(_Apps.default, {
129
144
  appName: appName,
130
145
  appNamePrefix: appNamePrefix,
131
146
  appSlug: appSlug,
@@ -140,6 +155,30 @@ var Bar = function Bar(_ref) {
140
155
  return /*#__PURE__*/_react.default.createElement(_ButtonCozyHome.ButtonCozyHome, {
141
156
  isInvertedTheme: isInvertedTheme
142
157
  });
158
+ }
159
+
160
+ if ((0, _isTwakeTheme.isTwakeTheme)()) {
161
+ var homeHref = !isPublic && homeApp && homeApp.href;
162
+
163
+ if (isMobile) {
164
+ return /*#__PURE__*/_react.default.createElement(_ButtonCozyHome.ButtonCozyHome, {
165
+ homeHref: homeHref
166
+ });
167
+ }
168
+
169
+ return /*#__PURE__*/_react.default.createElement(_Grid.default, {
170
+ container: true,
171
+ alignItems: "center",
172
+ className: "u-w-auto"
173
+ }, /*#__PURE__*/_react.default.createElement(_ButtonCozyHome.ButtonCozyHome, {
174
+ homeHref: homeHref
175
+ }), /*#__PURE__*/_react.default.createElement(_Divider.default, {
176
+ orientation: "vertical",
177
+ className: "u-mr-half",
178
+ flexItem: true
179
+ }), /*#__PURE__*/_react.default.createElement(_AppTitle.default, {
180
+ slug: appSlug
181
+ }));
143
182
  } // data-tutorial attribute allows to be targeted in an application tutorial
144
183
 
145
184
 
@@ -164,6 +203,21 @@ var Bar = function Bar(_ref) {
164
203
  }) : null;
165
204
  };
166
205
 
206
+ var renderTwakeRight = function renderTwakeRight() {
207
+ // Special case because search on Drive on mobile still rely
208
+ // on old search UI that is injected in the cozy-bar and
209
+ // not in a modal as the new search UI
210
+ // So we need to hide these menu buttons when old search UI
211
+ // is injected in the cozy-bar
212
+ // When https://github.com/cozy/cozy-drive/pull/3320 will be merged
213
+ // Drive will rely on cozy-bar embedded search and we will be able
214
+ // to remove this special case
215
+ if (appSlug === 'drive' && isMobile && barSearch) return null;
216
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_HelpLink.default, null), /*#__PURE__*/_react.default.createElement(_AppsMenu.default, null), /*#__PURE__*/_react.default.createElement(_UserMenu.default, {
217
+ onLogOut: onLogOut
218
+ }));
219
+ };
220
+
167
221
  var renderSearch = function renderSearch() {
168
222
  return searchOptions.enabled && !isMobile ? /*#__PURE__*/_react.default.createElement("div", {
169
223
  className: "u-flex-grow u-mh-2"
@@ -185,7 +239,7 @@ var Bar = function Bar(_ref) {
185
239
  className: "coz-bar-container"
186
240
  }, barLeft || renderLeft(), barCenter || renderCenter(), /*#__PURE__*/_react.default.createElement("div", {
187
241
  className: "u-flex-grow"
188
- }, barSearch || renderSearch()), searchOptions.enabled && isMobile ? /*#__PURE__*/_react.default.createElement(_SearchButton.default, null) : null, barRight || renderRight(), showDrawerAndBurger ? /*#__PURE__*/_react.default.createElement(_Drawer.default, {
242
+ }, barSearch || renderSearch()), searchOptions.enabled && isMobile ? /*#__PURE__*/_react.default.createElement(_SearchButton.default, null) : null, (0, _isTwakeTheme.isTwakeTheme)() ? /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, barRight, renderTwakeRight()) : barRight || renderRight(), showDrawerAndBurger ? /*#__PURE__*/_react.default.createElement(_Drawer.default, {
189
243
  visible: drawerVisible,
190
244
  onClose: toggleDrawer,
191
245
  drawerListener: function drawerListener() {
@@ -211,7 +265,8 @@ Bar.propTypes = {
211
265
 
212
266
  var mapStateToProps = function mapStateToProps(state) {
213
267
  return {
214
- hasFetchedApps: (0, _reducers.hasFetched)(state)
268
+ hasFetchedApps: (0, _reducers.hasFetched)(state),
269
+ homeApp: (0, _reducers.getHomeApp)(state)
215
270
  };
216
271
  };
217
272
 
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = void 0;
9
+
10
+ var _react = _interopRequireDefault(require("react"));
11
+
12
+ var _IconButton = _interopRequireDefault(require("cozy-ui/transpiled/react/IconButton"));
13
+
14
+ var _Icon = _interopRequireDefault(require("cozy-ui/transpiled/react/Icon"));
15
+
16
+ var _HelpOutlined = _interopRequireDefault(require("cozy-ui/transpiled/react/Icons/HelpOutlined"));
17
+
18
+ var openHelpLink = function openHelpLink() {
19
+ window.open('https://support.cozy.io/', '_blank', 'noopener, noreferrer');
20
+ };
21
+
22
+ var HelpLink = function HelpLink() {
23
+ return /*#__PURE__*/_react.default.createElement(_IconButton.default, {
24
+ onClick: openHelpLink,
25
+ className: "u-p-half"
26
+ }, /*#__PURE__*/_react.default.createElement(_Icon.default, {
27
+ icon: _HelpOutlined.default,
28
+ size: "18"
29
+ }));
30
+ };
31
+
32
+ var _default = HelpLink;
33
+ exports.default = _default;
@@ -0,0 +1,156 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = exports.UserMenuContent = void 0;
9
+
10
+ var _react = _interopRequireDefault(require("react"));
11
+
12
+ var _classnames = _interopRequireDefault(require("classnames"));
13
+
14
+ var _cozyFlags = _interopRequireDefault(require("cozy-flags"));
15
+
16
+ var _cozyIntent = require("cozy-intent");
17
+
18
+ var _cozyClient = require("cozy-client");
19
+
20
+ var _instance = require("cozy-client/dist/models/instance");
21
+
22
+ var _List = _interopRequireDefault(require("cozy-ui/transpiled/react/List"));
23
+
24
+ var _ListItem = _interopRequireDefault(require("cozy-ui/transpiled/react/ListItem"));
25
+
26
+ var _ListItemIcon = _interopRequireDefault(require("cozy-ui/transpiled/react/ListItemIcon"));
27
+
28
+ var _ListItemText = _interopRequireDefault(require("cozy-ui/transpiled/react/ListItemText"));
29
+
30
+ var _PersonAdd = _interopRequireDefault(require("cozy-ui/transpiled/react/Icons/PersonAdd"));
31
+
32
+ var _FromUser = _interopRequireDefault(require("cozy-ui/transpiled/react/Icons/FromUser"));
33
+
34
+ var _Logout = _interopRequireDefault(require("cozy-ui/transpiled/react/Icons/Logout"));
35
+
36
+ var _Cloud = _interopRequireDefault(require("cozy-ui/transpiled/react/Icons/Cloud"));
37
+
38
+ var _Company = _interopRequireDefault(require("cozy-ui/transpiled/react/Icons/Company"));
39
+
40
+ var _Right = _interopRequireDefault(require("cozy-ui/transpiled/react/Icons/Right"));
41
+
42
+ var _Icon = _interopRequireDefault(require("cozy-ui/transpiled/react/Icon"));
43
+
44
+ var _Divider = _interopRequireDefault(require("cozy-ui/transpiled/react/Divider"));
45
+
46
+ var _Buttons = _interopRequireDefault(require("cozy-ui/transpiled/react/Buttons"));
47
+
48
+ var _Typography = _interopRequireDefault(require("cozy-ui/transpiled/react/Typography"));
49
+
50
+ var _useI18n2 = _interopRequireDefault(require("../useI18n"));
51
+
52
+ var _AvatarMyself = _interopRequireDefault(require("./components/AvatarMyself"));
53
+
54
+ var _helpers = require("./helpers");
55
+
56
+ var styles = {
57
+ "user-menu-content": "user-menu-content",
58
+ "user-menu-content-add-account": "user-menu-content-add-account"
59
+ };
60
+
61
+ var UserMenuContent = function UserMenuContent(_ref) {
62
+ var onLogOut = _ref.onLogOut,
63
+ instance = _ref.instance,
64
+ diskUsage = _ref.diskUsage;
65
+ var webviewIntent = (0, _cozyIntent.useWebviewIntent)();
66
+ var client = (0, _cozyClient.useClient)();
67
+
68
+ var _useI18n = (0, _useI18n2.default)(),
69
+ t = _useI18n.t;
70
+
71
+ var _instance$data = instance.data,
72
+ public_name = _instance$data.public_name,
73
+ email = _instance$data.email;
74
+
75
+ var _makeDiskInfos = (0, _instance.makeDiskInfos)(diskUsage.data.used, diskUsage.data.quota),
76
+ humanDiskQuota = _makeDiskInfos.humanDiskQuota,
77
+ humanDiskUsage = _makeDiskInfos.humanDiskUsage;
78
+
79
+ var profileLink = (0, _helpers.getSettingsLink)({
80
+ client: client,
81
+ hash: 'profile'
82
+ });
83
+ var storageLink = (0, _helpers.getSettingsLink)({
84
+ client: client,
85
+ hash: 'storage'
86
+ });
87
+ return /*#__PURE__*/_react.default.createElement("div", {
88
+ className: (0, _classnames.default)(styles['user-menu-content'], 'u-flex u-flex-column')
89
+ }, /*#__PURE__*/_react.default.createElement("div", {
90
+ className: "u-flex u-flex-column u-flex-items-center u-mt-half"
91
+ }, /*#__PURE__*/_react.default.createElement(_AvatarMyself.default, {
92
+ className: "u-mb-half"
93
+ }), /*#__PURE__*/_react.default.createElement(_Typography.default, {
94
+ variant: "h4"
95
+ }, public_name), /*#__PURE__*/_react.default.createElement(_Typography.default, {
96
+ variant: "body2"
97
+ }, email), (0, _cozyFlags.default)('cozy.b2b.enabled') && /*#__PURE__*/_react.default.createElement(_Buttons.default, {
98
+ label: t('userMenu.addAccount'),
99
+ variant: "secondary",
100
+ startIcon: /*#__PURE__*/_react.default.createElement(_Icon.default, {
101
+ icon: _PersonAdd.default
102
+ }),
103
+ className: (0, _classnames.default)(styles['user-menu-content-add-account'], 'u-mt-1')
104
+ })), /*#__PURE__*/_react.default.createElement(_List.default, {
105
+ className: "u-pb-0"
106
+ }, /*#__PURE__*/_react.default.createElement(_ListItem.default, {
107
+ button: true,
108
+ size: "small",
109
+ component: "a",
110
+ href: profileLink
111
+ }, /*#__PURE__*/_react.default.createElement(_ListItemIcon.default, null, /*#__PURE__*/_react.default.createElement(_Icon.default, {
112
+ icon: _FromUser.default
113
+ })), /*#__PURE__*/_react.default.createElement(_ListItemText.default, {
114
+ primary: t('userMenu.manageProfile')
115
+ })), (0, _cozyFlags.default)('cozy.b2b.enabled') && /*#__PURE__*/_react.default.createElement(_ListItem.default, {
116
+ button: true,
117
+ size: "small"
118
+ }, /*#__PURE__*/_react.default.createElement(_ListItemIcon.default, null, /*#__PURE__*/_react.default.createElement(_Icon.default, {
119
+ icon: _Company.default
120
+ })), /*#__PURE__*/_react.default.createElement(_ListItemText.default, {
121
+ primary: t('userMenu.createBusinessAccount')
122
+ })), /*#__PURE__*/_react.default.createElement(_ListItem.default, {
123
+ button: true,
124
+ size: "small",
125
+ component: "a",
126
+ href: storageLink
127
+ }, /*#__PURE__*/_react.default.createElement(_ListItemIcon.default, null, /*#__PURE__*/_react.default.createElement(_Icon.default, {
128
+ icon: _Cloud.default
129
+ })), /*#__PURE__*/_react.default.createElement(_ListItemText.default, {
130
+ primary: t('userMenu.storage'),
131
+ secondary: t('userMenu.storageAvailable', humanDiskQuota - humanDiskUsage)
132
+ }), /*#__PURE__*/_react.default.createElement(_ListItemIcon.default, null, /*#__PURE__*/_react.default.createElement(_Icon.default, {
133
+ icon: _Right.default
134
+ }))), /*#__PURE__*/_react.default.createElement(_Divider.default, {
135
+ component: "li",
136
+ variant: "inset"
137
+ }), /*#__PURE__*/_react.default.createElement(_ListItem.default, {
138
+ button: true,
139
+ size: "small",
140
+ onClick: function onClick() {
141
+ return (0, _helpers.logOut)({
142
+ client: client,
143
+ webviewIntent: webviewIntent,
144
+ onLogOut: onLogOut
145
+ });
146
+ }
147
+ }, /*#__PURE__*/_react.default.createElement(_ListItemIcon.default, null, /*#__PURE__*/_react.default.createElement(_Icon.default, {
148
+ icon: _Logout.default
149
+ })), /*#__PURE__*/_react.default.createElement(_ListItemText.default, {
150
+ primary: t('userMenu.logOut')
151
+ }))));
152
+ };
153
+
154
+ exports.UserMenuContent = UserMenuContent;
155
+ var _default = UserMenuContent;
156
+ exports.default = _default;
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = void 0;
9
+
10
+ var _react = _interopRequireDefault(require("react"));
11
+
12
+ var _cozyClient = require("cozy-client");
13
+
14
+ var _contact = require("cozy-client/dist/models/contact");
15
+
16
+ var _Avatar = _interopRequireDefault(require("cozy-ui/transpiled/react/Avatar"));
17
+
18
+ var _Skeleton = _interopRequireDefault(require("cozy-ui/transpiled/react/Skeleton"));
19
+
20
+ var _queries = require("../../../lib/queries");
21
+
22
+ var AvatarMyself = function AvatarMyself(_ref) {
23
+ var className = _ref.className,
24
+ _ref$size = _ref.size,
25
+ size = _ref$size === void 0 ? 'm' : _ref$size;
26
+ var myselfQuery = (0, _queries.buildMyselfQuery)();
27
+
28
+ var _useQuery = (0, _cozyClient.useQuery)(myselfQuery.definition, myselfQuery.options),
29
+ fetchStatus = _useQuery.fetchStatus,
30
+ data = _useQuery.data;
31
+
32
+ if (fetchStatus !== 'loaded') {
33
+ return /*#__PURE__*/_react.default.createElement(_Skeleton.default, {
34
+ variant: "circle",
35
+ width: 32,
36
+ height: 32
37
+ });
38
+ }
39
+
40
+ var me = data[0];
41
+
42
+ if (me) {
43
+ var initials = (0, _contact.getInitials)(me);
44
+ return /*#__PURE__*/_react.default.createElement(_Avatar.default, {
45
+ className: className,
46
+ size: size
47
+ }, initials);
48
+ }
49
+ };
50
+
51
+ var _default = AvatarMyself;
52
+ exports.default = _default;
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.logOut = exports.getSettingsLink = void 0;
9
+
10
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
11
+
12
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
13
+
14
+ var _cozyClient = require("cozy-client");
15
+
16
+ var _cozyDeviceHelper = require("cozy-device-helper");
17
+
18
+ var getSettingsLink = function getSettingsLink(_ref) {
19
+ var client = _ref.client,
20
+ hash = _ref.hash;
21
+ return (0, _cozyClient.generateWebLink)({
22
+ cozyUrl: client.getStackClient().uri,
23
+ slug: 'settings',
24
+ hash: hash,
25
+ subDomainType: client.getInstanceOptions().subdomain
26
+ });
27
+ };
28
+
29
+ exports.getSettingsLink = getSettingsLink;
30
+
31
+ var logOut = /*#__PURE__*/function () {
32
+ var _ref3 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(_ref2) {
33
+ var client, webviewIntent, onLogOut, res;
34
+ return _regenerator.default.wrap(function _callee$(_context) {
35
+ while (1) {
36
+ switch (_context.prev = _context.next) {
37
+ case 0:
38
+ client = _ref2.client, webviewIntent = _ref2.webviewIntent, onLogOut = _ref2.onLogOut;
39
+
40
+ if (!(onLogOut && typeof onLogOut === 'function')) {
41
+ _context.next = 8;
42
+ break;
43
+ }
44
+
45
+ res = onLogOut();
46
+
47
+ if (!(res instanceof Promise)) {
48
+ _context.next = 6;
49
+ break;
50
+ }
51
+
52
+ _context.next = 6;
53
+ return res;
54
+
55
+ case 6:
56
+ _context.next = 11;
57
+ break;
58
+
59
+ case 8:
60
+ _context.next = 10;
61
+ return client.logout();
62
+
63
+ case 10:
64
+ return _context.abrupt("return", (0, _cozyDeviceHelper.isFlagshipApp)() && webviewIntent ? webviewIntent.call('logout') : window.location.reload());
65
+
66
+ case 11:
67
+ case "end":
68
+ return _context.stop();
69
+ }
70
+ }
71
+ }, _callee);
72
+ }));
73
+
74
+ return function logOut(_x) {
75
+ return _ref3.apply(this, arguments);
76
+ };
77
+ }();
78
+
79
+ exports.logOut = logOut;
@@ -0,0 +1,92 @@
1
+ "use strict";
2
+
3
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
4
+
5
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
6
+
7
+ Object.defineProperty(exports, "__esModule", {
8
+ value: true
9
+ });
10
+ exports.default = void 0;
11
+
12
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
13
+
14
+ var _react = _interopRequireWildcard(require("react"));
15
+
16
+ var _IconButton = _interopRequireDefault(require("cozy-ui/transpiled/react/IconButton"));
17
+
18
+ var _Menu = _interopRequireDefault(require("cozy-ui/transpiled/react/Menu"));
19
+
20
+ var _Breakpoints = require("cozy-ui/transpiled/react/providers/Breakpoints");
21
+
22
+ var _CozyDialogs = require("cozy-ui/transpiled/react/CozyDialogs");
23
+
24
+ var _cozyClient = require("cozy-client");
25
+
26
+ var _UserMenuContent = _interopRequireDefault(require("./UserMenuContent"));
27
+
28
+ var _AvatarMyself = _interopRequireDefault(require("./components/AvatarMyself"));
29
+
30
+ var UserMenu = function UserMenu(_ref) {
31
+ var onLogOut = _ref.onLogOut;
32
+
33
+ var _useState = (0, _react.useState)(false),
34
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
35
+ isOpen = _useState2[0],
36
+ setOpen = _useState2[1];
37
+
38
+ var containerRef = (0, _react.useRef)();
39
+ var buttonRef = (0, _react.useRef)();
40
+
41
+ var _useBreakpoints = (0, _Breakpoints.useBreakpoints)(),
42
+ isMobile = _useBreakpoints.isMobile;
43
+
44
+ var _useInstanceInfo = (0, _cozyClient.useInstanceInfo)(),
45
+ isLoaded = _useInstanceInfo.isLoaded,
46
+ instance = _useInstanceInfo.instance,
47
+ diskUsage = _useInstanceInfo.diskUsage;
48
+
49
+ var toggleMenu = function toggleMenu() {
50
+ setOpen(!isOpen);
51
+ };
52
+
53
+ return /*#__PURE__*/_react.default.createElement("nav", {
54
+ ref: containerRef
55
+ }, /*#__PURE__*/_react.default.createElement(_IconButton.default, {
56
+ ref: buttonRef,
57
+ onClick: toggleMenu,
58
+ disabled: !isLoaded,
59
+ className: "u-p-0 u-ml-half"
60
+ }, /*#__PURE__*/_react.default.createElement(_AvatarMyself.default, {
61
+ size: isMobile ? 's' : 'm'
62
+ })), isMobile ? /*#__PURE__*/_react.default.createElement(_CozyDialogs.ConfirmDialog, {
63
+ open: isOpen,
64
+ onClose: toggleMenu,
65
+ content: /*#__PURE__*/_react.default.createElement(_UserMenuContent.default, {
66
+ onLogOut: onLogOut,
67
+ instance: instance,
68
+ diskUsage: diskUsage
69
+ })
70
+ }) : /*#__PURE__*/_react.default.createElement(_Menu.default, {
71
+ open: isOpen,
72
+ anchorEl: buttonRef.current,
73
+ container: containerRef.current,
74
+ getContentAnchorEl: null,
75
+ onClose: toggleMenu,
76
+ anchorOrigin: {
77
+ vertical: 'bottom',
78
+ horizontal: 'left'
79
+ },
80
+ transformOrigin: {
81
+ vertical: -10,
82
+ horizontal: 0
83
+ }
84
+ }, /*#__PURE__*/_react.default.createElement(_UserMenuContent.default, {
85
+ onLogOut: onLogOut,
86
+ instance: instance,
87
+ diskUsage: diskUsage
88
+ })));
89
+ };
90
+
91
+ var _default = UserMenu;
92
+ exports.default = _default;
package/dist/index.js CHANGED
@@ -82,5 +82,5 @@ var _BarProvider = _interopRequireDefault(require("./components/BarProvider"));
82
82
  var _reducers = require("./lib/reducers");
83
83
 
84
84
  /* global __VERSION__ */
85
- var version = "\"17.1.0\"";
85
+ var version = "\"18.1.0\"";
86
86
  exports.version = version;
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.buildMyselfQuery = void 0;
7
+
8
+ var _cozyClient = require("cozy-client");
9
+
10
+ var buildMyselfQuery = function buildMyselfQuery() {
11
+ return {
12
+ definition: (0, _cozyClient.Q)('io.cozy.contacts').where({
13
+ me: true
14
+ }),
15
+ options: {
16
+ as: 'io.cozy.contacts/myself'
17
+ }
18
+ };
19
+ };
20
+
21
+ exports.buildMyselfQuery = buildMyselfQuery;
@@ -49,5 +49,13 @@
49
49
  "moved": {
50
50
  "description": "The Cozy has been moved to a new address"
51
51
  }
52
+ },
53
+ "userMenu": {
54
+ "addAccount": "Add account",
55
+ "manageProfile": "Manage profile",
56
+ "createBusinessAccount": "Create business account",
57
+ "storage": "Storage",
58
+ "storageAvailable": "%{smart_count} GB available",
59
+ "logOut": "Log out"
52
60
  }
53
61
  }
@@ -49,5 +49,13 @@
49
49
  "moved": {
50
50
  "description": "Ce Cozy a été déplacé vers une nouvelle adresse"
51
51
  }
52
+ },
53
+ "userMenu": {
54
+ "addAccount": "Ajouter un compte",
55
+ "manageProfile": "Gérer mon profil",
56
+ "createBusinessAccount": "Créer un compte entreprise",
57
+ "storage": "Stockage",
58
+ "storageAvailable": "%{smart_count} Go disponible",
59
+ "logOut": "Se déconnecter"
52
60
  }
53
61
  }
@@ -0,0 +1,20 @@
1
+ .apps-menu-grid
2
+ display flex
3
+ flex-wrap wrap
4
+ width 100%
5
+ box-sizing border-box
6
+ padding-left .5rem
7
+ padding-right .5rem
8
+
9
+ .apps-menu-grid-item-wrapper
10
+ width 33%
11
+ aspect-ratio 1 // @stylint ignore Property is valid but unknown by stylint which is old and should be replaced
12
+
13
+ .apps-menu-grid-item
14
+ display flex
15
+ flex-direction column
16
+ justify-content center
17
+ align-items center
18
+ text-decoration none
19
+ width 60%
20
+ min-width 48px
@@ -0,0 +1,10 @@
1
+ @require 'settings/breakpoints'
2
+
3
+ .user-menu-content
4
+ width auto
5
+
6
+ +desktop()
7
+ width 320px
8
+
9
+ .user-menu-content-add-account
10
+ width calc(100% - 32px)
@@ -1,3 +1,39 @@
1
+ /* imported from apps-menu.styl */
2
+
3
+ .apps-menu-grid {
4
+ display: flex;
5
+ flex-wrap: wrap;
6
+ width: 100%;
7
+ box-sizing: border-box;
8
+ padding-left: 0.5rem;
9
+ padding-right: 0.5rem;
10
+ }
11
+ .apps-menu-grid-item-wrapper {
12
+ width: 33%;
13
+ aspect-ratio: 1;
14
+ }
15
+ .apps-menu-grid-item {
16
+ display: flex;
17
+ flex-direction: column;
18
+ justify-content: center;
19
+ align-items: center;
20
+ text-decoration: none;
21
+ width: 60%;
22
+ min-width: 48px;
23
+ }
24
+ /* imported from user-menu.styl */
25
+
26
+ .user-menu-content {
27
+ width: auto;
28
+ }
29
+ @media (min-width: 64rem) {
30
+ .user-menu-content {
31
+ width: 320px;
32
+ }
33
+ }
34
+ .user-menu-content-add-account {
35
+ width: calc(100% - 32px);
36
+ }
1
37
  /* imported from index.styl */
2
38
 
3
39
  [role=banner] .coz-sep-flex {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cozy-bar",
3
- "version": "17.1.0",
3
+ "version": "18.1.0",
4
4
  "description": "cozy-bar.js library, a small lib provided by cozy-stack to inject the Cozy-bar component into each app",
5
5
  "main": "dist/index.js",
6
6
  "author": "Cozy Cloud <contact@cozycloud.cc> (https://cozy.io/)",
@@ -20,7 +20,9 @@
20
20
  "build": "env BABEL_ENV=transpilation babel ./src -d ./dist --extensions .js,.jsx --ignore '**/*.spec.jsx','**/*.spec.js' --copy-files",
21
21
  "prepublishOnly": "yarn build",
22
22
  "clean": "rm -rf ./dist/*",
23
- "lint": "eslint '{config,src,examples,test}/**/*.{js,jsx}'",
23
+ "lint": "yarn lint:js && yarn lint:styles",
24
+ "lint:js": "eslint '{config,src,examples,test}/**/*.{js,jsx}'",
25
+ "lint:styles": "stylint src --config ./node_modules/stylus-config-cozy-app/.stylintrc",
24
26
  "prebuild": "npm-run-all clean",
25
27
  "prewatch": "npm-run-all clean",
26
28
  "tx": "tx pull --all || true",
@@ -41,7 +43,7 @@
41
43
  "babel-plugin-module-resolver": "^4.0.0",
42
44
  "babel-plugin-transform-define": "^2.0.0",
43
45
  "babel-preset-cozy-app": "^1.9.0",
44
- "cozy-client": "^51.1.0",
46
+ "cozy-client": "^52.1.0",
45
47
  "cozy-dataproxy-lib": "^4.1.0",
46
48
  "cozy-device-helper": "2.6.0",
47
49
  "cozy-flags": "^4.6.1",
@@ -49,7 +51,7 @@
49
51
  "cozy-interapp": "0.4.9",
50
52
  "cozy-logger": "1.9.1",
51
53
  "cozy-realtime": "^4.0.5",
52
- "cozy-ui": "^111.12.0",
54
+ "cozy-ui": "^121.8.0",
53
55
  "eslint-config-cozy-app": "2.0.0",
54
56
  "identity-obj-proxy": "3.0.0",
55
57
  "jest": "24.9.0",
@@ -58,10 +60,12 @@
58
60
  "react-dom": "16.10.1",
59
61
  "react-router-dom": "6.14.2",
60
62
  "semantic-release": "15.13.24",
61
- "stylus": "0.57.0"
63
+ "stylint": "^2.0.0",
64
+ "stylus": "0.57.0",
65
+ "stylus-config-cozy-app": "^0.1.0"
62
66
  },
63
67
  "dependencies": {
64
- "cozy-search": "0.1.0",
68
+ "cozy-search": "0.2.0",
65
69
  "hammerjs": "2.0.8",
66
70
  "lodash.debounce": "4.0.8",
67
71
  "lodash.set": "^4.3.2",
@@ -75,14 +79,14 @@
75
79
  },
76
80
  "peerDependencies": {
77
81
  "@cozy/minilog": ">=1.0.0",
78
- "cozy-client": ">=51.1.0",
82
+ "cozy-client": ">=52.1.0",
79
83
  "cozy-dataproxy-lib": ">=4.1.0",
80
84
  "cozy-device-helper": ">=2.6.0",
81
85
  "cozy-flags": ">=4.6.1",
82
86
  "cozy-intent": ">=2.29.1",
83
87
  "cozy-interapp": ">=0.4.9",
84
88
  "cozy-realtime": ">=4.0.5",
85
- "cozy-ui": ">=111.12.0",
89
+ "cozy-ui": ">=121.8.0",
86
90
  "react": ">=16.10.1",
87
91
  "react-dom": ">=16.10.1",
88
92
  "react-router-dom": ">=6.14.2"