diff --git a/apps/files_external/src/components/ExternalStorageTableRow.vue b/apps/files_external/src/components/ExternalStorageTableRow.vue
index f633ecad07ca2..213d8e0691e16 100644
--- a/apps/files_external/src/components/ExternalStorageTableRow.vue
+++ b/apps/files_external/src/components/ExternalStorageTableRow.vue
@@ -14,7 +14,7 @@ import { computed, ref } from 'vue'
import NcButton from '@nextcloud/vue/components/NcButton'
import NcIconSvgWrapper from '@nextcloud/vue/components/NcIconSvgWrapper'
import AddExternalStorageDialog from './AddExternalStorageDialog/AddExternalStorageDialog.vue'
-import { useUsers } from '../composables/useEntities.ts'
+import { useGroups, useUsers } from '../composables/useEntities.ts'
import { useStorages } from '../store/storages.ts'
import { StorageStatus, StorageStatusIcons, StorageStatusMessage } from '../types.ts'
@@ -51,6 +51,7 @@ const status = computed(() => {
})
const users = useUsers(() => props.storage.applicableUsers || [])
+const groups = useGroups(() => props.storage.applicableGroups || [])
/**
* Handle deletion of the external storage mount point
@@ -113,11 +114,11 @@ async function reloadStatus() {
+ :text="group.displayName" />
({ get: vi.fn(), post: vi.fn() }))
+vi.mock('@nextcloud/axios', () => ({ default: axios }))
+
+const { useGroups, useUsers } = await import('./useEntities.ts')
+
+describe('useUsers', () => {
+ beforeEach(() => {
+ vi.resetAllMocks()
+ })
+
+ test('resolves display names for given uids', async () => {
+ axios.post.mockResolvedValue({ data: { users: { alice: 'Alice Doe' } } })
+
+ let users
+ effectScope().run(() => {
+ users = useUsers(() => ['alice'])
+ })
+ await flushPromises()
+
+ expect(axios.post).toHaveBeenCalledWith(expect.stringContaining('/displaynames'), { users: ['alice'] })
+ expect(users!.value).toEqual([{ id: 'user:alice', user: 'alice', displayName: 'Alice Doe' }])
+ })
+})
+
+describe('useGroups', () => {
+ beforeEach(() => {
+ vi.resetAllMocks()
+ })
+
+ test('resolves display names for given gids via the applicable endpoint', async () => {
+ axios.get.mockResolvedValue({ data: { groups: { grp1: 'Marketing Team' } } })
+
+ let groups
+ effectScope().run(() => {
+ groups = useGroups(() => ['grp1'])
+ })
+ await flushPromises()
+
+ expect(axios.get).toHaveBeenCalledWith(
+ expect.stringContaining('applicable'),
+ { params: { pattern: 'grp1', limit: 50 } },
+ )
+ expect(groups!.value[0]).toMatchObject({ id: 'grp1', displayName: 'Marketing Team' })
+ })
+
+ test('falls back to the raw gid when the group is unknown', async () => {
+ axios.get.mockResolvedValue({ data: { groups: {} } })
+
+ let groups
+ effectScope().run(() => {
+ groups = useGroups(() => ['deleted-group'])
+ })
+ await flushPromises()
+
+ expect(groups!.value[0]).toMatchObject({ id: 'deleted-group', displayName: 'deleted-group' })
+ })
+
+ test('does not repeat a request for a gid still waiting its turn when the list shrinks back', async () => {
+ const resolvers: Record } }) => void> = {}
+ axios.get.mockImplementation((_url: string, config: { params: { pattern: string } }) => new Promise((resolve) => {
+ resolvers[config.params.pattern] = resolve
+ }))
+
+ // missingGroups is computed as [a, b]; 'a' starts its request immediately,
+ // 'b' is still queued behind it in the loop (not requested yet)
+ const gids = ref(['a', 'b'])
+ let groups
+ effectScope().run(() => {
+ groups = useGroups(gids)
+ })
+ await nextTick()
+ expect(axios.get).toHaveBeenCalledTimes(1)
+
+ // list shrinks back to just 'a' while both 'a' and 'b' are already marked pending
+ gids.value = ['a']
+ await nextTick()
+ expect(axios.get).toHaveBeenCalledTimes(1)
+
+ resolvers.a({ data: { groups: { a: 'A Team' } } })
+ await flushPromises()
+
+ // 'b' still gets its request once its turn in the loop comes up, just not a duplicate one
+ expect(axios.get).toHaveBeenCalledTimes(2)
+
+ resolvers.b({ data: { groups: { b: 'B Team' } } })
+ await flushPromises()
+
+ expect(axios.get).toHaveBeenCalledTimes(2)
+ })
+})
diff --git a/apps/files_external/src/composables/useEntities.ts b/apps/files_external/src/composables/useEntities.ts
index f06e267fb79ab..1b573aa7c9da0 100644
--- a/apps/files_external/src/composables/useEntities.ts
+++ b/apps/files_external/src/composables/useEntities.ts
@@ -11,6 +11,8 @@ import { generateUrl } from '@nextcloud/router'
import { computed, reactive, toValue, watchEffect } from 'vue'
const displayNames = reactive(new Map())
+const groupDisplayNames = reactive(new Map())
+const pendingGroups = new Set()
/**
* Fetch and provide user display names for given UIDs
@@ -40,24 +42,42 @@ export function useUsers(uids: MaybeRefOrGetter) {
}
/**
- * Map group ids to IUserData objects
+ * Fetch and provide group display names for given GIDs, mapped to IUserData objects
*
* @param gids - The group ids to create entities for
*/
export function useGroups(gids: MaybeRefOrGetter) {
- return computed(() => toValue(gids).map(mapGroupToUserData))
+ const groups = computed(() => toValue(gids).map((gid) => mapGroupToUserData(gid, groupDisplayNames.get(gid))))
+
+ watchEffect(async () => {
+ const missingGroups = toValue(gids).filter((gid) => !groupDisplayNames.has(gid) && !pendingGroups.has(gid))
+ missingGroups.forEach((gid) => pendingGroups.add(gid))
+ for (const gid of missingGroups) {
+ try {
+ const { data } = await axios.get(generateUrl('apps/files_external/ajax/applicable'), {
+ params: { pattern: gid, limit: 50 },
+ })
+ groupDisplayNames.set(gid, data.groups[gid] ?? gid)
+ } finally {
+ pendingGroups.delete(gid)
+ }
+ }
+ })
+
+ return groups
}
/**
* Map a group id to an IUserData object
*
* @param gid - The group id to map
+ * @param displayName - The resolved display name for the group, falls back to the group id
*/
-export function mapGroupToUserData(gid: string) {
+export function mapGroupToUserData(gid: string, displayName?: string) {
return {
id: gid,
isNoUser: true,
- displayName: gid,
+ displayName: displayName || gid,
iconSvg: svgAccountGroupOutline,
}
}
diff --git a/dist/files_external-files_external-settings-5OoZV9Dg.chunk.css b/dist/files_external-files_external-settings-5OoZV9Dg.chunk.css
new file mode 100644
index 0000000000000..948a69a962bed
--- /dev/null
+++ b/dist/files_external-files_external-settings-5OoZV9Dg.chunk.css
@@ -0,0 +1 @@
+._authMechanismConfiguration_kpcpy_2,._backendConfiguration_1sf6y_2{display:flex;flex-direction:column;gap:var(--default-grid-baseline)}._mountOptions_1fqyb_2{background-color:hsl(from var(--color-primary-element-light) h s calc(l*1.045));border-radius:var(--border-radius-element);display:flex;flex-direction:column;gap:var(--default-grid-baseline);width:100%}._mountOptions__fieldset_1fqyb_12{display:flex;flex-direction:column;gap:var(--default-grid-baseline);padding-inline:calc(2 * var(--default-grid-baseline)) var(--default-grid-baseline)}._externalStorageDialog_l5jv4_2{display:flex;flex-direction:column;gap:var(--default-grid-baseline);min-height:calc(14 * var(--default-clickable-area))!important}._externalStorageDialog__configuration_l5jv4_9{margin-block:.5rem}._externalStorageDialog__dropdown_l5jv4_13{flex:0 0 auto}._storageTableRow__cellActions_goqfw_2{display:flex;gap:var(--default-grid-baseline)}._storageTableRow__cellApplicable_goqfw_7{display:flex;flex-wrap:wrap;gap:var(--default-grid-baseline);align-items:center;max-height:calc(48px + 2 * var(--default-grid-baseline));overflow:auto}._storageTableRow__status_warning_goqfw_17{color:var(--color-element-warning)}._storageTableRow__status_error_goqfw_21{color:var(--color-element-error)}._storageTable_1dqte_2{width:100%}._storageTable_1dqte_2 td,th{padding-block:calc(var(--default-grid-baseline) / 2);padding-inline:var(--default-grid-baseline)}._storageTable__header_1dqte_11{color:var(--color-text-maxcontrast);min-height:var(--default-clickable-area)}._storageTable__headerStatus_1dqte_16{width:calc(var(--default-clickable-area) + 2 * var(--default-grid-baseline))}._storageTable__headerFolder_1dqte_20{width:25%}._storageTable__headerBackend_1dqte_24,._storageTable__headerFAuthentication_1dqte_28{width:20%}._storageTable__headerActions_1dqte_32{width:calc(2 * var(--default-clickable-area) + 3 * var(--default-grid-baseline))}._userMountSettings__heading_59moz_2{font-weight:700;font-size:1.2rem;margin-block-start:var(--default-clickable-area)}._userMountSettings__backends_59moz_9{--padding: calc((var(--default-clickable-area) - 20px) / 2 + var(--default-grid-baseline));margin-block-start:var(--padding);margin-inline-start:var(--padding);legend{font-weight:700}}._externalStoragesSection__dependantList_atsmn_2{list-style:disc!important;margin-inline-start:calc(var(--default-clickable-area) / 2)}._externalStoragesSection__newStorageButton_atsmn_7{margin-top:var(--default-clickable-area)}._globalCredentialsSectionForm_bgjv2_2{max-width:400px;display:flex;flex-direction:column;align-items:end;gap:15px}._globalCredentialsSectionForm__submit_bgjv2_10{min-width:max(40%,44px)}
diff --git a/dist/files_external-files_external-settings-DoLg_5MW.chunk.css b/dist/files_external-files_external-settings-DoLg_5MW.chunk.css
deleted file mode 100644
index dee099b09c580..0000000000000
--- a/dist/files_external-files_external-settings-DoLg_5MW.chunk.css
+++ /dev/null
@@ -1 +0,0 @@
-._authMechanismConfiguration_kpcpy_2,._backendConfiguration_1sf6y_2{display:flex;flex-direction:column;gap:var(--default-grid-baseline)}._mountOptions_1fqyb_2{background-color:hsl(from var(--color-primary-element-light) h s calc(l*1.045));border-radius:var(--border-radius-element);display:flex;flex-direction:column;gap:var(--default-grid-baseline);width:100%}._mountOptions__fieldset_1fqyb_12{display:flex;flex-direction:column;gap:var(--default-grid-baseline);padding-inline:calc(2 * var(--default-grid-baseline)) var(--default-grid-baseline)}._externalStorageDialog_l5jv4_2{display:flex;flex-direction:column;gap:var(--default-grid-baseline);min-height:calc(14 * var(--default-clickable-area))!important}._externalStorageDialog__configuration_l5jv4_9{margin-block:.5rem}._externalStorageDialog__dropdown_l5jv4_13{flex:0 0 auto}._storageTableRow__cellActions_1k62p_2{display:flex;gap:var(--default-grid-baseline)}._storageTableRow__cellApplicable_1k62p_7{display:flex;flex-wrap:wrap;gap:var(--default-grid-baseline);align-items:center;max-height:calc(48px + 2 * var(--default-grid-baseline));overflow:scroll}._storageTableRow__status_warning_1k62p_17{color:var(--color-element-warning)}._storageTableRow__status_error_1k62p_21{color:var(--color-element-error)}._storageTable_1dqte_2{width:100%}._storageTable_1dqte_2 td,th{padding-block:calc(var(--default-grid-baseline) / 2);padding-inline:var(--default-grid-baseline)}._storageTable__header_1dqte_11{color:var(--color-text-maxcontrast);min-height:var(--default-clickable-area)}._storageTable__headerStatus_1dqte_16{width:calc(var(--default-clickable-area) + 2 * var(--default-grid-baseline))}._storageTable__headerFolder_1dqte_20{width:25%}._storageTable__headerBackend_1dqte_24,._storageTable__headerFAuthentication_1dqte_28{width:20%}._storageTable__headerActions_1dqte_32{width:calc(2 * var(--default-clickable-area) + 3 * var(--default-grid-baseline))}._userMountSettings__heading_59moz_2{font-weight:700;font-size:1.2rem;margin-block-start:var(--default-clickable-area)}._userMountSettings__backends_59moz_9{--padding: calc((var(--default-clickable-area) - 20px) / 2 + var(--default-grid-baseline));margin-block-start:var(--padding);margin-inline-start:var(--padding);legend{font-weight:700}}._externalStoragesSection__dependantList_atsmn_2{list-style:disc!important;margin-inline-start:calc(var(--default-clickable-area) / 2)}._externalStoragesSection__newStorageButton_atsmn_7{margin-top:var(--default-clickable-area)}._globalCredentialsSectionForm_bgjv2_2{max-width:400px;display:flex;flex-direction:column;align-items:end;gap:15px}._globalCredentialsSectionForm__submit_bgjv2_10{min-width:max(40%,44px)}
diff --git a/dist/files_external-settings.css b/dist/files_external-settings.css
index a9e12921133b8..28c2aff14ac28 100644
--- a/dist/files_external-settings.css
+++ b/dist/files_external-settings.css
@@ -1,5 +1,5 @@
/* extracted by css-entry-points-plugin */
-@import './files_external-files_external-settings-DoLg_5MW.chunk.css';
+@import './files_external-files_external-settings-5OoZV9Dg.chunk.css';
@import './common-createElementId-C_oBIsvc.chunk.css';
@import './common-ArrowRight-3plNpBrB.chunk.css';
@import './common-NcModal-CxlqxDk0.chunk.css';
diff --git a/dist/files_external-settings.mjs b/dist/files_external-settings.mjs
index 71e8f845b39b7..672fa1f43d8f8 100644
--- a/dist/files_external-settings.mjs
+++ b/dist/files_external-settings.mjs
@@ -1,2 +1,2 @@
-import{H as K,$ as ee,N as ke,z as C,b as U,s as j,o as u,c as k,u as e,q as M,B as z,g as x,l as h,k as y,t as v,F as S,E as Ve,D as O,U as W,V as Y,i as T,y as Z,K as Se,a9 as Q,Q as ie,p as b,w,j as V,L as Ce,e as Me,f as Ae}from"./preload-helper-B3c9Y6Ia.chunk.mjs";import{t as $e,g as Ue,N as Te,u as Oe,v as Ne,l as qe,w as Pe,s as Ee,k as Re}from"./mdi-AfC8gRDi.chunk.mjs";import{_ as N,l as A}from"./_plugin-vue_export-helper-CqVUm19z.chunk.mjs";import{t as o,a as Fe}from"./index-BZ9H2NGr.chunk.mjs";import{N as P}from"./ArrowRight-DL6H-z1z.chunk.mjs";import"./NcEmptyContent-BDU5IM5c.chunk.mjs";import{N as F}from"./createElementId-Cu-wR4zW.chunk.mjs";import{N as re}from"./TrashCanOutline-Tn7_xhh7.chunk.mjs";import{N as ce}from"./ContentCopy-DN1KQC63.chunk.mjs";import{N as ae}from"./index-D2RZEKFP.chunk.mjs";import{_ as _e}from"./NcTextField.vue_vue_type_script_setup_true_lang-BTu3RnsG.chunk.mjs";import{c as $}from"./index-BFCx3SEP.chunk.mjs";import{b as R}from"./formatRelative-B6SwQwmy.chunk.mjs";import{N as De}from"./NcTextArea-ehyCfDZS.chunk.mjs";import{q as je}from"./NcModal-Bh42Y6HE.chunk.mjs";import"./NcActionButton-DNc0Bs06.chunk.mjs";/* empty css */import"./NcActionInput-qYasfuW3.chunk.mjs";import"./NcActionLink-C1G8aUyO.chunk.mjs";import"./NcActionRouter-FN3FEb6D.chunk.mjs";import"./NcActionSeparator-DnEqLSqe.chunk.mjs";import"./NcActionText-B653EuoW.chunk.mjs";import"./NcContent-BgWMGal5.chunk.mjs";import{N as me}from"./Check-Cxn5cWmd.chunk.mjs";import"./NcAvatar-BlkWsJW8.chunk.mjs";import"./NcBreadcrumbs-D6oJoUUY.chunk.mjs";import{N as E}from"./NcCheckboxRadioSwitch-2CjUNBUY.chunk.mjs";import{N as Be}from"./Plus-BSkC04AC.chunk.mjs";import"./index-RkBEckuu.chunk.mjs";import"./TrayArrowDown-xzSBfI2V.chunk.mjs";import"./NcDashboardWidget-c92lb0ps.chunk.mjs";import"./zh-TW-zkZioxfy.chunk.mjs";import"./NcEmojiPicker-d49o8dvl.chunk.mjs";import"./NcRichText-Ccug5ZUp.chunk.mjs";/* empty css */import"./Web-DMbMvGVQ.chunk.mjs";import{N as Le}from"./NcPasswordField-DxfpRKbP.chunk.mjs";import"./NcProfileHoverCard-CKThmoWM.chunk.mjs";import"./index-BSZ1RJJ3.chunk.mjs";import"./index-B8IvtU3P.chunk.mjs";import"./NcSelectTags-Q0oukrz2.chunk.mjs";import{N as He}from"./NcUserBubble-DP-lTV4_.chunk.mjs";import"./NcUserStatusIcon-NAlIfAHL.chunk.mjs";import"./emoji-CcAiuyxk.chunk.mjs";import"./PencilOutline-BXbwQVTF.chunk.mjs";import{C as pe}from"./AuthMechanismRsa-CQ5BPS75.chunk.mjs";import{C as G,a as fe,M as D,S as B,b as Ge,c as Ie}from"./types-DCTrXMHN.chunk.mjs";import{a as ge,P as I}from"./index-BhZl0daN.chunk.mjs";import{p as Qe}from"./externalStorageUtils-B-QuSdG4.chunk.mjs";import{a as te,d as le}from"./index-BZUfSSUR.chunk.mjs";import{l as ve}from"./logger-D7OgyCxo.chunk.mjs";import"./public-CbrTZt0b.chunk.mjs";import"./autolink-CTGrhdQD.chunk.mjs";const ze='',J=ke(new Map);function be(l){const a=C(()=>ee(l).map(t=>({id:`user:${t}`,user:t,displayName:J.get(t)||t})));return K(async()=>{const t=ee(l).filter(r=>!J.has(r));if(t.length>0){const{data:r}=await $.post(R("/displaynames"),{users:t});for(const[d,c]of Object.entries(r.users))J.set(d,c)}}),a}function Ze(l){return C(()=>ee(l).map(ye))}function ye(l){return{id:l,isNoUser:!0,displayName:l,iconSvg:ze}}const Ke=U({__name:"ApplicableEntities",props:{groups:{default:()=>[]},groupsModifiers:{},users:{default:()=>[]},usersModifiers:{}},emits:["update:groups","update:users"],setup(l){const a=j(l,"groups"),t=j(l,"users"),r=M([]),d=be(t),c=Ze(a),n=C({get(){return[...c.value,...d.value]},set(p){t.value=p.filter(_=>_.user).map(_=>_.user),a.value=p.filter(_=>_.isNoUser).map(_=>_.id)}}),i=je(s,500);async function s(p){const{data:_}=await $.get(R("apps/files_external/ajax/applicable"),{params:{pattern:p,limit:20}}),m=[...r.value.map(f=>[f.id,f]),...Object.entries(_.groups).map(([f,g])=>[f,{...ye(f),displayName:g}]),...Object.entries(_.users).map(([f,g])=>[`user:${f}`,{id:`user:${f}`,user:f,displayName:g}])];r.value=[...new Map(m).values()]}return(p,_)=>(u(),k(e(De),{modelValue:n.value,"onUpdate:modelValue":_[0]||(_[0]=m=>n.value=m),keepOpen:"",multiple:"",options:r.value,inputLabel:e(o)("files_external","Restrict to"),onSearch:e(i)},null,8,["modelValue","options","inputLabel","onSearch"]))}}),We=U({__name:"AuthMechanismConfiguration",props:Z({authMechanism:{}},{modelValue:{required:!0},modelModifiers:{}}),emits:["update:modelValue"],setup(l){const a=j(l,"modelValue"),t=l,r=C(()=>{if(!t.authMechanism.configuration)return;const s=Object.entries(t.authMechanism.configuration).filter(([,p])=>!(p.flags&G.UserProvided));return Object.fromEntries(s)}),d=C(()=>window.OCA.FilesExternal.AuthMechanism.getHandler(t.authMechanism)),c=C(()=>{if(!r.value)return!1;for(const s of Object.values(r.value))if(!(s.flags&G.Hidden||s.flags&G.UserProvided))return!0;return!1}),n=M(!1);K(async()=>{d.value&&(n.value=!0,await window.customElements.whenDefined(d.value.tagName),n.value=!1)}),z(r,()=>{for(const s in r.value)s in a.value||(a.value[s]=r.value[s]?.type===fe.Boolean?!1:"")});function i(s){const p=[s.detail].flat()[0];a.value={...a.value,...p}}return(s,p)=>c.value?(u(),x("fieldset",{key:0,class:h(s.$style.authMechanismConfiguration)},[y("legend",null,v(e(o)("files_external","Authentication")),1),d.value?(u(),x(S,{key:0},[n.value?(u(),k(e(me),{key:0})):(u(),k(Ve(d.value.tagName),{key:1,".modelValue":a.value,".authMechanism":l.authMechanism,"onUpdate:modelValue":i},null,40,[".modelValue",".authMechanism"]))],64)):(u(!0),x(S,{key:1},O(r.value,(_,m)=>W((u(),k(pe,{key:_.value,modelValue:a.value[m],"onUpdate:modelValue":f=>a.value[m]=f,"config-key":m,"config-option":_},null,8,["modelValue","onUpdate:modelValue","config-key","config-option"])),[[Y,!(_.flags&e(G).Hidden)]])),128))],2)):T("",!0)}}),Ye="_authMechanismConfiguration_kpcpy_2",Je={authMechanismConfiguration:Ye},Xe={$style:Je},ea=N(We,[["__cssModules",Xe]]),aa=U({__name:"BackendConfiguration",props:Z({configuration:{}},{modelValue:{required:!0},modelModifiers:{}}),emits:["update:modelValue"],setup(l){const a=j(l,"modelValue"),t=l;return z(()=>t.configuration,()=>{for(const r in t.configuration)r in a.value||(a.value[r]=t.configuration[r]?.defaultValue??(t.configuration[r]?.type===fe.Boolean?!1:""))},{immediate:!0}),(r,d)=>(u(),x("fieldset",{class:h(r.$style.backendConfiguration)},[y("legend",null,v(e(o)("files_external","Storage configuration")),1),(u(!0),x(S,null,O(l.configuration,(c,n)=>W((u(),k(pe,{key:c.value,modelValue:a.value[n],"onUpdate:modelValue":i=>a.value[n]=i,configKey:n,configOption:c},null,8,["modelValue","onUpdate:modelValue","configKey","configOption"])),[[Y,!(c.flags&e(G).Hidden)]])),128))],2))}}),ta="_backendConfiguration_1sf6y_2",la={backendConfiguration:ta},sa={$style:la},na=N(aa,[["__cssModules",sa]]),{isAdmin:oa}=A("files_external","settings"),ia=Object.freeze({encrypt:!0,previews:!0,filesystem_check_changes:D.OncePerRequest,enable_sharing:!1,encoding_compatibility:!1,readonly:!1}),se=Se("files_external--storages",()=>{const l=M([]),a=M([]);async function t(m){const f=R("apps/files_external/globalstorages"),{data:g}=await $.post(f,Q(m),{confirmPassword:I.Strict});l.value.push(L(g))}async function r(m){const f=R("apps/files_external/userstorages"),{data:g}=await $.post(f,Q(m),{confirmPassword:I.Strict});a.value.push(L(g))}async function d(m){await $.delete(p(m),{confirmPassword:I.Strict}),m.type==="personal"?a.value=a.value.filter(f=>f.id!==m.id):l.value=l.value.filter(f=>f.id!==m.id)}async function c(m){const{data:f}=await $.put(p(m),Q(m),{confirmPassword:I.Strict});_(L(f))}async function n(m){const{data:f}=await $.get(p(m));_(L(f))}return s(),{globalStorages:l,userStorages:a,createGlobalStorage:t,createUserStorage:r,deleteStorage:d,reloadStorage:n,updateStorage:c};async function i(m){const f=`apps/files_external/${m}`,{data:g}=await $.get(R(f));return Object.values(g).map(L)}async function s(){ge($),oa?l.value=await i("globalstorages"):(a.value=await i("userstorages"),l.value=await i("userglobalstorages"))}function p(m){const f=m.type==="personal"?"userstorages":"globalstorages";return R(`apps/files_external/${f}/${m.id}`)}function _(m){if(m.type==="personal"){const f=a.value.findIndex(g=>g.id===m.id);a.value.splice(f,1,m)}else{const f=l.value.findIndex(g=>g.id===m.id);l.value.splice(f,1,m)}}});function L(l){return{...l,mountOptions:he(l.mountOptions)}}function he(l){const a={...l};return a.encrypt=H(a.encrypt,!0),a.previews=H(a.previews,!0),a.enable_sharing=H(a.enable_sharing,!1),a.filesystem_check_changes=typeof a.filesystem_check_changes=="string"?Number.parseInt(a.filesystem_check_changes):a.filesystem_check_changes??D.Never,a.encoding_compatibility=H(a.encoding_compatibility,!1),a.readonly=H(a.readonly,!1),a}function H(l,a=!1){return l===void 0?a:l===!0||l==="true"||l==="1"}const ra=["id","aria-labelledby"],ua=U({__name:"MountOptions",props:{modelValue:{required:!0},modelModifiers:{}},emits:["update:modelValue"],setup(l){const a=j(l,"modelValue");K(()=>{Object.keys(a.value).length===0&&(a.value=he(a.value))});const{hasEncryption:t}=A("files_external","settings"),r=ie(),d=ie(),c=M(!1),n=[{label:o("files_external","Never"),value:D.Never},{label:o("files_external","Once every direct access"),value:D.OncePerRequest},{label:o("files_external","Always"),value:D.Always}],i=C({get(){return n.find(s=>s.value===a.value.filesystem_check_changes)},set(s){a.value.filesystem_check_changes=s?.value??D.OncePerRequest}});return(s,p)=>(u(),x("div",{class:h(s.$style.mountOptions)},[b(e(P),{id:e(r),"aria-controls":e(d),"aria-expanded":c.value,variant:"tertiary-no-background",onClick:p[0]||(p[0]=_=>c.value=!c.value)},{icon:w(()=>[b(e(F),{directional:"",path:c.value?e($e):e(Ue)},null,8,["path"])]),default:w(()=>[V(" "+v(e(o)("files_external","Mount options")),1)]),_:1},8,["id","aria-controls","aria-expanded"]),W(y("fieldset",{id:e(d),class:h(s.$style.mountOptions__fieldset),"aria-labelledby":e(r)},[b(e(ae),{modelValue:i.value,"onUpdate:modelValue":p[1]||(p[1]=_=>i.value=_),inputLabel:e(o)("files_external","Check filesystem changes"),options:n},null,8,["modelValue","inputLabel"]),b(e(E),{modelValue:l.modelValue.readonly,"onUpdate:modelValue":p[2]||(p[2]=_=>l.modelValue.readonly=_),type:"switch"},{default:w(()=>[V(v(e(o)("files_external","Read only")),1)]),_:1},8,["modelValue"]),b(e(E),{modelValue:l.modelValue.previews,"onUpdate:modelValue":p[3]||(p[3]=_=>l.modelValue.previews=_),type:"switch"},{default:w(()=>[V(v(e(o)("files_external","Enable previews")),1)]),_:1},8,["modelValue"]),b(e(E),{modelValue:l.modelValue.enable_sharing,"onUpdate:modelValue":p[4]||(p[4]=_=>l.modelValue.enable_sharing=_),type:"switch"},{default:w(()=>[V(v(e(o)("files_external","Enable sharing")),1)]),_:1},8,["modelValue"]),e(t)?(u(),k(e(E),{key:0,modelValue:l.modelValue.encrypt,"onUpdate:modelValue":p[5]||(p[5]=_=>l.modelValue.encrypt=_),type:"switch"},{default:w(()=>[V(v(e(o)("files_external","Enable encryption")),1)]),_:1},8,["modelValue"])):T("",!0),b(e(E),{modelValue:l.modelValue.encoding_compatibility,"onUpdate:modelValue":p[6]||(p[6]=_=>l.modelValue.encoding_compatibility=_),type:"switch"},{default:w(()=>[V(v(e(o)("files_external","Compatibility with Mac NFD encoding (slow)")),1)]),_:1},8,["modelValue"])],10,ra),[[Y,c.value]])],2))}}),da="_mountOptions_1fqyb_2",ca="_mountOptions__fieldset_1fqyb_12",_a={mountOptions:da,mountOptions__fieldset:ca},ma={$style:_a},pa=N(ua,[["__cssModules",ma]]),{isAdmin:ue}=A("files_external","settings"),fa=A("files_external","allowedBackends"),de=A("files_external","backends").filter(l=>fa.includes(l.identifier)),ga=A("files_external","authMechanisms"),va=U({__name:"AddExternalStorageDialog",props:Z({storage:{default:()=>({backendOptions:{},mountOptions:{...ia},type:ue?"system":"personal"})}},{open:{type:Boolean,default:!0},openModifiers:{}}),emits:Z(["close"],["update:open"]),setup(l){const a=j(l,"open"),t=M(structuredClone(Q(l.storage)));K(()=>{a.value&&(t.value=structuredClone(Q(l.storage)))});const r=C({get(){return de.find(n=>n.identifier===t.value.backend)},set(n){t.value.backend=n?.identifier}}),d=C(()=>ga.filter(({scheme:n})=>r.value?.authSchemes[n])),c=C({get(){return d.value.find(n=>n.identifier===t.value.authMechanism)},set(n){const i=d.value.find(s=>s.identifier===t.value.authMechanism);i&&i.identifier!==n?.identifier&&t.value.backendOptions&&Qe(t.value.backendOptions,i.configuration,[n?.configuration,r.value?.configuration]),t.value.authMechanism=n?.identifier}});return z(d,()=>{d.value.length===1&&(t.value.authMechanism=d.value[0].identifier)}),(n,i)=>(u(),k(e(Te),{open:a.value,"onUpdate:open":[i[9]||(i[9]=s=>a.value=s),i[11]||(i[11]=s=>s||n.$emit("close"))],isForm:"",contentClasses:n.$style.externalStorageDialog,name:t.value.id?e(o)("files_external","Edit storage"):e(o)("files_external","Add storage"),onSubmit:i[10]||(i[10]=s=>n.$emit("close",t.value))},{actions:w(()=>[l.storage.id?(u(),k(e(P),{key:0,onClick:i[8]||(i[8]=s=>n.$emit("close"))},{default:w(()=>[V(v(e(o)("files_external","Cancel")),1)]),_:1})):T("",!0),b(e(P),{variant:"primary",type:"submit"},{default:w(()=>[V(v(l.storage.id?e(o)("files_external","Edit"):e(o)("files_external","Create")),1)]),_:1})]),default:w(()=>[b(e(_e),{modelValue:t.value.mountPoint,"onUpdate:modelValue":i[0]||(i[0]=s=>t.value.mountPoint=s),label:e(o)("files_external","Folder name"),required:""},null,8,["modelValue","label"]),b(pa,{modelValue:t.value.mountOptions,"onUpdate:modelValue":i[1]||(i[1]=s=>t.value.mountOptions=s)},null,8,["modelValue"]),e(ue)?(u(),k(Ke,{key:0,groups:t.value.applicableGroups,"onUpdate:groups":i[2]||(i[2]=s=>t.value.applicableGroups=s),users:t.value.applicableUsers,"onUpdate:users":i[3]||(i[3]=s=>t.value.applicableUsers=s),class:h(n.$style.externalStorageDialog__dropdown)},null,8,["groups","users","class"])):T("",!0),b(e(ae),{modelValue:r.value,"onUpdate:modelValue":i[4]||(i[4]=s=>r.value=s),options:e(de),disabled:!!(t.value.id&&t.value.backend),inputLabel:e(o)("files_external","External storage"),class:h(n.$style.externalStorageDialog__dropdown),label:"name",required:""},null,8,["modelValue","options","disabled","inputLabel","class"]),b(e(ae),{modelValue:c.value,"onUpdate:modelValue":i[5]||(i[5]=s=>c.value=s),options:d.value,disabled:!t.value.backend||d.value.length<=1,inputLabel:e(o)("files_external","Authentication"),class:h(n.$style.externalStorageDialog__dropdown),label:"name",required:""},null,8,["modelValue","options","disabled","inputLabel","class"]),r.value&&t.value.backendOptions?(u(),k(na,{key:1,modelValue:t.value.backendOptions,"onUpdate:modelValue":i[6]||(i[6]=s=>t.value.backendOptions=s),class:h(n.$style.externalStorageDialog__configuration),configuration:r.value.configuration},null,8,["modelValue","class","configuration"])):T("",!0),c.value&&t.value.backendOptions?(u(),k(ea,{key:2,modelValue:t.value.backendOptions,"onUpdate:modelValue":i[7]||(i[7]=s=>t.value.backendOptions=s),class:h(n.$style.externalStorageDialog__configuration),authMechanism:c.value},null,8,["modelValue","class","authMechanism"])):T("",!0)]),_:1},8,["open","contentClasses","name"]))}}),ba="_externalStorageDialog_l5jv4_2",ya="_externalStorageDialog__configuration_l5jv4_9",ha="_externalStorageDialog__dropdown_l5jv4_13",xa={externalStorageDialog:ba,externalStorageDialog__configuration:ya,externalStorageDialog__dropdown:ha},wa={$style:xa},xe=N(va,[["__cssModules",wa]]),ka={class:"hidden-visually"},Va={key:0},Sa=U({__name:"ExternalStorageTableRow",props:{storage:{},isAdmin:{type:Boolean}},setup(l){const a=l,t=se(),r=A("files_external","backends"),d=C(()=>r.find(g=>g.identifier===a.storage.backend).name),c=A("files_external","authMechanisms"),n=C(()=>c.find(g=>g.identifier===a.storage.authMechanism).name),i=M(!1),s=C(()=>{if(i.value)return{icon:"loading",label:o("files_external","Checking …")};const g=a.storage.status??B.Indeterminate,ne=a.storage.statusMessage||Ge[g],q=Ie[g],oe=g===B.NetworkError||g===B.Timeout,we=!oe&&g!==B.Success&&g!==B.Indeterminate;return{icon:q,label:ne,isWarning:oe,isError:we}}),p=be(()=>a.storage.applicableUsers||[]);async function _(){await t.deleteStorage(a.storage)}async function m(){const g=await Ee(xe,{storage:a.storage});g&&await t.updateStorage(g)}async function f(){i.value=!0;try{await t.reloadStorage(a.storage)}finally{i.value=!1}}return(g,ne)=>(u(),x("tr",{class:h(g.$style.storageTableRow)},[y("td",null,[y("span",ka,v(s.value.label),1),b(e(P),{"aria-label":e(o)("files_external","Recheck status"),title:s.value.label,variant:"tertiary-no-background",onClick:f},{icon:w(()=>[s.value.icon==="loading"?(u(),k(e(me),{key:0})):(u(),k(e(F),{key:1,class:h({[g.$style.storageTableRow__status_error]:s.value.isError,[g.$style.storageTableRow__status_warning]:s.value.isWarning}),path:s.value.icon},null,8,["class","path"]))]),_:1},8,["aria-label","title"])]),y("td",null,v(l.storage.mountPoint),1),y("td",null,v(d.value),1),y("td",null,v(n.value),1),l.isAdmin?(u(),x("td",Va,[y("div",{class:h(g.$style.storageTableRow__cellApplicable)},[(u(!0),x(S,null,O(l.storage.applicableGroups,q=>(u(),k(e(Be),{key:q,iconPath:e(Oe),noClose:"",text:q},null,8,["iconPath","text"]))),128)),(u(!0),x(S,null,O(e(p),q=>(u(),k(e(He),{key:q.user,displayName:q.displayName,size:24,user:q.user},null,8,["displayName","user"]))),128))],2)])):T("",!0),y("td",null,[l.isAdmin||l.storage.type==="personal"?(u(),x("div",{key:0,class:h(g.$style.storageTableRow__cellActions)},[b(e(P),{"aria-label":e(o)("files_external","Edit"),title:e(o)("files_external","Edit"),onClick:m},{icon:w(()=>[b(e(F),{path:e(Ne)},null,8,["path"])]),_:1},8,["aria-label","title"]),b(e(P),{"aria-label":e(o)("files_external","Delete"),title:e(o)("files_external","Delete"),variant:"error",onClick:_},{icon:w(()=>[b(e(F),{path:e(qe)},null,8,["path"])]),_:1},8,["aria-label","title"])],2)):(u(),k(e(F),{key:1,inline:"",path:e(Pe),name:e(o)("files_external","System provided storage"),title:e(o)("files_external","System provided storage")},null,8,["path","name","title"]))])],2))}}),Ca="_storageTableRow__cellActions_1k62p_2",Ma="_storageTableRow__cellApplicable_1k62p_7",Aa="_storageTableRow__status_warning_1k62p_17",$a="_storageTableRow__status_error_1k62p_21",Ua={storageTableRow__cellActions:Ca,storageTableRow__cellApplicable:Ma,storageTableRow__status_warning:Aa,storageTableRow__status_error:$a},Ta={$style:Ua},Oa=N(Sa,[["__cssModules",Ta]]),Na=["aria-label"],qa={class:"hidden-visually"},Pa={key:0},Ea={class:"hidden-visually"},Ra=U({__name:"ExternalStorageTable",setup(l){const a=se(),{isAdmin:t}=A("files_external","settings"),r=C(()=>t?a.globalStorages:[...a.userStorages,...a.globalStorages]);return(d,c)=>(u(),x("table",{class:h(d.$style.storageTable),"aria-label":e(o)("files_external","External storages")},[y("thead",{class:h(d.$style.storageTable__header)},[y("tr",null,[y("th",{class:h(d.$style.storageTable__headerStatus)},[y("span",qa,v(e(o)("files_external","Status")),1)],2),y("th",{class:h(d.$style.storageTable__headerFolder)},v(e(o)("files_external","Folder name")),3),y("th",{class:h(d.$style.storageTable__headerBackend)},v(e(o)("files_external","External storage")),3),y("th",{class:h(d.$style.storageTable__headerAuthentication)},v(e(o)("files_external","Authentication")),3),e(t)?(u(),x("th",Pa,v(e(o)("files_external","Restricted to")),1)):T("",!0),y("th",{class:h(d.$style.storageTable__headerActions)},[y("span",Ea,v(e(o)("files_external","Actions")),1)],2)])],2),y("tbody",null,[(u(!0),x(S,null,O(r.value,n=>(u(),k(Oa,{key:n.id,isAdmin:e(t),storage:n},null,8,["isAdmin","storage"]))),128))])],10,Na))}}),Fa="_storageTable_1dqte_2",Da="_storageTable__header_1dqte_11",ja="_storageTable__headerStatus_1dqte_16",Ba="_storageTable__headerFolder_1dqte_20",La="_storageTable__headerBackend_1dqte_24",Ha="_storageTable__headerFAuthentication_1dqte_28",Ga="_storageTable__headerActions_1dqte_32",Ia={storageTable:Fa,storageTable__header:Da,storageTable__headerStatus:ja,storageTable__headerFolder:Ba,storageTable__headerBackend:La,storageTable__headerFAuthentication:Ha,storageTable__headerActions:Ga},Qa={$style:Ia},za=N(Ra,[["__cssModules",Qa]]),Za=U({__name:"UserMountSettings",setup(l){const a=A("files_external","user-mounting"),t=A("files_external","backends").filter(c=>c.identifier!=="local"),r=M(a.allowUserMounting),d=M(a.allowedBackends);return z(r,()=>{const c=!r.value;window.OCP.AppConfig.setValue("files_external","allow_user_mounting",r.value?"yes":"no",{success:()=>le(o("files_external","Saved")),error:()=>{r.value=c,te(o("files_external","Error while saving"))}})}),z(d,(c,n)=>{window.OCP.AppConfig.setValue("files_external","user_mounting_backends",c.join(","),{success:()=>le(o("files_external","Saved allowed backends")),error:()=>{te(o("files_external","Failed to save allowed backends")),d.value=n}})}),(c,n)=>(u(),x("form",null,[y("h3",{class:h(c.$style.userMountSettings__heading)},v(e(o)("files_external","Advanced options for external storage mounts")),3),b(e(E),{modelValue:r.value,"onUpdate:modelValue":n[0]||(n[0]=i=>r.value=i),type:"switch"},{default:w(()=>[V(v(e(o)("files_external","Allow people to mount external storage")),1)]),_:1},8,["modelValue"]),W(y("fieldset",{class:h(c.$style.userMountSettings__backends)},[y("legend",null,v(e(o)("files_external","External storage backends people are allowed to mount")),1),(u(!0),x(S,null,O(e(t),i=>(u(),k(e(E),{key:i.identifier,modelValue:d.value,"onUpdate:modelValue":n[1]||(n[1]=s=>d.value=s),value:i.identifier,name:"allowUserMountingBackends[]"},{default:w(()=>[V(v(i.name),1)]),_:2},1032,["modelValue","value"]))),128))],2),[[Y,r.value]])]))}}),Ka="_userMountSettings__heading_59moz_2",Wa="_userMountSettings__backends_59moz_9",Ya={userMountSettings__heading:Ka,userMountSettings__backends:Wa},Ja={$style:Ya},Xa=N(Za,[["__cssModules",Ja]]);const et=["aria-label"],at=U({__name:"ExternalStoragesSection",setup(l){const a=A("files_external","settings",{docUrl:"",dependencyIssues:{messages:null,modules:null},isAdmin:!1}),t=se(),r=a.dependencyIssues?.messages??[],d=a.dependencyIssues?.modules??{},c=M(!1),n=M();async function i(s){if(c.value=!1,!!s)try{a.isAdmin?await t.createGlobalStorage(s):await t.createUserStorage(s),n.value=void 0}catch(p){ve.error("Failed to add external storage",{error:p,storage:s}),n.value={...s},c.value=!0}}return(s,p)=>(u(),k(e(ce),{docUrl:e(a).docUrl,name:e(o)("files_external","External storage"),description:e(o)("files_external","External storage enables you to mount external storage services and devices as secondary Nextcloud storage devices.")+(e(a).isAdmin?" "+e(o)("files_external","You may also allow people to mount their own external storage services."):"")},{default:w(()=>[(u(!0),x(S,null,O(e(r),(_,m)=>(u(),k(e(re),{key:m,type:"error"},{default:w(()=>[V(v(_),1)]),_:2},1024))),128)),(u(!0),x(S,null,O(e(d),(_,m)=>(u(),k(e(re),{key:m,type:"warning"},{default:w(()=>[y("p",null,[m==="curl"?(u(),x(S,{key:0},[V(v(e(o)("files_external","The cURL support in PHP is not enabled or installed.")),1)],64)):m==="ftp"?(u(),x(S,{key:1},[V(v(e(o)("files_external","The FTP support in PHP is not enabled or installed.")),1)],64)):(u(),x(S,{key:2},[V(v(e(o)("files_external","{module} is not installed.",{module:m})),1)],64)),V(" "+v(e(Fe)("files_external","Please ask your system administrator to install it as otherwise mounting the following backend is not possible:","Please ask your system administrator to install it as otherwise mounting the following backends is not possible:",_.length)),1)]),y("ul",{class:h(s.$style.externalStoragesSection__dependantList),"aria-label":e(o)("files_external","Dependant backends")},[(u(!0),x(S,null,O(_,f=>(u(),x("li",{key:f},v(f),1))),128))],10,et)]),_:2},1024))),128)),T("",!0),b(za),b(e(P),{class:h(s.$style.externalStoragesSection__newStorageButton),variant:"primary",onClick:p[0]||(p[0]=_=>c.value=!c.value)},{icon:w(()=>[b(e(F),{path:e(Re)},null,8,["path"])]),default:w(()=>[V(" "+v(e(o)("files_external","Add external storage")),1)]),_:1},8,["class"]),b(xe,{open:c.value,"onUpdate:open":p[1]||(p[1]=_=>c.value=_),storage:n.value,onClose:i},null,8,["open","storage"]),e(a).isAdmin?(u(),k(Xa,{key:1})):T("",!0)]),_:1},8,["docUrl","name","description"]))}}),tt="_externalStoragesSection__dependantList_atsmn_2",lt="_externalStoragesSection__newStorageButton_atsmn_7",st={externalStoragesSection__dependantList:tt,externalStoragesSection__newStorageButton:lt},nt={$style:st},ot=N(at,[["__cssModules",nt]]),it=U({__name:"GlobalCredentialsSection",setup(l){const a=A("files_external","global-credentials"),t=M(!1),r=M(a.user),d=M(a.password);ge($);async function c(){try{t.value=!0;const{data:n}=await $.post(R("apps/files_external/globalcredentials"),{uid:a.uid,user:r.value,password:d.value},{confirmPassword:I.Strict});if(n){le(o("files_external","Global credentials saved"));return}}catch(n){ve.error(n)}finally{t.value=!1}te(o("files_external","Could not save global credentials")),r.value=a.user,d.value=a.password}return(n,i)=>(u(),k(e(ce),{name:e(o)("files_external","Global credentials"),description:e(o)("files_external","Global credentials can be used to authenticate with multiple external storages that have the same credentials.")},{default:w(()=>[y("form",{id:"global_credentials",class:h(n.$style.globalCredentialsSectionForm),autocomplete:"false",onSubmit:Ce(c,["prevent"])},[b(e(_e),{modelValue:r.value,"onUpdate:modelValue":i[0]||(i[0]=s=>r.value=s),name:"username",autocomplete:"false",label:e(o)("files_external","Login")},null,8,["modelValue","label"]),b(e(Le),{modelValue:d.value,"onUpdate:modelValue":i[1]||(i[1]=s=>d.value=s),name:"password",autocomplete:"false",label:e(o)("files_external","Password")},null,8,["modelValue","label"]),b(e(P),{class:h(n.$style.globalCredentialsSectionForm__submit),disabled:t.value,variant:"primary",type:"submit"},{default:w(()=>[V(v(t.value?e(o)("files_external","Saving …"):e(o)("files_external","Save")),1)]),_:1},8,["class","disabled"])],34)]),_:1},8,["name","description"]))}}),rt="_globalCredentialsSectionForm_bgjv2_2",ut="_globalCredentialsSectionForm__submit_bgjv2_10",dt={globalCredentialsSectionForm:rt,globalCredentialsSectionForm__submit:ut},ct={$style:dt},_t=N(it,[["__cssModules",ct]]),mt=U({__name:"FilesExternalSettings",setup(l){return(a,t)=>(u(),x(S,null,[b(ot),b(_t)],64))}}),pt=Me(),X=Ae(mt);X.config.idPrefix="files-external",X.use(pt),X.mount("#files-external");
+import{H as K,$ as W,N as pe,z as M,b as T,s as D,o as u,c as w,u as e,q as A,B as Z,g as h,l as y,k as b,t as g,F as C,E as Ae,D as q,U as J,V as X,i as O,y as Y,K as $e,a9 as z,Q as de,p as v,w as x,j as V,L as Ue,e as Te,f as Oe}from"./preload-helper-B3c9Y6Ia.chunk.mjs";import{t as qe,g as Ne,N as Ee,u as Pe,v as Re,l as Fe,w as je,s as Be,k as De}from"./mdi-AfC8gRDi.chunk.mjs";import{_ as N,l as $}from"./_plugin-vue_export-helper-CqVUm19z.chunk.mjs";import{t as i,a as Le}from"./index-BZ9H2NGr.chunk.mjs";import{N as R}from"./ArrowRight-DL6H-z1z.chunk.mjs";import"./NcEmptyContent-BDU5IM5c.chunk.mjs";import{N as j}from"./createElementId-Cu-wR4zW.chunk.mjs";import{N as ce}from"./TrashCanOutline-Tn7_xhh7.chunk.mjs";import{N as fe}from"./ContentCopy-DN1KQC63.chunk.mjs";import{N as se}from"./index-D2RZEKFP.chunk.mjs";import{_ as ge}from"./NcTextField.vue_vue_type_script_setup_true_lang-BTu3RnsG.chunk.mjs";import{c as U}from"./index-BFCx3SEP.chunk.mjs";import{b as P}from"./formatRelative-B6SwQwmy.chunk.mjs";import{N as He}from"./NcTextArea-ehyCfDZS.chunk.mjs";import{q as Ge}from"./NcModal-Bh42Y6HE.chunk.mjs";import"./NcActionButton-DNc0Bs06.chunk.mjs";/* empty css */import"./NcActionInput-qYasfuW3.chunk.mjs";import"./NcActionLink-C1G8aUyO.chunk.mjs";import"./NcActionRouter-FN3FEb6D.chunk.mjs";import"./NcActionSeparator-DnEqLSqe.chunk.mjs";import"./NcActionText-B653EuoW.chunk.mjs";import"./NcContent-BgWMGal5.chunk.mjs";import{N as ve}from"./Check-Cxn5cWmd.chunk.mjs";import"./NcAvatar-BlkWsJW8.chunk.mjs";import"./NcBreadcrumbs-D6oJoUUY.chunk.mjs";import{N as F}from"./NcCheckboxRadioSwitch-2CjUNBUY.chunk.mjs";import{N as Ie}from"./Plus-BSkC04AC.chunk.mjs";import"./index-RkBEckuu.chunk.mjs";import"./TrayArrowDown-xzSBfI2V.chunk.mjs";import"./NcDashboardWidget-c92lb0ps.chunk.mjs";import"./zh-TW-zkZioxfy.chunk.mjs";import"./NcEmojiPicker-d49o8dvl.chunk.mjs";import"./NcRichText-Ccug5ZUp.chunk.mjs";/* empty css */import"./Web-DMbMvGVQ.chunk.mjs";import{N as Qe}from"./NcPasswordField-DxfpRKbP.chunk.mjs";import"./NcProfileHoverCard-CKThmoWM.chunk.mjs";import"./index-BSZ1RJJ3.chunk.mjs";import"./index-B8IvtU3P.chunk.mjs";import"./NcSelectTags-Q0oukrz2.chunk.mjs";import{N as ze}from"./NcUserBubble-DP-lTV4_.chunk.mjs";import"./NcUserStatusIcon-NAlIfAHL.chunk.mjs";import"./emoji-CcAiuyxk.chunk.mjs";import"./PencilOutline-BXbwQVTF.chunk.mjs";import{C as be}from"./AuthMechanismRsa-CQ5BPS75.chunk.mjs";import{C as I,a as ye,M as B,S as L,b as Ze,c as Ke}from"./types-DCTrXMHN.chunk.mjs";import{a as he,P as Q}from"./index-BhZl0daN.chunk.mjs";import{p as We}from"./externalStorageUtils-B-QuSdG4.chunk.mjs";import{a as ne,d as oe}from"./index-BZUfSSUR.chunk.mjs";import{l as xe}from"./logger-D7OgyCxo.chunk.mjs";import"./public-CbrTZt0b.chunk.mjs";import"./autolink-CTGrhdQD.chunk.mjs";const Ye='',ee=pe(new Map),ae=pe(new Map),te=new Set;function we(l){const a=M(()=>W(l).map(t=>({id:`user:${t}`,user:t,displayName:ee.get(t)||t})));return K(async()=>{const t=W(l).filter(n=>!ee.has(n));if(t.length>0){const{data:n}=await U.post(P("/displaynames"),{users:t});for(const[d,c]of Object.entries(n.users))ee.set(d,c)}}),a}function ke(l){const a=M(()=>W(l).map(t=>Ve(t,ae.get(t))));return K(async()=>{const t=W(l).filter(n=>!ae.has(n)&&!te.has(n));t.forEach(n=>te.add(n));for(const n of t)try{const{data:d}=await U.get(P("apps/files_external/ajax/applicable"),{params:{pattern:n,limit:50}});ae.set(n,d.groups[n]??n)}finally{te.delete(n)}}),a}function Ve(l,a){return{id:l,isNoUser:!0,displayName:a||l,iconSvg:Ye}}const Je=T({__name:"ApplicableEntities",props:{groups:{default:()=>[]},groupsModifiers:{},users:{default:()=>[]},usersModifiers:{}},emits:["update:groups","update:users"],setup(l){const a=D(l,"groups"),t=D(l,"users"),n=A([]),d=we(t),c=ke(a),o=M({get(){return[...c.value,...d.value]},set(p){t.value=p.filter(_=>_.user).map(_=>_.user),a.value=p.filter(_=>_.isNoUser).map(_=>_.id)}}),r=Ge(s,500);async function s(p){const{data:_}=await U.get(P("apps/files_external/ajax/applicable"),{params:{pattern:p,limit:20}}),m=[...n.value.map(f=>[f.id,f]),...Object.entries(_.groups).map(([f,S])=>[f,{...Ve(f),displayName:S}]),...Object.entries(_.users).map(([f,S])=>[`user:${f}`,{id:`user:${f}`,user:f,displayName:S}])];n.value=[...new Map(m).values()]}return(p,_)=>(u(),w(e(He),{modelValue:o.value,"onUpdate:modelValue":_[0]||(_[0]=m=>o.value=m),keepOpen:"",multiple:"",options:n.value,inputLabel:e(i)("files_external","Restrict to"),onSearch:e(r)},null,8,["modelValue","options","inputLabel","onSearch"]))}}),Xe=T({__name:"AuthMechanismConfiguration",props:Y({authMechanism:{}},{modelValue:{required:!0},modelModifiers:{}}),emits:["update:modelValue"],setup(l){const a=D(l,"modelValue"),t=l,n=M(()=>{if(!t.authMechanism.configuration)return;const s=Object.entries(t.authMechanism.configuration).filter(([,p])=>!(p.flags&I.UserProvided));return Object.fromEntries(s)}),d=M(()=>window.OCA.FilesExternal.AuthMechanism.getHandler(t.authMechanism)),c=M(()=>{if(!n.value)return!1;for(const s of Object.values(n.value))if(!(s.flags&I.Hidden||s.flags&I.UserProvided))return!0;return!1}),o=A(!1);K(async()=>{d.value&&(o.value=!0,await window.customElements.whenDefined(d.value.tagName),o.value=!1)}),Z(n,()=>{for(const s in n.value)s in a.value||(a.value[s]=n.value[s]?.type===ye.Boolean?!1:"")});function r(s){const p=[s.detail].flat()[0];a.value={...a.value,...p}}return(s,p)=>c.value?(u(),h("fieldset",{key:0,class:y(s.$style.authMechanismConfiguration)},[b("legend",null,g(e(i)("files_external","Authentication")),1),d.value?(u(),h(C,{key:0},[o.value?(u(),w(e(ve),{key:0})):(u(),w(Ae(d.value.tagName),{key:1,".modelValue":a.value,".authMechanism":l.authMechanism,"onUpdate:modelValue":r},null,40,[".modelValue",".authMechanism"]))],64)):(u(!0),h(C,{key:1},q(n.value,(_,m)=>J((u(),w(be,{key:_.value,modelValue:a.value[m],"onUpdate:modelValue":f=>a.value[m]=f,"config-key":m,"config-option":_},null,8,["modelValue","onUpdate:modelValue","config-key","config-option"])),[[X,!(_.flags&e(I).Hidden)]])),128))],2)):O("",!0)}}),ea="_authMechanismConfiguration_kpcpy_2",aa={authMechanismConfiguration:ea},ta={$style:aa},la=N(Xe,[["__cssModules",ta]]),sa=T({__name:"BackendConfiguration",props:Y({configuration:{}},{modelValue:{required:!0},modelModifiers:{}}),emits:["update:modelValue"],setup(l){const a=D(l,"modelValue"),t=l;return Z(()=>t.configuration,()=>{for(const n in t.configuration)n in a.value||(a.value[n]=t.configuration[n]?.defaultValue??(t.configuration[n]?.type===ye.Boolean?!1:""))},{immediate:!0}),(n,d)=>(u(),h("fieldset",{class:y(n.$style.backendConfiguration)},[b("legend",null,g(e(i)("files_external","Storage configuration")),1),(u(!0),h(C,null,q(l.configuration,(c,o)=>J((u(),w(be,{key:c.value,modelValue:a.value[o],"onUpdate:modelValue":r=>a.value[o]=r,configKey:o,configOption:c},null,8,["modelValue","onUpdate:modelValue","configKey","configOption"])),[[X,!(c.flags&e(I).Hidden)]])),128))],2))}}),na="_backendConfiguration_1sf6y_2",oa={backendConfiguration:na},ia={$style:oa},ra=N(sa,[["__cssModules",ia]]),{isAdmin:ua}=$("files_external","settings"),da=Object.freeze({encrypt:!0,previews:!0,filesystem_check_changes:B.OncePerRequest,enable_sharing:!1,encoding_compatibility:!1,readonly:!1}),ie=$e("files_external--storages",()=>{const l=A([]),a=A([]);async function t(m){const f=P("apps/files_external/globalstorages"),{data:S}=await U.post(f,z(m),{confirmPassword:Q.Strict});l.value.push(H(S))}async function n(m){const f=P("apps/files_external/userstorages"),{data:S}=await U.post(f,z(m),{confirmPassword:Q.Strict});a.value.push(H(S))}async function d(m){await U.delete(p(m),{confirmPassword:Q.Strict}),m.type==="personal"?a.value=a.value.filter(f=>f.id!==m.id):l.value=l.value.filter(f=>f.id!==m.id)}async function c(m){const{data:f}=await U.put(p(m),z(m),{confirmPassword:Q.Strict});_(H(f))}async function o(m){const{data:f}=await U.get(p(m));_(H(f))}return s(),{globalStorages:l,userStorages:a,createGlobalStorage:t,createUserStorage:n,deleteStorage:d,reloadStorage:o,updateStorage:c};async function r(m){const f=`apps/files_external/${m}`,{data:S}=await U.get(P(f));return Object.values(S).map(H)}async function s(){he(U),ua?l.value=await r("globalstorages"):(a.value=await r("userstorages"),l.value=await r("userglobalstorages"))}function p(m){const f=m.type==="personal"?"userstorages":"globalstorages";return P(`apps/files_external/${f}/${m.id}`)}function _(m){if(m.type==="personal"){const f=a.value.findIndex(S=>S.id===m.id);a.value.splice(f,1,m)}else{const f=l.value.findIndex(S=>S.id===m.id);l.value.splice(f,1,m)}}});function H(l){return{...l,mountOptions:Se(l.mountOptions)}}function Se(l){const a={...l};return a.encrypt=G(a.encrypt,!0),a.previews=G(a.previews,!0),a.enable_sharing=G(a.enable_sharing,!1),a.filesystem_check_changes=typeof a.filesystem_check_changes=="string"?Number.parseInt(a.filesystem_check_changes):a.filesystem_check_changes??B.Never,a.encoding_compatibility=G(a.encoding_compatibility,!1),a.readonly=G(a.readonly,!1),a}function G(l,a=!1){return l===void 0?a:l===!0||l==="true"||l==="1"}const ca=["id","aria-labelledby"],_a=T({__name:"MountOptions",props:{modelValue:{required:!0},modelModifiers:{}},emits:["update:modelValue"],setup(l){const a=D(l,"modelValue");K(()=>{Object.keys(a.value).length===0&&(a.value=Se(a.value))});const{hasEncryption:t}=$("files_external","settings"),n=de(),d=de(),c=A(!1),o=[{label:i("files_external","Never"),value:B.Never},{label:i("files_external","Once every direct access"),value:B.OncePerRequest},{label:i("files_external","Always"),value:B.Always}],r=M({get(){return o.find(s=>s.value===a.value.filesystem_check_changes)},set(s){a.value.filesystem_check_changes=s?.value??B.OncePerRequest}});return(s,p)=>(u(),h("div",{class:y(s.$style.mountOptions)},[v(e(R),{id:e(n),"aria-controls":e(d),"aria-expanded":c.value,variant:"tertiary-no-background",onClick:p[0]||(p[0]=_=>c.value=!c.value)},{icon:x(()=>[v(e(j),{directional:"",path:c.value?e(qe):e(Ne)},null,8,["path"])]),default:x(()=>[V(" "+g(e(i)("files_external","Mount options")),1)]),_:1},8,["id","aria-controls","aria-expanded"]),J(b("fieldset",{id:e(d),class:y(s.$style.mountOptions__fieldset),"aria-labelledby":e(n)},[v(e(se),{modelValue:r.value,"onUpdate:modelValue":p[1]||(p[1]=_=>r.value=_),inputLabel:e(i)("files_external","Check filesystem changes"),options:o},null,8,["modelValue","inputLabel"]),v(e(F),{modelValue:l.modelValue.readonly,"onUpdate:modelValue":p[2]||(p[2]=_=>l.modelValue.readonly=_),type:"switch"},{default:x(()=>[V(g(e(i)("files_external","Read only")),1)]),_:1},8,["modelValue"]),v(e(F),{modelValue:l.modelValue.previews,"onUpdate:modelValue":p[3]||(p[3]=_=>l.modelValue.previews=_),type:"switch"},{default:x(()=>[V(g(e(i)("files_external","Enable previews")),1)]),_:1},8,["modelValue"]),v(e(F),{modelValue:l.modelValue.enable_sharing,"onUpdate:modelValue":p[4]||(p[4]=_=>l.modelValue.enable_sharing=_),type:"switch"},{default:x(()=>[V(g(e(i)("files_external","Enable sharing")),1)]),_:1},8,["modelValue"]),e(t)?(u(),w(e(F),{key:0,modelValue:l.modelValue.encrypt,"onUpdate:modelValue":p[5]||(p[5]=_=>l.modelValue.encrypt=_),type:"switch"},{default:x(()=>[V(g(e(i)("files_external","Enable encryption")),1)]),_:1},8,["modelValue"])):O("",!0),v(e(F),{modelValue:l.modelValue.encoding_compatibility,"onUpdate:modelValue":p[6]||(p[6]=_=>l.modelValue.encoding_compatibility=_),type:"switch"},{default:x(()=>[V(g(e(i)("files_external","Compatibility with Mac NFD encoding (slow)")),1)]),_:1},8,["modelValue"])],10,ca),[[X,c.value]])],2))}}),ma="_mountOptions_1fqyb_2",pa="_mountOptions__fieldset_1fqyb_12",fa={mountOptions:ma,mountOptions__fieldset:pa},ga={$style:fa},va=N(_a,[["__cssModules",ga]]),{isAdmin:_e}=$("files_external","settings"),ba=$("files_external","allowedBackends"),me=$("files_external","backends").filter(l=>ba.includes(l.identifier)),ya=$("files_external","authMechanisms"),ha=T({__name:"AddExternalStorageDialog",props:Y({storage:{default:()=>({backendOptions:{},mountOptions:{...da},type:_e?"system":"personal"})}},{open:{type:Boolean,default:!0},openModifiers:{}}),emits:Y(["close"],["update:open"]),setup(l){const a=D(l,"open"),t=A(structuredClone(z(l.storage)));K(()=>{a.value&&(t.value=structuredClone(z(l.storage)))});const n=M({get(){return me.find(o=>o.identifier===t.value.backend)},set(o){t.value.backend=o?.identifier}}),d=M(()=>ya.filter(({scheme:o})=>n.value?.authSchemes[o])),c=M({get(){return d.value.find(o=>o.identifier===t.value.authMechanism)},set(o){const r=d.value.find(s=>s.identifier===t.value.authMechanism);r&&r.identifier!==o?.identifier&&t.value.backendOptions&&We(t.value.backendOptions,r.configuration,[o?.configuration,n.value?.configuration]),t.value.authMechanism=o?.identifier}});return Z(d,()=>{d.value.length===1&&(t.value.authMechanism=d.value[0].identifier)}),(o,r)=>(u(),w(e(Ee),{open:a.value,"onUpdate:open":[r[9]||(r[9]=s=>a.value=s),r[11]||(r[11]=s=>s||o.$emit("close"))],isForm:"",contentClasses:o.$style.externalStorageDialog,name:t.value.id?e(i)("files_external","Edit storage"):e(i)("files_external","Add storage"),onSubmit:r[10]||(r[10]=s=>o.$emit("close",t.value))},{actions:x(()=>[l.storage.id?(u(),w(e(R),{key:0,onClick:r[8]||(r[8]=s=>o.$emit("close"))},{default:x(()=>[V(g(e(i)("files_external","Cancel")),1)]),_:1})):O("",!0),v(e(R),{variant:"primary",type:"submit"},{default:x(()=>[V(g(l.storage.id?e(i)("files_external","Edit"):e(i)("files_external","Create")),1)]),_:1})]),default:x(()=>[v(e(ge),{modelValue:t.value.mountPoint,"onUpdate:modelValue":r[0]||(r[0]=s=>t.value.mountPoint=s),label:e(i)("files_external","Folder name"),required:""},null,8,["modelValue","label"]),v(va,{modelValue:t.value.mountOptions,"onUpdate:modelValue":r[1]||(r[1]=s=>t.value.mountOptions=s)},null,8,["modelValue"]),e(_e)?(u(),w(Je,{key:0,groups:t.value.applicableGroups,"onUpdate:groups":r[2]||(r[2]=s=>t.value.applicableGroups=s),users:t.value.applicableUsers,"onUpdate:users":r[3]||(r[3]=s=>t.value.applicableUsers=s),class:y(o.$style.externalStorageDialog__dropdown)},null,8,["groups","users","class"])):O("",!0),v(e(se),{modelValue:n.value,"onUpdate:modelValue":r[4]||(r[4]=s=>n.value=s),options:e(me),disabled:!!(t.value.id&&t.value.backend),inputLabel:e(i)("files_external","External storage"),class:y(o.$style.externalStorageDialog__dropdown),label:"name",required:""},null,8,["modelValue","options","disabled","inputLabel","class"]),v(e(se),{modelValue:c.value,"onUpdate:modelValue":r[5]||(r[5]=s=>c.value=s),options:d.value,disabled:!t.value.backend||d.value.length<=1,inputLabel:e(i)("files_external","Authentication"),class:y(o.$style.externalStorageDialog__dropdown),label:"name",required:""},null,8,["modelValue","options","disabled","inputLabel","class"]),n.value&&t.value.backendOptions?(u(),w(ra,{key:1,modelValue:t.value.backendOptions,"onUpdate:modelValue":r[6]||(r[6]=s=>t.value.backendOptions=s),class:y(o.$style.externalStorageDialog__configuration),configuration:n.value.configuration},null,8,["modelValue","class","configuration"])):O("",!0),c.value&&t.value.backendOptions?(u(),w(la,{key:2,modelValue:t.value.backendOptions,"onUpdate:modelValue":r[7]||(r[7]=s=>t.value.backendOptions=s),class:y(o.$style.externalStorageDialog__configuration),authMechanism:c.value},null,8,["modelValue","class","authMechanism"])):O("",!0)]),_:1},8,["open","contentClasses","name"]))}}),xa="_externalStorageDialog_l5jv4_2",wa="_externalStorageDialog__configuration_l5jv4_9",ka="_externalStorageDialog__dropdown_l5jv4_13",Va={externalStorageDialog:xa,externalStorageDialog__configuration:wa,externalStorageDialog__dropdown:ka},Sa={$style:Va},Ce=N(ha,[["__cssModules",Sa]]),Ca={class:"hidden-visually"},Ma={key:0},Aa=T({__name:"ExternalStorageTableRow",props:{storage:{},isAdmin:{type:Boolean}},setup(l){const a=l,t=ie(),n=$("files_external","backends"),d=M(()=>n.find(k=>k.identifier===a.storage.backend).name),c=$("files_external","authMechanisms"),o=M(()=>c.find(k=>k.identifier===a.storage.authMechanism).name),r=A(!1),s=M(()=>{if(r.value)return{icon:"loading",label:i("files_external","Checking …")};const k=a.storage.status??L.Indeterminate,re=a.storage.statusMessage||Ze[k],E=Ke[k],ue=k===L.NetworkError||k===L.Timeout,Me=!ue&&k!==L.Success&&k!==L.Indeterminate;return{icon:E,label:re,isWarning:ue,isError:Me}}),p=we(()=>a.storage.applicableUsers||[]),_=ke(()=>a.storage.applicableGroups||[]);async function m(){await t.deleteStorage(a.storage)}async function f(){const k=await Be(Ce,{storage:a.storage});k&&await t.updateStorage(k)}async function S(){r.value=!0;try{await t.reloadStorage(a.storage)}finally{r.value=!1}}return(k,re)=>(u(),h("tr",{class:y(k.$style.storageTableRow)},[b("td",null,[b("span",Ca,g(s.value.label),1),v(e(R),{"aria-label":e(i)("files_external","Recheck status"),title:s.value.label,variant:"tertiary-no-background",onClick:S},{icon:x(()=>[s.value.icon==="loading"?(u(),w(e(ve),{key:0})):(u(),w(e(j),{key:1,class:y({[k.$style.storageTableRow__status_error]:s.value.isError,[k.$style.storageTableRow__status_warning]:s.value.isWarning}),path:s.value.icon},null,8,["class","path"]))]),_:1},8,["aria-label","title"])]),b("td",null,g(l.storage.mountPoint),1),b("td",null,g(d.value),1),b("td",null,g(o.value),1),l.isAdmin?(u(),h("td",Ma,[b("div",{class:y(k.$style.storageTableRow__cellApplicable)},[(u(!0),h(C,null,q(e(_),E=>(u(),w(e(Ie),{key:E.id,iconPath:e(Pe),noClose:"",text:E.displayName},null,8,["iconPath","text"]))),128)),(u(!0),h(C,null,q(e(p),E=>(u(),w(e(ze),{key:E.user,displayName:E.displayName,size:24,user:E.user},null,8,["displayName","user"]))),128))],2)])):O("",!0),b("td",null,[l.isAdmin||l.storage.type==="personal"?(u(),h("div",{key:0,class:y(k.$style.storageTableRow__cellActions)},[v(e(R),{"aria-label":e(i)("files_external","Edit"),title:e(i)("files_external","Edit"),onClick:f},{icon:x(()=>[v(e(j),{path:e(Re)},null,8,["path"])]),_:1},8,["aria-label","title"]),v(e(R),{"aria-label":e(i)("files_external","Delete"),title:e(i)("files_external","Delete"),variant:"error",onClick:m},{icon:x(()=>[v(e(j),{path:e(Fe)},null,8,["path"])]),_:1},8,["aria-label","title"])],2)):(u(),w(e(j),{key:1,inline:"",path:e(je),name:e(i)("files_external","System provided storage"),title:e(i)("files_external","System provided storage")},null,8,["path","name","title"]))])],2))}}),$a="_storageTableRow__cellActions_goqfw_2",Ua="_storageTableRow__cellApplicable_goqfw_7",Ta="_storageTableRow__status_warning_goqfw_17",Oa="_storageTableRow__status_error_goqfw_21",qa={storageTableRow__cellActions:$a,storageTableRow__cellApplicable:Ua,storageTableRow__status_warning:Ta,storageTableRow__status_error:Oa},Na={$style:qa},Ea=N(Aa,[["__cssModules",Na]]),Pa=["aria-label"],Ra={class:"hidden-visually"},Fa={key:0},ja={class:"hidden-visually"},Ba=T({__name:"ExternalStorageTable",setup(l){const a=ie(),{isAdmin:t}=$("files_external","settings"),n=M(()=>t?a.globalStorages:[...a.userStorages,...a.globalStorages]);return(d,c)=>(u(),h("table",{class:y(d.$style.storageTable),"aria-label":e(i)("files_external","External storages")},[b("thead",{class:y(d.$style.storageTable__header)},[b("tr",null,[b("th",{class:y(d.$style.storageTable__headerStatus)},[b("span",Ra,g(e(i)("files_external","Status")),1)],2),b("th",{class:y(d.$style.storageTable__headerFolder)},g(e(i)("files_external","Folder name")),3),b("th",{class:y(d.$style.storageTable__headerBackend)},g(e(i)("files_external","External storage")),3),b("th",{class:y(d.$style.storageTable__headerAuthentication)},g(e(i)("files_external","Authentication")),3),e(t)?(u(),h("th",Fa,g(e(i)("files_external","Restricted to")),1)):O("",!0),b("th",{class:y(d.$style.storageTable__headerActions)},[b("span",ja,g(e(i)("files_external","Actions")),1)],2)])],2),b("tbody",null,[(u(!0),h(C,null,q(n.value,o=>(u(),w(Ea,{key:o.id,isAdmin:e(t),storage:o},null,8,["isAdmin","storage"]))),128))])],10,Pa))}}),Da="_storageTable_1dqte_2",La="_storageTable__header_1dqte_11",Ha="_storageTable__headerStatus_1dqte_16",Ga="_storageTable__headerFolder_1dqte_20",Ia="_storageTable__headerBackend_1dqte_24",Qa="_storageTable__headerFAuthentication_1dqte_28",za="_storageTable__headerActions_1dqte_32",Za={storageTable:Da,storageTable__header:La,storageTable__headerStatus:Ha,storageTable__headerFolder:Ga,storageTable__headerBackend:Ia,storageTable__headerFAuthentication:Qa,storageTable__headerActions:za},Ka={$style:Za},Wa=N(Ba,[["__cssModules",Ka]]),Ya=T({__name:"UserMountSettings",setup(l){const a=$("files_external","user-mounting"),t=$("files_external","backends").filter(c=>c.identifier!=="local"),n=A(a.allowUserMounting),d=A(a.allowedBackends);return Z(n,()=>{const c=!n.value;window.OCP.AppConfig.setValue("files_external","allow_user_mounting",n.value?"yes":"no",{success:()=>oe(i("files_external","Saved")),error:()=>{n.value=c,ne(i("files_external","Error while saving"))}})}),Z(d,(c,o)=>{window.OCP.AppConfig.setValue("files_external","user_mounting_backends",c.join(","),{success:()=>oe(i("files_external","Saved allowed backends")),error:()=>{ne(i("files_external","Failed to save allowed backends")),d.value=o}})}),(c,o)=>(u(),h("form",null,[b("h3",{class:y(c.$style.userMountSettings__heading)},g(e(i)("files_external","Advanced options for external storage mounts")),3),v(e(F),{modelValue:n.value,"onUpdate:modelValue":o[0]||(o[0]=r=>n.value=r),type:"switch"},{default:x(()=>[V(g(e(i)("files_external","Allow people to mount external storage")),1)]),_:1},8,["modelValue"]),J(b("fieldset",{class:y(c.$style.userMountSettings__backends)},[b("legend",null,g(e(i)("files_external","External storage backends people are allowed to mount")),1),(u(!0),h(C,null,q(e(t),r=>(u(),w(e(F),{key:r.identifier,modelValue:d.value,"onUpdate:modelValue":o[1]||(o[1]=s=>d.value=s),value:r.identifier,name:"allowUserMountingBackends[]"},{default:x(()=>[V(g(r.name),1)]),_:2},1032,["modelValue","value"]))),128))],2),[[X,n.value]])]))}}),Ja="_userMountSettings__heading_59moz_2",Xa="_userMountSettings__backends_59moz_9",et={userMountSettings__heading:Ja,userMountSettings__backends:Xa},at={$style:et},tt=N(Ya,[["__cssModules",at]]);const lt=["aria-label"],st=T({__name:"ExternalStoragesSection",setup(l){const a=$("files_external","settings",{docUrl:"",dependencyIssues:{messages:null,modules:null},isAdmin:!1}),t=ie(),n=a.dependencyIssues?.messages??[],d=a.dependencyIssues?.modules??{},c=A(!1),o=A();async function r(s){if(c.value=!1,!!s)try{a.isAdmin?await t.createGlobalStorage(s):await t.createUserStorage(s),o.value=void 0}catch(p){xe.error("Failed to add external storage",{error:p,storage:s}),o.value={...s},c.value=!0}}return(s,p)=>(u(),w(e(fe),{docUrl:e(a).docUrl,name:e(i)("files_external","External storage"),description:e(i)("files_external","External storage enables you to mount external storage services and devices as secondary Nextcloud storage devices.")+(e(a).isAdmin?" "+e(i)("files_external","You may also allow people to mount their own external storage services."):"")},{default:x(()=>[(u(!0),h(C,null,q(e(n),(_,m)=>(u(),w(e(ce),{key:m,type:"error"},{default:x(()=>[V(g(_),1)]),_:2},1024))),128)),(u(!0),h(C,null,q(e(d),(_,m)=>(u(),w(e(ce),{key:m,type:"warning"},{default:x(()=>[b("p",null,[m==="curl"?(u(),h(C,{key:0},[V(g(e(i)("files_external","The cURL support in PHP is not enabled or installed.")),1)],64)):m==="ftp"?(u(),h(C,{key:1},[V(g(e(i)("files_external","The FTP support in PHP is not enabled or installed.")),1)],64)):(u(),h(C,{key:2},[V(g(e(i)("files_external","{module} is not installed.",{module:m})),1)],64)),V(" "+g(e(Le)("files_external","Please ask your system administrator to install it as otherwise mounting the following backend is not possible:","Please ask your system administrator to install it as otherwise mounting the following backends is not possible:",_.length)),1)]),b("ul",{class:y(s.$style.externalStoragesSection__dependantList),"aria-label":e(i)("files_external","Dependant backends")},[(u(!0),h(C,null,q(_,f=>(u(),h("li",{key:f},g(f),1))),128))],10,lt)]),_:2},1024))),128)),O("",!0),v(Wa),v(e(R),{class:y(s.$style.externalStoragesSection__newStorageButton),variant:"primary",onClick:p[0]||(p[0]=_=>c.value=!c.value)},{icon:x(()=>[v(e(j),{path:e(De)},null,8,["path"])]),default:x(()=>[V(" "+g(e(i)("files_external","Add external storage")),1)]),_:1},8,["class"]),v(Ce,{open:c.value,"onUpdate:open":p[1]||(p[1]=_=>c.value=_),storage:o.value,onClose:r},null,8,["open","storage"]),e(a).isAdmin?(u(),w(tt,{key:1})):O("",!0)]),_:1},8,["docUrl","name","description"]))}}),nt="_externalStoragesSection__dependantList_atsmn_2",ot="_externalStoragesSection__newStorageButton_atsmn_7",it={externalStoragesSection__dependantList:nt,externalStoragesSection__newStorageButton:ot},rt={$style:it},ut=N(st,[["__cssModules",rt]]),dt=T({__name:"GlobalCredentialsSection",setup(l){const a=$("files_external","global-credentials"),t=A(!1),n=A(a.user),d=A(a.password);he(U);async function c(){try{t.value=!0;const{data:o}=await U.post(P("apps/files_external/globalcredentials"),{uid:a.uid,user:n.value,password:d.value},{confirmPassword:Q.Strict});if(o){oe(i("files_external","Global credentials saved"));return}}catch(o){xe.error(o)}finally{t.value=!1}ne(i("files_external","Could not save global credentials")),n.value=a.user,d.value=a.password}return(o,r)=>(u(),w(e(fe),{name:e(i)("files_external","Global credentials"),description:e(i)("files_external","Global credentials can be used to authenticate with multiple external storages that have the same credentials.")},{default:x(()=>[b("form",{id:"global_credentials",class:y(o.$style.globalCredentialsSectionForm),autocomplete:"false",onSubmit:Ue(c,["prevent"])},[v(e(ge),{modelValue:n.value,"onUpdate:modelValue":r[0]||(r[0]=s=>n.value=s),name:"username",autocomplete:"false",label:e(i)("files_external","Login")},null,8,["modelValue","label"]),v(e(Qe),{modelValue:d.value,"onUpdate:modelValue":r[1]||(r[1]=s=>d.value=s),name:"password",autocomplete:"false",label:e(i)("files_external","Password")},null,8,["modelValue","label"]),v(e(R),{class:y(o.$style.globalCredentialsSectionForm__submit),disabled:t.value,variant:"primary",type:"submit"},{default:x(()=>[V(g(t.value?e(i)("files_external","Saving …"):e(i)("files_external","Save")),1)]),_:1},8,["class","disabled"])],34)]),_:1},8,["name","description"]))}}),ct="_globalCredentialsSectionForm_bgjv2_2",_t="_globalCredentialsSectionForm__submit_bgjv2_10",mt={globalCredentialsSectionForm:ct,globalCredentialsSectionForm__submit:_t},pt={$style:mt},ft=N(dt,[["__cssModules",pt]]),gt=T({__name:"FilesExternalSettings",setup(l){return(a,t)=>(u(),h(C,null,[v(ut),v(ft)],64))}}),vt=Te(),le=Oe(gt);le.config.idPrefix="files-external",le.use(vt),le.mount("#files-external");
//# sourceMappingURL=files_external-settings.mjs.map
diff --git a/dist/files_external-settings.mjs.map b/dist/files_external-settings.mjs.map
index a3bb4172bb32d..ab3fa1deb5c1d 100644
--- a/dist/files_external-settings.mjs.map
+++ b/dist/files_external-settings.mjs.map
@@ -1 +1 @@
-{"version":3,"file":"files_external-settings.mjs","sources":["../node_modules/@mdi/svg/svg/account-group-outline.svg?raw","../build/frontend/apps/files_external/src/composables/useEntities.ts","../build/frontend/apps/files_external/src/components/AddExternalStorageDialog/ApplicableEntities.vue","../build/frontend/apps/files_external/src/components/AddExternalStorageDialog/AuthMechanismConfiguration.vue","../build/frontend/apps/files_external/src/components/AddExternalStorageDialog/BackendConfiguration.vue","../build/frontend/apps/files_external/src/store/storages.ts","../build/frontend/apps/files_external/src/components/AddExternalStorageDialog/MountOptions.vue","../build/frontend/apps/files_external/src/components/AddExternalStorageDialog/AddExternalStorageDialog.vue","../build/frontend/apps/files_external/src/components/ExternalStorageTableRow.vue","../build/frontend/apps/files_external/src/components/ExternalStorageTable.vue","../build/frontend/apps/files_external/src/components/UserMountSettings.vue","../build/frontend/apps/files_external/src/views/ExternalStoragesSection.vue","../build/frontend/apps/files_external/src/views/GlobalCredentialsSection.vue","../build/frontend/apps/files_external/src/views/FilesExternalSettings.vue","../build/frontend/apps/files_external/src/settings-main.ts"],"sourcesContent":["export default \"\"","/*!\n * SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport type { MaybeRefOrGetter } from 'vue'\n\nimport svgAccountGroupOutline from '@mdi/svg/svg/account-group-outline.svg?raw'\nimport axios from '@nextcloud/axios'\nimport { generateUrl } from '@nextcloud/router'\nimport { computed, reactive, toValue, watchEffect } from 'vue'\n\nconst displayNames = reactive(new Map())\n\n/**\n * Fetch and provide user display names for given UIDs\n *\n * @param uids - The user ids to fetch display names for\n */\nexport function useUsers(uids: MaybeRefOrGetter) {\n\tconst users = computed(() => toValue(uids).map((uid) => ({\n\t\tid: `user:${uid}`,\n\t\tuser: uid,\n\t\tdisplayName: displayNames.get(uid) || uid,\n\t})))\n\n\twatchEffect(async () => {\n\t\tconst missingUsers = toValue(uids).filter((uid) => !displayNames.has(uid))\n\t\tif (missingUsers.length > 0) {\n\t\t\tconst { data } = await axios.post(generateUrl('/displaynames'), {\n\t\t\t\tusers: missingUsers,\n\t\t\t})\n\t\t\tfor (const [uid, displayName] of Object.entries(data.users)) {\n\t\t\t\tdisplayNames.set(uid, displayName as string)\n\t\t\t}\n\t\t}\n\t})\n\n\treturn users\n}\n\n/**\n * Map group ids to IUserData objects\n *\n * @param gids - The group ids to create entities for\n */\nexport function useGroups(gids: MaybeRefOrGetter) {\n\treturn computed(() => toValue(gids).map(mapGroupToUserData))\n}\n\n/**\n * Map a group id to an IUserData object\n *\n * @param gid - The group id to map\n */\nexport function mapGroupToUserData(gid: string) {\n\treturn {\n\t\tid: gid,\n\t\tisNoUser: true,\n\t\tdisplayName: gid,\n\t\ticonSvg: svgAccountGroupOutline,\n\t}\n}\n","\n\n\n\n\n\t\n\n","\n\n\n\n\n\t\n\n\n\n","\n\n\n\n\n\t\n\n\n\n","/*!\n * SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport type { IMountOptions, IStorage } from '../types.ts'\n\nimport axios from '@nextcloud/axios'\nimport { loadState } from '@nextcloud/initial-state'\nimport { addPasswordConfirmationInterceptors, PwdConfirmationMode } from '@nextcloud/password-confirmation'\nimport { generateUrl } from '@nextcloud/router'\nimport { defineStore } from 'pinia'\nimport { ref, toRaw } from 'vue'\nimport { MountOptionsCheckFilesystem } from '../types.ts'\n\nconst { isAdmin } = loadState<{ isAdmin: boolean }>('files_external', 'settings')\n\n/** The default mount options for NEW storages (not the defaults applied if a config is missing!) */\nexport const DEFAULT_MOUNT_OPTIONS: IMountOptions = Object.freeze({\n\tencrypt: true,\n\tpreviews: true,\n\tfilesystem_check_changes: MountOptionsCheckFilesystem.OncePerRequest,\n\tenable_sharing: false,\n\tencoding_compatibility: false,\n\treadonly: false,\n})\n\nexport const useStorages = defineStore('files_external--storages', () => {\n\tconst globalStorages = ref([])\n\tconst userStorages = ref([])\n\n\t/**\n\t * Create a new global storage\n\t *\n\t * @param storage - The storage to create\n\t */\n\tasync function createGlobalStorage(storage: Partial) {\n\t\tconst url = generateUrl('apps/files_external/globalstorages')\n\t\tconst { data } = await axios.post(\n\t\t\turl,\n\t\t\ttoRaw(storage),\n\t\t\t{ confirmPassword: PwdConfirmationMode.Strict },\n\t\t)\n\t\tglobalStorages.value.push(parseStorage(data))\n\t}\n\n\t/**\n\t * Create a new global storage\n\t *\n\t * @param storage - The storage to create\n\t */\n\tasync function createUserStorage(storage: Partial) {\n\t\tconst url = generateUrl('apps/files_external/userstorages')\n\t\tconst { data } = await axios.post(\n\t\t\turl,\n\t\t\ttoRaw(storage),\n\t\t\t{ confirmPassword: PwdConfirmationMode.Strict },\n\t\t)\n\t\tuserStorages.value.push(parseStorage(data))\n\t}\n\n\t/**\n\t * Delete a storage\n\t *\n\t * @param storage - The storage to delete\n\t */\n\tasync function deleteStorage(storage: IStorage) {\n\t\tawait axios.delete(getUrl(storage), {\n\t\t\tconfirmPassword: PwdConfirmationMode.Strict,\n\t\t})\n\n\t\tif (storage.type === 'personal') {\n\t\t\tuserStorages.value = userStorages.value.filter((s) => s.id !== storage.id)\n\t\t} else {\n\t\t\tglobalStorages.value = globalStorages.value.filter((s) => s.id !== storage.id)\n\t\t}\n\t}\n\n\t/**\n\t * Update an existing storage\n\t *\n\t * @param storage - The storage to update\n\t */\n\tasync function updateStorage(storage: IStorage) {\n\t\tconst { data } = await axios.put(\n\t\t\tgetUrl(storage),\n\t\t\ttoRaw(storage),\n\t\t\t{ confirmPassword: PwdConfirmationMode.Strict },\n\t\t)\n\n\t\toverrideStorage(parseStorage(data))\n\t}\n\n\t/**\n\t * Reload a storage from the server\n\t *\n\t * @param storage - The storage to reload\n\t */\n\tasync function reloadStorage(storage: IStorage) {\n\t\tconst { data } = await axios.get(getUrl(storage))\n\t\toverrideStorage(parseStorage(data))\n\t}\n\n\t// initialize the store\n\tinitialize()\n\n\treturn {\n\t\tglobalStorages,\n\t\tuserStorages,\n\n\t\tcreateGlobalStorage,\n\t\tcreateUserStorage,\n\t\tdeleteStorage,\n\t\treloadStorage,\n\t\tupdateStorage,\n\t}\n\n\t/**\n\t * @param type - The type of storages to load\n\t */\n\tasync function loadStorages(type: string) {\n\t\tconst url = `apps/files_external/${type}`\n\t\tconst { data } = await axios.get>(generateUrl(url))\n\t\treturn Object.values(data)\n\t\t\t.map(parseStorage)\n\t}\n\n\t/**\n\t * Load the storages based on the user role\n\t */\n\tasync function initialize() {\n\t\taddPasswordConfirmationInterceptors(axios)\n\n\t\tif (isAdmin) {\n\t\t\tglobalStorages.value = await loadStorages('globalstorages')\n\t\t} else {\n\t\t\tuserStorages.value = await loadStorages('userstorages')\n\t\t\tglobalStorages.value = await loadStorages('userglobalstorages')\n\t\t}\n\t}\n\n\t/**\n\t * @param storage - The storage to get the URL for\n\t */\n\tfunction getUrl(storage: IStorage) {\n\t\tconst type = storage.type === 'personal' ? 'userstorages' : 'globalstorages'\n\t\treturn generateUrl(`apps/files_external/${type}/${storage.id}`)\n\t}\n\n\t/**\n\t * Override a storage in the store\n\t *\n\t * @param storage - The storage save\n\t */\n\tfunction overrideStorage(storage: IStorage) {\n\t\tif (storage.type === 'personal') {\n\t\t\tconst index = userStorages.value.findIndex((s) => s.id === storage.id)\n\t\t\tuserStorages.value.splice(index, 1, storage)\n\t\t} else {\n\t\t\tconst index = globalStorages.value.findIndex((s) => s.id === storage.id)\n\t\t\tglobalStorages.value.splice(index, 1, storage)\n\t\t}\n\t}\n})\n\n/**\n * @param storage - The storage from API\n */\nfunction parseStorage(storage: IStorage) {\n\treturn {\n\t\t...storage,\n\t\tmountOptions: parseMountOptions(storage.mountOptions),\n\t}\n}\n\n/**\n * Parse the mount options and convert string boolean values to\n * actual booleans and numeric strings to numbers\n *\n * @param options - The mount options to parse\n */\nexport function parseMountOptions(options: IStorage['mountOptions']) {\n\tconst mountOptions = { ...options }\n\tmountOptions.encrypt = convertBooleanOptions(mountOptions.encrypt, true)\n\tmountOptions.previews = convertBooleanOptions(mountOptions.previews, true)\n\tmountOptions.enable_sharing = convertBooleanOptions(mountOptions.enable_sharing, false)\n\tmountOptions.filesystem_check_changes = typeof mountOptions.filesystem_check_changes === 'string'\n\t\t? Number.parseInt(mountOptions.filesystem_check_changes)\n\t\t: (mountOptions.filesystem_check_changes ?? MountOptionsCheckFilesystem.Never) // see default: https://github.com/nextcloud/server/blob/573104451bca64b4f1676933ac029583b4b69992/lib/private/Files/Storage/Common.php#L367\n\tmountOptions.encoding_compatibility = convertBooleanOptions(mountOptions.encoding_compatibility, false)\n\tmountOptions.readonly = convertBooleanOptions(mountOptions.readonly, false)\n\treturn mountOptions\n}\n\n/**\n * Convert backend encoding of boolean options\n *\n * @param option - The option value from API\n * @param fallback - The fallback (default) value\n */\nfunction convertBooleanOptions(option: unknown, fallback = false) {\n\tif (option === undefined) {\n\t\treturn fallback\n\t}\n\treturn option === true || option === 'true' || option === '1'\n}\n","\n\n\n\n\n\t
\n\t\t\t\t\n\t\t\t\t\t{{ t('files_external', 'The cURL support in PHP is not enabled or installed.') }}\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t{{ t('files_external', 'The FTP support in PHP is not enabled or installed.') }}\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t{{ t('files_external', '{module} is not installed.', { module }) }}\n\t\t\t\t\n\t\t\t\t{{ n(\n\t\t\t\t\t'files_external',\n\t\t\t\t\t'Please ask your system administrator to install it as otherwise mounting the following backend is not possible:',\n\t\t\t\t\t'Please ask your system administrator to install it as otherwise mounting the following backends is not possible:',\n\t\t\t\t\tdependants.length,\n\t\t\t\t) }}\n\t\t\t
\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t{{ backend }}\n\t\t\t\t
\n\t\t\t
\n\t\t\n\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\n\t\t\n\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t{{ t('files_external', 'Add external storage') }}\n\t\t\n\n\t\t\n\n\t\t\n\t\n\n\n\n","\n\n\n\n\n\t\n\t\t\n\t\n\n\n\n","\n\n\n\n\t\n\t\n\n","/*!\n * SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { createPinia } from 'pinia'\nimport { createApp } from 'vue'\nimport FilesExternalApp from './views/FilesExternalSettings.vue'\n\nconst pinia = createPinia()\nconst app = createApp(FilesExternalApp)\napp.config.idPrefix = 'files-external'\napp.use(pinia)\napp.mount('#files-external')\n"],"names":["svgAccountGroupOutline","displayNames","reactive","useUsers","uids","users","computed","toValue","uid","watchEffect","missingUsers","data","axios","generateUrl","displayName","useGroups","gids","mapGroupToUserData","gid","groups","_useModel","__props","entities","ref","selectedUsers","selectedGroups","model","value","u","g","debouncedSearch","useDebounceFn","onSearch","pattern","newEntries","e","id","_createBlock","_unref","NcSelectUsers","$event","t","modelValue","props","configuration","entries","option","ConfigurationFlag","customComponent","hasConfiguration","isLoadingCustomComponent","watch","key","ConfigurationType","onUpdateModelValue","event","config","_createElementBlock","_normalizeClass","$style","_createElementVNode","_Fragment","NcLoadingIcon","_resolveDynamicComponent","_openBlock","_renderList","configOption","configKey","ConfigurationEntry","_vShow","isAdmin","loadState","DEFAULT_MOUNT_OPTIONS","MountOptionsCheckFilesystem","useStorages","defineStore","globalStorages","userStorages","createGlobalStorage","storage","url","toRaw","PwdConfirmationMode","parseStorage","createUserStorage","deleteStorage","getUrl","s","updateStorage","overrideStorage","reloadStorage","initialize","loadStorages","type","addPasswordConfirmationInterceptors","index","parseMountOptions","options","mountOptions","convertBooleanOptions","fallback","hasEncryption","idButton","useId","idFieldset","isExpanded","checkFilesystemOptions","checkFilesystem","_createVNode","NcButton","_cache","NcIconSvgWrapper","mdiChevronDown","mdiChevronRight","_createTextVNode","NcSelect","NcCheckboxRadioSwitch","allowedBackendIds","backends","b","allAuthMechanisms","open","internalStorage","backend","authMechanisms","scheme","authMechanism","a","previous","pruneUnusedAuthMechanismOptions","NcDialog","$emit","_toDisplayString","NcTextField","MountOptions","ApplicableEntities","BackendConfiguration","AuthMechanismConfiguration","store","backendName","authMechanismName","checkingStatus","status","StorageStatus","label","StorageStatusMessage","icon","StorageStatusIcons","isWarning","isError","onDelete","onEdit","spawnDialog","AddExternalStorageDialog","reloadStatus","_hoisted_1","_hoisted_2","group","NcChip","mdiAccountGroupOutline","user","NcUserBubble","mdiPencilOutline","mdiTrashCanOutline","mdiInformationOutline","storages","_hoisted_4","ExternalStorageTableRow","userMounting","availableBackends","allowUserMounting","allowedBackends","backupValue","showSuccess","showError","newValue","oldValue","settings","dependencyIssues","missingModules","showDialog","newStorage","addStorage","error","logger","NcSettingsSection","message","NcNoteCard","dependants","module","n","ExternalStorageTable","mdiPlus","UserMountSettings","globalCredentials","loading","username","password","onSubmit","NcPasswordField","ExternalStoragesSection","GlobalCredentialsSection","pinia","createPinia","app","createApp","FilesExternalApp"],"mappings":"6yFAAA,MAAAA,GAAe,2jCCYTC,EAAeC,GAAS,IAAI,GAAqB,EAOhD,SAASC,GAASC,EAAkC,CAC1D,MAAMC,EAAQC,EAAS,IAAMC,GAAQH,CAAI,EAAE,IAAKI,IAAS,CACxD,GAAI,QAAQA,CAAG,GACf,KAAMA,EACN,YAAaP,EAAa,IAAIO,CAAG,GAAKA,CAAA,EACrC,CAAC,EAEH,OAAAC,EAAY,SAAY,CACvB,MAAMC,EAAeH,GAAQH,CAAI,EAAE,OAAQI,GAAQ,CAACP,EAAa,IAAIO,CAAG,CAAC,EACzE,GAAIE,EAAa,OAAS,EAAG,CAC5B,KAAM,CAAE,KAAAC,GAAS,MAAMC,EAAM,KAAKC,EAAY,eAAe,EAAG,CAC/D,MAAOH,CAAA,CACP,EACD,SAAW,CAACF,EAAKM,CAAW,IAAK,OAAO,QAAQH,EAAK,KAAK,EACzDV,EAAa,IAAIO,EAAKM,CAAqB,CAE7C,CACD,CAAC,EAEMT,CACR,CAOO,SAASU,GAAUC,EAAkC,CAC3D,OAAOV,EAAS,IAAMC,GAAQS,CAAI,EAAE,IAAIC,EAAkB,CAAC,CAC5D,CAOO,SAASA,GAAmBC,EAAa,CAC/C,MAAO,CACN,GAAIA,EACJ,SAAU,GACV,YAAaA,EACb,QAASlB,EAAA,CAEX,qLC9CA,MAAMmB,EAASC,EAAqBC,EAAC,QAA+B,EAC9DhB,EAAQe,EAAqBC,EAAC,OAA8B,EAE5DC,EAAWC,EAAiB,EAAE,EAC9BC,EAAgBrB,GAASE,CAAK,EAC9BoB,EAAiBV,GAAUI,CAAM,EAEjCO,EAAQpB,EAAS,CACtB,KAAM,CACL,MAAO,CAAC,GAAGmB,EAAe,MAAO,GAAGD,EAAc,KAAK,CACxD,EACA,IAAIG,EAAoB,CACvBtB,EAAM,MAAQsB,EAAM,OAAQC,GAAMA,EAAE,IAAI,EAAE,IAAKA,GAAMA,EAAE,IAAK,EAC5DT,EAAO,MAAQQ,EAAM,OAAQE,GAAMA,EAAE,QAAQ,EAAE,IAAKA,GAAMA,EAAE,EAAE,CAC/D,CAAA,CACA,EAEKC,EAAkBC,GAAcC,EAAU,GAAG,EAOnD,eAAeA,EAASC,EAAiB,CACxC,KAAM,CAAE,KAAAtB,CAAA,EAAS,MAAMC,EAAM,IAC5BC,EAAY,qCAAqC,EACjD,CAAE,OAAQ,CAAE,QAAAoB,EAAS,MAAO,GAAG,CAAE,EAG5BC,EAAa,CAClB,GAAGZ,EAAS,MAAM,IAAKa,GAAM,CAACA,EAAE,GAAIA,CAAC,CAAC,EACtC,GAAG,OAAO,QAAQxB,EAAK,MAAM,EAC3B,IAAI,CAAC,CAACyB,EAAItB,CAAW,IAAM,CAACsB,EAAI,CAAE,GAAGnB,GAAmBmB,CAAE,EAAG,YAAAtB,CAAA,CAAa,CAAC,EAC7E,GAAG,OAAO,QAAQH,EAAK,KAAK,EAC1B,IAAI,CAAC,CAACyB,EAAItB,CAAW,IAAM,CAAC,QAAQsB,CAAE,GAAI,CAAE,GAAI,QAAQA,CAAE,GAAI,KAAMA,EAAI,YAAAtB,EAAa,CAAC,CAAA,EAGzFQ,EAAS,MAAQ,CAAC,GAAG,IAAI,IAAIY,CAAU,EAAE,QAAQ,CAClD,mBAICG,EAM6BC,EAAAC,EAAA,EAAA,YALnBb,EAAA,2CAAAA,EAAK,MAAAc,GACd,SAAA,GACA,SAAA,GACC,QAASlB,EAAA,MACT,WAAYgB,EAAAG,CAAA,EAAC,iBAAA,aAAA,EACb,SAAQH,EAAAR,CAAA,CAAA,uNCnDX,MAAMY,EAAatB,EAA6CC,EAAA,YAAmB,EAE7EsB,EAAQtB,EAIRuB,EAAgBtC,EAAS,IAAM,CACpC,GAAI,CAACqC,EAAM,cAAc,cACxB,OAGD,MAAME,EAAU,OAAO,QAAQF,EAAM,cAAc,aAAa,EAC9D,OAAO,CAAC,CAAA,CAAGG,CAAM,IAAM,EAAEA,EAAO,MAAQC,EAAkB,aAAa,EACzE,OAAO,OAAO,YAAYF,CAAO,CAClC,CAAC,EAEKG,EAAkB1C,EAAS,IAAM,OAAO,IAAI,cAAc,cAAe,WAAWqC,EAAM,aAAa,CAAC,EACxGM,EAAmB3C,EAAS,IAAM,CACvC,GAAI,CAACsC,EAAc,MAClB,MAAO,GAER,UAAWE,KAAU,OAAO,OAAOF,EAAc,KAAK,EACrD,GAAK,EAAAE,EAAO,MAAQC,EAAkB,QAAYD,EAAO,MAAQC,EAAkB,cAInF,MAAO,GAER,MAAO,EACR,CAAC,EAEKG,EAA2B3B,EAAI,EAAK,EAC1Cd,EAAY,SAAY,CACnBuC,EAAgB,QACnBE,EAAyB,MAAQ,GACjC,MAAM,OAAO,eAAe,YAAYF,EAAgB,MAAM,OAAO,EACrEE,EAAyB,MAAQ,GAEnC,CAAC,EAEDC,EAAMP,EAAe,IAAM,CAC1B,UAAWQ,KAAOR,EAAc,MACzBQ,KAAOV,EAAW,QACvBA,EAAW,MAAMU,CAAG,EAAIR,EAAc,MAAMQ,CAAG,GAAG,OAASC,GAAkB,QAC1E,GACA,GAGN,CAAC,EAOD,SAASC,EAAmBC,EAAoB,CAC/C,MAAMC,EAAS,CAACD,EAAM,MAAM,EAAE,KAAA,EAAO,CAAC,EACtCb,EAAW,MAAQ,CAAE,GAAGA,EAAW,MAAO,GAAGc,CAAA,CAC9C,cAIiBP,EAAA,WAAhBQ,EAyBW,WAAA,OAzBwB,MAAKC,EAAEC,EAAAA,OAAO,0BAA0B,CAAA,GAC1EC,EAES,gBADLtB,EAAAG,CAAA,EAAC,iBAAA,gBAAA,CAAA,EAAA,CAAA,EAGWO,EAAA,WAAhBS,EASWI,EAAA,CAAA,IAAA,GAAA,CARWX,EAAA,WAArBb,EAAiDC,EAAAwB,EAAA,EAAA,CAAA,IAAA,EAAA,QAEjDzB,EAK2C0B,GAJrCf,EAAA,MAAgB,OAAO,EAAA,OAE3B,cAAiBN,EAAA,MACjB,iBAAoBrB,EAAA,cACpB,sBAAmBiC,CAAA,oDAIrBU,EAAA,EAAA,EAAAP,EAMkBI,EAAA,CAAA,IAAA,GAAAI,EALmBrB,EAAA,MAAa,CAAzCsB,EAAcC,WADvB9B,EAMkB+B,GAAA,CAHhB,IAAKF,EAAa,MACV,WAAAxB,EAAA,MAAWyB,CAAS,EAApB,sBAAA3B,GAAAE,EAAA,MAAWyB,CAAS,EAAA3B,EAC5B,aAAA2B,EACA,gBAAAD,CAAA,8EAJS,CAAAG,EAAA,EAAAH,EAAa,MAAQ5B,EAAAS,CAAA,EAAkB,OAAM,CAAA,uSClF3D,MAAML,EAAatB,EAA6CC,EAAA,YAAmB,EAE7EsB,EAAQtB,EAId,OAAA8B,EAAM,IAAMR,EAAM,cAAe,IAAM,CACtC,UAAWS,KAAOT,EAAM,cACjBS,KAAOV,EAAW,QACvBA,EAAW,MAAMU,CAAG,EAAIT,EAAM,cAAcS,CAAG,GAAG,eAAiBT,EAAM,cAAcS,CAAG,GAAG,OAASC,GAAkB,QACrH,GACA,IAIN,EAAG,CAAE,UAAW,GAAM,cAIrBI,EAYW,WAAA,CAZA,MAAKC,EAAEC,EAAAA,OAAO,oBAAoB,CAAA,GAC5CC,EAES,gBADLtB,EAAAG,CAAA,EAAC,iBAAA,uBAAA,CAAA,EAAA,CAAA,GAGLuB,EAAA,EAAA,EAAAP,EAMgCI,EAAA,KAAAI,EALG5C,EAAA,cAAa,CAAxC6C,EAAcC,WADtB9B,EAMgC+B,GAAA,CAH9B,IAAKF,EAAa,MACV,WAAAxB,EAAA,MAAWyB,CAAS,EAApB,sBAAA3B,GAAAE,EAAA,MAAWyB,CAAS,EAAA3B,EAC5B,UAAA2B,EACA,aAAAD,CAAA,4EAJS,CAAAG,EAAA,EAAAH,EAAa,MAAQ5B,EAAAS,CAAA,EAAkB,OAAM,CAAA,gICxBpD,CAAA,QAAEuB,EAAA,EAAYC,EAAgC,iBAAkB,UAAU,EAGnEC,GAAuC,OAAO,OAAO,CACjE,QAAS,GACT,SAAU,GACV,yBAA0BC,EAA4B,eACtD,eAAgB,GAChB,uBAAwB,GACxB,SAAU,EACX,CAAC,EAEYC,GAAcC,GAAY,2BAA4B,IAAM,CACxE,MAAMC,EAAiBrD,EAAgB,EAAE,EACnCsD,EAAetD,EAAgB,EAAE,EAOvC,eAAeuD,EAAoBC,EAA4B,CAC9D,MAAMC,EAAMnE,EAAY,oCAAoC,EACtD,CAAE,KAAAF,CAAA,EAAS,MAAMC,EAAM,KAC5BoE,EACAC,EAAMF,CAAO,EACb,CAAE,gBAAiBG,EAAoB,MAAA,CAAO,EAE/CN,EAAe,MAAM,KAAKO,EAAaxE,CAAI,CAAC,CAC7C,CAOA,eAAeyE,EAAkBL,EAA4B,CAC5D,MAAMC,EAAMnE,EAAY,kCAAkC,EACpD,CAAE,KAAAF,CAAA,EAAS,MAAMC,EAAM,KAC5BoE,EACAC,EAAMF,CAAO,EACb,CAAE,gBAAiBG,EAAoB,MAAA,CAAO,EAE/CL,EAAa,MAAM,KAAKM,EAAaxE,CAAI,CAAC,CAC3C,CAOA,eAAe0E,EAAcN,EAAmB,CAC/C,MAAMnE,EAAM,OAAO0E,EAAOP,CAAO,EAAG,CACnC,gBAAiBG,EAAoB,MAAA,CACrC,EAEGH,EAAQ,OAAS,WACpBF,EAAa,MAAQA,EAAa,MAAM,OAAQU,GAAMA,EAAE,KAAOR,EAAQ,EAAE,EAEzEH,EAAe,MAAQA,EAAe,MAAM,OAAQW,GAAMA,EAAE,KAAOR,EAAQ,EAAE,CAE/E,CAOA,eAAeS,EAAcT,EAAmB,CAC/C,KAAM,CAAE,KAAApE,CAAA,EAAS,MAAMC,EAAM,IAC5B0E,EAAOP,CAAO,EACdE,EAAMF,CAAO,EACb,CAAE,gBAAiBG,EAAoB,MAAA,CAAO,EAG/CO,EAAgBN,EAAaxE,CAAI,CAAC,CACnC,CAOA,eAAe+E,EAAcX,EAAmB,CAC/C,KAAM,CAAE,KAAApE,GAAS,MAAMC,EAAM,IAAI0E,EAAOP,CAAO,CAAC,EAChDU,EAAgBN,EAAaxE,CAAI,CAAC,CACnC,CAGA,OAAAgF,EAAA,EAEO,CACN,eAAAf,EACA,aAAAC,EAEA,oBAAAC,EACA,kBAAAM,EACA,cAAAC,EACA,cAAAK,EACA,cAAAF,CAAA,EAMD,eAAeI,EAAaC,EAAc,CACzC,MAAMb,EAAM,uBAAuBa,CAAI,GACjC,CAAE,KAAAlF,GAAS,MAAMC,EAAM,IAA8BC,EAAYmE,CAAG,CAAC,EAC3E,OAAO,OAAO,OAAOrE,CAAI,EACvB,IAAIwE,CAAY,CACnB,CAKA,eAAeQ,GAAa,CAC3BG,GAAoClF,CAAK,EAErC0D,GACHM,EAAe,MAAQ,MAAMgB,EAAa,gBAAgB,GAE1Df,EAAa,MAAQ,MAAMe,EAAa,cAAc,EACtDhB,EAAe,MAAQ,MAAMgB,EAAa,oBAAoB,EAEhE,CAKA,SAASN,EAAOP,EAAmB,CAClC,MAAMc,EAAOd,EAAQ,OAAS,WAAa,eAAiB,iBAC5D,OAAOlE,EAAY,uBAAuBgF,CAAI,IAAId,EAAQ,EAAE,EAAE,CAC/D,CAOA,SAASU,EAAgBV,EAAmB,CAC3C,GAAIA,EAAQ,OAAS,WAAY,CAChC,MAAMgB,EAAQlB,EAAa,MAAM,UAAWU,GAAMA,EAAE,KAAOR,EAAQ,EAAE,EACrEF,EAAa,MAAM,OAAOkB,EAAO,EAAGhB,CAAO,CAC5C,KAAO,CACN,MAAMgB,EAAQnB,EAAe,MAAM,UAAWW,GAAMA,EAAE,KAAOR,EAAQ,EAAE,EACvEH,EAAe,MAAM,OAAOmB,EAAO,EAAGhB,CAAO,CAC9C,CACD,CACD,CAAC,EAKD,SAASI,EAAaJ,EAAmB,CACxC,MAAO,CACN,GAAGA,EACH,aAAciB,GAAkBjB,EAAQ,YAAY,CAAA,CAEtD,CAQO,SAASiB,GAAkBC,EAAmC,CACpE,MAAMC,EAAe,CAAE,GAAGD,CAAA,EAC1B,OAAAC,EAAa,QAAUC,EAAsBD,EAAa,QAAS,EAAI,EACvEA,EAAa,SAAWC,EAAsBD,EAAa,SAAU,EAAI,EACzEA,EAAa,eAAiBC,EAAsBD,EAAa,eAAgB,EAAK,EACtFA,EAAa,yBAA2B,OAAOA,EAAa,0BAA6B,SACtF,OAAO,SAASA,EAAa,wBAAwB,EACpDA,EAAa,0BAA4BzB,EAA4B,MACzEyB,EAAa,uBAAyBC,EAAsBD,EAAa,uBAAwB,EAAK,EACtGA,EAAa,SAAWC,EAAsBD,EAAa,SAAU,EAAK,EACnEA,CACR,CAQA,SAASC,EAAsBrD,EAAiBsD,EAAW,GAAO,CACjE,OAAItD,IAAW,OACPsD,EAEDtD,IAAW,IAAQA,IAAW,QAAUA,IAAW,GAC3D,uJC1LA,MAAMoD,EAAe9E,EAAmCC,EAAA,YAAmB,EAC3EZ,EAAY,IAAM,CACb,OAAO,KAAKyF,EAAa,KAAK,EAAE,SAAW,IAE9CA,EAAa,MAAQF,GAAkBE,EAAa,KAAK,EAE3D,CAAC,EAED,KAAM,CAAE,cAAAG,CAAA,EAAkB9B,EAAsC,iBAAkB,UAAU,EAEtF+B,EAAWC,GAAA,EACXC,EAAaD,GAAA,EAEbE,EAAalF,EAAI,EAAK,EAEtBmF,EAAyB,CAC9B,CACC,MAAOjE,EAAE,iBAAkB,OAAO,EAClC,MAAOgC,EAA4B,KAAA,EAEpC,CACC,MAAOhC,EAAE,iBAAkB,0BAA0B,EACrD,MAAOgC,EAA4B,cAAA,EAEpC,CACC,MAAOhC,EAAE,iBAAkB,QAAQ,EACnC,MAAOgC,EAA4B,MAAA,CACpC,EAEKkC,EAAkBrG,EAAS,CAChC,KAAM,CACL,OAAOoG,EAAuB,KAAM5D,GAAWA,EAAO,QAAUoD,EAAa,MAAM,wBAAwB,CAC5G,EACA,IAAIvE,EAAO,CACVuE,EAAa,MAAM,yBAA2BvE,GAAO,OAAS8C,EAA4B,cAC3F,CAAA,CACA,oBAKAhB,EAuCM,MAAA,CAvCA,MAAKC,EAAEC,EAAAA,OAAO,YAAY,CAAA,GAC/BiD,EAUWtE,EAAAuE,CAAA,EAAA,CATT,GAAIvE,EAAAgE,CAAA,EACJ,gBAAehE,EAAAkE,CAAA,EACf,gBAAeC,EAAA,MAChB,QAAQ,yBACP,QAAKK,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAtE,GAAEiE,EAAA,MAAU,CAAIA,EAAA,MAAA,GACX,OACV,IAAsF,CAAtFG,EAAsFtE,EAAAyE,CAAA,EAAA,CAApE,YAAA,GAAa,KAAMN,EAAA,MAAanE,EAAA0E,EAAA,EAAiB1E,EAAA2E,EAAA,CAAA,+BACzD,IACX,CADWC,EAAA,MACR5E,EAAAG,CAAA,EAAC,iBAAA,eAAA,CAAA,EAAA,CAAA,CAAA,oDAGLmB,EAyBW,WAAA,CAvBT,GAAItB,EAAAkE,CAAA,EACJ,MAAK9C,EAAEC,EAAAA,OAAO,sBAAsB,EACpC,kBAAiBrB,EAAAgE,CAAA,CAAA,GAClBM,EAGqCtE,EAAA6E,EAAA,EAAA,YAF3BR,EAAA,2CAAAA,EAAe,MAAAnE,GACvB,WAAYF,EAAAG,CAAA,EAAC,iBAAA,0BAAA,EACb,QAASiE,CAAA,sCAEXE,EAEwBtE,EAAA8E,CAAA,EAAA,CAFQ,WAAA/F,EAAA,WAAW,SAAX,sBAAAyF,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAtE,GAAAnB,EAAA,WAAW,SAAQmB,GAAE,KAAK,QAAA,aACzD,IAAsC,KAAnCF,EAAAG,CAAA,EAAC,iBAAA,WAAA,CAAA,EAAA,CAAA,CAAA,0BAELmE,EAEwBtE,EAAA8E,CAAA,EAAA,CAFQ,WAAA/F,EAAA,WAAW,SAAX,sBAAAyF,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAtE,GAAAnB,EAAA,WAAW,SAAQmB,GAAE,KAAK,QAAA,aACzD,IAA4C,KAAzCF,EAAAG,CAAA,EAAC,iBAAA,iBAAA,CAAA,EAAA,CAAA,CAAA,0BAELmE,EAEwBtE,EAAA8E,CAAA,EAAA,CAFQ,WAAA/F,EAAA,WAAW,eAAX,sBAAAyF,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAtE,GAAAnB,EAAA,WAAW,eAAcmB,GAAE,KAAK,QAAA,aAC/D,IAA2C,KAAxCF,EAAAG,CAAA,EAAC,iBAAA,gBAAA,CAAA,EAAA,CAAA,CAAA,0BAEwBH,EAAA+D,CAAA,OAA7BhE,EAEwBC,EAAA8E,CAAA,EAAA,OAF6B,WAAA/F,EAAA,WAAW,QAAX,sBAAAyF,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAtE,GAAAnB,EAAA,WAAW,QAAOmB,GAAE,KAAK,QAAA,aAC7E,IAA8C,KAA3CF,EAAAG,CAAA,EAAC,iBAAA,mBAAA,CAAA,EAAA,CAAA,CAAA,oCAELmE,EAEwBtE,EAAA8E,CAAA,EAAA,CAFQ,WAAA/F,EAAA,WAAW,uBAAX,sBAAAyF,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAtE,GAAAnB,EAAA,WAAW,uBAAsBmB,GAAE,KAAK,QAAA,aACvE,IAAuE,KAApEF,EAAAG,CAAA,EAAC,iBAAA,4CAAA,CAAA,EAAA,CAAA,CAAA,sCAtBGgE,EAAA,KAAU,CAAA,yKClEf,CAAE,QAAAnC,EAAA,EAAYC,EAAgC,iBAAkB,UAAU,EAC1E8C,GAAoB9C,EAAoB,iBAAkB,iBAAiB,EAC3E+C,GAAW/C,EAAsB,iBAAkB,UAAU,EACjE,OAAQgD,GAAMF,GAAkB,SAASE,EAAE,UAAU,CAAC,EAElDC,GAAoBjD,EAA4B,iBAAkB,gBAAgB,gPAmBxF,MAAMkD,EAAOrG,EAAoBC,EAAC,MAAyB,EAYrDqG,EAAkBnG,EAAI,gBAAgB0D,EAAM5D,EAAA,OAAO,CAAC,CAAC,EAC3DZ,EAAY,IAAM,CACbgH,EAAK,QACRC,EAAgB,MAAQ,gBAAgBzC,EAAM5D,EAAA,OAAO,CAAC,EAExD,CAAC,EAED,MAAMsG,EAAUrH,EAAS,CACxB,KAAM,CACL,OAAOgH,GAAS,KAAMC,GAAMA,EAAE,aAAeG,EAAgB,MAAM,OAAO,CAC3E,EACA,IAAI/F,EAAkB,CACrB+F,EAAgB,MAAM,QAAU/F,GAAO,UACxC,CAAA,CACA,EAEKiG,EAAiBtH,EAAS,IAAMkH,GACpC,OAAO,CAAC,CAAE,OAAAK,CAAA,IAAaF,EAAQ,OAAO,YAAYE,CAAM,CAAC,CAAC,EACtDC,EAAgBxH,EAAS,CAC9B,KAAM,CACL,OAAOsH,EAAe,MAAM,KAAMG,GAAMA,EAAE,aAAeL,EAAgB,MAAM,aAAa,CAC7F,EACA,IAAI/F,EAAwB,CAC3B,MAAMqG,EAAWJ,EAAe,MAAM,KAAMG,GAAMA,EAAE,aAAeL,EAAgB,MAAM,aAAa,EAClGM,GAAYA,EAAS,aAAerG,GAAO,YAAc+F,EAAgB,MAAM,gBAClFO,GACCP,EAAgB,MAAM,eACtBM,EAAS,cACT,CAACrG,GAAO,cAAegG,EAAQ,OAAO,aAAa,CAAA,EAGrDD,EAAgB,MAAM,cAAgB/F,GAAO,UAC9C,CAAA,CACA,EAGD,OAAAwB,EAAMyE,EAAgB,IAAM,CACvBA,EAAe,MAAM,SAAW,IACnCF,EAAgB,MAAM,cAAgBE,EAAe,MAAM,CAAC,EAAG,WAEjE,CAAC,cAIAvF,EA2DWC,EAAA4F,EAAA,EAAA,CA1DF,KAAMT,EAAA,sCAAAA,EAAI,MAAAjF,GAKJsE,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAAtE,GAAAA,GAAU2F,EAAAA,MAAK,OAAA,EAAA,EAJ7B,OAAA,GACC,eAAgBxE,EAAAA,OAAO,sBACvB,KAAM+D,EAAA,MAAgB,GAAKpF,EAAAG,CAAA,mCAAsCH,EAAAG,CAAA,EAAC,iBAAA,aAAA,EAClE,SAAMqE,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAAtE,GAAE2F,EAAAA,MAAK,QAAUT,EAAA,KAAe,EAAA,GA6C5B,UACV,IAEW,CAFKrG,EAAA,QAAQ,QAAxBgB,EAEWC,EAAAuE,CAAA,EAAA,OAFkB,uBAAOsB,EAAAA,MAAK,OAAA,EAAA,aACxC,IAAmC,KAAhC7F,EAAAG,CAAA,EAAC,iBAAA,QAAA,CAAA,EAAA,CAAA,CAAA,mBAGLmE,EAEWtE,EAAAuE,CAAA,EAAA,CAFD,QAAQ,UAAU,KAAK,QAAA,aAChC,IAA8E,CAA3EK,EAAAkB,EAAA/G,EAAA,QAAQ,GAAKiB,EAAAG,CAAA,2BAA8BH,EAAAG,CAAA,EAAC,iBAAA,QAAA,CAAA,EAAA,CAAA,CAAA,qBAjDjD,IAGY,CAHZmE,EAGYtE,EAAA+F,EAAA,EAAA,CAFF,WAAAX,EAAA,MAAgB,WAAhB,sBAAAZ,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAtE,GAAAkF,EAAA,MAAgB,WAAUlF,GAClC,MAAOF,EAAAG,CAAA,EAAC,iBAAA,aAAA,EACT,SAAA,EAAA,iCAEDmE,EAAwD0B,GAAA,CAAjC,WAAAZ,EAAA,MAAgB,aAAhB,sBAAAZ,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAtE,GAAAkF,EAAA,MAAgB,aAAYlF,EAAA,yBAG5CF,EAAAgC,EAAA,OADPjC,EAImDkG,GAAA,OAF1C,OAAQb,EAAA,MAAgB,iBAAhB,kBAAAZ,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAtE,GAAAkF,EAAA,MAAgB,iBAAgBlF,GACxC,MAAOkF,EAAA,MAAgB,gBAAhB,iBAAAZ,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAtE,GAAAkF,EAAA,MAAgB,gBAAelF,GAC7C,MAAKkB,EAAEC,EAAAA,OAAO,+BAA+B,CAAA,+CAE/CiD,EAOYtE,EAAA6E,EAAA,EAAA,YANFQ,EAAA,2CAAAA,EAAO,MAAAnF,GACf,QAASF,EAAAgF,EAAA,EACT,YAAaI,EAAA,MAAgB,IAAMA,EAAA,MAAgB,SACnD,WAAYpF,EAAAG,CAAA,EAAC,iBAAA,kBAAA,EACb,MAAKiB,EAAEC,EAAAA,OAAO,+BAA+B,EAC9C,MAAM,OACN,SAAA,EAAA,mEAEDiD,EAOYtE,EAAA6E,EAAA,EAAA,YANFW,EAAA,2CAAAA,EAAa,MAAAtF,GACrB,QAASoF,EAAA,MACT,UAAWF,EAAA,MAAgB,SAAWE,EAAA,MAAe,QAAM,EAC3D,WAAYtF,EAAAG,CAAA,EAAC,iBAAA,gBAAA,EACb,MAAKiB,EAAEC,EAAAA,OAAO,+BAA+B,EAC9C,MAAM,OACN,SAAA,EAAA,mEAGMgE,EAAA,OAAWD,EAAA,MAAgB,oBADlCrF,EAI0CmG,GAAA,OAFhC,WAAAd,EAAA,MAAgB,eAAhB,sBAAAZ,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAtE,GAAAkF,EAAA,MAAgB,eAAclF,GACtC,MAAKkB,EAAEC,EAAAA,OAAO,oCAAoC,EAClD,cAAegE,EAAA,MAAQ,aAAA,2DAGlBG,EAAA,OAAiBJ,EAAA,MAAgB,oBADxCrF,EAIkCoG,GAAA,OAFxB,WAAAf,EAAA,MAAgB,eAAhB,sBAAAZ,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAtE,GAAAkF,EAAA,MAAgB,eAAclF,GACtC,MAAKkB,EAAEC,EAAAA,OAAO,oCAAoC,EAClD,cAAemE,EAAA,KAAA,ygBCpHnB,MAAMnF,EAAQtB,EAKRqH,EAAQhE,GAAA,EAER4C,EAAW/C,EAAsB,iBAAkB,UAAU,EAC7DoE,EAAcrI,EAAS,IAAMgH,EAAS,KAAMC,GAAMA,EAAE,aAAe5E,EAAM,QAAQ,OAAO,EAAG,IAAI,EAE/FiF,EAAiBrD,EAAsB,iBAAkB,gBAAgB,EACzEqE,EAAoBtI,EAAS,IAAMsH,EAAe,KAAMG,GAAMA,EAAE,aAAepF,EAAM,QAAQ,aAAa,EAAG,IAAI,EAEjHkG,EAAiBtH,EAAI,EAAK,EAC1BuH,EAASxI,EAAS,IAAM,CAC7B,GAAIuI,EAAe,MAClB,MAAO,CACN,KAAM,UACN,MAAOpG,EAAE,iBAAkB,YAAY,CAAA,EAIzC,MAAMqG,EAASnG,EAAM,QAAQ,QAAUoG,EAAc,cAC/CC,GAAQrG,EAAM,QAAQ,eAAiBsG,GAAqBH,CAAM,EAClEI,EAAOC,GAAmBL,CAAM,EAEhCM,GAAYN,IAAWC,EAAc,cAAgBD,IAAWC,EAAc,QAC9EM,GAAU,CAACD,IAAaN,IAAWC,EAAc,SAAWD,IAAWC,EAAc,cAE3F,MAAO,CAAE,KAAAG,EAAM,MAAAF,GAAO,UAAAI,GAAW,QAAAC,EAAA,CAClC,CAAC,EAEKhJ,EAAQF,GAAS,IAAMwC,EAAM,QAAQ,iBAAmB,EAAE,EAKhE,eAAe2G,GAAW,CACzB,MAAMZ,EAAM,cAAc/F,EAAM,OAAO,CACxC,CAKA,eAAe4G,GAAS,CACvB,MAAMxE,EAAU,MAAMyE,GAAYC,GAA0B,CAC3D,QAAS9G,EAAM,OAAA,CACf,EAEIoC,GAGL,MAAM2D,EAAM,cAAc3D,CAAmB,CAC9C,CAKA,eAAe2E,GAAe,CAC7Bb,EAAe,MAAQ,GACvB,GAAI,CACH,MAAMH,EAAM,cAAc/F,EAAM,OAAO,CACxC,QAAA,CACCkG,EAAe,MAAQ,EACxB,CACD,oBAICpF,EAkEK,KAAA,CAlEA,MAAKC,EAAEC,EAAAA,OAAO,eAAe,CAAA,GACjCC,EAkBK,KAAA,KAAA,CAjBJA,EAAuD,OAAvD+F,GAAuDvB,EAAtBU,EAAA,MAAO,KAAK,EAAA,CAAA,EAC7ClC,EAeWtE,EAAAuE,CAAA,EAAA,CAdT,aAAYvE,EAAAG,CAAA,EAAC,iBAAA,gBAAA,EACb,MAAOqG,EAAA,MAAO,MACf,QAAQ,yBACP,QAAOY,CAAA,GACG,OACV,IAAkD,CAA7BZ,EAAA,MAAO,OAAI,eAAhCzG,EAAkDC,EAAAwB,EAAA,EAAA,CAAA,IAAA,CAAA,CAAA,QAClDzB,EAMuBC,EAAAyE,CAAA,EAAA,OAJrB,MAAKrD,EAAA,CAAYC,CAAAA,EAAAA,OAAO,6BAA6B,EAAGmF,EAAA,MAAO,QAAiBnF,CAAAA,EAAAA,OAAO,+BAA+B,EAAGmF,EAAA,MAAO,SAAA,GAIhI,KAAMA,EAAA,MAAO,IAAA,+DAIlBlF,EAAiC,KAAA,KAAAwE,EAA1B/G,EAAA,QAAQ,UAAU,EAAA,CAAA,EACzBuC,EAA0B,YAAnB+E,EAAA,KAAW,EAAA,CAAA,EAClB/E,EAAgC,YAAzBgF,EAAA,KAAiB,EAAA,CAAA,EACdvH,EAAA,aAAVoC,EAeK,KAAAmG,GAAA,CAdJhG,EAaM,MAAA,CAbA,MAAKF,EAAEC,EAAAA,OAAO,+BAA+B,CAAA,IAClDK,EAAA,EAAA,EAAAP,EAKiBI,EAAA,KAAAI,EAJA5C,EAAA,QAAQ,iBAAjBwI,QADRxH,EAKiBC,EAAAwH,EAAA,EAAA,CAHf,IAAKD,EACL,SAAUvH,EAAAyH,EAAA,EACX,QAAA,GACC,KAAMF,CAAA,6CACRpG,EAKqBI,EAAA,KAAAI,EAJL3B,EAAAjC,CAAA,EAAR2J,QADR3H,EAKqBC,EAAA2H,EAAA,EAAA,CAHnB,IAAKD,EAAK,KACV,YAAaA,EAAK,YAClB,KAAM,GACN,KAAMA,EAAK,IAAA,yDAGfpG,EA0BK,KAAA,KAAA,CAzBOvC,EAAA,SAAWA,EAAA,QAAQ,OAAI,gBAAlCoC,EAkBM,MAAA,OAlB8C,MAAKC,EAAEC,EAAAA,OAAO,4BAA4B,CAAA,GAC7FiD,EAOWtE,EAAAuE,CAAA,EAAA,CANT,aAAYvE,EAAAG,CAAA,EAAC,iBAAA,MAAA,EACb,MAAOH,EAAAG,CAAA,EAAC,iBAAA,MAAA,EACR,QAAO8G,CAAA,GACG,OACV,IAA6C,CAA7C3C,EAA6CtE,EAAAyE,CAAA,EAAA,CAA1B,KAAMzE,EAAA4H,EAAA,GAAgB,KAAA,EAAA,CAAA,MAAA,CAAA,CAAA,kCAG3CtD,EAQWtE,EAAAuE,CAAA,EAAA,CAPT,aAAYvE,EAAAG,CAAA,EAAC,iBAAA,QAAA,EACb,MAAOH,EAAAG,CAAA,EAAC,iBAAA,QAAA,EACT,QAAQ,QACP,QAAO6G,CAAA,GACG,OACV,IAA+C,CAA/C1C,EAA+CtE,EAAAyE,CAAA,EAAA,CAA5B,KAAMzE,EAAA6H,EAAA,GAAkB,KAAA,EAAA,CAAA,MAAA,CAAA,CAAA,4CAI9C9H,EAK2DC,EAAAyE,CAAA,EAAA,OAH1D,OAAA,GACC,KAAMzE,EAAA8H,EAAA,EACN,KAAM9H,EAAAG,CAAA,EAAC,iBAAA,yBAAA,EACP,MAAOH,EAAAG,CAAA,EAAC,iBAAA,yBAAA,CAAA,giBC7Ib,MAAMiG,EAAQhE,GAAA,EACR,CAAE,QAAAJ,CAAA,EAAYC,EAAgC,iBAAkB,UAAU,EAC1E8F,EAAW/J,EAAS,IACrBgE,EACIoE,EAAM,eAEN,CACN,GAAGA,EAAM,aACT,GAAGA,EAAM,cAAA,CAGX,oBAIAjF,EAkCQ,QAAA,CAlCA,MAAKC,EAAEC,EAAAA,OAAO,YAAY,EAAG,aAAYrB,EAAAG,CAAA,EAAC,iBAAA,mBAAA,CAAA,GACjDmB,EAyBQ,QAAA,CAzBA,MAAKF,EAAEC,EAAAA,OAAO,oBAAoB,CAAA,GACzCC,EAuBK,KAAA,KAAA,CAtBJA,EAIK,KAAA,CAJA,MAAKF,EAAEC,EAAAA,OAAO,0BAA0B,CAAA,GAC5CC,EAEO,OAFPgG,GAEOxB,EADH9F,EAAAG,CAAA,EAAC,iBAAA,QAAA,CAAA,EAAA,CAAA,CAAA,KAGNmB,EAEK,KAAA,CAFA,MAAKF,EAAEC,EAAAA,OAAO,0BAA0B,CAAA,IACzCrB,EAAAG,CAAA,EAAC,iBAAA,aAAA,CAAA,EAAA,CAAA,EAELmB,EAEK,KAAA,CAFA,MAAKF,EAAEC,EAAAA,OAAO,2BAA2B,CAAA,IAC1CrB,EAAAG,CAAA,EAAC,iBAAA,kBAAA,CAAA,EAAA,CAAA,EAELmB,EAEK,KAAA,CAFA,MAAKF,EAAEC,EAAAA,OAAO,kCAAkC,CAAA,IACjDrB,EAAAG,CAAA,EAAC,iBAAA,gBAAA,CAAA,EAAA,CAAA,EAEKH,EAAAgC,CAAA,GAAVN,EAAA,EAAAP,EAEK,UADDnB,EAAAG,CAAA,EAAC,iBAAA,eAAA,CAAA,EAAA,CAAA,YAELmB,EAIK,KAAA,CAJA,MAAKF,EAAEC,EAAAA,OAAO,2BAA2B,CAAA,GAC7CC,EAEO,OAFP0G,GAEOlC,EADH9F,EAAAG,CAAA,EAAC,iBAAA,SAAA,CAAA,EAAA,CAAA,CAAA,WAKRmB,EAMQ,QAAA,KAAA,QALPH,EAIsBI,EAAA,KAAAI,EAHHoG,EAAA,MAAXtF,QADR1C,EAIsBkI,GAAA,CAFpB,IAAKxF,EAAQ,GACb,QAAAzC,EAAAgC,CAAA,EACA,QAAAS,CAAA,wnBC9CL,MAAMyF,EAAejG,EAGlB,iBAAkB,eAAe,EAE9BkG,EAAoBlG,EAAsB,iBAAkB,UAAU,EAC1E,OAAQoD,GAAsBA,EAAQ,aAAe,OAAO,EACxD+C,EAAoBnJ,EAAIiJ,EAAa,iBAAiB,EACtDG,EAAkBpJ,EAAciJ,EAAa,eAAe,EAKlE,OAAArH,EAAMuH,EAAmB,IAAM,CAC9B,MAAME,EAAc,CAACF,EAAkB,MACvC,OAAO,IAAI,UAAU,SACpB,iBACA,sBACAA,EAAkB,MAAQ,MAAQ,KAClC,CACC,QAAS,IAAMG,GAAYpI,EAAE,iBAAkB,OAAO,CAAC,EACvD,MAAO,IAAM,CACZiI,EAAkB,MAAQE,EAC1BE,GAAUrI,EAAE,iBAAkB,oBAAoB,CAAC,CACpD,CAAA,CACD,CAEF,CAAC,EAQDU,EAAMwH,EAAiB,CAACI,EAAUC,IAAa,CAE9C,OAAO,IAAI,UAAU,SACpB,iBACA,yBACAD,EAAS,KAAK,GAAG,EACjB,CACC,QAAS,IAAMF,GAAYpI,EAAE,iBAAkB,wBAAwB,CAAC,EACxE,MAAO,IAAM,CACZqI,GAAUrI,EAAE,iBAAkB,iCAAiC,CAAC,EAChEkI,EAAgB,MAAQK,CACzB,CAAA,CACD,CAEF,CAAC,cAIAvH,EAsBO,OAAA,KAAA,CArBNG,EAEK,KAAA,CAFA,MAAKF,EAAEC,EAAAA,OAAO,0BAA0B,CAAA,IACzCrB,EAAAG,CAAA,EAAC,iBAAA,8CAAA,CAAA,EAAA,CAAA,EAGLmE,EAEwBtE,EAAA8E,CAAA,EAAA,YAFQsD,EAAA,2CAAAA,EAAiB,MAAAlI,GAAE,KAAK,QAAA,aACvD,IAAmE,KAAhEF,EAAAG,CAAA,EAAC,iBAAA,wCAAA,CAAA,EAAA,CAAA,CAAA,4BAGLmB,EAYW,WAAA,CAZ2B,MAAKF,EAAEC,EAAAA,OAAO,2BAA2B,CAAA,GAC9EC,EAES,gBADLtB,EAAAG,CAAA,EAAC,iBAAA,uDAAA,CAAA,EAAA,CAAA,SAELgB,EAOwBI,EAAA,KAAAI,EANL3B,EAAAmI,CAAA,EAAX9C,QADRtF,EAOwBC,EAAA8E,CAAA,EAAA,CALtB,IAAKO,EAAQ,sBACLgD,EAAA,2CAAAA,EAAe,MAAAnI,GACvB,MAAOmF,EAAQ,WAChB,KAAK,6BAAA,aACL,IAAkB,CAAfT,EAAAkB,EAAAT,EAAQ,IAAI,EAAA,CAAA,CAAA,qDAVC+C,EAAA,KAAiB,CAAA,oRCpDrC,MAAMO,EAAW1G,EAAU,iBAAkB,WAAY,CACxD,OAAQ,GACR,iBAAkB,CACjB,SAAU,KACV,QAAS,IAAA,EAEV,QAAS,EAAA,CACT,EAEKmE,EAAQhE,GAAA,EAGRwG,EAAmBD,EAAS,kBAAkB,UAAY,CAAA,EAE1DE,EAAiBF,EAAS,kBAAkB,SAAW,CAAA,EAEvDG,EAAa7J,EAAI,EAAK,EACtB8J,EAAa9J,EAAA,EAOnB,eAAe+J,EAAWvG,EAA6B,CAEtD,GADAqG,EAAW,MAAQ,GACf,CAAA,CAACrG,EAIL,GAAI,CACCkG,EAAS,QACZ,MAAMvC,EAAM,oBAAoB3D,CAAO,EAEvC,MAAM2D,EAAM,kBAAkB3D,CAAO,EAEtCsG,EAAW,MAAQ,MACpB,OAASE,EAAO,CACfC,GAAO,MAAM,iCAAkC,CAAE,MAAAD,EAAO,QAAAxG,EAAS,EACjEsG,EAAW,MAAQ,CAAE,GAAGtG,CAAA,EACxBqG,EAAW,MAAQ,EACpB,CACD,mBAIC/I,EAyEoBC,EAAAmJ,EAAA,EAAA,CAxElB,OAAQnJ,EAAA2I,CAAA,EAAS,OACjB,KAAM3I,EAAAG,CAAA,EAAC,iBAAA,kBAAA,EACP,YAAiBH,EAAAG,CAAA,EAAC,iBAAA,qHAAA,GAAiJH,EAAA2I,CAAA,EAAS,YAAqB3I,EAAAG,CAAA,EAAC,iBAAA,yEAAA,kBAQlM,IAA0C,EAD3CuB,EAAA,EAAA,EAAAP,EAKaI,EAAA,KAAAI,EAJa3B,EAAA4I,CAAA,EAAgB,CAAlCQ,EAAS3F,SADjB1D,EAKaC,EAAAqJ,EAAA,EAAA,CAHX,IAAK5F,EACN,KAAK,OAAA,aACL,IAAa,KAAV2F,CAAO,EAAA,CAAA,CAAA,uBAIX1H,EAAA,EAAA,EAAAP,EA0BaI,EAAA,KAAAI,EAzBmB3B,EAAA6I,CAAA,EAAc,CAArCS,EAAYC,SADrBxJ,EA0BaC,EAAAqJ,EAAA,EAAA,CAxBX,IAAKE,EACN,KAAK,SAAA,aACL,IAgBI,CAhBJjI,EAgBI,IAAA,KAAA,CAfaiI,IAAM,YAAtBpI,EAEWI,EAAA,CAAA,IAAA,GAAA,KADPvB,EAAAG,CAAA,EAAC,iBAAA,sDAAA,CAAA,EAAA,CAAA,CAAA,OAEgBoJ,IAAM,WAA3BpI,EAEWI,EAAA,CAAA,IAAA,GAAA,KADPvB,EAAAG,CAAA,EAAC,iBAAA,qDAAA,CAAA,EAAA,CAAA,CAAA,YAELgB,EAEWI,EAAA,CAAA,IAAA,GAAA,CADPqD,EAAAkB,EAAA9F,EAAAG,CAAA,iDAAoD,OAAAoJ,EAAM,CAAA,EAAA,CAAA,CAAA,OACnD3E,EAAA,MACR5E,EAAAwJ,EAAA,wPAAgRF,EAAW,MAAA,QAO/RhI,EAIK,KAAA,CAJA,MAAKF,EAAEC,EAAAA,OAAO,sCAAsC,EAAG,aAAYrB,EAAAG,CAAA,EAAC,iBAAA,oBAAA,CAAA,UACxEgB,EAEKI,EAAA,KAAAI,EAFiB2H,EAAXjE,IAAX3D,EAAA,EAAAP,EAEK,KAAA,CAF8B,IAAKkE,CAAA,IACpCA,CAAO,EAAA,CAAA,gDAcbf,EAAwBmF,EAAA,EAExBnF,EAQWtE,EAAAuE,CAAA,EAAA,CAPT,MAAKnD,EAAEC,EAAAA,OAAO,yCAAyC,EACxD,QAAQ,UACP,QAAKmD,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAtE,GAAE4I,EAAA,MAAU,CAAIA,EAAA,MAAA,GACX,OACV,IAAoC,CAApCxE,EAAoCtE,EAAAyE,CAAA,EAAA,CAAjB,KAAMzE,EAAA0J,EAAA,GAAO,KAAA,EAAA,CAAA,MAAA,CAAA,CAAA,aACtB,IACX,CADW9E,EAAA,MACR5E,EAAAG,CAAA,EAAC,iBAAA,sBAAA,CAAA,EAAA,CAAA,CAAA,qBAGLmE,EAGuB6C,GAAA,CAFd,KAAM2B,EAAA,qCAAAA,EAAU,MAAA5I,GACvB,QAAS6I,EAAA,MACT,QAAOC,CAAA,6BAEgBhJ,EAAA2I,CAAA,EAAS,aAAlC5I,EAA6C4J,GAAA,CAAA,IAAA,CAAA,CAAA,kWC1H/C,MAAMC,EAAoB3H,EAIvB,iBAAkB,oBAAoB,EAEnC4H,EAAU5K,EAAI,EAAK,EACnB6K,EAAW7K,EAAI2K,EAAkB,IAAI,EACrCG,EAAW9K,EAAI2K,EAAkB,QAAQ,EAE/CpG,GAAoClF,CAAK,EAKzC,eAAe0L,GAAW,CACzB,GAAI,CACHH,EAAQ,MAAQ,GAChB,KAAM,CAAE,KAAAxL,GAAS,MAAMC,EAAM,KAAcC,EAAY,uCAAuC,EAAG,CAEhG,IAAKqL,EAAkB,IACvB,KAAME,EAAS,MACf,SAAUC,EAAS,KAAA,EACjB,CAAE,gBAAiBnH,EAAoB,OAAQ,EAClD,GAAIvE,EAAM,CACTkK,GAAYpI,EAAE,iBAAkB,0BAA0B,CAAC,EAC3D,MACD,CACD,OAASN,EAAG,CACXqJ,GAAO,MAAMrJ,CAAU,CAExB,QAAA,CACCgK,EAAQ,MAAQ,EACjB,CAEArB,GAAUrI,EAAE,iBAAkB,mCAAmC,CAAC,EAClE2J,EAAS,MAAQF,EAAkB,KACnCG,EAAS,MAAQH,EAAkB,QACpC,mBAIC7J,EA0BoBC,EAAAmJ,EAAA,EAAA,CAzBlB,KAAMnJ,EAAAG,CAAA,EAAC,iBAAA,oBAAA,EACP,YAAaH,EAAAG,CAAA,EAAC,iBAAA,gHAAA,CAAA,aACf,IAsBO,CAtBPmB,EAsBO,OAAA,CArBN,GAAG,qBACF,MAAKF,EAAEC,EAAAA,OAAO,4BAA4B,EAC3C,aAAa,QACZ,YAAgB2I,EAAQ,CAAA,SAAA,CAAA,CAAA,GACzB1F,EAIyCtE,EAAA+F,EAAA,EAAA,YAH/B+D,EAAA,2CAAAA,EAAQ,MAAA5J,GACjB,KAAK,WACL,aAAa,QACZ,MAAOF,EAAAG,CAAA,EAAC,iBAAA,OAAA,CAAA,iCACVmE,EAI4CtE,EAAAiK,EAAA,EAAA,YAHlCF,EAAA,2CAAAA,EAAQ,MAAA7J,GACjB,KAAK,WACL,aAAa,QACZ,MAAOF,EAAAG,CAAA,EAAC,iBAAA,UAAA,CAAA,iCACVmE,EAMWtE,EAAAuE,CAAA,EAAA,CALT,MAAKnD,EAAEC,EAAAA,OAAO,oCAAoC,EAClD,SAAUwI,EAAA,MACX,QAAQ,UACR,KAAK,QAAA,aACL,IAA6E,KAA1EA,EAAA,MAAU7J,EAAAG,CAAA,EAAC,iBAAA,UAAA,EAAiCH,EAAAG,CAAA,EAAC,iBAAA,MAAA,CAAA,EAAA,CAAA,CAAA,8WC1EnDmE,EAA2B4F,EAAA,EAC3B5F,EAA4B6F,EAAA,CAAA,UCFvBC,GAAQC,GAAA,EACRC,EAAMC,GAAUC,EAAgB,EACtCF,EAAI,OAAO,SAAW,iBACtBA,EAAI,IAAIF,EAAK,EACbE,EAAI,MAAM,iBAAiB","x_google_ignoreList":[0]}
\ No newline at end of file
+{"version":3,"file":"files_external-settings.mjs","sources":["../node_modules/@mdi/svg/svg/account-group-outline.svg?raw","../build/frontend/apps/files_external/src/composables/useEntities.ts","../build/frontend/apps/files_external/src/components/AddExternalStorageDialog/ApplicableEntities.vue","../build/frontend/apps/files_external/src/components/AddExternalStorageDialog/AuthMechanismConfiguration.vue","../build/frontend/apps/files_external/src/components/AddExternalStorageDialog/BackendConfiguration.vue","../build/frontend/apps/files_external/src/store/storages.ts","../build/frontend/apps/files_external/src/components/AddExternalStorageDialog/MountOptions.vue","../build/frontend/apps/files_external/src/components/AddExternalStorageDialog/AddExternalStorageDialog.vue","../build/frontend/apps/files_external/src/components/ExternalStorageTableRow.vue","../build/frontend/apps/files_external/src/components/ExternalStorageTable.vue","../build/frontend/apps/files_external/src/components/UserMountSettings.vue","../build/frontend/apps/files_external/src/views/ExternalStoragesSection.vue","../build/frontend/apps/files_external/src/views/GlobalCredentialsSection.vue","../build/frontend/apps/files_external/src/views/FilesExternalSettings.vue","../build/frontend/apps/files_external/src/settings-main.ts"],"sourcesContent":["export default \"\"","/*!\n * SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport type { MaybeRefOrGetter } from 'vue'\n\nimport svgAccountGroupOutline from '@mdi/svg/svg/account-group-outline.svg?raw'\nimport axios from '@nextcloud/axios'\nimport { generateUrl } from '@nextcloud/router'\nimport { computed, reactive, toValue, watchEffect } from 'vue'\n\nconst displayNames = reactive(new Map())\nconst groupDisplayNames = reactive(new Map())\nconst pendingGroups = new Set()\n\n/**\n * Fetch and provide user display names for given UIDs\n *\n * @param uids - The user ids to fetch display names for\n */\nexport function useUsers(uids: MaybeRefOrGetter) {\n\tconst users = computed(() => toValue(uids).map((uid) => ({\n\t\tid: `user:${uid}`,\n\t\tuser: uid,\n\t\tdisplayName: displayNames.get(uid) || uid,\n\t})))\n\n\twatchEffect(async () => {\n\t\tconst missingUsers = toValue(uids).filter((uid) => !displayNames.has(uid))\n\t\tif (missingUsers.length > 0) {\n\t\t\tconst { data } = await axios.post(generateUrl('/displaynames'), {\n\t\t\t\tusers: missingUsers,\n\t\t\t})\n\t\t\tfor (const [uid, displayName] of Object.entries(data.users)) {\n\t\t\t\tdisplayNames.set(uid, displayName as string)\n\t\t\t}\n\t\t}\n\t})\n\n\treturn users\n}\n\n/**\n * Fetch and provide group display names for given GIDs, mapped to IUserData objects\n *\n * @param gids - The group ids to create entities for\n */\nexport function useGroups(gids: MaybeRefOrGetter) {\n\tconst groups = computed(() => toValue(gids).map((gid) => mapGroupToUserData(gid, groupDisplayNames.get(gid))))\n\n\twatchEffect(async () => {\n\t\tconst missingGroups = toValue(gids).filter((gid) => !groupDisplayNames.has(gid) && !pendingGroups.has(gid))\n\t\tmissingGroups.forEach((gid) => pendingGroups.add(gid))\n\t\tfor (const gid of missingGroups) {\n\t\t\ttry {\n\t\t\t\tconst { data } = await axios.get(generateUrl('apps/files_external/ajax/applicable'), {\n\t\t\t\t\tparams: { pattern: gid, limit: 50 },\n\t\t\t\t})\n\t\t\t\tgroupDisplayNames.set(gid, data.groups[gid] ?? gid)\n\t\t\t} finally {\n\t\t\t\tpendingGroups.delete(gid)\n\t\t\t}\n\t\t}\n\t})\n\n\treturn groups\n}\n\n/**\n * Map a group id to an IUserData object\n *\n * @param gid - The group id to map\n * @param displayName - The resolved display name for the group, falls back to the group id\n */\nexport function mapGroupToUserData(gid: string, displayName?: string) {\n\treturn {\n\t\tid: gid,\n\t\tisNoUser: true,\n\t\tdisplayName: displayName || gid,\n\t\ticonSvg: svgAccountGroupOutline,\n\t}\n}\n","\n\n\n\n\n\t\n\n","\n\n\n\n\n\t\n\n\n\n","\n\n\n\n\n\t\n\n\n\n","/*!\n * SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport type { IMountOptions, IStorage } from '../types.ts'\n\nimport axios from '@nextcloud/axios'\nimport { loadState } from '@nextcloud/initial-state'\nimport { addPasswordConfirmationInterceptors, PwdConfirmationMode } from '@nextcloud/password-confirmation'\nimport { generateUrl } from '@nextcloud/router'\nimport { defineStore } from 'pinia'\nimport { ref, toRaw } from 'vue'\nimport { MountOptionsCheckFilesystem } from '../types.ts'\n\nconst { isAdmin } = loadState<{ isAdmin: boolean }>('files_external', 'settings')\n\n/** The default mount options for NEW storages (not the defaults applied if a config is missing!) */\nexport const DEFAULT_MOUNT_OPTIONS: IMountOptions = Object.freeze({\n\tencrypt: true,\n\tpreviews: true,\n\tfilesystem_check_changes: MountOptionsCheckFilesystem.OncePerRequest,\n\tenable_sharing: false,\n\tencoding_compatibility: false,\n\treadonly: false,\n})\n\nexport const useStorages = defineStore('files_external--storages', () => {\n\tconst globalStorages = ref([])\n\tconst userStorages = ref([])\n\n\t/**\n\t * Create a new global storage\n\t *\n\t * @param storage - The storage to create\n\t */\n\tasync function createGlobalStorage(storage: Partial) {\n\t\tconst url = generateUrl('apps/files_external/globalstorages')\n\t\tconst { data } = await axios.post(\n\t\t\turl,\n\t\t\ttoRaw(storage),\n\t\t\t{ confirmPassword: PwdConfirmationMode.Strict },\n\t\t)\n\t\tglobalStorages.value.push(parseStorage(data))\n\t}\n\n\t/**\n\t * Create a new global storage\n\t *\n\t * @param storage - The storage to create\n\t */\n\tasync function createUserStorage(storage: Partial) {\n\t\tconst url = generateUrl('apps/files_external/userstorages')\n\t\tconst { data } = await axios.post(\n\t\t\turl,\n\t\t\ttoRaw(storage),\n\t\t\t{ confirmPassword: PwdConfirmationMode.Strict },\n\t\t)\n\t\tuserStorages.value.push(parseStorage(data))\n\t}\n\n\t/**\n\t * Delete a storage\n\t *\n\t * @param storage - The storage to delete\n\t */\n\tasync function deleteStorage(storage: IStorage) {\n\t\tawait axios.delete(getUrl(storage), {\n\t\t\tconfirmPassword: PwdConfirmationMode.Strict,\n\t\t})\n\n\t\tif (storage.type === 'personal') {\n\t\t\tuserStorages.value = userStorages.value.filter((s) => s.id !== storage.id)\n\t\t} else {\n\t\t\tglobalStorages.value = globalStorages.value.filter((s) => s.id !== storage.id)\n\t\t}\n\t}\n\n\t/**\n\t * Update an existing storage\n\t *\n\t * @param storage - The storage to update\n\t */\n\tasync function updateStorage(storage: IStorage) {\n\t\tconst { data } = await axios.put(\n\t\t\tgetUrl(storage),\n\t\t\ttoRaw(storage),\n\t\t\t{ confirmPassword: PwdConfirmationMode.Strict },\n\t\t)\n\n\t\toverrideStorage(parseStorage(data))\n\t}\n\n\t/**\n\t * Reload a storage from the server\n\t *\n\t * @param storage - The storage to reload\n\t */\n\tasync function reloadStorage(storage: IStorage) {\n\t\tconst { data } = await axios.get(getUrl(storage))\n\t\toverrideStorage(parseStorage(data))\n\t}\n\n\t// initialize the store\n\tinitialize()\n\n\treturn {\n\t\tglobalStorages,\n\t\tuserStorages,\n\n\t\tcreateGlobalStorage,\n\t\tcreateUserStorage,\n\t\tdeleteStorage,\n\t\treloadStorage,\n\t\tupdateStorage,\n\t}\n\n\t/**\n\t * @param type - The type of storages to load\n\t */\n\tasync function loadStorages(type: string) {\n\t\tconst url = `apps/files_external/${type}`\n\t\tconst { data } = await axios.get>(generateUrl(url))\n\t\treturn Object.values(data)\n\t\t\t.map(parseStorage)\n\t}\n\n\t/**\n\t * Load the storages based on the user role\n\t */\n\tasync function initialize() {\n\t\taddPasswordConfirmationInterceptors(axios)\n\n\t\tif (isAdmin) {\n\t\t\tglobalStorages.value = await loadStorages('globalstorages')\n\t\t} else {\n\t\t\tuserStorages.value = await loadStorages('userstorages')\n\t\t\tglobalStorages.value = await loadStorages('userglobalstorages')\n\t\t}\n\t}\n\n\t/**\n\t * @param storage - The storage to get the URL for\n\t */\n\tfunction getUrl(storage: IStorage) {\n\t\tconst type = storage.type === 'personal' ? 'userstorages' : 'globalstorages'\n\t\treturn generateUrl(`apps/files_external/${type}/${storage.id}`)\n\t}\n\n\t/**\n\t * Override a storage in the store\n\t *\n\t * @param storage - The storage save\n\t */\n\tfunction overrideStorage(storage: IStorage) {\n\t\tif (storage.type === 'personal') {\n\t\t\tconst index = userStorages.value.findIndex((s) => s.id === storage.id)\n\t\t\tuserStorages.value.splice(index, 1, storage)\n\t\t} else {\n\t\t\tconst index = globalStorages.value.findIndex((s) => s.id === storage.id)\n\t\t\tglobalStorages.value.splice(index, 1, storage)\n\t\t}\n\t}\n})\n\n/**\n * @param storage - The storage from API\n */\nfunction parseStorage(storage: IStorage) {\n\treturn {\n\t\t...storage,\n\t\tmountOptions: parseMountOptions(storage.mountOptions),\n\t}\n}\n\n/**\n * Parse the mount options and convert string boolean values to\n * actual booleans and numeric strings to numbers\n *\n * @param options - The mount options to parse\n */\nexport function parseMountOptions(options: IStorage['mountOptions']) {\n\tconst mountOptions = { ...options }\n\tmountOptions.encrypt = convertBooleanOptions(mountOptions.encrypt, true)\n\tmountOptions.previews = convertBooleanOptions(mountOptions.previews, true)\n\tmountOptions.enable_sharing = convertBooleanOptions(mountOptions.enable_sharing, false)\n\tmountOptions.filesystem_check_changes = typeof mountOptions.filesystem_check_changes === 'string'\n\t\t? Number.parseInt(mountOptions.filesystem_check_changes)\n\t\t: (mountOptions.filesystem_check_changes ?? MountOptionsCheckFilesystem.Never) // see default: https://github.com/nextcloud/server/blob/573104451bca64b4f1676933ac029583b4b69992/lib/private/Files/Storage/Common.php#L367\n\tmountOptions.encoding_compatibility = convertBooleanOptions(mountOptions.encoding_compatibility, false)\n\tmountOptions.readonly = convertBooleanOptions(mountOptions.readonly, false)\n\treturn mountOptions\n}\n\n/**\n * Convert backend encoding of boolean options\n *\n * @param option - The option value from API\n * @param fallback - The fallback (default) value\n */\nfunction convertBooleanOptions(option: unknown, fallback = false) {\n\tif (option === undefined) {\n\t\treturn fallback\n\t}\n\treturn option === true || option === 'true' || option === '1'\n}\n","\n\n\n\n\n\t
\n\t\t\t\t\n\t\t\t\t\t{{ t('files_external', 'The cURL support in PHP is not enabled or installed.') }}\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t{{ t('files_external', 'The FTP support in PHP is not enabled or installed.') }}\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t{{ t('files_external', '{module} is not installed.', { module }) }}\n\t\t\t\t\n\t\t\t\t{{ n(\n\t\t\t\t\t'files_external',\n\t\t\t\t\t'Please ask your system administrator to install it as otherwise mounting the following backend is not possible:',\n\t\t\t\t\t'Please ask your system administrator to install it as otherwise mounting the following backends is not possible:',\n\t\t\t\t\tdependants.length,\n\t\t\t\t) }}\n\t\t\t
\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t{{ backend }}\n\t\t\t\t
\n\t\t\t
\n\t\t\n\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\n\t\t\n\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t{{ t('files_external', 'Add external storage') }}\n\t\t\n\n\t\t\n\n\t\t\n\t\n\n\n\n","\n\n\n\n\n\t\n\t\t\n\t\n\n\n\n","\n\n\n\n\t\n\t\n\n","/*!\n * SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { createPinia } from 'pinia'\nimport { createApp } from 'vue'\nimport FilesExternalApp from './views/FilesExternalSettings.vue'\n\nconst pinia = createPinia()\nconst app = createApp(FilesExternalApp)\napp.config.idPrefix = 'files-external'\napp.use(pinia)\napp.mount('#files-external')\n"],"names":["svgAccountGroupOutline","displayNames","reactive","groupDisplayNames","pendingGroups","useUsers","uids","users","computed","toValue","uid","watchEffect","missingUsers","data","axios","generateUrl","displayName","useGroups","gids","groups","gid","mapGroupToUserData","missingGroups","_useModel","__props","entities","ref","selectedUsers","selectedGroups","model","value","u","g","debouncedSearch","useDebounceFn","onSearch","pattern","newEntries","e","id","_createBlock","_unref","NcSelectUsers","$event","t","modelValue","props","configuration","entries","option","ConfigurationFlag","customComponent","hasConfiguration","isLoadingCustomComponent","watch","key","ConfigurationType","onUpdateModelValue","event","config","_createElementBlock","_normalizeClass","$style","_createElementVNode","_Fragment","NcLoadingIcon","_resolveDynamicComponent","_openBlock","_renderList","configOption","configKey","ConfigurationEntry","_vShow","isAdmin","loadState","DEFAULT_MOUNT_OPTIONS","MountOptionsCheckFilesystem","useStorages","defineStore","globalStorages","userStorages","createGlobalStorage","storage","url","toRaw","PwdConfirmationMode","parseStorage","createUserStorage","deleteStorage","getUrl","s","updateStorage","overrideStorage","reloadStorage","initialize","loadStorages","type","addPasswordConfirmationInterceptors","index","parseMountOptions","options","mountOptions","convertBooleanOptions","fallback","hasEncryption","idButton","useId","idFieldset","isExpanded","checkFilesystemOptions","checkFilesystem","_createVNode","NcButton","_cache","NcIconSvgWrapper","mdiChevronDown","mdiChevronRight","_createTextVNode","NcSelect","NcCheckboxRadioSwitch","allowedBackendIds","backends","b","allAuthMechanisms","open","internalStorage","backend","authMechanisms","scheme","authMechanism","a","previous","pruneUnusedAuthMechanismOptions","NcDialog","$emit","_toDisplayString","NcTextField","MountOptions","ApplicableEntities","BackendConfiguration","AuthMechanismConfiguration","store","backendName","authMechanismName","checkingStatus","status","StorageStatus","label","StorageStatusMessage","icon","StorageStatusIcons","isWarning","isError","onDelete","onEdit","spawnDialog","AddExternalStorageDialog","reloadStatus","_hoisted_1","_hoisted_2","group","NcChip","mdiAccountGroupOutline","user","NcUserBubble","mdiPencilOutline","mdiTrashCanOutline","mdiInformationOutline","storages","_hoisted_4","ExternalStorageTableRow","userMounting","availableBackends","allowUserMounting","allowedBackends","backupValue","showSuccess","showError","newValue","oldValue","settings","dependencyIssues","missingModules","showDialog","newStorage","addStorage","error","logger","NcSettingsSection","message","NcNoteCard","dependants","module","n","ExternalStorageTable","mdiPlus","UserMountSettings","globalCredentials","loading","username","password","onSubmit","NcPasswordField","ExternalStoragesSection","GlobalCredentialsSection","pinia","createPinia","app","createApp","FilesExternalApp"],"mappings":"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","x_google_ignoreList":[0]}
\ No newline at end of file