Unified Search Redesign #60241

Description

@kra-mo

Supersedes #59766

Unified Search is incredibly useful and its performance is technologically very impressive. Unfortunately, its UI has not received nearly as much love as its implementations.

Making it more visible, as mocked-up in #59888 means it's the right time to also improve its usability.

Loading

The main advantage of unified search is being able to find anything in Nextcloud fast. This is undermined by how results are loaded. Before all results have loaded, the UI is plagued by frequent flashing, which slows down the process of finding a result.

I will describe an algorithm in an imperative manner that aims to fix this problem and still return results quickly without disrupting a familiar order.


Results are loaded per-category, as they are now.
Categories can be in one of the following four states:

⬜️ Loading
🟩 Loaded
🟨 Blocked
🟥 Failed


All of them start out as ⬜️ loading, in their preferred order.
We also start a 1500ms (TBD) ⏳ timer.

⏳ 0ms

⬜️ Apps
⬜️ Files
⬜️ Talk
⬜️ Collectives
⬜️ Notes
⬜️ Contacts


Results that come in order are now 🟩 loaded and we present them immediately.

⏳ 882ms

🟩 Apps
🟩 Files
⬜️ Talk
⬜️ Collectives
⬜️ Notes
⬜️ Contacts


Results that come in out-of-order will be 🟨 blocked by the preceding categories.

⏳ 1291ms

🟩 Apps
🟩 Files
⬜️ Talk
🟨 Collectives
⬜️ Notes
🟨 Contacts


When the timer goes off, we move any 🟨 blocked categories up to before any ⬜️ loading categories blocking them. They are now 🟩 loaded. We reset the timer.

⌛️ 1500ms 🔃 ⏳ 0ms

🟩 Apps
🟩 Files
🟩 Collectives
🟩 Contacts
⬜️ Talk
⬜️ Notes


If any request 🟥 fails, it will no longer be able to block other categories.
(We may still retry it depending on why it failed. This behavior can be discarded or simplified if this is not a thing :D)

⏳ 120ms

🟩 Apps
🟩 Files
🟩 Collectives
🟩 Contacts
🟥 Talk
⬜️ Notes


When a category loads, it pushes any 🟥 failed ones back to after 🟩 loaded ones:

⏳ 805ms

🟩 Apps
🟩 Files
🟩 Collectives
🟩 Contacts
🟩 Notes
🟥 Talk


Keyboard Shortcut

We should decide on a global keyboard shortcut to activate unified search in all apps. IIRC @marcoambrosini proposed K for Mac and AltK otherwise so as to not interfere with browser keyboard shortcuts, but imo stealing CtrlK wouldn't be too big of an issue as it is quite an obscure shortcut and mostly superseded by CtrlL. Other web apps do so as well.

Visuals

The general layout of the dialog works quite well. Still, there are a few quality-of-life improvements that should be made.

The Bar

The search bar should be repositioned and the whole top bar resized to be a tad smaller as mentioned in #59888.

Additionally, a hint should be added for the new keyboard shortcut (when horizontal space allows).

Image

Focused

When the bar is focused, its styling should resemble that of any normal input field.

Image

An additional Filter button should appear that, when clicked, pops-up the filters even before the user types a query (@jancborchardt's idea 🙈). After the user typed something, filters always show up, even if they didn't click this button. This is just here to allow users to select filters beforehand, should they choose to.

Image

Results

As results come in according to the algorithm described above, they are displayed similarly to how they are currently. Some changes:

  • A loading icon is shown at the end of the input field until all results have loaded. This replaces the current empty content page for every state, except for when everything has finished loading and still, no results have been found.
  • A maximum of 3 results are shown per type. To see more, the user must click on "More from … →".
  • For each section, there is either a regular heading, or, if more than 3 results are available, a "More from … →" tertiary button, which replaces the previous "… Load more results" button to save vertical space.
  • The first result is automatically selected and this is visually indicated. Pressing opens it. The user can navigate with and through the results (even if the input field is focused).
Image

More from …

When clicking "More from …", results should be displayed in a new view like so:

Image

Apologies for the repeated examples :)

More from connected services

The "Search connected services" toggle should be replaced with a "More from connected services"/"Less from connected services" button at the end of all results.

We should also include a link to configure this globally, as we should encourage people to set this setting instead of deciding on a case-by-case basis, though the option should still be there.

Image

Filtering

Results can be filtered the same way as before, but the filter buttons have been redesigned to be similar to Files. When a filter is active, the button should become primary to indicate it.

Image

Misc. Improvements

Apps should always be the first type to make Unified Search combined with the keyboard shortcut the most efficient way to switch apps, especially for those who miss the pre-waffle-menu times @mejo-@nickvergessen :)

I'm not exactly sure what the order of the other types is determined by, but it might be good to review that as well. Some types that seem less relevant tend to come up more than relevant ones.

also cc @pringelmann

Metadata

Metadata

Assignees

Projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Unified Search Redesign #60241

Description

@kra-mo

Supersedes #59766

Unified Search is incredibly useful and its performance is technologically very impressive. Unfortunately, its UI has not received nearly as much love as its implementations.

Making it more visible, as mocked-up in #59888 means it's the right time to also improve its usability.

Loading

The main advantage of unified search is being able to find anything in Nextcloud fast. This is undermined by how results are loaded. Before all results have loaded, the UI is plagued by frequent flashing, which slows down the process of finding a result.

I will describe an algorithm in an imperative manner that aims to fix this problem and still return results quickly without disrupting a familiar order.


Results are loaded per-category, as they are now.
Categories can be in one of the following four states:

⬜️ Loading
🟩 Loaded
🟨 Blocked
🟥 Failed


All of them start out as ⬜️ loading, in their preferred order.
We also start a 1500ms (TBD) ⏳ timer.

⏳ 0ms

⬜️ Apps
⬜️ Files
⬜️ Talk
⬜️ Collectives
⬜️ Notes
⬜️ Contacts


Results that come in order are now 🟩 loaded and we present them immediately.

⏳ 882ms

🟩 Apps
🟩 Files
⬜️ Talk
⬜️ Collectives
⬜️ Notes
⬜️ Contacts


Results that come in out-of-order will be 🟨 blocked by the preceding categories.

⏳ 1291ms

🟩 Apps
🟩 Files
⬜️ Talk
🟨 Collectives
⬜️ Notes
🟨 Contacts


When the timer goes off, we move any 🟨 blocked categories up to before any ⬜️ loading categories blocking them. They are now 🟩 loaded. We reset the timer.

⌛️ 1500ms 🔃 ⏳ 0ms

🟩 Apps
🟩 Files
🟩 Collectives
🟩 Contacts
⬜️ Talk
⬜️ Notes


If any request 🟥 fails, it will no longer be able to block other categories.
(We may still retry it depending on why it failed. This behavior can be discarded or simplified if this is not a thing :D)

⏳ 120ms

🟩 Apps
🟩 Files
🟩 Collectives
🟩 Contacts
🟥 Talk
⬜️ Notes


When a category loads, it pushes any 🟥 failed ones back to after 🟩 loaded ones:

⏳ 805ms

🟩 Apps
🟩 Files
🟩 Collectives
🟩 Contacts
🟩 Notes
🟥 Talk


Keyboard Shortcut

We should decide on a global keyboard shortcut to activate unified search in all apps. IIRC @marcoambrosini proposed K for Mac and AltK otherwise so as to not interfere with browser keyboard shortcuts, but imo stealing CtrlK wouldn't be too big of an issue as it is quite an obscure shortcut and mostly superseded by CtrlL. Other web apps do so as well.

Visuals

The general layout of the dialog works quite well. Still, there are a few quality-of-life improvements that should be made.

The Bar

The search bar should be repositioned and the whole top bar resized to be a tad smaller as mentioned in #59888.

Additionally, a hint should be added for the new keyboard shortcut (when horizontal space allows).

Image

Focused

When the bar is focused, its styling should resemble that of any normal input field.

Image

An additional Filter button should appear that, when clicked, pops-up the filters even before the user types a query (@jancborchardt's idea 🙈). After the user typed something, filters always show up, even if they didn't click this button. This is just here to allow users to select filters beforehand, should they choose to.

Image

Results

As results come in according to the algorithm described above, they are displayed similarly to how they are currently. Some changes:

  • A loading icon is shown at the end of the input field until all results have loaded. This replaces the current empty content page for every state, except for when everything has finished loading and still, no results have been found.
  • A maximum of 3 results are shown per type. To see more, the user must click on "More from … →".
  • For each section, there is either a regular heading, or, if more than 3 results are available, a "More from … →" tertiary button, which replaces the previous "… Load more results" button to save vertical space.
  • The first result is automatically selected and this is visually indicated. Pressing opens it. The user can navigate with and through the results (even if the input field is focused).
Image

More from …

When clicking "More from …", results should be displayed in a new view like so:

Image

Apologies for the repeated examples :)

More from connected services

The "Search connected services" toggle should be replaced with a "More from connected services"/"Less from connected services" button at the end of all results.

We should also include a link to configure this globally, as we should encourage people to set this setting instead of deciding on a case-by-case basis, though the option should still be there.

Image

Filtering

Results can be filtered the same way as before, but the filter buttons have been redesigned to be similar to Files. When a filter is active, the button should become primary to indicate it.

Image

Misc. Improvements

Apps should always be the first type to make Unified Search combined with the keyboard shortcut the most efficient way to switch apps, especially for those who miss the pre-waffle-menu times @mejo-@nickvergessen :)

I'm not exactly sure what the order of the other types is determined by, but it might be good to review that as well. Some types that seem less relevant tend to come up more than relevant ones.

also cc @pringelmann

Metadata

Metadata

Assignees

Projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Unified Search Redesign #60241

Description

@kra-mo

Supersedes #59766

Unified Search is incredibly useful and its performance is technologically very impressive. Unfortunately, its UI has not received nearly as much love as its implementations.

Making it more visible, as mocked-up in #59888 means it's the right time to also improve its usability.

Loading

The main advantage of unified search is being able to find anything in Nextcloud fast. This is undermined by how results are loaded. Before all results have loaded, the UI is plagued by frequent flashing, which slows down the process of finding a result.

I will describe an algorithm in an imperative manner that aims to fix this problem and still return results quickly without disrupting a familiar order.


Results are loaded per-category, as they are now.
Categories can be in one of the following four states:

⬜️ Loading
🟩 Loaded
🟨 Blocked
🟥 Failed


All of them start out as ⬜️ loading, in their preferred order.
We also start a 1500ms (TBD) ⏳ timer.

⏳ 0ms

⬜️ Apps
⬜️ Files
⬜️ Talk
⬜️ Collectives
⬜️ Notes
⬜️ Contacts


Results that come in order are now 🟩 loaded and we present them immediately.

⏳ 882ms

🟩 Apps
🟩 Files
⬜️ Talk
⬜️ Collectives
⬜️ Notes
⬜️ Contacts


Results that come in out-of-order will be 🟨 blocked by the preceding categories.

⏳ 1291ms

🟩 Apps
🟩 Files
⬜️ Talk
🟨 Collectives
⬜️ Notes
🟨 Contacts


When the timer goes off, we move any 🟨 blocked categories up to before any ⬜️ loading categories blocking them. They are now 🟩 loaded. We reset the timer.

⌛️ 1500ms 🔃 ⏳ 0ms

🟩 Apps
🟩 Files
🟩 Collectives
🟩 Contacts
⬜️ Talk
⬜️ Notes


If any request 🟥 fails, it will no longer be able to block other categories.
(We may still retry it depending on why it failed. This behavior can be discarded or simplified if this is not a thing :D)

⏳ 120ms

🟩 Apps
🟩 Files
🟩 Collectives
🟩 Contacts
🟥 Talk
⬜️ Notes


When a category loads, it pushes any 🟥 failed ones back to after 🟩 loaded ones:

⏳ 805ms

🟩 Apps
🟩 Files
🟩 Collectives
🟩 Contacts
🟩 Notes
🟥 Talk


Keyboard Shortcut

We should decide on a global keyboard shortcut to activate unified search in all apps. IIRC @marcoambrosini proposed K for Mac and AltK otherwise so as to not interfere with browser keyboard shortcuts, but imo stealing CtrlK wouldn't be too big of an issue as it is quite an obscure shortcut and mostly superseded by CtrlL. Other web apps do so as well.

Visuals

The general layout of the dialog works quite well. Still, there are a few quality-of-life improvements that should be made.

The Bar

The search bar should be repositioned and the whole top bar resized to be a tad smaller as mentioned in #59888.

Additionally, a hint should be added for the new keyboard shortcut (when horizontal space allows).

Image

Focused

When the bar is focused, its styling should resemble that of any normal input field.

Image

An additional Filter button should appear that, when clicked, pops-up the filters even before the user types a query (@jancborchardt's idea 🙈). After the user typed something, filters always show up, even if they didn't click this button. This is just here to allow users to select filters beforehand, should they choose to.

Image

Results

As results come in according to the algorithm described above, they are displayed similarly to how they are currently. Some changes:

  • A loading icon is shown at the end of the input field until all results have loaded. This replaces the current empty content page for every state, except for when everything has finished loading and still, no results have been found.
  • A maximum of 3 results are shown per type. To see more, the user must click on "More from … →".
  • For each section, there is either a regular heading, or, if more than 3 results are available, a "More from … →" tertiary button, which replaces the previous "… Load more results" button to save vertical space.
  • The first result is automatically selected and this is visually indicated. Pressing opens it. The user can navigate with and through the results (even if the input field is focused).
Image

More from …

When clicking "More from …", results should be displayed in a new view like so:

Image

Apologies for the repeated examples :)

More from connected services

The "Search connected services" toggle should be replaced with a "More from connected services"/"Less from connected services" button at the end of all results.

We should also include a link to configure this globally, as we should encourage people to set this setting instead of deciding on a case-by-case basis, though the option should still be there.

Image

Filtering

Results can be filtered the same way as before, but the filter buttons have been redesigned to be similar to Files. When a filter is active, the button should become primary to indicate it.

Image

Misc. Improvements

Apps should always be the first type to make Unified Search combined with the keyboard shortcut the most efficient way to switch apps, especially for those who miss the pre-waffle-menu times @mejo-@nickvergessen :)

I'm not exactly sure what the order of the other types is determined by, but it might be good to review that as well. Some types that seem less relevant tend to come up more than relevant ones.

also cc @pringelmann

Metadata

Metadata

Assignees

Projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Unified Search Redesign #60241

Description

@kra-mo

Supersedes #59766

Unified Search is incredibly useful and its performance is technologically very impressive. Unfortunately, its UI has not received nearly as much love as its implementations.

Making it more visible, as mocked-up in #59888 means it's the right time to also improve its usability.

Loading

The main advantage of unified search is being able to find anything in Nextcloud fast. This is undermined by how results are loaded. Before all results have loaded, the UI is plagued by frequent flashing, which slows down the process of finding a result.

I will describe an algorithm in an imperative manner that aims to fix this problem and still return results quickly without disrupting a familiar order.


Results are loaded per-category, as they are now.
Categories can be in one of the following four states:

⬜️ Loading
🟩 Loaded
🟨 Blocked
🟥 Failed


All of them start out as ⬜️ loading, in their preferred order.
We also start a 1500ms (TBD) ⏳ timer.

⏳ 0ms

⬜️ Apps
⬜️ Files
⬜️ Talk
⬜️ Collectives
⬜️ Notes
⬜️ Contacts


Results that come in order are now 🟩 loaded and we present them immediately.

⏳ 882ms

🟩 Apps
🟩 Files
⬜️ Talk
⬜️ Collectives
⬜️ Notes
⬜️ Contacts


Results that come in out-of-order will be 🟨 blocked by the preceding categories.

⏳ 1291ms

🟩 Apps
🟩 Files
⬜️ Talk
🟨 Collectives
⬜️ Notes
🟨 Contacts


When the timer goes off, we move any 🟨 blocked categories up to before any ⬜️ loading categories blocking them. They are now 🟩 loaded. We reset the timer.

⌛️ 1500ms 🔃 ⏳ 0ms

🟩 Apps
🟩 Files
🟩 Collectives
🟩 Contacts
⬜️ Talk
⬜️ Notes


If any request 🟥 fails, it will no longer be able to block other categories.
(We may still retry it depending on why it failed. This behavior can be discarded or simplified if this is not a thing :D)

⏳ 120ms

🟩 Apps
🟩 Files
🟩 Collectives
🟩 Contacts
🟥 Talk
⬜️ Notes


When a category loads, it pushes any 🟥 failed ones back to after 🟩 loaded ones:

⏳ 805ms

🟩 Apps
🟩 Files
🟩 Collectives
🟩 Contacts
🟩 Notes
🟥 Talk


Keyboard Shortcut

We should decide on a global keyboard shortcut to activate unified search in all apps. IIRC @marcoambrosini proposed K for Mac and AltK otherwise so as to not interfere with browser keyboard shortcuts, but imo stealing CtrlK wouldn't be too big of an issue as it is quite an obscure shortcut and mostly superseded by CtrlL. Other web apps do so as well.

Visuals

The general layout of the dialog works quite well. Still, there are a few quality-of-life improvements that should be made.

The Bar

The search bar should be repositioned and the whole top bar resized to be a tad smaller as mentioned in #59888.

Additionally, a hint should be added for the new keyboard shortcut (when horizontal space allows).

Image

Focused

When the bar is focused, its styling should resemble that of any normal input field.

Image

An additional Filter button should appear that, when clicked, pops-up the filters even before the user types a query (@jancborchardt's idea 🙈). After the user typed something, filters always show up, even if they didn't click this button. This is just here to allow users to select filters beforehand, should they choose to.

Image

Results

As results come in according to the algorithm described above, they are displayed similarly to how they are currently. Some changes:

  • A loading icon is shown at the end of the input field until all results have loaded. This replaces the current empty content page for every state, except for when everything has finished loading and still, no results have been found.
  • A maximum of 3 results are shown per type. To see more, the user must click on "More from … →".
  • For each section, there is either a regular heading, or, if more than 3 results are available, a "More from … →" tertiary button, which replaces the previous "… Load more results" button to save vertical space.
  • The first result is automatically selected and this is visually indicated. Pressing opens it. The user can navigate with and through the results (even if the input field is focused).
Image

More from …

When clicking "More from …", results should be displayed in a new view like so:

Image

Apologies for the repeated examples :)

More from connected services

The "Search connected services" toggle should be replaced with a "More from connected services"/"Less from connected services" button at the end of all results.

We should also include a link to configure this globally, as we should encourage people to set this setting instead of deciding on a case-by-case basis, though the option should still be there.

Image

Filtering

Results can be filtered the same way as before, but the filter buttons have been redesigned to be similar to Files. When a filter is active, the button should become primary to indicate it.

Image

Misc. Improvements

Apps should always be the first type to make Unified Search combined with the keyboard shortcut the most efficient way to switch apps, especially for those who miss the pre-waffle-menu times @mejo-@nickvergessen :)

I'm not exactly sure what the order of the other types is determined by, but it might be good to review that as well. Some types that seem less relevant tend to come up more than relevant ones.

also cc @pringelmann

Metadata

Metadata

Assignees

Projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Unified Search Redesign #60241

Description

@kra-mo

Supersedes #59766

Unified Search is incredibly useful and its performance is technologically very impressive. Unfortunately, its UI has not received nearly as much love as its implementations.

Making it more visible, as mocked-up in #59888 means it's the right time to also improve its usability.

Loading

The main advantage of unified search is being able to find anything in Nextcloud fast. This is undermined by how results are loaded. Before all results have loaded, the UI is plagued by frequent flashing, which slows down the process of finding a result.

I will describe an algorithm in an imperative manner that aims to fix this problem and still return results quickly without disrupting a familiar order.


Results are loaded per-category, as they are now.
Categories can be in one of the following four states:

⬜️ Loading
🟩 Loaded
🟨 Blocked
🟥 Failed


All of them start out as ⬜️ loading, in their preferred order.
We also start a 1500ms (TBD) ⏳ timer.

⏳ 0ms

⬜️ Apps
⬜️ Files
⬜️ Talk
⬜️ Collectives
⬜️ Notes
⬜️ Contacts


Results that come in order are now 🟩 loaded and we present them immediately.

⏳ 882ms

🟩 Apps
🟩 Files
⬜️ Talk
⬜️ Collectives
⬜️ Notes
⬜️ Contacts


Results that come in out-of-order will be 🟨 blocked by the preceding categories.

⏳ 1291ms

🟩 Apps
🟩 Files
⬜️ Talk
🟨 Collectives
⬜️ Notes
🟨 Contacts


When the timer goes off, we move any 🟨 blocked categories up to before any ⬜️ loading categories blocking them. They are now 🟩 loaded. We reset the timer.

⌛️ 1500ms 🔃 ⏳ 0ms

🟩 Apps
🟩 Files
🟩 Collectives
🟩 Contacts
⬜️ Talk
⬜️ Notes


If any request 🟥 fails, it will no longer be able to block other categories.
(We may still retry it depending on why it failed. This behavior can be discarded or simplified if this is not a thing :D)

⏳ 120ms

🟩 Apps
🟩 Files
🟩 Collectives
🟩 Contacts
🟥 Talk
⬜️ Notes


When a category loads, it pushes any 🟥 failed ones back to after 🟩 loaded ones:

⏳ 805ms

🟩 Apps
🟩 Files
🟩 Collectives
🟩 Contacts
🟩 Notes
🟥 Talk


Keyboard Shortcut

We should decide on a global keyboard shortcut to activate unified search in all apps. IIRC @marcoambrosini proposed K for Mac and AltK otherwise so as to not interfere with browser keyboard shortcuts, but imo stealing CtrlK wouldn't be too big of an issue as it is quite an obscure shortcut and mostly superseded by CtrlL. Other web apps do so as well.

Visuals

The general layout of the dialog works quite well. Still, there are a few quality-of-life improvements that should be made.

The Bar

The search bar should be repositioned and the whole top bar resized to be a tad smaller as mentioned in #59888.

Additionally, a hint should be added for the new keyboard shortcut (when horizontal space allows).

Image

Focused

When the bar is focused, its styling should resemble that of any normal input field.

Image

An additional Filter button should appear that, when clicked, pops-up the filters even before the user types a query (@jancborchardt's idea 🙈). After the user typed something, filters always show up, even if they didn't click this button. This is just here to allow users to select filters beforehand, should they choose to.

Image

Results

As results come in according to the algorithm described above, they are displayed similarly to how they are currently. Some changes:

  • A loading icon is shown at the end of the input field until all results have loaded. This replaces the current empty content page for every state, except for when everything has finished loading and still, no results have been found.
  • A maximum of 3 results are shown per type. To see more, the user must click on "More from … →".
  • For each section, there is either a regular heading, or, if more than 3 results are available, a "More from … →" tertiary button, which replaces the previous "… Load more results" button to save vertical space.
  • The first result is automatically selected and this is visually indicated. Pressing opens it. The user can navigate with and through the results (even if the input field is focused).
Image

More from …

When clicking "More from …", results should be displayed in a new view like so:

Image

Apologies for the repeated examples :)

More from connected services

The "Search connected services" toggle should be replaced with a "More from connected services"/"Less from connected services" button at the end of all results.

We should also include a link to configure this globally, as we should encourage people to set this setting instead of deciding on a case-by-case basis, though the option should still be there.

Image

Filtering

Results can be filtered the same way as before, but the filter buttons have been redesigned to be similar to Files. When a filter is active, the button should become primary to indicate it.

Image

Misc. Improvements

Apps should always be the first type to make Unified Search combined with the keyboard shortcut the most efficient way to switch apps, especially for those who miss the pre-waffle-menu times @mejo-@nickvergessen :)

I'm not exactly sure what the order of the other types is determined by, but it might be good to review that as well. Some types that seem less relevant tend to come up more than relevant ones.

also cc @pringelmann

Metadata

Metadata

Assignees

Projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Unified Search Redesign #60241

Description

@kra-mo

Supersedes #59766

Unified Search is incredibly useful and its performance is technologically very impressive. Unfortunately, its UI has not received nearly as much love as its implementations.

Making it more visible, as mocked-up in #59888 means it's the right time to also improve its usability.

Loading

The main advantage of unified search is being able to find anything in Nextcloud fast. This is undermined by how results are loaded. Before all results have loaded, the UI is plagued by frequent flashing, which slows down the process of finding a result.

I will describe an algorithm in an imperative manner that aims to fix this problem and still return results quickly without disrupting a familiar order.


Results are loaded per-category, as they are now.
Categories can be in one of the following four states:

⬜️ Loading
🟩 Loaded
🟨 Blocked
🟥 Failed


All of them start out as ⬜️ loading, in their preferred order.
We also start a 1500ms (TBD) ⏳ timer.

⏳ 0ms

⬜️ Apps
⬜️ Files
⬜️ Talk
⬜️ Collectives
⬜️ Notes
⬜️ Contacts


Results that come in order are now 🟩 loaded and we present them immediately.

⏳ 882ms

🟩 Apps
🟩 Files
⬜️ Talk
⬜️ Collectives
⬜️ Notes
⬜️ Contacts


Results that come in out-of-order will be 🟨 blocked by the preceding categories.

⏳ 1291ms

🟩 Apps
🟩 Files
⬜️ Talk
🟨 Collectives
⬜️ Notes
🟨 Contacts


When the timer goes off, we move any 🟨 blocked categories up to before any ⬜️ loading categories blocking them. They are now 🟩 loaded. We reset the timer.

⌛️ 1500ms 🔃 ⏳ 0ms

🟩 Apps
🟩 Files
🟩 Collectives
🟩 Contacts
⬜️ Talk
⬜️ Notes


If any request 🟥 fails, it will no longer be able to block other categories.
(We may still retry it depending on why it failed. This behavior can be discarded or simplified if this is not a thing :D)

⏳ 120ms

🟩 Apps
🟩 Files
🟩 Collectives
🟩 Contacts
🟥 Talk
⬜️ Notes


When a category loads, it pushes any 🟥 failed ones back to after 🟩 loaded ones:

⏳ 805ms

🟩 Apps
🟩 Files
🟩 Collectives
🟩 Contacts
🟩 Notes
🟥 Talk


Keyboard Shortcut

We should decide on a global keyboard shortcut to activate unified search in all apps. IIRC @marcoambrosini proposed K for Mac and AltK otherwise so as to not interfere with browser keyboard shortcuts, but imo stealing CtrlK wouldn't be too big of an issue as it is quite an obscure shortcut and mostly superseded by CtrlL. Other web apps do so as well.

Visuals

The general layout of the dialog works quite well. Still, there are a few quality-of-life improvements that should be made.

The Bar

The search bar should be repositioned and the whole top bar resized to be a tad smaller as mentioned in #59888.

Additionally, a hint should be added for the new keyboard shortcut (when horizontal space allows).

Image

Focused

When the bar is focused, its styling should resemble that of any normal input field.

Image

An additional Filter button should appear that, when clicked, pops-up the filters even before the user types a query (@jancborchardt's idea 🙈). After the user typed something, filters always show up, even if they didn't click this button. This is just here to allow users to select filters beforehand, should they choose to.

Image

Results

As results come in according to the algorithm described above, they are displayed similarly to how they are currently. Some changes:

  • A loading icon is shown at the end of the input field until all results have loaded. This replaces the current empty content page for every state, except for when everything has finished loading and still, no results have been found.
  • A maximum of 3 results are shown per type. To see more, the user must click on "More from … →".
  • For each section, there is either a regular heading, or, if more than 3 results are available, a "More from … →" tertiary button, which replaces the previous "… Load more results" button to save vertical space.
  • The first result is automatically selected and this is visually indicated. Pressing opens it. The user can navigate with and through the results (even if the input field is focused).
Image

More from …

When clicking "More from …", results should be displayed in a new view like so:

Image

Apologies for the repeated examples :)

More from connected services

The "Search connected services" toggle should be replaced with a "More from connected services"/"Less from connected services" button at the end of all results.

We should also include a link to configure this globally, as we should encourage people to set this setting instead of deciding on a case-by-case basis, though the option should still be there.

Image

Filtering

Results can be filtered the same way as before, but the filter buttons have been redesigned to be similar to Files. When a filter is active, the button should become primary to indicate it.

Image

Misc. Improvements

Apps should always be the first type to make Unified Search combined with the keyboard shortcut the most efficient way to switch apps, especially for those who miss the pre-waffle-menu times @mejo-@nickvergessen :)

I'm not exactly sure what the order of the other types is determined by, but it might be good to review that as well. Some types that seem less relevant tend to come up more than relevant ones.

also cc @pringelmann

Metadata

Metadata

Assignees

Projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Unified Search Redesign #60241

Description

@kra-mo

Supersedes #59766

Unified Search is incredibly useful and its performance is technologically very impressive. Unfortunately, its UI has not received nearly as much love as its implementations.

Making it more visible, as mocked-up in #59888 means it's the right time to also improve its usability.

Loading

The main advantage of unified search is being able to find anything in Nextcloud fast. This is undermined by how results are loaded. Before all results have loaded, the UI is plagued by frequent flashing, which slows down the process of finding a result.

I will describe an algorithm in an imperative manner that aims to fix this problem and still return results quickly without disrupting a familiar order.


Results are loaded per-category, as they are now.
Categories can be in one of the following four states:

⬜️ Loading
🟩 Loaded
🟨 Blocked
🟥 Failed


All of them start out as ⬜️ loading, in their preferred order.
We also start a 1500ms (TBD) ⏳ timer.

⏳ 0ms

⬜️ Apps
⬜️ Files
⬜️ Talk
⬜️ Collectives
⬜️ Notes
⬜️ Contacts


Results that come in order are now 🟩 loaded and we present them immediately.

⏳ 882ms

🟩 Apps
🟩 Files
⬜️ Talk
⬜️ Collectives
⬜️ Notes
⬜️ Contacts


Results that come in out-of-order will be 🟨 blocked by the preceding categories.

⏳ 1291ms

🟩 Apps
🟩 Files
⬜️ Talk
🟨 Collectives
⬜️ Notes
🟨 Contacts


When the timer goes off, we move any 🟨 blocked categories up to before any ⬜️ loading categories blocking them. They are now 🟩 loaded. We reset the timer.

⌛️ 1500ms 🔃 ⏳ 0ms

🟩 Apps
🟩 Files
🟩 Collectives
🟩 Contacts
⬜️ Talk
⬜️ Notes


If any request 🟥 fails, it will no longer be able to block other categories.
(We may still retry it depending on why it failed. This behavior can be discarded or simplified if this is not a thing :D)

⏳ 120ms

🟩 Apps
🟩 Files
🟩 Collectives
🟩 Contacts
🟥 Talk
⬜️ Notes


When a category loads, it pushes any 🟥 failed ones back to after 🟩 loaded ones:

⏳ 805ms

🟩 Apps
🟩 Files
🟩 Collectives
🟩 Contacts
🟩 Notes
🟥 Talk


Keyboard Shortcut

We should decide on a global keyboard shortcut to activate unified search in all apps. IIRC @marcoambrosini proposed K for Mac and AltK otherwise so as to not interfere with browser keyboard shortcuts, but imo stealing CtrlK wouldn't be too big of an issue as it is quite an obscure shortcut and mostly superseded by CtrlL. Other web apps do so as well.

Visuals

The general layout of the dialog works quite well. Still, there are a few quality-of-life improvements that should be made.

The Bar

The search bar should be repositioned and the whole top bar resized to be a tad smaller as mentioned in #59888.

Additionally, a hint should be added for the new keyboard shortcut (when horizontal space allows).

Image

Focused

When the bar is focused, its styling should resemble that of any normal input field.

Image

An additional Filter button should appear that, when clicked, pops-up the filters even before the user types a query (@jancborchardt's idea 🙈). After the user typed something, filters always show up, even if they didn't click this button. This is just here to allow users to select filters beforehand, should they choose to.

Image

Results

As results come in according to the algorithm described above, they are displayed similarly to how they are currently. Some changes:

  • A loading icon is shown at the end of the input field until all results have loaded. This replaces the current empty content page for every state, except for when everything has finished loading and still, no results have been found.
  • A maximum of 3 results are shown per type. To see more, the user must click on "More from … →".
  • For each section, there is either a regular heading, or, if more than 3 results are available, a "More from … →" tertiary button, which replaces the previous "… Load more results" button to save vertical space.
  • The first result is automatically selected and this is visually indicated. Pressing opens it. The user can navigate with and through the results (even if the input field is focused).
Image

More from …

When clicking "More from …", results should be displayed in a new view like so:

Image

Apologies for the repeated examples :)

More from connected services

The "Search connected services" toggle should be replaced with a "More from connected services"/"Less from connected services" button at the end of all results.

We should also include a link to configure this globally, as we should encourage people to set this setting instead of deciding on a case-by-case basis, though the option should still be there.

Image

Filtering

Results can be filtered the same way as before, but the filter buttons have been redesigned to be similar to Files. When a filter is active, the button should become primary to indicate it.

Image

Misc. Improvements

Apps should always be the first type to make Unified Search combined with the keyboard shortcut the most efficient way to switch apps, especially for those who miss the pre-waffle-menu times @mejo-@nickvergessen :)

I'm not exactly sure what the order of the other types is determined by, but it might be good to review that as well. Some types that seem less relevant tend to come up more than relevant ones.

also cc @pringelmann

Metadata

Metadata

Assignees

Projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Unified Search Redesign #60241

Description

@kra-mo

Supersedes #59766

Unified Search is incredibly useful and its performance is technologically very impressive. Unfortunately, its UI has not received nearly as much love as its implementations.

Making it more visible, as mocked-up in #59888 means it's the right time to also improve its usability.

Loading

The main advantage of unified search is being able to find anything in Nextcloud fast. This is undermined by how results are loaded. Before all results have loaded, the UI is plagued by frequent flashing, which slows down the process of finding a result.

I will describe an algorithm in an imperative manner that aims to fix this problem and still return results quickly without disrupting a familiar order.


Results are loaded per-category, as they are now.
Categories can be in one of the following four states:

⬜️ Loading
🟩 Loaded
🟨 Blocked
🟥 Failed


All of them start out as ⬜️ loading, in their preferred order.
We also start a 1500ms (TBD) ⏳ timer.

⏳ 0ms

⬜️ Apps
⬜️ Files
⬜️ Talk
⬜️ Collectives
⬜️ Notes
⬜️ Contacts


Results that come in order are now 🟩 loaded and we present them immediately.

⏳ 882ms

🟩 Apps
🟩 Files
⬜️ Talk
⬜️ Collectives
⬜️ Notes
⬜️ Contacts


Results that come in out-of-order will be 🟨 blocked by the preceding categories.

⏳ 1291ms

🟩 Apps
🟩 Files
⬜️ Talk
🟨 Collectives
⬜️ Notes
🟨 Contacts


When the timer goes off, we move any 🟨 blocked categories up to before any ⬜️ loading categories blocking them. They are now 🟩 loaded. We reset the timer.

⌛️ 1500ms 🔃 ⏳ 0ms

🟩 Apps
🟩 Files
🟩 Collectives
🟩 Contacts
⬜️ Talk
⬜️ Notes


If any request 🟥 fails, it will no longer be able to block other categories.
(We may still retry it depending on why it failed. This behavior can be discarded or simplified if this is not a thing :D)

⏳ 120ms

🟩 Apps
🟩 Files
🟩 Collectives
🟩 Contacts
🟥 Talk
⬜️ Notes


When a category loads, it pushes any 🟥 failed ones back to after 🟩 loaded ones:

⏳ 805ms

🟩 Apps
🟩 Files
🟩 Collectives
🟩 Contacts
🟩 Notes
🟥 Talk


Keyboard Shortcut

We should decide on a global keyboard shortcut to activate unified search in all apps. IIRC @marcoambrosini proposed K for Mac and AltK otherwise so as to not interfere with browser keyboard shortcuts, but imo stealing CtrlK wouldn't be too big of an issue as it is quite an obscure shortcut and mostly superseded by CtrlL. Other web apps do so as well.

Visuals

The general layout of the dialog works quite well. Still, there are a few quality-of-life improvements that should be made.

The Bar

The search bar should be repositioned and the whole top bar resized to be a tad smaller as mentioned in #59888.

Additionally, a hint should be added for the new keyboard shortcut (when horizontal space allows).

Image

Focused

When the bar is focused, its styling should resemble that of any normal input field.

Image

An additional Filter button should appear that, when clicked, pops-up the filters even before the user types a query (@jancborchardt's idea 🙈). After the user typed something, filters always show up, even if they didn't click this button. This is just here to allow users to select filters beforehand, should they choose to.

Image

Results

As results come in according to the algorithm described above, they are displayed similarly to how they are currently. Some changes:

  • A loading icon is shown at the end of the input field until all results have loaded. This replaces the current empty content page for every state, except for when everything has finished loading and still, no results have been found.
  • A maximum of 3 results are shown per type. To see more, the user must click on "More from … →".
  • For each section, there is either a regular heading, or, if more than 3 results are available, a "More from … →" tertiary button, which replaces the previous "… Load more results" button to save vertical space.
  • The first result is automatically selected and this is visually indicated. Pressing opens it. The user can navigate with and through the results (even if the input field is focused).
Image

More from …

When clicking "More from …", results should be displayed in a new view like so:

Image

Apologies for the repeated examples :)

More from connected services

The "Search connected services" toggle should be replaced with a "More from connected services"/"Less from connected services" button at the end of all results.

We should also include a link to configure this globally, as we should encourage people to set this setting instead of deciding on a case-by-case basis, though the option should still be there.

Image

Filtering

Results can be filtered the same way as before, but the filter buttons have been redesigned to be similar to Files. When a filter is active, the button should become primary to indicate it.

Image

Misc. Improvements

Apps should always be the first type to make Unified Search combined with the keyboard shortcut the most efficient way to switch apps, especially for those who miss the pre-waffle-menu times @mejo-@nickvergessen :)

I'm not exactly sure what the order of the other types is determined by, but it might be good to review that as well. Some types that seem less relevant tend to come up more than relevant ones.

also cc @pringelmann

Metadata

Metadata

Assignees

Projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions