cozy-search 2.6.2 → 2.7.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 (58) hide show
  1. package/dist/components/Assistant/AssistantAvatar.js +3 -1
  2. package/dist/components/Assistant/AssistantContainer.js +3 -1
  3. package/dist/components/Assistant/AssistantMenu.d.ts +16 -0
  4. package/dist/components/Assistant/AssistantMenu.js +160 -0
  5. package/dist/components/Assistant/AssistantSelection.d.ts +12 -1
  6. package/dist/components/Assistant/AssistantSelection.js +55 -115
  7. package/dist/components/Assistant/AssistantSelectionItem.js +3 -1
  8. package/dist/components/Assistant/AssistantSidebarItem.d.ts +9 -0
  9. package/dist/components/Assistant/AssistantSidebarItem.js +108 -0
  10. package/dist/components/Assistant/styles.styl +13 -0
  11. package/dist/components/Conversations/Conversation.js +74 -14
  12. package/dist/components/Conversations/ConversationBar.js +13 -5
  13. package/dist/components/Conversations/ConversationComposer.js +53 -23
  14. package/dist/components/Conversations/ConversationListItem.js +20 -40
  15. package/dist/components/Conversations/ConversationListItemWider.js +14 -11
  16. package/dist/components/Conversations/styles.styl +110 -23
  17. package/dist/components/CozyAssistantRuntimeProvider.js +15 -8
  18. package/dist/components/CreateAssistantSteps/BasicInfoStep.js +37 -1
  19. package/dist/components/CreateAssistantSteps/Provider.js +1 -0
  20. package/dist/components/CreateAssistantSteps/ProviderSelectionStep.js +1 -0
  21. package/dist/components/CreateAssistantSteps/styles.styl +14 -0
  22. package/dist/components/KnowledgeBase/FolderPickerDialog.js +3 -1
  23. package/dist/components/KnowledgeBase/KnowledgeBaseChip.d.ts +7 -5
  24. package/dist/components/KnowledgeBase/KnowledgeBaseChip.js +65 -31
  25. package/dist/components/KnowledgeBase/conversationAssistant.d.ts +2 -1
  26. package/dist/components/KnowledgeBase/conversationAssistant.js +6 -1
  27. package/dist/components/KnowledgeBase/conversationAssistant.spec.js +24 -0
  28. package/dist/components/KnowledgeBase/styles.styl +18 -0
  29. package/dist/components/Messages/AssistantMessage.js +25 -21
  30. package/dist/components/Messages/UserMessage.js +4 -1
  31. package/dist/components/Messages/styles.styl +41 -0
  32. package/dist/components/Search/SearchBarMobile.js +13 -5
  33. package/dist/components/Sidebar/index.js +55 -30
  34. package/dist/components/Sidebar/styles.styl +12 -11
  35. package/dist/components/TwakeKnowledges/SourceButton.d.ts +14 -0
  36. package/dist/components/TwakeKnowledges/SourceButton.js +98 -0
  37. package/dist/components/TwakeKnowledges/TwakeKnowledgeSelector.d.ts +9 -0
  38. package/dist/components/TwakeKnowledges/TwakeKnowledgeSelector.js +75 -50
  39. package/dist/components/TwakeKnowledges/styles.styl +29 -2
  40. package/dist/components/Views/AssistantView.js +9 -1
  41. package/dist/components/Views/CreateAssistantDialog.js +5 -1
  42. package/dist/components/Views/DeleteAssistantDialog.js +1 -0
  43. package/dist/components/Views/EditAssistantDialog.js +5 -1
  44. package/dist/hooks/useConversation.d.ts +2 -2
  45. package/dist/hooks/useConversation.js +25 -4
  46. package/dist/hooks/useConversation.spec.js +14 -2
  47. package/dist/hooks/useConversation.spec.jsx +21 -3
  48. package/dist/locales/en.json +5 -1
  49. package/dist/locales/fr.json +6 -2
  50. package/dist/locales/index.js +21 -5
  51. package/dist/locales/ru.json +5 -1
  52. package/dist/locales/vi.json +5 -1
  53. package/dist/stylesheet.css +253 -30
  54. package/package.json +2 -2
  55. package/dist/components/TwakeKnowledges/TwakeKnowledgeChip.d.ts +0 -13
  56. package/dist/components/TwakeKnowledges/TwakeKnowledgeChip.js +0 -80
  57. package/dist/components/TwakeKnowledges/WebSearchChip.d.ts +0 -5
  58. package/dist/components/TwakeKnowledges/WebSearchChip.js +0 -75
@@ -9,24 +9,25 @@ exports.default = void 0;
9
9
 
10
10
  var _react = require("@assistant-ui/react");
11
11
 
12
- var _twakeIcons = require("@linagora/twake-icons");
13
-
14
12
  var _react2 = _interopRequireDefault(require("react"));
15
13
 
16
14
  var _Alert = _interopRequireDefault(require("cozy-ui/transpiled/react/Alert"));
17
15
 
18
- var _Box = _interopRequireDefault(require("cozy-ui/transpiled/react/Box"));
19
-
20
- var _Typography = _interopRequireDefault(require("cozy-ui/transpiled/react/Typography"));
21
-
22
16
  var _twakeI18n = require("twake-i18n");
23
17
 
24
18
  var _MarkdownText = _interopRequireDefault(require("./MarkdownText"));
25
19
 
26
- var _TwakeAssistantIcon = require("../AssistantIcon/TwakeAssistantIcon");
27
-
28
20
  var _Sources = _interopRequireDefault(require("../Conversations/Sources/Sources"));
29
21
 
22
+ var styles = {
23
+ "cozyThread-user-messages": "styles__cozyThread-user-messages___3Hfj-",
24
+ "cozyThread-user-messages--light": "styles__cozyThread-user-messages--light___1jBny",
25
+ "cozyThread-user-messages--dark": "styles__cozyThread-user-messages--dark___1Om3B",
26
+ "thinking-dots": "styles__thinking-dots___1HwKW",
27
+ "thinking-dot": "styles__thinking-dot___1muTY",
28
+ "thinking-bounce": "styles__thinking-bounce___2IfNu"
29
+ };
30
+
30
31
  var useIsErrorMessage = function useIsErrorMessage() {
31
32
  return (0, _react.useMessage)(function (s) {
32
33
  var _s$metadata, _s$metadata$custom;
@@ -55,19 +56,22 @@ var AssistantMessage = function AssistantMessage() {
55
56
  });
56
57
  return /*#__PURE__*/_react2.default.createElement(_react.MessagePrimitive.Root, {
57
58
  className: "u-mt-1-half"
58
- }, isThinking && /*#__PURE__*/_react2.default.createElement(_Box.default, {
59
- display: "flex",
60
- alignItems: "center",
61
- gridGap: 12
62
- }, /*#__PURE__*/_react2.default.createElement(_twakeIcons.Icon, {
63
- icon: _TwakeAssistantIcon.TwakeAssistantIcon,
64
- size: 24,
65
- className: "u-mh-half",
66
- color: "var(--primaryColor)"
67
- }), /*#__PURE__*/_react2.default.createElement(_Typography.default, {
68
- variant: "h6",
69
- display: "inline"
70
- }, t('assistant.message.running'))), isError ? /*#__PURE__*/_react2.default.createElement(_Alert.default, {
59
+ }, isThinking &&
60
+ /*#__PURE__*/
61
+ // Three dots bouncing one after the other while the answer is
62
+ // awaited (the design's "icon animation"); the label is for
63
+ // screen readers only.
64
+ _react2.default.createElement("div", {
65
+ role: "status",
66
+ "aria-label": t('assistant.message.running'),
67
+ className: styles['thinking-dots']
68
+ }, /*#__PURE__*/_react2.default.createElement("span", {
69
+ className: styles['thinking-dot']
70
+ }), /*#__PURE__*/_react2.default.createElement("span", {
71
+ className: styles['thinking-dot']
72
+ }), /*#__PURE__*/_react2.default.createElement("span", {
73
+ className: styles['thinking-dot']
74
+ })), isError ? /*#__PURE__*/_react2.default.createElement(_Alert.default, {
71
75
  severity: "error"
72
76
  }, t('assistant.default_error')) : /*#__PURE__*/_react2.default.createElement(_react.MessagePrimitive.Content, {
73
77
  components: {
@@ -22,7 +22,10 @@ var _CozyTheme = require("cozy-ui-plus/dist/providers/CozyTheme");
22
22
  var styles = {
23
23
  "cozyThread-user-messages": "styles__cozyThread-user-messages___3Hfj-",
24
24
  "cozyThread-user-messages--light": "styles__cozyThread-user-messages--light___1jBny",
25
- "cozyThread-user-messages--dark": "styles__cozyThread-user-messages--dark___1Om3B"
25
+ "cozyThread-user-messages--dark": "styles__cozyThread-user-messages--dark___1Om3B",
26
+ "thinking-dots": "styles__thinking-dots___1HwKW",
27
+ "thinking-dot": "styles__thinking-dot___1muTY",
28
+ "thinking-bounce": "styles__thinking-bounce___2IfNu"
26
29
  };
27
30
 
28
31
  var UserMessage = function UserMessage() {
@@ -7,3 +7,44 @@
7
7
 
8
8
  &--dark
9
9
  background var(--grey900)
10
+
11
+ // The 24px "icon animation" of the design: three 3.8px dots, 6.09px apart,
12
+ // each rising 2.855px and growing to 115% over 250ms then falling back,
13
+ // 150ms after the previous one, on a 1.2s loop.
14
+ .thinking-dots
15
+ display flex
16
+ align-items center
17
+ gap 2.28px
18
+ width 24px
19
+ height 24px
20
+ padding-left 4px
21
+ margin-left 8px
22
+ box-sizing border-box
23
+
24
+ .thinking-dot
25
+ display block
26
+ width 3.8px
27
+ height 3.8px
28
+ border-radius 50%
29
+ background-color #51ACF0
30
+ animation thinking-bounce 1.2s cubic-bezier(0.33, 0, 0.67, 1) infinite
31
+
32
+ &:nth-child(2)
33
+ animation-delay 150ms
34
+
35
+ &:nth-child(3)
36
+ animation-delay 300ms
37
+
38
+ @keyframes thinking-bounce
39
+ 0%
40
+ transform none
41
+ 20.83%
42
+ transform translateY(-2.855px) scale(1.15)
43
+ 41.67%
44
+ transform none
45
+ 100%
46
+ transform none
47
+
48
+ @media (prefers-reduced-motion: reduce)
49
+ .thinking-dot
50
+ animation none
@@ -13,10 +13,20 @@ var _SearchBar = _interopRequireDefault(require("cozy-ui/transpiled/react/Search
13
13
 
14
14
  var styles = {
15
15
  "composerContainer": "styles__composerContainer___3bNfY",
16
+ "composerContainer--mobile": "styles__composerContainer--mobile___nIYa-",
17
+ "composerContainer--mobile-dark": "styles__composerContainer--mobile-dark___12Go9",
18
+ "composer-dock": "styles__composer-dock___2nPT8",
16
19
  "composerActions": "styles__composerActions___2xQEH",
20
+ "welcome": "styles__welcome___ozY_t",
21
+ "welcome-halo": "styles__welcome-halo___3jlz_",
22
+ "welcome-halo--dark": "styles__welcome-halo--dark___fV9pN",
23
+ "welcome-title": "styles__welcome-title___sBOKX",
17
24
  "conversationBar": "styles__conversationBar___2J-Us",
18
25
  "conversationBar--mobile": "styles__conversationBar--mobile___1jdg8",
26
+ "viewport-fade-top": "styles__viewport-fade-top___3j8Lv",
27
+ "viewport-fade-top--visible": "styles__viewport-fade-top--visible___32uyl",
19
28
  "conversationViewport": "styles__conversationViewport___24jYX",
29
+ "conversationViewport--filled": "styles__conversationViewport--filled___T2QFN",
20
30
  "conversationBar-input": "styles__conversationBar-input___2DfdZ",
21
31
  "chatConversation": "styles__chatConversation___2EmkA",
22
32
  "conversationHeaderBar": "styles__conversationHeaderBar___C8tlD",
@@ -35,14 +45,12 @@ var styles = {
35
45
  "cozyThread-messageContent": "styles__cozyThread-messageContent___2HjdB",
36
46
  "conversation-list-item": "styles__conversation-list-item___rQapI",
37
47
  "conversation-list-item-action": "styles__conversation-list-item-action___qiuKm",
38
- "conversation-list-item--selected--light": "styles__conversation-list-item--selected--light___3WvIn",
39
- "conversation-list-item--selected--dark": "styles__conversation-list-item--selected--dark___JDQlY",
48
+ "conversation-list-item--selected": "styles__conversation-list-item--selected___2D5_3",
40
49
  "conversation-list-item--wider": "styles__conversation-list-item--wider___2Tl2c",
41
- "conversation-list-item-divider": "styles__conversation-list-item-divider___2LOP1",
42
50
  "conversation-list-item-text": "styles__conversation-list-item-text___31VBM",
43
51
  "conversation-list-item-title": "styles__conversation-list-item-title___3je_6",
44
- "conversation-list-item-meta": "styles__conversation-list-item-meta___3Zk-r",
45
- "conversation-list-item-subtitle": "styles__conversation-list-item-subtitle___3e_h0"
52
+ "conversation-list-item-subtitle": "styles__conversation-list-item-subtitle___3e_h0",
53
+ "conversation-list-item-meta": "styles__conversation-list-item-meta___3Zk-r"
46
54
  };
47
55
 
48
56
  var SearchBarMobile = function SearchBarMobile(_ref) {
@@ -11,14 +11,14 @@ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/de
11
11
 
12
12
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
13
13
 
14
- var _twakeIcons = require("@linagora/twake-icons");
15
-
16
14
  var _classnames = _interopRequireDefault(require("classnames"));
17
15
 
18
16
  var _react = _interopRequireWildcard(require("react"));
19
17
 
20
18
  var _reactRouterDom = require("react-router-dom");
21
19
 
20
+ var _twakeIcons = require("@linagora/twake-icons");
21
+
22
22
  var _cozyFlags = _interopRequireDefault(require("cozy-flags"));
23
23
 
24
24
  var _Buttons = _interopRequireDefault(require("cozy-ui/transpiled/react/Buttons"));
@@ -39,6 +39,10 @@ var _useConversation2 = _interopRequireDefault(require("../../hooks/useConversat
39
39
 
40
40
  var _useFetchConversations = _interopRequireDefault(require("../../hooks/useFetchConversations"));
41
41
 
42
+ var _AssistantSelection = _interopRequireDefault(require("../Assistant/AssistantSelection"));
43
+
44
+ var _AssistantSidebarItem = _interopRequireDefault(require("../Assistant/AssistantSidebarItem"));
45
+
42
46
  var _AssistantProvider = require("../AssistantProvider");
43
47
 
44
48
  var _PrettyScrollbar = _interopRequireDefault(require("../Containers/PrettyScrollbar"));
@@ -51,8 +55,9 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
51
55
 
52
56
  var styles = {
53
57
  "sidebar-container": "styles__sidebar-container___155dK",
58
+ "sidebar-rail": "styles__sidebar-rail___3-veF",
54
59
  "sidebar-overlay--mobile": "styles__sidebar-overlay--mobile___vvKHu",
55
- "menu-toggle-floating": "styles__menu-toggle-floating___2GTmQ"
60
+ "sidebar-bar--mobile": "styles__sidebar-bar--mobile___lHGA9"
56
61
  };
57
62
 
58
63
  var Sidebar = function Sidebar(_ref) {
@@ -85,12 +90,15 @@ var Sidebar = function Sidebar(_ref) {
85
90
  var _useFetchConversation = (0, _useFetchConversations.default)(),
86
91
  conversations = _useFetchConversation.conversations,
87
92
  hasMore = _useFetchConversation.hasMore,
88
- fetchMore = _useFetchConversation.fetchMore; // When the sidebar is closed on mobile, the toggle sits over the scrolling
89
- // conversation and must read as a distinct floating button, not blend into
90
- // the text behind it.
93
+ fetchMore = _useFetchConversation.fetchMore; // Closed on mobile, the sidebar shrinks to an opaque bar over the top of
94
+ // the conversation (the toggle and the assistant chip), the text
95
+ // scrolling under it.
96
+
91
97
 
98
+ var isMobileBar = !sidebarOpen && isMobile; // Closed on desktop, the sidebar is a narrow rail with the toggle and the
99
+ // new-chat button centered in it.
92
100
 
93
- var isFloatingToggle = !sidebarOpen && isMobile;
101
+ var isRail = !sidebarOpen && !isMobile;
94
102
 
95
103
  var onToggleSidebar = function onToggleSidebar() {
96
104
  setSidebarOpen(!sidebarOpen);
@@ -113,43 +121,56 @@ var Sidebar = function Sidebar(_ref) {
113
121
  };
114
122
 
115
123
  return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
116
- className: (0, _classnames.default)('u-flex u-flex-column u-h-100 u-bdw-1', className, (_cx = {
117
- 'u-w-auto': !sidebarOpen
118
- }, (0, _defineProperty2.default)(_cx, styles['sidebar-container'], sidebarOpen), (0, _defineProperty2.default)(_cx, 'u-left-0 u-pos-absolute', isMobile), _cx))
124
+ // The host's bottom padding of the sidebar is not for the bar, which
125
+ // must be exactly 48px: the conversation is padded for that height
126
+ className: (0, _classnames.default)('u-flex u-flex-column u-bdw-1', !isMobileBar && className, (_cx = {
127
+ 'u-h-100': !isMobileBar,
128
+ 'u-w-100': isMobileBar
129
+ }, (0, _defineProperty2.default)(_cx, styles['sidebar-container'], sidebarOpen), (0, _defineProperty2.default)(_cx, styles['sidebar-rail'], isRail), (0, _defineProperty2.default)(_cx, styles['sidebar-bar--mobile'], isMobileBar), (0, _defineProperty2.default)(_cx, 'u-left-0 u-pos-absolute', isMobile), _cx))
119
130
  }, /*#__PURE__*/_react.default.createElement("div", {
120
- className: "u-flex u-flex-items-center u-flex-justify-between u-ph-1 u-pv-1"
131
+ className: (0, _classnames.default)('u-flex u-flex-items-center', {
132
+ 'u-ph-1-half u-pv-1 u-flex-justify-between': sidebarOpen,
133
+ 'u-ph-1 u-pv-1 u-flex-justify-center': isRail,
134
+ 'u-ph-1 u-pv-half u-flex-justify-between': isMobileBar
135
+ })
121
136
  }, /*#__PURE__*/_react.default.createElement("div", {
122
- className: (0, _classnames.default)('u-flex', (0, _defineProperty2.default)({
123
- 'u-bdrs-circle': isFloatingToggle
124
- }, styles['menu-toggle-floating'], isFloatingToggle))
137
+ className: "u-flex u-flex-items-center"
125
138
  }, /*#__PURE__*/_react.default.createElement(_IconButton.default, {
126
- size: "medium",
127
- edge: "start",
128
- className: "u-bdrs-6",
139
+ size: "small",
129
140
  onClick: onToggleSidebar,
130
141
  "aria-label": t('assistant.sidebar.toggle_sidebar')
131
142
  }, /*#__PURE__*/_react.default.createElement(_twakeIcons.Icon, {
132
143
  icon: _twakeIcons.Menu,
144
+ size: 16,
133
145
  "aria-hidden": "true"
134
- }))), /*#__PURE__*/_react.default.createElement("div", null, sidebarOpen && (0, _cozyFlags.default)('cozy.assistant.search-conversation.enabled') && /*#__PURE__*/_react.default.createElement(_IconButton.default, {
135
- size: "medium",
136
- edge: "end",
137
- className: "u-bdrs-6",
146
+ })), isMobileBar && (0, _cozyFlags.default)('cozy.assistant.create-assistant.enabled') &&
147
+ /*#__PURE__*/
148
+ // A conversation keeps the assistant it started with: picking
149
+ // another one starts a new conversation, as from the sidebar
150
+ _react.default.createElement(_AssistantSelection.default, {
151
+ borderless: true,
152
+ className: "u-ml-half",
153
+ onSelect: createNewConversation
154
+ })), /*#__PURE__*/_react.default.createElement("div", null, sidebarOpen && (0, _cozyFlags.default)('cozy.assistant.search-conversation.enabled') && /*#__PURE__*/_react.default.createElement(_IconButton.default, {
155
+ size: "small",
138
156
  onClick: onToggleSearch,
139
157
  "aria-label": t('assistant.sidebar.toggle_search')
140
158
  }, /*#__PURE__*/_react.default.createElement(_twakeIcons.Icon, {
141
159
  icon: _twakeIcons.Magnifier,
160
+ size: 16,
142
161
  "aria-hidden": "true"
143
162
  })), sidebarOpen && isMobile && /*#__PURE__*/_react.default.createElement(_IconButton.default, {
144
- size: "medium",
145
- className: "u-bdrs-6",
163
+ size: "small",
146
164
  onClick: onToggleSidebar,
147
165
  "aria-label": t('assistant.sidebar.close_sidebar')
148
166
  }, /*#__PURE__*/_react.default.createElement(_twakeIcons.Icon, {
149
167
  icon: _twakeIcons.CrossSmall,
168
+ size: 16,
150
169
  "aria-hidden": "true"
151
- })))), /*#__PURE__*/_react.default.createElement("div", {
152
- className: "u-ph-1 u-pb-half"
170
+ })))), !isMobileBar && /*#__PURE__*/_react.default.createElement("div", {
171
+ className: (0, _classnames.default)('u-ph-1 u-pb-half', {
172
+ 'u-flex u-flex-justify-center': isRail
173
+ })
153
174
  }, sidebarOpen ? /*#__PURE__*/_react.default.createElement(_Buttons.default, {
154
175
  className: "u-w-100 u-bdrs-6",
155
176
  label: t('assistant.sidebar.create_new'),
@@ -159,7 +180,7 @@ var Sidebar = function Sidebar(_ref) {
159
180
  fullWidth: true,
160
181
  variant: "primary",
161
182
  onClick: onCreateNewConversation
162
- }) : isMobile ? null : /*#__PURE__*/_react.default.createElement(_IconButton.default, {
183
+ }) : /*#__PURE__*/_react.default.createElement(_IconButton.default, {
163
184
  size: "medium",
164
185
  className: "u-bg-primaryColor u-white u-bdrs-6",
165
186
  onClick: onCreateNewConversation,
@@ -167,11 +188,15 @@ var Sidebar = function Sidebar(_ref) {
167
188
  }, /*#__PURE__*/_react.default.createElement(_twakeIcons.Icon, {
168
189
  icon: _twakeIcons.Plus,
169
190
  "aria-hidden": "true"
170
- }))), sidebarOpen && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_Typography.default, {
171
- variant: "h6",
172
- className: "u-ph-1 u-pv-half"
191
+ }))), sidebarOpen && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, (0, _cozyFlags.default)('cozy.assistant.create-assistant.enabled') && /*#__PURE__*/_react.default.createElement("div", {
192
+ className: "u-ph-1 u-mt-1"
193
+ }, /*#__PURE__*/_react.default.createElement(_AssistantSidebarItem.default, null)), /*#__PURE__*/_react.default.createElement(_Typography.default, {
194
+ variant: "caption",
195
+ color: "textSecondary",
196
+ component: "h2",
197
+ className: "u-ph-1 u-mt-1 u-mb-half"
173
198
  }, t('assistant.sidebar.recent_chats')), /*#__PURE__*/_react.default.createElement(_PrettyScrollbar.default, {
174
- className: "u-flex-auto u-ov-auto u-pb-half"
199
+ className: "u-flex-auto u-ov-auto u-ph-1 u-pb-half"
175
200
  }, /*#__PURE__*/_react.default.createElement(_ConversationList.default, {
176
201
  conversations: conversations,
177
202
  currentConversationId: currentConversationId,
@@ -3,7 +3,7 @@
3
3
  .sidebar-container
4
4
  width 236px
5
5
  min-width 236px
6
- background-color var(--paperBackgroundColor)
6
+ background-color var(--defaultBackgroundColor)
7
7
  z-index calc(var(--zIndex-modal) + 30)
8
8
 
9
9
  +mobile()
@@ -11,6 +11,11 @@
11
11
  width calc(100vw - 48px)
12
12
  min-width calc(100vw - 48px)
13
13
 
14
+ .sidebar-rail
15
+ width 72px
16
+ min-width 72px
17
+ background-color var(--defaultBackgroundColor)
18
+
14
19
  .sidebar-overlay--mobile
15
20
  background-color var(--actionColorActive)
16
21
  position fixed
@@ -20,13 +25,9 @@
20
25
  bottom 0
21
26
  z-index calc(var(--zIndex-modal) + 20)
22
27
 
23
- .menu-toggle-floating
24
- // When the sidebar is closed on mobile, the toggle button floats over the
25
- // scrolling conversation. Wrap it in a circular chip with an elevation
26
- // shadow (M3 elevation 2) and a 60%-opacity paper background (as in the
27
- // design) so the circle is semi-transparent while the icon inside stays
28
- // fully opaque. The transparency is on the background color (not the
29
- // element's opacity) precisely so it does not fade the icon too.
30
- // unquote() keeps Stylus from parsing `in` as an operator.
31
- background-color unquote('color-mix(in srgb, var(--paperBackgroundColor) 60%, transparent)')
32
- box-shadow 0 1px 2px 0 rgba(0, 0, 0, 0.3), 0 2px 6px 2px rgba(0, 0, 0, 0.15)
28
+ .sidebar-bar--mobile
29
+ // Closed on mobile: an opaque 48px bar over the top of the conversation,
30
+ // the text scrolling under it. Above the conversation, below the open
31
+ // sidebar and its overlay.
32
+ background-color var(--paperBackgroundColor)
33
+ z-index calc(var(--zIndex-modal) + 15)
@@ -0,0 +1,14 @@
1
+ export namespace CHIP_CLASSES {
2
+ let icon: string;
3
+ let label: string;
4
+ }
5
+ export default SourceButton;
6
+ /**
7
+ * A knowledge source of the composer (web search, emails, Drive folder),
8
+ * as the 32px icon button of the design. `icon` is a twake-icons component,
9
+ * monochrome (tinted: primary when active, secondary text color otherwise)
10
+ * or multicolor with `preserveColor` (dimmed when inactive). Without
11
+ * onClick it is a static indicator, not a button.
12
+ */
13
+ declare const SourceButton: React.ForwardRefExoticComponent<React.RefAttributes<any>>;
14
+ import React from 'react';
@@ -0,0 +1,98 @@
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.CHIP_CLASSES = void 0;
9
+
10
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
+
12
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
13
+
14
+ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
15
+
16
+ var _classnames = _interopRequireDefault(require("classnames"));
17
+
18
+ var _react = _interopRequireWildcard(require("react"));
19
+
20
+ var _twakeIcons = require("@linagora/twake-icons");
21
+
22
+ var _IconButton = _interopRequireDefault(require("cozy-ui/transpiled/react/IconButton"));
23
+
24
+ var _excluded = ["icon", "label", "isActive", "preserveColor", "onClick", "className"];
25
+
26
+ 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); }
27
+
28
+ 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; }
29
+
30
+ var styles = {
31
+ "source-button": "styles__source-button___9t9wI",
32
+ "source-button-image": "styles__source-button-image___2batD",
33
+ "source-button-image--inactive": "styles__source-button-image--inactive___3hs2C",
34
+ "source-chip": "styles__source-chip___1h51w",
35
+ "source-chip-icon": "styles__source-chip-icon___3-N0x",
36
+ "source-chip-label": "styles__source-chip-label___2mLIx"
37
+ };
38
+ /**
39
+ * The classes giving a cozy-ui Chip the spacing of the composer chips of the
40
+ * design (with `styles['source-chip']` on the chip itself).
41
+ */
42
+
43
+ var CHIP_CLASSES = {
44
+ icon: styles['source-chip-icon'],
45
+ label: styles['source-chip-label']
46
+ };
47
+ /**
48
+ * A knowledge source of the composer (web search, emails, Drive folder),
49
+ * as the 32px icon button of the design. `icon` is a twake-icons component,
50
+ * monochrome (tinted: primary when active, secondary text color otherwise)
51
+ * or multicolor with `preserveColor` (dimmed when inactive). Without
52
+ * onClick it is a static indicator, not a button.
53
+ */
54
+
55
+ exports.CHIP_CLASSES = CHIP_CLASSES;
56
+ var SourceButton = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
57
+ var icon = _ref.icon,
58
+ label = _ref.label,
59
+ _ref$isActive = _ref.isActive,
60
+ isActive = _ref$isActive === void 0 ? true : _ref$isActive,
61
+ _ref$preserveColor = _ref.preserveColor,
62
+ preserveColor = _ref$preserveColor === void 0 ? false : _ref$preserveColor,
63
+ onClick = _ref.onClick,
64
+ className = _ref.className,
65
+ props = (0, _objectWithoutProperties2.default)(_ref, _excluded);
66
+ var content = preserveColor ? /*#__PURE__*/_react.default.createElement(_twakeIcons.Icon, {
67
+ icon: icon,
68
+ size: 20,
69
+ preserveColor: true,
70
+ className: (0, _classnames.default)((0, _defineProperty2.default)({}, styles['source-button-image--inactive'], !isActive))
71
+ }) : /*#__PURE__*/_react.default.createElement(_twakeIcons.Icon, {
72
+ icon: icon,
73
+ size: 20,
74
+ color: isActive ? 'var(--primaryColor)' : 'var(--secondaryTextColor)'
75
+ });
76
+
77
+ if (!onClick) {
78
+ return /*#__PURE__*/_react.default.createElement("span", (0, _extends2.default)({
79
+ ref: ref,
80
+ role: "img",
81
+ "aria-label": label,
82
+ title: label,
83
+ className: (0, _classnames.default)('u-flex u-flex-items-center u-flex-justify-center', styles['source-button'], className)
84
+ }, props), content);
85
+ }
86
+
87
+ return /*#__PURE__*/_react.default.createElement(_IconButton.default, (0, _extends2.default)({
88
+ ref: ref,
89
+ size: "small",
90
+ "aria-label": label,
91
+ title: label,
92
+ onClick: onClick,
93
+ className: (0, _classnames.default)(styles['source-button'], className)
94
+ }, props), content);
95
+ });
96
+ SourceButton.displayName = 'SourceButton';
97
+ var _default = SourceButton;
98
+ exports.default = _default;
@@ -1,4 +1,13 @@
1
1
  export default TwakeKnowledgeSelector;
2
+ /**
3
+ * The knowledge sources of the composer. The Drive source is always on:
4
+ * on desktop it is a chip named after the knowledge base folder (the
5
+ * whole Drive without one), whose menu opens the folder or changes it;
6
+ * on mobile it is an icon button. Web search (a toggle) and emails are
7
+ * icon buttons behind their flags: emails show on the default assistant
8
+ * always, on a custom assistant once enabled in the wizard. Sources are
9
+ * enabled/disabled from the wizard, never from the composer.
10
+ */
2
11
  declare function TwakeKnowledgeSelector({ className, websearchEnabled, onToggleWebsearch }: {
3
12
  className: any;
4
13
  websearchEnabled: any;