diff --git a/core/src/components/UnifiedSearch/SearchResultSkeleton.vue b/core/src/components/UnifiedSearch/SearchResultSkeleton.vue
new file mode 100644
index 0000000000000..2b3e127083308
--- /dev/null
+++ b/core/src/components/UnifiedSearch/SearchResultSkeleton.vue
@@ -0,0 +1,76 @@
+
+
+
+
+
+
+
+
diff --git a/core/src/components/UnifiedSearch/UnifiedSearchModal.vue b/core/src/components/UnifiedSearch/UnifiedSearchModal.vue
index 203925e81826a..c28d02cfcefd4 100644
--- a/core/src/components/UnifiedSearch/UnifiedSearchModal.vue
+++ b/core/src/components/UnifiedSearch/UnifiedSearchModal.vue
@@ -24,7 +24,7 @@
+
+
@@ -276,6 +283,7 @@ import CustomDateRangeModal from './CustomDateRangeModal.vue'
import SearchableList from './SearchableList.vue'
import FilterChip from './SearchFilterChip.vue'
import SearchResult from './SearchResult.vue'
+import SearchResultSkeleton from './SearchResultSkeleton.vue'
import { useUnifiedSearch } from '../../composables/useUnifiedSearch.ts'
import { unifiedSearchLogger } from '../../logger.js'
import { getContacts, getProviders } from '../../services/UnifiedSearchService.js'
@@ -287,6 +295,17 @@ import { useSearchStore } from '../../store/unified-search-external-filters.js'
*/
const RESULTS_PER_CATEGORY = 3
+/** Fallback when there is no results box on screen to measure. */
+const DEFAULT_HELD_HEIGHT_PX = 332
+
+const RESIZING_CLASS = 'is-animating-height'
+
+/** The least vertical space one bar takes, gap included, so dividing by it overdraws. */
+const SKELETON_MIN_BAR_AND_GAP_PX = 60
+
+/** Room for the heading and one row. Any less and the fade swallows the row. */
+const SKELETON_MIN_HELD_HEIGHT_PX = 126
+
/** One selectable result row in the flat keyboard-navigation list. */
interface NavigableRow {
id: string
@@ -316,6 +335,7 @@ export default defineComponent({
NcTextField,
SearchableList,
SearchResult,
+ SearchResultSkeleton,
},
props: {
@@ -404,6 +424,9 @@ export default defineComponent({
// aria-activedescendant highlight (combobox pattern).
activeIndex: -1,
minSearchLength: loadState('unified-search', 'min-search-length', 1),
+ reservedHeight: 0,
+ panelFrom: 0,
+ panelResize: null as Animation | null,
// Focus trap spanning [header input, popover panel]; markRaw'd so Vue
// doesn't make the trap instance reactive.
focusTrap: null as FocusTrap | null,
@@ -613,6 +636,21 @@ export default defineComponent({
]
},
+ // A border box, like getBoundingClientRect hands back; content-box would re-add the padding.
+ heldHeight() {
+ // The detail view is not emptied and refilled; its paging has its own button.
+ if (!this.isBusy || this.detailCategory) {
+ return null
+ }
+ return Math.max(this.reservedHeight || DEFAULT_HELD_HEIGHT_PX, SKELETON_MIN_HELD_HEIGHT_PX)
+ },
+
+ skeletonRows() {
+ return this.heldHeight === null
+ ? 0
+ : Math.ceil(this.heldHeight / SKELETON_MIN_BAR_AND_GAP_PX)
+ },
+
// The connected-services opt-in. Shows for any searchable query when external providers
// exist (including zero results, so the user can opt in when local search found nothing),
// never on empty/too-short queries or in detail view. Held until the search settles
@@ -682,11 +720,14 @@ export default defineComponent({
return n('core', '%n result', '%n results', this.navigableRows.length)
},
- // Whether the results region has anything to render. Drives the region's padding
- // so an empty or too-short query leaves no gap under the filters.
hasVisibleResults() {
return this.filteredResults.length > 0 || this.unfilteredResults.length > 0
},
+
+ // Placeholders count as content, or the divider flashes in when the first category lands.
+ hasContentBelowHeader() {
+ return !this.detailCategory && (this.hasVisibleResults || this.skeletonRows > 0)
+ },
},
watch: {
@@ -722,6 +763,7 @@ export default defineComponent({
// Clear them on close so they can't flash on the next open. Close is the
// reliable hook: every close path flips this prop true -> false.
this.reset()
+ this.reservedHeight = 0
// Drop in-flight search bookkeeping so a preserved query can't keep the header
// input spinning, and cancel the pending debounce so it can't dispatch after close.
this.pendingSearch = false
@@ -817,6 +859,16 @@ export default defineComponent({
subscribe('nextcloud:unified-search:add-filter', this.handlePluginFilter)
},
+ // Includes a resize in flight, so it starts from what is on screen.
+ beforeUpdate() {
+ const panel = this.$refs.panel as HTMLElement | undefined
+ this.panelFrom = panel ? panel.getBoundingClientRect().height : 0
+ },
+
+ updated() {
+ this.animatePanelResize()
+ },
+
methods: {
/**
* On close the modal is closed and the query is reset
@@ -924,12 +976,59 @@ export default defineComponent({
this.focusTrap = null
},
+ /** Measuring a held box gives the held height back, so it carries between keystrokes. */
+ captureReservedHeight() {
+ const results = this.$refs.resultsContainer as HTMLElement | undefined
+ this.reservedHeight = results ? results.getBoundingClientRect().height : 0
+ },
+
+ /** Nothing is written to the panel's style, so it follows its content again once done. */
+ animatePanelResize() {
+ const panel = this.$refs.panel as HTMLElement | undefined
+ const from = this.panelFrom
+
+ // Cancel before measuring, or `to` comes back mid-animation. Detach onfinish first, or
+ // it strips the class off the resize that replaces this one.
+ if (this.panelResize) {
+ this.panelResize.onfinish = null
+ this.panelResize.cancel()
+ this.panelResize = null
+ }
+ panel?.classList.remove(RESIZING_CLASS)
+
+ // A closing panel keeps its size through the fade-out; jsdom has no Web Animations.
+ if (!panel || !from || !this.open || typeof panel.animate !== 'function') {
+ return
+ }
+
+ // Zeroed by the reduced-motion theme, which the OS preference switches on as well.
+ const duration = parseFloat(getComputedStyle(panel).getPropertyValue('--animation-slow'))
+ if (!duration) {
+ return
+ }
+
+ const to = panel.getBoundingClientRect().height
+ if (Math.abs(to - from) < 1) {
+ return
+ }
+
+ panel.classList.add(RESIZING_CLASS)
+ const resize = panel.animate(
+ [{ height: `${from}px` }, { height: `${to}px` }],
+ // The curve the panel slides in with, so a resize reads as the same motion.
+ { duration, easing: 'cubic-bezier(0.22, 1, 0.36, 1)' },
+ )
+ resize.onfinish = () => panel.classList.remove(RESIZING_CLASS)
+ this.panelResize = markRaw(resize)
+ },
+
/**
* Blank the results, then queue the search. Every query and filter change comes through
* here. The results on screen answer the previous question, so holding them until the
* debounce fires only means they shift once the real ones land.
*/
scheduleSearch() {
+ this.captureReservedHeight()
this.reset()
// Mark busy synchronously so the debounce window doesn't flash the empty state.
this.pendingSearch = true
@@ -1477,8 +1576,9 @@ export default defineComponent({
// Leave ~10vh below the panel so it does not reach the bottom of the page
max-height: calc(90vh - var(--header-height));
border-radius: var(--border-radius-container-large, var(--border-radius-rounded));
- // Clip the header/results to the rounded corners
- overflow: hidden;
+ // Clip the header/results to the rounded corners. `clip` rather than `hidden` so this is
+ // not a scroll container: a squeezed panel would otherwise scroll the filter row away.
+ overflow: clip;
background-color: var(--color-main-background);
color: var(--color-main-text);
box-shadow: 0 0 40px rgba(0, 0, 0, 0.2);
@@ -1487,6 +1587,11 @@ export default defineComponent({
transition: transform 240ms cubic-bezier(0.22, 1, 0.36, 1);
}
+// Mid-resize the panel is shorter than its content; clip so no scrollbar flashes.
+.unified-search-modal__container.is-animating-height .unified-search-modal__results {
+ overflow: clip;
+}
+
// Fullscreen on small viewports, mirrors NcModal's responsive breakpoint
@media only screen and ((max-width: 512px) or (max-height: 400px)) {
.unified-search-modal-root {
@@ -1546,14 +1651,16 @@ export default defineComponent({
position: relative;
display: flex;
flex-direction: column;
+ // The results box absorbs the resize; the filter row keeps its size.
+ flex-shrink: 0;
gap: calc(var(--default-grid-baseline) * 2);
padding-inline: calc(var(--default-grid-baseline) * 4);
// Trim the bottom when the filter row is all there is; results add it back below.
padding-block: calc(var(--default-grid-baseline) * 4) 0;
- // With results below, restore the full bottom inset above the divider (which aligns
+ // With content below, restore the full bottom inset above the divider (which aligns
// to the content edge).
- &--has-results {
+ &--has-content-below {
padding-block-end: calc(var(--default-grid-baseline) * 4);
&::after {
@@ -1699,10 +1806,23 @@ export default defineComponent({
flex: 1 1 auto;
min-height: 0;
overflow: hidden auto;
+
+ // The placeholders deliberately overfill, so the bottom fades out over the cut.
+ &--held {
+ flex-grow: 0;
+ overflow: clip;
+ // Capped, so a short box does not spend a third of itself fading.
+ mask-image: linear-gradient(to bottom, #000 calc(100% - min(2lh, 25%)), transparent);
+ }
// Adjust padding to match container but keep the scrollbar on the very end
padding-inline: calc(var(--default-grid-baseline) * 4);
padding-block: 0 calc(var(--default-grid-baseline) * 4);
+ // Matches the gap a category title keeps above itself.
+ .search-result-skeleton {
+ margin-block-start: 14px;
+ }
+
.result {
&-title {
color: var(--color-text-maxcontrast);
@@ -1771,7 +1891,7 @@ export default defineComponent({
// Ensure modal is accessible on small devices
@media only screen and (max-height: 400px) {
- .unified-search-modal__results {
+ .unified-search-modal__results:not(.unified-search-modal__results--held) {
overflow: unset;
}
}
diff --git a/core/src/tests/components/SearchResultSkeleton.spec.ts b/core/src/tests/components/SearchResultSkeleton.spec.ts
new file mode 100644
index 0000000000000..46ebf50bf6c6a
--- /dev/null
+++ b/core/src/tests/components/SearchResultSkeleton.spec.ts
@@ -0,0 +1,26 @@
+/*!
+ * SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ */
+import { mount } from '@vue/test-utils'
+import { describe, expect, it } from 'vitest'
+import SearchResultSkeleton from '../../components/UnifiedSearch/SearchResultSkeleton.vue'
+
+function factory(rows = 3) {
+ return mount(SearchResultSkeleton, { propsData: { rows } })
+}
+
+describe('SearchResultSkeleton', () => {
+ // The rows asked for, plus the heading the block always leads with.
+ it('draws a heading bar above the rows', () => {
+ expect(factory(3).findAll('.search-result-skeleton__bar')).toHaveLength(4)
+ })
+
+ it('is decoration: hidden from assistive tech and out of the tab order', () => {
+ const wrapper = factory()
+
+ expect(wrapper.attributes('aria-hidden')).toBe('true')
+ // aria-hidden does not remove a focusable child from the tab order.
+ expect(wrapper.findAll('a, button, input, [tabindex]')).toHaveLength(0)
+ })
+})
diff --git a/core/src/tests/components/UnifiedSearchModal.spec.ts b/core/src/tests/components/UnifiedSearchModal.spec.ts
index 43b477ab3a9fe..604f1a5e10c39 100644
--- a/core/src/tests/components/UnifiedSearchModal.spec.ts
+++ b/core/src/tests/components/UnifiedSearchModal.spec.ts
@@ -1205,6 +1205,263 @@ describe('UnifiedSearchModal loading state', () => {
})
})
+describe('UnifiedSearchModal loading skeleton', () => {
+ const loadingState = { status: 'loading', entries: [], cursor: null, hasMore: false, loadMoreFailed: false }
+
+ /** jsdom does no layout, so fake the measurement. */
+ function measureResultsAt(wrapper: ReturnType, height: number) {
+ const box = wrapper.vm.$refs.resultsContainer as HTMLElement
+ vi.spyOn(box, 'getBoundingClientRect').mockReturnValue({ height } as DOMRect)
+ }
+
+ /** Mount with a settled result on screen, ready for a keystroke to replace it. */
+ async function withResults() {
+ const wrapper = factory()
+ wrapper.vm.providers = [{ id: 'files', name: 'Files', order: 0 }]
+ wrapper.vm.initialized = true
+ wrapper.vm.searchQuery = 'query'
+ await wrapper.vm.$nextTick()
+ wrapper.vm.find('query')
+ searchStates.value = { files: loaded([{ resourceUrl: '/a' }, { resourceUrl: '/b' }]) }
+ await wrapper.vm.$nextTick()
+ return wrapper
+ }
+
+ function skeleton(wrapper: ReturnType) {
+ return wrapper.findComponent({ name: 'SearchResultSkeleton' })
+ }
+
+ it('holds the results box at the height it had when the query changed', async () => {
+ const wrapper = await withResults()
+ measureResultsAt(wrapper, 300)
+
+ wrapper.vm.searchQuery = 'querying'
+ await wrapper.vm.$nextTick()
+
+ expect(wrapper.vm.isBusy).toBe(true)
+ expect(wrapper.vm.heldHeight).toBe(300)
+ })
+
+ it('asks for more rows the taller the panel it is holding', async () => {
+ const wrapper = await withResults()
+ measureResultsAt(wrapper, 300)
+ wrapper.vm.searchQuery = 'querying'
+ await wrapper.vm.$nextTick()
+
+ const tall = skeleton(wrapper).props('rows')
+ expect(tall).toBeGreaterThan(0)
+
+ wrapper.vm.reservedHeight = 100
+ await wrapper.vm.$nextTick()
+ expect(skeleton(wrapper).props('rows')).toBeLessThan(tall)
+ })
+
+ // The panel clips what does not fit, so asking for too few would leave a gap.
+ it('asks for more rows than fit the space', async () => {
+ const wrapper = await withResults()
+ measureResultsAt(wrapper, 300)
+ wrapper.vm.searchQuery = 'querying'
+ await wrapper.vm.$nextTick()
+
+ // A row plus its gap is never shorter than 60px.
+ expect(wrapper.vm.skeletonRows * 60).toBeGreaterThanOrEqual(300)
+ })
+
+ it('holds the same height through repeated keystrokes rather than creeping taller', async () => {
+ const wrapper = await withResults()
+ const box = wrapper.vm.$refs.resultsContainer as HTMLElement
+ // Stand in for the browser: report the padding on top of whatever height is set.
+ const padding = 16
+ vi.spyOn(box, 'getBoundingClientRect').mockImplementation(() => ({
+ height: (parseFloat(box.style.blockSize) || 300) + (box.style.boxSizing === 'border-box' ? 0 : padding),
+ }) as DOMRect)
+
+ wrapper.vm.searchQuery = 'q1'
+ await wrapper.vm.$nextTick()
+ const first = wrapper.vm.heldHeight
+ wrapper.vm.searchQuery = 'q12'
+ await wrapper.vm.$nextTick()
+ wrapper.vm.searchQuery = 'q123'
+ await wrapper.vm.$nextTick()
+
+ expect(wrapper.vm.heldHeight).toBe(first)
+ })
+
+ it('falls back to a default height on the first search of a session', async () => {
+ const wrapper = factory()
+ wrapper.vm.providers = [{ id: 'files', name: 'Files', order: 0 }]
+ wrapper.vm.initialized = true
+ wrapper.vm.searchQuery = 'query'
+ await wrapper.vm.$nextTick()
+
+ expect(wrapper.vm.heldHeight).toBeGreaterThan(0)
+ expect(skeleton(wrapper).props('rows')).toBeGreaterThan(0)
+ })
+
+ // Any less and the fade swallows the row, leaving the heading bar on its own.
+ it('holds room for a row even when the box it measured was shorter than one', async () => {
+ const wrapper = await withResults()
+ measureResultsAt(wrapper, 60)
+
+ wrapper.vm.searchQuery = 'querying'
+ await wrapper.vm.$nextTick()
+
+ expect(wrapper.vm.heldHeight).toBe(126)
+ })
+
+ it('keeps the reservation through a run of quick keystrokes', async () => {
+ const wrapper = await withResults()
+ measureResultsAt(wrapper, 300)
+ wrapper.vm.searchQuery = 'querying'
+ await wrapper.vm.$nextTick()
+
+ wrapper.vm.searchQuery = 'queryings'
+ await wrapper.vm.$nextTick()
+
+ expect(wrapper.vm.heldHeight).toBe(300)
+ })
+
+ it('releases the height when the search settles', async () => {
+ const wrapper = await withResults()
+ measureResultsAt(wrapper, 300)
+ wrapper.vm.searchQuery = 'querying'
+ await wrapper.vm.$nextTick()
+ wrapper.vm.find('querying')
+ searchStates.value = { files: loaded([{ resourceUrl: '/c' }]) }
+ await wrapper.vm.$nextTick()
+
+ expect(wrapper.vm.isBusy).toBe(false)
+ expect(wrapper.vm.heldHeight).toBe(null)
+ expect(skeleton(wrapper).exists()).toBe(false)
+ })
+
+ it('shows no bars on an empty or too-short query', async () => {
+ const wrapper = await withResults()
+ wrapper.vm.minSearchLength = 3
+ wrapper.vm.searchQuery = 'ab'
+ await wrapper.vm.$nextTick()
+
+ expect(wrapper.vm.heldHeight).toBe(null)
+ expect(skeleton(wrapper).exists()).toBe(false)
+ })
+
+ it('shows no bars in the detail view, which pages one category on its own', async () => {
+ const wrapper = await withResults()
+ searchStates.value = { files: { ...loaded([{ resourceUrl: '/a' }]), status: 'loading' } }
+ wrapper.vm.detailCategory = 'files'
+ await wrapper.vm.$nextTick()
+
+ expect(wrapper.vm.isBusy).toBe(true)
+ expect(skeleton(wrapper).exists()).toBe(false)
+ })
+
+ it('renders below every real result, so nothing on screen can be displaced', async () => {
+ const wrapper = await withResults()
+ wrapper.vm.searchQuery = 'querying'
+ await wrapper.vm.$nextTick()
+ wrapper.vm.find('querying')
+ searchStates.value = { files: loaded([{ resourceUrl: '/a' }]), talk: loadingState }
+ wrapper.vm.providers = [{ id: 'files', name: 'Files', order: 0 }, { id: 'talk', name: 'Talk', order: 1 }]
+ await wrapper.vm.$nextTick()
+
+ const container = wrapper.find('.unified-search-modal__results')
+ expect(container.find('.result-group').exists()).toBe(true)
+ expect(container.element.lastElementChild).toBe(skeleton(wrapper).element)
+ })
+
+ it('never enters navigableRows, so arrow keys cannot land on a placeholder', async () => {
+ const wrapper = await withResults()
+ wrapper.vm.searchQuery = 'querying'
+ await wrapper.vm.$nextTick()
+ wrapper.vm.find('querying')
+ searchStates.value = { files: loaded([{ resourceUrl: '/a' }]), talk: loadingState }
+ await wrapper.vm.$nextTick()
+
+ expect(skeleton(wrapper).exists()).toBe(true)
+ expect(wrapper.vm.navigableRows.map((row) => row.resourceUrl)).toEqual(['/a'])
+ })
+
+ it('carries the header divider, so it does not flash in when the first category lands', async () => {
+ const wrapper = await withResults()
+ wrapper.vm.searchQuery = 'querying'
+ await wrapper.vm.$nextTick()
+
+ expect(wrapper.vm.hasVisibleResults).toBe(false)
+ expect(wrapper.vm.hasContentBelowHeader).toBe(true)
+ })
+
+ it('drops the header divider once the placeholders go and nothing is left below', async () => {
+ const wrapper = await withResults()
+ wrapper.vm.searchQuery = 'querying'
+ await wrapper.vm.$nextTick()
+ wrapper.vm.find('querying')
+ searchStates.value = { files: loaded([]) }
+ await wrapper.vm.$nextTick()
+
+ expect(wrapper.vm.hasContentBelowHeader).toBe(false)
+ })
+})
+
+describe('UnifiedSearchModal panel resize', () => {
+ /** Open modal whose panel reports `height` and records its animations. */
+ function factoryWithPanel(height: number) {
+ const wrapper = factory()
+ const panel = wrapper.vm.$refs.panel as HTMLElement
+ const animate = vi.fn(() => ({ cancel: vi.fn(), onfinish: null }) as unknown as Animation)
+ panel.animate = animate
+ vi.spyOn(panel, 'getBoundingClientRect').mockReturnValue({ height } as DOMRect)
+ // Stands in for the theming app, which is what hands the panel its duration.
+ panel.style.setProperty('--animation-slow', '200ms')
+ return { wrapper, panel, animate }
+ }
+
+ it('plays the panel from its previous height to the one it has now', async () => {
+ const { wrapper, panel, animate } = factoryWithPanel(420)
+ wrapper.vm.panelFrom = 200
+
+ wrapper.vm.animatePanelResize()
+
+ expect(animate).toHaveBeenCalledWith(
+ [{ height: '200px' }, { height: '420px' }],
+ expect.objectContaining({ duration: 200 }),
+ )
+ expect(panel.classList.contains('is-animating-height')).toBe(true)
+ })
+
+ it('leaves a render that does not move the height alone', async () => {
+ const { wrapper, animate } = factoryWithPanel(420)
+ wrapper.vm.panelFrom = 420
+
+ wrapper.vm.animatePanelResize()
+
+ expect(animate).not.toHaveBeenCalled()
+ })
+
+ it('drops the resize in flight when the panel closes', async () => {
+ const { wrapper, animate } = factoryWithPanel(420)
+ wrapper.vm.panelFrom = 200
+ wrapper.vm.animatePanelResize()
+ const running = wrapper.vm.panelResize
+
+ await wrapper.setProps({ open: false })
+ wrapper.vm.panelFrom = 100
+ wrapper.vm.animatePanelResize()
+
+ expect(running.cancel).toHaveBeenCalled()
+ expect(animate).toHaveBeenCalledTimes(1)
+ })
+
+ it('changes size without motion when the reduced-motion theme zeroes the duration', async () => {
+ const { wrapper, panel, animate } = factoryWithPanel(420)
+ wrapper.vm.panelFrom = 200
+ panel.style.setProperty('--animation-slow', '0')
+
+ wrapper.vm.animatePanelResize()
+
+ expect(animate).not.toHaveBeenCalled()
+ })
+})
+
describe('UnifiedSearchModal reveal order', () => {
const providers = [
{ id: 'files', name: 'Files', order: 0 },
diff --git a/dist/core-unified-search.js b/dist/core-unified-search.js
index ceafd8722f8f2..6e77c62d9378a 100644
--- a/dist/core-unified-search.js
+++ b/dist/core-unified-search.js
@@ -1,2 +1,2 @@
-(()=>{"use strict";var t={78744(t,e,n){var i=n(21777),a=n(53334),r=n(35947),s=n(10810),o=n(85471),l=n(61338),c=n(53429),d=n(97786),A=n(46855),u=n(74095),h=n(39689),p=n(52372),m=n(88289),f=n(23884);const C={name:"FilterVariantIcon",emits:["click"],props:{title:{type:String},fillColor:{type:String,default:"currentColor"},size:{type:Number,default:24}}};var v=n(14486);const g=(0,v.A)(C,function(){var t=this,e=t._self._c;return e("span",t._b({staticClass:"material-design-icon filter-variant-icon",attrs:{"aria-hidden":t.title?null:"true","aria-label":t.title,role:"img"},on:{click:function(e){return t.$emit("click",e)}}},"span",t.$attrs,!1),[e("svg",{staticClass:"material-design-icon__svg",attrs:{fill:t.fillColor,width:t.size,height:t.size,viewBox:"0 0 24 24"}},[e("path",{attrs:{d:"M6,13H18V11H6M3,6V8H21V6M10,18H14V16H10V18Z"}},[t.title?e("title",[t._v(t._s(t.title))]):t._e()])])])},[],!1,null,null,null).exports,b={name:"MagnifyIcon",emits:["click"],props:{title:{type:String},fillColor:{type:String,default:"currentColor"},size:{type:Number,default:24}}},y=(0,v.A)(b,function(){var t=this,e=t._self._c;return e("span",t._b({staticClass:"material-design-icon magnify-icon",attrs:{"aria-hidden":t.title?null:"true","aria-label":t.title,role:"img"},on:{click:function(e){return t.$emit("click",e)}}},"span",t.$attrs,!1),[e("svg",{staticClass:"material-design-icon__svg",attrs:{fill:t.fillColor,width:t.size,height:t.size,viewBox:"0 0 24 24"}},[e("path",{attrs:{d:"M9.5,3A6.5,6.5 0 0,1 16,9.5C16,11.11 15.41,12.59 14.44,13.73L14.71,14H15.5L20.5,19L19,20.5L14,15.5V14.71L13.73,14.44C12.59,15.41 11.11,16 9.5,16A6.5,6.5 0 0,1 3,9.5A6.5,6.5 0 0,1 9.5,3M9.5,5C7,5 5,7 5,9.5C5,12 7,14 9.5,14C12,14 14,12 14,9.5C14,7 12,5 9.5,5Z"}},[t.title?e("title",[t._v(t._s(t.title))]):t._e()])])])},[],!1,null,null,null).exports,_=(0,o.pM)({__name:"UnifiedSearchInput",props:{expanded:{type:Boolean},activeDescendantId:null,query:null,loading:{type:Boolean},filtersRevealed:{type:Boolean}},setup(t,{expose:e,emit:n}){const i=t,r=(0,c.F)(),s=(0,a.t)("core","Apps, files, messages, and more"),l={ArrowDown:"next",ArrowUp:"prev"},d=(0,o.KR)(),A=(0,o.KR)(),C=(0,o.KR)(!1),v=(0,o.EW)(()=>C.value||i.query.length>0||Boolean(i.expanded)),b=(0,o.EW)(()=>C.value&&0===i.query.length&&!i.filtersRevealed);function _(){A.value?.focus()}return e({focus:_}),{__sfc:!0,props:i,emit:n,isSmallMobile:r,placeholderText:s,resultsContainerId:"unified-search-results",directionByKey:l,fieldRef:d,inputRef:A,isFocused:C,isActive:v,showFunnel:b,onFocusOut:function(t){d.value?.contains(t.relatedTarget)||(C.value=!1)},onMouseDown:function(t){t.target!==A.value&&t.preventDefault()},onInput:function(t){n("update:query",t.target.value)},openFilters:function(){A.value?.focus(),n("open-filters")},clearOrClose:function(){if(i.query.length>0)return n("update:query",""),void A.value?.focus();const t=document.activeElement;t?.blur(),n("close")},onKeyDown:function(t){if(t.isComposing)return;if("Escape"===t.key&&!i.expanded)return void A.value?.blur();if(!i.expanded)return;const e=l[t.key];e?(t.preventDefault(),n("navigate",e)):"Enter"===t.key&&(t.preventDefault(),n("activate"))},focus:_,t:a.t,NcButton:u.A,NcHeaderButton:h.N,NcKbd:p.N,NcLoadingIcon:m.A,IconClose:f.A,IconFilterVariant:g,IconMagnify:y}}});var x=n(85072),k=n.n(x),w=n(97825),S=n.n(w),D=n(77659),B=n.n(D),I=n(55056),F=n.n(I),M=n(10540),E=n.n(M),T=n(41113),z=n.n(T),R=n(14600),O={};O.styleTagTransform=z(),O.setAttributes=F(),O.insert=B().bind(null,"head"),O.domAPI=S(),O.insertStyleElement=E(),k()(R.A,O),R.A&&R.A.locals&&R.A.locals;const q=(0,v.A)(_,function(){var t=this,e=t._self._c,n=t._self._setupProxy;return e("search",{staticClass:"unified-search-input",class:{"unified-search-input--mobile":n.isSmallMobile}},[n.isSmallMobile?e(n.NcHeaderButton,{attrs:{id:"unified-search-trigger",ariaLabel:n.placeholderText,"aria-haspopup":"dialog","aria-expanded":t.expanded?"true":"false"},on:{click:function(e){return t.$emit("click",e)}},scopedSlots:t._u([{key:"icon",fn:function(){return[e(n.IconMagnify,{attrs:{size:20}})]},proxy:!0}],null,!1,1795316816)}):e("div",{ref:"fieldRef",staticClass:"unified-search-input__field",class:{"unified-search-input__field--active":n.isActive},on:{focusin:function(t){n.isFocused=!0},focusout:n.onFocusOut,mousedown:n.onMouseDown}},[e("div",{staticClass:"unified-search-input__resting",class:{"unified-search-input__resting--filled":t.query.length>0},attrs:{"aria-hidden":"true"}},[e(n.IconMagnify,{attrs:{size:20}}),t._v(" "),e("span",{staticClass:"unified-search-input__label"},[t._v(t._s(n.placeholderText))])],1),t._v(" "),e("input",{ref:"inputRef",staticClass:"unified-search-input__input",attrs:{type:"text",role:"combobox","aria-autocomplete":"list","aria-expanded":t.expanded?"true":"false","aria-controls":t.expanded?n.resultsContainerId:void 0,"aria-activedescendant":t.expanded&&t.activeDescendantId||void 0,"aria-label":n.placeholderText},domProps:{value:t.query},on:{input:n.onInput,keydown:n.onKeyDown}}),t._v(" "),n.showFunnel?e(n.NcButton,{staticClass:"unified-search-input__filter",attrs:{variant:"tertiary-no-background","aria-label":n.t("core","Filters")},on:{click:n.openFilters},scopedSlots:t._u([{key:"icon",fn:function(){return[e(n.IconFilterVariant,{attrs:{size:20}})]},proxy:!0}],null,!1,2820714996)}):t._e(),t._v(" "),t.loading?e(n.NcLoadingIcon,{staticClass:"unified-search-input__loading",attrs:{size:20}}):t._e(),t._v(" "),n.isActive?e(n.NcButton,{staticClass:"unified-search-input__clear",attrs:{variant:"tertiary-no-background","aria-label":t.query.length>0?n.t("core","Clear search"):n.t("core","Close search")},on:{click:n.clearOrClose},scopedSlots:t._u([{key:"icon",fn:function(){return[e(n.IconClose,{attrs:{size:20}})]},proxy:!0}],null,!1,4099733813)}):t._e(),t._v(" "),n.isActive?t._e():e("span",{staticClass:"unified-search-input__shortcut",attrs:{"aria-hidden":"true"}},[e(n.NcKbd,{attrs:{symbol:"Control"}}),t._v(" "),e(n.NcKbd,{attrs:{symbol:"K"}})],1)],1)],1)},[],!1,null,"59e94aec",null).exports;var N=n(81222),P=n(52697),U=n(57505),G=n(24764),L=n(41944),H=n(48943),V=n(82182);const $={name:"AccountMultipleOutlineIcon",emits:["click"],props:{title:{type:String},fillColor:{type:String,default:"currentColor"},size:{type:Number,default:24}}},Y=(0,v.A)($,function(){var t=this,e=t._self._c;return e("span",t._b({staticClass:"material-design-icon account-multiple-outline-icon",attrs:{"aria-hidden":t.title?null:"true","aria-label":t.title,role:"img"},on:{click:function(e){return t.$emit("click",e)}}},"span",t.$attrs,!1),[e("svg",{staticClass:"material-design-icon__svg",attrs:{fill:t.fillColor,width:t.size,height:t.size,viewBox:"0 0 24 24"}},[e("path",{attrs:{d:"M13.07 10.41A5 5 0 0 0 13.07 4.59A3.39 3.39 0 0 1 15 4A3.5 3.5 0 0 1 15 11A3.39 3.39 0 0 1 13.07 10.41M5.5 7.5A3.5 3.5 0 1 1 9 11A3.5 3.5 0 0 1 5.5 7.5M7.5 7.5A1.5 1.5 0 1 0 9 6A1.5 1.5 0 0 0 7.5 7.5M16 17V19H2V17S2 13 9 13 16 17 16 17M14 17C13.86 16.22 12.67 15 9 15S4.07 16.31 4 17M15.95 13A5.32 5.32 0 0 1 18 17V19H22V17S22 13.37 15.94 13Z"}},[t.title?e("title",[t._v(t._s(t.title))]):t._e()])])])},[],!1,null,null,null).exports,K={name:"ArrowLeftIcon",emits:["click"],props:{title:{type:String},fillColor:{type:String,default:"currentColor"},size:{type:Number,default:24}}},j=(0,v.A)(K,function(){var t=this,e=t._self._c;return e("span",t._b({staticClass:"material-design-icon arrow-left-icon",attrs:{"aria-hidden":t.title?null:"true","aria-label":t.title,role:"img"},on:{click:function(e){return t.$emit("click",e)}}},"span",t.$attrs,!1),[e("svg",{staticClass:"material-design-icon__svg",attrs:{fill:t.fillColor,width:t.size,height:t.size,viewBox:"0 0 24 24"}},[e("path",{attrs:{d:"M20,11V13H8L13.5,18.5L12.08,19.92L4.16,12L12.08,4.08L13.5,5.5L8,11H20Z"}},[t.title?e("title",[t._v(t._s(t.title))]):t._e()])])])},[],!1,null,null,null).exports;var Q=n(71164);const W={name:"CalendarBlankOutlineIcon",emits:["click"],props:{title:{type:String},fillColor:{type:String,default:"currentColor"},size:{type:Number,default:24}}},Z=(0,v.A)(W,function(){var t=this,e=t._self._c;return e("span",t._b({staticClass:"material-design-icon calendar-blank-outline-icon",attrs:{"aria-hidden":t.title?null:"true","aria-label":t.title,role:"img"},on:{click:function(e){return t.$emit("click",e)}}},"span",t.$attrs,!1),[e("svg",{staticClass:"material-design-icon__svg",attrs:{fill:t.fillColor,width:t.size,height:t.size,viewBox:"0 0 24 24"}},[e("path",{attrs:{d:"M19 3H18V1H16V3H8V1H6V3H5C3.89 3 3 3.9 3 5V19C3 20.11 3.9 21 5 21H19C20.11 21 21 20.11 21 19V5C21 3.9 20.11 3 19 3M19 19H5V9H19V19M19 7H5V5H19V7Z"}},[t.title?e("title",[t._v(t._s(t.title))]):t._e()])])])},[],!1,null,null,null).exports;var J=n(71680);const X={name:"ShapeOutlineIcon",emits:["click"],props:{title:{type:String},fillColor:{type:String,default:"currentColor"},size:{type:Number,default:24}}},tt=(0,v.A)(X,function(){var t=this,e=t._self._c;return e("span",t._b({staticClass:"material-design-icon shape-outline-icon",attrs:{"aria-hidden":t.title?null:"true","aria-label":t.title,role:"img"},on:{click:function(e){return t.$emit("click",e)}}},"span",t.$attrs,!1),[e("svg",{staticClass:"material-design-icon__svg",attrs:{fill:t.fillColor,width:t.size,height:t.size,viewBox:"0 0 24 24"}},[e("path",{attrs:{d:"M11,13.5V21.5H3V13.5H11M9,15.5H5V19.5H9V15.5M12,2L17.5,11H6.5L12,2M12,5.86L10.08,9H13.92L12,5.86M17.5,13C20,13 22,15 22,17.5C22,20 20,22 17.5,22C15,22 13,20 13,17.5C13,15 15,13 17.5,13M17.5,15A2.5,2.5 0 0,0 15,17.5A2.5,2.5 0 0,0 17.5,20A2.5,2.5 0 0,0 20,17.5A2.5,2.5 0 0,0 17.5,15Z"}},[t.title?e("title",[t._v(t._s(t.title))]):t._e()])])])},[],!1,null,null,null).exports;var et=n(48198),nt=n(83947);const it={name:"CalendarRangeIcon",emits:["click"],props:{title:{type:String},fillColor:{type:String,default:"currentColor"},size:{type:Number,default:24}}},at=(0,v.A)(it,function(){var t=this,e=t._self._c;return e("span",t._b({staticClass:"material-design-icon calendar-range-icon",attrs:{"aria-hidden":t.title?null:"true","aria-label":t.title,role:"img"},on:{click:function(e){return t.$emit("click",e)}}},"span",t.$attrs,!1),[e("svg",{staticClass:"material-design-icon__svg",attrs:{fill:t.fillColor,width:t.size,height:t.size,viewBox:"0 0 24 24"}},[e("path",{attrs:{d:"M9,10H7V12H9V10M13,10H11V12H13V10M17,10H15V12H17V10M19,3H18V1H16V3H8V1H6V3H5C3.89,3 3,3.9 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5A2,2 0 0,0 19,3M19,19H5V8H19V19Z"}},[t.title?e("title",[t._v(t._s(t.title))]):t._e()])])])},[],!1,null,null,null).exports,rt={name:"CustomDateRangeModal",components:{NcButton:u.A,NcModal:nt.A,CalendarRangeIcon:at,NcDateTimePicker:et.A},props:{isOpen:{type:Boolean,required:!0}},data:()=>({dateFilter:{startFrom:null,endAt:null}}),computed:{isModalOpen:{get(){return this.isOpen},set(t){this.$emit("update:is-open",t)}}},methods:{closeModal(){this.isModalOpen=!1},applyCustomRange(){this.$emit("set:custom-date-range",this.dateFilter),this.closeModal()}}};var st=n(12667),ot={};ot.styleTagTransform=z(),ot.setAttributes=F(),ot.insert=B().bind(null,"head"),ot.domAPI=S(),ot.insertStyleElement=E(),k()(st.A,ot),st.A&&st.A.locals&&st.A.locals;const lt=(0,v.A)(rt,function(){var t=this,e=t._self._c;return t.isModalOpen?e("NcModal",{attrs:{id:"unified-search",name:t.t("core","Custom date range"),show:t.isModalOpen,size:"small","clear-view-delay":0,title:t.t("core","Custom date range")},on:{"update:show":function(e){t.isModalOpen=e},close:t.closeModal}},[e("div",{staticClass:"unified-search-custom-date-modal"},[e("h1",[t._v(t._s(t.t("core","Custom date range")))]),t._v(" "),e("div",{staticClass:"unified-search-custom-date-modal__pickers"},[e("NcDateTimePicker",{attrs:{id:"unifiedsearch-custom-date-range-start",label:t.t("core","Pick start date"),type:"date"},model:{value:t.dateFilter.startFrom,callback:function(e){t.$set(t.dateFilter,"startFrom",e)},expression:"dateFilter.startFrom"}}),t._v(" "),e("NcDateTimePicker",{attrs:{id:"unifiedsearch-custom-date-range-end",label:t.t("core","Pick end date"),type:"date"},model:{value:t.dateFilter.endAt,callback:function(e){t.$set(t.dateFilter,"endAt",e)},expression:"dateFilter.endAt"}})],1),t._v(" "),e("div",{staticClass:"unified-search-custom-date-modal__footer"},[e("NcButton",{on:{click:t.applyCustomRange},scopedSlots:t._u([{key:"icon",fn:function(){return[e("CalendarRangeIcon",{attrs:{size:20}})]},proxy:!0}],null,!1,3084610734)},[t._v("\n\t\t\t\t"+t._s(t.t("core","Search in date range"))+"\n\t\t\t\t")])],1)])]):t._e()},[],!1,null,"2907014b",null).exports;var ct=n(54562);const dt={name:"AlertCircleOutlineIcon",emits:["click"],props:{title:{type:String},fillColor:{type:String,default:"currentColor"},size:{type:Number,default:24}}},At=(0,v.A)(dt,function(){var t=this,e=t._self._c;return e("span",t._b({staticClass:"material-design-icon alert-circle-outline-icon",attrs:{"aria-hidden":t.title?null:"true","aria-label":t.title,role:"img"},on:{click:function(e){return t.$emit("click",e)}}},"span",t.$attrs,!1),[e("svg",{staticClass:"material-design-icon__svg",attrs:{fill:t.fillColor,width:t.size,height:t.size,viewBox:"0 0 24 24"}},[e("path",{attrs:{d:"M11,15H13V17H11V15M11,7H13V13H11V7M12,2C6.47,2 2,6.5 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2M12,20A8,8 0 0,1 4,12A8,8 0 0,1 12,4A8,8 0 0,1 20,12A8,8 0 0,1 12,20Z"}},[t.title?e("title",[t._v(t._s(t.title))]):t._e()])])])},[],!1,null,null,null).exports,ut={name:"SearchableList",components:{IconMagnify:y,IconAlertCircleOutline:At,NcAvatar:L.A,NcButton:u.A,NcEmptyContent:H.A,NcPopover:ct.A,NcTextField:V.A},props:{labelText:{type:String,default:"this is a label"},searchList:{type:Array,required:!0},emptyContentText:{type:String,required:!0}},data:()=>({opened:!1,error:!1,searchTerm:""}),computed:{filteredList(){return this.searchList.filter(t=>!this.searchTerm.toLowerCase().length||["displayName"].some(e=>t[e].toLowerCase().includes(this.searchTerm.toLowerCase())))}},methods:{clearSearch(){this.searchTerm=""},setOpened(t){this.opened=t},itemSelected(t){this.$emit("item-selected",t),this.clearSearch(),this.setOpened(!1)},searchTermChanged(t){this.$emit("search-term-change",t)}}};var ht=n(60645),pt={};pt.styleTagTransform=z(),pt.setAttributes=F(),pt.insert=B().bind(null,"head"),pt.domAPI=S(),pt.insertStyleElement=E(),k()(ht.A,pt),ht.A&&ht.A.locals&&ht.A.locals;const mt=(0,v.A)(ut,function(){var t=this,e=t._self._c;return e("NcPopover",{attrs:{shown:t.opened},on:{show:function(e){return t.setOpened(!0)},hide:function(e){return t.setOpened(!1)}},scopedSlots:t._u([{key:"trigger",fn:function(){return[t._t("trigger")]},proxy:!0}],null,!0)},[t._v(" "),e("div",{staticClass:"searchable-list__wrapper"},[e("NcTextField",{attrs:{label:t.labelText,"trailing-button-icon":"close","show-trailing-button":""!==t.searchTerm},on:{"update:value":t.searchTermChanged,"trailing-button-click":t.clearSearch},model:{value:t.searchTerm,callback:function(e){t.searchTerm=e},expression:"searchTerm"}},[e("IconMagnify",{attrs:{size:20}})],1),t._v(" "),t.filteredList.length>0?e("ul",{staticClass:"searchable-list__list"},t._l(t.filteredList,function(n){return e("li",{key:n.id,attrs:{title:n.displayName,role:"button"}},[e("NcButton",{attrs:{alignment:"start",variant:"tertiary",wide:!0},on:{click:function(e){return t.itemSelected(n)}},scopedSlots:t._u([{key:"icon",fn:function(){return[n.isUser?e("NcAvatar",{attrs:{user:n.user,"hide-status":""}}):e("NcAvatar",{attrs:{"is-no-user":!0,"display-name":n.displayName,"hide-status":""}})]},proxy:!0}],null,!0)},[t._v("\n\t\t\t\t\t"+t._s(n.displayName)+"\n\t\t\t\t")])],1)}),0):e("div",{staticClass:"searchable-list__empty-content"},[e("NcEmptyContent",{attrs:{name:t.emptyContentText},scopedSlots:t._u([{key:"icon",fn:function(){return[e("IconAlertCircleOutline")]},proxy:!0}])})],1)],1)])},[],!1,null,"66bd6570",null).exports,ft={name:"SearchFilterChip",components:{CloseIcon:f.A},props:{text:{type:String,required:!0},pretext:{type:String,required:!0}},emits:["delete"],computed:{removeLabel(){return(0,a.t)("core","Remove filter: {name}",{name:this.text})}},methods:{deleteChip(){this.$emit("delete")}}};var Ct=n(17830),vt={};vt.styleTagTransform=z(),vt.setAttributes=F(),vt.insert=B().bind(null,"head"),vt.domAPI=S(),vt.insertStyleElement=E(),k()(Ct.A,vt),Ct.A&&Ct.A.locals&&Ct.A.locals;const gt=(0,v.A)(ft,function(){var t=this,e=t._self._c;return e("div",{staticClass:"chip"},[e("span",{staticClass:"icon"},[t._t("icon"),t._v(" "),t.pretext.length?e("span",[t._v(" "+t._s(t.pretext)+" : ")]):t._e()],2),t._v(" "),e("span",{staticClass:"text"},[t._v(t._s(t.text))]),t._v(" "),e("button",{staticClass:"close-button",attrs:{type:"button","aria-label":t.removeLabel},on:{click:t.deleteChip}},[e("CloseIcon",{attrs:{size:18}})],1)])},[],!1,null,"5a4f6249",null).exports;var bt=n(1522);const yt=(0,o.pM)({__name:"AppIcon",props:{icon:null,outlined:{type:Boolean,default:!1}},setup(t){const e=t,n=(0,o.EW)(()=>({"--app-icon-url":`url("${e.icon.replace(/["\\]/g,"\\$&")}")`}));return{__sfc:!0,props:e,iconStyle:n}}});var _t=n(34230),xt={};xt.styleTagTransform=z(),xt.setAttributes=F(),xt.insert=B().bind(null,"head"),xt.domAPI=S(),xt.insertStyleElement=E(),k()(_t.A,xt),_t.A&&_t.A.locals&&_t.A.locals;const kt={name:"SearchResult",components:{AppIcon:(0,v.A)(yt,function(){var t=this,e=t._self._c,n=t._self._setupProxy;return e("span",{staticClass:"app-icon",class:{"app-icon--outlined":t.outlined}},[t.icon?e("span",{staticClass:"app-icon__img",style:n.iconStyle,attrs:{"aria-hidden":"true"}}):t._e(),t._v(" "),t._t("default")],2)},[],!1,null,"67b5106e",null).exports,NcListItem:bt.A},props:{thumbnailUrl:{type:String,default:null},title:{type:String,required:!0},subline:{type:String,default:null},resourceUrl:{type:String,default:null},icon:{type:String,default:""},rounded:{type:Boolean,default:!1},query:{type:String,default:""},elementId:{type:String,default:void 0},active:{type:Boolean,default:!1}},data:()=>({thumbnailHasError:!1}),computed:{hasThumbnail(){return this.isValidIconOrPreviewUrl(this.thumbnailUrl)&&!this.thumbnailHasError},iconIsUrl(){return this.isValidIconOrPreviewUrl(this.icon)},isAppIcon(){return this.rounded&&this.iconIsUrl&&!this.hasThumbnail}},watch:{thumbnailUrl(){this.thumbnailHasError=!1}},methods:{isValidIconOrPreviewUrl:t=>/^https?:\/\//.test(t)||t.startsWith("/"),thumbnailErrorHandler(){this.thumbnailHasError=!0}}};var wt=n(65719),St={};St.styleTagTransform=z(),St.setAttributes=F(),St.insert=B().bind(null,"head"),St.domAPI=S(),St.insertStyleElement=E(),k()(wt.A,St),wt.A&&wt.A.locals&&wt.A.locals;const Dt=(0,v.A)(kt,function(){var t=this,e=t._self._c;return e("NcListItem",{staticClass:"result-item",attrs:{id:t.elementId,name:t.title,bold:!1,active:t.active,href:t.resourceUrl,target:"_self"},scopedSlots:t._u([{key:"icon",fn:function(){return[t.isAppIcon?e("AppIcon",{staticClass:"result-item__app-icon",attrs:{icon:t.icon}}):e("div",{staticClass:"result-item__icon",class:{"result-item__icon--rounded":t.rounded,"result-item__icon--with-thumbnail":t.hasThumbnail,[t.icon]:!t.iconIsUrl&&!t.hasThumbnail},attrs:{"aria-hidden":"true"}},[t.hasThumbnail?e("img",{attrs:{src:t.thumbnailUrl},on:{error:t.thumbnailErrorHandler}}):t.iconIsUrl?e("img",{staticClass:"result-item__icon-img",attrs:{src:t.icon,alt:"","aria-hidden":"true"}}):t._e()])]},proxy:!0},{key:"subname",fn:function(){return[t._v("\n\t\t"+t._s(t.subline)+"\n\t")]},proxy:!0}])})},[],!1,null,"516c3939",null).exports;var Bt=n(44368),It=n(63814);const Ft=null===(Mt=(0,i.HW)())?(0,r.YK)().setApp("core").build():(0,r.YK)().setApp("core").setUid(Mt.uid).build();var Mt;const Et=(0,r.YK)().setApp("unified-search").detectUser().build();async function Tt(){try{const{data:t}=await Bt.Ay.get((0,It.KT)("search/providers"),{params:{from:window.location.pathname.replace("/index.php","")+window.location.search}});if("ocs"in t&&"data"in t.ocs&&Array.isArray(t.ocs.data)&&t.ocs.data.length>0)return t.ocs.data}catch(t){Ft.error(t)}return[]}function zt({type:t,query:e,cursor:n,since:i,until:a,limit:r,person:s,extraQueries:o={}}){const l=Bt.Ay.CancelToken.source();return{request:async()=>Bt.Ay.get((0,It.KT)("search/providers/{type}/search",{type:t}),{cancelToken:l.token,params:{term:e,cursor:n,since:i,until:a,limit:r,person:s,from:window.location.pathname.replace("/index.php","")+window.location.search,...o}}),cancel:l.cancel}}async function Rt({searchTerm:t}){const{data:{contacts:e}}=await Bt.Ay.post((0,It.Jv)("/contactsmenu/contacts"),{filter:t});if(!t){let t=(0,i.HW)();return t={id:t.uid,fullName:t.displayName,emailAddresses:[]},e.unshift(t),e}return e}function Ot(t,e,n){return(e=function(t){var e=function(t){if("object"!=typeof t||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var n=e.call(t,"string");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==typeof e?e:e+""}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}class qt{constructor(t){Ot(this,"onChange",void 0),Ot(this,"query",""),Ot(this,"params",{}),Ot(this,"searchStates",{}),Ot(this,"revealOrder",[]),Ot(this,"revealWindowOpen",!1),Ot(this,"searchGeneration",0),Ot(this,"revealTimer",null),Ot(this,"pendingCancels",[]),this.onChange=t}async search(t,e,n){this.cancelPendingRequests(),this.searchStates={},this.revealOrder=[],this.searchGeneration++;const i=this.searchGeneration;this.query=t,this.params=n||{},this.startRevealTimer(),await Promise.allSettled(e.map(t=>this.searchCategory(t,i,e)))}async loadMore(t){const e=this.searchGeneration,n={...this.searchStates[t]};if(!n.hasMore||"loaded"!==n.status)return;this.patchStates({[t]:{status:"loading",loadMoreFailed:!1}});const{request:i,cancel:a}=zt({type:t,query:this.query,cursor:n.cursor,limit:10,...this.params[t]});this.pendingCancels.push(a);try{const a=await i();if(this.searchGeneration!==e)return;const{entries:r,cursor:s,isPaginated:o}=a.data.ocs.data,l=0===r.length;this.patchStates({[t]:{entries:[...n.entries,...r],cursor:s,hasMore:!l&&this.hasMorePages(o,s),status:"loaded"}})}catch{if(this.searchGeneration!==e)return;this.patchStates({[t]:{status:"loaded",loadMoreFailed:!0}})}}getSnapshot(){return{...this.searchStates}}getRevealOrder(){return[...this.revealOrder]}dispose(){this.stopBackgroundWork()}reset(){this.stopBackgroundWork(),this.searchStates={},this.revealOrder=[],this.query="",this.params={},this.searchGeneration++,this.onChange?.(this.getSnapshot())}async searchCategory(t,e,n){this.patchStates({[t]:{status:"loading",entries:[],cursor:null,hasMore:!1,loadMoreFailed:!1}});const{request:i,cancel:a}=zt({type:t,query:this.query,cursor:null,limit:10,...this.params[t]});this.pendingCancels.push(a);try{const a=await i();if(this.searchGeneration!==e)return;const{entries:r,cursor:s,isPaginated:o}=a.data.ocs.data;this.patchStates({[t]:{status:this.shouldBlockCategory(t,n)?"blocked":"loaded",entries:r,cursor:s,hasMore:this.hasMorePages(o,s),loadMoreFailed:!1}})}catch{if(this.searchGeneration!==e)return;this.patchStates({[t]:{status:"failed",entries:[],cursor:null,hasMore:!1,loadMoreFailed:!1}})}this.reconcileCategoryStatuses(n)}reconcileCategoryStatuses(t){t.forEach(e=>{"blocked"===this.searchStates[e].status&&(this.shouldBlockCategory(e,t)||this.patchStates({[e]:{status:"loaded"}}))})}startRevealTimer(){this.stopRevealTimer(),this.revealWindowOpen=!0,this.revealTimer=setTimeout(()=>{this.revealWindowOpen=!1,this.unblockAllCategories(Object.keys(this.searchStates))},1e3)}stopRevealTimer(){this.revealWindowOpen=!1,this.revealTimer&&(clearTimeout(this.revealTimer),this.revealTimer=null)}cancelPendingRequests(){this.pendingCancels.forEach(t=>t()),this.pendingCancels=[]}stopBackgroundWork(){this.cancelPendingRequests(),this.stopRevealTimer()}unblockAllCategories(t){t.forEach(t=>{"blocked"===this.searchStates[t].status&&this.patchStates({[t]:{status:"loaded"}})})}hasMorePages(t,e){return t&&null!==e}shouldBlockCategory(t,e){return!(!this.revealWindowOpen||!this.searchStates[t])&&e.slice(0,e.indexOf(t)).some(t=>{const e=this.searchStates[t];return e&&["loading","blocked"].includes(e.status)})}syncRevealOrder(t,e){const n=this.revealOrder.indexOf(t),i=function(t){return t.entries.length>0&&("loaded"===t.status||"loading"===t.status)}(e);i&&-1===n?this.revealOrder.push(t):i||-1===n||this.revealOrder.splice(n,1)}patchStates(t){Object.keys(t).forEach(e=>{const n={...this.searchStates[e],...t[e]};this.searchStates[e]=n,this.syncRevealOrder(e,n)}),this.onChange?.(this.getSnapshot())}}const Nt=(0,s.nY)("search",{state:()=>({externalFilters:[]}),actions:{registerExternalFilter({id:t,appId:e,searchFrom:n,label:i,callback:a,icon:r}){this.externalFilters.push({id:t,appId:e,searchFrom:n,name:i,callback:a,icon:r,isPluginFilter:!0})}}}),Pt=(0,o.pM)({name:"UnifiedSearchModal",components:{IconAccountMultipleOutline:Y,IconArrowLeft:j,IconArrowRight:Q.A,IconCalendarBlankOutline:Z,IconClose:f.A,IconDotsHorizontal:J.A,IconMagnify:y,IconShapeOutline:tt,CustomDateRangeModal:lt,FilterChip:gt,NcActions:G.A,NcActionButton:U.A,NcAvatar:L.A,NcButton:u.A,NcEmptyContent:H.A,NcLoadingIcon:m.A,NcTextField:V.A,SearchableList:mt,SearchResult:Dt},props:{open:{type:Boolean,required:!0},query:{type:String,default:""},filtersRevealed:{type:Boolean,default:!1}},emits:["update:open","update:query","update:activeDescendant","update:loading"],setup(){const t=(0,d.ZDG)(),e=Nt(),n=(0,c.F)(),{searchStates:i,revealOrder:r,search:s,loadMore:l,reset:A}=function(){const t=(0,o.IJ)({}),e=(0,o.IJ)([]),n=new qt(i=>{t.value=i,e.value=n.getRevealOrder()});return(0,o.hi)(()=>{n.dispose()}),{searchStates:t,revealOrder:e,search:n.search.bind(n),loadMore:n.loadMore.bind(n),reset:n.reset.bind(n)}}();return{t:a.t,searchStates:i,revealOrder:r,search:s,loadMore:l,reset:A,currentLocation:t,externalFilters:e.externalFilters,isSmallMobile:n}},data:()=>({providers:[],providerActionMenuIsOpen:!1,dateActionMenuIsOpen:!1,dateFilter:{id:"date",type:"date",text:"",startFrom:null,endAt:null},personFilter:{id:"person",type:"person",name:""},filteredProviders:[],searchQuery:"",placessearchTerm:"",dateTimeFilter:null,filters:[],contacts:[],showDateRangeModal:!1,initialized:!1,pendingSearch:!1,searchExternalResources:!1,detailCategory:null,activeIndex:-1,minSearchLength:(0,N.C)("unified-search","min-search-length",1),focusTrap:null}),computed:{isEmptySearch(){return 0===this.searchQuery.length},providerFilterActive(){return this.filters.some(t=>"date"!==t.type&&"person"!==t.type)},dateFilterActive(){return this.filters.some(t=>"date"===t.type)},personFilterActive(){return this.filters.some(t=>"person"===t.type)},hasAnyActiveFilter(){return this.filters.length>0},showFilterRow(){return!this.detailCategory&&(this.isSmallMobile||this.filtersRevealed||this.searchQuery.length>0||this.hasAnyActiveFilter)},showHeader(){return this.isSmallMobile||this.showFilterRow},searching(){return Object.values(this.searchStates).some(t=>"loading"===t.status)},isBusy(){return!(!this.open||this.isEmptySearch||this.isSearchQueryTooShort)&&(this.searching||this.pendingSearch||!this.initialized)},hasNoResults(){return!this.isEmptySearch&&0===this.results.length},isSearchQueryTooShort(){return this.searchQuery.lengtht.isExternalProvider)},hasContentFilters(){return this.filters.some(t=>"date"===t.type||"person"===t.type)},results(){if(this.isEmptySearch||this.isSearchQueryTooShort)return[];const t=this.filters.filter(t=>"provider"!==t.type).map(t=>t.type);return this.revealOrder.map(e=>{const n=this.searchStates[e],i=this.providers.find(t=>t.id===e),a=this.providerIsCompatibleWithFilters(i,t);return{...i,results:n.entries,hasMore:n.hasMore,supportsActiveFilters:a}})},filteredResults(){const t=t=>{if("in-folder"!==t.id)return!1;const e=t.extraParams?.path;return!e||"/"===e||""===e};return this.hasContentFilters?this.results.filter(e=>!0===e.supportsActiveFilters&&!t(e)):this.results.filter(e=>!t(e))},filteredResultUrls(){const t=new Set;return this.filteredResults.forEach(e=>{e.results.forEach(e=>{e.resourceUrl&&t.add(e.resourceUrl)})}),t},unfilteredResults(){return this.hasContentFilters?this.results.filter(t=>!1===t.supportsActiveFilters).map(t=>({...t,results:t.results.filter(t=>!this.filteredResultUrls.has(t.resourceUrl))})).filter(t=>t.results.length>0):[]},detailGroup(){return this.detailCategory?this.results.find(t=>t.id===this.detailCategory)??null:null},renderedGroups(){return this.detailCategory?this.detailGroup?[this.toRenderedGroup(this.detailGroup,"detail",!1)]:[]:[...this.filteredResults.map(t=>this.toRenderedGroup(t,"filtered",!1)),...this.unfilteredResults.map((t,e)=>this.toRenderedGroup(t,"unfiltered",0===e))]},showConnectedServicesButton(){return this.hasExternalResources&&!this.detailCategory&&!this.isEmptySearch&&!this.isSearchQueryTooShort&&!this.isBusy},connectedServicesLabel(){return this.searchExternalResources?(0,a.t)("core","Less from connected services"):(0,a.t)("core","More from connected services")},navigableRows(){if(this.showEmptyContentInfo||this.isSmallMobile)return[];const t=[];return this.renderedGroups.forEach(e=>{e.results.forEach((n,i)=>{t.push({id:this.rowElementId(e.id,i,e.unfiltered),resourceUrl:n.resourceUrl})})}),t},activeRow(){return this.navigableRows[this.activeIndex]??null},activeDescendantId(){return this.activeRow?.id??null},liveMessage(){return!this.open||this.isEmptySearch||this.isSearchQueryTooShort?"":this.searching||!this.initialized?(0,a.t)("core","Searching …"):0===this.navigableRows.length?(0,a.t)("core","No matching results"):this.detailCategory&&this.detailGroup?(0,a.n)("core","Showing %n result from {name}","Showing %n results from {name}",this.navigableRows.length,{name:this.detailGroup.name}):(0,a.n)("core","%n result","%n results",this.navigableRows.length)},hasVisibleResults(){return this.filteredResults.length>0||this.unfilteredResults.length>0}},watch:{open(){this.open?(document.addEventListener("keydown",this.onEscapeKey),this.$nextTick(()=>this.activateFocusTrap()),this.initialized||Promise.all([Tt(),Rt({searchTerm:""})]).then(([t,e])=>{this.providers=this.groupProvidersByApp([...t,...this.externalFilters]),this.contacts=this.mapContacts(e),Et.debug("Search providers and contacts initialized:",{providers:this.providers,contacts:this.contacts}),this.initialized=!0,this.open&&this.searchQuery&&this.find(this.searchQuery)}).catch(t=>{Et.error(t),this.initialized=!0}),this.searchQuery&&this.find(this.searchQuery)):(this.reset(),this.pendingSearch=!1,this.debouncedFind.clear(),this.detailCategory=null,document.removeEventListener("keydown",this.onEscapeKey),this.deactivateFocusTrap())},query:{immediate:!0,handler(){this.searchQuery=this.query}},searchQuery:{handler(){this.detailCategory=null,this.$emit("update:query",this.searchQuery),this.open&&this.scheduleSearch()}},searchExternalResources(){this.detailCategory=null,this.searchQuery&&this.find(this.searchQuery)},filters:{deep:!0,handler(){this.detailCategory=null}},detailGroup(t){this.detailCategory&&!t&&this.closeDetailView()},detailCategory(){this.$nextTick(()=>{this.$refs.resultsContainer&&(this.$refs.resultsContainer.scrollTop=0)})},navigableRows(t,e){this.reconcileActiveIndex(t,e)},isBusy:{immediate:!0,handler(t){this.$emit("update:loading",t)}},activeDescendantId:{immediate:!0,handler(t){this.$emit("update:activeDescendant",t),this.$nextTick(()=>this.scrollActiveIntoView())}}},mounted(){(0,l.B1)("nextcloud:unified-search:add-filter",this.handlePluginFilter)},methods:{onUpdateOpen(t){t||(this.$emit("update:open",!1),this.$emit("update:query",""))},onScrimClick(){this.deactivateFocusTrap(!1),this.onUpdateOpen(!1)},onMobileSearchInput(t){this.searchQuery=String(t)},onEscapeKey(t){if("Escape"!==t.key)return;if(this.providerActionMenuIsOpen||this.dateActionMenuIsOpen||this.showDateRangeModal)return;const e=window._nc_focus_trap??[];this.focusTrap&&e.at(-1)!==this.focusTrap||(t.preventDefault(),this.onUpdateOpen(!1))},activateFocusTrap(){if(this.focusTrap||!this.open)return;const t=this.$refs.panel;if(!t)return;const e=this.$el?.closest?.(".unified-search-menu")??null,n=e?.querySelector(".unified-search-input")??null,i=n?[n,t]:[t];this.focusTrap=(0,o.IG)((0,P.K)(i,{initialFocus:()=>t.querySelector('input[type="search"]')??n?.querySelector("input")??t,escapeDeactivates:!1,allowOutsideClick:!0,trapStack:window._nc_focus_trap??=[]})),this.focusTrap.activate()},deactivateFocusTrap(t=!0){this.focusTrap?.deactivate({returnFocus:t}),this.focusTrap=null},scheduleSearch(){this.reset(),this.pendingSearch=!0,this.debouncedFind(this.searchQuery)},find(t){if(this.pendingSearch=!1,this.isSearchQueryTooShort)return;if(!this.initialized)return;const e=this.filteredProviders.length>0?this.filteredProviders:this.providers.filter(t=>this.searchExternalResources||!t.isExternalProvider),n={};e.forEach(t=>{n[t.id]=this.buildCategoryParams(t)}),this.search(t,e.map(t=>t.id),n)},buildCategoryParams(t){const e={extraQueries:t.extraParams};return t.searchFrom&&(e.type=t.searchFrom),this.filters.forEach(n=>{"provider"!==n.type&&this.providerIsCompatibleWithFilters(t,[n.type])&&("date"===n.type?(e.since=this.dateFilter.startFrom?.toISOString(),e.until=this.dateFilter.endAt?.toISOString()):"person"===n.type&&(e.person=this.personFilter.user))}),e},mapContacts:t=>t.map(t=>({displayName:t.fullName,isNoUser:!1,subname:t.emailAddresses[0]?t.emailAddresses[0]:"",icon:"",user:t.id,isUser:t.isUser})),filterContacts(t){Rt({searchTerm:t}).then(e=>{this.contacts=this.mapContacts(e),Et.debug(`Contacts filtered by ${t}`,{contacts:this.contacts})})},applyPersonFilter(t){const e=this.filters.findIndex(e=>e.id===t.id);-1===e?(this.personFilter.id=t.id,this.personFilter.user=t.user,this.personFilter.name=t.displayName,this.filters.push(this.personFilter)):(this.filters[e].id=t.id,this.filters[e].user=t.user,this.filters[e].name=t.displayName),this.scheduleSearch(),Et.debug("Person filter applied",{person:t})},loadMoreResultsForProvider(t){this.loadMore(t.id)},toRenderedGroup(t,e,n){const i="detail"===e;return{id:t.id,name:t.name,section:e,unfiltered:"unfiltered"===e,results:i?t.results:t.results.slice(0,3),overflow:!i&&t.results.length>3,hasMore:t.hasMore,inAppSearch:t.inAppSearch??!1,showPartialHeader:n}},headingId:t=>t.unfiltered?`unified-search-result-unfiltered-${t.id}`:`unified-search-result-${t.id}`,openDetailView(t){this.detailCategory=t.id,this.$nextTick(()=>this.focusSearchInput())},closeDetailView(){this.detailCategory=null,this.$nextTick(()=>this.focusSearchInput())},focusSearchInput(){const t=this.$refs.panel,e=t?.querySelector('input[type="search"]');if(e)return void e.focus();const n=this.$el?.closest?.(".unified-search-menu")??null,i=n?.querySelector(".unified-search-input input")??null;i?.focus()},toggleExternalResources(){this.searchExternalResources=!this.searchExternalResources,this.$nextTick(()=>this.focusSearchInput())},addProviderFilter(t){if(Et.debug("Applying provider filter",{providerFilter:t}),!t.id)return;if(t.isPluginFilter){const e=this.filteredProviders.some(e=>e.id===t.id);t.callback(!e)}this.providerActionMenuIsOpen=!1;const e=this.filteredProviders.findIndex(e=>e.id===t.id);e>-1&&(this.filteredProviders.splice(e,1),this.filters=this.syncProviderFilters(this.filters,this.filteredProviders)),this.filteredProviders.push({...t,type:t.type||"provider",isPluginFilter:t.isPluginFilter||!1}),this.filters=this.syncProviderFilters(this.filters,this.filteredProviders),Et.debug("Search filters (newly added)",{filters:this.filters}),this.scheduleSearch()},removeFilter(t){if("provider"===t.type){for(let e=0;e{const a=t.id;"provider"===t.type&&(e.some(t=>t.id===a)||n.splice(i,1))}),e.forEach(t=>{const e=t.id;"provider"===t.type&&(n.some(t=>t.id===e)||n.push(t))}),n},updateDateFilter(){const t=this.filters.findIndex(t=>"date"===t.id);-1!==t?this.filters[t]=this.dateFilter:this.filters.push(this.dateFilter),this.scheduleSearch()},applyQuickDateRange(t){this.dateActionMenuIsOpen=!1;const e=new Date;let n,i;switch(t){case"today":n=new Date(e.getFullYear(),e.getMonth(),e.getDate(),0,0,0,0),i=new Date(e.getFullYear(),e.getMonth(),e.getDate(),23,59,59,999),this.dateFilter.text=(0,a.t)("core","Today");break;case"7days":n=new Date(e.getFullYear(),e.getMonth(),e.getDate()-6,0,0,0,0),i=new Date(e.getFullYear(),e.getMonth(),e.getDate(),23,59,59,999),this.dateFilter.text=(0,a.t)("core","Last 7 days");break;case"30days":n=new Date(e.getFullYear(),e.getMonth(),e.getDate()-29,0,0,0,0),i=new Date(e.getFullYear(),e.getMonth(),e.getDate(),23,59,59,999),this.dateFilter.text=(0,a.t)("core","Last 30 days");break;case"thisyear":n=new Date(e.getFullYear(),0,1,0,0,0,0),i=new Date(e.getFullYear(),11,31,23,59,59,999),this.dateFilter.text=(0,a.t)("core","This year");break;case"lastyear":n=new Date(e.getFullYear()-1,0,1,0,0,0,0),i=new Date(e.getFullYear()-1,11,31,23,59,59,999),this.dateFilter.text=(0,a.t)("core","Last year");break;case"custom":return void(this.showDateRangeModal=!0);default:return}this.dateFilter.startFrom=n,this.dateFilter.endAt=i,this.updateDateFilter()},setCustomDateRange(t){Et.debug("Custom date range",{range:t}),this.dateFilter.startFrom=t.startFrom,this.dateFilter.endAt=t.endAt,this.dateFilter.text=(0,a.t)("core","Between {startDate} and {endDate}",{startDate:this.dateFilter.startFrom.toLocaleDateString([(0,a.lO)()]),endDate:this.dateFilter.endAt.toLocaleDateString([(0,a.lO)()])}),this.updateDateFilter()},handlePluginFilter(t){Et.debug("Handling plugin filter",{addFilterEvent:t});for(let e=0;ee.id===t.id);i>-1&&(n.extraParams=t.filterParams,this.filteredProviders[e]=n);break}}this.scheduleSearch()},groupProvidersByApp(t){const e={};t.forEach(t=>{const n=t.appId?t.appId:"general";e[n]||(e[n]=[]),e[n].push(t)});const n=[];return Object.values(e).forEach(t=>{n.push(...t)}),n},providerIsCompatibleWithFilters(t,e){const n=t.searchFrom?this.providers.find(e=>e.id===t.searchFrom)??t:t;return e.every(t=>{switch(t){case"date":return void 0!==n.filters?.since&&void 0!==n.filters?.until;case"person":return void 0!==n.filters?.person;default:return void 0!==n.filters?.[t]}})},async enableAllProviders(){this.providers.forEach(async(t,e)=>{this.providers[e].disabled=!1})},rowElementId:(t,e,n=!1)=>n?`unified-search-result-unfiltered-${t}-${e}`:`unified-search-result-${t}-${e}`,moveActive(t){const e=this.navigableRows.length;if(0===e)return;const n=this.activeIndex;switch(t){case"next":this.activeIndex=n<0?0:Math.min(n+1,e-1);break;case"prev":this.activeIndex=n<0?0:Math.max(n-1,0);break;case"first":this.activeIndex=0;break;case"last":this.activeIndex=e-1}},activateActive(){const t=this.activeRow??this.navigableRows[0];t?.resourceUrl&&this.openResourceUrl(t.resourceUrl)},openResourceUrl(t){window.location.assign(t)},scrollActiveIntoView(){if(!this.activeDescendantId)return;const t=document.getElementById(this.activeDescendantId);t?.scrollIntoView?.({block:"nearest"})},reconcileActiveIndex(t,e){if(0===t.length)return void(this.activeIndex=-1);const n=e?.[this.activeIndex]?.id;if(void 0!==n){const e=t.findIndex(t=>t.id===n);this.activeIndex=e>=0?e:0}else this.activeIndex=0}}}),Ut=Pt;var Gt=n(26409),Lt={};Lt.styleTagTransform=z(),Lt.setAttributes=F(),Lt.insert=B().bind(null,"head"),Lt.domAPI=S(),Lt.insertStyleElement=E(),k()(Gt.A,Lt),Gt.A&&Gt.A.locals&&Gt.A.locals;const Ht=(0,v.A)(Ut,function(){var t=this,e=t._self._c;return t._self._setupProxy,e("transition",{attrs:{name:"unified-search-modal",appear:""}},[t.open?e("div",{staticClass:"unified-search-modal-root"},[e("CustomDateRangeModal",{staticClass:"unified-search__date-range",attrs:{isOpen:t.showDateRangeModal},on:{"set:customDateRange":t.setCustomDateRange,"update:isOpen":function(e){t.showDateRangeModal=e}}}),t._v(" "),e("div",{ref:"panel",staticClass:"unified-search-modal__container",attrs:{id:"unified-search-results"}},[e("div",{staticClass:"hidden-visually",attrs:{role:"status","aria-live":"polite"}},[t._v("\n\t\t\t\t"+t._s(t.liveMessage)+"\n\t\t\t")]),t._v(" "),e("div",{directives:[{name:"show",rawName:"v-show",value:t.showHeader,expression:"showHeader"}],staticClass:"unified-search-modal__header",class:{"unified-search-modal__header--has-results":t.hasVisibleResults&&!t.detailCategory}},[t.isSmallMobile?e("div",{staticClass:"unified-search-modal__mobile-input"},[e("NcTextField",{attrs:{type:"search",label:t.t("core","Apps, files, messages, and more"),modelValue:t.searchQuery,showTrailingButton:t.searchQuery.length>0,trailingButtonLabel:t.t("core","Clear search")},on:{"update:modelValue":t.onMobileSearchInput,"trailing-button-click":function(e){t.searchQuery=""}}}),t._v(" "),t.isBusy?e("NcLoadingIcon",{attrs:{size:20}}):t._e(),t._v(" "),e("NcButton",{attrs:{variant:"tertiary","aria-label":t.t("core","Close search")},on:{click:function(e){return t.onUpdateOpen(!1)}},scopedSlots:t._u([{key:"icon",fn:function(){return[e("IconClose",{attrs:{size:20}})]},proxy:!0}],null,!1,2888946197)})],1):t._e(),t._v(" "),e("div",{directives:[{name:"show",rawName:"v-show",value:t.showFilterRow,expression:"showFilterRow"}],staticClass:"unified-search-modal__filters",attrs:{"data-cy-unified-search-filters":""}},[e("NcActions",{attrs:{wide:"",size:"small",open:t.providerActionMenuIsOpen,"menu-name":t.t("core","Type"),variant:t.providerFilterActive?"primary":"secondary","data-cy-unified-search-filter":"places"},on:{"update:open":function(e){t.providerActionMenuIsOpen=e}},scopedSlots:t._u([{key:"icon",fn:function(){return[e("IconShapeOutline",{attrs:{size:20}})]},proxy:!0}],null,!1,1084672236)},[t._v(" "),t._l(t.providers,function(n){return e("NcActionButton",{key:`${n.id}-${n.name.replace(/\s/g,"")}`,attrs:{disabled:n.disabled},on:{click:function(e){return t.addProviderFilter(n)}},scopedSlots:t._u([{key:"icon",fn:function(){return[e("img",{staticClass:"filter-button__icon",attrs:{src:n.icon,alt:""}})]},proxy:!0}],null,!0)},[t._v("\n\t\t\t\t\t\t\t"+t._s(n.name)+"\n\t\t\t\t\t\t")])})],2),t._v(" "),e("NcActions",{attrs:{size:"small",wide:"",open:t.dateActionMenuIsOpen,"menu-name":t.t("core","Date"),variant:t.dateFilterActive?"primary":"secondary","data-cy-unified-search-filter":"date"},on:{"update:open":function(e){t.dateActionMenuIsOpen=e}},scopedSlots:t._u([{key:"icon",fn:function(){return[e("IconCalendarBlankOutline",{attrs:{size:20}})]},proxy:!0}],null,!1,2513324059)},[t._v(" "),e("NcActionButton",{attrs:{closeAfterClick:!0},on:{click:function(e){return t.applyQuickDateRange("today")}}},[t._v("\n\t\t\t\t\t\t\t"+t._s(t.t("core","Today"))+"\n\t\t\t\t\t\t")]),t._v(" "),e("NcActionButton",{attrs:{closeAfterClick:!0},on:{click:function(e){return t.applyQuickDateRange("7days")}}},[t._v("\n\t\t\t\t\t\t\t"+t._s(t.t("core","Last 7 days"))+"\n\t\t\t\t\t\t")]),t._v(" "),e("NcActionButton",{attrs:{closeAfterClick:!0},on:{click:function(e){return t.applyQuickDateRange("30days")}}},[t._v("\n\t\t\t\t\t\t\t"+t._s(t.t("core","Last 30 days"))+"\n\t\t\t\t\t\t")]),t._v(" "),e("NcActionButton",{attrs:{closeAfterClick:!0},on:{click:function(e){return t.applyQuickDateRange("thisyear")}}},[t._v("\n\t\t\t\t\t\t\t"+t._s(t.t("core","This year"))+"\n\t\t\t\t\t\t")]),t._v(" "),e("NcActionButton",{attrs:{closeAfterClick:!0},on:{click:function(e){return t.applyQuickDateRange("lastyear")}}},[t._v("\n\t\t\t\t\t\t\t"+t._s(t.t("core","Last year"))+"\n\t\t\t\t\t\t")]),t._v(" "),e("NcActionButton",{attrs:{closeAfterClick:!0},on:{click:function(e){return t.applyQuickDateRange("custom")}}},[t._v("\n\t\t\t\t\t\t\t"+t._s(t.t("core","Custom date range"))+"\n\t\t\t\t\t\t")])],1),t._v(" "),e("SearchableList",{attrs:{labelText:t.t("core","Search people"),searchList:t.userContacts,emptyContentText:t.t("core","Not found"),"data-cy-unified-search-filter":"people"},on:{"search-term-change":t.debouncedFilterContacts,"item-selected":t.applyPersonFilter},scopedSlots:t._u([{key:"trigger",fn:function(){return[e("NcButton",{attrs:{wide:"",size:"small",variant:"secondary",pressed:t.personFilterActive},scopedSlots:t._u([{key:"icon",fn:function(){return[e("IconAccountMultipleOutline",{attrs:{size:20}})]},proxy:!0}],null,!1,2457664786)},[t._v("\n\t\t\t\t\t\t\t\t"+t._s(t.t("core","People"))+"\n\t\t\t\t\t\t\t")])]},proxy:!0}],null,!1,662085814)})],1),t._v(" "),e("div",{directives:[{name:"show",rawName:"v-show",value:!t.detailCategory&&t.hasAnyActiveFilter,expression:"!detailCategory && hasAnyActiveFilter"}],staticClass:"unified-search-modal__filters-applied"},t._l(t.filters,function(n){return e("FilterChip",{key:n.id,attrs:{text:n.name??n.text,pretext:""},on:{delete:function(e){return t.removeFilter(n)}},scopedSlots:t._u([{key:"icon",fn:function(){return["person"===n.type?e("NcAvatar",{attrs:{user:n.user,size:24,disableMenu:"",hideStatus:"",hideFavorite:!1}}):"date"===n.type?e("IconCalendarBlankOutline"):e("img",{attrs:{src:n.icon,alt:""}})]},proxy:!0}],null,!0)})}),1)]),t._v(" "),t.showEmptyContentInfo?e("div",{staticClass:"unified-search-modal__no-content"},[e("NcEmptyContent",{attrs:{name:t.emptyContentMessage},scopedSlots:t._u([{key:"icon",fn:function(){return[e("IconMagnify",{attrs:{size:64}})]},proxy:!0}],null,!1,125778896)}),t._v(" "),t.showConnectedServicesButton?e("div",{staticClass:"unified-search-modal__connected-services"},[e("NcButton",{attrs:{variant:"secondary",wide:""},on:{click:t.toggleExternalResources}},[t._v("\n\t\t\t\t\t\t"+t._s(t.connectedServicesLabel)+"\n\t\t\t\t\t")])],1):t._e()],1):e("div",{ref:"resultsContainer",staticClass:"unified-search-modal__results"},[e("h3",{staticClass:"hidden-visually"},[t._v("\n\t\t\t\t\t"+t._s(t.t("core","Results"))+"\n\t\t\t\t")]),t._v(" "),t.detailCategory&&t.detailGroup?e("div",{staticClass:"unified-search-modal__detail-header"},[e("NcButton",{staticClass:"unified-search-modal__detail-back",attrs:{variant:"tertiary","aria-label":t.t("core","Back to all results")},on:{click:t.closeDetailView},scopedSlots:t._u([{key:"icon",fn:function(){return[e("IconArrowLeft",{staticClass:"unified-search-modal__rtl-icon",attrs:{size:20}})]},proxy:!0}],null,!1,1818940180)},[t._v("\n\t\t\t\t\t\t"+t._s(t.t("core","Back"))+"\n\t\t\t\t\t")]),t._v(" "),e("h4",{staticClass:"unified-search-modal__detail-title",attrs:{id:t.headingId(t.detailGroup)}},[t._v("\n\t\t\t\t\t\t"+t._s(t.detailGroup.name)+"\n\t\t\t\t\t")])],1):t._e(),t._v(" "),t._l(t.renderedGroups,function(n){return e("div",{key:n.id,staticClass:"result-group"},[n.showPartialHeader?e("div",{staticClass:"unified-search-modal__unfiltered-header"},[e("span",{staticClass:"unified-search-modal__unfiltered-label"},[t._v(t._s(t.t("core","Partial matches")))])]):t._e(),t._v(" "),e("div",{staticClass:"result",class:{"result--unfiltered":n.unfiltered}},[n.overflow?e("NcButton",{staticClass:"result-title--more",attrs:{id:t.headingId(n),alignment:"start-reverse",variant:"tertiary-no-background"},on:{click:function(e){return t.openDetailView(n)}},scopedSlots:t._u([{key:"icon",fn:function(){return[e("IconArrowRight",{staticClass:"unified-search-modal__rtl-icon",attrs:{size:20}})]},proxy:!0}],null,!0)},[t._v("\n\t\t\t\t\t\t\t"+t._s(t.t("core","More from {name}",{name:n.name}))+"\n\t\t\t\t\t\t\t")]):"detail"!==n.section?e("h4",{staticClass:"result-title",attrs:{id:t.headingId(n)}},[t._v("\n\t\t\t\t\t\t\t"+t._s(n.name)+"\n\t\t\t\t\t\t")]):t._e(),t._v(" "),e("ul",{staticClass:"result-items",attrs:{role:t.isSmallMobile?void 0:"listbox","aria-labelledby":t.headingId(n)}},t._l(n.results,function(i,a){return e("SearchResult",t._b({key:a,attrs:{role:t.isSmallMobile?void 0:"option",elementId:t.rowElementId(n.id,a,n.unfiltered),active:t.activeDescendantId===t.rowElementId(n.id,a,n.unfiltered)}},"SearchResult",i,!1))}),1),t._v(" "),e("div",{staticClass:"result-footer"},["detail"===n.section&&n.hasMore?e("NcButton",{attrs:{variant:"tertiary-no-background"},on:{click:function(e){return t.loadMoreResultsForProvider(n)}},scopedSlots:t._u([{key:"icon",fn:function(){return[e("IconDotsHorizontal",{attrs:{size:20}})]},proxy:!0}],null,!0)},[t._v("\n\t\t\t\t\t\t\t\t"+t._s(t.t("core","Load more results"))+"\n\t\t\t\t\t\t\t\t")]):t._e(),t._v(" "),n.inAppSearch?e("NcButton",{attrs:{alignment:"end-reverse",variant:"tertiary-no-background"},scopedSlots:t._u([{key:"icon",fn:function(){return[e("IconArrowRight",{attrs:{size:20}})]},proxy:!0}],null,!0)},[t._v("\n\t\t\t\t\t\t\t\t"+t._s(t.t("core","Search in"))+" "+t._s(n.name)+"\n\t\t\t\t\t\t\t\t")]):t._e()],1)],1)])}),t._v(" "),t.showConnectedServicesButton?e("div",{staticClass:"unified-search-modal__connected-services"},[e("NcButton",{attrs:{variant:"secondary",wide:""},on:{click:t.toggleExternalResources}},[t._v("\n\t\t\t\t\t\t"+t._s(t.connectedServicesLabel)+"\n\t\t\t\t\t")])],1):t._e()],2)]),t._v(" "),e("div",{staticClass:"unified-search-modal__scrim modal-mask",on:{click:t.onScrimClick}})],1):t._e()])},[],!1,null,"1428aaec",null).exports,Vt=(0,o.pM)({name:"UnifiedSearch",components:{UnifiedSearchModal:Ht,UnifiedSearchInput:q},setup:()=>({currentLocation:(0,d.ZDG)(),isSmallMobile:(0,c.F)(),t:a.t}),data:()=>({queryText:"",showUnifiedSearch:!1,activeDescendantId:"",searching:!1,filtersRevealed:!1}),computed:{debouncedQueryUpdate(){return(0,A.A)(this.emitUpdatedQuery,250)},appHandlesSearchShortcut(){return["/settings/users","/settings/apps","/apps/deck"].some(t=>this.currentLocation.pathname?.includes?.(t))}},watch:{queryText(){this.debouncedQueryUpdate(),this.isSmallMobile||(this.showUnifiedSearch=this.queryText.length>0)},showUnifiedSearch(t){t||(this.filtersRevealed=!1)}},mounted(){!1===window.OCP.Accessibility.disableKeyboardShortcuts()&&window.addEventListener("keydown",this.onKeyDown),(0,l.B1)("nextcloud:unified-search:reset",()=>{this.queryText=""}),(0,l.B1)("nextcloud:unified-search:reset",()=>{(0,l.Ic)("nextcloud:unified-search.reset",{query:""})}),(0,l.B1)("nextcloud:unified-search:search",({query:t})=>{(0,l.Ic)("nextcloud:unified-search.search",{query:t})}),Ft.debug("Unified search initialized!")},beforeDestroy(){window.removeEventListener("keydown",this.onKeyDown)},methods:{onKeyDown(t){const e=t.key.toLowerCase();if(t.ctrlKey&&"f"===e){if(this.appHandlesSearchShortcut)return;if(this.isSearchEngaged())return;t.preventDefault(),this.focusSearch()}else if((t.metaKey||t.ctrlKey)&&"k"===e){if(this.appHandlesSearchShortcut)return;t.preventDefault(),this.focusSearch()}},focusSearch(){this.isSmallMobile?this.openModal():this.focusInput()},focusInput(){const t=this.$refs.searchInput;t?.focus?.()},isSearchEngaged(){if(this.showUnifiedSearch)return!0;const t=this.$refs.searchInput?.$el;return Boolean(t&&t.contains(document.activeElement))},onNavigate(t){const e=this.$refs.searchModal;e?.moveActive?.(t)},onActivate(){const t=this.$refs.searchModal;t?.activateActive?.()},openModal(){this.showUnifiedSearch=!0},onOpenFilters(){this.showUnifiedSearch=!0,this.filtersRevealed=!0},onClose(){this.showUnifiedSearch=!1},emitUpdatedQuery(){""===this.queryText?(0,l.Ic)("nextcloud:unified-search:reset"):(0,l.Ic)("nextcloud:unified-search:search",{query:this.queryText})}}});var $t=n(44601),Yt={};Yt.styleTagTransform=z(),Yt.setAttributes=F(),Yt.insert=B().bind(null,"head"),Yt.domAPI=S(),Yt.insertStyleElement=E(),k()($t.A,Yt),$t.A&&$t.A.locals&&$t.A.locals;const Kt=(0,v.A)(Vt,function(){var t=this,e=t._self._c;return t._self._setupProxy,e("div",{staticClass:"unified-search-menu"},[e("UnifiedSearchInput",{ref:"searchInput",attrs:{query:t.queryText,expanded:t.showUnifiedSearch,activeDescendantId:t.activeDescendantId,loading:t.searching,filtersRevealed:t.filtersRevealed},on:{click:t.openModal,"open-filters":t.onOpenFilters,close:t.onClose,"update:query":function(e){t.queryText=e},navigate:t.onNavigate,activate:t.onActivate}}),t._v(" "),e("UnifiedSearchModal",{ref:"searchModal",attrs:{query:t.queryText,open:t.showUnifiedSearch,filtersRevealed:t.filtersRevealed},on:{"update:query":function(e){t.queryText=e},"update:open":function(e){t.showUnifiedSearch=e},"update:activeDescendant":function(e){t.activeDescendantId=e||""},"update:loading":function(e){t.searching=e}}})],1)},[],!1,null,"5c04cb7c",null).exports;n.nc=(0,i.aV)();const jt=(0,r.YK)().setApp("unified-search").detectUser().build();o.Ay.mixin({data:()=>({logger:jt}),methods:{t:a.Tl,n:a.zw}}),window.OCA=window.OCA||{},window.OCA.UnifiedSearch={registerFilterAction:({id:t,appId:e,searchFrom:n,label:i,callback:a,icon:r})=>{Nt().registerExternalFilter({id:t,appId:e,searchFrom:n,label:i,callback:a,icon:r})}},o.Ay.use(s.R2);const Qt=(0,s.Ey)();new o.Ay({el:"#unified-search",pinia:Qt,name:"UnifiedSearchRoot",render:t=>t(Kt)})},34230(t,e,n){var i=n(71354),a=n.n(i),r=n(76314),s=n.n(r)()(a());s.push([t.id,".app-icon[data-v-67b5106e]{--app-icon-circle-size: calc(var(--default-grid-baseline) * 12);--app-icon-icon-size: calc(var(--app-icon-circle-size) * 7 / 12);--app-icon-bevel: inset 0 -1px 0 0 color-mix(in srgb, var(--color-primary-element-light), 10% var(--color-primary-element)), inset 0 -4px 6px -4px color-mix(in srgb, var(--color-primary-element-light), 16% var(--color-primary-element));box-sizing:border-box;position:relative;display:flex;align-items:center;justify-content:center;width:var(--app-icon-circle-size);height:var(--app-icon-circle-size);border-radius:50%;transform:scale(var(--app-icon-scale, 1));transition:transform var(--animation-quick) ease-out;background-color:var(--color-primary-element-light);background-image:linear-gradient(to bottom, color-mix(in srgb, var(--color-primary-element-light), 15% var(--color-main-background)) 0%, var(--color-primary-element-light) 100%);box-shadow:var(--app-icon-bevel)}@media(prefers-color-scheme: dark){.app-icon[data-v-67b5106e]{--app-icon-bevel: none}}@media(prefers-reduced-motion: reduce){.app-icon[data-v-67b5106e]{transition:none}}.app-icon__img[data-v-67b5106e]{width:var(--app-icon-icon-size);height:var(--app-icon-icon-size);background-color:var(--color-primary-element);background-image:linear-gradient(to bottom, color-mix(in srgb, var(--color-primary-element), 28% var(--color-primary-element-light)) 0%, var(--color-primary-element) 100%);mask:var(--app-icon-url) center/contain no-repeat}@media(forced-colors: active){.app-icon__img[data-v-67b5106e]{background-color:CanvasText;background-image:none}}.app-icon--outlined[data-v-67b5106e]{background:rgba(0,0,0,0);background-image:none;box-shadow:inset 0 0 0 2px var(--color-border)}.app-icon--outlined .app-icon__img[data-v-67b5106e]{background-color:var(--color-text-maxcontrast);background-image:none}[data-themes*=dark] .app-icon{--app-icon-bevel: none}[data-themes*=light] .app-icon{--app-icon-bevel: inset 0 -1px 0 0 color-mix(in srgb, var(--color-primary-element-light), 10% var(--color-primary-element)), inset 0 -4px 6px -4px color-mix(in srgb, var(--color-primary-element-light), 16% var(--color-primary-element))}","",{version:3,sources:["webpack://./core/src/components/AppIcon.vue"],names:[],mappings:"AAKA,2BACC,+DAAA,CAEA,gEAAA,CACA,2OAAA,CACA,qBAAA,CACA,iBAAA,CACA,YAAA,CACA,kBAAA,CACA,sBAAA,CACA,iCAAA,CACA,kCAAA,CACA,iBAAA,CACA,yCAAA,CACA,oDAAA,CACA,mDAAA,CACA,iLAAA,CAKA,gCAAA,CAEA,mCAvBD,2BAwBE,sBAAA,CAAA,CAGD,uCA3BD,2BA4BE,eAAA,CAAA,CAGD,gCACC,+BAAA,CACA,gCAAA,CAGA,6CAAA,CACA,2KAAA,CAKA,iDAAA,CAID,8BACC,gCACC,2BAAA,CACA,qBAAA,CAAA,CAMF,qCACC,wBAAA,CACA,qBAAA,CACA,8CAAA,CAGD,oDACC,8CAAA,CACA,qBAAA,CAKF,8BACC,sBAAA,CAGD,+BACC,2OAAA",sourcesContent:['\n$bevel:\n\tinset 0 -1px 0 0 color-mix(in srgb, var(--color-primary-element-light), 10% var(--color-primary-element)),\n\tinset 0 -4px 6px -4px color-mix(in srgb, var(--color-primary-element-light), 16% var(--color-primary-element));\n\n.app-icon {\n\t--app-icon-circle-size: calc(var(--default-grid-baseline) * 12);\n\t// 28px on a 48px circle, so it follows when consumers resize the circle.\n\t--app-icon-icon-size: calc(var(--app-icon-circle-size) * 7 / 12);\n\t--app-icon-bevel: #{$bevel};\n\tbox-sizing: border-box;\n\tposition: relative;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\twidth: var(--app-icon-circle-size);\n\theight: var(--app-icon-circle-size);\n\tborder-radius: 50%;\n\ttransform: scale(var(--app-icon-scale, 1));\n\ttransition: transform var(--animation-quick) ease-out;\n\tbackground-color: var(--color-primary-element-light);\n\tbackground-image: linear-gradient(\n\t\tto bottom,\n\t\tcolor-mix(in srgb, var(--color-primary-element-light), 15% var(--color-main-background)) 0%,\n\t\tvar(--color-primary-element-light) 100%\n\t);\n\tbox-shadow: var(--app-icon-bevel);\n\n\t@media (prefers-color-scheme: dark) {\n\t\t--app-icon-bevel: none;\n\t}\n\n\t@media (prefers-reduced-motion: reduce) {\n\t\ttransition: none;\n\t}\n\n\t&__img {\n\t\twidth: var(--app-icon-icon-size);\n\t\theight: var(--app-icon-icon-size);\n\t\t// Masked rather than shown: app icons ship a hardcoded fill, so\n\t\t// currentColor never applies and a filter could only flip black and white.\n\t\tbackground-color: var(--color-primary-element);\n\t\tbackground-image: linear-gradient(\n\t\t\tto bottom,\n\t\t\tcolor-mix(in srgb, var(--color-primary-element), 28% var(--color-primary-element-light)) 0%,\n\t\t\tvar(--color-primary-element) 100%\n\t\t);\n\t\tmask: var(--app-icon-url) center / contain no-repeat;\n\t}\n\n\t// Masked backgrounds are not force-adjusted the way
is.\n\t@media (forced-colors: active) {\n\t\t&__img {\n\t\t\tbackground-color: CanvasText;\n\t\t\tbackground-image: none;\n\t\t}\n\t}\n\n\t// Utility entries ("More apps", "App store") stay subdued: a plain circle\n\t// with the icon in the same muted color as the label.\n\t&--outlined {\n\t\tbackground: transparent;\n\t\tbackground-image: none;\n\t\tbox-shadow: inset 0 0 0 2px var(--color-border);\n\t}\n\n\t&--outlined &__img {\n\t\tbackground-color: var(--color-text-maxcontrast);\n\t\tbackground-image: none;\n\t}\n}\n\n// An explicit theme choice must beat the media query above, which only sees the OS.\n:global([data-themes*=dark] .app-icon) {\n\t--app-icon-bevel: none;\n}\n\n:global([data-themes*=light] .app-icon) {\n\t--app-icon-bevel: #{$bevel};\n}\n'],sourceRoot:""}]);const o=s;n.d(e,["A",0,o])},12667(t,e,n){var i=n(71354),a=n.n(i),r=n(76314),s=n.n(r)()(a());s.push([t.id,".unified-search-custom-date-modal[data-v-2907014b]{padding:10px 20px 10px 20px}.unified-search-custom-date-modal h1[data-v-2907014b]{font-size:16px;font-weight:bolder;line-height:2em}.unified-search-custom-date-modal__pickers[data-v-2907014b]{display:flex;flex-direction:column}.unified-search-custom-date-modal__footer[data-v-2907014b]{display:flex;justify-content:end}","",{version:3,sources:["webpack://./core/src/components/UnifiedSearch/CustomDateRangeModal.vue"],names:[],mappings:"AACA,mDACC,2BAAA,CAEA,sDACC,cAAA,CACA,kBAAA,CACA,eAAA,CAGD,4DACC,YAAA,CACA,qBAAA,CAGD,2DACC,YAAA,CACA,mBAAA",sourcesContent:["\n.unified-search-custom-date-modal {\n\tpadding: 10px 20px 10px 20px;\n\n\th1 {\n\t\tfont-size: 16px;\n\t\tfont-weight: bolder;\n\t\tline-height: 2em;\n\t}\n\n\t&__pickers {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t}\n\n\t&__footer {\n\t\tdisplay: flex;\n\t\tjustify-content: end;\n\t}\n\n}\n"],sourceRoot:""}]);const o=s;n.d(e,["A",0,o])},17830(t,e,n){var i=n(71354),a=n.n(i),r=n(76314),s=n.n(r)()(a());s.push([t.id,".chip[data-v-5a4f6249]{display:flex;align-items:center;padding:2px 4px;border:1px solid var(--color-primary-element-light);border-radius:20px;background-color:var(--color-primary-element-light);margin:2px}.chip .icon[data-v-5a4f6249]{display:flex;align-items:center;padding-inline-end:5px}.chip .icon img[data-v-5a4f6249]{width:20px;padding:2px;border-radius:20px;filter:var(--background-invert-if-bright)}.chip .text[data-v-5a4f6249]{margin:0 2px}.chip .close-button[data-v-5a4f6249]{display:flex;align-items:center;width:auto;min-width:0;min-height:0;margin:0;padding:0;border:none;background:rgba(0,0,0,0);color:inherit;cursor:pointer;border-radius:var(--border-radius-element, 8px)}.chip .close-button[data-v-5a4f6249]:hover{filter:invert(20%)}.chip .close-button[data-v-5a4f6249]:focus-visible{outline:2px solid var(--color-main-text);outline-offset:1px}","",{version:3,sources:["webpack://./core/src/components/UnifiedSearch/SearchFilterChip.vue"],names:[],mappings:"AACA,uBACI,YAAA,CACA,kBAAA,CACA,eAAA,CACA,mDAAA,CACA,kBAAA,CACA,mDAAA,CACA,UAAA,CAEA,6BACI,YAAA,CACA,kBAAA,CACA,sBAAA,CAEA,iCACI,UAAA,CACA,WAAA,CACA,kBAAA,CACA,yCAAA,CAIR,6BACI,YAAA,CAGJ,qCACI,YAAA,CACA,kBAAA,CACA,UAAA,CACA,WAAA,CACA,YAAA,CACA,QAAA,CACA,SAAA,CACA,WAAA,CACA,wBAAA,CACA,aAAA,CACA,cAAA,CACA,+CAAA,CAEA,2CACI,kBAAA,CAGJ,mDACI,wCAAA,CACA,kBAAA",sourcesContent:["\n.chip {\n display: flex;\n align-items: center;\n padding: 2px 4px;\n border: 1px solid var(--color-primary-element-light);\n border-radius: 20px;\n background-color: var(--color-primary-element-light);\n margin: 2px;\n\n .icon {\n display: flex;\n align-items: center;\n padding-inline-end: 5px;\n\n img {\n width: 20px;\n padding: 2px;\n border-radius: 20px;\n filter: var(--background-invert-if-bright);\n }\n }\n\n .text {\n margin: 0 2px;\n }\n\n .close-button {\n display: flex;\n align-items: center;\n width: auto;\n min-width: 0;\n min-height: 0;\n margin: 0;\n padding: 0;\n border: none;\n background: transparent;\n color: inherit;\n cursor: pointer;\n border-radius: var(--border-radius-element, 8px);\n\n &:hover {\n filter: invert(20%);\n }\n\n &:focus-visible {\n outline: 2px solid var(--color-main-text);\n outline-offset: 1px;\n }\n }\n}\n"],sourceRoot:""}]);const o=s;n.d(e,["A",0,o])},65719(t,e,n){var i=n(71354),a=n.n(i),r=n(76314),s=n.n(r)()(a());s.push([t.id,'.result-item[data-v-516c3939]{padding-inline:0}.result-item[data-v-516c3939] a{border:2px solid rgba(0,0,0,0);border-radius:var(--border-radius-large) !important}.result-item[data-v-516c3939] a:active,.result-item[data-v-516c3939] a:hover{background-color:var(--color-background-hover)}.result-item[data-v-516c3939] a:focus-visible{background-color:var(--color-background-hover);border-color:var(--color-border-maxcontrast)}.result-item[data-v-516c3939] a *{cursor:pointer}.result-item.list-item__wrapper--active[data-v-516c3939] .list-item{background-color:var(--color-background-hover)}.result-item.list-item__wrapper--active[data-v-516c3939] .list-item::before{content:"";position:absolute;inset-block:calc(var(--default-grid-baseline)*2);inset-inline-start:0;width:3px;border-radius:var(--border-radius-rounded);background-color:var(--color-primary-element);animation:result-pill-in-516c3939 var(--animation-quick) ease-out}.result-item.list-item__wrapper--active[data-v-516c3939] .list-item:hover{background-color:var(--color-background-hover)}.result-item.list-item__wrapper--active[data-v-516c3939] .list-item__anchor .list-item-content__name,.result-item.list-item__wrapper--active[data-v-516c3939] .list-item__anchor .list-item-content__subname,.result-item.list-item__wrapper--active[data-v-516c3939] .list-item__anchor .list-item-content__details,.result-item.list-item__wrapper--active[data-v-516c3939] .list-item__anchor .list-item-details__details{color:var(--color-main-text) !important}.result-item__icon[data-v-516c3939]{display:flex;align-items:center;justify-content:center;overflow:hidden;width:var(--default-clickable-area);height:var(--default-clickable-area);border-radius:var(--border-radius);margin-inline-start:var(--default-grid-baseline)}.result-item__icon--rounded[data-v-516c3939]{border-radius:calc(var(--default-clickable-area)/2)}.result-item__icon--with-thumbnail[data-v-516c3939]:not(.result-item__icon--rounded){border:1px solid var(--color-border);max-height:calc(var(--default-clickable-area) - 2px);max-width:calc(var(--default-clickable-area) - 2px)}.result-item__icon--with-thumbnail img[data-v-516c3939]{width:100%;height:100%;object-fit:cover;object-position:center}.result-item__icon-img[data-v-516c3939]{width:20px;height:20px;object-fit:contain;filter:var(--background-invert-if-dark)}.result-item__icon-img[src*="/filetypes/"][data-v-516c3939]{width:32px;height:32px;filter:none}.result-item__app-icon[data-v-516c3939]{--app-icon-circle-size: var(--default-clickable-area);margin-inline-start:var(--default-grid-baseline)}@keyframes result-pill-in-516c3939{from{transform:scaleY(0);opacity:0}to{transform:scaleY(1);opacity:1}}',"",{version:3,sources:["webpack://./core/src/components/UnifiedSearch/SearchResult.vue"],names:[],mappings:"AACA,8BACC,gBAAA,CAEA,gCACC,8BAAA,CACA,mDAAA,CAGA,6EAEC,8CAAA,CAKD,8CACC,8CAAA,CACA,4CAAA,CAGD,kCACC,cAAA,CAOD,oEACC,8CAAA,CAMA,4EACC,UAAA,CACA,iBAAA,CACA,gDAAA,CACA,oBAAA,CACA,SAAA,CACA,0CAAA,CACA,6CAAA,CAEA,iEAAA,CAGD,0EACC,8CAAA,CAMF,6ZAIC,uCAAA,CAIF,oCACC,YAAA,CACA,kBAAA,CACA,sBAAA,CACA,eAAA,CACA,mCAAA,CACA,oCAAA,CACA,kCAAA,CACA,gDAAA,CAEA,6CACC,mDAAA,CAGD,qFACC,oCAAA,CAEA,oDAAA,CACA,mDAAA,CAID,wDAEC,UAAA,CACA,WAAA,CAEA,gBAAA,CACA,sBAAA,CAID,wCACC,UAAA,CACA,WAAA,CACA,kBAAA,CAEA,uCAAA,CAKA,4DACC,UAAA,CACA,WAAA,CACA,WAAA,CAMH,wCACC,qDAAA,CACA,gDAAA,CAKF,mCACC,KACC,mBAAA,CACA,SAAA,CAGD,GACC,mBAAA,CACA,SAAA,CAAA",sourcesContent:["\n.result-item {\n\tpadding-inline: 0;\n\n\t:deep(a) {\n\t\tborder: 2px solid transparent;\n\t\tborder-radius: var(--border-radius-large) !important;\n\n\t\t// Hover/press: neutral gray fill only, no border.\n\t\t&:active,\n\t\t&:hover {\n\t\t\tbackground-color: var(--color-background-hover);\n\t\t}\n\n\t\t// Plain Tab into a result keeps a visible focus ring (a11y). Normally the combobox\n\t\t// keeps focus in the input and drives selection via `active` below.\n\t\t&:focus-visible {\n\t\t\tbackground-color: var(--color-background-hover);\n\t\t\tborder-color: var(--color-border-maxcontrast);\n\t\t}\n\n\t\t* {\n\t\t\tcursor: pointer;\n\t\t}\n\t}\n\n\t// NcListItem's `active` state paints a primary fill, white text and a blue stripe.\n\t// We want a neutral look: the gray hover fill plus a maxcontrast border, readable text.\n\t&.list-item__wrapper--active {\n\t\t:deep(.list-item) {\n\t\t\tbackground-color: var(--color-background-hover);\n\n\t\t\t// Keyboard selection marker: the pill the left navigation paints on its active\n\t\t\t// entry. It has to hang off .list-item rather than the wrapper, because\n\t\t\t// .list-item is itself positioned and paints the opaque row background, so it\n\t\t\t// would cover a pseudo-element belonging to its parent.\n\t\t\t&::before {\n\t\t\t\tcontent: '';\n\t\t\t\tposition: absolute;\n\t\t\t\tinset-block: calc(var(--default-grid-baseline) * 2);\n\t\t\t\tinset-inline-start: 0;\n\t\t\t\twidth: 3px;\n\t\t\t\tborder-radius: var(--border-radius-rounded);\n\t\t\t\tbackground-color: var(--color-primary-element);\n\t\t\t\t// Zeroed by the reduced-motion theme, so no separate media query is needed.\n\t\t\t\tanimation: result-pill-in var(--animation-quick) ease-out;\n\t\t\t}\n\n\t\t\t&:hover {\n\t\t\t\tbackground-color: var(--color-background-hover);\n\t\t\t}\n\t\t}\n\n\t\t// Undo the forced active text colour. Chain through the anchor to outrank\n\t\t// NcListItem's own !important rule.\n\t\t:deep(.list-item__anchor .list-item-content__name),\n\t\t:deep(.list-item__anchor .list-item-content__subname),\n\t\t:deep(.list-item__anchor .list-item-content__details),\n\t\t:deep(.list-item__anchor .list-item-details__details) {\n\t\t\tcolor: var(--color-main-text) !important;\n\t\t}\n\t}\n\n\t&__icon {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\toverflow: hidden;\n\t\twidth: var(--default-clickable-area);\n\t\theight: var(--default-clickable-area);\n\t\tborder-radius: var(--border-radius);\n\t\tmargin-inline-start: var(--default-grid-baseline);\n\n\t\t&--rounded {\n\t\t\tborder-radius: calc(var(--default-clickable-area) / 2);\n\t\t}\n\n\t\t&--with-thumbnail:not(#{&}--rounded) {\n\t\t\tborder: 1px solid var(--color-border);\n\t\t\t// compensate for border\n\t\t\tmax-height: calc(var(--default-clickable-area) - 2px);\n\t\t\tmax-width: calc(var(--default-clickable-area) - 2px);\n\t\t}\n\n\t\t// A full-bleed thumbnail (preview or avatar) fills the box.\n\t\t&--with-thumbnail img {\n\t\t\t// Make sure to keep ratio\n\t\t\twidth: 100%;\n\t\t\theight: 100%;\n\n\t\t\tobject-fit: cover;\n\t\t\tobject-position: center;\n\t\t}\n\n\t\t// A small monochrome glyph (e.g. a settings section), not a thumbnail.\n\t\t&-img {\n\t\t\twidth: 20px;\n\t\t\theight: 20px;\n\t\t\tobject-fit: contain;\n\t\t\t// Dark monochrome icons invert to light in dark themes.\n\t\t\tfilter: var(--background-invert-if-dark);\n\n\t\t\t// Mime icons carry their own colours (a red PDF, a green spreadsheet), so the\n\t\t\t// dark-theme invert would recolour them: red comes out cyan. Sized to match the\n\t\t\t// 32px these icons had while they were painted as a background-image.\n\t\t\t&[src*='/filetypes/'] {\n\t\t\t\twidth: 32px;\n\t\t\t\theight: 32px;\n\t\t\t\tfilter: none;\n\t\t\t}\n\t\t}\n\t}\n\n\t// App results reuse the app-menu tile (AppIcon); size its circle to the icon column.\n\t&__app-icon {\n\t\t--app-icon-circle-size: var(--default-clickable-area);\n\t\tmargin-inline-start: var(--default-grid-baseline);\n\t}\n}\n\n// Grow the pill out of the row's centre line, matching the navigation entry.\n@keyframes result-pill-in {\n\tfrom {\n\t\ttransform: scaleY(0);\n\t\topacity: 0;\n\t}\n\n\tto {\n\t\ttransform: scaleY(1);\n\t\topacity: 1;\n\t}\n}\n"],sourceRoot:""}]);const o=s;n.d(e,["A",0,o])},60645(t,e,n){var i=n(71354),a=n.n(i),r=n(76314),s=n.n(r)()(a());s.push([t.id,".searchable-list__wrapper[data-v-66bd6570]{padding:calc(var(--default-grid-baseline)*3);display:flex;flex-direction:column;align-items:center;width:250px}.searchable-list__list[data-v-66bd6570]{width:100%;max-height:284px;overflow-y:auto;margin-top:var(--default-grid-baseline);padding:var(--default-grid-baseline)}.searchable-list__list[data-v-66bd6570] .button-vue{border-radius:var(--border-radius-large) !important}.searchable-list__list[data-v-66bd6570] .button-vue span{font-weight:initial}.searchable-list__empty-content[data-v-66bd6570]{margin-top:calc(var(--default-grid-baseline)*3)}","",{version:3,sources:["webpack://./core/src/components/UnifiedSearch/SearchableList.vue"],names:[],mappings:"AAEC,2CACC,4CAAA,CACA,YAAA,CACA,qBAAA,CACA,kBAAA,CACA,WAAA,CAGD,wCACC,UAAA,CACA,gBAAA,CACA,eAAA,CACA,uCAAA,CACA,oCAAA,CAEA,oDACC,mDAAA,CACA,yDACC,mBAAA,CAKH,iDACC,+CAAA",sourcesContent:["\n.searchable-list {\n\t&__wrapper {\n\t\tpadding: calc(var(--default-grid-baseline) * 3);\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\talign-items: center;\n\t\twidth: 250px;\n\t}\n\n\t&__list {\n\t\twidth: 100%;\n\t\tmax-height: 284px;\n\t\toverflow-y: auto;\n\t\tmargin-top: var(--default-grid-baseline);\n\t\tpadding: var(--default-grid-baseline);\n\n\t\t:deep(.button-vue) {\n\t\t\tborder-radius: var(--border-radius-large) !important;\n\t\t\tspan {\n\t\t\t\tfont-weight: initial;\n\t\t\t}\n\t\t}\n\t}\n\n\t&__empty-content {\n\t\tmargin-top: calc(var(--default-grid-baseline) * 3);\n\t}\n}\n"],sourceRoot:""}]);const o=s;n.d(e,["A",0,o])},14600(t,e,n){var i=n(71354),a=n.n(i),r=n(76314),s=n.n(r)()(a());s.push([t.id,".unified-search-input[data-v-59e94aec]{position:relative;z-index:51}.unified-search-input[data-v-59e94aec]:not(.unified-search-input--mobile){display:flex;align-items:center;width:clamp(200px,35vw,600px);max-width:calc(100% - 32px)}.unified-search-input--mobile[data-v-59e94aec]{display:contents}.unified-search-input__field[data-v-59e94aec]{--resting-background: rgba(0, 0, 0, 0.15);--resting-background-hover: rgba(0, 0, 0, 0.22);--search-icon-pad: 12px;--search-icon-size: 20px;--search-icon-gap: 8px;--search-anim-duration: 240ms;--search-anim-easing: cubic-bezier(0.22, 1, 0.36, 1);position:relative;container-type:inline-size;display:flex;align-items:center;height:var(--default-clickable-area);width:100%;border-radius:var(--border-radius-element, 8px);box-shadow:inset 0 2px 0 rgba(0,0,0,.12);background-color:var(--resting-background);-webkit-backdrop-filter:var(--filter-background-blur);backdrop-filter:var(--filter-background-blur);transition:background-color var(--search-anim-duration) var(--search-anim-easing),box-shadow var(--search-anim-duration) var(--search-anim-easing)}.unified-search-input__field[data-v-59e94aec]:hover:not(.unified-search-input__field--active){background-color:var(--resting-background-hover)}.unified-search-input__field--active[data-v-59e94aec]{background-color:var(--color-main-background);box-shadow:none}.unified-search-input__resting[data-v-59e94aec]{--slide-sign: 1;position:absolute;inset-block:0;inset-inline-start:var(--search-icon-pad);max-width:calc(100% - 2*var(--search-icon-pad));display:flex;align-items:center;gap:var(--search-icon-gap);pointer-events:none;color:color-mix(in srgb, var(--color-background-plain-text) 70%, var(--color-background-plain));transform:translateX(calc(var(--slide-sign) * (50cqi - 50% - var(--search-icon-pad))));transition:transform var(--search-anim-duration) var(--search-anim-easing),color var(--search-anim-duration) var(--search-anim-easing)}.unified-search-input__field--active .unified-search-input__resting[data-v-59e94aec]{transform:translateX(0);color:var(--color-text-maxcontrast);max-width:calc(100% - 7*var(--search-icon-pad))}.unified-search-input__label[data-v-59e94aec]{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;transition:opacity var(--search-anim-duration) var(--search-anim-easing)}.unified-search-input__resting--filled .unified-search-input__label[data-v-59e94aec]{opacity:0}.unified-search-input__resting[data-v-59e94aec] .material-design-icon__svg{display:block;transform:translateY(1px)}.unified-search-input__input[data-v-59e94aec]{flex:1;min-width:0;height:100%;margin:0;padding-inline:calc(var(--search-icon-pad) + var(--search-icon-size) + var(--search-icon-gap)) var(--search-icon-pad);border:none !important;border-radius:0 !important;box-shadow:none !important;background-color:rgba(0,0,0,0);color:var(--color-main-text);font-size:var(--default-font-size)}.unified-search-input__input[data-v-59e94aec]::placeholder{opacity:1;color:var(--color-text-maxcontrast)}.unified-search-input__input[data-v-59e94aec]:focus-visible{outline:none}.unified-search-input__clear[data-v-59e94aec],.unified-search-input__filter[data-v-59e94aec]{flex-shrink:0;margin-inline-end:2px}.unified-search-input__loading[data-v-59e94aec]{flex-shrink:0;display:flex;align-items:center;margin-inline:var(--default-grid-baseline)}.unified-search-input__shortcut[data-v-59e94aec]{position:absolute;inset-inline-end:var(--default-grid-baseline);top:50%;transform:translateY(-50%);display:flex;pointer-events:none}@container (max-width: 400px){.unified-search-input__shortcut[data-v-59e94aec]{display:none}}.unified-search-input__shortcut[data-v-59e94aec] kbd{min-width:12px;height:12px;padding-inline:5px;border:1px solid color-mix(in srgb, var(--color-background-plain-text) 20%, transparent);border-block-end-width:2px;border-radius:var(--border-radius-small, 4px);color:color-mix(in srgb, var(--color-background-plain-text) 70%, var(--color-background-plain));font-size:13px}[data-theme-dark] .unified-search-input__field[data-v-59e94aec],[data-theme-dark-highcontrast] .unified-search-input__field[data-v-59e94aec]{--resting-background: color-mix(in srgb, var(--color-primary-element) 16%, transparent);--resting-background-hover: color-mix(in srgb, var(--color-primary-element) 22%, transparent)}.unified-search-input__resting[data-v-59e94aec]:dir(rtl){--slide-sign: -1}@media(prefers-reduced-motion: reduce){.unified-search-input__resting[data-v-59e94aec],.unified-search-input__resting span[data-v-59e94aec]{transition:none}}.unified-search-input--mobile[data-v-59e94aec] .header-menu{height:var(--default-clickable-area)}.unified-search-input--mobile[data-v-59e94aec] .header-menu__trigger{--button-size: var(--default-clickable-area) !important;height:var(--default-clickable-area) !important}.unified-search-input--mobile[data-v-59e94aec] .button-vue{--color-main-text: var(--color-background-plain-text);color:var(--color-background-plain-text);border-radius:var(--border-radius-element) !important}.unified-search-input--mobile[data-v-59e94aec] .button-vue:hover:not(:disabled){background-color:rgba(0,0,0,.1) !important}.unified-search-input--mobile[data-v-59e94aec] .button-vue:active:not(:disabled){background-color:rgba(0,0,0,.15) !important}.unified-search-input--mobile[data-v-59e94aec] .button-vue:focus-visible{background-color:rgba(0,0,0,.1) !important;outline:none !important;box-shadow:inset 0 0 0 2px var(--color-background-plain-text) !important}","",{version:3,sources:["webpack://./core/src/components/UnifiedSearch/UnifiedSearchInput.vue"],names:[],mappings:"AACA,uCAGC,iBAAA,CACA,UAAA,CAEA,0EACC,YAAA,CACA,kBAAA,CACA,6BAAA,CACA,2BAAA,CAGD,+CACC,gBAAA,CAGD,8CACC,yCAAA,CACA,+CAAA,CAGA,uBAAA,CACA,wBAAA,CACA,sBAAA,CAGA,6BAAA,CACA,oDAAA,CACA,iBAAA,CAEA,0BAAA,CACA,YAAA,CACA,kBAAA,CAGA,oCAAA,CACA,UAAA,CACA,+CAAA,CACA,wCAAA,CAEA,0CAAA,CACA,qDAAA,CACA,6CAAA,CAEA,kJACC,CAGD,8FACC,gDAAA,CAID,sDACC,6CAAA,CACA,eAAA,CAQF,gDACC,eAAA,CACA,iBAAA,CACA,aAAA,CACA,yCAAA,CACA,+CAAA,CACA,YAAA,CACA,kBAAA,CACA,0BAAA,CACA,mBAAA,CACA,+FAAA,CACA,sFAAA,CACA,sIACC,CAGD,qFACC,uBAAA,CACA,mCAAA,CACA,+CAAA,CAOF,8CACC,eAAA,CACA,kBAAA,CACA,sBAAA,CACA,wEAAA,CAGD,qFACC,SAAA,CAOD,2EACC,aAAA,CACA,yBAAA,CAKD,8CACC,MAAA,CACA,WAAA,CACA,WAAA,CACA,QAAA,CAGA,qHAAA,CAIA,sBAAA,CACA,0BAAA,CACA,0BAAA,CACA,8BAAA,CACA,4BAAA,CACA,kCAAA,CAEA,2DACC,SAAA,CACA,mCAAA,CAGD,4DACC,YAAA,CAIF,6FAEC,aAAA,CACA,qBAAA,CAGD,gDACC,aAAA,CACA,YAAA,CACA,kBAAA,CACA,0CAAA,CAKD,iDACC,iBAAA,CACA,6CAAA,CACA,OAAA,CACA,0BAAA,CACA,YAAA,CACA,mBAAA,CAKA,8BAXD,iDAYE,YAAA,CAAA,CAGD,qDACC,cAAA,CACA,WAAA,CACA,kBAAA,CACA,wFAAA,CACA,0BAAA,CACA,6CAAA,CACA,+FAAA,CACA,cAAA,CAOH,6IAEC,uFAAA,CACA,6FAAA,CAOD,yDACC,gBAAA,CAKD,uCACC,qGAEC,eAAA,CAAA,CAKF,4DACC,oCAAA,CAGD,qEACC,uDAAA,CACA,+CAAA,CAGD,2DACC,qDAAA,CACA,wCAAA,CACA,qDAAA,CAEA,gFACC,0CAAA,CAGD,iFACC,2CAAA,CAGD,yEACC,0CAAA,CACA,uBAAA,CACA,wEAAA",sourcesContent:["\n.unified-search-input {\n\t// Paints above the modal root (z-index: 50) so the header input stays clickable\n\t// over the scrim while the popover is open. Keep 51 one above that value.\n\tposition: relative;\n\tz-index: 51;\n\n\t&:not(.unified-search-input--mobile) {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\twidth: clamp(200px, 35vw, 600px);\n\t\tmax-width: calc(100% - 32px);\n\t}\n\n\t&--mobile {\n\t\tdisplay: contents;\n\t}\n\n\t&__field {\n\t\t--resting-background: rgba(0, 0, 0, 0.15);\n\t\t--resting-background-hover: rgba(0, 0, 0, 0.22);\n\t\t// Shared geometry: the resting group and the input's leading padding read the\n\t\t// same tokens so the placeholder and the typed value line up.\n\t\t--search-icon-pad: 12px;\n\t\t--search-icon-size: 20px;\n\t\t--search-icon-gap: 8px;\n\t\t// One shared timing for every focus transition (background, the icon/label\n\t\t// slide, the recolour) so they move together. easeOutQuart = soft landing.\n\t\t--search-anim-duration: 240ms;\n\t\t--search-anim-easing: cubic-bezier(0.22, 1, 0.36, 1);\n\t\tposition: relative;\n\t\t// Query container so the resting group can centre itself with cqi units\n\t\tcontainer-type: inline-size;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\t// Match the default clickable area so the inner (which the global\n\t\t// input reset forces to that height) fills the field without an override.\n\t\theight: var(--default-clickable-area);\n\t\twidth: 100%;\n\t\tborder-radius: var(--border-radius-element, 8px);\n\t\tbox-shadow: inset 0 2px 0 rgba(0, 0, 0, 0.12);\n\t\t// Resting: subdued \"button\" look that sits on the themed header\n\t\tbackground-color: var(--resting-background);\n\t\t-webkit-backdrop-filter: var(--filter-background-blur);\n\t\tbackdrop-filter: var(--filter-background-blur);\n\t\t// Blue tint -> white surface on the shared timing, in step with the slide.\n\t\ttransition:\n\t\t\tbackground-color var(--search-anim-duration) var(--search-anim-easing),\n\t\t\tbox-shadow var(--search-anim-duration) var(--search-anim-easing);\n\n\t\t&:hover:not(.unified-search-input__field--active) {\n\t\t\tbackground-color: var(--resting-background-hover);\n\t\t}\n\n\t\t// Active: real input surface once focused or filled\n\t\t&--active {\n\t\t\tbackground-color: var(--color-main-background);\n\t\t\tbox-shadow: none;\n\t\t}\n\t}\n\n\t// Anchored at the leading edge and translated to the centre while at rest; on\n\t// focus (--active) the translate goes to 0 and it slides into place. Centre offset\n\t// is pure CSS: half the field (50cqi) minus half the group (50%) minus the pad, so\n\t// it self-corrects for any placeholder length or field width.\n\t&__resting {\n\t\t--slide-sign: 1;\n\t\tposition: absolute;\n\t\tinset-block: 0;\n\t\tinset-inline-start: var(--search-icon-pad);\n\t\tmax-width: calc(100% - 2 * var(--search-icon-pad));\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: var(--search-icon-gap);\n\t\tpointer-events: none;\n\t\tcolor: color-mix(in srgb, var(--color-background-plain-text) 70%, var(--color-background-plain));\n\t\ttransform: translateX(calc(var(--slide-sign) * (50cqi - 50% - var(--search-icon-pad))));\n\t\ttransition:\n\t\t\ttransform var(--search-anim-duration) var(--search-anim-easing),\n\t\t\tcolor var(--search-anim-duration) var(--search-anim-easing);\n\n\t\t.unified-search-input__field--active & {\n\t\t\ttransform: translateX(0);\n\t\t\tcolor: var(--color-text-maxcontrast);\n\t\t\tmax-width: calc(100% - 7 * var(--search-icon-pad));\n\t\t}\n\t}\n\n\t// Placeholder text inside the resting group. Ellipsised, and hidden once typing\n\t// starts so it doesn't overlap the value. Scoped to the label class so the sibling\n\t// magnifier (also rendered as a ) stays visible.\n\t&__label {\n\t\toverflow: hidden;\n\t\twhite-space: nowrap;\n\t\ttext-overflow: ellipsis;\n\t\ttransition: opacity var(--search-anim-duration) var(--search-anim-easing);\n\t}\n\n\t&__resting--filled &__label {\n\t\topacity: 0;\n\t}\n\n\t// The material-design icon