cozy-search 0.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.
Files changed (85) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +89 -0
  3. package/dist/components/AssistantDesktop.d.ts +16 -0
  4. package/dist/components/AssistantDesktop.js +44 -0
  5. package/dist/components/AssistantIcon/AssistantIcon.d.ts +6 -0
  6. package/dist/components/AssistantIcon/AssistantIcon.js +43 -0
  7. package/dist/components/AssistantMobile.d.ts +2 -0
  8. package/dist/components/AssistantMobile.js +50 -0
  9. package/dist/components/AssistantProvider.d.ts +7 -0
  10. package/dist/components/AssistantProvider.js +174 -0
  11. package/dist/components/Conversations/ChatAssistantItem.d.ts +8 -0
  12. package/dist/components/Conversations/ChatAssistantItem.js +53 -0
  13. package/dist/components/Conversations/ChatConversation.d.ts +5 -0
  14. package/dist/components/Conversations/ChatConversation.js +110 -0
  15. package/dist/components/Conversations/ChatItem.d.ts +7 -0
  16. package/dist/components/Conversations/ChatItem.js +39 -0
  17. package/dist/components/Conversations/ChatItemLabel.d.ts +5 -0
  18. package/dist/components/Conversations/ChatItemLabel.js +29 -0
  19. package/dist/components/Conversations/ChatRealtimeAnswer.d.ts +5 -0
  20. package/dist/components/Conversations/ChatRealtimeAnswer.js +30 -0
  21. package/dist/components/Conversations/ChatUserItem.d.ts +7 -0
  22. package/dist/components/Conversations/ChatUserItem.js +41 -0
  23. package/dist/components/Conversations/Conversation.d.ts +4 -0
  24. package/dist/components/Conversations/Conversation.js +41 -0
  25. package/dist/components/Conversations/ConversationBar.d.ts +4 -0
  26. package/dist/components/Conversations/ConversationBar.js +164 -0
  27. package/dist/components/Conversations/Sources/Sources.d.ts +5 -0
  28. package/dist/components/Conversations/Sources/Sources.js +134 -0
  29. package/dist/components/Conversations/Sources/SourcesItem.d.ts +4 -0
  30. package/dist/components/Conversations/Sources/SourcesItem.js +55 -0
  31. package/dist/components/Conversations/Sources/styles.styl +5 -0
  32. package/dist/components/Conversations/styles.styl +15 -0
  33. package/dist/components/ResultMenu/NoResultItem.d.ts +2 -0
  34. package/dist/components/ResultMenu/NoResultItem.js +30 -0
  35. package/dist/components/ResultMenu/NotEnoughItem.d.ts +2 -0
  36. package/dist/components/ResultMenu/NotEnoughItem.js +30 -0
  37. package/dist/components/ResultMenu/ResultMenu.d.ts +6 -0
  38. package/dist/components/ResultMenu/ResultMenu.js +47 -0
  39. package/dist/components/ResultMenu/ResultMenuContent.d.ts +3 -0
  40. package/dist/components/ResultMenu/ResultMenuContent.js +117 -0
  41. package/dist/components/ResultMenu/ResultMenuItem.d.ts +12 -0
  42. package/dist/components/ResultMenu/ResultMenuItem.js +65 -0
  43. package/dist/components/ResultMenu/SuggestionItemTextHighlighted.d.ts +5 -0
  44. package/dist/components/ResultMenu/SuggestionItemTextHighlighted.js +100 -0
  45. package/dist/components/ResultMenu/SuggestionItemTextSecondary.d.ts +7 -0
  46. package/dist/components/ResultMenu/SuggestionItemTextSecondary.js +70 -0
  47. package/dist/components/ResultMenu/styles.styl +8 -0
  48. package/dist/components/Search/EncryptedFolderIcon.d.ts +2 -0
  49. package/dist/components/Search/EncryptedFolderIcon.js +34 -0
  50. package/dist/components/Search/SearchBar.d.ts +4 -0
  51. package/dist/components/Search/SearchBar.js +71 -0
  52. package/dist/components/Search/SearchBarDesktop.d.ts +15 -0
  53. package/dist/components/Search/SearchBarDesktop.js +167 -0
  54. package/dist/components/Search/SearchBarMobile.d.ts +6 -0
  55. package/dist/components/Search/SearchBarMobile.js +71 -0
  56. package/dist/components/Search/SearchProvider.d.ts +7 -0
  57. package/dist/components/Search/SearchProvider.js +81 -0
  58. package/dist/components/Search/SearchSubmitFab.d.ts +5 -0
  59. package/dist/components/Search/SearchSubmitFab.js +59 -0
  60. package/dist/components/Search/SuggestionsPlaceholder.d.ts +2 -0
  61. package/dist/components/Search/SuggestionsPlaceholder.js +55 -0
  62. package/dist/components/Search/getFileMimetype.d.ts +1 -0
  63. package/dist/components/Search/getFileMimetype.js +54 -0
  64. package/dist/components/Search/getIconForSearchResult.d.ts +12 -0
  65. package/dist/components/Search/getIconForSearchResult.js +127 -0
  66. package/dist/components/Search/styles.styl +7 -0
  67. package/dist/components/Search/useFetchResult.d.ts +4 -0
  68. package/dist/components/Search/useFetchResult.js +191 -0
  69. package/dist/components/Views/AssistantDialog.d.ts +2 -0
  70. package/dist/components/Views/AssistantDialog.js +79 -0
  71. package/dist/components/Views/SearchDialog.d.ts +2 -0
  72. package/dist/components/Views/SearchDialog.js +96 -0
  73. package/dist/components/helpers.d.ts +5 -0
  74. package/dist/components/helpers.js +58 -0
  75. package/dist/components/queries.d.ts +25 -0
  76. package/dist/components/queries.js +58 -0
  77. package/dist/components/styles.styl +18 -0
  78. package/dist/index.d.ts +4 -0
  79. package/dist/index.js +39 -0
  80. package/dist/locales/en.json +21 -0
  81. package/dist/locales/fr.json +21 -0
  82. package/dist/locales/index.d.ts +6 -0
  83. package/dist/locales/index.js +53 -0
  84. package/dist/stylesheet.css +48 -0
  85. package/package.json +91 -0
@@ -0,0 +1,167 @@
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 = _interopRequireWildcard(require("react"));
11
+
12
+ var _reactRouterDom = require("react-router-dom");
13
+
14
+ var _ClickAwayListener = _interopRequireDefault(require("cozy-ui/transpiled/react/ClickAwayListener"));
15
+
16
+ var _Icon = _interopRequireDefault(require("cozy-ui/transpiled/react/Icon"));
17
+
18
+ var _SearchBar = _interopRequireDefault(require("cozy-ui/transpiled/react/SearchBar"));
19
+
20
+ var _I18n = require("cozy-ui/transpiled/react/providers/I18n");
21
+
22
+ var _SearchProvider = require("./SearchProvider");
23
+
24
+ var _AssistantIcon = require("../AssistantIcon/AssistantIcon");
25
+
26
+ var _AssistantProvider = require("../AssistantProvider");
27
+
28
+ var _ResultMenu = _interopRequireDefault(require("../ResultMenu/ResultMenu"));
29
+
30
+ var _helpers = require("../helpers");
31
+
32
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
33
+
34
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
35
+
36
+ var styles = {
37
+ "searchBarDesktop--result": "styles__searchBarDesktop--result___2bQQy",
38
+ "suggestionsPlaceholder": "styles__suggestionsPlaceholder___y-vsv"
39
+ };
40
+
41
+ var SearchBarDesktop = function SearchBarDesktop(_ref) {
42
+ var value = _ref.value,
43
+ onClear = _ref.onClear,
44
+ onChange = _ref.onChange,
45
+ elevation = _ref.elevation,
46
+ size = _ref.size,
47
+ hasHalfBorderRadius = _ref.hasHalfBorderRadius;
48
+
49
+ var _useI18n = (0, _I18n.useI18n)(),
50
+ t = _useI18n.t;
51
+
52
+ var _useSearch = (0, _SearchProvider.useSearch)(),
53
+ searchValue = _useSearch.searchValue,
54
+ results = _useSearch.results,
55
+ selectedIndex = _useSearch.selectedIndex,
56
+ setSelectedIndex = _useSearch.setSelectedIndex;
57
+
58
+ var _useAssistant = (0, _AssistantProvider.useAssistant)(),
59
+ onAssistantExecute = _useAssistant.onAssistantExecute;
60
+
61
+ var navigate = (0, _reactRouterDom.useNavigate)();
62
+ var searchRef = (0, _react.useRef)();
63
+ var listRef = (0, _react.useRef)();
64
+
65
+ var handleClick = function handleClick() {
66
+ if (!(0, _helpers.isAssistantEnabled)()) return;
67
+ var conversationId = (0, _helpers.makeConversationId)();
68
+ onAssistantExecute({
69
+ value: value,
70
+ conversationId: conversationId
71
+ });
72
+ navigate("assistant/".concat(conversationId)); // setTimeout usefull to prevent the field from emptying before the route is changed
73
+ // works because the modal appears on top of the view that carries the input and not instead of it.
74
+
75
+ setTimeout(function () {
76
+ onClear();
77
+ }, 100);
78
+ };
79
+
80
+ var handleKeyDown = function handleKeyDown(ev) {
81
+ var _listRef$current;
82
+
83
+ var listElementCount = (_listRef$current = listRef.current) === null || _listRef$current === void 0 ? void 0 : _listRef$current.childElementCount;
84
+
85
+ if (ev.key === 'ArrowDown') {
86
+ ev.preventDefault();
87
+
88
+ if (selectedIndex === listElementCount - 1) {
89
+ setSelectedIndex(0);
90
+ } else {
91
+ setSelectedIndex(function (v) {
92
+ return v + 1;
93
+ });
94
+ }
95
+ }
96
+
97
+ if (ev.key === 'ArrowUp') {
98
+ ev.preventDefault();
99
+
100
+ if (selectedIndex === 0) {
101
+ setSelectedIndex(listElementCount - 1);
102
+ } else {
103
+ setSelectedIndex(function (v) {
104
+ return v - 1;
105
+ });
106
+ }
107
+ }
108
+
109
+ if (ev.key === 'Escape') {
110
+ ev.preventDefault();
111
+ onClear();
112
+ }
113
+
114
+ if (ev.key === 'Enter') {
115
+ ev.preventDefault();
116
+
117
+ if (selectedIndex) {
118
+ var _results;
119
+
120
+ var onClickFn = (results === null || results === void 0 ? void 0 : (_results = results[selectedIndex - 1]) === null || _results === void 0 ? void 0 : _results.onClick) || handleClick;
121
+ onClickFn();
122
+ } else if (value !== '') {
123
+ handleClick();
124
+ }
125
+ }
126
+ };
127
+
128
+ return /*#__PURE__*/_react.default.createElement(_ClickAwayListener.default, {
129
+ onClickAway: onClear
130
+ }, /*#__PURE__*/_react.default.createElement("span", null, /*#__PURE__*/_react.default.createElement(_SearchBar.default, {
131
+ elevation: elevation,
132
+ className: searchValue && hasHalfBorderRadius ? styles['searchBarDesktop--result'] : '',
133
+ ref: searchRef,
134
+ size: size,
135
+ icon: size === 'large' ? /*#__PURE__*/_react.default.createElement(_Icon.default, {
136
+ className: "u-mh-1",
137
+ icon: _AssistantIcon.AssistantIcon,
138
+ size: 32
139
+ }) : /*#__PURE__*/_react.default.createElement(_Icon.default, {
140
+ className: "u-ml-1 u-mr-half",
141
+ icon: _AssistantIcon.AssistantIcon,
142
+ size: 24
143
+ }),
144
+ placeholder: (0, _helpers.isAssistantEnabled)() ? t('assistant.search.placeholder') : undefined // fallback on SearchBar default
145
+ ,
146
+ value: value,
147
+ componentsProps: {
148
+ inputBase: {
149
+ onKeyDown: handleKeyDown
150
+ }
151
+ },
152
+ disabledClear: true,
153
+ disabledFocus: value !== '',
154
+ onChange: onChange
155
+ }), searchValue && /*#__PURE__*/_react.default.createElement(_ResultMenu.default, {
156
+ listRef: listRef,
157
+ anchorRef: searchRef,
158
+ onClick: handleClick
159
+ })));
160
+ };
161
+
162
+ SearchBarDesktop.defaultProps = {
163
+ size: 'large',
164
+ elevation: false
165
+ };
166
+ var _default = SearchBarDesktop;
167
+ exports.default = _default;
@@ -0,0 +1,6 @@
1
+ export default SearchBarMobile;
2
+ declare function SearchBarMobile({ value, onClear, onChange }: {
3
+ value: any;
4
+ onClear: any;
5
+ onChange: any;
6
+ }): JSX.Element;
@@ -0,0 +1,71 @@
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 = _interopRequireWildcard(require("react"));
11
+
12
+ var _SearchBar = _interopRequireDefault(require("cozy-ui/transpiled/react/SearchBar"));
13
+
14
+ var _useEventListener = _interopRequireDefault(require("cozy-ui/transpiled/react/hooks/useEventListener"));
15
+
16
+ var _SuggestionsPlaceholder = _interopRequireDefault(require("./SuggestionsPlaceholder"));
17
+
18
+ var _helpers = require("../helpers");
19
+
20
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
21
+
22
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
23
+
24
+ var styles = {
25
+ "conversationBar": "styles__conversationBar___2J-Us",
26
+ "conversationBar-input": "styles__conversationBar-input___2DfdZ"
27
+ };
28
+
29
+ var SearchBarMobile = function SearchBarMobile(_ref) {
30
+ var value = _ref.value,
31
+ onClear = _ref.onClear,
32
+ onChange = _ref.onChange;
33
+ var inputRef = (0, _react.useRef)(); // to adjust input height for multiline when typing in it
34
+
35
+ (0, _useEventListener.default)(inputRef.current, 'input', function () {
36
+ inputRef.current.style.height = 'auto'; // to resize input when emptying it
37
+
38
+ inputRef.current.style.height = "".concat(inputRef.current.scrollHeight, "px");
39
+ });
40
+
41
+ var handleClear = function handleClear() {
42
+ onClear();
43
+ inputRef.current.style.height = 'auto';
44
+ };
45
+
46
+ return /*#__PURE__*/_react.default.createElement(_SearchBar.default, {
47
+ className: styles['conversationBar'],
48
+ size: "auto",
49
+ icon: null,
50
+ placeholder: (0, _helpers.isAssistantEnabled)() ? ' ' : undefined // if assistant enabled, we set a blank space because we want only the SuggestionsPlaceholder below
51
+ ,
52
+ value: value,
53
+ componentsProps: {
54
+ inputBase: {
55
+ inputProps: {
56
+ className: styles['conversationBar-input']
57
+ },
58
+ inputRef: inputRef,
59
+ autoFocus: true,
60
+ rows: 1,
61
+ multiline: true,
62
+ startAdornment: (0, _helpers.isAssistantEnabled)() && !value && /*#__PURE__*/_react.default.createElement(_SuggestionsPlaceholder.default, null)
63
+ }
64
+ },
65
+ onChange: onChange,
66
+ onClear: handleClear
67
+ });
68
+ };
69
+
70
+ var _default = SearchBarMobile;
71
+ exports.default = _default;
@@ -0,0 +1,7 @@
1
+ export const SearchContext: React.Context<any>;
2
+ export function useSearch(): any;
3
+ declare const _default: React.MemoExoticComponent<({ children }: {
4
+ children: any;
5
+ }) => JSX.Element>;
6
+ export default _default;
7
+ import React from 'react';
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.useSearch = exports.default = exports.SearchContext = void 0;
9
+
10
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
11
+
12
+ var _debounce = _interopRequireDefault(require("lodash/debounce"));
13
+
14
+ var _react = _interopRequireWildcard(require("react"));
15
+
16
+ var _useFetchResult2 = require("./useFetchResult");
17
+
18
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
19
+
20
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
21
+
22
+ var SearchContext = /*#__PURE__*/_react.default.createContext();
23
+
24
+ exports.SearchContext = SearchContext;
25
+
26
+ var useSearch = function useSearch() {
27
+ var context = (0, _react.useContext)(SearchContext);
28
+
29
+ if (!context) {
30
+ throw new Error('useSearch must be used within a SearchProvider');
31
+ }
32
+
33
+ return context;
34
+ };
35
+
36
+ exports.useSearch = useSearch;
37
+
38
+ var SearchProvider = function SearchProvider(_ref) {
39
+ var children = _ref.children;
40
+
41
+ var _useState = (0, _react.useState)(''),
42
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
43
+ searchValue = _useState2[0],
44
+ setSearchValue = _useState2[1];
45
+
46
+ var _useState3 = (0, _react.useState)(),
47
+ _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
48
+ selectedIndex = _useState4[0],
49
+ setSelectedIndex = _useState4[1];
50
+
51
+ var _useFetchResult = (0, _useFetchResult2.useFetchResult)(searchValue),
52
+ isLoading = _useFetchResult.isLoading,
53
+ results = _useFetchResult.results;
54
+
55
+ var delayedSetSearchValue = (0, _react.useMemo)(function () {
56
+ return (0, _debounce.default)(setSearchValue, 250);
57
+ }, [setSearchValue]);
58
+ var clearSearch = (0, _react.useCallback)(function () {
59
+ setSearchValue('');
60
+ setSelectedIndex();
61
+ }, []);
62
+ var value = (0, _react.useMemo)(function () {
63
+ return {
64
+ searchValue: searchValue,
65
+ setSearchValue: setSearchValue,
66
+ delayedSetSearchValue: delayedSetSearchValue,
67
+ isLoading: isLoading,
68
+ clearSearch: clearSearch,
69
+ selectedIndex: selectedIndex,
70
+ setSelectedIndex: setSelectedIndex,
71
+ results: results
72
+ };
73
+ }, [searchValue, delayedSetSearchValue, isLoading, clearSearch, selectedIndex, results]);
74
+ return /*#__PURE__*/_react.default.createElement(SearchContext.Provider, {
75
+ value: value
76
+ }, children);
77
+ };
78
+
79
+ var _default = /*#__PURE__*/_react.default.memo(SearchProvider);
80
+
81
+ exports.default = _default;
@@ -0,0 +1,5 @@
1
+ export default SearchSubmitFab;
2
+ declare function SearchSubmitFab({ searchValue, onClick }: {
3
+ searchValue: any;
4
+ onClick: any;
5
+ }): JSX.Element;
@@ -0,0 +1,59 @@
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 _cozyDeviceHelper = require("cozy-device-helper");
13
+
14
+ var _Fab = _interopRequireDefault(require("cozy-ui/transpiled/react/Fab"));
15
+
16
+ var _Icon = _interopRequireDefault(require("cozy-ui/transpiled/react/Icon"));
17
+
18
+ var _Paperplane = _interopRequireDefault(require("cozy-ui/transpiled/react/Icons/Paperplane"));
19
+
20
+ var _I18n = require("cozy-ui/transpiled/react/providers/I18n");
21
+
22
+ var _styles = require("cozy-ui/transpiled/react/styles");
23
+
24
+ var useStyles = (0, _styles.makeStyles)({
25
+ root: {
26
+ right: '1rem',
27
+ bottom: '1rem',
28
+ position: 'fixed',
29
+ marginBottom: function marginBottom(_ref) {
30
+ var immersive = _ref.immersive;
31
+ return immersive ? 'var(--flagship-bottom-height)' : 0;
32
+ }
33
+ }
34
+ });
35
+
36
+ var SearchSubmitFab = function SearchSubmitFab(_ref2) {
37
+ var searchValue = _ref2.searchValue,
38
+ onClick = _ref2.onClick;
39
+
40
+ var _useI18n = (0, _I18n.useI18n)(),
41
+ t = _useI18n.t;
42
+
43
+ var styles = useStyles({
44
+ immersive: (0, _cozyDeviceHelper.getFlagshipMetadata)().immersive
45
+ });
46
+ return /*#__PURE__*/_react.default.createElement(_Fab.default, {
47
+ "aria-label": t('assistant.search.send'),
48
+ color: "primary",
49
+ size: "medium",
50
+ classes: styles,
51
+ disabled: !searchValue,
52
+ onClick: onClick
53
+ }, /*#__PURE__*/_react.default.createElement(_Icon.default, {
54
+ icon: _Paperplane.default
55
+ }));
56
+ };
57
+
58
+ var _default = SearchSubmitFab;
59
+ exports.default = _default;
@@ -0,0 +1,2 @@
1
+ export default SuggestionsPlaceholder;
2
+ declare function SuggestionsPlaceholder(): JSX.Element;
@@ -0,0 +1,55 @@
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 _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
11
+
12
+ var _react = _interopRequireWildcard(require("react"));
13
+
14
+ var _reactTypeAnimation = require("react-type-animation");
15
+
16
+ var _rooks = require("rooks");
17
+
18
+ var _Typography = _interopRequireDefault(require("cozy-ui/transpiled/react/Typography"));
19
+
20
+ var _I18n = require("cozy-ui/transpiled/react/providers/I18n");
21
+
22
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
23
+
24
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
25
+
26
+ var styles = {
27
+ "searchBarDesktop--result": "styles__searchBarDesktop--result___2bQQy",
28
+ "suggestionsPlaceholder": "styles__suggestionsPlaceholder___y-vsv"
29
+ };
30
+
31
+ var SuggestionsPlaceholder = function SuggestionsPlaceholder() {
32
+ var _useI18n = (0, _I18n.useI18n)(),
33
+ t = _useI18n.t;
34
+
35
+ var _useState = (0, _react.useState)(false),
36
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
37
+ showSuggestions = _useState2[0],
38
+ setShowSuggestions = _useState2[1];
39
+
40
+ (0, _rooks.useTimeoutWhen)(function () {
41
+ return setShowSuggestions(true);
42
+ }, 2500);
43
+ return /*#__PURE__*/_react.default.createElement("div", {
44
+ className: styles['suggestionsPlaceholder']
45
+ }, /*#__PURE__*/_react.default.createElement(_Typography.default, null, showSuggestions ? /*#__PURE__*/_react.default.createElement(_reactTypeAnimation.TypeAnimation, {
46
+ cursor: false,
47
+ sequence: [t('assistant.suggestions.find_file'), 2500, t('assistant.suggestions.reimbursements'), 2500, t('assistant.suggestions.reorganise_files'), 2500],
48
+ speed: 40,
49
+ repeat: Infinity,
50
+ omitDeletionAnimation: true
51
+ }) : t('assistant.search.placeholder')));
52
+ };
53
+
54
+ var _default = SuggestionsPlaceholder;
55
+ exports.default = _default;
@@ -0,0 +1 @@
1
+ export function getFileMimetype(collection: any): (mime?: string, name?: string) => any;
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.getFileMimetype = void 0;
9
+
10
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
11
+
12
+ var _mimeTypes = _interopRequireDefault(require("mime-types"));
13
+
14
+ var getMimetypeFromFilename = function getMimetypeFromFilename(name) {
15
+ return _mimeTypes.default.lookup(name) || 'application/octet-stream';
16
+ };
17
+
18
+ var mappingMimetypeSubtype = {
19
+ word: 'text',
20
+ text: 'text',
21
+ zip: 'zip',
22
+ pdf: 'pdf',
23
+ spreadsheet: 'sheet',
24
+ excel: 'sheet',
25
+ sheet: 'sheet',
26
+ presentation: 'slide',
27
+ powerpoint: 'slide'
28
+ };
29
+
30
+ var getFileMimetype = function getFileMimetype(collection) {
31
+ return function () {
32
+ var mime = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
33
+ var name = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
34
+ var mimetype = mime === 'application/octet-stream' ? getMimetypeFromFilename(name.toLowerCase()) : mime;
35
+
36
+ var _mimetype$split = mimetype.split('/'),
37
+ _mimetype$split2 = (0, _slicedToArray2.default)(_mimetype$split, 2),
38
+ type = _mimetype$split2[0],
39
+ subtype = _mimetype$split2[1];
40
+
41
+ if (collection[type]) {
42
+ return type;
43
+ }
44
+
45
+ if (type === 'application') {
46
+ var existingType = subtype.match(Object.keys(mappingMimetypeSubtype).join('|'));
47
+ return existingType ? mappingMimetypeSubtype[existingType[0]] : undefined;
48
+ }
49
+
50
+ return undefined;
51
+ };
52
+ };
53
+
54
+ exports.getFileMimetype = getFileMimetype;
@@ -0,0 +1,12 @@
1
+ export function getIconForSearchResult(searchResult: any): {
2
+ type: string;
3
+ app: any;
4
+ component?: undefined;
5
+ } | {
6
+ type: string;
7
+ component: any;
8
+ app?: undefined;
9
+ };
10
+ export function getDriveMimeTypeIcon(isDirectory: boolean, name: string, mime: string, { isEncrypted }?: {
11
+ isEncrypted?: boolean | undefined;
12
+ } | undefined): import("react").ReactNode;
@@ -0,0 +1,127 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.getIconForSearchResult = exports.getDriveMimeTypeIcon = void 0;
9
+
10
+ var _get = _interopRequireDefault(require("lodash/get"));
11
+
12
+ var _Contacts = _interopRequireDefault(require("cozy-ui/transpiled/react/Icons/Contacts"));
13
+
14
+ var _FileTypeAudio = _interopRequireDefault(require("cozy-ui/transpiled/react/Icons/FileTypeAudio"));
15
+
16
+ var _FileTypeBin = _interopRequireDefault(require("cozy-ui/transpiled/react/Icons/FileTypeBin"));
17
+
18
+ var _FileTypeCode = _interopRequireDefault(require("cozy-ui/transpiled/react/Icons/FileTypeCode"));
19
+
20
+ var _FileTypeFiles = _interopRequireDefault(require("cozy-ui/transpiled/react/Icons/FileTypeFiles"));
21
+
22
+ var _FileTypeFolder = _interopRequireDefault(require("cozy-ui/transpiled/react/Icons/FileTypeFolder"));
23
+
24
+ var _FileTypeImage = _interopRequireDefault(require("cozy-ui/transpiled/react/Icons/FileTypeImage"));
25
+
26
+ var _FileTypeNote = _interopRequireDefault(require("cozy-ui/transpiled/react/Icons/FileTypeNote"));
27
+
28
+ var _FileTypePdf = _interopRequireDefault(require("cozy-ui/transpiled/react/Icons/FileTypePdf"));
29
+
30
+ var _FileTypeSheet = _interopRequireDefault(require("cozy-ui/transpiled/react/Icons/FileTypeSheet"));
31
+
32
+ var _FileTypeSlide = _interopRequireDefault(require("cozy-ui/transpiled/react/Icons/FileTypeSlide"));
33
+
34
+ var _FileTypeText = _interopRequireDefault(require("cozy-ui/transpiled/react/Icons/FileTypeText"));
35
+
36
+ var _FileTypeVideo = _interopRequireDefault(require("cozy-ui/transpiled/react/Icons/FileTypeVideo"));
37
+
38
+ var _FileTypeZip = _interopRequireDefault(require("cozy-ui/transpiled/react/Icons/FileTypeZip"));
39
+
40
+ var _EncryptedFolderIcon = _interopRequireDefault(require("./EncryptedFolderIcon"));
41
+
42
+ var _getFileMimetype = require("./getFileMimetype");
43
+
44
+ var getIconForSearchResult = function getIconForSearchResult(searchResult) {
45
+ if (searchResult.doc._type === 'io.cozy.apps') {
46
+ return {
47
+ type: 'app',
48
+ app: searchResult.doc
49
+ };
50
+ }
51
+
52
+ if (searchResult.slug === 'notes') {
53
+ return {
54
+ type: 'component',
55
+ component: _FileTypeNote.default
56
+ };
57
+ }
58
+
59
+ if (searchResult.slug === 'drive') {
60
+ return {
61
+ type: 'component',
62
+ component: getDriveMimeTypeIcon(searchResult.doc.type === 'directory', searchResult.doc.name, searchResult.doc.mime)
63
+ };
64
+ }
65
+
66
+ if (searchResult.slug === 'contacts') {
67
+ return {
68
+ type: 'component',
69
+ component: _Contacts.default
70
+ };
71
+ }
72
+
73
+ return {
74
+ type: 'component',
75
+ component: _FileTypeFiles.default
76
+ };
77
+ };
78
+ /**
79
+ * Returns the appropriate icon for a given file based on its mime type and other properties.
80
+ *
81
+ * This method has been copied from cozy-drive
82
+ *
83
+ * See source: https://github.com/cozy/cozy-drive/blob/fbe2df67199683b23a40f476ccdacb00ee027459/src/lib/getMimeTypeIcon.js
84
+ *
85
+ * @param {boolean} isDirectory - Indicates whether the file is a directory.
86
+ * @param {string} name - The name of the file.
87
+ * @param {string} mime - The mime type of the file.
88
+ * @param {Object} [options] - Additional options.
89
+ * @param {boolean} [options.isEncrypted] - Indicates whether the file is encrypted. Default is false.
90
+ * @returns {import('react').ReactNode} - The icon corresponding to the file's mime type.
91
+ */
92
+
93
+
94
+ exports.getIconForSearchResult = getIconForSearchResult;
95
+
96
+ var getDriveMimeTypeIcon = function getDriveMimeTypeIcon(isDirectory, name, mime) {
97
+ var _ref = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {},
98
+ _ref$isEncrypted = _ref.isEncrypted,
99
+ isEncrypted = _ref$isEncrypted === void 0 ? false : _ref$isEncrypted;
100
+
101
+ if (isEncrypted) {
102
+ return _EncryptedFolderIcon.default;
103
+ }
104
+
105
+ if (isDirectory) {
106
+ return _FileTypeFolder.default;
107
+ } else if (/\.cozy-note$/.test(name)) {
108
+ return _FileTypeNote.default;
109
+ } else {
110
+ var iconsByMimeType = {
111
+ audio: _FileTypeAudio.default,
112
+ bin: _FileTypeBin.default,
113
+ code: _FileTypeCode.default,
114
+ image: _FileTypeImage.default,
115
+ pdf: _FileTypePdf.default,
116
+ slide: _FileTypeSlide.default,
117
+ sheet: _FileTypeSheet.default,
118
+ text: _FileTypeText.default,
119
+ video: _FileTypeVideo.default,
120
+ zip: _FileTypeZip.default
121
+ };
122
+ var type = (0, _getFileMimetype.getFileMimetype)(iconsByMimeType)(mime, name);
123
+ return (0, _get.default)(iconsByMimeType, type, _FileTypeFiles.default);
124
+ }
125
+ };
126
+
127
+ exports.getDriveMimeTypeIcon = getDriveMimeTypeIcon;
@@ -0,0 +1,7 @@
1
+ .searchBarDesktop--result
2
+ border-radius 28px 28px 0 0 !important
3
+
4
+ .suggestionsPlaceholder
5
+ position absolute
6
+ opacity 0.42
7
+ pointer-events none
@@ -0,0 +1,4 @@
1
+ export function useFetchResult(searchValue: any): {
2
+ isLoading: boolean;
3
+ results: null;
4
+ };