From 91c29d87849c5729c8688a33c216824418986055 Mon Sep 17 00:00:00 2001 From: Travis CI User Date: Thu, 19 Dec 2024 03:44:47 +0000 Subject: [PATCH] publish: Merge pull request #281 from cozy/feat/add-translate-apps generated from commit 7e07ec989ec66282906cd5d774580a00417c8826 --- en/cozy-home/package.json | 6 +- .../src/assistant/AssistantProvider.jsx | 134 --- .../src/assistant/AssistantWrapperDesktop.jsx | 23 - .../src/assistant/AssistantWrapperMobile.jsx | 54 -- .../Conversations/ChatAssistantItem.jsx | 30 - .../Conversations/ChatConversation.jsx | 97 -- .../src/assistant/Conversations/ChatItem.jsx | 29 - .../assistant/Conversations/ChatItemLabel.jsx | 14 - .../Conversations/ChatRealtimeAnswer.jsx | 25 - .../assistant/Conversations/ChatUserItem.jsx | 20 - .../assistant/Conversations/Conversation.jsx | 26 - .../Conversations/ConversationBar.jsx | 115 --- .../Conversations/Sources/Sources.jsx | 91 -- .../Conversations/Sources/SourcesItem.jsx | 48 - .../Conversations/Sources/styles.styl | 5 - .../src/assistant/Conversations/styles.styl | 15 - .../src/assistant/ResultMenu/ResultMenu.jsx | 30 - .../ResultMenu/ResultMenuContent.jsx | 78 -- .../assistant/ResultMenu/ResultMenuItem.jsx | 56 -- .../SuggestionItemTextHighlighted.jsx | 119 --- .../SuggestionItemTextSecondary.jsx | 46 - .../src/assistant/ResultMenu/styles.styl | 10 - .../assistant/Search/EncryptedFolderIcon.jsx | 28 - .../src/assistant/Search/SearchBar.jsx | 45 - .../src/assistant/Search/SearchBarDesktop.jsx | 108 --- .../src/assistant/Search/SearchBarMobile.jsx | 49 - .../src/assistant/Search/SearchProvider.jsx | 58 -- .../src/assistant/Search/SearchSubmitFab.jsx | 38 - .../Search/SuggestionsPlaceholder.jsx | 42 - .../src/assistant/Search/getFileMimetype.js | 37 - .../Search/getIconForSearchResult.js | 103 -- en/cozy-home/src/assistant/Search/styles.styl | 7 - .../src/assistant/Search/useFetchResult.jsx | 65 -- .../src/assistant/Views/AssistantDialog.jsx | 50 - .../src/assistant/Views/SearchDialog.jsx | 68 -- en/cozy-home/src/assistant/helpers.js | 21 - en/cozy-home/src/assistant/queries.js | 39 - en/cozy-home/src/components/AppWrapper.jsx | 2 +- .../Assistant/AssistantDesktopWrapper.jsx | 24 + .../Assistant/AssistantMobileWrapper.jsx | 39 + .../Assistant}/styles.styl | 2 +- en/cozy-home/src/components/Home.jsx | 4 +- en/cozy-home/src/containers/App.jsx | 8 +- en/cozy-home/src/locales/en.json | 17 - en/cozy-home/src/locales/fr.json | 17 - .../src/targets/browser/renderApp.tsx | 1 + en/cozy-home/test/jestLib/setup.js | 9 + en/cozy-home/yarn.lock | 278 +++++- en/sitemap.xml | 910 +++++++++--------- en/sitemap.xml.gz | Bin 3550 -> 3550 bytes 50 files changed, 799 insertions(+), 2341 deletions(-) delete mode 100644 en/cozy-home/src/assistant/AssistantProvider.jsx delete mode 100644 en/cozy-home/src/assistant/AssistantWrapperDesktop.jsx delete mode 100644 en/cozy-home/src/assistant/AssistantWrapperMobile.jsx delete mode 100644 en/cozy-home/src/assistant/Conversations/ChatAssistantItem.jsx delete mode 100644 en/cozy-home/src/assistant/Conversations/ChatConversation.jsx delete mode 100644 en/cozy-home/src/assistant/Conversations/ChatItem.jsx delete mode 100644 en/cozy-home/src/assistant/Conversations/ChatItemLabel.jsx delete mode 100644 en/cozy-home/src/assistant/Conversations/ChatRealtimeAnswer.jsx delete mode 100644 en/cozy-home/src/assistant/Conversations/ChatUserItem.jsx delete mode 100644 en/cozy-home/src/assistant/Conversations/Conversation.jsx delete mode 100644 en/cozy-home/src/assistant/Conversations/ConversationBar.jsx delete mode 100644 en/cozy-home/src/assistant/Conversations/Sources/Sources.jsx delete mode 100644 en/cozy-home/src/assistant/Conversations/Sources/SourcesItem.jsx delete mode 100644 en/cozy-home/src/assistant/Conversations/Sources/styles.styl delete mode 100644 en/cozy-home/src/assistant/Conversations/styles.styl delete mode 100644 en/cozy-home/src/assistant/ResultMenu/ResultMenu.jsx delete mode 100644 en/cozy-home/src/assistant/ResultMenu/ResultMenuContent.jsx delete mode 100644 en/cozy-home/src/assistant/ResultMenu/ResultMenuItem.jsx delete mode 100644 en/cozy-home/src/assistant/ResultMenu/SuggestionItemTextHighlighted.jsx delete mode 100644 en/cozy-home/src/assistant/ResultMenu/SuggestionItemTextSecondary.jsx delete mode 100644 en/cozy-home/src/assistant/ResultMenu/styles.styl delete mode 100644 en/cozy-home/src/assistant/Search/EncryptedFolderIcon.jsx delete mode 100644 en/cozy-home/src/assistant/Search/SearchBar.jsx delete mode 100644 en/cozy-home/src/assistant/Search/SearchBarDesktop.jsx delete mode 100644 en/cozy-home/src/assistant/Search/SearchBarMobile.jsx delete mode 100644 en/cozy-home/src/assistant/Search/SearchProvider.jsx delete mode 100644 en/cozy-home/src/assistant/Search/SearchSubmitFab.jsx delete mode 100644 en/cozy-home/src/assistant/Search/SuggestionsPlaceholder.jsx delete mode 100644 en/cozy-home/src/assistant/Search/getFileMimetype.js delete mode 100644 en/cozy-home/src/assistant/Search/getIconForSearchResult.js delete mode 100644 en/cozy-home/src/assistant/Search/styles.styl delete mode 100644 en/cozy-home/src/assistant/Search/useFetchResult.jsx delete mode 100644 en/cozy-home/src/assistant/Views/AssistantDialog.jsx delete mode 100644 en/cozy-home/src/assistant/Views/SearchDialog.jsx delete mode 100644 en/cozy-home/src/assistant/helpers.js delete mode 100644 en/cozy-home/src/assistant/queries.js create mode 100644 en/cozy-home/src/components/Assistant/AssistantDesktopWrapper.jsx create mode 100644 en/cozy-home/src/components/Assistant/AssistantMobileWrapper.jsx rename en/cozy-home/src/{assistant => components/Assistant}/styles.styl (91%) diff --git a/en/cozy-home/package.json b/en/cozy-home/package.json index 42a6b3542..41af20332 100644 --- a/en/cozy-home/package.json +++ b/en/cozy-home/package.json @@ -37,6 +37,7 @@ "@sentry/react": "7.119.0", "comlink": "4.4.1", "cozy-client": "^51.6.0", + "cozy-dataproxy-lib": "^1.9.0", "cozy-device-helper": "2.7.0", "cozy-devtools": "^1.2.1", "cozy-doctypes": "1.83.8", @@ -49,7 +50,7 @@ "cozy-minilog": "^3.3.1", "cozy-realtime": "^5.0.4", "cozy-sharing": "^16.0.0", - "cozy-stack-client": "^51.0.0", + "cozy-stack-client": "^51.6.0", "cozy-tsconfig": "1.2.0", "cozy-ui": "^113.3.0", "cozy-viewer": "^2.6.1", @@ -70,7 +71,6 @@ "react-remove-scroll": "^2.5.5", "react-router-dom": "6.28.0", "react-swipeable-views": "0.14.0", - "react-type-animation": "3.2.0", "redux": "4.2.0", "redux-logger": "3.0.6", "redux-persist": "^6.0.0", @@ -90,7 +90,7 @@ "babel-jest": "27.5.1", "babel-preset-cozy-app": "2.0.2", "bundlemon": "1.3.2", - "cozy-scripts": "8.2.0", + "cozy-scripts": "8.4.0", "eslint": "8.9.0", "eslint-config-cozy-app": "4.0.0", "eslint-import-resolver-alias": "^1.1.2", diff --git a/en/cozy-home/src/assistant/AssistantProvider.jsx b/en/cozy-home/src/assistant/AssistantProvider.jsx deleted file mode 100644 index 0ab25871b..000000000 --- a/en/cozy-home/src/assistant/AssistantProvider.jsx +++ /dev/null @@ -1,134 +0,0 @@ -import React, { useMemo, useContext, useState, useCallback } from 'react' -import { useParams } from 'react-router-dom' -import set from 'lodash/set' - -import { useClient } from 'cozy-client' -import useRealtime from 'cozy-realtime/dist/useRealtime' - -import { CHAT_EVENTS_DOCTYPE, CHAT_CONVERSATIONS_DOCTYPE } from './queries' -import { pushMessagesIdInState, isMessageForThisConversation } from './helpers' - -export const AssistantContext = React.createContext() - -export const useAssistant = () => { - const context = useContext(AssistantContext) - - if (!context) { - throw new Error('useAssistant must be used within a AssistantProvider') - } - return context -} - -const AssistantProvider = ({ children }) => { - const { conversationId } = useParams() - const client = useClient() - const [assistantState, setAssistantState] = useState({ - message: {}, - status: 'pending', - messagesId: [] - }) - - useRealtime( - client, - { - [CHAT_CONVERSATIONS_DOCTYPE]: { - created: res => { - pushMessagesIdInState(conversationId, res, setAssistantState) - }, - updated: res => { - pushMessagesIdInState(conversationId, res, setAssistantState) - } - } - }, - [] - ) - - useRealtime( - client, - { - [CHAT_EVENTS_DOCTYPE]: { - created: res => { - setAssistantState(prevState => { - // to exclude realtime messages if not relevant to the actual conversation - if (!isMessageForThisConversation(res, prevState.messagesId)) { - return prevState - } - - if (res.object === 'done') { - if (prevState.status !== 'idle') { - return { - ...prevState, - status: 'idle' - } - } - } - - if (res.object === 'delta') { - const message = set(prevState.message, res.position, res.content) - return { - ...prevState, - message, - status: 'writing' - } - } - - return prevState - }) - } - } - }, - [] - ) - - const clearAssistant = useCallback( - () => - setAssistantState({ - message: {}, - status: 'pending', - messagesId: [] - }), - [] - ) - - const onAssistantExecute = useCallback( - async ({ value, conversationId }, callback) => { - if (!value) return - - callback?.() - - clearAssistant() - - await client.stackClient.fetchJSON( - 'POST', - `/ai/chat/conversations/${conversationId}`, - { - q: value - } - ) - - setAssistantState(v => ({ - ...v, - status: 'pending' - })) - }, - [client, clearAssistant] - ) - - const value = useMemo( - () => ({ - assistantState, - setAssistantState, - clearAssistant, - onAssistantExecute - }), - [assistantState, clearAssistant, onAssistantExecute] - ) - - return ( - - {children} - - ) -} - -export default React.memo(AssistantProvider) diff --git a/en/cozy-home/src/assistant/AssistantWrapperDesktop.jsx b/en/cozy-home/src/assistant/AssistantWrapperDesktop.jsx deleted file mode 100644 index 7794bc7f1..000000000 --- a/en/cozy-home/src/assistant/AssistantWrapperDesktop.jsx +++ /dev/null @@ -1,23 +0,0 @@ -import React from 'react' - -import CozyTheme from 'cozy-ui/transpiled/react/providers/CozyTheme' - -import SearchBar from './Search/SearchBar' -import SearchProvider from './Search/SearchProvider' -import AssistantProvider from './AssistantProvider' - -const AssistantWrapperDesktop = () => { - return ( - -
- - - - - -
-
- ) -} - -export default AssistantWrapperDesktop diff --git a/en/cozy-home/src/assistant/AssistantWrapperMobile.jsx b/en/cozy-home/src/assistant/AssistantWrapperMobile.jsx deleted file mode 100644 index ad9407e21..000000000 --- a/en/cozy-home/src/assistant/AssistantWrapperMobile.jsx +++ /dev/null @@ -1,54 +0,0 @@ -import React from 'react' -import { useNavigate } from 'react-router-dom' -import flag from 'cozy-flags' -import cx from 'classnames' - -import { getFlagshipMetadata } from 'cozy-device-helper' -import CozyTheme, { - useCozyTheme -} from 'cozy-ui/transpiled/react/providers/CozyTheme' -import SearchBar from 'cozy-ui/transpiled/react/SearchBar' -import Icon from 'cozy-ui/transpiled/react/Icon' -import { useI18n } from 'cozy-ui/transpiled/react/providers/I18n' - -import AssistantIcon from 'assets/images/icon-assistant.png' -import { FLAG_FAB_BUTTON_ENABLED } from 'components/AddButton/helpers' -import { useWallpaperContext } from 'hooks/useWallpaperContext' - -import styles from './styles.styl' - -export const AssistantWrapperMobile = () => { - const { type } = useCozyTheme() - const { - data: { isCustomWallpaper } - } = useWallpaperContext() - const { t } = useI18n() - const navigate = useNavigate() - - return ( - -
- - } - type="button" - label={t('assistant.search.placeholder')} - onClick={() => navigate('connected/search')} - /> -
-
- ) -} - -export default AssistantWrapperMobile diff --git a/en/cozy-home/src/assistant/Conversations/ChatAssistantItem.jsx b/en/cozy-home/src/assistant/Conversations/ChatAssistantItem.jsx deleted file mode 100644 index 7dfc4e8c9..000000000 --- a/en/cozy-home/src/assistant/Conversations/ChatAssistantItem.jsx +++ /dev/null @@ -1,30 +0,0 @@ -import React, { useMemo } from 'react' - -import { useI18n } from 'cozy-ui/transpiled/react/providers/I18n' -import Icon from 'cozy-ui/transpiled/react/Icon' - -import AssistantIcon from 'assets/images/icon-assistant.png' - -import Sources from './Sources/Sources' -import ChatItem from './ChatItem' - -const ChatAssistantItem = ({ className, id, label, sources, ...props }) => { - const { t } = useI18n() - // need memo to avoid rendering it everytime - const icon = useMemo(() => , []) - - return ( - <> - - {sources?.length > 0 && } - - ) -} - -export default ChatAssistantItem diff --git a/en/cozy-home/src/assistant/Conversations/ChatConversation.jsx b/en/cozy-home/src/assistant/Conversations/ChatConversation.jsx deleted file mode 100644 index 35c051777..000000000 --- a/en/cozy-home/src/assistant/Conversations/ChatConversation.jsx +++ /dev/null @@ -1,97 +0,0 @@ -import React, { useRef, useEffect } from 'react' - -import { useQuery, isQueryLoading } from 'cozy-client' - -import { buildChatConversationQueryById } from '../queries' -import { useAssistant } from '../AssistantProvider' -import { getInstantMessage } from '../helpers' -import ChatUserItem from './ChatUserItem' -import ChatAssistantItem from './ChatAssistantItem' -import ChatRealtimeAnswer from './ChatRealtimeAnswer' - -const ChatConversation = ({ conversation, myself }) => { - const { assistantState } = useAssistant() - const listRef = useRef() - const instantMessageKeysCount = Object.keys(assistantState.message).length - - // test on role === user to be sure the last response is inside io.cozy.ai.chat.conversations - const showRealtimeMessage = - assistantState.status !== 'idle' || - conversation?.messages?.[conversation?.messages?.length - 1]?.role === - 'user' - - useEffect(() => { - // force scroll down if new message of change in AI instant response - listRef.current?.lastElementChild?.scrollIntoView(false) - }, [ - conversation?.messages?.length, - assistantState.status, - instantMessageKeysCount - ]) - - return ( -
- {conversation?.messages.map((message, idx) => { - if (message.role === 'user') { - return ( - - ) - } - - if (idx !== conversation?.messages.length - 1) { - return ( - - ) - } - - if (showRealtimeMessage) { - return null - } - - return ( - - ) - })} - - {showRealtimeMessage && ( - - )} -
- ) -} - -const ChatConversationWithQuery = ({ id, myself }) => { - const chatConversationQuery = buildChatConversationQueryById(id) - const { data: chatConversation, ...queryResult } = useQuery( - chatConversationQuery.definition, - chatConversationQuery.options - ) - - const isLoading = isQueryLoading(queryResult) - - if (isLoading) return null - - return -} - -export default ChatConversationWithQuery diff --git a/en/cozy-home/src/assistant/Conversations/ChatItem.jsx b/en/cozy-home/src/assistant/Conversations/ChatItem.jsx deleted file mode 100644 index a768d7d37..000000000 --- a/en/cozy-home/src/assistant/Conversations/ChatItem.jsx +++ /dev/null @@ -1,29 +0,0 @@ -import React from 'react' - -import Typography from 'cozy-ui/transpiled/react/Typography' -import Box from 'cozy-ui/transpiled/react/Box' - -import ChatItemLabel from './ChatItemLabel' - -const ChatItem = ({ className, icon, name, label }) => { - return ( - <> - - {icon} - - {name} - - - - - - - ) -} - -export default ChatItem diff --git a/en/cozy-home/src/assistant/Conversations/ChatItemLabel.jsx b/en/cozy-home/src/assistant/Conversations/ChatItemLabel.jsx deleted file mode 100644 index 29335d7db..000000000 --- a/en/cozy-home/src/assistant/Conversations/ChatItemLabel.jsx +++ /dev/null @@ -1,14 +0,0 @@ -import React from 'react' - -import Markdown from 'cozy-ui/transpiled/react/Markdown' - -const ChatItemLabel = ({ label }) => { - if (typeof label === 'string') { - return - } - - return label -} - -// need memo to avoid rendering all label of all items -export default React.memo(ChatItemLabel) diff --git a/en/cozy-home/src/assistant/Conversations/ChatRealtimeAnswer.jsx b/en/cozy-home/src/assistant/Conversations/ChatRealtimeAnswer.jsx deleted file mode 100644 index 515c3a263..000000000 --- a/en/cozy-home/src/assistant/Conversations/ChatRealtimeAnswer.jsx +++ /dev/null @@ -1,25 +0,0 @@ -import React from 'react' - -import Skeleton from 'cozy-ui/transpiled/react/Skeleton' - -import ChatAssistantItem from './ChatAssistantItem' - -const ChatRealtimeAnswer = ({ isLoading, label }) => { - return ( - - - - - ) : ( - label - ) - } - /> - ) -} - -export default ChatRealtimeAnswer diff --git a/en/cozy-home/src/assistant/Conversations/ChatUserItem.jsx b/en/cozy-home/src/assistant/Conversations/ChatUserItem.jsx deleted file mode 100644 index 86caf86e6..000000000 --- a/en/cozy-home/src/assistant/Conversations/ChatUserItem.jsx +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react' - -import { getDisplayName, getInitials } from 'cozy-client/dist/models/contact' -import Avatar from 'cozy-ui/transpiled/react/Avatar' - -import ChatItem from './ChatItem' - -const ChatUserItem = ({ className, label, myself, ...props }) => { - return ( - } - name={getDisplayName(myself)} - label={label} - /> - ) -} - -export default ChatUserItem diff --git a/en/cozy-home/src/assistant/Conversations/Conversation.jsx b/en/cozy-home/src/assistant/Conversations/Conversation.jsx deleted file mode 100644 index a1f64dc33..000000000 --- a/en/cozy-home/src/assistant/Conversations/Conversation.jsx +++ /dev/null @@ -1,26 +0,0 @@ -import React from 'react' - -import { useQuery, isQueryLoading } from 'cozy-client' - -import { buildMyselfQuery } from '../queries' -import ChatConversation from './ChatConversation' - -const Conversation = ({ id }) => { - const myselfQuery = buildMyselfQuery() - const { data: myselves, ...queryMyselfResult } = useQuery( - myselfQuery.definition, - myselfQuery.options - ) - - const isLoading = isQueryLoading(queryMyselfResult) - - if (isLoading) return null - - return ( -
- -
- ) -} - -export default Conversation diff --git a/en/cozy-home/src/assistant/Conversations/ConversationBar.jsx b/en/cozy-home/src/assistant/Conversations/ConversationBar.jsx deleted file mode 100644 index 8e6de4721..000000000 --- a/en/cozy-home/src/assistant/Conversations/ConversationBar.jsx +++ /dev/null @@ -1,115 +0,0 @@ -import React, { useState, useRef } from 'react' -import { useParams } from 'react-router-dom' - -import Icon from 'cozy-ui/transpiled/react/Icon' -import SearchBar from 'cozy-ui/transpiled/react/SearchBar' -import PaperplaneIcon from 'cozy-ui/transpiled/react/Icons/Paperplane' -import StopIcon from 'cozy-ui/transpiled/react/Icons/Stop' -import IconButton from 'cozy-ui/transpiled/react/IconButton' -import Button from 'cozy-ui/transpiled/react/Buttons' -import useEventListener from 'cozy-ui/transpiled/react/hooks/useEventListener' -import { useBreakpoints } from 'cozy-ui/transpiled/react/providers/Breakpoints' -import { useI18n } from 'cozy-ui/transpiled/react/providers/I18n' - -import { useAssistant } from '../AssistantProvider' - -import styles from './styles.styl' - -const ConversationBar = ({ assistantStatus }) => { - const { t } = useI18n() - const { isMobile } = useBreakpoints() - const { onAssistantExecute } = useAssistant() - const [inputValue, setInputValue] = useState('') - const inputRef = useRef() - const { conversationId } = useParams() - - // to adjust input height for multiline when typing in it - useEventListener(inputRef.current, 'input', () => { - inputRef.current.style.height = 'auto' // to resize input when emptying it - inputRef.current.style.height = `${inputRef.current.scrollHeight}px` - }) - - const handleClear = () => { - setInputValue('') - } - - const handleChange = ev => { - setInputValue(ev.target.value) - } - - const handleStop = () => { - // not supported right now - return - } - - const handleClick = () => - onAssistantExecute({ value: inputValue, conversationId }, () => { - handleClear() - inputRef.current.style.height = 'auto' - }) - - return ( -
- -
- ) -} - -export default ConversationBar diff --git a/en/cozy-home/src/assistant/Conversations/Sources/Sources.jsx b/en/cozy-home/src/assistant/Conversations/Sources/Sources.jsx deleted file mode 100644 index dbb92d924..000000000 --- a/en/cozy-home/src/assistant/Conversations/Sources/Sources.jsx +++ /dev/null @@ -1,91 +0,0 @@ -import React, { useState, useRef, useEffect } from 'react' - -import { useQuery, isQueryLoading } from 'cozy-client' - -import { useI18n } from 'cozy-ui/transpiled/react/providers/I18n' -import Icon from 'cozy-ui/transpiled/react/Icon' -import Chip from 'cozy-ui/transpiled/react/Chips' -import MultiFilesIcon from 'cozy-ui/transpiled/react/Icons/MultiFiles' -import RightIcon from 'cozy-ui/transpiled/react/Icons/Right' -import Box from 'cozy-ui/transpiled/react/Box' -import Grow from 'cozy-ui/transpiled/react/Grow' - -import { buildFilesByIds } from 'assistant/queries' -import SourcesItem from './SourcesItem' - -const Sources = ({ messageId, files }) => { - const [showSources, setShowSources] = useState(false) - const { t } = useI18n() - const ref = useRef() - - const handleShowSources = () => { - setShowSources(v => !v) - } - - // we want to scroll down to the sources button when it is displayed - useEffect(() => { - ref.current?.scrollIntoView(false) - }, []) - - useEffect(() => { - if (showSources) { - const sourcesBottom = ref.current.getBoundingClientRect().bottom - const innerContainer = - document.getElementsByClassName('cozyDialogContent')[0] - const innerContainerBottom = innerContainer.getBoundingClientRect().bottom - if (sourcesBottom > innerContainerBottom) { - ref.current.scrollIntoView(false) - } - } - }, [showSources]) - - return ( - - } - label={t('assistant.sources', files.length)} - deleteIcon={ - - } - clickable - onClick={handleShowSources} - onDelete={handleShowSources} - /> - -
- {files.map(file => ( - - ))} -
-
-
- ) -} - -const SourcesWithFilesQuery = ({ messageId, sources }) => { - const fileIds = sources.map(source => source.id) - - const filesByIds = buildFilesByIds(fileIds) - const { data: files, ...queryResult } = useQuery( - filesByIds.definition, - filesByIds.options - ) - - const isLoading = isQueryLoading(queryResult) - - if (isLoading || files.length === 0) return null - - return -} - -export default SourcesWithFilesQuery diff --git a/en/cozy-home/src/assistant/Conversations/Sources/SourcesItem.jsx b/en/cozy-home/src/assistant/Conversations/Sources/SourcesItem.jsx deleted file mode 100644 index cc0e328a9..000000000 --- a/en/cozy-home/src/assistant/Conversations/Sources/SourcesItem.jsx +++ /dev/null @@ -1,48 +0,0 @@ -import React from 'react' - -import { useClient, generateWebLink } from 'cozy-client' -import { isNote } from 'cozy-client/dist/models/file' -import Icon from 'cozy-ui/transpiled/react/Icon' -import ListItem from 'cozy-ui/transpiled/react/ListItem' -import ListItemIcon from 'cozy-ui/transpiled/react/ListItemIcon' -import ListItemText from 'cozy-ui/transpiled/react/ListItemText' - -import { getDriveMimeTypeIcon } from 'assistant/Search/getIconForSearchResult' - -import styles from './styles.styl' - -const SourcesItem = ({ file }) => { - const client = useClient() - - const docUrl = generateWebLink({ - slug: isNote(file) ? 'notes' : 'drive', - cozyUrl: client?.getStackClient().uri, - subDomainType: client?.getInstanceOptions().subdomain, - hash: isNote(file) - ? `/n/${file._id}` - : `/folder/${file.dir_id}/file/${file._id}` - }) - - return ( - - - - - - - ) -} - -export default SourcesItem diff --git a/en/cozy-home/src/assistant/Conversations/Sources/styles.styl b/en/cozy-home/src/assistant/Conversations/Sources/styles.styl deleted file mode 100644 index e6210102c..000000000 --- a/en/cozy-home/src/assistant/Conversations/Sources/styles.styl +++ /dev/null @@ -1,5 +0,0 @@ -.sourcesItem - // !important here to override Mui styles - margin-bottom 0.25rem !important - border 1px solid var(--borderMainColor) !important - border-radius 8px !important \ No newline at end of file diff --git a/en/cozy-home/src/assistant/Conversations/styles.styl b/en/cozy-home/src/assistant/Conversations/styles.styl deleted file mode 100644 index e7fe239cc..000000000 --- a/en/cozy-home/src/assistant/Conversations/styles.styl +++ /dev/null @@ -1,15 +0,0 @@ -@require 'settings/breakpoints.styl' - -.conversationBar - max-height 95px - min-height 48px - z-index calc(var(--zIndex-modal) + 15) - - +gt-mobile() - max-height 178px - -.conversationBar-input - max-height 80px - - +gt-mobile() - max-height 155px diff --git a/en/cozy-home/src/assistant/ResultMenu/ResultMenu.jsx b/en/cozy-home/src/assistant/ResultMenu/ResultMenu.jsx deleted file mode 100644 index 459519064..000000000 --- a/en/cozy-home/src/assistant/ResultMenu/ResultMenu.jsx +++ /dev/null @@ -1,30 +0,0 @@ -import React from 'react' - -import Paper from 'cozy-ui/transpiled/react/Paper' -import Popper from 'cozy-ui/transpiled/react/Popper' - -import ResultMenuContent from './ResultMenuContent' - -import styles from './styles.styl' - -const ResultMenu = ({ anchorRef, listRef, onClick }) => { - return ( - - -
- -
-
-
- ) -} - -export default ResultMenu diff --git a/en/cozy-home/src/assistant/ResultMenu/ResultMenuContent.jsx b/en/cozy-home/src/assistant/ResultMenu/ResultMenuContent.jsx deleted file mode 100644 index e2b1856dc..000000000 --- a/en/cozy-home/src/assistant/ResultMenu/ResultMenuContent.jsx +++ /dev/null @@ -1,78 +0,0 @@ -import React, { forwardRef } from 'react' - -import flag from 'cozy-flags' -import List from 'cozy-ui/transpiled/react/List' -import Circle from 'cozy-ui/transpiled/react/Circle' -import PaperplaneIcon from 'cozy-ui/transpiled/react/Icons/Paperplane' -import Icon from 'cozy-ui/transpiled/react/Icon' -import ListItemSkeleton from 'cozy-ui/transpiled/react/Skeletons/ListItemSkeleton' -import { useI18n } from 'cozy-ui/transpiled/react/providers/I18n' -import { useBreakpoints } from 'cozy-ui/transpiled/react/providers/Breakpoints' - -import { useDataProxy } from 'dataproxy/DataProxyProvider' - -import { useSearch } from '../Search/SearchProvider' -import ResultMenuItem from './ResultMenuItem' - -const SearchResult = () => { - const { isLoading, results, selectedIndex, searchValue } = useSearch() - - if (isLoading && !results?.length) - return ( - <> - - - - - ) - - return results.map((result, idx) => ( - - )) -} - -const ResultMenuContent = forwardRef(({ onClick }, ref) => { - const { t } = useI18n() - const { isMobile } = useBreakpoints() - const { searchValue, selectedIndex } = useSearch() - const { dataProxyServicesAvailable } = useDataProxy() - - return ( - - {flag('cozy.assistant.enabled') && ( - - - - } - primaryText={searchValue} - query={searchValue} - secondaryText={t('assistant.search.result')} - selected={selectedIndex === 0} - onClick={onClick} - /> - )} - {dataProxyServicesAvailable && } - - ) -}) - -ResultMenuContent.displayName = 'ResultMenuContent' - -export default ResultMenuContent diff --git a/en/cozy-home/src/assistant/ResultMenu/ResultMenuItem.jsx b/en/cozy-home/src/assistant/ResultMenu/ResultMenuItem.jsx deleted file mode 100644 index ec80cec23..000000000 --- a/en/cozy-home/src/assistant/ResultMenu/ResultMenuItem.jsx +++ /dev/null @@ -1,56 +0,0 @@ -import React from 'react' - -import AppIcon from 'cozy-ui/transpiled/react/AppIcon' -import Icon from 'cozy-ui/transpiled/react/Icon' -import ListItem from 'cozy-ui/transpiled/react/ListItem' -import ListItemIcon from 'cozy-ui/transpiled/react/ListItemIcon' -import ListItemText from 'cozy-ui/transpiled/react/ListItemText' -import SuggestionItemTextHighlighted from './SuggestionItemTextHighlighted' -import SuggestionItemTextSecondary from './SuggestionItemTextSecondary' - -const ResultMenuItem = ({ - icon, - primaryText, - secondaryText, - secondaryUrl, - slug, - selected, - onClick, - query, - highlightQuery = false -}) => { - const iconComponent = - icon.type === 'component' ? ( - - ) : icon.type === 'app' ? ( - - ) : ( - icon - ) - - const primary = highlightQuery ? ( - - ) : ( - primaryText - ) - - const secondary = highlightQuery ? ( - - ) : ( - secondaryText - ) - - return ( - - {iconComponent} - - - ) -} - -export default ResultMenuItem diff --git a/en/cozy-home/src/assistant/ResultMenu/SuggestionItemTextHighlighted.jsx b/en/cozy-home/src/assistant/ResultMenu/SuggestionItemTextHighlighted.jsx deleted file mode 100644 index eca4b0075..000000000 --- a/en/cozy-home/src/assistant/ResultMenu/SuggestionItemTextHighlighted.jsx +++ /dev/null @@ -1,119 +0,0 @@ -/** - * Code copied and adapted from cozy-drive - * - * See source: https://github.com/cozy/cozy-drive/blob/fbe2df67199683b23a40f476ccdacb00ee027459/src/modules/search/components/SuggestionItemTextHighlighted.jsx - */ - -import React from 'react' - -const normalizeString = str => - str - .toString() - .toLowerCase() - .replace(/\//g, ' ') - .normalize('NFD') - .replace(/[\u0300-\u036f]/g, '') - .split(' ') - -/** - * Add on part that equlas query into each result - * - * @param {Array} searchResult - list of results - * @param {string} query - search input - * @returns list of results with the query highlighted - */ -const highlightQueryTerms = (searchResult, query) => { - const normalizedQueryTerms = normalizeString(query) - const normalizedResultTerms = normalizeString(searchResult) - - const matchedIntervals = [] - const spacerLength = 1 - let currentIndex = 0 - - normalizedResultTerms.forEach(resultTerm => { - normalizedQueryTerms.forEach(queryTerm => { - const index = resultTerm.indexOf(queryTerm) - if (index >= 0) { - matchedIntervals.push({ - from: currentIndex + index, - to: currentIndex + index + queryTerm.length - }) - } - }) - - currentIndex += resultTerm.length + spacerLength - }) - - // matchedIntervals can overlap, so we merge them. - // - sort the intervals by starting index - // - add the first interval to the stack - // - for every interval, - // - - add it to the stack if it doesn't overlap with the stack top - // - - or extend the stack top if the start overlaps and the new interval's top is bigger - const mergedIntervals = matchedIntervals - .sort((intervalA, intervalB) => intervalA.from > intervalB.from) - .reduce((computedIntervals, newInterval) => { - if ( - computedIntervals.length === 0 || - computedIntervals[computedIntervals.length - 1].to < newInterval.from - ) { - computedIntervals.push(newInterval) - } else if ( - computedIntervals[computedIntervals.length - 1].to < newInterval.to - ) { - computedIntervals[computedIntervals.length - 1].to = newInterval.to - } - - return computedIntervals - }, []) - - // create an array containing the entire search result, with special characters, and the intervals surrounded y `` tags - const slicedOriginalResult = - mergedIntervals.length > 0 - ? [{searchResult.slice(0, mergedIntervals[0].from)}] - : searchResult - - for (let i = 0, l = mergedIntervals.length; i < l; ++i) { - slicedOriginalResult.push( - - {searchResult.slice(mergedIntervals[i].from, mergedIntervals[i].to)} - - ) - if (i + 1 < l) - slicedOriginalResult.push( - - {searchResult.slice( - mergedIntervals[i].to, - mergedIntervals[i + 1].from - )} - - ) - } - - if (mergedIntervals.length > 0) - slicedOriginalResult.push( - - {searchResult.slice( - mergedIntervals[mergedIntervals.length - 1].to, - searchResult.length - )} - - ) - - return slicedOriginalResult -} - -const SuggestionItemTextHighlighted = ({ text, query }) => { - if (!text) return null - - const textHighlighted = highlightQueryTerms(text, query) - if (Array.isArray(textHighlighted)) { - return textHighlighted.map((item, idx) => ({ - ...item, - key: idx - })) - } - return textHighlighted -} - -export default SuggestionItemTextHighlighted diff --git a/en/cozy-home/src/assistant/ResultMenu/SuggestionItemTextSecondary.jsx b/en/cozy-home/src/assistant/ResultMenu/SuggestionItemTextSecondary.jsx deleted file mode 100644 index a2e5522aa..000000000 --- a/en/cozy-home/src/assistant/ResultMenu/SuggestionItemTextSecondary.jsx +++ /dev/null @@ -1,46 +0,0 @@ -/** - * Code copied and adapted from cozy-drive - * - * See source: https://github.com/cozy/cozy-drive/blob/fbe2df67199683b23a40f476ccdacb00ee027459/src/modules/search/components/SuggestionItemTextSecondary.jsx - */ -import React from 'react' - -import AppLinker from 'cozy-ui/transpiled/react/AppLinker' -import SuggestionItemTextHighlighted from './SuggestionItemTextHighlighted' -import useBreakpoints from 'cozy-ui/transpiled/react/providers/Breakpoints' -import Link from 'cozy-ui/transpiled/react/Link' - -const SuggestionItemTextSecondary = ({ text, query, url, slug }) => { - const { isMobile } = useBreakpoints() - - if (isMobile || !url) { - return - } - - const app = { slug } - return ( - - {({ href, onClick }) => ( - { - e.stopPropagation() - if (typeof onClick == 'function') { - onClick(e) - } - }} - > - - - )} - - ) -} - -export default SuggestionItemTextSecondary diff --git a/en/cozy-home/src/assistant/ResultMenu/styles.styl b/en/cozy-home/src/assistant/ResultMenu/styles.styl deleted file mode 100644 index 4c79c311e..000000000 --- a/en/cozy-home/src/assistant/ResultMenu/styles.styl +++ /dev/null @@ -1,10 +0,0 @@ -.resultMenu - overflow hidden - margin 0 auto - max-width 50rem - max-height 16.5rem - border-radius 0 0 28px 28px - - &-inner - max-height 16.5rem - overflow auto diff --git a/en/cozy-home/src/assistant/Search/EncryptedFolderIcon.jsx b/en/cozy-home/src/assistant/Search/EncryptedFolderIcon.jsx deleted file mode 100644 index ac87226b8..000000000 --- a/en/cozy-home/src/assistant/Search/EncryptedFolderIcon.jsx +++ /dev/null @@ -1,28 +0,0 @@ -import React from 'react' - -const EncryptedFolderIcon = props => { - return ( - - - - - ) -} - -export default EncryptedFolderIcon diff --git a/en/cozy-home/src/assistant/Search/SearchBar.jsx b/en/cozy-home/src/assistant/Search/SearchBar.jsx deleted file mode 100644 index 017c8817e..000000000 --- a/en/cozy-home/src/assistant/Search/SearchBar.jsx +++ /dev/null @@ -1,45 +0,0 @@ -import React, { useState } from 'react' - -import { useBreakpoints } from 'cozy-ui/transpiled/react/providers/Breakpoints' - -import { useSearch } from './SearchProvider' - -import SearchBarMobile from './SearchBarMobile' -import SearchBarDesktop from './SearchBarDesktop' - -const SearchBar = () => { - const { isMobile } = useBreakpoints() - const [inputValue, setInputValue] = useState('') - const { clearSearch, setSelectedIndex, delayedSetSearchValue } = useSearch() - - const handleClear = () => { - setInputValue('') - clearSearch() - } - - const handleChange = ev => { - setSelectedIndex(0) - delayedSetSearchValue(ev.target.value) - setInputValue(ev.target.value) - } - - if (isMobile) { - return ( - - ) - } - - return ( - - ) -} - -export default SearchBar diff --git a/en/cozy-home/src/assistant/Search/SearchBarDesktop.jsx b/en/cozy-home/src/assistant/Search/SearchBarDesktop.jsx deleted file mode 100644 index e22846ed6..000000000 --- a/en/cozy-home/src/assistant/Search/SearchBarDesktop.jsx +++ /dev/null @@ -1,108 +0,0 @@ -import React, { useRef } from 'react' -import { useNavigate } from 'react-router-dom' - -import flag from 'cozy-flags' -import ClickAwayListener from 'cozy-ui/transpiled/react/ClickAwayListener' -import SearchBar from 'cozy-ui/transpiled/react/SearchBar' -import Icon from 'cozy-ui/transpiled/react/Icon' -import { useI18n } from 'cozy-ui/transpiled/react/providers/I18n' - -import AssistantIcon from 'assets/images/icon-assistant.png' - -import ResultMenu from '../ResultMenu/ResultMenu' -import { useAssistant } from '../AssistantProvider' -import { makeConversationId } from '../helpers' -import { useSearch } from './SearchProvider' - -import styles from './styles.styl' - -const SearchBarDesktop = ({ value, onClear, onChange }) => { - const { t } = useI18n() - const { searchValue, results, selectedIndex, setSelectedIndex } = useSearch() - const { onAssistantExecute } = useAssistant() - const navigate = useNavigate() - const searchRef = useRef() - const listRef = useRef() - - const handleClick = () => { - if (!flag('cozy.assistant.enabled')) return - - const conversationId = makeConversationId() - onAssistantExecute({ value, conversationId }) - navigate(`assistant/${conversationId}`) - // setTimeout usefull to prevent the field from emptying before the route is changed - // works because the modal appears on top of the view that carries the input and not instead of it. - setTimeout(() => { - onClear() - }, 100) - } - - const handleKeyDown = ev => { - const listElementCount = listRef.current?.childElementCount - - if (ev.key === 'ArrowDown') { - ev.preventDefault() - - if (selectedIndex === listElementCount - 1) { - setSelectedIndex(0) - } else { - setSelectedIndex(v => v + 1) - } - } - - if (ev.key === 'ArrowUp') { - ev.preventDefault() - - if (selectedIndex === 0) { - setSelectedIndex(listElementCount - 1) - } else { - setSelectedIndex(v => v - 1) - } - } - - if (ev.key === 'Escape') { - ev.preventDefault() - onClear() - } - - if (ev.key === 'Enter') { - ev.preventDefault() - if (selectedIndex) { - const onClickFn = results?.[selectedIndex - 1]?.onClick || handleClick - onClickFn() - } else if (value !== '') { - handleClick() - } - } - } - - return ( - - - } - placeholder={t('assistant.search.placeholder')} - value={value} - componentsProps={{ - inputBase: { onKeyDown: handleKeyDown } - }} - disabledClear - disabledFocus={value !== ''} - onChange={onChange} - /> - {searchValue && ( - - )} - - - ) -} - -export default SearchBarDesktop diff --git a/en/cozy-home/src/assistant/Search/SearchBarMobile.jsx b/en/cozy-home/src/assistant/Search/SearchBarMobile.jsx deleted file mode 100644 index e69f3989d..000000000 --- a/en/cozy-home/src/assistant/Search/SearchBarMobile.jsx +++ /dev/null @@ -1,49 +0,0 @@ -import React, { useRef } from 'react' - -import SearchBar from 'cozy-ui/transpiled/react/SearchBar' -import useEventListener from 'cozy-ui/transpiled/react/hooks/useEventListener' - -import SuggestionsPlaceholder from './SuggestionsPlaceholder' - -import styles from '../Conversations/styles.styl' - -const SearchBarMobile = ({ value, onClear, onChange }) => { - const inputRef = useRef() - - // to adjust input height for multiline when typing in it - useEventListener(inputRef.current, 'input', () => { - inputRef.current.style.height = 'auto' // to resize input when emptying it - inputRef.current.style.height = `${inputRef.current.scrollHeight}px` - }) - - const handleClear = () => { - onClear() - inputRef.current.style.height = 'auto' - } - - return ( - - } - }} - onChange={onChange} - onClear={handleClear} - /> - ) -} - -export default SearchBarMobile diff --git a/en/cozy-home/src/assistant/Search/SearchProvider.jsx b/en/cozy-home/src/assistant/Search/SearchProvider.jsx deleted file mode 100644 index 680bb35c7..000000000 --- a/en/cozy-home/src/assistant/Search/SearchProvider.jsx +++ /dev/null @@ -1,58 +0,0 @@ -import React, { useMemo, useContext, useState, useCallback } from 'react' -import debounce from 'lodash/debounce' - -import { useFetchResult } from './useFetchResult' - -export const SearchContext = React.createContext() - -export const useSearch = () => { - const context = useContext(SearchContext) - - if (!context) { - throw new Error('useSearch must be used within a SearchProvider') - } - return context -} - -const SearchProvider = ({ children }) => { - const [searchValue, setSearchValue] = useState('') - const [selectedIndex, setSelectedIndex] = useState() - const { isLoading, results } = useFetchResult(searchValue) - - const delayedSetSearchValue = useMemo( - () => debounce(setSearchValue, 250), - [setSearchValue] - ) - - const clearSearch = useCallback(() => { - setSearchValue('') - setSelectedIndex() - }, []) - - const value = useMemo( - () => ({ - searchValue, - setSearchValue, - delayedSetSearchValue, - isLoading, - clearSearch, - selectedIndex, - setSelectedIndex, - results - }), - [ - searchValue, - delayedSetSearchValue, - isLoading, - clearSearch, - selectedIndex, - results - ] - ) - - return ( - {children} - ) -} - -export default React.memo(SearchProvider) diff --git a/en/cozy-home/src/assistant/Search/SearchSubmitFab.jsx b/en/cozy-home/src/assistant/Search/SearchSubmitFab.jsx deleted file mode 100644 index e96e8eb66..000000000 --- a/en/cozy-home/src/assistant/Search/SearchSubmitFab.jsx +++ /dev/null @@ -1,38 +0,0 @@ -import React from 'react' - -import Fab from 'cozy-ui/transpiled/react/Fab' -import Icon from 'cozy-ui/transpiled/react/Icon' -import PaperplaneIcon from 'cozy-ui/transpiled/react/Icons/Paperplane' -import { makeStyles } from 'cozy-ui/transpiled/react/styles' -import { getFlagshipMetadata } from 'cozy-device-helper' -import { useI18n } from 'cozy-ui/transpiled/react/providers/I18n' - -const useStyles = makeStyles({ - root: { - right: '1rem', - bottom: '1rem', - position: 'fixed', - marginBottom: ({ immersive }) => - immersive ? 'var(--flagship-bottom-height)' : 0 - } -}) - -const SearchSubmitFab = ({ searchValue, onClick }) => { - const { t } = useI18n() - const styles = useStyles({ immersive: getFlagshipMetadata().immersive }) - - return ( - - - - ) -} - -export default SearchSubmitFab diff --git a/en/cozy-home/src/assistant/Search/SuggestionsPlaceholder.jsx b/en/cozy-home/src/assistant/Search/SuggestionsPlaceholder.jsx deleted file mode 100644 index 29b336919..000000000 --- a/en/cozy-home/src/assistant/Search/SuggestionsPlaceholder.jsx +++ /dev/null @@ -1,42 +0,0 @@ -import React, { useState } from 'react' -import { TypeAnimation } from 'react-type-animation' -import { useTimeoutWhen } from 'rooks' - -import Typography from 'cozy-ui/transpiled/react/Typography' -import { useI18n } from 'cozy-ui/transpiled/react/providers/I18n' - -import styles from './styles.styl' - -const SuggestionsPlaceholder = () => { - const { t } = useI18n() - const [showSuggestions, setShowSuggestions] = useState(false) - - useTimeoutWhen(() => setShowSuggestions(true), 2500) - - return ( -
- - {showSuggestions ? ( - - ) : ( - t('assistant.search.placeholder') - )} - -
- ) -} - -export default SuggestionsPlaceholder diff --git a/en/cozy-home/src/assistant/Search/getFileMimetype.js b/en/cozy-home/src/assistant/Search/getFileMimetype.js deleted file mode 100644 index 7b36cb5de..000000000 --- a/en/cozy-home/src/assistant/Search/getFileMimetype.js +++ /dev/null @@ -1,37 +0,0 @@ -import mime from 'mime-types' - -const getMimetypeFromFilename = name => { - return mime.lookup(name) || 'application/octet-stream' -} - -const mappingMimetypeSubtype = { - word: 'text', - text: 'text', - zip: 'zip', - pdf: 'pdf', - spreadsheet: 'sheet', - excel: 'sheet', - sheet: 'sheet', - presentation: 'slide', - powerpoint: 'slide' -} - -export const getFileMimetype = - collection => - (mime = '', name = '') => { - const mimetype = - mime === 'application/octet-stream' - ? getMimetypeFromFilename(name.toLowerCase()) - : mime - const [type, subtype] = mimetype.split('/') - if (collection[type]) { - return type - } - if (type === 'application') { - const existingType = subtype.match( - Object.keys(mappingMimetypeSubtype).join('|') - ) - return existingType ? mappingMimetypeSubtype[existingType[0]] : undefined - } - return undefined - } diff --git a/en/cozy-home/src/assistant/Search/getIconForSearchResult.js b/en/cozy-home/src/assistant/Search/getIconForSearchResult.js deleted file mode 100644 index 4ddbaca60..000000000 --- a/en/cozy-home/src/assistant/Search/getIconForSearchResult.js +++ /dev/null @@ -1,103 +0,0 @@ -import get from 'lodash/get' - -import ContactsIcon from 'cozy-ui/transpiled/react/Icons/Contacts' -import IconAudio from 'cozy-ui/transpiled/react/Icons/FileTypeAudio' -import IconBin from 'cozy-ui/transpiled/react/Icons/FileTypeBin' -import IconCode from 'cozy-ui/transpiled/react/Icons/FileTypeCode' -import IconFiles from 'cozy-ui/transpiled/react/Icons/FileTypeFiles' -import IconFolder from 'cozy-ui/transpiled/react/Icons/FileTypeFolder' -import IconImage from 'cozy-ui/transpiled/react/Icons/FileTypeImage' -import IconNote from 'cozy-ui/transpiled/react/Icons/FileTypeNote' -import IconPdf from 'cozy-ui/transpiled/react/Icons/FileTypePdf' -import IconSheet from 'cozy-ui/transpiled/react/Icons/FileTypeSheet' -import IconSlide from 'cozy-ui/transpiled/react/Icons/FileTypeSlide' -import IconText from 'cozy-ui/transpiled/react/Icons/FileTypeText' -import IconVideo from 'cozy-ui/transpiled/react/Icons/FileTypeVideo' -import IconZip from 'cozy-ui/transpiled/react/Icons/FileTypeZip' - -import EncryptedFolderIcon from './EncryptedFolderIcon' -import { getFileMimetype } from './getFileMimetype' - -export const getIconForSearchResult = searchResult => { - if (searchResult.doc._type === 'io.cozy.apps') { - return { - type: 'app', - app: searchResult.doc - } - } - - if (searchResult.slug === 'notes') { - return { - type: 'component', - component: IconNote - } - } - - if (searchResult.slug === 'drive') { - return { - type: 'component', - component: getDriveMimeTypeIcon( - searchResult.doc.type === 'directory', - searchResult.doc.name, - searchResult.doc.mime - ) - } - } - - if (searchResult.slug === 'contacts') { - return { - type: 'component', - component: ContactsIcon - } - } - - return { - type: 'component', - component: IconFiles - } -} - -/** - * Returns the appropriate icon for a given file based on its mime type and other properties. - * - * This method has been copied from cozy-drive - * - * See source: https://github.com/cozy/cozy-drive/blob/fbe2df67199683b23a40f476ccdacb00ee027459/src/lib/getMimeTypeIcon.js - * - * @param {boolean} isDirectory - Indicates whether the file is a directory. - * @param {string} name - The name of the file. - * @param {string} mime - The mime type of the file. - * @param {Object} [options] - Additional options. - * @param {boolean} [options.isEncrypted] - Indicates whether the file is encrypted. Default is false. - * @returns {import('react').ReactNode} - The icon corresponding to the file's mime type. - */ -export const getDriveMimeTypeIcon = ( - isDirectory, - name, - mime, - { isEncrypted = false } = {} -) => { - if (isEncrypted) { - return EncryptedFolderIcon - } - if (isDirectory) { - return IconFolder - } else if (/\.cozy-note$/.test(name)) { - return IconNote - } else { - const iconsByMimeType = { - audio: IconAudio, - bin: IconBin, - code: IconCode, - image: IconImage, - pdf: IconPdf, - slide: IconSlide, - sheet: IconSheet, - text: IconText, - video: IconVideo, - zip: IconZip - } - const type = getFileMimetype(iconsByMimeType)(mime, name) - return get(iconsByMimeType, type, IconFiles) - } -} diff --git a/en/cozy-home/src/assistant/Search/styles.styl b/en/cozy-home/src/assistant/Search/styles.styl deleted file mode 100644 index 09eeab688..000000000 --- a/en/cozy-home/src/assistant/Search/styles.styl +++ /dev/null @@ -1,7 +0,0 @@ -.searchBarDesktop--result - border-radius 28px 28px 0 0 !important - -.suggestionsPlaceholder - position absolute - opacity 0.42 - pointer-events none diff --git a/en/cozy-home/src/assistant/Search/useFetchResult.jsx b/en/cozy-home/src/assistant/Search/useFetchResult.jsx deleted file mode 100644 index 9a8832579..000000000 --- a/en/cozy-home/src/assistant/Search/useFetchResult.jsx +++ /dev/null @@ -1,65 +0,0 @@ -import { useEffect, useState } from 'react' - -import Minilog from 'cozy-minilog' - -import { useDataProxy } from 'dataproxy/DataProxyProvider' - -import { getIconForSearchResult } from './getIconForSearchResult' - -const log = Minilog('🔍 [useFetchResult]') - -export const useFetchResult = searchValue => { - const [state, setState] = useState({ - isLoading: true, - results: null, - searchValue: null - }) - const dataProxy = useDataProxy() - - useEffect(() => { - const fetch = async searchValue => { - if (!dataProxy.dataProxyServicesAvailable) { - log.log('DataProxy services are not available. Skipping search...') - return - } - - setState({ isLoading: true, results: null, searchValue }) - - const searchResults = await dataProxy.search(searchValue) - - const results = searchResults.map(r => { - // Begin Retrocompatibility code, to be removed when following PR is merged: https://github.com/cozy/cozy-web-data-proxy/pull/10 - r.slug = r.slug || r.type - r.subTitle = r.subTitle || r.name - // End Retrocompatibility code - const icon = getIconForSearchResult(r) - return { - id: r.doc._id, - icon: icon, - slug: r.slug, - secondaryUrl: r.secondaryUrl, - primary: r.title, - secondary: r.subTitle, - onClick: () => { - window.open(r.url) - } - } - }) - - setState({ isLoading: false, results, searchValue }) - } - - if (searchValue) { - if (searchValue !== state.searchValue) { - fetch(searchValue) - } - } else { - setState({ isLoading: true, results: null, searchValue: null }) - } - }, [dataProxy, searchValue, state.searchValue, setState]) - - return { - isLoading: state.isLoading, - results: state.results - } -} diff --git a/en/cozy-home/src/assistant/Views/AssistantDialog.jsx b/en/cozy-home/src/assistant/Views/AssistantDialog.jsx deleted file mode 100644 index 7d6e0a069..000000000 --- a/en/cozy-home/src/assistant/Views/AssistantDialog.jsx +++ /dev/null @@ -1,50 +0,0 @@ -import React from 'react' -import { useNavigate, useParams } from 'react-router-dom' - -import { FixedDialog } from 'cozy-ui/transpiled/react/CozyDialogs' -import CozyTheme from 'cozy-ui/transpiled/react/providers/CozyTheme' -import { useBreakpoints } from 'cozy-ui/transpiled/react/providers/Breakpoints' - -import Conversation from '../Conversations/Conversation' -import ConversationBar from '../Conversations/ConversationBar' -import AssistantProvider, { useAssistant } from '../AssistantProvider' - -const AssistantDialog = () => { - const { assistantState } = useAssistant() - const { isMobile } = useBreakpoints() - const navigate = useNavigate() - const { conversationId } = useParams() - - const onClose = () => { - navigate('..') - } - - return ( - } - actions={} - onClose={onClose} - /> - ) -} - -const AssistantDialogWithProviders = () => { - return ( - - - - - - ) -} - -export default AssistantDialogWithProviders diff --git a/en/cozy-home/src/assistant/Views/SearchDialog.jsx b/en/cozy-home/src/assistant/Views/SearchDialog.jsx deleted file mode 100644 index 15bac1581..000000000 --- a/en/cozy-home/src/assistant/Views/SearchDialog.jsx +++ /dev/null @@ -1,68 +0,0 @@ -import React from 'react' -import { useNavigate } from 'react-router-dom' - -import flag from 'cozy-flags' -import { FixedDialog } from 'cozy-ui/transpiled/react/CozyDialogs' -import CozyTheme from 'cozy-ui/transpiled/react/providers/CozyTheme' - -import SearchProvider from '../Search/SearchProvider' -import AssistantProvider, { useAssistant } from '../AssistantProvider' -import { makeConversationId } from '../helpers' -import ResultMenuContent from '../ResultMenu/ResultMenuContent' -import { useSearch } from '../Search/SearchProvider' -import SearchBar from '../Search/SearchBar' -import SearchSubmitFab from '../Search/SearchSubmitFab' - -const SearchDialog = () => { - const { onAssistantExecute } = useAssistant() - const navigate = useNavigate() - const { searchValue } = useSearch() - - const handleClick = () => { - const conversationId = makeConversationId() - onAssistantExecute({ value: searchValue, conversationId }) - navigate(`../assistant/${conversationId}`, { replace: true }) - } - - const handleClose = () => { - navigate('..') - } - - return ( - } - content={ - <> - {searchValue && } - {flag('cozy.assistant.enabled') && ( - - )} - - } - onClose={handleClose} - /> - ) -} - -const SearchDialogWithProviders = () => { - return ( - - - - - - - - ) -} - -export default SearchDialogWithProviders diff --git a/en/cozy-home/src/assistant/helpers.js b/en/cozy-home/src/assistant/helpers.js deleted file mode 100644 index 6d53d5458..000000000 --- a/en/cozy-home/src/assistant/helpers.js +++ /dev/null @@ -1,21 +0,0 @@ -export const getInstantMessage = assistantState => - Object.keys(assistantState.message) - .sort((a, b) => a - b) - .map(key => assistantState.message[key]) - .join('') - -export const makeConversationId = () => - `${Date.now()}-${Math.floor(Math.random() * 90000) + 10000}` - -export const pushMessagesIdInState = (id, res, setState) => { - if (id !== res._id) return - - const messagesId = res.messages.map(message => message.id) - setState(v => ({ - ...v, - messagesId - })) -} - -export const isMessageForThisConversation = (res, messagesId) => - messagesId.includes(res._id) diff --git a/en/cozy-home/src/assistant/queries.js b/en/cozy-home/src/assistant/queries.js deleted file mode 100644 index cf24beaf1..000000000 --- a/en/cozy-home/src/assistant/queries.js +++ /dev/null @@ -1,39 +0,0 @@ -import { Q, fetchPolicies } from 'cozy-client' - -const CONTACTS_DOCTYPE = 'io.cozy.contacts' -export const CHAT_CONVERSATIONS_DOCTYPE = 'io.cozy.ai.chat.conversations' -export const CHAT_EVENTS_DOCTYPE = 'io.cozy.ai.chat.events' -export const FILES_DOCTYPE = 'io.cozy.files' - -const defaultFetchPolicy = fetchPolicies.olderThan(86_400_000) // 24 hours - -export const buildFilesByIds = ids => { - return { - definition: Q(FILES_DOCTYPE).getByIds(ids), - options: { - as: `${FILES_DOCTYPE}/${ids.join('')}`, - fetchPolicy: defaultFetchPolicy - } - } -} - -export const buildChatConversationQueryById = id => { - return { - definition: Q(CHAT_CONVERSATIONS_DOCTYPE).getById(id), - options: { - as: `${CHAT_CONVERSATIONS_DOCTYPE}/${id}`, - fetchPolicy: defaultFetchPolicy, - singleDocData: true - } - } -} - -export const buildMyselfQuery = () => { - return { - definition: Q(CONTACTS_DOCTYPE).where({ me: true }), - options: { - as: `${CONTACTS_DOCTYPE}/myself`, - fetchPolicy: defaultFetchPolicy - } - } -} diff --git a/en/cozy-home/src/components/AppWrapper.jsx b/en/cozy-home/src/components/AppWrapper.jsx index e0bc2f989..36b42de31 100644 --- a/en/cozy-home/src/components/AppWrapper.jsx +++ b/en/cozy-home/src/components/AppWrapper.jsx @@ -16,7 +16,7 @@ import configureStore from 'store/configureStore' import { RealtimePlugin } from 'cozy-realtime' // import { isFlagshipApp } from 'cozy-device-helper' -import { DataProxyProvider } from 'dataproxy/DataProxyProvider' +import { DataProxyProvider } from 'cozy-dataproxy-lib' import { useWallpaperContext } from 'hooks/useWallpaperContext' import schema from '../schema' diff --git a/en/cozy-home/src/components/Assistant/AssistantDesktopWrapper.jsx b/en/cozy-home/src/components/Assistant/AssistantDesktopWrapper.jsx new file mode 100644 index 000000000..784344fb9 --- /dev/null +++ b/en/cozy-home/src/components/Assistant/AssistantDesktopWrapper.jsx @@ -0,0 +1,24 @@ +import React from 'react' + +import CozyTheme from 'cozy-ui/transpiled/react/providers/CozyTheme' + +import { AssistantDesktop } from 'cozy-dataproxy-lib' + +export const AssistantDesktopWrapper = () => { + return ( + +
+ +
+
+ ) +} + +export default AssistantDesktopWrapper diff --git a/en/cozy-home/src/components/Assistant/AssistantMobileWrapper.jsx b/en/cozy-home/src/components/Assistant/AssistantMobileWrapper.jsx new file mode 100644 index 000000000..a11a88865 --- /dev/null +++ b/en/cozy-home/src/components/Assistant/AssistantMobileWrapper.jsx @@ -0,0 +1,39 @@ +import cx from 'classnames' +import React from 'react' + +import { getFlagshipMetadata } from 'cozy-device-helper' +import flag from 'cozy-flags' + +import CozyTheme, { + useCozyTheme +} from 'cozy-ui/transpiled/react/providers/CozyTheme' + +import styles from './styles.styl' + +import { useWallpaperContext } from 'hooks/useWallpaperContext' +import { AssistantMobile } from 'cozy-dataproxy-lib' + +export const AssistantMobileWrapper = () => { + const { type } = useCozyTheme() + + const { + data: { isCustomWallpaper } + } = useWallpaperContext() + + return ( + +
+ +
+
+ ) +} + +export default AssistantMobileWrapper diff --git a/en/cozy-home/src/assistant/styles.styl b/en/cozy-home/src/components/Assistant/styles.styl similarity index 91% rename from en/cozy-home/src/assistant/styles.styl rename to en/cozy-home/src/components/Assistant/styles.styl index 912289751..7fb5a8c07 100644 --- a/en/cozy-home/src/assistant/styles.styl +++ b/en/cozy-home/src/components/Assistant/styles.styl @@ -1,4 +1,4 @@ -.assistantWrapper-mobile +.mobile-assistant position fixed bottom 0 right 0 diff --git a/en/cozy-home/src/components/Home.jsx b/en/cozy-home/src/components/Home.jsx index ef8558f8f..9d77b1b04 100644 --- a/en/cozy-home/src/components/Home.jsx +++ b/en/cozy-home/src/components/Home.jsx @@ -7,8 +7,8 @@ import { CozyConfirmDialogProvider } from 'cozy-harvest-lib' import { getFlagshipMetadata } from 'cozy-device-helper' import { Main, Content } from 'cozy-ui/transpiled/react/Layout' import { useBreakpoints } from 'cozy-ui/transpiled/react/providers/Breakpoints' +import { AssistantDesktopWrapper } from 'components/Assistant/AssistantDesktopWrapper' -import AssistantWrapperDesktop from 'assistant/AssistantWrapperDesktop' import Applications from 'components/Applications' import ScrollToTopOnMount from 'components/ScrollToTopOnMount' import Services from 'components/Services' @@ -28,7 +28,7 @@ const Home = ({ setAppsReady, wrapper }) => { {pathname === '/connected' && } {flag('cozy.searchbar.enabled') && !isMobile && ( - + )} { - {showAssistantForMobile && } + {showAssistantForMobile && } {isFlagshipApp() && } {flag(FLAG_FAB_BUTTON_ENABLED) && isMobile && } diff --git a/en/cozy-home/src/locales/en.json b/en/cozy-home/src/locales/en.json index 819d1240d..80202a9de 100644 --- a/en/cozy-home/src/locales/en.json +++ b/en/cozy-home/src/locales/en.json @@ -1,21 +1,4 @@ { - "assistant": { - "search": { - "placeholder": "Any question?", - "send": "Send", - "result": "Ask the assistant" - }, - "dialog": { - "close": "Close" - }, - "name":"Cozy Assistant", - "sources":"%{smart_count} source |||| %{smart_count} sources", - "suggestions": { - "find_file": "Search a file", - "reimbursements": "Check my repayments", - "reorganise_files": "Reorganise my files" - } - }, "app": { "logo": { "alt": "%{name} logo" diff --git a/en/cozy-home/src/locales/fr.json b/en/cozy-home/src/locales/fr.json index 703de1321..ae8b4f6cc 100644 --- a/en/cozy-home/src/locales/fr.json +++ b/en/cozy-home/src/locales/fr.json @@ -1,21 +1,4 @@ { - "assistant": { - "search": { - "placeholder": "Une question ?", - "send": "Envoyer", - "result": "Demander à l'assistant" - }, - "dialog": { - "close": "Fermer" - }, - "name":"Assistant Cozy", - "sources":"%{smart_count} source |||| %{smart_count} sources", - "suggestions": { - "find_file": "Rechercher un fichier", - "reimbursements": "Vérifier mes remboursements", - "reorganise_files": "Réorganiser mes fichiers" - } - }, "app": { "logo": { "alt": "Logo de %{name}" diff --git a/en/cozy-home/src/targets/browser/renderApp.tsx b/en/cozy-home/src/targets/browser/renderApp.tsx index 2a3725323..8b932fd28 100644 --- a/en/cozy-home/src/targets/browser/renderApp.tsx +++ b/en/cozy-home/src/targets/browser/renderApp.tsx @@ -1,5 +1,6 @@ import 'cozy-ui/transpiled/react/stylesheet.css' import 'cozy-ui/dist/cozy-ui.utils.min.css' +import 'cozy-dataproxy-lib/dist/stylesheet.css' import 'styles/index.styl' import 'url-search-params-polyfill' diff --git a/en/cozy-home/test/jestLib/setup.js b/en/cozy-home/test/jestLib/setup.js index abf8ab3cc..5c9977a08 100644 --- a/en/cozy-home/test/jestLib/setup.js +++ b/en/cozy-home/test/jestLib/setup.js @@ -1,4 +1,5 @@ import '@testing-library/jest-dom' +import React from 'react' import log from 'cozy-logger' @@ -28,3 +29,11 @@ console.warn = function (msg, msg2) { } return originalWarn.apply(this, arguments) } + +jest.mock('cozy-dataproxy-lib', () => ({ + DataProxyProvider: ({ children }) => children, + SearchDialog: () =>
SearchDialog
, + AssistantDialog: () =>
AssistantDialog
, + AssistantDesktop: () =>
AssistantDesktop
, + AssistantMobile: () =>
AssistantMobile
+})) diff --git a/en/cozy-home/yarn.lock b/en/cozy-home/yarn.lock index 77b5091ea..019523289 100644 --- a/en/cozy-home/yarn.lock +++ b/en/cozy-home/yarn.lock @@ -4154,6 +4154,13 @@ abab@^2.0.6: resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== +abort-controller@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" + integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== + dependencies: + event-target-shim "^5.0.0" + accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: version "1.3.7" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" @@ -4401,6 +4408,11 @@ argparse@^2.0.1: resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== +argsarray@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/argsarray/-/argsarray-0.0.1.tgz#6e7207b4ecdb39b0af88303fa5ae22bda8df61cb" + integrity sha512-u96dg2GcAKtpTrBdDoFIM7PjcBA+6rSP0OR94MOReNRyUECL6MtQt5XXmRr4qrftYaef9+l5hcpO5te7sML1Cg== + aria-query@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.0.0.tgz#210c21aaf469613ee8c9a62c7f86525e058db52c" @@ -5192,6 +5204,11 @@ btoa@^1.2.1: resolved "https://registry.yarnpkg.com/btoa/-/btoa-1.2.1.tgz#01a9909f8b2c93f6bf680ba26131eb30f7fa3d73" integrity sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g== +buffer-from@1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + buffer-from@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.0.tgz#87fcaa3a298358e0ade6e442cfce840740d1ad04" @@ -5598,6 +5615,11 @@ class-utils@^0.3.5: isobject "^3.0.0" static-extend "^0.1.1" +classnames@2.5.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.5.1.tgz#ba774c614be0f016da105c858e7159eae8e7687b" + integrity sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow== + classnames@^2.2.5, classnames@^2.2.6: version "2.2.6" resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.6.tgz#43935bffdd291f326dad0a205309b38d00f650ce" @@ -5671,6 +5693,11 @@ cliui@^7.0.2: strip-ansi "^6.0.0" wrap-ansi "^7.0.0" +clone-buffer@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/clone-buffer/-/clone-buffer-1.0.0.tgz#e3e25b207ac4e701af721e2cb5a16792cac3dc58" + integrity sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g== + clone@^1.0.2: version "1.0.4" resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" @@ -6002,10 +6029,35 @@ cozy-bi-auth@0.0.25: lodash "^4.17.20" node-jose "^1.1.4" +cozy-client@^50.4.0: + version "50.4.0" + resolved "https://registry.yarnpkg.com/cozy-client/-/cozy-client-50.4.0.tgz#dc341e71b2acee90342cf86e17392e890e7e7093" + integrity sha512-DINi/YwDrzBkXzcm63hFj8Y09yzzLaRWhJqyCu1JT6bdIpV2jc9lJMJe1pcud8xfg29OzSQ5/8gDf5MaQLkzsQ== + dependencies: + "@cozy/minilog" "1.0.0" + "@types/jest" "^26.0.20" + "@types/lodash" "^4.14.170" + btoa "^1.2.1" + cozy-stack-client "^50.4.0" + date-fns "2.29.3" + json-stable-stringify "^1.0.1" + lodash "^4.17.13" + microee "^0.0.6" + node-fetch "^2.6.1" + node-polyglot "2.4.2" + open "7.4.2" + prop-types "^15.6.2" + react-redux "^7.2.0" + redux "3 || 4" + redux-thunk "^2.3.0" + server-destroy "^1.0.1" + sift "^6.0.0" + url-search-params-polyfill "^8.0.0" + cozy-client@^51.6.0: - version "51.6.0" - resolved "https://registry.yarnpkg.com/cozy-client/-/cozy-client-51.6.0.tgz#22f77a40f316011d8e8a298cc9d4cbc7cfdbbcc0" - integrity sha512-H0jhhju5jhoQHCiPZB2tfoRZb4QrhxfArNTRwLs5Lsd3+5WmtaSnPgbQUTBHWPRCv7qxP89Spz7eSgDmpdzA5Q== + version "51.6.1" + resolved "https://registry.yarnpkg.com/cozy-client/-/cozy-client-51.6.1.tgz#55ba89c3ddedf47444ef2aa2799b5e6d12e04f76" + integrity sha512-++MbwaarzQWEpZIfbovWRNWcGWpWwhTC40S5CHjIDIZzSWKLe7mq2nhPw/cgeorj+JWSR7t6CoekJp9E2aOInQ== dependencies: "@cozy/minilog" "1.0.0" "@types/jest" "^26.0.20" @@ -6027,6 +6079,21 @@ cozy-client@^51.6.0: sift "^6.0.0" url-search-params-polyfill "^8.0.0" +cozy-dataproxy-lib@^1.9.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/cozy-dataproxy-lib/-/cozy-dataproxy-lib-1.9.0.tgz#5e43d49f2ac86e5d6a96bb74260e2567392626eb" + integrity sha512-ij9a3x20THxCRjvqcG8yR3hJXZhidDWawaTsfQaCT/eQUS5vwGx4Ob2p6Fur4G8GqayMSmbMsrfkGXv4JlEb/g== + dependencies: + classnames "2.5.1" + comlink "4.4.1" + cozy-device-helper "^3.7.1" + cozy-pouch-link "^50.3.1" + flexsearch "0.7.43" + lodash "4.17.21" + mime-types "2.1.35" + react-type-animation "3.2.0" + rooks "7.14.1" + cozy-device-helper@2.7.0, cozy-device-helper@^2.1.0: version "2.7.0" resolved "https://registry.yarnpkg.com/cozy-device-helper/-/cozy-device-helper-2.7.0.tgz#573749997f18e5a1f11f720faec8c9bf2406beeb" @@ -6048,6 +6115,13 @@ cozy-device-helper@^3.1.2: dependencies: lodash "^4.17.19" +cozy-device-helper@^3.7.1: + version "3.7.1" + resolved "https://registry.yarnpkg.com/cozy-device-helper/-/cozy-device-helper-3.7.1.tgz#59f11ab3ab92335525a767e78f983b07eeaf4eea" + integrity sha512-D0zkEFynUrICNhQixyyYGhRHTwgJL+pf7XtmTwjKePIn2pNHKw5V64IhGg9uLYf6tI9uivkUKvZvFYuKzEvlqA== + dependencies: + lodash "^4.17.19" + cozy-devtools@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/cozy-devtools/-/cozy-devtools-1.2.1.tgz#680976ab69ebdf2d2727cffc07243705794d1a83" @@ -6212,6 +6286,15 @@ cozy-minilog@^3.9.1: dependencies: microee "0.0.6" +cozy-pouch-link@^50.3.1: + version "50.4.0" + resolved "https://registry.yarnpkg.com/cozy-pouch-link/-/cozy-pouch-link-50.4.0.tgz#6cd18521a8652502783d35ec6735de40af47ce62" + integrity sha512-7CkyEpsjjxE/24oMsxOcrQT+FWi7LPK0kYKx/KoiD7VX1QxHcZSubjnPjREJJkECs1JwIiAH5z/h99qVO4hArQ== + dependencies: + cozy-client "^50.4.0" + pouchdb-browser "^7.2.2" + pouchdb-find "^7.2.2" + cozy-realtime@^5.0.4: version "5.0.4" resolved "https://registry.yarnpkg.com/cozy-realtime/-/cozy-realtime-5.0.4.tgz#17ebf7d82239a3df3b8ff588fc2356b55fbc48ff" @@ -6227,10 +6310,10 @@ cozy-release@1.10.0: dependencies: exec-sh "0.3.2" -cozy-scripts@8.2.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/cozy-scripts/-/cozy-scripts-8.2.0.tgz#a3286078ab331e55e24fcc41ef3d20b90a5c64cc" - integrity sha512-kAHBOkPBP/2nkpP/EU9I54HrUEcTusxx2j745RWuTK+Ag/QtqVccLxYQdFo+Bf69akNXJ8cMfM3YQc24VpqFRQ== +cozy-scripts@8.4.0: + version "8.4.0" + resolved "https://registry.yarnpkg.com/cozy-scripts/-/cozy-scripts-8.4.0.tgz#d1c5e531d3cf452e6fab896343d82a22452ece56" + integrity sha512-ol+UcsFW2fNixFGrVWTxCEOsLnmhqvTPggANvvkmLMqw4xMgpddiSetWVKdUrtnTnSqTzpL4My4V+BsQl73xuA== dependencies: "@babel/core" "7.10.0" "@babel/polyfill" "^7.10.4" @@ -6301,10 +6384,10 @@ cozy-sharing@^16.0.0: react-tooltip "^3.11.1" snarkdown "^2.0.0" -cozy-stack-client@^51.0.0: - version "51.0.0" - resolved "https://registry.yarnpkg.com/cozy-stack-client/-/cozy-stack-client-51.0.0.tgz#73fbdb1cf8efc46cb89ad2266d04e1289a9ae355" - integrity sha512-ToaheKT0cziulvAxUl+H8mqmSXQmblCp6a5TKNnrEHOS3ExTmzOHmIgNrRDgDKi4G8hK93CZTi8gj49ffk0HYw== +cozy-stack-client@^50.4.0: + version "50.4.0" + resolved "https://registry.yarnpkg.com/cozy-stack-client/-/cozy-stack-client-50.4.0.tgz#3326a1299cacb06b95a484dc656cc301ce811ade" + integrity sha512-u8NXO6uUrcT0SggtOePpOXftGdwe1zCiOHQIzvUAeuZIt4mVruF1zYXaPz90/zI4pHzr8mHH2h6KXHgH1McjWA== dependencies: detect-node "^2.0.4" mime "^2.4.0" @@ -8037,6 +8120,11 @@ etag@~1.8.1: resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= +event-target-shim@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" + integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== + eventemitter3@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.0.tgz#d65176163887ee59f386d64c82610b696a4a74eb" @@ -8314,6 +8402,13 @@ fb-watchman@^2.0.0: dependencies: bser "2.1.1" +fetch-cookie@0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/fetch-cookie/-/fetch-cookie-0.11.0.tgz#e046d2abadd0ded5804ce7e2cae06d4331c15407" + integrity sha512-BQm7iZLFhMWFy5CZ/162sAGjBfdNWb7a8LEqqnzsHFhxT/X/SVj/z2t2nu3aJvjlbQkrAlTUApplPRjWyH4mhA== + dependencies: + tough-cookie "^2.3.3 || ^3.0.1 || ^4.0.0" + figgy-pudding@^3.5.1: version "3.5.1" resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790" @@ -8505,6 +8600,11 @@ flatted@^3.1.0: resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.5.tgz#76c8584f4fc843db64702a6bd04ab7a8bd666da3" integrity sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg== +flexsearch@0.7.43: + version "0.7.43" + resolved "https://registry.yarnpkg.com/flexsearch/-/flexsearch-0.7.43.tgz#34f89b36278a466ce379c5bf6fb341965ed3f16c" + integrity sha512-c5o/+Um8aqCSOXGcZoqZOm+NqtVwNsvVpWv6lfmSclU954O3wvQKxxK8zj74fPaSJbXpSLTs4PRhh+wnoCXnKg== + fluids@^0.1.6: version "0.1.10" resolved "https://registry.yarnpkg.com/fluids/-/fluids-0.1.10.tgz#0517e7a53dbce1db011dddec301b75178518ba0e" @@ -9507,6 +9607,11 @@ image-size@^0.5.1: resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.5.5.tgz#09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c" integrity sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w= +immediate@3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.3.0.tgz#1aef225517836bcdf7f2a2de2600c79ff0269266" + integrity sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q== + immediate@~3.0.5: version "3.0.6" resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" @@ -9614,7 +9719,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.0, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: +inherits@2, inherits@2.0.4, inherits@^2.0.0, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -13605,6 +13710,118 @@ posthtml@^0.9.2: posthtml-parser "^0.2.0" posthtml-render "^1.0.5" +pouchdb-abstract-mapreduce@7.3.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/pouchdb-abstract-mapreduce/-/pouchdb-abstract-mapreduce-7.3.1.tgz#96ff4a0f41cbe273f3f52fde003b719005a2093c" + integrity sha512-0zKXVFBvrfc1KnN0ggrB762JDmZnUpePHywo9Bq3Jy+L1FnoG7fXM5luFfvv5/T0gEw+ZTIwoocZECMnESBI9w== + dependencies: + pouchdb-binary-utils "7.3.1" + pouchdb-collate "7.3.1" + pouchdb-collections "7.3.1" + pouchdb-errors "7.3.1" + pouchdb-fetch "7.3.1" + pouchdb-mapreduce-utils "7.3.1" + pouchdb-md5 "7.3.1" + pouchdb-utils "7.3.1" + +pouchdb-binary-utils@7.3.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/pouchdb-binary-utils/-/pouchdb-binary-utils-7.3.1.tgz#eea22d9a5f880fcd95062476f4f5484cdf61496f" + integrity sha512-crZJNfAEOnUoRk977Qtmk4cxEv6sNKllQ6vDDKgQrQLFjMUXma35EHzNyIJr1s76J77Q4sqKQAmxz9Y40yHGtw== + dependencies: + buffer-from "1.1.2" + +pouchdb-browser@^7.2.2: + version "7.3.1" + resolved "https://registry.yarnpkg.com/pouchdb-browser/-/pouchdb-browser-7.3.1.tgz#6b2f9f35f42d2c83fc205de5e0403c0aae7046aa" + integrity sha512-qZ8awkXl/woBHvEVqNHjDtwPDA7A9v4ItHtX1y1eVpKel4mlYqnIJ8K6pRcFUZmVaHinJW8K3uS32eHC1q0yOA== + dependencies: + argsarray "0.0.1" + immediate "3.3.0" + inherits "2.0.4" + spark-md5 "3.0.2" + uuid "8.3.2" + vuvuzela "1.0.3" + +pouchdb-collate@7.3.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/pouchdb-collate/-/pouchdb-collate-7.3.1.tgz#19d7b87dd173d1c765da8cc9987c5aa9eb24f11f" + integrity sha512-o4gyGqDMLMSNzf6EDTr3eHaH/JRMoqRhdc+eV+oA8u00nTBtr9wD+jypVe2LbgKLJ4NWqx2qVkXiTiQdUFtsLQ== + +pouchdb-collections@7.3.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/pouchdb-collections/-/pouchdb-collections-7.3.1.tgz#4f1819cf4dd6936a422c29f7fa26a9b5dca428f5" + integrity sha512-yUyDqR+OJmtwgExOSJegpBJXDLAEC84TWnbAYycyh+DZoA51Yw0+XVQF5Vh8Ii90/Ut2xo88fmrmp0t6kqom8w== + +pouchdb-errors@7.3.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/pouchdb-errors/-/pouchdb-errors-7.3.1.tgz#78be36721e2edc446fac158a236a9218c7bcdb14" + integrity sha512-Zktz4gnXEUcZcty8FmyvtYUYsHskoST05m6H5/E2gg/0mCfEXq/XeyyLkZHaZmqD0ZPS9yNmASB1VaFWEKEaDw== + dependencies: + inherits "2.0.4" + +pouchdb-fetch@7.3.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/pouchdb-fetch/-/pouchdb-fetch-7.3.1.tgz#d54b1807be0f0a5d4b6d06e416c7d54952bbc348" + integrity sha512-205xAtvdHRPQ4fp1h9+RmT9oQabo9gafuPmWsS9aEl3ER54WbY8Vaj1JHZGbU4KtMTYvW7H5088zLS7Nrusuag== + dependencies: + abort-controller "3.0.0" + fetch-cookie "0.11.0" + node-fetch "2.6.7" + +pouchdb-find@^7.2.2: + version "7.3.1" + resolved "https://registry.yarnpkg.com/pouchdb-find/-/pouchdb-find-7.3.1.tgz#07a633d5ee2bd731dae9f991281cd25212088d29" + integrity sha512-AeqUfAVY1c7IFaY36BRT0vIz9r4VTKq/YOWTmiqndOZUQ/pDGxyO2fNFal6NN3PyYww0JijlD377cPvhnrhJVA== + dependencies: + pouchdb-abstract-mapreduce "7.3.1" + pouchdb-collate "7.3.1" + pouchdb-errors "7.3.1" + pouchdb-fetch "7.3.1" + pouchdb-md5 "7.3.1" + pouchdb-selector-core "7.3.1" + pouchdb-utils "7.3.1" + +pouchdb-mapreduce-utils@7.3.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/pouchdb-mapreduce-utils/-/pouchdb-mapreduce-utils-7.3.1.tgz#f0ac2c8400fbedb705e9226082453ac7d3f2a066" + integrity sha512-oUMcq82+4pTGQ6dtrhgORHOVHZSr6w/5tFIUGlv7RABIDvJarL4snMawADjlpiEwPdiQ/ESG8Fqt8cxqvqsIgg== + dependencies: + argsarray "0.0.1" + inherits "2.0.4" + pouchdb-collections "7.3.1" + pouchdb-utils "7.3.1" + +pouchdb-md5@7.3.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/pouchdb-md5/-/pouchdb-md5-7.3.1.tgz#70fae44f9d27eb4c6a8e7106156b4593d31c1762" + integrity sha512-aDV8ui/mprnL3xmt0gT/81DFtTtJiKyn+OxIAbwKPMfz/rDFdPYvF0BmDC9QxMMzGfkV+JJUjU6at0PPs2mRLg== + dependencies: + pouchdb-binary-utils "7.3.1" + spark-md5 "3.0.2" + +pouchdb-selector-core@7.3.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/pouchdb-selector-core/-/pouchdb-selector-core-7.3.1.tgz#08245662de3d61f16ab8dae2b56ef622935b3fb3" + integrity sha512-HBX+nNGXcaL9z0uNpwSMRq2GNZd3EZXW+fe9rJHS0hvJohjZL7aRJLoaXfEdHPRTNW+CpjM3Rny60eGekQdI/w== + dependencies: + pouchdb-collate "7.3.1" + pouchdb-utils "7.3.1" + +pouchdb-utils@7.3.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/pouchdb-utils/-/pouchdb-utils-7.3.1.tgz#d25f0a034427f388ba5ae37d9ae3fbed210e8720" + integrity sha512-R3hHBo1zTdTu/NFs3iqkcaQAPwhIH0gMIdfVKd5lbDYlmP26rCG5pdS+v7NuoSSFLJ4xxnaGV+Gjf4duYsJ8wQ== + dependencies: + argsarray "0.0.1" + clone-buffer "1.0.0" + immediate "3.3.0" + inherits "2.0.4" + pouchdb-collections "7.3.1" + pouchdb-errors "7.3.1" + pouchdb-md5 "7.3.1" + uuid "8.3.2" + prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" @@ -15604,6 +15821,11 @@ source-map@^0.7.3: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== +spark-md5@3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/spark-md5/-/spark-md5-3.0.2.tgz#7952c4a30784347abcee73268e473b9c0167e3fc" + integrity sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw== + spdx-correct@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" @@ -16475,6 +16697,16 @@ toposort@^2.0.2: resolved "https://registry.yarnpkg.com/toposort/-/toposort-2.0.2.tgz#ae21768175d1559d48bef35420b2f4962f09c330" integrity sha1-riF2gXXRVZ1IvvNUILL0li8JwzA= +"tough-cookie@^2.3.3 || ^3.0.1 || ^4.0.0": + version "4.1.4" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.4.tgz#945f1461b45b5a8c76821c33ea49c3ac192c1b36" + integrity sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag== + dependencies: + psl "^1.1.33" + punycode "^2.1.1" + universalify "^0.2.0" + url-parse "^1.5.3" + tough-cookie@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.0.0.tgz#d822234eeca882f991f0f908824ad2622ddbece4" @@ -16893,6 +17125,11 @@ universalify@^0.1.0, universalify@^0.1.2: resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== +universalify@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" + integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== + unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" @@ -16946,7 +17183,7 @@ url-join@^1.1.0: resolved "https://registry.yarnpkg.com/url-join/-/url-join-1.1.0.tgz#741c6c2f4596c4830d6718460920d0c92202dc78" integrity sha1-dBxsL0WWxIMNZxhGCSDQySIC3Hg= -url-parse@^1.4.3: +url-parse@^1.4.3, url-parse@^1.5.3: version "1.5.10" resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== @@ -17081,16 +17318,16 @@ utils-merge@1.0.1: resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= +uuid@8.3.2, uuid@^8.3.0: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + uuid@^3.0.1, uuid@^3.3.2, uuid@^3.3.3: version "3.4.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== -uuid@^8.3.0: - version "8.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== - v8-compile-cache@^2.0.3: version "2.3.0" resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" @@ -17200,6 +17437,11 @@ vue-eslint-parser@^8.0.1: lodash "^4.17.21" semver "^7.3.5" +vuvuzela@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/vuvuzela/-/vuvuzela-1.0.3.tgz#3be145e58271c73ca55279dd851f12a682114b0b" + integrity sha512-Tm7jR1xTzBbPW+6y1tknKiEhz04Wf/1iZkcTJjSFcpNko43+dFW6+OOeQe9taJIug3NdfUAjFKgUSyQrIKaDvQ== + w3c-hr-time@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" diff --git a/en/sitemap.xml b/en/sitemap.xml index 55e98a496..cadbe801a 100644 --- a/en/sitemap.xml +++ b/en/sitemap.xml @@ -2,2277 +2,2277 @@ https://docs.cozy.io/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/privacy/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/ach/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/ach/DirectoriesToInject/testFile2/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/ach/DirectoriesToInject/Folder/testFile1/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/ach/data/bank/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/ach/e2e/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/ach/examples/data-from-csv/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/babel-preset-cozy-app/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/babel-preset-cozy-app/CHANGELOG/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/commitlint-config-cozy/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/commitlint-config-cozy/CHANGELOG/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-app-publish/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-app-publish/CHANGELOG/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-apps-registry/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-apps-registry/CONTRIBUTING/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-banks/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-banks/CHANGELOG/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-banks/docs/account-types/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-banks/docs/bills-matching/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-banks/docs/brand-dictionary/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-banks/docs/categorization/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-banks/docs/category/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-banks/docs/code-conventions/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-banks/docs/credentials/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-banks/docs/data-fetching/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-banks/docs/demo/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-banks/docs/dev/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-banks/docs/notifications/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-banks/docs/perfs/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-banks/docs/services/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-banks/docs/tracking/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-banks/scripts/visualizer/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-banks/src/components/DisplayError/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-banks/src/components/Select/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-banks/src/components/Switch/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-banks/src/components/Chart/LineChart/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-banks/src/components/KonnectorChip/readme/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-banks/src/components/Loading/Loading/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-banks/src/components/Select/Readme/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-banks/src/components/SelectDates/Readme/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-banks/src/components/SharingIcon/SharingIcon/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-banks/src/components/Table/Readme/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-banks/src/ducks/balance/AccountRow/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-banks/src/ducks/balance/History/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-banks/src/ducks/filters/Readme/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-banks/src/targets/services/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-banks/test/fixtures/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-banks/test/fixtures/matching-service/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-banks/test/fixtures/notifications-service/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-client/architecture/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-client/dev/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-client/entrypoints/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-client/getting-started/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-client/hooks/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-client/link-authoring/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-client/logging/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-client/metadata/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-client/mobile-guide/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-client/node/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-client/react-integration/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-client/relationships/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-client/schema/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-client/timeseries/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-client/api/cozy-stack-client/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-client/api/cozy-client/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-client/api/cozy-client/classes/Association/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-client/api/cozy-client/classes/BlockedCozyError/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-client/api/cozy-client/classes/BulkEditError/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-client/api/cozy-client/classes/CozyClient/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-client/api/cozy-client/classes/CozyLink/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-client/api/cozy-client/classes/CozyProvider/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-client/api/cozy-client/classes/HasMany/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-client/api/cozy-client/classes/HasManyInPlace/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-client/api/cozy-client/classes/HasManyTriggers/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-client/api/cozy-client/classes/HasOne/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-client/api/cozy-client/classes/HasOneInPlace/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-client/api/cozy-client/classes/InvalidCozyUrlError/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-client/api/cozy-client/classes/InvalidProtocolError/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-client/api/cozy-client/classes/InvalidRedirectLinkError/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-client/api/cozy-client/classes/Query/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-client/api/cozy-client/classes/QueryDefinition/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-client/api/cozy-client/classes/Registry/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-client/api/cozy-client/classes/StackLink/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-client/api/cozy-client/classes/WebFlagshipLink/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-client/api/cozy-client/classes/models.document.Qualification/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-client/api/cozy-client/interfaces/models.dacc.Params/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-client/api/cozy-client/interfaces/models.file.FileUploadOptions/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-client/api/cozy-client/interfaces/models.instance.DiskInfos/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-client/api/cozy-client/interfaces/models.instance.DiskInfosRaw/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-client/api/cozy-client/interfaces/models.instance.SettingsInfo/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-client/api/cozy-client/interfaces/models.permission.Document/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-client/api/cozy-client/interfaces/models.permission.Permission/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-client/api/cozy-client/interfaces/models.permission.PermissionItem/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-client/api/cozy-client/interfaces/models.timeseries.TimeSeries/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-client/api/cozy-client/interfaces/models.timeseries.TimeSeriesJSONAPI/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-client/api/cozy-client/modules/manifest/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-client/api/cozy-client/modules/models.account/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-client/api/cozy-client/modules/models.applications/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-client/api/cozy-client/modules/models.contact/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-client/api/cozy-client/modules/models.dacc/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-client/api/cozy-client/modules/models.document.helpers/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-client/api/cozy-client/modules/models.document.locales/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-client/api/cozy-client/modules/models.document/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-client/api/cozy-client/modules/models.document.themes/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-client/api/cozy-client/modules/models.file/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-client/api/cozy-client/modules/models.folder/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-client/api/cozy-client/modules/models.geo/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-client/api/cozy-client/modules/models.instance/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-client/api/cozy-client/modules/models.konnectorFolder/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-client/api/cozy-client/modules/models/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-client/api/cozy-client/modules/models.note/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-client/api/cozy-client/modules/models.paper/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-client/api/cozy-client/modules/models.permission/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-client/api/cozy-client/modules/models.sharing/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-client/api/cozy-client/modules/models.timeseries/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-client/api/cozy-client/modules/models.trigger/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-client/api/cozy-client/modules/models.user/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-client/api/cozy-client/modules/models.utils/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-client/api/cozy-client/modules/useMutation/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-client/api/cozy-pouch-link/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-client/api/cozy-pouch-link/classes/PouchLink/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-client/offline/updateDoc/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-desktop/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-desktop/feedback/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-desktop/developer/api_doc/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-desktop/developer/coffeescript/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-desktop/developer/debug/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-desktop/developer/log_analysis/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-desktop/developer/requirements/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-desktop/developer/setup/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-desktop/developer/test/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-desktop/usage/build/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-desktop/usage/cli/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-desktop/usage/file_systems/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-desktop/usage/ignore_files/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-desktop/usage/inotify/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-desktop/usage/limitations/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-desktop/usage/linux/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-desktop/usage/macos/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-desktop/usage/windows/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-device-helper/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-device-helper/CHANGELOG/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-doctypes/pull_request_template/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-doctypes/docs/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-doctypes/docs/cc.cozycloud.announcements/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-doctypes/docs/cc.cozycloud.autocategorization/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-doctypes/docs/com.bitwarden.ciphers/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-doctypes/docs/com.bitwarden.contacts/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-doctypes/docs/com.bitwarden.folders/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-doctypes/docs/com.bitwarden.organizations/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-doctypes/docs/com.ecoledirecte.notes/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-doctypes/docs/com.ecoledirecte.textbook.day/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-doctypes/docs/com.unibet.bets/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-doctypes/docs/io.cozy.account_types/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-doctypes/docs/io.cozy.accounts/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-doctypes/docs/io.cozy.ai.chat.conversations/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-doctypes/docs/io.cozy.apps/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-doctypes/docs/io.cozy.apps.suggestions/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-doctypes/docs/io.cozy.bank/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-doctypes/docs/io.cozy.bills/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-doctypes/docs/io.cozy.calendar/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-doctypes/docs/io.cozy.coachco2/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-doctypes/docs/io.cozy.contacts/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-doctypes/docs/io.cozy.docrules/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-doctypes/docs/io.cozy.exports/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-doctypes/docs/io.cozy.files/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-doctypes/docs/io.cozy.files_metadata/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-doctypes/docs/io.cozy.home.settings/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-doctypes/docs/io.cozy.identities/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-doctypes/docs/io.cozy.jobs/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-doctypes/docs/io.cozy.konnectors/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-doctypes/docs/io.cozy.notes/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-doctypes/docs/io.cozy.notifications/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-doctypes/docs/io.cozy.oauth.access_codes/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-doctypes/docs/io.cozy.oauth.clients/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-doctypes/docs/io.cozy.permissions/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-doctypes/docs/io.cozy.photos/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-doctypes/docs/io.cozy.procedures/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-doctypes/docs/io.cozy.remote.nextcloud.files/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-doctypes/docs/io.cozy.remote.requests/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-doctypes/docs/io.cozy.sessions.logins/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-doctypes/docs/io.cozy.sessions/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-doctypes/docs/io.cozy.settings/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-doctypes/docs/io.cozy.shared/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-doctypes/docs/io.cozy.sharings/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-doctypes/docs/io.cozy.tags/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-doctypes/docs/io.cozy.terms/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-doctypes/docs/io.cozy.timeseries/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-doctypes/docs/io.cozy.todos/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-doctypes/docs/io.cozy.triggers/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-doctypes/docs/io.cozy.triggers.state/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-flags/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-flags/CHANGELOG/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-home/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-home/CHANGELOG/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-home/CONTRIBUTING/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-home/docs/configuration/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-home/docs/connection-state/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-home/docs/develop/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-home/docs/intents/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-home/docs/services/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-konnector-libs/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-konnector-libs/api/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-konnector-libs/categorization-dashboard/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-konnector-libs/cli/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-konnector-libs/dev/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-konnector-libs/errors/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-konnector-libs/operation-linking/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-konnector-libs/synchronization/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-notifications/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-notifications/CHANGELOG/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-realtime/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-realtime/CHANGELOG/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-scripts/webpack-configs/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-scripts/webpack-merge-strategies/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/CONTRIBUTING/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/INSTALL/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/accept-from-flagship/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/admin/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/ai/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/apps/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/assets/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/auth/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/bitwarden/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/client-app-dev/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/config/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/connection-check/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/contacts/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/couchdb-quirks/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/data-system/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/delegated-auth/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/docker/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/doctype/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/files/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/flagship/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/http-api/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/important-changes/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/instance/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/intents/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/jobs/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/konnectors-dev/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/konnectors-workflow/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/konnectors/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/mango/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/move-design/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/move/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/nextcloud/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/not-synchronized-vfs/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/notes/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/notifications/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/office/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/permissions/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/pouchdb-quirks/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/public/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/realtime-internals/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/realtime/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/references-docs-in-vfs/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/registry-publish/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/registry/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/release/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/remote/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/security/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/settings/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/sharing-design/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/sharing/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/shortcuts/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/user-action-required/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/wellknown/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/workers/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/archives/architecture/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/archives/couchdb-plugins/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/archives/konnectors-design/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/archives/moving/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/archives/onboarding/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/archives/realtime/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/archives/replication/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_apps/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_apps_install/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_apps_ls/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_apps_show/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_apps_uninstall/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_apps_update/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_assets/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_assets_add/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_assets_ls/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_assets_rm/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_check/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_check_fs/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_check_shared/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_check_sharings/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_check_triggers/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_completion/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_config/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_config_decrypt-creds/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_config_decrypt-data/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_config_encrypt-creds/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_config_encrypt-data/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_config_gen-keys/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_config_insert-asset/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_config_ls-assets/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_config_ls-contexts/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_config_passwd/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_config_rm-asset/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_config_show-context/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_doc/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_doc_man/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_doc_markdown/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_features/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_features_config/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_features_defaults/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_features_flags/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_features_ratio/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_features_sets/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_features_show/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_files/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_files_exec/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_files_import/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_files_usage/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_fix/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_fix_contact-emails/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_fix_indexes/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_fix_jobs/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_fix_mime/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_fix_orphan-account/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_fix_password-defined/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_fix_redis/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_fix_service-triggers/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_fix_thumbnails/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_instances/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_instances_add/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_instances_auth-mode/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_instances_clean-sessions/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_instances_client-oauth/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_instances_count/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_instances_debug/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_instances_destroy/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_instances_export/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_instances_find-oauth-client/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_instances_fsck/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_instances_import/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_instances_ls/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_instances_modify/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_instances_refresh-token-oauth/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_instances_set-disk-quota/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_instances_set-passphrase/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_instances_show-app-version/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_instances_show-db-prefix/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_instances_show-swift-prefix/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_instances_show/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_instances_token-app/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_instances_token-cli/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_instances_token-konnector/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_instances_token-oauth/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_jobs/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_jobs_purge-old-jobs/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_jobs_run/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_konnectors/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_konnectors_deactivate-maintenance/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_konnectors_install/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_konnectors_ls-maintenances/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_konnectors_ls/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_konnectors_maintenance/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_konnectors_run/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_konnectors_show/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_konnectors_uninstall/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_konnectors_update/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_serve/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_settings/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_status/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_swift/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_swift_get/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_swift_ls-layouts/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_swift_ls/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_swift_put/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_swift_rm/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_tools/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_tools_bug/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_tools_encrypt-with-rsa/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_tools_heap/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_tools_unxor-document-id/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_triggers/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_triggers_launch/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_triggers_ls/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_triggers_show-from-app/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-stack/cli/cozy-stack_version/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-ui/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-ui/dev/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-ui/guidelines/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-ui/how-to-extract/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-ui/how-to-transpile/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-ui/components/Readme/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/cozy-ui/components/Readme/Readme/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/eslint-config-cozy-app/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/eslint-config-cozy-app/CHANGELOG/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/faq/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/faq/security/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/faq/start/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/howTos/dev/connect-mobile-app-local-stack/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/howTos/dev/cordova/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/howTos/dev/hmr/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/howTos/dev/run-connectors-on-local-cozy-stack/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/howTos/dev/runCozyDocker/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/howTos/dev/sendmail/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/howTos/dev/services/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/howTos/sync/linux/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/projects/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/references/auth/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/references/git-flow/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/references/tech-intro/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/tutorials/app/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/tutorials/readme/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/tutorials/client-side-konnector/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/tutorials/client-side-konnector/getting-started/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/tutorials/client-side-konnector/scrape-data/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/tutorials/cloudery/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/tutorials/data/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/tutorials/data/advanced/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/tutorials/data/doctypes/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/tutorials/data/pouchdb/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/tutorials/data/qualification/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/tutorials/data/queries/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/tutorials/konnector/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/tutorials/konnector/2fa/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/tutorials/konnector/cozy-browser/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/tutorials/konnector/faq/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/tutorials/konnector/getting-started/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/tutorials/konnector/going-further/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/tutorials/konnector/how-does-it-work/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/tutorials/konnector/oauth/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/tutorials/konnector/packaging/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/tutorials/konnector/save-data/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/tutorials/konnector/scrape-data/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/tutorials/selfhosting/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/tutorials/selfhosting/administration/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/tutorials/selfhosting/administration/mail/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/tutorials/selfhosting/administration/more_instances/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/tutorials/selfhosting/administration/office/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/tutorials/selfhosting/administration/upgrade/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/tutorials/selfhosting/docker/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/tutorials/selfhosting/finalize/apache/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/tutorials/selfhosting/finalize/create_instance/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/tutorials/selfhosting/finalize/nginx/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/tutorials/selfhosting/install/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/tutorials/selfhosting/install/package/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/tutorials/selfhosting/install/sources/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/tutorials/selfhosting/requirements/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/tutorials/selfhosting/requirements/couchdb-pkg/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/tutorials/selfhosting/requirements/couchdb-snap/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/tutorials/selfhosting/requirements/couchdb/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/tutorials/selfhosting/requirements/nodejs/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/tutorials/translate/ - 2024-12-18 + 2024-12-19 daily https://docs.cozy.io/use/ - 2024-12-18 + 2024-12-19 daily \ No newline at end of file diff --git a/en/sitemap.xml.gz b/en/sitemap.xml.gz index 62f0d3520eb690f45521e40e6f00391f67f8b9f2..28decf4e4c57c14874138f817cb12b74ccbbbabd 100644 GIT binary patch delta 82 zcmV-Y0ImPt8{QiSABzYGh?ZlK2Ot92*^wzuFa7ziuYY=#ya^Pa