diff --git a/README.md b/README.md index 06ad4145..935e2514 100644 --- a/README.md +++ b/README.md @@ -81,8 +81,11 @@ Once the services are up, you can access the following endpoints: - Repository UI : `http://:8081` - Application Manager UI: `http://:18084/web` - OSS Management: `http://:18084/web/oss/list` - - Application Catalog Management: `http://:18084/web/softwareCatalog` - - Repository Management: `http://:18084/web/repository/list` + - Application Catalog Management: `http://:18084/web/applications/swcatalog` + - Application Status: `http://:18084/web/applications/status` + - Repository Management: `http://:18084/web/applications/repository` + +The legacy `/web/softwareCatalog` and `/web/repository/*` UI routes redirect to the application routes above for backward compatibility. - Yaml Generator: `http://:18084/web/generate/yaml` ### Step 4-1: Certainly! Here’s the translated list of settings: diff --git a/applicationFE/package.json b/applicationFE/package.json index 9cc94c61..738f6ef4 100644 --- a/applicationFE/package.json +++ b/applicationFE/package.json @@ -10,6 +10,10 @@ "build-only": "vite build", "type-check": "vue-tsc --build --force", "test:install-integration": "node scripts/test-install-target.mjs", + "test:vm-clustering": "node scripts/test-vm-clustering.mjs", + "test:ingress-preflight": "node scripts/test-ingress-preflight.mjs", + "test:ibm-ingress-tls": "node scripts/test-ibm-ingress-tls.mjs", + "test:ingress-preparation": "node scripts/test-ingress-preparation.mjs", "lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore", "format": "prettier --write src/" }, diff --git a/applicationFE/scripts/test-ibm-ingress-tls.mjs b/applicationFE/scripts/test-ibm-ingress-tls.mjs new file mode 100644 index 00000000..11a18e8c --- /dev/null +++ b/applicationFE/scripts/test-ibm-ingress-tls.mjs @@ -0,0 +1,67 @@ +import assert from 'node:assert/strict' +import { readFile } from 'node:fs/promises' +import ts from 'typescript' +import * as Vue from 'vue' +import { compile } from '@vue/compiler-dom' +import { renderToString } from '@vue/server-renderer' + +const source = await readFile(new URL('../src/views/softwareCatalog/components/applicationInstallationForm.vue', import.meta.url), 'utf8') +const template = source.slice(0, source.indexOf('{ + const data={ingressEnabled:true,ingressHost:host,ingressPath:'/',ingressTlsEnabled:tls,ingressTlsSecret:'catalog-cert'} + const build = new Function('ingressData','isIbmCluster','effectiveIngressClass','normalizeIngressHost',code)( + Vue.ref(data),Vue.ref(ibm),Vue.ref(ibm?'public-iks-k8s-nginx':'nginx'),value=>value) + const payload=build() + assert.equal(payload.ingressTlsEnabled,ibm?false:tls) + assert.equal(payload.ingressTlsSecret,ibm?null:'catalog-cert') + assert.equal(payload.ingressHost,host) + assert.deepEqual(data,{ingressEnabled:true,ingressHost:host,ingressPath:'/',ingressTlsEnabled:tls,ingressTlsSecret:'catalog-cert'}) + }) +} +await test('cluster switching cannot accidentally enable IBM HTTPS',()=>{ + const ibm=Vue.ref(false), data=Vue.ref({ingressEnabled:true,ingressHost:'chosen.example.com',ingressTlsEnabled:true,ingressTlsSecret:'existing-cert'}) + const build = new Function('ingressData','isIbmCluster','effectiveIngressClass','normalizeIngressHost',code)(data,ibm,Vue.ref('nginx'),value=>value) + assert.equal(build().ingressTlsEnabled,true) + ibm.value=true;assert.equal(build().ingressTlsEnabled,false);assert.equal(build().ingressTlsSecret,null) + ibm.value=false;assert.equal(build().ingressTlsEnabled,true);assert.equal(build().ingressTlsSecret,'existing-cert') +}) +await test('protocol control, TLS discovery and preparation text are absent',()=>{ + for(const removed of ['ibmIngressProtocol','loadIbmTlsSettings','k8sIngressTlsSettings','ingressPreparationMessage','Use IBM domain','Loading managed HTTPS'])assert.ok(!source.includes(removed),removed) + assert.ok(template.includes('HTTP via the IBM-managed load balancer.')) + assert.ok(template.includes('HTTP does not require a certificate and is not encrypted.')) +}) + +// Render the actual footer for both modal and embedded modes, not a duplicate UI. +const footerStart=template.indexOf(']*role="status"/) +}) +console.log('IBM HTTP and completion UI tests passed ('+cases+' cases).') diff --git a/applicationFE/scripts/test-ingress-preflight.mjs b/applicationFE/scripts/test-ingress-preflight.mjs new file mode 100644 index 00000000..21ddf37a --- /dev/null +++ b/applicationFE/scripts/test-ingress-preflight.mjs @@ -0,0 +1,202 @@ +import assert from 'node:assert/strict' +import { readFile } from 'node:fs/promises' +import ts from 'typescript' +import { ref, watch, computed } from 'vue' + +// Execute the production form functions and its real Vue invalidation watcher (no browser/network). +const source = await readFile(new URL('../src/views/softwareCatalog/components/applicationInstallationForm.vue', import.meta.url), 'utf8') +function between(start, end) { + const begin = source.indexOf(start) + const finish = source.indexOf(end, begin) + assert.ok(begin >= 0 && finish > begin, `Missing production block: ${start}`) + return source.slice(begin, finish) +} +const code = ts.transpileModule([ + 'let specCheckVersion = 0;', + between('const isIbmCluster =', 'const selectedVmProvider ='), + between('const normalizeIngressHost =', 'const _getSoftwareCatalogList ='), + between('const onChangeForm =', 'const onSelectVm ='), + between('const buildIngressPayload =', 'const selectedCatalogInfo ='), + between('watch([selectInfra,', 'watch(selectInfra, async'), + 'return { specCheck, buildIngressPayload, onChangeForm };' +].join('\n'), { compilerOptions: { target: ts.ScriptTarget.ES2022 } }).outputText + +function harness(options = {}) { + const calls = [] + const state = Object.fromEntries(Object.entries({ + selectInfra: 'K8S', selectNsId: 'project-a', selectCluster: 'cluster-a', selectMci: 'mci-a', + selectedVmList: ['vm-a'], vmTargetMode: 'VM', selectVmNodeGroupId: '', selectedNodeGroupVmIds: ['vm-a', 'vm-b'], + selectedCatalogIdx: 7, selectedStorageClass: 'standard', projectContextKey: 'ws/project-a', + modalTitle: 'Application Installation', projectScopeError: '', specCheckFlag: true, specChecking: false, + specCheckErrors: [], specCheckWarnings: [], servicePortCidr: '203.0.113.8/32', + ingressData: { ingressEnabled: true, ingressHost: 'https://APP.Example.com:30880/ignored', + ingressPath: '/app', ingressClass: 'nginx', ingressTlsEnabled: false, ingressTlsSecret: '' } + }).map(([name, value]) => [name, ref(value)])) + const env = { + ...state, watch, + computed, selectedClusterProvider: ref(options.provider || 'aws'), + validateStorageClassSelection: () => true, + toast: { error: message => calls.push(['toast-error', message]), success: message => calls.push(['toast-success', message]) }, + confirm: message => { calls.push(['confirm', message]); return options.confirm ?? true }, + k8sIngressCheck: async payload => { + calls.push(['ingress', payload]) + return options.ingress ? options.ingress(payload) : { data: { valid: true, errors: [], warnings: [] } } + }, + k8sSpecCheck: async payload => { + calls.push(['resources', payload]) + return options.resources ? options.resources(payload) : { data: true } + }, + vmSpecCheck: async payload => { calls.push(['vm', payload]); return { data: true } } + } + const functions = new Function(...Object.keys(env), code)(...Object.values(env)) + return { ...state, ...functions, calls } +} + +let cases = 0 +async function test(name, fn) { await fn(); cases++; console.log(`PASS ${name}`) } +const count = (h, kind) => h.calls.filter(c => c[0] === kind).length + +await test('current normalized inputs are checked before resources; an empty UI Secret is omitted', async () => { + const h = harness() + await h.specCheck() + assert.equal(h.specCheckFlag.value, false) + assert.equal(h.specChecking.value, false) + assert.deepEqual(h.calls.slice(0, 2).map(c => c[0]), ['ingress', 'resources']) + assert.deepEqual(h.calls[0][1], { + namespace: 'project-a', clusterName: 'cluster-a', catalogId: 7, ingressEnabled: true, + ingressHost: 'app.example.com', ingressPath: '/app', ingressClass: 'nginx', ingressTlsEnabled: false, ingressTlsSecret: null, + servicePortCidr: '203.0.113.8/32' + }) + assert.deepEqual(h.calls[0][1], { namespace: 'project-a', clusterName: 'cluster-a', catalogId: 7, servicePortCidr: '203.0.113.8/32', ...h.buildIngressPayload() }) +}) + +await test('conflicts cannot enter the low-spec override flow', async () => { + const h = harness({ ingress: () => ({ data: { valid: false, errors: ['Host/Path conflict'], warnings: [] } }) }) + await h.specCheck() + assert.equal(h.specCheckFlag.value, true) + assert.deepEqual(h.specCheckErrors.value, ['Host/Path conflict']) + assert.equal(count(h, 'resources'), 0) + assert.equal(count(h, 'confirm'), 0) +}) + +await test('TLS readiness warnings are visible but do not block deployment', async () => { + const h = harness({ ingress: () => ({ data: { valid: true, errors: [], warnings: ['Secret is not ready'] } }) }) + h.ingressData.value.ingressTlsEnabled = true + h.ingressData.value.ingressTlsSecret = 'selected-cert' + await h.specCheck() + assert.equal(h.specCheckFlag.value, false) + assert.deepEqual(h.specCheckWarnings.value, ['Secret is not ready']) + assert.equal(h.calls[0][1].ingressTlsSecret, 'selected-cert') +}) + +for (const input of ['ingressHost', 'ingressPath', 'ingressClass', 'ingressEnabled', 'ingressTlsEnabled', 'ingressTlsSecret']) { + await test(`changing ${input} invalidates the completed check`, async () => { + const h = harness(); await h.specCheck() + h.specCheckWarnings.value = ['old warning'] + h.ingressData.value[input] = typeof h.ingressData.value[input] === 'boolean' ? !h.ingressData.value[input] : 'changed' + assert.equal(h.specCheckFlag.value, true) + assert.deepEqual(h.specCheckWarnings.value, []) + }) +} +for (const input of ['selectNsId', 'selectCluster', 'selectedCatalogIdx', 'projectContextKey', 'selectedStorageClass', 'servicePortCidr']) { + await test(`changing ${input} invalidates the completed check`, async () => { + const h = harness(); await h.specCheck() + h[input].value = input === 'selectedCatalogIdx' ? 8 : 'changed' + assert.equal(h.specCheckFlag.value, true) + }) +} +for (const stage of ['ingress', 'resources']) { + await test(`late ${stage} response cannot validate changed or reverted form inputs`, async () => { + let finish + const pending = new Promise(resolve => { finish = resolve }) + const h = harness({ [stage]: () => pending }) + const run = h.specCheck() + await Promise.resolve(); await Promise.resolve() + const previous = h.ingressData.value.ingressHost + h.ingressData.value.ingressHost = 'changed.example.com' + h.ingressData.value.ingressHost = previous + finish({ data: stage === 'ingress' ? { valid: true, errors: [], warnings: ['stale'] } : true }) + await run + assert.equal(h.specCheckFlag.value, true) + assert.equal(h.specChecking.value, false) + assert.deepEqual(h.specCheckWarnings.value, []) + assert.equal(count(h, 'toast-success'), 0) + }) +} +for (const result of ['reject', 'malformed']) { + await test(`${result} Ingress response fails closed and permits retry`, async () => { + const h = harness({ ingress: () => { if (result === 'reject') throw new Error('private'); return { data: {} } } }) + await h.specCheck() + assert.equal(h.specCheckFlag.value, true) + assert.equal(h.specChecking.value, false) + assert.equal(count(h, 'resources'), 0) + assert.ok(h.specCheckErrors.value.length) + assert.ok(!h.specCheckErrors.value.join().includes('private')) + await h.specCheck() + assert.equal(count(h, 'ingress'), 2) + }) +} +for (const proceed of [false, true]) { + await test(`resource shortage retains existing user override=${proceed}`, async () => { + const h = harness({ resources: () => ({ data: false }), confirm: proceed }) + await h.specCheck() + assert.equal(h.specCheckFlag.value, !proceed) + assert.equal(count(h, 'confirm'), 1) + }) +} +await test('duplicate clicks send only one request while checking', async () => { + let finish + const h = harness({ ingress: () => new Promise(resolve => { finish = resolve }) }) + const first = h.specCheck(); await h.specCheck() + assert.equal(count(h, 'ingress'), 1) + finish({ data: { valid: true } }); await first +}) +await test('VM checks never call the K8s preflight and preserve NodeGroup checks', async () => { + const h = harness(); h.selectInfra.value = 'VM'; h.vmTargetMode.value = 'NODE_GROUP'; h.selectVmNodeGroupId.value = 'group-a' + await h.specCheck() + assert.equal(count(h, 'ingress'), 0) + assert.equal(count(h, 'vm'), 2) + assert.equal(h.specCheckFlag.value, false) +}) +await test('missing target prevents any API call', async () => { + const h = harness(); h.selectCluster.value = ''; await h.specCheck() + assert.equal(count(h, 'ingress'), 0) + assert.equal(h.specCheckFlag.value, true) +}) +await test('retry after correcting the route clears errors and can pass', async () => { + let invalid = true + const h = harness({ ingress: () => ({ data: { valid: !invalid, errors: invalid ? ['conflict'] : [] } }) }) + await h.specCheck(); h.ingressData.value.ingressPath = '/new'; invalid = false; await h.specCheck() + assert.equal(h.specCheckFlag.value, false) + assert.deepEqual(h.specCheckErrors.value, []) +}) + +assert.match(between('const runInstall =', 'const buildIngressPayload ='), /\.\.\.buildIngressPayload\(\)/) +assert.match(between('const runInstall =', 'const buildIngressPayload ='), /specCheckFlag\.value \|\| specChecking\.value/) +for (const provider of ['ibm', 'IBM', 'ibm-jp-osa', 'ibmcloud', 'ibm-vpc', 'aws', 'tencent']) { + await test(`provider ${provider} selects its effective Ingress class`, async () => { + const h = harness({ provider }); await h.specCheck() + assert.equal(h.calls[0][1].ingressClass, provider.toLowerCase().startsWith('ibm') ? 'public-iks-k8s-nginx' : 'nginx') + assert.equal(h.ingressData.value.ingressClass, 'nginx', 'catalog defaults remain unchanged') + if (provider.toLowerCase().startsWith('ibm')) { + h.ingressData.value.ingressTlsEnabled = false + h.ingressData.value.ingressTlsSecret = 'stale-catalog-cert' + assert.equal(h.buildIngressPayload().ingressTlsEnabled, false) + assert.equal(h.buildIngressPayload().ingressTlsSecret, null, 'IBM certificate is resolved by the server') + } + }) +} +assert.match(between('const runInstall =', 'const buildIngressPayload ='), /openServicePort:.*!isIbmCluster\.value/) +const statusSource = await readFile(new URL('../src/views/softwareCatalog/components/softwareCatalogList.vue', import.meta.url), 'utf8') +const endpointSource = statusSource.slice(statusSource.indexOf('const getEndpoint ='), statusSource.indexOf('const displayValue =')) +const getEndpoint = new Function(ts.transpileModule(endpointSource + '\nreturn getEndpoint', { compilerOptions: { target: ts.ScriptTarget.ES2022 } }).outputText)() +await test('IBM endpoint uses Ingress Host and scheme, not the worker IP or backend port', async () => { + for (const ingressClass of ['public-iks-k8s-nginx', 'private-iks-k8s-nginx']) { + for (const ingressTlsEnabled of [false, true]) { + assert.equal(getEndpoint({ ingressEnabled: true, ingressClass, ingressTlsEnabled, ingressHost: 'app.example.com', ingressPath: '/test' }, + { publicIp: '10.150.0.8', servicePort: 3000 }), `${ingressTlsEnabled ? 'https' : 'http'}://app.example.com/test`) + } + } + assert.equal(getEndpoint({}, { publicIp: '203.0.113.8', servicePort: 8080 }), '203.0.113.8:8080') +}) +console.log(`Ingress preflight form tests passed (${cases} cases).`) diff --git a/applicationFE/scripts/test-ingress-preparation.mjs b/applicationFE/scripts/test-ingress-preparation.mjs new file mode 100644 index 00000000..cdb2520c --- /dev/null +++ b/applicationFE/scripts/test-ingress-preparation.mjs @@ -0,0 +1,211 @@ +import assert from 'node:assert/strict' +import { readFile } from 'node:fs/promises' +import ts from 'typescript' +import { ref, computed } from 'vue' + +const moduleSource = await readFile(new URL('../src/utils/ingressPreparation.ts', import.meta.url), 'utf8') +const js = ts.transpileModule(moduleSource, { compilerOptions: { target: ts.ScriptTarget.ES2022, module: ts.ModuleKind.ES2022 } }).outputText +const { waitForIngressPreparation } = await import('data:text/javascript;base64,' + Buffer.from(js).toString('base64')) +const target = { namespace: 'project-a', clusterName: 'cluster-a' } +const state = (status = 'QUEUED', extra = {}) => ({ id: 'job-1', ...target, state: status, message: status, ...extra }) +let cases = 0 +async function test(name, fn) { await fn(); cases++; console.log('PASS ' + name) } +const noSleep = async () => {} + +await test('queued/running/ready progress polls only the submitted job', async () => { + const calls = [], messages = [], remaining = [state('RUNNING'), state('READY')] + await waitForIngressPreparation(state(), target, async id => { calls.push(id); return remaining.shift() }, m => messages.push(m), () => true, noSleep) + assert.deepEqual(calls, ['job-1', 'job-1']); assert.deepEqual(messages, ['QUEUED', 'RUNNING', 'READY']) +}) +await test('already-ready cluster never polls', async () => { + await waitForIngressPreparation(state('READY'), target, () => assert.fail('Unexpected poll'), () => {}, () => true, noSleep) +}) +for (const patch of [{ id: 'other' }, { namespace: 'other' }, { clusterName: 'other' }]) { + await test(`mismatched response ${JSON.stringify(patch)} stops deployment`, async () => { + await assert.rejects(waitForIngressPreparation(state(), target, async () => state('READY', patch), () => {}, () => true, noSleep), /different target/) + }) +} +for (const initial of [undefined, {}, state('UNKNOWN'), state('FAILED', { message: 'DNS validation failed' })]) { + await test(`invalid or failed status ${JSON.stringify(initial)} never permits deployment`, async () => { + await assert.rejects(waitForIngressPreparation(initial, target, () => assert.fail('Unexpected poll'), () => {}, () => true, noSleep)) + }) +} +await test('form cancel or Project change during wait prevents another poll', async () => { + let current = true + await assert.rejects(waitForIngressPreparation(state(), target, () => assert.fail('Unexpected poll'), () => {}, () => current, + async () => { current = false }), /Project changed/) +}) +await test('form change during a pending status response rejects even READY', async () => { + let current = true + await assert.rejects(waitForIngressPreparation(state(), target, async () => { current = false; return state('READY') }, () => {}, () => current, noSleep), /Project changed/) +}) +await test('timeout and network failure never submit a replacement job', async () => { + let polls = 0 + await assert.rejects(waitForIngressPreparation(state(), target, async () => { polls++; return state() }, () => {}, () => true, noSleep, 2), /taking longer/) + assert.equal(polls, 2) + await assert.rejects(waitForIngressPreparation(state(), target, async () => { throw new Error('network failed') }, () => {}, () => true, noSleep), /network failed/) +}) + +// Execute the actual form's deployment function, not a duplicate implementation of its orchestration. +const source = await readFile(new URL('../src/views/softwareCatalog/components/applicationInstallationForm.vue', import.meta.url), 'utf8') +const start = source.indexOf('const runInstall =') +const end = source.indexOf('const buildIngressPayload =', start) +const formCode = ts.transpileModule(`let installationFormMounted=true, preparationEpoch=0, specCheckVersion=0; +${source.slice(start,end)} +${source.slice(end, source.indexOf('const specCheck =', end))} +return { runInstall, cancel: () => { preparationEpoch++ }, invalidate: () => { specCheckVersion++ }, unmount: () => { installationFormMounted=false } }`, +{ compilerOptions: { target: ts.ScriptTarget.ES2022 } }).outputText +function harness(options = {}) { + const calls = [] + const values = Object.fromEntries(Object.entries({ + deploying: false, deploymentCompleted: false, modalTitle: 'Application Installation', selectInfra: options.infra || 'K8S', specCheckFlag: false, + specChecking: false, projectScopeError: '', servicePortCidr: '203.0.113.4/32', + ingressData: { ingressEnabled: options.ingress !== false, ingressHost: 'app.company.com', ingressPath: '/', ingressTlsEnabled: Boolean(options.tls) }, + isJupyterObjectStorageCatalog: Boolean(options.jupyter), projectContextKey: 'workspace/project-a', + objectStorageData: { selectedStorageIds: ['storage-a'], jupyterToken: 'unit-test-token-12345' }, objectStorageCheckPassed: true, + inputServicePort: '', selectNsId: target.namespace, selectCluster: target.clusterName, isIbmCluster: options.ibm !== false, + k8sOpenIngress: true, selectedCatalogIdx: 7, hpaData: {}, workloadRebalancingEnabled: false, selectedResourceType: 'helm', + selectDeploymentType:'Standalone',canSelectClustering:false,vmNetworkExposureMode:'PRIVATE',vmTargetMode:'VM', + inputApplications:'Nginx',selectMci:'infra-a',selectedVmList:['vm-a'],selectVmNodeGroupId:'',isTargetLocked:false + }).map(([k,v]) => [k,ref(v)])) + const args = { + ...values, + toast: { success: m => calls.push(['success',m]), error: m => calls.push(['error',m]) }, + validateStorageClassSelection: () => true, + emitDeploymentEvent: (...e) => calls.push(['event',...e]), getDeploymentId: () => 123, + buildK8sAdditionalConfig: () => ({}), + buildVmAdditionalConfig: () => ({}), props:{}, + runVmInstall: async payload => { calls.push(['deploy',payload]); return {data:{id:123}} }, + normalizeIngressHost: host => host.trim().toLowerCase(), + effectiveIngressClass: computed(() => values.isIbmCluster.value ? 'public-iks-k8s-nginx' : 'nginx'), + startIngressPreparation: async payload => { calls.push(['prepare',payload]); return { data: state(options.initial || 'QUEUED') } }, + getIngressPreparation: async (ns,id) => { + calls.push(['poll',ns,id]); return { data: options.poll ? await options.poll() : state('READY') } + }, + waitForIngressPreparation: (...args) => waitForIngressPreparation(...args,noSleep,10), + runK8SInstall: async payload => { + calls.push(['deploy',payload]); + return options.deploy ? options.deploy(payload) : { data: { id: 123 } } + } + } + return { ...values, calls, ...new Function(...Object.keys(args),formCode)(...Object.values(args)) } +} +await test('actual IBM Deploy uses prepare -> poll READY -> application API with identical target', async () => { + const h=harness(); await h.runInstall() + assert.deepEqual(h.calls.filter(c => ['prepare','poll','deploy'].includes(c[0])).map(c => c[0]), ['prepare','poll','deploy']) + const prepared=h.calls.find(c => c[0]==='prepare')[1], deployed=h.calls.find(c => c[0]==='deploy')[1] + for(const key of ['namespace','clusterName','catalogId','ingressHost','servicePortCidr']) assert.equal(prepared[key],deployed[key]) + assert.equal(deployed.openServicePort,false); assert.equal(h.deploying.value,false) +}) +for(const event of ['cancel','invalidate','unmount','project']) { + await test(`actual form ${event} during preparation does not call application deployment`, async () => { + let h + h=harness({ poll: async () => { + if(event==='project') h.projectContextKey.value='workspace/project-b'; else h[event]() + return state('READY') + } }) + await h.runInstall(); assert.equal(h.calls.filter(c => c[0]==='deploy').length,0) + assert.equal(h.deploying.value,false) + }) +} +await test('failed certificate/LB preparation stops actual application creation', async () => { + const h=harness({ poll: async () => state('FAILED',{ message:'Certificate failed' }) }); await h.runInstall() + assert.equal(h.calls.filter(c => c[0]==='deploy').length,0) + assert.ok(h.calls.some(c => c[0]==='error' && c[1]==='Certificate failed')) +}) +await test('IBM Jupyter overrides catalog TLS to HTTP while the non-IBM HTTP-only guard remains', async () => { + const ibm=harness({jupyter:true,tls:true}); await ibm.runInstall() + assert.equal(ibm.calls.filter(c => c[0]==='deploy').length,1) + assert.equal(ibm.calls.find(c => c[0]==='deploy')[1].ingressTlsEnabled,false) + const other=harness({jupyter:true,tls:true,ibm:false}); await other.runInstall() + assert.equal(other.calls.filter(c => c[0]==='deploy').length,0) +}) +for(const options of [{ibm:false},{ingress:false}]) { + await test(`existing non-IBM/non-Ingress deployment is unchanged ${JSON.stringify(options)}`, async () => { + const h=harness(options); await h.runInstall() + assert.equal(h.calls.filter(c => c[0]==='prepare').length,0) + assert.equal(h.calls.filter(c => c[0]==='deploy').length,1) + }) +} +await test('duplicate Deploy clicks do not create a second preparation', async () => { + let finish + const h=harness({ poll: () => new Promise(resolve => { finish=resolve }) }) + const first=h.runInstall(); await h.runInstall() + for(let i=0;i<10 && !finish;i++) await Promise.resolve() + finish(state('READY')); await first + assert.equal(h.calls.filter(c => c[0]==='prepare').length,1) + assert.equal(h.calls.filter(c => c[0]==='deploy').length,1) +}) +const disabledCode = source.slice(source.indexOf('const deployDisabled = computed('), source.indexOf('function getDefaultObjectStorageData(')) +function disabled(h) { + const args={...h,computed,storageClassRequired:ref(false),storageClassErrorMessage:ref(''),_:{isEmpty:value=>!value}} + return new Function(...Object.keys(args),disabledCode+'\nreturn deployDisabled.value')(...Object.values(args)) +} +for(const options of [{ibm:true,tls:false},{ibm:true,tls:true},{ibm:false},{ibm:true,ingress:false},{infra:'VM',ibm:false}]) { + await test(`completed deployment remains locked against sequential clicks ${JSON.stringify(options)}`,async()=>{ + const h=harness(options); await h.runInstall() + assert.equal(h.deploymentCompleted.value,true) + assert.equal(h.deploying.value,false) + assert.equal(disabled(h),true) + await h.runInstall() + assert.equal(h.calls.filter(c=>c[0]==='deploy').length,1) + assert.equal(h.calls.filter(c=>c[0]==='event'&&c[1]==='DEPLOY_SUCCEEDED').length,1) + if(options.ibm!==false&&options.ingress!==false){ + for(const kind of ['prepare','deploy'])assert.equal(h.calls.find(c=>c[0]===kind)[1].ingressTlsEnabled,false) + } + }) +} +for(const failure of ['preparation','application','empty-response']) { + await test(`failure can be retried without setting completed: ${failure}`,async()=>{ + let attempts=0 + const h=harness(failure==='preparation' + ? {poll:async()=>++attempts===1?state('FAILED',{message:'Preparation failed'}):state('READY')} + : {deploy:async()=>{ + if(++attempts===1){if(failure==='empty-response')return {data:null};throw new Error('Application failed')} + return {data:{id:123}} + }}) + await h.runInstall(); assert.equal(h.deploymentCompleted.value,false); assert.equal(disabled(h),false) + await h.runInstall(); assert.equal(h.deploymentCompleted.value,true); assert.equal(disabled(h),true) + }) +} +for(const event of ['cancel','invalidate','unmount','project']) { + await test(`late app response does not mark another form as completed after ${event}`,async()=>{ + let finish + const h=harness({initial:'READY',deploy:()=>new Promise(resolve=>{finish=resolve})}) + const pending=h.runInstall() + for(let i=0;i<10&&!finish;i++)await Promise.resolve() + if(event==='project')h.projectContextKey.value='workspace/project-b';else h[event]() + finish({data:{id:123}});await pending + assert.equal(h.deploymentCompleted.value,false) + assert.equal(h.calls.filter(c=>c[0]==='event'&&c[1]==='DEPLOY_SUCCEEDED').length,0) + }) +} +assert.ok(!source.includes('ingressPreparationMessage')) +assert.match(source,/const setInit = async \(\) => \{\s*preparationEpoch\+\+\s*deploymentCompleted\.value = false/) +await test('closing a completed form retains its guard until the next opening',async()=>{ + let resets=0,events=0 + const completed=ref(true) + const cancelCode=ts.transpileModule(source.slice(source.indexOf('const handleCancel ='),source.indexOf('const viewAppsStatus =')), + {compilerOptions:{target:ts.ScriptTarget.ES2022}}).outputText + const cancel=new Function('deploymentCompleted','deploying','emit','setInit', + 'let preparationEpoch=0;\n'+cancelCode+'\nreturn handleCancel;')(completed,ref(false),()=>events++,async()=>resets++) + await cancel();assert.equal(completed.value,true);assert.equal(resets,0);assert.equal(events,1) + completed.value=false;await cancel();assert.equal(resets,1) +}) +for(const mode of ['modal','embedded','already-hidden']){ + await test('Apps Status navigation cleans up only the visible local modal: '+mode,async()=>{ + const calls=[] + let hidden + const element={classList:{contains:()=>mode!=='already-hidden'},addEventListener:(name,callback)=>{assert.equal(name,'hidden.bs.modal');hidden=callback}} + const navigationCode=ts.transpileModule(source.slice(source.indexOf('const viewAppsStatus ='),source.indexOf('const getDeploymentTarget =')), + {compilerOptions:{target:ts.ScriptTarget.ES2022}}).outputText + const navigate=new Function('document','props','Modal','router',navigationCode+'\nreturn viewAppsStatus;')( + {getElementById:()=>element},{formId:'test-form',embedded:mode==='embedded'}, + {getInstance:()=>({hide:()=>{calls.push('hide');hidden()}})}, + {push:async route=>{assert.equal(route.name,'applicationStatus');calls.push('navigate')}}) + await navigate();assert.deepEqual(calls,mode==='modal'?['hide','navigate']:['navigate']) + }) +} +assert.match(source,/addEventListener\('hide\.bs\.modal', onInstallationModalHide\)/) +assert.match(source,/removeEventListener\('hide\.bs\.modal', onInstallationModalHide\)/) +console.log(`Ingress preparation tests passed (${cases} cases).`) diff --git a/applicationFE/scripts/test-install-target.mjs b/applicationFE/scripts/test-install-target.mjs index fdc81af6..7f1bb0ce 100644 --- a/applicationFE/scripts/test-install-target.mjs +++ b/applicationFE/scripts/test-install-target.mjs @@ -11,7 +11,7 @@ const transpiled = ts.transpileModule(source, { } }).outputText const moduleUrl = `data:text/javascript;base64,${Buffer.from(transpiled).toString('base64')}` -const { parseInstallTarget } = await import(moduleUrl) +const { parseInstallTarget, resolveInstallVmTarget } = await import(moduleUrl) const generatedId = () => 'generated-request-id' const validVm = parseInstallTarget( @@ -24,9 +24,26 @@ assert.deepEqual(validVm.target, { targetType: 'VM', mciId: 'mci-01', vmId: 'vm-01', + nodeGroupId: '', clusterId: '' }) +const validVmWithNodeGroup = parseInstallTarget( + '?targetType=VM&mciId=mci-01&nodeGroupId=group-01&vmId=vm-01', + generatedId +) +assert.equal(validVmWithNodeGroup.ok, true) +assert.equal(validVmWithNodeGroup.target.nodeGroupId, 'group-01') +assert.equal(validVmWithNodeGroup.target.vmId, 'vm-01') + +const validNodeGroup = parseInstallTarget( + '?targetType=VM&mciId=mci-01&nodeGroupId=group-01', + generatedId +) +assert.equal(validNodeGroup.ok, true) +assert.equal(validNodeGroup.target.nodeGroupId, 'group-01') +assert.equal(validNodeGroup.target.vmId, '') + const validK8s = parseInstallTarget('?targetType=k8s&clusterId=cluster-01', generatedId) assert.equal(validK8s.ok, true) assert.equal(validK8s.target.targetType, 'K8S') @@ -34,7 +51,7 @@ assert.equal(validK8s.target.requestId, 'generated-request-id') const invalidCases = [ ['', 'targetType must be VM or K8S.'], - ['?targetType=VM&mciId=mci-01', 'vmId is required.'], + ['?targetType=VM&mciId=mci-01', 'vmId or nodeGroupId is required.'], ['?targetType=VM&mciId=mci-01&vmId=vm-01&clusterId=cluster-01', 'clusterId cannot be used'], ['?targetType=K8S', 'clusterId is required.'], ['?targetType=K8S&clusterId=cluster-01&mciId=mci-01', 'mciId and vmId cannot be used'], @@ -42,7 +59,9 @@ const invalidCases = [ ['?targetType=VM&mciId=mci-01&mciId=mci-02&vmId=vm-01', 'must be provided only once'], ['?targetType=VM&mciId=mci-01&vmId=vm-01&requestId=one&requestId=two', 'must be provided only once'], ['?targetType=VM&mciId=mci-01&vmId=vm-01&namespaceId=other', 'must not be supplied in the URL'], - ['?targetType=K8S&clusterId=cluster-01&nodeGroupId=group-01', 'must not be supplied in the URL'], + ['?targetType=K8S&clusterId=cluster-01&nodeGroupId=group-01', 'nodeGroupId cannot be used with a K8S target'], + ['?targetType=VM&mciId=mci-01&nodeGroupId=group-01&nodeGroupId=group-02', 'must be provided only once'], + ['?targetType=VM&mciId=mci-01&nodeGroupId=bad/path', 'unsupported path characters'], ['?targetType=K8S&clusterId=cluster-01&accessToken=secret', 'Unsupported query parameter'], [`?targetType=K8S&clusterId=${'x'.repeat(201)}`, '200 characters or fewer'] ] @@ -53,4 +72,53 @@ for (const [query, expectedMessage] of invalidCases) { assert.match(result.error, new RegExp(expectedMessage.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'))) } -console.log(`Install target parser tests passed (${invalidCases.length + 2} cases).`) +const vms = [ + { id: 'vm-a', subGroupId: 'group-a', status: 'Running' }, + { id: 'vm-b', subGroupId: 'group-a', status: 'RUNNING' }, + { id: 'vm-stopped', subGroupId: 'group-a', status: 'Stopped' }, + { id: 'vm-other', subGroupId: 'group-b', status: 'Running' }, + { id: 'vm-no-running', subGroupId: 'group-stopped', status: 'Stopped' }, + { name: 'vm-by-name', subGroupId: 'group-a', status: 'running' } +] + +const legacyVmTarget = resolveInstallVmTarget(vms, { vmId: 'VM-A', nodeGroupId: '' }) +assert.equal(legacyVmTarget.ok, true) +assert.equal(legacyVmTarget.mode, 'VM') +assert.equal(legacyVmTarget.vmId, 'vm-a') + +const verifiedVmTarget = resolveInstallVmTarget(vms, { vmId: 'vm-b', nodeGroupId: 'group-a' }) +assert.equal(verifiedVmTarget.ok, true) +assert.equal(verifiedVmTarget.mode, 'VM') +assert.equal(verifiedVmTarget.nodeGroupId, 'group-a') + +const mismatchedVmTarget = resolveInstallVmTarget(vms, { vmId: 'vm-b', nodeGroupId: 'group-b' }) +assert.equal(mismatchedVmTarget.ok, false) +assert.match(mismatchedVmTarget.error, /does not belong/) + +const groupTarget = resolveInstallVmTarget(vms, { vmId: '', nodeGroupId: 'group-a' }) +assert.equal(groupTarget.ok, true) +assert.equal(groupTarget.mode, 'NODE_GROUP') +assert.deepEqual(groupTarget.runningVmIds, ['vm-a', 'vm-b', 'vm-by-name']) +assert.equal(groupTarget.members.length, 4) + +const missingVmTarget = resolveInstallVmTarget(vms, { vmId: 'missing', nodeGroupId: '' }) +assert.equal(missingVmTarget.ok, false) +assert.match(missingVmTarget.error, /was not found/) + +const missingGroupTarget = resolveInstallVmTarget(vms, { vmId: '', nodeGroupId: 'missing' }) +assert.equal(missingGroupTarget.ok, false) +assert.match(missingGroupTarget.error, /was not found/) + +const stoppedGroupTarget = resolveInstallVmTarget(vms, { vmId: '', nodeGroupId: 'group-stopped' }) +assert.equal(stoppedGroupTarget.ok, false) +assert.match(stoppedGroupTarget.error, /no running VMs/) + +const iframe = await readFile(new URL('../src/views/softwareCatalog/InstallSoftwareIframe.vue', import.meta.url), 'utf8') +const form = await readFile(new URL('../src/views/softwareCatalog/components/applicationInstallationForm.vue', import.meta.url), 'utf8') +assert.match(iframe, /:target-node-group-id="targetResult\.target\.nodeGroupId"/) +assert.match(form, /resolveInstallVmTarget\(availableVms/) +assert.match(form, /vmTargetMode\.value = 'NODE_GROUP'/) +assert.match(form, /vmNodeGroupId: isNodeGroupDeployment/) +assert.match(form, /isTargetLocked\.value && props\.targetNodeGroupId/) + +console.log(`Install target integration passed: ${invalidCases.length + 4} parser cases, 7 VM resolution cases, iframe-to-deploy wiring.`) diff --git a/applicationFE/scripts/test-vm-clustering.mjs b/applicationFE/scripts/test-vm-clustering.mjs new file mode 100644 index 00000000..7a9a9b76 --- /dev/null +++ b/applicationFE/scripts/test-vm-clustering.mjs @@ -0,0 +1,101 @@ +import assert from 'node:assert/strict' +import { readFile } from 'node:fs/promises' +import * as Vue from 'vue' +import { compile } from '@vue/compiler-dom' +import { renderToString } from '@vue/server-renderer' +import ts from 'typescript' + +const transpile = source => ts.transpileModule(source, { + compilerOptions: { module: ts.ModuleKind.ESNext, target: ts.ScriptTarget.ES2022 } +}).outputText +const policy = await readFile(new URL('../src/utils/vmClustering.ts', import.meta.url), 'utf8') +const { isVmClusteringCatalog } = await import( + `data:text/javascript;base64,${Buffer.from(transpile(policy)).toString('base64')}`) +const catalog = (name, packageName) => ({ name, packageInfo: { packageName } }) +const cases = [ + [catalog('Redis', 'redis'), true], + [catalog(' Redis ', 'library/redis:7.4'), true], + [catalog('Redis 7', 'docker.io/library/redis'), true], + [catalog('redis', 'registry.example:5000/cache/redis'), true], + [catalog('REDIS', 'redis@sha256:abc123'), true], + [catalog('Elasticsearch', 'elasticsearch'), true], + [catalog('Elasticsearch 8', 'docker.elastic.co/elasticsearch/elasticsearch'), true], + [catalog('ELASTICSEARCH', 'library/elasticsearch:8.17.0'), true], + [catalog('Nginx', 'nginx'), false], + [catalog('Grafana', 'grafana/grafana'), false], + [catalog('Jenkins', 'jenkins/jenkins'), false], + [catalog('Rclone GUI', 'rclone/rclone'), false], + [catalog('Redis Exporter', 'oliver006/redis_exporter'), false], + [catalog('Redis Insight', 'redis/redisinsight'), false], + [catalog('Elasticsearch Exporter', 'prometheuscommunity/elasticsearch-exporter'), false], + [catalog('Redis', 'nginx'), false], + [catalog('Elasticsearch', 'redis'), false], + [catalog('Redis Elasticsearch', 'redis'), false], + [catalog('My cache', 'redis'), false], // Existing backend cannot pick Redis ports from this label. + [catalog('Notredis', 'redis'), false], + [{ name: 'Redis' }, false], + [{ name: 'Redis', packageInfo: null }, false], + [null, false], + [undefined, false] +] +for (const [value, expected] of cases) assert.equal(isVmClusteringCatalog(value), expected, JSON.stringify(value)) + +const form = await readFile(new URL('../src/views/softwareCatalog/components/applicationInstallationForm.vue', import.meta.url), 'utf8') +const start = form.indexOf('const canSelectClustering = computed(') +const end = form.indexOf('\nconst selectedClusterProvider', start) +assert.ok(start > 0 && end > start) +const makeAvailability = new Function('computed', 'watch', 'selectInfra', 'vmTargetMode', + 'isTargetLocked', 'selectedCatalogInfo', 'selectDeploymentType', 'isVmClusteringCatalog', + transpile(form.slice(start, end)) + '\nreturn canSelectClustering;') +const radio = form.match(/
[\s\S]*?<\/div>/)?.[0] +assert.ok(radio, 'The actual Clustering radio must use the eligibility condition') +const render = new Function('Vue', compile(radio, { mode: 'function', prefixIdentifiers: true }).code)(Vue) +let renderedCases = 0 +for (const [value, eligible] of cases) { + for (const infra of ['VM', 'K8S', '']) { + for (const target of ['VM', 'NODE_GROUP']) { + for (const locked of [false, true]) { + const scope = Vue.effectScope() + const selection = Vue.ref('Standalone') + const available = scope.run(() => makeAvailability(Vue.computed, Vue.watch, + Vue.ref(infra), Vue.ref(target), Vue.ref(locked), Vue.ref(value), selection, isVmClusteringCatalog)) + const expected = eligible && infra === 'VM' && target === 'VM' && !locked + assert.equal(available.value, expected) + const html = await renderToString(Vue.createSSRApp({ + setup: () => ({ canSelectClustering: available, selectDeploymentType: selection, isTargetLocked: locked }), render + })) + assert.equal(html.includes('id="Clustering"'), expected) + scope.stop() + renderedCases++ + } + } + } +} + +for (const change of ['catalog', 'target', 'locked', 'infra']) { + const scope = Vue.effectScope() + const infra = Vue.ref('VM'), target = Vue.ref('VM'), locked = Vue.ref(false) + const info = Vue.ref(catalog('Redis', 'redis')), selection = Vue.ref('Clustering') + scope.run(() => makeAvailability(Vue.computed, Vue.watch, infra, target, locked, info, selection, isVmClusteringCatalog)) + if (change === 'catalog') info.value = catalog('Grafana', 'grafana/grafana') + if (change === 'target') target.value = 'NODE_GROUP' + if (change === 'locked') locked.value = true + if (change === 'infra') infra.value = 'K8S' + assert.equal(selection.value, 'Standalone', `Reset synchronously after ${change} changes`) + scope.stop() +} + +// Exercise the actual submit guard, including a stale/modified hidden selection. +const submitStart = form.indexOf('const runInstall = async () => {') + 'const runInstall = async () => {'.length +const guardEnd = form.indexOf("\n if (modalTitle.value === 'Application Installation' && (specCheckFlag", submitStart) +assert.ok(guardEnd > submitStart) +const submitGuard = new Function('modalTitle', 'selectInfra', 'selectDeploymentType', 'canSelectClustering', 'toast', + 'const deploying = { value: false }, deploymentCompleted = { value: false };\n' + transpile(form.slice(submitStart, guardEnd)) + '\nreturn "continue";') +const installation = { value: 'Application Installation' } +let errors = 0 +assert.equal(submitGuard(installation, { value: 'VM' }, { value: 'Clustering' }, { value: false }, { error: () => errors++ }), undefined) +assert.equal(errors, 1) +assert.equal(submitGuard(installation, { value: 'VM' }, { value: 'Standalone' }, { value: false }, {}), 'continue') +assert.equal(submitGuard(installation, { value: 'VM' }, { value: 'Clustering' }, { value: true }, {}), 'continue') +assert.equal(submitGuard({ value: 'Application Uninstallation' }, { value: 'VM' }, { value: 'Clustering' }, { value: false }, {}), 'continue') +console.log(`VM clustering passed: ${cases.length} catalog cases, ${renderedCases} rendered visibility cases, 4 transitions, 4 submit cases.`) diff --git a/applicationFE/src/api/softwareCatalog.ts b/applicationFE/src/api/softwareCatalog.ts index 25c52bca..c1f7a835 100644 --- a/applicationFE/src/api/softwareCatalog.ts +++ b/applicationFE/src/api/softwareCatalog.ts @@ -36,6 +36,7 @@ export const runVmInstall = (params: { namespace: string, mciId: string, vmIds: string[], + vmNodeGroupId?: string, clusterName: string, catalogId: number, servicePort?: number, @@ -124,6 +125,29 @@ export const k8sSpecCheck = (params: { return request.get(`/applications/k8s/check?namespace=${params.namespace}&clusterName=${params.clusterName}&catalogId=${params.catalogId}`) } +export const k8sIngressTlsSettings = (params: { namespace: string, clusterName: string }) => { + return request.get(`/applications/k8s/ingress/tls-settings?${new URLSearchParams(params)}`) +} + +export const startIngressPreparation = (params: Record) => + request.post('/applications/k8s/ingress/preparations', params) + +export const getIngressPreparation = (namespace: string, id: string) => + request.get(`/applications/k8s/ingress/preparations/${encodeURIComponent(id)}?${new URLSearchParams({ namespace })}`) + +export const k8sIngressCheck = (params: { + namespace: string, + clusterName: string, + catalogId: number, + ingressEnabled?: boolean, + ingressHost?: string, + ingressPath?: string, + ingressClass?: string, + ingressTlsEnabled?: boolean, + ingressTlsSecret?: string | null, + servicePortCidr?: string +}) => request.post('/applications/k8s/ingress/check', params) + export const getBuildLogList = (jobName: string) => { return request.get(`/ape/log/${jobName}`) } diff --git a/applicationFE/src/integration/installTarget.ts b/applicationFE/src/integration/installTarget.ts index 9349b478..245bde99 100644 --- a/applicationFE/src/integration/installTarget.ts +++ b/applicationFE/src/integration/installTarget.ts @@ -5,15 +5,40 @@ export interface InstallTarget { targetType: InstallTargetType mciId: string vmId: string + nodeGroupId: string clusterId: string } +export interface InstallTargetVm { + id?: string + name?: string + subGroupId?: string + status?: string +} + +export type InstallVmTargetResolution = + | { + ok: true + mode: 'VM' + vm: InstallTargetVm + vmId: string + nodeGroupId: string + } + | { + ok: true + mode: 'NODE_GROUP' + members: InstallTargetVm[] + runningVmIds: string[] + nodeGroupId: string + } + | { ok: false; error: string } + export type InstallTargetParseResult = | { ok: true; target: InstallTarget } | { ok: false; error: string } -const TARGET_KEYS = ['targetType', 'requestId', 'mciId', 'vmId', 'clusterId'] as const -const FORBIDDEN_KEYS = ['namespace', 'namespaceId', 'nodeGroupId', 'nodegroupId'] as const +const TARGET_KEYS = ['targetType', 'requestId', 'mciId', 'vmId', 'nodeGroupId', 'clusterId'] as const +const FORBIDDEN_KEYS = ['namespace', 'namespaceId'] as const const MAX_IDENTIFIER_LENGTH = 200 const PATH_IDENTIFIER_CHARACTERS = /[/?#]/ @@ -56,12 +81,9 @@ export const parseInstallTarget = ( for (const key of FORBIDDEN_KEYS) { if (params.has(key)) { - const error = key === 'namespace' || key === 'namespaceId' - ? `${key} must not be supplied in the URL. Namespace comes from the selected Project context.` - : `${key} must not be supplied in the URL. nodeGroup is not supported by this integration.` return { ok: false, - error + error: `${key} must not be supplied in the URL. Namespace comes from the selected Project context.` } } } @@ -89,6 +111,7 @@ export const parseInstallTarget = ( validateIdentifier('requestId', requestId, true), validateIdentifier('mciId', values.mciId), validateIdentifier('vmId', values.vmId), + validateIdentifier('nodeGroupId', values.nodeGroupId), validateIdentifier('clusterId', values.clusterId) ].filter(Boolean) if (commonErrors.length > 0) { @@ -97,10 +120,12 @@ export const parseInstallTarget = ( if (targetType === 'VM') { const vmErrors = [ - validateIdentifier('mciId', values.mciId, true), - validateIdentifier('vmId', values.vmId, true) + validateIdentifier('mciId', values.mciId, true) ].filter(Boolean) if (vmErrors.length > 0) return { ok: false, error: vmErrors[0] } + if (!values.vmId && !values.nodeGroupId) { + return { ok: false, error: 'vmId or nodeGroupId is required.' } + } if (values.clusterId) { return { ok: false, error: 'clusterId cannot be used with a VM target.' } } @@ -112,6 +137,9 @@ export const parseInstallTarget = ( if (values.mciId || values.vmId) { return { ok: false, error: 'mciId and vmId cannot be used with a K8S target.' } } + if (values.nodeGroupId) { + return { ok: false, error: 'nodeGroupId cannot be used with a K8S target.' } + } } return { @@ -121,7 +149,77 @@ export const parseInstallTarget = ( targetType, mciId: values.mciId, vmId: values.vmId, + nodeGroupId: values.nodeGroupId, clusterId: values.clusterId } } } + +const getVmIdentifier = (vm: InstallTargetVm) => String(vm?.id || vm?.name || '').trim() + +const matchesVmIdentifier = (vm: InstallTargetVm, targetVmId: string) => { + const expected = String(targetVmId || '').trim().toLowerCase() + return [vm?.id, vm?.name] + .map((value) => String(value || '').trim().toLowerCase()) + .filter(Boolean) + .includes(expected) +} + +/** + * Resolve a fixed VM iframe target against the authoritative MCI response. + * + * A caller may keep using the legacy MCI + VM contract. When nodeGroupId is + * also present it is used to verify the selected VM's membership. Omitting + * vmId switches the target to all currently running VMs in the NodeGroup. + */ +export const resolveInstallVmTarget = ( + vms: InstallTargetVm[], + target: Pick +): InstallVmTargetResolution => { + const availableVms = Array.isArray(vms) ? vms : [] + const vmId = String(target?.vmId || '').trim() + const nodeGroupId = String(target?.nodeGroupId || '').trim() + + if (vmId) { + const vm = availableVms.find((candidate) => matchesVmIdentifier(candidate, vmId)) + if (!vm) { + return { ok: false, error: `VM "${vmId}" was not found.` } + } + if (nodeGroupId && String(vm.subGroupId || '').trim() !== nodeGroupId) { + return { + ok: false, + error: `VM "${vmId}" does not belong to NodeGroup "${nodeGroupId}".` + } + } + return { + ok: true, + mode: 'VM', + vm, + vmId: getVmIdentifier(vm), + nodeGroupId + } + } + + const members = availableVms.filter( + (vm) => String(vm?.subGroupId || '').trim() === nodeGroupId + ) + if (members.length === 0) { + return { ok: false, error: `NodeGroup "${nodeGroupId}" was not found.` } + } + + const runningVmIds = Array.from(new Set(members + .filter((vm) => String(vm?.status || '').trim().toUpperCase() === 'RUNNING') + .map(getVmIdentifier) + .filter(Boolean))) + if (runningVmIds.length === 0) { + return { ok: false, error: `NodeGroup "${nodeGroupId}" has no running VMs.` } + } + + return { + ok: true, + mode: 'NODE_GROUP', + members, + runningVmIds, + nodeGroupId + } +} diff --git a/applicationFE/src/router/index.ts b/applicationFE/src/router/index.ts index 21219cf9..1766c6ec 100644 --- a/applicationFE/src/router/index.ts +++ b/applicationFE/src/router/index.ts @@ -6,7 +6,7 @@ const router = createRouter({ { path: '/', name: 'home', - redirect: '/web/softwareCatalog' + redirect: '/web/applications/swcatalog' }, { path: '/web', @@ -25,13 +25,20 @@ const router = createRouter({ }, { path: '/web/repository/list', - name: 'repositoryList', - component: () => import('@/views/repository/RepositoryList.vue' as any) + redirect: (to) => ({ + name: 'repositoryList', + query: to.query, + hash: to.hash + }) }, { path: `/web/repository/detail/:repositoryName`, - name: 'repositoryDetail', - component: () => import('@/views/repository/RepositoryDetail.vue' as any) + redirect: (to) => ({ + name: 'repositoryDetail', + params: { repositoryName: to.params.repositoryName }, + query: to.query, + hash: to.hash + }) }, { path: `/web/softwareCatalog/install`, @@ -40,9 +47,38 @@ const router = createRouter({ }, { path: `/web/softwareCatalog`, + redirect: (to) => ({ + name: 'softwareCatalog', + query: to.query, + hash: to.hash + }) + }, + { + path: `/web/applications/swcatalog`, name: 'softwareCatalog', component: () => import('@/views/softwareCatalog/SoftwareCatalog.vue' as any) }, + { + path: `/web/applications/status`, + name: 'applicationStatus', + component: () => import('@/views/softwareCatalog/ApplicationStatus.vue' as any) + }, + { + path: `/web/applications/repository`, + component: () => import('@/views/repository/ApplicationRepository.vue' as any), + children: [ + { + path: '', + name: 'repositoryList', + component: () => import('@/views/repository/RepositoryList.vue' as any) + }, + { + path: ':repositoryName', + name: 'repositoryDetail', + component: () => import('@/views/repository/RepositoryDetail.vue' as any) + } + ] + }, // { // path: `/web/softwareCatalog/list`, // name: 'softwareCatalogList', diff --git a/applicationFE/src/styles/global.css b/applicationFE/src/styles/global.css index 365cd346..45e88df2 100644 --- a/applicationFE/src/styles/global.css +++ b/applicationFE/src/styles/global.css @@ -22,6 +22,21 @@ html, body { min-height: 36px; } +/* Keep top-right page actions visually consistent across application menus. */ +.page-header-action-btn { + align-items: center; + display: inline-flex; + justify-content: center; + white-space: nowrap; + width: 10rem; +} + +@media (max-width: 575.98px) { + .page-header-action-btn { + width: auto; + } +} + /* Softer colors */ .btn-primary { background-color: #007bff; @@ -28365,4 +28380,4 @@ Antialiasing .subpixel-antialiased { -webkit-font-smoothing: auto; -moz-osx-font-smoothing: auto; -} \ No newline at end of file +} diff --git a/applicationFE/src/utils/ingressPreparation.ts b/applicationFE/src/utils/ingressPreparation.ts new file mode 100644 index 00000000..2c405d32 --- /dev/null +++ b/applicationFE/src/utils/ingressPreparation.ts @@ -0,0 +1,36 @@ +export interface IngressPreparationStatus { + id: string + namespace: string + clusterName: string + state: 'QUEUED' | 'RUNNING' | 'READY' | 'FAILED' + message: string +} + +/** Poll an existing job only: a failed/lost response must never start another shared-LB change. */ +export async function waitForIngressPreparation( + initial: IngressPreparationStatus, + target: { namespace: string, clusterName: string }, + getStatus: (id: string) => Promise, + onProgress: (message: string) => void, + isCurrent: () => boolean, + sleep: () => Promise = () => new Promise(resolve => setTimeout(resolve, 3000)), + maxPolls = 3000 +): Promise { + let status = initial + const id = initial?.id + for (let attempt = 0; attempt <= maxPolls; attempt++) { + if (!isCurrent()) throw new Error('The form or Project changed. Preparation may continue, but no application will be deployed from this request.') + if (!id || status?.id !== id || status.namespace !== target.namespace || status.clusterName !== target.clusterName) { + throw new Error('Ingress preparation returned a different target. Deployment stopped.') + } + onProgress(status.message || 'Preparing IBM Ingress and HTTPS…') + if (status.state === 'READY') return + if (status.state === 'FAILED') throw new Error(status.message || 'Ingress preparation failed.') + if (!['QUEUED', 'RUNNING'].includes(status.state)) throw new Error('Unknown Ingress preparation state.') + if (attempt === maxPolls) break + await sleep() + if (!isCurrent()) throw new Error('The form or Project changed. Check the existing preparation before retrying Deploy.') + status = await getStatus(id) + } + throw new Error('Ingress preparation is taking longer than expected. Check cluster status before retrying; no application was deployed.') +} diff --git a/applicationFE/src/utils/vmClustering.ts b/applicationFE/src/utils/vmClustering.ts new file mode 100644 index 00000000..a1b17032 --- /dev/null +++ b/applicationFE/src/utils/vmClustering.ts @@ -0,0 +1,18 @@ +interface VmClusteringCatalog { + name?: string + packageInfo?: { packageName?: string } | null +} + +/** UI eligibility only; this does not certify that a deployed cluster is healthy. */ +export function isVmClusteringCatalog(catalog?: VmClusteringCatalog | null): boolean { + const image = String(catalog?.packageInfo?.packageName || '').trim().toLowerCase() + const imageName = image.split('/').pop()?.split(/[:@]/)[0] + if (imageName !== 'redis' && imageName !== 'elasticsearch') return false + + // The existing VM backend chooses its port profile from the catalog name, + // but its runtime configuration from the image name. Both must agree. + // In particular, Redis exporters/insights are not Redis server clusters. + const name = String(catalog?.name || '').trim().toLowerCase() + return new RegExp(`(^|[^a-z0-9])${imageName}([^a-z0-9]|$)`).test(name) + && !(imageName === 'redis' && name.includes('elasticsearch')) +} diff --git a/applicationFE/src/views/repository/ApplicationRepository.vue b/applicationFE/src/views/repository/ApplicationRepository.vue new file mode 100644 index 00000000..35f78ea4 --- /dev/null +++ b/applicationFE/src/views/repository/ApplicationRepository.vue @@ -0,0 +1,53 @@ + + + diff --git a/applicationFE/src/views/repository/RepositoryDetail.vue b/applicationFE/src/views/repository/RepositoryDetail.vue index 739a2839..bebf8c96 100644 --- a/applicationFE/src/views/repository/RepositoryDetail.vue +++ b/applicationFE/src/views/repository/RepositoryDetail.vue @@ -197,7 +197,7 @@ const downloadDeleteButtonFormatter = () => { @@ -224,8 +224,8 @@ const onClickList = () => { if (props.embedded) { emit('back-to-list') } else { - router.push('/web/repository/list') + router.push({ name: 'repositoryList' }) } } - \ No newline at end of file + diff --git a/applicationFE/src/views/repository/RepositoryList.vue b/applicationFE/src/views/repository/RepositoryList.vue index bede5833..0153cde3 100644 --- a/applicationFE/src/views/repository/RepositoryList.vue +++ b/applicationFE/src/views/repository/RepositoryList.vue @@ -1,12 +1,5 @@ \ No newline at end of file + diff --git a/applicationFE/src/views/softwareCatalog/ApplicationStatus.vue b/applicationFE/src/views/softwareCatalog/ApplicationStatus.vue new file mode 100644 index 00000000..f411f753 --- /dev/null +++ b/applicationFE/src/views/softwareCatalog/ApplicationStatus.vue @@ -0,0 +1,55 @@ + + + diff --git a/applicationFE/src/views/softwareCatalog/InstallSoftwareIframe.vue b/applicationFE/src/views/softwareCatalog/InstallSoftwareIframe.vue index 81fd9b2e..c07ff53e 100644 --- a/applicationFE/src/views/softwareCatalog/InstallSoftwareIframe.vue +++ b/applicationFE/src/views/softwareCatalog/InstallSoftwareIframe.vue @@ -20,8 +20,8 @@ {{ targetResult.target.targetType }}
- Infra / VM - {{ targetResult.target.mciId }} / {{ targetResult.target.vmId }} + {{ vmTargetLabelTitle }} + {{ vmTargetLabel }}
Cluster @@ -42,6 +42,7 @@ :target-type="targetResult.target.targetType" :target-mci-id="targetResult.target.mciId" :target-vm-id="targetResult.target.vmId" + :target-node-group-id="targetResult.target.nodeGroupId" :target-cluster-id="targetResult.target.clusterId" @ready="handleFormReady" @deployment-event="handleDeploymentEvent" @@ -73,11 +74,31 @@ const contextReady = computed(() => Boolean( && projectNamespace.value )) +const vmTargetLabel = computed(() => { + if (!targetResult.ok || targetResult.target.targetType !== 'VM') return '' + return [ + targetResult.target.mciId, + targetResult.target.nodeGroupId, + targetResult.target.vmId + ].filter(Boolean).join(' / ') +}) + +const vmTargetLabelTitle = computed(() => { + if (!targetResult.ok || targetResult.target.targetType !== 'VM') return '' + if (!targetResult.target.vmId) return 'Infra / NodeGroup' + return targetResult.target.nodeGroupId ? 'Infra / NodeGroup / VM' : 'Infra / VM' +}) + const targetSummary = () => { if (!targetResult.ok) return undefined const target = targetResult.target return target.targetType === 'VM' - ? { targetType: target.targetType, mciId: target.mciId, vmId: target.vmId } + ? { + targetType: target.targetType, + mciId: target.mciId, + ...(target.nodeGroupId ? { nodeGroupId: target.nodeGroupId } : {}), + ...(target.vmId ? { vmId: target.vmId } : {}) + } : { targetType: target.targetType, clusterId: target.clusterId } } diff --git a/applicationFE/src/views/softwareCatalog/SoftwareCatalog.vue b/applicationFE/src/views/softwareCatalog/SoftwareCatalog.vue index ff003419..36b8566f 100644 --- a/applicationFE/src/views/softwareCatalog/SoftwareCatalog.vue +++ b/applicationFE/src/views/softwareCatalog/SoftwareCatalog.vue @@ -15,13 +15,13 @@
@@ -57,77 +57,7 @@
- - -
- - - - - -
-
- - -
-
- -
-
- - -
-
- -
-
- - -
-
- - -
-
-
-
-
+
@@ -141,12 +71,8 @@ + + + + +
+
PREVIEW
Ingress UI 변경 시안HTML 화면 예시 · 소스 미적용 · 실제 서버 요청/배포 없음
+ +
+ +
+ + +
+
Workspacews01
Projectdefault
+
+
+
변경 01   목록에는 접속 URL을 간결하게, IP와 hosts 설정은 접속 정보에서 확인합니다. 아래 AWS·IBM 버튼을 각각 눌러보세요.
+

APPLICATIONS

App Status

+
+

Applications 2

동일한 Nginx의 CSP별 접속 예시
+
+ + + + + + +
INFRAAPPLICATIONSTATUSCONNECTION URL 추가ACTION
aws-k8s-demoAWS · K8S · default
N
Nginxnginx-aws
Running
http://nginx.aws.test:30880/
Ingress · NodePort 30880
ibm-k8s-demoIBM · K8S · default
N
Nginxnginx-ibm
Running
http://nginx.ibm.test/
Ingress · IBM Managed LB · HTTP 80
+
+ +
+
+
1 접속할 URL을 바로 확인

Host·Path·외부 포트를 합쳐 표시합니다. AWS 예시는 :30880을 포함하고, IBM은 기본 HTTP 포트 80이므로 생략합니다.

+
2 hosts에 넣을 IP는 상세 팝업에서

노드 IP 또는 LB IP를 선택하면 IP Host 한 줄을 복사할 수 있습니다. 실제 구현 시 주소를 조회해야 하며, 조회되지 않으면 임의 IP를 표시하지 않는 구상입니다.

+
+

목록의 기존 상태·관리 기능은 유지하는 전제입니다. 시안에서는 접속 정보 변경에 필요한 항목만 표시했습니다.

+
+ + +
+
+
+ + +

APPLICATION DETAIL / CONNECTION

접속 정보

Nginx · IBM · ibm-k8s-demo

+
+
Running · 예시Ingress enabledIBM Managed LB
+ +
http://nginx.ibm.test/
+
+
EXTERNAL PORT
80 · URL에 생략 가능
INGRESS CLASS
public-iks-k8s-nginx
+
ALLOWED CLIENT CIDR · 허용 사용자 IP
198.51.100.24/32
KUBERNETES NAMESPACE
default
+
LOAD BALANCER HOSTNAME · 예시
preview-ibm-lb.example
+
+ +
+ +
192.0.2.40 nginx.ibm.test

macOS / Linux: /etc/hosts · Windows: C:\Windows\System32\drivers\etc\hosts

+

LB IP가 바뀌면 hosts도 수정해야 합니다. 실제 구현 시 LB의 최신 주소를 조회해 표시합니다.

+
주소 미조회 상태도 보기 · 시안 옵션
+
+
예시 IP · 실제 주소 조회 없음
+
+
+ + + + diff --git a/doc/install-sw-iframe-test.html b/doc/install-sw-iframe-test.html index 1a0d2eda..34c74896 100644 --- a/doc/install-sw-iframe-test.html +++ b/doc/install-sw-iframe-test.html @@ -51,7 +51,9 @@

AM 및 대상

- + + + @@ -103,7 +105,8 @@

Web Console Project 컨텍스트

url.searchParams.set('requestId', field('requestId')) if (type === 'VM') { url.searchParams.set('mciId', field('mciId')) - url.searchParams.set('vmId', field('vmId')) + if (field('vmId')) url.searchParams.set('vmId', field('vmId')) + if (field('nodeGroupId')) url.searchParams.set('nodeGroupId', field('nodeGroupId')) } else { url.searchParams.set('clusterId', field('clusterId')) } diff --git a/doc/network-access-scope-test.html b/doc/network-access-scope-test.html new file mode 100644 index 00000000..2be5120f --- /dev/null +++ b/doc/network-access-scope-test.html @@ -0,0 +1,792 @@ + + + + + + AM Network Access Scope UI Test + + + + +
+
+ UI TEST +
+ VM 애플리케이션 네트워크 공개 범위 시안 +
실제 배포나 SG 변경은 하지 않습니다. 선택값에 따른 AM 요청과 방화벽 규칙을 화면에서 검증하는 프로토타입입니다.
+
+
+ +
+
+
+
+

Application Installation

+
VM에 Grafana를 배포하는 예시
+
+
+ +
+
+

1. Deployment Target

+ VM +
+ + + +
+
+ VNet ID + +
+
+ VNet CIDR + +
+
+ Private IP + +
+
+ Public IP + +
+
+
+ +
+
+

2. Application

+
+
+
+ + +
+
+ + +
+
+
+ +
+
+
+

3. Access Scope

+
CIDR을 직접 입력하지 않고 공개 범위만 선택합니다.
+
+
+ +
+ + + +
+ +
+
+ AM이 VNet CIDR을 조회합니다 +

vNetId로 VNet 정보를 조회하고 실제 cidrBlock을 SG 규칙에 사용합니다.

+
+
10.0.0.0/16
+
+ + + +
+ +
+ + +
+ + +
+ + +
+ +
+
+

VNet이란?

+

클라우드에서 VM들이 들어가는 사설 네트워크입니다. AWS는 VPC, Azure는 VNet, GCP는 VPC라고 부르며 CB-Tumblebug에서는 이를 VNet으로 통일해 표현합니다.

+ +
+
+ 1 + VM에서 vNetId 확인 + 예: aws-us-west-vnet +
+
+ 2 + VNet 정보 조회 + cidrBlock: 10.0.0.0/16 +
+
+ 3 + SG 규칙에 적용 + 10.0.0.0/16만 포트 접근 허용 +
+
+ +
+ CSP별 차이: AWS·Azure·NCP처럼 VNet/VPC CIDR이 있는 경우 그 값을 사용하고, GCP처럼 VPC 자체 CIDR이 없는 경우에는 VM이 속한 Subnet CIDR을 사용해야 합니다. +
+
+
+
+ + + + diff --git a/src/main/java/kr/co/mcmp/ape/cbtumblebug/dto/MciAccessInfoDto.java b/src/main/java/kr/co/mcmp/ape/cbtumblebug/dto/MciAccessInfoDto.java index 0ab482ce..055a1b77 100644 --- a/src/main/java/kr/co/mcmp/ape/cbtumblebug/dto/MciAccessInfoDto.java +++ b/src/main/java/kr/co/mcmp/ape/cbtumblebug/dto/MciAccessInfoDto.java @@ -3,6 +3,7 @@ import java.util.List; import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonAlias; import lombok.Data; import lombok.NoArgsConstructor; @@ -11,26 +12,32 @@ @NoArgsConstructor public class MciAccessInfoDto { @JsonProperty("MciId") + @JsonAlias("InfraId") private String mciId; @JsonProperty("MciSubGroupAccessInfo") + @JsonAlias("InfraNodeGroupAccessInfo") private List mciSubGroupAccessInfo; @Data public static class MciSubGroupAccessInfo { @JsonProperty("SubGroupId") + @JsonAlias("NodeGroupId") private String subGroupId; @JsonProperty("BastionVmId") + @JsonAlias("BastionNodeId") private String bastionVmId; @JsonProperty("MciVmAccessInfo") + @JsonAlias("NodeAccessInfo") private List mciVmAccessInfo; } @Data public static class MciVmAccessInfo { @JsonProperty("vmId") + @JsonAlias("nodeId") private String vmId; @JsonProperty("publicIP") @@ -45,4 +52,4 @@ public static class MciVmAccessInfo { @JsonProperty("privateKey") private String privateKey; } -} \ No newline at end of file +} diff --git a/src/main/java/kr/co/mcmp/ape/cbtumblebug/dto/VmAccessInfo.java b/src/main/java/kr/co/mcmp/ape/cbtumblebug/dto/VmAccessInfo.java index d4596f4f..cbbe0bdd 100644 --- a/src/main/java/kr/co/mcmp/ape/cbtumblebug/dto/VmAccessInfo.java +++ b/src/main/java/kr/co/mcmp/ape/cbtumblebug/dto/VmAccessInfo.java @@ -1,6 +1,7 @@ package kr.co.mcmp.ape.cbtumblebug.dto; import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonAlias; import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Data; @@ -35,6 +36,7 @@ public class VmAccessInfo { private String name; @Schema(description = "Sub group ID") + @JsonAlias("nodeGroupId") private String subGroupId; @Schema(description = "Location information") diff --git a/src/main/java/kr/co/mcmp/softwarecatalog/application/controller/ApplicationController.java b/src/main/java/kr/co/mcmp/softwarecatalog/application/controller/ApplicationController.java index 610951ad..e544248a 100644 --- a/src/main/java/kr/co/mcmp/softwarecatalog/application/controller/ApplicationController.java +++ b/src/main/java/kr/co/mcmp/softwarecatalog/application/controller/ApplicationController.java @@ -23,6 +23,8 @@ import kr.co.mcmp.softwarecatalog.application.dto.DeploymentLogDTO; import kr.co.mcmp.softwarecatalog.application.dto.IntegratedApplicationInfoDTO; import kr.co.mcmp.softwarecatalog.application.dto.K8sStorageClassDTO; +import kr.co.mcmp.softwarecatalog.application.dto.K8sIngressCheckRequest; +import kr.co.mcmp.softwarecatalog.application.dto.K8sIngressCheckResult; import kr.co.mcmp.softwarecatalog.application.dto.ObjectStorageSmokeTestRequest; import kr.co.mcmp.softwarecatalog.application.dto.ObjectStorageSmokeTestResponse; import kr.co.mcmp.softwarecatalog.application.dto.RegisteredObjectStorageDTO; @@ -35,6 +37,7 @@ import kr.co.mcmp.softwarecatalog.application.dto.DeploymentRequestDTO; import kr.co.mcmp.softwarecatalog.application.constants.DeploymentType; import kr.co.mcmp.softwarecatalog.kubernetes.service.KubernetesStorageClassService; +import kr.co.mcmp.softwarecatalog.kubernetes.service.KubernetesIngressPreflightService; import kr.co.mcmp.security.project.ProjectScopeAuthorizationService; import org.springframework.web.bind.annotation.PathVariable; import lombok.RequiredArgsConstructor; @@ -53,6 +56,7 @@ public class ApplicationController { private final ObjectStorageRegistryService objectStorageRegistryService; private final KubernetesStorageClassService kubernetesStorageClassService; private final ProjectScopeAuthorizationService projectScopeAuthorizationService; + private final KubernetesIngressPreflightService kubernetesIngressPreflightService; @Operation(summary = "Deploy application to VM", description = "Deploy an application to a specific VM.") @PostMapping("/vm/deploy") @@ -111,6 +115,22 @@ public ResponseEntity> checkK8sSpec( return ResponseEntity.ok(new ResponseWrapper<>(result)); } + @Operation(summary = "Check K8s Ingress before deployment", description = "Validate current form values and Host/Path conflicts. TLS readiness issues are warnings, not resource-spec overrides.") + @PostMapping("/k8s/ingress/check") + public ResponseEntity> checkK8sIngress( + @Valid @RequestBody K8sIngressCheckRequest request, HttpServletRequest httpRequest) { + projectScopeAuthorizationService.authorizeNamespace(httpRequest, request.getNamespace()); + return ResponseEntity.ok(new ResponseWrapper<>(kubernetesIngressPreflightService.check(request))); + } + + @GetMapping("/k8s/ingress/tls-settings") + @Operation(summary = "Discover IBM managed HTTPS domains", description = "Read-only domain hints. No certificate data or private keys are returned.") + public ResponseEntity> ingressTlsSettings( + @RequestParam String namespace, @RequestParam String clusterName, HttpServletRequest httpRequest) { + projectScopeAuthorizationService.authorizeNamespace(httpRequest, namespace); + return ResponseEntity.ok(new ResponseWrapper<>(kubernetesIngressPreflightService.tlsSettings(namespace, clusterName))); + } + @Operation(summary = "Check S3-compatible Object Storage", description = "Smoke check Object Storage settings for applications that declare object-storage capability.") @PostMapping("/k8s/object-storage/smoke-check") public ResponseEntity> checkObjectStorage( diff --git a/src/main/java/kr/co/mcmp/softwarecatalog/application/controller/K8sIngressPreparationController.java b/src/main/java/kr/co/mcmp/softwarecatalog/application/controller/K8sIngressPreparationController.java new file mode 100644 index 00000000..e9ef60cb --- /dev/null +++ b/src/main/java/kr/co/mcmp/softwarecatalog/application/controller/K8sIngressPreparationController.java @@ -0,0 +1,26 @@ +package kr.co.mcmp.softwarecatalog.application.controller; + +import jakarta.servlet.http.HttpServletRequest; +import jakarta.validation.Valid; +import kr.co.mcmp.response.ResponseWrapper; +import kr.co.mcmp.security.project.ProjectScopeAuthorizationService; +import kr.co.mcmp.softwarecatalog.application.dto.K8sIngressCheckRequest; +import kr.co.mcmp.softwarecatalog.kubernetes.service.K8sIngressPreparationJobs; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +@RestController @RequestMapping("/applications/k8s/ingress/preparations") @RequiredArgsConstructor +public class K8sIngressPreparationController { + private final ProjectScopeAuthorizationService authorization; + private final K8sIngressPreparationJobs jobs; + @PostMapping + public ResponseWrapper start(@Valid @RequestBody K8sIngressCheckRequest request, HttpServletRequest http) { + authorization.authorizeNamespace(http,request.getNamespace()); + return new ResponseWrapper<>(jobs.start(request)); + } + @GetMapping("/{id}") + public ResponseWrapper get(@PathVariable String id, @RequestParam String namespace, HttpServletRequest http) { + authorization.authorizeNamespace(http,namespace); + return new ResponseWrapper<>(jobs.get(namespace,id)); + } +} diff --git a/src/main/java/kr/co/mcmp/softwarecatalog/application/dto/DeploymentConfigDTO.java b/src/main/java/kr/co/mcmp/softwarecatalog/application/dto/DeploymentConfigDTO.java index 2495f42b..506db2a3 100644 --- a/src/main/java/kr/co/mcmp/softwarecatalog/application/dto/DeploymentConfigDTO.java +++ b/src/main/java/kr/co/mcmp/softwarecatalog/application/dto/DeploymentConfigDTO.java @@ -13,7 +13,7 @@ * Request 파라미터와 카탈로그 기본값을 조합하여 최종 설정값을 제공 */ @Data -@Builder +@Builder(toBuilder = true) @NoArgsConstructor @AllArgsConstructor public class DeploymentConfigDTO { diff --git a/src/main/java/kr/co/mcmp/softwarecatalog/application/dto/DeploymentRequest.java b/src/main/java/kr/co/mcmp/softwarecatalog/application/dto/DeploymentRequest.java index db65de61..c0b508f9 100644 --- a/src/main/java/kr/co/mcmp/softwarecatalog/application/dto/DeploymentRequest.java +++ b/src/main/java/kr/co/mcmp/softwarecatalog/application/dto/DeploymentRequest.java @@ -32,6 +32,12 @@ public class DeploymentRequest { * VM IDs (VM 배포시 - 단일/다중 VM 모두 지원) */ private List vmIds; + + /** + * CB-Tumblebug VM subGroup ID. When present, the backend resolves all + * currently running VMs in the group and deploys them in standalone mode. + */ + private String vmNodeGroupId; /** * 클러스터명 (Kubernetes 배포시) @@ -198,4 +204,3 @@ public int getVmCount() { } } - diff --git a/src/main/java/kr/co/mcmp/softwarecatalog/application/dto/DeploymentRequestDTO.java b/src/main/java/kr/co/mcmp/softwarecatalog/application/dto/DeploymentRequestDTO.java index ef34d3e5..c533b60c 100644 --- a/src/main/java/kr/co/mcmp/softwarecatalog/application/dto/DeploymentRequestDTO.java +++ b/src/main/java/kr/co/mcmp/softwarecatalog/application/dto/DeploymentRequestDTO.java @@ -23,6 +23,7 @@ public class DeploymentRequestDTO { private String namespace; private String mciId; // VM 배포시 private List vmIds; // VM 배포시 (단일/다중 VM 모두 지원) + private String vmNodeGroupId; // CB-Tumblebug VM subGroup ID (Standalone only) private String clusterName; // K8s 배포시 private Long catalogId; private Integer servicePort; // VM 배포시 @@ -62,6 +63,7 @@ public DeploymentRequest toDeploymentRequest() { .namespace(this.namespace) .mciId(this.mciId) .vmIds(this.vmIds) + .vmNodeGroupId(this.vmNodeGroupId) .clusterName(this.clusterName) .catalogId(this.catalogId) .servicePort(this.servicePort) diff --git a/src/main/java/kr/co/mcmp/softwarecatalog/application/dto/K8sIngressCheckRequest.java b/src/main/java/kr/co/mcmp/softwarecatalog/application/dto/K8sIngressCheckRequest.java new file mode 100644 index 00000000..aa5fa5c6 --- /dev/null +++ b/src/main/java/kr/co/mcmp/softwarecatalog/application/dto/K8sIngressCheckRequest.java @@ -0,0 +1,28 @@ +package kr.co.mcmp.softwarecatalog.application.dto; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Positive; +import lombok.Data; + +/** The current form values, not just the saved catalog's Ingress defaults. */ +@Data +public class K8sIngressCheckRequest { + @NotBlank private String namespace; // CB-Tumblebug project, not the workload namespace + @NotBlank private String clusterName; + @NotNull @Positive private Long catalogId; + private Boolean ingressEnabled; + private String ingressHost; + private String ingressPath; + private String ingressClass; + private Boolean ingressTlsEnabled; + private String ingressTlsSecret; + private String servicePortCidr; + + public DeploymentRequest toDeploymentRequest() { + return DeploymentRequest.builder().namespace(namespace).clusterName(clusterName).catalogId(catalogId) + .ingressEnabled(ingressEnabled).ingressHost(ingressHost).ingressPath(ingressPath) + .ingressClass(ingressClass).ingressTlsEnabled(ingressTlsEnabled).ingressTlsSecret(ingressTlsSecret) + .servicePortCidr(servicePortCidr).build(); + } +} diff --git a/src/main/java/kr/co/mcmp/softwarecatalog/application/dto/K8sIngressCheckResult.java b/src/main/java/kr/co/mcmp/softwarecatalog/application/dto/K8sIngressCheckResult.java new file mode 100644 index 00000000..6966d878 --- /dev/null +++ b/src/main/java/kr/co/mcmp/softwarecatalog/application/dto/K8sIngressCheckResult.java @@ -0,0 +1,6 @@ +package kr.co.mcmp.softwarecatalog.application.dto; + +import java.util.List; + +/** Blocking route/input errors are separate from non-blocking TLS readiness warnings. */ +public record K8sIngressCheckResult(boolean valid, List errors, List warnings) {} diff --git a/src/main/java/kr/co/mcmp/softwarecatalog/application/dto/K8sIngressTlsSettings.java b/src/main/java/kr/co/mcmp/softwarecatalog/application/dto/K8sIngressTlsSettings.java new file mode 100644 index 00000000..3038ffda --- /dev/null +++ b/src/main/java/kr/co/mcmp/softwarecatalog/application/dto/K8sIngressTlsSettings.java @@ -0,0 +1,7 @@ +package kr.co.mcmp.softwarecatalog.application.dto; + +import java.util.List; + +/** Public routing hints only; never certificate contents or private keys. */ +public record K8sIngressTlsSettings(boolean managedTls, String defaultDomain, + List customDomains, List warnings) {} diff --git a/src/main/java/kr/co/mcmp/softwarecatalog/application/model/DeploymentHistory.java b/src/main/java/kr/co/mcmp/softwarecatalog/application/model/DeploymentHistory.java index 9f2db169..ffc7c95d 100644 --- a/src/main/java/kr/co/mcmp/softwarecatalog/application/model/DeploymentHistory.java +++ b/src/main/java/kr/co/mcmp/softwarecatalog/application/model/DeploymentHistory.java @@ -61,7 +61,7 @@ public class DeploymentHistory { private String clusterName; // K8s 배포에 사용 @Column(name = "node_group_name") - private String nodeGroupName; // K8s 노드 그룹 이름 + private String nodeGroupName; // K8s node group or CB-Tumblebug VM subGroup name @Column(name = "public_ip") private String publicIp; diff --git a/src/main/java/kr/co/mcmp/softwarecatalog/application/service/impl/ApplicationHistoryServiceImpl.java b/src/main/java/kr/co/mcmp/softwarecatalog/application/service/impl/ApplicationHistoryServiceImpl.java index ee058dd0..2bc35bc3 100644 --- a/src/main/java/kr/co/mcmp/softwarecatalog/application/service/impl/ApplicationHistoryServiceImpl.java +++ b/src/main/java/kr/co/mcmp/softwarecatalog/application/service/impl/ApplicationHistoryServiceImpl.java @@ -62,6 +62,7 @@ public DeploymentHistory createDeploymentHistory(DeploymentRequest request, User .namespace(request.getNamespace()) .mciId(request.getMciId()) .vmId(request.getFirstVmId()) + .nodeGroupName(request.getVmNodeGroupId()) .publicIp(vmInfo.getPublicIP()) .actionType(ActionType.INSTALL) .status("IN_PROGRESS") @@ -103,6 +104,7 @@ public void updateApplicationStatus(DeploymentHistory history, String status, Us appStatus.setNamespace(history.getNamespace()); appStatus.setMciId(history.getMciId()); appStatus.setVmId(history.getVmId()); + appStatus.setNodeGroupName(history.getNodeGroupName()); appStatus.setPublicIp(history.getPublicIp()); appStatus.setServicePort(history.getServicePort()); } else if (history.getDeploymentType() == DeploymentType.K8S) { @@ -160,6 +162,7 @@ public void createApplicationStatusForVm(DeploymentHistory history, String vmId, appStatus.setNamespace(history.getNamespace()); appStatus.setMciId(history.getMciId()); appStatus.setVmId(vmId); + appStatus.setNodeGroupName(history.getNodeGroupName()); appStatus.setPublicIp(publicIp); appStatus.setServicePort(servicePort); if (containerId != null && !containerId.isBlank()) { @@ -190,6 +193,7 @@ public DeploymentHistory createDeploymentHistoryForVm(DeploymentRequest request, .namespace(request.getNamespace()) .mciId(request.getMciId()) .vmId(vmId) + .nodeGroupName(request.getVmNodeGroupId()) .clusterName(request.getClusterName()) .publicIp(vmInfo.getPublicIP()) .actionType(ActionType.INSTALL) @@ -314,4 +318,3 @@ private User getUserOrNull(String username) { return StringUtils.isNotBlank(username) ? userService.findUserByUsername(username).orElse(null) : null; } } - diff --git a/src/main/java/kr/co/mcmp/softwarecatalog/application/service/impl/ApplicationOrchestrationServiceImpl.java b/src/main/java/kr/co/mcmp/softwarecatalog/application/service/impl/ApplicationOrchestrationServiceImpl.java index 7d0bf8d9..0ad4c7d0 100644 --- a/src/main/java/kr/co/mcmp/softwarecatalog/application/service/impl/ApplicationOrchestrationServiceImpl.java +++ b/src/main/java/kr/co/mcmp/softwarecatalog/application/service/impl/ApplicationOrchestrationServiceImpl.java @@ -65,10 +65,16 @@ public class ApplicationOrchestrationServiceImpl implements ApplicationOrchestra private final ObjectStorageTunnelService objectStorageTunnelService; private final ObjectStorageAccessGrantService objectStorageAccessGrantService; private final DockerOperationService dockerOperationService; + private final VmNodeGroupTargetResolver vmNodeGroupTargetResolver; @Override @Transactional(propagation = Propagation.NOT_SUPPORTED) public DeploymentHistory deployApplication(DeploymentRequest request) { + // Resolve VM NodeGroup membership immediately before deployment so the + // backend, rather than a potentially stale or modified client list, + // determines the actual standalone targets. + vmNodeGroupTargetResolver.resolve(request); + // 스펙 검증 if (!validateSpec(request)) { log.warn("Spec validation failed for deployment request - catalogId: {}, type: {}", request.getCatalogId(), request.getDeploymentType()); diff --git a/src/main/java/kr/co/mcmp/softwarecatalog/application/service/impl/DockerDeploymentService.java b/src/main/java/kr/co/mcmp/softwarecatalog/application/service/impl/DockerDeploymentService.java index e8eed83a..63b2c1b2 100644 --- a/src/main/java/kr/co/mcmp/softwarecatalog/application/service/impl/DockerDeploymentService.java +++ b/src/main/java/kr/co/mcmp/softwarecatalog/application/service/impl/DockerDeploymentService.java @@ -145,6 +145,9 @@ private DeploymentHistory deployToMultipleVms(DeploymentRequest request, Softwar if (!alreadyInstalledVms.isEmpty()) { log.info("Found existing installations on VMs: {}", alreadyInstalledVms); } + if (alreadyInstalledVms.size() == vmIds.size()) { + throw new ApplicationException("Application is already installed on every selected VM"); + } // 클러스터 설정 생성 (클러스터링 모드인 경우에만) final Map clusterConfig = request.getVmDeploymentMode() == VmDeploymentMode.CLUSTERING ? buildClusterConfig(request, catalog, vmIds) : null; @@ -200,10 +203,10 @@ private DeploymentHistory deployToMultipleVms(DeploymentRequest request, Softwar List successfulVms = new ArrayList<>(); List failedVms = new ArrayList<>(); - for (int i = 0; i < deploymentFutures.size(); i++) { + for (CompletableFuture deploymentFuture : deploymentFutures) { try { - DeploymentResult result = deploymentFutures.get(i).get(); - String vmId = vmIds.get(i); + DeploymentResult result = deploymentFuture.get(); + String vmId = result.getVmId(); DeploymentHistory vmHistory = vmHistories.get(vmId); if (vmHistory == null) continue; @@ -411,14 +414,21 @@ private DeploymentResult deployToSingleVmAsync(DeploymentRequest request, Softwa ApplicationStatusValues.DEPLOYING, user); - // VM 공인 IP 목록 생성 (클러스터링용) + // Peer IPs must be passed only for an explicitly requested cluster. + // DockerOperationService interprets a non-empty peer list as Redis / + // Elasticsearch clustering configuration, while NodeGroup deployment + // intentionally creates independent standalone instances. List vmPublicIps = new ArrayList<>(); - for (String id : vmIds) { - try { - VmAccessInfo vmInfo = cbtumblebugRestApi.getVmInfo(request.getNamespace(), request.getMciId(), id); - vmPublicIps.add(vmInfo.getPublicIP()); - } catch (Exception e) { - log.warn("Failed to get VM info for {}: {}", id, e.getMessage()); + int clusterNodeIndex = -1; + if (request.getVmDeploymentMode() == VmDeploymentMode.CLUSTERING) { + clusterNodeIndex = vmIndex; + for (String id : vmIds) { + try { + VmAccessInfo vmInfo = cbtumblebugRestApi.getVmInfo(request.getNamespace(), request.getMciId(), id); + vmPublicIps.add(vmInfo.getPublicIP()); + } catch (Exception e) { + log.warn("Failed to get VM info for {}: {}", id, e.getMessage()); + } } } @@ -435,7 +445,7 @@ private DeploymentResult deployToSingleVmAsync(DeploymentRequest request, Softwa deployParams.getVolumeMounts(), deployParams.getCommandArguments(), vmPublicIps, - vmIndex + clusterNodeIndex ); String containerId = deployResult.getContainerId(); @@ -878,6 +888,9 @@ private String firstNonBlank(String... values) { */ private void processDeploymentResults(DeploymentHistory history, User user, List successfulVms, List failedVms, DeploymentRequest request) { + if (history == null) { + throw new ApplicationException("No eligible VM deployment target was found"); + } DeploymentStatusResult result = determineDeploymentResult(successfulVms, failedVms); history.setStatus(result.status); @@ -1064,4 +1077,3 @@ private Map convertToMap( return map; } } - diff --git a/src/main/java/kr/co/mcmp/softwarecatalog/application/service/impl/VmNodeGroupTargetResolver.java b/src/main/java/kr/co/mcmp/softwarecatalog/application/service/impl/VmNodeGroupTargetResolver.java new file mode 100644 index 00000000..f1e0d416 --- /dev/null +++ b/src/main/java/kr/co/mcmp/softwarecatalog/application/service/impl/VmNodeGroupTargetResolver.java @@ -0,0 +1,152 @@ +package kr.co.mcmp.softwarecatalog.application.service.impl; + +import java.util.ArrayList; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Set; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; + +import kr.co.mcmp.ape.cbtumblebug.api.CbtumblebugRestApi; +import kr.co.mcmp.ape.cbtumblebug.dto.MciDto; +import kr.co.mcmp.ape.cbtumblebug.dto.VmAccessInfo; +import kr.co.mcmp.softwarecatalog.application.constants.DeploymentType; +import kr.co.mcmp.softwarecatalog.application.constants.VmDeploymentMode; +import kr.co.mcmp.softwarecatalog.application.dto.DeploymentRequest; +import kr.co.mcmp.softwarecatalog.application.exception.ApplicationException; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +/** + * Resolves a CB-Tumblebug VM subGroup into an authoritative VM target list. + * + *

NodeGroup deployment intentionally supports standalone mode only. If the + * request also names VMs, their membership and running state are verified and + * the selected VM list is preserved. If no VM is named, the target expands to + * every running member returned by CB-Tumblebug.

+ */ +@Service +@RequiredArgsConstructor +@Slf4j +public class VmNodeGroupTargetResolver { + + private final CbtumblebugRestApi cbtumblebugRestApi; + + public void resolve(DeploymentRequest request) { + if (request == null || StringUtils.isBlank(request.getVmNodeGroupId())) { + return; + } + if (request.getDeploymentType() != DeploymentType.VM) { + throw new ApplicationException("VM NodeGroup can only be used for VM deployment"); + } + if (request.getVmDeploymentMode() == VmDeploymentMode.CLUSTERING) { + throw new ApplicationException("VM NodeGroup deployment supports STANDALONE mode only"); + } + if (StringUtils.isBlank(request.getNamespace())) { + throw new ApplicationException("Namespace is required for VM NodeGroup deployment"); + } + if (StringUtils.isBlank(request.getMciId())) { + throw new ApplicationException("MCI ID is required for VM NodeGroup deployment"); + } + + String nodeGroupId = request.getVmNodeGroupId().trim(); + MciDto mci = cbtumblebugRestApi.getMciByMciId(request.getNamespace(), request.getMciId()); + if (mci == null || mci.getNode() == null) { + throw new ApplicationException("VM NodeGroup information is unavailable: " + nodeGroupId); + } + + List groupMembers = new ArrayList<>(); + Set runningVmIds = new LinkedHashSet<>(); + for (VmAccessInfo vm : mci.getNode()) { + if (vm == null || !nodeGroupId.equals(StringUtils.trimToEmpty(vm.getSubGroupId()))) { + continue; + } + + groupMembers.add(vm); + if (!isRunning(vm)) { + continue; + } + + String vmId = firstNonBlank(vm.getId(), vm.getName()); + if (vmId != null) { + runningVmIds.add(vmId); + } + } + + if (groupMembers.isEmpty()) { + throw new ApplicationException("VM NodeGroup was not found in the selected MCI: " + nodeGroupId); + } + + if (request.getVmIds() != null && !request.getVmIds().isEmpty()) { + Set verifiedVmIds = new LinkedHashSet<>(); + for (String requestedVmId : request.getVmIds()) { + if (StringUtils.isBlank(requestedVmId)) { + throw new ApplicationException("VM ID is required when validating NodeGroup membership"); + } + + VmAccessInfo matchedVm = findVm(mci.getNode(), requestedVmId.trim()); + if (matchedVm == null) { + throw new ApplicationException("VM was not found in the selected MCI: " + requestedVmId.trim()); + } + if (!nodeGroupId.equals(StringUtils.trimToEmpty(matchedVm.getSubGroupId()))) { + throw new ApplicationException( + "VM does not belong to the selected NodeGroup: " + requestedVmId.trim()); + } + if (!isRunning(matchedVm)) { + throw new ApplicationException("VM is not running: " + requestedVmId.trim()); + } + + String canonicalVmId = firstNonBlank(matchedVm.getId(), matchedVm.getName()); + if (canonicalVmId == null) { + throw new ApplicationException("VM identifier is unavailable: " + requestedVmId.trim()); + } + verifiedVmIds.add(canonicalVmId); + } + + request.setVmNodeGroupId(nodeGroupId); + request.setVmDeploymentMode(VmDeploymentMode.STANDALONE); + request.setVmIds(new ArrayList<>(verifiedVmIds)); + log.info("Verified VM deployment targets against NodeGroup: namespace={}, mciId={}, nodeGroupId={}, vmCount={}", + request.getNamespace(), request.getMciId(), nodeGroupId, verifiedVmIds.size()); + return; + } + + if (runningVmIds.isEmpty()) { + throw new ApplicationException("VM NodeGroup has no running VMs: " + nodeGroupId); + } + + request.setVmNodeGroupId(nodeGroupId); + request.setVmDeploymentMode(VmDeploymentMode.STANDALONE); + request.setVmIds(new ArrayList<>(runningVmIds)); + + log.info("Resolved VM NodeGroup deployment targets: namespace={}, mciId={}, nodeGroupId={}, runningVmCount={}", + request.getNamespace(), request.getMciId(), nodeGroupId, runningVmIds.size()); + } + + private VmAccessInfo findVm(List vms, String requestedVmId) { + for (VmAccessInfo vm : vms) { + if (vm == null) { + continue; + } + if (requestedVmId.equals(StringUtils.trimToEmpty(vm.getId())) + || requestedVmId.equals(StringUtils.trimToEmpty(vm.getName()))) { + return vm; + } + } + return null; + } + + private boolean isRunning(VmAccessInfo vm) { + return "RUNNING".equalsIgnoreCase(StringUtils.trimToEmpty(vm.getStatus())); + } + + private String firstNonBlank(String... values) { + for (String value : values) { + if (StringUtils.isNotBlank(value)) { + return value.trim(); + } + } + return null; + } +} diff --git a/src/main/java/kr/co/mcmp/softwarecatalog/kubernetes/config/KubernetesNamespaces.java b/src/main/java/kr/co/mcmp/softwarecatalog/kubernetes/config/KubernetesNamespaces.java new file mode 100644 index 00000000..bbb62e4b --- /dev/null +++ b/src/main/java/kr/co/mcmp/softwarecatalog/kubernetes/config/KubernetesNamespaces.java @@ -0,0 +1,17 @@ +package kr.co.mcmp.softwarecatalog.kubernetes.config; + +/** + * Kubernetes namespaces used by Application Manager. + * + *

The namespace received from a deployment request identifies a CB-Tumblebug + * project. It must not be used as a Kubernetes namespace. The current API does + * not expose a separate Kubernetes namespace, so application workloads are + * intentionally installed in {@value #APPLICATION_WORKLOAD}.

+ */ +public final class KubernetesNamespaces { + + public static final String APPLICATION_WORKLOAD = "default"; + + private KubernetesNamespaces() { + } +} diff --git a/src/main/java/kr/co/mcmp/softwarecatalog/kubernetes/service/HelmChartService.java b/src/main/java/kr/co/mcmp/softwarecatalog/kubernetes/service/HelmChartService.java index 686d9821..b1be1014 100644 --- a/src/main/java/kr/co/mcmp/softwarecatalog/kubernetes/service/HelmChartService.java +++ b/src/main/java/kr/co/mcmp/softwarecatalog/kubernetes/service/HelmChartService.java @@ -22,8 +22,10 @@ import kr.co.mcmp.softwarecatalog.CatalogRepository; import kr.co.mcmp.softwarecatalog.SoftwareCatalog; import kr.co.mcmp.softwarecatalog.kubernetes.config.KubeconfigResolver; +import kr.co.mcmp.softwarecatalog.kubernetes.config.KubernetesNamespaces; import kr.co.mcmp.softwarecatalog.kubernetes.util.ReleaseNameGenerator; import kr.co.mcmp.softwarecatalog.application.dto.DeploymentConfigDTO; +import kr.co.mcmp.softwarecatalog.application.dto.DeploymentRequest; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -32,7 +34,6 @@ @RequiredArgsConstructor public class HelmChartService { - private static final String DEFAULT_HELM_NAMESPACE = "default"; private static final String METRICS_SERVER_NAMESPACE = "kube-system"; private static final String METRICS_SERVER_RELEASE = "metrics-server"; private static final String METRICS_SERVER_REPOSITORY = "metrics-server"; @@ -71,12 +72,16 @@ public Release deployHelmChart(KubernetesClient client, String namespace, Softwa public Release deployHelmChart(KubernetesClient client, String namespace, SoftwareCatalog catalog, kr.co.mcmp.softwarecatalog.application.model.HelmChart helmChart, String clusterName) { - + DeploymentConfigDTO config = DeploymentConfigDTO.from(new DeploymentRequest(), catalog); + HelmIngressValues.validate(helmChart, config); Path tempKubeconfigPath = null; + Path tempValuesPath = null; try { // 1. 클러스터 정보 조회 K8sClusterDto clusterDto = cbtumblebugRestApi.getK8sClusterByName(namespace, clusterName); + config = IbmIngressSupport.resolve(clusterDto, config); + config = IbmIngressTlsResolver.resolve(client, KubernetesNamespaces.APPLICATION_WORKLOAD, config); String kubeconfigYaml = kubeconfigResolver.getKubeconfigYaml(namespace, clusterName); // 2. Kubeconfig YAML 생성 @@ -87,6 +92,11 @@ public Release deployHelmChart(KubernetesClient client, String namespace, Softwa // 4. 릴리스 이름 생성 String releaseName = releaseNameGenerator.generateReleaseName(helmChart.getChartName()); + config = HelmIngressValues.resolveTlsConfig(config, releaseName); + Map ingressValues = HelmIngressValues.from(helmChart, config); + KubernetesIngressTlsWarnings.inspect(client, KubernetesNamespaces.APPLICATION_WORKLOAD, config) + .forEach(warning -> log.warn("{}", warning)); + // 5. 기존 릴리스 확인 (현재 배포와 관련된 것만) try { // 현재 카탈로그와 관련된 기존 릴리스만 확인 @@ -94,11 +104,17 @@ public Release deployHelmChart(KubernetesClient client, String namespace, Softwa if (existingReleaseName != null) { try { // 기존 릴리스 상태 확인 및 삭제 - boolean found = runHelmListAndCheckRelease(existingReleaseName, namespace, tempKubeconfigPath); + boolean found = runHelmListAndCheckRelease( + existingReleaseName, + KubernetesNamespaces.APPLICATION_WORKLOAD, + tempKubeconfigPath); if (found) { // 기존 릴리스 삭제 - runHelmUninstallCli(existingReleaseName, namespace, tempKubeconfigPath); + runHelmUninstallCli( + existingReleaseName, + KubernetesNamespaces.APPLICATION_WORKLOAD, + tempKubeconfigPath); } } catch (Exception e) { log.warn("기존 릴리스 삭제 중 오류 발생: {}", e.getMessage()); @@ -139,24 +155,6 @@ public Release deployHelmChart(KubernetesClient client, String namespace, Softwa values.put("containerSecurityContext.allowPrivilegeEscalation", "false"); // 컨테이너 이미지는 강제하지 않고 Chart values.yaml 기본값을 사용합니다. - // Ingress 설정 적용 - if (catalog.getIngressEnabled() != null && catalog.getIngressEnabled()) { - log.info("Ingress 설정 적용 중..."); - values.put("ingress.enabled", "true"); - values.put("ingress.host", catalog.getIngressHost() != null ? catalog.getIngressHost() : "localhost"); - values.put("ingress.path", catalog.getIngressPath() != null ? catalog.getIngressPath() : "/"); - values.put("ingress.className", catalog.getIngressClass() != null ? catalog.getIngressClass() : "nginx"); - - if (catalog.getIngressTlsEnabled() != null && catalog.getIngressTlsEnabled()) { - values.put("ingress.tls.enabled", "true"); - values.put("ingress.tls.secretName", catalog.getIngressTlsSecret() != null ? - catalog.getIngressTlsSecret() : releaseName + "-tls"); - } - - log.info("Ingress 설정 완료 - Host: {}, Path: {}, Class: {}", - catalog.getIngressHost(), catalog.getIngressPath(), catalog.getIngressClass()); - } - // CSP별 및 설정에 따른 동적 설정 적용 log.info("CSP별 및 설정에 따른 동적 설정 적용 중..."); try { @@ -225,14 +223,25 @@ public Release deployHelmChart(KubernetesClient client, String namespace, Softwa applyPrometheusPersistenceDefaults(values); } - runHelmInstallCli(releaseName, chartRef, namespace, helmChart.getChartVersion(), tempKubeconfigPath, values); + if (!ingressValues.isEmpty()) { + tempValuesPath = createTempValuesFile(ingressValues); + } + runHelmInstallCli( + releaseName, + chartRef, + KubernetesNamespaces.APPLICATION_WORKLOAD, + helmChart.getChartVersion(), + tempKubeconfigPath, + values, + tempValuesPath); // 간단한 Release 스텁 반환 - null 반환으로 변경 Release result = null; log.info("Helm Chart '{}' 설치 완료 (HPA: {})", releaseName, catalog.getHpaEnabled()); log.info("=== Helm Chart 배포 성공 ==="); - log.info("릴리스명: {}, 상태: {}, 네임스페이스: {}", releaseName, "deployed", namespace); + log.info("릴리스명: {}, 상태: {}, Tumblebug namespace: {}, Kubernetes namespace: {}", + releaseName, "deployed", namespace, KubernetesNamespaces.APPLICATION_WORKLOAD); return result; @@ -242,6 +251,13 @@ public Release deployHelmChart(KubernetesClient client, String namespace, Softwa throw new RuntimeException("Helm Chart 배포 실패", e); } finally { // 8. 임시 kubeconfig 파일 삭제 + if (tempValuesPath != null) { + try { + Files.deleteIfExists(tempValuesPath); + } catch (IOException e) { + log.warn("Failed to delete temporary Helm values file: {}", e.getMessage()); + } + } if (tempKubeconfigPath != null) { try { log.info("8. 임시 kubeconfig 파일 삭제 중..."); @@ -263,9 +279,10 @@ public Release deployHelmChartWithRequest(KubernetesClient client, String namesp log.info("=== Helm Chart 배포 시작 (Request 기반) ==="); log.info("Chart: {}, Namespace: {}, Cluster: {}", helmChart.getChartName(), namespace, clusterName); - + DeploymentConfigDTO config = DeploymentConfigDTO.from(request, catalog); + HelmIngressValues.validate(helmChart, config); Path tempKubeconfigPath = null; - Path tempObjectStorageValuesPath = null; + Path tempValuesPath = null; try { // 1. 클러스터 정보 조회 @@ -273,6 +290,13 @@ public Release deployHelmChartWithRequest(KubernetesClient client, String namesp if (clusterDto == null) { throw new RuntimeException("K8s cluster not found: " + clusterName); } + config = IbmIngressSupport.resolve(clusterDto, config); + config = IbmIngressTlsResolver.resolve(client, KubernetesNamespaces.APPLICATION_WORKLOAD, config); + IbmIngressTlsResolver.apply(request, config); + if (config.isIngressEnabled() && IbmIngressSupport.managed(config.getIngressClass())) { + IbmIngressSupport.verify(client, config); + request.setIngressClass(config.getIngressClass()); + } // 2. kubeconfig 파일 생성 String providerName = clusterDto.getConnectionConfig().getProviderName(); @@ -286,11 +310,15 @@ public Release deployHelmChartWithRequest(KubernetesClient client, String namesp // 4. 릴리스 이름 생성 String releaseName = releaseNameGenerator.generateReleaseName(helmChart.getChartName()); + config = HelmIngressValues.resolveTlsConfig(config, releaseName); + Map chartValues = HelmIngressValues.from(helmChart, config); + KubernetesIngressTlsWarnings.inspect(client, KubernetesNamespaces.APPLICATION_WORKLOAD, config) + .forEach(warning -> log.warn("{}", warning)); + // 5. 기존 릴리스 확인 및 제거 handleExistingRelease(releaseName, namespace, tempKubeconfigPath, catalog.getId(), clusterName); // 6. 배포 설정 DTO 생성 (우선순위: Request > Catalog > Default) - DeploymentConfigDTO config = DeploymentConfigDTO.from(request, catalog); String ingressCidr = K8sIngressPolicy.validate(request, config); log.info("배포 설정 생성 완료 - {}", config); @@ -299,7 +327,6 @@ public Release deployHelmChartWithRequest(KubernetesClient client, String namesp // Values 맵 구성 java.util.Map values = new java.util.HashMap<>(); - java.util.Map objectStorageValues = new java.util.HashMap<>(); values.put("replicaCount", String.valueOf(config.getMinReplicas())); values.put("service.port", String.valueOf(config.getServicePort())); values.put("service.type", "ClusterIP"); @@ -325,28 +352,8 @@ public Release deployHelmChartWithRequest(KubernetesClient client, String namesp log.info("HPA 비활성화됨"); } - // Ingress 설정 적용 - if (config.isIngressEnabled()) { - log.info("Ingress 설정 적용 중..."); - - // Ingress Controller 자동 설치 확인 및 설치 - values.put("ingress.enabled", "true"); - values.put("ingress.hosts[0]", config.getIngressHost()); - values.put("ingress.path", config.getIngressPath()); - values.put("ingress.ingressClassName", config.getIngressClass()); - - // TLS 설정 - if (config.isTlsEnabled()) { - values.put("ingress.tls.enabled", "true"); - values.put("ingress.tls.secretName", config.getIngressTlsSecret() != null ? - config.getIngressTlsSecret() : releaseName + "-tls"); - } - - log.info("Ingress 설정 완료 - {}", config.getIngressConfigSummary()); - } else { - values.put("ingress.enabled", "false"); - log.info("Ingress 비활성화됨"); - } + // Ingress는 차트별 스키마에 맞는 typed YAML로 전달합니다. + log.info("Ingress 설정 - {}", config.getIngressConfigSummary()); // 공통 보안 설정 적용 log.info("공통 보안 설정 적용 중..."); @@ -362,14 +369,23 @@ public Release deployHelmChartWithRequest(KubernetesClient client, String namesp applyPrometheusPersistenceDefaults(values); } - applyObjectStorageValues(catalog, request, providerName, helmChart.getChartName(), objectStorageValues); - K8sIngressPolicy.configureValues(helmChart.getChartName(), values, objectStorageValues, config, ingressCidr); - if (!objectStorageValues.isEmpty()) { - tempObjectStorageValuesPath = createTempValuesFile(objectStorageValues); + applyObjectStorageValues(catalog, request, providerName, helmChart.getChartName(), chartValues); + K8sIngressPolicy.configureValues(helmChart.getChartName(), values, chartValues, config, ingressCidr); + if (!chartValues.isEmpty()) { + tempValuesPath = createTempValuesFile(chartValues); } // Helm CLI로 설치 실행 - runHelmInstallCli(releaseName, chartRef, namespace, helmChart.getChartVersion(), tempKubeconfigPath, values, tempObjectStorageValuesPath, ingressCidr, config.getIngressHost()); + runHelmInstallCli( + releaseName, + chartRef, + KubernetesNamespaces.APPLICATION_WORKLOAD, + helmChart.getChartVersion(), + tempKubeconfigPath, + values, + tempValuesPath, + ingressCidr, + config.getIngressHost(), config.getIngressClass()); // 간단한 Release 스텁 반환 - null 반환으로 변경 Release result = null; @@ -377,7 +393,8 @@ public Release deployHelmChartWithRequest(KubernetesClient client, String namesp log.info("Helm Chart '{}' 설치 완료 (HPA: {}, Ingress: {})", releaseName, config.isHpaEnabled(), config.isIngressEnabled()); log.info("=== Helm Chart 배포 성공 ==="); - log.info("릴리스명: {}, 상태: {}, 네임스페이스: {}", releaseName, "deployed", namespace); + log.info("릴리스명: {}, 상태: {}, Tumblebug namespace: {}, Kubernetes namespace: {}", + releaseName, "deployed", namespace, KubernetesNamespaces.APPLICATION_WORKLOAD); return result; @@ -396,11 +413,11 @@ public Release deployHelmChartWithRequest(KubernetesClient client, String namesp log.warn("임시 kubeconfig 파일 삭제 중 오류 발생: {}", e.getMessage()); } } - if (tempObjectStorageValuesPath != null) { + if (tempValuesPath != null) { try { - Files.deleteIfExists(tempObjectStorageValuesPath); + Files.deleteIfExists(tempValuesPath); } catch (IOException e) { - log.warn("Failed to delete temporary Object Storage values file: {}", e.getMessage()); + log.warn("Failed to delete temporary Helm values file: {}", e.getMessage()); } } } @@ -450,7 +467,7 @@ public void uninstallHelmChart(String namespace, SoftwareCatalog catalog, log.info("1. 릴리스 '{}' 삭제 실행 중...", releaseName); - runHelmUninstallCli(releaseName, namespace, tempKubeconfigPath); + runHelmUninstallCli(releaseName, KubernetesNamespaces.APPLICATION_WORKLOAD, tempKubeconfigPath); log.info("2. 삭제 결과: 성공"); } finally { @@ -493,7 +510,7 @@ public void uninstallHelmChartWithKubeconfig(String namespace, SoftwareCatalog c log.info("1. 릴리스 '{}' 삭제 실행 중...", releaseName); - runHelmUninstallCli(releaseName, namespace, tempKubeconfigPath); + runHelmUninstallCli(releaseName, KubernetesNamespaces.APPLICATION_WORKLOAD, tempKubeconfigPath); log.info("2. 삭제 결과: 성공"); log.info("=== Helm Chart 삭제 성공 ==="); @@ -570,7 +587,7 @@ public String findLatestReleaseNameForChart(String namespace, String clusterName Path tempKubeconfigPath = null; try { tempKubeconfigPath = createTempKubeconfigFile(getKubeconfigForCluster(namespace, clusterName)); - String releaseList = runHelmListCli(DEFAULT_HELM_NAMESPACE, tempKubeconfigPath); + String releaseList = runHelmListCli(KubernetesNamespaces.APPLICATION_WORKLOAD, tempKubeconfigPath); com.fasterxml.jackson.databind.JsonNode releases = new com.fasterxml.jackson.databind.ObjectMapper().readTree(releaseList); if (!releases.isArray()) { @@ -605,6 +622,10 @@ public void ensureMetricsServer(KubernetesClient client, String namespace, Strin } public void ensureIngressController(KubernetesClient client, String namespace, String clusterName) { + if (IbmIngressSupport.isIbm(cbtumblebugRestApi.getK8sClusterByName(namespace, clusterName))) { + IbmIngressSupport.verify(client, IbmIngressSupport.PUBLIC_CLASS); + return; + } Path tempKubeconfigPath = null; try { tempKubeconfigPath = createTempKubeconfigFile(getKubeconfigForCluster(namespace, clusterName)); @@ -745,7 +766,10 @@ private void handleExistingRelease(String releaseName, String namespace, Path te // 기존 릴리스 제거 try { - runHelmUninstallCli(existingReleaseName, namespace, tempKubeconfigPath); + runHelmUninstallCli( + existingReleaseName, + KubernetesNamespaces.APPLICATION_WORKLOAD, + tempKubeconfigPath); log.info("기존 릴리스 제거 완료: {}", existingReleaseName); } catch (Exception e) { log.warn("기존 릴리스 제거 중 오류 발생 (무시하고 계속): {}", e.getMessage()); @@ -763,7 +787,8 @@ private void handleExistingRelease(String releaseName, String namespace, Path te */ private void ensureIngressController(KubernetesClient client, String namespace, Path tempKubeconfigPath) { try { - log.info("네임스페이스 '" + namespace + "'에서 NGINX Ingress Controller 확인 중..."); + log.info("NGINX Ingress Controller 확인 중 - Tumblebug namespace: {}, Kubernetes namespace: {}", + namespace, KubernetesNamespaces.APPLICATION_WORKLOAD); if (isIngressControllerInstalled(namespace, tempKubeconfigPath)) { log.info("NGINX Ingress Controller가 이미 설치되어 있습니다."); @@ -790,7 +815,7 @@ private void ensureIngressController(KubernetesClient client, String namespace, private boolean isIngressControllerInstalled(String namespace, Path tempKubeconfigPath) { try { // Helm 릴리스 목록에서 nginx-ingress 확인 - String releaseList = runHelmListCli(namespace, tempKubeconfigPath); + String releaseList = runHelmListCli(KubernetesNamespaces.APPLICATION_WORKLOAD, tempKubeconfigPath); String releaseName = "nginx-ingress-" + namespace; if (releaseList != null && releaseList.contains("\"name\":\"" + releaseName + "\"")) { @@ -828,7 +853,13 @@ private void installIngressControllerWithHelm(String namespace, Path tempKubecon addHelmRepository(ingressHelmChart); // Helm CLI로 설치 실행 - runHelmInstallCli(releaseName, INGRESS_NGINX_CHART, namespace, INGRESS_NGINX_CHART_VERSION, tempKubeconfigPath, values); + runHelmInstallCli( + releaseName, + INGRESS_NGINX_CHART, + KubernetesNamespaces.APPLICATION_WORKLOAD, + INGRESS_NGINX_CHART_VERSION, + tempKubeconfigPath, + values); // 간단한 Release 스텁 반환 - null 반환으로 변경 Release result = null; @@ -880,7 +911,7 @@ private boolean isIngressControllerReady(KubernetesClient client, String namespa String releaseName = "nginx-ingress-" + namespace; String controllerName = releaseName + "-ingress-nginx-controller"; String admissionServiceName = controllerName + "-admission"; - String helmNamespace = "default"; + String helmNamespace = KubernetesNamespaces.APPLICATION_WORKLOAD; var deployment = client.apps().deployments() .inNamespace(helmNamespace) @@ -939,13 +970,6 @@ private void applyPrometheusPersistenceDefaults(Map values) { private void applyRcloneGuiDefaults(Map values, Integer servicePort) { String port = String.valueOf(servicePort != null ? servicePort : 5572); - boolean ingressEnabled = Boolean.parseBoolean(values.getOrDefault("ingress.enabled", "false")); - String ingressHost = values.get("ingress.hosts[0]"); - String ingressPath = values.getOrDefault("ingress.path", "/"); - String ingressClassName = values.getOrDefault("ingress.ingressClassName", - values.getOrDefault("ingress.className", "nginx")); - boolean ingressTlsEnabled = Boolean.parseBoolean(values.getOrDefault("ingress.tls.enabled", "false")); - String ingressTlsSecretName = values.get("ingress.tls.secretName"); values.remove("persistence.enabled"); values.remove("persistence.storageClass"); @@ -953,14 +977,6 @@ private void applyRcloneGuiDefaults(Map values, Integer serviceP values.remove("persistence.accessMode"); values.remove("service.type"); values.remove("service.port"); - values.remove("ingress.enabled"); - values.remove("ingress.host"); - values.remove("ingress.hosts[0]"); - values.remove("ingress.path"); - values.remove("ingress.ingressClassName"); - values.remove("ingress.className"); - values.remove("ingress.tls.enabled"); - values.remove("ingress.tls.secretName"); values.put("persistence.config.enabled", "false"); values.put("service.main.enabled", "true"); @@ -972,20 +988,6 @@ private void applyRcloneGuiDefaults(Map values, Integer serviceP values.put("probes.readiness.enabled", "false"); values.put("probes.startup.enabled", "false"); - if (ingressEnabled && StringUtils.isNotBlank(ingressHost)) { - values.put("ingress.main.enabled", "true"); - values.put("ingress.main.ingressClassName", ingressClassName); - values.put("ingress.main.hosts[0].host", ingressHost); - values.put("ingress.main.hosts[0].paths[0].path", StringUtils.defaultIfBlank(ingressPath, "/")); - values.put("ingress.main.hosts[0].paths[0].pathType", "Prefix"); - - if (ingressTlsEnabled && StringUtils.isNotBlank(ingressTlsSecretName)) { - values.put("ingress.main.tls[0].secretName", ingressTlsSecretName); - values.put("ingress.main.tls[0].hosts[0]", ingressHost); - } - } else { - values.put("ingress.main.enabled", "false"); - } } private void applyObjectStorageValues(SoftwareCatalog catalog, @@ -1196,7 +1198,7 @@ private boolean asBoolean(Object value) { } private Path createTempValuesFile(Map values) throws IOException { - Path valuesFile = Files.createTempFile("helm-object-storage-", ".yaml"); + Path valuesFile = Files.createTempFile("helm-values-", ".yaml"); String yaml = new Yaml().dump(values); Files.writeString(valuesFile, yaml, StandardCharsets.UTF_8); return valuesFile; @@ -1236,12 +1238,17 @@ private void runHelmInstallCli(String releaseName, private void runHelmInstallCli(String releaseName, String chartRef, String namespace, String version, Path kubeconfig, Map values, Path valuesFile, String ingressCidr, String ingressHost) throws Exception { + runHelmInstallCli(releaseName, chartRef, namespace, version, kubeconfig, values, valuesFile, ingressCidr, ingressHost, "nginx"); + } + + private void runHelmInstallCli(String releaseName, String chartRef, String namespace, String version, + Path kubeconfig, Map values, Path valuesFile, String ingressCidr, String ingressHost, String ingressClass) throws Exception { java.util.List cmd = new java.util.ArrayList<>(); // Helm 경로 지정 (관리자 권한 없이 사용) String helmPath = getHelmPath(); cmd.add(helmPath); cmd.add("install"); cmd.add(releaseName); cmd.add(chartRef); - cmd.add("--namespace"); cmd.add("default"); + cmd.add("--namespace"); cmd.add(requireHelmNamespace(namespace)); cmd.add("--version"); cmd.add(version); cmd.add("--kubeconfig"); cmd.add(kubeconfig.toString()); if (valuesFile != null) { @@ -1249,7 +1256,7 @@ private void runHelmInstallCli(String releaseName, String chartRef, String names cmd.add(valuesFile.toString()); } cmd.addAll(buildHelmSetArguments(values)); - if (ingressCidr != null) verifyIngressBeforeInstall(cmd, ingressCidr, ingressHost); + if (ingressCidr != null) verifyIngressBeforeInstall(cmd, ingressCidr, ingressHost, ingressClass); ProcessBuilder pb = new ProcessBuilder(cmd); Process p = pb.start(); int ec = p.waitFor(); @@ -1261,7 +1268,7 @@ private void runHelmInstallCli(String releaseName, String chartRef, String names log.info("helm install output: {}", out); } - private void verifyIngressBeforeInstall(java.util.List installCommand, String cidr, String ingressHost) throws Exception { + private void verifyIngressBeforeInstall(java.util.List installCommand, String cidr, String ingressHost, String ingressClass) throws Exception { var command = new java.util.ArrayList<>(installCommand); command.addAll(java.util.List.of("--dry-run=client", "--output", "json")); Path output = Files.createTempFile("helm-ingress-check-", ".json"); @@ -1276,7 +1283,7 @@ private void verifyIngressBeforeInstall(java.util.List installCommand, S var result = new com.fasterxml.jackson.databind.ObjectMapper().readTree(output.toFile()); StringBuilder manifest = new StringBuilder(result.path("manifest").asText()); for (var hook : result.path("hooks")) manifest.append("\n---\n").append(hook.path("manifest").asText()); - K8sIngressPolicy.verifyManifest(manifest.toString(), cidr, ingressHost); + K8sIngressPolicy.verifyManifest(manifest.toString(), cidr, ingressHost, ingressClass); } finally { Files.deleteIfExists(output); Files.deleteIfExists(error); @@ -1295,7 +1302,7 @@ private void runHelmInstallCliInNamespace(String releaseName, String helmPath = getHelmPath(); cmd.add(helmPath); cmd.add("install"); cmd.add(releaseName); cmd.add(chartRef); - cmd.add("--namespace"); cmd.add(helmNamespace); + cmd.add("--namespace"); cmd.add(requireHelmNamespace(helmNamespace)); cmd.add("--version"); cmd.add(version); cmd.add("--kubeconfig"); cmd.add(kubeconfig.toString()); if (waitForReady) { @@ -1404,7 +1411,7 @@ void runHelmUninstallCli(String releaseName, String namespace, Path kubeconfig) String helmPath = getHelmPath(); cmd.add(helmPath); cmd.add("uninstall"); cmd.add(releaseName); - cmd.add("--namespace"); cmd.add(namespace); + cmd.add("--namespace"); cmd.add(requireHelmNamespace(namespace)); if (kubeconfig != null) { cmd.add("--kubeconfig"); cmd.add(kubeconfig.toString()); } @@ -1422,7 +1429,7 @@ void runHelmUninstallCli(String releaseName, String namespace, Path kubeconfig) private String runHelmListCli(String namespace, Path kubeconfig) throws Exception { java.util.List cmd = new java.util.ArrayList<>(); cmd.add(getHelmPath()); cmd.add("list"); - cmd.add("--namespace"); cmd.add("default"); + cmd.add("--namespace"); cmd.add(requireHelmNamespace(namespace)); if (kubeconfig != null) { cmd.add("--kubeconfig"); cmd.add(kubeconfig.toString()); } @@ -1441,7 +1448,7 @@ private String runHelmListCli(String namespace, Path kubeconfig) throws Exceptio private String runHelmListCliInNamespace(String helmNamespace, Path kubeconfig) throws Exception { java.util.List cmd = new java.util.ArrayList<>(); cmd.add(getHelmPath()); cmd.add("list"); - cmd.add("--namespace"); cmd.add(helmNamespace); + cmd.add("--namespace"); cmd.add(requireHelmNamespace(helmNamespace)); if (kubeconfig != null) { cmd.add("--kubeconfig"); cmd.add(kubeconfig.toString()); } @@ -1462,6 +1469,13 @@ private boolean runHelmListAndCheckRelease(String releaseName, String namespace, return releaseList != null && releaseList.contains("\"name\":\"" + releaseName + "\""); } + static String requireHelmNamespace(String namespace) { + if (StringUtils.isBlank(namespace)) { + throw new IllegalArgumentException("Kubernetes Helm namespace cannot be blank"); + } + return namespace; + } + /** * Helm repository를 추가합니다. */ diff --git a/src/main/java/kr/co/mcmp/softwarecatalog/kubernetes/service/HelmIngressValues.java b/src/main/java/kr/co/mcmp/softwarecatalog/kubernetes/service/HelmIngressValues.java new file mode 100644 index 00000000..1b15bfe7 --- /dev/null +++ b/src/main/java/kr/co/mcmp/softwarecatalog/kubernetes/service/HelmIngressValues.java @@ -0,0 +1,155 @@ +package kr.co.mcmp.softwarecatalog.kubernetes.service; + +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.regex.Pattern; +import org.yaml.snakeyaml.Yaml; + +import kr.co.mcmp.softwarecatalog.application.dto.DeploymentConfigDTO; +import kr.co.mcmp.softwarecatalog.application.model.HelmChart; + +/** + * Chart-specific adapters for AM's single HTTP route, with a helm-create style fallback. + * Repository aliases are not identities. + * Render-tested versions are documented in doc/helm-ingress-mapping.md. + * Use typed YAML values, not --set, to preserve lists, booleans and user-provided strings. + */ +final class HelmIngressValues { + private static final String DNS_LABEL = "[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?"; + private static final Pattern DNS_NAME = Pattern.compile(DNS_LABEL + "(?:\\." + DNS_LABEL + ")*"); + + private HelmIngressValues() {} + + static Map from(HelmChart chart, DeploymentConfigDTO config) { + Profile profile = Profile.find(chart); + validate(chart, config); + + Map ingress = new LinkedHashMap<>(); + ingress.put("enabled", config.isIngressEnabled()); + if (config.isIngressEnabled()) { + String host = config.getIngressHost(); + if (config.isTlsEnabled() && config.getIngressTlsSecret() == null) { + throw new IllegalStateException("Resolve the TLS Secret using the actual Helm release name before building values"); + } + ingress.put(profile == Profile.GENERIC ? "className" : "ingressClassName", config.getIngressClass()); + List> tls = config.isTlsEnabled() + ? List.of(Map.of("secretName", config.getIngressTlsSecret(), "hosts", List.of(host))) + : List.of(); + + switch (profile) { + case GRAFANA, PROMETHEUS -> { + ingress.put("hosts", List.of(host)); + ingress.put("path", config.getIngressPath()); + ingress.put("pathType", "Prefix"); + ingress.put("tls", tls); + } + case RCLONE, GENERIC -> { + ingress.put("hosts", List.of(Map.of("host", host, "paths", List.of( + Map.of("path", config.getIngressPath(), "pathType", "Prefix"))))); + ingress.put("tls", tls); + } + case BITNAMI_NGINX -> { + ingress.put("hostname", host); + ingress.put("path", config.getIngressPath()); + ingress.put("pathType", "Prefix"); + // Bitnami's tls=true uses -tls. extraTls honors the selected Secret. + ingress.put("tls", false); + ingress.put("selfSigned", false); + ingress.put("extraTls", tls); + } + } + } + + Map result = new LinkedHashMap<>(); + switch (profile) { + case GRAFANA, BITNAMI_NGINX, GENERIC -> result.put("ingress", ingress); + case PROMETHEUS -> result.put("server", Map.of("ingress", ingress)); + case RCLONE -> result.put("ingress", Map.of("main", ingress)); + } + return result; + } + + /** Read-only validation also used by Spec Check, before a release name exists. */ + static void validate(HelmChart chart, DeploymentConfigDTO config) { + if (!config.isIngressEnabled()) return; + String host = config.getIngressHost(); + String dnsHost = host != null && host.startsWith("*.") ? host.substring(2) : host; + if (!isDnsName(dnsHost) || host.length() > 253 || host.matches("[0-9]+(?:\\.[0-9]+){3}")) { + throw new IllegalArgumentException("Ingress Host must be a DNS name, optionally starting with '*.'"); + } + String path = config.getIngressPath(); + if (path == null || !path.startsWith("/") || path.chars().anyMatch(Character::isWhitespace) + || path.contains("?") || path.contains("#")) { + throw new IllegalArgumentException("Ingress Path must start with '/' and contain no whitespace, query or fragment"); + } + if (!isDnsName(config.getIngressClass())) { + throw new IllegalArgumentException("Ingress Class must be a non-empty DNS name"); + } + if (config.isTlsEnabled() && config.getIngressTlsSecret() != null + && !isDnsName(config.getIngressTlsSecret())) { + throw new IllegalArgumentException("TLS Secret name must be a valid DNS name, or omitted to use -tls"); + } + // These upstream templates emit some scalars without YAML quotes. + Profile profile = Profile.find(chart); + if (profile == Profile.PROMETHEUS) { + if (host.startsWith("*.")) { + throw new IllegalArgumentException("Prometheus Ingress does not support wildcard Host in the verified chart template; use an explicit DNS name"); + } + requirePlainYamlString(host, "Host"); + } + if (profile == Profile.GRAFANA || profile == Profile.PROMETHEUS || profile == Profile.GENERIC) { + requirePlainYamlString(config.getIngressClass(), "Class"); + } + } + + /** Preserve the original null-only fallback without modifying the request/catalog config. */ + static DeploymentConfigDTO resolveTlsConfig(DeploymentConfigDTO config, String releaseName) { + if (!config.isIngressEnabled() || !config.isTlsEnabled() || config.getIngressTlsSecret() != null) return config; + if (!isDnsName(releaseName) || !isDnsName(releaseName + "-tls")) { + throw new IllegalArgumentException("A valid Helm release name is required to select the default TLS Secret"); + } + return config.toBuilder().ingressTlsSecret(releaseName + "-tls").build(); + } + + private static boolean isDnsName(String value) { + return value != null && value.length() <= 253 && DNS_NAME.matcher(value).matches(); + } + + private static void requirePlainYamlString(String value, String field) { + if (!(new Yaml().load(value) instanceof String)) { + throw new IllegalArgumentException("Ingress " + field + " must not be a YAML boolean or number in this chart template"); + } + } + + private enum Profile { + GRAFANA("grafana", "https://grafana.github.io/helm-charts"), + PROMETHEUS("prometheus", "https://prometheus-community.github.io/helm-charts"), + RCLONE("rclone", "https://jacobcolvin.com/helm-charts"), + BITNAMI_NGINX("nginx", "https://charts.bitnami.com/bitnami"), + // Fallback only: a repository/chart with a different schema still needs an adapter. + GENERIC(null, null); + + private final String chartName; + private final String repositoryUrl; + + Profile(String chartName, String repositoryUrl) { + this.chartName = chartName; + this.repositoryUrl = repositoryUrl; + } + + static Profile find(HelmChart chart) { + String url = chart.getChartRepositoryUrl(); + if (url == null) { + return GENERIC; + } + url = url.trim().replaceAll("/+$", ""); + for (Profile profile : values()) { + if (profile != GENERIC && profile.chartName.equals(chart.getChartName()) && profile.repositoryUrl.equals(url)) { + return profile; + } + } + return GENERIC; + } + } +} diff --git a/src/main/java/kr/co/mcmp/softwarecatalog/kubernetes/service/IbmCertificateManager.java b/src/main/java/kr/co/mcmp/softwarecatalog/kubernetes/service/IbmCertificateManager.java new file mode 100644 index 00000000..25ac3001 --- /dev/null +++ b/src/main/java/kr/co/mcmp/softwarecatalog/kubernetes/service/IbmCertificateManager.java @@ -0,0 +1,297 @@ +package kr.co.mcmp.softwarecatalog.kubernetes.service; + +import com.fasterxml.jackson.databind.ObjectMapper; +import io.fabric8.kubernetes.api.model.*; +import io.fabric8.kubernetes.client.KubernetesClient; +import io.fabric8.kubernetes.client.KubernetesClientException; +import io.fabric8.kubernetes.client.dsl.base.ResourceDefinitionContext; +import io.fabric8.kubernetes.client.utils.Serialization; +import java.nio.charset.StandardCharsets; +import java.nio.file.*; +import java.nio.file.attribute.PosixFilePermissions; +import java.security.MessageDigest; +import java.util.*; +import java.util.concurrent.TimeUnit; +import java.util.function.Consumer; +import kr.co.mcmp.softwarecatalog.kubernetes.config.KubeconfigResolver; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +@Component @RequiredArgsConstructor +public class IbmCertificateManager { + static final String NS = "cert-manager"; + static final String OWNER = "mcmp.io/ingress-automation"; + static final ResourceDefinitionContext CERT = definition("Certificate", "certificates", true); + static final ResourceDefinitionContext ISSUER = definition("ClusterIssuer", "clusterissuers", false); + private static final List CRDS = List.of("certificates.cert-manager.io", "certificaterequests.cert-manager.io", + "issuers.cert-manager.io", "clusterissuers.cert-manager.io", "orders.acme.cert-manager.io", "challenges.acme.cert-manager.io"); + private final IbmIngressAutomationProperties properties; + private final KubeconfigResolver kubeconfigs; + private final ObjectMapper json = new ObjectMapper(); + + static class Plan { + GenericKubernetesResource issuer; + List secrets; + boolean install; + } + + Plan plan(KubernetesClient client, IbmIngressAutomationProperties.Profile profile, String host) { + if (profile == null || !profile.allowsHost(host)) + throw new IllegalArgumentException("This custom domain is not authorized for automatic certificates. Configure the Project's IBM automation profile."); + Plan plan = new Plan(); + try { + plan.issuer = Serialization.unmarshal(IbmIngressAutomationProperties.readOperatorFile(profile.getIssuerTemplateFile(), "ACME ClusterIssuer template"), GenericKubernetesResource.class); + var tree = json.valueToTree(plan.issuer); + var acme = tree.path("spec").path("acme"); + if (!"cert-manager.io/v1".equals(plan.issuer.getApiVersion()) || !"ClusterIssuer".equals(plan.issuer.getKind()) + || !validName(plan.issuer.getMetadata().getName()) || plan.issuer.getMetadata().getNamespace() != null + || acme.path("email").asText().isBlank() + || !Set.of("https://acme-v02.api.letsencrypt.org/directory", "https://acme-staging-v02.api.letsencrypt.org/directory").contains(acme.path("server").asText()) + || !validName(acme.path("privateKeySecretRef").path("name").asText()) + || !acme.path("solvers").isArray() || acme.path("solvers").isEmpty()) throw new IllegalArgumentException(); + for (var solver : acme.path("solvers")) { + if (!solver.path("dns01").isObject() || solver.path("dns01").isEmpty() || solver.has("http01")) throw new IllegalArgumentException(); + } + plan.issuer.getAdditionalProperties().remove("status"); + plan.issuer.getMetadata().setResourceVersion(null); + plan.issuer.getMetadata().setUid(null); + plan.issuer.getMetadata().setOwnerReferences(null); + plan.issuer.getMetadata().setLabels(Map.of(OWNER, "true")); + plan.secrets = new ArrayList<>(); + Set names = new HashSet<>(); + for (String path : profile.getDnsSecretFiles()) { + Secret secret = Serialization.unmarshal(IbmIngressAutomationProperties.readOperatorFile(path, "DNS credential Secret"), Secret.class); + if (!"v1".equals(secret.getApiVersion()) || !"Secret".equals(secret.getKind()) || !"Opaque".equals(secret.getType()) + || !NS.equals(secret.getMetadata().getNamespace()) || !validName(secret.getMetadata().getName()) + || !names.add(secret.getMetadata().getName())) throw new IllegalArgumentException(); + if (secret.getData() == null) secret.setData(new HashMap<>()); + if (secret.getStringData() != null) secret.getStringData().forEach((k,v) -> secret.getData().put(k, Base64.getEncoder().encodeToString(v.getBytes(StandardCharsets.UTF_8)))); + secret.setStringData(null); + if (secret.getData().isEmpty()) throw new IllegalArgumentException(); + secret.getMetadata().setLabels(Map.of(OWNER,"true")); + secret.getMetadata().setOwnerReferences(null); + secret.getMetadata().setResourceVersion(null); + secret.getMetadata().setUid(null); + plan.secrets.add(secret); + } + } catch (Exception e) { throw new IllegalArgumentException("Invalid server-side certificate configuration. Use a named Let's Encrypt DNS01 ClusterIssuer and Opaque DNS Secrets in cert-manager namespace."); } + + var definitions = CRDS.stream().map(name -> client.apiextensions().v1().customResourceDefinitions().withName(name).get()) + .filter(Objects::nonNull).toList(); + long present = definitions.size(); + if (present > 0 && present != CRDS.size()) throw new IllegalArgumentException("Partial cert-manager installation detected; ask its operator to repair it. AM will not overwrite it."); + if (definitions.stream().anyMatch(d -> d.getSpec() == null || d.getSpec().getVersions() == null + || d.getSpec().getVersions().stream().noneMatch(v -> "v1".equals(v.getName()) && Boolean.TRUE.equals(v.getServed())))) + throw new IllegalArgumentException("The existing cert-manager installation must serve cert-manager.io/v1 APIs. Ask its operator to upgrade it."); + plan.install = present == 0; + boolean createIssuer = plan.install; + if (plan.install && !profile.isInstallCertManager()) throw new IllegalArgumentException("cert-manager is absent. Enable install-cert-manager in the authorized IBM automation profile."); + if (plan.install) { + String minor = client.getKubernetesVersion().getMinor().replaceAll("[^0-9].*$", ""); + int version = Integer.parseInt(minor); + String chart = properties.getCertManagerVersion(); + if (!(chart.matches("v1\\.20\\.[0-9]+") && version >= 32 && version <= 35 + || chart.matches("v1\\.21\\.[0-9]+") && version >= 33 && version <= 36)) + throw new IllegalArgumentException("Configured cert-manager chart is not supported for this Kubernetes version. Configure a tested 1.20.x or 1.21.x version."); + // Never take ownership of a pre-existing installation that happens to lack CRDs. + if (!client.apps().deployments().inNamespace(NS).list().getItems().isEmpty()) + throw new IllegalArgumentException("Existing cert-manager namespace workloads require operator review before installation."); + for (var pair : List.of(new String[]{"apiextensions.k8s.io","customresourcedefinitions"}, + new String[]{"rbac.authorization.k8s.io","clusterroles"}, new String[]{"rbac.authorization.k8s.io","clusterrolebindings"}, + new String[]{"admissionregistration.k8s.io","mutatingwebhookconfigurations"}, new String[]{"admissionregistration.k8s.io","validatingwebhookconfigurations"})) + IngressAutomationPermissions.require(client,pair[0],pair[1],null,"create"); + IngressAutomationPermissions.require(client,"","namespaces",null,"create"); + for (String resource : List.of("secrets","services","serviceaccounts")) + IngressAutomationPermissions.require(client,"",resource,NS,"create"); + IngressAutomationPermissions.require(client,"apps","deployments",NS,"create"); + IngressAutomationPermissions.require(client,"batch","jobs",NS,"create"); + for (String namespace : List.of(NS,"kube-system")) for (String resource : List.of("roles","rolebindings")) + IngressAutomationPermissions.require(client,"rbac.authorization.k8s.io",resource,namespace,"create"); + } else { + if (client.namespaces().withName(NS).get() == null) + throw new IllegalArgumentException("Existing cert-manager must use cert-manager as its ClusterIssuer resource namespace for this automation profile."); + var existing = client.genericKubernetesResources(ISSUER).withName(plan.issuer.getMetadata().getName()).get(); + createIssuer = existing == null; + if (existing != null && !sameSpec(existing, plan.issuer)) throw new IllegalArgumentException("The configured ClusterIssuer already exists with different settings. AM will not overwrite it."); + } + if (createIssuer) IngressAutomationPermissions.require(client,"cert-manager.io","clusterissuers",null,"create"); + for (Secret desired : plan.secrets) { + Secret existing = client.secrets().inNamespace(NS).withName(desired.getMetadata().getName()).get(); + if (existing != null && (!Objects.equals(existing.getType(), desired.getType()) || !Objects.equals(existing.getData(), desired.getData()))) + throw new IllegalArgumentException("A DNS credential Secret already exists with different data. Update it through its administrator."); + } + // Validate referenced DNS credential keys before installing anything or replacing an LB. + var staged = new HashMap(); plan.secrets.forEach(s -> staged.put(s.getMetadata().getName(),s)); + verifyDnsReferences(client, json.valueToTree(plan.issuer).path("spec").path("acme").path("solvers"), staged); + return plan; + } + + void prepare(KubernetesClient client, String tbNamespace, String clusterName, String workloadNamespace, + String host, Plan plan, Consumer progress) { + try { provision(client,tbNamespace,clusterName,workloadNamespace,host,plan,progress); } + catch (KubernetesClientException e) { + // A rejected Secret create can contain its entire request body. Do not retain the cause in logs or responses. + throw new IllegalArgumentException("Certificate resources could not be prepared. Check Kubernetes permissions, cert-manager status and server-side DNS configuration (HTTP " + e.getCode() + ")."); + } + } + + private void provision(KubernetesClient client, String tbNamespace, String clusterName, String workloadNamespace, + String host, Plan plan, Consumer progress) { + if (client.namespaces().withName(workloadNamespace).get() == null) + throw new IllegalArgumentException("The application Kubernetes namespace must exist before certificate provisioning."); + if (plan.install) { + progress.accept("Installing cert-manager in the selected cluster…"); + install(tbNamespace, clusterName); + } + for (Secret secret : plan.secrets) { + var existingSecret = client.secrets().inNamespace(NS).withName(secret.getMetadata().getName()).get(); + if (existingSecret == null) client.secrets().inNamespace(NS).resource(secret).create(); + else if (!Objects.equals(existingSecret.getData(),secret.getData()) || !Objects.equals(existingSecret.getType(),secret.getType())) + throw new IllegalArgumentException("DNS credential configuration changed during preparation. AM will not overwrite it."); + } + var issuers = client.genericKubernetesResources(ISSUER); + String issuerName = plan.issuer.getMetadata().getName(); + var currentIssuer = issuers.withName(issuerName).get(); + if (currentIssuer == null) issuers.resource(plan.issuer).create(); + else if (!sameSpec(currentIssuer,plan.issuer)) + throw new IllegalArgumentException("ClusterIssuer configuration changed during preparation. AM will not overwrite it."); + await(() -> ready(issuers.withName(issuerName).get()), "Certificate issuer is not ready. Check cert-manager and DNS credentials."); + progress.accept("Issuing the domain certificate (DNS validation)…"); + String name = certificateName(host); + GenericKubernetesResource desired = certificateResource(workloadNamespace, host, issuerName); + var certificates = client.genericKubernetesResources(CERT).inNamespace(workloadNamespace); + var existing = certificates.withName(name).get(); + if (existing != null && (!owned(existing) || !sameSpec(existing, desired))) + throw new IllegalArgumentException("Certificate name is already owned by another configuration. AM will not replace it."); + if (existing == null) { + if (client.secrets().inNamespace(workloadNamespace).withName(name).get() != null) + throw new IllegalArgumentException("The target TLS Secret already exists without an AM certificate. AM will not overwrite it."); + certificates.resource(desired).create(); + } + await(() -> ready(certificates.withName(name).get()), "Certificate issuance is still pending or failed. Check DNS01 Challenges and cert-manager; retry reuses the existing request."); + IbmIngressTlsResolver.verifyHost(IbmIngressTlsResolver.certificate(client, workloadNamespace, name), host); + registerBinding(client, workloadNamespace, host, name); + } + + void checkWorkloadPermissions(KubernetesClient client, String workload, Plan plan) { + IngressAutomationPermissions.lock(client); + IngressAutomationPermissions.require(client,"cert-manager.io","certificates",workload,"create"); + for (String verb : List.of("get","create","update")) IngressAutomationPermissions.require(client,"","configmaps",workload,verb); + if (!plan.secrets.isEmpty()) IngressAutomationPermissions.require(client,"","secrets",NS,"create"); + } + + private static void verifyDnsReferences(KubernetesClient client, com.fasterxml.jackson.databind.JsonNode node, Map staged) { + if (node.isArray()) { node.forEach(n -> verifyDnsReferences(client,n,staged)); return; } + if (!node.isObject()) return; + var fields=node.fields(); + while (fields.hasNext()) { + var entry=fields.next(); var value=entry.getValue(); + if (entry.getKey().toLowerCase(Locale.ROOT).endsWith("secretref") && value.isObject()) { + String name=value.path("name").asText(), key=value.path("key").asText(); + Secret secret=staged.get(name); + if (secret==null) secret=client.secrets().inNamespace(NS).withName(name).get(); + if (secret==null || secret.getData()==null || !secret.getData().containsKey(key)) + throw new IllegalArgumentException("A DNS01 credential Secret/key referenced by the configured issuer is missing in cert-manager namespace."); + } else verifyDnsReferences(client,value,staged); + } + } + + void install(String namespace, String clusterName) { + Path file = null; + try { + file = Files.createTempFile("am-cert-manager-", ".yaml", PosixFilePermissions.asFileAttribute(PosixFilePermissions.fromString("rw-------"))); + Files.writeString(file, kubeconfigs.getKubeconfigYaml(namespace, clusterName)); + // Dedicated release, never a subchart of an application and never an automatic upgrade. + var command = List.of(properties.getHelmExecutable(), "install", "am-cert-manager", "oci://quay.io/jetstack/charts/cert-manager", + "--version", properties.getCertManagerVersion(), "--namespace", NS, "--create-namespace", "--set", "crds.enabled=true", + "--wait", "--timeout", "10m", "--kubeconfig", file.toString()); + var process = new ProcessBuilder(command).redirectOutput(ProcessBuilder.Redirect.DISCARD).redirectError(ProcessBuilder.Redirect.DISCARD).start(); + try { + if (!process.waitFor(660, TimeUnit.SECONDS)) { process.destroyForcibly(); throw new IllegalStateException("cert-manager installation timed out; inspect the existing release before retrying."); } + if (process.exitValue() != 0) throw new IllegalStateException("cert-manager installation failed. Check cluster-wide install permissions, chart compatibility and Helm release status."); + } finally { if (process.isAlive()) process.destroyForcibly(); } + } catch (InterruptedException e) { Thread.currentThread().interrupt(); throw new IllegalStateException("cert-manager installation interrupted; inspect the release before retrying."); } + catch (java.io.IOException e) { throw new IllegalStateException("Cannot run Helm for cert-manager installation."); } + finally { if (file != null) try { Files.deleteIfExists(file); } catch (java.io.IOException ignored) { } } + } + + static GenericKubernetesResource certificateResource(String ns, String host, String issuer) { + var resource = new GenericKubernetesResource(); + resource.setApiVersion("cert-manager.io/v1"); resource.setKind("Certificate"); + resource.setMetadata(new ObjectMetaBuilder().withName(certificateName(host)).withNamespace(ns).withLabels(Map.of(OWNER,"true")).build()); + resource.setAdditionalProperty("spec", Map.of("secretName", certificateName(host), "dnsNames", List.of(host), + "issuerRef", Map.of("name",issuer,"kind","ClusterIssuer","group","cert-manager.io"), + "privateKey", Map.of("rotationPolicy","Always"), "secretTemplate", Map.of("labels",Map.of(OWNER,"true")))); + return resource; + } + + static String certificateName(String host) { + try { return "am-tls-" + HexFormat.of().formatHex(MessageDigest.getInstance("SHA-256").digest(host.getBytes(StandardCharsets.UTF_8))).substring(0,24); } + catch (Exception e) { throw new IllegalStateException("Cannot calculate certificate identity."); } + } + + void registerBinding(KubernetesClient client, String namespace, String host, String secret) { + var maps = client.configMaps().inNamespace(namespace); + for (int attempt = 0; attempt < 5; attempt++) { + var existing = maps.withName(IbmIngressTlsResolver.BINDINGS_CONFIG_MAP).get(); + var entries = new LinkedHashMap<>(IbmIngressTlsResolver.bindings(client, namespace)); + String binding = IbmIngressTlsResolver.selectBinding(entries, host); + if (binding != null) { + if (!secret.equals(binding)) throw new IllegalArgumentException("A domain binding was added by another operator; AM will not replace it."); + return; + } + entries.put(host, secret); + try { + String data = json.writeValueAsString(entries.entrySet().stream().map(e -> Map.of("host",e.getKey(),"secretName",e.getValue())).toList()); + if (existing == null) maps.resource(new ConfigMapBuilder().withNewMetadata().withName(IbmIngressTlsResolver.BINDINGS_CONFIG_MAP).endMetadata() + .withData(Map.of("bindings.json",data)).build()).create(); + else { + var values = new HashMap<>(existing.getData()); values.put("bindings.json", data); existing.setData(values); + maps.resource(existing).lockResourceVersion(existing.getMetadata().getResourceVersion()).replace(); + } + return; + } catch (KubernetesClientException e) { if (e.getCode() != 409) throw e; } + catch (com.fasterxml.jackson.core.JsonProcessingException e) { throw new IllegalStateException("Cannot encode domain bindings."); } + } + throw new IllegalArgumentException("Domain bindings changed concurrently; retry preparation."); + } + + void await(java.util.function.BooleanSupplier condition, String failure) { + long deadline = System.nanoTime() + TimeUnit.SECONDS.toNanos(Math.min(3600, Math.max(1, properties.getReadyTimeoutSeconds()))); + do { + if (condition.getAsBoolean()) return; + try { TimeUnit.SECONDS.sleep(Math.min(30,Math.max(1,properties.getPollSeconds()))); } + catch (InterruptedException e) { Thread.currentThread().interrupt(); throw new IllegalStateException("Ingress preparation interrupted; retry checks the existing resources."); } + } while (System.nanoTime() < deadline); + throw new IllegalArgumentException(failure); + } + static boolean ready(GenericKubernetesResource resource) { + if (resource == null) return false; + var tree = new ObjectMapper().valueToTree(resource); + for (var condition : tree.path("status").path("conditions")) + if ("Ready".equals(condition.path("type").asText()) && "True".equals(condition.path("status").asText()) + && condition.path("observedGeneration").asLong(-1) >= tree.path("metadata").path("generation").asLong(0)) return true; + return false; + } + static boolean owned(HasMetadata resource) { return resource.getMetadata().getLabels() != null && "true".equals(resource.getMetadata().getLabels().get(OWNER)); } + static boolean sameSpec(GenericKubernetesResource a, GenericKubernetesResource b) { + // The admission webhook may add defaults. Compare every requested field, but accept unrelated defaults. + return contains(new ObjectMapper().valueToTree(a).path("spec"), new ObjectMapper().valueToTree(b).path("spec")); + } + private static boolean contains(com.fasterxml.jackson.databind.JsonNode actual, com.fasterxml.jackson.databind.JsonNode desired) { + if (desired.isArray()) { + if (!actual.isArray() || actual.size() != desired.size()) return false; + for (int i=0;i cidrs) { + requireId(id); + if (cidrs.isEmpty()) throw new IllegalArgumentException("No trusted IBM LB subnet CIDRs were discovered."); + cidrs.forEach(K8sIngressAccessService::validateCidr); + try { + String body = json.writeValueAsString(Map.of("cluster", id, + "proxyProtocol", Map.of("enable", true, "cidr", cidrs, "headerTimeout", 5))); + request("PATCH", session.containers.resolve("ingress/v2/load-balancer/configuration"), session.token, body, "application/json"); + } catch (com.fasterxml.jackson.core.JsonProcessingException e) { throw new IllegalStateException("Cannot encode IBM LB configuration."); } + } + + /** Match actual managed Service hostnames, not every LB in the account. Check IP capacity before changing anything. */ + List trustedSubnets(Session session, JsonNode cluster, Set hostnames, boolean checkCapacity) { + if (hostnames.isEmpty()) throw new IllegalArgumentException("IBM managed LB hostnames are not ready."); + var vpcs = new HashSet(); cluster.path("vpcs").forEach(v -> vpcs.add(v.asText())); + var found = new HashSet(); + var subnets = new LinkedHashMap(); + URI page = session.vpc.resolve("/v1/load_balancers?version=2024-07-09&generation=2&limit=100"); + Set visited = new HashSet<>(); + while (page != null) { + if (visited.size() >= 100 || !visited.add(page) || !Objects.equals(page.getAuthority(), session.vpc.getAuthority()) + || !"https".equals(page.getScheme()) || !"/v1/load_balancers".equals(page.getPath())) + throw new IllegalArgumentException("Invalid IBM load balancer pagination response."); + JsonNode response = get(session, page); + for (var lb : response.path("load_balancers")) { + String hostname = lb.path("hostname").asText(); + if (!hostnames.contains(hostname)) continue; + if (!found.add(hostname)) throw new IllegalArgumentException("Ambiguous IBM managed LB hostname."); + if (!"active".equals(lb.path("provisioning_status").asText())) + throw new IllegalArgumentException("An IBM managed LB is still changing. Wait before preparing Ingress."); + if (!lb.path("subnets").isArray() || lb.path("subnets").isEmpty()) + throw new IllegalArgumentException("IBM LB subnet information is missing."); + for (var subnet : lb.path("subnets")) subnets.merge(requireId(subnet.path("id").asText()), 1, Integer::sum); + } + String next = response.path("next").path("href").asText(); + page = next.isBlank() ? null : URI.create(next); + } + if (!found.equals(hostnames)) throw new IllegalArgumentException("Cannot match all managed Ingress LBs in the configured IBM account/region."); + var cidrs = new TreeSet(); + for (var entry : subnets.entrySet()) { + var subnet = get(session, session.vpc.resolve("/v1/subnets/" + entry.getKey() + "?version=2024-07-09&generation=2")); + if (!vpcs.contains(subnet.path("vpc").path("id").asText())) + throw new IllegalArgumentException("IBM managed LB subnet is outside the selected cluster VPC."); + if (checkCapacity && subnet.path("available_ipv4_address_count").asInt(-1) < 2 * entry.getValue()) + throw new IllegalArgumentException("IBM LB recreation requires two free IPs per LB in each subnet. Insufficient subnet capacity."); + cidrs.add(K8sIngressAccessService.validateCidr(subnet.path("ipv4_cidr_block").asText())); + } + return List.copyOf(cidrs); + } + + private JsonNode get(Session s, URI uri) { return request("GET", uri, s.token, null, "application/json"); } + JsonNode request(String method, URI uri, String token, String body, String contentType) { + try { + var builder = HttpRequest.newBuilder(uri).timeout(Duration.ofSeconds(40)).header("Accept", "application/json"); + if (token != null) builder.header("Authorization", "Bearer " + token); + builder.header("Content-Type", contentType).method(method, body == null ? HttpRequest.BodyPublishers.noBody() : HttpRequest.BodyPublishers.ofString(body)); + var response = http.send(builder.build(), HttpResponse.BodyHandlers.ofString()); + if (response.statusCode() < 200 || response.statusCode() >= 300) + throw new IllegalArgumentException("IBM " + method + " request failed (HTTP " + response.statusCode() + "). Check automation account permissions and IBM service status."); + return response.body().isBlank() ? json.createObjectNode() : json.readTree(response.body()); + } catch (IllegalArgumentException e) { throw e; } + catch (InterruptedException e) { Thread.currentThread().interrupt(); throw new IllegalStateException("IBM request interrupted; check live configuration before retrying."); } + catch (Exception e) { throw new IllegalArgumentException("IBM API request could not be completed. Check connectivity; a submitted change may still be running."); } + } + private static String encode(String value) { return URLEncoder.encode(value, StandardCharsets.UTF_8); } + static String requireId(String value) { + if (value == null || !value.matches("[a-z0-9][a-z0-9_-]{0,127}")) throw new IllegalArgumentException("Invalid IBM resource ID."); + return value; + } +} diff --git a/src/main/java/kr/co/mcmp/softwarecatalog/kubernetes/service/IbmIngressAutomationProperties.java b/src/main/java/kr/co/mcmp/softwarecatalog/kubernetes/service/IbmIngressAutomationProperties.java new file mode 100644 index 00000000..ba2a62ec --- /dev/null +++ b/src/main/java/kr/co/mcmp/softwarecatalog/kubernetes/service/IbmIngressAutomationProperties.java @@ -0,0 +1,63 @@ +package kr.co.mcmp.softwarecatalog.kubernetes.service; + +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.ArrayList; +import java.util.List; +import lombok.Getter; +import lombok.Setter; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** Operator configuration only. Never bind these fields from a deployment request. */ +@Component +@ConfigurationProperties(prefix = "app.ibm-ingress.automation") +@Getter @Setter +public class IbmIngressAutomationProperties { + private List profiles = new ArrayList<>(); + private int readyTimeoutSeconds = 2400; + private int pollSeconds = 10; + private String certManagerVersion = "v1.20.2"; + private String helmExecutable = "helm"; + + @Getter @Setter + public static class Profile { + private String namespace; + private String connectionName; + private String region; + private String apiKeyFile; + private boolean allowSharedLbChanges; + private boolean installCertManager; + private List allowedDomains = new ArrayList<>(); + private String issuerTemplateFile; + private List dnsSecretFiles = new ArrayList<>(); + + public boolean allowsHost(String host) { + return validDomain(host) && allowedDomains.stream().anyMatch(domain -> validDomain(domain) + && (host.equals(domain) || host.endsWith("." + domain))); + } + } + + Profile profile(String namespace, String connectionName) { + var matches = profiles.stream().filter(p -> namespace.equals(p.namespace) + && connectionName != null && connectionName.equals(p.connectionName)).toList(); + if (matches.size() > 1) throw new IllegalArgumentException("Duplicate IBM automation profiles for the selected Project/connection."); + return matches.isEmpty() ? null : matches.get(0); + } + + static boolean validDomain(String value) { + return value != null && value.length() <= 253 && value.contains(".") && !value.matches("[0-9.]+") + && value.matches("[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)+"); + } + + static String readOperatorFile(String path, String description) { + try { + if (path == null || !Path.of(path).isAbsolute() || !Files.isRegularFile(Path.of(path)) + || Files.size(Path.of(path)) > 65536) throw new IllegalArgumentException(); + return Files.readString(Path.of(path)); + } catch (Exception e) { + // Do not expose paths, credentials, template content, or parser exceptions to API clients. + throw new IllegalArgumentException("Configure a readable server-side " + description + " file (maximum 64 KiB)."); + } + } +} diff --git a/src/main/java/kr/co/mcmp/softwarecatalog/kubernetes/service/IbmIngressAutomationService.java b/src/main/java/kr/co/mcmp/softwarecatalog/kubernetes/service/IbmIngressAutomationService.java new file mode 100644 index 00000000..74bc5778 --- /dev/null +++ b/src/main/java/kr/co/mcmp/softwarecatalog/kubernetes/service/IbmIngressAutomationService.java @@ -0,0 +1,206 @@ +package kr.co.mcmp.softwarecatalog.kubernetes.service; + +import io.fabric8.kubernetes.api.model.ConfigMap; +import io.fabric8.kubernetes.api.model.ConfigMapBuilder; +import io.fabric8.kubernetes.client.KubernetesClient; +import io.fabric8.kubernetes.client.KubernetesClientException; +import java.time.Instant; +import java.util.*; +import java.util.function.Consumer; +import kr.co.mcmp.ape.cbtumblebug.api.CbtumblebugRestApi; +import kr.co.mcmp.ape.cbtumblebug.dto.K8sClusterDto; +import kr.co.mcmp.softwarecatalog.application.dto.DeploymentConfigDTO; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +/** Operator-authorized, idempotent preparation; every target comes from Tumblebug, never a client CSP ID. */ +@Service @RequiredArgsConstructor +public class IbmIngressAutomationService { + static final String LOCK = "am-ingress-automation-lock"; + static final String INTENT = "am-ibm-proxy-intent"; + private final CbtumblebugRestApi tumblebug; + private final IbmIngressAutomationProperties properties; + private final IbmCloudIngressApi cloud; + private final IbmCertificateManager certificates; + private final IbmKubernetesIngressSetup kubernetesSetup; + + private record Target(K8sClusterDto cluster, IbmIngressAutomationProperties.Profile profile) { } + private Target target(String ns, String name) { + var cluster = tumblebug.getK8sClusterByName(ns, name); + if (!IbmIngressSupport.isIbm(cluster)) throw new IllegalArgumentException("Ingress automation requires an IBM cluster."); + return new Target(cluster, properties.profile(ns, cluster.getConnectionName())); + } + + /** No persistent writes: warn about preparable states, fail on invalid/unauthorized states. */ + public List check(KubernetesClient client, String ns, String name, String workload, + DeploymentConfigDTO config) { + if (!config.isIngressEnabled() || !IbmIngressSupport.managed(config.getIngressClass())) return List.of(); + Target target = target(ns, name); + if (!config.isTlsEnabled()) return kubernetesSetup.check(client, ns, target.cluster, config); + var warnings = new ArrayList(); + certificatePlan(client, target.profile, workload, config, warnings); + try { warnings.addAll(IbmIngressSupport.verify(client, https(config))); } + catch (IbmIngressSupport.MissingProxyException missing) { + requireProxyProfile(target.profile); + IngressAutomationPermissions.lock(client); + var session = cloud.login(target.profile); + var cluster = cloud.cluster(session, target.cluster.getCspResourceId()); + verifyRegion(cluster.path("region").asText(), target.profile); + if (!proxyEnabled(client, session, target.cluster.getCspResourceId())) { + cloud.trustedSubnets(session, cluster, managedHostnames(client), true); + if (client.configMaps().inNamespace("kube-system").withName(INTENT).get() != null) + throw new IllegalArgumentException("An earlier IBM PROXY update has an unresolved outcome. Ask an operator to inspect am-ibm-proxy-intent before retrying."); + warnings.add("Deploy will enable PROXY protocol on the selected cluster's shared IBM LBs. Existing applications may briefly lose connectivity while the LBs are replaced."); + } else warnings.add("IBM PROXY protocol is configured; Deploy will wait for the managed LBs and controllers to become ready."); + } + return warnings; + } + + public DeploymentConfigDTO prepare(KubernetesClient client, String ns, String name, String workload, + DeploymentConfigDTO config, Consumer progress) { + if (!config.isIngressEnabled() || !IbmIngressSupport.managed(config.getIngressClass())) return config; + Target target = target(ns, name); + if (!config.isTlsEnabled()) { + var resolved = IbmIngressTlsResolver.resolve(client, workload, config); + KubernetesIngressRouteValidator.assertAvailable(client, resolved); + var plan = kubernetesSetup.plan(client, ns, target.cluster, resolved); + if (plan.ready()) return resolved; + ConfigMap lock = acquire(client, target.cluster.getCspResourceId()); + try { + KubernetesIngressRouteValidator.assertAvailable(client, resolved); + kubernetesSetup.prepare(client, ns, target.cluster, resolved, progress); + IbmIngressSupport.verify(client, resolved); + return resolved; + } finally { release(client, lock); } + } + // Ready installations need no automation profile, writes or lock permission. + try { + var resolved = IbmIngressTlsResolver.resolve(client, workload, config); + IbmIngressSupport.verify(client, resolved); + return resolved; + } catch (IbmIngressTlsResolver.UnregisteredHostException | IbmIngressSupport.MissingProxyException ignored) { } + catch (IllegalArgumentException e) { + // A missing IBM default certificate must not block an independently authorized custom certificate. + if (target.profile == null || !target.profile.allowsHost(config.getIngressHost()) + || config.getIngressHost().endsWith(".containers.appdomain.cloud") + || IbmIngressTlsResolver.selectBinding(IbmIngressTlsResolver.bindings(client,workload),config.getIngressHost()) != null) throw e; + } + KubernetesIngressRouteValidator.assertAvailable(client, config); + check(client, ns, name, workload, config); + ConfigMap lock = acquire(client, target.cluster.getCspResourceId()); + try { + // Recheck all immutable inputs, domain/route policy and prerequisites before changing shared infrastructure. + KubernetesIngressRouteValidator.assertAvailable(client, config); + check(client, ns, name, workload, config); + var plan = certificatePlan(client, target.profile, workload, config, new ArrayList<>()); + if (plan != null) certificates.prepare(client, ns, name, workload, config.getIngressHost(), plan, progress); + var resolved = IbmIngressTlsResolver.resolve(client, workload, config); + try { IbmIngressSupport.verify(client, resolved); } + catch (IbmIngressSupport.MissingProxyException missing) { + enableProxy(client, target, resolved, progress); + } + // Fail closed: no application Ingress is deployed unless certificate and actual CIDR prerequisites are ready. + IbmIngressSupport.verify(client, resolved); + progress.accept("Ingress and HTTPS certificate are ready."); + return resolved; + } finally { + release(client, lock); + } + } + + private void release(KubernetesClient client, ConfigMap lock) { + var current = client.configMaps().inNamespace("kube-system").withName(LOCK).get(); + if (current != null && Objects.equals(current.getData().get("holder"), lock.getData().get("holder"))) + client.configMaps().inNamespace("kube-system").resource(current).lockResourceVersion(current.getMetadata().getResourceVersion()).delete(); + } + + private IbmCertificateManager.Plan certificatePlan(KubernetesClient client, IbmIngressAutomationProperties.Profile profile, + String workload, DeploymentConfigDTO config, List warnings) { + // Explicit operator bindings always win. Never replace a broken/expired manually managed certificate. + var bindings = IbmIngressTlsResolver.bindings(client, workload); + if (IbmIngressTlsResolver.selectBinding(bindings, config.getIngressHost()) == null && profile != null + && profile.allowsHost(config.getIngressHost()) && !config.getIngressHost().endsWith(".containers.appdomain.cloud")) { + var plan = certificates.plan(client, profile, config.getIngressHost()); + certificates.checkWorkloadPermissions(client, workload, plan); + warnings.add("Deploy will prepare a certificate for this authorized custom domain. DNS validation may take several minutes; the domain must also resolve to the IBM Ingress endpoint."); + if (plan.install) warnings.add("Deploy will install cert-manager once in the selected cluster."); + return plan; + } + IbmIngressTlsResolver.resolve(client, workload, config); + return null; + } + + private void enableProxy(KubernetesClient client, Target target, DeploymentConfigDTO config, Consumer progress) { + requireProxyProfile(target.profile); + var session = cloud.login(target.profile); + String id = target.cluster.getCspResourceId(); + var cluster = cloud.cluster(session, id); + verifyRegion(cluster.path("region").asText(), target.profile); + if (!proxyEnabled(client, session, id)) { + List cidrs = cloud.trustedSubnets(session, cluster, managedHostnames(client), true); + // A durable write-ahead marker prevents blind repetition after an HTTP timeout or AM restart. + var maps = client.configMaps().inNamespace("kube-system"); + if (maps.withName(INTENT).get() != null) throw new IllegalArgumentException("Previous PROXY update outcome is unresolved. Operator review is required before another LB update."); + maps.resource(new ConfigMapBuilder().withNewMetadata().withName(INTENT).withLabels(Map.of(IbmCertificateManager.OWNER,"true")).endMetadata() + .withData(Map.of("clusterId",id,"requestedAt",Instant.now().toString(),"trustedCidrs",String.join(",",cidrs),"state","SUBMITTED")).build()).create(); + progress.accept("Enabling PROXY protocol; IBM is replacing shared load balancers…"); + cloud.enableProxy(session, id, cidrs); + } else progress.accept("Waiting for IBM load balancer and controller readiness…"); + certificates.await(() -> { + try { IbmIngressSupport.verify(client, config); return true; } + catch (IllegalArgumentException e) { return false; } + }, "IBM PROXY setup is not ready yet. No application was exposed. Inspect IBM Ingress status; retry will not repeat an accepted LB update."); + // Keep the marker as an audit/replay guard. A later disable must be reviewed explicitly. + } + + private ConfigMap acquire(KubernetesClient client, String clusterId) { + IbmCloudIngressApi.requireId(clusterId); + var maps = client.configMaps().inNamespace("kube-system"); + var current = maps.withName(LOCK).get(); + String holder = UUID.randomUUID().toString(); + var desired = new ConfigMapBuilder().withNewMetadata().withName(LOCK).withLabels(Map.of(IbmCertificateManager.OWNER,"true")).endMetadata() + .withData(Map.of("holder",holder,"clusterId",clusterId,"expiresAt",Instant.now().plusSeconds(12600).toString())).build(); + try { + if (current == null) return maps.resource(desired).create(); + if (!IbmCertificateManager.owned(current) || !clusterId.equals(current.getData().get("clusterId")) + || Instant.parse(current.getData().get("expiresAt")).isAfter(Instant.now())) + throw new IllegalArgumentException("Another Ingress preparation is in progress on this cluster. Retry when it finishes."); + desired.getMetadata().setResourceVersion(current.getMetadata().getResourceVersion()); + return maps.resource(desired).lockResourceVersion(current.getMetadata().getResourceVersion()).replace(); + } catch (KubernetesClientException e) { + throw new IllegalArgumentException("Cannot acquire the cluster preparation lock. Check kube-system ConfigMap permissions or another active preparation."); + } + } + + static Set managedHostnames(KubernetesClient client) { + Set result = new HashSet<>(); + for (var prefix : List.of("public-","private-")) for (var service : IbmIngressSupport.managedServices(client, prefix)) { + if (service.getStatus() == null || service.getStatus().getLoadBalancer() == null + || service.getStatus().getLoadBalancer().getIngress() == null || service.getStatus().getLoadBalancer().getIngress().isEmpty()) + throw new IllegalArgumentException("All shared IBM LBs must have ready hostnames before automatic PROXY setup."); + for (var endpoint : service.getStatus().getLoadBalancer().getIngress()) { + String host = endpoint.getHostname(); + if (host == null || !host.endsWith(".lb.appdomain.cloud")) throw new IllegalArgumentException("Cannot identify the managed IBM VPC load balancer hostname."); + result.add(host); + } + } + return result; + } + + private boolean proxyEnabled(KubernetesClient client, IbmCloudIngressApi.Session session, String id) { + Set states = new HashSet<>(); + for (String type : List.of("public", "private")) { + if (!IbmIngressSupport.managedServices(client, type + "-").isEmpty()) + states.add(cloud.proxyConfig(session, id, type).path("proxyProtocol").path("enable").asBoolean()); + } + if (states.size() != 1) throw new IllegalArgumentException("Shared IBM LBs have mixed PROXY settings. Ask the cluster operator to align them; AM will not overwrite a partial configuration."); + return states.iterator().next(); + } + private static void requireProxyProfile(IbmIngressAutomationProperties.Profile profile) { + if (profile == null || !profile.isAllowSharedLbChanges()) throw new IllegalArgumentException("IBM PROXY protocol is not ready. An operator must authorize shared LB changes in the Project/connection automation profile."); + } + private static void verifyRegion(String actual, IbmIngressAutomationProperties.Profile profile) { + if (!Objects.equals(actual,profile.getRegion())) throw new IllegalArgumentException("The IBM automation profile region does not match the selected cluster."); + } + private static DeploymentConfigDTO https(DeploymentConfigDTO config) { return config.toBuilder().ingressTlsEnabled(true).build(); } +} diff --git a/src/main/java/kr/co/mcmp/softwarecatalog/kubernetes/service/IbmIngressSupport.java b/src/main/java/kr/co/mcmp/softwarecatalog/kubernetes/service/IbmIngressSupport.java new file mode 100644 index 00000000..1587e08a --- /dev/null +++ b/src/main/java/kr/co/mcmp/softwarecatalog/kubernetes/service/IbmIngressSupport.java @@ -0,0 +1,128 @@ +package kr.co.mcmp.softwarecatalog.kubernetes.service; + +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Set; +import io.fabric8.kubernetes.api.model.Service; + +import io.fabric8.kubernetes.client.KubernetesClient; +import kr.co.mcmp.ape.cbtumblebug.dto.K8sClusterDto; +import kr.co.mcmp.softwarecatalog.application.dto.DeploymentConfigDTO; + +/** Read-only verification. Opt-in provisioning is isolated in IbmIngressAutomationService. */ +final class IbmIngressSupport { + static final String PUBLIC_CLASS = "public-iks-k8s-nginx"; + static final String PRIVATE_CLASS = "private-iks-k8s-nginx"; + static final String PROXY_FEATURE = "service.kubernetes.io/ibm-load-balancer-cloud-provider-enable-features"; + + private IbmIngressSupport() {} + + static boolean isIbm(K8sClusterDto cluster) { + return cluster != null && cluster.getConnectionConfig() != null + && isIbm(cluster.getConnectionConfig().getProviderName()); + } + + static boolean isIbm(String provider) { + return provider != null && Set.of("ibm", "ibmcloud", "ibm-cloud", "ibm-vpc", "ibmvpc") + .contains(provider.toLowerCase(Locale.ROOT)); + } + + static boolean managed(String ingressClass) { + return PUBLIC_CLASS.equals(ingressClass) || PRIVATE_CLASS.equals(ingressClass); + } + + static DeploymentConfigDTO resolve(K8sClusterDto cluster, DeploymentConfigDTO config) { + if (!config.isIngressEnabled()) return config; + String clazz = config.getIngressClass(); + if (isIbm(cluster)) { + // Existing catalogs and API clients use nginx; select IBM's public managed entry by default. + if (clazz == null || "nginx".equals(clazz)) clazz = PUBLIC_CLASS; + if (!managed(clazz)) throw new IllegalArgumentException("IBM requires a managed NGINX Ingress class: " + PUBLIC_CLASS + " or " + PRIVATE_CLASS); + } else if (managed(clazz)) { + throw new IllegalArgumentException("IBM managed Ingress classes require an IBM cluster."); + } + return config.toBuilder().ingressClass(clazz).build(); + } + + /** Read-only, fail closed before deploying a CIDR-restricted route. */ + static List verify(KubernetesClient client, DeploymentConfigDTO config) { + var warnings = verify(client, config.getIngressClass()); + String prefix = PUBLIC_CLASS.equals(config.getIngressClass()) ? "public-" : "private-"; + int port = config.isTlsEnabled() ? 443 : 80; + boolean available = managedServices(client, prefix).stream() + .allMatch(s -> s.getSpec().getPorts() != null && s.getSpec().getPorts().stream().anyMatch(p -> Integer.valueOf(port).equals(p.getPort()))); + if (!available) throw new MissingPortException("IBM managed ALB does not expose port " + port + + ". Ask the cluster administrator to check the managed ALB listener configuration."); + return warnings; + } + + static List verify(KubernetesClient client, String clazz) { + verifyBase(client, clazz); + String prefix = PUBLIC_CLASS.equals(clazz) ? "public-" : "private-"; + var services = managedServices(client, prefix); + var cm = client.configMaps().inNamespace("kube-system").withName("ibm-k8s-controller-config").get(); + Map data = cm == null || cm.getData() == null ? Map.of() : cm.getData(); + if (!"true".equalsIgnoreCase(data.get("use-proxy-protocol"))) { + throw new MissingProxyException("IBM ALB source IP preservation is disabled. Configure an authorized AM automation profile or ask the cluster operator to enable PROXY protocol."); + } + String trusted = data.getOrDefault("proxy-real-ip-cidr", ""); + try { + for (String cidr : trusted.split(",", -1)) K8sIngressAccessService.validateCidr(cidr); + } catch (RuntimeException e) { + throw new IllegalArgumentException("IBM ALB proxy-real-ip-cidr must contain valid restricted IPv4 LB/VPC subnet CIDRs, not all sources."); + } + var endpoints = new java.util.ArrayList(); + for (var service : services) { + var annotations = service.getMetadata().getAnnotations(); + String features = annotations == null ? "" : annotations.getOrDefault(PROXY_FEATURE, ""); + if (!List.of(features.split(",")).stream().map(String::trim).anyMatch("proxy-protocol"::equals)) { + throw new MissingProxyException("IBM ALB Service " + service.getMetadata().getName() + " does not enable PROXY protocol; CIDR enforcement cannot be guaranteed."); + } + int previousSize = endpoints.size(); + if (service.getStatus() != null && service.getStatus().getLoadBalancer() != null + && service.getStatus().getLoadBalancer().getIngress() != null) { + for (var address : service.getStatus().getLoadBalancer().getIngress()) { + String endpoint = address.getHostname() != null ? address.getHostname() : address.getIp(); + if (endpoint != null && !endpoint.isBlank()) endpoints.add(endpoint); + } + } + if (endpoints.size() == previousSize) throw new IllegalArgumentException("IBM ALB Service " + + service.getMetadata().getName() + " has no ready external endpoint yet."); + } + return List.of("IBM managed ALB endpoint: " + String.join(", ", endpoints)); + } + + static void verifyBase(KubernetesClient client, String clazz) { + var ingressClass = client.network().v1().ingressClasses().withName(clazz).get(); + if (ingressClass == null || ingressClass.getSpec() == null + || !("cloud.ibm.com/" + clazz).equals(ingressClass.getSpec().getController())) { + throw new IllegalArgumentException("IBM managed NGINX IngressClass " + clazz + " is unavailable. Enable the IBM NGINX ALB first."); + } + String prefix = PUBLIC_CLASS.equals(clazz) ? "public-" : "private-"; + var services = managedServices(client, prefix); + if (services.isEmpty()) throw new IllegalArgumentException("No active IBM " + prefix + "ALB LoadBalancer Service was found."); + var deployments = client.apps().deployments().inNamespace("kube-system") + .withLabel("ingress-class", clazz).list().getItems(); + if (deployments.isEmpty() || deployments.stream().anyMatch(d -> d.getStatus() == null + || d.getStatus().getAvailableReplicas() == null || d.getStatus().getAvailableReplicas() < 1)) { + throw new IllegalArgumentException("IBM managed Ingress Controller is not ready for " + clazz + "."); + } + } + + static List managedServices(KubernetesClient client, String prefix) { + return client.services().inNamespace("kube-system").list().getItems().stream() + .filter(s -> s.getMetadata() != null && s.getMetadata().getName() != null + && s.getMetadata().getName().startsWith(prefix) + && "managed-ingress".equals(s.getMetadata().getLabels() == null ? null + : s.getMetadata().getLabels().get("app.kubernetes.io/part-of")) + && s.getSpec() != null && "LoadBalancer".equals(s.getSpec().getType())).toList(); + } + + static final class MissingProxyException extends IllegalArgumentException { + MissingProxyException(String message) { super(message); } + } + static final class MissingPortException extends IllegalArgumentException { + MissingPortException(String message) { super(message); } + } +} diff --git a/src/main/java/kr/co/mcmp/softwarecatalog/kubernetes/service/IbmIngressTlsResolver.java b/src/main/java/kr/co/mcmp/softwarecatalog/kubernetes/service/IbmIngressTlsResolver.java new file mode 100644 index 00000000..e76f632a --- /dev/null +++ b/src/main/java/kr/co/mcmp/softwarecatalog/kubernetes/service/IbmIngressTlsResolver.java @@ -0,0 +1,228 @@ +package kr.co.mcmp.softwarecatalog.kubernetes.service; + +import java.io.ByteArrayInputStream; +import java.io.StringReader; +import java.nio.charset.StandardCharsets; +import java.security.Signature; +import java.security.cert.CertificateFactory; +import java.security.cert.X509Certificate; +import java.util.*; + +import com.fasterxml.jackson.databind.ObjectMapper; +import io.fabric8.kubernetes.api.model.Secret; +import io.fabric8.kubernetes.client.KubernetesClient; +import org.bouncycastle.asn1.pkcs.PrivateKeyInfo; +import org.bouncycastle.openssl.PEMKeyPair; +import org.bouncycastle.openssl.PEMParser; +import org.bouncycastle.openssl.jcajce.JcaPEMKeyConverter; +import org.bouncycastle.jce.provider.BouncyCastleProvider; +import kr.co.mcmp.softwarecatalog.application.dto.DeploymentConfigDTO; +import kr.co.mcmp.softwarecatalog.application.dto.DeploymentRequest; +import kr.co.mcmp.softwarecatalog.application.dto.K8sIngressTlsSettings; + +/** Read-only certificate selection. IBM, cert-manager or operators own issuance and renewal. */ +final class IbmIngressTlsResolver { + static final String BINDINGS_CONFIG_MAP = "am-ingress-tls-bindings"; + private static final ObjectMapper JSON = new ObjectMapper(); + private static final java.security.Provider PEM_PROVIDER = new BouncyCastleProvider(); + private static final String DNS = "[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)+"; + + private IbmIngressTlsResolver() {} + + static DeploymentConfigDTO resolve(KubernetesClient client, String namespace, DeploymentConfigDTO config) { + if (!config.isIngressEnabled() || !IbmIngressSupport.managed(config.getIngressClass())) return config; + // HTTP deliberately needs no certificate or DNS ownership. Do not inspect TLS resources. + if (!config.isTlsEnabled()) return config.toBuilder().ingressTlsSecret(null).build(); + String host = config.getIngressHost(); + if (!validPattern(host) || host.startsWith("*.")) { + throw new IllegalArgumentException("IBM managed HTTPS requires a specific DNS hostname, not a wildcard."); + } + String name = selectBinding(bindings(client, namespace), host); + if (name == null) { + String reference = defaultSecretReference(client, config.getIngressClass()); + String[] parts = reference.split("/", -1); + if (!namespace.equals(parts[0])) { + throw new IllegalArgumentException("IBM's default certificate is in another namespace. Register a managed TLS Secret in the application namespace using " + BINDINGS_CONFIG_MAP + "."); + } + name = parts[1]; + X509Certificate certificate = certificate(client, namespace, name); + String domain = ibmDomain(certificate); + if (!(host.equals(domain) || matches("*." + domain, host))) { + throw new UnregisteredHostException("Use a hostname under " + domain + + ", or ask an administrator to register this custom domain in " + BINDINGS_CONFIG_MAP + "."); + } + verifyHost(certificate, host); + } else { + verifyHost(certificate(client, namespace, name), host); + } + // Ignore hidden/stale catalog or client TLS overrides: the administrator controls IBM bindings. + return config.toBuilder().ingressTlsEnabled(true).ingressTlsSecret(name).build(); + } + + static void apply(DeploymentRequest request, DeploymentConfigDTO resolved) { + if (!resolved.isIngressEnabled() || !IbmIngressSupport.managed(resolved.getIngressClass())) return; + request.setIngressClass(resolved.getIngressClass()); + request.setIngressTlsEnabled(resolved.isTlsEnabled()); + request.setIngressTlsSecret(resolved.getIngressTlsSecret()); + } + + static K8sIngressTlsSettings describe(KubernetesClient client, String namespace, String clazz) { + if (!IbmIngressSupport.managed(clazz)) return new K8sIngressTlsSettings(false, null, List.of(), List.of()); + var registered = bindings(client, namespace); + try { + String[] reference = defaultSecretReference(client, clazz).split("/", -1); + if (!namespace.equals(reference[0])) throw new IllegalArgumentException("The IBM default TLS Secret must be available in the application's Kubernetes namespace."); + String domain = ibmDomain(certificate(client, namespace, reference[1])); + return new K8sIngressTlsSettings(true, domain, List.copyOf(registered.keySet()), List.of()); + } catch (IllegalArgumentException e) { + // Custom bindings can still be used when the default certificate is unavailable. + return new K8sIngressTlsSettings(true, null, List.copyOf(registered.keySet()), List.of(e.getMessage())); + } + } + + static Map bindings(KubernetesClient client, String namespace) { + io.fabric8.kubernetes.api.model.ConfigMap cm; + try { cm = client.configMaps().inNamespace(namespace).withName(BINDINGS_CONFIG_MAP).get(); } + catch (RuntimeException e) { throw new IllegalArgumentException("Cannot read IBM TLS domain bindings. Check ConfigMap read permission and connectivity."); } + if (cm == null) return Map.of(); + try { + String content = cm.getData() == null ? null : cm.getData().get("bindings.json"); + if (content == null || content.isBlank() || content.length() > 65536) throw new IllegalArgumentException(); + var entries = JSON.readTree(content); + if (!entries.isArray()) throw new IllegalArgumentException(); + Map result = new LinkedHashMap<>(); + for (var entry : entries) { + if (!entry.isObject() || entry.size() != 2 || !entry.path("host").isTextual() || !entry.path("secretName").isTextual()) throw new IllegalArgumentException(); + String host = entry.get("host").asText(); + String secret = entry.get("secretName").asText(); + if (!validPattern(host) || !validSecretName(secret) || result.putIfAbsent(host, secret) != null) throw new IllegalArgumentException(); + } + return result; + } catch (Exception e) { + throw new IllegalArgumentException("Invalid " + BINDINGS_CONFIG_MAP + ": bindings.json must contain unique {host, secretName} entries with valid DNS names."); + } + } + + static String selectBinding(Map entries, String host) { + if (entries.containsKey(host)) return entries.get(host); + var candidates = entries.entrySet().stream().filter(e -> matches(e.getKey(), host)).toList(); + if (candidates.size() > 1) throw new IllegalArgumentException("Ambiguous IBM TLS domain bindings."); + return candidates.isEmpty() ? null : candidates.get(0).getValue(); + } + + private static String defaultSecretReference(KubernetesClient client, String clazz) { + try { + var ingressClass = client.network().v1().ingressClasses().withName(clazz).get(); + if (ingressClass == null || ingressClass.getSpec() == null || !("cloud.ibm.com/" + clazz).equals(ingressClass.getSpec().getController())) { + throw new IllegalArgumentException("IBM managed Ingress class is unavailable."); + } + var deployments = client.apps().deployments().inNamespace("kube-system").withLabel("ingress-class", clazz).list().getItems(); + Set references = new HashSet<>(); + for (var deployment : deployments) { + Set local = new HashSet<>(); + if (deployment.getSpec() != null && deployment.getSpec().getTemplate() != null && deployment.getSpec().getTemplate().getSpec() != null) { + for (var container : deployment.getSpec().getTemplate().getSpec().getContainers()) { + var args = container.getArgs() == null ? List.of() : container.getArgs(); + for (int i = 0; i < args.size(); i++) { + String arg = args.get(i); + if (arg.startsWith("--default-ssl-certificate=")) local.add(arg.substring("--default-ssl-certificate=".length())); + else if (arg.equals("--default-ssl-certificate") && i + 1 < args.size()) local.add(args.get(++i)); + } + } + } + if (local.size() != 1) throw new IllegalArgumentException("Cannot identify the IBM default TLS Secret. Ask an administrator to check the managed Controller certificate configuration."); + references.addAll(local); + } + if (references.size() != 1) throw new IllegalArgumentException("IBM managed Controllers must reference one unambiguous default TLS Secret."); + String reference = references.iterator().next(); + String[] parts = reference.split("/", -1); + if (parts.length != 2 || !validSecretName(parts[0]) || !validSecretName(parts[1])) throw new IllegalArgumentException("Invalid IBM default TLS Secret reference."); + return reference; + } catch (IllegalArgumentException e) { throw e; } + catch (RuntimeException e) { throw new IllegalArgumentException("Cannot discover IBM's default certificate. Check IngressClass and Controller read permissions and connectivity."); } + } + + static X509Certificate certificate(KubernetesClient client, String namespace, String name) { + Secret secret; + try { secret = client.secrets().inNamespace(namespace).withName(name).get(); } + catch (RuntimeException e) { throw new IllegalArgumentException("Cannot read the selected IBM TLS Secret. Check Secret read permission and connectivity."); } + if (secret == null) throw new IllegalArgumentException("Selected IBM TLS Secret '" + name + "' does not exist in namespace " + namespace + "."); + try { + var data = secret.getData(); + if (!"kubernetes.io/tls".equals(secret.getType()) || data == null || data.get("tls.crt") == null || data.get("tls.key") == null) throw new IllegalArgumentException(); + var cert = (X509Certificate) CertificateFactory.getInstance("X.509").generateCertificate(new ByteArrayInputStream(Base64.getDecoder().decode(data.get("tls.crt")))); + cert.checkValidity(); + // Validate the key pair in memory, without logging or persisting secret contents. + verifyKeyPair(cert, new String(Base64.getDecoder().decode(data.get("tls.key")), StandardCharsets.US_ASCII)); + return cert; + } catch (Exception e) { + throw new IllegalArgumentException("IBM TLS Secret '" + name + "' must contain a currently valid certificate and matching unencrypted private key. Ask the cluster administrator to repair it."); + } + } + + static void verifyKeyPair(X509Certificate cert, String pemKey) throws Exception { + try (var pem = new PEMParser(new StringReader(pemKey))) { + Object key = pem.readObject(); + var converter = new JcaPEMKeyConverter().setProvider(PEM_PROVIDER); + // SEC1 EC private keys need not contain a public-key field. Use the certificate's public key. + var privateKey = key instanceof PEMKeyPair pair ? converter.getPrivateKey(pair.getPrivateKeyInfo()) + : key instanceof PrivateKeyInfo info ? converter.getPrivateKey(info) : null; + if (privateKey == null) throw new IllegalArgumentException(); + String algorithm = switch (cert.getPublicKey().getAlgorithm()) { + case "RSA" -> "SHA256withRSA"; + case "EC" -> "SHA256withECDSA"; + case "Ed25519", "EdDSA" -> "Ed25519"; + default -> throw new IllegalArgumentException(); + }; + var signature = Signature.getInstance(algorithm, PEM_PROVIDER); + byte[] probe = "AM certificate key-pair check".getBytes(StandardCharsets.US_ASCII); + signature.initSign(privateKey); signature.update(probe); + byte[] signed = signature.sign(); + signature.initVerify(cert.getPublicKey()); signature.update(probe); + if (!signature.verify(signed)) throw new IllegalArgumentException(); + } + } + + private static String ibmDomain(X509Certificate certificate) { + var domains = dnsNames(certificate).stream().filter(s -> s.startsWith("*.") && s.endsWith(".containers.appdomain.cloud")) + .map(s -> s.substring(2)).distinct().toList(); + if (domains.size() != 1) throw new IllegalArgumentException("The Controller's default certificate does not identify one IBM Ingress domain. Register a custom domain binding instead."); + return domains.get(0); + } + + static void verifyHost(X509Certificate certificate, String host) { + if (dnsNames(certificate).stream().noneMatch(pattern -> matches(pattern, host))) { + throw new IllegalArgumentException("Selected IBM TLS certificate does not cover the Ingress Host. Use a covered hostname or ask an administrator to update the domain binding."); + } + } + + private static List dnsNames(X509Certificate certificate) { + try { + var names = certificate.getSubjectAlternativeNames(); + if (names == null) return List.of(); + return names.stream().filter(n -> n.size() >= 2 && Integer.valueOf(2).equals(n.get(0)) && n.get(1) instanceof String) + .map(n -> ((String) n.get(1)).toLowerCase(Locale.ROOT)).toList(); + } catch (Exception e) { throw new IllegalArgumentException("Cannot read TLS certificate DNS names."); } + } + + static boolean matches(String pattern, String host) { + if (!validPattern(pattern) || !validPattern(host) || host.startsWith("*.")) return false; + if (!pattern.startsWith("*.")) return pattern.equals(host); + int dot = host.indexOf('.'); + return dot > 0 && host.substring(dot + 1).equals(pattern.substring(2)); + } + + private static boolean validPattern(String host) { + if (host == null || host.length() > 253) return false; + String dns = host.startsWith("*.") ? host.substring(2) : host; + return dns.matches(DNS) && !dns.matches("[0-9.]+"); + } + + private static boolean validSecretName(String name) { + return name != null && name.length() <= 253 && name.matches("[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*"); + } + + static final class UnregisteredHostException extends IllegalArgumentException { + UnregisteredHostException(String message) { super(message); } + } +} diff --git a/src/main/java/kr/co/mcmp/softwarecatalog/kubernetes/service/IbmKubernetesIngressSetup.java b/src/main/java/kr/co/mcmp/softwarecatalog/kubernetes/service/IbmKubernetesIngressSetup.java new file mode 100644 index 00000000..d93dfd1f --- /dev/null +++ b/src/main/java/kr/co/mcmp/softwarecatalog/kubernetes/service/IbmKubernetesIngressSetup.java @@ -0,0 +1,302 @@ +package kr.co.mcmp.softwarecatalog.kubernetes.service; + +import com.fasterxml.jackson.databind.JsonNode; +import io.fabric8.kubernetes.api.model.*; +import io.fabric8.kubernetes.client.KubernetesClient; +import java.io.*; +import java.net.*; +import java.nio.charset.StandardCharsets; +import java.time.Instant; +import java.util.*; +import java.util.function.Consumer; +import kr.co.mcmp.ape.cbtumblebug.api.CbtumblebugRestApi; +import kr.co.mcmp.ape.cbtumblebug.dto.K8sClusterDto; +import kr.co.mcmp.softwarecatalog.application.dto.DeploymentConfigDTO; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +/** Uses the selected cluster's existing Kubernetes credentials, never raw IBM account keys. */ +@Component @RequiredArgsConstructor +class IbmKubernetesIngressSetup { + static final String CONFIG = "ibm-k8s-controller-config"; + static final String JOURNAL = "am-ibm-kubernetes-ingress-setup"; + static final String OUTBOUND = "service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-allow-outbound-traffic"; + static final String SUBNETS = "service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-subnets"; + static final String RECONCILE = "am.mcmp.io/ibm-proxy-reconcile"; + private final CbtumblebugRestApi tumblebug; + private final IbmIngressAutomationProperties properties; + + record Plan(List services, ConfigMap controller, List cidrs, boolean ready) { } + + Plan plan(KubernetesClient client, String ns, K8sClusterDto cluster, DeploymentConfigDTO config) { + if (!IbmIngressSupport.isIbm(cluster) || !IbmIngressSupport.managed(config.getIngressClass())) + throw new IllegalArgumentException("Kubernetes Ingress preparation requires the selected IBM cluster."); + IbmIngressSupport.verifyBase(client, config.getIngressClass()); + var services = new ArrayList(); + services.addAll(IbmIngressSupport.managedServices(client, "public-")); + services.addAll(IbmIngressSupport.managedServices(client, "private-")); + var cm = client.configMaps().inNamespace("kube-system").withName(CONFIG).get(); + try { + IbmIngressSupport.verify(client, config); + var marker = client.configMaps().inNamespace("kube-system").withName(JOURNAL).get(); + rejectUnresolved(marker); + return new Plan(services, cm, List.of(), true); + } catch (IbmIngressSupport.MissingProxyException | IbmIngressSupport.MissingPortException ignored) { } + + rejectUnresolved(client.configMaps().inNamespace("kube-system").withName(JOURNAL).get()); + // One controller ConfigMap affects every ALB. Never silently repair an operator's mixed configuration. + boolean proxy = "true".equalsIgnoreCase(data(cm).get("use-proxy-protocol")); + if (services.stream().anyMatch(s -> hasProxy(s) != proxy)) + throw new IllegalArgumentException("IBM ALBs and controller have mixed PROXY settings. Operator review is required before shared configuration changes."); + for (Service s : services) { + String lbName = annotations(s).get("service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-lb-name"); + if (cluster.getCspResourceId() == null || lbName == null || !lbName.startsWith("kube-" + cluster.getCspResourceId() + "-ingress-")) + throw new IllegalArgumentException("Cannot establish that every managed IBM LB belongs to the selected cluster."); + if (s.getSpec().getPorts() == null || s.getSpec().getPorts().stream().anyMatch(p -> !Set.of(80,443).contains(p.getPort()))) + throw new IllegalArgumentException("Automatic IBM preparation supports existing HTTP/HTTPS listeners only; custom listeners require operator review."); + String prefix = s.getMetadata().getName().startsWith("public-") ? "public-" : "private-"; + String clazz = prefix.equals("public-") ? IbmIngressSupport.PUBLIC_CLASS : IbmIngressSupport.PRIVATE_CLASS; + IbmIngressSupport.verifyBase(client, clazz); + var controllers = client.apps().deployments().inNamespace("kube-system").withLabel("ingress-class", clazz).list().getItems(); + if (controllers.stream().anyMatch(d -> d.getSpec() == null || d.getSpec().getTemplate().getSpec().getContainers().stream() + .noneMatch(c -> c.getArgs() != null && c.getArgs().contains("--configmap=kube-system/" + CONFIG) + && c.getArgs().contains("--http-port=80") && c.getArgs().contains("--https-port=443")))) + throw new IllegalArgumentException("IBM controllers must already listen on ports 80/443 and use the managed ConfigMap. AM will not replace controllers."); + } + var cidrs = trustedCidrs(client, ns, cluster, services); + IngressAutomationPermissions.lock(client); + for (String verb : List.of("get", "update")) IngressAutomationPermissions.require(client, "", "services", "kube-system", verb); + IngressAutomationPermissions.require(client, "", "events", "kube-system", "list"); + return new Plan(services, cm, cidrs, false); + } + + List check(KubernetesClient client, String ns, K8sClusterDto cluster, DeploymentConfigDTO config) { + Plan plan = plan(client, ns, cluster, config); + return plan.ready ? IbmIngressSupport.verify(client, config) : List.of( + "Deploy will prepare HTTP and source-IP preservation on this cluster's existing shared IBM load balancers. Existing connections may be interrupted during reconciliation; no new load balancer or controller is created."); + } + + /** Caller holds the cluster lock. Backup is durable, including if AM stops during reconciliation. */ + void prepare(KubernetesClient client, String ns, K8sClusterDto cluster, DeploymentConfigDTO config, Consumer progress) { + Plan plan = plan(client, ns, cluster, config); + if (plan.ready) return; + var maps = client.configMaps().inNamespace("kube-system"); + var previous = maps.withName(JOURNAL).get(); + var backup = new LinkedHashMap(); + backup.put("clusterId", cluster.getCspResourceId()); backup.put("state", "PREPARING"); + backup.put("startedAt", Instant.now().toString()); + backup.put("controller.json", client.getKubernetesSerialization().asJson(plan.controller)); + for (Service s : plan.services) backup.put(s.getMetadata().getName() + ".json", client.getKubernetesSerialization().asJson(s)); + var journal = new ConfigMapBuilder().withNewMetadata().withName(JOURNAL) + .withLabels(Map.of(IbmCertificateManager.OWNER,"true")).endMetadata().withData(backup).build(); + if (previous == null) maps.resource(journal).create(); + else { + journal.getMetadata().setResourceVersion(previous.getMetadata().getResourceVersion()); + maps.resource(journal).lockResourceVersion(previous.getMetadata().getResourceVersion()).replace(); + } + Map submitted = new LinkedHashMap<>(); + ConfigMap updated = null; + try { + progress.accept("Preparing existing IBM LB listeners and PROXY protocol using Kubernetes credentials…"); + // Record intended objects before each call: a request timeout can still mean the server accepted it. + for (Service s : plan.services) { + Service desired = desired(s, config); + submitted.put(s.getMetadata().getName(), desired); + client.services().inNamespace("kube-system").resource(desired) + .lockResourceVersion(s.getMetadata().getResourceVersion()).replace(); + } + updated = desiredController(plan.controller, plan.cidrs); + if (plan.controller == null) maps.resource(updated).create(); + else maps.resource(updated).lockResourceVersion(plan.controller.getMetadata().getResourceVersion()).replace(); + awaitReady(client, config, plan.services, Instant.parse(backup.get("startedAt"))); + state(client, "READY"); + progress.accept("IBM HTTP entry and source-IP preservation are ready."); + } catch (RuntimeException error) { + progress.accept("IBM preparation failed; restoring AM's changes while preserving unrelated settings…"); + boolean restored = rollback(client, plan, submitted, updated); + state(client, restored ? "ROLLED_BACK" : "REVIEW_REQUIRED"); + throw new IllegalArgumentException(restored + ? "IBM Ingress preparation did not become ready. AM restored its Kubernetes settings; the IBM LB may take time to reconcile. No application was deployed." + : "IBM Ingress preparation failed and shared settings changed concurrently. No application was deployed. Operator review of " + JOURNAL + " is required.", error); + } + } + + static Service desired(Service original, DeploymentConfigDTO config) { + var s = new ServiceBuilder(original).build(); + var annotations = new LinkedHashMap<>(annotations(s)); + annotations.put(IbmIngressSupport.PROXY_FEATURE, append(annotations.get(IbmIngressSupport.PROXY_FEATURE), "proxy-protocol")); + boolean selected = s.getMetadata().getName().startsWith(IbmIngressSupport.PUBLIC_CLASS.equals(config.getIngressClass()) ? "public-" : "private-"); + if (selected && !config.isTlsEnabled() && s.getSpec().getPorts().stream().noneMatch(p -> Integer.valueOf(80).equals(p.getPort()))) { + if (s.getSpec().getPorts().stream().anyMatch(p -> "http".equals(p.getName()))) + throw new IllegalArgumentException("The existing http Service port has a nonstandard number."); + s.getSpec().getPorts().add(new ServicePortBuilder().withName("http").withPort(80).withTargetPort(new IntOrString(80)).withProtocol("TCP").build()); + if (annotations.containsKey(OUTBOUND)) annotations.put(OUTBOUND, append(annotations.get(OUTBOUND), "80")); + } + s.getMetadata().setAnnotations(annotations); + return s; + } + + static ConfigMap desiredController(ConfigMap original, List cidrs) { + var cm = original == null ? new ConfigMapBuilder().withNewMetadata().withName(CONFIG).endMetadata().build() : new ConfigMapBuilder(original).build(); + var data = new LinkedHashMap<>(data(cm)); + data.put("use-proxy-protocol", "true"); data.put("enable-real-ip", "true"); + data.put("use-forwarded-headers", "false"); data.put("proxy-real-ip-cidr", String.join(",", cidrs)); + cm.setData(data); return cm; + } + + List trustedCidrs(KubernetesClient client, String ns, K8sClusterDto cluster, List services) { + if (cluster.getNetwork() == null || cluster.getNetwork().getVNetId() == null) + throw new IllegalArgumentException("Selected IBM cluster has no registered VPC metadata."); + JsonNode vnet = tumblebug.getVNetSecurityMetadata(ns, cluster.getNetwork().getVNetId()); + if (vnet == null || !Objects.equals(cluster.getConnectionName(), vnet.path("connectionName").asText()) || vnet.path("cspResourceId").asText().isBlank()) + throw new IllegalArgumentException("IBM VPC metadata does not match the selected connection."); + Map registered = new HashMap<>(); + for (JsonNode subnet : vnet.path("subnetInfoList")) { + if (!Objects.equals(vnet.path("cspResourceId").asText(), subnet.path("cspVNetId").asText()) + || !Objects.equals(cluster.getConnectionName(), subnet.path("connectionName").asText())) continue; + String id = subnet.path("cspResourceId").asText(), cidr = subnet.path("ipv4_CIDR").asText(); + if (!id.isBlank()) registered.put(id, K8sIngressAccessService.validateCidr(cidr)); + } + Set subnets = new TreeSet<>(); + var nodes = client.nodes().list().getItems(); + if (nodes.isEmpty()) throw new IllegalArgumentException("No IBM worker nodes available for subnet verification."); + for (Node node : nodes) { + String id = node.getMetadata().getLabels() == null ? null : node.getMetadata().getLabels().get("ibm-cloud.kubernetes.io/subnet-id"); + if (!registered.containsKey(id) || node.getStatus() == null || node.getStatus().getAddresses() == null + || node.getStatus().getAddresses().stream().filter(a -> "InternalIP".equals(a.getType())).noneMatch(a -> contains(registered.get(id), a.getAddress()))) + throw new IllegalArgumentException("Cannot match every IBM worker subnet and InternalIP to MCMP's registered VPC. Refresh network metadata before preparing Ingress."); + subnets.add(id); + } + for (Service s : services) { + String explicit = annotations(s).get(SUBNETS); + if (explicit != null) for (String id : explicit.split(",", -1)) { + if (!registered.containsKey(id.trim())) throw new IllegalArgumentException("An explicit IBM LB subnet is not registered in the selected VPC."); + subnets.add(id.trim()); + } + } + return subnets.stream().map(registered::get).distinct().sorted().toList(); + } + + /** Service status alone can predate a change: require a fresh provider completion event and stable HTTP responses. */ + void awaitReady(KubernetesClient client, DeploymentConfigDTO config, List before, Instant started) { + long deadline = System.nanoTime() + Math.min(1200, Math.max(1, properties.getReadyTimeoutSeconds())) * 1_000_000_000L; + int stable = 0; + boolean synchronizedAddedListeners = false; + Map requiredEvents = new HashMap<>(); + before.forEach(s -> requiredEvents.put(s.getMetadata().getName(), started)); + while (System.nanoTime() < deadline) { + try { + IbmIngressSupport.verify(client, config); + var events = client.v1().events().inNamespace("kube-system").list().getItems(); + boolean reconciled = before.stream().allMatch(s -> events.stream().anyMatch(e -> + "EnsuredLoadBalancer".equals(e.getReason()) && e.getInvolvedObject() != null + && Objects.equals(s.getMetadata().getUid(), e.getInvolvedObject().getUid()) && after(e, requiredEvents.get(s.getMetadata().getName())))); + if (reconciled && !synchronizedAddedListeners) { + // IBM Provider 1.35 CreateLoadBalancerPool omits ProxyProtocol on added ports. + // A second reconciliation runs UpdateLoadBalancerPool, which applies it. + // Change only an AM-owned annotation, never toggle PROXY off or recreate the LB. + var requested = reconcileAddedListeners(client, before); + requiredEvents.putAll(requested); + synchronizedAddedListeners = true; + if (!requested.isEmpty()) { stable = 0; continue; } + } + boolean responding = IbmIngressSupport.managedServices(client, IbmIngressSupport.PUBLIC_CLASS.equals(config.getIngressClass()) ? "public-" : "private-") + .stream().allMatch(IbmKubernetesIngressSetup::httpResponding); + if (reconciled && responding) { if (++stable >= 3) return; } else stable = 0; + } catch (RuntimeException ignored) { stable = 0; } + try { Thread.sleep(Math.max(1, properties.getPollSeconds()) * 1000L); } + catch (InterruptedException e) { Thread.currentThread().interrupt(); throw new IllegalArgumentException("IBM preparation interrupted."); } + } + throw new IllegalArgumentException("Timed out waiting for IBM provider reconciliation and HTTP readiness."); + } + + static Map reconcileAddedListeners(KubernetesClient client, List before) { + Map requested = new HashMap<>(); + for (Service original : before) { + if (original.getSpec().getPorts().stream().anyMatch(p -> Integer.valueOf(80).equals(p.getPort()))) continue; + var ops = client.services().inNamespace("kube-system"); + Service current = ops.withName(original.getMetadata().getName()).get(); + if (current == null || !Objects.equals(original.getMetadata().getUid(), current.getMetadata().getUid()) || !hasProxy(current)) + throw new IllegalArgumentException("IBM LB changed during listener reconciliation."); + if (current.getSpec().getPorts().stream().noneMatch(p -> Integer.valueOf(80).equals(p.getPort()))) continue; + Instant now = Instant.now(); + var annotations = new LinkedHashMap<>(annotations(current)); + annotations.put(RECONCILE, now + "/" + UUID.randomUUID()); + current.getMetadata().setAnnotations(annotations); + ops.resource(current).lockResourceVersion(current.getMetadata().getResourceVersion()).replace(); + requested.put(current.getMetadata().getName(), now); + } + return requested; + } + + static boolean httpResponding(Service service) { + if (service.getStatus() == null || service.getStatus().getLoadBalancer() == null || service.getStatus().getLoadBalancer().getIngress() == null) return false; + for (var endpoint : service.getStatus().getLoadBalancer().getIngress()) { + String host = endpoint.getHostname(); + if (host == null || !host.endsWith(".lb.appdomain.cloud")) return false; + try (Socket socket = new Socket()) { + socket.connect(new InetSocketAddress(host,80), 4000); socket.setSoTimeout(4000); + String probeHost = "am-readiness-" + UUID.randomUUID() + ".invalid"; + socket.getOutputStream().write(("GET / HTTP/1.1\r\nHost: " + probeHost + "\r\nConnection: close\r\n\r\n").getBytes(StandardCharsets.US_ASCII)); + String first = new BufferedReader(new InputStreamReader(socket.getInputStream(),StandardCharsets.US_ASCII)).readLine(); + if (first == null || !first.startsWith("HTTP/1.1 404")) return false; + } catch (IOException e) { return false; } + } + return !service.getStatus().getLoadBalancer().getIngress().isEmpty(); + } + + private boolean rollback(KubernetesClient client, Plan plan, Map submitted, ConfigMap updated) { + boolean ok = true; + for (Service original : plan.services) { + Service desired = submitted.get(original.getMetadata().getName()); + if (desired == null) continue; + try { + var ops = client.services().inNamespace("kube-system"); + Service current = ops.withName(original.getMetadata().getName()).get(); + if (current == null || !Objects.equals(original.getMetadata().getUid(), current.getMetadata().getUid())) { ok = false; continue; } + var annotations = new LinkedHashMap<>(annotations(current)); + for (String key : List.of(IbmIngressSupport.PROXY_FEATURE, OUTBOUND)) { + if (!Objects.equals(annotations.get(key), annotations(desired).get(key)) && !Objects.equals(annotations.get(key), annotations(original).get(key))) throw new IllegalArgumentException(); + if (annotations(original).containsKey(key)) annotations.put(key, annotations(original).get(key)); else annotations.remove(key); + } + current.getMetadata().setAnnotations(annotations); + if (original.getSpec().getPorts().stream().noneMatch(p -> Integer.valueOf(80).equals(p.getPort()))) + current.getSpec().getPorts().removeIf(p -> Integer.valueOf(80).equals(p.getPort()) && "http".equals(p.getName()) && new IntOrString(80).equals(p.getTargetPort())); + ops.resource(current).lockResourceVersion(current.getMetadata().getResourceVersion()).replace(); + } catch (RuntimeException e) { ok = false; } + } + if (updated != null) try { + var ops = client.configMaps().inNamespace("kube-system"); var current = ops.withName(CONFIG).get(); + var restored = new LinkedHashMap<>(data(current)); + for (String key : List.of("use-proxy-protocol","proxy-real-ip-cidr","enable-real-ip","use-forwarded-headers")) { + if (!Objects.equals(restored.get(key), data(updated).get(key)) && !Objects.equals(restored.get(key), data(plan.controller).get(key))) throw new IllegalArgumentException(); + if (data(plan.controller).containsKey(key)) restored.put(key,data(plan.controller).get(key)); else restored.remove(key); + } + current.setData(restored); ops.resource(current).lockResourceVersion(current.getMetadata().getResourceVersion()).replace(); + } catch (RuntimeException e) { ok = false; } + return ok; + } + + private static void rejectUnresolved(ConfigMap marker) { + if (marker != null && (!IbmCertificateManager.owned(marker) || !Set.of("READY","ROLLED_BACK").contains(data(marker).getOrDefault("state","")))) + throw new IllegalArgumentException("An IBM Kubernetes preparation has an unresolved outcome. Inspect " + JOURNAL + " before retrying."); + } + private static void state(KubernetesClient client, String value) { + var ops = client.configMaps().inNamespace("kube-system"); var marker = ops.withName(JOURNAL).get(); + marker.getData().put("state",value); ops.resource(marker).lockResourceVersion(marker.getMetadata().getResourceVersion()).replace(); + } + private static Map data(ConfigMap cm) { return cm == null || cm.getData() == null ? Map.of() : cm.getData(); } + private static Map annotations(Service s) { return s.getMetadata().getAnnotations() == null ? Map.of() : s.getMetadata().getAnnotations(); } + private static String append(String value, String item) { var result = new LinkedHashSet(); if(value != null) for(String part : value.split(",")) if(!part.isBlank()) result.add(part.trim()); result.add(item); return String.join(",",result); } + private static boolean hasProxy(Service s) { return Arrays.stream(annotations(s).getOrDefault(IbmIngressSupport.PROXY_FEATURE,"").split(",")).map(String::trim).anyMatch("proxy-protocol"::equals); } + private static boolean after(Event e, Instant time) { + try { + String stamp = e.getSeries() != null && e.getSeries().getLastObservedTime() != null + ? e.getSeries().getLastObservedTime().getTime() : e.getLastTimestamp(); + if (stamp == null && e.getEventTime() != null) stamp = e.getEventTime().getTime(); + return stamp != null && !Instant.parse(stamp).isBefore(time.minusSeconds(1)); + } catch (RuntimeException ignored) { return false; } + } + private static boolean contains(String cidr, String address) { try { String[] c = cidr.split("/"); long mask = (0xffffffffL << (32-Integer.parseInt(c[1]))) & 0xffffffffL; return (ipv4(c[0]) & mask) == (ipv4(address) & mask); } catch(RuntimeException ignored) { return false; } } + private static long ipv4(String value) { String[] bytes=value.split("\\.",-1); if(bytes.length!=4) throw new IllegalArgumentException(); long result=0; for(String b:bytes) { int n=Integer.parseInt(b); if(n<0||n>255) throw new IllegalArgumentException(); result=result*256+n; } return result; } +} diff --git a/src/main/java/kr/co/mcmp/softwarecatalog/kubernetes/service/IngressAutomationPermissions.java b/src/main/java/kr/co/mcmp/softwarecatalog/kubernetes/service/IngressAutomationPermissions.java new file mode 100644 index 00000000..74544967 --- /dev/null +++ b/src/main/java/kr/co/mcmp/softwarecatalog/kubernetes/service/IngressAutomationPermissions.java @@ -0,0 +1,24 @@ +package kr.co.mcmp.softwarecatalog.kubernetes.service; + +import io.fabric8.kubernetes.api.model.authorization.v1.SelfSubjectAccessReviewBuilder; +import io.fabric8.kubernetes.client.KubernetesClient; + +final class IngressAutomationPermissions { + private IngressAutomationPermissions() { } + /** Authorization review only: Kubernetes does not persist these review objects. */ + static void require(KubernetesClient client, String group, String resource, String namespace, String verb) { + try { + var review = new SelfSubjectAccessReviewBuilder().withNewSpec().withNewResourceAttributes() + .withGroup(group).withResource(resource).withNamespace(namespace).withVerb(verb) + .endResourceAttributes().endSpec().build(); + var result = client.authorization().v1().selfSubjectAccessReview().create(review); + if (result.getStatus() == null || !Boolean.TRUE.equals(result.getStatus().getAllowed())) + throw new IllegalArgumentException("Kubernetes permission required for automatic Ingress setup: " + verb + " " + resource + + (namespace == null ? " (cluster scope)." : " in namespace " + namespace + ".")); + } catch (IllegalArgumentException e) { throw e; } + catch (RuntimeException e) { throw new IllegalArgumentException("Cannot verify Kubernetes permissions for automatic Ingress setup."); } + } + static void lock(KubernetesClient client) { + for (String verb : java.util.List.of("get","create","update","delete")) require(client,"","configmaps","kube-system",verb); + } +} diff --git a/src/main/java/kr/co/mcmp/softwarecatalog/kubernetes/service/K8sIngressAccessService.java b/src/main/java/kr/co/mcmp/softwarecatalog/kubernetes/service/K8sIngressAccessService.java index a1829688..ac74ea2c 100644 --- a/src/main/java/kr/co/mcmp/softwarecatalog/kubernetes/service/K8sIngressAccessService.java +++ b/src/main/java/kr/co/mcmp/softwarecatalog/kubernetes/service/K8sIngressAccessService.java @@ -24,10 +24,19 @@ public static String validateCidr(String cidr) { return VmSecurityGroupExposureService.validateRestrictedIpv4Cidr(cidr); } + public void resolveTarget(DeploymentRequest request, kr.co.mcmp.softwarecatalog.SoftwareCatalog catalog) { + var config = kr.co.mcmp.softwarecatalog.application.dto.DeploymentConfigDTO.from(request, catalog); + if (!config.isIngressEnabled()) return; + var cluster = tumblebug.getK8sClusterByName(request.getNamespace(), request.getClusterName()); + if (cluster == null) throw new IllegalArgumentException("Kubernetes cluster was not found."); + request.setIngressClass(IbmIngressSupport.resolve(cluster, config).getIngressClass()); + } + public void open(DeploymentRequest request, DeploymentHistory history) { if (!Boolean.TRUE.equals(request.getOpenServicePort())) return; var cluster = tumblebug.getK8sClusterByName(request.getNamespace(), request.getClusterName()); validateCidr(request.getServicePortCidr()); + if (IbmIngressSupport.isIbm(cluster)) return; // IBM owns shared LB/worker firewall rules. String id = workerGroups.resolve(request.getNamespace(), cluster); // The existing exposure service refuses ambiguous SGs and preserves shared/operator rules. VmAccessInfo target = new VmAccessInfo(); diff --git a/src/main/java/kr/co/mcmp/softwarecatalog/kubernetes/service/K8sIngressPolicy.java b/src/main/java/kr/co/mcmp/softwarecatalog/kubernetes/service/K8sIngressPolicy.java index bb9d1fea..2460e800 100644 --- a/src/main/java/kr/co/mcmp/softwarecatalog/kubernetes/service/K8sIngressPolicy.java +++ b/src/main/java/kr/co/mcmp/softwarecatalog/kubernetes/service/K8sIngressPolicy.java @@ -15,8 +15,8 @@ static String validate(DeploymentRequest request, DeploymentConfigDTO config) { throw new IllegalArgumentException("Enable Ingress to configure external CIDR access."); return null; } - if (!"nginx".equals(config.getIngressClass())) - throw new IllegalArgumentException("CIDR access on NodePort 30880 requires ingress class nginx."); + if (!"nginx".equals(config.getIngressClass()) && !IbmIngressSupport.managed(config.getIngressClass())) + throw new IllegalArgumentException("CIDR access requires nginx or an IBM managed NGINX ingress class."); if (config.getIngressHost() == null || config.getIngressHost().isBlank() || "localhost".equals(config.getIngressHost())) throw new IllegalArgumentException("Enter an Ingress hostname for external access."); return K8sIngressAccessService.validateCidr(request.getServicePortCidr()); @@ -32,20 +32,45 @@ static void configureValues(String chart, Map values, Map "gateway.ingress"; default -> "ingress"; }; + // Preserve the repository-aware adapter's schema, including generic + // structured hosts and Bitnami's boolean tls plus extraTls. Loki keeps + // the gateway mapping already supported by the deployment policy. + if (!"loki".equalsIgnoreCase(chart)) { + for (String candidate : List.of("ingress.main", "server.ingress", "ingress")) { + Map mapped = file; + for (String key : candidate.split("\\.")) mapped = map(mapped.get(key)); + if (mapped.containsKey("enabled")) { + root = candidate; + break; + } + } + } // Replace generic settings with the chart's native values shape. - values.keySet().removeIf(k -> k.startsWith("ingress.") || k.startsWith(root + ".")); + String ingressRoot = root; + values.keySet().removeIf(k -> k.startsWith("ingress.") || k.startsWith(ingressRoot + ".")); Map ingress = file; - for (String key : root.split("\\.")) - ingress = (Map) ingress.computeIfAbsent(key, ignored -> new LinkedHashMap<>()); + for (String key : root.split("\\.")) { + Map child = new LinkedHashMap<>((Map) map(ingress.get(key))); + ingress.put(key, child); + ingress = child; + } + boolean chartMapped = ingress.containsKey("enabled"); + Map annotations = new LinkedHashMap<>((Map) map(ingress.get("annotations"))); + annotations.put(K8sIngressAccessService.CIDR_ANNOTATION, cidr); + annotations.put("kubernetes.io/ingress.class", config.getIngressClass()); + if (IbmIngressSupport.managed(config.getIngressClass()) && !config.isTlsEnabled()) { + // Per application only: leave the shared controller and existing HTTPS routes unchanged. + annotations.put("nginx.ingress.kubernetes.io/ssl-redirect", "false"); + annotations.put("nginx.ingress.kubernetes.io/force-ssl-redirect", "false"); + } + ingress.put("annotations", annotations); + if (chartMapped) return; ingress.put("enabled", true); - ingress.put("ingressClassName", "nginx"); - ingress.put("className", "nginx"); + ingress.put("ingressClassName", config.getIngressClass()); + ingress.put("className", config.getIngressClass()); ingress.put("path", config.getIngressPath()); ingress.put("pathType", "Prefix"); ingress.put("hostname", config.getIngressHost()); - Map annotations = (Map) ingress.computeIfAbsent("annotations", ignored -> new LinkedHashMap<>()); - annotations.put(K8sIngressAccessService.CIDR_ANNOTATION, cidr); - annotations.put("kubernetes.io/ingress.class", "nginx"); boolean structuredHosts = "rclone".equalsIgnoreCase(chart) || "loki".equalsIgnoreCase(chart); ingress.put("hosts", structuredHosts ? List.of(Map.of("host", config.getIngressHost(), "paths", List.of(Map.of("path", config.getIngressPath(), "pathType", "Prefix")))) @@ -62,6 +87,10 @@ static void verifyManifest(String manifest, String cidr) { } static void verifyManifest(String manifest, String cidr, String expectedHost) { + verifyManifest(manifest, cidr, expectedHost, "nginx"); + } + + static void verifyManifest(String manifest, String cidr, String expectedHost, String expectedClass) { if (cidr == null) return; int routes = 0; boolean hostFound = expectedHost == null; @@ -75,7 +104,9 @@ static void verifyManifest(String manifest, String cidr, String expectedHost) { Map annotations = map(map(resource.get("metadata")).get("annotations")); Object clazz = spec.get("ingressClassName"); if (clazz == null) clazz = annotations.get("kubernetes.io/ingress.class"); - if (!"nginx".equals(clazz) || !cidr.equals(annotations.get(K8sIngressAccessService.CIDR_ANNOTATION))) + if (!Objects.equals(expectedClass, clazz) + || (annotations.containsKey("kubernetes.io/ingress.class") && !Objects.equals(expectedClass, annotations.get("kubernetes.io/ingress.class"))) + || !cidr.equals(annotations.get(K8sIngressAccessService.CIDR_ANNOTATION))) throw new IllegalArgumentException("Helm chart did not render the required nginx Ingress CIDR restriction."); } if ("Service".equals(resource.get("kind")) && Set.of("LoadBalancer", "NodePort").contains(Objects.toString(spec.get("type"), ""))) diff --git a/src/main/java/kr/co/mcmp/softwarecatalog/kubernetes/service/K8sIngressPreparationJobs.java b/src/main/java/kr/co/mcmp/softwarecatalog/kubernetes/service/K8sIngressPreparationJobs.java new file mode 100644 index 00000000..f3ebf7d2 --- /dev/null +++ b/src/main/java/kr/co/mcmp/softwarecatalog/kubernetes/service/K8sIngressPreparationJobs.java @@ -0,0 +1,90 @@ +package kr.co.mcmp.softwarecatalog.kubernetes.service; + +import jakarta.annotation.PreDestroy; +import java.time.Instant; +import java.util.*; +import java.util.concurrent.*; +import kr.co.mcmp.softwarecatalog.CatalogRepository; +import kr.co.mcmp.softwarecatalog.application.dto.DeploymentConfigDTO; +import kr.co.mcmp.softwarecatalog.application.dto.K8sIngressCheckRequest; +import kr.co.mcmp.softwarecatalog.kubernetes.config.KubernetesClientFactory; +import kr.co.mcmp.softwarecatalog.kubernetes.config.KubernetesNamespaces; +import org.springframework.stereotype.Service; + +/** Bounded asynchronous preparation avoids HTTP/proxy timeouts during LB recreation and ACME validation. */ +@Service +public class K8sIngressPreparationJobs { + public record Status(String id, String namespace, String clusterName, String state, String message) { } + private static final class Job { + final String id = UUID.randomUUID().toString(); + final K8sIngressCheckRequest request; + volatile String state = "QUEUED", message = "Waiting to prepare IBM Ingress…"; + volatile Instant completed; + Job(K8sIngressCheckRequest request) { + // Keep the asynchronous identity immutable even if an internal caller reuses its DTO. + this.request = new K8sIngressCheckRequest(); + org.springframework.beans.BeanUtils.copyProperties(request,this.request); + } + Status status() { return new Status(id, request.getNamespace(), request.getClusterName(), state, message); } + } + private final Map jobs = new ConcurrentHashMap<>(); + private final ThreadPoolExecutor executor = new ThreadPoolExecutor(2,2,0,TimeUnit.SECONDS,new ArrayBlockingQueue<>(4), + runnable -> { var thread = new Thread(runnable,"am-ingress-preparation"); thread.setDaemon(true); return thread; },new ThreadPoolExecutor.AbortPolicy()); + private final KubernetesIngressPreflightService preflight; + private final KubernetesClientFactory clients; + private final CatalogRepository catalogs; + private final K8sIngressAccessService access; + private final IbmIngressAutomationService automation; + + public K8sIngressPreparationJobs(KubernetesIngressPreflightService preflight, KubernetesClientFactory clients, + CatalogRepository catalogs, K8sIngressAccessService access, IbmIngressAutomationService automation) { + this.preflight=preflight; this.clients=clients; this.catalogs=catalogs; this.access=access; this.automation=automation; + } + public synchronized Status start(K8sIngressCheckRequest request) { + jobs.values().removeIf(job -> job.completed != null && job.completed.isBefore(Instant.now().minusSeconds(7200))); + for (var job : jobs.values()) { + if (job.completed == null && job.request.getNamespace().equals(request.getNamespace()) + && job.request.getClusterName().equals(request.getClusterName())) { + if (job.request.equals(request)) return job.status(); + throw new IllegalArgumentException("Another Ingress preparation is already running for this cluster."); + } + } + if (jobs.size() >= 100) throw new IllegalArgumentException("Ingress preparation capacity is full; retry later."); + Job job = new Job(request); jobs.put(job.id,job); + try { executor.execute(() -> run(job)); } + catch (RejectedExecutionException e) { jobs.remove(job.id); throw new IllegalArgumentException("Ingress preparation queue is full; retry later."); } + return job.status(); + } + public Status get(String namespace, String id) { + var job = jobs.get(id); + if (job == null || !job.request.getNamespace().equals(namespace)) + throw new IllegalArgumentException("Preparation not found. If AM restarted, retry Deploy to check and reuse existing cluster resources."); + return job.status(); + } + private void run(Job job) { + job.state="RUNNING"; + try { + job.message="Checking permissions, domain configuration and existing Ingress routes…"; + var check = preflight.check(job.request); + if (!check.valid()) throw new IllegalArgumentException(String.join(" ",check.errors())); + var catalog = catalogs.findById(job.request.getCatalogId()).orElseThrow(() -> new IllegalArgumentException("Software catalog not found.")); + var target = job.request.toDeploymentRequest(); access.resolveTarget(target,catalog); + var config = DeploymentConfigDTO.from(target,catalog); + if (!config.isIngressEnabled() || !IbmIngressSupport.managed(config.getIngressClass())) + throw new IllegalArgumentException("This preparation endpoint requires IBM managed Ingress."); + String workload = catalog.getPackageInfo() != null && catalog.getPackageInfo().getPackageName() != null + && catalog.getPackageInfo().getPackageName().toLowerCase(Locale.ROOT).contains("jupyter") + ? target.getNamespace() : KubernetesNamespaces.APPLICATION_WORKLOAD; + try (var client = clients.getClient(target.getNamespace(),target.getClusterName())) { + automation.prepare(client,target.getNamespace(),target.getClusterName(),workload,config, message -> job.message=message); + } + job.message="Ingress preparation completed. Ready to deploy the application."; job.state="READY"; + } catch (IllegalArgumentException e) { job.message=e.getMessage(); job.state="FAILED"; } + catch (Exception e) { + // K8s/client/parser errors may include Secret bodies. Never relay them through status responses. + job.message="Ingress preparation could not complete. Check cluster permissions, Helm/cert-manager and IBM status. Existing shared resources were not automatically rolled back."; + job.state="FAILED"; + } finally { job.completed=Instant.now(); } + } + @PreDestroy void shutdown() { executor.shutdownNow(); } +} diff --git a/src/main/java/kr/co/mcmp/softwarecatalog/kubernetes/service/K8sJupyterService.java b/src/main/java/kr/co/mcmp/softwarecatalog/kubernetes/service/K8sJupyterService.java index 7bb6863e..23cc5a09 100644 --- a/src/main/java/kr/co/mcmp/softwarecatalog/kubernetes/service/K8sJupyterService.java +++ b/src/main/java/kr/co/mcmp/softwarecatalog/kubernetes/service/K8sJupyterService.java @@ -38,6 +38,7 @@ public class K8sJupyterService { private final UserRepository users; private final ObjectMapper mapper; private final K8sObjectStorageTunnelService tunnels; + private final IbmIngressAutomationService automation; @Value("${app.object-storage.k8s-transport:SSH_TUNNEL}") private String transport = "SSH_TUNNEL"; @Value("${app.object-storage.k8s-ssh-image:" + K8sSshSidecar.DEFAULT_IMAGE + "}") @@ -65,7 +66,7 @@ static void validate(DeploymentRequest r, String gateway, boolean allowHttp) { if (r.getServicePort() != null && r.getServicePort() != 8888) throw new IllegalArgumentException("K8s Jupyter uses service port 8888 and external Ingress port 30880."); if (!Boolean.TRUE.equals(r.getIngressEnabled())) throw new IllegalArgumentException("K8s Jupyter requires Ingress."); - if (!"nginx".equals(r.getIngressClass())) throw new IllegalArgumentException("The managed 30880 ingress uses class nginx."); + if (!"nginx".equals(r.getIngressClass()) && !IbmIngressSupport.managed(r.getIngressClass())) throw new IllegalArgumentException("Use nginx or an IBM managed NGINX Ingress class."); String host = r.getIngressHost(); if (host == null || host.length() > 253 || !host.matches("(?=.{1,253}$)[a-z0-9](?:[a-z0-9.-]*[a-z0-9])?") || host.contains("..") || host.contains("*") || host.matches("[0-9.]+")) @@ -73,7 +74,7 @@ static void validate(DeploymentRequest r, String gateway, boolean allowHttp) { for (String label : host.split("\\.")) if (label.length() > 63 || label.startsWith("-") || label.endsWith("-")) throw new IllegalArgumentException("Invalid Ingress hostname."); if (!"/".equals(r.getIngressPath())) throw new IllegalArgumentException("Jupyter uses a dedicated hostname with path /."); - if (Boolean.TRUE.equals(r.getIngressTlsEnabled())) throw new IllegalArgumentException("This managed entry uses HTTP NodePort 30880; configure a separate HTTPS entry before enabling TLS."); + if (Boolean.TRUE.equals(r.getIngressTlsEnabled()) && !IbmIngressSupport.managed(r.getIngressClass())) throw new IllegalArgumentException("This managed entry uses HTTP NodePort 30880; configure a separate HTTPS entry before enabling TLS."); if (Boolean.TRUE.equals(r.getHpaEnabled()) || Boolean.TRUE.equals(r.getWorkloadRebalancingEnabled()) || (r.getMinReplicas() != null && r.getMinReplicas() != 1)) throw new IllegalArgumentException("Jupyter requires one replica without HPA or workload rebalancing."); @@ -90,6 +91,7 @@ static void validate(DeploymentRequest r, String gateway, boolean allowHttp) { } public synchronized DeploymentHistory deploy(DeploymentRequest request, SoftwareCatalog catalog) { + access.resolveTarget(request, catalog); boolean sshTunnel = useSshTunnel(); // Routing/CIDR requirements are identical; only DIRECT needs an external URL. validate(request, sshTunnel ? "https://unused.internal" : gatewayUrl, allowHttp); @@ -114,7 +116,7 @@ public synchronized DeploymentHistory deploy(DeploymentRequest request, Software history.setIngressHost(request.getIngressHost()); history.setIngressPath("/"); history.setIngressEnabled(true); - history.setIngressClass("nginx"); + history.setIngressClass(request.getIngressClass()); histories.saveAndFlush(history); List created = new ArrayList<>(); try (var client = clients.getClient(request.getNamespace(), request.getClusterName())) { @@ -125,8 +127,17 @@ public synchronized DeploymentHistory deploy(DeploymentRequest request, Software .filter(i -> i.getSpec() != null && i.getSpec().getRules() != null) .flatMap(i -> i.getSpec().getRules().stream()).anyMatch(r -> request.getIngressHost().equals(r.getHost())); if (hostTaken) throw new IllegalArgumentException("Ingress hostname is already in use."); - helm.ensureIngressController(client, request.getNamespace(), request.getClusterName()); - access.verifyController(client, request.getNamespace()); + if (IbmIngressSupport.managed(request.getIngressClass())) { + var resolved = automation.prepare(client, request.getNamespace(), request.getClusterName(), request.getNamespace(), + DeploymentConfigDTO.from(request, catalog), message -> { }); + IbmIngressTlsResolver.apply(request, resolved); + IbmIngressSupport.verify(client, resolved); + history.setIngressTlsEnabled(true); + history.setIngressTlsSecret(resolved.getIngressTlsSecret()); + } else { + helm.ensureIngressController(client, request.getNamespace(), request.getClusterName()); + access.verifyController(client, request.getNamespace()); + } var issued = grants.issue(history.getId(), workloadId(request.getClusterName()), request.getNamespace(), storage); Secret sshSecret = sshTunnel ? tunnels.credentials(request.getNamespace(), name) : null; var resources = resources(request, catalog, name, issued.token(), storage.getJupyterToken(), sshSecret); @@ -211,13 +222,22 @@ List resources(DeploymentRequest r, SoftwareCatalog catalog, String "spec", Map.of("type", "ClusterIP", "selector", Map.of(OWNER, name), "ports", List.of(Map.of("name", "http", "port", 8888, "targetPort", "http")))), io.fabric8.kubernetes.api.model.Service.class)); var ingressMeta = new LinkedHashMap<>(metadata); - ingressMeta.put("annotations", Map.of(K8sIngressAccessService.CIDR_ANNOTATION, K8sIngressAccessService.validateCidr(r.getServicePortCidr()), + var ingressAnnotations = new LinkedHashMap(Map.of(K8sIngressAccessService.CIDR_ANNOTATION, K8sIngressAccessService.validateCidr(r.getServicePortCidr()), "nginx.ingress.kubernetes.io/proxy-read-timeout", "3600", "nginx.ingress.kubernetes.io/proxy-send-timeout", "3600", "nginx.ingress.kubernetes.io/proxy-body-size", "100m")); - result.add(mapper.convertValue(Map.of("apiVersion", "networking.k8s.io/v1", "kind", "Ingress", "metadata", ingressMeta, - "spec", Map.of("ingressClassName", "nginx", "rules", List.of(Map.of("host", r.getIngressHost(), + if (IbmIngressSupport.managed(r.getIngressClass()) && !Boolean.TRUE.equals(r.getIngressTlsEnabled())) { + ingressAnnotations.put("nginx.ingress.kubernetes.io/ssl-redirect", "false"); + ingressAnnotations.put("nginx.ingress.kubernetes.io/force-ssl-redirect", "false"); + } + ingressMeta.put("annotations", ingressAnnotations); + Map ingressSpec = new LinkedHashMap<>(Map.of("ingressClassName", r.getIngressClass(), "rules", List.of(Map.of("host", r.getIngressHost(), "http", Map.of("paths", List.of(Map.of("path", "/", "pathType", "Prefix", "backend", Map.of( - "service", Map.of("name", name, "port", Map.of("number", 8888)))))))))), Ingress.class)); + "service", Map.of("name", name, "port", Map.of("number", 8888)))))))))); + if (IbmIngressSupport.managed(r.getIngressClass()) && Boolean.TRUE.equals(r.getIngressTlsEnabled())) { + ingressSpec.put("tls", List.of(Map.of("hosts", List.of(r.getIngressHost()), "secretName", r.getIngressTlsSecret()))); + } + result.add(mapper.convertValue(Map.of("apiVersion", "networking.k8s.io/v1", "kind", "Ingress", "metadata", ingressMeta, + "spec", ingressSpec), Ingress.class)); if (sshSecret != null) { result.add(0, K8sSshSidecar.configuration(sshSecret.getMetadata().getName(), ns, labels)); K8sSshSidecar.attach((Deployment) result.stream().filter(Deployment.class::isInstance).findFirst().orElseThrow(), sshImage, sshSecret.getMetadata().getName()); diff --git a/src/main/java/kr/co/mcmp/softwarecatalog/kubernetes/service/KubernetesDeployService.java b/src/main/java/kr/co/mcmp/softwarecatalog/kubernetes/service/KubernetesDeployService.java index 65c032ad..eb4fa2e2 100644 --- a/src/main/java/kr/co/mcmp/softwarecatalog/kubernetes/service/KubernetesDeployService.java +++ b/src/main/java/kr/co/mcmp/softwarecatalog/kubernetes/service/KubernetesDeployService.java @@ -14,9 +14,11 @@ import kr.co.mcmp.softwarecatalog.application.constants.ApplicationStatusValues; import kr.co.mcmp.softwarecatalog.application.constants.DeploymentType; import kr.co.mcmp.softwarecatalog.application.dto.DeploymentConfigDTO; +import kr.co.mcmp.softwarecatalog.application.dto.DeploymentRequest; import kr.co.mcmp.softwarecatalog.application.model.ApplicationStatus; import kr.co.mcmp.softwarecatalog.application.model.DeploymentHistory; import kr.co.mcmp.softwarecatalog.kubernetes.config.KubernetesClientFactory; +import kr.co.mcmp.softwarecatalog.kubernetes.config.KubernetesNamespaces; import kr.co.mcmp.softwarecatalog.kubernetes.util.KubernetesUtils; import kr.co.mcmp.softwarecatalog.users.Entity.User; import kr.co.mcmp.softwarecatalog.application.repository.ApplicationStatusRepository; @@ -44,6 +46,7 @@ public class KubernetesDeployService { private final SoftwareSourceService softwareSourceService; private final KubeconfigResolver kubeconfigResolver; private final K8sIngressAccessService ingressAccess; + private final IbmIngressAutomationService automation; /** * 입력 파라미터 검증 공통 메서드 @@ -88,25 +91,39 @@ public DeploymentHistory deployApplication(String namespace, String clusterName, validateInputParameters(namespace, clusterName, catalog); if (request == null) request = kr.co.mcmp.softwarecatalog.application.dto.DeploymentRequest.builder() .namespace(namespace).clusterName(clusterName).build(); - String ingressCidr = K8sIngressPolicy.validate(request, DeploymentConfigDTO.from(request, catalog)); DeploymentHistory history = null; // 소스 선택 로직 추가 HelmChart helmChart = softwareSourceService.getArtifactHubSource(catalog.getId()) .orElseThrow(() -> new IllegalStateException("No ArtifactHub source found for catalog: " + catalog.getId())); - + // Validate ingress settings (including generic fallback) before installing cluster components. + HelmIngressValues.validate(helmChart, DeploymentConfigDTO.from( + request != null ? request : new DeploymentRequest(), catalog)); + String ingressCidr = K8sIngressPolicy.validate(request, DeploymentConfigDTO.from(request, catalog)); try (KubernetesClient client = clientFactory.getClient(namespace, clusterName)) { + if (isIngressEnabled(request, catalog)) ingressAccess.resolveTarget(request, catalog); // namespaceService.ensureNamespaceExists(client, namespace); // 불필요한 코드 제거 boolean ingressEnabled = isIngressEnabled(request, catalog); + KubernetesIngressRouteValidator.assertAvailable(client, DeploymentConfigDTO.from(request, catalog)); + if (ingressEnabled && IbmIngressSupport.managed(request.getIngressClass())) { + updateApplicationStatus(namespace, clusterName, catalog, "PREPARING_INGRESS_IBM"); + var resolved = automation.prepare(client, namespace, clusterName, KubernetesNamespaces.APPLICATION_WORKLOAD, + DeploymentConfigDTO.from(request, catalog), message -> log.info("IBM Ingress preparation: {}", message)); + IbmIngressTlsResolver.apply(request, resolved); + IbmIngressSupport.verify(client, DeploymentConfigDTO.from(request, catalog)); + } + updateApplicationStatus(namespace, clusterName, catalog, ApplicationStatusValues.PREPARING_METRICS_SERVER); helmChartService.ensureMetricsServer(client, namespace, clusterName); if (ingressEnabled) { updateApplicationStatus(namespace, clusterName, catalog, ApplicationStatusValues.PREPARING_INGRESS_NGINX); - helmChartService.ensureIngressController(client, namespace, clusterName); - ingressAccess.verifyController(client, namespace); + if (!IbmIngressSupport.managed(request.getIngressClass())) { + helmChartService.ensureIngressController(client, namespace, clusterName); + ingressAccess.verifyController(client, namespace); + } } updateApplicationStatus(namespace, clusterName, catalog, ApplicationStatusValues.DEPLOYING); @@ -118,8 +135,10 @@ public DeploymentHistory deployApplication(String namespace, String clusterName, result = helmChartService.deployHelmChart(client, namespace, catalog, helmChart, clusterName); } - String podStatus = KubernetesUtils.getPodStatus(client, namespace, helmChart.getChartName()); - Integer servicePort = KubernetesUtils.getServicePort(client, namespace, helmChart.getChartName()); + String podStatus = KubernetesUtils.getPodStatus( + client, KubernetesNamespaces.APPLICATION_WORKLOAD, helmChart.getChartName()); + Integer servicePort = KubernetesUtils.getServicePort( + client, KubernetesNamespaces.APPLICATION_WORKLOAD, helmChart.getChartName()); if (servicePort == null && request != null) { servicePort = request.getServicePort(); } @@ -159,6 +178,11 @@ public DeploymentHistory deployApplication(String namespace, String clusterName, deploymentHistoryRepository.saveAndFlush(history); throw new DeploymentFailure(history, e); } + if (e instanceof KubernetesIngressRouteValidator.ConflictException + || e instanceof KubernetesIngressRouteValidator.LookupException || e instanceof IllegalArgumentException) { + // KubernetesService persists this message in the user-visible deployment failure log. + throw new RuntimeException("애플리케이션 배포 실패: " + e.getMessage(), e); + } throw new RuntimeException("애플리케이션 배포 실패", e); } } @@ -210,10 +234,11 @@ public DeploymentHistory stopApplication(String namespace, String clusterName, S // Pod 개수를 0으로 설정 (Scale Down) log.info("애플리케이션 중지 중 - Pod 개수를 0으로 설정: {}", releaseName); - KubernetesUtils.scaleDeployment(client, namespace, releaseName, 0); + KubernetesUtils.scaleDeployment(client, KubernetesNamespaces.APPLICATION_WORKLOAD, releaseName, 0); String podStatus = "STOPPED"; - Integer servicePort = KubernetesUtils.getServicePort(client, namespace, catalog.getHelmChart().getChartName()); + Integer servicePort = KubernetesUtils.getServicePort( + client, KubernetesNamespaces.APPLICATION_WORKLOAD, catalog.getHelmChart().getChartName()); return createDeploymentHistory( namespace, @@ -301,10 +326,13 @@ public DeploymentHistory restartApplication(String namespace, String clusterName // Pod 개수를 원래 개수로 복원 (Scale Up) log.info("애플리케이션 재시작 중 - Pod 개수를 원래 개수로 복원: {}", releaseName); - KubernetesUtils.scaleDeployment(client, namespace, releaseName, catalog.getMinReplicas()); + KubernetesUtils.scaleDeployment( + client, KubernetesNamespaces.APPLICATION_WORKLOAD, releaseName, catalog.getMinReplicas()); - String podStatus = KubernetesUtils.getPodStatus(client, namespace, catalog.getHelmChart().getChartName()); - Integer servicePort = KubernetesUtils.getServicePort(client, namespace, catalog.getHelmChart().getChartName()); + String podStatus = KubernetesUtils.getPodStatus( + client, KubernetesNamespaces.APPLICATION_WORKLOAD, catalog.getHelmChart().getChartName()); + Integer servicePort = KubernetesUtils.getServicePort( + client, KubernetesNamespaces.APPLICATION_WORKLOAD, catalog.getHelmChart().getChartName()); return createDeploymentHistory( namespace, diff --git a/src/main/java/kr/co/mcmp/softwarecatalog/kubernetes/service/KubernetesIngressPreflightService.java b/src/main/java/kr/co/mcmp/softwarecatalog/kubernetes/service/KubernetesIngressPreflightService.java new file mode 100644 index 00000000..31c89182 --- /dev/null +++ b/src/main/java/kr/co/mcmp/softwarecatalog/kubernetes/service/KubernetesIngressPreflightService.java @@ -0,0 +1,99 @@ +package kr.co.mcmp.softwarecatalog.kubernetes.service; + +import java.util.List; +import java.util.Locale; + +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import kr.co.mcmp.softwarecatalog.CatalogRepository; +import kr.co.mcmp.softwarecatalog.application.dto.DeploymentConfigDTO; +import kr.co.mcmp.softwarecatalog.application.dto.K8sIngressCheckRequest; +import kr.co.mcmp.softwarecatalog.application.dto.K8sIngressCheckResult; +import kr.co.mcmp.softwarecatalog.application.dto.K8sIngressTlsSettings; +import kr.co.mcmp.softwarecatalog.application.exception.ApplicationException; +import kr.co.mcmp.softwarecatalog.application.model.HelmChart; +import kr.co.mcmp.softwarecatalog.kubernetes.config.KubernetesClientFactory; +import kr.co.mcmp.softwarecatalog.kubernetes.config.KubernetesNamespaces; +import kr.co.mcmp.softwarecatalog.service.SoftwareSourceService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +@Service +@RequiredArgsConstructor +@Slf4j +public class KubernetesIngressPreflightService { + private final CatalogRepository catalogs; + private final SoftwareSourceService sources; + private final KubernetesClientFactory clients; + private final K8sIngressAccessService ingressAccess; + private final IbmIngressAutomationService automation; + + @Transactional(readOnly = true) + public K8sIngressTlsSettings tlsSettings(String namespace, String clusterName) { + var target = kr.co.mcmp.softwarecatalog.application.dto.DeploymentRequest.builder() + .namespace(namespace).clusterName(clusterName).ingressEnabled(true).ingressClass("nginx").build(); + ingressAccess.resolveTarget(target, new kr.co.mcmp.softwarecatalog.SoftwareCatalog()); + if (!IbmIngressSupport.managed(target.getIngressClass())) return new K8sIngressTlsSettings(false, null, List.of(), List.of()); + try (var client = clients.getClient(namespace, clusterName)) { + return IbmIngressTlsResolver.describe(client, KubernetesNamespaces.APPLICATION_WORKLOAD, target.getIngressClass()); + } catch (IllegalArgumentException e) { throw e; } + catch (RuntimeException e) { throw new IllegalArgumentException("Cannot discover IBM HTTPS settings. Check cluster connectivity and read permissions."); } + } + + /** No installation, firewall changes, certificate generation or deployment-history writes. */ + @Transactional(readOnly = true) + public K8sIngressCheckResult check(K8sIngressCheckRequest request) { + var catalog = catalogs.findById(request.getCatalogId()) + .orElseThrow(() -> new IllegalArgumentException("Software catalog not found")); + var config = DeploymentConfigDTO.from(request.toDeploymentRequest(), catalog); + if (!config.isIngressEnabled()) return new K8sIngressCheckResult(true, List.of(), List.of()); + + boolean nativeJupyter = catalog.getPackageInfo() != null && catalog.getPackageInfo().getPackageName() != null + && catalog.getPackageInfo().getPackageName().toLowerCase(Locale.ROOT).contains("jupyter"); + try { + var chart = nativeJupyter ? HelmChart.builder().chartName("jupyter-native").build() + : sources.getArtifactHubSource(catalog.getId()) + .orElseThrow(() -> new IllegalArgumentException("No ArtifactHub source found for this catalog")); + HelmIngressValues.validate(chart, config); + // Preserve the native Jupyter service's existing dedicated-host / HTTP-only policy. + if (nativeJupyter && (!"/".equals(config.getIngressPath()) || config.getIngressHost().startsWith("*."))) { + throw new IllegalArgumentException("Jupyter requires a dedicated DNS hostname with path /."); + } + } catch (IllegalArgumentException e) { + return invalid(e.getMessage()); + } + + try (var client = clients.getClient(request.getNamespace(), request.getClusterName())) { + var target = request.toDeploymentRequest(); + ingressAccess.resolveTarget(target, catalog); + config = DeploymentConfigDTO.from(target, catalog); + if (nativeJupyter && config.isTlsEnabled() && !IbmIngressSupport.managed(config.getIngressClass())) { + return invalid("K8s Jupyter uses HTTP NodePort 30880; configure a separate HTTPS entry before enabling TLS."); + } + String workloadNamespace = nativeJupyter ? request.getNamespace() : KubernetesNamespaces.APPLICATION_WORKLOAD; + KubernetesIngressRouteValidator.assertAvailable(client, config, nativeJupyter); + if (IbmIngressSupport.managed(config.getIngressClass())) K8sIngressPolicy.validate(target, config); + var warnings = new java.util.ArrayList(); + if (IbmIngressSupport.managed(config.getIngressClass())) { + warnings.addAll(automation.check(client, request.getNamespace(), request.getClusterName(), workloadNamespace, config)); + } + if (!IbmIngressSupport.managed(config.getIngressClass())) { + warnings.addAll(KubernetesIngressTlsWarnings.inspect(client, workloadNamespace, config)); + } + return new K8sIngressCheckResult(true, List.of(), warnings); + } catch (KubernetesIngressRouteValidator.ConflictException | KubernetesIngressRouteValidator.LookupException e) { + return invalid(e.getMessage()); + } catch (IllegalArgumentException | ApplicationException e) { + return invalid(e.getMessage()); + } catch (RuntimeException e) { + // Never turn a failed cluster lookup into a successful preflight or expose kubeconfig details. + log.warn("Ingress preflight could not reach the selected cluster ({})", e.getClass().getSimpleName()); + return invalid("Cannot check Ingress routes on the selected cluster. Check connectivity and access permissions, then retry Spec Check."); + } + } + + private static K8sIngressCheckResult invalid(String message) { + return new K8sIngressCheckResult(false, List.of(message), List.of()); + } +} diff --git a/src/main/java/kr/co/mcmp/softwarecatalog/kubernetes/service/KubernetesIngressRouteValidator.java b/src/main/java/kr/co/mcmp/softwarecatalog/kubernetes/service/KubernetesIngressRouteValidator.java new file mode 100644 index 00000000..2afa4b30 --- /dev/null +++ b/src/main/java/kr/co/mcmp/softwarecatalog/kubernetes/service/KubernetesIngressRouteValidator.java @@ -0,0 +1,110 @@ +package kr.co.mcmp.softwarecatalog.kubernetes.service; + +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Objects; + +import io.fabric8.kubernetes.api.model.networking.v1.Ingress; +import io.fabric8.kubernetes.api.model.networking.v1.IngressList; +import io.fabric8.kubernetes.client.KubernetesClient; +import kr.co.mcmp.softwarecatalog.application.dto.DeploymentConfigDTO; + +/** Sequential preflight check; not a reservation or a concurrent-deployment lock. */ +final class KubernetesIngressRouteValidator { + private static final String LEGACY_CLASS_ANNOTATION = "kubernetes.io/ingress.class"; + + private KubernetesIngressRouteValidator() {} + + static void assertAvailable(KubernetesClient client, DeploymentConfigDTO config) { + assertAvailable(client, config, false); + } + + static void assertAvailable(KubernetesClient client, DeploymentConfigDTO config, boolean dedicatedHost) { + if (!config.isIngressEnabled()) return; + + IngressList existing; + try { + // An HTTP route is shared by a controller across namespaces, not by the TB project. + existing = Objects.requireNonNull(client.network().v1().ingresses().inAnyNamespace().list(), + "The Kubernetes API returned no Ingress list"); + } catch (RuntimeException e) { + // A failed list (for example RBAC 403) must not be mistaken for an empty cluster. + throw new LookupException("Cannot check existing Ingress Host/Path routes; deployment stopped. " + + "Check connectivity and cluster-wide Ingress list permission.", e); + } + if (dedicatedHost && existing.getItems() != null) { + // Native Jupyter already reserves the entire hostname, regardless of class/path. + boolean taken = existing.getItems().stream().filter(Objects::nonNull) + .filter(i -> i.getSpec() != null && i.getSpec().getRules() != null) + .flatMap(i -> i.getSpec().getRules().stream()).filter(Objects::nonNull) + .anyMatch(rule -> normalizeHost(config.getIngressHost()).equals(normalizeHost(rule.getHost()))); + if (taken) throw new ConflictException("Ingress hostname is already in use. Jupyter requires a dedicated hostname."); + } + assertAvailable(existing.getItems(), config); + } + + static void assertAvailable(List existing, DeploymentConfigDTO config) { + if (!config.isIngressEnabled() || existing == null) return; + String requestedHost = normalizeHost(config.getIngressHost()); + String requestedPath = normalizePath(config.getIngressPath()); + for (Ingress ingress : existing) { + if (ingress == null || ingress.getSpec() == null || ingress.getSpec().getRules() == null) continue; + String existingClass = ingress.getSpec().getIngressClassName(); + if (existingClass == null || existingClass.isBlank()) { + Map annotations = ingress.getMetadata() == null ? null : ingress.getMetadata().getAnnotations(); + existingClass = annotations == null ? null : annotations.get(LEGACY_CLASS_ANNOTATION); + } + // Classless legacy routes may be served by the controller; do not assume they are unused. + if (existingClass != null && !existingClass.isBlank() + && !existingClass.equals(config.getIngressClass())) continue; + + for (var rule : ingress.getSpec().getRules()) { + if (rule == null || rule.getHttp() == null || rule.getHttp().getPaths() == null + || !hostsOverlap(requestedHost, normalizeHost(rule.getHost()))) continue; + for (var path : rule.getHttp().getPaths()) { + if (path != null && requestedPath.equals(normalizePath(path.getPath()))) { + String owner = ingress.getMetadata() == null ? "unknown" + : ingress.getMetadata().getNamespace() + "/" + ingress.getMetadata().getName(); + throw new ConflictException("Ingress Host/Path conflict: " + requestedHost + requestedPath + + " (class " + config.getIngressClass() + ") is already covered by " + owner + + ". Choose a different Host or Path, or remove the existing Ingress first."); + } + } + } + } + } + + private static String normalizeHost(String host) { + return host == null ? "" : host.trim().toLowerCase(Locale.ROOT); + } + + private static String normalizePath(String path) { + if (path == null || path.isEmpty()) return "/"; + // AM uses Prefix paths: /app and /app/ reserve the same route. Preserve case. + int end = path.length(); + while (end > 1 && path.charAt(end - 1) == '/') end--; + return path.substring(0, end); + } + + private static boolean hostsOverlap(String first, String second) { + if (first.isEmpty() || second.isEmpty() || first.equals(second)) return true; + return wildcardMatches(first, second) || wildcardMatches(second, first); + } + + private static boolean wildcardMatches(String wildcard, String host) { + if (!wildcard.startsWith("*.") || host.startsWith("*.")) return false; + String suffix = wildcard.substring(1); + if (!host.endsWith(suffix)) return false; + String label = host.substring(0, host.length() - suffix.length()); + return !label.isEmpty() && !label.contains("."); + } + + static final class ConflictException extends IllegalArgumentException { + ConflictException(String message) { super(message); } + } + + static final class LookupException extends IllegalStateException { + LookupException(String message, Throwable cause) { super(message, cause); } + } +} diff --git a/src/main/java/kr/co/mcmp/softwarecatalog/kubernetes/service/KubernetesIngressTlsWarnings.java b/src/main/java/kr/co/mcmp/softwarecatalog/kubernetes/service/KubernetesIngressTlsWarnings.java new file mode 100644 index 00000000..c1771896 --- /dev/null +++ b/src/main/java/kr/co/mcmp/softwarecatalog/kubernetes/service/KubernetesIngressTlsWarnings.java @@ -0,0 +1,43 @@ +package kr.co.mcmp.softwarecatalog.kubernetes.service; + +import java.util.List; +import java.util.Map; +import java.util.Objects; + +import io.fabric8.kubernetes.api.model.Secret; +import io.fabric8.kubernetes.client.KubernetesClient; +import kr.co.mcmp.softwarecatalog.application.dto.DeploymentConfigDTO; + +/** Advisory only: certificates may be provisioned asynchronously, outside AM. */ +final class KubernetesIngressTlsWarnings { + private KubernetesIngressTlsWarnings() {} + + static List inspect(KubernetesClient client, String workloadNamespace, DeploymentConfigDTO config) { + if (!config.isIngressEnabled() || !config.isTlsEnabled()) return List.of(); + String name = config.getIngressTlsSecret(); + if (name == null) { + return List.of("TLS Secret was not specified. Deployment will reference -tls in namespace " + + workloadNamespace + ". AM does not create certificates; provision that Secret externally."); + } + Secret secret; + try { + // Read only this Secret, never list Secrets or return their contents to the browser/logs. + secret = client.secrets().inNamespace(workloadNamespace).withName(name).get(); + } catch (RuntimeException e) { + return List.of("Cannot verify TLS Secret '" + name + "' in namespace " + workloadNamespace + + ". Check Secret read permission and connectivity. Deployment may continue; HTTPS is not verified."); + } + if (secret == null) { + return List.of("TLS Secret '" + name + "' does not currently exist in namespace " + workloadNamespace + + ". Deployment may continue, but provision the certificate externally before using HTTPS."); + } + Map data = secret.getData(); + if (!"kubernetes.io/tls".equals(secret.getType()) || data == null + || Objects.toString(data.get("tls.crt"), "").isBlank() || Objects.toString(data.get("tls.key"), "").isBlank()) { + return List.of("TLS Secret '" + name + "' in namespace " + workloadNamespace + + " is not a complete kubernetes.io/tls Secret (tls.crt and tls.key). Verify it before using HTTPS."); + } + // Existence/shape do not prove certificate validity, hostname coverage or external reachability. + return List.of(); + } +} diff --git a/src/main/java/kr/co/mcmp/softwarecatalog/kubernetes/service/KubernetesMonitoringService.java b/src/main/java/kr/co/mcmp/softwarecatalog/kubernetes/service/KubernetesMonitoringService.java index d3d0dd76..71dbb41e 100644 --- a/src/main/java/kr/co/mcmp/softwarecatalog/kubernetes/service/KubernetesMonitoringService.java +++ b/src/main/java/kr/co/mcmp/softwarecatalog/kubernetes/service/KubernetesMonitoringService.java @@ -56,6 +56,7 @@ import kr.co.mcmp.ape.cbtumblebug.api.CbtumblebugRestApi; import kr.co.mcmp.ape.cbtumblebug.dto.K8sClusterDto; import kr.co.mcmp.softwarecatalog.kubernetes.config.KubernetesClientFactory; +import kr.co.mcmp.softwarecatalog.kubernetes.config.KubernetesNamespaces; import kr.co.mcmp.softwarecatalog.common.service.RabbitMqAlertService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -66,7 +67,7 @@ public class KubernetesMonitoringService { private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); - private static final String DEFAULT_WORKLOAD_NAMESPACE = "default"; + private static final String DEFAULT_WORKLOAD_NAMESPACE = KubernetesNamespaces.APPLICATION_WORKLOAD; private static final String HELM_INSTANCE_LABEL = "app.kubernetes.io/instance"; private final KubernetesClientFactory clientFactory; @@ -1718,7 +1719,7 @@ private void sendScaleOutCompletedAlert(DeploymentHistory deployment, int newNod */ private void removeNodeSelectorFromDeployment(DeploymentHistory deployment, KubernetesClient client) { try { - String namespace = "default"; + String namespace = DEFAULT_WORKLOAD_NAMESPACE; String appName = deployment.getCatalog().getName().toLowerCase(); log.info("Looking for Deployment in namespace: {}, appName: {}", namespace, appName); @@ -1786,7 +1787,7 @@ private void removeNodeSelectorFromDeployment(DeploymentHistory deployment, Kube */ private boolean isAlreadyScaledOut(DeploymentHistory deployment, KubernetesClient client) { try { - String namespace = "default"; + String namespace = DEFAULT_WORKLOAD_NAMESPACE; String appName = deployment.getCatalog().getName().toLowerCase().replaceAll("\\s+", "-"); // Deployment 찾기 @@ -1917,8 +1918,8 @@ private void redeployToNewNodes(DeploymentHistory deployment, int newNodeCount, log.info("Redeploying application to new nodes: deploymentId={}, newNodeCount={}", deployment.getId(), newNodeCount); - // K8s 배포는 항상 default namespace에 배포됨 - String namespace = "default"; + // K8s 워크로드는 요청의 Tumblebug namespace와 별개인 전용 namespace에 배포됨 + String namespace = DEFAULT_WORKLOAD_NAMESPACE; String appName = deployment.getCatalog().getName().toLowerCase().replaceAll("\\s+", "-"); String nodeGroupName = deployment.getNodeGroupName(); diff --git a/src/main/java/kr/co/mcmp/softwarecatalog/kubernetes/service/KubernetesOperationService.java b/src/main/java/kr/co/mcmp/softwarecatalog/kubernetes/service/KubernetesOperationService.java index 2c2eecd4..d16281ec 100644 --- a/src/main/java/kr/co/mcmp/softwarecatalog/kubernetes/service/KubernetesOperationService.java +++ b/src/main/java/kr/co/mcmp/softwarecatalog/kubernetes/service/KubernetesOperationService.java @@ -23,6 +23,7 @@ import io.fabric8.kubernetes.client.utils.Serialization; import kr.co.mcmp.softwarecatalog.SoftwareCatalog; import kr.co.mcmp.softwarecatalog.kubernetes.config.KubernetesClientFactory; +import kr.co.mcmp.softwarecatalog.kubernetes.config.KubernetesNamespaces; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -31,7 +32,6 @@ @RequiredArgsConstructor public class KubernetesOperationService { - private static final String DEFAULT_HELM_NAMESPACE = "default"; private static final Set RESTARTABLE_WORKLOAD_KINDS = Set.of("Deployment", "StatefulSet", "DaemonSet"); private static final Set SCALABLE_WORKLOAD_KINDS = Set.of("Deployment", "StatefulSet"); private static final String RESTARTED_AT_ANNOTATION = "kubectl.kubernetes.io/restartedAt"; @@ -125,7 +125,8 @@ public void uninstallApplication(String namespace, String clusterName, SoftwareC try { String kubeconfigYaml = getKubeconfigForCluster(namespace, clusterName); tempKubeconfigPath = createTempKubeconfigFile(kubeconfigYaml); - String releaseName = findInstalledReleaseName(DEFAULT_HELM_NAMESPACE, tempKubeconfigPath, catalog); + String releaseName = findInstalledReleaseName( + KubernetesNamespaces.APPLICATION_WORKLOAD, tempKubeconfigPath, catalog); if (releaseName == null) { releaseName = histories.findByCatalogIdAndClusterNameAndNamespaceAndActionTypeOrderByExecutedAtDesc( catalog.getId(), clusterName, namespace, kr.co.mcmp.softwarecatalog.application.constants.ActionType.INSTALL) @@ -135,7 +136,7 @@ public void uninstallApplication(String namespace, String clusterName, SoftwareC log.warn("Installed release was not found. Trying chart name as release name: {}", releaseName); } - runHelmUninstallCli(releaseName, DEFAULT_HELM_NAMESPACE, tempKubeconfigPath); + runHelmUninstallCli(releaseName, KubernetesNamespaces.APPLICATION_WORKLOAD, tempKubeconfigPath); releaseIngressRules(namespace, clusterName, catalog.getId(), releaseName); log.info("Application uninstall completed: {}", releaseName); } catch (Exception e) { @@ -151,11 +152,13 @@ private String getInstalledReleaseManifest(String namespace, String clusterName, try { String kubeconfigYaml = getKubeconfigForCluster(namespace, clusterName); tempKubeconfigPath = createTempKubeconfigFile(kubeconfigYaml); - String releaseName = findInstalledReleaseName(DEFAULT_HELM_NAMESPACE, tempKubeconfigPath, catalog); + String releaseName = findInstalledReleaseName( + KubernetesNamespaces.APPLICATION_WORKLOAD, tempKubeconfigPath, catalog); if (releaseName == null) { throw new RuntimeException("Installed Helm release was not found"); } - return runHelmGetManifestCli(releaseName, DEFAULT_HELM_NAMESPACE, tempKubeconfigPath); + return runHelmGetManifestCli( + releaseName, KubernetesNamespaces.APPLICATION_WORKLOAD, tempKubeconfigPath); } finally { deleteTempKubeconfig(tempKubeconfigPath); } @@ -309,7 +312,11 @@ private List parseWorkloads(String manifest, boolean includeDaemonS } String namespace = stringAt(doc.content(), "metadata", "namespace"); Integer replicas = integerAt(doc.content(), "spec", "replicas"); - workloads.add(new WorkloadRef(doc.kind(), name, namespace != null ? namespace : DEFAULT_HELM_NAMESPACE, replicas)); + workloads.add(new WorkloadRef( + doc.kind(), + name, + namespace != null ? namespace : KubernetesNamespaces.APPLICATION_WORKLOAD, + replicas)); } return workloads; } @@ -327,7 +334,12 @@ private List parseHpas(String manifest, List workloads) { String namespace = stringAt(doc.content(), "metadata", "namespace"); String targetKind = stringAt(doc.content(), "spec", "scaleTargetRef", "kind"); String targetName = stringAt(doc.content(), "spec", "scaleTargetRef", "name"); - HpaRef hpa = new HpaRef(name, namespace != null ? namespace : DEFAULT_HELM_NAMESPACE, targetKind, targetName, doc.yaml()); + HpaRef hpa = new HpaRef( + name, + namespace != null ? namespace : KubernetesNamespaces.APPLICATION_WORKLOAD, + targetKind, + targetName, + doc.yaml()); if (workloads.stream().anyMatch(hpa::targets)) { hpas.add(hpa); } diff --git a/src/main/resources/static/assets/ApplicationRepository-BFYuzGXK.js b/src/main/resources/static/assets/ApplicationRepository-BFYuzGXK.js new file mode 100644 index 00000000..c7c5e889 --- /dev/null +++ b/src/main/resources/static/assets/ApplicationRepository-BFYuzGXK.js @@ -0,0 +1 @@ +import{I as _}from"./IconPlus-B06YAus6.js";import{d as u,E as m,r as v,g as y,c as i,a as e,b as n,u as r,e as f,m as g,G as h,o,s as b,H as w,R}from"./index-BKFNv1Gc.js";import"./createVueComponent-DNPdC8og.js";const x={class:"page"},k={class:"page-wrapper"},C={key:0,class:"page-header d-print-none"},V={class:"container-xxl"},N={class:"row g-2 align-items-center"},B={class:"col-auto ms-auto"},E={class:"btn-list"},I={class:"page-body"},L={class:"container-xxl"},z={class:"row"},A={class:"col-lg-12"},P=u({__name:"ApplicationRepository",setup(D){const c=m(),a=v(null),l=y(()=>c.name==="repositoryList"),d=()=>{var t,s;(s=(t=a.value)==null?void 0:t.startCreate)==null||s.call(t)};return(t,s)=>(o(),i("div",x,[e("div",k,[l.value?(o(),i("div",C,[e("div",V,[e("div",N,[s[1]||(s[1]=e("div",{class:"col d-flex"},[e("h2",{class:"page-title"},"Repository")],-1)),e("div",B,[e("div",E,[e("button",{type:"button",class:"btn btn-outline-primary page-header-action-btn","data-bs-toggle":"modal","data-bs-target":"#repositoryForm",onClick:d},[n(r(_),{class:"icon icon-tabler icon-tabler-plus",size:20,"stroke-width":"1"}),s[0]||(s[0]=f(" New Repository "))])])])])])])):g("",!0),e("div",I,[e("div",L,[e("div",z,[e("div",A,[n(r(R),null,{default:h(({Component:p})=>[(o(),b(w(p),{ref_key:"repositoryViewRef",ref:a},null,512))]),_:1})])])])])])]))}});export{P as default}; diff --git a/src/main/resources/static/assets/ApplicationRepository-BtCrZbPI.js b/src/main/resources/static/assets/ApplicationRepository-BtCrZbPI.js new file mode 100644 index 00000000..a68588f6 --- /dev/null +++ b/src/main/resources/static/assets/ApplicationRepository-BtCrZbPI.js @@ -0,0 +1 @@ +import{I as _}from"./IconPlus-CyRAtLeE.js";import{d as u,E as m,r as v,g as y,c as i,a as e,b as n,u as r,e as f,m as g,G as h,o,s as b,H as w,R}from"./index-8PPGy_cS.js";import"./createVueComponent-Czx6MsN9.js";const x={class:"page"},k={class:"page-wrapper"},C={key:0,class:"page-header d-print-none"},V={class:"container-xxl"},N={class:"row g-2 align-items-center"},B={class:"col-auto ms-auto"},E={class:"btn-list"},I={class:"page-body"},L={class:"container-xxl"},z={class:"row"},A={class:"col-lg-12"},P=u({__name:"ApplicationRepository",setup(D){const c=m(),a=v(null),l=y(()=>c.name==="repositoryList"),d=()=>{var t,s;(s=(t=a.value)==null?void 0:t.startCreate)==null||s.call(t)};return(t,s)=>(o(),i("div",x,[e("div",k,[l.value?(o(),i("div",C,[e("div",V,[e("div",N,[s[1]||(s[1]=e("div",{class:"col d-flex"},[e("h2",{class:"page-title"},"Repository")],-1)),e("div",B,[e("div",E,[e("button",{type:"button",class:"btn btn-outline-primary page-header-action-btn","data-bs-toggle":"modal","data-bs-target":"#repositoryForm",onClick:d},[n(r(_),{class:"icon icon-tabler icon-tabler-plus",size:20,"stroke-width":"1"}),s[0]||(s[0]=f(" New Repository "))])])])])])])):g("",!0),e("div",I,[e("div",L,[e("div",z,[e("div",A,[n(r(R),null,{default:h(({Component:p})=>[(o(),b(w(p),{ref_key:"repositoryViewRef",ref:a},null,512))]),_:1})])])])])])]))}});export{P as default}; diff --git a/src/main/resources/static/assets/ApplicationRepository-DUwHTE2E.js b/src/main/resources/static/assets/ApplicationRepository-DUwHTE2E.js new file mode 100644 index 00000000..a7a1df26 --- /dev/null +++ b/src/main/resources/static/assets/ApplicationRepository-DUwHTE2E.js @@ -0,0 +1 @@ +import{I as _}from"./IconPlus-CFf7AFLH.js";import{d as u,E as m,r as v,g as y,c as i,a as e,b as n,u as r,e as f,m as g,G as h,o,s as b,H as w,R}from"./index-DKle5_5b.js";import"./createVueComponent-l3sgX4hZ.js";const x={class:"page"},k={class:"page-wrapper"},C={key:0,class:"page-header d-print-none"},V={class:"container-xxl"},N={class:"row g-2 align-items-center"},B={class:"col-auto ms-auto"},E={class:"btn-list"},I={class:"page-body"},L={class:"container-xxl"},z={class:"row"},A={class:"col-lg-12"},P=u({__name:"ApplicationRepository",setup(D){const c=m(),a=v(null),l=y(()=>c.name==="repositoryList"),d=()=>{var t,s;(s=(t=a.value)==null?void 0:t.startCreate)==null||s.call(t)};return(t,s)=>(o(),i("div",x,[e("div",k,[l.value?(o(),i("div",C,[e("div",V,[e("div",N,[s[1]||(s[1]=e("div",{class:"col d-flex"},[e("h2",{class:"page-title"},"Repository")],-1)),e("div",B,[e("div",E,[e("button",{type:"button",class:"btn btn-outline-primary page-header-action-btn","data-bs-toggle":"modal","data-bs-target":"#repositoryForm",onClick:d},[n(r(_),{class:"icon icon-tabler icon-tabler-plus",size:20,"stroke-width":"1"}),s[0]||(s[0]=f(" New Repository "))])])])])])])):g("",!0),e("div",I,[e("div",L,[e("div",z,[e("div",A,[n(r(R),null,{default:h(({Component:p})=>[(o(),b(w(p),{ref_key:"repositoryViewRef",ref:a},null,512))]),_:1})])])])])])]))}});export{P as default}; diff --git a/src/main/resources/static/assets/ApplicationRepository-DuzlT9V3.js b/src/main/resources/static/assets/ApplicationRepository-DuzlT9V3.js new file mode 100644 index 00000000..2c06fd3f --- /dev/null +++ b/src/main/resources/static/assets/ApplicationRepository-DuzlT9V3.js @@ -0,0 +1 @@ +import{I as _}from"./IconPlus-BCHYOAFu.js";import{d as u,E as m,r as v,g as y,c as i,a as e,b as n,u as r,e as f,m as g,G as h,o,s as b,H as w,R}from"./index-DU977P1k.js";import"./createVueComponent-Bt7iWPgv.js";const x={class:"page"},k={class:"page-wrapper"},C={key:0,class:"page-header d-print-none"},V={class:"container-xxl"},N={class:"row g-2 align-items-center"},B={class:"col-auto ms-auto"},E={class:"btn-list"},I={class:"page-body"},L={class:"container-xxl"},z={class:"row"},A={class:"col-lg-12"},P=u({__name:"ApplicationRepository",setup(D){const c=m(),a=v(null),l=y(()=>c.name==="repositoryList"),d=()=>{var t,s;(s=(t=a.value)==null?void 0:t.startCreate)==null||s.call(t)};return(t,s)=>(o(),i("div",x,[e("div",k,[l.value?(o(),i("div",C,[e("div",V,[e("div",N,[s[1]||(s[1]=e("div",{class:"col d-flex"},[e("h2",{class:"page-title"},"Repository")],-1)),e("div",B,[e("div",E,[e("button",{type:"button",class:"btn btn-outline-primary page-header-action-btn","data-bs-toggle":"modal","data-bs-target":"#repositoryForm",onClick:d},[n(r(_),{class:"icon icon-tabler icon-tabler-plus",size:20,"stroke-width":"1"}),s[0]||(s[0]=f(" New Repository "))])])])])])])):g("",!0),e("div",I,[e("div",L,[e("div",z,[e("div",A,[n(r(R),null,{default:h(({Component:p})=>[(o(),b(w(p),{ref_key:"repositoryViewRef",ref:a},null,512))]),_:1})])])])])])]))}});export{P as default}; diff --git a/src/main/resources/static/assets/ApplicationStatus-B3ZUl1H1.js b/src/main/resources/static/assets/ApplicationStatus-B3ZUl1H1.js new file mode 100644 index 00000000..2220379f --- /dev/null +++ b/src/main/resources/static/assets/ApplicationStatus-B3ZUl1H1.js @@ -0,0 +1,57 @@ +import{d as B,f as F,g as U,r,c as $,a as t,e as j,t as x,m as et,j as N,v as z,F as q,k as G,l as V,o as A,w as at,p as ot,n as st,i as nt,x as it,h as lt,b as L,q as dt,u as rt}from"./index-BKFNv1Gc.js";import{i as ct,g as ut,b as pt,A as mt,a as vt}from"./applicationDetailModal-CKm2tmzu.js";import{_ as bt}from"./Tabulator.vue_vue_type_style_index_0_lang-DYWrT5tk.js";import{n as ft,r as gt,o as yt,p as _t}from"./softwareCatalog-DuMGACG8.js";import{_ as St}from"./_plugin-vue_export-helper-DlAUqK2U.js";import"./createVueComponent-DNPdC8og.js";import"./request-D9joEmfF.js";const wt={class:"modal",id:"action-confirm",tabindex:"-1"},ht={class:"modal-dialog modal-lg",role:"document"},It={class:"modal-content"},Rt={class:"modal-header"},$t={class:"modal-title"},At={key:0},Ct={class:"modal-body",style:{"max-height":"calc(100vh - 200px)","overflow-y":"auto"}},kt={class:"mb-3"},xt=["value"],Nt={class:"mb-3"},Lt={class:"modal-footer d-flex justify-content-between"},Tt=B({__name:"applicationActionConfirm",props:{title:{},applicationStatusId:{},type:{},applicationName:{}},emits:["getApplicationsStatusList"],setup(k,{expose:C,emit:I}){const _=F(),m=k,s=I,v=U(()=>m.title),b=U(()=>m.applicationStatusId),f=U(()=>m.type),g=r(""),S=r(""),n=()=>{g.value="",S.value=""},a=r([]),l=async w=>{const{data:d}=await ft(w);a.value=d},R=async()=>{var d,c;const w={operation:v.value,applicationStatusId:b.value,reason:g.value,detailReason:S.value};try{const{data:p}=await gt(w),y=p;y&&y.success!==!1&&!y.error?_.success(`${v.value} Action SUCCESS`):_.error((y==null?void 0:y.error)||`${v.value} Action FAIL`)}catch(p){_.error(((c=(d=p==null?void 0:p.response)==null?void 0:d.data)==null?void 0:c.message)||(p==null?void 0:p.message)||`${v.value} Action FAIL`)}finally{s("getApplicationsStatusList")}};return C({setInit:n,_getReasonList:l}),(w,d)=>(A(),$("div",wt,[t("div",ht,[t("div",It,[t("div",Rt,[t("h5",$t,[j(x(w.applicationName)+" "+x(v.value)+" ",1),f.value?(A(),$("span",At,"("+x(f.value)+")",1)):et("",!0)]),t("button",{type:"button",class:"btn-close","data-bs-dismiss":"modal","aria-label":"Close",onClick:n})]),t("div",Ct,[t("div",kt,[d[3]||(d[3]=t("label",{class:"form-label"},"Reason",-1)),N(t("select",{class:"form-select","onUpdate:modelValue":d[0]||(d[0]=c=>g.value=c)},[d[2]||(d[2]=t("option",{value:""},"Select Reason",-1)),(A(!0),$(q,null,G(a.value,c=>(A(),$("option",{value:c.label,key:c.label},x(c.label),9,xt))),128))],512),[[z,g.value]])]),t("div",Nt,[d[4]||(d[4]=t("label",{class:"form-label"},"Detail Reason",-1)),d[5]||(d[5]=t("p",{class:"text-muted"}," Please enter a detail reason ",-1)),N(t("textarea",{class:"form-control",rows:"10",placeholder:"Detail Reason","onUpdate:modelValue":d[1]||(d[1]=c=>S.value=c)},null,512),[[V,S.value]])])]),t("div",Lt,[t("a",{class:"btn btn-link link-secondary","data-bs-dismiss":"modal",onClick:n}," Cancel "),t("div",null,[t("button",{class:"btn btn-primary ms-auto","data-bs-dismiss":"modal",onClick:R},x(v.value),1)])])])])]))}}),Dt={class:"modal modal-blur fade",id:"rating-modal",tabindex:"-1",role:"dialog","aria-hidden":"true"},Mt={class:"modal-dialog modal-dialog-centered",role:"document"},Ut={class:"modal-content"},Et={class:"modal-body"},Vt={class:"mb-3"},Bt={class:"rating-stars"},Ft=["onClick"],qt={class:"mb-3"},Pt={class:"mb-3"},Ot={class:"mb-3"},Wt={class:"mb-3"},jt={class:"modal-footer"},zt=["disabled"],Gt=B({__name:"applicationRatingModal",props:{catalogId:{},applicationName:{}},emits:["ratingSubmitted"],setup(k,{emit:C}){const I=k,_=C,m=F(),s=r({rating:0,category:"",detailedComments:"",name:"",email:""}),v=n=>{s.value.rating=n},b=U(()=>s.value.rating>0&&s.value.category&&s.value.detailedComments&&s.value.name&&s.value.email),f=()=>{s.value={rating:0,category:"",detailedComments:"",name:"",email:""}},g=()=>{const n=document.getElementById("rating-modal");if(n)try{if(window.bootstrap&&window.bootstrap.Modal){const a=window.bootstrap.Modal.getInstance(n);a?a.hide():new window.bootstrap.Modal(n).hide()}else n.style.display="none",n.classList.remove("show"),n.setAttribute("aria-hidden","true"),n.removeAttribute("aria-modal"),document.body.classList.remove("modal-open"),document.querySelectorAll(".modal-backdrop").forEach(l=>l.remove()),document.body.style.overflow="",document.body.style.paddingRight=""}catch(a){console.error("Error closing modal:",a),n.style.display="none",n.classList.remove("show"),document.body.classList.remove("modal-open"),document.querySelectorAll(".modal-backdrop").forEach(R=>R.remove())}},S=async()=>{if(!b.value){m.error("Please fill in all fields");return}try{const n={catalogId:I.catalogId,rating:s.value.rating,category:s.value.category,detailedComments:s.value.detailedComments,name:s.value.name,email:s.value.email,metadata:JSON.stringify({version:"1.0.0",environment:"production",applicationName:I.applicationName})};await yt(n)&&(m.success("Rating submitted successfully"),f(),_("ratingSubmitted"),g())}catch(n){console.error("Rating submission error:",n),m.error("Failed to submit rating")}};return(n,a)=>(A(),$("div",Dt,[t("div",Mt,[t("div",Ut,[a[11]||(a[11]=t("div",{class:"modal-header"},[t("h5",{class:"modal-title"},"Application Rating"),t("button",{type:"button",class:"btn-close","data-bs-dismiss":"modal","aria-label":"Close"})],-1)),t("div",Et,[t("form",{onSubmit:at(S,["prevent"])},[t("div",Vt,[a[4]||(a[4]=t("label",{class:"form-label"},"Overall Rating",-1)),t("div",Bt,[(A(),$(q,null,G(5,l=>t("span",{key:l,class:st(["star",{active:l<=s.value.rating}]),onClick:R=>v(l)}," ★ ",10,Ft)),64))])]),t("div",qt,[a[6]||(a[6]=t("label",{class:"form-label"},"Category",-1)),N(t("select",{"onUpdate:modelValue":a[0]||(a[0]=l=>s.value.category=l),class:"form-select",required:""},a[5]||(a[5]=[ot('',6)]),512),[[z,s.value.category]])]),t("div",Pt,[a[7]||(a[7]=t("label",{class:"form-label"},"Detailed Comments",-1)),N(t("textarea",{"onUpdate:modelValue":a[1]||(a[1]=l=>s.value.detailedComments=l),class:"form-control",rows:"4",placeholder:"Enter detailed comments",required:""},null,512),[[V,s.value.detailedComments]])]),t("div",Ot,[a[8]||(a[8]=t("label",{class:"form-label"},"Name",-1)),N(t("input",{"onUpdate:modelValue":a[2]||(a[2]=l=>s.value.name=l),type:"text",class:"form-control",placeholder:"Enter your name",required:""},null,512),[[V,s.value.name]])]),t("div",Wt,[a[9]||(a[9]=t("label",{class:"form-label"},"Email",-1)),N(t("input",{"onUpdate:modelValue":a[3]||(a[3]=l=>s.value.email=l),type:"email",class:"form-control",placeholder:"Enter your email",required:""},null,512),[[V,s.value.email]])])],32)]),t("div",jt,[a[10]||(a[10]=t("button",{type:"button",class:"btn btn-secondary","data-bs-dismiss":"modal"},"Cancel",-1)),t("button",{type:"button",class:"btn btn-primary",onClick:S,disabled:!b.value},"Submit",8,zt)])])])]))}}),Kt=St(Gt,[["__scopeId","data-v-714cdadf"]]),Ht={class:"card w-100"},W="application-status-detail-modal",Jt=B({__name:"applicationStatusList",props:{nsId:{default:""}},emits:["refresh-time-updated"],setup(k,{expose:C,emit:I}){const _=F(),m=k,s=I,v=window.self!==window.top;let b=!1,f=0;const g=r([]),S=r([]),n=r(""),a=r(""),l=r(0),R=r(""),w=r(""),d=r(0);r(!1);const c=r(0),p=r(),y=r();nt(async()=>{b=!0,H(),await T()}),it(()=>{f+=1}),lt(()=>m.nsId,async(e,o)=>{var i;e!==o&&(f+=1,g.value=[],l.value=0,c.value=0,R.value="",w.value="",d.value=0,(i=p.value)==null||i.resetData(),b&&await T())});const T=async()=>{const e=++f,o=String(m.nsId||"").trim();try{if(K(),v&&!o){g.value=[];return}const{data:i}=await _t(o||void 0);if(e!==f||o!==String(m.nsId||"").trim())return;i?g.value=i:g.value=[]}catch{if(e!==f)return;_.error("Unable to retrieve data")}},K=()=>{const e=new Date,o={year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1};n.value=e.toLocaleDateString("ko-KR",o),s("refresh-time-updated",n.value)},H=()=>{S.value=[{title:"Infra",width:230,minWidth:180,formatter:J,cellClick:function(e,o){E(o)}},{title:"Application",field:"applicationName",width:180,minWidth:150,cellClick:function(e,o){E(o)},formatter:function(e){return`
${e.getValue()}
`}},{title:"Status",width:210,minWidth:190,formatter:X,cellClick:function(e,o){E(o)}},{title:"CheckedAt",field:"checkedAt",width:210,minWidth:190,cellClick:function(e,o){E(o)},formatter:function(e){return`
${e.getValue()}
`}},{title:"Action",width:320,minWidth:300,headerSort:!1,formatter:Y,cellClick:async function(e,o){const i=e.target,u=i==null?void 0:i.getAttribute("id"),M=o.getRow().getData().status;if(P(M))return;const O=o.getRow().getData().id,Z=o.getRow().getData().deploymentType,tt=o.getRow().getData().applicationName,h={operation:"",applicationStatusId:O,deploymentType:Z,applicationName:tt};u==="start-btn"?(h.operation="START",await D(h)):u==="restart-btn"?(h.operation="RESTART",await D(h)):u==="stop-btn"?(h.operation="STOP",await D(h)):u==="uninstall-btn"?(h.operation="UNINSTALL",await D(h)):u==="rating-btn"&&(h.operation="RATING",d.value=o.getRow().getData().catalogId||1,await D(h))}}]},D=async e=>{a.value=e.operation,l.value=e.applicationStatusId,R.value=e.deploymentType,w.value=e.applicationName,y.value&&(y.value.setInit(),y.value._getReasonList(e.operation))},E=e=>{const o=e.getRow().getData(),i=o.deploymentHistoryId||o.deploymentId;if(!i)return;c.value=i;const u=document.getElementById(W);if(u)try{window.bootstrap&&window.bootstrap.Modal?(new window.bootstrap.Modal(u).show(),setTimeout(()=>{p.value&&p.value.refreshData(c.value)},100)):(u.style.display="block",u.classList.add("show"),document.body.classList.add("modal-open"),p.value&&p.value.refreshData(c.value))}catch(M){console.error("Error opening detail modal:",M)}},J=e=>{const o=e.getRow().getData(),i=o.deploymentType,u=Q(o);return` +
+

+ ${i} (${u}) +

+
+ `},Q=e=>e.deploymentType==="VM"?[e.namespace,e.mciId,e.vmId].filter(Boolean).join(" / ")||"-":e.deploymentType==="K8S"?[e.namespace,e.clusterName].filter(Boolean).join(" / ")||"-":e.vmId||e.clusterName||"-",P=e=>ct(e),X=e=>{const o=e.getRow().getData().status,i=ut(o);return` +
+ + ${i} + +
`},Y=e=>{const o=e.getRow().getData().status,i=P(o)?"disabled":"",u=String(o||"").trim().toUpperCase();return` +
+ ${u==="STOP"||u==="STOPPED"?` + + `:` + + + `} + + +
`};return C({refresh:T}),(e,o)=>(A(),$(q,null,[t("div",Ht,[L(bt,{columns:S.value,"table-data":g.value},null,8,["columns","table-data"])]),L(Tt,{ref_key:"applicationActionConfirmModalRef",ref:y,title:a.value,applicationStatusId:l.value,type:R.value,applicationName:w.value,onGetApplicationsStatusList:T},null,8,["title","applicationStatusId","type","applicationName"]),L(Kt,{catalogId:d.value,applicationName:w.value,onRatingSubmitted:T},null,8,["catalogId","applicationName"]),L(mt,{ref_key:"applicationDetailModalRef",ref:p,"modal-id":W,deploymentId:c.value},null,8,["deploymentId"])],64))}}),Qt={class:"page"},Xt={class:"page-wrapper"},Yt={class:"page-header d-print-none"},Zt={class:"container-xxl"},te={class:"row g-2 align-items-center"},ee={class:"col-auto ms-auto"},ae={class:"btn-list"},oe={class:"me-2 d-none d-md-inline"},se={class:"page-body"},ne={class:"container-xxl"},ie={class:"row"},le={class:"col-lg-12"},be=B({__name:"ApplicationStatus",setup(k){const C=dt(),I=U(()=>C.getNsId()||""),_=r(""),m=r(null),s=()=>{var v;(v=m.value)==null||v.refresh()};return(v,b)=>(A(),$("div",Qt,[t("div",Xt,[t("div",Yt,[t("div",Zt,[t("div",te,[b[2]||(b[2]=t("div",{class:"col d-flex"},[t("h2",{class:"page-title"},"App Status")],-1)),t("div",ee,[t("div",ae,[t("span",oe,x(_.value),1),t("button",{type:"button",class:"btn btn-outline-primary page-header-action-btn",onClick:s},[L(rt(vt),{class:"icon icon-tabler",size:20,"stroke-width":"1"}),b[1]||(b[1]=j(" Refresh "))])])])])])]),t("div",se,[t("div",ne,[t("div",ie,[t("div",le,[L(Jt,{ref_key:"applicationStatusListRef",ref:m,"ns-id":I.value,onRefreshTimeUpdated:b[0]||(b[0]=f=>_.value=f)},null,8,["ns-id"])])])])])])]))}});export{be as default}; diff --git a/src/main/resources/static/assets/ApplicationStatus-D536zrb9.js b/src/main/resources/static/assets/ApplicationStatus-D536zrb9.js new file mode 100644 index 00000000..afccf5e0 --- /dev/null +++ b/src/main/resources/static/assets/ApplicationStatus-D536zrb9.js @@ -0,0 +1,57 @@ +import{d as B,f as F,g as U,r,c as $,a as t,e as j,t as x,m as et,j as N,v as z,F as q,k as G,l as V,o as A,w as at,p as ot,n as st,i as nt,x as it,h as lt,b as L,q as dt,u as rt}from"./index-DKle5_5b.js";import{i as ct,g as ut,b as pt,A as mt,a as vt}from"./applicationDetailModal-D8U6ml02.js";import{_ as bt}from"./Tabulator.vue_vue_type_style_index_0_lang-BwLOthig.js";import{n as ft,r as gt,o as yt,p as _t}from"./softwareCatalog-DbmZz9hR.js";import{_ as St}from"./_plugin-vue_export-helper-DlAUqK2U.js";import"./createVueComponent-l3sgX4hZ.js";import"./request-DSShymva.js";const wt={class:"modal",id:"action-confirm",tabindex:"-1"},ht={class:"modal-dialog modal-lg",role:"document"},It={class:"modal-content"},Rt={class:"modal-header"},$t={class:"modal-title"},At={key:0},Ct={class:"modal-body",style:{"max-height":"calc(100vh - 200px)","overflow-y":"auto"}},kt={class:"mb-3"},xt=["value"],Nt={class:"mb-3"},Lt={class:"modal-footer d-flex justify-content-between"},Tt=B({__name:"applicationActionConfirm",props:{title:{},applicationStatusId:{},type:{},applicationName:{}},emits:["getApplicationsStatusList"],setup(k,{expose:C,emit:I}){const _=F(),m=k,s=I,v=U(()=>m.title),b=U(()=>m.applicationStatusId),f=U(()=>m.type),g=r(""),S=r(""),n=()=>{g.value="",S.value=""},a=r([]),l=async w=>{const{data:d}=await ft(w);a.value=d},R=async()=>{var d,c;const w={operation:v.value,applicationStatusId:b.value,reason:g.value,detailReason:S.value};try{const{data:p}=await gt(w),y=p;y&&y.success!==!1&&!y.error?_.success(`${v.value} Action SUCCESS`):_.error((y==null?void 0:y.error)||`${v.value} Action FAIL`)}catch(p){_.error(((c=(d=p==null?void 0:p.response)==null?void 0:d.data)==null?void 0:c.message)||(p==null?void 0:p.message)||`${v.value} Action FAIL`)}finally{s("getApplicationsStatusList")}};return C({setInit:n,_getReasonList:l}),(w,d)=>(A(),$("div",wt,[t("div",ht,[t("div",It,[t("div",Rt,[t("h5",$t,[j(x(w.applicationName)+" "+x(v.value)+" ",1),f.value?(A(),$("span",At,"("+x(f.value)+")",1)):et("",!0)]),t("button",{type:"button",class:"btn-close","data-bs-dismiss":"modal","aria-label":"Close",onClick:n})]),t("div",Ct,[t("div",kt,[d[3]||(d[3]=t("label",{class:"form-label"},"Reason",-1)),N(t("select",{class:"form-select","onUpdate:modelValue":d[0]||(d[0]=c=>g.value=c)},[d[2]||(d[2]=t("option",{value:""},"Select Reason",-1)),(A(!0),$(q,null,G(a.value,c=>(A(),$("option",{value:c.label,key:c.label},x(c.label),9,xt))),128))],512),[[z,g.value]])]),t("div",Nt,[d[4]||(d[4]=t("label",{class:"form-label"},"Detail Reason",-1)),d[5]||(d[5]=t("p",{class:"text-muted"}," Please enter a detail reason ",-1)),N(t("textarea",{class:"form-control",rows:"10",placeholder:"Detail Reason","onUpdate:modelValue":d[1]||(d[1]=c=>S.value=c)},null,512),[[V,S.value]])])]),t("div",Lt,[t("a",{class:"btn btn-link link-secondary","data-bs-dismiss":"modal",onClick:n}," Cancel "),t("div",null,[t("button",{class:"btn btn-primary ms-auto","data-bs-dismiss":"modal",onClick:R},x(v.value),1)])])])])]))}}),Dt={class:"modal modal-blur fade",id:"rating-modal",tabindex:"-1",role:"dialog","aria-hidden":"true"},Mt={class:"modal-dialog modal-dialog-centered",role:"document"},Ut={class:"modal-content"},Et={class:"modal-body"},Vt={class:"mb-3"},Bt={class:"rating-stars"},Ft=["onClick"],qt={class:"mb-3"},Pt={class:"mb-3"},Ot={class:"mb-3"},Wt={class:"mb-3"},jt={class:"modal-footer"},zt=["disabled"],Gt=B({__name:"applicationRatingModal",props:{catalogId:{},applicationName:{}},emits:["ratingSubmitted"],setup(k,{emit:C}){const I=k,_=C,m=F(),s=r({rating:0,category:"",detailedComments:"",name:"",email:""}),v=n=>{s.value.rating=n},b=U(()=>s.value.rating>0&&s.value.category&&s.value.detailedComments&&s.value.name&&s.value.email),f=()=>{s.value={rating:0,category:"",detailedComments:"",name:"",email:""}},g=()=>{const n=document.getElementById("rating-modal");if(n)try{if(window.bootstrap&&window.bootstrap.Modal){const a=window.bootstrap.Modal.getInstance(n);a?a.hide():new window.bootstrap.Modal(n).hide()}else n.style.display="none",n.classList.remove("show"),n.setAttribute("aria-hidden","true"),n.removeAttribute("aria-modal"),document.body.classList.remove("modal-open"),document.querySelectorAll(".modal-backdrop").forEach(l=>l.remove()),document.body.style.overflow="",document.body.style.paddingRight=""}catch(a){console.error("Error closing modal:",a),n.style.display="none",n.classList.remove("show"),document.body.classList.remove("modal-open"),document.querySelectorAll(".modal-backdrop").forEach(R=>R.remove())}},S=async()=>{if(!b.value){m.error("Please fill in all fields");return}try{const n={catalogId:I.catalogId,rating:s.value.rating,category:s.value.category,detailedComments:s.value.detailedComments,name:s.value.name,email:s.value.email,metadata:JSON.stringify({version:"1.0.0",environment:"production",applicationName:I.applicationName})};await yt(n)&&(m.success("Rating submitted successfully"),f(),_("ratingSubmitted"),g())}catch(n){console.error("Rating submission error:",n),m.error("Failed to submit rating")}};return(n,a)=>(A(),$("div",Dt,[t("div",Mt,[t("div",Ut,[a[11]||(a[11]=t("div",{class:"modal-header"},[t("h5",{class:"modal-title"},"Application Rating"),t("button",{type:"button",class:"btn-close","data-bs-dismiss":"modal","aria-label":"Close"})],-1)),t("div",Et,[t("form",{onSubmit:at(S,["prevent"])},[t("div",Vt,[a[4]||(a[4]=t("label",{class:"form-label"},"Overall Rating",-1)),t("div",Bt,[(A(),$(q,null,G(5,l=>t("span",{key:l,class:st(["star",{active:l<=s.value.rating}]),onClick:R=>v(l)}," ★ ",10,Ft)),64))])]),t("div",qt,[a[6]||(a[6]=t("label",{class:"form-label"},"Category",-1)),N(t("select",{"onUpdate:modelValue":a[0]||(a[0]=l=>s.value.category=l),class:"form-select",required:""},a[5]||(a[5]=[ot('',6)]),512),[[z,s.value.category]])]),t("div",Pt,[a[7]||(a[7]=t("label",{class:"form-label"},"Detailed Comments",-1)),N(t("textarea",{"onUpdate:modelValue":a[1]||(a[1]=l=>s.value.detailedComments=l),class:"form-control",rows:"4",placeholder:"Enter detailed comments",required:""},null,512),[[V,s.value.detailedComments]])]),t("div",Ot,[a[8]||(a[8]=t("label",{class:"form-label"},"Name",-1)),N(t("input",{"onUpdate:modelValue":a[2]||(a[2]=l=>s.value.name=l),type:"text",class:"form-control",placeholder:"Enter your name",required:""},null,512),[[V,s.value.name]])]),t("div",Wt,[a[9]||(a[9]=t("label",{class:"form-label"},"Email",-1)),N(t("input",{"onUpdate:modelValue":a[3]||(a[3]=l=>s.value.email=l),type:"email",class:"form-control",placeholder:"Enter your email",required:""},null,512),[[V,s.value.email]])])],32)]),t("div",jt,[a[10]||(a[10]=t("button",{type:"button",class:"btn btn-secondary","data-bs-dismiss":"modal"},"Cancel",-1)),t("button",{type:"button",class:"btn btn-primary",onClick:S,disabled:!b.value},"Submit",8,zt)])])])]))}}),Kt=St(Gt,[["__scopeId","data-v-714cdadf"]]),Ht={class:"card w-100"},W="application-status-detail-modal",Jt=B({__name:"applicationStatusList",props:{nsId:{default:""}},emits:["refresh-time-updated"],setup(k,{expose:C,emit:I}){const _=F(),m=k,s=I,v=window.self!==window.top;let b=!1,f=0;const g=r([]),S=r([]),n=r(""),a=r(""),l=r(0),R=r(""),w=r(""),d=r(0);r(!1);const c=r(0),p=r(),y=r();nt(async()=>{b=!0,H(),await T()}),it(()=>{f+=1}),lt(()=>m.nsId,async(e,o)=>{var i;e!==o&&(f+=1,g.value=[],l.value=0,c.value=0,R.value="",w.value="",d.value=0,(i=p.value)==null||i.resetData(),b&&await T())});const T=async()=>{const e=++f,o=String(m.nsId||"").trim();try{if(K(),v&&!o){g.value=[];return}const{data:i}=await _t(o||void 0);if(e!==f||o!==String(m.nsId||"").trim())return;i?g.value=i:g.value=[]}catch{if(e!==f)return;_.error("Unable to retrieve data")}},K=()=>{const e=new Date,o={year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1};n.value=e.toLocaleDateString("ko-KR",o),s("refresh-time-updated",n.value)},H=()=>{S.value=[{title:"Infra",width:230,minWidth:180,formatter:J,cellClick:function(e,o){E(o)}},{title:"Application",field:"applicationName",width:180,minWidth:150,cellClick:function(e,o){E(o)},formatter:function(e){return`
${e.getValue()}
`}},{title:"Status",width:210,minWidth:190,formatter:X,cellClick:function(e,o){E(o)}},{title:"CheckedAt",field:"checkedAt",width:210,minWidth:190,cellClick:function(e,o){E(o)},formatter:function(e){return`
${e.getValue()}
`}},{title:"Action",width:320,minWidth:300,headerSort:!1,formatter:Y,cellClick:async function(e,o){const i=e.target,u=i==null?void 0:i.getAttribute("id"),M=o.getRow().getData().status;if(P(M))return;const O=o.getRow().getData().id,Z=o.getRow().getData().deploymentType,tt=o.getRow().getData().applicationName,h={operation:"",applicationStatusId:O,deploymentType:Z,applicationName:tt};u==="start-btn"?(h.operation="START",await D(h)):u==="restart-btn"?(h.operation="RESTART",await D(h)):u==="stop-btn"?(h.operation="STOP",await D(h)):u==="uninstall-btn"?(h.operation="UNINSTALL",await D(h)):u==="rating-btn"&&(h.operation="RATING",d.value=o.getRow().getData().catalogId||1,await D(h))}}]},D=async e=>{a.value=e.operation,l.value=e.applicationStatusId,R.value=e.deploymentType,w.value=e.applicationName,y.value&&(y.value.setInit(),y.value._getReasonList(e.operation))},E=e=>{const o=e.getRow().getData(),i=o.deploymentHistoryId||o.deploymentId;if(!i)return;c.value=i;const u=document.getElementById(W);if(u)try{window.bootstrap&&window.bootstrap.Modal?(new window.bootstrap.Modal(u).show(),setTimeout(()=>{p.value&&p.value.refreshData(c.value)},100)):(u.style.display="block",u.classList.add("show"),document.body.classList.add("modal-open"),p.value&&p.value.refreshData(c.value))}catch(M){console.error("Error opening detail modal:",M)}},J=e=>{const o=e.getRow().getData(),i=o.deploymentType,u=Q(o);return` +
+

+ ${i} (${u}) +

+
+ `},Q=e=>e.deploymentType==="VM"?[e.namespace,e.mciId,e.vmId].filter(Boolean).join(" / ")||"-":e.deploymentType==="K8S"?[e.namespace,e.clusterName].filter(Boolean).join(" / ")||"-":e.vmId||e.clusterName||"-",P=e=>ct(e),X=e=>{const o=e.getRow().getData().status,i=ut(o);return` +
+ + ${i} + +
`},Y=e=>{const o=e.getRow().getData().status,i=P(o)?"disabled":"",u=String(o||"").trim().toUpperCase();return` +
+ ${u==="STOP"||u==="STOPPED"?` + + `:` + + + `} + + +
`};return C({refresh:T}),(e,o)=>(A(),$(q,null,[t("div",Ht,[L(bt,{columns:S.value,"table-data":g.value},null,8,["columns","table-data"])]),L(Tt,{ref_key:"applicationActionConfirmModalRef",ref:y,title:a.value,applicationStatusId:l.value,type:R.value,applicationName:w.value,onGetApplicationsStatusList:T},null,8,["title","applicationStatusId","type","applicationName"]),L(Kt,{catalogId:d.value,applicationName:w.value,onRatingSubmitted:T},null,8,["catalogId","applicationName"]),L(mt,{ref_key:"applicationDetailModalRef",ref:p,"modal-id":W,deploymentId:c.value},null,8,["deploymentId"])],64))}}),Qt={class:"page"},Xt={class:"page-wrapper"},Yt={class:"page-header d-print-none"},Zt={class:"container-xxl"},te={class:"row g-2 align-items-center"},ee={class:"col-auto ms-auto"},ae={class:"btn-list"},oe={class:"me-2 d-none d-md-inline"},se={class:"page-body"},ne={class:"container-xxl"},ie={class:"row"},le={class:"col-lg-12"},be=B({__name:"ApplicationStatus",setup(k){const C=dt(),I=U(()=>C.getNsId()||""),_=r(""),m=r(null),s=()=>{var v;(v=m.value)==null||v.refresh()};return(v,b)=>(A(),$("div",Qt,[t("div",Xt,[t("div",Yt,[t("div",Zt,[t("div",te,[b[2]||(b[2]=t("div",{class:"col d-flex"},[t("h2",{class:"page-title"},"App Status")],-1)),t("div",ee,[t("div",ae,[t("span",oe,x(_.value),1),t("button",{type:"button",class:"btn btn-outline-primary page-header-action-btn",onClick:s},[L(rt(vt),{class:"icon icon-tabler",size:20,"stroke-width":"1"}),b[1]||(b[1]=j(" Refresh "))])])])])])]),t("div",se,[t("div",ne,[t("div",ie,[t("div",le,[L(Jt,{ref_key:"applicationStatusListRef",ref:m,"ns-id":I.value,onRefreshTimeUpdated:b[0]||(b[0]=f=>_.value=f)},null,8,["ns-id"])])])])])])]))}});export{be as default}; diff --git a/src/main/resources/static/assets/ApplicationStatus-DPixrIJt.css b/src/main/resources/static/assets/ApplicationStatus-DPixrIJt.css new file mode 100644 index 00000000..3ab8456f --- /dev/null +++ b/src/main/resources/static/assets/ApplicationStatus-DPixrIJt.css @@ -0,0 +1 @@ +.rating-stars[data-v-714cdadf]{display:flex;gap:5px;margin-bottom:10px}.star[data-v-714cdadf]{font-size:24px;color:#ddd;cursor:pointer;transition:color .2s}.star[data-v-714cdadf]:hover,.star.active[data-v-714cdadf]{color:#ffc107}.star:hover~.star[data-v-714cdadf]{color:#ddd} diff --git a/src/main/resources/static/assets/ApplicationStatus-NBEpiqVW.js b/src/main/resources/static/assets/ApplicationStatus-NBEpiqVW.js new file mode 100644 index 00000000..29e7737e --- /dev/null +++ b/src/main/resources/static/assets/ApplicationStatus-NBEpiqVW.js @@ -0,0 +1,57 @@ +import{d as B,f as F,g as U,r,c as $,a as t,e as j,t as x,m as et,j as N,v as z,F as q,k as G,l as V,o as A,w as at,p as ot,n as st,i as nt,x as it,h as lt,b as L,q as dt,u as rt}from"./index-8PPGy_cS.js";import{i as ct,g as ut,b as pt,A as mt,a as vt}from"./applicationDetailModal-DKOvpn60.js";import{_ as bt}from"./Tabulator.vue_vue_type_style_index_0_lang-pkMkfUCQ.js";import{n as ft,r as gt,o as yt,p as _t}from"./softwareCatalog-DfwfQXi9.js";import{_ as St}from"./_plugin-vue_export-helper-DlAUqK2U.js";import"./createVueComponent-Czx6MsN9.js";import"./request-BD-3QCnG.js";const wt={class:"modal",id:"action-confirm",tabindex:"-1"},ht={class:"modal-dialog modal-lg",role:"document"},It={class:"modal-content"},Rt={class:"modal-header"},$t={class:"modal-title"},At={key:0},Ct={class:"modal-body",style:{"max-height":"calc(100vh - 200px)","overflow-y":"auto"}},kt={class:"mb-3"},xt=["value"],Nt={class:"mb-3"},Lt={class:"modal-footer d-flex justify-content-between"},Tt=B({__name:"applicationActionConfirm",props:{title:{},applicationStatusId:{},type:{},applicationName:{}},emits:["getApplicationsStatusList"],setup(k,{expose:C,emit:I}){const _=F(),m=k,s=I,v=U(()=>m.title),b=U(()=>m.applicationStatusId),f=U(()=>m.type),g=r(""),S=r(""),n=()=>{g.value="",S.value=""},a=r([]),l=async w=>{const{data:d}=await ft(w);a.value=d},R=async()=>{var d,c;const w={operation:v.value,applicationStatusId:b.value,reason:g.value,detailReason:S.value};try{const{data:p}=await gt(w),y=p;y&&y.success!==!1&&!y.error?_.success(`${v.value} Action SUCCESS`):_.error((y==null?void 0:y.error)||`${v.value} Action FAIL`)}catch(p){_.error(((c=(d=p==null?void 0:p.response)==null?void 0:d.data)==null?void 0:c.message)||(p==null?void 0:p.message)||`${v.value} Action FAIL`)}finally{s("getApplicationsStatusList")}};return C({setInit:n,_getReasonList:l}),(w,d)=>(A(),$("div",wt,[t("div",ht,[t("div",It,[t("div",Rt,[t("h5",$t,[j(x(w.applicationName)+" "+x(v.value)+" ",1),f.value?(A(),$("span",At,"("+x(f.value)+")",1)):et("",!0)]),t("button",{type:"button",class:"btn-close","data-bs-dismiss":"modal","aria-label":"Close",onClick:n})]),t("div",Ct,[t("div",kt,[d[3]||(d[3]=t("label",{class:"form-label"},"Reason",-1)),N(t("select",{class:"form-select","onUpdate:modelValue":d[0]||(d[0]=c=>g.value=c)},[d[2]||(d[2]=t("option",{value:""},"Select Reason",-1)),(A(!0),$(q,null,G(a.value,c=>(A(),$("option",{value:c.label,key:c.label},x(c.label),9,xt))),128))],512),[[z,g.value]])]),t("div",Nt,[d[4]||(d[4]=t("label",{class:"form-label"},"Detail Reason",-1)),d[5]||(d[5]=t("p",{class:"text-muted"}," Please enter a detail reason ",-1)),N(t("textarea",{class:"form-control",rows:"10",placeholder:"Detail Reason","onUpdate:modelValue":d[1]||(d[1]=c=>S.value=c)},null,512),[[V,S.value]])])]),t("div",Lt,[t("a",{class:"btn btn-link link-secondary","data-bs-dismiss":"modal",onClick:n}," Cancel "),t("div",null,[t("button",{class:"btn btn-primary ms-auto","data-bs-dismiss":"modal",onClick:R},x(v.value),1)])])])])]))}}),Dt={class:"modal modal-blur fade",id:"rating-modal",tabindex:"-1",role:"dialog","aria-hidden":"true"},Mt={class:"modal-dialog modal-dialog-centered",role:"document"},Ut={class:"modal-content"},Et={class:"modal-body"},Vt={class:"mb-3"},Bt={class:"rating-stars"},Ft=["onClick"],qt={class:"mb-3"},Pt={class:"mb-3"},Ot={class:"mb-3"},Wt={class:"mb-3"},jt={class:"modal-footer"},zt=["disabled"],Gt=B({__name:"applicationRatingModal",props:{catalogId:{},applicationName:{}},emits:["ratingSubmitted"],setup(k,{emit:C}){const I=k,_=C,m=F(),s=r({rating:0,category:"",detailedComments:"",name:"",email:""}),v=n=>{s.value.rating=n},b=U(()=>s.value.rating>0&&s.value.category&&s.value.detailedComments&&s.value.name&&s.value.email),f=()=>{s.value={rating:0,category:"",detailedComments:"",name:"",email:""}},g=()=>{const n=document.getElementById("rating-modal");if(n)try{if(window.bootstrap&&window.bootstrap.Modal){const a=window.bootstrap.Modal.getInstance(n);a?a.hide():new window.bootstrap.Modal(n).hide()}else n.style.display="none",n.classList.remove("show"),n.setAttribute("aria-hidden","true"),n.removeAttribute("aria-modal"),document.body.classList.remove("modal-open"),document.querySelectorAll(".modal-backdrop").forEach(l=>l.remove()),document.body.style.overflow="",document.body.style.paddingRight=""}catch(a){console.error("Error closing modal:",a),n.style.display="none",n.classList.remove("show"),document.body.classList.remove("modal-open"),document.querySelectorAll(".modal-backdrop").forEach(R=>R.remove())}},S=async()=>{if(!b.value){m.error("Please fill in all fields");return}try{const n={catalogId:I.catalogId,rating:s.value.rating,category:s.value.category,detailedComments:s.value.detailedComments,name:s.value.name,email:s.value.email,metadata:JSON.stringify({version:"1.0.0",environment:"production",applicationName:I.applicationName})};await yt(n)&&(m.success("Rating submitted successfully"),f(),_("ratingSubmitted"),g())}catch(n){console.error("Rating submission error:",n),m.error("Failed to submit rating")}};return(n,a)=>(A(),$("div",Dt,[t("div",Mt,[t("div",Ut,[a[11]||(a[11]=t("div",{class:"modal-header"},[t("h5",{class:"modal-title"},"Application Rating"),t("button",{type:"button",class:"btn-close","data-bs-dismiss":"modal","aria-label":"Close"})],-1)),t("div",Et,[t("form",{onSubmit:at(S,["prevent"])},[t("div",Vt,[a[4]||(a[4]=t("label",{class:"form-label"},"Overall Rating",-1)),t("div",Bt,[(A(),$(q,null,G(5,l=>t("span",{key:l,class:st(["star",{active:l<=s.value.rating}]),onClick:R=>v(l)}," ★ ",10,Ft)),64))])]),t("div",qt,[a[6]||(a[6]=t("label",{class:"form-label"},"Category",-1)),N(t("select",{"onUpdate:modelValue":a[0]||(a[0]=l=>s.value.category=l),class:"form-select",required:""},a[5]||(a[5]=[ot('',6)]),512),[[z,s.value.category]])]),t("div",Pt,[a[7]||(a[7]=t("label",{class:"form-label"},"Detailed Comments",-1)),N(t("textarea",{"onUpdate:modelValue":a[1]||(a[1]=l=>s.value.detailedComments=l),class:"form-control",rows:"4",placeholder:"Enter detailed comments",required:""},null,512),[[V,s.value.detailedComments]])]),t("div",Ot,[a[8]||(a[8]=t("label",{class:"form-label"},"Name",-1)),N(t("input",{"onUpdate:modelValue":a[2]||(a[2]=l=>s.value.name=l),type:"text",class:"form-control",placeholder:"Enter your name",required:""},null,512),[[V,s.value.name]])]),t("div",Wt,[a[9]||(a[9]=t("label",{class:"form-label"},"Email",-1)),N(t("input",{"onUpdate:modelValue":a[3]||(a[3]=l=>s.value.email=l),type:"email",class:"form-control",placeholder:"Enter your email",required:""},null,512),[[V,s.value.email]])])],32)]),t("div",jt,[a[10]||(a[10]=t("button",{type:"button",class:"btn btn-secondary","data-bs-dismiss":"modal"},"Cancel",-1)),t("button",{type:"button",class:"btn btn-primary",onClick:S,disabled:!b.value},"Submit",8,zt)])])])]))}}),Kt=St(Gt,[["__scopeId","data-v-714cdadf"]]),Ht={class:"card w-100"},W="application-status-detail-modal",Jt=B({__name:"applicationStatusList",props:{nsId:{default:""}},emits:["refresh-time-updated"],setup(k,{expose:C,emit:I}){const _=F(),m=k,s=I,v=window.self!==window.top;let b=!1,f=0;const g=r([]),S=r([]),n=r(""),a=r(""),l=r(0),R=r(""),w=r(""),d=r(0);r(!1);const c=r(0),p=r(),y=r();nt(async()=>{b=!0,H(),await T()}),it(()=>{f+=1}),lt(()=>m.nsId,async(e,o)=>{var i;e!==o&&(f+=1,g.value=[],l.value=0,c.value=0,R.value="",w.value="",d.value=0,(i=p.value)==null||i.resetData(),b&&await T())});const T=async()=>{const e=++f,o=String(m.nsId||"").trim();try{if(K(),v&&!o){g.value=[];return}const{data:i}=await _t(o||void 0);if(e!==f||o!==String(m.nsId||"").trim())return;i?g.value=i:g.value=[]}catch{if(e!==f)return;_.error("Unable to retrieve data")}},K=()=>{const e=new Date,o={year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1};n.value=e.toLocaleDateString("ko-KR",o),s("refresh-time-updated",n.value)},H=()=>{S.value=[{title:"Infra",width:230,minWidth:180,formatter:J,cellClick:function(e,o){E(o)}},{title:"Application",field:"applicationName",width:180,minWidth:150,cellClick:function(e,o){E(o)},formatter:function(e){return`
${e.getValue()}
`}},{title:"Status",width:210,minWidth:190,formatter:X,cellClick:function(e,o){E(o)}},{title:"CheckedAt",field:"checkedAt",width:210,minWidth:190,cellClick:function(e,o){E(o)},formatter:function(e){return`
${e.getValue()}
`}},{title:"Action",width:320,minWidth:300,headerSort:!1,formatter:Y,cellClick:async function(e,o){const i=e.target,u=i==null?void 0:i.getAttribute("id"),M=o.getRow().getData().status;if(P(M))return;const O=o.getRow().getData().id,Z=o.getRow().getData().deploymentType,tt=o.getRow().getData().applicationName,h={operation:"",applicationStatusId:O,deploymentType:Z,applicationName:tt};u==="start-btn"?(h.operation="START",await D(h)):u==="restart-btn"?(h.operation="RESTART",await D(h)):u==="stop-btn"?(h.operation="STOP",await D(h)):u==="uninstall-btn"?(h.operation="UNINSTALL",await D(h)):u==="rating-btn"&&(h.operation="RATING",d.value=o.getRow().getData().catalogId||1,await D(h))}}]},D=async e=>{a.value=e.operation,l.value=e.applicationStatusId,R.value=e.deploymentType,w.value=e.applicationName,y.value&&(y.value.setInit(),y.value._getReasonList(e.operation))},E=e=>{const o=e.getRow().getData(),i=o.deploymentHistoryId||o.deploymentId;if(!i)return;c.value=i;const u=document.getElementById(W);if(u)try{window.bootstrap&&window.bootstrap.Modal?(new window.bootstrap.Modal(u).show(),setTimeout(()=>{p.value&&p.value.refreshData(c.value)},100)):(u.style.display="block",u.classList.add("show"),document.body.classList.add("modal-open"),p.value&&p.value.refreshData(c.value))}catch(M){console.error("Error opening detail modal:",M)}},J=e=>{const o=e.getRow().getData(),i=o.deploymentType,u=Q(o);return` +
+

+ ${i} (${u}) +

+
+ `},Q=e=>e.deploymentType==="VM"?[e.namespace,e.mciId,e.vmId].filter(Boolean).join(" / ")||"-":e.deploymentType==="K8S"?[e.namespace,e.clusterName].filter(Boolean).join(" / ")||"-":e.vmId||e.clusterName||"-",P=e=>ct(e),X=e=>{const o=e.getRow().getData().status,i=ut(o);return` +
+ + ${i} + +
`},Y=e=>{const o=e.getRow().getData().status,i=P(o)?"disabled":"",u=String(o||"").trim().toUpperCase();return` +
+ ${u==="STOP"||u==="STOPPED"?` + + `:` + + + `} + + +
`};return C({refresh:T}),(e,o)=>(A(),$(q,null,[t("div",Ht,[L(bt,{columns:S.value,"table-data":g.value},null,8,["columns","table-data"])]),L(Tt,{ref_key:"applicationActionConfirmModalRef",ref:y,title:a.value,applicationStatusId:l.value,type:R.value,applicationName:w.value,onGetApplicationsStatusList:T},null,8,["title","applicationStatusId","type","applicationName"]),L(Kt,{catalogId:d.value,applicationName:w.value,onRatingSubmitted:T},null,8,["catalogId","applicationName"]),L(mt,{ref_key:"applicationDetailModalRef",ref:p,"modal-id":W,deploymentId:c.value},null,8,["deploymentId"])],64))}}),Qt={class:"page"},Xt={class:"page-wrapper"},Yt={class:"page-header d-print-none"},Zt={class:"container-xxl"},te={class:"row g-2 align-items-center"},ee={class:"col-auto ms-auto"},ae={class:"btn-list"},oe={class:"me-2 d-none d-md-inline"},se={class:"page-body"},ne={class:"container-xxl"},ie={class:"row"},le={class:"col-lg-12"},be=B({__name:"ApplicationStatus",setup(k){const C=dt(),I=U(()=>C.getNsId()||""),_=r(""),m=r(null),s=()=>{var v;(v=m.value)==null||v.refresh()};return(v,b)=>(A(),$("div",Qt,[t("div",Xt,[t("div",Yt,[t("div",Zt,[t("div",te,[b[2]||(b[2]=t("div",{class:"col d-flex"},[t("h2",{class:"page-title"},"App Status")],-1)),t("div",ee,[t("div",ae,[t("span",oe,x(_.value),1),t("button",{type:"button",class:"btn btn-outline-primary page-header-action-btn",onClick:s},[L(rt(vt),{class:"icon icon-tabler",size:20,"stroke-width":"1"}),b[1]||(b[1]=j(" Refresh "))])])])])])]),t("div",se,[t("div",ne,[t("div",ie,[t("div",le,[L(Jt,{ref_key:"applicationStatusListRef",ref:m,"ns-id":I.value,onRefreshTimeUpdated:b[0]||(b[0]=f=>_.value=f)},null,8,["ns-id"])])])])])])]))}});export{be as default}; diff --git a/src/main/resources/static/assets/ApplicationStatus-weJ1o5xY.js b/src/main/resources/static/assets/ApplicationStatus-weJ1o5xY.js new file mode 100644 index 00000000..389b4990 --- /dev/null +++ b/src/main/resources/static/assets/ApplicationStatus-weJ1o5xY.js @@ -0,0 +1,57 @@ +import{d as B,f as F,g as U,r,c as $,a as t,e as j,t as x,m as et,j as N,v as z,F as q,k as G,l as V,o as A,w as at,p as ot,n as st,i as nt,x as it,h as lt,b as L,q as dt,u as rt}from"./index-DU977P1k.js";import{i as ct,g as ut,b as pt,A as mt,a as vt}from"./applicationDetailModal-BPa-EzOB.js";import{_ as bt}from"./Tabulator.vue_vue_type_style_index_0_lang-COGEFirO.js";import{n as ft,r as gt,o as yt,p as _t}from"./softwareCatalog-VAKfe9v1.js";import{_ as St}from"./_plugin-vue_export-helper-DlAUqK2U.js";import"./createVueComponent-Bt7iWPgv.js";import"./request-jyImEBot.js";const wt={class:"modal",id:"action-confirm",tabindex:"-1"},ht={class:"modal-dialog modal-lg",role:"document"},It={class:"modal-content"},Rt={class:"modal-header"},$t={class:"modal-title"},At={key:0},Ct={class:"modal-body",style:{"max-height":"calc(100vh - 200px)","overflow-y":"auto"}},kt={class:"mb-3"},xt=["value"],Nt={class:"mb-3"},Lt={class:"modal-footer d-flex justify-content-between"},Tt=B({__name:"applicationActionConfirm",props:{title:{},applicationStatusId:{},type:{},applicationName:{}},emits:["getApplicationsStatusList"],setup(k,{expose:C,emit:I}){const _=F(),m=k,s=I,v=U(()=>m.title),b=U(()=>m.applicationStatusId),f=U(()=>m.type),g=r(""),S=r(""),n=()=>{g.value="",S.value=""},a=r([]),l=async w=>{const{data:d}=await ft(w);a.value=d},R=async()=>{var d,c;const w={operation:v.value,applicationStatusId:b.value,reason:g.value,detailReason:S.value};try{const{data:p}=await gt(w),y=p;y&&y.success!==!1&&!y.error?_.success(`${v.value} Action SUCCESS`):_.error((y==null?void 0:y.error)||`${v.value} Action FAIL`)}catch(p){_.error(((c=(d=p==null?void 0:p.response)==null?void 0:d.data)==null?void 0:c.message)||(p==null?void 0:p.message)||`${v.value} Action FAIL`)}finally{s("getApplicationsStatusList")}};return C({setInit:n,_getReasonList:l}),(w,d)=>(A(),$("div",wt,[t("div",ht,[t("div",It,[t("div",Rt,[t("h5",$t,[j(x(w.applicationName)+" "+x(v.value)+" ",1),f.value?(A(),$("span",At,"("+x(f.value)+")",1)):et("",!0)]),t("button",{type:"button",class:"btn-close","data-bs-dismiss":"modal","aria-label":"Close",onClick:n})]),t("div",Ct,[t("div",kt,[d[3]||(d[3]=t("label",{class:"form-label"},"Reason",-1)),N(t("select",{class:"form-select","onUpdate:modelValue":d[0]||(d[0]=c=>g.value=c)},[d[2]||(d[2]=t("option",{value:""},"Select Reason",-1)),(A(!0),$(q,null,G(a.value,c=>(A(),$("option",{value:c.label,key:c.label},x(c.label),9,xt))),128))],512),[[z,g.value]])]),t("div",Nt,[d[4]||(d[4]=t("label",{class:"form-label"},"Detail Reason",-1)),d[5]||(d[5]=t("p",{class:"text-muted"}," Please enter a detail reason ",-1)),N(t("textarea",{class:"form-control",rows:"10",placeholder:"Detail Reason","onUpdate:modelValue":d[1]||(d[1]=c=>S.value=c)},null,512),[[V,S.value]])])]),t("div",Lt,[t("a",{class:"btn btn-link link-secondary","data-bs-dismiss":"modal",onClick:n}," Cancel "),t("div",null,[t("button",{class:"btn btn-primary ms-auto","data-bs-dismiss":"modal",onClick:R},x(v.value),1)])])])])]))}}),Dt={class:"modal modal-blur fade",id:"rating-modal",tabindex:"-1",role:"dialog","aria-hidden":"true"},Mt={class:"modal-dialog modal-dialog-centered",role:"document"},Ut={class:"modal-content"},Et={class:"modal-body"},Vt={class:"mb-3"},Bt={class:"rating-stars"},Ft=["onClick"],qt={class:"mb-3"},Pt={class:"mb-3"},Ot={class:"mb-3"},Wt={class:"mb-3"},jt={class:"modal-footer"},zt=["disabled"],Gt=B({__name:"applicationRatingModal",props:{catalogId:{},applicationName:{}},emits:["ratingSubmitted"],setup(k,{emit:C}){const I=k,_=C,m=F(),s=r({rating:0,category:"",detailedComments:"",name:"",email:""}),v=n=>{s.value.rating=n},b=U(()=>s.value.rating>0&&s.value.category&&s.value.detailedComments&&s.value.name&&s.value.email),f=()=>{s.value={rating:0,category:"",detailedComments:"",name:"",email:""}},g=()=>{const n=document.getElementById("rating-modal");if(n)try{if(window.bootstrap&&window.bootstrap.Modal){const a=window.bootstrap.Modal.getInstance(n);a?a.hide():new window.bootstrap.Modal(n).hide()}else n.style.display="none",n.classList.remove("show"),n.setAttribute("aria-hidden","true"),n.removeAttribute("aria-modal"),document.body.classList.remove("modal-open"),document.querySelectorAll(".modal-backdrop").forEach(l=>l.remove()),document.body.style.overflow="",document.body.style.paddingRight=""}catch(a){console.error("Error closing modal:",a),n.style.display="none",n.classList.remove("show"),document.body.classList.remove("modal-open"),document.querySelectorAll(".modal-backdrop").forEach(R=>R.remove())}},S=async()=>{if(!b.value){m.error("Please fill in all fields");return}try{const n={catalogId:I.catalogId,rating:s.value.rating,category:s.value.category,detailedComments:s.value.detailedComments,name:s.value.name,email:s.value.email,metadata:JSON.stringify({version:"1.0.0",environment:"production",applicationName:I.applicationName})};await yt(n)&&(m.success("Rating submitted successfully"),f(),_("ratingSubmitted"),g())}catch(n){console.error("Rating submission error:",n),m.error("Failed to submit rating")}};return(n,a)=>(A(),$("div",Dt,[t("div",Mt,[t("div",Ut,[a[11]||(a[11]=t("div",{class:"modal-header"},[t("h5",{class:"modal-title"},"Application Rating"),t("button",{type:"button",class:"btn-close","data-bs-dismiss":"modal","aria-label":"Close"})],-1)),t("div",Et,[t("form",{onSubmit:at(S,["prevent"])},[t("div",Vt,[a[4]||(a[4]=t("label",{class:"form-label"},"Overall Rating",-1)),t("div",Bt,[(A(),$(q,null,G(5,l=>t("span",{key:l,class:st(["star",{active:l<=s.value.rating}]),onClick:R=>v(l)}," ★ ",10,Ft)),64))])]),t("div",qt,[a[6]||(a[6]=t("label",{class:"form-label"},"Category",-1)),N(t("select",{"onUpdate:modelValue":a[0]||(a[0]=l=>s.value.category=l),class:"form-select",required:""},a[5]||(a[5]=[ot('',6)]),512),[[z,s.value.category]])]),t("div",Pt,[a[7]||(a[7]=t("label",{class:"form-label"},"Detailed Comments",-1)),N(t("textarea",{"onUpdate:modelValue":a[1]||(a[1]=l=>s.value.detailedComments=l),class:"form-control",rows:"4",placeholder:"Enter detailed comments",required:""},null,512),[[V,s.value.detailedComments]])]),t("div",Ot,[a[8]||(a[8]=t("label",{class:"form-label"},"Name",-1)),N(t("input",{"onUpdate:modelValue":a[2]||(a[2]=l=>s.value.name=l),type:"text",class:"form-control",placeholder:"Enter your name",required:""},null,512),[[V,s.value.name]])]),t("div",Wt,[a[9]||(a[9]=t("label",{class:"form-label"},"Email",-1)),N(t("input",{"onUpdate:modelValue":a[3]||(a[3]=l=>s.value.email=l),type:"email",class:"form-control",placeholder:"Enter your email",required:""},null,512),[[V,s.value.email]])])],32)]),t("div",jt,[a[10]||(a[10]=t("button",{type:"button",class:"btn btn-secondary","data-bs-dismiss":"modal"},"Cancel",-1)),t("button",{type:"button",class:"btn btn-primary",onClick:S,disabled:!b.value},"Submit",8,zt)])])])]))}}),Kt=St(Gt,[["__scopeId","data-v-714cdadf"]]),Ht={class:"card w-100"},W="application-status-detail-modal",Jt=B({__name:"applicationStatusList",props:{nsId:{default:""}},emits:["refresh-time-updated"],setup(k,{expose:C,emit:I}){const _=F(),m=k,s=I,v=window.self!==window.top;let b=!1,f=0;const g=r([]),S=r([]),n=r(""),a=r(""),l=r(0),R=r(""),w=r(""),d=r(0);r(!1);const c=r(0),p=r(),y=r();nt(async()=>{b=!0,H(),await T()}),it(()=>{f+=1}),lt(()=>m.nsId,async(e,o)=>{var i;e!==o&&(f+=1,g.value=[],l.value=0,c.value=0,R.value="",w.value="",d.value=0,(i=p.value)==null||i.resetData(),b&&await T())});const T=async()=>{const e=++f,o=String(m.nsId||"").trim();try{if(K(),v&&!o){g.value=[];return}const{data:i}=await _t(o||void 0);if(e!==f||o!==String(m.nsId||"").trim())return;i?g.value=i:g.value=[]}catch{if(e!==f)return;_.error("Unable to retrieve data")}},K=()=>{const e=new Date,o={year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1};n.value=e.toLocaleDateString("ko-KR",o),s("refresh-time-updated",n.value)},H=()=>{S.value=[{title:"Infra",width:230,minWidth:180,formatter:J,cellClick:function(e,o){E(o)}},{title:"Application",field:"applicationName",width:180,minWidth:150,cellClick:function(e,o){E(o)},formatter:function(e){return`
${e.getValue()}
`}},{title:"Status",width:210,minWidth:190,formatter:X,cellClick:function(e,o){E(o)}},{title:"CheckedAt",field:"checkedAt",width:210,minWidth:190,cellClick:function(e,o){E(o)},formatter:function(e){return`
${e.getValue()}
`}},{title:"Action",width:320,minWidth:300,headerSort:!1,formatter:Y,cellClick:async function(e,o){const i=e.target,u=i==null?void 0:i.getAttribute("id"),M=o.getRow().getData().status;if(P(M))return;const O=o.getRow().getData().id,Z=o.getRow().getData().deploymentType,tt=o.getRow().getData().applicationName,h={operation:"",applicationStatusId:O,deploymentType:Z,applicationName:tt};u==="start-btn"?(h.operation="START",await D(h)):u==="restart-btn"?(h.operation="RESTART",await D(h)):u==="stop-btn"?(h.operation="STOP",await D(h)):u==="uninstall-btn"?(h.operation="UNINSTALL",await D(h)):u==="rating-btn"&&(h.operation="RATING",d.value=o.getRow().getData().catalogId||1,await D(h))}}]},D=async e=>{a.value=e.operation,l.value=e.applicationStatusId,R.value=e.deploymentType,w.value=e.applicationName,y.value&&(y.value.setInit(),y.value._getReasonList(e.operation))},E=e=>{const o=e.getRow().getData(),i=o.deploymentHistoryId||o.deploymentId;if(!i)return;c.value=i;const u=document.getElementById(W);if(u)try{window.bootstrap&&window.bootstrap.Modal?(new window.bootstrap.Modal(u).show(),setTimeout(()=>{p.value&&p.value.refreshData(c.value)},100)):(u.style.display="block",u.classList.add("show"),document.body.classList.add("modal-open"),p.value&&p.value.refreshData(c.value))}catch(M){console.error("Error opening detail modal:",M)}},J=e=>{const o=e.getRow().getData(),i=o.deploymentType,u=Q(o);return` +
+

+ ${i} (${u}) +

+
+ `},Q=e=>e.deploymentType==="VM"?[e.namespace,e.mciId,e.vmId].filter(Boolean).join(" / ")||"-":e.deploymentType==="K8S"?[e.namespace,e.clusterName].filter(Boolean).join(" / ")||"-":e.vmId||e.clusterName||"-",P=e=>ct(e),X=e=>{const o=e.getRow().getData().status,i=ut(o);return` +
+ + ${i} + +
`},Y=e=>{const o=e.getRow().getData().status,i=P(o)?"disabled":"",u=String(o||"").trim().toUpperCase();return` +
+ ${u==="STOP"||u==="STOPPED"?` + + `:` + + + `} + + +
`};return C({refresh:T}),(e,o)=>(A(),$(q,null,[t("div",Ht,[L(bt,{columns:S.value,"table-data":g.value},null,8,["columns","table-data"])]),L(Tt,{ref_key:"applicationActionConfirmModalRef",ref:y,title:a.value,applicationStatusId:l.value,type:R.value,applicationName:w.value,onGetApplicationsStatusList:T},null,8,["title","applicationStatusId","type","applicationName"]),L(Kt,{catalogId:d.value,applicationName:w.value,onRatingSubmitted:T},null,8,["catalogId","applicationName"]),L(mt,{ref_key:"applicationDetailModalRef",ref:p,"modal-id":W,deploymentId:c.value},null,8,["deploymentId"])],64))}}),Qt={class:"page"},Xt={class:"page-wrapper"},Yt={class:"page-header d-print-none"},Zt={class:"container-xxl"},te={class:"row g-2 align-items-center"},ee={class:"col-auto ms-auto"},ae={class:"btn-list"},oe={class:"me-2 d-none d-md-inline"},se={class:"page-body"},ne={class:"container-xxl"},ie={class:"row"},le={class:"col-lg-12"},be=B({__name:"ApplicationStatus",setup(k){const C=dt(),I=U(()=>C.getNsId()||""),_=r(""),m=r(null),s=()=>{var v;(v=m.value)==null||v.refresh()};return(v,b)=>(A(),$("div",Qt,[t("div",Xt,[t("div",Yt,[t("div",Zt,[t("div",te,[b[2]||(b[2]=t("div",{class:"col d-flex"},[t("h2",{class:"page-title"},"App Status")],-1)),t("div",ee,[t("div",ae,[t("span",oe,x(_.value),1),t("button",{type:"button",class:"btn btn-outline-primary page-header-action-btn",onClick:s},[L(rt(vt),{class:"icon icon-tabler",size:20,"stroke-width":"1"}),b[1]||(b[1]=j(" Refresh "))])])])])])]),t("div",se,[t("div",ne,[t("div",ie,[t("div",le,[L(Jt,{ref_key:"applicationStatusListRef",ref:m,"ns-id":I.value,onRefreshTimeUpdated:b[0]||(b[0]=f=>_.value=f)},null,8,["ns-id"])])])])])])]))}});export{be as default}; diff --git a/src/main/resources/static/assets/IconPlus-B06YAus6.js b/src/main/resources/static/assets/IconPlus-B06YAus6.js new file mode 100644 index 00000000..89438a2d --- /dev/null +++ b/src/main/resources/static/assets/IconPlus-B06YAus6.js @@ -0,0 +1,6 @@ +import{c as e}from"./createVueComponent-DNPdC8og.js";/** + * @license @tabler/icons-vue v3.22.0 - MIT + * + * This source code is licensed under the MIT license. + * See the LICENSE file in the root directory of this source tree. + */var s=e("outline","plus","IconPlus",[["path",{d:"M12 5l0 14",key:"svg-0"}],["path",{d:"M5 12l14 0",key:"svg-1"}]]);export{s as I}; diff --git a/src/main/resources/static/assets/IconPlus-BCHYOAFu.js b/src/main/resources/static/assets/IconPlus-BCHYOAFu.js new file mode 100644 index 00000000..3cd5003f --- /dev/null +++ b/src/main/resources/static/assets/IconPlus-BCHYOAFu.js @@ -0,0 +1,6 @@ +import{c as e}from"./createVueComponent-Bt7iWPgv.js";/** + * @license @tabler/icons-vue v3.22.0 - MIT + * + * This source code is licensed under the MIT license. + * See the LICENSE file in the root directory of this source tree. + */var s=e("outline","plus","IconPlus",[["path",{d:"M12 5l0 14",key:"svg-0"}],["path",{d:"M5 12l14 0",key:"svg-1"}]]);export{s as I}; diff --git a/src/main/resources/static/assets/IconPlus-CFf7AFLH.js b/src/main/resources/static/assets/IconPlus-CFf7AFLH.js new file mode 100644 index 00000000..4275a613 --- /dev/null +++ b/src/main/resources/static/assets/IconPlus-CFf7AFLH.js @@ -0,0 +1,6 @@ +import{c as e}from"./createVueComponent-l3sgX4hZ.js";/** + * @license @tabler/icons-vue v3.22.0 - MIT + * + * This source code is licensed under the MIT license. + * See the LICENSE file in the root directory of this source tree. + */var s=e("outline","plus","IconPlus",[["path",{d:"M12 5l0 14",key:"svg-0"}],["path",{d:"M5 12l14 0",key:"svg-1"}]]);export{s as I}; diff --git a/src/main/resources/static/assets/IconPlus-CyRAtLeE.js b/src/main/resources/static/assets/IconPlus-CyRAtLeE.js new file mode 100644 index 00000000..a86772fb --- /dev/null +++ b/src/main/resources/static/assets/IconPlus-CyRAtLeE.js @@ -0,0 +1,6 @@ +import{c as e}from"./createVueComponent-Czx6MsN9.js";/** + * @license @tabler/icons-vue v3.22.0 - MIT + * + * This source code is licensed under the MIT license. + * See the LICENSE file in the root directory of this source tree. + */var s=e("outline","plus","IconPlus",[["path",{d:"M12 5l0 14",key:"svg-0"}],["path",{d:"M5 12l14 0",key:"svg-1"}]]);export{s as I}; diff --git a/src/main/resources/static/assets/InstallSoftwareIframe-Bp8k8UuV.js b/src/main/resources/static/assets/InstallSoftwareIframe-Bp8k8UuV.js new file mode 100644 index 00000000..44f799f5 --- /dev/null +++ b/src/main/resources/static/assets/InstallSoftwareIframe-Bp8k8UuV.js @@ -0,0 +1 @@ +import{d as k,q as E,g as c,h as w,i as M,c as i,a,u as o,t as p,F as N,s as A,o as n}from"./index-8PPGy_cS.js";import{p as R,A as C}from"./applicationInstallationForm-B8kAVev5.js";import{_ as b}from"./_plugin-vue_export-helper-DlAUqK2U.js";import"./lodash-CprRz5WW.js";import"./request-BD-3QCnG.js";import"./softwareCatalog-DfwfQXi9.js";const S={class:"install-page"},x={key:0,class:"alert alert-danger",role:"alert"},L={class:"target-summary","aria-label":"Fixed deployment target"},V={key:0},h={class:"target-label"},G={key:1},F={key:0,class:"alert alert-info",role:"status"},B="MCMP_AM_INSTALL_EVENT",D=k({__name:"InstallSoftwareIframe",setup(O){const l=E(),t=R(window.location.search),g=e=>{const r=String(e??"").trim();return["undefined","null"].includes(r.toLowerCase())?"":r},u=c(()=>g(l.getNsId())),m=c(()=>{var e,r,s,I;return!!(g(l.accessToken)&&g(((e=l.workspaceInfo)==null?void 0:e.id)??((r=l.workspaceInfo)==null?void 0:r.Id))&&g(((s=l.projectInfo)==null?void 0:s.id)??((I=l.projectInfo)==null?void 0:I.Id))&&u.value)}),f=c(()=>!t.ok||t.target.targetType!=="VM"?"":[t.target.mciId,t.target.nodeGroupId,t.target.vmId].filter(Boolean).join(" / ")),v=c(()=>!t.ok||t.target.targetType!=="VM"?"":t.target.vmId?t.target.nodeGroupId?"Infra / NodeGroup / VM":"Infra / VM":"Infra / NodeGroup"),y=()=>{if(!t.ok)return;const e=t.target;return e.targetType==="VM"?{targetType:e.targetType,mciId:e.mciId,...e.nodeGroupId?{nodeGroupId:e.nodeGroupId}:{},...e.vmId?{vmId:e.vmId}:{}}:{targetType:e.targetType,clusterId:e.clusterId}},d=(e,r={})=>{window.parent!==window&&window.parent.postMessage({type:B,version:1,requestId:t.ok?t.target.requestId:"",status:e,target:y(),...r},"*")},_=()=>{d("FORM_READY")},T=e=>{const r=g(e.status);if(!r)return;const s={};e.deploymentId&&(s.deploymentId=e.deploymentId),e.message&&(s.message=e.message),d(r,s)};return w(m,(e,r)=>{e&&!r&&d("CONTEXT_READY")},{immediate:!0}),M(()=>{d("IFRAME_READY"),t.ok||d("CONFIGURATION_ERROR",{message:t.error})}),(e,r)=>(n(),i("main",S,[r[4]||(r[4]=a("header",{class:"install-page-header"},[a("div",null,[a("p",{class:"text-uppercase text-muted small mb-1"},"MC Application Manager"),a("h1",{class:"h2 mb-1"},"Install Software"),a("p",{class:"text-muted mb-0"},"The target is fixed by the calling Workload screen.")])],-1)),o(t).ok?(n(),i(N,{key:1},[a("section",L,[a("div",null,[r[2]||(r[2]=a("span",{class:"target-label"},"Target type",-1)),a("strong",null,p(o(t).target.targetType),1)]),o(t).target.targetType==="VM"?(n(),i("div",V,[a("span",h,p(v.value),1),a("strong",null,p(f.value),1)])):(n(),i("div",G,[r[3]||(r[3]=a("span",{class:"target-label"},"Cluster",-1)),a("strong",null,p(o(t).target.clusterId),1)]))]),m.value?(n(),A(C,{key:1,"form-id":"install-sw-iframe-form",title:"Application Installation","ns-id":u.value,embedded:!0,"target-type":o(t).target.targetType,"target-mci-id":o(t).target.mciId,"target-vm-id":o(t).target.vmId,"target-node-group-id":o(t).target.nodeGroupId,"target-cluster-id":o(t).target.clusterId,onReady:_,onDeploymentEvent:T,onCancel:r[0]||(r[0]=s=>d("CANCELLED"))},null,8,["ns-id","target-type","target-mci-id","target-vm-id","target-node-group-id","target-cluster-id"])):(n(),i("div",F," Waiting for Workspace and Project context from MC-WEB-CONSOLE… "))],64)):(n(),i("div",x,[r[1]||(r[1]=a("strong",null,"Invalid installation request.",-1)),a("div",null,p(o(t).error),1)]))]))}}),U=b(D,[["__scopeId","data-v-0c60ec68"]]);export{U as default}; diff --git a/src/main/resources/static/assets/InstallSoftwareIframe-DPwVg-cJ.css b/src/main/resources/static/assets/InstallSoftwareIframe-DPwVg-cJ.css new file mode 100644 index 00000000..31f6cade --- /dev/null +++ b/src/main/resources/static/assets/InstallSoftwareIframe-DPwVg-cJ.css @@ -0,0 +1 @@ +.install-page[data-v-0c60ec68]{min-height:100vh;padding:24px;background:#f6f8fb}.install-page-header[data-v-0c60ec68],.target-summary[data-v-0c60ec68]{width:100%;max-width:960px;margin:0 auto 16px}.target-summary[data-v-0c60ec68]{display:flex;flex-wrap:wrap;gap:24px;padding:14px 18px;border:1px solid #dce2e9;border-radius:8px;background:#fff}.target-summary>div[data-v-0c60ec68]{display:flex;flex-direction:column;gap:2px}.target-label[data-v-0c60ec68]{color:#667085;font-size:.75rem;text-transform:uppercase}.alert[data-v-0c60ec68]{width:100%;max-width:960px;margin:0 auto 16px}@media (max-width: 640px){.install-page[data-v-0c60ec68]{padding:12px}} diff --git a/src/main/resources/static/assets/InstallSoftwareIframe-DUSv8_Be.js b/src/main/resources/static/assets/InstallSoftwareIframe-DUSv8_Be.js new file mode 100644 index 00000000..f233b295 --- /dev/null +++ b/src/main/resources/static/assets/InstallSoftwareIframe-DUSv8_Be.js @@ -0,0 +1 @@ +import{d as h,q as R,g as k,h as w,i as A,c as p,a as l,u as i,t as f,F as S,s as b,o as u}from"./index-DKle5_5b.js";import{A as M}from"./applicationInstallationForm-C5Vcb2Aw.js";import{_ as C}from"./_plugin-vue_export-helper-DlAUqK2U.js";import"./lodash-pZBD3XEw.js";import"./request-DSShymva.js";import"./softwareCatalog-DbmZz9hR.js";const E=["targetType","requestId","mciId","vmId","clusterId"],N=["namespace","namespaceId","nodeGroupId","nodegroupId"],T=200,D=/[/?#]/,L=n=>D.test(n)||Array.from(n).some(o=>{const e=o.charCodeAt(0);return e<=31||e===127}),V=(n,o)=>{const e=n.getAll(o);return e.length>1?{ok:!1,error:`Query parameter "${o}" must be provided only once.`}:{ok:!0,value:String(e[0]||"").trim()}},m=(n,o,e=!1)=>o?o.length>T?`${n} must be ${T} characters or fewer.`:L(o)?`${n} contains unsupported path characters.`:"":e?`${n} is required.`:"",x=(n,o=()=>`am-install-${Date.now()}`)=>{const e=typeof n=="string"?new URLSearchParams(n.startsWith("?")?n.slice(1):n):n;for(const r of N)if(e.has(r))return{ok:!1,error:r==="namespace"||r==="namespaceId"?`${r} must not be supplied in the URL. Namespace comes from the selected Project context.`:`${r} must not be supplied in the URL. nodeGroup is not supported by this integration.`};for(const r of e.keys())if(!E.includes(r))return{ok:!1,error:`Unsupported query parameter "${r}".`};const a={};for(const r of E){const I=V(e,r);if(!I.ok)return I;a[r]=I.value}const d=a.targetType.toUpperCase();if(d!=="VM"&&d!=="K8S")return{ok:!1,error:"targetType must be VM or K8S."};const g=a.requestId||o(),y=[m("requestId",g,!0),m("mciId",a.mciId),m("vmId",a.vmId),m("clusterId",a.clusterId)].filter(Boolean);if(y.length>0)return{ok:!1,error:y[0]};if(d==="VM"){const r=[m("mciId",a.mciId,!0),m("vmId",a.vmId,!0)].filter(Boolean);if(r.length>0)return{ok:!1,error:r[0]};if(a.clusterId)return{ok:!1,error:"clusterId cannot be used with a VM target."}}if(d==="K8S"){const r=m("clusterId",a.clusterId,!0);if(r)return{ok:!1,error:r};if(a.mciId||a.vmId)return{ok:!1,error:"mciId and vmId cannot be used with a K8S target."}}return{ok:!0,target:{requestId:g,targetType:d,mciId:a.mciId,vmId:a.vmId,clusterId:a.clusterId}}},F={class:"install-page"},q={key:0,class:"alert alert-danger",role:"alert"},$={class:"target-summary","aria-label":"Fixed deployment target"},B={key:0},O={key:1},U={key:0,class:"alert alert-info",role:"status"},P="MCMP_AM_INSTALL_EVENT",K=h({__name:"InstallSoftwareIframe",setup(n){const o=R(),e=x(window.location.search),a=s=>{const t=String(s??"").trim();return["undefined","null"].includes(t.toLowerCase())?"":t},d=k(()=>a(o.getNsId())),g=k(()=>{var s,t,c,v;return!!(a(o.accessToken)&&a(((s=o.workspaceInfo)==null?void 0:s.id)??((t=o.workspaceInfo)==null?void 0:t.Id))&&a(((c=o.projectInfo)==null?void 0:c.id)??((v=o.projectInfo)==null?void 0:v.Id))&&d.value)}),y=()=>{if(!e.ok)return;const s=e.target;return s.targetType==="VM"?{targetType:s.targetType,mciId:s.mciId,vmId:s.vmId}:{targetType:s.targetType,clusterId:s.clusterId}},r=(s,t={})=>{window.parent!==window&&window.parent.postMessage({type:P,version:1,requestId:e.ok?e.target.requestId:"",status:s,target:y(),...t},"*")},I=()=>{r("FORM_READY")},_=s=>{const t=a(s.status);if(!t)return;const c={};s.deploymentId&&(c.deploymentId=s.deploymentId),s.message&&(c.message=s.message),r(t,c)};return w(g,(s,t)=>{s&&!t&&r("CONTEXT_READY")},{immediate:!0}),A(()=>{r("IFRAME_READY"),e.ok||r("CONFIGURATION_ERROR",{message:e.error})}),(s,t)=>(u(),p("main",F,[t[5]||(t[5]=l("header",{class:"install-page-header"},[l("div",null,[l("p",{class:"text-uppercase text-muted small mb-1"},"MC Application Manager"),l("h1",{class:"h2 mb-1"},"Install Software"),l("p",{class:"text-muted mb-0"},"The target is fixed by the calling Workload screen.")])],-1)),i(e).ok?(u(),p(S,{key:1},[l("section",$,[l("div",null,[t[2]||(t[2]=l("span",{class:"target-label"},"Target type",-1)),l("strong",null,f(i(e).target.targetType),1)]),i(e).target.targetType==="VM"?(u(),p("div",B,[t[3]||(t[3]=l("span",{class:"target-label"},"Infra / VM",-1)),l("strong",null,f(i(e).target.mciId)+" / "+f(i(e).target.vmId),1)])):(u(),p("div",O,[t[4]||(t[4]=l("span",{class:"target-label"},"Cluster",-1)),l("strong",null,f(i(e).target.clusterId),1)]))]),g.value?(u(),b(M,{key:1,"form-id":"install-sw-iframe-form",title:"Application Installation","ns-id":d.value,embedded:!0,"target-type":i(e).target.targetType,"target-mci-id":i(e).target.mciId,"target-vm-id":i(e).target.vmId,"target-cluster-id":i(e).target.clusterId,onReady:I,onDeploymentEvent:_,onCancel:t[0]||(t[0]=c=>r("CANCELLED"))},null,8,["ns-id","target-type","target-mci-id","target-vm-id","target-cluster-id"])):(u(),p("div",U," Waiting for Workspace and Project context from MC-WEB-CONSOLE… "))],64)):(u(),p("div",q,[t[1]||(t[1]=l("strong",null,"Invalid installation request.",-1)),l("div",null,f(i(e).error),1)]))]))}}),X=C(K,[["__scopeId","data-v-200b2d9c"]]);export{X as default}; diff --git a/src/main/resources/static/assets/InstallSoftwareIframe-DwIe7gkh.js b/src/main/resources/static/assets/InstallSoftwareIframe-DwIe7gkh.js new file mode 100644 index 00000000..951220f2 --- /dev/null +++ b/src/main/resources/static/assets/InstallSoftwareIframe-DwIe7gkh.js @@ -0,0 +1 @@ +import{d as k,q as E,g as c,h as w,i as M,c as i,a,u as o,t as p,F as N,s as A,o as n}from"./index-BKFNv1Gc.js";import{p as R,A as C}from"./applicationInstallationForm-CJ8rrk5z.js";import{_ as b}from"./_plugin-vue_export-helper-DlAUqK2U.js";import"./bootstrap.esm-Ceob_0pG.js";import"./lodash-DPUzVvBK.js";import"./request-D9joEmfF.js";import"./softwareCatalog-DuMGACG8.js";const S={class:"install-page"},x={key:0,class:"alert alert-danger",role:"alert"},L={class:"target-summary","aria-label":"Fixed deployment target"},V={key:0},h={class:"target-label"},G={key:1},F={key:0,class:"alert alert-info",role:"status"},B="MCMP_AM_INSTALL_EVENT",D=k({__name:"InstallSoftwareIframe",setup(O){const l=E(),t=R(window.location.search),g=e=>{const r=String(e??"").trim();return["undefined","null"].includes(r.toLowerCase())?"":r},m=c(()=>g(l.getNsId())),u=c(()=>{var e,r,s,I;return!!(g(l.accessToken)&&g(((e=l.workspaceInfo)==null?void 0:e.id)??((r=l.workspaceInfo)==null?void 0:r.Id))&&g(((s=l.projectInfo)==null?void 0:s.id)??((I=l.projectInfo)==null?void 0:I.Id))&&m.value)}),f=c(()=>!t.ok||t.target.targetType!=="VM"?"":[t.target.mciId,t.target.nodeGroupId,t.target.vmId].filter(Boolean).join(" / ")),v=c(()=>!t.ok||t.target.targetType!=="VM"?"":t.target.vmId?t.target.nodeGroupId?"Infra / NodeGroup / VM":"Infra / VM":"Infra / NodeGroup"),y=()=>{if(!t.ok)return;const e=t.target;return e.targetType==="VM"?{targetType:e.targetType,mciId:e.mciId,...e.nodeGroupId?{nodeGroupId:e.nodeGroupId}:{},...e.vmId?{vmId:e.vmId}:{}}:{targetType:e.targetType,clusterId:e.clusterId}},d=(e,r={})=>{window.parent!==window&&window.parent.postMessage({type:B,version:1,requestId:t.ok?t.target.requestId:"",status:e,target:y(),...r},"*")},_=()=>{d("FORM_READY")},T=e=>{const r=g(e.status);if(!r)return;const s={};e.deploymentId&&(s.deploymentId=e.deploymentId),e.message&&(s.message=e.message),d(r,s)};return w(u,(e,r)=>{e&&!r&&d("CONTEXT_READY")},{immediate:!0}),M(()=>{d("IFRAME_READY"),t.ok||d("CONFIGURATION_ERROR",{message:t.error})}),(e,r)=>(n(),i("main",S,[r[4]||(r[4]=a("header",{class:"install-page-header"},[a("div",null,[a("p",{class:"text-uppercase text-muted small mb-1"},"MC Application Manager"),a("h1",{class:"h2 mb-1"},"Install Software"),a("p",{class:"text-muted mb-0"},"The target is fixed by the calling Workload screen.")])],-1)),o(t).ok?(n(),i(N,{key:1},[a("section",L,[a("div",null,[r[2]||(r[2]=a("span",{class:"target-label"},"Target type",-1)),a("strong",null,p(o(t).target.targetType),1)]),o(t).target.targetType==="VM"?(n(),i("div",V,[a("span",h,p(v.value),1),a("strong",null,p(f.value),1)])):(n(),i("div",G,[r[3]||(r[3]=a("span",{class:"target-label"},"Cluster",-1)),a("strong",null,p(o(t).target.clusterId),1)]))]),u.value?(n(),A(C,{key:1,"form-id":"install-sw-iframe-form",title:"Application Installation","ns-id":m.value,embedded:!0,"target-type":o(t).target.targetType,"target-mci-id":o(t).target.mciId,"target-vm-id":o(t).target.vmId,"target-node-group-id":o(t).target.nodeGroupId,"target-cluster-id":o(t).target.clusterId,onReady:_,onDeploymentEvent:T,onCancel:r[0]||(r[0]=s=>d("CANCELLED"))},null,8,["ns-id","target-type","target-mci-id","target-vm-id","target-node-group-id","target-cluster-id"])):(n(),i("div",F," Waiting for Workspace and Project context from MC-WEB-CONSOLE… "))],64)):(n(),i("div",x,[r[1]||(r[1]=a("strong",null,"Invalid installation request.",-1)),a("div",null,p(o(t).error),1)]))]))}}),X=b(D,[["__scopeId","data-v-0c60ec68"]]);export{X as default}; diff --git a/src/main/resources/static/assets/InstallSoftwareIframe-OUoonEDo.js b/src/main/resources/static/assets/InstallSoftwareIframe-OUoonEDo.js new file mode 100644 index 00000000..df8a7b0d --- /dev/null +++ b/src/main/resources/static/assets/InstallSoftwareIframe-OUoonEDo.js @@ -0,0 +1 @@ +import{d as k,q as E,g as c,h as w,i as M,c as i,a,u as o,t as p,F as N,s as A,o as n}from"./index-DU977P1k.js";import{p as R,A as C}from"./applicationInstallationForm-DA09_p5G.js";import{_ as b}from"./_plugin-vue_export-helper-DlAUqK2U.js";import"./lodash-BpiFzpk2.js";import"./request-jyImEBot.js";import"./softwareCatalog-VAKfe9v1.js";const S={class:"install-page"},x={key:0,class:"alert alert-danger",role:"alert"},L={class:"target-summary","aria-label":"Fixed deployment target"},V={key:0},h={class:"target-label"},G={key:1},F={key:0,class:"alert alert-info",role:"status"},B="MCMP_AM_INSTALL_EVENT",D=k({__name:"InstallSoftwareIframe",setup(O){const l=E(),t=R(window.location.search),g=e=>{const r=String(e??"").trim();return["undefined","null"].includes(r.toLowerCase())?"":r},u=c(()=>g(l.getNsId())),m=c(()=>{var e,r,s,I;return!!(g(l.accessToken)&&g(((e=l.workspaceInfo)==null?void 0:e.id)??((r=l.workspaceInfo)==null?void 0:r.Id))&&g(((s=l.projectInfo)==null?void 0:s.id)??((I=l.projectInfo)==null?void 0:I.Id))&&u.value)}),f=c(()=>!t.ok||t.target.targetType!=="VM"?"":[t.target.mciId,t.target.nodeGroupId,t.target.vmId].filter(Boolean).join(" / ")),v=c(()=>!t.ok||t.target.targetType!=="VM"?"":t.target.vmId?t.target.nodeGroupId?"Infra / NodeGroup / VM":"Infra / VM":"Infra / NodeGroup"),y=()=>{if(!t.ok)return;const e=t.target;return e.targetType==="VM"?{targetType:e.targetType,mciId:e.mciId,...e.nodeGroupId?{nodeGroupId:e.nodeGroupId}:{},...e.vmId?{vmId:e.vmId}:{}}:{targetType:e.targetType,clusterId:e.clusterId}},d=(e,r={})=>{window.parent!==window&&window.parent.postMessage({type:B,version:1,requestId:t.ok?t.target.requestId:"",status:e,target:y(),...r},"*")},_=()=>{d("FORM_READY")},T=e=>{const r=g(e.status);if(!r)return;const s={};e.deploymentId&&(s.deploymentId=e.deploymentId),e.message&&(s.message=e.message),d(r,s)};return w(m,(e,r)=>{e&&!r&&d("CONTEXT_READY")},{immediate:!0}),M(()=>{d("IFRAME_READY"),t.ok||d("CONFIGURATION_ERROR",{message:t.error})}),(e,r)=>(n(),i("main",S,[r[4]||(r[4]=a("header",{class:"install-page-header"},[a("div",null,[a("p",{class:"text-uppercase text-muted small mb-1"},"MC Application Manager"),a("h1",{class:"h2 mb-1"},"Install Software"),a("p",{class:"text-muted mb-0"},"The target is fixed by the calling Workload screen.")])],-1)),o(t).ok?(n(),i(N,{key:1},[a("section",L,[a("div",null,[r[2]||(r[2]=a("span",{class:"target-label"},"Target type",-1)),a("strong",null,p(o(t).target.targetType),1)]),o(t).target.targetType==="VM"?(n(),i("div",V,[a("span",h,p(v.value),1),a("strong",null,p(f.value),1)])):(n(),i("div",G,[r[3]||(r[3]=a("span",{class:"target-label"},"Cluster",-1)),a("strong",null,p(o(t).target.clusterId),1)]))]),m.value?(n(),A(C,{key:1,"form-id":"install-sw-iframe-form",title:"Application Installation","ns-id":u.value,embedded:!0,"target-type":o(t).target.targetType,"target-mci-id":o(t).target.mciId,"target-vm-id":o(t).target.vmId,"target-node-group-id":o(t).target.nodeGroupId,"target-cluster-id":o(t).target.clusterId,onReady:_,onDeploymentEvent:T,onCancel:r[0]||(r[0]=s=>d("CANCELLED"))},null,8,["ns-id","target-type","target-mci-id","target-vm-id","target-node-group-id","target-cluster-id"])):(n(),i("div",F," Waiting for Workspace and Project context from MC-WEB-CONSOLE… "))],64)):(n(),i("div",x,[r[1]||(r[1]=a("strong",null,"Invalid installation request.",-1)),a("div",null,p(o(t).error),1)]))]))}}),U=b(D,[["__scopeId","data-v-0c60ec68"]]);export{U as default}; diff --git a/src/main/resources/static/assets/OssList-ByTkpwdw.js b/src/main/resources/static/assets/OssList-ByTkpwdw.js new file mode 100644 index 00000000..c2b25560 --- /dev/null +++ b/src/main/resources/static/assets/OssList-ByTkpwdw.js @@ -0,0 +1,17 @@ +import{d as T,o as u,c as m,a as s,t as k,w as P,b as O,u as $,e as L,r as p,f as D,g as G,h as F,i as B,j as h,v as H,F as W,k as J,l as x}from"./index-DU977P1k.js";import{I as E}from"./IconPlus-BCHYOAFu.js";import{_ as K}from"./Tabulator.vue_vue_type_style_index_0_lang-COGEFirO.js";import{s as f}from"./request-jyImEBot.js";import{M as Q}from"./bootstrap.esm-Ceob_0pG.js";import"./createVueComponent-Bt7iWPgv.js";const X={class:"page-header page-wrapper"},Y={class:"row align-items-center"},Z={class:"card-header d-flex",style:{"justify-content":"space-between"}},ss={class:"card-title"},es={class:"btn-list"},ts=["data-bs-target"],os=T({__name:"TableHeader",props:{headerTitle:{},newBtnTitle:{},popupFlag:{type:Boolean},popupTarget:{}},emits:["click-new-btn"],setup(l,{emit:w}){const i=l,c=w,o=()=>{c("click-new-btn")};return(n,g)=>(u(),m("div",X,[s("div",Y,[s("div",Z,[s("h3",ss,[s("strong",null,k(i.headerTitle),1)]),s("div",es,[i.popupFlag?(u(),m("a",{key:1,class:"btn btn-outline-primary d-none d-sm-inline-block","data-bs-toggle":"modal","data-bs-target":i.popupTarget,onClick:P(o,["prevent","stop"])},[O($(E),{class:"icon icon-tabler icon-tabler-plus",size:20,"stroke-width":"1"}),L(" "+k(i.newBtnTitle),1)],8,ts)):(u(),m("a",{key:0,class:"btn btn-outline-primary d-none d-sm-inline-block",onClick:P(o,["prevent","stop"])},[O($(E),{class:"icon icon-tabler icon-tabler-plus",size:20,"stroke-width":"1"}),L(" "+k(i.newBtnTitle),1)]))])])])]))}}),as=()=>f.get("/ossType/list"),ls=()=>f.get("/ossType/filter/list"),ns=()=>f.get("/oss/list");function rs(l){return f.get(`/oss/duplicate?ossName=${l.ossName}&ossUrl=${l.ossUrl}&ossUsername=${l.ossUsername}`)}function is(l){return f.post("/oss/connection-check",l)}function ds(l){return f.get("/oss/"+l)}function cs(l){return f.post("/oss",l)}function us(l){return f.patch(`/oss/${l.ossIdx}`,l)}function ms(l){return f.delete(`/oss/${l}`)}const ps={class:"modal-dialog modal-xl",role:"document"},vs={class:"modal-content"},bs={class:"modal-body text-left py-4"},fs={class:"mb-5"},gs={class:"mb-3"},ys={class:"grid gap-0 column-gap-3"},ws=["value"],Ss={class:"row mb-3"},_s={class:"grid gap-0 column-gap-3"},ks={class:"mb-3"},hs={class:"mb-3"},Os={class:"row"},Cs={class:"col"},xs={class:"col"},Ts={class:"col mt-4 row"},Us={key:1,class:"btn btn-success col",style:{"margin-right":"3px"}},Is={key:3,class:"btn btn-success col"},Ds={class:"modal-footer"},Ns=T({__name:"ossForm",props:{mode:{},ossIdx:{}},emits:["get-oss-list"],setup(l,{emit:w}){const i=p(),c=p(),o=D(),n=l,g=w,d=G(()=>n.ossIdx);F(d,async()=>{await y()}),F(()=>n.mode,async()=>{await b(n.mode)}),B(async()=>{i.value&&(c.value=new Q(i.value)),await b("init"),await y()});const t=p({}),y=async()=>{if(n.mode==="new")t.value.ossTypeIdx=0,t.value.ossName="",t.value.ossDesc="",t.value.ossUrl="",t.value.ossUsername="",t.value.ossPassword="",v.value=!1,_.value=!1;else{const{data:a}=await ds(n.ossIdx);t.value=a,t.value.ossPassword=j(t.value.ossPassword),v.value=!0,_.value=!0}},C=p([]),b=async a=>{try{if(a==="new"||a==="init"){const{data:e}=await ls();C.value=e}else{const{data:e}=await as();C.value=e}}catch(e){console.log(e)}},S=()=>{t.value.ossPassword="",_.value=!1},v=p(!1),U=async()=>{const a={ossName:t.value.ossName,ossUrl:t.value.ossUrl,ossUsername:t.value.ossUsername},{data:e}=await rs(a);e?o.error("The name is already in use."):(o.success("The name is available."),v.value=!0)},_=p(!1),R=async()=>{const a={ossUrl:t.value.ossUrl,ossUsername:t.value.ossUsername,ossPassword:N(t.value.ossPassword),ossTypeIdx:t.value.ossTypeIdx},{data:e}=await is(a);e?(o.success("The OSS is available."),_.value=!0):o.error("The OSS is unavailable.")},V=()=>{v.value=!1},I=()=>{_.value=!1},A=async()=>{if(!t.value.ossTypeIdx||t.value.ossTypeIdx===0){o.error("Please select OSS Type.");return}if(!t.value.ossName){o.error("Please enter OSS Name.");return}if(!t.value.ossDesc){o.error("Please enter OSS Description.");return}if(!t.value.ossUrl){o.error("Please enter URL.");return}if(!t.value.ossUsername){o.error("Please enter OSS ID.");return}if(!t.value.ossPassword){o.error("Please enter OSS Password.");return}if(!v.value){o.error("Please perform duplicate check.");return}if(!_.value){o.error("Please perform connection check.");return}t.value.ossPassword=N(t.value.ossPassword);let a=!1;n.mode==="new"?a=await q():a=await M(),a&&(g("get-oss-list"),y(),console.log(c.value),c.value&&(c.value.hide(),setTimeout(()=>{document.body.classList.remove("modal-open");const e=document.querySelector(".modal-backdrop");e==null||e.remove()},150)))},q=async()=>{try{const{data:a}=await cs(t.value);return a?(o.success("Regist SUCCESS."),!0):(o.error("Regist FAIL."),!1)}catch{return o.error("Regist FAIL."),!1}},M=async()=>{try{const{data:a}=await us(t.value);return a?(o.success("Update SUCCESS."),!0):(o.error("Update FAIL."),!1)}catch{return o.error("Update FAIL."),!1}},N=a=>btoa(a),j=a=>atob(a);return(a,e)=>(u(),m("div",{class:"modal fade",id:"ossForm",tabindex:"-1",ref_key:"modalElement",ref:i},[s("div",ps,[s("div",vs,[e[15]||(e[15]=s("button",{type:"button",class:"btn-close","data-bs-dismiss":"modal","aria-label":"Close"},null,-1)),s("div",bs,[s("h3",fs,k(n.mode==="new"?"New":"Edit")+" OSS ",1),s("div",null,[s("div",gs,[e[9]||(e[9]=s("label",{class:"form-label required"},"OSS Type",-1)),s("div",ys,[h(s("select",{"onUpdate:modelValue":e[0]||(e[0]=r=>t.value.ossTypeIdx=r),class:"form-select p-2 g-col-12"},[e[8]||(e[8]=s("option",{value:0},"Select OSS Type",-1)),(u(!0),m(W,null,J(C.value,(r,z)=>(u(),m("option",{value:r.ossTypeIdx,key:z},k(r.ossTypeName),9,ws))),128))],512),[[H,t.value.ossTypeIdx]])])]),s("div",Ss,[e[10]||(e[10]=s("label",{class:"form-label required"},"OSS Name",-1)),s("div",_s,[h(s("input",{type:"text",class:"form-control p-2 g-col-11",placeholder:"Enter the OSS Name","onUpdate:modelValue":e[1]||(e[1]=r=>t.value.ossName=r),onChange:V},null,544),[[x,t.value.ossName]])])]),s("div",ks,[e[11]||(e[11]=s("label",{class:"form-label required"},"OSS Description",-1)),h(s("input",{type:"text",class:"form-control p-2 g-col-11",placeholder:"Enter the OSS Description","onUpdate:modelValue":e[2]||(e[2]=r=>t.value.ossDesc=r)},null,512),[[x,t.value.ossDesc]])]),s("div",hs,[e[12]||(e[12]=s("label",{class:"form-label required"},"URL",-1)),h(s("input",{type:"text",class:"form-control p-2 g-col-7",placeholder:"Enter the Server URL","onUpdate:modelValue":e[3]||(e[3]=r=>t.value.ossUrl=r),onFocus:I},null,544),[[x,t.value.ossUrl]])]),s("div",Os,[s("div",Cs,[e[13]||(e[13]=s("label",{class:"form-label required"},"OSS ID",-1)),h(s("input",{type:"text",class:"form-control p-2 g-col-7",placeholder:"Enter the OSS ID","onUpdate:modelValue":e[4]||(e[4]=r=>t.value.ossUsername=r),onFocus:I},null,544),[[x,t.value.ossUsername]])]),s("div",xs,[e[14]||(e[14]=s("label",{class:"form-label required"},"OSS PW",-1)),h(s("input",{type:"password",class:"form-control p-2 g-col-11",placeholder:"Enter the OSS Password","onUpdate:modelValue":e[5]||(e[5]=r=>t.value.ossPassword=r),onClick:S,onFocus:I},null,544),[[x,t.value.ossPassword]])]),s("div",Ts,[v.value?(u(),m("button",Us,"Duplicate Check")):(u(),m("button",{key:0,class:"btn btn-primary col",onClick:U,style:{"margin-right":"3px"}},"Duplicate Check")),_.value?(u(),m("button",Is,"Connection Check")):(u(),m("button",{key:2,class:"btn btn-primary col",onClick:R},"Connection Check"))])])])]),s("div",Ds,[s("button",{type:"button",class:"btn btn-link link-secondary","data-bs-dismiss":"modal",onClick:e[6]||(e[6]=r=>y())}," Cancel "),s("button",{type:"button",ref:"submitBtn",class:"btn btn-primary ms-auto",onClick:e[7]||(e[7]=r=>A())},k(n.mode==="new"?"Regist":"Edit"),513)])])])],512))}}),Ps={class:"modal fade",id:"deleteOss",tabindex:"-1"},$s={class:"modal-dialog modal-lg",role:"document"},Ls={class:"modal-content"},Fs={class:"modal-body text-left py-4"},Es={class:"modal-footer"},Bs=T({__name:"deleteOss",props:{ossName:{},ossIdx:{}},emits:["get-oss-list"],setup(l,{emit:w}){const i=D(),c=l,o=w,n=async()=>{const{data:g}=await ms(c.ossIdx);g?i.success("Deleted successfully."):i.error("Failed to delete."),o("get-oss-list")};return(g,d)=>(u(),m("div",Ps,[s("div",$s,[s("div",Ls,[d[3]||(d[3]=s("button",{type:"button",class:"btn-close","data-bs-dismiss":"modal","aria-label":"Close"},null,-1)),d[4]||(d[4]=s("div",{class:"modal-status bg-danger"},null,-1)),s("div",Fs,[d[1]||(d[1]=s("h3",{class:"mb-5"}," Delete OSS ",-1)),s("h4",null,"Are you sure you want to delete "+k(c.ossName)+"?",1)]),s("div",Es,[d[2]||(d[2]=s("a",{href:"#",class:"btn btn-link link-secondary","data-bs-dismiss":"modal"}," Cancel ",-1)),s("a",{href:"#",class:"btn btn-primary ms-auto","data-bs-dismiss":"modal",onClick:d[0]||(d[0]=t=>n())}," Delete ")])])])]))}}),Rs={class:"card card-flush w-100"},Vs={ref:"table-responsive"},Hs=T({__name:"OssList",setup(l){const w=D(),i=p([]),c=p([]);B(async()=>{d(),await o()});const o=async()=>{try{const{data:b}=await ns();i.value=b}catch(b){console.log(b),w.error("데이터를 가져올 수 없습니다.")}},n=p(0),g=p(""),d=()=>{c.value=[{title:"OSS Name",field:"ossName",width:400},{title:"OSS Desc",field:"ossDesc",width:500},{title:"URL",field:"ossUrl",width:600},{title:"Action",width:400,formatter:t,cellClick:function(b,S){const v=b.target,U=v==null?void 0:v.getAttribute("id");n.value=S.getRow().getData().ossIdx,U==="edit-btn"?y.value="edit":g.value=S.getRow().getData().ossName}}]},t=()=>` +
+ + +
`,y=p("new"),C=()=>{n.value=0,y.value="new"};return(b,S)=>(u(),m("div",Rs,[O(os,{"header-title":"OSS","new-btn-title":"New OSS","popup-flag":!0,"popup-target":"#ossForm",onClickNewBtn:C}),O(K,{columns:c.value,"table-data":i.value},null,8,["columns","table-data"]),s("div",Vs,S[0]||(S[0]=[s("div",{class:"table table-vcenter table-bordered table-nowrap card-table"},null,-1)]),512),O(Ns,{mode:y.value,"oss-idx":n.value,onGetOssList:o},null,8,["mode","oss-idx"]),O(Bs,{"oss-name":g.value,"oss-idx":n.value,onGetOssList:o},null,8,["oss-name","oss-idx"])]))}});export{Hs as default}; diff --git a/src/main/resources/static/assets/OssList-C0gSiIVM.js b/src/main/resources/static/assets/OssList-C0gSiIVM.js new file mode 100644 index 00000000..dda18494 --- /dev/null +++ b/src/main/resources/static/assets/OssList-C0gSiIVM.js @@ -0,0 +1,17 @@ +import{d as T,o as u,c as m,a as s,t as k,w as P,b as O,u as $,e as L,r as p,f as D,g as G,h as F,i as B,j as h,v as H,F as W,k as J,l as x}from"./index-DKle5_5b.js";import{I as E}from"./IconPlus-CFf7AFLH.js";import{_ as K}from"./Tabulator.vue_vue_type_style_index_0_lang-BwLOthig.js";import{s as f}from"./request-DSShymva.js";import{M as Q}from"./bootstrap.esm-Ceob_0pG.js";import"./createVueComponent-l3sgX4hZ.js";const X={class:"page-header page-wrapper"},Y={class:"row align-items-center"},Z={class:"card-header d-flex",style:{"justify-content":"space-between"}},ss={class:"card-title"},es={class:"btn-list"},ts=["data-bs-target"],os=T({__name:"TableHeader",props:{headerTitle:{},newBtnTitle:{},popupFlag:{type:Boolean},popupTarget:{}},emits:["click-new-btn"],setup(l,{emit:w}){const i=l,c=w,o=()=>{c("click-new-btn")};return(n,g)=>(u(),m("div",X,[s("div",Y,[s("div",Z,[s("h3",ss,[s("strong",null,k(i.headerTitle),1)]),s("div",es,[i.popupFlag?(u(),m("a",{key:1,class:"btn btn-outline-primary d-none d-sm-inline-block","data-bs-toggle":"modal","data-bs-target":i.popupTarget,onClick:P(o,["prevent","stop"])},[O($(E),{class:"icon icon-tabler icon-tabler-plus",size:20,"stroke-width":"1"}),L(" "+k(i.newBtnTitle),1)],8,ts)):(u(),m("a",{key:0,class:"btn btn-outline-primary d-none d-sm-inline-block",onClick:P(o,["prevent","stop"])},[O($(E),{class:"icon icon-tabler icon-tabler-plus",size:20,"stroke-width":"1"}),L(" "+k(i.newBtnTitle),1)]))])])])]))}}),as=()=>f.get("/ossType/list"),ls=()=>f.get("/ossType/filter/list"),ns=()=>f.get("/oss/list");function rs(l){return f.get(`/oss/duplicate?ossName=${l.ossName}&ossUrl=${l.ossUrl}&ossUsername=${l.ossUsername}`)}function is(l){return f.post("/oss/connection-check",l)}function ds(l){return f.get("/oss/"+l)}function cs(l){return f.post("/oss",l)}function us(l){return f.patch(`/oss/${l.ossIdx}`,l)}function ms(l){return f.delete(`/oss/${l}`)}const ps={class:"modal-dialog modal-xl",role:"document"},vs={class:"modal-content"},bs={class:"modal-body text-left py-4"},fs={class:"mb-5"},gs={class:"mb-3"},ys={class:"grid gap-0 column-gap-3"},ws=["value"],Ss={class:"row mb-3"},_s={class:"grid gap-0 column-gap-3"},ks={class:"mb-3"},hs={class:"mb-3"},Os={class:"row"},Cs={class:"col"},xs={class:"col"},Ts={class:"col mt-4 row"},Us={key:1,class:"btn btn-success col",style:{"margin-right":"3px"}},Is={key:3,class:"btn btn-success col"},Ds={class:"modal-footer"},Ns=T({__name:"ossForm",props:{mode:{},ossIdx:{}},emits:["get-oss-list"],setup(l,{emit:w}){const i=p(),c=p(),o=D(),n=l,g=w,d=G(()=>n.ossIdx);F(d,async()=>{await y()}),F(()=>n.mode,async()=>{await b(n.mode)}),B(async()=>{i.value&&(c.value=new Q(i.value)),await b("init"),await y()});const t=p({}),y=async()=>{if(n.mode==="new")t.value.ossTypeIdx=0,t.value.ossName="",t.value.ossDesc="",t.value.ossUrl="",t.value.ossUsername="",t.value.ossPassword="",v.value=!1,_.value=!1;else{const{data:a}=await ds(n.ossIdx);t.value=a,t.value.ossPassword=j(t.value.ossPassword),v.value=!0,_.value=!0}},C=p([]),b=async a=>{try{if(a==="new"||a==="init"){const{data:e}=await ls();C.value=e}else{const{data:e}=await as();C.value=e}}catch(e){console.log(e)}},S=()=>{t.value.ossPassword="",_.value=!1},v=p(!1),U=async()=>{const a={ossName:t.value.ossName,ossUrl:t.value.ossUrl,ossUsername:t.value.ossUsername},{data:e}=await rs(a);e?o.error("The name is already in use."):(o.success("The name is available."),v.value=!0)},_=p(!1),R=async()=>{const a={ossUrl:t.value.ossUrl,ossUsername:t.value.ossUsername,ossPassword:N(t.value.ossPassword),ossTypeIdx:t.value.ossTypeIdx},{data:e}=await is(a);e?(o.success("The OSS is available."),_.value=!0):o.error("The OSS is unavailable.")},V=()=>{v.value=!1},I=()=>{_.value=!1},A=async()=>{if(!t.value.ossTypeIdx||t.value.ossTypeIdx===0){o.error("Please select OSS Type.");return}if(!t.value.ossName){o.error("Please enter OSS Name.");return}if(!t.value.ossDesc){o.error("Please enter OSS Description.");return}if(!t.value.ossUrl){o.error("Please enter URL.");return}if(!t.value.ossUsername){o.error("Please enter OSS ID.");return}if(!t.value.ossPassword){o.error("Please enter OSS Password.");return}if(!v.value){o.error("Please perform duplicate check.");return}if(!_.value){o.error("Please perform connection check.");return}t.value.ossPassword=N(t.value.ossPassword);let a=!1;n.mode==="new"?a=await q():a=await M(),a&&(g("get-oss-list"),y(),console.log(c.value),c.value&&(c.value.hide(),setTimeout(()=>{document.body.classList.remove("modal-open");const e=document.querySelector(".modal-backdrop");e==null||e.remove()},150)))},q=async()=>{try{const{data:a}=await cs(t.value);return a?(o.success("Regist SUCCESS."),!0):(o.error("Regist FAIL."),!1)}catch{return o.error("Regist FAIL."),!1}},M=async()=>{try{const{data:a}=await us(t.value);return a?(o.success("Update SUCCESS."),!0):(o.error("Update FAIL."),!1)}catch{return o.error("Update FAIL."),!1}},N=a=>btoa(a),j=a=>atob(a);return(a,e)=>(u(),m("div",{class:"modal fade",id:"ossForm",tabindex:"-1",ref_key:"modalElement",ref:i},[s("div",ps,[s("div",vs,[e[15]||(e[15]=s("button",{type:"button",class:"btn-close","data-bs-dismiss":"modal","aria-label":"Close"},null,-1)),s("div",bs,[s("h3",fs,k(n.mode==="new"?"New":"Edit")+" OSS ",1),s("div",null,[s("div",gs,[e[9]||(e[9]=s("label",{class:"form-label required"},"OSS Type",-1)),s("div",ys,[h(s("select",{"onUpdate:modelValue":e[0]||(e[0]=r=>t.value.ossTypeIdx=r),class:"form-select p-2 g-col-12"},[e[8]||(e[8]=s("option",{value:0},"Select OSS Type",-1)),(u(!0),m(W,null,J(C.value,(r,z)=>(u(),m("option",{value:r.ossTypeIdx,key:z},k(r.ossTypeName),9,ws))),128))],512),[[H,t.value.ossTypeIdx]])])]),s("div",Ss,[e[10]||(e[10]=s("label",{class:"form-label required"},"OSS Name",-1)),s("div",_s,[h(s("input",{type:"text",class:"form-control p-2 g-col-11",placeholder:"Enter the OSS Name","onUpdate:modelValue":e[1]||(e[1]=r=>t.value.ossName=r),onChange:V},null,544),[[x,t.value.ossName]])])]),s("div",ks,[e[11]||(e[11]=s("label",{class:"form-label required"},"OSS Description",-1)),h(s("input",{type:"text",class:"form-control p-2 g-col-11",placeholder:"Enter the OSS Description","onUpdate:modelValue":e[2]||(e[2]=r=>t.value.ossDesc=r)},null,512),[[x,t.value.ossDesc]])]),s("div",hs,[e[12]||(e[12]=s("label",{class:"form-label required"},"URL",-1)),h(s("input",{type:"text",class:"form-control p-2 g-col-7",placeholder:"Enter the Server URL","onUpdate:modelValue":e[3]||(e[3]=r=>t.value.ossUrl=r),onFocus:I},null,544),[[x,t.value.ossUrl]])]),s("div",Os,[s("div",Cs,[e[13]||(e[13]=s("label",{class:"form-label required"},"OSS ID",-1)),h(s("input",{type:"text",class:"form-control p-2 g-col-7",placeholder:"Enter the OSS ID","onUpdate:modelValue":e[4]||(e[4]=r=>t.value.ossUsername=r),onFocus:I},null,544),[[x,t.value.ossUsername]])]),s("div",xs,[e[14]||(e[14]=s("label",{class:"form-label required"},"OSS PW",-1)),h(s("input",{type:"password",class:"form-control p-2 g-col-11",placeholder:"Enter the OSS Password","onUpdate:modelValue":e[5]||(e[5]=r=>t.value.ossPassword=r),onClick:S,onFocus:I},null,544),[[x,t.value.ossPassword]])]),s("div",Ts,[v.value?(u(),m("button",Us,"Duplicate Check")):(u(),m("button",{key:0,class:"btn btn-primary col",onClick:U,style:{"margin-right":"3px"}},"Duplicate Check")),_.value?(u(),m("button",Is,"Connection Check")):(u(),m("button",{key:2,class:"btn btn-primary col",onClick:R},"Connection Check"))])])])]),s("div",Ds,[s("button",{type:"button",class:"btn btn-link link-secondary","data-bs-dismiss":"modal",onClick:e[6]||(e[6]=r=>y())}," Cancel "),s("button",{type:"button",ref:"submitBtn",class:"btn btn-primary ms-auto",onClick:e[7]||(e[7]=r=>A())},k(n.mode==="new"?"Regist":"Edit"),513)])])])],512))}}),Ps={class:"modal fade",id:"deleteOss",tabindex:"-1"},$s={class:"modal-dialog modal-lg",role:"document"},Ls={class:"modal-content"},Fs={class:"modal-body text-left py-4"},Es={class:"modal-footer"},Bs=T({__name:"deleteOss",props:{ossName:{},ossIdx:{}},emits:["get-oss-list"],setup(l,{emit:w}){const i=D(),c=l,o=w,n=async()=>{const{data:g}=await ms(c.ossIdx);g?i.success("Deleted successfully."):i.error("Failed to delete."),o("get-oss-list")};return(g,d)=>(u(),m("div",Ps,[s("div",$s,[s("div",Ls,[d[3]||(d[3]=s("button",{type:"button",class:"btn-close","data-bs-dismiss":"modal","aria-label":"Close"},null,-1)),d[4]||(d[4]=s("div",{class:"modal-status bg-danger"},null,-1)),s("div",Fs,[d[1]||(d[1]=s("h3",{class:"mb-5"}," Delete OSS ",-1)),s("h4",null,"Are you sure you want to delete "+k(c.ossName)+"?",1)]),s("div",Es,[d[2]||(d[2]=s("a",{href:"#",class:"btn btn-link link-secondary","data-bs-dismiss":"modal"}," Cancel ",-1)),s("a",{href:"#",class:"btn btn-primary ms-auto","data-bs-dismiss":"modal",onClick:d[0]||(d[0]=t=>n())}," Delete ")])])])]))}}),Rs={class:"card card-flush w-100"},Vs={ref:"table-responsive"},Hs=T({__name:"OssList",setup(l){const w=D(),i=p([]),c=p([]);B(async()=>{d(),await o()});const o=async()=>{try{const{data:b}=await ns();i.value=b}catch(b){console.log(b),w.error("데이터를 가져올 수 없습니다.")}},n=p(0),g=p(""),d=()=>{c.value=[{title:"OSS Name",field:"ossName",width:400},{title:"OSS Desc",field:"ossDesc",width:500},{title:"URL",field:"ossUrl",width:600},{title:"Action",width:400,formatter:t,cellClick:function(b,S){const v=b.target,U=v==null?void 0:v.getAttribute("id");n.value=S.getRow().getData().ossIdx,U==="edit-btn"?y.value="edit":g.value=S.getRow().getData().ossName}}]},t=()=>` +
+ + +
`,y=p("new"),C=()=>{n.value=0,y.value="new"};return(b,S)=>(u(),m("div",Rs,[O(os,{"header-title":"OSS","new-btn-title":"New OSS","popup-flag":!0,"popup-target":"#ossForm",onClickNewBtn:C}),O(K,{columns:c.value,"table-data":i.value},null,8,["columns","table-data"]),s("div",Vs,S[0]||(S[0]=[s("div",{class:"table table-vcenter table-bordered table-nowrap card-table"},null,-1)]),512),O(Ns,{mode:y.value,"oss-idx":n.value,onGetOssList:o},null,8,["mode","oss-idx"]),O(Bs,{"oss-name":g.value,"oss-idx":n.value,onGetOssList:o},null,8,["oss-name","oss-idx"])]))}});export{Hs as default}; diff --git a/src/main/resources/static/assets/OssList-D2HNfA-X.js b/src/main/resources/static/assets/OssList-D2HNfA-X.js new file mode 100644 index 00000000..55245d7c --- /dev/null +++ b/src/main/resources/static/assets/OssList-D2HNfA-X.js @@ -0,0 +1,17 @@ +import{d as T,o as u,c as m,a as s,t as k,w as P,b as O,u as $,e as L,r as p,f as D,g as G,h as F,i as B,j as h,v as H,F as W,k as J,l as x}from"./index-8PPGy_cS.js";import{I as E}from"./IconPlus-CyRAtLeE.js";import{_ as K}from"./Tabulator.vue_vue_type_style_index_0_lang-pkMkfUCQ.js";import{s as f}from"./request-BD-3QCnG.js";import{M as Q}from"./bootstrap.esm-Ceob_0pG.js";import"./createVueComponent-Czx6MsN9.js";const X={class:"page-header page-wrapper"},Y={class:"row align-items-center"},Z={class:"card-header d-flex",style:{"justify-content":"space-between"}},ss={class:"card-title"},es={class:"btn-list"},ts=["data-bs-target"],os=T({__name:"TableHeader",props:{headerTitle:{},newBtnTitle:{},popupFlag:{type:Boolean},popupTarget:{}},emits:["click-new-btn"],setup(l,{emit:w}){const i=l,c=w,o=()=>{c("click-new-btn")};return(n,g)=>(u(),m("div",X,[s("div",Y,[s("div",Z,[s("h3",ss,[s("strong",null,k(i.headerTitle),1)]),s("div",es,[i.popupFlag?(u(),m("a",{key:1,class:"btn btn-outline-primary d-none d-sm-inline-block","data-bs-toggle":"modal","data-bs-target":i.popupTarget,onClick:P(o,["prevent","stop"])},[O($(E),{class:"icon icon-tabler icon-tabler-plus",size:20,"stroke-width":"1"}),L(" "+k(i.newBtnTitle),1)],8,ts)):(u(),m("a",{key:0,class:"btn btn-outline-primary d-none d-sm-inline-block",onClick:P(o,["prevent","stop"])},[O($(E),{class:"icon icon-tabler icon-tabler-plus",size:20,"stroke-width":"1"}),L(" "+k(i.newBtnTitle),1)]))])])])]))}}),as=()=>f.get("/ossType/list"),ls=()=>f.get("/ossType/filter/list"),ns=()=>f.get("/oss/list");function rs(l){return f.get(`/oss/duplicate?ossName=${l.ossName}&ossUrl=${l.ossUrl}&ossUsername=${l.ossUsername}`)}function is(l){return f.post("/oss/connection-check",l)}function ds(l){return f.get("/oss/"+l)}function cs(l){return f.post("/oss",l)}function us(l){return f.patch(`/oss/${l.ossIdx}`,l)}function ms(l){return f.delete(`/oss/${l}`)}const ps={class:"modal-dialog modal-xl",role:"document"},vs={class:"modal-content"},bs={class:"modal-body text-left py-4"},fs={class:"mb-5"},gs={class:"mb-3"},ys={class:"grid gap-0 column-gap-3"},ws=["value"],Ss={class:"row mb-3"},_s={class:"grid gap-0 column-gap-3"},ks={class:"mb-3"},hs={class:"mb-3"},Os={class:"row"},Cs={class:"col"},xs={class:"col"},Ts={class:"col mt-4 row"},Us={key:1,class:"btn btn-success col",style:{"margin-right":"3px"}},Is={key:3,class:"btn btn-success col"},Ds={class:"modal-footer"},Ns=T({__name:"ossForm",props:{mode:{},ossIdx:{}},emits:["get-oss-list"],setup(l,{emit:w}){const i=p(),c=p(),o=D(),n=l,g=w,d=G(()=>n.ossIdx);F(d,async()=>{await y()}),F(()=>n.mode,async()=>{await b(n.mode)}),B(async()=>{i.value&&(c.value=new Q(i.value)),await b("init"),await y()});const t=p({}),y=async()=>{if(n.mode==="new")t.value.ossTypeIdx=0,t.value.ossName="",t.value.ossDesc="",t.value.ossUrl="",t.value.ossUsername="",t.value.ossPassword="",v.value=!1,_.value=!1;else{const{data:a}=await ds(n.ossIdx);t.value=a,t.value.ossPassword=j(t.value.ossPassword),v.value=!0,_.value=!0}},C=p([]),b=async a=>{try{if(a==="new"||a==="init"){const{data:e}=await ls();C.value=e}else{const{data:e}=await as();C.value=e}}catch(e){console.log(e)}},S=()=>{t.value.ossPassword="",_.value=!1},v=p(!1),U=async()=>{const a={ossName:t.value.ossName,ossUrl:t.value.ossUrl,ossUsername:t.value.ossUsername},{data:e}=await rs(a);e?o.error("The name is already in use."):(o.success("The name is available."),v.value=!0)},_=p(!1),R=async()=>{const a={ossUrl:t.value.ossUrl,ossUsername:t.value.ossUsername,ossPassword:N(t.value.ossPassword),ossTypeIdx:t.value.ossTypeIdx},{data:e}=await is(a);e?(o.success("The OSS is available."),_.value=!0):o.error("The OSS is unavailable.")},V=()=>{v.value=!1},I=()=>{_.value=!1},A=async()=>{if(!t.value.ossTypeIdx||t.value.ossTypeIdx===0){o.error("Please select OSS Type.");return}if(!t.value.ossName){o.error("Please enter OSS Name.");return}if(!t.value.ossDesc){o.error("Please enter OSS Description.");return}if(!t.value.ossUrl){o.error("Please enter URL.");return}if(!t.value.ossUsername){o.error("Please enter OSS ID.");return}if(!t.value.ossPassword){o.error("Please enter OSS Password.");return}if(!v.value){o.error("Please perform duplicate check.");return}if(!_.value){o.error("Please perform connection check.");return}t.value.ossPassword=N(t.value.ossPassword);let a=!1;n.mode==="new"?a=await q():a=await M(),a&&(g("get-oss-list"),y(),console.log(c.value),c.value&&(c.value.hide(),setTimeout(()=>{document.body.classList.remove("modal-open");const e=document.querySelector(".modal-backdrop");e==null||e.remove()},150)))},q=async()=>{try{const{data:a}=await cs(t.value);return a?(o.success("Regist SUCCESS."),!0):(o.error("Regist FAIL."),!1)}catch{return o.error("Regist FAIL."),!1}},M=async()=>{try{const{data:a}=await us(t.value);return a?(o.success("Update SUCCESS."),!0):(o.error("Update FAIL."),!1)}catch{return o.error("Update FAIL."),!1}},N=a=>btoa(a),j=a=>atob(a);return(a,e)=>(u(),m("div",{class:"modal fade",id:"ossForm",tabindex:"-1",ref_key:"modalElement",ref:i},[s("div",ps,[s("div",vs,[e[15]||(e[15]=s("button",{type:"button",class:"btn-close","data-bs-dismiss":"modal","aria-label":"Close"},null,-1)),s("div",bs,[s("h3",fs,k(n.mode==="new"?"New":"Edit")+" OSS ",1),s("div",null,[s("div",gs,[e[9]||(e[9]=s("label",{class:"form-label required"},"OSS Type",-1)),s("div",ys,[h(s("select",{"onUpdate:modelValue":e[0]||(e[0]=r=>t.value.ossTypeIdx=r),class:"form-select p-2 g-col-12"},[e[8]||(e[8]=s("option",{value:0},"Select OSS Type",-1)),(u(!0),m(W,null,J(C.value,(r,z)=>(u(),m("option",{value:r.ossTypeIdx,key:z},k(r.ossTypeName),9,ws))),128))],512),[[H,t.value.ossTypeIdx]])])]),s("div",Ss,[e[10]||(e[10]=s("label",{class:"form-label required"},"OSS Name",-1)),s("div",_s,[h(s("input",{type:"text",class:"form-control p-2 g-col-11",placeholder:"Enter the OSS Name","onUpdate:modelValue":e[1]||(e[1]=r=>t.value.ossName=r),onChange:V},null,544),[[x,t.value.ossName]])])]),s("div",ks,[e[11]||(e[11]=s("label",{class:"form-label required"},"OSS Description",-1)),h(s("input",{type:"text",class:"form-control p-2 g-col-11",placeholder:"Enter the OSS Description","onUpdate:modelValue":e[2]||(e[2]=r=>t.value.ossDesc=r)},null,512),[[x,t.value.ossDesc]])]),s("div",hs,[e[12]||(e[12]=s("label",{class:"form-label required"},"URL",-1)),h(s("input",{type:"text",class:"form-control p-2 g-col-7",placeholder:"Enter the Server URL","onUpdate:modelValue":e[3]||(e[3]=r=>t.value.ossUrl=r),onFocus:I},null,544),[[x,t.value.ossUrl]])]),s("div",Os,[s("div",Cs,[e[13]||(e[13]=s("label",{class:"form-label required"},"OSS ID",-1)),h(s("input",{type:"text",class:"form-control p-2 g-col-7",placeholder:"Enter the OSS ID","onUpdate:modelValue":e[4]||(e[4]=r=>t.value.ossUsername=r),onFocus:I},null,544),[[x,t.value.ossUsername]])]),s("div",xs,[e[14]||(e[14]=s("label",{class:"form-label required"},"OSS PW",-1)),h(s("input",{type:"password",class:"form-control p-2 g-col-11",placeholder:"Enter the OSS Password","onUpdate:modelValue":e[5]||(e[5]=r=>t.value.ossPassword=r),onClick:S,onFocus:I},null,544),[[x,t.value.ossPassword]])]),s("div",Ts,[v.value?(u(),m("button",Us,"Duplicate Check")):(u(),m("button",{key:0,class:"btn btn-primary col",onClick:U,style:{"margin-right":"3px"}},"Duplicate Check")),_.value?(u(),m("button",Is,"Connection Check")):(u(),m("button",{key:2,class:"btn btn-primary col",onClick:R},"Connection Check"))])])])]),s("div",Ds,[s("button",{type:"button",class:"btn btn-link link-secondary","data-bs-dismiss":"modal",onClick:e[6]||(e[6]=r=>y())}," Cancel "),s("button",{type:"button",ref:"submitBtn",class:"btn btn-primary ms-auto",onClick:e[7]||(e[7]=r=>A())},k(n.mode==="new"?"Regist":"Edit"),513)])])])],512))}}),Ps={class:"modal fade",id:"deleteOss",tabindex:"-1"},$s={class:"modal-dialog modal-lg",role:"document"},Ls={class:"modal-content"},Fs={class:"modal-body text-left py-4"},Es={class:"modal-footer"},Bs=T({__name:"deleteOss",props:{ossName:{},ossIdx:{}},emits:["get-oss-list"],setup(l,{emit:w}){const i=D(),c=l,o=w,n=async()=>{const{data:g}=await ms(c.ossIdx);g?i.success("Deleted successfully."):i.error("Failed to delete."),o("get-oss-list")};return(g,d)=>(u(),m("div",Ps,[s("div",$s,[s("div",Ls,[d[3]||(d[3]=s("button",{type:"button",class:"btn-close","data-bs-dismiss":"modal","aria-label":"Close"},null,-1)),d[4]||(d[4]=s("div",{class:"modal-status bg-danger"},null,-1)),s("div",Fs,[d[1]||(d[1]=s("h3",{class:"mb-5"}," Delete OSS ",-1)),s("h4",null,"Are you sure you want to delete "+k(c.ossName)+"?",1)]),s("div",Es,[d[2]||(d[2]=s("a",{href:"#",class:"btn btn-link link-secondary","data-bs-dismiss":"modal"}," Cancel ",-1)),s("a",{href:"#",class:"btn btn-primary ms-auto","data-bs-dismiss":"modal",onClick:d[0]||(d[0]=t=>n())}," Delete ")])])])]))}}),Rs={class:"card card-flush w-100"},Vs={ref:"table-responsive"},Hs=T({__name:"OssList",setup(l){const w=D(),i=p([]),c=p([]);B(async()=>{d(),await o()});const o=async()=>{try{const{data:b}=await ns();i.value=b}catch(b){console.log(b),w.error("데이터를 가져올 수 없습니다.")}},n=p(0),g=p(""),d=()=>{c.value=[{title:"OSS Name",field:"ossName",width:400},{title:"OSS Desc",field:"ossDesc",width:500},{title:"URL",field:"ossUrl",width:600},{title:"Action",width:400,formatter:t,cellClick:function(b,S){const v=b.target,U=v==null?void 0:v.getAttribute("id");n.value=S.getRow().getData().ossIdx,U==="edit-btn"?y.value="edit":g.value=S.getRow().getData().ossName}}]},t=()=>` +
+ + +
`,y=p("new"),C=()=>{n.value=0,y.value="new"};return(b,S)=>(u(),m("div",Rs,[O(os,{"header-title":"OSS","new-btn-title":"New OSS","popup-flag":!0,"popup-target":"#ossForm",onClickNewBtn:C}),O(K,{columns:c.value,"table-data":i.value},null,8,["columns","table-data"]),s("div",Vs,S[0]||(S[0]=[s("div",{class:"table table-vcenter table-bordered table-nowrap card-table"},null,-1)]),512),O(Ns,{mode:y.value,"oss-idx":n.value,onGetOssList:o},null,8,["mode","oss-idx"]),O(Bs,{"oss-name":g.value,"oss-idx":n.value,onGetOssList:o},null,8,["oss-name","oss-idx"])]))}});export{Hs as default}; diff --git a/src/main/resources/static/assets/OssList-Dkob1ogV.js b/src/main/resources/static/assets/OssList-Dkob1ogV.js new file mode 100644 index 00000000..471357ca --- /dev/null +++ b/src/main/resources/static/assets/OssList-Dkob1ogV.js @@ -0,0 +1,17 @@ +import{d as T,o as u,c as m,a as s,t as k,w as P,b as O,u as $,e as L,r as p,f as D,g as G,h as F,i as B,j as h,v as H,F as W,k as J,l as x}from"./index-BKFNv1Gc.js";import{I as E}from"./IconPlus-B06YAus6.js";import{_ as K}from"./Tabulator.vue_vue_type_style_index_0_lang-DYWrT5tk.js";import{s as f}from"./request-D9joEmfF.js";import{M as Q}from"./bootstrap.esm-Ceob_0pG.js";import"./createVueComponent-DNPdC8og.js";const X={class:"page-header page-wrapper"},Y={class:"row align-items-center"},Z={class:"card-header d-flex",style:{"justify-content":"space-between"}},ss={class:"card-title"},es={class:"btn-list"},ts=["data-bs-target"],os=T({__name:"TableHeader",props:{headerTitle:{},newBtnTitle:{},popupFlag:{type:Boolean},popupTarget:{}},emits:["click-new-btn"],setup(l,{emit:w}){const i=l,c=w,o=()=>{c("click-new-btn")};return(n,g)=>(u(),m("div",X,[s("div",Y,[s("div",Z,[s("h3",ss,[s("strong",null,k(i.headerTitle),1)]),s("div",es,[i.popupFlag?(u(),m("a",{key:1,class:"btn btn-outline-primary d-none d-sm-inline-block","data-bs-toggle":"modal","data-bs-target":i.popupTarget,onClick:P(o,["prevent","stop"])},[O($(E),{class:"icon icon-tabler icon-tabler-plus",size:20,"stroke-width":"1"}),L(" "+k(i.newBtnTitle),1)],8,ts)):(u(),m("a",{key:0,class:"btn btn-outline-primary d-none d-sm-inline-block",onClick:P(o,["prevent","stop"])},[O($(E),{class:"icon icon-tabler icon-tabler-plus",size:20,"stroke-width":"1"}),L(" "+k(i.newBtnTitle),1)]))])])])]))}}),as=()=>f.get("/ossType/list"),ls=()=>f.get("/ossType/filter/list"),ns=()=>f.get("/oss/list");function rs(l){return f.get(`/oss/duplicate?ossName=${l.ossName}&ossUrl=${l.ossUrl}&ossUsername=${l.ossUsername}`)}function is(l){return f.post("/oss/connection-check",l)}function ds(l){return f.get("/oss/"+l)}function cs(l){return f.post("/oss",l)}function us(l){return f.patch(`/oss/${l.ossIdx}`,l)}function ms(l){return f.delete(`/oss/${l}`)}const ps={class:"modal-dialog modal-xl",role:"document"},vs={class:"modal-content"},bs={class:"modal-body text-left py-4"},fs={class:"mb-5"},gs={class:"mb-3"},ys={class:"grid gap-0 column-gap-3"},ws=["value"],Ss={class:"row mb-3"},_s={class:"grid gap-0 column-gap-3"},ks={class:"mb-3"},hs={class:"mb-3"},Os={class:"row"},Cs={class:"col"},xs={class:"col"},Ts={class:"col mt-4 row"},Us={key:1,class:"btn btn-success col",style:{"margin-right":"3px"}},Is={key:3,class:"btn btn-success col"},Ds={class:"modal-footer"},Ns=T({__name:"ossForm",props:{mode:{},ossIdx:{}},emits:["get-oss-list"],setup(l,{emit:w}){const i=p(),c=p(),o=D(),n=l,g=w,d=G(()=>n.ossIdx);F(d,async()=>{await y()}),F(()=>n.mode,async()=>{await b(n.mode)}),B(async()=>{i.value&&(c.value=new Q(i.value)),await b("init"),await y()});const t=p({}),y=async()=>{if(n.mode==="new")t.value.ossTypeIdx=0,t.value.ossName="",t.value.ossDesc="",t.value.ossUrl="",t.value.ossUsername="",t.value.ossPassword="",v.value=!1,_.value=!1;else{const{data:a}=await ds(n.ossIdx);t.value=a,t.value.ossPassword=j(t.value.ossPassword),v.value=!0,_.value=!0}},C=p([]),b=async a=>{try{if(a==="new"||a==="init"){const{data:e}=await ls();C.value=e}else{const{data:e}=await as();C.value=e}}catch(e){console.log(e)}},S=()=>{t.value.ossPassword="",_.value=!1},v=p(!1),U=async()=>{const a={ossName:t.value.ossName,ossUrl:t.value.ossUrl,ossUsername:t.value.ossUsername},{data:e}=await rs(a);e?o.error("The name is already in use."):(o.success("The name is available."),v.value=!0)},_=p(!1),R=async()=>{const a={ossUrl:t.value.ossUrl,ossUsername:t.value.ossUsername,ossPassword:N(t.value.ossPassword),ossTypeIdx:t.value.ossTypeIdx},{data:e}=await is(a);e?(o.success("The OSS is available."),_.value=!0):o.error("The OSS is unavailable.")},V=()=>{v.value=!1},I=()=>{_.value=!1},A=async()=>{if(!t.value.ossTypeIdx||t.value.ossTypeIdx===0){o.error("Please select OSS Type.");return}if(!t.value.ossName){o.error("Please enter OSS Name.");return}if(!t.value.ossDesc){o.error("Please enter OSS Description.");return}if(!t.value.ossUrl){o.error("Please enter URL.");return}if(!t.value.ossUsername){o.error("Please enter OSS ID.");return}if(!t.value.ossPassword){o.error("Please enter OSS Password.");return}if(!v.value){o.error("Please perform duplicate check.");return}if(!_.value){o.error("Please perform connection check.");return}t.value.ossPassword=N(t.value.ossPassword);let a=!1;n.mode==="new"?a=await q():a=await M(),a&&(g("get-oss-list"),y(),console.log(c.value),c.value&&(c.value.hide(),setTimeout(()=>{document.body.classList.remove("modal-open");const e=document.querySelector(".modal-backdrop");e==null||e.remove()},150)))},q=async()=>{try{const{data:a}=await cs(t.value);return a?(o.success("Regist SUCCESS."),!0):(o.error("Regist FAIL."),!1)}catch{return o.error("Regist FAIL."),!1}},M=async()=>{try{const{data:a}=await us(t.value);return a?(o.success("Update SUCCESS."),!0):(o.error("Update FAIL."),!1)}catch{return o.error("Update FAIL."),!1}},N=a=>btoa(a),j=a=>atob(a);return(a,e)=>(u(),m("div",{class:"modal fade",id:"ossForm",tabindex:"-1",ref_key:"modalElement",ref:i},[s("div",ps,[s("div",vs,[e[15]||(e[15]=s("button",{type:"button",class:"btn-close","data-bs-dismiss":"modal","aria-label":"Close"},null,-1)),s("div",bs,[s("h3",fs,k(n.mode==="new"?"New":"Edit")+" OSS ",1),s("div",null,[s("div",gs,[e[9]||(e[9]=s("label",{class:"form-label required"},"OSS Type",-1)),s("div",ys,[h(s("select",{"onUpdate:modelValue":e[0]||(e[0]=r=>t.value.ossTypeIdx=r),class:"form-select p-2 g-col-12"},[e[8]||(e[8]=s("option",{value:0},"Select OSS Type",-1)),(u(!0),m(W,null,J(C.value,(r,z)=>(u(),m("option",{value:r.ossTypeIdx,key:z},k(r.ossTypeName),9,ws))),128))],512),[[H,t.value.ossTypeIdx]])])]),s("div",Ss,[e[10]||(e[10]=s("label",{class:"form-label required"},"OSS Name",-1)),s("div",_s,[h(s("input",{type:"text",class:"form-control p-2 g-col-11",placeholder:"Enter the OSS Name","onUpdate:modelValue":e[1]||(e[1]=r=>t.value.ossName=r),onChange:V},null,544),[[x,t.value.ossName]])])]),s("div",ks,[e[11]||(e[11]=s("label",{class:"form-label required"},"OSS Description",-1)),h(s("input",{type:"text",class:"form-control p-2 g-col-11",placeholder:"Enter the OSS Description","onUpdate:modelValue":e[2]||(e[2]=r=>t.value.ossDesc=r)},null,512),[[x,t.value.ossDesc]])]),s("div",hs,[e[12]||(e[12]=s("label",{class:"form-label required"},"URL",-1)),h(s("input",{type:"text",class:"form-control p-2 g-col-7",placeholder:"Enter the Server URL","onUpdate:modelValue":e[3]||(e[3]=r=>t.value.ossUrl=r),onFocus:I},null,544),[[x,t.value.ossUrl]])]),s("div",Os,[s("div",Cs,[e[13]||(e[13]=s("label",{class:"form-label required"},"OSS ID",-1)),h(s("input",{type:"text",class:"form-control p-2 g-col-7",placeholder:"Enter the OSS ID","onUpdate:modelValue":e[4]||(e[4]=r=>t.value.ossUsername=r),onFocus:I},null,544),[[x,t.value.ossUsername]])]),s("div",xs,[e[14]||(e[14]=s("label",{class:"form-label required"},"OSS PW",-1)),h(s("input",{type:"password",class:"form-control p-2 g-col-11",placeholder:"Enter the OSS Password","onUpdate:modelValue":e[5]||(e[5]=r=>t.value.ossPassword=r),onClick:S,onFocus:I},null,544),[[x,t.value.ossPassword]])]),s("div",Ts,[v.value?(u(),m("button",Us,"Duplicate Check")):(u(),m("button",{key:0,class:"btn btn-primary col",onClick:U,style:{"margin-right":"3px"}},"Duplicate Check")),_.value?(u(),m("button",Is,"Connection Check")):(u(),m("button",{key:2,class:"btn btn-primary col",onClick:R},"Connection Check"))])])])]),s("div",Ds,[s("button",{type:"button",class:"btn btn-link link-secondary","data-bs-dismiss":"modal",onClick:e[6]||(e[6]=r=>y())}," Cancel "),s("button",{type:"button",ref:"submitBtn",class:"btn btn-primary ms-auto",onClick:e[7]||(e[7]=r=>A())},k(n.mode==="new"?"Regist":"Edit"),513)])])])],512))}}),Ps={class:"modal fade",id:"deleteOss",tabindex:"-1"},$s={class:"modal-dialog modal-lg",role:"document"},Ls={class:"modal-content"},Fs={class:"modal-body text-left py-4"},Es={class:"modal-footer"},Bs=T({__name:"deleteOss",props:{ossName:{},ossIdx:{}},emits:["get-oss-list"],setup(l,{emit:w}){const i=D(),c=l,o=w,n=async()=>{const{data:g}=await ms(c.ossIdx);g?i.success("Deleted successfully."):i.error("Failed to delete."),o("get-oss-list")};return(g,d)=>(u(),m("div",Ps,[s("div",$s,[s("div",Ls,[d[3]||(d[3]=s("button",{type:"button",class:"btn-close","data-bs-dismiss":"modal","aria-label":"Close"},null,-1)),d[4]||(d[4]=s("div",{class:"modal-status bg-danger"},null,-1)),s("div",Fs,[d[1]||(d[1]=s("h3",{class:"mb-5"}," Delete OSS ",-1)),s("h4",null,"Are you sure you want to delete "+k(c.ossName)+"?",1)]),s("div",Es,[d[2]||(d[2]=s("a",{href:"#",class:"btn btn-link link-secondary","data-bs-dismiss":"modal"}," Cancel ",-1)),s("a",{href:"#",class:"btn btn-primary ms-auto","data-bs-dismiss":"modal",onClick:d[0]||(d[0]=t=>n())}," Delete ")])])])]))}}),Rs={class:"card card-flush w-100"},Vs={ref:"table-responsive"},Hs=T({__name:"OssList",setup(l){const w=D(),i=p([]),c=p([]);B(async()=>{d(),await o()});const o=async()=>{try{const{data:b}=await ns();i.value=b}catch(b){console.log(b),w.error("데이터를 가져올 수 없습니다.")}},n=p(0),g=p(""),d=()=>{c.value=[{title:"OSS Name",field:"ossName",width:400},{title:"OSS Desc",field:"ossDesc",width:500},{title:"URL",field:"ossUrl",width:600},{title:"Action",width:400,formatter:t,cellClick:function(b,S){const v=b.target,U=v==null?void 0:v.getAttribute("id");n.value=S.getRow().getData().ossIdx,U==="edit-btn"?y.value="edit":g.value=S.getRow().getData().ossName}}]},t=()=>` +
+ + +
`,y=p("new"),C=()=>{n.value=0,y.value="new"};return(b,S)=>(u(),m("div",Rs,[O(os,{"header-title":"OSS","new-btn-title":"New OSS","popup-flag":!0,"popup-target":"#ossForm",onClickNewBtn:C}),O(K,{columns:c.value,"table-data":i.value},null,8,["columns","table-data"]),s("div",Vs,S[0]||(S[0]=[s("div",{class:"table table-vcenter table-bordered table-nowrap card-table"},null,-1)]),512),O(Ns,{mode:y.value,"oss-idx":n.value,onGetOssList:o},null,8,["mode","oss-idx"]),O(Bs,{"oss-name":g.value,"oss-idx":n.value,onGetOssList:o},null,8,["oss-name","oss-idx"])]))}});export{Hs as default}; diff --git a/src/main/resources/static/assets/RepositoryDetail-CdOFQayq.js b/src/main/resources/static/assets/RepositoryDetail-CdOFQayq.js new file mode 100644 index 00000000..be02fc44 --- /dev/null +++ b/src/main/resources/static/assets/RepositoryDetail-CdOFQayq.js @@ -0,0 +1,15 @@ +import{d as C,f as D,c as $,a as t,t as B,o as N,i as x,r as u,j as y,l as w,E as I,J as L,h as A,b as _}from"./index-8PPGy_cS.js";import{b as S,c as z,g as E,e as P}from"./repository-CNj60vu0.js";import{_ as q}from"./lodash-CprRz5WW.js";import{_ as T}from"./Tabulator.vue_vue_type_style_index_0_lang-pkMkfUCQ.js";import"./request-BD-3QCnG.js";const G={class:"modal fade",id:"deleteComponent",tabindex:"-1"},M={class:"modal-dialog modal-lg",role:"document"},j={class:"modal-content"},J={class:"modal-body text-left py-4"},K={class:"modal-footer"},H=C({__name:"deleteComponent",props:{componentName:{},componentId:{}},emits:["get-detail"],setup(b,{emit:f}){const d=D(),r=b,i=f,m=async()=>{const{data:l}=await S("nexus",r.componentId);l?d.success("Deleted successfully."):d.error("Failed to delete."),i("get-detail")};return(l,a)=>(N(),$("div",G,[t("div",M,[t("div",j,[a[3]||(a[3]=t("button",{type:"button",class:"btn-close","data-bs-dismiss":"modal","aria-label":"Close"},null,-1)),a[4]||(a[4]=t("div",{class:"modal-status bg-danger"},null,-1)),t("div",J,[a[1]||(a[1]=t("h3",{class:"mb-5"}," Delete Component ",-1)),t("h4",null,"Are you sure you want to delete "+B(r.componentName)+"?",1)]),t("div",K,[a[2]||(a[2]=t("a",{href:"#",class:"btn btn-link link-secondary","data-bs-dismiss":"modal"}," Cancel ",-1)),t("a",{href:"#",class:"btn btn-primary ms-auto","data-bs-dismiss":"modal",onClick:a[0]||(a[0]=v=>m())}," Delete ")])])])]))}}),O={class:"modal fade",id:"uploadComponent",tabindex:"-1"},Q={class:"modal-dialog modal-lg",role:"document"},W={class:"modal-content"},X={class:"modal-body text-left py-4"},Y={class:"mb-3"},Z=["value"],tt={class:"mb-3"},et=["disabled"],ot={class:"mb-3"},st={class:"grid gap-0 column-gap-3"},lt={class:"modal-footer"},at=C({__name:"uploadComponent",props:{repositoryName:{},format:{}},emits:["get-detail"],setup(b,{emit:f}){const d=D(),r=b,i=f;x(()=>{p()});const m=u("/"),l=u([]),a=c=>{l.value=c.target.files[0]},v=async()=>{if(r.format=="raw"&&q.isEmpty(m.value)){d.error("Please enter the path.");return}if(l.value.length==0){d.error("No file selected.");return}const c=new FormData;c.append("assets",l.value),c.append("directory",m.value);const{data:s}=await z("nexus",r.repositoryName,c);s?d.success("Uploaded successfully."):d.error("Failed to upload."),i("get-detail")},p=()=>{m.value="/",l.value=[]};return(c,s)=>(N(),$("div",O,[t("div",Q,[t("div",W,[s[7]||(s[7]=t("button",{type:"button",class:"btn-close","data-bs-dismiss":"modal","aria-label":"Close"},null,-1)),t("div",X,[s[5]||(s[5]=t("h3",{class:"mb-5"}," File Upload ",-1)),t("div",null,[t("div",Y,[s[2]||(s[2]=t("label",{class:"form-label"},"Name",-1)),t("input",{type:"text",class:"form-control p-2 g-col-11",value:r.repositoryName,readonly:""},null,8,Z)]),t("div",tt,[s[3]||(s[3]=t("label",{class:"form-label"},"Path",-1)),y(t("input",{type:"text",class:"form-control p-2 g-col-11","onUpdate:modelValue":s[0]||(s[0]=g=>m.value=g),disabled:r.format!="raw"},null,8,et),[[w,m.value]])]),t("div",ot,[s[4]||(s[4]=t("label",{class:"form-label required"},"File",-1)),t("div",st,[t("input",{type:"file",class:"form-control p-2 g-col-11",onChange:a},null,32)])])])]),t("div",lt,[s[6]||(s[6]=t("a",{href:"#",class:"btn btn-link link-secondary","data-bs-dismiss":"modal"}," Cancel ",-1)),t("a",{href:"#",class:"btn btn-primary ms-auto","data-bs-dismiss":"modal",onClick:s[1]||(s[1]=g=>v())}," Upload ")])])])]))}}),nt={class:"card w-100",ref:"workflowForm"},it={class:"card-body"},dt={class:"card-title"},rt={class:"mb-3"},mt={class:"grid gap-0 column-gap-3"},ct={class:"mb-3"},ut={class:"grid gap-0 column-gap-3"},pt={class:"mb-3"},bt={class:"grid gap-0 column-gap-3"},ft={class:"mb-3"},vt={class:"grid gap-0 column-gap-3"},gt={class:"mb-3"},$t=C({__name:"RepositoryDetail",props:{embedded:{type:Boolean},repositoryName:{}},emits:["back-to-list"],setup(b,{emit:f}){D();const d=I(),r=L(),i=b,m=f,l=u({}),a=u([]),v=u([]);x(async()=>{h(),i.embedded||await p()});const p=async n=>{const e=d.params.repositoryName,o=n??(i.embedded?i.repositoryName:e);if(!o)return;const{data:k}=await E("nexus",o);l.value=k,await c()};A(()=>i.repositoryName,async n=>{i.embedded&&n&&await p(n)},{immediate:!0});const c=async()=>{const{data:n}=await P("nexus",l.value.name);a.value=n},s=u(""),g=u(""),h=()=>{v.value=[{title:"Name",field:"name",width:"15%"},{title:"URL(Path)",field:"assets",width:"50%",formatter:function(n){const e=n.getValue();return e&&e.length>0?e[0].downloadUrl:"N/A"}},{title:"Size",field:"assets",width:"15%",formatter:function(n){const e=n.getValue();return e&&e.length>0?`${(e[0].fileSize/1024).toFixed(2)} KB`:"N/A"}},{title:"Action",width:"20%",formatter:U,cellClick:function(n,e){const o=n.target;if((o==null?void 0:o.getAttribute("id"))==="download-btn"){console.log("download");let V=e.getRow().getData();F(V)}else s.value=e.getRow().getData().id,g.value=e.getRow().getData().name}}]},U=()=>` +
+ + +
`,F=n=>{const e=n.assets[0].downloadUrl,o=document.createElement("a");o.href=e,o.download="",document.body.appendChild(o),o.click(),document.body.removeChild(o)},R=()=>{i.embedded?m("back-to-list"):r.push({name:"repositoryList"})};return(n,e)=>(N(),$("div",nt,[e[9]||(e[9]=t("div",{class:"card-header"},[t("div",{class:"card-title"},[t("h1",null,"Repository Detail")])],-1)),t("div",it,[t("div",dt,[t("div",rt,[e[4]||(e[4]=t("label",{class:"form-label"},"Name",-1)),t("div",mt,[y(t("input",{type:"text",ref:"repositoryName",class:"form-control p-2 g-col-11","onUpdate:modelValue":e[0]||(e[0]=o=>l.value.name=o),disabled:""},null,512),[[w,l.value.name]])])]),t("div",ct,[e[5]||(e[5]=t("label",{class:"form-label"},"Format",-1)),t("div",ut,[y(t("input",{type:"text",ref:"repositoryFormat",class:"form-control p-2 g-col-11","onUpdate:modelValue":e[1]||(e[1]=o=>l.value.format=o),disabled:""},null,512),[[w,l.value.format]])])]),t("div",pt,[e[6]||(e[6]=t("label",{class:"form-label required"},"URL(Path)",-1)),t("div",bt,[y(t("input",{type:"text",ref:"repositoryFormat",class:"form-control p-2 g-col-11","onUpdate:modelValue":e[2]||(e[2]=o=>l.value.url=o),disabled:""},null,512),[[w,l.value.url]])])]),t("div",ft,[e[7]||(e[7]=t("label",{class:"form-label required"},"Type(hosted)",-1)),t("div",vt,[y(t("input",{type:"text",ref:"repositoryFormat",class:"form-control p-2 g-col-11","onUpdate:modelValue":e[3]||(e[3]=o=>l.value.type=o),disabled:""},null,512),[[w,l.value.type]])])]),t("div",gt,[_(T,{columns:v.value,"table-data":a.value},null,8,["columns","table-data"])]),t("div",{class:"row align-items-center"},[e[8]||(e[8]=t("div",{id:"gap",class:"col"},null,-1)),t("div",{class:"col-auto ms-auto"},[t("div",{class:"btn-list"},[t("button",{class:"btn btn-outline-primary",onClick:R}," Back to List ")])])])]),_(H,{"component-name":g.value,"component-id":s.value,onGetDetail:p},null,8,["component-name","component-id"]),_(at,{"repository-name":l.value.name,format:l.value.format,onGetDetail:p},null,8,["repository-name","format"])])],512))}});export{$t as default}; diff --git a/src/main/resources/static/assets/RepositoryDetail-DP0dnufb.js b/src/main/resources/static/assets/RepositoryDetail-DP0dnufb.js new file mode 100644 index 00000000..c768fae1 --- /dev/null +++ b/src/main/resources/static/assets/RepositoryDetail-DP0dnufb.js @@ -0,0 +1,15 @@ +import{d as C,f as D,c as $,a as t,t as B,o as N,i as x,r as u,j as y,l as w,E as I,J as L,h as A,b as _}from"./index-BKFNv1Gc.js";import{b as S,c as z,g as E,e as P}from"./repository-DkJ-R22y.js";import{_ as q}from"./lodash-DPUzVvBK.js";import{_ as T}from"./Tabulator.vue_vue_type_style_index_0_lang-DYWrT5tk.js";import"./request-D9joEmfF.js";const G={class:"modal fade",id:"deleteComponent",tabindex:"-1"},M={class:"modal-dialog modal-lg",role:"document"},j={class:"modal-content"},J={class:"modal-body text-left py-4"},K={class:"modal-footer"},H=C({__name:"deleteComponent",props:{componentName:{},componentId:{}},emits:["get-detail"],setup(b,{emit:f}){const d=D(),r=b,i=f,m=async()=>{const{data:l}=await S("nexus",r.componentId);l?d.success("Deleted successfully."):d.error("Failed to delete."),i("get-detail")};return(l,a)=>(N(),$("div",G,[t("div",M,[t("div",j,[a[3]||(a[3]=t("button",{type:"button",class:"btn-close","data-bs-dismiss":"modal","aria-label":"Close"},null,-1)),a[4]||(a[4]=t("div",{class:"modal-status bg-danger"},null,-1)),t("div",J,[a[1]||(a[1]=t("h3",{class:"mb-5"}," Delete Component ",-1)),t("h4",null,"Are you sure you want to delete "+B(r.componentName)+"?",1)]),t("div",K,[a[2]||(a[2]=t("a",{href:"#",class:"btn btn-link link-secondary","data-bs-dismiss":"modal"}," Cancel ",-1)),t("a",{href:"#",class:"btn btn-primary ms-auto","data-bs-dismiss":"modal",onClick:a[0]||(a[0]=v=>m())}," Delete ")])])])]))}}),O={class:"modal fade",id:"uploadComponent",tabindex:"-1"},Q={class:"modal-dialog modal-lg",role:"document"},W={class:"modal-content"},X={class:"modal-body text-left py-4"},Y={class:"mb-3"},Z=["value"],tt={class:"mb-3"},et=["disabled"],ot={class:"mb-3"},st={class:"grid gap-0 column-gap-3"},lt={class:"modal-footer"},at=C({__name:"uploadComponent",props:{repositoryName:{},format:{}},emits:["get-detail"],setup(b,{emit:f}){const d=D(),r=b,i=f;x(()=>{p()});const m=u("/"),l=u([]),a=c=>{l.value=c.target.files[0]},v=async()=>{if(r.format=="raw"&&q.isEmpty(m.value)){d.error("Please enter the path.");return}if(l.value.length==0){d.error("No file selected.");return}const c=new FormData;c.append("assets",l.value),c.append("directory",m.value);const{data:s}=await z("nexus",r.repositoryName,c);s?d.success("Uploaded successfully."):d.error("Failed to upload."),i("get-detail")},p=()=>{m.value="/",l.value=[]};return(c,s)=>(N(),$("div",O,[t("div",Q,[t("div",W,[s[7]||(s[7]=t("button",{type:"button",class:"btn-close","data-bs-dismiss":"modal","aria-label":"Close"},null,-1)),t("div",X,[s[5]||(s[5]=t("h3",{class:"mb-5"}," File Upload ",-1)),t("div",null,[t("div",Y,[s[2]||(s[2]=t("label",{class:"form-label"},"Name",-1)),t("input",{type:"text",class:"form-control p-2 g-col-11",value:r.repositoryName,readonly:""},null,8,Z)]),t("div",tt,[s[3]||(s[3]=t("label",{class:"form-label"},"Path",-1)),y(t("input",{type:"text",class:"form-control p-2 g-col-11","onUpdate:modelValue":s[0]||(s[0]=g=>m.value=g),disabled:r.format!="raw"},null,8,et),[[w,m.value]])]),t("div",ot,[s[4]||(s[4]=t("label",{class:"form-label required"},"File",-1)),t("div",st,[t("input",{type:"file",class:"form-control p-2 g-col-11",onChange:a},null,32)])])])]),t("div",lt,[s[6]||(s[6]=t("a",{href:"#",class:"btn btn-link link-secondary","data-bs-dismiss":"modal"}," Cancel ",-1)),t("a",{href:"#",class:"btn btn-primary ms-auto","data-bs-dismiss":"modal",onClick:s[1]||(s[1]=g=>v())}," Upload ")])])])]))}}),nt={class:"card w-100",ref:"workflowForm"},it={class:"card-body"},dt={class:"card-title"},rt={class:"mb-3"},mt={class:"grid gap-0 column-gap-3"},ct={class:"mb-3"},ut={class:"grid gap-0 column-gap-3"},pt={class:"mb-3"},bt={class:"grid gap-0 column-gap-3"},ft={class:"mb-3"},vt={class:"grid gap-0 column-gap-3"},gt={class:"mb-3"},$t=C({__name:"RepositoryDetail",props:{embedded:{type:Boolean},repositoryName:{}},emits:["back-to-list"],setup(b,{emit:f}){D();const d=I(),r=L(),i=b,m=f,l=u({}),a=u([]),v=u([]);x(async()=>{h(),i.embedded||await p()});const p=async n=>{const e=d.params.repositoryName,o=n??(i.embedded?i.repositoryName:e);if(!o)return;const{data:k}=await E("nexus",o);l.value=k,await c()};A(()=>i.repositoryName,async n=>{i.embedded&&n&&await p(n)},{immediate:!0});const c=async()=>{const{data:n}=await P("nexus",l.value.name);a.value=n},s=u(""),g=u(""),h=()=>{v.value=[{title:"Name",field:"name",width:"15%"},{title:"URL(Path)",field:"assets",width:"50%",formatter:function(n){const e=n.getValue();return e&&e.length>0?e[0].downloadUrl:"N/A"}},{title:"Size",field:"assets",width:"15%",formatter:function(n){const e=n.getValue();return e&&e.length>0?`${(e[0].fileSize/1024).toFixed(2)} KB`:"N/A"}},{title:"Action",width:"20%",formatter:U,cellClick:function(n,e){const o=n.target;if((o==null?void 0:o.getAttribute("id"))==="download-btn"){console.log("download");let V=e.getRow().getData();F(V)}else s.value=e.getRow().getData().id,g.value=e.getRow().getData().name}}]},U=()=>` +
+ + +
`,F=n=>{const e=n.assets[0].downloadUrl,o=document.createElement("a");o.href=e,o.download="",document.body.appendChild(o),o.click(),document.body.removeChild(o)},R=()=>{i.embedded?m("back-to-list"):r.push({name:"repositoryList"})};return(n,e)=>(N(),$("div",nt,[e[9]||(e[9]=t("div",{class:"card-header"},[t("div",{class:"card-title"},[t("h1",null,"Repository Detail")])],-1)),t("div",it,[t("div",dt,[t("div",rt,[e[4]||(e[4]=t("label",{class:"form-label"},"Name",-1)),t("div",mt,[y(t("input",{type:"text",ref:"repositoryName",class:"form-control p-2 g-col-11","onUpdate:modelValue":e[0]||(e[0]=o=>l.value.name=o),disabled:""},null,512),[[w,l.value.name]])])]),t("div",ct,[e[5]||(e[5]=t("label",{class:"form-label"},"Format",-1)),t("div",ut,[y(t("input",{type:"text",ref:"repositoryFormat",class:"form-control p-2 g-col-11","onUpdate:modelValue":e[1]||(e[1]=o=>l.value.format=o),disabled:""},null,512),[[w,l.value.format]])])]),t("div",pt,[e[6]||(e[6]=t("label",{class:"form-label required"},"URL(Path)",-1)),t("div",bt,[y(t("input",{type:"text",ref:"repositoryFormat",class:"form-control p-2 g-col-11","onUpdate:modelValue":e[2]||(e[2]=o=>l.value.url=o),disabled:""},null,512),[[w,l.value.url]])])]),t("div",ft,[e[7]||(e[7]=t("label",{class:"form-label required"},"Type(hosted)",-1)),t("div",vt,[y(t("input",{type:"text",ref:"repositoryFormat",class:"form-control p-2 g-col-11","onUpdate:modelValue":e[3]||(e[3]=o=>l.value.type=o),disabled:""},null,512),[[w,l.value.type]])])]),t("div",gt,[_(T,{columns:v.value,"table-data":a.value},null,8,["columns","table-data"])]),t("div",{class:"row align-items-center"},[e[8]||(e[8]=t("div",{id:"gap",class:"col"},null,-1)),t("div",{class:"col-auto ms-auto"},[t("div",{class:"btn-list"},[t("button",{class:"btn btn-outline-primary",onClick:R}," Back to List ")])])])]),_(H,{"component-name":g.value,"component-id":s.value,onGetDetail:p},null,8,["component-name","component-id"]),_(at,{"repository-name":l.value.name,format:l.value.format,onGetDetail:p},null,8,["repository-name","format"])])],512))}});export{$t as default}; diff --git a/src/main/resources/static/assets/RepositoryDetail-EZ68pMZx.js b/src/main/resources/static/assets/RepositoryDetail-EZ68pMZx.js new file mode 100644 index 00000000..1b4f253c --- /dev/null +++ b/src/main/resources/static/assets/RepositoryDetail-EZ68pMZx.js @@ -0,0 +1,15 @@ +import{d as C,f as D,c as $,a as t,t as B,o as N,i as x,r as u,j as y,l as w,E as I,J as L,h as A,b as _}from"./index-DKle5_5b.js";import{b as S,c as z,g as E,e as P}from"./repository-CdIWmRAQ.js";import{_ as q}from"./lodash-pZBD3XEw.js";import{_ as T}from"./Tabulator.vue_vue_type_style_index_0_lang-BwLOthig.js";import"./request-DSShymva.js";const G={class:"modal fade",id:"deleteComponent",tabindex:"-1"},M={class:"modal-dialog modal-lg",role:"document"},j={class:"modal-content"},J={class:"modal-body text-left py-4"},K={class:"modal-footer"},H=C({__name:"deleteComponent",props:{componentName:{},componentId:{}},emits:["get-detail"],setup(b,{emit:f}){const d=D(),r=b,i=f,m=async()=>{const{data:l}=await S("nexus",r.componentId);l?d.success("Deleted successfully."):d.error("Failed to delete."),i("get-detail")};return(l,a)=>(N(),$("div",G,[t("div",M,[t("div",j,[a[3]||(a[3]=t("button",{type:"button",class:"btn-close","data-bs-dismiss":"modal","aria-label":"Close"},null,-1)),a[4]||(a[4]=t("div",{class:"modal-status bg-danger"},null,-1)),t("div",J,[a[1]||(a[1]=t("h3",{class:"mb-5"}," Delete Component ",-1)),t("h4",null,"Are you sure you want to delete "+B(r.componentName)+"?",1)]),t("div",K,[a[2]||(a[2]=t("a",{href:"#",class:"btn btn-link link-secondary","data-bs-dismiss":"modal"}," Cancel ",-1)),t("a",{href:"#",class:"btn btn-primary ms-auto","data-bs-dismiss":"modal",onClick:a[0]||(a[0]=v=>m())}," Delete ")])])])]))}}),O={class:"modal fade",id:"uploadComponent",tabindex:"-1"},Q={class:"modal-dialog modal-lg",role:"document"},W={class:"modal-content"},X={class:"modal-body text-left py-4"},Y={class:"mb-3"},Z=["value"],tt={class:"mb-3"},et=["disabled"],ot={class:"mb-3"},st={class:"grid gap-0 column-gap-3"},lt={class:"modal-footer"},at=C({__name:"uploadComponent",props:{repositoryName:{},format:{}},emits:["get-detail"],setup(b,{emit:f}){const d=D(),r=b,i=f;x(()=>{p()});const m=u("/"),l=u([]),a=c=>{l.value=c.target.files[0]},v=async()=>{if(r.format=="raw"&&q.isEmpty(m.value)){d.error("Please enter the path.");return}if(l.value.length==0){d.error("No file selected.");return}const c=new FormData;c.append("assets",l.value),c.append("directory",m.value);const{data:s}=await z("nexus",r.repositoryName,c);s?d.success("Uploaded successfully."):d.error("Failed to upload."),i("get-detail")},p=()=>{m.value="/",l.value=[]};return(c,s)=>(N(),$("div",O,[t("div",Q,[t("div",W,[s[7]||(s[7]=t("button",{type:"button",class:"btn-close","data-bs-dismiss":"modal","aria-label":"Close"},null,-1)),t("div",X,[s[5]||(s[5]=t("h3",{class:"mb-5"}," File Upload ",-1)),t("div",null,[t("div",Y,[s[2]||(s[2]=t("label",{class:"form-label"},"Name",-1)),t("input",{type:"text",class:"form-control p-2 g-col-11",value:r.repositoryName,readonly:""},null,8,Z)]),t("div",tt,[s[3]||(s[3]=t("label",{class:"form-label"},"Path",-1)),y(t("input",{type:"text",class:"form-control p-2 g-col-11","onUpdate:modelValue":s[0]||(s[0]=g=>m.value=g),disabled:r.format!="raw"},null,8,et),[[w,m.value]])]),t("div",ot,[s[4]||(s[4]=t("label",{class:"form-label required"},"File",-1)),t("div",st,[t("input",{type:"file",class:"form-control p-2 g-col-11",onChange:a},null,32)])])])]),t("div",lt,[s[6]||(s[6]=t("a",{href:"#",class:"btn btn-link link-secondary","data-bs-dismiss":"modal"}," Cancel ",-1)),t("a",{href:"#",class:"btn btn-primary ms-auto","data-bs-dismiss":"modal",onClick:s[1]||(s[1]=g=>v())}," Upload ")])])])]))}}),nt={class:"card w-100",ref:"workflowForm"},it={class:"card-body"},dt={class:"card-title"},rt={class:"mb-3"},mt={class:"grid gap-0 column-gap-3"},ct={class:"mb-3"},ut={class:"grid gap-0 column-gap-3"},pt={class:"mb-3"},bt={class:"grid gap-0 column-gap-3"},ft={class:"mb-3"},vt={class:"grid gap-0 column-gap-3"},gt={class:"mb-3"},$t=C({__name:"RepositoryDetail",props:{embedded:{type:Boolean},repositoryName:{}},emits:["back-to-list"],setup(b,{emit:f}){D();const d=I(),r=L(),i=b,m=f,l=u({}),a=u([]),v=u([]);x(async()=>{h(),i.embedded||await p()});const p=async n=>{const e=d.params.repositoryName,o=n??(i.embedded?i.repositoryName:e);if(!o)return;const{data:k}=await E("nexus",o);l.value=k,await c()};A(()=>i.repositoryName,async n=>{i.embedded&&n&&await p(n)},{immediate:!0});const c=async()=>{const{data:n}=await P("nexus",l.value.name);a.value=n},s=u(""),g=u(""),h=()=>{v.value=[{title:"Name",field:"name",width:"15%"},{title:"URL(Path)",field:"assets",width:"50%",formatter:function(n){const e=n.getValue();return e&&e.length>0?e[0].downloadUrl:"N/A"}},{title:"Size",field:"assets",width:"15%",formatter:function(n){const e=n.getValue();return e&&e.length>0?`${(e[0].fileSize/1024).toFixed(2)} KB`:"N/A"}},{title:"Action",width:"20%",formatter:U,cellClick:function(n,e){const o=n.target;if((o==null?void 0:o.getAttribute("id"))==="download-btn"){console.log("download");let V=e.getRow().getData();F(V)}else s.value=e.getRow().getData().id,g.value=e.getRow().getData().name}}]},U=()=>` +
+ + +
`,F=n=>{const e=n.assets[0].downloadUrl,o=document.createElement("a");o.href=e,o.download="",document.body.appendChild(o),o.click(),document.body.removeChild(o)},R=()=>{i.embedded?m("back-to-list"):r.push({name:"repositoryList"})};return(n,e)=>(N(),$("div",nt,[e[9]||(e[9]=t("div",{class:"card-header"},[t("div",{class:"card-title"},[t("h1",null,"Repository Detail")])],-1)),t("div",it,[t("div",dt,[t("div",rt,[e[4]||(e[4]=t("label",{class:"form-label"},"Name",-1)),t("div",mt,[y(t("input",{type:"text",ref:"repositoryName",class:"form-control p-2 g-col-11","onUpdate:modelValue":e[0]||(e[0]=o=>l.value.name=o),disabled:""},null,512),[[w,l.value.name]])])]),t("div",ct,[e[5]||(e[5]=t("label",{class:"form-label"},"Format",-1)),t("div",ut,[y(t("input",{type:"text",ref:"repositoryFormat",class:"form-control p-2 g-col-11","onUpdate:modelValue":e[1]||(e[1]=o=>l.value.format=o),disabled:""},null,512),[[w,l.value.format]])])]),t("div",pt,[e[6]||(e[6]=t("label",{class:"form-label required"},"URL(Path)",-1)),t("div",bt,[y(t("input",{type:"text",ref:"repositoryFormat",class:"form-control p-2 g-col-11","onUpdate:modelValue":e[2]||(e[2]=o=>l.value.url=o),disabled:""},null,512),[[w,l.value.url]])])]),t("div",ft,[e[7]||(e[7]=t("label",{class:"form-label required"},"Type(hosted)",-1)),t("div",vt,[y(t("input",{type:"text",ref:"repositoryFormat",class:"form-control p-2 g-col-11","onUpdate:modelValue":e[3]||(e[3]=o=>l.value.type=o),disabled:""},null,512),[[w,l.value.type]])])]),t("div",gt,[_(T,{columns:v.value,"table-data":a.value},null,8,["columns","table-data"])]),t("div",{class:"row align-items-center"},[e[8]||(e[8]=t("div",{id:"gap",class:"col"},null,-1)),t("div",{class:"col-auto ms-auto"},[t("div",{class:"btn-list"},[t("button",{class:"btn btn-outline-primary",onClick:R}," Back to List ")])])])]),_(H,{"component-name":g.value,"component-id":s.value,onGetDetail:p},null,8,["component-name","component-id"]),_(at,{"repository-name":l.value.name,format:l.value.format,onGetDetail:p},null,8,["repository-name","format"])])],512))}});export{$t as default}; diff --git a/src/main/resources/static/assets/RepositoryDetail-kNHmtnL-.js b/src/main/resources/static/assets/RepositoryDetail-kNHmtnL-.js new file mode 100644 index 00000000..3193851d --- /dev/null +++ b/src/main/resources/static/assets/RepositoryDetail-kNHmtnL-.js @@ -0,0 +1,15 @@ +import{d as C,f as D,c as $,a as t,t as B,o as N,i as x,r as u,j as y,l as w,E as I,J as L,h as A,b as _}from"./index-DU977P1k.js";import{b as S,c as z,g as E,e as P}from"./repository-XiwfojAe.js";import{_ as q}from"./lodash-BpiFzpk2.js";import{_ as T}from"./Tabulator.vue_vue_type_style_index_0_lang-COGEFirO.js";import"./request-jyImEBot.js";const G={class:"modal fade",id:"deleteComponent",tabindex:"-1"},M={class:"modal-dialog modal-lg",role:"document"},j={class:"modal-content"},J={class:"modal-body text-left py-4"},K={class:"modal-footer"},H=C({__name:"deleteComponent",props:{componentName:{},componentId:{}},emits:["get-detail"],setup(b,{emit:f}){const d=D(),r=b,i=f,m=async()=>{const{data:l}=await S("nexus",r.componentId);l?d.success("Deleted successfully."):d.error("Failed to delete."),i("get-detail")};return(l,a)=>(N(),$("div",G,[t("div",M,[t("div",j,[a[3]||(a[3]=t("button",{type:"button",class:"btn-close","data-bs-dismiss":"modal","aria-label":"Close"},null,-1)),a[4]||(a[4]=t("div",{class:"modal-status bg-danger"},null,-1)),t("div",J,[a[1]||(a[1]=t("h3",{class:"mb-5"}," Delete Component ",-1)),t("h4",null,"Are you sure you want to delete "+B(r.componentName)+"?",1)]),t("div",K,[a[2]||(a[2]=t("a",{href:"#",class:"btn btn-link link-secondary","data-bs-dismiss":"modal"}," Cancel ",-1)),t("a",{href:"#",class:"btn btn-primary ms-auto","data-bs-dismiss":"modal",onClick:a[0]||(a[0]=v=>m())}," Delete ")])])])]))}}),O={class:"modal fade",id:"uploadComponent",tabindex:"-1"},Q={class:"modal-dialog modal-lg",role:"document"},W={class:"modal-content"},X={class:"modal-body text-left py-4"},Y={class:"mb-3"},Z=["value"],tt={class:"mb-3"},et=["disabled"],ot={class:"mb-3"},st={class:"grid gap-0 column-gap-3"},lt={class:"modal-footer"},at=C({__name:"uploadComponent",props:{repositoryName:{},format:{}},emits:["get-detail"],setup(b,{emit:f}){const d=D(),r=b,i=f;x(()=>{p()});const m=u("/"),l=u([]),a=c=>{l.value=c.target.files[0]},v=async()=>{if(r.format=="raw"&&q.isEmpty(m.value)){d.error("Please enter the path.");return}if(l.value.length==0){d.error("No file selected.");return}const c=new FormData;c.append("assets",l.value),c.append("directory",m.value);const{data:s}=await z("nexus",r.repositoryName,c);s?d.success("Uploaded successfully."):d.error("Failed to upload."),i("get-detail")},p=()=>{m.value="/",l.value=[]};return(c,s)=>(N(),$("div",O,[t("div",Q,[t("div",W,[s[7]||(s[7]=t("button",{type:"button",class:"btn-close","data-bs-dismiss":"modal","aria-label":"Close"},null,-1)),t("div",X,[s[5]||(s[5]=t("h3",{class:"mb-5"}," File Upload ",-1)),t("div",null,[t("div",Y,[s[2]||(s[2]=t("label",{class:"form-label"},"Name",-1)),t("input",{type:"text",class:"form-control p-2 g-col-11",value:r.repositoryName,readonly:""},null,8,Z)]),t("div",tt,[s[3]||(s[3]=t("label",{class:"form-label"},"Path",-1)),y(t("input",{type:"text",class:"form-control p-2 g-col-11","onUpdate:modelValue":s[0]||(s[0]=g=>m.value=g),disabled:r.format!="raw"},null,8,et),[[w,m.value]])]),t("div",ot,[s[4]||(s[4]=t("label",{class:"form-label required"},"File",-1)),t("div",st,[t("input",{type:"file",class:"form-control p-2 g-col-11",onChange:a},null,32)])])])]),t("div",lt,[s[6]||(s[6]=t("a",{href:"#",class:"btn btn-link link-secondary","data-bs-dismiss":"modal"}," Cancel ",-1)),t("a",{href:"#",class:"btn btn-primary ms-auto","data-bs-dismiss":"modal",onClick:s[1]||(s[1]=g=>v())}," Upload ")])])])]))}}),nt={class:"card w-100",ref:"workflowForm"},it={class:"card-body"},dt={class:"card-title"},rt={class:"mb-3"},mt={class:"grid gap-0 column-gap-3"},ct={class:"mb-3"},ut={class:"grid gap-0 column-gap-3"},pt={class:"mb-3"},bt={class:"grid gap-0 column-gap-3"},ft={class:"mb-3"},vt={class:"grid gap-0 column-gap-3"},gt={class:"mb-3"},$t=C({__name:"RepositoryDetail",props:{embedded:{type:Boolean},repositoryName:{}},emits:["back-to-list"],setup(b,{emit:f}){D();const d=I(),r=L(),i=b,m=f,l=u({}),a=u([]),v=u([]);x(async()=>{h(),i.embedded||await p()});const p=async n=>{const e=d.params.repositoryName,o=n??(i.embedded?i.repositoryName:e);if(!o)return;const{data:k}=await E("nexus",o);l.value=k,await c()};A(()=>i.repositoryName,async n=>{i.embedded&&n&&await p(n)},{immediate:!0});const c=async()=>{const{data:n}=await P("nexus",l.value.name);a.value=n},s=u(""),g=u(""),h=()=>{v.value=[{title:"Name",field:"name",width:"15%"},{title:"URL(Path)",field:"assets",width:"50%",formatter:function(n){const e=n.getValue();return e&&e.length>0?e[0].downloadUrl:"N/A"}},{title:"Size",field:"assets",width:"15%",formatter:function(n){const e=n.getValue();return e&&e.length>0?`${(e[0].fileSize/1024).toFixed(2)} KB`:"N/A"}},{title:"Action",width:"20%",formatter:U,cellClick:function(n,e){const o=n.target;if((o==null?void 0:o.getAttribute("id"))==="download-btn"){console.log("download");let V=e.getRow().getData();F(V)}else s.value=e.getRow().getData().id,g.value=e.getRow().getData().name}}]},U=()=>` +
+ + +
`,F=n=>{const e=n.assets[0].downloadUrl,o=document.createElement("a");o.href=e,o.download="",document.body.appendChild(o),o.click(),document.body.removeChild(o)},R=()=>{i.embedded?m("back-to-list"):r.push({name:"repositoryList"})};return(n,e)=>(N(),$("div",nt,[e[9]||(e[9]=t("div",{class:"card-header"},[t("div",{class:"card-title"},[t("h1",null,"Repository Detail")])],-1)),t("div",it,[t("div",dt,[t("div",rt,[e[4]||(e[4]=t("label",{class:"form-label"},"Name",-1)),t("div",mt,[y(t("input",{type:"text",ref:"repositoryName",class:"form-control p-2 g-col-11","onUpdate:modelValue":e[0]||(e[0]=o=>l.value.name=o),disabled:""},null,512),[[w,l.value.name]])])]),t("div",ct,[e[5]||(e[5]=t("label",{class:"form-label"},"Format",-1)),t("div",ut,[y(t("input",{type:"text",ref:"repositoryFormat",class:"form-control p-2 g-col-11","onUpdate:modelValue":e[1]||(e[1]=o=>l.value.format=o),disabled:""},null,512),[[w,l.value.format]])])]),t("div",pt,[e[6]||(e[6]=t("label",{class:"form-label required"},"URL(Path)",-1)),t("div",bt,[y(t("input",{type:"text",ref:"repositoryFormat",class:"form-control p-2 g-col-11","onUpdate:modelValue":e[2]||(e[2]=o=>l.value.url=o),disabled:""},null,512),[[w,l.value.url]])])]),t("div",ft,[e[7]||(e[7]=t("label",{class:"form-label required"},"Type(hosted)",-1)),t("div",vt,[y(t("input",{type:"text",ref:"repositoryFormat",class:"form-control p-2 g-col-11","onUpdate:modelValue":e[3]||(e[3]=o=>l.value.type=o),disabled:""},null,512),[[w,l.value.type]])])]),t("div",gt,[_(T,{columns:v.value,"table-data":a.value},null,8,["columns","table-data"])]),t("div",{class:"row align-items-center"},[e[8]||(e[8]=t("div",{id:"gap",class:"col"},null,-1)),t("div",{class:"col-auto ms-auto"},[t("div",{class:"btn-list"},[t("button",{class:"btn btn-outline-primary",onClick:R}," Back to List ")])])])]),_(H,{"component-name":g.value,"component-id":s.value,onGetDetail:p},null,8,["component-name","component-id"]),_(at,{"repository-name":l.value.name,format:l.value.format,onGetDetail:p},null,8,["repository-name","format"])])],512))}});export{$t as default}; diff --git a/src/main/resources/static/assets/RepositoryList-B5opHrLQ.js b/src/main/resources/static/assets/RepositoryList-B5opHrLQ.js new file mode 100644 index 00000000..f3e93e4e --- /dev/null +++ b/src/main/resources/static/assets/RepositoryList-B5opHrLQ.js @@ -0,0 +1,17 @@ +import{_ as $}from"./Tabulator.vue_vue_type_style_index_0_lang-BwLOthig.js";import{g as P,r as V,u as B,d as L,a as M}from"./repository-CdIWmRAQ.js";import{d as C,f as D,r as p,g as q,h as A,i as N,c as x,a as t,t as _,j as c,l as E,z as y,o as F,b as R,I as T}from"./index-DKle5_5b.js";import{M as I}from"./bootstrap.esm-Ceob_0pG.js";import"./request-DSShymva.js";const S={class:"modal-dialog modal-lg",role:"document"},G={class:"modal-content"},O={class:"modal-header"},j={class:"modal-title"},z={class:"modal-body py-4"},H={class:"row mb-3"},J=["disabled"],K={class:"mb-3"},Q={class:"form-check form-check-inline"},W=["disabled"],X={class:"form-check form-check-inline"},Y=["disabled"],Z={class:"mb-3"},ee={class:"form-check form-check-inline"},te={class:"form-check form-check-inline"},oe={class:"form-check form-check-inline"},le={class:"mb-3"},se={class:"form-check form-check-inline"},ae={class:"form-check form-check-inline"},ne={class:"modal-footer"},ie=C({__name:"repositoryForm",props:{mode:{},repositoryName:{}},emits:["get-repository-list"],setup(v,{emit:b}){const s=D(),m=p(),f=p(),r=v,u=b,a=q(()=>r.repositoryName);A(a,async()=>{await d()}),N(async()=>{m.value&&(f.value=new I(m.value)),await d()});const o=p({}),n=p(""),d=async()=>{if(r.mode==="new")o.value.name="",o.value.format="helm",o.value.type="hosted",o.value.url="",o.value.online=!0,n.value="allow";else{const{data:i}=await P("nexus",r.repositoryName);o.value=i,n.value=i.storage.writePolicy}},w=async()=>{if(!o.value.name||o.value.name.trim()===""){s.error("Please enter repository name.");return}if(!o.value.format){s.error("Please select format.");return}if(!n.value){s.error("Please select allow policy.");return}if(o.value.online===void 0||o.value.online===null){s.error("Please select online/offline status.");return}if(o.value.storage={blobStoreName:"default",strictContentTypeValidation:!0,writePolicy:n.value},o.value.format!="docker")o.value.docker={};else{const e={v1Enabled:!1,forceBasicAuth:!0};o.value.docker=e}let i=!1;r.mode==="new"?i=await g():i=await k(),i&&(u("get-repository-list"),d(),f.value&&(f.value.hide(),setTimeout(()=>{document.body.classList.remove("modal-open");const e=document.querySelector(".modal-backdrop");e==null||e.remove()},150)))},g=async()=>{try{const{data:i}=await V("nexus",o.value);return i?(s.success("Repository created successfully."),!0):(s.error("Failed to create repository."),!1)}catch{return s.error("Failed to create repository."),!1}},k=async()=>{try{const{data:i}=await B("nexus",o.value);return i?(s.success("Repository updated successfully."),!0):(s.error("Failed to update repository."),!1)}catch{return s.error("Failed to update repository."),!1}};return(i,e)=>(F(),x("div",{class:"modal fade",id:"repositoryForm",tabindex:"-1",ref_key:"modalElement",ref:m},[t("div",S,[t("div",G,[t("div",O,[t("h3",j,"Repository "+_(r.mode==="new"?"Create":"Update"),1),e[10]||(e[10]=t("button",{type:"button",class:"btn-close","data-bs-dismiss":"modal","aria-label":"Close"},null,-1))]),t("div",z,[t("div",null,[t("div",H,[e[11]||(e[11]=t("label",{class:"form-label required"},"Name",-1)),c(t("input",{type:"text",class:"form-control p-2 g-col-11","onUpdate:modelValue":e[0]||(e[0]=l=>o.value.name=l),disabled:r.mode!="new",placeholder:"Enter repository name"},null,8,J),[[E,o.value.name]])]),t("div",K,[e[14]||(e[14]=t("label",{class:"form-label required"},"Format",-1)),t("div",null,[t("label",Q,[c(t("input",{class:"form-check-input",type:"radio",name:"format",value:"helm","onUpdate:modelValue":e[1]||(e[1]=l=>o.value.format=l),disabled:r.mode!="new"},null,8,W),[[y,o.value.format]]),e[12]||(e[12]=t("span",{class:"form-check-label"},"helm",-1))]),t("label",X,[c(t("input",{class:"form-check-input",type:"radio",name:"format",value:"docker","onUpdate:modelValue":e[2]||(e[2]=l=>o.value.format=l),disabled:r.mode!="new"},null,8,Y),[[y,o.value.format]]),e[13]||(e[13]=t("span",{class:"form-check-label"},"docker",-1))])])]),t("div",Z,[e[18]||(e[18]=t("label",{class:"form-label required"},"Allow",-1)),t("div",null,[t("label",ee,[c(t("input",{class:"form-check-input",type:"radio",name:"allow",value:"allow","onUpdate:modelValue":e[3]||(e[3]=l=>n.value=l)},null,512),[[y,n.value]]),e[15]||(e[15]=t("span",{class:"form-check-label"},"allow",-1))]),t("label",te,[c(t("input",{class:"form-check-input",type:"radio",name:"allow",value:"allow_once","onUpdate:modelValue":e[4]||(e[4]=l=>n.value=l)},null,512),[[y,n.value]]),e[16]||(e[16]=t("span",{class:"form-check-label"},"allow_once",-1))]),t("label",oe,[c(t("input",{class:"form-check-input",type:"radio",name:"allow",value:"deny","onUpdate:modelValue":e[5]||(e[5]=l=>n.value=l)},null,512),[[y,n.value]]),e[17]||(e[17]=t("span",{class:"form-check-label"},"deny",-1))])])]),t("div",le,[e[21]||(e[21]=t("label",{class:"form-label required"},"On/Offline",-1)),t("div",null,[t("label",se,[c(t("input",{class:"form-check-input",type:"radio",name:"online",value:"true","onUpdate:modelValue":e[6]||(e[6]=l=>o.value.online=l)},null,512),[[y,o.value.online]]),e[19]||(e[19]=t("span",{class:"form-check-label"},"true",-1))]),t("label",ae,[c(t("input",{class:"form-check-input",type:"radio",name:"online",value:"false","onUpdate:modelValue":e[7]||(e[7]=l=>o.value.online=l)},null,512),[[y,o.value.online]]),e[20]||(e[20]=t("span",{class:"form-check-label"},"false",-1))])])])])]),t("div",ne,[t("button",{type:"button",class:"btn btn-link link-secondary","data-bs-dismiss":"modal",onClick:e[8]||(e[8]=l=>d())}," Cancel "),t("button",{type:"button",ref:"submitBtn",class:"btn btn-primary ms-auto",onClick:e[9]||(e[9]=l=>w())},_(r.mode==="new"?"Create":"Update"),513)])])])],512))}}),re={class:"modal fade",id:"deleteRepository",tabindex:"-1"},de={class:"modal-dialog modal-lg",role:"document"},ue={class:"modal-content"},me={class:"modal-body text-left py-4"},ce={class:"modal-footer"},pe=C({__name:"deleteRepository",props:{repositoryName:{}},emits:["get-repository-list"],setup(v,{emit:b}){const s=D(),m=v,f=b,r=async()=>{const{data:u}=await L("nexus",m.repositoryName);u?s.success("Deleted successfully."):s.error("Failed to delete."),f("get-repository-list")};return(u,a)=>(F(),x("div",re,[t("div",de,[t("div",ue,[a[3]||(a[3]=t("button",{type:"button",class:"btn-close","data-bs-dismiss":"modal","aria-label":"Close"},null,-1)),a[4]||(a[4]=t("div",{class:"modal-status bg-danger"},null,-1)),t("div",me,[a[1]||(a[1]=t("h3",{class:"mb-5"}," Delete Repository ",-1)),t("h4",null,"Are you sure you want to delete "+_(m.repositoryName)+"?",1)]),t("div",ce,[a[2]||(a[2]=t("a",{href:"#",class:"btn btn-link link-secondary","data-bs-dismiss":"modal"}," Cancel ",-1)),t("a",{href:"#",class:"btn btn-primary ms-auto","data-bs-dismiss":"modal",onClick:a[0]||(a[0]=o=>r())}," Delete ")])])])]))}}),fe={class:"card w-100"},ge=C({__name:"RepositoryList",props:{embedded:{type:Boolean}},emits:["open-detail"],setup(v,{expose:b,emit:s}){const m=D(),f=v,r=s,u=e=>{if(d.value=e,f.embedded){r("open-detail",e);return}T.push({name:"repositoryDetail",params:{repositoryName:e}})},a=p([]),o=p([]);N(async()=>{w(),await n()});const n=async()=>{try{const{data:e}=await M("nexus");a.value=e}catch(e){console.log(e),m.error("Unable to fetch data.")}},d=p(""),w=()=>{o.value=[{title:"Name",field:"name",width:"15%",cellClick:function(e,l){e.stopPropagation(),u(l.getRow().getData().name)}},{title:"Format",field:"format",width:"10%",cellClick:function(e,l){e.stopPropagation(),u(l.getRow().getData().name)}},{title:"URL",field:"url",width:"40%",cellClick:function(e,l){e.stopPropagation(),u(l.getRow().getData().name)}},{title:"Type(hosted)",field:"type",width:"15%",cellClick:function(e,l){e.stopPropagation(),u(l.getRow().getData().name)}},{title:"Action",width:"20%",formatter:g,cellClick:function(e,l){const h=e.target,U=h==null?void 0:h.getAttribute("id");d.value=l.getRow().getData().name,U==="edit-btn"?k.value="edit":d.value=l.getRow().getData().name}}]},g=()=>` +
+ + +
`,k=p("new");return b({startCreate:()=>{d.value="",k.value="new"}}),(e,l)=>(F(),x("div",fe,[R($,{columns:o.value,"table-data":a.value},null,8,["columns","table-data"]),R(ie,{mode:k.value,"repository-name":d.value,onGetRepositoryList:n},null,8,["mode","repository-name"]),R(pe,{"repository-name":d.value,onGetRepositoryList:n},null,8,["repository-name"])]))}});export{ge as default}; diff --git a/src/main/resources/static/assets/RepositoryList-CEHvsm8y.js b/src/main/resources/static/assets/RepositoryList-CEHvsm8y.js new file mode 100644 index 00000000..ecabd99d --- /dev/null +++ b/src/main/resources/static/assets/RepositoryList-CEHvsm8y.js @@ -0,0 +1,17 @@ +import{_ as $}from"./Tabulator.vue_vue_type_style_index_0_lang-COGEFirO.js";import{g as P,r as V,u as B,d as L,a as M}from"./repository-XiwfojAe.js";import{d as C,f as D,r as p,g as q,h as A,i as N,c as x,a as t,t as _,j as c,l as E,z as y,o as F,b as R,I as T}from"./index-DU977P1k.js";import{M as I}from"./bootstrap.esm-Ceob_0pG.js";import"./request-jyImEBot.js";const S={class:"modal-dialog modal-lg",role:"document"},G={class:"modal-content"},O={class:"modal-header"},j={class:"modal-title"},z={class:"modal-body py-4"},H={class:"row mb-3"},J=["disabled"],K={class:"mb-3"},Q={class:"form-check form-check-inline"},W=["disabled"],X={class:"form-check form-check-inline"},Y=["disabled"],Z={class:"mb-3"},ee={class:"form-check form-check-inline"},te={class:"form-check form-check-inline"},oe={class:"form-check form-check-inline"},le={class:"mb-3"},se={class:"form-check form-check-inline"},ae={class:"form-check form-check-inline"},ne={class:"modal-footer"},ie=C({__name:"repositoryForm",props:{mode:{},repositoryName:{}},emits:["get-repository-list"],setup(v,{emit:b}){const s=D(),m=p(),f=p(),r=v,u=b,a=q(()=>r.repositoryName);A(a,async()=>{await d()}),N(async()=>{m.value&&(f.value=new I(m.value)),await d()});const o=p({}),n=p(""),d=async()=>{if(r.mode==="new")o.value.name="",o.value.format="helm",o.value.type="hosted",o.value.url="",o.value.online=!0,n.value="allow";else{const{data:i}=await P("nexus",r.repositoryName);o.value=i,n.value=i.storage.writePolicy}},w=async()=>{if(!o.value.name||o.value.name.trim()===""){s.error("Please enter repository name.");return}if(!o.value.format){s.error("Please select format.");return}if(!n.value){s.error("Please select allow policy.");return}if(o.value.online===void 0||o.value.online===null){s.error("Please select online/offline status.");return}if(o.value.storage={blobStoreName:"default",strictContentTypeValidation:!0,writePolicy:n.value},o.value.format!="docker")o.value.docker={};else{const e={v1Enabled:!1,forceBasicAuth:!0};o.value.docker=e}let i=!1;r.mode==="new"?i=await g():i=await k(),i&&(u("get-repository-list"),d(),f.value&&(f.value.hide(),setTimeout(()=>{document.body.classList.remove("modal-open");const e=document.querySelector(".modal-backdrop");e==null||e.remove()},150)))},g=async()=>{try{const{data:i}=await V("nexus",o.value);return i?(s.success("Repository created successfully."),!0):(s.error("Failed to create repository."),!1)}catch{return s.error("Failed to create repository."),!1}},k=async()=>{try{const{data:i}=await B("nexus",o.value);return i?(s.success("Repository updated successfully."),!0):(s.error("Failed to update repository."),!1)}catch{return s.error("Failed to update repository."),!1}};return(i,e)=>(F(),x("div",{class:"modal fade",id:"repositoryForm",tabindex:"-1",ref_key:"modalElement",ref:m},[t("div",S,[t("div",G,[t("div",O,[t("h3",j,"Repository "+_(r.mode==="new"?"Create":"Update"),1),e[10]||(e[10]=t("button",{type:"button",class:"btn-close","data-bs-dismiss":"modal","aria-label":"Close"},null,-1))]),t("div",z,[t("div",null,[t("div",H,[e[11]||(e[11]=t("label",{class:"form-label required"},"Name",-1)),c(t("input",{type:"text",class:"form-control p-2 g-col-11","onUpdate:modelValue":e[0]||(e[0]=l=>o.value.name=l),disabled:r.mode!="new",placeholder:"Enter repository name"},null,8,J),[[E,o.value.name]])]),t("div",K,[e[14]||(e[14]=t("label",{class:"form-label required"},"Format",-1)),t("div",null,[t("label",Q,[c(t("input",{class:"form-check-input",type:"radio",name:"format",value:"helm","onUpdate:modelValue":e[1]||(e[1]=l=>o.value.format=l),disabled:r.mode!="new"},null,8,W),[[y,o.value.format]]),e[12]||(e[12]=t("span",{class:"form-check-label"},"helm",-1))]),t("label",X,[c(t("input",{class:"form-check-input",type:"radio",name:"format",value:"docker","onUpdate:modelValue":e[2]||(e[2]=l=>o.value.format=l),disabled:r.mode!="new"},null,8,Y),[[y,o.value.format]]),e[13]||(e[13]=t("span",{class:"form-check-label"},"docker",-1))])])]),t("div",Z,[e[18]||(e[18]=t("label",{class:"form-label required"},"Allow",-1)),t("div",null,[t("label",ee,[c(t("input",{class:"form-check-input",type:"radio",name:"allow",value:"allow","onUpdate:modelValue":e[3]||(e[3]=l=>n.value=l)},null,512),[[y,n.value]]),e[15]||(e[15]=t("span",{class:"form-check-label"},"allow",-1))]),t("label",te,[c(t("input",{class:"form-check-input",type:"radio",name:"allow",value:"allow_once","onUpdate:modelValue":e[4]||(e[4]=l=>n.value=l)},null,512),[[y,n.value]]),e[16]||(e[16]=t("span",{class:"form-check-label"},"allow_once",-1))]),t("label",oe,[c(t("input",{class:"form-check-input",type:"radio",name:"allow",value:"deny","onUpdate:modelValue":e[5]||(e[5]=l=>n.value=l)},null,512),[[y,n.value]]),e[17]||(e[17]=t("span",{class:"form-check-label"},"deny",-1))])])]),t("div",le,[e[21]||(e[21]=t("label",{class:"form-label required"},"On/Offline",-1)),t("div",null,[t("label",se,[c(t("input",{class:"form-check-input",type:"radio",name:"online",value:"true","onUpdate:modelValue":e[6]||(e[6]=l=>o.value.online=l)},null,512),[[y,o.value.online]]),e[19]||(e[19]=t("span",{class:"form-check-label"},"true",-1))]),t("label",ae,[c(t("input",{class:"form-check-input",type:"radio",name:"online",value:"false","onUpdate:modelValue":e[7]||(e[7]=l=>o.value.online=l)},null,512),[[y,o.value.online]]),e[20]||(e[20]=t("span",{class:"form-check-label"},"false",-1))])])])])]),t("div",ne,[t("button",{type:"button",class:"btn btn-link link-secondary","data-bs-dismiss":"modal",onClick:e[8]||(e[8]=l=>d())}," Cancel "),t("button",{type:"button",ref:"submitBtn",class:"btn btn-primary ms-auto",onClick:e[9]||(e[9]=l=>w())},_(r.mode==="new"?"Create":"Update"),513)])])])],512))}}),re={class:"modal fade",id:"deleteRepository",tabindex:"-1"},de={class:"modal-dialog modal-lg",role:"document"},ue={class:"modal-content"},me={class:"modal-body text-left py-4"},ce={class:"modal-footer"},pe=C({__name:"deleteRepository",props:{repositoryName:{}},emits:["get-repository-list"],setup(v,{emit:b}){const s=D(),m=v,f=b,r=async()=>{const{data:u}=await L("nexus",m.repositoryName);u?s.success("Deleted successfully."):s.error("Failed to delete."),f("get-repository-list")};return(u,a)=>(F(),x("div",re,[t("div",de,[t("div",ue,[a[3]||(a[3]=t("button",{type:"button",class:"btn-close","data-bs-dismiss":"modal","aria-label":"Close"},null,-1)),a[4]||(a[4]=t("div",{class:"modal-status bg-danger"},null,-1)),t("div",me,[a[1]||(a[1]=t("h3",{class:"mb-5"}," Delete Repository ",-1)),t("h4",null,"Are you sure you want to delete "+_(m.repositoryName)+"?",1)]),t("div",ce,[a[2]||(a[2]=t("a",{href:"#",class:"btn btn-link link-secondary","data-bs-dismiss":"modal"}," Cancel ",-1)),t("a",{href:"#",class:"btn btn-primary ms-auto","data-bs-dismiss":"modal",onClick:a[0]||(a[0]=o=>r())}," Delete ")])])])]))}}),fe={class:"card w-100"},ge=C({__name:"RepositoryList",props:{embedded:{type:Boolean}},emits:["open-detail"],setup(v,{expose:b,emit:s}){const m=D(),f=v,r=s,u=e=>{if(d.value=e,f.embedded){r("open-detail",e);return}T.push({name:"repositoryDetail",params:{repositoryName:e}})},a=p([]),o=p([]);N(async()=>{w(),await n()});const n=async()=>{try{const{data:e}=await M("nexus");a.value=e}catch(e){console.log(e),m.error("Unable to fetch data.")}},d=p(""),w=()=>{o.value=[{title:"Name",field:"name",width:"15%",cellClick:function(e,l){e.stopPropagation(),u(l.getRow().getData().name)}},{title:"Format",field:"format",width:"10%",cellClick:function(e,l){e.stopPropagation(),u(l.getRow().getData().name)}},{title:"URL",field:"url",width:"40%",cellClick:function(e,l){e.stopPropagation(),u(l.getRow().getData().name)}},{title:"Type(hosted)",field:"type",width:"15%",cellClick:function(e,l){e.stopPropagation(),u(l.getRow().getData().name)}},{title:"Action",width:"20%",formatter:g,cellClick:function(e,l){const h=e.target,U=h==null?void 0:h.getAttribute("id");d.value=l.getRow().getData().name,U==="edit-btn"?k.value="edit":d.value=l.getRow().getData().name}}]},g=()=>` +
+ + +
`,k=p("new");return b({startCreate:()=>{d.value="",k.value="new"}}),(e,l)=>(F(),x("div",fe,[R($,{columns:o.value,"table-data":a.value},null,8,["columns","table-data"]),R(ie,{mode:k.value,"repository-name":d.value,onGetRepositoryList:n},null,8,["mode","repository-name"]),R(pe,{"repository-name":d.value,onGetRepositoryList:n},null,8,["repository-name"])]))}});export{ge as default}; diff --git a/src/main/resources/static/assets/RepositoryList-CH7YVo74.js b/src/main/resources/static/assets/RepositoryList-CH7YVo74.js new file mode 100644 index 00000000..9c0167b9 --- /dev/null +++ b/src/main/resources/static/assets/RepositoryList-CH7YVo74.js @@ -0,0 +1,17 @@ +import{_ as $}from"./Tabulator.vue_vue_type_style_index_0_lang-DYWrT5tk.js";import{g as P,r as V,u as B,d as L,a as M}from"./repository-DkJ-R22y.js";import{d as C,f as D,r as p,g as q,h as A,i as N,c as x,a as t,t as _,j as c,l as E,z as y,o as F,b as R,I as T}from"./index-BKFNv1Gc.js";import{M as I}from"./bootstrap.esm-Ceob_0pG.js";import"./request-D9joEmfF.js";const S={class:"modal-dialog modal-lg",role:"document"},G={class:"modal-content"},O={class:"modal-header"},j={class:"modal-title"},z={class:"modal-body py-4"},H={class:"row mb-3"},J=["disabled"],K={class:"mb-3"},Q={class:"form-check form-check-inline"},W=["disabled"],X={class:"form-check form-check-inline"},Y=["disabled"],Z={class:"mb-3"},ee={class:"form-check form-check-inline"},te={class:"form-check form-check-inline"},oe={class:"form-check form-check-inline"},le={class:"mb-3"},se={class:"form-check form-check-inline"},ae={class:"form-check form-check-inline"},ne={class:"modal-footer"},ie=C({__name:"repositoryForm",props:{mode:{},repositoryName:{}},emits:["get-repository-list"],setup(v,{emit:b}){const s=D(),m=p(),f=p(),r=v,u=b,a=q(()=>r.repositoryName);A(a,async()=>{await d()}),N(async()=>{m.value&&(f.value=new I(m.value)),await d()});const o=p({}),n=p(""),d=async()=>{if(r.mode==="new")o.value.name="",o.value.format="helm",o.value.type="hosted",o.value.url="",o.value.online=!0,n.value="allow";else{const{data:i}=await P("nexus",r.repositoryName);o.value=i,n.value=i.storage.writePolicy}},w=async()=>{if(!o.value.name||o.value.name.trim()===""){s.error("Please enter repository name.");return}if(!o.value.format){s.error("Please select format.");return}if(!n.value){s.error("Please select allow policy.");return}if(o.value.online===void 0||o.value.online===null){s.error("Please select online/offline status.");return}if(o.value.storage={blobStoreName:"default",strictContentTypeValidation:!0,writePolicy:n.value},o.value.format!="docker")o.value.docker={};else{const e={v1Enabled:!1,forceBasicAuth:!0};o.value.docker=e}let i=!1;r.mode==="new"?i=await g():i=await k(),i&&(u("get-repository-list"),d(),f.value&&(f.value.hide(),setTimeout(()=>{document.body.classList.remove("modal-open");const e=document.querySelector(".modal-backdrop");e==null||e.remove()},150)))},g=async()=>{try{const{data:i}=await V("nexus",o.value);return i?(s.success("Repository created successfully."),!0):(s.error("Failed to create repository."),!1)}catch{return s.error("Failed to create repository."),!1}},k=async()=>{try{const{data:i}=await B("nexus",o.value);return i?(s.success("Repository updated successfully."),!0):(s.error("Failed to update repository."),!1)}catch{return s.error("Failed to update repository."),!1}};return(i,e)=>(F(),x("div",{class:"modal fade",id:"repositoryForm",tabindex:"-1",ref_key:"modalElement",ref:m},[t("div",S,[t("div",G,[t("div",O,[t("h3",j,"Repository "+_(r.mode==="new"?"Create":"Update"),1),e[10]||(e[10]=t("button",{type:"button",class:"btn-close","data-bs-dismiss":"modal","aria-label":"Close"},null,-1))]),t("div",z,[t("div",null,[t("div",H,[e[11]||(e[11]=t("label",{class:"form-label required"},"Name",-1)),c(t("input",{type:"text",class:"form-control p-2 g-col-11","onUpdate:modelValue":e[0]||(e[0]=l=>o.value.name=l),disabled:r.mode!="new",placeholder:"Enter repository name"},null,8,J),[[E,o.value.name]])]),t("div",K,[e[14]||(e[14]=t("label",{class:"form-label required"},"Format",-1)),t("div",null,[t("label",Q,[c(t("input",{class:"form-check-input",type:"radio",name:"format",value:"helm","onUpdate:modelValue":e[1]||(e[1]=l=>o.value.format=l),disabled:r.mode!="new"},null,8,W),[[y,o.value.format]]),e[12]||(e[12]=t("span",{class:"form-check-label"},"helm",-1))]),t("label",X,[c(t("input",{class:"form-check-input",type:"radio",name:"format",value:"docker","onUpdate:modelValue":e[2]||(e[2]=l=>o.value.format=l),disabled:r.mode!="new"},null,8,Y),[[y,o.value.format]]),e[13]||(e[13]=t("span",{class:"form-check-label"},"docker",-1))])])]),t("div",Z,[e[18]||(e[18]=t("label",{class:"form-label required"},"Allow",-1)),t("div",null,[t("label",ee,[c(t("input",{class:"form-check-input",type:"radio",name:"allow",value:"allow","onUpdate:modelValue":e[3]||(e[3]=l=>n.value=l)},null,512),[[y,n.value]]),e[15]||(e[15]=t("span",{class:"form-check-label"},"allow",-1))]),t("label",te,[c(t("input",{class:"form-check-input",type:"radio",name:"allow",value:"allow_once","onUpdate:modelValue":e[4]||(e[4]=l=>n.value=l)},null,512),[[y,n.value]]),e[16]||(e[16]=t("span",{class:"form-check-label"},"allow_once",-1))]),t("label",oe,[c(t("input",{class:"form-check-input",type:"radio",name:"allow",value:"deny","onUpdate:modelValue":e[5]||(e[5]=l=>n.value=l)},null,512),[[y,n.value]]),e[17]||(e[17]=t("span",{class:"form-check-label"},"deny",-1))])])]),t("div",le,[e[21]||(e[21]=t("label",{class:"form-label required"},"On/Offline",-1)),t("div",null,[t("label",se,[c(t("input",{class:"form-check-input",type:"radio",name:"online",value:"true","onUpdate:modelValue":e[6]||(e[6]=l=>o.value.online=l)},null,512),[[y,o.value.online]]),e[19]||(e[19]=t("span",{class:"form-check-label"},"true",-1))]),t("label",ae,[c(t("input",{class:"form-check-input",type:"radio",name:"online",value:"false","onUpdate:modelValue":e[7]||(e[7]=l=>o.value.online=l)},null,512),[[y,o.value.online]]),e[20]||(e[20]=t("span",{class:"form-check-label"},"false",-1))])])])])]),t("div",ne,[t("button",{type:"button",class:"btn btn-link link-secondary","data-bs-dismiss":"modal",onClick:e[8]||(e[8]=l=>d())}," Cancel "),t("button",{type:"button",ref:"submitBtn",class:"btn btn-primary ms-auto",onClick:e[9]||(e[9]=l=>w())},_(r.mode==="new"?"Create":"Update"),513)])])])],512))}}),re={class:"modal fade",id:"deleteRepository",tabindex:"-1"},de={class:"modal-dialog modal-lg",role:"document"},ue={class:"modal-content"},me={class:"modal-body text-left py-4"},ce={class:"modal-footer"},pe=C({__name:"deleteRepository",props:{repositoryName:{}},emits:["get-repository-list"],setup(v,{emit:b}){const s=D(),m=v,f=b,r=async()=>{const{data:u}=await L("nexus",m.repositoryName);u?s.success("Deleted successfully."):s.error("Failed to delete."),f("get-repository-list")};return(u,a)=>(F(),x("div",re,[t("div",de,[t("div",ue,[a[3]||(a[3]=t("button",{type:"button",class:"btn-close","data-bs-dismiss":"modal","aria-label":"Close"},null,-1)),a[4]||(a[4]=t("div",{class:"modal-status bg-danger"},null,-1)),t("div",me,[a[1]||(a[1]=t("h3",{class:"mb-5"}," Delete Repository ",-1)),t("h4",null,"Are you sure you want to delete "+_(m.repositoryName)+"?",1)]),t("div",ce,[a[2]||(a[2]=t("a",{href:"#",class:"btn btn-link link-secondary","data-bs-dismiss":"modal"}," Cancel ",-1)),t("a",{href:"#",class:"btn btn-primary ms-auto","data-bs-dismiss":"modal",onClick:a[0]||(a[0]=o=>r())}," Delete ")])])])]))}}),fe={class:"card w-100"},ge=C({__name:"RepositoryList",props:{embedded:{type:Boolean}},emits:["open-detail"],setup(v,{expose:b,emit:s}){const m=D(),f=v,r=s,u=e=>{if(d.value=e,f.embedded){r("open-detail",e);return}T.push({name:"repositoryDetail",params:{repositoryName:e}})},a=p([]),o=p([]);N(async()=>{w(),await n()});const n=async()=>{try{const{data:e}=await M("nexus");a.value=e}catch(e){console.log(e),m.error("Unable to fetch data.")}},d=p(""),w=()=>{o.value=[{title:"Name",field:"name",width:"15%",cellClick:function(e,l){e.stopPropagation(),u(l.getRow().getData().name)}},{title:"Format",field:"format",width:"10%",cellClick:function(e,l){e.stopPropagation(),u(l.getRow().getData().name)}},{title:"URL",field:"url",width:"40%",cellClick:function(e,l){e.stopPropagation(),u(l.getRow().getData().name)}},{title:"Type(hosted)",field:"type",width:"15%",cellClick:function(e,l){e.stopPropagation(),u(l.getRow().getData().name)}},{title:"Action",width:"20%",formatter:g,cellClick:function(e,l){const h=e.target,U=h==null?void 0:h.getAttribute("id");d.value=l.getRow().getData().name,U==="edit-btn"?k.value="edit":d.value=l.getRow().getData().name}}]},g=()=>` +
+ + +
`,k=p("new");return b({startCreate:()=>{d.value="",k.value="new"}}),(e,l)=>(F(),x("div",fe,[R($,{columns:o.value,"table-data":a.value},null,8,["columns","table-data"]),R(ie,{mode:k.value,"repository-name":d.value,onGetRepositoryList:n},null,8,["mode","repository-name"]),R(pe,{"repository-name":d.value,onGetRepositoryList:n},null,8,["repository-name"])]))}});export{ge as default}; diff --git a/src/main/resources/static/assets/RepositoryList-CehXBmRT.js b/src/main/resources/static/assets/RepositoryList-CehXBmRT.js new file mode 100644 index 00000000..6cb01d88 --- /dev/null +++ b/src/main/resources/static/assets/RepositoryList-CehXBmRT.js @@ -0,0 +1,17 @@ +import{_ as $}from"./Tabulator.vue_vue_type_style_index_0_lang-pkMkfUCQ.js";import{g as P,r as V,u as B,d as L,a as M}from"./repository-CNj60vu0.js";import{d as C,f as D,r as p,g as q,h as A,i as N,c as x,a as t,t as _,j as c,l as E,z as y,o as F,b as R,I as T}from"./index-8PPGy_cS.js";import{M as I}from"./bootstrap.esm-Ceob_0pG.js";import"./request-BD-3QCnG.js";const S={class:"modal-dialog modal-lg",role:"document"},G={class:"modal-content"},O={class:"modal-header"},j={class:"modal-title"},z={class:"modal-body py-4"},H={class:"row mb-3"},J=["disabled"],K={class:"mb-3"},Q={class:"form-check form-check-inline"},W=["disabled"],X={class:"form-check form-check-inline"},Y=["disabled"],Z={class:"mb-3"},ee={class:"form-check form-check-inline"},te={class:"form-check form-check-inline"},oe={class:"form-check form-check-inline"},le={class:"mb-3"},se={class:"form-check form-check-inline"},ae={class:"form-check form-check-inline"},ne={class:"modal-footer"},ie=C({__name:"repositoryForm",props:{mode:{},repositoryName:{}},emits:["get-repository-list"],setup(v,{emit:b}){const s=D(),m=p(),f=p(),r=v,u=b,a=q(()=>r.repositoryName);A(a,async()=>{await d()}),N(async()=>{m.value&&(f.value=new I(m.value)),await d()});const o=p({}),n=p(""),d=async()=>{if(r.mode==="new")o.value.name="",o.value.format="helm",o.value.type="hosted",o.value.url="",o.value.online=!0,n.value="allow";else{const{data:i}=await P("nexus",r.repositoryName);o.value=i,n.value=i.storage.writePolicy}},w=async()=>{if(!o.value.name||o.value.name.trim()===""){s.error("Please enter repository name.");return}if(!o.value.format){s.error("Please select format.");return}if(!n.value){s.error("Please select allow policy.");return}if(o.value.online===void 0||o.value.online===null){s.error("Please select online/offline status.");return}if(o.value.storage={blobStoreName:"default",strictContentTypeValidation:!0,writePolicy:n.value},o.value.format!="docker")o.value.docker={};else{const e={v1Enabled:!1,forceBasicAuth:!0};o.value.docker=e}let i=!1;r.mode==="new"?i=await g():i=await k(),i&&(u("get-repository-list"),d(),f.value&&(f.value.hide(),setTimeout(()=>{document.body.classList.remove("modal-open");const e=document.querySelector(".modal-backdrop");e==null||e.remove()},150)))},g=async()=>{try{const{data:i}=await V("nexus",o.value);return i?(s.success("Repository created successfully."),!0):(s.error("Failed to create repository."),!1)}catch{return s.error("Failed to create repository."),!1}},k=async()=>{try{const{data:i}=await B("nexus",o.value);return i?(s.success("Repository updated successfully."),!0):(s.error("Failed to update repository."),!1)}catch{return s.error("Failed to update repository."),!1}};return(i,e)=>(F(),x("div",{class:"modal fade",id:"repositoryForm",tabindex:"-1",ref_key:"modalElement",ref:m},[t("div",S,[t("div",G,[t("div",O,[t("h3",j,"Repository "+_(r.mode==="new"?"Create":"Update"),1),e[10]||(e[10]=t("button",{type:"button",class:"btn-close","data-bs-dismiss":"modal","aria-label":"Close"},null,-1))]),t("div",z,[t("div",null,[t("div",H,[e[11]||(e[11]=t("label",{class:"form-label required"},"Name",-1)),c(t("input",{type:"text",class:"form-control p-2 g-col-11","onUpdate:modelValue":e[0]||(e[0]=l=>o.value.name=l),disabled:r.mode!="new",placeholder:"Enter repository name"},null,8,J),[[E,o.value.name]])]),t("div",K,[e[14]||(e[14]=t("label",{class:"form-label required"},"Format",-1)),t("div",null,[t("label",Q,[c(t("input",{class:"form-check-input",type:"radio",name:"format",value:"helm","onUpdate:modelValue":e[1]||(e[1]=l=>o.value.format=l),disabled:r.mode!="new"},null,8,W),[[y,o.value.format]]),e[12]||(e[12]=t("span",{class:"form-check-label"},"helm",-1))]),t("label",X,[c(t("input",{class:"form-check-input",type:"radio",name:"format",value:"docker","onUpdate:modelValue":e[2]||(e[2]=l=>o.value.format=l),disabled:r.mode!="new"},null,8,Y),[[y,o.value.format]]),e[13]||(e[13]=t("span",{class:"form-check-label"},"docker",-1))])])]),t("div",Z,[e[18]||(e[18]=t("label",{class:"form-label required"},"Allow",-1)),t("div",null,[t("label",ee,[c(t("input",{class:"form-check-input",type:"radio",name:"allow",value:"allow","onUpdate:modelValue":e[3]||(e[3]=l=>n.value=l)},null,512),[[y,n.value]]),e[15]||(e[15]=t("span",{class:"form-check-label"},"allow",-1))]),t("label",te,[c(t("input",{class:"form-check-input",type:"radio",name:"allow",value:"allow_once","onUpdate:modelValue":e[4]||(e[4]=l=>n.value=l)},null,512),[[y,n.value]]),e[16]||(e[16]=t("span",{class:"form-check-label"},"allow_once",-1))]),t("label",oe,[c(t("input",{class:"form-check-input",type:"radio",name:"allow",value:"deny","onUpdate:modelValue":e[5]||(e[5]=l=>n.value=l)},null,512),[[y,n.value]]),e[17]||(e[17]=t("span",{class:"form-check-label"},"deny",-1))])])]),t("div",le,[e[21]||(e[21]=t("label",{class:"form-label required"},"On/Offline",-1)),t("div",null,[t("label",se,[c(t("input",{class:"form-check-input",type:"radio",name:"online",value:"true","onUpdate:modelValue":e[6]||(e[6]=l=>o.value.online=l)},null,512),[[y,o.value.online]]),e[19]||(e[19]=t("span",{class:"form-check-label"},"true",-1))]),t("label",ae,[c(t("input",{class:"form-check-input",type:"radio",name:"online",value:"false","onUpdate:modelValue":e[7]||(e[7]=l=>o.value.online=l)},null,512),[[y,o.value.online]]),e[20]||(e[20]=t("span",{class:"form-check-label"},"false",-1))])])])])]),t("div",ne,[t("button",{type:"button",class:"btn btn-link link-secondary","data-bs-dismiss":"modal",onClick:e[8]||(e[8]=l=>d())}," Cancel "),t("button",{type:"button",ref:"submitBtn",class:"btn btn-primary ms-auto",onClick:e[9]||(e[9]=l=>w())},_(r.mode==="new"?"Create":"Update"),513)])])])],512))}}),re={class:"modal fade",id:"deleteRepository",tabindex:"-1"},de={class:"modal-dialog modal-lg",role:"document"},ue={class:"modal-content"},me={class:"modal-body text-left py-4"},ce={class:"modal-footer"},pe=C({__name:"deleteRepository",props:{repositoryName:{}},emits:["get-repository-list"],setup(v,{emit:b}){const s=D(),m=v,f=b,r=async()=>{const{data:u}=await L("nexus",m.repositoryName);u?s.success("Deleted successfully."):s.error("Failed to delete."),f("get-repository-list")};return(u,a)=>(F(),x("div",re,[t("div",de,[t("div",ue,[a[3]||(a[3]=t("button",{type:"button",class:"btn-close","data-bs-dismiss":"modal","aria-label":"Close"},null,-1)),a[4]||(a[4]=t("div",{class:"modal-status bg-danger"},null,-1)),t("div",me,[a[1]||(a[1]=t("h3",{class:"mb-5"}," Delete Repository ",-1)),t("h4",null,"Are you sure you want to delete "+_(m.repositoryName)+"?",1)]),t("div",ce,[a[2]||(a[2]=t("a",{href:"#",class:"btn btn-link link-secondary","data-bs-dismiss":"modal"}," Cancel ",-1)),t("a",{href:"#",class:"btn btn-primary ms-auto","data-bs-dismiss":"modal",onClick:a[0]||(a[0]=o=>r())}," Delete ")])])])]))}}),fe={class:"card w-100"},ge=C({__name:"RepositoryList",props:{embedded:{type:Boolean}},emits:["open-detail"],setup(v,{expose:b,emit:s}){const m=D(),f=v,r=s,u=e=>{if(d.value=e,f.embedded){r("open-detail",e);return}T.push({name:"repositoryDetail",params:{repositoryName:e}})},a=p([]),o=p([]);N(async()=>{w(),await n()});const n=async()=>{try{const{data:e}=await M("nexus");a.value=e}catch(e){console.log(e),m.error("Unable to fetch data.")}},d=p(""),w=()=>{o.value=[{title:"Name",field:"name",width:"15%",cellClick:function(e,l){e.stopPropagation(),u(l.getRow().getData().name)}},{title:"Format",field:"format",width:"10%",cellClick:function(e,l){e.stopPropagation(),u(l.getRow().getData().name)}},{title:"URL",field:"url",width:"40%",cellClick:function(e,l){e.stopPropagation(),u(l.getRow().getData().name)}},{title:"Type(hosted)",field:"type",width:"15%",cellClick:function(e,l){e.stopPropagation(),u(l.getRow().getData().name)}},{title:"Action",width:"20%",formatter:g,cellClick:function(e,l){const h=e.target,U=h==null?void 0:h.getAttribute("id");d.value=l.getRow().getData().name,U==="edit-btn"?k.value="edit":d.value=l.getRow().getData().name}}]},g=()=>` +
+ + +
`,k=p("new");return b({startCreate:()=>{d.value="",k.value="new"}}),(e,l)=>(F(),x("div",fe,[R($,{columns:o.value,"table-data":a.value},null,8,["columns","table-data"]),R(ie,{mode:k.value,"repository-name":d.value,onGetRepositoryList:n},null,8,["mode","repository-name"]),R(pe,{"repository-name":d.value,onGetRepositoryList:n},null,8,["repository-name"])]))}});export{ge as default}; diff --git a/src/main/resources/static/assets/SoftwareCatalog-BdpHKttf.js b/src/main/resources/static/assets/SoftwareCatalog-BdpHKttf.js new file mode 100644 index 00000000..eec19d34 --- /dev/null +++ b/src/main/resources/static/assets/SoftwareCatalog-BdpHKttf.js @@ -0,0 +1,21 @@ +import{A as ta}from"./applicationInstallationForm-CJ8rrk5z.js";import{d as Ie,f as Ue,r as v,i as Le,x as Be,g as q,h as he,o as d,c as u,a as e,t as g,n as oe,j as b,y as ke,z as Ce,m as L,F as E,k as G,v as re,e as ve,w as we,l as M,p as oa,A as sa,B as $e,b as z,u as te,C as na,q as ia}from"./index-BKFNv1Gc.js";import{c as Se}from"./createVueComponent-DNPdC8og.js";import{g as Ke,I as ra,a as da,b as ua,A as ca}from"./applicationDetailModal-CKm2tmzu.js";import{g as De,s as va,a as ma,b as pa,c as ga,d as fa,u as ba,e as ya,f as _a,h as ha,i as ka,j as Ca,k as Fe,l as wa,m as Ia}from"./softwareCatalog-DuMGACG8.js";import{_ as Sa}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{_ as Aa}from"./lodash-DPUzVvBK.js";import{M as Ta}from"./bootstrap.esm-Ceob_0pG.js";import"./request-D9joEmfF.js";/** + * @license @tabler/icons-vue v3.22.0 - MIT + * + * This source code is licensed under the MIT license. + * See the LICENSE file in the root directory of this source tree. + */var Ma=Se("outline","cloud-download","IconCloudDownload",[["path",{d:"M19 18a3.5 3.5 0 0 0 0 -7h-1a5 4.5 0 0 0 -11 -2a4.6 4.4 0 0 0 -2.1 8.4",key:"svg-0"}],["path",{d:"M12 13l0 9",key:"svg-1"}],["path",{d:"M9 19l3 3l3 -3",key:"svg-2"}]]);/** + * @license @tabler/icons-vue v3.22.0 - MIT + * + * This source code is licensed under the MIT license. + * See the LICENSE file in the root directory of this source tree. + */var Ea=Se("outline","edit","IconEdit",[["path",{d:"M7 7h-1a2 2 0 0 0 -2 2v9a2 2 0 0 0 2 2h9a2 2 0 0 0 2 -2v-1",key:"svg-0"}],["path",{d:"M20.385 6.585a2.1 2.1 0 0 0 -2.97 -2.97l-8.415 8.385v3h3l8.385 -8.415z",key:"svg-1"}],["path",{d:"M16 5l3 3",key:"svg-2"}]]);/** + * @license @tabler/icons-vue v3.22.0 - MIT + * + * This source code is licensed under the MIT license. + * See the LICENSE file in the root directory of this source tree. + */var Na=Se("outline","trash","IconTrash",[["path",{d:"M4 7l16 0",key:"svg-0"}],["path",{d:"M10 11l0 6",key:"svg-1"}],["path",{d:"M14 11l0 6",key:"svg-2"}],["path",{d:"M5 7l1 12a2 2 0 0 0 2 2h8a2 2 0 0 0 2 -2l1 -12",key:"svg-3"}],["path",{d:"M9 7v-3a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v3",key:"svg-4"}]]);/** + * @license @tabler/icons-vue v3.22.0 - MIT + * + * This source code is licensed under the MIT license. + * See the LICENSE file in the root directory of this source tree. + */var Ra=Se("filled","star-filled","IconStarFilled",[["path",{d:"M8.243 7.34l-6.38 .925l-.113 .023a1 1 0 0 0 -.44 1.684l4.622 4.499l-1.09 6.355l-.013 .11a1 1 0 0 0 1.464 .944l5.706 -3l5.693 3l.1 .046a1 1 0 0 0 1.352 -1.1l-1.091 -6.355l4.624 -4.5l.078 -.085a1 1 0 0 0 -.633 -1.62l-6.38 -.926l-2.852 -5.78a1 1 0 0 0 -1.794 0l-2.853 5.78z",key:"svg-0"}]]);const Da={class:"modal-dialog modal-lg",role:"document"},$a={class:"modal-content"},Ua={class:"modal-header"},La={class:"modal-title"},xa=["disabled"],Pa={class:"modal-body",style:{"max-height":"calc(100vh - 200px)","overflow-y":"auto"}},Va={class:"nav nav-tabs mb-3"},Ga={class:"nav-item"},Oa={class:"nav-item"},Ha={class:"nav-item"},Ba={class:"nav-item"},Ka={key:0,class:"mb-4"},Fa={class:"row g-3"},za={class:"col-md-6"},ja=["disabled"],qa={class:"col-md-6"},Ya=["disabled"],Wa={class:"mb-3"},Ja={class:"d-flex align-items-center"},Za={class:"form-check me-3"},Qa=["disabled"],Xa={class:"form-check"},el=["disabled"],al={class:"mb-3"},ll=["disabled"],tl=["value"],ol={class:"row g-3"},sl={class:"col-md-6"},nl=["disabled"],il=["value"],rl={class:"col-md-6"},dl=["disabled"],ul=["value"],cl={class:"alert alert-info py-2 mb-3",role:"status"},vl={class:"form-label required",for:"registrySearchInput"},ml={class:"input-group"},pl=["placeholder","disabled"],gl=["disabled"],fl={key:0,class:"text-danger small mt-2"},bl={key:0,class:"text-center text-muted py-4"},yl={key:1,class:"text-muted py-3"},_l={key:2,class:"registry-results list-group mb-3"},hl=["disabled","onClick"],kl={class:"d-flex align-items-start gap-3"},Cl=["src"],wl={class:"flex-fill text-start"},Il={class:"fw-semibold"},Sl={class:"small registry-description"},Al={key:3,class:"row g-3"},Tl={class:"col-md-6"},Ml=["disabled"],El={value:""},Nl=["value"],Rl={class:"col-md-6"},Dl=["disabled"],$l=["value"],Ul={class:"mb-3"},Ll={class:"mb-3"},xl={class:"mb-3"},Pl={class:"mb-3"},Vl={class:"col-5"},Gl=["onUpdate:modelValue"],Ol={class:"col-6"},Hl=["onUpdate:modelValue"],Bl={class:"col-1 d-flex gap-2"},Kl=["onClick","disabled"],Fl={class:"row"},zl={class:"col-md-6"},jl={class:"row"},ql={class:"col-6"},Yl={class:"input-group"},Wl={class:"col-6"},Jl={class:"input-group"},Zl={class:"row mt-3"},Ql={class:"col-md-6"},Xl={class:"row"},et={class:"col-6"},at={class:"input-group"},lt={class:"col-6"},tt={class:"input-group"},ot={class:"row mt-3"},st={class:"col-md-6"},nt={class:"row"},it={class:"col-6"},rt={class:"input-group"},dt={class:"col-6"},ut={class:"input-group"},ct={key:0,class:"card mt-3"},vt={class:"card-body"},mt={class:"d-flex align-items-center mb-2"},pt={class:"form-check form-switch"},gt={class:"row"},ft={class:"col-md-3"},bt=["disabled"],yt={class:"col-md-3"},_t=["disabled"],ht={class:"col-md-3"},kt=["disabled"],Ct={class:"col-md-3"},wt=["disabled"],It={key:0},St={class:"card"},At={class:"card-body"},Tt={class:"mb-3"},Mt={key:1},Et={class:"card"},Nt={class:"card-body"},Rt={class:"mb-3"},Dt={class:"col-4"},$t=["onUpdate:modelValue"],Ut={class:"col-3"},Lt=["onUpdate:modelValue"],xt={class:"col-4"},Pt=["onUpdate:modelValue"],Vt={class:"col-1 d-flex align-items-end gap-2"},Gt=["onClick","disabled"],Ot={class:"modal-footer"},Ht=["disabled"],Bt={class:"ms-auto d-flex gap-2"},Kt=["disabled"],Ft=["disabled"],zt=["disabled"],jt=Ie({__name:"softwareCatalogWizard",props:{show:{type:Boolean},mode:{}},emits:["created","updated"],setup(me,{expose:se,emit:le}){const m=me,K=le,R=Ue(),f=v(1),I=v(!1),A=v(!1),S=v(0),y=v({}),Y=["AI_MACHINE_LEARNING","DATABASE","INTEGRATION_AND_DELIVERY","MONITORING_AND_LOGGING","NETWORKING","SECURITY","STORAGE","STREAMING_AND_MESSAGING"],x={1:"AI_MACHINE_LEARNING",2:"DATABASE",3:"INTEGRATION_AND_DELIVERY",4:"MONITORING_AND_LOGGING",5:"NETWORKING",6:"SECURITY",7:"STORAGE",8:"STREAMING_AND_MESSAGING"},W={"AI / MACHINE LEARNING":"AI_MACHINE_LEARNING","AI MACHINE LEARNING":"AI_MACHINE_LEARNING",DATABASE:"DATABASE","INTEGRATION AND DELIVERY":"INTEGRATION_AND_DELIVERY","MONITORING AND LOGGING":"MONITORING_AND_LOGGING","MONITORING & LOGGING":"MONITORING_AND_LOGGING",NETWORKING:"NETWORKING",SECURITY:"SECURITY",STORAGE:"STORAGE","STREAMING AND MESSAGING":"STREAMING_AND_MESSAGING"},T=v("existing"),J=v(""),P=v([]),$=v(!1),j=v(!1),V=v(""),D=v(null),O=v([]),H=v(!1),Z=v(Y.map(l=>({key:l,value:l}))),_=v(!1),i=v(!1),p=v(""),C=v(null),de=v(!1);Le(()=>{C.value&&(C.value.addEventListener("show.bs.modal",F),C.value.addEventListener("hide.bs.modal",ne)),be()}),Be(()=>{C.value&&(C.value.removeEventListener("show.bs.modal",F),C.value.removeEventListener("hide.bs.modal",ne))});const F=()=>{A.value=!0,m.mode==="new"&&Ee()},ne=()=>{A.value=!1,de.value=!1},t=v({id:null,target:"VM",sourceType:"DOCKERHUB",category:"",packageName:"",version:"",packageInfo:null,helmChart:null,name:"",summary:"",description:"",logoUrlLarge:"",logoUrlSmall:"",catalogRefs:[],minCpu:0,recommendedCpu:0,minMemory:0,recommendedMemory:0,minDisk:0,recommendedDisk:0,hpaEnabled:!1,minReplicas:1,maxReplicas:10,cpuThreshold:80,memoryThreshold:80,ports:[],ingressEnabled:!1,ingressUrl:"",defaultPort:80,registeredById:null,createdAt:null,updatedAt:null}),B=v([{refId:0,refValue:"",refDesc:"",refType:"URL"}]),N=v([{targetPort:80,hostPort:8080,protocol:"TCP"}]),Q=q(()=>m.mode==="update"||T.value==="existing"),ie=q(()=>t.value.target==="VM"?"Docker Hub":"Artifact Hub"),Ae=q(()=>t.value.target==="VM"?"Search official container images":"Search official Helm charts"),ge=q(()=>m.mode==="update"?_.value?"Updating...":"Update":i.value?"Importing...":_.value?"Creating...":T.value==="public"?"Import & Create":"Create"),ue=q(()=>f.value===1?t.value.target&&t.value.category&&t.value.packageName&&t.value.version:f.value===2?t.value.name.trim().length>0&&t.value.summary.trim().length>0&&t.value.description.trim().length>0:f.value===3?t.value.minCpu>0&&t.value.minMemory>0&&t.value.minDisk>0&&t.value.recommendedCpu>0&&t.value.recommendedMemory>0&&t.value.recommendedDisk>0:f.value===3&&t.value.hpaEnabled?t.value.minReplicas>0&&t.value.maxReplicas>0&&t.value.cpuThreshold>0&&t.value.memoryThreshold>0:(console.log(N.value),f.value===3&&t.value.target==="VM"?t.value.defaultPort>0:f.value===4&&t.value.target==="K8S"?(console.log(N.value.length),N.value.length>0?N.value.every(l=>l.targetPort>0&&l.hostPort>0&&l.protocol):!1):f.value===4&&t.value.ingressEnabled?t.value.ingressUrl.trim().length>0:!0)),Te=()=>{ue.value&&f.value<4&&(f.value+=1)},Me=()=>{f.value>1&&(f.value-=1)},s=(l=!0)=>{l&&(J.value=""),P.value=[],j.value=!1,V.value="",D.value=null,O.value=[],$.value=!1,H.value=!1,i.value=!1,p.value=""},n=l=>{if(l==null)return"";if(typeof l=="object")return n(l.value||l.key||l.name||l.displayName||l.display_name||l.category);const a=String(l).trim();if(!a)return"";if(x[a])return x[a];const o=a.replace(/[_-]+/g," ").replace(/\s+/g," ").trim().toUpperCase();return W[o]?W[o]:a.replace(/&/g,"AND").replace(/[^a-zA-Z0-9]+/g,"_").replace(/^_+|_+$/g,"").replace(/_+/g,"_").toUpperCase()},r=(l=[])=>{const a=new Map;[...Y,...Z.value,...l].forEach(o=>{const k=n((o==null?void 0:o.value)||(o==null?void 0:o.key)||o);k&&a.set(k,{key:k,value:k})}),Z.value=Array.from(a.values()).sort((o,k)=>o.value.localeCompare(k.value))},h=async()=>{r();const a=(await Promise.allSettled([De({target:"DOCKER",availableOnly:!1}),De({target:"HELM",availableOnly:!1})])).flatMap(o=>o.status==="fulfilled"?o.value.data||[]:[]);r(a)},c=(l,a=0)=>{var o;return String((l==null?void 0:l.id)||(l==null?void 0:l.packageId)||`${((o=l==null?void 0:l.repository)==null?void 0:o.name)||"registry"}-${(l==null?void 0:l.name)||a}`)},U=l=>!!D.value&&c(D.value)===c(l),X=l=>{var a,o;return((a=l==null?void 0:l.logo_url)==null?void 0:a.small)||((o=l==null?void 0:l.logo_url)==null?void 0:o.large)||""},xe=l=>(l==null?void 0:l.short_description)||(l==null?void 0:l.description)||"",ze=(l,a)=>{const o=String(l||"");return o.length>a?`${o.substring(0,a)}...`:o},je=async()=>{const l=J.value.trim();if(V.value="",j.value=!1,P.value=[],D.value=null,O.value=[],t.value.packageName="",t.value.version="",!l){V.value="Enter a search keyword.";return}J.value=l,$.value=!0;try{const{data:a}=t.value.target==="VM"?await va(l):await ma(l),o=t.value.target==="VM"?a==null?void 0:a.results:a==null?void 0:a.packages;P.value=(Array.isArray(o)?o:[]).filter(Boolean).slice(0,8),j.value=!0}catch(a){console.log(a),V.value=`Unable to search ${ie.value}.`}finally{$.value=!1}},qe=async l=>{var w,pe,ee,He;D.value=l,t.value.packageName=(l==null?void 0:l.name)||"",t.value.version="",t.value.sourceType=t.value.target==="VM"?"DOCKERHUB":"ARTIFACTHUB",O.value=[],V.value="",p.value="";const a=xe(l);t.value.name=(l==null?void 0:l.name)||t.value.name,t.value.summary=a||(l==null?void 0:l.name)||"",t.value.description=a||(l==null?void 0:l.name)||"",t.value.logoUrlLarge=((w=l==null?void 0:l.logo_url)==null?void 0:w.large)||"",t.value.logoUrlSmall=((pe=l==null?void 0:l.logo_url)==null?void 0:pe.small)||"";const o=n((l==null?void 0:l.category)||((ee=l==null?void 0:l.categories)==null?void 0:ee[0]));r(o?[o]:[]),t.value.category=o;const k=c(l);H.value=!0;try{const{data:_e}=t.value.target==="VM"?await pa({path:(l==null?void 0:l.id)||""}):await ga({kind:"helm",repository:((He=l==null?void 0:l.repository)==null?void 0:He.name)||"",packageName:(l==null?void 0:l.name)||""});if(c(D.value)!==k)return;const Re=(Array.isArray(_e)?_e:[]).map(ae=>t.value.target==="VM"?ae==null?void 0:ae.name:ae==null?void 0:ae.version).filter(Boolean);Re.length===0&&(l!=null&&l.version)&&Re.push(l.version),O.value=Array.from(new Set(Re)).map(ae=>({key:ae,value:ae})),O.value.length===1&&(t.value.version=O.value[0].value)}catch(_e){if(console.log(_e),c(D.value)!==k)return;l!=null&&l.version?(O.value=[{key:l.version,value:l.version}],t.value.version=l.version):V.value="Unable to retrieve package versions."}finally{c(D.value)===k&&(H.value=!1)}},Ee=()=>{f.value=1,T.value="existing",_.value=!1,s(),Z.value=Y.map(l=>({key:l,value:l})),t.value={id:null,target:"VM",sourceType:"DOCKERHUB",category:"",packageName:"",version:"",packageInfo:null,helmChart:null,name:"",summary:"",description:"",logoUrlLarge:"",logoUrlSmall:"",catalogRefs:[],minCpu:0,recommendedCpu:0,minMemory:0,recommendedMemory:0,minDisk:0,recommendedDisk:0,hpaEnabled:!1,minReplicas:1,maxReplicas:10,cpuThreshold:80,memoryThreshold:80,ports:[],ingressEnabled:!1,ingressUrl:"",defaultPort:80,registeredById:null,createdAt:null,updatedAt:null},B.value=[{refId:0,refValue:"",refDesc:"",refType:"URL"}],N.value=[{targetPort:80,hostPort:8080,protocol:"TCP"}]},Ye=()=>{B.value.push({refId:0,refValue:"",refDesc:"",refType:"URL"})},We=l=>{B.value.length>1&&B.value.splice(l,1)},Je=()=>{N.value.push({targetPort:80,hostPort:8080,protocol:"TCP"})},Ze=l=>{N.value.length>1&&N.value.splice(l,1)},Pe=()=>{if(C.value){A.value=!1;const l=C.value.querySelector('[data-bs-dismiss="modal"]');if(l)l.click();else try{const a=window.bootstrap;if(a!=null&&a.Modal)(a.Modal.getInstance(C.value)||new a.Modal(C.value)).hide();else{C.value.classList.remove("show"),C.value.style.display="none",document.body.classList.remove("modal-open");const o=document.querySelector(".modal-backdrop");o==null||o.remove()}}catch(a){console.warn("Modal close failed:",a)}}},Qe=()=>[t.value.target,c(D.value),t.value.version].join("|"),Xe=async()=>{var a,o;if(T.value!=="public")return;if(!D.value)throw new Error("Select a package to import.");const l=Qe();if(p.value!==l){i.value=!0;try{const k=JSON.parse(JSON.stringify(D.value));let w;if(t.value.target==="VM"){const pe=t.value.category,ee={...k,tag:t.value.version,sourceType:"DockerHub",createdAt:k.created_at,updatedAt:k.updated_at,shortDescription:k.short_description,starCount:k.star_count,ratePlans:k.rate_plans,categories:[{name:pe,slug:pe.toLowerCase().replace(/_/g,"-")}]};delete ee.created_at,delete ee.updated_at,delete ee.short_description,delete ee.star_count,delete ee.rate_plans,w=await ka(ee)}else w=await Ca({...k,packageId:k.packageId,tag:t.value.version,version:t.value.version,category:t.value.category,sourceType:"ArtifactHub"});if(((a=w==null?void 0:w.data)==null?void 0:a.success)!==!0)throw new Error(((o=w==null?void 0:w.data)==null?void 0:o.message)||`${ie.value} import failed.`);p.value=l}finally{i.value=!1}}},ea=async()=>{if(!_.value){_.value=!0;try{await Xe(),t.value.catalogRefs=B.value.filter(l=>l.refValue.trim()),t.value.target==="K8S"&&(t.value.ports=N.value.filter(l=>l.targetPort&&l.hostPort)),t.value.target==="VM"?t.value.sourceType="DOCKERHUB":t.value.target==="K8S"&&(t.value.sourceType="ARTIFACTHUB"),await fa(t.value),R.success("Registration Success"),Pe(),K("created")}catch(l){console.log(l),R.error((l==null?void 0:l.message)||"Registration Failed")}finally{_.value=!1}}},aa=async()=>{if(!_.value){_.value=!0;try{t.value.catalogRefs=B.value.filter(l=>l.refValue.trim()),t.value.target==="K8S"&&(t.value.ports=N.value.filter(l=>l.targetPort&&l.hostPort)),t.value.target==="VM"?t.value.sourceType="DOCKERHUB":t.value.target==="K8S"&&(t.value.sourceType="ARTIFACTHUB"),await ba(t.value),R.success("Update Success"),Pe(),K("updated")}catch{R.error("Update Failed")}finally{_.value=!1}}},Ve=async()=>{try{if(!S.value)return;y.value&&y.value.category&&(I.value=!0,t.value.target=y.value.packageInfo!==null?"VM":"K8S",t.value.category=y.value.category,y.value.packageInfo!==null?(t.value.packageName=y.value.packageInfo.packageName,t.value.version=y.value.packageInfo.packageVersion):y.value.helmChart!==null&&(t.value.packageName=y.value.helmChart.chartName,t.value.version=y.value.helmChart.chartVersion),I.value=!1),await la()}catch{R.error("Failed to load catalog data"),I.value=!1}},la=async()=>{try{if(!S.value)return;const{data:l}=await ya(S.value);I.value=!0,t.value={...t.value,...l,target:l.packageInfo!==null?"VM":"K8S"},l.packageInfo!==null&&(t.value.packageName=l.packageInfo.packageName,t.value.version=l.packageInfo.packageVersion),l.helmChart!==null&&(t.value.packageName=l.helmChart.chartName,t.value.version=l.helmChart.chartVersion),l.catalogRefs&&l.catalogRefs.length>0?B.value=l.catalogRefs.map(a=>({refId:a.id||0,refValue:a.refValue||"",refDesc:a.refDesc||"",refType:a.refType||"URL"})):B.value=[{refId:0,refValue:"",refDesc:"",refType:"URL"}],l.ports&&l.ports.length>0?N.value=l.ports.map(a=>({targetPort:a.targetPort||80,hostPort:a.hostPort||8080,protocol:a.protocol||"TCP"})):N.value=[{targetPort:80,hostPort:8080,protocol:"TCP"}],await be(),t.value.category&&(await Ge(),t.value.packageName&&await Oe()),I.value=!1}catch{R.error("Failed to load catalog data"),I.value=!1}},fe=l=>{!_.value&&ue.value&&(f.value=l)};he(T,async()=>{m.mode!=="new"||I.value||(t.value.category="",t.value.packageName="",t.value.version="",t.value.name="",t.value.summary="",t.value.description="",t.value.logoUrlLarge="",t.value.logoUrlSmall="",s(),T.value==="existing"?await be():(t.value.sourceType=t.value.target==="VM"?"DOCKERHUB":"ARTIFACTHUB",await h()))}),he(()=>t.value.target,async(l,a)=>{!l||I.value||l===a||(m.mode==="new"&&(t.value.category="",t.value.packageName="",t.value.version=""),Q.value?await be():(t.value.sourceType=l==="VM"?"DOCKERHUB":"ARTIFACTHUB",s(),await h()))});const Ne=v([]),be=async()=>{if(m.mode==="new"&&Q.value&&(Ne.value=[],ye.value=[],ce.value=[],t.value.category="",t.value.packageName="",t.value.version=""),t.value.target){const l={target:t.value.target==="VM"?"DOCKER":"HELM",availableOnly:m.mode==="new"},{data:a}=await De(l);Ne.value=a}};he(()=>t.value.category,l=>{l&&Q.value&&!I.value&&(m.mode==="new"&&(t.value.packageName="",t.value.version=""),Ge())});const ye=v([]),Ge=async()=>{m.mode==="new"&&Q.value&&(ye.value=[],ce.value=[],t.value.packageName="",t.value.version="");const l={target:t.value.target==="VM"?"DOCKER":"HELM",category:t.value.category||"",availableOnly:m.mode==="new"},{data:a}=await _a(l);ye.value=a};he(()=>t.value.packageName,l=>{l&&Q.value&&!I.value&&(m.mode==="new"&&(t.value.version=""),Oe())});const ce=v([]),Oe=async()=>{m.mode==="new"&&Q.value&&(ce.value=[],t.value.version="");const l={target:t.value.target==="VM"?"DOCKER":"HELM",packageName:t.value.packageName||"",availableOnly:m.mode==="new"},{data:a}=await ha(l);m.mode==="new"?a.forEach(o=>{o.isUsed||ce.value.push(o)}):ce.value=a};return se({loadCatalogDataWithCategoryInit:Ve,initForCreate:()=>{Ee(),f.value=1},initForUpdate:(l,a)=>{S.value=l,y.value=a,f.value=1,Ve()}}),(l,a)=>(d(),u("div",{class:"modal fade",id:"modal-wizard",tabindex:"-1",ref_key:"wizardModal",ref:C},[e("div",Da,[e("div",$a,[e("div",Ua,[e("h5",La,g(m.mode==="update"?"Application Update":"Application Registration"),1),e("button",{type:"button",class:"btn-close","data-bs-dismiss":"modal","aria-label":"Close",disabled:_.value},null,8,xa)]),e("div",Pa,[e("ul",Va,[e("li",Ga,[e("a",{class:oe(["nav-link",{active:f.value===1}]),href:"javascript:void(0);",onClick:a[0]||(a[0]=o=>fe(1))},"1. "+g(m.mode==="update"?"Package":"Source & Package"),3)]),e("li",Oa,[e("a",{class:oe(["nav-link",{active:f.value===2}]),href:"javascript:void(0);",onClick:a[1]||(a[1]=o=>fe(2))},"2. General",2)]),e("li",Ha,[e("a",{class:oe(["nav-link",{active:f.value===3}]),href:"javascript:void(0);",onClick:a[2]||(a[2]=o=>fe(3))},"3. Resource Requirements",2)]),e("li",Ba,[e("a",{class:oe(["nav-link",{active:f.value===4}]),href:"javascript:void(0);",onClick:a[3]||(a[3]=o=>fe(4))},"4. Network",2)])]),b(e("div",null,[m.mode!=="update"?(d(),u("div",Ka,[a[32]||(a[32]=e("label",{class:"form-label required"},"Registration Source",-1)),e("div",Fa,[e("div",za,[e("label",{class:oe(["source-option",{selected:T.value==="existing"}]),for:"sourceExisting"},[b(e("input",{id:"sourceExisting","onUpdate:modelValue":a[4]||(a[4]=o=>T.value=o),class:"form-check-input",type:"radio",name:"registrationSource",value:"existing",disabled:_.value},null,8,ja),[[Ce,T.value]]),a[30]||(a[30]=e("span",null,[e("strong",null,"Existing Package"),e("small",null,"Register a package already available in MCMP.")],-1))],2)]),e("div",qa,[e("label",{class:oe(["source-option",{selected:T.value==="public"}]),for:"sourcePublic"},[b(e("input",{id:"sourcePublic","onUpdate:modelValue":a[5]||(a[5]=o=>T.value=o),class:"form-check-input",type:"radio",name:"registrationSource",value:"public",disabled:_.value},null,8,Ya),[[Ce,T.value]]),a[31]||(a[31]=e("span",null,[e("strong",null,"Public Registry"),e("small",null,"Search, import, and register in one flow.")],-1))],2)])])])):L("",!0),e("div",Wa,[a[35]||(a[35]=e("label",{class:"form-label required"},"Target",-1)),e("div",Ja,[e("div",Za,[b(e("input",{class:"form-check-input",type:"radio",name:"target",value:"VM","onUpdate:modelValue":a[6]||(a[6]=o=>t.value.target=o),id:"targetVM",disabled:m.mode==="update"||_.value},null,8,Qa),[[Ce,t.value.target]]),a[33]||(a[33]=e("label",{class:"form-check-label",for:"targetVM"},"VM",-1))]),e("div",Xa,[b(e("input",{class:"form-check-input",type:"radio",name:"target",value:"K8S","onUpdate:modelValue":a[7]||(a[7]=o=>t.value.target=o),id:"targetK8S",disabled:m.mode==="update"||_.value},null,8,el),[[Ce,t.value.target]]),a[34]||(a[34]=e("label",{class:"form-check-label",for:"targetK8S"},"K8S",-1))])])]),Q.value?(d(),u(E,{key:1},[e("div",al,[a[37]||(a[37]=e("label",{class:"form-label required"},"Category",-1)),b(e("select",{class:"form-select","onUpdate:modelValue":a[8]||(a[8]=o=>t.value.category=o),disabled:m.mode==="update"},[a[36]||(a[36]=e("option",{value:""},"Select Category",-1)),(d(!0),u(E,null,G(Ne.value,o=>(d(),u("option",{value:o.value,key:o.key},g(o.value),9,tl))),128))],8,ll),[[re,t.value.category]])]),e("div",ol,[e("div",sl,[a[39]||(a[39]=e("label",{class:"form-label required"},"Package",-1)),b(e("select",{class:"form-select","onUpdate:modelValue":a[9]||(a[9]=o=>t.value.packageName=o),disabled:m.mode==="update"},[a[38]||(a[38]=e("option",{value:""},"Select Package",-1)),(d(!0),u(E,null,G(ye.value,o=>(d(),u("option",{value:o.value,key:o.key},g(o.value),9,il))),128))],8,nl),[[re,t.value.packageName]])]),e("div",rl,[a[41]||(a[41]=e("label",{class:"form-label required"},"Version",-1)),b(e("select",{class:"form-select","onUpdate:modelValue":a[10]||(a[10]=o=>t.value.version=o),disabled:m.mode==="update"},[a[40]||(a[40]=e("option",{value:""},"Select Version",-1)),(d(!0),u(E,null,G(ce.value,o=>(d(),u("option",{value:o.value,key:o.key},g(o.value),9,ul))),128))],8,dl),[[re,t.value.version]])])])],64)):(d(),u(E,{key:2},[e("div",cl,[e("strong",null,g(ie.value),1),a[42]||(a[42]=ve(" will be searched for the selected target. The package is imported only when you complete registration. "))]),e("form",{class:"mb-3",onSubmit:we(je,["prevent"])},[e("label",vl,"Search "+g(ie.value),1),e("div",ml,[b(e("input",{id:"registrySearchInput","onUpdate:modelValue":a[11]||(a[11]=o=>J.value=o),type:"search",class:"form-control",placeholder:Ae.value,disabled:$.value||_.value},null,8,pl),[[M,J.value]]),e("button",{class:"btn btn-outline-primary",type:"submit",disabled:$.value||_.value},g($.value?"Searching...":"Search"),9,gl)]),V.value?(d(),u("div",fl,g(V.value),1)):L("",!0)],32),$.value?(d(),u("div",bl,"Searching "+g(ie.value)+"...",1)):j.value&&P.value.length===0?(d(),u("div",yl," No matching packages found. ")):P.value.length>0?(d(),u("div",_l,[(d(!0),u(E,null,G(P.value,(o,k)=>(d(),u("button",{key:c(o,k),type:"button",class:oe(["list-group-item list-group-item-action",{active:U(o)}]),disabled:H.value||_.value,onClick:w=>qe(o)},[e("div",kl,[X(o)?(d(),u("img",{key:0,src:X(o),class:"rounded registry-logo",alt:"",width:"40",height:"40"},null,8,Cl)):L("",!0),e("div",wl,[e("div",Il,g((o==null?void 0:o.name)||(o==null?void 0:o.packageId)||"Unnamed package"),1),e("div",Sl,g(ze(xe(o),120)),1)])])],10,hl))),128))])):L("",!0),D.value?(d(),u("div",Al,[e("div",Tl,[a[43]||(a[43]=e("label",{class:"form-label required"},"Version",-1)),b(e("select",{class:"form-select","onUpdate:modelValue":a[12]||(a[12]=o=>t.value.version=o),disabled:H.value||_.value},[e("option",El,g(H.value?"Loading versions...":"Select Version"),1),(d(!0),u(E,null,G(O.value,o=>(d(),u("option",{value:o.value,key:o.key},g(o.value),9,Nl))),128))],8,Ml),[[re,t.value.version]])]),e("div",Rl,[a[45]||(a[45]=e("label",{class:"form-label required"},"Category",-1)),b(e("select",{class:"form-select","onUpdate:modelValue":a[13]||(a[13]=o=>t.value.category=o),disabled:_.value},[a[44]||(a[44]=e("option",{value:""},"Select Category",-1)),(d(!0),u(E,null,G(Z.value,o=>(d(),u("option",{value:o.value,key:o.key},g(o.value),9,$l))),128))],8,Dl),[[re,t.value.category]])])])):L("",!0)],64))],512),[[ke,f.value===1]]),b(e("div",null,[e("div",Ul,[a[46]||(a[46]=e("label",{class:"form-label required"},"Application Name",-1)),b(e("input",{type:"text",class:"form-control","onUpdate:modelValue":a[14]||(a[14]=o=>t.value.name=o),placeholder:"Application name"},null,512),[[M,t.value.name]])]),e("div",Ll,[a[47]||(a[47]=e("label",{class:"form-label required"},"Summary",-1)),b(e("input",{type:"text",class:"form-control","onUpdate:modelValue":a[15]||(a[15]=o=>t.value.summary=o),placeholder:"Application summary"},null,512),[[M,t.value.summary]])]),e("div",xl,[a[48]||(a[48]=e("label",{class:"form-label required"},"Description",-1)),b(e("textarea",{class:"form-control",rows:"4","onUpdate:modelValue":a[16]||(a[16]=o=>t.value.description=o),placeholder:"Application description"},null,512),[[M,t.value.description]])]),e("div",Pl,[a[50]||(a[50]=e("label",{class:"form-label"},"Reference",-1)),(d(!0),u(E,null,G(B.value,(o,k)=>(d(),u("div",{class:"row g-2 mb-2",key:k},[e("div",Vl,[b(e("select",{class:"form-select","onUpdate:modelValue":w=>o.refType=w},a[49]||(a[49]=[oa('',6)]),8,Gl),[[re,o.refType]])]),e("div",Ol,[b(e("input",{type:"text",class:"form-control","onUpdate:modelValue":w=>o.refValue=w,placeholder:"Ref Value"},null,8,Hl),[[M,o.refValue]])]),e("div",Bl,[e("button",{type:"button",class:"btn btn-outline-danger btn-sm w-100 cursor-pointer",onClick:w=>We(k),disabled:B.value.length<=1},"-",8,Kl)])]))),128)),e("div",{class:"form-text cursor-pointer",onClick:Ye,style:{color:"gray"}},"+ Add Reference")])],512),[[ke,f.value===2]]),b(e("div",null,[e("div",Fl,[e("div",zl,[a[55]||(a[55]=e("label",{class:"form-label"},"CPU",-1)),e("div",jl,[e("div",ql,[a[52]||(a[52]=e("label",{class:"form-label text-muted small"},"Minimum",-1)),e("div",Yl,[b(e("input",{type:"number",min:"0",step:"0.1",class:"form-control","onUpdate:modelValue":a[17]||(a[17]=o=>t.value.minCpu=o),placeholder:"1"},null,512),[[M,t.value.minCpu,void 0,{number:!0}]]),a[51]||(a[51]=e("span",{class:"input-group-text"},"Cores",-1))])]),e("div",Wl,[a[54]||(a[54]=e("label",{class:"form-label text-muted small"},"Recommended",-1)),e("div",Jl,[b(e("input",{type:"number",min:"0",step:"0.1",class:"form-control","onUpdate:modelValue":a[18]||(a[18]=o=>t.value.recommendedCpu=o),placeholder:"2"},null,512),[[M,t.value.recommendedCpu,void 0,{number:!0}]]),a[53]||(a[53]=e("span",{class:"input-group-text"},"Cores",-1))])])])])]),e("div",Zl,[e("div",Ql,[a[60]||(a[60]=e("label",{class:"form-label"},"Memory",-1)),e("div",Xl,[e("div",et,[a[57]||(a[57]=e("label",{class:"form-label text-muted small"},"Minimum",-1)),e("div",at,[b(e("input",{type:"number",min:"0",step:"0.1",class:"form-control","onUpdate:modelValue":a[19]||(a[19]=o=>t.value.minMemory=o),placeholder:"4"},null,512),[[M,t.value.minMemory,void 0,{number:!0}]]),a[56]||(a[56]=e("span",{class:"input-group-text"},"GB",-1))])]),e("div",lt,[a[59]||(a[59]=e("label",{class:"form-label text-muted small"},"Recommended",-1)),e("div",tt,[b(e("input",{type:"number",min:"0",step:"0.1",class:"form-control","onUpdate:modelValue":a[20]||(a[20]=o=>t.value.recommendedMemory=o),placeholder:"8"},null,512),[[M,t.value.recommendedMemory,void 0,{number:!0}]]),a[58]||(a[58]=e("span",{class:"input-group-text"},"GB",-1))])])])])]),e("div",ot,[e("div",st,[a[65]||(a[65]=e("label",{class:"form-label"},"Storage",-1)),e("div",nt,[e("div",it,[a[62]||(a[62]=e("label",{class:"form-label text-muted small"},"Minimum",-1)),e("div",rt,[b(e("input",{type:"number",min:"0",class:"form-control","onUpdate:modelValue":a[21]||(a[21]=o=>t.value.minDisk=o),placeholder:"10"},null,512),[[M,t.value.minDisk,void 0,{number:!0}]]),a[61]||(a[61]=e("span",{class:"input-group-text"},"GB",-1))])]),e("div",dt,[a[64]||(a[64]=e("label",{class:"form-label text-muted small"},"Recommended",-1)),e("div",ut,[b(e("input",{type:"number",min:"0",class:"form-control","onUpdate:modelValue":a[22]||(a[22]=o=>t.value.recommendedDisk=o),placeholder:"20"},null,512),[[M,t.value.recommendedDisk,void 0,{number:!0}]]),a[63]||(a[63]=e("span",{class:"input-group-text"},"GB",-1))])])])])]),t.value.target==="K8S"?(d(),u("div",ct,[e("div",vt,[e("div",mt,[a[66]||(a[66]=e("label",{class:"form-check-label me-2"},"K8S HPA",-1)),e("div",pt,[b(e("input",{class:"form-check-input",type:"checkbox","onUpdate:modelValue":a[23]||(a[23]=o=>t.value.hpaEnabled=o)},null,512),[[sa,t.value.hpaEnabled]])])]),e("div",gt,[e("div",ft,[a[67]||(a[67]=e("label",{class:"form-label"},"minReplicas",-1)),b(e("input",{type:"number",min:"1",class:"form-control","onUpdate:modelValue":a[24]||(a[24]=o=>t.value.minReplicas=o),disabled:!t.value.hpaEnabled,placeholder:"1"},null,8,bt),[[M,t.value.minReplicas,void 0,{number:!0}]])]),e("div",yt,[a[68]||(a[68]=e("label",{class:"form-label"},"maxReplicas",-1)),b(e("input",{type:"number",min:"1",class:"form-control","onUpdate:modelValue":a[25]||(a[25]=o=>t.value.maxReplicas=o),disabled:!t.value.hpaEnabled,placeholder:"10"},null,8,_t),[[M,t.value.maxReplicas,void 0,{number:!0}]])]),e("div",ht,[a[69]||(a[69]=e("label",{class:"form-label"},"CPU (%)",-1)),b(e("input",{type:"number",min:"1",max:"100",class:"form-control","onUpdate:modelValue":a[26]||(a[26]=o=>t.value.cpuThreshold=o),disabled:!t.value.hpaEnabled,placeholder:"80"},null,8,kt),[[M,t.value.cpuThreshold,void 0,{number:!0}]])]),e("div",Ct,[a[70]||(a[70]=e("label",{class:"form-label"},"Memory (%)",-1)),b(e("input",{type:"number",min:"1",max:"100",class:"form-control","onUpdate:modelValue":a[27]||(a[27]=o=>t.value.memoryThreshold=o),disabled:!t.value.hpaEnabled,placeholder:"80"},null,8,wt),[[M,t.value.memoryThreshold,void 0,{number:!0}]])])])])])):L("",!0)],512),[[ke,f.value===3]]),b(e("div",null,[t.value.target==="VM"?(d(),u("div",It,[e("div",St,[a[72]||(a[72]=e("div",{class:"card-header"},[e("h6",{class:"card-title"},"Port Mapping")],-1)),e("div",At,[e("div",Tt,[a[71]||(a[71]=e("label",{class:"form-label"},"Port",-1)),b(e("input",{type:"number",min:"1",max:"65535",class:"form-control","onUpdate:modelValue":a[28]||(a[28]=o=>t.value.defaultPort=o),placeholder:"80"},null,512),[[M,t.value.defaultPort,void 0,{number:!0}]])])])])])):L("",!0),t.value.target==="K8S"?(d(),u("div",Mt,[e("div",Et,[a[78]||(a[78]=e("div",{class:"card-header"},[e("h6",{class:"card-title"},"Port Mapping")],-1)),e("div",Nt,[e("div",Rt,[a[77]||(a[77]=e("label",{class:"form-label"},"Port",-1)),(d(!0),u(E,null,G(N.value,(o,k)=>(d(),u("div",{class:"row g-2 mb-2",key:k},[e("div",Dt,[a[73]||(a[73]=e("label",{class:"form-label small"},"Target Port",-1)),b(e("input",{type:"number",min:"1",max:"65535",class:"form-control","onUpdate:modelValue":w=>o.targetPort=w,placeholder:"80"},null,8,$t),[[M,o.targetPort,void 0,{number:!0}]])]),e("div",Ut,[a[75]||(a[75]=e("label",{class:"form-label small"},"Protocol",-1)),b(e("select",{class:"form-select","onUpdate:modelValue":w=>o.protocol=w},a[74]||(a[74]=[e("option",{value:"TCP"},"TCP",-1),e("option",{value:"UDP"},"UDP",-1),e("option",{value:"SCTP"},"SCTP",-1)]),8,Lt),[[re,o.protocol]])]),e("div",xt,[a[76]||(a[76]=e("label",{class:"form-label small"},"Host Port",-1)),b(e("input",{type:"number",min:"1",max:"65535",class:"form-control","onUpdate:modelValue":w=>o.hostPort=w,placeholder:"8080"},null,8,Pt),[[M,o.hostPort,void 0,{number:!0}]])]),e("div",Vt,[e("button",{type:"button",class:"btn btn-outline-danger btn-sm w-100 cursor-pointer",onClick:w=>Ze(k),disabled:N.value.length<=1},"-",8,Gt)])]))),128)),e("div",{class:"form-text cursor-pointer",onClick:Je,style:{color:"gray"}},"+ Add Port Mapping")])])])])):L("",!0)],512),[[ke,f.value===4]])]),e("div",Ot,[e("button",{type:"button",class:"btn btn-link link-secondary","data-bs-dismiss":"modal",disabled:_.value,onClick:Ee}," Cancel ",8,Ht),e("div",Bt,[e("button",{class:"btn btn-outline-secondary",disabled:f.value===1||_.value,onClick:Me},"Prev",8,Kt),f.value<4?(d(),u("button",{key:0,class:"btn btn-primary",disabled:!ue.value||_.value,onClick:Te},"Next",8,Ft)):(d(),u("button",{key:1,class:"btn btn-primary",disabled:!ue.value||_.value,onClick:a[29]||(a[29]=o=>m.mode==="update"?aa():ea())},g(ge.value),9,zt))])])])])],512))}}),qt=Sa(jt,[["__scopeId","data-v-bd745d1f"]]),Yt={class:"modal-dialog",role:"document"},Wt={class:"modal-content"},Jt={class:"modal-body"},Zt={key:0,class:"text-muted"},Qt={key:1,class:"alert alert-warning mb-0"},Xt={key:2,class:"alert alert-warning mb-0"},eo={class:"mb-0 mt-2 ps-3"},ao={key:0,class:"mt-1"},lo={key:3,class:"text-muted"},to={class:"modal-footer"},oo=["disabled"],so=["disabled"],no={key:0,class:"spinner-border spinner-border-sm me-2",role:"status"},io=Ie({__name:"DeleteConfirmModal",props:{targetCatalog:{}},emits:["deleted","close"],setup(me,{expose:se,emit:le}){const m=me,K=le,R=Ue(),f=v(!1),I=v(!1),A=v(!1),S=v([]),y=v(null),Y=new Set(["UNINSTALLED","DELETED","DELETE_COMPLETED"]),x=q(()=>S.value.length>0),W=q(()=>S.value.slice(0,3)),T=q(()=>Math.max(S.value.length-W.value.length,0)),J=q(()=>f.value||I.value||A.value||x.value),P=async()=>{if(await $e(),V(),y.value)try{const i=window.bootstrap;if(i&&i.Modal)new i.Modal(y.value).show();else{y.value.classList.add("show"),y.value.style.display="block",document.body.classList.add("modal-open");const p=document.createElement("div");p.className="modal-backdrop fade show",p.id="delete-modal-backdrop",document.body.appendChild(p)}}catch(i){console.warn("Failed to show modal with Bootstrap, using fallback:",i),y.value.classList.add("show"),y.value.style.display="block",document.body.classList.add("modal-open")}},$=()=>{if(y.value)try{const i=window.bootstrap;if(i&&i.Modal){const p=i.Modal.getInstance(y.value);p?p.hide():j()}else j()}catch(i){console.warn("Failed to hide modal with Bootstrap, using fallback:",i),j()}},j=()=>{if(y.value){y.value.classList.remove("show"),y.value.style.display="none",document.body.classList.remove("modal-open");const i=document.getElementById("delete-modal-backdrop");i&&i.remove(),K("close")}},V=async()=>{var i;if(S.value=[],A.value=!1,!!((i=m.targetCatalog)!=null&&i.id)){I.value=!0;try{const{data:p}=await Fe(m.targetCatalog.id),C=Array.isArray(p==null?void 0:p.applicationStatuses)?p.applicationStatuses:[];S.value=C.filter(D).map(O)}catch(p){console.log(p),A.value=!0}finally{I.value=!1}}},D=i=>{const p=H((i==null?void 0:i.status)||(i==null?void 0:i.podStatus));return!Y.has(p)},O=(i,p)=>{const C=[i==null?void 0:i.namespace,i==null?void 0:i.mciId,(i==null?void 0:i.vmId)||(i==null?void 0:i.clusterName)].filter(Boolean).join(" / "),de=(i==null?void 0:i.deploymentType)||"Deployment",F=Ke((i==null?void 0:i.status)||(i==null?void 0:i.podStatus));return{key:(i==null?void 0:i.id)||`${de}-${C}-${p}`,label:`${de}${C?` - ${C}`:""} (${F})`}},H=i=>String(i||"").trim().toUpperCase(),Z=async()=>{var i;if((i=m.targetCatalog)!=null&&i.id){if(J.value){x.value&&R.warning("This catalog has deployed applications. Please delete them first.");return}f.value=!0;try{await wa(m.targetCatalog.id),R.success(`${m.targetCatalog.name} catalog has been successfully deleted.`),$(),K("deleted",m.targetCatalog.id)}catch(p){console.error("Delete failed:",p),R.error("Failed to delete catalog.")}finally{f.value=!1}}},_=()=>{K("close")};return Le(()=>{y.value&&y.value.addEventListener("hidden.bs.modal",_)}),Be(()=>{y.value&&y.value.removeEventListener("hidden.bs.modal",_)}),se({show:P,hide:$}),(i,p)=>(d(),u("div",{class:"modal fade",id:"deleteConfirmModal",tabindex:"-1",ref_key:"deleteModal",ref:y,onClick:we($,["self"])},[e("div",Yt,[e("div",Wt,[e("div",{class:"modal-header"},[p[0]||(p[0]=e("h5",{class:"modal-title"},"Confirm Catalog Deletion",-1)),e("button",{type:"button",class:"btn-close",onClick:$,"aria-label":"Close"})]),e("div",Jt,[e("p",null,[p[1]||(p[1]=ve("Are you sure you want to delete ")),e("strong",null,g(i.targetCatalog.name),1),ve(" ("+g(i.targetCatalog.category)+") catalog?",1)]),I.value?(d(),u("div",Zt,p[2]||(p[2]=[e("span",{class:"spinner-border spinner-border-sm me-2",role:"status"},null,-1),ve(" Checking deployed applications... ")]))):A.value?(d(),u("div",Qt," Unable to verify deployed applications. Try again before deleting this catalog. ")):x.value?(d(),u("div",Xt,[p[3]||(p[3]=e("div",{class:"fw-semibold"},"This catalog has deployed applications.",-1)),p[4]||(p[4]=e("div",null,"Please delete the deployed applications first.",-1)),e("ul",eo,[(d(!0),u(E,null,G(W.value,C=>(d(),u("li",{key:C.key},g(C.label),1))),128))]),T.value>0?(d(),u("div",ao," and "+g(T.value)+" more... ",1)):L("",!0)])):(d(),u("p",lo,"This action cannot be undone."))]),e("div",to,[A.value?(d(),u("button",{key:0,type:"button",class:"btn btn-outline-secondary",disabled:I.value,onClick:V}," Retry ",8,oo)):L("",!0),e("button",{type:"button",class:"btn btn-secondary",onClick:$},"Cancel"),e("button",{type:"button",class:"btn btn-danger",onClick:Z,disabled:J.value},[f.value?(d(),u("span",no)):L("",!0),ve(" "+g(f.value?"Deleting...":"Delete"),1)],8,so)])])])],512))}}),ro={ref:"sofwareCatalog"},uo={class:"row"},co={class:"col-lg-12"},vo={class:"card"},mo={class:"list-group card-list-group",id:"sc-list-group"},po={class:"row g-2 align-items-center"},go={class:"col-auto me-3"},fo=["src","onError"],bo={key:1,class:"rounded catalog-icon-fallback d-flex align-items-center justify-content-center"},yo=["onClick"],_o={class:"text-muted"},ho=["onClick"],ko={class:"text-muted",style:{width:"auto","text-align":"right"}},Co={style:{color:"#e5b942"}},wo={style:{color:"#e5b942"}},Io={class:"text-muted",style:{width:"80px","text-align":"right"}},So={style:{color:"gray"}},Ao={class:"col-3 text-muted"},To={class:"d-flex justify-content-end"},Mo={class:"mouse-hover"},Eo=["onClick"],No={class:"text-muted"},Ro=["id"],Do={class:"accordion-body pt-0"},$o=["innerHTML"],Uo=["id"],Lo=["onClick"],xo=["id"],Po=["id"],Vo={class:"btn btn-sm",style:{"margin-right":"5px"}},Go={class:"btn btn-sm",style:{"margin-right":"5px"}},Oo={class:"btn btn-sm",style:{"margin-right":"5px"}},Ho={class:"mt-4"},Bo={class:"d-flex justify-content-between align-items-center mb-2"},Ko=["disabled","onClick"],Fo={key:0,class:"text-center text-muted py-3"},zo={key:1,class:"table-responsive"},jo={class:"table table-sm table-vcenter"},qo={key:0},Yo={class:"text-end"},Wo=["disabled","onClick"],Jo=Ie({__name:"softwareCatalogList",setup(me,{expose:se}){const le=Ue(),m=v([]),K=v(null),R=v(null),f=v({}),I=v("new"),A=v({}),S=v(""),y=v({}),Y=v(null),x=v(null),W=v(0),T=v(null);Le(async()=>{P()}),se({startRegistration:()=>{I.value="new",R.value=null,f.value={},K.value=0,A.value={},S.value="",setTimeout(()=>{x.value&&typeof x.value.initForCreate=="function"&&x.value.initForCreate()},100)}});const P=async()=>{try{await Ia("").then(({data:s})=>{Aa.forEach(s,function(n){n.refData=$(n.catalogRefs),n.isShow=!1,n.deploymentStatuses=[],n.deploymentStatusLoaded=!1,n.deploymentStatusLoading=!1,n.resolvedLogoUrl=ue(n),n.logoLoadFailed=!1}),m.value=s})}catch(s){console.log(s),le.error("Unable to retrieve data.")}},$=s=>s.reduce((n,r)=>(n[r.refType]||(n[r.refType]=[]),n[r.refType].push(r),n),{}),j=s=>{const n=m.value.find(r=>r.id===s);R.value=s,f.value=n||{},I.value="update",setTimeout(()=>{x.value&&typeof x.value.initForUpdate=="function"&&x.value.initForUpdate(s,n)},100)},V=s=>{y.value=s,Y.value&&Y.value.show()},D=async()=>{await P()},O=()=>{y.value={}},H=async s=>{const n=m.value[s];n.isShow=!n.isShow,n.isShow&&!n.deploymentStatusLoaded&&await Z(n)},Z=async s=>{if(s!=null&&s.id){s.deploymentStatusLoading=!0;try{const{data:n}=await Fe(s.id);s.deploymentStatuses=_(n),s.deploymentStatusLoaded=!0}catch(n){console.log(n),s.deploymentStatuses=[],le.error("Unable to retrieve deployment status.")}finally{s.deploymentStatusLoading=!1}}},_=s=>{const n=Array.isArray(s==null?void 0:s.deploymentHistories)?s.deploymentHistories:[];return(Array.isArray(s==null?void 0:s.applicationStatuses)?s.applicationStatuses:[]).map((h,c)=>{const U=i(h,n);return p(U,h,`status-${h.id||c}`)})},i=(s,n)=>{if(!s)return null;const r=n.find(h=>s.deploymentHistoryId&&String(s.deploymentHistoryId)===String(h.id));return r||n.find(h=>ne(s.deploymentType,h.deploymentType)&&ne(s.namespace,h.namespace)&&(ne(s.vmId,h.vmId)||ne(s.clusterName,h.clusterName)))},p=(s,n,r)=>({rowKey:r,deploymentId:(n==null?void 0:n.deploymentHistoryId)||(s==null?void 0:s.id)||null,deploymentType:F((n==null?void 0:n.deploymentType)||(s==null?void 0:s.deploymentType)),target:F(C(s,n)),csp:F(s==null?void 0:s.cloudProvider),status:F((n==null?void 0:n.status)||(n==null?void 0:n.podStatus)),ipOrEndpoint:F(de(s,n)),lastCheckedOrDeployedAt:F(t(n==null?void 0:n.checkedAt))}),C=(s,n)=>{const r=(n==null?void 0:n.deploymentType)||(s==null?void 0:s.deploymentType),h=(n==null?void 0:n.namespace)||(s==null?void 0:s.namespace),c=(n==null?void 0:n.mciId)||(s==null?void 0:s.mciId),U=(n==null?void 0:n.vmId)||(s==null?void 0:s.vmId),X=(n==null?void 0:n.clusterName)||(s==null?void 0:s.clusterName);return r==="VM"?[h,c,U].filter(Boolean).join(" / "):r==="K8S"?[h,X].filter(Boolean).join(" / "):[h,c,U,X].filter(Boolean).join(" / ")},de=(s,n)=>{var X;const r=(n==null?void 0:n.publicIp)||(s==null?void 0:s.publicIp),h=(n==null?void 0:n.servicePort)||(s==null?void 0:s.servicePort),c=s==null?void 0:s.ingressHost,U=s==null?void 0:s.ingressPath;return s!=null&&s.ingressEnabled&&["public-iks-k8s-nginx","private-iks-k8s-nginx"].includes(s==null?void 0:s.ingressClass)&&c?`${s!=null&&s.ingressTlsEnabled?"https":"http"}://${c}${U||"/"}`:(X=s==null?void 0:s.releaseName)!=null&&X.startsWith("mcmp-jupyter-")&&c?`http://${c}:30880/`:r&&h?`${r}:${h}`:r||(c&&U?`${c}${U}`:c||"")},F=s=>s==null||s===""?"-":s,ne=(s,n)=>!s||!n?!1:String(s)===String(n),t=s=>{if(!s)return"";const n=new Date(s);return Number.isNaN(n.getTime())?s:n.toLocaleString("ko-KR",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1})},B=s=>{if(!s)return;W.value=s;const n=document.getElementById("application-detail-modal");if(n)try{window.bootstrap&&window.bootstrap.Modal?new window.bootstrap.Modal(n).show():(n.style.display="block",n.classList.add("show"),document.body.classList.add("modal-open")),setTimeout(()=>{T.value&&T.value.refreshData(W.value)},100)}catch(r){console.error("Error opening detail modal:",r)}},N=(s,n)=>Object.prototype.hasOwnProperty.call(s,n),Q=s=>{window.open(s)},ie={"apache tomcat":"/catalog-icons/apache-tomcat.png",redis:"/catalog-icons/redis.svg",nginx:"/catalog-icons/nginx.svg","apache http server":"/catalog-icons/apache-http-server.svg","nexus repository":"/catalog-icons/nexus-repository.svg",mariadb:"/catalog-icons/mariadb.svg",grafana:"/catalog-icons/grafana.svg",prometheus:"/catalog-icons/prometheus.svg",elasticsearch:"/catalog-icons/elasticsearch.svg"},Ae=s=>String(s||"").trim().toLowerCase(),ge=s=>ie[Ae(s==null?void 0:s.name)]||"",ue=s=>ge(s)||(s==null?void 0:s.logoUrlLarge)||(s==null?void 0:s.logoUrlSmall)||"",Te=s=>{const n=ge(s);if(n&&s.resolvedLogoUrl!==n){s.resolvedLogoUrl=n,s.logoLoadFailed=!1;return}s.logoLoadFailed=!0},Me=s=>s.replace(/\\n|\n/g,"
");return(s,n)=>(d(),u(E,null,[e("div",ro,[e("div",uo,[e("div",co,[e("div",vo,[e("div",mo,[(d(!0),u(E,null,G(m.value,(r,h)=>(d(),u("div",{class:"list-group-item pe-1",key:h},[e("div",po,[e("div",go,[r.resolvedLogoUrl&&!r.logoLoadFailed?(d(),u("img",{key:0,src:r.resolvedLogoUrl,class:"rounded catalog-icon",alt:"Catalog Icon",width:"40",height:"40",onError:c=>Te(r)},null,40,fo)):(d(),u("div",bo,[z(te(ra),{class:"icon",size:"22","stroke-width":"1.75"})]))]),e("div",{class:"col-5",onClick:c=>H(h)},[ve(g(r.name)+" ",1),e("div",_o,g(r.summary),1)],8,yo),e("div",{class:"col-3 d-flex justify-content-end",onClick:c=>H(h)},[e("span",ko,[z(te(Ra),{class:"icon me-1",width:"12",height:"12","stroke-width":"1",color:"#e5b942"}),e("span",Co,g(r.averageRating||0),1),e("span",wo," ("+g(r.ratingCount||0)+") ",1)]),e("span",Io,[z(te(Ma),{class:"icon me-1",width:"12",height:"12","stroke-width":"1",color:"gray"}),e("span",So,g(r.downloadCount||0),1)])],8,ho),e("div",Ao,[e("div",To,[e("div",Mo,[z(te(Ea),{class:"me-2 cursor-pointer",size:"15","stroke-width":"2","data-bs-toggle":"modal","data-bs-target":"#modal-wizard",onClick:c=>j(r.id)},null,8,["onClick"]),z(te(Na),{class:"cursor-pointer",size:"15","stroke-width":"2",onClick:c=>V(r)},null,8,["onClick"])])]),e("div",{class:"d-flex justify-content-end",onClick:c=>H(h)},[e("span",No,g(r.category.length>25?r.category.substring(0,25)+"...":r.category),1)],8,Eo)]),e("div",{id:"accordion_"+r.id,class:"accordion-collapse collapse",style:na([r.isShow?{display:"block"}:{display:"none"}])},[e("div",Do,[e("div",{class:"mt-3 mb-5",innerHTML:Me(r.description)},null,8,$o),e("div",null,[n[3]||(n[3]=e("strong",null,"Ref Information",-1)),e("ul",{id:`${h}-entity-ul`},[N(r.refData,"HOMEPAGE")?(d(!0),u(E,{key:0},G(r.refData.HOMEPAGE,(c,U)=>(d(),u("li",{key:U},[e("a",{class:"btn",onClick:X=>Q(c.refValue)},g(c.refValue),9,Lo)]))),128)):L("",!0)],8,Uo),n[4]||(n[4]=e("strong",null,"TAGS",-1)),e("ul",{id:`${h}-tag-ul`},[N(r.refData,"TAG")?(d(!0),u(E,{key:0},G(r.refData.TAG,(c,U)=>(d(),u("span",{key:U},"#"+g(c.refValue)+"  ",1))),128)):L("",!0)],8,xo),n[5]||(n[5]=e("strong",null,"Recommended Spec",-1)),e("ul",{id:`${h}-tag-ul`},[r.recommendedCpu&&r.recommendedMemory&&r.recommendedDisk?(d(),u(E,{key:0},[e("button",Vo," CPU : "+g(r.recommendedCpu)+" Core ",1),e("button",Go," MEMORY : "+g(r.recommendedMemory)+" GB ",1),e("button",Oo," DISK : "+g(r.recommendedDisk)+" GB ",1)],64)):L("",!0)],8,Po),e("div",Ho,[e("div",Bo,[n[0]||(n[0]=e("strong",null,"Deployment Status",-1)),e("button",{type:"button",class:"btn btn-sm btn-icon btn-ghost-secondary",title:"Refresh deployment status","aria-label":"Refresh deployment status",disabled:r.deploymentStatusLoading,onClick:we(c=>Z(r),["stop"])},[z(te(da),{class:"icon",size:"18","stroke-width":"1.75"})],8,Ko)]),r.deploymentStatusLoading?(d(),u("div",Fo," Loading deployment status... ")):(d(),u("div",zo,[e("table",jo,[n[2]||(n[2]=e("thead",null,[e("tr",null,[e("th",null,"Type"),e("th",null,"Target"),e("th",null,"CSP"),e("th",null,"Status"),e("th",null,"IP/Endpoint"),e("th",null,"Last Checked"),e("th",{class:"text-end"},"Detail")])],-1)),e("tbody",null,[r.deploymentStatuses.length===0?(d(),u("tr",qo,n[1]||(n[1]=[e("td",{colspan:"7",class:"text-center text-muted"}," No deployment status available ",-1)]))):L("",!0),(d(!0),u(E,null,G(r.deploymentStatuses,c=>(d(),u("tr",{key:c.rowKey},[e("td",null,g(c.deploymentType),1),e("td",null,g(c.target),1),e("td",null,g(c.csp),1),e("td",null,[e("span",{class:oe(te(ua)(c.status))},g(te(Ke)(c.status)),3)]),e("td",null,g(c.ipOrEndpoint),1),e("td",null,g(c.lastCheckedOrDeployedAt),1),e("td",Yo,[e("button",{type:"button",class:"btn btn-outline-primary",disabled:!c.deploymentId,onClick:we(U=>B(c.deploymentId),["stop"])}," Detail ",8,Wo)])]))),128))])])]))])])])],12,Ro)])]))),128))])])])])],512),z(io,{ref_key:"deleteConfirmModal",ref:Y,"target-catalog":y.value,onDeleted:D,onClose:O},null,8,["target-catalog"]),z(qt,{ref_key:"wizardModal",ref:x,mode:I.value,onCreated:P,onUpdated:P},null,8,["mode"]),z(ca,{ref_key:"applicationDetailModalRef",ref:T,"deployment-id":W.value},null,8,["deployment-id"])],64))}}),Zo={class:"page",ref:"sofwareCatalog"},Qo={class:"page-wrapper"},Xo={class:"page-header d-print-none"},es={class:"container-xxl"},as={class:"row g-2 align-items-center"},ls={class:"col-auto ms-auto"},ts={class:"btn-list"},os={class:"page-body"},ss={class:"container-xxl"},ns={class:"row"},is={class:"col-lg-12"},_s=Ie({__name:"SoftwareCatalog",setup(me){const se=ia(),le=q(()=>se.getNsId()||""),m=v(""),K=v(null),R=A=>{const S=document.getElementById(A);S&&Ta.getOrCreateInstance(S).show()},f=async A=>{m.value=A,await $e(),R("install-form")},I=async()=>{var A;(A=K.value)==null||A.startRegistration(),await $e(),R("modal-wizard")};return(A,S)=>(d(),u(E,null,[e("div",Zo,[e("div",Qo,[e("div",Xo,[e("div",es,[e("div",as,[S[1]||(S[1]=e("div",{class:"col d-flex"},[e("h2",{class:"page-title"},"Software Catalog")],-1)),e("div",ls,[e("div",ts,[e("button",{type:"button",class:"btn btn-outline-primary page-header-action-btn",onClick:I}," Register "),e("button",{type:"button",class:"btn btn-primary page-header-action-btn",onClick:S[0]||(S[0]=y=>f("Application Installation"))}," Deploy ")])])])])]),e("div",os,[e("div",ss,[e("div",ns,[e("div",is,[z(Jo,{ref_key:"softwareCatalogListRef",ref:K},null,512)])])])])])],512),z(ta,{"ns-id":le.value,title:m.value},null,8,["ns-id","title"])],64))}});export{_s as default}; diff --git a/src/main/resources/static/assets/SoftwareCatalog-Bu30dAP1.js b/src/main/resources/static/assets/SoftwareCatalog-Bu30dAP1.js new file mode 100644 index 00000000..f9449aa0 --- /dev/null +++ b/src/main/resources/static/assets/SoftwareCatalog-Bu30dAP1.js @@ -0,0 +1,21 @@ +import{A as ta}from"./applicationInstallationForm-B8kAVev5.js";import{d as Ie,f as Ue,r as v,i as Le,x as Be,g as q,h as he,o as d,c as u,a as e,t as g,n as oe,j as b,y as ke,z as Ce,m as L,F as E,k as G,v as re,e as ve,w as we,l as M,p as oa,A as sa,B as $e,b as z,u as te,C as na,q as ia}from"./index-8PPGy_cS.js";import{c as Se}from"./createVueComponent-Czx6MsN9.js";import{g as Ke,I as ra,a as da,b as ua,A as ca}from"./applicationDetailModal-DKOvpn60.js";import{g as De,s as va,a as ma,b as pa,c as ga,d as fa,u as ba,e as ya,f as _a,h as ha,i as ka,j as Ca,k as Fe,l as wa,m as Ia}from"./softwareCatalog-DfwfQXi9.js";import{_ as Sa}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{_ as Aa}from"./lodash-CprRz5WW.js";import{M as Ta}from"./bootstrap.esm-Ceob_0pG.js";import"./request-BD-3QCnG.js";/** + * @license @tabler/icons-vue v3.22.0 - MIT + * + * This source code is licensed under the MIT license. + * See the LICENSE file in the root directory of this source tree. + */var Ma=Se("outline","cloud-download","IconCloudDownload",[["path",{d:"M19 18a3.5 3.5 0 0 0 0 -7h-1a5 4.5 0 0 0 -11 -2a4.6 4.4 0 0 0 -2.1 8.4",key:"svg-0"}],["path",{d:"M12 13l0 9",key:"svg-1"}],["path",{d:"M9 19l3 3l3 -3",key:"svg-2"}]]);/** + * @license @tabler/icons-vue v3.22.0 - MIT + * + * This source code is licensed under the MIT license. + * See the LICENSE file in the root directory of this source tree. + */var Ea=Se("outline","edit","IconEdit",[["path",{d:"M7 7h-1a2 2 0 0 0 -2 2v9a2 2 0 0 0 2 2h9a2 2 0 0 0 2 -2v-1",key:"svg-0"}],["path",{d:"M20.385 6.585a2.1 2.1 0 0 0 -2.97 -2.97l-8.415 8.385v3h3l8.385 -8.415z",key:"svg-1"}],["path",{d:"M16 5l3 3",key:"svg-2"}]]);/** + * @license @tabler/icons-vue v3.22.0 - MIT + * + * This source code is licensed under the MIT license. + * See the LICENSE file in the root directory of this source tree. + */var Na=Se("outline","trash","IconTrash",[["path",{d:"M4 7l16 0",key:"svg-0"}],["path",{d:"M10 11l0 6",key:"svg-1"}],["path",{d:"M14 11l0 6",key:"svg-2"}],["path",{d:"M5 7l1 12a2 2 0 0 0 2 2h8a2 2 0 0 0 2 -2l1 -12",key:"svg-3"}],["path",{d:"M9 7v-3a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v3",key:"svg-4"}]]);/** + * @license @tabler/icons-vue v3.22.0 - MIT + * + * This source code is licensed under the MIT license. + * See the LICENSE file in the root directory of this source tree. + */var Ra=Se("filled","star-filled","IconStarFilled",[["path",{d:"M8.243 7.34l-6.38 .925l-.113 .023a1 1 0 0 0 -.44 1.684l4.622 4.499l-1.09 6.355l-.013 .11a1 1 0 0 0 1.464 .944l5.706 -3l5.693 3l.1 .046a1 1 0 0 0 1.352 -1.1l-1.091 -6.355l4.624 -4.5l.078 -.085a1 1 0 0 0 -.633 -1.62l-6.38 -.926l-2.852 -5.78a1 1 0 0 0 -1.794 0l-2.853 5.78z",key:"svg-0"}]]);const Da={class:"modal-dialog modal-lg",role:"document"},$a={class:"modal-content"},Ua={class:"modal-header"},La={class:"modal-title"},xa=["disabled"],Pa={class:"modal-body",style:{"max-height":"calc(100vh - 200px)","overflow-y":"auto"}},Va={class:"nav nav-tabs mb-3"},Ga={class:"nav-item"},Oa={class:"nav-item"},Ha={class:"nav-item"},Ba={class:"nav-item"},Ka={key:0,class:"mb-4"},Fa={class:"row g-3"},za={class:"col-md-6"},ja=["disabled"],qa={class:"col-md-6"},Ya=["disabled"],Wa={class:"mb-3"},Ja={class:"d-flex align-items-center"},Za={class:"form-check me-3"},Qa=["disabled"],Xa={class:"form-check"},el=["disabled"],al={class:"mb-3"},ll=["disabled"],tl=["value"],ol={class:"row g-3"},sl={class:"col-md-6"},nl=["disabled"],il=["value"],rl={class:"col-md-6"},dl=["disabled"],ul=["value"],cl={class:"alert alert-info py-2 mb-3",role:"status"},vl={class:"form-label required",for:"registrySearchInput"},ml={class:"input-group"},pl=["placeholder","disabled"],gl=["disabled"],fl={key:0,class:"text-danger small mt-2"},bl={key:0,class:"text-center text-muted py-4"},yl={key:1,class:"text-muted py-3"},_l={key:2,class:"registry-results list-group mb-3"},hl=["disabled","onClick"],kl={class:"d-flex align-items-start gap-3"},Cl=["src"],wl={class:"flex-fill text-start"},Il={class:"fw-semibold"},Sl={class:"small registry-description"},Al={key:3,class:"row g-3"},Tl={class:"col-md-6"},Ml=["disabled"],El={value:""},Nl=["value"],Rl={class:"col-md-6"},Dl=["disabled"],$l=["value"],Ul={class:"mb-3"},Ll={class:"mb-3"},xl={class:"mb-3"},Pl={class:"mb-3"},Vl={class:"col-5"},Gl=["onUpdate:modelValue"],Ol={class:"col-6"},Hl=["onUpdate:modelValue"],Bl={class:"col-1 d-flex gap-2"},Kl=["onClick","disabled"],Fl={class:"row"},zl={class:"col-md-6"},jl={class:"row"},ql={class:"col-6"},Yl={class:"input-group"},Wl={class:"col-6"},Jl={class:"input-group"},Zl={class:"row mt-3"},Ql={class:"col-md-6"},Xl={class:"row"},et={class:"col-6"},at={class:"input-group"},lt={class:"col-6"},tt={class:"input-group"},ot={class:"row mt-3"},st={class:"col-md-6"},nt={class:"row"},it={class:"col-6"},rt={class:"input-group"},dt={class:"col-6"},ut={class:"input-group"},ct={key:0,class:"card mt-3"},vt={class:"card-body"},mt={class:"d-flex align-items-center mb-2"},pt={class:"form-check form-switch"},gt={class:"row"},ft={class:"col-md-3"},bt=["disabled"],yt={class:"col-md-3"},_t=["disabled"],ht={class:"col-md-3"},kt=["disabled"],Ct={class:"col-md-3"},wt=["disabled"],It={key:0},St={class:"card"},At={class:"card-body"},Tt={class:"mb-3"},Mt={key:1},Et={class:"card"},Nt={class:"card-body"},Rt={class:"mb-3"},Dt={class:"col-4"},$t=["onUpdate:modelValue"],Ut={class:"col-3"},Lt=["onUpdate:modelValue"],xt={class:"col-4"},Pt=["onUpdate:modelValue"],Vt={class:"col-1 d-flex align-items-end gap-2"},Gt=["onClick","disabled"],Ot={class:"modal-footer"},Ht=["disabled"],Bt={class:"ms-auto d-flex gap-2"},Kt=["disabled"],Ft=["disabled"],zt=["disabled"],jt=Ie({__name:"softwareCatalogWizard",props:{show:{type:Boolean},mode:{}},emits:["created","updated"],setup(me,{expose:se,emit:le}){const m=me,K=le,R=Ue(),f=v(1),I=v(!1),A=v(!1),S=v(0),y=v({}),Y=["AI_MACHINE_LEARNING","DATABASE","INTEGRATION_AND_DELIVERY","MONITORING_AND_LOGGING","NETWORKING","SECURITY","STORAGE","STREAMING_AND_MESSAGING"],x={1:"AI_MACHINE_LEARNING",2:"DATABASE",3:"INTEGRATION_AND_DELIVERY",4:"MONITORING_AND_LOGGING",5:"NETWORKING",6:"SECURITY",7:"STORAGE",8:"STREAMING_AND_MESSAGING"},W={"AI / MACHINE LEARNING":"AI_MACHINE_LEARNING","AI MACHINE LEARNING":"AI_MACHINE_LEARNING",DATABASE:"DATABASE","INTEGRATION AND DELIVERY":"INTEGRATION_AND_DELIVERY","MONITORING AND LOGGING":"MONITORING_AND_LOGGING","MONITORING & LOGGING":"MONITORING_AND_LOGGING",NETWORKING:"NETWORKING",SECURITY:"SECURITY",STORAGE:"STORAGE","STREAMING AND MESSAGING":"STREAMING_AND_MESSAGING"},T=v("existing"),J=v(""),P=v([]),$=v(!1),j=v(!1),V=v(""),D=v(null),O=v([]),H=v(!1),Z=v(Y.map(l=>({key:l,value:l}))),_=v(!1),i=v(!1),p=v(""),C=v(null),de=v(!1);Le(()=>{C.value&&(C.value.addEventListener("show.bs.modal",F),C.value.addEventListener("hide.bs.modal",ne)),be()}),Be(()=>{C.value&&(C.value.removeEventListener("show.bs.modal",F),C.value.removeEventListener("hide.bs.modal",ne))});const F=()=>{A.value=!0,m.mode==="new"&&Ee()},ne=()=>{A.value=!1,de.value=!1},t=v({id:null,target:"VM",sourceType:"DOCKERHUB",category:"",packageName:"",version:"",packageInfo:null,helmChart:null,name:"",summary:"",description:"",logoUrlLarge:"",logoUrlSmall:"",catalogRefs:[],minCpu:0,recommendedCpu:0,minMemory:0,recommendedMemory:0,minDisk:0,recommendedDisk:0,hpaEnabled:!1,minReplicas:1,maxReplicas:10,cpuThreshold:80,memoryThreshold:80,ports:[],ingressEnabled:!1,ingressUrl:"",defaultPort:80,registeredById:null,createdAt:null,updatedAt:null}),B=v([{refId:0,refValue:"",refDesc:"",refType:"URL"}]),N=v([{targetPort:80,hostPort:8080,protocol:"TCP"}]),Q=q(()=>m.mode==="update"||T.value==="existing"),ie=q(()=>t.value.target==="VM"?"Docker Hub":"Artifact Hub"),Ae=q(()=>t.value.target==="VM"?"Search official container images":"Search official Helm charts"),ge=q(()=>m.mode==="update"?_.value?"Updating...":"Update":i.value?"Importing...":_.value?"Creating...":T.value==="public"?"Import & Create":"Create"),ue=q(()=>f.value===1?t.value.target&&t.value.category&&t.value.packageName&&t.value.version:f.value===2?t.value.name.trim().length>0&&t.value.summary.trim().length>0&&t.value.description.trim().length>0:f.value===3?t.value.minCpu>0&&t.value.minMemory>0&&t.value.minDisk>0&&t.value.recommendedCpu>0&&t.value.recommendedMemory>0&&t.value.recommendedDisk>0:f.value===3&&t.value.hpaEnabled?t.value.minReplicas>0&&t.value.maxReplicas>0&&t.value.cpuThreshold>0&&t.value.memoryThreshold>0:(console.log(N.value),f.value===3&&t.value.target==="VM"?t.value.defaultPort>0:f.value===4&&t.value.target==="K8S"?(console.log(N.value.length),N.value.length>0?N.value.every(l=>l.targetPort>0&&l.hostPort>0&&l.protocol):!1):f.value===4&&t.value.ingressEnabled?t.value.ingressUrl.trim().length>0:!0)),Te=()=>{ue.value&&f.value<4&&(f.value+=1)},Me=()=>{f.value>1&&(f.value-=1)},s=(l=!0)=>{l&&(J.value=""),P.value=[],j.value=!1,V.value="",D.value=null,O.value=[],$.value=!1,H.value=!1,i.value=!1,p.value=""},n=l=>{if(l==null)return"";if(typeof l=="object")return n(l.value||l.key||l.name||l.displayName||l.display_name||l.category);const a=String(l).trim();if(!a)return"";if(x[a])return x[a];const o=a.replace(/[_-]+/g," ").replace(/\s+/g," ").trim().toUpperCase();return W[o]?W[o]:a.replace(/&/g,"AND").replace(/[^a-zA-Z0-9]+/g,"_").replace(/^_+|_+$/g,"").replace(/_+/g,"_").toUpperCase()},r=(l=[])=>{const a=new Map;[...Y,...Z.value,...l].forEach(o=>{const k=n((o==null?void 0:o.value)||(o==null?void 0:o.key)||o);k&&a.set(k,{key:k,value:k})}),Z.value=Array.from(a.values()).sort((o,k)=>o.value.localeCompare(k.value))},h=async()=>{r();const a=(await Promise.allSettled([De({target:"DOCKER",availableOnly:!1}),De({target:"HELM",availableOnly:!1})])).flatMap(o=>o.status==="fulfilled"?o.value.data||[]:[]);r(a)},c=(l,a=0)=>{var o;return String((l==null?void 0:l.id)||(l==null?void 0:l.packageId)||`${((o=l==null?void 0:l.repository)==null?void 0:o.name)||"registry"}-${(l==null?void 0:l.name)||a}`)},U=l=>!!D.value&&c(D.value)===c(l),X=l=>{var a,o;return((a=l==null?void 0:l.logo_url)==null?void 0:a.small)||((o=l==null?void 0:l.logo_url)==null?void 0:o.large)||""},xe=l=>(l==null?void 0:l.short_description)||(l==null?void 0:l.description)||"",ze=(l,a)=>{const o=String(l||"");return o.length>a?`${o.substring(0,a)}...`:o},je=async()=>{const l=J.value.trim();if(V.value="",j.value=!1,P.value=[],D.value=null,O.value=[],t.value.packageName="",t.value.version="",!l){V.value="Enter a search keyword.";return}J.value=l,$.value=!0;try{const{data:a}=t.value.target==="VM"?await va(l):await ma(l),o=t.value.target==="VM"?a==null?void 0:a.results:a==null?void 0:a.packages;P.value=(Array.isArray(o)?o:[]).filter(Boolean).slice(0,8),j.value=!0}catch(a){console.log(a),V.value=`Unable to search ${ie.value}.`}finally{$.value=!1}},qe=async l=>{var w,pe,ee,He;D.value=l,t.value.packageName=(l==null?void 0:l.name)||"",t.value.version="",t.value.sourceType=t.value.target==="VM"?"DOCKERHUB":"ARTIFACTHUB",O.value=[],V.value="",p.value="";const a=xe(l);t.value.name=(l==null?void 0:l.name)||t.value.name,t.value.summary=a||(l==null?void 0:l.name)||"",t.value.description=a||(l==null?void 0:l.name)||"",t.value.logoUrlLarge=((w=l==null?void 0:l.logo_url)==null?void 0:w.large)||"",t.value.logoUrlSmall=((pe=l==null?void 0:l.logo_url)==null?void 0:pe.small)||"";const o=n((l==null?void 0:l.category)||((ee=l==null?void 0:l.categories)==null?void 0:ee[0]));r(o?[o]:[]),t.value.category=o;const k=c(l);H.value=!0;try{const{data:_e}=t.value.target==="VM"?await pa({path:(l==null?void 0:l.id)||""}):await ga({kind:"helm",repository:((He=l==null?void 0:l.repository)==null?void 0:He.name)||"",packageName:(l==null?void 0:l.name)||""});if(c(D.value)!==k)return;const Re=(Array.isArray(_e)?_e:[]).map(ae=>t.value.target==="VM"?ae==null?void 0:ae.name:ae==null?void 0:ae.version).filter(Boolean);Re.length===0&&(l!=null&&l.version)&&Re.push(l.version),O.value=Array.from(new Set(Re)).map(ae=>({key:ae,value:ae})),O.value.length===1&&(t.value.version=O.value[0].value)}catch(_e){if(console.log(_e),c(D.value)!==k)return;l!=null&&l.version?(O.value=[{key:l.version,value:l.version}],t.value.version=l.version):V.value="Unable to retrieve package versions."}finally{c(D.value)===k&&(H.value=!1)}},Ee=()=>{f.value=1,T.value="existing",_.value=!1,s(),Z.value=Y.map(l=>({key:l,value:l})),t.value={id:null,target:"VM",sourceType:"DOCKERHUB",category:"",packageName:"",version:"",packageInfo:null,helmChart:null,name:"",summary:"",description:"",logoUrlLarge:"",logoUrlSmall:"",catalogRefs:[],minCpu:0,recommendedCpu:0,minMemory:0,recommendedMemory:0,minDisk:0,recommendedDisk:0,hpaEnabled:!1,minReplicas:1,maxReplicas:10,cpuThreshold:80,memoryThreshold:80,ports:[],ingressEnabled:!1,ingressUrl:"",defaultPort:80,registeredById:null,createdAt:null,updatedAt:null},B.value=[{refId:0,refValue:"",refDesc:"",refType:"URL"}],N.value=[{targetPort:80,hostPort:8080,protocol:"TCP"}]},Ye=()=>{B.value.push({refId:0,refValue:"",refDesc:"",refType:"URL"})},We=l=>{B.value.length>1&&B.value.splice(l,1)},Je=()=>{N.value.push({targetPort:80,hostPort:8080,protocol:"TCP"})},Ze=l=>{N.value.length>1&&N.value.splice(l,1)},Pe=()=>{if(C.value){A.value=!1;const l=C.value.querySelector('[data-bs-dismiss="modal"]');if(l)l.click();else try{const a=window.bootstrap;if(a!=null&&a.Modal)(a.Modal.getInstance(C.value)||new a.Modal(C.value)).hide();else{C.value.classList.remove("show"),C.value.style.display="none",document.body.classList.remove("modal-open");const o=document.querySelector(".modal-backdrop");o==null||o.remove()}}catch(a){console.warn("Modal close failed:",a)}}},Qe=()=>[t.value.target,c(D.value),t.value.version].join("|"),Xe=async()=>{var a,o;if(T.value!=="public")return;if(!D.value)throw new Error("Select a package to import.");const l=Qe();if(p.value!==l){i.value=!0;try{const k=JSON.parse(JSON.stringify(D.value));let w;if(t.value.target==="VM"){const pe=t.value.category,ee={...k,tag:t.value.version,sourceType:"DockerHub",createdAt:k.created_at,updatedAt:k.updated_at,shortDescription:k.short_description,starCount:k.star_count,ratePlans:k.rate_plans,categories:[{name:pe,slug:pe.toLowerCase().replace(/_/g,"-")}]};delete ee.created_at,delete ee.updated_at,delete ee.short_description,delete ee.star_count,delete ee.rate_plans,w=await ka(ee)}else w=await Ca({...k,packageId:k.packageId,tag:t.value.version,version:t.value.version,category:t.value.category,sourceType:"ArtifactHub"});if(((a=w==null?void 0:w.data)==null?void 0:a.success)!==!0)throw new Error(((o=w==null?void 0:w.data)==null?void 0:o.message)||`${ie.value} import failed.`);p.value=l}finally{i.value=!1}}},ea=async()=>{if(!_.value){_.value=!0;try{await Xe(),t.value.catalogRefs=B.value.filter(l=>l.refValue.trim()),t.value.target==="K8S"&&(t.value.ports=N.value.filter(l=>l.targetPort&&l.hostPort)),t.value.target==="VM"?t.value.sourceType="DOCKERHUB":t.value.target==="K8S"&&(t.value.sourceType="ARTIFACTHUB"),await fa(t.value),R.success("Registration Success"),Pe(),K("created")}catch(l){console.log(l),R.error((l==null?void 0:l.message)||"Registration Failed")}finally{_.value=!1}}},aa=async()=>{if(!_.value){_.value=!0;try{t.value.catalogRefs=B.value.filter(l=>l.refValue.trim()),t.value.target==="K8S"&&(t.value.ports=N.value.filter(l=>l.targetPort&&l.hostPort)),t.value.target==="VM"?t.value.sourceType="DOCKERHUB":t.value.target==="K8S"&&(t.value.sourceType="ARTIFACTHUB"),await ba(t.value),R.success("Update Success"),Pe(),K("updated")}catch{R.error("Update Failed")}finally{_.value=!1}}},Ve=async()=>{try{if(!S.value)return;y.value&&y.value.category&&(I.value=!0,t.value.target=y.value.packageInfo!==null?"VM":"K8S",t.value.category=y.value.category,y.value.packageInfo!==null?(t.value.packageName=y.value.packageInfo.packageName,t.value.version=y.value.packageInfo.packageVersion):y.value.helmChart!==null&&(t.value.packageName=y.value.helmChart.chartName,t.value.version=y.value.helmChart.chartVersion),I.value=!1),await la()}catch{R.error("Failed to load catalog data"),I.value=!1}},la=async()=>{try{if(!S.value)return;const{data:l}=await ya(S.value);I.value=!0,t.value={...t.value,...l,target:l.packageInfo!==null?"VM":"K8S"},l.packageInfo!==null&&(t.value.packageName=l.packageInfo.packageName,t.value.version=l.packageInfo.packageVersion),l.helmChart!==null&&(t.value.packageName=l.helmChart.chartName,t.value.version=l.helmChart.chartVersion),l.catalogRefs&&l.catalogRefs.length>0?B.value=l.catalogRefs.map(a=>({refId:a.id||0,refValue:a.refValue||"",refDesc:a.refDesc||"",refType:a.refType||"URL"})):B.value=[{refId:0,refValue:"",refDesc:"",refType:"URL"}],l.ports&&l.ports.length>0?N.value=l.ports.map(a=>({targetPort:a.targetPort||80,hostPort:a.hostPort||8080,protocol:a.protocol||"TCP"})):N.value=[{targetPort:80,hostPort:8080,protocol:"TCP"}],await be(),t.value.category&&(await Ge(),t.value.packageName&&await Oe()),I.value=!1}catch{R.error("Failed to load catalog data"),I.value=!1}},fe=l=>{!_.value&&ue.value&&(f.value=l)};he(T,async()=>{m.mode!=="new"||I.value||(t.value.category="",t.value.packageName="",t.value.version="",t.value.name="",t.value.summary="",t.value.description="",t.value.logoUrlLarge="",t.value.logoUrlSmall="",s(),T.value==="existing"?await be():(t.value.sourceType=t.value.target==="VM"?"DOCKERHUB":"ARTIFACTHUB",await h()))}),he(()=>t.value.target,async(l,a)=>{!l||I.value||l===a||(m.mode==="new"&&(t.value.category="",t.value.packageName="",t.value.version=""),Q.value?await be():(t.value.sourceType=l==="VM"?"DOCKERHUB":"ARTIFACTHUB",s(),await h()))});const Ne=v([]),be=async()=>{if(m.mode==="new"&&Q.value&&(Ne.value=[],ye.value=[],ce.value=[],t.value.category="",t.value.packageName="",t.value.version=""),t.value.target){const l={target:t.value.target==="VM"?"DOCKER":"HELM",availableOnly:m.mode==="new"},{data:a}=await De(l);Ne.value=a}};he(()=>t.value.category,l=>{l&&Q.value&&!I.value&&(m.mode==="new"&&(t.value.packageName="",t.value.version=""),Ge())});const ye=v([]),Ge=async()=>{m.mode==="new"&&Q.value&&(ye.value=[],ce.value=[],t.value.packageName="",t.value.version="");const l={target:t.value.target==="VM"?"DOCKER":"HELM",category:t.value.category||"",availableOnly:m.mode==="new"},{data:a}=await _a(l);ye.value=a};he(()=>t.value.packageName,l=>{l&&Q.value&&!I.value&&(m.mode==="new"&&(t.value.version=""),Oe())});const ce=v([]),Oe=async()=>{m.mode==="new"&&Q.value&&(ce.value=[],t.value.version="");const l={target:t.value.target==="VM"?"DOCKER":"HELM",packageName:t.value.packageName||"",availableOnly:m.mode==="new"},{data:a}=await ha(l);m.mode==="new"?a.forEach(o=>{o.isUsed||ce.value.push(o)}):ce.value=a};return se({loadCatalogDataWithCategoryInit:Ve,initForCreate:()=>{Ee(),f.value=1},initForUpdate:(l,a)=>{S.value=l,y.value=a,f.value=1,Ve()}}),(l,a)=>(d(),u("div",{class:"modal fade",id:"modal-wizard",tabindex:"-1",ref_key:"wizardModal",ref:C},[e("div",Da,[e("div",$a,[e("div",Ua,[e("h5",La,g(m.mode==="update"?"Application Update":"Application Registration"),1),e("button",{type:"button",class:"btn-close","data-bs-dismiss":"modal","aria-label":"Close",disabled:_.value},null,8,xa)]),e("div",Pa,[e("ul",Va,[e("li",Ga,[e("a",{class:oe(["nav-link",{active:f.value===1}]),href:"javascript:void(0);",onClick:a[0]||(a[0]=o=>fe(1))},"1. "+g(m.mode==="update"?"Package":"Source & Package"),3)]),e("li",Oa,[e("a",{class:oe(["nav-link",{active:f.value===2}]),href:"javascript:void(0);",onClick:a[1]||(a[1]=o=>fe(2))},"2. General",2)]),e("li",Ha,[e("a",{class:oe(["nav-link",{active:f.value===3}]),href:"javascript:void(0);",onClick:a[2]||(a[2]=o=>fe(3))},"3. Resource Requirements",2)]),e("li",Ba,[e("a",{class:oe(["nav-link",{active:f.value===4}]),href:"javascript:void(0);",onClick:a[3]||(a[3]=o=>fe(4))},"4. Network",2)])]),b(e("div",null,[m.mode!=="update"?(d(),u("div",Ka,[a[32]||(a[32]=e("label",{class:"form-label required"},"Registration Source",-1)),e("div",Fa,[e("div",za,[e("label",{class:oe(["source-option",{selected:T.value==="existing"}]),for:"sourceExisting"},[b(e("input",{id:"sourceExisting","onUpdate:modelValue":a[4]||(a[4]=o=>T.value=o),class:"form-check-input",type:"radio",name:"registrationSource",value:"existing",disabled:_.value},null,8,ja),[[Ce,T.value]]),a[30]||(a[30]=e("span",null,[e("strong",null,"Existing Package"),e("small",null,"Register a package already available in MCMP.")],-1))],2)]),e("div",qa,[e("label",{class:oe(["source-option",{selected:T.value==="public"}]),for:"sourcePublic"},[b(e("input",{id:"sourcePublic","onUpdate:modelValue":a[5]||(a[5]=o=>T.value=o),class:"form-check-input",type:"radio",name:"registrationSource",value:"public",disabled:_.value},null,8,Ya),[[Ce,T.value]]),a[31]||(a[31]=e("span",null,[e("strong",null,"Public Registry"),e("small",null,"Search, import, and register in one flow.")],-1))],2)])])])):L("",!0),e("div",Wa,[a[35]||(a[35]=e("label",{class:"form-label required"},"Target",-1)),e("div",Ja,[e("div",Za,[b(e("input",{class:"form-check-input",type:"radio",name:"target",value:"VM","onUpdate:modelValue":a[6]||(a[6]=o=>t.value.target=o),id:"targetVM",disabled:m.mode==="update"||_.value},null,8,Qa),[[Ce,t.value.target]]),a[33]||(a[33]=e("label",{class:"form-check-label",for:"targetVM"},"VM",-1))]),e("div",Xa,[b(e("input",{class:"form-check-input",type:"radio",name:"target",value:"K8S","onUpdate:modelValue":a[7]||(a[7]=o=>t.value.target=o),id:"targetK8S",disabled:m.mode==="update"||_.value},null,8,el),[[Ce,t.value.target]]),a[34]||(a[34]=e("label",{class:"form-check-label",for:"targetK8S"},"K8S",-1))])])]),Q.value?(d(),u(E,{key:1},[e("div",al,[a[37]||(a[37]=e("label",{class:"form-label required"},"Category",-1)),b(e("select",{class:"form-select","onUpdate:modelValue":a[8]||(a[8]=o=>t.value.category=o),disabled:m.mode==="update"},[a[36]||(a[36]=e("option",{value:""},"Select Category",-1)),(d(!0),u(E,null,G(Ne.value,o=>(d(),u("option",{value:o.value,key:o.key},g(o.value),9,tl))),128))],8,ll),[[re,t.value.category]])]),e("div",ol,[e("div",sl,[a[39]||(a[39]=e("label",{class:"form-label required"},"Package",-1)),b(e("select",{class:"form-select","onUpdate:modelValue":a[9]||(a[9]=o=>t.value.packageName=o),disabled:m.mode==="update"},[a[38]||(a[38]=e("option",{value:""},"Select Package",-1)),(d(!0),u(E,null,G(ye.value,o=>(d(),u("option",{value:o.value,key:o.key},g(o.value),9,il))),128))],8,nl),[[re,t.value.packageName]])]),e("div",rl,[a[41]||(a[41]=e("label",{class:"form-label required"},"Version",-1)),b(e("select",{class:"form-select","onUpdate:modelValue":a[10]||(a[10]=o=>t.value.version=o),disabled:m.mode==="update"},[a[40]||(a[40]=e("option",{value:""},"Select Version",-1)),(d(!0),u(E,null,G(ce.value,o=>(d(),u("option",{value:o.value,key:o.key},g(o.value),9,ul))),128))],8,dl),[[re,t.value.version]])])])],64)):(d(),u(E,{key:2},[e("div",cl,[e("strong",null,g(ie.value),1),a[42]||(a[42]=ve(" will be searched for the selected target. The package is imported only when you complete registration. "))]),e("form",{class:"mb-3",onSubmit:we(je,["prevent"])},[e("label",vl,"Search "+g(ie.value),1),e("div",ml,[b(e("input",{id:"registrySearchInput","onUpdate:modelValue":a[11]||(a[11]=o=>J.value=o),type:"search",class:"form-control",placeholder:Ae.value,disabled:$.value||_.value},null,8,pl),[[M,J.value]]),e("button",{class:"btn btn-outline-primary",type:"submit",disabled:$.value||_.value},g($.value?"Searching...":"Search"),9,gl)]),V.value?(d(),u("div",fl,g(V.value),1)):L("",!0)],32),$.value?(d(),u("div",bl,"Searching "+g(ie.value)+"...",1)):j.value&&P.value.length===0?(d(),u("div",yl," No matching packages found. ")):P.value.length>0?(d(),u("div",_l,[(d(!0),u(E,null,G(P.value,(o,k)=>(d(),u("button",{key:c(o,k),type:"button",class:oe(["list-group-item list-group-item-action",{active:U(o)}]),disabled:H.value||_.value,onClick:w=>qe(o)},[e("div",kl,[X(o)?(d(),u("img",{key:0,src:X(o),class:"rounded registry-logo",alt:"",width:"40",height:"40"},null,8,Cl)):L("",!0),e("div",wl,[e("div",Il,g((o==null?void 0:o.name)||(o==null?void 0:o.packageId)||"Unnamed package"),1),e("div",Sl,g(ze(xe(o),120)),1)])])],10,hl))),128))])):L("",!0),D.value?(d(),u("div",Al,[e("div",Tl,[a[43]||(a[43]=e("label",{class:"form-label required"},"Version",-1)),b(e("select",{class:"form-select","onUpdate:modelValue":a[12]||(a[12]=o=>t.value.version=o),disabled:H.value||_.value},[e("option",El,g(H.value?"Loading versions...":"Select Version"),1),(d(!0),u(E,null,G(O.value,o=>(d(),u("option",{value:o.value,key:o.key},g(o.value),9,Nl))),128))],8,Ml),[[re,t.value.version]])]),e("div",Rl,[a[45]||(a[45]=e("label",{class:"form-label required"},"Category",-1)),b(e("select",{class:"form-select","onUpdate:modelValue":a[13]||(a[13]=o=>t.value.category=o),disabled:_.value},[a[44]||(a[44]=e("option",{value:""},"Select Category",-1)),(d(!0),u(E,null,G(Z.value,o=>(d(),u("option",{value:o.value,key:o.key},g(o.value),9,$l))),128))],8,Dl),[[re,t.value.category]])])])):L("",!0)],64))],512),[[ke,f.value===1]]),b(e("div",null,[e("div",Ul,[a[46]||(a[46]=e("label",{class:"form-label required"},"Application Name",-1)),b(e("input",{type:"text",class:"form-control","onUpdate:modelValue":a[14]||(a[14]=o=>t.value.name=o),placeholder:"Application name"},null,512),[[M,t.value.name]])]),e("div",Ll,[a[47]||(a[47]=e("label",{class:"form-label required"},"Summary",-1)),b(e("input",{type:"text",class:"form-control","onUpdate:modelValue":a[15]||(a[15]=o=>t.value.summary=o),placeholder:"Application summary"},null,512),[[M,t.value.summary]])]),e("div",xl,[a[48]||(a[48]=e("label",{class:"form-label required"},"Description",-1)),b(e("textarea",{class:"form-control",rows:"4","onUpdate:modelValue":a[16]||(a[16]=o=>t.value.description=o),placeholder:"Application description"},null,512),[[M,t.value.description]])]),e("div",Pl,[a[50]||(a[50]=e("label",{class:"form-label"},"Reference",-1)),(d(!0),u(E,null,G(B.value,(o,k)=>(d(),u("div",{class:"row g-2 mb-2",key:k},[e("div",Vl,[b(e("select",{class:"form-select","onUpdate:modelValue":w=>o.refType=w},a[49]||(a[49]=[oa('',6)]),8,Gl),[[re,o.refType]])]),e("div",Ol,[b(e("input",{type:"text",class:"form-control","onUpdate:modelValue":w=>o.refValue=w,placeholder:"Ref Value"},null,8,Hl),[[M,o.refValue]])]),e("div",Bl,[e("button",{type:"button",class:"btn btn-outline-danger btn-sm w-100 cursor-pointer",onClick:w=>We(k),disabled:B.value.length<=1},"-",8,Kl)])]))),128)),e("div",{class:"form-text cursor-pointer",onClick:Ye,style:{color:"gray"}},"+ Add Reference")])],512),[[ke,f.value===2]]),b(e("div",null,[e("div",Fl,[e("div",zl,[a[55]||(a[55]=e("label",{class:"form-label"},"CPU",-1)),e("div",jl,[e("div",ql,[a[52]||(a[52]=e("label",{class:"form-label text-muted small"},"Minimum",-1)),e("div",Yl,[b(e("input",{type:"number",min:"0",step:"0.1",class:"form-control","onUpdate:modelValue":a[17]||(a[17]=o=>t.value.minCpu=o),placeholder:"1"},null,512),[[M,t.value.minCpu,void 0,{number:!0}]]),a[51]||(a[51]=e("span",{class:"input-group-text"},"Cores",-1))])]),e("div",Wl,[a[54]||(a[54]=e("label",{class:"form-label text-muted small"},"Recommended",-1)),e("div",Jl,[b(e("input",{type:"number",min:"0",step:"0.1",class:"form-control","onUpdate:modelValue":a[18]||(a[18]=o=>t.value.recommendedCpu=o),placeholder:"2"},null,512),[[M,t.value.recommendedCpu,void 0,{number:!0}]]),a[53]||(a[53]=e("span",{class:"input-group-text"},"Cores",-1))])])])])]),e("div",Zl,[e("div",Ql,[a[60]||(a[60]=e("label",{class:"form-label"},"Memory",-1)),e("div",Xl,[e("div",et,[a[57]||(a[57]=e("label",{class:"form-label text-muted small"},"Minimum",-1)),e("div",at,[b(e("input",{type:"number",min:"0",step:"0.1",class:"form-control","onUpdate:modelValue":a[19]||(a[19]=o=>t.value.minMemory=o),placeholder:"4"},null,512),[[M,t.value.minMemory,void 0,{number:!0}]]),a[56]||(a[56]=e("span",{class:"input-group-text"},"GB",-1))])]),e("div",lt,[a[59]||(a[59]=e("label",{class:"form-label text-muted small"},"Recommended",-1)),e("div",tt,[b(e("input",{type:"number",min:"0",step:"0.1",class:"form-control","onUpdate:modelValue":a[20]||(a[20]=o=>t.value.recommendedMemory=o),placeholder:"8"},null,512),[[M,t.value.recommendedMemory,void 0,{number:!0}]]),a[58]||(a[58]=e("span",{class:"input-group-text"},"GB",-1))])])])])]),e("div",ot,[e("div",st,[a[65]||(a[65]=e("label",{class:"form-label"},"Storage",-1)),e("div",nt,[e("div",it,[a[62]||(a[62]=e("label",{class:"form-label text-muted small"},"Minimum",-1)),e("div",rt,[b(e("input",{type:"number",min:"0",class:"form-control","onUpdate:modelValue":a[21]||(a[21]=o=>t.value.minDisk=o),placeholder:"10"},null,512),[[M,t.value.minDisk,void 0,{number:!0}]]),a[61]||(a[61]=e("span",{class:"input-group-text"},"GB",-1))])]),e("div",dt,[a[64]||(a[64]=e("label",{class:"form-label text-muted small"},"Recommended",-1)),e("div",ut,[b(e("input",{type:"number",min:"0",class:"form-control","onUpdate:modelValue":a[22]||(a[22]=o=>t.value.recommendedDisk=o),placeholder:"20"},null,512),[[M,t.value.recommendedDisk,void 0,{number:!0}]]),a[63]||(a[63]=e("span",{class:"input-group-text"},"GB",-1))])])])])]),t.value.target==="K8S"?(d(),u("div",ct,[e("div",vt,[e("div",mt,[a[66]||(a[66]=e("label",{class:"form-check-label me-2"},"K8S HPA",-1)),e("div",pt,[b(e("input",{class:"form-check-input",type:"checkbox","onUpdate:modelValue":a[23]||(a[23]=o=>t.value.hpaEnabled=o)},null,512),[[sa,t.value.hpaEnabled]])])]),e("div",gt,[e("div",ft,[a[67]||(a[67]=e("label",{class:"form-label"},"minReplicas",-1)),b(e("input",{type:"number",min:"1",class:"form-control","onUpdate:modelValue":a[24]||(a[24]=o=>t.value.minReplicas=o),disabled:!t.value.hpaEnabled,placeholder:"1"},null,8,bt),[[M,t.value.minReplicas,void 0,{number:!0}]])]),e("div",yt,[a[68]||(a[68]=e("label",{class:"form-label"},"maxReplicas",-1)),b(e("input",{type:"number",min:"1",class:"form-control","onUpdate:modelValue":a[25]||(a[25]=o=>t.value.maxReplicas=o),disabled:!t.value.hpaEnabled,placeholder:"10"},null,8,_t),[[M,t.value.maxReplicas,void 0,{number:!0}]])]),e("div",ht,[a[69]||(a[69]=e("label",{class:"form-label"},"CPU (%)",-1)),b(e("input",{type:"number",min:"1",max:"100",class:"form-control","onUpdate:modelValue":a[26]||(a[26]=o=>t.value.cpuThreshold=o),disabled:!t.value.hpaEnabled,placeholder:"80"},null,8,kt),[[M,t.value.cpuThreshold,void 0,{number:!0}]])]),e("div",Ct,[a[70]||(a[70]=e("label",{class:"form-label"},"Memory (%)",-1)),b(e("input",{type:"number",min:"1",max:"100",class:"form-control","onUpdate:modelValue":a[27]||(a[27]=o=>t.value.memoryThreshold=o),disabled:!t.value.hpaEnabled,placeholder:"80"},null,8,wt),[[M,t.value.memoryThreshold,void 0,{number:!0}]])])])])])):L("",!0)],512),[[ke,f.value===3]]),b(e("div",null,[t.value.target==="VM"?(d(),u("div",It,[e("div",St,[a[72]||(a[72]=e("div",{class:"card-header"},[e("h6",{class:"card-title"},"Port Mapping")],-1)),e("div",At,[e("div",Tt,[a[71]||(a[71]=e("label",{class:"form-label"},"Port",-1)),b(e("input",{type:"number",min:"1",max:"65535",class:"form-control","onUpdate:modelValue":a[28]||(a[28]=o=>t.value.defaultPort=o),placeholder:"80"},null,512),[[M,t.value.defaultPort,void 0,{number:!0}]])])])])])):L("",!0),t.value.target==="K8S"?(d(),u("div",Mt,[e("div",Et,[a[78]||(a[78]=e("div",{class:"card-header"},[e("h6",{class:"card-title"},"Port Mapping")],-1)),e("div",Nt,[e("div",Rt,[a[77]||(a[77]=e("label",{class:"form-label"},"Port",-1)),(d(!0),u(E,null,G(N.value,(o,k)=>(d(),u("div",{class:"row g-2 mb-2",key:k},[e("div",Dt,[a[73]||(a[73]=e("label",{class:"form-label small"},"Target Port",-1)),b(e("input",{type:"number",min:"1",max:"65535",class:"form-control","onUpdate:modelValue":w=>o.targetPort=w,placeholder:"80"},null,8,$t),[[M,o.targetPort,void 0,{number:!0}]])]),e("div",Ut,[a[75]||(a[75]=e("label",{class:"form-label small"},"Protocol",-1)),b(e("select",{class:"form-select","onUpdate:modelValue":w=>o.protocol=w},a[74]||(a[74]=[e("option",{value:"TCP"},"TCP",-1),e("option",{value:"UDP"},"UDP",-1),e("option",{value:"SCTP"},"SCTP",-1)]),8,Lt),[[re,o.protocol]])]),e("div",xt,[a[76]||(a[76]=e("label",{class:"form-label small"},"Host Port",-1)),b(e("input",{type:"number",min:"1",max:"65535",class:"form-control","onUpdate:modelValue":w=>o.hostPort=w,placeholder:"8080"},null,8,Pt),[[M,o.hostPort,void 0,{number:!0}]])]),e("div",Vt,[e("button",{type:"button",class:"btn btn-outline-danger btn-sm w-100 cursor-pointer",onClick:w=>Ze(k),disabled:N.value.length<=1},"-",8,Gt)])]))),128)),e("div",{class:"form-text cursor-pointer",onClick:Je,style:{color:"gray"}},"+ Add Port Mapping")])])])])):L("",!0)],512),[[ke,f.value===4]])]),e("div",Ot,[e("button",{type:"button",class:"btn btn-link link-secondary","data-bs-dismiss":"modal",disabled:_.value,onClick:Ee}," Cancel ",8,Ht),e("div",Bt,[e("button",{class:"btn btn-outline-secondary",disabled:f.value===1||_.value,onClick:Me},"Prev",8,Kt),f.value<4?(d(),u("button",{key:0,class:"btn btn-primary",disabled:!ue.value||_.value,onClick:Te},"Next",8,Ft)):(d(),u("button",{key:1,class:"btn btn-primary",disabled:!ue.value||_.value,onClick:a[29]||(a[29]=o=>m.mode==="update"?aa():ea())},g(ge.value),9,zt))])])])])],512))}}),qt=Sa(jt,[["__scopeId","data-v-bd745d1f"]]),Yt={class:"modal-dialog",role:"document"},Wt={class:"modal-content"},Jt={class:"modal-body"},Zt={key:0,class:"text-muted"},Qt={key:1,class:"alert alert-warning mb-0"},Xt={key:2,class:"alert alert-warning mb-0"},eo={class:"mb-0 mt-2 ps-3"},ao={key:0,class:"mt-1"},lo={key:3,class:"text-muted"},to={class:"modal-footer"},oo=["disabled"],so=["disabled"],no={key:0,class:"spinner-border spinner-border-sm me-2",role:"status"},io=Ie({__name:"DeleteConfirmModal",props:{targetCatalog:{}},emits:["deleted","close"],setup(me,{expose:se,emit:le}){const m=me,K=le,R=Ue(),f=v(!1),I=v(!1),A=v(!1),S=v([]),y=v(null),Y=new Set(["UNINSTALLED","DELETED","DELETE_COMPLETED"]),x=q(()=>S.value.length>0),W=q(()=>S.value.slice(0,3)),T=q(()=>Math.max(S.value.length-W.value.length,0)),J=q(()=>f.value||I.value||A.value||x.value),P=async()=>{if(await $e(),V(),y.value)try{const i=window.bootstrap;if(i&&i.Modal)new i.Modal(y.value).show();else{y.value.classList.add("show"),y.value.style.display="block",document.body.classList.add("modal-open");const p=document.createElement("div");p.className="modal-backdrop fade show",p.id="delete-modal-backdrop",document.body.appendChild(p)}}catch(i){console.warn("Failed to show modal with Bootstrap, using fallback:",i),y.value.classList.add("show"),y.value.style.display="block",document.body.classList.add("modal-open")}},$=()=>{if(y.value)try{const i=window.bootstrap;if(i&&i.Modal){const p=i.Modal.getInstance(y.value);p?p.hide():j()}else j()}catch(i){console.warn("Failed to hide modal with Bootstrap, using fallback:",i),j()}},j=()=>{if(y.value){y.value.classList.remove("show"),y.value.style.display="none",document.body.classList.remove("modal-open");const i=document.getElementById("delete-modal-backdrop");i&&i.remove(),K("close")}},V=async()=>{var i;if(S.value=[],A.value=!1,!!((i=m.targetCatalog)!=null&&i.id)){I.value=!0;try{const{data:p}=await Fe(m.targetCatalog.id),C=Array.isArray(p==null?void 0:p.applicationStatuses)?p.applicationStatuses:[];S.value=C.filter(D).map(O)}catch(p){console.log(p),A.value=!0}finally{I.value=!1}}},D=i=>{const p=H((i==null?void 0:i.status)||(i==null?void 0:i.podStatus));return!Y.has(p)},O=(i,p)=>{const C=[i==null?void 0:i.namespace,i==null?void 0:i.mciId,(i==null?void 0:i.vmId)||(i==null?void 0:i.clusterName)].filter(Boolean).join(" / "),de=(i==null?void 0:i.deploymentType)||"Deployment",F=Ke((i==null?void 0:i.status)||(i==null?void 0:i.podStatus));return{key:(i==null?void 0:i.id)||`${de}-${C}-${p}`,label:`${de}${C?` - ${C}`:""} (${F})`}},H=i=>String(i||"").trim().toUpperCase(),Z=async()=>{var i;if((i=m.targetCatalog)!=null&&i.id){if(J.value){x.value&&R.warning("This catalog has deployed applications. Please delete them first.");return}f.value=!0;try{await wa(m.targetCatalog.id),R.success(`${m.targetCatalog.name} catalog has been successfully deleted.`),$(),K("deleted",m.targetCatalog.id)}catch(p){console.error("Delete failed:",p),R.error("Failed to delete catalog.")}finally{f.value=!1}}},_=()=>{K("close")};return Le(()=>{y.value&&y.value.addEventListener("hidden.bs.modal",_)}),Be(()=>{y.value&&y.value.removeEventListener("hidden.bs.modal",_)}),se({show:P,hide:$}),(i,p)=>(d(),u("div",{class:"modal fade",id:"deleteConfirmModal",tabindex:"-1",ref_key:"deleteModal",ref:y,onClick:we($,["self"])},[e("div",Yt,[e("div",Wt,[e("div",{class:"modal-header"},[p[0]||(p[0]=e("h5",{class:"modal-title"},"Confirm Catalog Deletion",-1)),e("button",{type:"button",class:"btn-close",onClick:$,"aria-label":"Close"})]),e("div",Jt,[e("p",null,[p[1]||(p[1]=ve("Are you sure you want to delete ")),e("strong",null,g(i.targetCatalog.name),1),ve(" ("+g(i.targetCatalog.category)+") catalog?",1)]),I.value?(d(),u("div",Zt,p[2]||(p[2]=[e("span",{class:"spinner-border spinner-border-sm me-2",role:"status"},null,-1),ve(" Checking deployed applications... ")]))):A.value?(d(),u("div",Qt," Unable to verify deployed applications. Try again before deleting this catalog. ")):x.value?(d(),u("div",Xt,[p[3]||(p[3]=e("div",{class:"fw-semibold"},"This catalog has deployed applications.",-1)),p[4]||(p[4]=e("div",null,"Please delete the deployed applications first.",-1)),e("ul",eo,[(d(!0),u(E,null,G(W.value,C=>(d(),u("li",{key:C.key},g(C.label),1))),128))]),T.value>0?(d(),u("div",ao," and "+g(T.value)+" more... ",1)):L("",!0)])):(d(),u("p",lo,"This action cannot be undone."))]),e("div",to,[A.value?(d(),u("button",{key:0,type:"button",class:"btn btn-outline-secondary",disabled:I.value,onClick:V}," Retry ",8,oo)):L("",!0),e("button",{type:"button",class:"btn btn-secondary",onClick:$},"Cancel"),e("button",{type:"button",class:"btn btn-danger",onClick:Z,disabled:J.value},[f.value?(d(),u("span",no)):L("",!0),ve(" "+g(f.value?"Deleting...":"Delete"),1)],8,so)])])])],512))}}),ro={ref:"sofwareCatalog"},uo={class:"row"},co={class:"col-lg-12"},vo={class:"card"},mo={class:"list-group card-list-group",id:"sc-list-group"},po={class:"row g-2 align-items-center"},go={class:"col-auto me-3"},fo=["src","onError"],bo={key:1,class:"rounded catalog-icon-fallback d-flex align-items-center justify-content-center"},yo=["onClick"],_o={class:"text-muted"},ho=["onClick"],ko={class:"text-muted",style:{width:"auto","text-align":"right"}},Co={style:{color:"#e5b942"}},wo={style:{color:"#e5b942"}},Io={class:"text-muted",style:{width:"80px","text-align":"right"}},So={style:{color:"gray"}},Ao={class:"col-3 text-muted"},To={class:"d-flex justify-content-end"},Mo={class:"mouse-hover"},Eo=["onClick"],No={class:"text-muted"},Ro=["id"],Do={class:"accordion-body pt-0"},$o=["innerHTML"],Uo=["id"],Lo=["onClick"],xo=["id"],Po=["id"],Vo={class:"btn btn-sm",style:{"margin-right":"5px"}},Go={class:"btn btn-sm",style:{"margin-right":"5px"}},Oo={class:"btn btn-sm",style:{"margin-right":"5px"}},Ho={class:"mt-4"},Bo={class:"d-flex justify-content-between align-items-center mb-2"},Ko=["disabled","onClick"],Fo={key:0,class:"text-center text-muted py-3"},zo={key:1,class:"table-responsive"},jo={class:"table table-sm table-vcenter"},qo={key:0},Yo={class:"text-end"},Wo=["disabled","onClick"],Jo=Ie({__name:"softwareCatalogList",setup(me,{expose:se}){const le=Ue(),m=v([]),K=v(null),R=v(null),f=v({}),I=v("new"),A=v({}),S=v(""),y=v({}),Y=v(null),x=v(null),W=v(0),T=v(null);Le(async()=>{P()}),se({startRegistration:()=>{I.value="new",R.value=null,f.value={},K.value=0,A.value={},S.value="",setTimeout(()=>{x.value&&typeof x.value.initForCreate=="function"&&x.value.initForCreate()},100)}});const P=async()=>{try{await Ia("").then(({data:s})=>{Aa.forEach(s,function(n){n.refData=$(n.catalogRefs),n.isShow=!1,n.deploymentStatuses=[],n.deploymentStatusLoaded=!1,n.deploymentStatusLoading=!1,n.resolvedLogoUrl=ue(n),n.logoLoadFailed=!1}),m.value=s})}catch(s){console.log(s),le.error("Unable to retrieve data.")}},$=s=>s.reduce((n,r)=>(n[r.refType]||(n[r.refType]=[]),n[r.refType].push(r),n),{}),j=s=>{const n=m.value.find(r=>r.id===s);R.value=s,f.value=n||{},I.value="update",setTimeout(()=>{x.value&&typeof x.value.initForUpdate=="function"&&x.value.initForUpdate(s,n)},100)},V=s=>{y.value=s,Y.value&&Y.value.show()},D=async()=>{await P()},O=()=>{y.value={}},H=async s=>{const n=m.value[s];n.isShow=!n.isShow,n.isShow&&!n.deploymentStatusLoaded&&await Z(n)},Z=async s=>{if(s!=null&&s.id){s.deploymentStatusLoading=!0;try{const{data:n}=await Fe(s.id);s.deploymentStatuses=_(n),s.deploymentStatusLoaded=!0}catch(n){console.log(n),s.deploymentStatuses=[],le.error("Unable to retrieve deployment status.")}finally{s.deploymentStatusLoading=!1}}},_=s=>{const n=Array.isArray(s==null?void 0:s.deploymentHistories)?s.deploymentHistories:[];return(Array.isArray(s==null?void 0:s.applicationStatuses)?s.applicationStatuses:[]).map((h,c)=>{const U=i(h,n);return p(U,h,`status-${h.id||c}`)})},i=(s,n)=>{if(!s)return null;const r=n.find(h=>s.deploymentHistoryId&&String(s.deploymentHistoryId)===String(h.id));return r||n.find(h=>ne(s.deploymentType,h.deploymentType)&&ne(s.namespace,h.namespace)&&(ne(s.vmId,h.vmId)||ne(s.clusterName,h.clusterName)))},p=(s,n,r)=>({rowKey:r,deploymentId:(n==null?void 0:n.deploymentHistoryId)||(s==null?void 0:s.id)||null,deploymentType:F((n==null?void 0:n.deploymentType)||(s==null?void 0:s.deploymentType)),target:F(C(s,n)),csp:F(s==null?void 0:s.cloudProvider),status:F((n==null?void 0:n.status)||(n==null?void 0:n.podStatus)),ipOrEndpoint:F(de(s,n)),lastCheckedOrDeployedAt:F(t(n==null?void 0:n.checkedAt))}),C=(s,n)=>{const r=(n==null?void 0:n.deploymentType)||(s==null?void 0:s.deploymentType),h=(n==null?void 0:n.namespace)||(s==null?void 0:s.namespace),c=(n==null?void 0:n.mciId)||(s==null?void 0:s.mciId),U=(n==null?void 0:n.vmId)||(s==null?void 0:s.vmId),X=(n==null?void 0:n.clusterName)||(s==null?void 0:s.clusterName);return r==="VM"?[h,c,U].filter(Boolean).join(" / "):r==="K8S"?[h,X].filter(Boolean).join(" / "):[h,c,U,X].filter(Boolean).join(" / ")},de=(s,n)=>{var X;const r=(n==null?void 0:n.publicIp)||(s==null?void 0:s.publicIp),h=(n==null?void 0:n.servicePort)||(s==null?void 0:s.servicePort),c=s==null?void 0:s.ingressHost,U=s==null?void 0:s.ingressPath;return s!=null&&s.ingressEnabled&&["public-iks-k8s-nginx","private-iks-k8s-nginx"].includes(s==null?void 0:s.ingressClass)&&c?`${s!=null&&s.ingressTlsEnabled?"https":"http"}://${c}${U||"/"}`:(X=s==null?void 0:s.releaseName)!=null&&X.startsWith("mcmp-jupyter-")&&c?`http://${c}:30880/`:r&&h?`${r}:${h}`:r||(c&&U?`${c}${U}`:c||"")},F=s=>s==null||s===""?"-":s,ne=(s,n)=>!s||!n?!1:String(s)===String(n),t=s=>{if(!s)return"";const n=new Date(s);return Number.isNaN(n.getTime())?s:n.toLocaleString("ko-KR",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1})},B=s=>{if(!s)return;W.value=s;const n=document.getElementById("application-detail-modal");if(n)try{window.bootstrap&&window.bootstrap.Modal?new window.bootstrap.Modal(n).show():(n.style.display="block",n.classList.add("show"),document.body.classList.add("modal-open")),setTimeout(()=>{T.value&&T.value.refreshData(W.value)},100)}catch(r){console.error("Error opening detail modal:",r)}},N=(s,n)=>Object.prototype.hasOwnProperty.call(s,n),Q=s=>{window.open(s)},ie={"apache tomcat":"/catalog-icons/apache-tomcat.png",redis:"/catalog-icons/redis.svg",nginx:"/catalog-icons/nginx.svg","apache http server":"/catalog-icons/apache-http-server.svg","nexus repository":"/catalog-icons/nexus-repository.svg",mariadb:"/catalog-icons/mariadb.svg",grafana:"/catalog-icons/grafana.svg",prometheus:"/catalog-icons/prometheus.svg",elasticsearch:"/catalog-icons/elasticsearch.svg"},Ae=s=>String(s||"").trim().toLowerCase(),ge=s=>ie[Ae(s==null?void 0:s.name)]||"",ue=s=>ge(s)||(s==null?void 0:s.logoUrlLarge)||(s==null?void 0:s.logoUrlSmall)||"",Te=s=>{const n=ge(s);if(n&&s.resolvedLogoUrl!==n){s.resolvedLogoUrl=n,s.logoLoadFailed=!1;return}s.logoLoadFailed=!0},Me=s=>s.replace(/\\n|\n/g,"
");return(s,n)=>(d(),u(E,null,[e("div",ro,[e("div",uo,[e("div",co,[e("div",vo,[e("div",mo,[(d(!0),u(E,null,G(m.value,(r,h)=>(d(),u("div",{class:"list-group-item pe-1",key:h},[e("div",po,[e("div",go,[r.resolvedLogoUrl&&!r.logoLoadFailed?(d(),u("img",{key:0,src:r.resolvedLogoUrl,class:"rounded catalog-icon",alt:"Catalog Icon",width:"40",height:"40",onError:c=>Te(r)},null,40,fo)):(d(),u("div",bo,[z(te(ra),{class:"icon",size:"22","stroke-width":"1.75"})]))]),e("div",{class:"col-5",onClick:c=>H(h)},[ve(g(r.name)+" ",1),e("div",_o,g(r.summary),1)],8,yo),e("div",{class:"col-3 d-flex justify-content-end",onClick:c=>H(h)},[e("span",ko,[z(te(Ra),{class:"icon me-1",width:"12",height:"12","stroke-width":"1",color:"#e5b942"}),e("span",Co,g(r.averageRating||0),1),e("span",wo," ("+g(r.ratingCount||0)+") ",1)]),e("span",Io,[z(te(Ma),{class:"icon me-1",width:"12",height:"12","stroke-width":"1",color:"gray"}),e("span",So,g(r.downloadCount||0),1)])],8,ho),e("div",Ao,[e("div",To,[e("div",Mo,[z(te(Ea),{class:"me-2 cursor-pointer",size:"15","stroke-width":"2","data-bs-toggle":"modal","data-bs-target":"#modal-wizard",onClick:c=>j(r.id)},null,8,["onClick"]),z(te(Na),{class:"cursor-pointer",size:"15","stroke-width":"2",onClick:c=>V(r)},null,8,["onClick"])])]),e("div",{class:"d-flex justify-content-end",onClick:c=>H(h)},[e("span",No,g(r.category.length>25?r.category.substring(0,25)+"...":r.category),1)],8,Eo)]),e("div",{id:"accordion_"+r.id,class:"accordion-collapse collapse",style:na([r.isShow?{display:"block"}:{display:"none"}])},[e("div",Do,[e("div",{class:"mt-3 mb-5",innerHTML:Me(r.description)},null,8,$o),e("div",null,[n[3]||(n[3]=e("strong",null,"Ref Information",-1)),e("ul",{id:`${h}-entity-ul`},[N(r.refData,"HOMEPAGE")?(d(!0),u(E,{key:0},G(r.refData.HOMEPAGE,(c,U)=>(d(),u("li",{key:U},[e("a",{class:"btn",onClick:X=>Q(c.refValue)},g(c.refValue),9,Lo)]))),128)):L("",!0)],8,Uo),n[4]||(n[4]=e("strong",null,"TAGS",-1)),e("ul",{id:`${h}-tag-ul`},[N(r.refData,"TAG")?(d(!0),u(E,{key:0},G(r.refData.TAG,(c,U)=>(d(),u("span",{key:U},"#"+g(c.refValue)+"  ",1))),128)):L("",!0)],8,xo),n[5]||(n[5]=e("strong",null,"Recommended Spec",-1)),e("ul",{id:`${h}-tag-ul`},[r.recommendedCpu&&r.recommendedMemory&&r.recommendedDisk?(d(),u(E,{key:0},[e("button",Vo," CPU : "+g(r.recommendedCpu)+" Core ",1),e("button",Go," MEMORY : "+g(r.recommendedMemory)+" GB ",1),e("button",Oo," DISK : "+g(r.recommendedDisk)+" GB ",1)],64)):L("",!0)],8,Po),e("div",Ho,[e("div",Bo,[n[0]||(n[0]=e("strong",null,"Deployment Status",-1)),e("button",{type:"button",class:"btn btn-sm btn-icon btn-ghost-secondary",title:"Refresh deployment status","aria-label":"Refresh deployment status",disabled:r.deploymentStatusLoading,onClick:we(c=>Z(r),["stop"])},[z(te(da),{class:"icon",size:"18","stroke-width":"1.75"})],8,Ko)]),r.deploymentStatusLoading?(d(),u("div",Fo," Loading deployment status... ")):(d(),u("div",zo,[e("table",jo,[n[2]||(n[2]=e("thead",null,[e("tr",null,[e("th",null,"Type"),e("th",null,"Target"),e("th",null,"CSP"),e("th",null,"Status"),e("th",null,"IP/Endpoint"),e("th",null,"Last Checked"),e("th",{class:"text-end"},"Detail")])],-1)),e("tbody",null,[r.deploymentStatuses.length===0?(d(),u("tr",qo,n[1]||(n[1]=[e("td",{colspan:"7",class:"text-center text-muted"}," No deployment status available ",-1)]))):L("",!0),(d(!0),u(E,null,G(r.deploymentStatuses,c=>(d(),u("tr",{key:c.rowKey},[e("td",null,g(c.deploymentType),1),e("td",null,g(c.target),1),e("td",null,g(c.csp),1),e("td",null,[e("span",{class:oe(te(ua)(c.status))},g(te(Ke)(c.status)),3)]),e("td",null,g(c.ipOrEndpoint),1),e("td",null,g(c.lastCheckedOrDeployedAt),1),e("td",Yo,[e("button",{type:"button",class:"btn btn-outline-primary",disabled:!c.deploymentId,onClick:we(U=>B(c.deploymentId),["stop"])}," Detail ",8,Wo)])]))),128))])])]))])])])],12,Ro)])]))),128))])])])])],512),z(io,{ref_key:"deleteConfirmModal",ref:Y,"target-catalog":y.value,onDeleted:D,onClose:O},null,8,["target-catalog"]),z(qt,{ref_key:"wizardModal",ref:x,mode:I.value,onCreated:P,onUpdated:P},null,8,["mode"]),z(ca,{ref_key:"applicationDetailModalRef",ref:T,"deployment-id":W.value},null,8,["deployment-id"])],64))}}),Zo={class:"page",ref:"sofwareCatalog"},Qo={class:"page-wrapper"},Xo={class:"page-header d-print-none"},es={class:"container-xxl"},as={class:"row g-2 align-items-center"},ls={class:"col-auto ms-auto"},ts={class:"btn-list"},os={class:"page-body"},ss={class:"container-xxl"},ns={class:"row"},is={class:"col-lg-12"},_s=Ie({__name:"SoftwareCatalog",setup(me){const se=ia(),le=q(()=>se.getNsId()||""),m=v(""),K=v(null),R=A=>{const S=document.getElementById(A);S&&Ta.getOrCreateInstance(S).show()},f=async A=>{m.value=A,await $e(),R("install-form")},I=async()=>{var A;(A=K.value)==null||A.startRegistration(),await $e(),R("modal-wizard")};return(A,S)=>(d(),u(E,null,[e("div",Zo,[e("div",Qo,[e("div",Xo,[e("div",es,[e("div",as,[S[1]||(S[1]=e("div",{class:"col d-flex"},[e("h2",{class:"page-title"},"Software Catalog")],-1)),e("div",ls,[e("div",ts,[e("button",{type:"button",class:"btn btn-outline-primary page-header-action-btn",onClick:I}," Register "),e("button",{type:"button",class:"btn btn-primary page-header-action-btn",onClick:S[0]||(S[0]=y=>f("Application Installation"))}," Deploy ")])])])])]),e("div",os,[e("div",ss,[e("div",ns,[e("div",is,[z(Jo,{ref_key:"softwareCatalogListRef",ref:K},null,512)])])])])])],512),z(ta,{"ns-id":le.value,title:m.value},null,8,["ns-id","title"])],64))}});export{_s as default}; diff --git a/src/main/resources/static/assets/SoftwareCatalog-CXVjN_tf.js b/src/main/resources/static/assets/SoftwareCatalog-CXVjN_tf.js new file mode 100644 index 00000000..41c08ae9 --- /dev/null +++ b/src/main/resources/static/assets/SoftwareCatalog-CXVjN_tf.js @@ -0,0 +1,21 @@ +import{A as ta}from"./applicationInstallationForm-DA09_p5G.js";import{d as Ie,f as $e,r as c,i as Le,x as Be,g as q,h as he,o as d,c as u,a as e,t as g,n as oe,j as b,y as ke,z as Ce,m as $,F as E,k as G,v as re,e as ve,w as we,l as T,p as oa,A as sa,B as Ue,b as z,u as te,C as na,q as ia}from"./index-DU977P1k.js";import{c as Se}from"./createVueComponent-Bt7iWPgv.js";import{g as Ke,I as ra,a as da,b as ua,A as ca}from"./applicationDetailModal-BPa-EzOB.js";import{g as De,s as va,a as ma,b as pa,c as ga,d as fa,u as ba,e as ya,f as _a,h as ha,i as ka,j as Ca,k as Fe,l as wa,m as Ia}from"./softwareCatalog-VAKfe9v1.js";import{_ as Sa}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{_ as Aa}from"./lodash-BpiFzpk2.js";import{M as Ma}from"./bootstrap.esm-Ceob_0pG.js";import"./request-jyImEBot.js";/** + * @license @tabler/icons-vue v3.22.0 - MIT + * + * This source code is licensed under the MIT license. + * See the LICENSE file in the root directory of this source tree. + */var Ta=Se("outline","cloud-download","IconCloudDownload",[["path",{d:"M19 18a3.5 3.5 0 0 0 0 -7h-1a5 4.5 0 0 0 -11 -2a4.6 4.4 0 0 0 -2.1 8.4",key:"svg-0"}],["path",{d:"M12 13l0 9",key:"svg-1"}],["path",{d:"M9 19l3 3l3 -3",key:"svg-2"}]]);/** + * @license @tabler/icons-vue v3.22.0 - MIT + * + * This source code is licensed under the MIT license. + * See the LICENSE file in the root directory of this source tree. + */var Ea=Se("outline","edit","IconEdit",[["path",{d:"M7 7h-1a2 2 0 0 0 -2 2v9a2 2 0 0 0 2 2h9a2 2 0 0 0 2 -2v-1",key:"svg-0"}],["path",{d:"M20.385 6.585a2.1 2.1 0 0 0 -2.97 -2.97l-8.415 8.385v3h3l8.385 -8.415z",key:"svg-1"}],["path",{d:"M16 5l3 3",key:"svg-2"}]]);/** + * @license @tabler/icons-vue v3.22.0 - MIT + * + * This source code is licensed under the MIT license. + * See the LICENSE file in the root directory of this source tree. + */var Na=Se("outline","trash","IconTrash",[["path",{d:"M4 7l16 0",key:"svg-0"}],["path",{d:"M10 11l0 6",key:"svg-1"}],["path",{d:"M14 11l0 6",key:"svg-2"}],["path",{d:"M5 7l1 12a2 2 0 0 0 2 2h8a2 2 0 0 0 2 -2l1 -12",key:"svg-3"}],["path",{d:"M9 7v-3a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v3",key:"svg-4"}]]);/** + * @license @tabler/icons-vue v3.22.0 - MIT + * + * This source code is licensed under the MIT license. + * See the LICENSE file in the root directory of this source tree. + */var Ra=Se("filled","star-filled","IconStarFilled",[["path",{d:"M8.243 7.34l-6.38 .925l-.113 .023a1 1 0 0 0 -.44 1.684l4.622 4.499l-1.09 6.355l-.013 .11a1 1 0 0 0 1.464 .944l5.706 -3l5.693 3l.1 .046a1 1 0 0 0 1.352 -1.1l-1.091 -6.355l4.624 -4.5l.078 -.085a1 1 0 0 0 -.633 -1.62l-6.38 -.926l-2.852 -5.78a1 1 0 0 0 -1.794 0l-2.853 5.78z",key:"svg-0"}]]);const Da={class:"modal-dialog modal-lg",role:"document"},Ua={class:"modal-content"},$a={class:"modal-header"},La={class:"modal-title"},Pa=["disabled"],Va={class:"modal-body",style:{"max-height":"calc(100vh - 200px)","overflow-y":"auto"}},xa={class:"nav nav-tabs mb-3"},Ga={class:"nav-item"},Oa={class:"nav-item"},Ha={class:"nav-item"},Ba={class:"nav-item"},Ka={key:0,class:"mb-4"},Fa={class:"row g-3"},za={class:"col-md-6"},ja=["disabled"],qa={class:"col-md-6"},Ya=["disabled"],Wa={class:"mb-3"},Ja={class:"d-flex align-items-center"},Za={class:"form-check me-3"},Qa=["disabled"],Xa={class:"form-check"},el=["disabled"],al={class:"mb-3"},ll=["disabled"],tl=["value"],ol={class:"row g-3"},sl={class:"col-md-6"},nl=["disabled"],il=["value"],rl={class:"col-md-6"},dl=["disabled"],ul=["value"],cl={class:"alert alert-info py-2 mb-3",role:"status"},vl={class:"form-label required",for:"registrySearchInput"},ml={class:"input-group"},pl=["placeholder","disabled"],gl=["disabled"],fl={key:0,class:"text-danger small mt-2"},bl={key:0,class:"text-center text-muted py-4"},yl={key:1,class:"text-muted py-3"},_l={key:2,class:"registry-results list-group mb-3"},hl=["disabled","onClick"],kl={class:"d-flex align-items-start gap-3"},Cl=["src"],wl={class:"flex-fill text-start"},Il={class:"fw-semibold"},Sl={class:"small registry-description"},Al={key:3,class:"row g-3"},Ml={class:"col-md-6"},Tl=["disabled"],El={value:""},Nl=["value"],Rl={class:"col-md-6"},Dl=["disabled"],Ul=["value"],$l={class:"mb-3"},Ll={class:"mb-3"},Pl={class:"mb-3"},Vl={class:"mb-3"},xl={class:"col-5"},Gl=["onUpdate:modelValue"],Ol={class:"col-6"},Hl=["onUpdate:modelValue"],Bl={class:"col-1 d-flex gap-2"},Kl=["onClick","disabled"],Fl={class:"row"},zl={class:"col-md-6"},jl={class:"row"},ql={class:"col-6"},Yl={class:"input-group"},Wl={class:"col-6"},Jl={class:"input-group"},Zl={class:"row mt-3"},Ql={class:"col-md-6"},Xl={class:"row"},et={class:"col-6"},at={class:"input-group"},lt={class:"col-6"},tt={class:"input-group"},ot={class:"row mt-3"},st={class:"col-md-6"},nt={class:"row"},it={class:"col-6"},rt={class:"input-group"},dt={class:"col-6"},ut={class:"input-group"},ct={key:0,class:"card mt-3"},vt={class:"card-body"},mt={class:"d-flex align-items-center mb-2"},pt={class:"form-check form-switch"},gt={class:"row"},ft={class:"col-md-3"},bt=["disabled"],yt={class:"col-md-3"},_t=["disabled"],ht={class:"col-md-3"},kt=["disabled"],Ct={class:"col-md-3"},wt=["disabled"],It={key:0},St={class:"card"},At={class:"card-body"},Mt={class:"mb-3"},Tt={key:1},Et={class:"card"},Nt={class:"card-body"},Rt={class:"mb-3"},Dt={class:"col-4"},Ut=["onUpdate:modelValue"],$t={class:"col-3"},Lt=["onUpdate:modelValue"],Pt={class:"col-4"},Vt=["onUpdate:modelValue"],xt={class:"col-1 d-flex align-items-end gap-2"},Gt=["onClick","disabled"],Ot={class:"modal-footer"},Ht=["disabled"],Bt={class:"ms-auto d-flex gap-2"},Kt=["disabled"],Ft=["disabled"],zt=["disabled"],jt=Ie({__name:"softwareCatalogWizard",props:{show:{type:Boolean},mode:{}},emits:["created","updated"],setup(me,{expose:se,emit:le}){const m=me,K=le,R=$e(),f=c(1),I=c(!1),A=c(!1),S=c(0),y=c({}),Y=["AI_MACHINE_LEARNING","DATABASE","INTEGRATION_AND_DELIVERY","MONITORING_AND_LOGGING","NETWORKING","SECURITY","STORAGE","STREAMING_AND_MESSAGING"],L={1:"AI_MACHINE_LEARNING",2:"DATABASE",3:"INTEGRATION_AND_DELIVERY",4:"MONITORING_AND_LOGGING",5:"NETWORKING",6:"SECURITY",7:"STORAGE",8:"STREAMING_AND_MESSAGING"},W={"AI / MACHINE LEARNING":"AI_MACHINE_LEARNING","AI MACHINE LEARNING":"AI_MACHINE_LEARNING",DATABASE:"DATABASE","INTEGRATION AND DELIVERY":"INTEGRATION_AND_DELIVERY","MONITORING AND LOGGING":"MONITORING_AND_LOGGING","MONITORING & LOGGING":"MONITORING_AND_LOGGING",NETWORKING:"NETWORKING",SECURITY:"SECURITY",STORAGE:"STORAGE","STREAMING AND MESSAGING":"STREAMING_AND_MESSAGING"},M=c("existing"),J=c(""),V=c([]),U=c(!1),j=c(!1),x=c(""),D=c(null),O=c([]),H=c(!1),Z=c(Y.map(l=>({key:l,value:l}))),_=c(!1),i=c(!1),p=c(""),C=c(null),de=c(!1);Le(()=>{C.value&&(C.value.addEventListener("show.bs.modal",F),C.value.addEventListener("hide.bs.modal",ne)),be()}),Be(()=>{C.value&&(C.value.removeEventListener("show.bs.modal",F),C.value.removeEventListener("hide.bs.modal",ne))});const F=()=>{A.value=!0,m.mode==="new"&&Ee()},ne=()=>{A.value=!1,de.value=!1},t=c({id:null,target:"VM",sourceType:"DOCKERHUB",category:"",packageName:"",version:"",packageInfo:null,helmChart:null,name:"",summary:"",description:"",logoUrlLarge:"",logoUrlSmall:"",catalogRefs:[],minCpu:0,recommendedCpu:0,minMemory:0,recommendedMemory:0,minDisk:0,recommendedDisk:0,hpaEnabled:!1,minReplicas:1,maxReplicas:10,cpuThreshold:80,memoryThreshold:80,ports:[],ingressEnabled:!1,ingressUrl:"",defaultPort:80,registeredById:null,createdAt:null,updatedAt:null}),B=c([{refId:0,refValue:"",refDesc:"",refType:"URL"}]),N=c([{targetPort:80,hostPort:8080,protocol:"TCP"}]),Q=q(()=>m.mode==="update"||M.value==="existing"),ie=q(()=>t.value.target==="VM"?"Docker Hub":"Artifact Hub"),Ae=q(()=>t.value.target==="VM"?"Search official container images":"Search official Helm charts"),ge=q(()=>m.mode==="update"?_.value?"Updating...":"Update":i.value?"Importing...":_.value?"Creating...":M.value==="public"?"Import & Create":"Create"),ue=q(()=>f.value===1?t.value.target&&t.value.category&&t.value.packageName&&t.value.version:f.value===2?t.value.name.trim().length>0&&t.value.summary.trim().length>0&&t.value.description.trim().length>0:f.value===3?t.value.minCpu>0&&t.value.minMemory>0&&t.value.minDisk>0&&t.value.recommendedCpu>0&&t.value.recommendedMemory>0&&t.value.recommendedDisk>0:f.value===3&&t.value.hpaEnabled?t.value.minReplicas>0&&t.value.maxReplicas>0&&t.value.cpuThreshold>0&&t.value.memoryThreshold>0:(console.log(N.value),f.value===3&&t.value.target==="VM"?t.value.defaultPort>0:f.value===4&&t.value.target==="K8S"?(console.log(N.value.length),N.value.length>0?N.value.every(l=>l.targetPort>0&&l.hostPort>0&&l.protocol):!1):f.value===4&&t.value.ingressEnabled?t.value.ingressUrl.trim().length>0:!0)),Me=()=>{ue.value&&f.value<4&&(f.value+=1)},Te=()=>{f.value>1&&(f.value-=1)},s=(l=!0)=>{l&&(J.value=""),V.value=[],j.value=!1,x.value="",D.value=null,O.value=[],U.value=!1,H.value=!1,i.value=!1,p.value=""},n=l=>{if(l==null)return"";if(typeof l=="object")return n(l.value||l.key||l.name||l.displayName||l.display_name||l.category);const a=String(l).trim();if(!a)return"";if(L[a])return L[a];const o=a.replace(/[_-]+/g," ").replace(/\s+/g," ").trim().toUpperCase();return W[o]?W[o]:a.replace(/&/g,"AND").replace(/[^a-zA-Z0-9]+/g,"_").replace(/^_+|_+$/g,"").replace(/_+/g,"_").toUpperCase()},r=(l=[])=>{const a=new Map;[...Y,...Z.value,...l].forEach(o=>{const k=n((o==null?void 0:o.value)||(o==null?void 0:o.key)||o);k&&a.set(k,{key:k,value:k})}),Z.value=Array.from(a.values()).sort((o,k)=>o.value.localeCompare(k.value))},h=async()=>{r();const a=(await Promise.allSettled([De({target:"DOCKER",availableOnly:!1}),De({target:"HELM",availableOnly:!1})])).flatMap(o=>o.status==="fulfilled"?o.value.data||[]:[]);r(a)},v=(l,a=0)=>{var o;return String((l==null?void 0:l.id)||(l==null?void 0:l.packageId)||`${((o=l==null?void 0:l.repository)==null?void 0:o.name)||"registry"}-${(l==null?void 0:l.name)||a}`)},P=l=>!!D.value&&v(D.value)===v(l),X=l=>{var a,o;return((a=l==null?void 0:l.logo_url)==null?void 0:a.small)||((o=l==null?void 0:l.logo_url)==null?void 0:o.large)||""},Pe=l=>(l==null?void 0:l.short_description)||(l==null?void 0:l.description)||"",ze=(l,a)=>{const o=String(l||"");return o.length>a?`${o.substring(0,a)}...`:o},je=async()=>{const l=J.value.trim();if(x.value="",j.value=!1,V.value=[],D.value=null,O.value=[],t.value.packageName="",t.value.version="",!l){x.value="Enter a search keyword.";return}J.value=l,U.value=!0;try{const{data:a}=t.value.target==="VM"?await va(l):await ma(l),o=t.value.target==="VM"?a==null?void 0:a.results:a==null?void 0:a.packages;V.value=(Array.isArray(o)?o:[]).filter(Boolean).slice(0,8),j.value=!0}catch(a){console.log(a),x.value=`Unable to search ${ie.value}.`}finally{U.value=!1}},qe=async l=>{var w,pe,ee,He;D.value=l,t.value.packageName=(l==null?void 0:l.name)||"",t.value.version="",t.value.sourceType=t.value.target==="VM"?"DOCKERHUB":"ARTIFACTHUB",O.value=[],x.value="",p.value="";const a=Pe(l);t.value.name=(l==null?void 0:l.name)||t.value.name,t.value.summary=a||(l==null?void 0:l.name)||"",t.value.description=a||(l==null?void 0:l.name)||"",t.value.logoUrlLarge=((w=l==null?void 0:l.logo_url)==null?void 0:w.large)||"",t.value.logoUrlSmall=((pe=l==null?void 0:l.logo_url)==null?void 0:pe.small)||"";const o=n((l==null?void 0:l.category)||((ee=l==null?void 0:l.categories)==null?void 0:ee[0]));r(o?[o]:[]),t.value.category=o;const k=v(l);H.value=!0;try{const{data:_e}=t.value.target==="VM"?await pa({path:(l==null?void 0:l.id)||""}):await ga({kind:"helm",repository:((He=l==null?void 0:l.repository)==null?void 0:He.name)||"",packageName:(l==null?void 0:l.name)||""});if(v(D.value)!==k)return;const Re=(Array.isArray(_e)?_e:[]).map(ae=>t.value.target==="VM"?ae==null?void 0:ae.name:ae==null?void 0:ae.version).filter(Boolean);Re.length===0&&(l!=null&&l.version)&&Re.push(l.version),O.value=Array.from(new Set(Re)).map(ae=>({key:ae,value:ae})),O.value.length===1&&(t.value.version=O.value[0].value)}catch(_e){if(console.log(_e),v(D.value)!==k)return;l!=null&&l.version?(O.value=[{key:l.version,value:l.version}],t.value.version=l.version):x.value="Unable to retrieve package versions."}finally{v(D.value)===k&&(H.value=!1)}},Ee=()=>{f.value=1,M.value="existing",_.value=!1,s(),Z.value=Y.map(l=>({key:l,value:l})),t.value={id:null,target:"VM",sourceType:"DOCKERHUB",category:"",packageName:"",version:"",packageInfo:null,helmChart:null,name:"",summary:"",description:"",logoUrlLarge:"",logoUrlSmall:"",catalogRefs:[],minCpu:0,recommendedCpu:0,minMemory:0,recommendedMemory:0,minDisk:0,recommendedDisk:0,hpaEnabled:!1,minReplicas:1,maxReplicas:10,cpuThreshold:80,memoryThreshold:80,ports:[],ingressEnabled:!1,ingressUrl:"",defaultPort:80,registeredById:null,createdAt:null,updatedAt:null},B.value=[{refId:0,refValue:"",refDesc:"",refType:"URL"}],N.value=[{targetPort:80,hostPort:8080,protocol:"TCP"}]},Ye=()=>{B.value.push({refId:0,refValue:"",refDesc:"",refType:"URL"})},We=l=>{B.value.length>1&&B.value.splice(l,1)},Je=()=>{N.value.push({targetPort:80,hostPort:8080,protocol:"TCP"})},Ze=l=>{N.value.length>1&&N.value.splice(l,1)},Ve=()=>{if(C.value){A.value=!1;const l=C.value.querySelector('[data-bs-dismiss="modal"]');if(l)l.click();else try{const a=window.bootstrap;if(a!=null&&a.Modal)(a.Modal.getInstance(C.value)||new a.Modal(C.value)).hide();else{C.value.classList.remove("show"),C.value.style.display="none",document.body.classList.remove("modal-open");const o=document.querySelector(".modal-backdrop");o==null||o.remove()}}catch(a){console.warn("Modal close failed:",a)}}},Qe=()=>[t.value.target,v(D.value),t.value.version].join("|"),Xe=async()=>{var a,o;if(M.value!=="public")return;if(!D.value)throw new Error("Select a package to import.");const l=Qe();if(p.value!==l){i.value=!0;try{const k=JSON.parse(JSON.stringify(D.value));let w;if(t.value.target==="VM"){const pe=t.value.category,ee={...k,tag:t.value.version,sourceType:"DockerHub",createdAt:k.created_at,updatedAt:k.updated_at,shortDescription:k.short_description,starCount:k.star_count,ratePlans:k.rate_plans,categories:[{name:pe,slug:pe.toLowerCase().replace(/_/g,"-")}]};delete ee.created_at,delete ee.updated_at,delete ee.short_description,delete ee.star_count,delete ee.rate_plans,w=await ka(ee)}else w=await Ca({...k,packageId:k.packageId,tag:t.value.version,version:t.value.version,category:t.value.category,sourceType:"ArtifactHub"});if(((a=w==null?void 0:w.data)==null?void 0:a.success)!==!0)throw new Error(((o=w==null?void 0:w.data)==null?void 0:o.message)||`${ie.value} import failed.`);p.value=l}finally{i.value=!1}}},ea=async()=>{if(!_.value){_.value=!0;try{await Xe(),t.value.catalogRefs=B.value.filter(l=>l.refValue.trim()),t.value.target==="K8S"&&(t.value.ports=N.value.filter(l=>l.targetPort&&l.hostPort)),t.value.target==="VM"?t.value.sourceType="DOCKERHUB":t.value.target==="K8S"&&(t.value.sourceType="ARTIFACTHUB"),await fa(t.value),R.success("Registration Success"),Ve(),K("created")}catch(l){console.log(l),R.error((l==null?void 0:l.message)||"Registration Failed")}finally{_.value=!1}}},aa=async()=>{if(!_.value){_.value=!0;try{t.value.catalogRefs=B.value.filter(l=>l.refValue.trim()),t.value.target==="K8S"&&(t.value.ports=N.value.filter(l=>l.targetPort&&l.hostPort)),t.value.target==="VM"?t.value.sourceType="DOCKERHUB":t.value.target==="K8S"&&(t.value.sourceType="ARTIFACTHUB"),await ba(t.value),R.success("Update Success"),Ve(),K("updated")}catch{R.error("Update Failed")}finally{_.value=!1}}},xe=async()=>{try{if(!S.value)return;y.value&&y.value.category&&(I.value=!0,t.value.target=y.value.packageInfo!==null?"VM":"K8S",t.value.category=y.value.category,y.value.packageInfo!==null?(t.value.packageName=y.value.packageInfo.packageName,t.value.version=y.value.packageInfo.packageVersion):y.value.helmChart!==null&&(t.value.packageName=y.value.helmChart.chartName,t.value.version=y.value.helmChart.chartVersion),I.value=!1),await la()}catch{R.error("Failed to load catalog data"),I.value=!1}},la=async()=>{try{if(!S.value)return;const{data:l}=await ya(S.value);I.value=!0,t.value={...t.value,...l,target:l.packageInfo!==null?"VM":"K8S"},l.packageInfo!==null&&(t.value.packageName=l.packageInfo.packageName,t.value.version=l.packageInfo.packageVersion),l.helmChart!==null&&(t.value.packageName=l.helmChart.chartName,t.value.version=l.helmChart.chartVersion),l.catalogRefs&&l.catalogRefs.length>0?B.value=l.catalogRefs.map(a=>({refId:a.id||0,refValue:a.refValue||"",refDesc:a.refDesc||"",refType:a.refType||"URL"})):B.value=[{refId:0,refValue:"",refDesc:"",refType:"URL"}],l.ports&&l.ports.length>0?N.value=l.ports.map(a=>({targetPort:a.targetPort||80,hostPort:a.hostPort||8080,protocol:a.protocol||"TCP"})):N.value=[{targetPort:80,hostPort:8080,protocol:"TCP"}],await be(),t.value.category&&(await Ge(),t.value.packageName&&await Oe()),I.value=!1}catch{R.error("Failed to load catalog data"),I.value=!1}},fe=l=>{!_.value&&ue.value&&(f.value=l)};he(M,async()=>{m.mode!=="new"||I.value||(t.value.category="",t.value.packageName="",t.value.version="",t.value.name="",t.value.summary="",t.value.description="",t.value.logoUrlLarge="",t.value.logoUrlSmall="",s(),M.value==="existing"?await be():(t.value.sourceType=t.value.target==="VM"?"DOCKERHUB":"ARTIFACTHUB",await h()))}),he(()=>t.value.target,async(l,a)=>{!l||I.value||l===a||(m.mode==="new"&&(t.value.category="",t.value.packageName="",t.value.version=""),Q.value?await be():(t.value.sourceType=l==="VM"?"DOCKERHUB":"ARTIFACTHUB",s(),await h()))});const Ne=c([]),be=async()=>{if(m.mode==="new"&&Q.value&&(Ne.value=[],ye.value=[],ce.value=[],t.value.category="",t.value.packageName="",t.value.version=""),t.value.target){const l={target:t.value.target==="VM"?"DOCKER":"HELM",availableOnly:m.mode==="new"},{data:a}=await De(l);Ne.value=a}};he(()=>t.value.category,l=>{l&&Q.value&&!I.value&&(m.mode==="new"&&(t.value.packageName="",t.value.version=""),Ge())});const ye=c([]),Ge=async()=>{m.mode==="new"&&Q.value&&(ye.value=[],ce.value=[],t.value.packageName="",t.value.version="");const l={target:t.value.target==="VM"?"DOCKER":"HELM",category:t.value.category||"",availableOnly:m.mode==="new"},{data:a}=await _a(l);ye.value=a};he(()=>t.value.packageName,l=>{l&&Q.value&&!I.value&&(m.mode==="new"&&(t.value.version=""),Oe())});const ce=c([]),Oe=async()=>{m.mode==="new"&&Q.value&&(ce.value=[],t.value.version="");const l={target:t.value.target==="VM"?"DOCKER":"HELM",packageName:t.value.packageName||"",availableOnly:m.mode==="new"},{data:a}=await ha(l);m.mode==="new"?a.forEach(o=>{o.isUsed||ce.value.push(o)}):ce.value=a};return se({loadCatalogDataWithCategoryInit:xe,initForCreate:()=>{Ee(),f.value=1},initForUpdate:(l,a)=>{S.value=l,y.value=a,f.value=1,xe()}}),(l,a)=>(d(),u("div",{class:"modal fade",id:"modal-wizard",tabindex:"-1",ref_key:"wizardModal",ref:C},[e("div",Da,[e("div",Ua,[e("div",$a,[e("h5",La,g(m.mode==="update"?"Application Update":"Application Registration"),1),e("button",{type:"button",class:"btn-close","data-bs-dismiss":"modal","aria-label":"Close",disabled:_.value},null,8,Pa)]),e("div",Va,[e("ul",xa,[e("li",Ga,[e("a",{class:oe(["nav-link",{active:f.value===1}]),href:"javascript:void(0);",onClick:a[0]||(a[0]=o=>fe(1))},"1. "+g(m.mode==="update"?"Package":"Source & Package"),3)]),e("li",Oa,[e("a",{class:oe(["nav-link",{active:f.value===2}]),href:"javascript:void(0);",onClick:a[1]||(a[1]=o=>fe(2))},"2. General",2)]),e("li",Ha,[e("a",{class:oe(["nav-link",{active:f.value===3}]),href:"javascript:void(0);",onClick:a[2]||(a[2]=o=>fe(3))},"3. Resource Requirements",2)]),e("li",Ba,[e("a",{class:oe(["nav-link",{active:f.value===4}]),href:"javascript:void(0);",onClick:a[3]||(a[3]=o=>fe(4))},"4. Network",2)])]),b(e("div",null,[m.mode!=="update"?(d(),u("div",Ka,[a[32]||(a[32]=e("label",{class:"form-label required"},"Registration Source",-1)),e("div",Fa,[e("div",za,[e("label",{class:oe(["source-option",{selected:M.value==="existing"}]),for:"sourceExisting"},[b(e("input",{id:"sourceExisting","onUpdate:modelValue":a[4]||(a[4]=o=>M.value=o),class:"form-check-input",type:"radio",name:"registrationSource",value:"existing",disabled:_.value},null,8,ja),[[Ce,M.value]]),a[30]||(a[30]=e("span",null,[e("strong",null,"Existing Package"),e("small",null,"Register a package already available in MCMP.")],-1))],2)]),e("div",qa,[e("label",{class:oe(["source-option",{selected:M.value==="public"}]),for:"sourcePublic"},[b(e("input",{id:"sourcePublic","onUpdate:modelValue":a[5]||(a[5]=o=>M.value=o),class:"form-check-input",type:"radio",name:"registrationSource",value:"public",disabled:_.value},null,8,Ya),[[Ce,M.value]]),a[31]||(a[31]=e("span",null,[e("strong",null,"Public Registry"),e("small",null,"Search, import, and register in one flow.")],-1))],2)])])])):$("",!0),e("div",Wa,[a[35]||(a[35]=e("label",{class:"form-label required"},"Target",-1)),e("div",Ja,[e("div",Za,[b(e("input",{class:"form-check-input",type:"radio",name:"target",value:"VM","onUpdate:modelValue":a[6]||(a[6]=o=>t.value.target=o),id:"targetVM",disabled:m.mode==="update"||_.value},null,8,Qa),[[Ce,t.value.target]]),a[33]||(a[33]=e("label",{class:"form-check-label",for:"targetVM"},"VM",-1))]),e("div",Xa,[b(e("input",{class:"form-check-input",type:"radio",name:"target",value:"K8S","onUpdate:modelValue":a[7]||(a[7]=o=>t.value.target=o),id:"targetK8S",disabled:m.mode==="update"||_.value},null,8,el),[[Ce,t.value.target]]),a[34]||(a[34]=e("label",{class:"form-check-label",for:"targetK8S"},"K8S",-1))])])]),Q.value?(d(),u(E,{key:1},[e("div",al,[a[37]||(a[37]=e("label",{class:"form-label required"},"Category",-1)),b(e("select",{class:"form-select","onUpdate:modelValue":a[8]||(a[8]=o=>t.value.category=o),disabled:m.mode==="update"},[a[36]||(a[36]=e("option",{value:""},"Select Category",-1)),(d(!0),u(E,null,G(Ne.value,o=>(d(),u("option",{value:o.value,key:o.key},g(o.value),9,tl))),128))],8,ll),[[re,t.value.category]])]),e("div",ol,[e("div",sl,[a[39]||(a[39]=e("label",{class:"form-label required"},"Package",-1)),b(e("select",{class:"form-select","onUpdate:modelValue":a[9]||(a[9]=o=>t.value.packageName=o),disabled:m.mode==="update"},[a[38]||(a[38]=e("option",{value:""},"Select Package",-1)),(d(!0),u(E,null,G(ye.value,o=>(d(),u("option",{value:o.value,key:o.key},g(o.value),9,il))),128))],8,nl),[[re,t.value.packageName]])]),e("div",rl,[a[41]||(a[41]=e("label",{class:"form-label required"},"Version",-1)),b(e("select",{class:"form-select","onUpdate:modelValue":a[10]||(a[10]=o=>t.value.version=o),disabled:m.mode==="update"},[a[40]||(a[40]=e("option",{value:""},"Select Version",-1)),(d(!0),u(E,null,G(ce.value,o=>(d(),u("option",{value:o.value,key:o.key},g(o.value),9,ul))),128))],8,dl),[[re,t.value.version]])])])],64)):(d(),u(E,{key:2},[e("div",cl,[e("strong",null,g(ie.value),1),a[42]||(a[42]=ve(" will be searched for the selected target. The package is imported only when you complete registration. "))]),e("form",{class:"mb-3",onSubmit:we(je,["prevent"])},[e("label",vl,"Search "+g(ie.value),1),e("div",ml,[b(e("input",{id:"registrySearchInput","onUpdate:modelValue":a[11]||(a[11]=o=>J.value=o),type:"search",class:"form-control",placeholder:Ae.value,disabled:U.value||_.value},null,8,pl),[[T,J.value]]),e("button",{class:"btn btn-outline-primary",type:"submit",disabled:U.value||_.value},g(U.value?"Searching...":"Search"),9,gl)]),x.value?(d(),u("div",fl,g(x.value),1)):$("",!0)],32),U.value?(d(),u("div",bl,"Searching "+g(ie.value)+"...",1)):j.value&&V.value.length===0?(d(),u("div",yl," No matching packages found. ")):V.value.length>0?(d(),u("div",_l,[(d(!0),u(E,null,G(V.value,(o,k)=>(d(),u("button",{key:v(o,k),type:"button",class:oe(["list-group-item list-group-item-action",{active:P(o)}]),disabled:H.value||_.value,onClick:w=>qe(o)},[e("div",kl,[X(o)?(d(),u("img",{key:0,src:X(o),class:"rounded registry-logo",alt:"",width:"40",height:"40"},null,8,Cl)):$("",!0),e("div",wl,[e("div",Il,g((o==null?void 0:o.name)||(o==null?void 0:o.packageId)||"Unnamed package"),1),e("div",Sl,g(ze(Pe(o),120)),1)])])],10,hl))),128))])):$("",!0),D.value?(d(),u("div",Al,[e("div",Ml,[a[43]||(a[43]=e("label",{class:"form-label required"},"Version",-1)),b(e("select",{class:"form-select","onUpdate:modelValue":a[12]||(a[12]=o=>t.value.version=o),disabled:H.value||_.value},[e("option",El,g(H.value?"Loading versions...":"Select Version"),1),(d(!0),u(E,null,G(O.value,o=>(d(),u("option",{value:o.value,key:o.key},g(o.value),9,Nl))),128))],8,Tl),[[re,t.value.version]])]),e("div",Rl,[a[45]||(a[45]=e("label",{class:"form-label required"},"Category",-1)),b(e("select",{class:"form-select","onUpdate:modelValue":a[13]||(a[13]=o=>t.value.category=o),disabled:_.value},[a[44]||(a[44]=e("option",{value:""},"Select Category",-1)),(d(!0),u(E,null,G(Z.value,o=>(d(),u("option",{value:o.value,key:o.key},g(o.value),9,Ul))),128))],8,Dl),[[re,t.value.category]])])])):$("",!0)],64))],512),[[ke,f.value===1]]),b(e("div",null,[e("div",$l,[a[46]||(a[46]=e("label",{class:"form-label required"},"Application Name",-1)),b(e("input",{type:"text",class:"form-control","onUpdate:modelValue":a[14]||(a[14]=o=>t.value.name=o),placeholder:"Application name"},null,512),[[T,t.value.name]])]),e("div",Ll,[a[47]||(a[47]=e("label",{class:"form-label required"},"Summary",-1)),b(e("input",{type:"text",class:"form-control","onUpdate:modelValue":a[15]||(a[15]=o=>t.value.summary=o),placeholder:"Application summary"},null,512),[[T,t.value.summary]])]),e("div",Pl,[a[48]||(a[48]=e("label",{class:"form-label required"},"Description",-1)),b(e("textarea",{class:"form-control",rows:"4","onUpdate:modelValue":a[16]||(a[16]=o=>t.value.description=o),placeholder:"Application description"},null,512),[[T,t.value.description]])]),e("div",Vl,[a[50]||(a[50]=e("label",{class:"form-label"},"Reference",-1)),(d(!0),u(E,null,G(B.value,(o,k)=>(d(),u("div",{class:"row g-2 mb-2",key:k},[e("div",xl,[b(e("select",{class:"form-select","onUpdate:modelValue":w=>o.refType=w},a[49]||(a[49]=[oa('',6)]),8,Gl),[[re,o.refType]])]),e("div",Ol,[b(e("input",{type:"text",class:"form-control","onUpdate:modelValue":w=>o.refValue=w,placeholder:"Ref Value"},null,8,Hl),[[T,o.refValue]])]),e("div",Bl,[e("button",{type:"button",class:"btn btn-outline-danger btn-sm w-100 cursor-pointer",onClick:w=>We(k),disabled:B.value.length<=1},"-",8,Kl)])]))),128)),e("div",{class:"form-text cursor-pointer",onClick:Ye,style:{color:"gray"}},"+ Add Reference")])],512),[[ke,f.value===2]]),b(e("div",null,[e("div",Fl,[e("div",zl,[a[55]||(a[55]=e("label",{class:"form-label"},"CPU",-1)),e("div",jl,[e("div",ql,[a[52]||(a[52]=e("label",{class:"form-label text-muted small"},"Minimum",-1)),e("div",Yl,[b(e("input",{type:"number",min:"0",step:"0.1",class:"form-control","onUpdate:modelValue":a[17]||(a[17]=o=>t.value.minCpu=o),placeholder:"1"},null,512),[[T,t.value.minCpu,void 0,{number:!0}]]),a[51]||(a[51]=e("span",{class:"input-group-text"},"Cores",-1))])]),e("div",Wl,[a[54]||(a[54]=e("label",{class:"form-label text-muted small"},"Recommended",-1)),e("div",Jl,[b(e("input",{type:"number",min:"0",step:"0.1",class:"form-control","onUpdate:modelValue":a[18]||(a[18]=o=>t.value.recommendedCpu=o),placeholder:"2"},null,512),[[T,t.value.recommendedCpu,void 0,{number:!0}]]),a[53]||(a[53]=e("span",{class:"input-group-text"},"Cores",-1))])])])])]),e("div",Zl,[e("div",Ql,[a[60]||(a[60]=e("label",{class:"form-label"},"Memory",-1)),e("div",Xl,[e("div",et,[a[57]||(a[57]=e("label",{class:"form-label text-muted small"},"Minimum",-1)),e("div",at,[b(e("input",{type:"number",min:"0",step:"0.1",class:"form-control","onUpdate:modelValue":a[19]||(a[19]=o=>t.value.minMemory=o),placeholder:"4"},null,512),[[T,t.value.minMemory,void 0,{number:!0}]]),a[56]||(a[56]=e("span",{class:"input-group-text"},"GB",-1))])]),e("div",lt,[a[59]||(a[59]=e("label",{class:"form-label text-muted small"},"Recommended",-1)),e("div",tt,[b(e("input",{type:"number",min:"0",step:"0.1",class:"form-control","onUpdate:modelValue":a[20]||(a[20]=o=>t.value.recommendedMemory=o),placeholder:"8"},null,512),[[T,t.value.recommendedMemory,void 0,{number:!0}]]),a[58]||(a[58]=e("span",{class:"input-group-text"},"GB",-1))])])])])]),e("div",ot,[e("div",st,[a[65]||(a[65]=e("label",{class:"form-label"},"Storage",-1)),e("div",nt,[e("div",it,[a[62]||(a[62]=e("label",{class:"form-label text-muted small"},"Minimum",-1)),e("div",rt,[b(e("input",{type:"number",min:"0",class:"form-control","onUpdate:modelValue":a[21]||(a[21]=o=>t.value.minDisk=o),placeholder:"10"},null,512),[[T,t.value.minDisk,void 0,{number:!0}]]),a[61]||(a[61]=e("span",{class:"input-group-text"},"GB",-1))])]),e("div",dt,[a[64]||(a[64]=e("label",{class:"form-label text-muted small"},"Recommended",-1)),e("div",ut,[b(e("input",{type:"number",min:"0",class:"form-control","onUpdate:modelValue":a[22]||(a[22]=o=>t.value.recommendedDisk=o),placeholder:"20"},null,512),[[T,t.value.recommendedDisk,void 0,{number:!0}]]),a[63]||(a[63]=e("span",{class:"input-group-text"},"GB",-1))])])])])]),t.value.target==="K8S"?(d(),u("div",ct,[e("div",vt,[e("div",mt,[a[66]||(a[66]=e("label",{class:"form-check-label me-2"},"K8S HPA",-1)),e("div",pt,[b(e("input",{class:"form-check-input",type:"checkbox","onUpdate:modelValue":a[23]||(a[23]=o=>t.value.hpaEnabled=o)},null,512),[[sa,t.value.hpaEnabled]])])]),e("div",gt,[e("div",ft,[a[67]||(a[67]=e("label",{class:"form-label"},"minReplicas",-1)),b(e("input",{type:"number",min:"1",class:"form-control","onUpdate:modelValue":a[24]||(a[24]=o=>t.value.minReplicas=o),disabled:!t.value.hpaEnabled,placeholder:"1"},null,8,bt),[[T,t.value.minReplicas,void 0,{number:!0}]])]),e("div",yt,[a[68]||(a[68]=e("label",{class:"form-label"},"maxReplicas",-1)),b(e("input",{type:"number",min:"1",class:"form-control","onUpdate:modelValue":a[25]||(a[25]=o=>t.value.maxReplicas=o),disabled:!t.value.hpaEnabled,placeholder:"10"},null,8,_t),[[T,t.value.maxReplicas,void 0,{number:!0}]])]),e("div",ht,[a[69]||(a[69]=e("label",{class:"form-label"},"CPU (%)",-1)),b(e("input",{type:"number",min:"1",max:"100",class:"form-control","onUpdate:modelValue":a[26]||(a[26]=o=>t.value.cpuThreshold=o),disabled:!t.value.hpaEnabled,placeholder:"80"},null,8,kt),[[T,t.value.cpuThreshold,void 0,{number:!0}]])]),e("div",Ct,[a[70]||(a[70]=e("label",{class:"form-label"},"Memory (%)",-1)),b(e("input",{type:"number",min:"1",max:"100",class:"form-control","onUpdate:modelValue":a[27]||(a[27]=o=>t.value.memoryThreshold=o),disabled:!t.value.hpaEnabled,placeholder:"80"},null,8,wt),[[T,t.value.memoryThreshold,void 0,{number:!0}]])])])])])):$("",!0)],512),[[ke,f.value===3]]),b(e("div",null,[t.value.target==="VM"?(d(),u("div",It,[e("div",St,[a[72]||(a[72]=e("div",{class:"card-header"},[e("h6",{class:"card-title"},"Port Mapping")],-1)),e("div",At,[e("div",Mt,[a[71]||(a[71]=e("label",{class:"form-label"},"Port",-1)),b(e("input",{type:"number",min:"1",max:"65535",class:"form-control","onUpdate:modelValue":a[28]||(a[28]=o=>t.value.defaultPort=o),placeholder:"80"},null,512),[[T,t.value.defaultPort,void 0,{number:!0}]])])])])])):$("",!0),t.value.target==="K8S"?(d(),u("div",Tt,[e("div",Et,[a[78]||(a[78]=e("div",{class:"card-header"},[e("h6",{class:"card-title"},"Port Mapping")],-1)),e("div",Nt,[e("div",Rt,[a[77]||(a[77]=e("label",{class:"form-label"},"Port",-1)),(d(!0),u(E,null,G(N.value,(o,k)=>(d(),u("div",{class:"row g-2 mb-2",key:k},[e("div",Dt,[a[73]||(a[73]=e("label",{class:"form-label small"},"Target Port",-1)),b(e("input",{type:"number",min:"1",max:"65535",class:"form-control","onUpdate:modelValue":w=>o.targetPort=w,placeholder:"80"},null,8,Ut),[[T,o.targetPort,void 0,{number:!0}]])]),e("div",$t,[a[75]||(a[75]=e("label",{class:"form-label small"},"Protocol",-1)),b(e("select",{class:"form-select","onUpdate:modelValue":w=>o.protocol=w},a[74]||(a[74]=[e("option",{value:"TCP"},"TCP",-1),e("option",{value:"UDP"},"UDP",-1),e("option",{value:"SCTP"},"SCTP",-1)]),8,Lt),[[re,o.protocol]])]),e("div",Pt,[a[76]||(a[76]=e("label",{class:"form-label small"},"Host Port",-1)),b(e("input",{type:"number",min:"1",max:"65535",class:"form-control","onUpdate:modelValue":w=>o.hostPort=w,placeholder:"8080"},null,8,Vt),[[T,o.hostPort,void 0,{number:!0}]])]),e("div",xt,[e("button",{type:"button",class:"btn btn-outline-danger btn-sm w-100 cursor-pointer",onClick:w=>Ze(k),disabled:N.value.length<=1},"-",8,Gt)])]))),128)),e("div",{class:"form-text cursor-pointer",onClick:Je,style:{color:"gray"}},"+ Add Port Mapping")])])])])):$("",!0)],512),[[ke,f.value===4]])]),e("div",Ot,[e("button",{type:"button",class:"btn btn-link link-secondary","data-bs-dismiss":"modal",disabled:_.value,onClick:Ee}," Cancel ",8,Ht),e("div",Bt,[e("button",{class:"btn btn-outline-secondary",disabled:f.value===1||_.value,onClick:Te},"Prev",8,Kt),f.value<4?(d(),u("button",{key:0,class:"btn btn-primary",disabled:!ue.value||_.value,onClick:Me},"Next",8,Ft)):(d(),u("button",{key:1,class:"btn btn-primary",disabled:!ue.value||_.value,onClick:a[29]||(a[29]=o=>m.mode==="update"?aa():ea())},g(ge.value),9,zt))])])])])],512))}}),qt=Sa(jt,[["__scopeId","data-v-bd745d1f"]]),Yt={class:"modal-dialog",role:"document"},Wt={class:"modal-content"},Jt={class:"modal-body"},Zt={key:0,class:"text-muted"},Qt={key:1,class:"alert alert-warning mb-0"},Xt={key:2,class:"alert alert-warning mb-0"},eo={class:"mb-0 mt-2 ps-3"},ao={key:0,class:"mt-1"},lo={key:3,class:"text-muted"},to={class:"modal-footer"},oo=["disabled"],so=["disabled"],no={key:0,class:"spinner-border spinner-border-sm me-2",role:"status"},io=Ie({__name:"DeleteConfirmModal",props:{targetCatalog:{}},emits:["deleted","close"],setup(me,{expose:se,emit:le}){const m=me,K=le,R=$e(),f=c(!1),I=c(!1),A=c(!1),S=c([]),y=c(null),Y=new Set(["UNINSTALLED","DELETED","DELETE_COMPLETED"]),L=q(()=>S.value.length>0),W=q(()=>S.value.slice(0,3)),M=q(()=>Math.max(S.value.length-W.value.length,0)),J=q(()=>f.value||I.value||A.value||L.value),V=async()=>{if(await Ue(),x(),y.value)try{const i=window.bootstrap;if(i&&i.Modal)new i.Modal(y.value).show();else{y.value.classList.add("show"),y.value.style.display="block",document.body.classList.add("modal-open");const p=document.createElement("div");p.className="modal-backdrop fade show",p.id="delete-modal-backdrop",document.body.appendChild(p)}}catch(i){console.warn("Failed to show modal with Bootstrap, using fallback:",i),y.value.classList.add("show"),y.value.style.display="block",document.body.classList.add("modal-open")}},U=()=>{if(y.value)try{const i=window.bootstrap;if(i&&i.Modal){const p=i.Modal.getInstance(y.value);p?p.hide():j()}else j()}catch(i){console.warn("Failed to hide modal with Bootstrap, using fallback:",i),j()}},j=()=>{if(y.value){y.value.classList.remove("show"),y.value.style.display="none",document.body.classList.remove("modal-open");const i=document.getElementById("delete-modal-backdrop");i&&i.remove(),K("close")}},x=async()=>{var i;if(S.value=[],A.value=!1,!!((i=m.targetCatalog)!=null&&i.id)){I.value=!0;try{const{data:p}=await Fe(m.targetCatalog.id),C=Array.isArray(p==null?void 0:p.applicationStatuses)?p.applicationStatuses:[];S.value=C.filter(D).map(O)}catch(p){console.log(p),A.value=!0}finally{I.value=!1}}},D=i=>{const p=H((i==null?void 0:i.status)||(i==null?void 0:i.podStatus));return!Y.has(p)},O=(i,p)=>{const C=[i==null?void 0:i.namespace,i==null?void 0:i.mciId,(i==null?void 0:i.vmId)||(i==null?void 0:i.clusterName)].filter(Boolean).join(" / "),de=(i==null?void 0:i.deploymentType)||"Deployment",F=Ke((i==null?void 0:i.status)||(i==null?void 0:i.podStatus));return{key:(i==null?void 0:i.id)||`${de}-${C}-${p}`,label:`${de}${C?` - ${C}`:""} (${F})`}},H=i=>String(i||"").trim().toUpperCase(),Z=async()=>{var i;if((i=m.targetCatalog)!=null&&i.id){if(J.value){L.value&&R.warning("This catalog has deployed applications. Please delete them first.");return}f.value=!0;try{await wa(m.targetCatalog.id),R.success(`${m.targetCatalog.name} catalog has been successfully deleted.`),U(),K("deleted",m.targetCatalog.id)}catch(p){console.error("Delete failed:",p),R.error("Failed to delete catalog.")}finally{f.value=!1}}},_=()=>{K("close")};return Le(()=>{y.value&&y.value.addEventListener("hidden.bs.modal",_)}),Be(()=>{y.value&&y.value.removeEventListener("hidden.bs.modal",_)}),se({show:V,hide:U}),(i,p)=>(d(),u("div",{class:"modal fade",id:"deleteConfirmModal",tabindex:"-1",ref_key:"deleteModal",ref:y,onClick:we(U,["self"])},[e("div",Yt,[e("div",Wt,[e("div",{class:"modal-header"},[p[0]||(p[0]=e("h5",{class:"modal-title"},"Confirm Catalog Deletion",-1)),e("button",{type:"button",class:"btn-close",onClick:U,"aria-label":"Close"})]),e("div",Jt,[e("p",null,[p[1]||(p[1]=ve("Are you sure you want to delete ")),e("strong",null,g(i.targetCatalog.name),1),ve(" ("+g(i.targetCatalog.category)+") catalog?",1)]),I.value?(d(),u("div",Zt,p[2]||(p[2]=[e("span",{class:"spinner-border spinner-border-sm me-2",role:"status"},null,-1),ve(" Checking deployed applications... ")]))):A.value?(d(),u("div",Qt," Unable to verify deployed applications. Try again before deleting this catalog. ")):L.value?(d(),u("div",Xt,[p[3]||(p[3]=e("div",{class:"fw-semibold"},"This catalog has deployed applications.",-1)),p[4]||(p[4]=e("div",null,"Please delete the deployed applications first.",-1)),e("ul",eo,[(d(!0),u(E,null,G(W.value,C=>(d(),u("li",{key:C.key},g(C.label),1))),128))]),M.value>0?(d(),u("div",ao," and "+g(M.value)+" more... ",1)):$("",!0)])):(d(),u("p",lo,"This action cannot be undone."))]),e("div",to,[A.value?(d(),u("button",{key:0,type:"button",class:"btn btn-outline-secondary",disabled:I.value,onClick:x}," Retry ",8,oo)):$("",!0),e("button",{type:"button",class:"btn btn-secondary",onClick:U},"Cancel"),e("button",{type:"button",class:"btn btn-danger",onClick:Z,disabled:J.value},[f.value?(d(),u("span",no)):$("",!0),ve(" "+g(f.value?"Deleting...":"Delete"),1)],8,so)])])])],512))}}),ro={ref:"sofwareCatalog"},uo={class:"row"},co={class:"col-lg-12"},vo={class:"card"},mo={class:"list-group card-list-group",id:"sc-list-group"},po={class:"row g-2 align-items-center"},go={class:"col-auto me-3"},fo=["src","onError"],bo={key:1,class:"rounded catalog-icon-fallback d-flex align-items-center justify-content-center"},yo=["onClick"],_o={class:"text-muted"},ho=["onClick"],ko={class:"text-muted",style:{width:"auto","text-align":"right"}},Co={style:{color:"#e5b942"}},wo={style:{color:"#e5b942"}},Io={class:"text-muted",style:{width:"80px","text-align":"right"}},So={style:{color:"gray"}},Ao={class:"col-3 text-muted"},Mo={class:"d-flex justify-content-end"},To={class:"mouse-hover"},Eo=["onClick"],No={class:"text-muted"},Ro=["id"],Do={class:"accordion-body pt-0"},Uo=["innerHTML"],$o=["id"],Lo=["onClick"],Po=["id"],Vo=["id"],xo={class:"btn btn-sm",style:{"margin-right":"5px"}},Go={class:"btn btn-sm",style:{"margin-right":"5px"}},Oo={class:"btn btn-sm",style:{"margin-right":"5px"}},Ho={class:"mt-4"},Bo={class:"d-flex justify-content-between align-items-center mb-2"},Ko=["disabled","onClick"],Fo={key:0,class:"text-center text-muted py-3"},zo={key:1,class:"table-responsive"},jo={class:"table table-sm table-vcenter"},qo={key:0},Yo={class:"text-end"},Wo=["disabled","onClick"],Jo=Ie({__name:"softwareCatalogList",setup(me,{expose:se}){const le=$e(),m=c([]),K=c(null),R=c(null),f=c({}),I=c("new"),A=c({}),S=c(""),y=c({}),Y=c(null),L=c(null),W=c(0),M=c(null);Le(async()=>{V()}),se({startRegistration:()=>{I.value="new",R.value=null,f.value={},K.value=0,A.value={},S.value="",setTimeout(()=>{L.value&&typeof L.value.initForCreate=="function"&&L.value.initForCreate()},100)}});const V=async()=>{try{await Ia("").then(({data:s})=>{Aa.forEach(s,function(n){n.refData=U(n.catalogRefs),n.isShow=!1,n.deploymentStatuses=[],n.deploymentStatusLoaded=!1,n.deploymentStatusLoading=!1,n.resolvedLogoUrl=ue(n),n.logoLoadFailed=!1}),m.value=s})}catch(s){console.log(s),le.error("Unable to retrieve data.")}},U=s=>s.reduce((n,r)=>(n[r.refType]||(n[r.refType]=[]),n[r.refType].push(r),n),{}),j=s=>{const n=m.value.find(r=>r.id===s);R.value=s,f.value=n||{},I.value="update",setTimeout(()=>{L.value&&typeof L.value.initForUpdate=="function"&&L.value.initForUpdate(s,n)},100)},x=s=>{y.value=s,Y.value&&Y.value.show()},D=async()=>{await V()},O=()=>{y.value={}},H=async s=>{const n=m.value[s];n.isShow=!n.isShow,n.isShow&&!n.deploymentStatusLoaded&&await Z(n)},Z=async s=>{if(s!=null&&s.id){s.deploymentStatusLoading=!0;try{const{data:n}=await Fe(s.id);s.deploymentStatuses=_(n),s.deploymentStatusLoaded=!0}catch(n){console.log(n),s.deploymentStatuses=[],le.error("Unable to retrieve deployment status.")}finally{s.deploymentStatusLoading=!1}}},_=s=>{const n=Array.isArray(s==null?void 0:s.deploymentHistories)?s.deploymentHistories:[];return(Array.isArray(s==null?void 0:s.applicationStatuses)?s.applicationStatuses:[]).map((h,v)=>{const P=i(h,n);return p(P,h,`status-${h.id||v}`)})},i=(s,n)=>{if(!s)return null;const r=n.find(h=>s.deploymentHistoryId&&String(s.deploymentHistoryId)===String(h.id));return r||n.find(h=>ne(s.deploymentType,h.deploymentType)&&ne(s.namespace,h.namespace)&&(ne(s.vmId,h.vmId)||ne(s.clusterName,h.clusterName)))},p=(s,n,r)=>({rowKey:r,deploymentId:(n==null?void 0:n.deploymentHistoryId)||(s==null?void 0:s.id)||null,deploymentType:F((n==null?void 0:n.deploymentType)||(s==null?void 0:s.deploymentType)),target:F(C(s,n)),csp:F(s==null?void 0:s.cloudProvider),status:F((n==null?void 0:n.status)||(n==null?void 0:n.podStatus)),ipOrEndpoint:F(de(s,n)),lastCheckedOrDeployedAt:F(t(n==null?void 0:n.checkedAt))}),C=(s,n)=>{const r=(n==null?void 0:n.deploymentType)||(s==null?void 0:s.deploymentType),h=(n==null?void 0:n.namespace)||(s==null?void 0:s.namespace),v=(n==null?void 0:n.mciId)||(s==null?void 0:s.mciId),P=(n==null?void 0:n.vmId)||(s==null?void 0:s.vmId),X=(n==null?void 0:n.clusterName)||(s==null?void 0:s.clusterName);return r==="VM"?[h,v,P].filter(Boolean).join(" / "):r==="K8S"?[h,X].filter(Boolean).join(" / "):[h,v,P,X].filter(Boolean).join(" / ")},de=(s,n)=>{var X;const r=(n==null?void 0:n.publicIp)||(s==null?void 0:s.publicIp),h=(n==null?void 0:n.servicePort)||(s==null?void 0:s.servicePort),v=s==null?void 0:s.ingressHost,P=s==null?void 0:s.ingressPath;return(X=s==null?void 0:s.releaseName)!=null&&X.startsWith("mcmp-jupyter-")&&v?`http://${v}:30880/`:r&&h?`${r}:${h}`:r||(v&&P?`${v}${P}`:v||"")},F=s=>s==null||s===""?"-":s,ne=(s,n)=>!s||!n?!1:String(s)===String(n),t=s=>{if(!s)return"";const n=new Date(s);return Number.isNaN(n.getTime())?s:n.toLocaleString("ko-KR",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1})},B=s=>{if(!s)return;W.value=s;const n=document.getElementById("application-detail-modal");if(n)try{window.bootstrap&&window.bootstrap.Modal?new window.bootstrap.Modal(n).show():(n.style.display="block",n.classList.add("show"),document.body.classList.add("modal-open")),setTimeout(()=>{M.value&&M.value.refreshData(W.value)},100)}catch(r){console.error("Error opening detail modal:",r)}},N=(s,n)=>Object.prototype.hasOwnProperty.call(s,n),Q=s=>{window.open(s)},ie={"apache tomcat":"/catalog-icons/apache-tomcat.png",redis:"/catalog-icons/redis.svg",nginx:"/catalog-icons/nginx.svg","apache http server":"/catalog-icons/apache-http-server.svg","nexus repository":"/catalog-icons/nexus-repository.svg",mariadb:"/catalog-icons/mariadb.svg",grafana:"/catalog-icons/grafana.svg",prometheus:"/catalog-icons/prometheus.svg",elasticsearch:"/catalog-icons/elasticsearch.svg"},Ae=s=>String(s||"").trim().toLowerCase(),ge=s=>ie[Ae(s==null?void 0:s.name)]||"",ue=s=>ge(s)||(s==null?void 0:s.logoUrlLarge)||(s==null?void 0:s.logoUrlSmall)||"",Me=s=>{const n=ge(s);if(n&&s.resolvedLogoUrl!==n){s.resolvedLogoUrl=n,s.logoLoadFailed=!1;return}s.logoLoadFailed=!0},Te=s=>s.replace(/\\n|\n/g,"
");return(s,n)=>(d(),u(E,null,[e("div",ro,[e("div",uo,[e("div",co,[e("div",vo,[e("div",mo,[(d(!0),u(E,null,G(m.value,(r,h)=>(d(),u("div",{class:"list-group-item pe-1",key:h},[e("div",po,[e("div",go,[r.resolvedLogoUrl&&!r.logoLoadFailed?(d(),u("img",{key:0,src:r.resolvedLogoUrl,class:"rounded catalog-icon",alt:"Catalog Icon",width:"40",height:"40",onError:v=>Me(r)},null,40,fo)):(d(),u("div",bo,[z(te(ra),{class:"icon",size:"22","stroke-width":"1.75"})]))]),e("div",{class:"col-5",onClick:v=>H(h)},[ve(g(r.name)+" ",1),e("div",_o,g(r.summary),1)],8,yo),e("div",{class:"col-3 d-flex justify-content-end",onClick:v=>H(h)},[e("span",ko,[z(te(Ra),{class:"icon me-1",width:"12",height:"12","stroke-width":"1",color:"#e5b942"}),e("span",Co,g(r.averageRating||0),1),e("span",wo," ("+g(r.ratingCount||0)+") ",1)]),e("span",Io,[z(te(Ta),{class:"icon me-1",width:"12",height:"12","stroke-width":"1",color:"gray"}),e("span",So,g(r.downloadCount||0),1)])],8,ho),e("div",Ao,[e("div",Mo,[e("div",To,[z(te(Ea),{class:"me-2 cursor-pointer",size:"15","stroke-width":"2","data-bs-toggle":"modal","data-bs-target":"#modal-wizard",onClick:v=>j(r.id)},null,8,["onClick"]),z(te(Na),{class:"cursor-pointer",size:"15","stroke-width":"2",onClick:v=>x(r)},null,8,["onClick"])])]),e("div",{class:"d-flex justify-content-end",onClick:v=>H(h)},[e("span",No,g(r.category.length>25?r.category.substring(0,25)+"...":r.category),1)],8,Eo)]),e("div",{id:"accordion_"+r.id,class:"accordion-collapse collapse",style:na([r.isShow?{display:"block"}:{display:"none"}])},[e("div",Do,[e("div",{class:"mt-3 mb-5",innerHTML:Te(r.description)},null,8,Uo),e("div",null,[n[3]||(n[3]=e("strong",null,"Ref Information",-1)),e("ul",{id:`${h}-entity-ul`},[N(r.refData,"HOMEPAGE")?(d(!0),u(E,{key:0},G(r.refData.HOMEPAGE,(v,P)=>(d(),u("li",{key:P},[e("a",{class:"btn",onClick:X=>Q(v.refValue)},g(v.refValue),9,Lo)]))),128)):$("",!0)],8,$o),n[4]||(n[4]=e("strong",null,"TAGS",-1)),e("ul",{id:`${h}-tag-ul`},[N(r.refData,"TAG")?(d(!0),u(E,{key:0},G(r.refData.TAG,(v,P)=>(d(),u("span",{key:P},"#"+g(v.refValue)+"  ",1))),128)):$("",!0)],8,Po),n[5]||(n[5]=e("strong",null,"Recommended Spec",-1)),e("ul",{id:`${h}-tag-ul`},[r.recommendedCpu&&r.recommendedMemory&&r.recommendedDisk?(d(),u(E,{key:0},[e("button",xo," CPU : "+g(r.recommendedCpu)+" Core ",1),e("button",Go," MEMORY : "+g(r.recommendedMemory)+" GB ",1),e("button",Oo," DISK : "+g(r.recommendedDisk)+" GB ",1)],64)):$("",!0)],8,Vo),e("div",Ho,[e("div",Bo,[n[0]||(n[0]=e("strong",null,"Deployment Status",-1)),e("button",{type:"button",class:"btn btn-sm btn-icon btn-ghost-secondary",title:"Refresh deployment status","aria-label":"Refresh deployment status",disabled:r.deploymentStatusLoading,onClick:we(v=>Z(r),["stop"])},[z(te(da),{class:"icon",size:"18","stroke-width":"1.75"})],8,Ko)]),r.deploymentStatusLoading?(d(),u("div",Fo," Loading deployment status... ")):(d(),u("div",zo,[e("table",jo,[n[2]||(n[2]=e("thead",null,[e("tr",null,[e("th",null,"Type"),e("th",null,"Target"),e("th",null,"CSP"),e("th",null,"Status"),e("th",null,"IP/Endpoint"),e("th",null,"Last Checked"),e("th",{class:"text-end"},"Detail")])],-1)),e("tbody",null,[r.deploymentStatuses.length===0?(d(),u("tr",qo,n[1]||(n[1]=[e("td",{colspan:"7",class:"text-center text-muted"}," No deployment status available ",-1)]))):$("",!0),(d(!0),u(E,null,G(r.deploymentStatuses,v=>(d(),u("tr",{key:v.rowKey},[e("td",null,g(v.deploymentType),1),e("td",null,g(v.target),1),e("td",null,g(v.csp),1),e("td",null,[e("span",{class:oe(te(ua)(v.status))},g(te(Ke)(v.status)),3)]),e("td",null,g(v.ipOrEndpoint),1),e("td",null,g(v.lastCheckedOrDeployedAt),1),e("td",Yo,[e("button",{type:"button",class:"btn btn-outline-primary",disabled:!v.deploymentId,onClick:we(P=>B(v.deploymentId),["stop"])}," Detail ",8,Wo)])]))),128))])])]))])])])],12,Ro)])]))),128))])])])])],512),z(io,{ref_key:"deleteConfirmModal",ref:Y,"target-catalog":y.value,onDeleted:D,onClose:O},null,8,["target-catalog"]),z(qt,{ref_key:"wizardModal",ref:L,mode:I.value,onCreated:V,onUpdated:V},null,8,["mode"]),z(ca,{ref_key:"applicationDetailModalRef",ref:M,"deployment-id":W.value},null,8,["deployment-id"])],64))}}),Zo={class:"page",ref:"sofwareCatalog"},Qo={class:"page-wrapper"},Xo={class:"page-header d-print-none"},es={class:"container-xxl"},as={class:"row g-2 align-items-center"},ls={class:"col-auto ms-auto"},ts={class:"btn-list"},os={class:"page-body"},ss={class:"container-xxl"},ns={class:"row"},is={class:"col-lg-12"},_s=Ie({__name:"SoftwareCatalog",setup(me){const se=ia(),le=q(()=>se.getNsId()||""),m=c(""),K=c(null),R=A=>{const S=document.getElementById(A);S&&Ma.getOrCreateInstance(S).show()},f=async A=>{m.value=A,await Ue(),R("install-form")},I=async()=>{var A;(A=K.value)==null||A.startRegistration(),await Ue(),R("modal-wizard")};return(A,S)=>(d(),u(E,null,[e("div",Zo,[e("div",Qo,[e("div",Xo,[e("div",es,[e("div",as,[S[1]||(S[1]=e("div",{class:"col d-flex"},[e("h2",{class:"page-title"},"Software Catalog")],-1)),e("div",ls,[e("div",ts,[e("button",{type:"button",class:"btn btn-outline-primary page-header-action-btn",onClick:I}," Register "),e("button",{type:"button",class:"btn btn-primary page-header-action-btn",onClick:S[0]||(S[0]=y=>f("Application Installation"))}," Deploy ")])])])])]),e("div",os,[e("div",ss,[e("div",ns,[e("div",is,[z(Jo,{ref_key:"softwareCatalogListRef",ref:K},null,512)])])])])])],512),z(ta,{"ns-id":le.value,title:m.value},null,8,["ns-id","title"])],64))}});export{_s as default}; diff --git a/src/main/resources/static/assets/SoftwareCatalog-CwQ6RJcF.css b/src/main/resources/static/assets/SoftwareCatalog-CwQ6RJcF.css new file mode 100644 index 00000000..a6f71bc5 --- /dev/null +++ b/src/main/resources/static/assets/SoftwareCatalog-CwQ6RJcF.css @@ -0,0 +1 @@ +@import"https://rsms.me/inter/inter.css";.nav-link[data-v-bd745d1f]{cursor:default}.source-option[data-v-bd745d1f]{display:flex;align-items:flex-start;gap:.75rem;min-height:92px;padding:1rem;border:1px solid var(--tblr-border-color);border-radius:var(--tblr-border-radius);cursor:pointer;transition:border-color .15s ease,box-shadow .15s ease}.source-option.selected[data-v-bd745d1f]{border-color:var(--tblr-primary);box-shadow:0 0 0 1px var(--tblr-primary)}.source-option small[data-v-bd745d1f]{display:block;margin-top:.25rem;color:var(--tblr-secondary-color)}.registry-results[data-v-bd745d1f]{max-height:280px;overflow-y:auto}.registry-logo[data-v-bd745d1f]{flex:0 0 auto;object-fit:contain;background:#fff}.registry-description[data-v-bd745d1f],.registry-results .list-group-item.active .registry-description[data-v-bd745d1f]{color:var(--tblr-secondary-color)!important}.mouse-hover{opacity:0;transition:opacity .15s ease-in-out}.list-group-item:hover .mouse-hover{opacity:1}.catalog-icon,.catalog-icon-fallback{width:40px;height:40px;object-fit:contain}.catalog-icon-fallback{color:#667085;background-color:#f1f5f9;border:1px solid #dbe3ea}:root{--tblr-font-sans-serif: "Inter Var", -apple-system, BlinkMacSystemFont, San Francisco, Segoe UI, Roboto, Helvetica Neue, sans-serif}body{font-feature-settings:"cv03","cv04","cv11"}.btn-grid-list{display:grid;grid-template-columns:repeat(2,1fr);grid-column-gap:10px;grid-row-gap:10px} diff --git a/src/main/resources/static/assets/SoftwareCatalog-DW4Ywuns.js b/src/main/resources/static/assets/SoftwareCatalog-DW4Ywuns.js new file mode 100644 index 00000000..2f35e8c6 --- /dev/null +++ b/src/main/resources/static/assets/SoftwareCatalog-DW4Ywuns.js @@ -0,0 +1,21 @@ +import{A as ta}from"./applicationInstallationForm-C5Vcb2Aw.js";import{d as Ie,f as $e,r as c,i as Le,x as Be,g as q,h as he,o as d,c as u,a as e,t as g,n as oe,j as b,y as ke,z as Ce,m as $,F as E,k as G,v as re,e as ve,w as we,l as T,p as oa,A as sa,B as Ue,b as z,u as te,C as na,q as ia}from"./index-DKle5_5b.js";import{c as Se}from"./createVueComponent-l3sgX4hZ.js";import{g as Ke,I as ra,a as da,b as ua,A as ca}from"./applicationDetailModal-D8U6ml02.js";import{g as De,s as va,a as ma,b as pa,c as ga,d as fa,u as ba,e as ya,f as _a,h as ha,i as ka,j as Ca,k as Fe,l as wa,m as Ia}from"./softwareCatalog-DbmZz9hR.js";import{_ as Sa}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{_ as Aa}from"./lodash-pZBD3XEw.js";import{M as Ma}from"./bootstrap.esm-Ceob_0pG.js";import"./request-DSShymva.js";/** + * @license @tabler/icons-vue v3.22.0 - MIT + * + * This source code is licensed under the MIT license. + * See the LICENSE file in the root directory of this source tree. + */var Ta=Se("outline","cloud-download","IconCloudDownload",[["path",{d:"M19 18a3.5 3.5 0 0 0 0 -7h-1a5 4.5 0 0 0 -11 -2a4.6 4.4 0 0 0 -2.1 8.4",key:"svg-0"}],["path",{d:"M12 13l0 9",key:"svg-1"}],["path",{d:"M9 19l3 3l3 -3",key:"svg-2"}]]);/** + * @license @tabler/icons-vue v3.22.0 - MIT + * + * This source code is licensed under the MIT license. + * See the LICENSE file in the root directory of this source tree. + */var Ea=Se("outline","edit","IconEdit",[["path",{d:"M7 7h-1a2 2 0 0 0 -2 2v9a2 2 0 0 0 2 2h9a2 2 0 0 0 2 -2v-1",key:"svg-0"}],["path",{d:"M20.385 6.585a2.1 2.1 0 0 0 -2.97 -2.97l-8.415 8.385v3h3l8.385 -8.415z",key:"svg-1"}],["path",{d:"M16 5l3 3",key:"svg-2"}]]);/** + * @license @tabler/icons-vue v3.22.0 - MIT + * + * This source code is licensed under the MIT license. + * See the LICENSE file in the root directory of this source tree. + */var Na=Se("outline","trash","IconTrash",[["path",{d:"M4 7l16 0",key:"svg-0"}],["path",{d:"M10 11l0 6",key:"svg-1"}],["path",{d:"M14 11l0 6",key:"svg-2"}],["path",{d:"M5 7l1 12a2 2 0 0 0 2 2h8a2 2 0 0 0 2 -2l1 -12",key:"svg-3"}],["path",{d:"M9 7v-3a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v3",key:"svg-4"}]]);/** + * @license @tabler/icons-vue v3.22.0 - MIT + * + * This source code is licensed under the MIT license. + * See the LICENSE file in the root directory of this source tree. + */var Ra=Se("filled","star-filled","IconStarFilled",[["path",{d:"M8.243 7.34l-6.38 .925l-.113 .023a1 1 0 0 0 -.44 1.684l4.622 4.499l-1.09 6.355l-.013 .11a1 1 0 0 0 1.464 .944l5.706 -3l5.693 3l.1 .046a1 1 0 0 0 1.352 -1.1l-1.091 -6.355l4.624 -4.5l.078 -.085a1 1 0 0 0 -.633 -1.62l-6.38 -.926l-2.852 -5.78a1 1 0 0 0 -1.794 0l-2.853 5.78z",key:"svg-0"}]]);const Da={class:"modal-dialog modal-lg",role:"document"},Ua={class:"modal-content"},$a={class:"modal-header"},La={class:"modal-title"},Pa=["disabled"],Va={class:"modal-body",style:{"max-height":"calc(100vh - 200px)","overflow-y":"auto"}},xa={class:"nav nav-tabs mb-3"},Ga={class:"nav-item"},Oa={class:"nav-item"},Ha={class:"nav-item"},Ba={class:"nav-item"},Ka={key:0,class:"mb-4"},Fa={class:"row g-3"},za={class:"col-md-6"},ja=["disabled"],qa={class:"col-md-6"},Ya=["disabled"],Wa={class:"mb-3"},Ja={class:"d-flex align-items-center"},Za={class:"form-check me-3"},Qa=["disabled"],Xa={class:"form-check"},el=["disabled"],al={class:"mb-3"},ll=["disabled"],tl=["value"],ol={class:"row g-3"},sl={class:"col-md-6"},nl=["disabled"],il=["value"],rl={class:"col-md-6"},dl=["disabled"],ul=["value"],cl={class:"alert alert-info py-2 mb-3",role:"status"},vl={class:"form-label required",for:"registrySearchInput"},ml={class:"input-group"},pl=["placeholder","disabled"],gl=["disabled"],fl={key:0,class:"text-danger small mt-2"},bl={key:0,class:"text-center text-muted py-4"},yl={key:1,class:"text-muted py-3"},_l={key:2,class:"registry-results list-group mb-3"},hl=["disabled","onClick"],kl={class:"d-flex align-items-start gap-3"},Cl=["src"],wl={class:"flex-fill text-start"},Il={class:"fw-semibold"},Sl={class:"small registry-description"},Al={key:3,class:"row g-3"},Ml={class:"col-md-6"},Tl=["disabled"],El={value:""},Nl=["value"],Rl={class:"col-md-6"},Dl=["disabled"],Ul=["value"],$l={class:"mb-3"},Ll={class:"mb-3"},Pl={class:"mb-3"},Vl={class:"mb-3"},xl={class:"col-5"},Gl=["onUpdate:modelValue"],Ol={class:"col-6"},Hl=["onUpdate:modelValue"],Bl={class:"col-1 d-flex gap-2"},Kl=["onClick","disabled"],Fl={class:"row"},zl={class:"col-md-6"},jl={class:"row"},ql={class:"col-6"},Yl={class:"input-group"},Wl={class:"col-6"},Jl={class:"input-group"},Zl={class:"row mt-3"},Ql={class:"col-md-6"},Xl={class:"row"},et={class:"col-6"},at={class:"input-group"},lt={class:"col-6"},tt={class:"input-group"},ot={class:"row mt-3"},st={class:"col-md-6"},nt={class:"row"},it={class:"col-6"},rt={class:"input-group"},dt={class:"col-6"},ut={class:"input-group"},ct={key:0,class:"card mt-3"},vt={class:"card-body"},mt={class:"d-flex align-items-center mb-2"},pt={class:"form-check form-switch"},gt={class:"row"},ft={class:"col-md-3"},bt=["disabled"],yt={class:"col-md-3"},_t=["disabled"],ht={class:"col-md-3"},kt=["disabled"],Ct={class:"col-md-3"},wt=["disabled"],It={key:0},St={class:"card"},At={class:"card-body"},Mt={class:"mb-3"},Tt={key:1},Et={class:"card"},Nt={class:"card-body"},Rt={class:"mb-3"},Dt={class:"col-4"},Ut=["onUpdate:modelValue"],$t={class:"col-3"},Lt=["onUpdate:modelValue"],Pt={class:"col-4"},Vt=["onUpdate:modelValue"],xt={class:"col-1 d-flex align-items-end gap-2"},Gt=["onClick","disabled"],Ot={class:"modal-footer"},Ht=["disabled"],Bt={class:"ms-auto d-flex gap-2"},Kt=["disabled"],Ft=["disabled"],zt=["disabled"],jt=Ie({__name:"softwareCatalogWizard",props:{show:{type:Boolean},mode:{}},emits:["created","updated"],setup(me,{expose:se,emit:le}){const m=me,K=le,R=$e(),f=c(1),I=c(!1),A=c(!1),S=c(0),y=c({}),Y=["AI_MACHINE_LEARNING","DATABASE","INTEGRATION_AND_DELIVERY","MONITORING_AND_LOGGING","NETWORKING","SECURITY","STORAGE","STREAMING_AND_MESSAGING"],L={1:"AI_MACHINE_LEARNING",2:"DATABASE",3:"INTEGRATION_AND_DELIVERY",4:"MONITORING_AND_LOGGING",5:"NETWORKING",6:"SECURITY",7:"STORAGE",8:"STREAMING_AND_MESSAGING"},W={"AI / MACHINE LEARNING":"AI_MACHINE_LEARNING","AI MACHINE LEARNING":"AI_MACHINE_LEARNING",DATABASE:"DATABASE","INTEGRATION AND DELIVERY":"INTEGRATION_AND_DELIVERY","MONITORING AND LOGGING":"MONITORING_AND_LOGGING","MONITORING & LOGGING":"MONITORING_AND_LOGGING",NETWORKING:"NETWORKING",SECURITY:"SECURITY",STORAGE:"STORAGE","STREAMING AND MESSAGING":"STREAMING_AND_MESSAGING"},M=c("existing"),J=c(""),V=c([]),U=c(!1),j=c(!1),x=c(""),D=c(null),O=c([]),H=c(!1),Z=c(Y.map(l=>({key:l,value:l}))),_=c(!1),i=c(!1),p=c(""),C=c(null),de=c(!1);Le(()=>{C.value&&(C.value.addEventListener("show.bs.modal",F),C.value.addEventListener("hide.bs.modal",ne)),be()}),Be(()=>{C.value&&(C.value.removeEventListener("show.bs.modal",F),C.value.removeEventListener("hide.bs.modal",ne))});const F=()=>{A.value=!0,m.mode==="new"&&Ee()},ne=()=>{A.value=!1,de.value=!1},t=c({id:null,target:"VM",sourceType:"DOCKERHUB",category:"",packageName:"",version:"",packageInfo:null,helmChart:null,name:"",summary:"",description:"",logoUrlLarge:"",logoUrlSmall:"",catalogRefs:[],minCpu:0,recommendedCpu:0,minMemory:0,recommendedMemory:0,minDisk:0,recommendedDisk:0,hpaEnabled:!1,minReplicas:1,maxReplicas:10,cpuThreshold:80,memoryThreshold:80,ports:[],ingressEnabled:!1,ingressUrl:"",defaultPort:80,registeredById:null,createdAt:null,updatedAt:null}),B=c([{refId:0,refValue:"",refDesc:"",refType:"URL"}]),N=c([{targetPort:80,hostPort:8080,protocol:"TCP"}]),Q=q(()=>m.mode==="update"||M.value==="existing"),ie=q(()=>t.value.target==="VM"?"Docker Hub":"Artifact Hub"),Ae=q(()=>t.value.target==="VM"?"Search official container images":"Search official Helm charts"),ge=q(()=>m.mode==="update"?_.value?"Updating...":"Update":i.value?"Importing...":_.value?"Creating...":M.value==="public"?"Import & Create":"Create"),ue=q(()=>f.value===1?t.value.target&&t.value.category&&t.value.packageName&&t.value.version:f.value===2?t.value.name.trim().length>0&&t.value.summary.trim().length>0&&t.value.description.trim().length>0:f.value===3?t.value.minCpu>0&&t.value.minMemory>0&&t.value.minDisk>0&&t.value.recommendedCpu>0&&t.value.recommendedMemory>0&&t.value.recommendedDisk>0:f.value===3&&t.value.hpaEnabled?t.value.minReplicas>0&&t.value.maxReplicas>0&&t.value.cpuThreshold>0&&t.value.memoryThreshold>0:(console.log(N.value),f.value===3&&t.value.target==="VM"?t.value.defaultPort>0:f.value===4&&t.value.target==="K8S"?(console.log(N.value.length),N.value.length>0?N.value.every(l=>l.targetPort>0&&l.hostPort>0&&l.protocol):!1):f.value===4&&t.value.ingressEnabled?t.value.ingressUrl.trim().length>0:!0)),Me=()=>{ue.value&&f.value<4&&(f.value+=1)},Te=()=>{f.value>1&&(f.value-=1)},s=(l=!0)=>{l&&(J.value=""),V.value=[],j.value=!1,x.value="",D.value=null,O.value=[],U.value=!1,H.value=!1,i.value=!1,p.value=""},n=l=>{if(l==null)return"";if(typeof l=="object")return n(l.value||l.key||l.name||l.displayName||l.display_name||l.category);const a=String(l).trim();if(!a)return"";if(L[a])return L[a];const o=a.replace(/[_-]+/g," ").replace(/\s+/g," ").trim().toUpperCase();return W[o]?W[o]:a.replace(/&/g,"AND").replace(/[^a-zA-Z0-9]+/g,"_").replace(/^_+|_+$/g,"").replace(/_+/g,"_").toUpperCase()},r=(l=[])=>{const a=new Map;[...Y,...Z.value,...l].forEach(o=>{const k=n((o==null?void 0:o.value)||(o==null?void 0:o.key)||o);k&&a.set(k,{key:k,value:k})}),Z.value=Array.from(a.values()).sort((o,k)=>o.value.localeCompare(k.value))},h=async()=>{r();const a=(await Promise.allSettled([De({target:"DOCKER",availableOnly:!1}),De({target:"HELM",availableOnly:!1})])).flatMap(o=>o.status==="fulfilled"?o.value.data||[]:[]);r(a)},v=(l,a=0)=>{var o;return String((l==null?void 0:l.id)||(l==null?void 0:l.packageId)||`${((o=l==null?void 0:l.repository)==null?void 0:o.name)||"registry"}-${(l==null?void 0:l.name)||a}`)},P=l=>!!D.value&&v(D.value)===v(l),X=l=>{var a,o;return((a=l==null?void 0:l.logo_url)==null?void 0:a.small)||((o=l==null?void 0:l.logo_url)==null?void 0:o.large)||""},Pe=l=>(l==null?void 0:l.short_description)||(l==null?void 0:l.description)||"",ze=(l,a)=>{const o=String(l||"");return o.length>a?`${o.substring(0,a)}...`:o},je=async()=>{const l=J.value.trim();if(x.value="",j.value=!1,V.value=[],D.value=null,O.value=[],t.value.packageName="",t.value.version="",!l){x.value="Enter a search keyword.";return}J.value=l,U.value=!0;try{const{data:a}=t.value.target==="VM"?await va(l):await ma(l),o=t.value.target==="VM"?a==null?void 0:a.results:a==null?void 0:a.packages;V.value=(Array.isArray(o)?o:[]).filter(Boolean).slice(0,8),j.value=!0}catch(a){console.log(a),x.value=`Unable to search ${ie.value}.`}finally{U.value=!1}},qe=async l=>{var w,pe,ee,He;D.value=l,t.value.packageName=(l==null?void 0:l.name)||"",t.value.version="",t.value.sourceType=t.value.target==="VM"?"DOCKERHUB":"ARTIFACTHUB",O.value=[],x.value="",p.value="";const a=Pe(l);t.value.name=(l==null?void 0:l.name)||t.value.name,t.value.summary=a||(l==null?void 0:l.name)||"",t.value.description=a||(l==null?void 0:l.name)||"",t.value.logoUrlLarge=((w=l==null?void 0:l.logo_url)==null?void 0:w.large)||"",t.value.logoUrlSmall=((pe=l==null?void 0:l.logo_url)==null?void 0:pe.small)||"";const o=n((l==null?void 0:l.category)||((ee=l==null?void 0:l.categories)==null?void 0:ee[0]));r(o?[o]:[]),t.value.category=o;const k=v(l);H.value=!0;try{const{data:_e}=t.value.target==="VM"?await pa({path:(l==null?void 0:l.id)||""}):await ga({kind:"helm",repository:((He=l==null?void 0:l.repository)==null?void 0:He.name)||"",packageName:(l==null?void 0:l.name)||""});if(v(D.value)!==k)return;const Re=(Array.isArray(_e)?_e:[]).map(ae=>t.value.target==="VM"?ae==null?void 0:ae.name:ae==null?void 0:ae.version).filter(Boolean);Re.length===0&&(l!=null&&l.version)&&Re.push(l.version),O.value=Array.from(new Set(Re)).map(ae=>({key:ae,value:ae})),O.value.length===1&&(t.value.version=O.value[0].value)}catch(_e){if(console.log(_e),v(D.value)!==k)return;l!=null&&l.version?(O.value=[{key:l.version,value:l.version}],t.value.version=l.version):x.value="Unable to retrieve package versions."}finally{v(D.value)===k&&(H.value=!1)}},Ee=()=>{f.value=1,M.value="existing",_.value=!1,s(),Z.value=Y.map(l=>({key:l,value:l})),t.value={id:null,target:"VM",sourceType:"DOCKERHUB",category:"",packageName:"",version:"",packageInfo:null,helmChart:null,name:"",summary:"",description:"",logoUrlLarge:"",logoUrlSmall:"",catalogRefs:[],minCpu:0,recommendedCpu:0,minMemory:0,recommendedMemory:0,minDisk:0,recommendedDisk:0,hpaEnabled:!1,minReplicas:1,maxReplicas:10,cpuThreshold:80,memoryThreshold:80,ports:[],ingressEnabled:!1,ingressUrl:"",defaultPort:80,registeredById:null,createdAt:null,updatedAt:null},B.value=[{refId:0,refValue:"",refDesc:"",refType:"URL"}],N.value=[{targetPort:80,hostPort:8080,protocol:"TCP"}]},Ye=()=>{B.value.push({refId:0,refValue:"",refDesc:"",refType:"URL"})},We=l=>{B.value.length>1&&B.value.splice(l,1)},Je=()=>{N.value.push({targetPort:80,hostPort:8080,protocol:"TCP"})},Ze=l=>{N.value.length>1&&N.value.splice(l,1)},Ve=()=>{if(C.value){A.value=!1;const l=C.value.querySelector('[data-bs-dismiss="modal"]');if(l)l.click();else try{const a=window.bootstrap;if(a!=null&&a.Modal)(a.Modal.getInstance(C.value)||new a.Modal(C.value)).hide();else{C.value.classList.remove("show"),C.value.style.display="none",document.body.classList.remove("modal-open");const o=document.querySelector(".modal-backdrop");o==null||o.remove()}}catch(a){console.warn("Modal close failed:",a)}}},Qe=()=>[t.value.target,v(D.value),t.value.version].join("|"),Xe=async()=>{var a,o;if(M.value!=="public")return;if(!D.value)throw new Error("Select a package to import.");const l=Qe();if(p.value!==l){i.value=!0;try{const k=JSON.parse(JSON.stringify(D.value));let w;if(t.value.target==="VM"){const pe=t.value.category,ee={...k,tag:t.value.version,sourceType:"DockerHub",createdAt:k.created_at,updatedAt:k.updated_at,shortDescription:k.short_description,starCount:k.star_count,ratePlans:k.rate_plans,categories:[{name:pe,slug:pe.toLowerCase().replace(/_/g,"-")}]};delete ee.created_at,delete ee.updated_at,delete ee.short_description,delete ee.star_count,delete ee.rate_plans,w=await ka(ee)}else w=await Ca({...k,packageId:k.packageId,tag:t.value.version,version:t.value.version,category:t.value.category,sourceType:"ArtifactHub"});if(((a=w==null?void 0:w.data)==null?void 0:a.success)!==!0)throw new Error(((o=w==null?void 0:w.data)==null?void 0:o.message)||`${ie.value} import failed.`);p.value=l}finally{i.value=!1}}},ea=async()=>{if(!_.value){_.value=!0;try{await Xe(),t.value.catalogRefs=B.value.filter(l=>l.refValue.trim()),t.value.target==="K8S"&&(t.value.ports=N.value.filter(l=>l.targetPort&&l.hostPort)),t.value.target==="VM"?t.value.sourceType="DOCKERHUB":t.value.target==="K8S"&&(t.value.sourceType="ARTIFACTHUB"),await fa(t.value),R.success("Registration Success"),Ve(),K("created")}catch(l){console.log(l),R.error((l==null?void 0:l.message)||"Registration Failed")}finally{_.value=!1}}},aa=async()=>{if(!_.value){_.value=!0;try{t.value.catalogRefs=B.value.filter(l=>l.refValue.trim()),t.value.target==="K8S"&&(t.value.ports=N.value.filter(l=>l.targetPort&&l.hostPort)),t.value.target==="VM"?t.value.sourceType="DOCKERHUB":t.value.target==="K8S"&&(t.value.sourceType="ARTIFACTHUB"),await ba(t.value),R.success("Update Success"),Ve(),K("updated")}catch{R.error("Update Failed")}finally{_.value=!1}}},xe=async()=>{try{if(!S.value)return;y.value&&y.value.category&&(I.value=!0,t.value.target=y.value.packageInfo!==null?"VM":"K8S",t.value.category=y.value.category,y.value.packageInfo!==null?(t.value.packageName=y.value.packageInfo.packageName,t.value.version=y.value.packageInfo.packageVersion):y.value.helmChart!==null&&(t.value.packageName=y.value.helmChart.chartName,t.value.version=y.value.helmChart.chartVersion),I.value=!1),await la()}catch{R.error("Failed to load catalog data"),I.value=!1}},la=async()=>{try{if(!S.value)return;const{data:l}=await ya(S.value);I.value=!0,t.value={...t.value,...l,target:l.packageInfo!==null?"VM":"K8S"},l.packageInfo!==null&&(t.value.packageName=l.packageInfo.packageName,t.value.version=l.packageInfo.packageVersion),l.helmChart!==null&&(t.value.packageName=l.helmChart.chartName,t.value.version=l.helmChart.chartVersion),l.catalogRefs&&l.catalogRefs.length>0?B.value=l.catalogRefs.map(a=>({refId:a.id||0,refValue:a.refValue||"",refDesc:a.refDesc||"",refType:a.refType||"URL"})):B.value=[{refId:0,refValue:"",refDesc:"",refType:"URL"}],l.ports&&l.ports.length>0?N.value=l.ports.map(a=>({targetPort:a.targetPort||80,hostPort:a.hostPort||8080,protocol:a.protocol||"TCP"})):N.value=[{targetPort:80,hostPort:8080,protocol:"TCP"}],await be(),t.value.category&&(await Ge(),t.value.packageName&&await Oe()),I.value=!1}catch{R.error("Failed to load catalog data"),I.value=!1}},fe=l=>{!_.value&&ue.value&&(f.value=l)};he(M,async()=>{m.mode!=="new"||I.value||(t.value.category="",t.value.packageName="",t.value.version="",t.value.name="",t.value.summary="",t.value.description="",t.value.logoUrlLarge="",t.value.logoUrlSmall="",s(),M.value==="existing"?await be():(t.value.sourceType=t.value.target==="VM"?"DOCKERHUB":"ARTIFACTHUB",await h()))}),he(()=>t.value.target,async(l,a)=>{!l||I.value||l===a||(m.mode==="new"&&(t.value.category="",t.value.packageName="",t.value.version=""),Q.value?await be():(t.value.sourceType=l==="VM"?"DOCKERHUB":"ARTIFACTHUB",s(),await h()))});const Ne=c([]),be=async()=>{if(m.mode==="new"&&Q.value&&(Ne.value=[],ye.value=[],ce.value=[],t.value.category="",t.value.packageName="",t.value.version=""),t.value.target){const l={target:t.value.target==="VM"?"DOCKER":"HELM",availableOnly:m.mode==="new"},{data:a}=await De(l);Ne.value=a}};he(()=>t.value.category,l=>{l&&Q.value&&!I.value&&(m.mode==="new"&&(t.value.packageName="",t.value.version=""),Ge())});const ye=c([]),Ge=async()=>{m.mode==="new"&&Q.value&&(ye.value=[],ce.value=[],t.value.packageName="",t.value.version="");const l={target:t.value.target==="VM"?"DOCKER":"HELM",category:t.value.category||"",availableOnly:m.mode==="new"},{data:a}=await _a(l);ye.value=a};he(()=>t.value.packageName,l=>{l&&Q.value&&!I.value&&(m.mode==="new"&&(t.value.version=""),Oe())});const ce=c([]),Oe=async()=>{m.mode==="new"&&Q.value&&(ce.value=[],t.value.version="");const l={target:t.value.target==="VM"?"DOCKER":"HELM",packageName:t.value.packageName||"",availableOnly:m.mode==="new"},{data:a}=await ha(l);m.mode==="new"?a.forEach(o=>{o.isUsed||ce.value.push(o)}):ce.value=a};return se({loadCatalogDataWithCategoryInit:xe,initForCreate:()=>{Ee(),f.value=1},initForUpdate:(l,a)=>{S.value=l,y.value=a,f.value=1,xe()}}),(l,a)=>(d(),u("div",{class:"modal fade",id:"modal-wizard",tabindex:"-1",ref_key:"wizardModal",ref:C},[e("div",Da,[e("div",Ua,[e("div",$a,[e("h5",La,g(m.mode==="update"?"Application Update":"Application Registration"),1),e("button",{type:"button",class:"btn-close","data-bs-dismiss":"modal","aria-label":"Close",disabled:_.value},null,8,Pa)]),e("div",Va,[e("ul",xa,[e("li",Ga,[e("a",{class:oe(["nav-link",{active:f.value===1}]),href:"javascript:void(0);",onClick:a[0]||(a[0]=o=>fe(1))},"1. "+g(m.mode==="update"?"Package":"Source & Package"),3)]),e("li",Oa,[e("a",{class:oe(["nav-link",{active:f.value===2}]),href:"javascript:void(0);",onClick:a[1]||(a[1]=o=>fe(2))},"2. General",2)]),e("li",Ha,[e("a",{class:oe(["nav-link",{active:f.value===3}]),href:"javascript:void(0);",onClick:a[2]||(a[2]=o=>fe(3))},"3. Resource Requirements",2)]),e("li",Ba,[e("a",{class:oe(["nav-link",{active:f.value===4}]),href:"javascript:void(0);",onClick:a[3]||(a[3]=o=>fe(4))},"4. Network",2)])]),b(e("div",null,[m.mode!=="update"?(d(),u("div",Ka,[a[32]||(a[32]=e("label",{class:"form-label required"},"Registration Source",-1)),e("div",Fa,[e("div",za,[e("label",{class:oe(["source-option",{selected:M.value==="existing"}]),for:"sourceExisting"},[b(e("input",{id:"sourceExisting","onUpdate:modelValue":a[4]||(a[4]=o=>M.value=o),class:"form-check-input",type:"radio",name:"registrationSource",value:"existing",disabled:_.value},null,8,ja),[[Ce,M.value]]),a[30]||(a[30]=e("span",null,[e("strong",null,"Existing Package"),e("small",null,"Register a package already available in MCMP.")],-1))],2)]),e("div",qa,[e("label",{class:oe(["source-option",{selected:M.value==="public"}]),for:"sourcePublic"},[b(e("input",{id:"sourcePublic","onUpdate:modelValue":a[5]||(a[5]=o=>M.value=o),class:"form-check-input",type:"radio",name:"registrationSource",value:"public",disabled:_.value},null,8,Ya),[[Ce,M.value]]),a[31]||(a[31]=e("span",null,[e("strong",null,"Public Registry"),e("small",null,"Search, import, and register in one flow.")],-1))],2)])])])):$("",!0),e("div",Wa,[a[35]||(a[35]=e("label",{class:"form-label required"},"Target",-1)),e("div",Ja,[e("div",Za,[b(e("input",{class:"form-check-input",type:"radio",name:"target",value:"VM","onUpdate:modelValue":a[6]||(a[6]=o=>t.value.target=o),id:"targetVM",disabled:m.mode==="update"||_.value},null,8,Qa),[[Ce,t.value.target]]),a[33]||(a[33]=e("label",{class:"form-check-label",for:"targetVM"},"VM",-1))]),e("div",Xa,[b(e("input",{class:"form-check-input",type:"radio",name:"target",value:"K8S","onUpdate:modelValue":a[7]||(a[7]=o=>t.value.target=o),id:"targetK8S",disabled:m.mode==="update"||_.value},null,8,el),[[Ce,t.value.target]]),a[34]||(a[34]=e("label",{class:"form-check-label",for:"targetK8S"},"K8S",-1))])])]),Q.value?(d(),u(E,{key:1},[e("div",al,[a[37]||(a[37]=e("label",{class:"form-label required"},"Category",-1)),b(e("select",{class:"form-select","onUpdate:modelValue":a[8]||(a[8]=o=>t.value.category=o),disabled:m.mode==="update"},[a[36]||(a[36]=e("option",{value:""},"Select Category",-1)),(d(!0),u(E,null,G(Ne.value,o=>(d(),u("option",{value:o.value,key:o.key},g(o.value),9,tl))),128))],8,ll),[[re,t.value.category]])]),e("div",ol,[e("div",sl,[a[39]||(a[39]=e("label",{class:"form-label required"},"Package",-1)),b(e("select",{class:"form-select","onUpdate:modelValue":a[9]||(a[9]=o=>t.value.packageName=o),disabled:m.mode==="update"},[a[38]||(a[38]=e("option",{value:""},"Select Package",-1)),(d(!0),u(E,null,G(ye.value,o=>(d(),u("option",{value:o.value,key:o.key},g(o.value),9,il))),128))],8,nl),[[re,t.value.packageName]])]),e("div",rl,[a[41]||(a[41]=e("label",{class:"form-label required"},"Version",-1)),b(e("select",{class:"form-select","onUpdate:modelValue":a[10]||(a[10]=o=>t.value.version=o),disabled:m.mode==="update"},[a[40]||(a[40]=e("option",{value:""},"Select Version",-1)),(d(!0),u(E,null,G(ce.value,o=>(d(),u("option",{value:o.value,key:o.key},g(o.value),9,ul))),128))],8,dl),[[re,t.value.version]])])])],64)):(d(),u(E,{key:2},[e("div",cl,[e("strong",null,g(ie.value),1),a[42]||(a[42]=ve(" will be searched for the selected target. The package is imported only when you complete registration. "))]),e("form",{class:"mb-3",onSubmit:we(je,["prevent"])},[e("label",vl,"Search "+g(ie.value),1),e("div",ml,[b(e("input",{id:"registrySearchInput","onUpdate:modelValue":a[11]||(a[11]=o=>J.value=o),type:"search",class:"form-control",placeholder:Ae.value,disabled:U.value||_.value},null,8,pl),[[T,J.value]]),e("button",{class:"btn btn-outline-primary",type:"submit",disabled:U.value||_.value},g(U.value?"Searching...":"Search"),9,gl)]),x.value?(d(),u("div",fl,g(x.value),1)):$("",!0)],32),U.value?(d(),u("div",bl,"Searching "+g(ie.value)+"...",1)):j.value&&V.value.length===0?(d(),u("div",yl," No matching packages found. ")):V.value.length>0?(d(),u("div",_l,[(d(!0),u(E,null,G(V.value,(o,k)=>(d(),u("button",{key:v(o,k),type:"button",class:oe(["list-group-item list-group-item-action",{active:P(o)}]),disabled:H.value||_.value,onClick:w=>qe(o)},[e("div",kl,[X(o)?(d(),u("img",{key:0,src:X(o),class:"rounded registry-logo",alt:"",width:"40",height:"40"},null,8,Cl)):$("",!0),e("div",wl,[e("div",Il,g((o==null?void 0:o.name)||(o==null?void 0:o.packageId)||"Unnamed package"),1),e("div",Sl,g(ze(Pe(o),120)),1)])])],10,hl))),128))])):$("",!0),D.value?(d(),u("div",Al,[e("div",Ml,[a[43]||(a[43]=e("label",{class:"form-label required"},"Version",-1)),b(e("select",{class:"form-select","onUpdate:modelValue":a[12]||(a[12]=o=>t.value.version=o),disabled:H.value||_.value},[e("option",El,g(H.value?"Loading versions...":"Select Version"),1),(d(!0),u(E,null,G(O.value,o=>(d(),u("option",{value:o.value,key:o.key},g(o.value),9,Nl))),128))],8,Tl),[[re,t.value.version]])]),e("div",Rl,[a[45]||(a[45]=e("label",{class:"form-label required"},"Category",-1)),b(e("select",{class:"form-select","onUpdate:modelValue":a[13]||(a[13]=o=>t.value.category=o),disabled:_.value},[a[44]||(a[44]=e("option",{value:""},"Select Category",-1)),(d(!0),u(E,null,G(Z.value,o=>(d(),u("option",{value:o.value,key:o.key},g(o.value),9,Ul))),128))],8,Dl),[[re,t.value.category]])])])):$("",!0)],64))],512),[[ke,f.value===1]]),b(e("div",null,[e("div",$l,[a[46]||(a[46]=e("label",{class:"form-label required"},"Application Name",-1)),b(e("input",{type:"text",class:"form-control","onUpdate:modelValue":a[14]||(a[14]=o=>t.value.name=o),placeholder:"Application name"},null,512),[[T,t.value.name]])]),e("div",Ll,[a[47]||(a[47]=e("label",{class:"form-label required"},"Summary",-1)),b(e("input",{type:"text",class:"form-control","onUpdate:modelValue":a[15]||(a[15]=o=>t.value.summary=o),placeholder:"Application summary"},null,512),[[T,t.value.summary]])]),e("div",Pl,[a[48]||(a[48]=e("label",{class:"form-label required"},"Description",-1)),b(e("textarea",{class:"form-control",rows:"4","onUpdate:modelValue":a[16]||(a[16]=o=>t.value.description=o),placeholder:"Application description"},null,512),[[T,t.value.description]])]),e("div",Vl,[a[50]||(a[50]=e("label",{class:"form-label"},"Reference",-1)),(d(!0),u(E,null,G(B.value,(o,k)=>(d(),u("div",{class:"row g-2 mb-2",key:k},[e("div",xl,[b(e("select",{class:"form-select","onUpdate:modelValue":w=>o.refType=w},a[49]||(a[49]=[oa('',6)]),8,Gl),[[re,o.refType]])]),e("div",Ol,[b(e("input",{type:"text",class:"form-control","onUpdate:modelValue":w=>o.refValue=w,placeholder:"Ref Value"},null,8,Hl),[[T,o.refValue]])]),e("div",Bl,[e("button",{type:"button",class:"btn btn-outline-danger btn-sm w-100 cursor-pointer",onClick:w=>We(k),disabled:B.value.length<=1},"-",8,Kl)])]))),128)),e("div",{class:"form-text cursor-pointer",onClick:Ye,style:{color:"gray"}},"+ Add Reference")])],512),[[ke,f.value===2]]),b(e("div",null,[e("div",Fl,[e("div",zl,[a[55]||(a[55]=e("label",{class:"form-label"},"CPU",-1)),e("div",jl,[e("div",ql,[a[52]||(a[52]=e("label",{class:"form-label text-muted small"},"Minimum",-1)),e("div",Yl,[b(e("input",{type:"number",min:"0",step:"0.1",class:"form-control","onUpdate:modelValue":a[17]||(a[17]=o=>t.value.minCpu=o),placeholder:"1"},null,512),[[T,t.value.minCpu,void 0,{number:!0}]]),a[51]||(a[51]=e("span",{class:"input-group-text"},"Cores",-1))])]),e("div",Wl,[a[54]||(a[54]=e("label",{class:"form-label text-muted small"},"Recommended",-1)),e("div",Jl,[b(e("input",{type:"number",min:"0",step:"0.1",class:"form-control","onUpdate:modelValue":a[18]||(a[18]=o=>t.value.recommendedCpu=o),placeholder:"2"},null,512),[[T,t.value.recommendedCpu,void 0,{number:!0}]]),a[53]||(a[53]=e("span",{class:"input-group-text"},"Cores",-1))])])])])]),e("div",Zl,[e("div",Ql,[a[60]||(a[60]=e("label",{class:"form-label"},"Memory",-1)),e("div",Xl,[e("div",et,[a[57]||(a[57]=e("label",{class:"form-label text-muted small"},"Minimum",-1)),e("div",at,[b(e("input",{type:"number",min:"0",step:"0.1",class:"form-control","onUpdate:modelValue":a[19]||(a[19]=o=>t.value.minMemory=o),placeholder:"4"},null,512),[[T,t.value.minMemory,void 0,{number:!0}]]),a[56]||(a[56]=e("span",{class:"input-group-text"},"GB",-1))])]),e("div",lt,[a[59]||(a[59]=e("label",{class:"form-label text-muted small"},"Recommended",-1)),e("div",tt,[b(e("input",{type:"number",min:"0",step:"0.1",class:"form-control","onUpdate:modelValue":a[20]||(a[20]=o=>t.value.recommendedMemory=o),placeholder:"8"},null,512),[[T,t.value.recommendedMemory,void 0,{number:!0}]]),a[58]||(a[58]=e("span",{class:"input-group-text"},"GB",-1))])])])])]),e("div",ot,[e("div",st,[a[65]||(a[65]=e("label",{class:"form-label"},"Storage",-1)),e("div",nt,[e("div",it,[a[62]||(a[62]=e("label",{class:"form-label text-muted small"},"Minimum",-1)),e("div",rt,[b(e("input",{type:"number",min:"0",class:"form-control","onUpdate:modelValue":a[21]||(a[21]=o=>t.value.minDisk=o),placeholder:"10"},null,512),[[T,t.value.minDisk,void 0,{number:!0}]]),a[61]||(a[61]=e("span",{class:"input-group-text"},"GB",-1))])]),e("div",dt,[a[64]||(a[64]=e("label",{class:"form-label text-muted small"},"Recommended",-1)),e("div",ut,[b(e("input",{type:"number",min:"0",class:"form-control","onUpdate:modelValue":a[22]||(a[22]=o=>t.value.recommendedDisk=o),placeholder:"20"},null,512),[[T,t.value.recommendedDisk,void 0,{number:!0}]]),a[63]||(a[63]=e("span",{class:"input-group-text"},"GB",-1))])])])])]),t.value.target==="K8S"?(d(),u("div",ct,[e("div",vt,[e("div",mt,[a[66]||(a[66]=e("label",{class:"form-check-label me-2"},"K8S HPA",-1)),e("div",pt,[b(e("input",{class:"form-check-input",type:"checkbox","onUpdate:modelValue":a[23]||(a[23]=o=>t.value.hpaEnabled=o)},null,512),[[sa,t.value.hpaEnabled]])])]),e("div",gt,[e("div",ft,[a[67]||(a[67]=e("label",{class:"form-label"},"minReplicas",-1)),b(e("input",{type:"number",min:"1",class:"form-control","onUpdate:modelValue":a[24]||(a[24]=o=>t.value.minReplicas=o),disabled:!t.value.hpaEnabled,placeholder:"1"},null,8,bt),[[T,t.value.minReplicas,void 0,{number:!0}]])]),e("div",yt,[a[68]||(a[68]=e("label",{class:"form-label"},"maxReplicas",-1)),b(e("input",{type:"number",min:"1",class:"form-control","onUpdate:modelValue":a[25]||(a[25]=o=>t.value.maxReplicas=o),disabled:!t.value.hpaEnabled,placeholder:"10"},null,8,_t),[[T,t.value.maxReplicas,void 0,{number:!0}]])]),e("div",ht,[a[69]||(a[69]=e("label",{class:"form-label"},"CPU (%)",-1)),b(e("input",{type:"number",min:"1",max:"100",class:"form-control","onUpdate:modelValue":a[26]||(a[26]=o=>t.value.cpuThreshold=o),disabled:!t.value.hpaEnabled,placeholder:"80"},null,8,kt),[[T,t.value.cpuThreshold,void 0,{number:!0}]])]),e("div",Ct,[a[70]||(a[70]=e("label",{class:"form-label"},"Memory (%)",-1)),b(e("input",{type:"number",min:"1",max:"100",class:"form-control","onUpdate:modelValue":a[27]||(a[27]=o=>t.value.memoryThreshold=o),disabled:!t.value.hpaEnabled,placeholder:"80"},null,8,wt),[[T,t.value.memoryThreshold,void 0,{number:!0}]])])])])])):$("",!0)],512),[[ke,f.value===3]]),b(e("div",null,[t.value.target==="VM"?(d(),u("div",It,[e("div",St,[a[72]||(a[72]=e("div",{class:"card-header"},[e("h6",{class:"card-title"},"Port Mapping")],-1)),e("div",At,[e("div",Mt,[a[71]||(a[71]=e("label",{class:"form-label"},"Port",-1)),b(e("input",{type:"number",min:"1",max:"65535",class:"form-control","onUpdate:modelValue":a[28]||(a[28]=o=>t.value.defaultPort=o),placeholder:"80"},null,512),[[T,t.value.defaultPort,void 0,{number:!0}]])])])])])):$("",!0),t.value.target==="K8S"?(d(),u("div",Tt,[e("div",Et,[a[78]||(a[78]=e("div",{class:"card-header"},[e("h6",{class:"card-title"},"Port Mapping")],-1)),e("div",Nt,[e("div",Rt,[a[77]||(a[77]=e("label",{class:"form-label"},"Port",-1)),(d(!0),u(E,null,G(N.value,(o,k)=>(d(),u("div",{class:"row g-2 mb-2",key:k},[e("div",Dt,[a[73]||(a[73]=e("label",{class:"form-label small"},"Target Port",-1)),b(e("input",{type:"number",min:"1",max:"65535",class:"form-control","onUpdate:modelValue":w=>o.targetPort=w,placeholder:"80"},null,8,Ut),[[T,o.targetPort,void 0,{number:!0}]])]),e("div",$t,[a[75]||(a[75]=e("label",{class:"form-label small"},"Protocol",-1)),b(e("select",{class:"form-select","onUpdate:modelValue":w=>o.protocol=w},a[74]||(a[74]=[e("option",{value:"TCP"},"TCP",-1),e("option",{value:"UDP"},"UDP",-1),e("option",{value:"SCTP"},"SCTP",-1)]),8,Lt),[[re,o.protocol]])]),e("div",Pt,[a[76]||(a[76]=e("label",{class:"form-label small"},"Host Port",-1)),b(e("input",{type:"number",min:"1",max:"65535",class:"form-control","onUpdate:modelValue":w=>o.hostPort=w,placeholder:"8080"},null,8,Vt),[[T,o.hostPort,void 0,{number:!0}]])]),e("div",xt,[e("button",{type:"button",class:"btn btn-outline-danger btn-sm w-100 cursor-pointer",onClick:w=>Ze(k),disabled:N.value.length<=1},"-",8,Gt)])]))),128)),e("div",{class:"form-text cursor-pointer",onClick:Je,style:{color:"gray"}},"+ Add Port Mapping")])])])])):$("",!0)],512),[[ke,f.value===4]])]),e("div",Ot,[e("button",{type:"button",class:"btn btn-link link-secondary","data-bs-dismiss":"modal",disabled:_.value,onClick:Ee}," Cancel ",8,Ht),e("div",Bt,[e("button",{class:"btn btn-outline-secondary",disabled:f.value===1||_.value,onClick:Te},"Prev",8,Kt),f.value<4?(d(),u("button",{key:0,class:"btn btn-primary",disabled:!ue.value||_.value,onClick:Me},"Next",8,Ft)):(d(),u("button",{key:1,class:"btn btn-primary",disabled:!ue.value||_.value,onClick:a[29]||(a[29]=o=>m.mode==="update"?aa():ea())},g(ge.value),9,zt))])])])])],512))}}),qt=Sa(jt,[["__scopeId","data-v-bd745d1f"]]),Yt={class:"modal-dialog",role:"document"},Wt={class:"modal-content"},Jt={class:"modal-body"},Zt={key:0,class:"text-muted"},Qt={key:1,class:"alert alert-warning mb-0"},Xt={key:2,class:"alert alert-warning mb-0"},eo={class:"mb-0 mt-2 ps-3"},ao={key:0,class:"mt-1"},lo={key:3,class:"text-muted"},to={class:"modal-footer"},oo=["disabled"],so=["disabled"],no={key:0,class:"spinner-border spinner-border-sm me-2",role:"status"},io=Ie({__name:"DeleteConfirmModal",props:{targetCatalog:{}},emits:["deleted","close"],setup(me,{expose:se,emit:le}){const m=me,K=le,R=$e(),f=c(!1),I=c(!1),A=c(!1),S=c([]),y=c(null),Y=new Set(["UNINSTALLED","DELETED","DELETE_COMPLETED"]),L=q(()=>S.value.length>0),W=q(()=>S.value.slice(0,3)),M=q(()=>Math.max(S.value.length-W.value.length,0)),J=q(()=>f.value||I.value||A.value||L.value),V=async()=>{if(await Ue(),x(),y.value)try{const i=window.bootstrap;if(i&&i.Modal)new i.Modal(y.value).show();else{y.value.classList.add("show"),y.value.style.display="block",document.body.classList.add("modal-open");const p=document.createElement("div");p.className="modal-backdrop fade show",p.id="delete-modal-backdrop",document.body.appendChild(p)}}catch(i){console.warn("Failed to show modal with Bootstrap, using fallback:",i),y.value.classList.add("show"),y.value.style.display="block",document.body.classList.add("modal-open")}},U=()=>{if(y.value)try{const i=window.bootstrap;if(i&&i.Modal){const p=i.Modal.getInstance(y.value);p?p.hide():j()}else j()}catch(i){console.warn("Failed to hide modal with Bootstrap, using fallback:",i),j()}},j=()=>{if(y.value){y.value.classList.remove("show"),y.value.style.display="none",document.body.classList.remove("modal-open");const i=document.getElementById("delete-modal-backdrop");i&&i.remove(),K("close")}},x=async()=>{var i;if(S.value=[],A.value=!1,!!((i=m.targetCatalog)!=null&&i.id)){I.value=!0;try{const{data:p}=await Fe(m.targetCatalog.id),C=Array.isArray(p==null?void 0:p.applicationStatuses)?p.applicationStatuses:[];S.value=C.filter(D).map(O)}catch(p){console.log(p),A.value=!0}finally{I.value=!1}}},D=i=>{const p=H((i==null?void 0:i.status)||(i==null?void 0:i.podStatus));return!Y.has(p)},O=(i,p)=>{const C=[i==null?void 0:i.namespace,i==null?void 0:i.mciId,(i==null?void 0:i.vmId)||(i==null?void 0:i.clusterName)].filter(Boolean).join(" / "),de=(i==null?void 0:i.deploymentType)||"Deployment",F=Ke((i==null?void 0:i.status)||(i==null?void 0:i.podStatus));return{key:(i==null?void 0:i.id)||`${de}-${C}-${p}`,label:`${de}${C?` - ${C}`:""} (${F})`}},H=i=>String(i||"").trim().toUpperCase(),Z=async()=>{var i;if((i=m.targetCatalog)!=null&&i.id){if(J.value){L.value&&R.warning("This catalog has deployed applications. Please delete them first.");return}f.value=!0;try{await wa(m.targetCatalog.id),R.success(`${m.targetCatalog.name} catalog has been successfully deleted.`),U(),K("deleted",m.targetCatalog.id)}catch(p){console.error("Delete failed:",p),R.error("Failed to delete catalog.")}finally{f.value=!1}}},_=()=>{K("close")};return Le(()=>{y.value&&y.value.addEventListener("hidden.bs.modal",_)}),Be(()=>{y.value&&y.value.removeEventListener("hidden.bs.modal",_)}),se({show:V,hide:U}),(i,p)=>(d(),u("div",{class:"modal fade",id:"deleteConfirmModal",tabindex:"-1",ref_key:"deleteModal",ref:y,onClick:we(U,["self"])},[e("div",Yt,[e("div",Wt,[e("div",{class:"modal-header"},[p[0]||(p[0]=e("h5",{class:"modal-title"},"Confirm Catalog Deletion",-1)),e("button",{type:"button",class:"btn-close",onClick:U,"aria-label":"Close"})]),e("div",Jt,[e("p",null,[p[1]||(p[1]=ve("Are you sure you want to delete ")),e("strong",null,g(i.targetCatalog.name),1),ve(" ("+g(i.targetCatalog.category)+") catalog?",1)]),I.value?(d(),u("div",Zt,p[2]||(p[2]=[e("span",{class:"spinner-border spinner-border-sm me-2",role:"status"},null,-1),ve(" Checking deployed applications... ")]))):A.value?(d(),u("div",Qt," Unable to verify deployed applications. Try again before deleting this catalog. ")):L.value?(d(),u("div",Xt,[p[3]||(p[3]=e("div",{class:"fw-semibold"},"This catalog has deployed applications.",-1)),p[4]||(p[4]=e("div",null,"Please delete the deployed applications first.",-1)),e("ul",eo,[(d(!0),u(E,null,G(W.value,C=>(d(),u("li",{key:C.key},g(C.label),1))),128))]),M.value>0?(d(),u("div",ao," and "+g(M.value)+" more... ",1)):$("",!0)])):(d(),u("p",lo,"This action cannot be undone."))]),e("div",to,[A.value?(d(),u("button",{key:0,type:"button",class:"btn btn-outline-secondary",disabled:I.value,onClick:x}," Retry ",8,oo)):$("",!0),e("button",{type:"button",class:"btn btn-secondary",onClick:U},"Cancel"),e("button",{type:"button",class:"btn btn-danger",onClick:Z,disabled:J.value},[f.value?(d(),u("span",no)):$("",!0),ve(" "+g(f.value?"Deleting...":"Delete"),1)],8,so)])])])],512))}}),ro={ref:"sofwareCatalog"},uo={class:"row"},co={class:"col-lg-12"},vo={class:"card"},mo={class:"list-group card-list-group",id:"sc-list-group"},po={class:"row g-2 align-items-center"},go={class:"col-auto me-3"},fo=["src","onError"],bo={key:1,class:"rounded catalog-icon-fallback d-flex align-items-center justify-content-center"},yo=["onClick"],_o={class:"text-muted"},ho=["onClick"],ko={class:"text-muted",style:{width:"auto","text-align":"right"}},Co={style:{color:"#e5b942"}},wo={style:{color:"#e5b942"}},Io={class:"text-muted",style:{width:"80px","text-align":"right"}},So={style:{color:"gray"}},Ao={class:"col-3 text-muted"},Mo={class:"d-flex justify-content-end"},To={class:"mouse-hover"},Eo=["onClick"],No={class:"text-muted"},Ro=["id"],Do={class:"accordion-body pt-0"},Uo=["innerHTML"],$o=["id"],Lo=["onClick"],Po=["id"],Vo=["id"],xo={class:"btn btn-sm",style:{"margin-right":"5px"}},Go={class:"btn btn-sm",style:{"margin-right":"5px"}},Oo={class:"btn btn-sm",style:{"margin-right":"5px"}},Ho={class:"mt-4"},Bo={class:"d-flex justify-content-between align-items-center mb-2"},Ko=["disabled","onClick"],Fo={key:0,class:"text-center text-muted py-3"},zo={key:1,class:"table-responsive"},jo={class:"table table-sm table-vcenter"},qo={key:0},Yo={class:"text-end"},Wo=["disabled","onClick"],Jo=Ie({__name:"softwareCatalogList",setup(me,{expose:se}){const le=$e(),m=c([]),K=c(null),R=c(null),f=c({}),I=c("new"),A=c({}),S=c(""),y=c({}),Y=c(null),L=c(null),W=c(0),M=c(null);Le(async()=>{V()}),se({startRegistration:()=>{I.value="new",R.value=null,f.value={},K.value=0,A.value={},S.value="",setTimeout(()=>{L.value&&typeof L.value.initForCreate=="function"&&L.value.initForCreate()},100)}});const V=async()=>{try{await Ia("").then(({data:s})=>{Aa.forEach(s,function(n){n.refData=U(n.catalogRefs),n.isShow=!1,n.deploymentStatuses=[],n.deploymentStatusLoaded=!1,n.deploymentStatusLoading=!1,n.resolvedLogoUrl=ue(n),n.logoLoadFailed=!1}),m.value=s})}catch(s){console.log(s),le.error("Unable to retrieve data.")}},U=s=>s.reduce((n,r)=>(n[r.refType]||(n[r.refType]=[]),n[r.refType].push(r),n),{}),j=s=>{const n=m.value.find(r=>r.id===s);R.value=s,f.value=n||{},I.value="update",setTimeout(()=>{L.value&&typeof L.value.initForUpdate=="function"&&L.value.initForUpdate(s,n)},100)},x=s=>{y.value=s,Y.value&&Y.value.show()},D=async()=>{await V()},O=()=>{y.value={}},H=async s=>{const n=m.value[s];n.isShow=!n.isShow,n.isShow&&!n.deploymentStatusLoaded&&await Z(n)},Z=async s=>{if(s!=null&&s.id){s.deploymentStatusLoading=!0;try{const{data:n}=await Fe(s.id);s.deploymentStatuses=_(n),s.deploymentStatusLoaded=!0}catch(n){console.log(n),s.deploymentStatuses=[],le.error("Unable to retrieve deployment status.")}finally{s.deploymentStatusLoading=!1}}},_=s=>{const n=Array.isArray(s==null?void 0:s.deploymentHistories)?s.deploymentHistories:[];return(Array.isArray(s==null?void 0:s.applicationStatuses)?s.applicationStatuses:[]).map((h,v)=>{const P=i(h,n);return p(P,h,`status-${h.id||v}`)})},i=(s,n)=>{if(!s)return null;const r=n.find(h=>s.deploymentHistoryId&&String(s.deploymentHistoryId)===String(h.id));return r||n.find(h=>ne(s.deploymentType,h.deploymentType)&&ne(s.namespace,h.namespace)&&(ne(s.vmId,h.vmId)||ne(s.clusterName,h.clusterName)))},p=(s,n,r)=>({rowKey:r,deploymentId:(n==null?void 0:n.deploymentHistoryId)||(s==null?void 0:s.id)||null,deploymentType:F((n==null?void 0:n.deploymentType)||(s==null?void 0:s.deploymentType)),target:F(C(s,n)),csp:F(s==null?void 0:s.cloudProvider),status:F((n==null?void 0:n.status)||(n==null?void 0:n.podStatus)),ipOrEndpoint:F(de(s,n)),lastCheckedOrDeployedAt:F(t(n==null?void 0:n.checkedAt))}),C=(s,n)=>{const r=(n==null?void 0:n.deploymentType)||(s==null?void 0:s.deploymentType),h=(n==null?void 0:n.namespace)||(s==null?void 0:s.namespace),v=(n==null?void 0:n.mciId)||(s==null?void 0:s.mciId),P=(n==null?void 0:n.vmId)||(s==null?void 0:s.vmId),X=(n==null?void 0:n.clusterName)||(s==null?void 0:s.clusterName);return r==="VM"?[h,v,P].filter(Boolean).join(" / "):r==="K8S"?[h,X].filter(Boolean).join(" / "):[h,v,P,X].filter(Boolean).join(" / ")},de=(s,n)=>{var X;const r=(n==null?void 0:n.publicIp)||(s==null?void 0:s.publicIp),h=(n==null?void 0:n.servicePort)||(s==null?void 0:s.servicePort),v=s==null?void 0:s.ingressHost,P=s==null?void 0:s.ingressPath;return(X=s==null?void 0:s.releaseName)!=null&&X.startsWith("mcmp-jupyter-")&&v?`http://${v}:30880/`:r&&h?`${r}:${h}`:r||(v&&P?`${v}${P}`:v||"")},F=s=>s==null||s===""?"-":s,ne=(s,n)=>!s||!n?!1:String(s)===String(n),t=s=>{if(!s)return"";const n=new Date(s);return Number.isNaN(n.getTime())?s:n.toLocaleString("ko-KR",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1})},B=s=>{if(!s)return;W.value=s;const n=document.getElementById("application-detail-modal");if(n)try{window.bootstrap&&window.bootstrap.Modal?new window.bootstrap.Modal(n).show():(n.style.display="block",n.classList.add("show"),document.body.classList.add("modal-open")),setTimeout(()=>{M.value&&M.value.refreshData(W.value)},100)}catch(r){console.error("Error opening detail modal:",r)}},N=(s,n)=>Object.prototype.hasOwnProperty.call(s,n),Q=s=>{window.open(s)},ie={"apache tomcat":"/catalog-icons/apache-tomcat.png",redis:"/catalog-icons/redis.svg",nginx:"/catalog-icons/nginx.svg","apache http server":"/catalog-icons/apache-http-server.svg","nexus repository":"/catalog-icons/nexus-repository.svg",mariadb:"/catalog-icons/mariadb.svg",grafana:"/catalog-icons/grafana.svg",prometheus:"/catalog-icons/prometheus.svg",elasticsearch:"/catalog-icons/elasticsearch.svg"},Ae=s=>String(s||"").trim().toLowerCase(),ge=s=>ie[Ae(s==null?void 0:s.name)]||"",ue=s=>ge(s)||(s==null?void 0:s.logoUrlLarge)||(s==null?void 0:s.logoUrlSmall)||"",Me=s=>{const n=ge(s);if(n&&s.resolvedLogoUrl!==n){s.resolvedLogoUrl=n,s.logoLoadFailed=!1;return}s.logoLoadFailed=!0},Te=s=>s.replace(/\\n|\n/g,"
");return(s,n)=>(d(),u(E,null,[e("div",ro,[e("div",uo,[e("div",co,[e("div",vo,[e("div",mo,[(d(!0),u(E,null,G(m.value,(r,h)=>(d(),u("div",{class:"list-group-item pe-1",key:h},[e("div",po,[e("div",go,[r.resolvedLogoUrl&&!r.logoLoadFailed?(d(),u("img",{key:0,src:r.resolvedLogoUrl,class:"rounded catalog-icon",alt:"Catalog Icon",width:"40",height:"40",onError:v=>Me(r)},null,40,fo)):(d(),u("div",bo,[z(te(ra),{class:"icon",size:"22","stroke-width":"1.75"})]))]),e("div",{class:"col-5",onClick:v=>H(h)},[ve(g(r.name)+" ",1),e("div",_o,g(r.summary),1)],8,yo),e("div",{class:"col-3 d-flex justify-content-end",onClick:v=>H(h)},[e("span",ko,[z(te(Ra),{class:"icon me-1",width:"12",height:"12","stroke-width":"1",color:"#e5b942"}),e("span",Co,g(r.averageRating||0),1),e("span",wo," ("+g(r.ratingCount||0)+") ",1)]),e("span",Io,[z(te(Ta),{class:"icon me-1",width:"12",height:"12","stroke-width":"1",color:"gray"}),e("span",So,g(r.downloadCount||0),1)])],8,ho),e("div",Ao,[e("div",Mo,[e("div",To,[z(te(Ea),{class:"me-2 cursor-pointer",size:"15","stroke-width":"2","data-bs-toggle":"modal","data-bs-target":"#modal-wizard",onClick:v=>j(r.id)},null,8,["onClick"]),z(te(Na),{class:"cursor-pointer",size:"15","stroke-width":"2",onClick:v=>x(r)},null,8,["onClick"])])]),e("div",{class:"d-flex justify-content-end",onClick:v=>H(h)},[e("span",No,g(r.category.length>25?r.category.substring(0,25)+"...":r.category),1)],8,Eo)]),e("div",{id:"accordion_"+r.id,class:"accordion-collapse collapse",style:na([r.isShow?{display:"block"}:{display:"none"}])},[e("div",Do,[e("div",{class:"mt-3 mb-5",innerHTML:Te(r.description)},null,8,Uo),e("div",null,[n[3]||(n[3]=e("strong",null,"Ref Information",-1)),e("ul",{id:`${h}-entity-ul`},[N(r.refData,"HOMEPAGE")?(d(!0),u(E,{key:0},G(r.refData.HOMEPAGE,(v,P)=>(d(),u("li",{key:P},[e("a",{class:"btn",onClick:X=>Q(v.refValue)},g(v.refValue),9,Lo)]))),128)):$("",!0)],8,$o),n[4]||(n[4]=e("strong",null,"TAGS",-1)),e("ul",{id:`${h}-tag-ul`},[N(r.refData,"TAG")?(d(!0),u(E,{key:0},G(r.refData.TAG,(v,P)=>(d(),u("span",{key:P},"#"+g(v.refValue)+"  ",1))),128)):$("",!0)],8,Po),n[5]||(n[5]=e("strong",null,"Recommended Spec",-1)),e("ul",{id:`${h}-tag-ul`},[r.recommendedCpu&&r.recommendedMemory&&r.recommendedDisk?(d(),u(E,{key:0},[e("button",xo," CPU : "+g(r.recommendedCpu)+" Core ",1),e("button",Go," MEMORY : "+g(r.recommendedMemory)+" GB ",1),e("button",Oo," DISK : "+g(r.recommendedDisk)+" GB ",1)],64)):$("",!0)],8,Vo),e("div",Ho,[e("div",Bo,[n[0]||(n[0]=e("strong",null,"Deployment Status",-1)),e("button",{type:"button",class:"btn btn-sm btn-icon btn-ghost-secondary",title:"Refresh deployment status","aria-label":"Refresh deployment status",disabled:r.deploymentStatusLoading,onClick:we(v=>Z(r),["stop"])},[z(te(da),{class:"icon",size:"18","stroke-width":"1.75"})],8,Ko)]),r.deploymentStatusLoading?(d(),u("div",Fo," Loading deployment status... ")):(d(),u("div",zo,[e("table",jo,[n[2]||(n[2]=e("thead",null,[e("tr",null,[e("th",null,"Type"),e("th",null,"Target"),e("th",null,"CSP"),e("th",null,"Status"),e("th",null,"IP/Endpoint"),e("th",null,"Last Checked"),e("th",{class:"text-end"},"Detail")])],-1)),e("tbody",null,[r.deploymentStatuses.length===0?(d(),u("tr",qo,n[1]||(n[1]=[e("td",{colspan:"7",class:"text-center text-muted"}," No deployment status available ",-1)]))):$("",!0),(d(!0),u(E,null,G(r.deploymentStatuses,v=>(d(),u("tr",{key:v.rowKey},[e("td",null,g(v.deploymentType),1),e("td",null,g(v.target),1),e("td",null,g(v.csp),1),e("td",null,[e("span",{class:oe(te(ua)(v.status))},g(te(Ke)(v.status)),3)]),e("td",null,g(v.ipOrEndpoint),1),e("td",null,g(v.lastCheckedOrDeployedAt),1),e("td",Yo,[e("button",{type:"button",class:"btn btn-outline-primary",disabled:!v.deploymentId,onClick:we(P=>B(v.deploymentId),["stop"])}," Detail ",8,Wo)])]))),128))])])]))])])])],12,Ro)])]))),128))])])])])],512),z(io,{ref_key:"deleteConfirmModal",ref:Y,"target-catalog":y.value,onDeleted:D,onClose:O},null,8,["target-catalog"]),z(qt,{ref_key:"wizardModal",ref:L,mode:I.value,onCreated:V,onUpdated:V},null,8,["mode"]),z(ca,{ref_key:"applicationDetailModalRef",ref:M,"deployment-id":W.value},null,8,["deployment-id"])],64))}}),Zo={class:"page",ref:"sofwareCatalog"},Qo={class:"page-wrapper"},Xo={class:"page-header d-print-none"},es={class:"container-xxl"},as={class:"row g-2 align-items-center"},ls={class:"col-auto ms-auto"},ts={class:"btn-list"},os={class:"page-body"},ss={class:"container-xxl"},ns={class:"row"},is={class:"col-lg-12"},_s=Ie({__name:"SoftwareCatalog",setup(me){const se=ia(),le=q(()=>se.getNsId()||""),m=c(""),K=c(null),R=A=>{const S=document.getElementById(A);S&&Ma.getOrCreateInstance(S).show()},f=async A=>{m.value=A,await Ue(),R("install-form")},I=async()=>{var A;(A=K.value)==null||A.startRegistration(),await Ue(),R("modal-wizard")};return(A,S)=>(d(),u(E,null,[e("div",Zo,[e("div",Qo,[e("div",Xo,[e("div",es,[e("div",as,[S[1]||(S[1]=e("div",{class:"col d-flex"},[e("h2",{class:"page-title"},"Software Catalog")],-1)),e("div",ls,[e("div",ts,[e("button",{type:"button",class:"btn btn-outline-primary page-header-action-btn",onClick:I}," Register "),e("button",{type:"button",class:"btn btn-primary page-header-action-btn",onClick:S[0]||(S[0]=y=>f("Application Installation"))}," Deploy ")])])])])]),e("div",os,[e("div",ss,[e("div",ns,[e("div",is,[z(Jo,{ref_key:"softwareCatalogListRef",ref:K},null,512)])])])])])],512),z(ta,{"ns-id":le.value,title:m.value},null,8,["ns-id","title"])],64))}});export{_s as default}; diff --git a/src/main/resources/static/assets/SoftwareCatalogListTest-C-sMMqkM.js b/src/main/resources/static/assets/SoftwareCatalogListTest-C-sMMqkM.js new file mode 100644 index 00000000..73ebf3f5 --- /dev/null +++ b/src/main/resources/static/assets/SoftwareCatalogListTest-C-sMMqkM.js @@ -0,0 +1,11 @@ +import{I as B}from"./IconPlus-CFf7AFLH.js";import{c as L}from"./createVueComponent-l3sgX4hZ.js";import{d as D,g as I,o as l,c as n,a as t,t as _,r as c,h as M,i as N,D as j,b as w,u as T,F as x,k as S,m as $,f as A,e as E}from"./index-DKle5_5b.js";import{e as P,x as O,m as U}from"./softwareCatalog-DbmZz9hR.js";import{_ as G}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{_ as V}from"./lodash-pZBD3XEw.js";import{A as H}from"./applicationInstallationForm-C5Vcb2Aw.js";import"./request-DSShymva.js";/** + * @license @tabler/icons-vue v3.22.0 - MIT + * + * This source code is licensed under the MIT license. + * See the LICENSE file in the root directory of this source tree. + */var z=L("outline","dots","IconDots",[["path",{d:"M5 12m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0",key:"svg-0"}],["path",{d:"M12 12m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0",key:"svg-1"}],["path",{d:"M19 12m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0",key:"svg-2"}]]);/** + * @license @tabler/icons-vue v3.22.0 - MIT + * + * This source code is licensed under the MIT license. + * See the LICENSE file in the root directory of this source tree. + */var F=L("outline","search","IconSearch",[["path",{d:"M10 10m-7 0a7 7 0 1 0 14 0a7 7 0 1 0 -14 0",key:"svg-0"}],["path",{d:"M21 21l-6 -6",key:"svg-1"}]]);const K={class:"card mb-3"},J={class:"grid"},Y={class:"g-col-5"},q=["src"],Q={class:"col-auto text-muted",style:{"align-items":"center"}},W={class:"col g-col-7"},X={class:"text-muted mt-3",style:{height:"50px"}},Z=D({__name:"softwareCatalogCard",props:{catalogInfo:{},idx:{}},emits:["set-software-catalog-refrence"],setup(C,{emit:y}){const d=C,g=y,e=I(()=>d.catalogInfo),o=I(()=>d.idx),b=async r=>{g("set-software-catalog-refrence",r)};return(r,p)=>(l(),n("div",K,[t("div",{class:"card-body cursor-pointer",onClick:p[0]||(p[0]=m=>b(o.value))},[t("div",J,[t("div",Y,[t("img",{src:e.value.catalogIcon,class:"rounded mb-3",alt:"Catalog Icon",width:"50",height:"50",style:{"margin-left":"5px"}},null,8,q),t("div",Q,_(e.value.catalogCategory),1)]),t("div",W,[t("div",null,[t("b",null,_(e.value.catalogTitle),1),t("div",X,_(e.value.catalogSummary),1)])])])])]))}}),tt={class:"modal",id:"software-card-detail",tabindex:"-1"},st={class:"modal-dialog modal-lg",role:"document"},at={class:"modal-content"},ot={class:"modal-header"},et={class:"modal-title"},lt={class:"modal-body",style:{"max-height":"calc(100vh - 200px)","overflow-y":"auto"}},nt={class:"datagrid"},dt={class:"datagrid-item"},it={class:"d-flex justify-content-space-between"},ct={class:"col-lg-11 d-flex justify-content-start mb-5"},rt={class:"me-30",style:{"margin-right":"30px"}},ut=["src"],vt={class:"col-auto text-muted",style:{"align-items":"center"}},_t={class:"mt-3"},mt={class:"text-muted"},gt={class:"col-lg-1 lh-1"},pt={class:"dropdown"},ht={href:"#",class:"link-secondary","data-bs-toggle":"dropdown"},ft={class:"dropdown-menu dropdown-menu-end"},bt={class:"pt-0"},yt=["innerHTML"],wt={class:"datagrid"},Ct={class:"datagrid-item mb-5"},kt={class:"datagrid-content"},xt=["onClick"],$t={class:"datagrid-item"},It={class:"datagrid-content"},St={key:0},Dt={class:"d-inline"},Tt={class:"datagrid"},Lt={class:"datagrid-item mb-5"},Mt={class:"datagrid-content"},Nt={class:"btn btn-sm",style:{"margin-right":"5px"}},jt={class:"btn btn-sm",style:{"margin-right":"5px"}},At={class:"btn btn-sm",style:{"margin-right":"5px"}},Et={class:"footer"},Rt={class:"col-auto me-auto fs-3"},Bt={class:"d-flex justify-content-center"},Pt=D({__name:"softwareCatalogCardDetail",props:{catalogIdx:{}},emits:["set-software-catalog-refrence","on-click-deploy"],setup(C,{emit:y}){const d=C,g=y,e=I(()=>d.catalogIdx),o=c({});M(()=>e.value,async()=>{await b(e.value)}),N(async()=>{await b(e.value)});const b=async i=>{await P(Number(i)).then(({data:s})=>{s.catalogIcon=j(s.catalogIcon),o.value=s})},r=c("new"),p=i=>{r.value="update"},m=i=>i===void 0?"":i.replace(/\\n|\n/g,"
"),u=(i,s)=>i===void 0?null:Object.prototype.hasOwnProperty.call(i,s),h=i=>{window.open(i)},k=i=>{g("on-click-deploy",i)};return(i,s)=>{var a,f;return l(),n("div",tt,[t("div",st,[t("div",at,[t("div",ot,[t("h5",et,_(o.value.catalogTitle),1),s[3]||(s[3]=t("button",{type:"button",class:"btn-close","data-bs-dismiss":"modal","aria-label":"Close"},null,-1))]),t("div",lt,[t("div",nt,[t("div",dt,[t("div",it,[t("div",ct,[t("div",rt,[t("img",{src:o.value.catalogIcon,class:"rounded mb-3",alt:"Catalog Icon",width:"50",height:"50",style:{"margin-left":"5px"}},null,8,ut),t("div",vt,_(o.value.catalogCategory),1)]),t("div",_t,[t("b",null,_(o.value.catalogTitle),1),t("div",mt,_(o.value.catalogSummary),1)])]),t("div",gt,[t("div",pt,[t("a",ht,[w(T(z),{class:"icon icon-tabler",color:"black",size:20,"stroke-width":"2"})]),t("div",ft,[t("a",{class:"dropdown-item",onClick:s[0]||(s[0]=v=>p(o.value.catalogIdx||0)),"data-bs-toggle":"modal","data-bs-target":"#modal-form"},"Update")])])])])])]),t("div",bt,[t("div",{class:"mb-5",style:{"white-space":"pre-wrap"},innerHTML:m(o.value.catalogDescription||"")},null,8,yt),t("div",wt,[t("div",Ct,[s[4]||(s[4]=t("div",{class:"datagrid-title"},"Ref Information",-1)),t("div",kt,[u(o.value.refData,"HOMEPAGE")?(l(!0),n(x,{key:0},S((a=o.value.refData)==null?void 0:a.HOMEPAGE,v=>(l(),n("div",{key:v},[t("a",{onClick:R=>h(v),class:"btn"},_(v),9,xt)]))),128)):$("",!0)])]),t("div",$t,[s[5]||(s[5]=t("div",{class:"datagrid-title"},"TAGS",-1)),t("div",It,[u(o.value.refData,"TAG")?(l(),n("div",St,[(l(!0),n(x,null,S((f=o.value.refData)==null?void 0:f.TAG,v=>(l(),n("div",{class:"d-inline",key:v},[t("div",Dt,[t("span",null,"#"+_(v)+"  ",1)])]))),128))])):$("",!0)])])]),t("div",Tt,[t("div",Lt,[s[6]||(s[6]=t("div",{class:"datagrid-title"},"Recommended Spec",-1)),t("div",Mt,[o.value.recommendedCpu&&o.value.recommendedMemory&&o.value.recommendedDisk?(l(),n(x,{key:0},[t("button",Nt," CPU : "+_(o.value.recommendedCpu),1),t("button",jt," MEMORY : "+_(o.value.recommendedMemory),1),t("button",At," DISK : "+_(o.value.recommendedDisk),1)],64)):$("",!0)])])])])]),t("div",Et,[t("div",Rt,[t("div",Bt,[t("button",{class:"btn btn-primary me-md-2 mb-2","data-bs-toggle":"modal","data-bs-target":"#install-form",onClick:s[1]||(s[1]=v=>k("Application Installation"))},"INSTALL"),t("button",{class:"btn btn-danger me-md-2 mb-2","data-bs-toggle":"modal","data-bs-target":"#install-form",onClick:s[2]||(s[2]=v=>k("Application Uninstallation"))},"UNINSTALL")])])])])])])}}}),Ot=G(Pt,[["__scopeId","data-v-b392a427"]]),Ut={class:"modal fade",id:"softwareCatalogLog",tabindex:"-1"},Gt={class:"modal-dialog modal-xl",role:"document"},Vt={class:"modal-content"},Ht={class:"modal-body text-left py-4"},zt={class:"mb-5"},Ft={key:0,class:"spinner-border",role:"status"},Kt={key:0},Jt={class:"card mb-3"},Yt=["onClick"],qt={class:"card-title"},Qt={key:0,class:"card-body"},Wt=["value"],Xt=D({__name:"softwareCatalogLog",props:{jobName:{}},setup(C){A();const y=C,d=c(!1),g=I(()=>y.jobName);M(g,async()=>{d.value=!1,await o()});const e=c([]),o=async()=>{e.value=[];const m=await O(g.value);e.value=m.data.data,d.value=!0},b=()=>{e.value=[],r.value=1},r=c(1),p=m=>{r.value===m?r.value=0:r.value=m};return(m,u)=>(l(),n("div",Ut,[t("div",Gt,[t("div",Vt,[u[3]||(u[3]=t("button",{type:"button",class:"btn-close","data-bs-dismiss":"modal","aria-label":"Close"},null,-1)),t("div",Ht,[t("h3",zt,[u[1]||(u[1]=E(" Build Log ")),d.value?$("",!0):(l(),n("div",Ft,u[0]||(u[0]=[t("span",{class:"visually-hidden"},"Loading...",-1)])))]),t("div",null,[e.value.length<=0?(l(),n("div",Kt,u[2]||(u[2]=[t("p",{class:"text-secondary"},"No Data",-1)]))):(l(!0),n(x,{key:1},S(e.value,h=>(l(),n("div",{key:h.buildIdx},[t("div",Jt,[t("div",{class:"card-header",onClick:k=>p(h.buildIdx),style:{cursor:"pointer"}},[t("h3",qt,_(h.buildIdx),1)],8,Yt),r.value===h.buildIdx?(l(),n("div",Qt,[t("textarea",{value:h.buildLog,disabled:"",style:{width:"100%"},rows:"20"},null,8,Wt)])):$("",!0)])]))),128))])]),t("div",{class:"modal-footer"},[t("a",{class:"btn btn-link link-secondary","data-bs-dismiss":"modal",onClick:b}," Cancel ")])])])]))}}),Zt={class:"page",ref:"sofwareCatalog"},ts={class:"page-wrapper"},ss={class:"page-header d-print-none"},as={class:"container-xl"},os={class:"row g-2 align-items-center"},es={class:"col-auto ms-auto d-print-none"},ls={class:"d-flex"},ns={class:"me-3 d-none d-md-block"},ds={class:"input-icon"},is={class:"input-icon-addon"},cs={class:"col-auto ms-auto"},rs={class:"btn-list"},us={class:"page-body"},vs={class:"container-xl"},_s={class:"row"},ms={class:"col-auto"},gs={class:"card bg-color-white"},ps={class:"card-body"},hs={class:"row row-deck"},fs={class:"w-100"},Ss=D({__name:"SoftwareCatalogListTest",setup(C){const y=A(),d=c([]),g=c("");c([]),c([]);const e=c(0),o=c(""),b=c("new"),r=c("");c("ns01");const p=c("");N(async()=>{g.value="",window.addEventListener("message",async function(s){const a=s.data;a.projectInfo&&(r.value=a.projectInfo.ns_id)}),await m()});const m=async()=>{try{const s=await U(g.value);V.forEach(s.data,function(a){a.catalogIcon=j(a.catalogIcon),a.refData=u(a.catalogRefData),a.isShow=!1}),d.value=s.data}catch(s){console.log(s),y.error("데이터를 가져올 수 없습니다.")}},u=s=>s.reduce((a,f)=>(a[f.referenceType]||(a[f.referenceType]=[]),a[f.referenceType].push(f),a),{}),h=async s=>{e.value=s,d.value.forEach(a=>{a.isShow=!1}),d.value[s].isShow=!d.value[s].isShow},k=()=>{b.value="new",e.value=0},i=s=>{p.value=s};return(s,a)=>(l(),n("div",Zt,[t("div",ts,[t("div",ss,[t("div",as,[t("div",os,[a[2]||(a[2]=t("div",{class:"col d-flex"},[t("h2",{class:"page-title"},"Software catalog")],-1)),t("div",es,[t("div",ls,[t("div",ns,[t("div",ds,[a[0]||(a[0]=t("input",{type:"text",class:"form-control",placeholder:"Search…"},null,-1)),t("span",is,[w(T(F),{class:"icon icon-tabler icon-tabler-search",size:24})])])])])]),t("div",cs,[t("div",rs,[t("a",{class:"btn btn-primary d-none d-sm-inline-block",onClick:k,"data-bs-toggle":"modal","data-bs-target":"#modal-form"},[w(T(B),{class:"icon icon-tabler icon-tabler-plus",color:"white",size:20,"stroke-width":"2"}),a[1]||(a[1]=E(" New "))])])])])])]),t("div",us,[t("div",vs,[t("div",_s,[t("div",ms,[t("div",gs,[t("div",ps,[t("div",hs,[(l(!0),n(x,null,S(d.value,(f,v)=>(l(),n("div",{class:"col-md-4",key:v,style:{width:"33%",display:"flex","justify-content":"space-between"}},[t("div",fs,[w(Z,{"catalog-info":f,idx:v,"data-bs-toggle":"modal","data-bs-target":"#software-card-detail",onSetSoftwareCatalogRefrence:R=>h(v)},null,8,["catalog-info","idx","onSetSoftwareCatalogRefrence"])])]))),128))])])])])])])])]),w(Xt,{"job-name":o.value},null,8,["job-name"]),w(H,{"ns-id":r.value,title:p.value,"catalog-list":d.value},null,8,["ns-id","title","catalog-list"]),w(Ot,{"catalog-idx":e.value+1,onOnClickDeploy:i},null,8,["catalog-idx"])],512))}});export{Ss as default}; diff --git a/src/main/resources/static/assets/SoftwareCatalogListTest-D3DG0o_p.js b/src/main/resources/static/assets/SoftwareCatalogListTest-D3DG0o_p.js new file mode 100644 index 00000000..13fc3793 --- /dev/null +++ b/src/main/resources/static/assets/SoftwareCatalogListTest-D3DG0o_p.js @@ -0,0 +1,11 @@ +import{I as B}from"./IconPlus-CyRAtLeE.js";import{c as L}from"./createVueComponent-Czx6MsN9.js";import{d as D,g as I,o as l,c as n,a as t,t as _,r as c,h as M,i as N,D as j,b as w,u as T,F as x,k as S,m as $,f as A,e as E}from"./index-8PPGy_cS.js";import{e as P,x as O,m as U}from"./softwareCatalog-DfwfQXi9.js";import{_ as G}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{_ as V}from"./lodash-CprRz5WW.js";import{A as H}from"./applicationInstallationForm-B8kAVev5.js";import"./request-BD-3QCnG.js";/** + * @license @tabler/icons-vue v3.22.0 - MIT + * + * This source code is licensed under the MIT license. + * See the LICENSE file in the root directory of this source tree. + */var z=L("outline","dots","IconDots",[["path",{d:"M5 12m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0",key:"svg-0"}],["path",{d:"M12 12m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0",key:"svg-1"}],["path",{d:"M19 12m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0",key:"svg-2"}]]);/** + * @license @tabler/icons-vue v3.22.0 - MIT + * + * This source code is licensed under the MIT license. + * See the LICENSE file in the root directory of this source tree. + */var F=L("outline","search","IconSearch",[["path",{d:"M10 10m-7 0a7 7 0 1 0 14 0a7 7 0 1 0 -14 0",key:"svg-0"}],["path",{d:"M21 21l-6 -6",key:"svg-1"}]]);const K={class:"card mb-3"},J={class:"grid"},Y={class:"g-col-5"},q=["src"],Q={class:"col-auto text-muted",style:{"align-items":"center"}},W={class:"col g-col-7"},X={class:"text-muted mt-3",style:{height:"50px"}},Z=D({__name:"softwareCatalogCard",props:{catalogInfo:{},idx:{}},emits:["set-software-catalog-refrence"],setup(C,{emit:y}){const d=C,g=y,e=I(()=>d.catalogInfo),o=I(()=>d.idx),b=async r=>{g("set-software-catalog-refrence",r)};return(r,p)=>(l(),n("div",K,[t("div",{class:"card-body cursor-pointer",onClick:p[0]||(p[0]=m=>b(o.value))},[t("div",J,[t("div",Y,[t("img",{src:e.value.catalogIcon,class:"rounded mb-3",alt:"Catalog Icon",width:"50",height:"50",style:{"margin-left":"5px"}},null,8,q),t("div",Q,_(e.value.catalogCategory),1)]),t("div",W,[t("div",null,[t("b",null,_(e.value.catalogTitle),1),t("div",X,_(e.value.catalogSummary),1)])])])])]))}}),tt={class:"modal",id:"software-card-detail",tabindex:"-1"},st={class:"modal-dialog modal-lg",role:"document"},at={class:"modal-content"},ot={class:"modal-header"},et={class:"modal-title"},lt={class:"modal-body",style:{"max-height":"calc(100vh - 200px)","overflow-y":"auto"}},nt={class:"datagrid"},dt={class:"datagrid-item"},it={class:"d-flex justify-content-space-between"},ct={class:"col-lg-11 d-flex justify-content-start mb-5"},rt={class:"me-30",style:{"margin-right":"30px"}},ut=["src"],vt={class:"col-auto text-muted",style:{"align-items":"center"}},_t={class:"mt-3"},mt={class:"text-muted"},gt={class:"col-lg-1 lh-1"},pt={class:"dropdown"},ht={href:"#",class:"link-secondary","data-bs-toggle":"dropdown"},ft={class:"dropdown-menu dropdown-menu-end"},bt={class:"pt-0"},yt=["innerHTML"],wt={class:"datagrid"},Ct={class:"datagrid-item mb-5"},kt={class:"datagrid-content"},xt=["onClick"],$t={class:"datagrid-item"},It={class:"datagrid-content"},St={key:0},Dt={class:"d-inline"},Tt={class:"datagrid"},Lt={class:"datagrid-item mb-5"},Mt={class:"datagrid-content"},Nt={class:"btn btn-sm",style:{"margin-right":"5px"}},jt={class:"btn btn-sm",style:{"margin-right":"5px"}},At={class:"btn btn-sm",style:{"margin-right":"5px"}},Et={class:"footer"},Rt={class:"col-auto me-auto fs-3"},Bt={class:"d-flex justify-content-center"},Pt=D({__name:"softwareCatalogCardDetail",props:{catalogIdx:{}},emits:["set-software-catalog-refrence","on-click-deploy"],setup(C,{emit:y}){const d=C,g=y,e=I(()=>d.catalogIdx),o=c({});M(()=>e.value,async()=>{await b(e.value)}),N(async()=>{await b(e.value)});const b=async i=>{await P(Number(i)).then(({data:s})=>{s.catalogIcon=j(s.catalogIcon),o.value=s})},r=c("new"),p=i=>{r.value="update"},m=i=>i===void 0?"":i.replace(/\\n|\n/g,"
"),u=(i,s)=>i===void 0?null:Object.prototype.hasOwnProperty.call(i,s),h=i=>{window.open(i)},k=i=>{g("on-click-deploy",i)};return(i,s)=>{var a,f;return l(),n("div",tt,[t("div",st,[t("div",at,[t("div",ot,[t("h5",et,_(o.value.catalogTitle),1),s[3]||(s[3]=t("button",{type:"button",class:"btn-close","data-bs-dismiss":"modal","aria-label":"Close"},null,-1))]),t("div",lt,[t("div",nt,[t("div",dt,[t("div",it,[t("div",ct,[t("div",rt,[t("img",{src:o.value.catalogIcon,class:"rounded mb-3",alt:"Catalog Icon",width:"50",height:"50",style:{"margin-left":"5px"}},null,8,ut),t("div",vt,_(o.value.catalogCategory),1)]),t("div",_t,[t("b",null,_(o.value.catalogTitle),1),t("div",mt,_(o.value.catalogSummary),1)])]),t("div",gt,[t("div",pt,[t("a",ht,[w(T(z),{class:"icon icon-tabler",color:"black",size:20,"stroke-width":"2"})]),t("div",ft,[t("a",{class:"dropdown-item",onClick:s[0]||(s[0]=v=>p(o.value.catalogIdx||0)),"data-bs-toggle":"modal","data-bs-target":"#modal-form"},"Update")])])])])])]),t("div",bt,[t("div",{class:"mb-5",style:{"white-space":"pre-wrap"},innerHTML:m(o.value.catalogDescription||"")},null,8,yt),t("div",wt,[t("div",Ct,[s[4]||(s[4]=t("div",{class:"datagrid-title"},"Ref Information",-1)),t("div",kt,[u(o.value.refData,"HOMEPAGE")?(l(!0),n(x,{key:0},S((a=o.value.refData)==null?void 0:a.HOMEPAGE,v=>(l(),n("div",{key:v},[t("a",{onClick:R=>h(v),class:"btn"},_(v),9,xt)]))),128)):$("",!0)])]),t("div",$t,[s[5]||(s[5]=t("div",{class:"datagrid-title"},"TAGS",-1)),t("div",It,[u(o.value.refData,"TAG")?(l(),n("div",St,[(l(!0),n(x,null,S((f=o.value.refData)==null?void 0:f.TAG,v=>(l(),n("div",{class:"d-inline",key:v},[t("div",Dt,[t("span",null,"#"+_(v)+"  ",1)])]))),128))])):$("",!0)])])]),t("div",Tt,[t("div",Lt,[s[6]||(s[6]=t("div",{class:"datagrid-title"},"Recommended Spec",-1)),t("div",Mt,[o.value.recommendedCpu&&o.value.recommendedMemory&&o.value.recommendedDisk?(l(),n(x,{key:0},[t("button",Nt," CPU : "+_(o.value.recommendedCpu),1),t("button",jt," MEMORY : "+_(o.value.recommendedMemory),1),t("button",At," DISK : "+_(o.value.recommendedDisk),1)],64)):$("",!0)])])])])]),t("div",Et,[t("div",Rt,[t("div",Bt,[t("button",{class:"btn btn-primary me-md-2 mb-2","data-bs-toggle":"modal","data-bs-target":"#install-form",onClick:s[1]||(s[1]=v=>k("Application Installation"))},"INSTALL"),t("button",{class:"btn btn-danger me-md-2 mb-2","data-bs-toggle":"modal","data-bs-target":"#install-form",onClick:s[2]||(s[2]=v=>k("Application Uninstallation"))},"UNINSTALL")])])])])])])}}}),Ot=G(Pt,[["__scopeId","data-v-b392a427"]]),Ut={class:"modal fade",id:"softwareCatalogLog",tabindex:"-1"},Gt={class:"modal-dialog modal-xl",role:"document"},Vt={class:"modal-content"},Ht={class:"modal-body text-left py-4"},zt={class:"mb-5"},Ft={key:0,class:"spinner-border",role:"status"},Kt={key:0},Jt={class:"card mb-3"},Yt=["onClick"],qt={class:"card-title"},Qt={key:0,class:"card-body"},Wt=["value"],Xt=D({__name:"softwareCatalogLog",props:{jobName:{}},setup(C){A();const y=C,d=c(!1),g=I(()=>y.jobName);M(g,async()=>{d.value=!1,await o()});const e=c([]),o=async()=>{e.value=[];const m=await O(g.value);e.value=m.data.data,d.value=!0},b=()=>{e.value=[],r.value=1},r=c(1),p=m=>{r.value===m?r.value=0:r.value=m};return(m,u)=>(l(),n("div",Ut,[t("div",Gt,[t("div",Vt,[u[3]||(u[3]=t("button",{type:"button",class:"btn-close","data-bs-dismiss":"modal","aria-label":"Close"},null,-1)),t("div",Ht,[t("h3",zt,[u[1]||(u[1]=E(" Build Log ")),d.value?$("",!0):(l(),n("div",Ft,u[0]||(u[0]=[t("span",{class:"visually-hidden"},"Loading...",-1)])))]),t("div",null,[e.value.length<=0?(l(),n("div",Kt,u[2]||(u[2]=[t("p",{class:"text-secondary"},"No Data",-1)]))):(l(!0),n(x,{key:1},S(e.value,h=>(l(),n("div",{key:h.buildIdx},[t("div",Jt,[t("div",{class:"card-header",onClick:k=>p(h.buildIdx),style:{cursor:"pointer"}},[t("h3",qt,_(h.buildIdx),1)],8,Yt),r.value===h.buildIdx?(l(),n("div",Qt,[t("textarea",{value:h.buildLog,disabled:"",style:{width:"100%"},rows:"20"},null,8,Wt)])):$("",!0)])]))),128))])]),t("div",{class:"modal-footer"},[t("a",{class:"btn btn-link link-secondary","data-bs-dismiss":"modal",onClick:b}," Cancel ")])])])]))}}),Zt={class:"page",ref:"sofwareCatalog"},ts={class:"page-wrapper"},ss={class:"page-header d-print-none"},as={class:"container-xl"},os={class:"row g-2 align-items-center"},es={class:"col-auto ms-auto d-print-none"},ls={class:"d-flex"},ns={class:"me-3 d-none d-md-block"},ds={class:"input-icon"},is={class:"input-icon-addon"},cs={class:"col-auto ms-auto"},rs={class:"btn-list"},us={class:"page-body"},vs={class:"container-xl"},_s={class:"row"},ms={class:"col-auto"},gs={class:"card bg-color-white"},ps={class:"card-body"},hs={class:"row row-deck"},fs={class:"w-100"},Ss=D({__name:"SoftwareCatalogListTest",setup(C){const y=A(),d=c([]),g=c("");c([]),c([]);const e=c(0),o=c(""),b=c("new"),r=c("");c("ns01");const p=c("");N(async()=>{g.value="",window.addEventListener("message",async function(s){const a=s.data;a.projectInfo&&(r.value=a.projectInfo.ns_id)}),await m()});const m=async()=>{try{const s=await U(g.value);V.forEach(s.data,function(a){a.catalogIcon=j(a.catalogIcon),a.refData=u(a.catalogRefData),a.isShow=!1}),d.value=s.data}catch(s){console.log(s),y.error("데이터를 가져올 수 없습니다.")}},u=s=>s.reduce((a,f)=>(a[f.referenceType]||(a[f.referenceType]=[]),a[f.referenceType].push(f),a),{}),h=async s=>{e.value=s,d.value.forEach(a=>{a.isShow=!1}),d.value[s].isShow=!d.value[s].isShow},k=()=>{b.value="new",e.value=0},i=s=>{p.value=s};return(s,a)=>(l(),n("div",Zt,[t("div",ts,[t("div",ss,[t("div",as,[t("div",os,[a[2]||(a[2]=t("div",{class:"col d-flex"},[t("h2",{class:"page-title"},"Software catalog")],-1)),t("div",es,[t("div",ls,[t("div",ns,[t("div",ds,[a[0]||(a[0]=t("input",{type:"text",class:"form-control",placeholder:"Search…"},null,-1)),t("span",is,[w(T(F),{class:"icon icon-tabler icon-tabler-search",size:24})])])])])]),t("div",cs,[t("div",rs,[t("a",{class:"btn btn-primary d-none d-sm-inline-block",onClick:k,"data-bs-toggle":"modal","data-bs-target":"#modal-form"},[w(T(B),{class:"icon icon-tabler icon-tabler-plus",color:"white",size:20,"stroke-width":"2"}),a[1]||(a[1]=E(" New "))])])])])])]),t("div",us,[t("div",vs,[t("div",_s,[t("div",ms,[t("div",gs,[t("div",ps,[t("div",hs,[(l(!0),n(x,null,S(d.value,(f,v)=>(l(),n("div",{class:"col-md-4",key:v,style:{width:"33%",display:"flex","justify-content":"space-between"}},[t("div",fs,[w(Z,{"catalog-info":f,idx:v,"data-bs-toggle":"modal","data-bs-target":"#software-card-detail",onSetSoftwareCatalogRefrence:R=>h(v)},null,8,["catalog-info","idx","onSetSoftwareCatalogRefrence"])])]))),128))])])])])])])])]),w(Xt,{"job-name":o.value},null,8,["job-name"]),w(H,{"ns-id":r.value,title:p.value,"catalog-list":d.value},null,8,["ns-id","title","catalog-list"]),w(Ot,{"catalog-idx":e.value+1,onOnClickDeploy:i},null,8,["catalog-idx"])],512))}});export{Ss as default}; diff --git a/src/main/resources/static/assets/SoftwareCatalogListTest-D5JiQFYZ.js b/src/main/resources/static/assets/SoftwareCatalogListTest-D5JiQFYZ.js new file mode 100644 index 00000000..3a72f05d --- /dev/null +++ b/src/main/resources/static/assets/SoftwareCatalogListTest-D5JiQFYZ.js @@ -0,0 +1,11 @@ +import{I as B}from"./IconPlus-B06YAus6.js";import{c as L}from"./createVueComponent-DNPdC8og.js";import{d as D,g as I,o as l,c as n,a as t,t as _,r as c,h as M,i as N,D as j,b as w,u as T,F as x,k as S,m as $,f as A,e as E}from"./index-BKFNv1Gc.js";import{e as P,x as O,m as U}from"./softwareCatalog-DuMGACG8.js";import{_ as G}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{_ as V}from"./lodash-DPUzVvBK.js";import{A as H}from"./applicationInstallationForm-CJ8rrk5z.js";import"./request-D9joEmfF.js";import"./bootstrap.esm-Ceob_0pG.js";/** + * @license @tabler/icons-vue v3.22.0 - MIT + * + * This source code is licensed under the MIT license. + * See the LICENSE file in the root directory of this source tree. + */var z=L("outline","dots","IconDots",[["path",{d:"M5 12m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0",key:"svg-0"}],["path",{d:"M12 12m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0",key:"svg-1"}],["path",{d:"M19 12m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0",key:"svg-2"}]]);/** + * @license @tabler/icons-vue v3.22.0 - MIT + * + * This source code is licensed under the MIT license. + * See the LICENSE file in the root directory of this source tree. + */var F=L("outline","search","IconSearch",[["path",{d:"M10 10m-7 0a7 7 0 1 0 14 0a7 7 0 1 0 -14 0",key:"svg-0"}],["path",{d:"M21 21l-6 -6",key:"svg-1"}]]);const K={class:"card mb-3"},J={class:"grid"},Y={class:"g-col-5"},q=["src"],Q={class:"col-auto text-muted",style:{"align-items":"center"}},W={class:"col g-col-7"},X={class:"text-muted mt-3",style:{height:"50px"}},Z=D({__name:"softwareCatalogCard",props:{catalogInfo:{},idx:{}},emits:["set-software-catalog-refrence"],setup(C,{emit:y}){const d=C,g=y,e=I(()=>d.catalogInfo),o=I(()=>d.idx),b=async r=>{g("set-software-catalog-refrence",r)};return(r,p)=>(l(),n("div",K,[t("div",{class:"card-body cursor-pointer",onClick:p[0]||(p[0]=m=>b(o.value))},[t("div",J,[t("div",Y,[t("img",{src:e.value.catalogIcon,class:"rounded mb-3",alt:"Catalog Icon",width:"50",height:"50",style:{"margin-left":"5px"}},null,8,q),t("div",Q,_(e.value.catalogCategory),1)]),t("div",W,[t("div",null,[t("b",null,_(e.value.catalogTitle),1),t("div",X,_(e.value.catalogSummary),1)])])])])]))}}),tt={class:"modal",id:"software-card-detail",tabindex:"-1"},st={class:"modal-dialog modal-lg",role:"document"},at={class:"modal-content"},ot={class:"modal-header"},et={class:"modal-title"},lt={class:"modal-body",style:{"max-height":"calc(100vh - 200px)","overflow-y":"auto"}},nt={class:"datagrid"},dt={class:"datagrid-item"},it={class:"d-flex justify-content-space-between"},ct={class:"col-lg-11 d-flex justify-content-start mb-5"},rt={class:"me-30",style:{"margin-right":"30px"}},ut=["src"],vt={class:"col-auto text-muted",style:{"align-items":"center"}},_t={class:"mt-3"},mt={class:"text-muted"},gt={class:"col-lg-1 lh-1"},pt={class:"dropdown"},ht={href:"#",class:"link-secondary","data-bs-toggle":"dropdown"},ft={class:"dropdown-menu dropdown-menu-end"},bt={class:"pt-0"},yt=["innerHTML"],wt={class:"datagrid"},Ct={class:"datagrid-item mb-5"},kt={class:"datagrid-content"},xt=["onClick"],$t={class:"datagrid-item"},It={class:"datagrid-content"},St={key:0},Dt={class:"d-inline"},Tt={class:"datagrid"},Lt={class:"datagrid-item mb-5"},Mt={class:"datagrid-content"},Nt={class:"btn btn-sm",style:{"margin-right":"5px"}},jt={class:"btn btn-sm",style:{"margin-right":"5px"}},At={class:"btn btn-sm",style:{"margin-right":"5px"}},Et={class:"footer"},Rt={class:"col-auto me-auto fs-3"},Bt={class:"d-flex justify-content-center"},Pt=D({__name:"softwareCatalogCardDetail",props:{catalogIdx:{}},emits:["set-software-catalog-refrence","on-click-deploy"],setup(C,{emit:y}){const d=C,g=y,e=I(()=>d.catalogIdx),o=c({});M(()=>e.value,async()=>{await b(e.value)}),N(async()=>{await b(e.value)});const b=async i=>{await P(Number(i)).then(({data:s})=>{s.catalogIcon=j(s.catalogIcon),o.value=s})},r=c("new"),p=i=>{r.value="update"},m=i=>i===void 0?"":i.replace(/\\n|\n/g,"
"),u=(i,s)=>i===void 0?null:Object.prototype.hasOwnProperty.call(i,s),h=i=>{window.open(i)},k=i=>{g("on-click-deploy",i)};return(i,s)=>{var a,f;return l(),n("div",tt,[t("div",st,[t("div",at,[t("div",ot,[t("h5",et,_(o.value.catalogTitle),1),s[3]||(s[3]=t("button",{type:"button",class:"btn-close","data-bs-dismiss":"modal","aria-label":"Close"},null,-1))]),t("div",lt,[t("div",nt,[t("div",dt,[t("div",it,[t("div",ct,[t("div",rt,[t("img",{src:o.value.catalogIcon,class:"rounded mb-3",alt:"Catalog Icon",width:"50",height:"50",style:{"margin-left":"5px"}},null,8,ut),t("div",vt,_(o.value.catalogCategory),1)]),t("div",_t,[t("b",null,_(o.value.catalogTitle),1),t("div",mt,_(o.value.catalogSummary),1)])]),t("div",gt,[t("div",pt,[t("a",ht,[w(T(z),{class:"icon icon-tabler",color:"black",size:20,"stroke-width":"2"})]),t("div",ft,[t("a",{class:"dropdown-item",onClick:s[0]||(s[0]=v=>p(o.value.catalogIdx||0)),"data-bs-toggle":"modal","data-bs-target":"#modal-form"},"Update")])])])])])]),t("div",bt,[t("div",{class:"mb-5",style:{"white-space":"pre-wrap"},innerHTML:m(o.value.catalogDescription||"")},null,8,yt),t("div",wt,[t("div",Ct,[s[4]||(s[4]=t("div",{class:"datagrid-title"},"Ref Information",-1)),t("div",kt,[u(o.value.refData,"HOMEPAGE")?(l(!0),n(x,{key:0},S((a=o.value.refData)==null?void 0:a.HOMEPAGE,v=>(l(),n("div",{key:v},[t("a",{onClick:R=>h(v),class:"btn"},_(v),9,xt)]))),128)):$("",!0)])]),t("div",$t,[s[5]||(s[5]=t("div",{class:"datagrid-title"},"TAGS",-1)),t("div",It,[u(o.value.refData,"TAG")?(l(),n("div",St,[(l(!0),n(x,null,S((f=o.value.refData)==null?void 0:f.TAG,v=>(l(),n("div",{class:"d-inline",key:v},[t("div",Dt,[t("span",null,"#"+_(v)+"  ",1)])]))),128))])):$("",!0)])])]),t("div",Tt,[t("div",Lt,[s[6]||(s[6]=t("div",{class:"datagrid-title"},"Recommended Spec",-1)),t("div",Mt,[o.value.recommendedCpu&&o.value.recommendedMemory&&o.value.recommendedDisk?(l(),n(x,{key:0},[t("button",Nt," CPU : "+_(o.value.recommendedCpu),1),t("button",jt," MEMORY : "+_(o.value.recommendedMemory),1),t("button",At," DISK : "+_(o.value.recommendedDisk),1)],64)):$("",!0)])])])])]),t("div",Et,[t("div",Rt,[t("div",Bt,[t("button",{class:"btn btn-primary me-md-2 mb-2","data-bs-toggle":"modal","data-bs-target":"#install-form",onClick:s[1]||(s[1]=v=>k("Application Installation"))},"INSTALL"),t("button",{class:"btn btn-danger me-md-2 mb-2","data-bs-toggle":"modal","data-bs-target":"#install-form",onClick:s[2]||(s[2]=v=>k("Application Uninstallation"))},"UNINSTALL")])])])])])])}}}),Ot=G(Pt,[["__scopeId","data-v-b392a427"]]),Ut={class:"modal fade",id:"softwareCatalogLog",tabindex:"-1"},Gt={class:"modal-dialog modal-xl",role:"document"},Vt={class:"modal-content"},Ht={class:"modal-body text-left py-4"},zt={class:"mb-5"},Ft={key:0,class:"spinner-border",role:"status"},Kt={key:0},Jt={class:"card mb-3"},Yt=["onClick"],qt={class:"card-title"},Qt={key:0,class:"card-body"},Wt=["value"],Xt=D({__name:"softwareCatalogLog",props:{jobName:{}},setup(C){A();const y=C,d=c(!1),g=I(()=>y.jobName);M(g,async()=>{d.value=!1,await o()});const e=c([]),o=async()=>{e.value=[];const m=await O(g.value);e.value=m.data.data,d.value=!0},b=()=>{e.value=[],r.value=1},r=c(1),p=m=>{r.value===m?r.value=0:r.value=m};return(m,u)=>(l(),n("div",Ut,[t("div",Gt,[t("div",Vt,[u[3]||(u[3]=t("button",{type:"button",class:"btn-close","data-bs-dismiss":"modal","aria-label":"Close"},null,-1)),t("div",Ht,[t("h3",zt,[u[1]||(u[1]=E(" Build Log ")),d.value?$("",!0):(l(),n("div",Ft,u[0]||(u[0]=[t("span",{class:"visually-hidden"},"Loading...",-1)])))]),t("div",null,[e.value.length<=0?(l(),n("div",Kt,u[2]||(u[2]=[t("p",{class:"text-secondary"},"No Data",-1)]))):(l(!0),n(x,{key:1},S(e.value,h=>(l(),n("div",{key:h.buildIdx},[t("div",Jt,[t("div",{class:"card-header",onClick:k=>p(h.buildIdx),style:{cursor:"pointer"}},[t("h3",qt,_(h.buildIdx),1)],8,Yt),r.value===h.buildIdx?(l(),n("div",Qt,[t("textarea",{value:h.buildLog,disabled:"",style:{width:"100%"},rows:"20"},null,8,Wt)])):$("",!0)])]))),128))])]),t("div",{class:"modal-footer"},[t("a",{class:"btn btn-link link-secondary","data-bs-dismiss":"modal",onClick:b}," Cancel ")])])])]))}}),Zt={class:"page",ref:"sofwareCatalog"},ts={class:"page-wrapper"},ss={class:"page-header d-print-none"},as={class:"container-xl"},os={class:"row g-2 align-items-center"},es={class:"col-auto ms-auto d-print-none"},ls={class:"d-flex"},ns={class:"me-3 d-none d-md-block"},ds={class:"input-icon"},is={class:"input-icon-addon"},cs={class:"col-auto ms-auto"},rs={class:"btn-list"},us={class:"page-body"},vs={class:"container-xl"},_s={class:"row"},ms={class:"col-auto"},gs={class:"card bg-color-white"},ps={class:"card-body"},hs={class:"row row-deck"},fs={class:"w-100"},Ds=D({__name:"SoftwareCatalogListTest",setup(C){const y=A(),d=c([]),g=c("");c([]),c([]);const e=c(0),o=c(""),b=c("new"),r=c("");c("ns01");const p=c("");N(async()=>{g.value="",window.addEventListener("message",async function(s){const a=s.data;a.projectInfo&&(r.value=a.projectInfo.ns_id)}),await m()});const m=async()=>{try{const s=await U(g.value);V.forEach(s.data,function(a){a.catalogIcon=j(a.catalogIcon),a.refData=u(a.catalogRefData),a.isShow=!1}),d.value=s.data}catch(s){console.log(s),y.error("데이터를 가져올 수 없습니다.")}},u=s=>s.reduce((a,f)=>(a[f.referenceType]||(a[f.referenceType]=[]),a[f.referenceType].push(f),a),{}),h=async s=>{e.value=s,d.value.forEach(a=>{a.isShow=!1}),d.value[s].isShow=!d.value[s].isShow},k=()=>{b.value="new",e.value=0},i=s=>{p.value=s};return(s,a)=>(l(),n("div",Zt,[t("div",ts,[t("div",ss,[t("div",as,[t("div",os,[a[2]||(a[2]=t("div",{class:"col d-flex"},[t("h2",{class:"page-title"},"Software catalog")],-1)),t("div",es,[t("div",ls,[t("div",ns,[t("div",ds,[a[0]||(a[0]=t("input",{type:"text",class:"form-control",placeholder:"Search…"},null,-1)),t("span",is,[w(T(F),{class:"icon icon-tabler icon-tabler-search",size:24})])])])])]),t("div",cs,[t("div",rs,[t("a",{class:"btn btn-primary d-none d-sm-inline-block",onClick:k,"data-bs-toggle":"modal","data-bs-target":"#modal-form"},[w(T(B),{class:"icon icon-tabler icon-tabler-plus",color:"white",size:20,"stroke-width":"2"}),a[1]||(a[1]=E(" New "))])])])])])]),t("div",us,[t("div",vs,[t("div",_s,[t("div",ms,[t("div",gs,[t("div",ps,[t("div",hs,[(l(!0),n(x,null,S(d.value,(f,v)=>(l(),n("div",{class:"col-md-4",key:v,style:{width:"33%",display:"flex","justify-content":"space-between"}},[t("div",fs,[w(Z,{"catalog-info":f,idx:v,"data-bs-toggle":"modal","data-bs-target":"#software-card-detail",onSetSoftwareCatalogRefrence:R=>h(v)},null,8,["catalog-info","idx","onSetSoftwareCatalogRefrence"])])]))),128))])])])])])])])]),w(Xt,{"job-name":o.value},null,8,["job-name"]),w(H,{"ns-id":r.value,title:p.value,"catalog-list":d.value},null,8,["ns-id","title","catalog-list"]),w(Ot,{"catalog-idx":e.value+1,onOnClickDeploy:i},null,8,["catalog-idx"])],512))}});export{Ds as default}; diff --git a/src/main/resources/static/assets/SoftwareCatalogListTest-DrdksJST.js b/src/main/resources/static/assets/SoftwareCatalogListTest-DrdksJST.js new file mode 100644 index 00000000..deaeb7a6 --- /dev/null +++ b/src/main/resources/static/assets/SoftwareCatalogListTest-DrdksJST.js @@ -0,0 +1,11 @@ +import{I as B}from"./IconPlus-BCHYOAFu.js";import{c as L}from"./createVueComponent-Bt7iWPgv.js";import{d as D,g as I,o as l,c as n,a as t,t as _,r as c,h as M,i as N,D as j,b as w,u as T,F as x,k as S,m as $,f as A,e as E}from"./index-DU977P1k.js";import{e as P,x as O,m as U}from"./softwareCatalog-VAKfe9v1.js";import{_ as G}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{_ as V}from"./lodash-BpiFzpk2.js";import{A as H}from"./applicationInstallationForm-DA09_p5G.js";import"./request-jyImEBot.js";/** + * @license @tabler/icons-vue v3.22.0 - MIT + * + * This source code is licensed under the MIT license. + * See the LICENSE file in the root directory of this source tree. + */var z=L("outline","dots","IconDots",[["path",{d:"M5 12m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0",key:"svg-0"}],["path",{d:"M12 12m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0",key:"svg-1"}],["path",{d:"M19 12m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0",key:"svg-2"}]]);/** + * @license @tabler/icons-vue v3.22.0 - MIT + * + * This source code is licensed under the MIT license. + * See the LICENSE file in the root directory of this source tree. + */var F=L("outline","search","IconSearch",[["path",{d:"M10 10m-7 0a7 7 0 1 0 14 0a7 7 0 1 0 -14 0",key:"svg-0"}],["path",{d:"M21 21l-6 -6",key:"svg-1"}]]);const K={class:"card mb-3"},J={class:"grid"},Y={class:"g-col-5"},q=["src"],Q={class:"col-auto text-muted",style:{"align-items":"center"}},W={class:"col g-col-7"},X={class:"text-muted mt-3",style:{height:"50px"}},Z=D({__name:"softwareCatalogCard",props:{catalogInfo:{},idx:{}},emits:["set-software-catalog-refrence"],setup(C,{emit:y}){const d=C,g=y,e=I(()=>d.catalogInfo),o=I(()=>d.idx),b=async r=>{g("set-software-catalog-refrence",r)};return(r,p)=>(l(),n("div",K,[t("div",{class:"card-body cursor-pointer",onClick:p[0]||(p[0]=m=>b(o.value))},[t("div",J,[t("div",Y,[t("img",{src:e.value.catalogIcon,class:"rounded mb-3",alt:"Catalog Icon",width:"50",height:"50",style:{"margin-left":"5px"}},null,8,q),t("div",Q,_(e.value.catalogCategory),1)]),t("div",W,[t("div",null,[t("b",null,_(e.value.catalogTitle),1),t("div",X,_(e.value.catalogSummary),1)])])])])]))}}),tt={class:"modal",id:"software-card-detail",tabindex:"-1"},st={class:"modal-dialog modal-lg",role:"document"},at={class:"modal-content"},ot={class:"modal-header"},et={class:"modal-title"},lt={class:"modal-body",style:{"max-height":"calc(100vh - 200px)","overflow-y":"auto"}},nt={class:"datagrid"},dt={class:"datagrid-item"},it={class:"d-flex justify-content-space-between"},ct={class:"col-lg-11 d-flex justify-content-start mb-5"},rt={class:"me-30",style:{"margin-right":"30px"}},ut=["src"],vt={class:"col-auto text-muted",style:{"align-items":"center"}},_t={class:"mt-3"},mt={class:"text-muted"},gt={class:"col-lg-1 lh-1"},pt={class:"dropdown"},ht={href:"#",class:"link-secondary","data-bs-toggle":"dropdown"},ft={class:"dropdown-menu dropdown-menu-end"},bt={class:"pt-0"},yt=["innerHTML"],wt={class:"datagrid"},Ct={class:"datagrid-item mb-5"},kt={class:"datagrid-content"},xt=["onClick"],$t={class:"datagrid-item"},It={class:"datagrid-content"},St={key:0},Dt={class:"d-inline"},Tt={class:"datagrid"},Lt={class:"datagrid-item mb-5"},Mt={class:"datagrid-content"},Nt={class:"btn btn-sm",style:{"margin-right":"5px"}},jt={class:"btn btn-sm",style:{"margin-right":"5px"}},At={class:"btn btn-sm",style:{"margin-right":"5px"}},Et={class:"footer"},Rt={class:"col-auto me-auto fs-3"},Bt={class:"d-flex justify-content-center"},Pt=D({__name:"softwareCatalogCardDetail",props:{catalogIdx:{}},emits:["set-software-catalog-refrence","on-click-deploy"],setup(C,{emit:y}){const d=C,g=y,e=I(()=>d.catalogIdx),o=c({});M(()=>e.value,async()=>{await b(e.value)}),N(async()=>{await b(e.value)});const b=async i=>{await P(Number(i)).then(({data:s})=>{s.catalogIcon=j(s.catalogIcon),o.value=s})},r=c("new"),p=i=>{r.value="update"},m=i=>i===void 0?"":i.replace(/\\n|\n/g,"
"),u=(i,s)=>i===void 0?null:Object.prototype.hasOwnProperty.call(i,s),h=i=>{window.open(i)},k=i=>{g("on-click-deploy",i)};return(i,s)=>{var a,f;return l(),n("div",tt,[t("div",st,[t("div",at,[t("div",ot,[t("h5",et,_(o.value.catalogTitle),1),s[3]||(s[3]=t("button",{type:"button",class:"btn-close","data-bs-dismiss":"modal","aria-label":"Close"},null,-1))]),t("div",lt,[t("div",nt,[t("div",dt,[t("div",it,[t("div",ct,[t("div",rt,[t("img",{src:o.value.catalogIcon,class:"rounded mb-3",alt:"Catalog Icon",width:"50",height:"50",style:{"margin-left":"5px"}},null,8,ut),t("div",vt,_(o.value.catalogCategory),1)]),t("div",_t,[t("b",null,_(o.value.catalogTitle),1),t("div",mt,_(o.value.catalogSummary),1)])]),t("div",gt,[t("div",pt,[t("a",ht,[w(T(z),{class:"icon icon-tabler",color:"black",size:20,"stroke-width":"2"})]),t("div",ft,[t("a",{class:"dropdown-item",onClick:s[0]||(s[0]=v=>p(o.value.catalogIdx||0)),"data-bs-toggle":"modal","data-bs-target":"#modal-form"},"Update")])])])])])]),t("div",bt,[t("div",{class:"mb-5",style:{"white-space":"pre-wrap"},innerHTML:m(o.value.catalogDescription||"")},null,8,yt),t("div",wt,[t("div",Ct,[s[4]||(s[4]=t("div",{class:"datagrid-title"},"Ref Information",-1)),t("div",kt,[u(o.value.refData,"HOMEPAGE")?(l(!0),n(x,{key:0},S((a=o.value.refData)==null?void 0:a.HOMEPAGE,v=>(l(),n("div",{key:v},[t("a",{onClick:R=>h(v),class:"btn"},_(v),9,xt)]))),128)):$("",!0)])]),t("div",$t,[s[5]||(s[5]=t("div",{class:"datagrid-title"},"TAGS",-1)),t("div",It,[u(o.value.refData,"TAG")?(l(),n("div",St,[(l(!0),n(x,null,S((f=o.value.refData)==null?void 0:f.TAG,v=>(l(),n("div",{class:"d-inline",key:v},[t("div",Dt,[t("span",null,"#"+_(v)+"  ",1)])]))),128))])):$("",!0)])])]),t("div",Tt,[t("div",Lt,[s[6]||(s[6]=t("div",{class:"datagrid-title"},"Recommended Spec",-1)),t("div",Mt,[o.value.recommendedCpu&&o.value.recommendedMemory&&o.value.recommendedDisk?(l(),n(x,{key:0},[t("button",Nt," CPU : "+_(o.value.recommendedCpu),1),t("button",jt," MEMORY : "+_(o.value.recommendedMemory),1),t("button",At," DISK : "+_(o.value.recommendedDisk),1)],64)):$("",!0)])])])])]),t("div",Et,[t("div",Rt,[t("div",Bt,[t("button",{class:"btn btn-primary me-md-2 mb-2","data-bs-toggle":"modal","data-bs-target":"#install-form",onClick:s[1]||(s[1]=v=>k("Application Installation"))},"INSTALL"),t("button",{class:"btn btn-danger me-md-2 mb-2","data-bs-toggle":"modal","data-bs-target":"#install-form",onClick:s[2]||(s[2]=v=>k("Application Uninstallation"))},"UNINSTALL")])])])])])])}}}),Ot=G(Pt,[["__scopeId","data-v-b392a427"]]),Ut={class:"modal fade",id:"softwareCatalogLog",tabindex:"-1"},Gt={class:"modal-dialog modal-xl",role:"document"},Vt={class:"modal-content"},Ht={class:"modal-body text-left py-4"},zt={class:"mb-5"},Ft={key:0,class:"spinner-border",role:"status"},Kt={key:0},Jt={class:"card mb-3"},Yt=["onClick"],qt={class:"card-title"},Qt={key:0,class:"card-body"},Wt=["value"],Xt=D({__name:"softwareCatalogLog",props:{jobName:{}},setup(C){A();const y=C,d=c(!1),g=I(()=>y.jobName);M(g,async()=>{d.value=!1,await o()});const e=c([]),o=async()=>{e.value=[];const m=await O(g.value);e.value=m.data.data,d.value=!0},b=()=>{e.value=[],r.value=1},r=c(1),p=m=>{r.value===m?r.value=0:r.value=m};return(m,u)=>(l(),n("div",Ut,[t("div",Gt,[t("div",Vt,[u[3]||(u[3]=t("button",{type:"button",class:"btn-close","data-bs-dismiss":"modal","aria-label":"Close"},null,-1)),t("div",Ht,[t("h3",zt,[u[1]||(u[1]=E(" Build Log ")),d.value?$("",!0):(l(),n("div",Ft,u[0]||(u[0]=[t("span",{class:"visually-hidden"},"Loading...",-1)])))]),t("div",null,[e.value.length<=0?(l(),n("div",Kt,u[2]||(u[2]=[t("p",{class:"text-secondary"},"No Data",-1)]))):(l(!0),n(x,{key:1},S(e.value,h=>(l(),n("div",{key:h.buildIdx},[t("div",Jt,[t("div",{class:"card-header",onClick:k=>p(h.buildIdx),style:{cursor:"pointer"}},[t("h3",qt,_(h.buildIdx),1)],8,Yt),r.value===h.buildIdx?(l(),n("div",Qt,[t("textarea",{value:h.buildLog,disabled:"",style:{width:"100%"},rows:"20"},null,8,Wt)])):$("",!0)])]))),128))])]),t("div",{class:"modal-footer"},[t("a",{class:"btn btn-link link-secondary","data-bs-dismiss":"modal",onClick:b}," Cancel ")])])])]))}}),Zt={class:"page",ref:"sofwareCatalog"},ts={class:"page-wrapper"},ss={class:"page-header d-print-none"},as={class:"container-xl"},os={class:"row g-2 align-items-center"},es={class:"col-auto ms-auto d-print-none"},ls={class:"d-flex"},ns={class:"me-3 d-none d-md-block"},ds={class:"input-icon"},is={class:"input-icon-addon"},cs={class:"col-auto ms-auto"},rs={class:"btn-list"},us={class:"page-body"},vs={class:"container-xl"},_s={class:"row"},ms={class:"col-auto"},gs={class:"card bg-color-white"},ps={class:"card-body"},hs={class:"row row-deck"},fs={class:"w-100"},Ss=D({__name:"SoftwareCatalogListTest",setup(C){const y=A(),d=c([]),g=c("");c([]),c([]);const e=c(0),o=c(""),b=c("new"),r=c("");c("ns01");const p=c("");N(async()=>{g.value="",window.addEventListener("message",async function(s){const a=s.data;a.projectInfo&&(r.value=a.projectInfo.ns_id)}),await m()});const m=async()=>{try{const s=await U(g.value);V.forEach(s.data,function(a){a.catalogIcon=j(a.catalogIcon),a.refData=u(a.catalogRefData),a.isShow=!1}),d.value=s.data}catch(s){console.log(s),y.error("데이터를 가져올 수 없습니다.")}},u=s=>s.reduce((a,f)=>(a[f.referenceType]||(a[f.referenceType]=[]),a[f.referenceType].push(f),a),{}),h=async s=>{e.value=s,d.value.forEach(a=>{a.isShow=!1}),d.value[s].isShow=!d.value[s].isShow},k=()=>{b.value="new",e.value=0},i=s=>{p.value=s};return(s,a)=>(l(),n("div",Zt,[t("div",ts,[t("div",ss,[t("div",as,[t("div",os,[a[2]||(a[2]=t("div",{class:"col d-flex"},[t("h2",{class:"page-title"},"Software catalog")],-1)),t("div",es,[t("div",ls,[t("div",ns,[t("div",ds,[a[0]||(a[0]=t("input",{type:"text",class:"form-control",placeholder:"Search…"},null,-1)),t("span",is,[w(T(F),{class:"icon icon-tabler icon-tabler-search",size:24})])])])])]),t("div",cs,[t("div",rs,[t("a",{class:"btn btn-primary d-none d-sm-inline-block",onClick:k,"data-bs-toggle":"modal","data-bs-target":"#modal-form"},[w(T(B),{class:"icon icon-tabler icon-tabler-plus",color:"white",size:20,"stroke-width":"2"}),a[1]||(a[1]=E(" New "))])])])])])]),t("div",us,[t("div",vs,[t("div",_s,[t("div",ms,[t("div",gs,[t("div",ps,[t("div",hs,[(l(!0),n(x,null,S(d.value,(f,v)=>(l(),n("div",{class:"col-md-4",key:v,style:{width:"33%",display:"flex","justify-content":"space-between"}},[t("div",fs,[w(Z,{"catalog-info":f,idx:v,"data-bs-toggle":"modal","data-bs-target":"#software-card-detail",onSetSoftwareCatalogRefrence:R=>h(v)},null,8,["catalog-info","idx","onSetSoftwareCatalogRefrence"])])]))),128))])])])])])])])]),w(Xt,{"job-name":o.value},null,8,["job-name"]),w(H,{"ns-id":r.value,title:p.value,"catalog-list":d.value},null,8,["ns-id","title","catalog-list"]),w(Ot,{"catalog-idx":e.value+1,onOnClickDeploy:i},null,8,["catalog-idx"])],512))}});export{Ss as default}; diff --git a/src/main/resources/static/assets/Tabulator.vue_vue_type_style_index_0_lang-BwLOthig.js b/src/main/resources/static/assets/Tabulator.vue_vue_type_style_index_0_lang-BwLOthig.js new file mode 100644 index 00000000..664e0d68 --- /dev/null +++ b/src/main/resources/static/assets/Tabulator.vue_vue_type_style_index_0_lang-BwLOthig.js @@ -0,0 +1,22 @@ +var vt=Object.defineProperty;var wt=(l,e,t)=>e in l?vt(l,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):l[e]=t;var b=(l,e,t)=>wt(l,typeof e!="symbol"?e+"":e,t);import{d as Ct,r as Ge,h as je,i as Et,B as yt,x as Rt,c as xt,o as Tt}from"./index-DKle5_5b.js";class M{constructor(e){this.table=e}reloadData(e,t,i){return this.table.dataLoader.load(e,void 0,void 0,void 0,t,i)}langText(){return this.table.modules.localize.getText(...arguments)}langBind(){return this.table.modules.localize.bind(...arguments)}langLocale(){return this.table.modules.localize.getLocale(...arguments)}commsConnections(){return this.table.modules.comms.getConnections(...arguments)}commsSend(){return this.table.modules.comms.send(...arguments)}layoutMode(){return this.table.modules.layout.getMode()}layoutRefresh(e){return this.table.modules.layout.layout(e)}subscribe(){return this.table.eventBus.subscribe(...arguments)}unsubscribe(){return this.table.eventBus.unsubscribe(...arguments)}subscribed(e){return this.table.eventBus.subscribed(e)}subscriptionChange(){return this.table.eventBus.subscriptionChange(...arguments)}dispatch(){return this.table.eventBus.dispatch(...arguments)}chain(){return this.table.eventBus.chain(...arguments)}confirm(){return this.table.eventBus.confirm(...arguments)}dispatchExternal(){return this.table.externalEvents.dispatch(...arguments)}subscribedExternal(e){return this.table.externalEvents.subscribed(e)}subscriptionChangeExternal(){return this.table.externalEvents.subscriptionChange(...arguments)}options(e){return this.table.options[e]}setOption(e,t){return typeof t<"u"&&(this.table.options[e]=t),this.table.options[e]}deprecationCheck(e,t,i){return this.table.deprecationAdvisor.check(e,t,i)}deprecationCheckMsg(e,t){return this.table.deprecationAdvisor.checkMsg(e,t)}deprecationMsg(e){return this.table.deprecationAdvisor.msg(e)}module(e){return this.table.module(e)}}class x{static elVisible(e){return!(e.offsetWidth<=0&&e.offsetHeight<=0)}static elOffset(e){var t=e.getBoundingClientRect();return{top:t.top+window.pageYOffset-document.documentElement.clientTop,left:t.left+window.pageXOffset-document.documentElement.clientLeft}}static retrieveNestedData(e,t,i){var s=e?t.split(e):[t],n=s.length,r;for(let o=0;od.subject===o),a>-1?t[r]=i[a].copy:(h=Object.assign(Array.isArray(o)?[]:{},o),i.unshift({subject:o,copy:h}),t[r]=this.deepClone(o,h,i)))}return t}}let kt=class Ke extends M{constructor(e,t,i){super(e),this.element=t,this.container=this._lookupContainer(),this.parent=i,this.reversedX=!1,this.childPopup=null,this.blurable=!1,this.blurCallback=null,this.blurEventsBound=!1,this.renderedCallback=null,this.visible=!1,this.hideable=!0,this.element.classList.add("tabulator-popup-container"),this.blurEvent=this.hide.bind(this,!1),this.escEvent=this._escapeCheck.bind(this),this.destroyBinding=this.tableDestroyed.bind(this),this.destroyed=!1}tableDestroyed(){this.destroyed=!0,this.hide(!0)}_lookupContainer(){var e=this.table.options.popupContainer;return typeof e=="string"?(e=document.querySelector(e),e||console.warn("Menu Error - no container element found matching selector:",this.table.options.popupContainer,"(defaulting to document body)")):e===!0&&(e=this.table.element),e&&!this._checkContainerIsParent(e)&&(e=!1,console.warn("Menu Error - container element does not contain this table:",this.table.options.popupContainer,"(defaulting to document body)")),e||(e=document.body),e}_checkContainerIsParent(e,t=this.table.element){return e===t?!0:t.parentNode?this._checkContainerIsParent(e,t.parentNode):!1}renderCallback(e){this.renderedCallback=e}containerEventCoords(e){var t=!(e instanceof MouseEvent),i=t?e.touches[0].pageX:e.pageX,s=t?e.touches[0].pageY:e.pageY;if(this.container!==document.body){let n=x.elOffset(this.container);i-=n.left,s-=n.top}return{x:i,y:s}}elementPositionCoords(e,t="right"){var i=x.elOffset(e),s,n,r;switch(this.container!==document.body&&(s=x.elOffset(this.container),i.left-=s.left,i.top-=s.top),t){case"right":n=i.left+e.offsetWidth,r=i.top-1;break;case"bottom":n=i.left,r=i.top+e.offsetHeight;break;case"left":n=i.left,r=i.top-1;break;case"top":n=i.left,r=i.top;break;case"center":n=i.left+e.offsetWidth/2,r=i.top+e.offsetHeight/2;break}return{x:n,y:r,offset:i}}show(e,t){var i,s,n,r,o;return this.destroyed||this.table.destroyed?this:(e instanceof HTMLElement?(n=e,o=this.elementPositionCoords(e,t),r=o.offset,i=o.x,s=o.y):typeof e=="number"?(r={top:0,left:0},i=e,s=t):(o=this.containerEventCoords(e),i=o.x,s=o.y,this.reversedX=!1),this.element.style.top=s+"px",this.element.style.left=i+"px",this.container.appendChild(this.element),typeof this.renderedCallback=="function"&&this.renderedCallback(),this._fitToScreen(i,s,n,r,t),this.visible=!0,this.subscribe("table-destroy",this.destroyBinding),this.element.addEventListener("mousedown",a=>{a.stopPropagation()}),this)}_fitToScreen(e,t,i,s,n){var r=this.container===document.body?document.documentElement.scrollTop:this.container.scrollTop;(e+this.element.offsetWidth>=this.container.offsetWidth||this.reversedX)&&(this.element.style.left="",i?this.element.style.right=this.container.offsetWidth-s.left+"px":this.element.style.right=this.container.offsetWidth-e+"px",this.reversedX=!0);let o=Math.max(this.container.offsetHeight,r?this.container.scrollHeight:0);if(t+this.element.offsetHeight>o)if(i)switch(n){case"bottom":this.element.style.top=parseInt(this.element.style.top)-this.element.offsetHeight-i.offsetHeight-1+"px";break;default:this.element.style.top=parseInt(this.element.style.top)-this.element.offsetHeight+i.offsetHeight+1+"px"}else this.element.style.height=o+"px"}isVisible(){return this.visible}hideOnBlur(e){return this.blurable=!0,this.visible&&(setTimeout(()=>{this.visible&&(this.table.rowManager.element.addEventListener("scroll",this.blurEvent),this.subscribe("cell-editing",this.blurEvent),document.body.addEventListener("click",this.blurEvent),document.body.addEventListener("contextmenu",this.blurEvent),document.body.addEventListener("mousedown",this.blurEvent),window.addEventListener("resize",this.blurEvent),document.body.addEventListener("keydown",this.escEvent),this.blurEventsBound=!0)},100),this.blurCallback=e),this}_escapeCheck(e){e.keyCode==27&&this.hide()}blockHide(){this.hideable=!1}restoreHide(){this.hideable=!0}hide(e=!1){return this.visible&&this.hideable&&(this.blurable&&this.blurEventsBound&&(document.body.removeEventListener("keydown",this.escEvent),document.body.removeEventListener("click",this.blurEvent),document.body.removeEventListener("contextmenu",this.blurEvent),document.body.removeEventListener("mousedown",this.blurEvent),window.removeEventListener("resize",this.blurEvent),this.table.rowManager.element.removeEventListener("scroll",this.blurEvent),this.unsubscribe("cell-editing",this.blurEvent),this.blurEventsBound=!1),this.childPopup&&this.childPopup.hide(),this.parent&&(this.parent.childPopup=null),this.element.parentNode&&this.element.parentNode.removeChild(this.element),this.visible=!1,this.blurCallback&&!e&&this.blurCallback(),this.unsubscribe("table-destroy",this.destroyBinding)),this}child(e){return this.childPopup&&this.childPopup.hide(),this.childPopup=new Ke(this.table,e,this),this.childPopup}};class w extends M{constructor(e,t){super(e),this._handler=null}initialize(){}registerTableOption(e,t){this.table.optionsList.register(e,t)}registerColumnOption(e,t){this.table.columnManager.optionsList.register(e,t)}registerTableFunction(e,t){typeof this.table[e]>"u"?this.table[e]=(...i)=>(this.table.initGuard(e),t(...i)):console.warn("Unable to bind table function, name already in use",e)}registerComponentFunction(e,t,i){return this.table.componentFunctionBinder.bind(e,t,i)}registerDataHandler(e,t){this.table.rowManager.registerDataPipelineHandler(e,t),this._handler=e}registerDisplayHandler(e,t){this.table.rowManager.registerDisplayPipelineHandler(e,t),this._handler=e}displayRows(e){var t=this.table.rowManager.displayRows.length-1,i;if(this._handler&&(i=this.table.rowManager.displayPipeline.findIndex(s=>s.handler===this._handler),i>-1&&(t=i)),e&&(t=t+e),this._handler)return t>-1?this.table.rowManager.getDisplayRows(t):this.activeRows()}activeRows(){return this.table.rowManager.activeRows}refreshData(e,t){t||(t=this._handler),t&&this.table.rowManager.refreshActiveData(t,!1,e)}footerAppend(e){return this.table.footerManager.append(e)}footerPrepend(e){return this.table.footerManager.prepend(e)}footerRemove(e){return this.table.footerManager.remove(e)}popup(e,t){return new kt(this.table,e,t)}alert(e,t){return this.table.alertManager.alert(e,t)}clearAlert(){return this.table.alertManager.clear()}}var Mt={rownum:function(l,e,t,i,s,n){return n.getPosition()}};const K=class K extends w{constructor(e){super(e),this.allowedTypes=["","data","download","clipboard","print","htmlOutput"],this.registerColumnOption("accessor"),this.registerColumnOption("accessorParams"),this.registerColumnOption("accessorData"),this.registerColumnOption("accessorDataParams"),this.registerColumnOption("accessorDownload"),this.registerColumnOption("accessorDownloadParams"),this.registerColumnOption("accessorClipboard"),this.registerColumnOption("accessorClipboardParams"),this.registerColumnOption("accessorPrint"),this.registerColumnOption("accessorPrintParams"),this.registerColumnOption("accessorHtmlOutput"),this.registerColumnOption("accessorHtmlOutputParams")}initialize(){this.subscribe("column-layout",this.initializeColumn.bind(this)),this.subscribe("row-data-retrieve",this.transformRow.bind(this))}initializeColumn(e){var t=!1,i={};this.allowedTypes.forEach(s=>{var n="accessor"+(s.charAt(0).toUpperCase()+s.slice(1)),r;e.definition[n]&&(r=this.lookupAccessor(e.definition[n]),r&&(t=!0,i[n]={accessor:r,params:e.definition[n+"Params"]||{}}))}),t&&(e.modules.accessor=i)}lookupAccessor(e){var t=!1;switch(typeof e){case"string":K.accessors[e]?t=K.accessors[e]:console.warn("Accessor Error - No such accessor found, ignoring: ",e);break;case"function":t=e;break}return t}transformRow(e,t){var i="accessor"+(t.charAt(0).toUpperCase()+t.slice(1)),s=e.getComponent(),n=x.deepClone(e.data||{});return this.table.columnManager.traverse(function(r){var o,a,h,d;r.modules.accessor&&(a=r.modules.accessor[i]||r.modules.accessor.accessor||!1,a&&(o=r.getFieldValue(n),o!="undefined"&&(d=r.getComponent(),h=typeof a.params=="function"?a.params(o,n,t,d,s):a.params,r.setFieldValue(n,a.accessor(o,n,t,h,d,s)))))}),n}};b(K,"moduleName","accessor"),b(K,"accessors",Mt);let ce=K;var Lt={method:"GET"};function fe(l,e){var t=[];if(e=e||"",Array.isArray(l))l.forEach((s,n)=>{t=t.concat(fe(s,e?e+"["+n+"]":n))});else if(typeof l=="object")for(var i in l)t=t.concat(fe(l[i],e?e+"["+i+"]":i));else t.push({key:e,value:l});return t}function St(l){var e=fe(l),t=[];return e.forEach(function(i){t.push(encodeURIComponent(i.key)+"="+encodeURIComponent(i.value))}),t.join("&")}function qe(l,e,t){return l&&t&&Object.keys(t).length&&(!e.method||e.method.toLowerCase()=="get")&&(e.method="get",l+=(l.includes("?")?"&":"?")+St(t)),l}function Dt(l,e,t){var i;return new Promise((s,n)=>{if(l=this.urlGenerator.call(this.table,l,e,t),e.method.toUpperCase()!="GET")if(i=typeof this.table.options.ajaxContentType=="object"?this.table.options.ajaxContentType:this.contentTypeFormatters[this.table.options.ajaxContentType],i){for(var r in i.headers)e.headers||(e.headers={}),typeof e.headers[r]>"u"&&(e.headers[r]=i.headers[r]);e.body=i.body.call(this,l,e,t)}else console.warn("Ajax Error - Invalid ajaxContentType value:",this.table.options.ajaxContentType);l?(typeof e.headers>"u"&&(e.headers={}),typeof e.headers.Accept>"u"&&(e.headers.Accept="application/json"),typeof e.headers["X-Requested-With"]>"u"&&(e.headers["X-Requested-With"]="XMLHttpRequest"),typeof e.mode>"u"&&(e.mode="cors"),e.mode=="cors"?(typeof e.headers.Origin>"u"&&(e.headers.Origin=window.location.origin),typeof e.credentials>"u"&&(e.credentials="same-origin")):typeof e.credentials>"u"&&(e.credentials="include"),fetch(l,e).then(o=>{o.ok?o.json().then(a=>{s(a)}).catch(a=>{n(a),console.warn("Ajax Load Error - Invalid JSON returned",a)}):(console.error("Ajax Load Error - Connection Error: "+o.status,o.statusText),n(o))}).catch(o=>{console.error("Ajax Load Error - Connection Error: ",o),n(o)})):(console.warn("Ajax Load Error - No URL Set"),s([]))})}function pe(l,e){var t=[];if(e=e||"",Array.isArray(l))l.forEach((s,n)=>{t=t.concat(pe(s,e?e+"["+n+"]":n))});else if(typeof l=="object")for(var i in l)t=t.concat(pe(l[i],e?e+"["+i+"]":i));else t.push({key:e,value:l});return t}var zt={json:{headers:{"Content-Type":"application/json"},body:function(l,e,t){return JSON.stringify(t)}},form:{headers:{},body:function(l,e,t){var i=pe(t),s=new FormData;return i.forEach(function(n){s.append(n.key,n.value)}),s}}};const F=class F extends w{constructor(e){super(e),this.config={},this.url="",this.urlGenerator=!1,this.params=!1,this.loaderPromise=!1,this.registerTableOption("ajaxURL",!1),this.registerTableOption("ajaxURLGenerator",!1),this.registerTableOption("ajaxParams",{}),this.registerTableOption("ajaxConfig","get"),this.registerTableOption("ajaxContentType","form"),this.registerTableOption("ajaxRequestFunc",!1),this.registerTableOption("ajaxRequesting",function(){}),this.registerTableOption("ajaxResponse",!1),this.contentTypeFormatters=F.contentTypeFormatters}initialize(){this.loaderPromise=this.table.options.ajaxRequestFunc||F.defaultLoaderPromise,this.urlGenerator=this.table.options.ajaxURLGenerator||F.defaultURLGenerator,this.table.options.ajaxURL&&this.setUrl(this.table.options.ajaxURL),this.setDefaultConfig(this.table.options.ajaxConfig),this.registerTableFunction("getAjaxUrl",this.getUrl.bind(this)),this.subscribe("data-loading",this.requestDataCheck.bind(this)),this.subscribe("data-params",this.requestParams.bind(this)),this.subscribe("data-load",this.requestData.bind(this))}requestParams(e,t,i,s){var n=this.table.options.ajaxParams;return n&&(typeof n=="function"&&(n=n.call(this.table)),s=Object.assign(Object.assign({},n),s)),s}requestDataCheck(e,t,i,s){return!!(!e&&this.url||typeof e=="string")}requestData(e,t,i,s,n){var r;return!n&&this.requestDataCheck(e)?(e&&this.setUrl(e),r=this.generateConfig(i),this.sendRequest(this.url,t,r)):n}setDefaultConfig(e={}){this.config=Object.assign({},F.defaultConfig),typeof e=="string"?this.config.method=e:Object.assign(this.config,e)}generateConfig(e={}){var t=Object.assign({},this.config);return typeof e=="string"?t.method=e:Object.assign(t,e),t}setUrl(e){this.url=e}getUrl(){return this.url}sendRequest(e,t,i){return this.table.options.ajaxRequesting.call(this.table,e,t)!==!1?this.loaderPromise(e,i,t).then(s=>(this.table.options.ajaxResponse&&(s=this.table.options.ajaxResponse.call(this.table,e,t,s)),s)):Promise.reject()}};b(F,"moduleName","ajax"),b(F,"defaultConfig",Lt),b(F,"defaultURLGenerator",qe),b(F,"defaultLoaderPromise",Dt),b(F,"contentTypeFormatters",zt);let me=F;var Ht={replace:function(l){return this.table.setData(l)},update:function(l){return this.table.updateOrAddData(l)},insert:function(l){return this.table.addData(l)}},Ft={table:function(l){var e=[],t=!0,i=this.table.columnManager.columns,s=[],n=[];return l=l.split(` +`),l.forEach(function(r){e.push(r.split(" "))}),e.length&&!(e.length===1&&e[0].length<2)?(e[0].forEach(function(r){var o=i.find(function(a){return r&&a.definition.title&&r.trim()&&a.definition.title.trim()===r.trim()});o?s.push(o):t=!1}),t||(t=!0,s=[],e[0].forEach(function(r){var o=i.find(function(a){return r&&a.field&&r.trim()&&a.field.trim()===r.trim()});o?s.push(o):t=!1}),t||(s=this.table.columnManager.columnsByIndex)),t&&e.shift(),e.forEach(function(r){var o={};r.forEach(function(a,h){s[h]&&(o[s[h].field]=a)}),n.push(o)}),n):!1}},Pt={copyToClipboard:["ctrl + 67","meta + 67"]},Ot={copyToClipboard:function(l){this.table.modules.edit.currentCell||this.table.modExists("clipboard",!0)&&this.table.modules.clipboard.copy(!1,!0)}},At={keybindings:{bindings:Pt,actions:Ot}};const _=class _ extends w{constructor(e){super(e),this.mode=!0,this.pasteParser=function(){},this.pasteAction=function(){},this.customSelection=!1,this.rowRange=!1,this.blocked=!0,this.registerTableOption("clipboard",!1),this.registerTableOption("clipboardCopyStyled",!0),this.registerTableOption("clipboardCopyConfig",!1),this.registerTableOption("clipboardCopyFormatter",!1),this.registerTableOption("clipboardCopyRowRange","active"),this.registerTableOption("clipboardPasteParser","table"),this.registerTableOption("clipboardPasteAction","insert"),this.registerColumnOption("clipboard"),this.registerColumnOption("titleClipboard")}initialize(){this.mode=this.table.options.clipboard,this.rowRange=this.table.options.clipboardCopyRowRange,(this.mode===!0||this.mode==="copy")&&this.table.element.addEventListener("copy",e=>{var t,i,s;this.blocked||(e.preventDefault(),this.customSelection?(t=this.customSelection,this.table.options.clipboardCopyFormatter&&(t=this.table.options.clipboardCopyFormatter("plain",t))):(s=this.table.modules.export.generateExportList(this.table.options.clipboardCopyConfig,this.table.options.clipboardCopyStyled,this.rowRange,"clipboard"),i=this.table.modules.export.generateHTMLTable(s),t=i?this.generatePlainContent(s):"",this.table.options.clipboardCopyFormatter&&(t=this.table.options.clipboardCopyFormatter("plain",t),i=this.table.options.clipboardCopyFormatter("html",i))),window.clipboardData&&window.clipboardData.setData?window.clipboardData.setData("Text",t):e.clipboardData&&e.clipboardData.setData?(e.clipboardData.setData("text/plain",t),i&&e.clipboardData.setData("text/html",i)):e.originalEvent&&e.originalEvent.clipboardData.setData&&(e.originalEvent.clipboardData.setData("text/plain",t),i&&e.originalEvent.clipboardData.setData("text/html",i)),this.dispatchExternal("clipboardCopied",t,i),this.reset())}),(this.mode===!0||this.mode==="paste")&&this.table.element.addEventListener("paste",e=>{this.paste(e)}),this.setPasteParser(this.table.options.clipboardPasteParser),this.setPasteAction(this.table.options.clipboardPasteAction),this.registerTableFunction("copyToClipboard",this.copy.bind(this))}reset(){this.blocked=!0,this.customSelection=!1}generatePlainContent(e){var t=[];return e.forEach(i=>{var s=[];i.columns.forEach(n=>{var r="";if(n)if(i.type==="group"&&(n.value=n.component.getKey()),n.value===null)r="";else switch(typeof n.value){case"object":r=JSON.stringify(n.value);break;case"undefined":r="";break;default:r=n.value}s.push(r)}),t.push(s.join(" "))}),t.join(` +`)}copy(e,t){var i,s;this.blocked=!1,this.customSelection=!1,(this.mode===!0||this.mode==="copy")&&(this.rowRange=e||this.table.options.clipboardCopyRowRange,typeof window.getSelection<"u"&&typeof document.createRange<"u"?(e=document.createRange(),e.selectNodeContents(this.table.element),i=window.getSelection(),i.toString()&&t&&(this.customSelection=i.toString()),i.removeAllRanges(),i.addRange(e)):typeof document.selection<"u"&&typeof document.body.createTextRange<"u"&&(s=document.body.createTextRange(),s.moveToElementText(this.table.element),s.select()),document.execCommand("copy"),i&&i.removeAllRanges())}setPasteAction(e){switch(typeof e){case"string":this.pasteAction=_.pasteActions[e],this.pasteAction||console.warn("Clipboard Error - No such paste action found:",e);break;case"function":this.pasteAction=e;break}}setPasteParser(e){switch(typeof e){case"string":this.pasteParser=_.pasteParsers[e],this.pasteParser||console.warn("Clipboard Error - No such paste parser found:",e);break;case"function":this.pasteParser=e;break}}paste(e){var t,i,s;this.checkPasteOrigin(e)&&(t=this.getPasteData(e),i=this.pasteParser.call(this,t),i?(e.preventDefault(),this.table.modExists("mutator")&&(i=this.mutateData(i)),s=this.pasteAction.call(this,i),this.dispatchExternal("clipboardPasted",t,i,s)):this.dispatchExternal("clipboardPasteError",t))}mutateData(e){var t=[];return Array.isArray(e)?e.forEach(i=>{t.push(this.table.modules.mutator.transformRow(i,"clipboard"))}):t=e,t}checkPasteOrigin(e){var t=!0,i=this.confirm("clipboard-paste",[e]);return(i||!["DIV","SPAN"].includes(e.target.tagName))&&(t=!1),t}getPasteData(e){var t;return window.clipboardData&&window.clipboardData.getData?t=window.clipboardData.getData("Text"):e.clipboardData&&e.clipboardData.getData?t=e.clipboardData.getData("text/plain"):e.originalEvent&&e.originalEvent.clipboardData.getData&&(t=e.originalEvent.clipboardData.getData("text/plain")),t}};b(_,"moduleName","clipboard"),b(_,"moduleExtensions",At),b(_,"pasteActions",Ht),b(_,"pasteParsers",Ft);let ge=_;class _t{constructor(e){return this._row=e,new Proxy(this,{get:function(t,i,s){return typeof t[i]<"u"?t[i]:t._row.table.componentFunctionBinder.handle("row",t._row,i)}})}getData(e){return this._row.getData(e)}getElement(){return this._row.getElement()}getTable(){return this._row.table}getCells(){var e=[];return this._row.getCells().forEach(function(t){e.push(t.getComponent())}),e}getCell(e){var t=this._row.getCell(e);return t?t.getComponent():!1}_getSelf(){return this._row}}class Ye{constructor(e){return this._cell=e,new Proxy(this,{get:function(t,i,s){return typeof t[i]<"u"?t[i]:t._cell.table.componentFunctionBinder.handle("cell",t._cell,i)}})}getValue(){return this._cell.getValue()}getOldValue(){return this._cell.getOldValue()}getInitialValue(){return this._cell.initialValue}getElement(){return this._cell.getElement()}getRow(){return this._cell.row.getComponent()}getData(e){return this._cell.row.getData(e)}getType(){return"cell"}getField(){return this._cell.column.getField()}getColumn(){return this._cell.column.getComponent()}setValue(e,t){typeof t>"u"&&(t=!0),this._cell.setValue(e,t)}restoreOldValue(){this._cell.setValueActual(this._cell.getOldValue())}restoreInitialValue(){this._cell.setValueActual(this._cell.initialValue)}checkHeight(){this._cell.checkHeight()}getTable(){return this._cell.table}_getSelf(){return this._cell}}class ne extends M{constructor(e,t){super(e.table),this.table=e.table,this.column=e,this.row=t,this.element=null,this.value=null,this.initialValue,this.oldValue=null,this.modules={},this.height=null,this.width=null,this.minWidth=null,this.component=null,this.loaded=!1,this.build()}build(){this.generateElement(),this.setWidth(),this._configureCell(),this.setValueActual(this.column.getFieldValue(this.row.data)),this.initialValue=this.value}generateElement(){this.element=document.createElement("div"),this.element.className="tabulator-cell",this.element.setAttribute("role","gridcell"),this.column.isRowHeader&&this.element.classList.add("tabulator-row-header")}_configureCell(){var e=this.element,t=this.column.getField(),i={top:"flex-start",bottom:"flex-end",middle:"center"},s={left:"flex-start",right:"flex-end",center:"center"};if(e.style.textAlign=this.column.hozAlign,this.column.vertAlign&&(e.style.display="inline-flex",e.style.alignItems=i[this.column.vertAlign]||"",this.column.hozAlign&&(e.style.justifyContent=s[this.column.hozAlign]||"")),t&&e.setAttribute("tabulator-field",t),this.column.definition.cssClass){var n=this.column.definition.cssClass.split(" ");n.forEach(r=>{e.classList.add(r)})}this.dispatch("cell-init",this),this.column.visible||this.hide()}_generateContents(){var e;switch(e=this.chain("cell-format",this,null,()=>this.element.innerHTML=this.value),typeof e){case"object":if(e instanceof Node){for(;this.element.firstChild;)this.element.removeChild(this.element.firstChild);this.element.appendChild(e)}else this.element.innerHTML="",e!=null&&console.warn("Format Error - Formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:",e);break;case"undefined":this.element.innerHTML="";break;default:this.element.innerHTML=e}}cellRendered(){this.dispatch("cell-rendered",this)}getElement(e){return this.loaded||(this.loaded=!0,e||this.layoutElement()),this.element}getValue(){return this.value}getOldValue(){return this.oldValue}setValue(e,t,i){var s=this.setValueProcessData(e,t,i);s&&(this.dispatch("cell-value-updated",this),this.cellRendered(),this.column.definition.cellEdited&&this.column.definition.cellEdited.call(this.table,this.getComponent()),this.dispatchExternal("cellEdited",this.getComponent()),this.subscribedExternal("dataChanged")&&this.dispatchExternal("dataChanged",this.table.rowManager.getData()))}setValueProcessData(e,t,i){var s=!1;return(this.value!==e||i)&&(s=!0,t&&(e=this.chain("cell-value-changing",[this,e],null,e))),this.setValueActual(e),s&&this.dispatch("cell-value-changed",this),s}setValueActual(e){this.oldValue=this.value,this.value=e,this.dispatch("cell-value-save-before",this),this.column.setFieldValue(this.row.data,e),this.dispatch("cell-value-save-after",this),this.loaded&&this.layoutElement()}layoutElement(){this._generateContents(),this.dispatch("cell-layout",this)}setWidth(){this.width=this.column.width,this.element.style.width=this.column.widthStyled}clearWidth(){this.width="",this.element.style.width=""}getWidth(){return this.width||this.element.offsetWidth}setMinWidth(){this.minWidth=this.column.minWidth,this.element.style.minWidth=this.column.minWidthStyled}setMaxWidth(){this.maxWidth=this.column.maxWidth,this.element.style.maxWidth=this.column.maxWidthStyled}checkHeight(){this.row.reinitializeHeight()}clearHeight(){this.element.style.height="",this.height=null,this.dispatch("cell-height",this,"")}setHeight(){this.height=this.row.height,this.element.style.height=this.row.heightStyled,this.dispatch("cell-height",this,this.row.heightStyled)}getHeight(){return this.height||this.element.offsetHeight}show(){this.element.style.display=this.column.vertAlign?"inline-flex":""}hide(){this.element.style.display="none"}delete(){this.dispatch("cell-delete",this),!this.table.rowManager.redrawBlock&&this.element.parentNode&&this.element.parentNode.removeChild(this.element),this.element=!1,this.column.deleteCell(this),this.row.deleteCell(this),this.calcs={}}getIndex(){return this.row.getCellIndex(this)}getComponent(){return this.component||(this.component=new Ye(this)),this.component}}class $e{constructor(e){return this._column=e,this.type="ColumnComponent",new Proxy(this,{get:function(t,i,s){return typeof t[i]<"u"?t[i]:t._column.table.componentFunctionBinder.handle("column",t._column,i)}})}getElement(){return this._column.getElement()}getDefinition(){return this._column.getDefinition()}getField(){return this._column.getField()}getTitleDownload(){return this._column.getTitleDownload()}getCells(){var e=[];return this._column.cells.forEach(function(t){e.push(t.getComponent())}),e}isVisible(){return this._column.visible}show(){this._column.isGroup?this._column.columns.forEach(function(e){e.show()}):this._column.show()}hide(){this._column.isGroup?this._column.columns.forEach(function(e){e.hide()}):this._column.hide()}toggle(){this._column.visible?this.hide():this.show()}delete(){return this._column.delete()}getSubColumns(){var e=[];return this._column.columns.length&&this._column.columns.forEach(function(t){e.push(t.getComponent())}),e}getParentColumn(){return this._column.getParentComponent()}_getSelf(){return this._column}scrollTo(e,t){return this._column.table.columnManager.scrollToColumn(this._column,e,t)}getTable(){return this._column.table}move(e,t){var i=this._column.table.columnManager.findColumn(e);i?this._column.table.columnManager.moveColumn(this._column,i,t):console.warn("Move Error - No matching column found:",i)}getNextColumn(){var e=this._column.nextColumn();return e?e.getComponent():!1}getPrevColumn(){var e=this._column.prevColumn();return e?e.getComponent():!1}updateDefinition(e){return this._column.updateDefinition(e)}getWidth(){return this._column.getWidth()}setWidth(e){var t;return e===!0?t=this._column.reinitializeWidth(!0):t=this._column.setWidth(e),this._column.table.columnManager.rerenderColumns(!0),t}}var Qe={title:void 0,field:void 0,columns:void 0,visible:void 0,hozAlign:void 0,vertAlign:void 0,width:void 0,minWidth:40,maxWidth:void 0,maxInitialWidth:void 0,cssClass:void 0,variableHeight:void 0,headerVertical:void 0,headerHozAlign:void 0,headerWordWrap:!1,editableTitle:void 0};const W=class W extends M{constructor(e,t,i){super(t.table),this.definition=e,this.parent=t,this.type="column",this.columns=[],this.cells=[],this.isGroup=!1,this.isRowHeader=i,this.element=this.createElement(),this.contentElement=!1,this.titleHolderElement=!1,this.titleElement=!1,this.groupElement=this.createGroupElement(),this.hozAlign="",this.vertAlign="",this.field="",this.fieldStructure="",this.getFieldValue="",this.setFieldValue="",this.titleDownload=null,this.titleFormatterRendered=!1,this.mapDefinitions(),this.setField(this.definition.field),this.modules={},this.width=null,this.widthStyled="",this.maxWidth=null,this.maxWidthStyled="",this.maxInitialWidth=null,this.minWidth=null,this.minWidthStyled="",this.widthFixed=!1,this.visible=!0,this.component=null,this.definition.columns?(this.isGroup=!0,this.definition.columns.forEach((s,n)=>{var r=new W(s,this);this.attachColumn(r)}),this.checkColumnVisibility()):t.registerColumnField(this),this._initialize()}createElement(){var e=document.createElement("div");switch(e.classList.add("tabulator-col"),e.setAttribute("role","columnheader"),e.setAttribute("aria-sort","none"),this.isRowHeader&&e.classList.add("tabulator-row-header"),this.table.options.columnHeaderVertAlign){case"middle":e.style.justifyContent="center";break;case"bottom":e.style.justifyContent="flex-end";break}return e}createGroupElement(){var e=document.createElement("div");return e.classList.add("tabulator-col-group-cols"),e}mapDefinitions(){var e=this.table.options.columnDefaults;if(e)for(let t in e)typeof this.definition[t]>"u"&&(this.definition[t]=e[t]);this.definition=this.table.columnManager.optionsList.generate(W.defaultOptionList,this.definition)}checkDefinition(){Object.keys(this.definition).forEach(e=>{W.defaultOptionList.indexOf(e)===-1&&console.warn("Invalid column definition option in '"+(this.field||this.definition.title)+"' column:",e)})}setField(e){this.field=e,this.fieldStructure=e?this.table.options.nestedFieldSeparator?e.split(this.table.options.nestedFieldSeparator):[e]:[],this.getFieldValue=this.fieldStructure.length>1?this._getNestedData:this._getFlatData,this.setFieldValue=this.fieldStructure.length>1?this._setNestedData:this._setFlatData}registerColumnPosition(e){this.parent.registerColumnPosition(e)}registerColumnField(e){this.parent.registerColumnField(e)}reRegisterPosition(){this.isGroup?this.columns.forEach(function(e){e.reRegisterPosition()}):this.registerColumnPosition(this)}_initialize(){for(var e=this.definition;this.element.firstChild;)this.element.removeChild(this.element.firstChild);e.headerVertical&&(this.element.classList.add("tabulator-col-vertical"),e.headerVertical==="flip"&&this.element.classList.add("tabulator-col-vertical-flip")),this.contentElement=this._buildColumnHeaderContent(),this.element.appendChild(this.contentElement),this.isGroup?this._buildGroupHeader():this._buildColumnHeader(),this.dispatch("column-init",this)}_buildColumnHeader(){var e=this.definition;if(this.dispatch("column-layout",this),typeof e.visible<"u"&&(e.visible?this.show(!0):this.hide(!0)),e.cssClass){var t=e.cssClass.split(" ");t.forEach(i=>{this.element.classList.add(i)})}e.field&&this.element.setAttribute("tabulator-field",e.field),this.setMinWidth(parseInt(e.minWidth)),e.maxInitialWidth&&(this.maxInitialWidth=parseInt(e.maxInitialWidth)),e.maxWidth&&this.setMaxWidth(parseInt(e.maxWidth)),this.reinitializeWidth(),this.hozAlign=this.definition.hozAlign,this.vertAlign=this.definition.vertAlign,this.titleElement.style.textAlign=this.definition.headerHozAlign}_buildColumnHeaderContent(){var e=document.createElement("div");return e.classList.add("tabulator-col-content"),this.titleHolderElement=document.createElement("div"),this.titleHolderElement.classList.add("tabulator-col-title-holder"),e.appendChild(this.titleHolderElement),this.titleElement=this._buildColumnHeaderTitle(),this.titleHolderElement.appendChild(this.titleElement),e}_buildColumnHeaderTitle(){var e=this.definition,t=document.createElement("div");if(t.classList.add("tabulator-col-title"),e.headerWordWrap&&t.classList.add("tabulator-col-title-wrap"),e.editableTitle){var i=document.createElement("input");i.classList.add("tabulator-title-editor"),i.addEventListener("click",s=>{s.stopPropagation(),i.focus()}),i.addEventListener("mousedown",s=>{s.stopPropagation()}),i.addEventListener("change",()=>{e.title=i.value,this.dispatchExternal("columnTitleChanged",this.getComponent())}),t.appendChild(i),e.field?this.langBind("columns|"+e.field,s=>{i.value=s||e.title||" "}):i.value=e.title||" "}else e.field?this.langBind("columns|"+e.field,s=>{this._formatColumnHeaderTitle(t,s||e.title||" ")}):this._formatColumnHeaderTitle(t,e.title||" ");return t}_formatColumnHeaderTitle(e,t){var i=this.chain("column-format",[this,t,e],null,()=>t);switch(typeof i){case"object":i instanceof Node?e.appendChild(i):(e.innerHTML="",console.warn("Format Error - Title formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:",i));break;case"undefined":e.innerHTML="";break;default:e.innerHTML=i}}_buildGroupHeader(){if(this.element.classList.add("tabulator-col-group"),this.element.setAttribute("role","columngroup"),this.element.setAttribute("aria-title",this.definition.title),this.definition.cssClass){var e=this.definition.cssClass.split(" ");e.forEach(t=>{this.element.classList.add(t)})}this.titleElement.style.textAlign=this.definition.headerHozAlign,this.element.appendChild(this.groupElement)}_getFlatData(e){return e[this.field]}_getNestedData(e){var t=e,i=this.fieldStructure,s=i.length,n;for(let r=0;r{t.push(i),t=t.concat(i.getColumns(!0))}):t=this.columns,t}getCells(){return this.cells}getTopColumn(){return this.parent.isGroup?this.parent.getTopColumn():this}getDefinition(e){var t=[];return this.isGroup&&e&&(this.columns.forEach(function(i){t.push(i.getDefinition(!0))}),this.definition.columns=t),this.definition}checkColumnVisibility(){var e=!1;this.columns.forEach(function(t){t.visible&&(e=!0)}),e?(this.show(),this.dispatchExternal("columnVisibilityChanged",this.getComponent(),!1)):this.hide()}show(e,t){this.visible||(this.visible=!0,this.element.style.display="",this.parent.isGroup&&this.parent.checkColumnVisibility(),this.cells.forEach(function(i){i.show()}),!this.isGroup&&this.width===null&&this.reinitializeWidth(),this.table.columnManager.verticalAlignHeaders(),this.dispatch("column-show",this,t),e||this.dispatchExternal("columnVisibilityChanged",this.getComponent(),!0),this.parent.isGroup&&this.parent.matchChildWidths(),this.silent||this.table.columnManager.rerenderColumns())}hide(e,t){this.visible&&(this.visible=!1,this.element.style.display="none",this.table.columnManager.verticalAlignHeaders(),this.parent.isGroup&&this.parent.checkColumnVisibility(),this.cells.forEach(function(i){i.hide()}),this.dispatch("column-hide",this,t),e||this.dispatchExternal("columnVisibilityChanged",this.getComponent(),!1),this.parent.isGroup&&this.parent.matchChildWidths(),this.silent||this.table.columnManager.rerenderColumns())}matchChildWidths(){var e=0;this.contentElement&&this.columns.length&&(this.columns.forEach(function(t){t.visible&&(e+=t.getWidth())}),this.contentElement.style.maxWidth=e-1+"px",this.table.initialized&&(this.element.style.width=e+"px"),this.parent.isGroup&&this.parent.matchChildWidths())}removeChild(e){var t=this.columns.indexOf(e);t>-1&&this.columns.splice(t,1),this.columns.length||this.delete()}setWidth(e){this.widthFixed=!0,this.setWidthActual(e)}setWidthActual(e){isNaN(e)&&(e=Math.floor(this.table.element.clientWidth/100*parseInt(e))),e=Math.max(this.minWidth,e),this.maxWidth&&(e=Math.min(this.maxWidth,e)),this.width=e,this.widthStyled=e?e+"px":"",this.element.style.width=this.widthStyled,this.isGroup||this.cells.forEach(function(t){t.setWidth()}),this.parent.isGroup&&this.parent.matchChildWidths(),this.dispatch("column-width",this),this.subscribedExternal("columnWidth")&&this.dispatchExternal("columnWidth",this.getComponent())}checkCellHeights(){var e=[];this.cells.forEach(function(t){t.row.heightInitialized&&(t.row.getElement().offsetParent!==null?(e.push(t.row),t.row.clearCellHeight()):t.row.heightInitialized=!1)}),e.forEach(function(t){t.calcHeight()}),e.forEach(function(t){t.setCellHeight()})}getWidth(){var e=0;return this.isGroup?this.columns.forEach(function(t){t.visible&&(e+=t.getWidth())}):e=this.width,e}getLeftOffset(){var e=this.element.offsetLeft;return this.parent.isGroup&&(e+=this.parent.getLeftOffset()),e}getHeight(){return Math.ceil(this.element.getBoundingClientRect().height)}setMinWidth(e){this.maxWidth&&e>this.maxWidth&&(e=this.maxWidth,console.warn("the minWidth ("+e+"px) for column '"+this.field+"' cannot be bigger that its maxWidth ("+this.maxWidthStyled+")")),this.minWidth=e,this.minWidthStyled=e?e+"px":"",this.element.style.minWidth=this.minWidthStyled,this.cells.forEach(function(t){t.setMinWidth()})}setMaxWidth(e){this.minWidth&&e{this.isGroup&&this.columns.forEach(function(s){s.delete()}),this.dispatch("column-delete",this);var i=this.cells.length;for(let s=0;s-1?this._nextVisibleColumn(e+1):!1}_nextVisibleColumn(e){var t=this.table.columnManager.getColumnByIndex(e);return!t||t.visible?t:this._nextVisibleColumn(e+1)}prevColumn(){var e=this.table.columnManager.findColumnIndex(this);return e>-1?this._prevVisibleColumn(e-1):!1}_prevVisibleColumn(e){var t=this.table.columnManager.getColumnByIndex(e);return!t||t.visible?t:this._prevVisibleColumn(e-1)}reinitializeWidth(e){this.widthFixed=!1,typeof this.definition.width<"u"&&!e&&this.setWidth(this.definition.width),this.dispatch("column-width-fit-before",this),this.fitToData(e),this.dispatch("column-width-fit-after",this)}fitToData(e){if(!this.isGroup){this.widthFixed||(this.element.style.width="",this.cells.forEach(s=>{s.clearWidth()}));var t=this.element.offsetWidth;if((!this.width||!this.widthFixed)&&(this.cells.forEach(s=>{var n=s.getWidth();n>t&&(t=n)}),t)){var i=t+1;this.maxInitialWidth&&!e&&(i=Math.min(i,this.maxInitialWidth)),this.setWidthActual(i)}}}updateDefinition(e){var t;return this.isGroup||this.parent.isGroup?(console.error("Column Update Error - The updateDefinition function is only available on ungrouped columns"),Promise.reject("Column Update Error - The updateDefinition function is only available on columns, not column groups")):(t=Object.assign({},this.getDefinition()),t=Object.assign(t,e),this.table.columnManager.addColumn(t,!1,this).then(i=>(t.field==this.field&&(this.field=!1),this.delete().then(()=>i.getComponent()))))}deleteCell(e){var t=this.cells.indexOf(e);t>-1&&this.cells.splice(t,1)}getComponent(){return this.component||(this.component=new $e(this)),this.component}getPosition(){return this.table.columnManager.getVisibleColumnsByIndex().indexOf(this)+1}getParentComponent(){return this.parent instanceof W?this.parent.getComponent():!1}};b(W,"defaultOptionList",Qe);let U=W;class oe{constructor(e){return this._row=e,new Proxy(this,{get:function(t,i,s){return typeof t[i]<"u"?t[i]:t._row.table.componentFunctionBinder.handle("row",t._row,i)}})}getData(e){return this._row.getData(e)}getElement(){return this._row.getElement()}getCells(){var e=[];return this._row.getCells().forEach(function(t){e.push(t.getComponent())}),e}getCell(e){var t=this._row.getCell(e);return t?t.getComponent():!1}getIndex(){return this._row.getData("data")[this._row.table.options.index]}getPosition(){return this._row.getPosition()}watchPosition(e){return this._row.watchPosition(e)}delete(){return this._row.delete()}scrollTo(e,t){return this._row.table.rowManager.scrollToRow(this._row,e,t)}move(e,t){this._row.moveToRow(e,t)}update(e){return this._row.updateData(e)}normalizeHeight(){this._row.normalizeHeight(!0)}_getSelf(){return this._row}reformat(){return this._row.reinitialize()}getTable(){return this._row.table}getNextRow(){var e=this._row.nextRow();return e&&e.getComponent()}getPrevRow(){var e=this._row.prevRow();return e&&e.getComponent()}}class S extends M{constructor(e,t,i="row"){super(t.table),this.parent=t,this.data={},this.type=i,this.element=!1,this.modules={},this.cells=[],this.height=0,this.heightStyled="",this.manualHeight=!1,this.outerHeight=0,this.initialized=!1,this.heightInitialized=!1,this.position=0,this.positionWatchers=[],this.component=null,this.created=!1,this.setData(e)}create(){this.created||(this.created=!0,this.generateElement())}createElement(){var e=document.createElement("div");e.classList.add("tabulator-row"),e.setAttribute("role","row"),this.element=e}getElement(){return this.create(),this.element}detachElement(){this.element&&this.element.parentNode&&this.element.parentNode.removeChild(this.element)}generateElement(){this.createElement(),this.dispatch("row-init",this)}generateCells(){this.cells=this.table.columnManager.generateCells(this)}initialize(e,t){if(this.create(),!this.initialized||e){for(this.deleteCells();this.element.firstChild;)this.element.removeChild(this.element.firstChild);this.dispatch("row-layout-before",this),this.generateCells(),this.initialized=!0,this.table.columnManager.renderer.renderRowCells(this,t),e&&this.normalizeHeight(),this.dispatch("row-layout",this),this.table.options.rowFormatter&&this.table.options.rowFormatter(this.getComponent()),this.dispatch("row-layout-after",this)}else this.table.columnManager.renderer.rerenderRowCells(this,t)}rendered(){this.cells.forEach(e=>{e.cellRendered()})}reinitializeHeight(){this.heightInitialized=!1,this.element&&this.element.offsetParent!==null&&this.normalizeHeight(!0)}deinitialize(){this.initialized=!1}deinitializeHeight(){this.heightInitialized=!1}reinitialize(e){this.initialized=!1,this.heightInitialized=!1,this.manualHeight||(this.height=0,this.heightStyled=""),this.element&&this.element.offsetParent!==null&&this.initialize(!0),this.dispatch("row-relayout",this)}calcHeight(e){var t=0,i=0;this.table.options.rowHeight?this.height=this.table.options.rowHeight:(i=this.calcMinHeight(),t=this.calcMaxHeight(),e?this.height=Math.max(t,i):this.height=this.manualHeight?this.height:Math.max(t,i)),this.heightStyled=this.height?this.height+"px":"",this.outerHeight=this.element.offsetHeight}calcMinHeight(){return this.table.options.resizableRows?this.element.clientHeight:0}calcMaxHeight(){var e=0;return this.cells.forEach(function(t){var i=t.getHeight();i>e&&(e=i)}),e}setCellHeight(){this.cells.forEach(function(e){e.setHeight()}),this.heightInitialized=!0}clearCellHeight(){this.cells.forEach(function(e){e.clearHeight()})}normalizeHeight(e){e&&!this.table.options.rowHeight&&this.clearCellHeight(),this.calcHeight(e),this.setCellHeight()}setHeight(e,t){(this.height!=e||t)&&(this.manualHeight=!0,this.height=e,this.heightStyled=e?e+"px":"",this.setCellHeight(),this.outerHeight=this.element.offsetHeight,this.subscribedExternal("rowHeight")&&this.dispatchExternal("rowHeight",this.getComponent()))}getHeight(){return this.outerHeight}getWidth(){return this.element.offsetWidth}deleteCell(e){var t=this.cells.indexOf(e);t>-1&&this.cells.splice(t,1)}setData(e){this.data=this.chain("row-data-init-before",[this,e],void 0,e),this.dispatch("row-data-init-after",this)}updateData(e){var t=this.element&&x.elVisible(this.element),i={},s;return new Promise((n,r)=>{typeof e=="string"&&(e=JSON.parse(e)),this.dispatch("row-data-save-before",this),this.subscribed("row-data-changing")&&(i=Object.assign(i,this.data),i=Object.assign(i,e)),s=this.chain("row-data-changing",[this,i,e],null,e);for(let o in s)this.data[o]=s[o];this.dispatch("row-data-save-after",this);for(let o in e)this.table.columnManager.getColumnsByFieldRoot(o).forEach(h=>{let d=this.getCell(h.getField());if(d){let u=h.getFieldValue(s);d.getValue()!==u&&(d.setValueProcessData(u),t&&d.cellRendered())}});t?(this.normalizeHeight(!0),this.table.options.rowFormatter&&this.table.options.rowFormatter(this.getComponent())):(this.initialized=!1,this.height=0,this.heightStyled=""),this.dispatch("row-data-changed",this,t,e),this.dispatchExternal("rowUpdated",this.getComponent()),this.subscribedExternal("dataChanged")&&this.dispatchExternal("dataChanged",this.table.rowManager.getData()),n()})}getData(e){return e?this.chain("row-data-retrieve",[this,e],null,this.data):this.data}getCell(e){var t=!1;return e=this.table.columnManager.findColumn(e),!this.initialized&&this.cells.length===0&&this.generateCells(),t=this.cells.find(function(i){return i.column===e}),t}getCellIndex(e){return this.cells.findIndex(function(t){return t===e})}findCell(e){return this.cells.find(t=>t.element===e)}getCells(){return!this.initialized&&this.cells.length===0&&this.generateCells(),this.cells}nextRow(){var e=this.table.rowManager.nextDisplayRow(this,!0);return e||!1}prevRow(){var e=this.table.rowManager.prevDisplayRow(this,!0);return e||!1}moveToRow(e,t){var i=this.table.rowManager.findRow(e);i?(this.table.rowManager.moveRowActual(this,i,!t),this.table.rowManager.refreshActiveData("display",!1,!0)):console.warn("Move Error - No matching row found:",e)}delete(){return this.dispatch("row-delete",this),this.deleteActual(),Promise.resolve()}deleteActual(e){this.detachModules(),this.table.rowManager.deleteRow(this,e),this.deleteCells(),this.initialized=!1,this.heightInitialized=!1,this.element=!1,this.dispatch("row-deleted",this)}detachModules(){this.dispatch("row-deleting",this)}deleteCells(){var e=this.cells.length;for(let t=0;t{t(this.position)}))}watchPosition(e){this.positionWatchers.push(e),e(this.position)}getGroup(){return this.modules.group||!1}getComponent(){return this.component||(this.component=new oe(this)),this.component}}var Bt={avg:function(l,e,t){var i=0,s=typeof t.precision<"u"?t.precision:2;return l.length&&(i=l.reduce(function(n,r){return Number(n)+Number(r)}),i=i/l.length,i=s!==!1?i.toFixed(s):i),parseFloat(i).toString()},max:function(l,e,t){var i=null,s=typeof t.precision<"u"?t.precision:!1;return l.forEach(function(n){n=Number(n),(n>i||i===null)&&(i=n)}),i!==null?s!==!1?i.toFixed(s):i:""},min:function(l,e,t){var i=null,s=typeof t.precision<"u"?t.precision:!1;return l.forEach(function(n){n=Number(n),(n(l||s===0)&&l.indexOf(s)===n);return i.length}};const B=class B extends w{constructor(e){super(e),this.topCalcs=[],this.botCalcs=[],this.genColumn=!1,this.topElement=this.createElement(),this.botElement=this.createElement(),this.topRow=!1,this.botRow=!1,this.topInitialized=!1,this.botInitialized=!1,this.blocked=!1,this.recalcAfterBlock=!1,this.registerTableOption("columnCalcs",!0),this.registerColumnOption("topCalc"),this.registerColumnOption("topCalcParams"),this.registerColumnOption("topCalcFormatter"),this.registerColumnOption("topCalcFormatterParams"),this.registerColumnOption("bottomCalc"),this.registerColumnOption("bottomCalcParams"),this.registerColumnOption("bottomCalcFormatter"),this.registerColumnOption("bottomCalcFormatterParams")}createElement(){var e=document.createElement("div");return e.classList.add("tabulator-calcs-holder"),e}initialize(){this.genColumn=new U({field:"value"},this),this.subscribe("cell-value-changed",this.cellValueChanged.bind(this)),this.subscribe("column-init",this.initializeColumnCheck.bind(this)),this.subscribe("row-deleted",this.rowsUpdated.bind(this)),this.subscribe("scroll-horizontal",this.scrollHorizontal.bind(this)),this.subscribe("row-added",this.rowsUpdated.bind(this)),this.subscribe("column-moved",this.recalcActiveRows.bind(this)),this.subscribe("column-add",this.recalcActiveRows.bind(this)),this.subscribe("data-refreshed",this.recalcActiveRowsRefresh.bind(this)),this.subscribe("table-redraw",this.tableRedraw.bind(this)),this.subscribe("rows-visible",this.visibleRows.bind(this)),this.subscribe("scrollbar-vertical",this.adjustForScrollbar.bind(this)),this.subscribe("redraw-blocked",this.blockRedraw.bind(this)),this.subscribe("redraw-restored",this.restoreRedraw.bind(this)),this.subscribe("table-redrawing",this.resizeHolderWidth.bind(this)),this.subscribe("column-resized",this.resizeHolderWidth.bind(this)),this.subscribe("column-show",this.resizeHolderWidth.bind(this)),this.subscribe("column-hide",this.resizeHolderWidth.bind(this)),this.registerTableFunction("getCalcResults",this.getResults.bind(this)),this.registerTableFunction("recalc",this.userRecalc.bind(this)),this.resizeHolderWidth()}resizeHolderWidth(){this.topElement.style.minWidth=this.table.columnManager.headersElement.offsetWidth+"px"}tableRedraw(e){this.recalc(this.table.rowManager.activeRows),e&&this.redraw()}blockRedraw(){this.blocked=!0,this.recalcAfterBlock=!1}restoreRedraw(){this.blocked=!1,this.recalcAfterBlock&&(this.recalcAfterBlock=!1,this.recalcActiveRowsRefresh())}userRecalc(){this.recalc(this.table.rowManager.activeRows)}blockCheck(){return this.blocked&&(this.recalcAfterBlock=!0),this.blocked}visibleRows(e,t){return this.topRow&&t.unshift(this.topRow),this.botRow&&t.push(this.botRow),t}rowsUpdated(e){this.table.options.groupBy?this.recalcRowGroup(e):this.recalcActiveRows()}recalcActiveRowsRefresh(){this.table.options.groupBy&&this.table.options.dataTreeStartExpanded&&this.table.options.dataTree?this.recalcAll():this.recalcActiveRows()}recalcActiveRows(){this.recalc(this.table.rowManager.activeRows)}cellValueChanged(e){(e.column.definition.topCalc||e.column.definition.bottomCalc)&&(this.table.options.groupBy?((this.table.options.columnCalcs=="table"||this.table.options.columnCalcs=="both")&&this.recalcActiveRows(),this.table.options.columnCalcs!="table"&&this.recalcRowGroup(e.row)):this.recalcActiveRows())}initializeColumnCheck(e){(e.definition.topCalc||e.definition.bottomCalc)&&this.initializeColumn(e)}initializeColumn(e){var t=e.definition,i={topCalcParams:t.topCalcParams||{},botCalcParams:t.bottomCalcParams||{}};if(t.topCalc){switch(typeof t.topCalc){case"string":B.calculations[t.topCalc]?i.topCalc=B.calculations[t.topCalc]:console.warn("Column Calc Error - No such calculation found, ignoring: ",t.topCalc);break;case"function":i.topCalc=t.topCalc;break}i.topCalc&&(e.modules.columnCalcs=i,this.topCalcs.push(e),this.table.options.columnCalcs!="group"&&this.initializeTopRow())}if(t.bottomCalc){switch(typeof t.bottomCalc){case"string":B.calculations[t.bottomCalc]?i.botCalc=B.calculations[t.bottomCalc]:console.warn("Column Calc Error - No such calculation found, ignoring: ",t.bottomCalc);break;case"function":i.botCalc=t.bottomCalc;break}i.botCalc&&(e.modules.columnCalcs=i,this.botCalcs.push(e),this.table.options.columnCalcs!="group"&&this.initializeBottomRow())}}registerColumnField(){}removeCalcs(){var e=!1;this.topInitialized&&(this.topInitialized=!1,this.topElement.parentNode.removeChild(this.topElement),e=!0),this.botInitialized&&(this.botInitialized=!1,this.footerRemove(this.botElement),e=!0),e&&this.table.rowManager.adjustTableSize()}reinitializeCalcs(){this.topCalcs.length&&this.initializeTopRow(),this.botCalcs.length&&this.initializeBottomRow()}initializeTopRow(){var e=document.createDocumentFragment();this.topInitialized||(e.appendChild(document.createElement("br")),e.appendChild(this.topElement),this.table.columnManager.getContentsElement().insertBefore(e,this.table.columnManager.headersElement.nextSibling),this.topInitialized=!0)}initializeBottomRow(){this.botInitialized||(this.footerPrepend(this.botElement),this.botInitialized=!0)}scrollHorizontal(e){this.botInitialized&&this.botRow&&(this.botElement.scrollLeft=e)}recalc(e){var t,i;if(!this.blockCheck()&&(this.topInitialized||this.botInitialized)){if(t=this.rowsToData(e),this.topInitialized){for(this.topRow&&this.topRow.deleteCells(),i=this.generateRow("top",t),this.topRow=i;this.topElement.firstChild;)this.topElement.removeChild(this.topElement.firstChild);this.topElement.appendChild(i.getElement()),i.initialize(!0)}if(this.botInitialized){for(this.botRow&&this.botRow.deleteCells(),i=this.generateRow("bottom",t),this.botRow=i;this.botElement.firstChild;)this.botElement.removeChild(this.botElement.firstChild);this.botElement.appendChild(i.getElement()),i.initialize(!0)}this.table.rowManager.adjustTableSize(),this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layout()}}recalcRowGroup(e){this.recalcGroup(this.table.modules.groupRows.getRowGroup(e))}recalcAll(){if((this.topCalcs.length||this.botCalcs.length)&&(this.table.options.columnCalcs!=="group"&&this.recalcActiveRows(),this.table.options.groupBy&&this.table.options.columnCalcs!=="table")){var e=this.table.modules.groupRows.getChildGroups();e.forEach(t=>{this.recalcGroup(t)})}}recalcGroup(e){var t,i;this.blockCheck()||e&&e.calcs&&(e.calcs.bottom&&(t=this.rowsToData(e.rows),i=this.generateRowData("bottom",t),e.calcs.bottom.updateData(i),e.calcs.bottom.reinitialize()),e.calcs.top&&(t=this.rowsToData(e.rows),i=this.generateRowData("top",t),e.calcs.top.updateData(i),e.calcs.top.reinitialize()))}generateTopRow(e){return this.generateRow("top",this.rowsToData(e))}generateBottomRow(e){return this.generateRow("bottom",this.rowsToData(e))}rowsToData(e){var t=[],i=this.table.options.dataTree&&this.table.options.dataTreeChildColumnCalcs,s=this.table.modules.dataTree;return e.forEach(n=>{var r;t.push(n.getData()),i&&((r=n.modules.dataTree)!=null&&r.open)&&this.rowsToData(s.getFilteredTreeChildren(n)).forEach(o=>{t.push(n)})}),t}generateRow(e,t){var i=this.generateRowData(e,t),s;return this.table.modExists("mutator")&&this.table.modules.mutator.disable(),s=new S(i,this,"calc"),this.table.modExists("mutator")&&this.table.modules.mutator.enable(),s.getElement().classList.add("tabulator-calcs","tabulator-calcs-"+e),s.component=!1,s.getComponent=()=>(s.component||(s.component=new _t(s)),s.component),s.generateCells=()=>{var n=[];this.table.columnManager.columnsByIndex.forEach(r=>{this.genColumn.setField(r.getField()),this.genColumn.hozAlign=r.hozAlign,r.definition[e+"CalcFormatter"]&&this.table.modExists("format")?this.genColumn.modules.format={formatter:this.table.modules.format.getFormatter(r.definition[e+"CalcFormatter"]),params:r.definition[e+"CalcFormatterParams"]||{}}:this.genColumn.modules.format={formatter:this.table.modules.format.getFormatter("plaintext"),params:{}},this.genColumn.definition.cssClass=r.definition.cssClass;var o=new ne(this.genColumn,s);o.getElement(),o.column=r,o.setWidth(),r.cells.push(o),n.push(o),r.visible||o.hide()}),s.cells=n},s}generateRowData(e,t){var i={},s=e=="top"?this.topCalcs:this.botCalcs,n=e=="top"?"topCalc":"botCalc",r,o;return s.forEach(function(a){var h=[];a.modules.columnCalcs&&a.modules.columnCalcs[n]&&(t.forEach(function(d){h.push(a.getFieldValue(d))}),o=n+"Params",r=typeof a.modules.columnCalcs[o]=="function"?a.modules.columnCalcs[o](h,t):a.modules.columnCalcs[o],a.setFieldValue(i,a.modules.columnCalcs[n](h,t,r)))}),i}hasTopCalcs(){return!!this.topCalcs.length}hasBottomCalcs(){return!!this.botCalcs.length}redraw(){this.topRow&&this.topRow.normalizeHeight(!0),this.botRow&&this.botRow.normalizeHeight(!0)}getResults(){var e={},t;return this.table.options.groupBy&&this.table.modExists("groupRows")?(t=this.table.modules.groupRows.getGroups(!0),t.forEach(i=>{e[i.getKey()]=this.getGroupResults(i)})):e={top:this.topRow?this.topRow.getData():{},bottom:this.botRow?this.botRow.getData():{}},e}getGroupResults(e){var t=e._getSelf(),i=e.getSubGroups(),s={},n={};return i.forEach(r=>{s[r.getKey()]=this.getGroupResults(r)}),n={top:t.calcs.top?t.calcs.top.getData():{},bottom:t.calcs.bottom?t.calcs.bottom.getData():{},groups:s},n}adjustForScrollbar(e){this.botRow&&(this.table.rtl?this.botElement.style.paddingLeft=e+"px":this.botElement.style.paddingRight=e+"px")}};b(B,"moduleName","columnCalcs"),b(B,"calculations",Bt);let be=B;class Ze extends w{constructor(e){super(e),this.indent=10,this.field="",this.collapseEl=null,this.expandEl=null,this.branchEl=null,this.elementField=!1,this.startOpen=function(){},this.registerTableOption("dataTree",!1),this.registerTableOption("dataTreeFilter",!0),this.registerTableOption("dataTreeSort",!0),this.registerTableOption("dataTreeElementColumn",!1),this.registerTableOption("dataTreeBranchElement",!0),this.registerTableOption("dataTreeChildIndent",9),this.registerTableOption("dataTreeChildField","_children"),this.registerTableOption("dataTreeCollapseElement",!1),this.registerTableOption("dataTreeExpandElement",!1),this.registerTableOption("dataTreeStartExpanded",!1),this.registerTableOption("dataTreeChildColumnCalcs",!1),this.registerTableOption("dataTreeSelectPropagate",!1),this.registerComponentFunction("row","treeCollapse",this.collapseRow.bind(this)),this.registerComponentFunction("row","treeExpand",this.expandRow.bind(this)),this.registerComponentFunction("row","treeToggle",this.toggleRow.bind(this)),this.registerComponentFunction("row","getTreeParent",this.getTreeParent.bind(this)),this.registerComponentFunction("row","getTreeChildren",this.getRowChildren.bind(this)),this.registerComponentFunction("row","addTreeChild",this.addTreeChildRow.bind(this)),this.registerComponentFunction("row","isTreeExpanded",this.isRowExpanded.bind(this))}initialize(){if(this.table.options.dataTree){var e=null,t=this.table.options;switch(this.field=t.dataTreeChildField,this.indent=t.dataTreeChildIndent,this.options("movableRows")&&console.warn("The movableRows option is not available with dataTree enabled, moving of child rows could result in unpredictable behavior"),t.dataTreeBranchElement?t.dataTreeBranchElement===!0?(this.branchEl=document.createElement("div"),this.branchEl.classList.add("tabulator-data-tree-branch")):typeof t.dataTreeBranchElement=="string"?(e=document.createElement("div"),e.innerHTML=t.dataTreeBranchElement,this.branchEl=e.firstChild):this.branchEl=t.dataTreeBranchElement:(this.branchEl=document.createElement("div"),this.branchEl.classList.add("tabulator-data-tree-branch-empty")),t.dataTreeCollapseElement?typeof t.dataTreeCollapseElement=="string"?(e=document.createElement("div"),e.innerHTML=t.dataTreeCollapseElement,this.collapseEl=e.firstChild):this.collapseEl=t.dataTreeCollapseElement:(this.collapseEl=document.createElement("div"),this.collapseEl.classList.add("tabulator-data-tree-control"),this.collapseEl.tabIndex=0,this.collapseEl.innerHTML="
"),t.dataTreeExpandElement?typeof t.dataTreeExpandElement=="string"?(e=document.createElement("div"),e.innerHTML=t.dataTreeExpandElement,this.expandEl=e.firstChild):this.expandEl=t.dataTreeExpandElement:(this.expandEl=document.createElement("div"),this.expandEl.classList.add("tabulator-data-tree-control"),this.expandEl.tabIndex=0,this.expandEl.innerHTML="
"),typeof t.dataTreeStartExpanded){case"boolean":this.startOpen=function(i,s){return t.dataTreeStartExpanded};break;case"function":this.startOpen=t.dataTreeStartExpanded;break;default:this.startOpen=function(i,s){return t.dataTreeStartExpanded[s]};break}this.subscribe("row-init",this.initializeRow.bind(this)),this.subscribe("row-layout-after",this.layoutRow.bind(this)),this.subscribe("row-deleted",this.rowDelete.bind(this),0),this.subscribe("row-data-changed",this.rowDataChanged.bind(this),10),this.subscribe("cell-value-updated",this.cellValueChanged.bind(this)),this.subscribe("edit-cancelled",this.cellValueChanged.bind(this)),this.subscribe("column-moving-rows",this.columnMoving.bind(this)),this.subscribe("table-built",this.initializeElementField.bind(this)),this.subscribe("table-redrawing",this.tableRedrawing.bind(this)),this.registerDisplayHandler(this.getRows.bind(this),30)}}tableRedrawing(e){var t;e&&(t=this.table.rowManager.getRows(),t.forEach(i=>{this.reinitializeRowChildren(i)}))}initializeElementField(){var e=this.table.columnManager.getFirstVisibleColumn();this.elementField=this.table.options.dataTreeElementColumn||(e?e.field:!1)}getRowChildren(e){return this.getTreeChildren(e,!0)}columnMoving(){var e=[];return this.table.rowManager.rows.forEach(t=>{e=e.concat(this.getTreeChildren(t,!1,!0))}),e}rowDataChanged(e,t,i){this.redrawNeeded(i)&&(this.initializeRow(e),t&&(this.layoutRow(e),this.refreshData(!0)))}cellValueChanged(e){var t=e.column.getField();t===this.elementField&&this.layoutRow(e.row)}initializeRow(e){var t=e.getData()[this.field],i=Array.isArray(t),s=i||!i&&typeof t=="object"&&t!==null;!s&&e.modules.dataTree&&e.modules.dataTree.branchEl&&e.modules.dataTree.branchEl.parentNode.removeChild(e.modules.dataTree.branchEl),!s&&e.modules.dataTree&&e.modules.dataTree.controlEl&&e.modules.dataTree.controlEl.parentNode.removeChild(e.modules.dataTree.controlEl),e.modules.dataTree={index:e.modules.dataTree?e.modules.dataTree.index:0,open:s?e.modules.dataTree?e.modules.dataTree.open:this.startOpen(e.getComponent(),0):!1,controlEl:e.modules.dataTree&&s?e.modules.dataTree.controlEl:!1,branchEl:e.modules.dataTree&&s?e.modules.dataTree.branchEl:!1,parent:e.modules.dataTree?e.modules.dataTree.parent:!1,children:s}}reinitializeRowChildren(e){var t=this.getTreeChildren(e,!1,!0);t.forEach(function(i){i.reinitialize(!0)})}layoutRow(e){var t=this.elementField?e.getCell(this.elementField):e.getCells()[0],i=t.getElement(),s=e.modules.dataTree;s.branchEl&&(s.branchEl.parentNode&&s.branchEl.parentNode.removeChild(s.branchEl),s.branchEl=!1),s.controlEl&&(s.controlEl.parentNode&&s.controlEl.parentNode.removeChild(s.controlEl),s.controlEl=!1),this.generateControlElement(e,i),e.getElement().classList.add("tabulator-tree-level-"+s.index),s.index&&(this.branchEl?(s.branchEl=this.branchEl.cloneNode(!0),i.insertBefore(s.branchEl,i.firstChild),this.table.rtl?s.branchEl.style.marginRight=(s.branchEl.offsetWidth+s.branchEl.style.marginLeft)*(s.index-1)+s.index*this.indent+"px":s.branchEl.style.marginLeft=(s.branchEl.offsetWidth+s.branchEl.style.marginRight)*(s.index-1)+s.index*this.indent+"px"):this.table.rtl?i.style.paddingRight=parseInt(window.getComputedStyle(i,null).getPropertyValue("padding-right"))+s.index*this.indent+"px":i.style.paddingLeft=parseInt(window.getComputedStyle(i,null).getPropertyValue("padding-left"))+s.index*this.indent+"px")}generateControlElement(e,t){var i=e.modules.dataTree,s=i.controlEl;t=t||e.getCells()[0].getElement(),i.children!==!1&&(i.open?(i.controlEl=this.collapseEl.cloneNode(!0),i.controlEl.addEventListener("click",n=>{n.stopPropagation(),this.collapseRow(e)})):(i.controlEl=this.expandEl.cloneNode(!0),i.controlEl.addEventListener("click",n=>{n.stopPropagation(),this.expandRow(e)})),i.controlEl.addEventListener("mousedown",n=>{n.stopPropagation()}),s&&s.parentNode===t?s.parentNode.replaceChild(i.controlEl,s):t.insertBefore(i.controlEl,t.firstChild))}getRows(e){var t=[];return e.forEach((i,s)=>{var n,r;t.push(i),i instanceof S&&(i.create(),n=i.modules.dataTree,!n.index&&n.children!==!1&&(r=this.getChildren(i,!1,!0),r.forEach(o=>{o.create(),t.push(o)})))}),t}getChildren(e,t,i){var s=e.modules.dataTree,n=[],r=[];return s.children!==!1&&(s.open||t)&&(Array.isArray(s.children)||(s.children=this.generateChildren(e)),this.table.modExists("filter")&&this.table.options.dataTreeFilter?n=this.table.modules.filter.filter(s.children):n=s.children,this.table.modExists("sort")&&this.table.options.dataTreeSort&&this.table.modules.sort.sort(n,i),n.forEach(o=>{r.push(o);var a=this.getChildren(o,!1,!0);a.forEach(h=>{r.push(h)})})),r}generateChildren(e){var t=[],i=e.getData()[this.field];return Array.isArray(i)||(i=[i]),i.forEach(s=>{var n=new S(s||{},this.table.rowManager);n.create(),n.modules.dataTree.index=e.modules.dataTree.index+1,n.modules.dataTree.parent=e,n.modules.dataTree.children&&(n.modules.dataTree.open=this.startOpen(n.getComponent(),n.modules.dataTree.index)),t.push(n)}),t}expandRow(e,t){var i=e.modules.dataTree;i.children!==!1&&(i.open=!0,e.reinitialize(),this.refreshData(!0),this.dispatchExternal("dataTreeRowExpanded",e.getComponent(),e.modules.dataTree.index))}collapseRow(e){var t=e.modules.dataTree;t.children!==!1&&(t.open=!1,e.reinitialize(),this.refreshData(!0),this.dispatchExternal("dataTreeRowCollapsed",e.getComponent(),e.modules.dataTree.index))}toggleRow(e){var t=e.modules.dataTree;t.children!==!1&&(t.open?this.collapseRow(e):this.expandRow(e))}isRowExpanded(e){return e.modules.dataTree.open}getTreeParent(e){return e.modules.dataTree.parent?e.modules.dataTree.parent.getComponent():!1}getTreeParentRoot(e){return e.modules.dataTree&&e.modules.dataTree.parent?this.getTreeParentRoot(e.modules.dataTree.parent):e}getFilteredTreeChildren(e){var t=e.modules.dataTree,i=[],s;return t.children&&(Array.isArray(t.children)||(t.children=this.generateChildren(e)),this.table.modExists("filter")&&this.table.options.dataTreeFilter?s=this.table.modules.filter.filter(t.children):s=t.children,s.forEach(n=>{n instanceof S&&i.push(n)})),i}rowDelete(e){var t=e.modules.dataTree.parent,i;t&&(i=this.findChildIndex(e,t),i!==!1&&t.data[this.field].splice(i,1),t.data[this.field].length||delete t.data[this.field],this.initializeRow(t),this.layoutRow(t)),this.refreshData(!0)}addTreeChildRow(e,t,i,s){var n=!1;typeof t=="string"&&(t=JSON.parse(t)),Array.isArray(e.data[this.field])||(e.data[this.field]=[],e.modules.dataTree.open=this.startOpen(e.getComponent(),e.modules.dataTree.index)),typeof s<"u"&&(n=this.findChildIndex(s,e),n!==!1&&e.data[this.field].splice(i?n:n+1,0,t)),n===!1&&(i?e.data[this.field].unshift(t):e.data[this.field].push(t)),this.initializeRow(e),this.layoutRow(e),this.refreshData(!0)}findChildIndex(e,t){var i=!1;return typeof e=="object"?e instanceof S?i=e.data:e instanceof oe?i=e._getSelf().data:typeof HTMLElement<"u"&&e instanceof HTMLElement?t.modules.dataTree&&(i=t.modules.dataTree.children.find(s=>s instanceof S?s.element===e:!1),i&&(i=i.data)):e===null&&(i=!1):typeof e>"u"?i=!1:i=t.data[this.field].find(s=>s.data[this.table.options.index]==e),i&&(Array.isArray(t.data[this.field])&&(i=t.data[this.field].indexOf(i)),i==-1&&(i=!1)),i}getTreeChildren(e,t,i){var s=e.modules.dataTree,n=[];return s&&s.children&&(Array.isArray(s.children)||(s.children=this.generateChildren(e)),s.children.forEach(r=>{r instanceof S&&(n.push(t?r.getComponent():r),i&&this.getTreeChildren(r,t,i).forEach(o=>{n.push(o)}))})),n}getChildField(){return this.field}redrawNeeded(e){return(this.field?typeof e[this.field]<"u":!1)||(this.elementField?typeof e[this.elementField]<"u":!1)}}b(Ze,"moduleName","dataTree");function Vt(l,e={},t){var i=e.delimiter?e.delimiter:",",s=[],n=[];l.forEach(r=>{var o=[];switch(r.type){case"group":console.warn("Download Warning - CSV downloader cannot process row groups");break;case"calc":console.warn("Download Warning - CSV downloader cannot process column calculations");break;case"header":r.columns.forEach((a,h)=>{a&&a.depth===1&&(n[h]=typeof a.value>"u"||a.value===null?"":'"'+String(a.value).split('"').join('""')+'"')});break;case"row":r.columns.forEach(a=>{if(a){switch(typeof a.value){case"object":a.value=a.value!==null?JSON.stringify(a.value):"";break;case"undefined":a.value="";break}o.push('"'+String(a.value).split('"').join('""')+'"')}}),s.push(o.join(i));break}}),n.length&&s.unshift(n.join(i)),s=s.join(` +`),e.bom&&(s="\uFEFF"+s),t(s,"text/csv")}function It(l,e,t){var i=[];l.forEach(s=>{var n={};switch(s.type){case"header":break;case"group":console.warn("Download Warning - JSON downloader cannot process row groups");break;case"calc":console.warn("Download Warning - JSON downloader cannot process column calculations");break;case"row":s.columns.forEach(r=>{r&&(n[r.component.getTitleDownload()||r.component.getField()]=r.value)}),i.push(n);break}}),i=JSON.stringify(i,null," "),t(i,"application/json")}function Nt(l,e={},t){var i=[],s=[],n={},r=e.rowGroupStyles||{fontStyle:"bold",fontSize:12,cellPadding:6,fillColor:220},o=e.rowCalcStyles||{fontStyle:"bold",fontSize:10,cellPadding:4,fillColor:232},a=e.jsPDF||{},h=e.title?e.title:"";a.orientation||(a.orientation=e.orientation||"landscape"),a.unit||(a.unit="pt"),l.forEach(c=>{switch(c.type){case"header":i.push(d(c));break;case"group":s.push(d(c,r));break;case"calc":s.push(d(c,o));break;case"row":s.push(d(c));break}});function d(c,f){var g=[];return c.columns.forEach(p=>{var v;if(p){switch(typeof p.value){case"object":p.value=p.value!==null?JSON.stringify(p.value):"";break;case"undefined":p.value="";break}v={content:p.value,colSpan:p.width,rowSpan:p.height},f&&(v.styles=f),g.push(v)}}),g}var u=new jspdf.jsPDF(a);e.autoTable&&(typeof e.autoTable=="function"?n=e.autoTable(u)||{}:n=e.autoTable),h&&(n.didDrawPage=function(c){u.text(h,40,30)}),n.head=i,n.body=s,u.autoTable(n),e.documentProcessing&&e.documentProcessing(u),t(u.output("arraybuffer"),"application/pdf")}function Wt(l,e,t){var i=this,s=e.sheetName||"Sheet1",n=XLSX.utils.book_new(),r=new M(this),o="compress"in e?e.compress:!0,a=e.writeOptions||{bookType:"xlsx",bookSST:!0,compression:o},h;a.type="binary",n.SheetNames=[],n.Sheets={};function d(){var f=[],g=[],p={},v={s:{c:0,r:0},e:{c:l[0]?l[0].columns.reduce((m,C)=>m+(C&&C.width?C.width:1),0):0,r:l.length}};return l.forEach((m,C)=>{var T=[];m.columns.forEach(function(y,k){y?(T.push(!(y.value instanceof Date)&&typeof y.value=="object"?JSON.stringify(y.value):y.value),(y.width>1||y.height>-1)&&(y.height>1||y.width>1)&&g.push({s:{r:C,c:k},e:{r:C+y.height-1,c:k+y.width-1}})):T.push("")}),f.push(T)}),XLSX.utils.sheet_add_aoa(p,f),p["!ref"]=XLSX.utils.encode_range(v),g.length&&(p["!merges"]=g),p}if(e.sheetOnly){t(d());return}if(e.sheets)for(var u in e.sheets)e.sheets[u]===!0?(n.SheetNames.push(u),n.Sheets[u]=d()):(n.SheetNames.push(u),r.commsSend(e.sheets[u],"download","intercept",{type:"xlsx",options:{sheetOnly:!0},active:i.active,intercept:function(f){n.Sheets[u]=f}}));else n.SheetNames.push(s),n.Sheets[s]=d();e.documentProcessing&&(n=e.documentProcessing(n));function c(f){for(var g=new ArrayBuffer(f.length),p=new Uint8Array(g),v=0;v!=f.length;++v)p[v]=f.charCodeAt(v)&255;return g}h=XLSX.write(n,a),t(c(h),"application/octet-stream")}function Gt(l,e,t){this.modExists("export",!0)&&t(this.modules.export.generateHTMLTable(l),"text/html")}function jt(l,e,t){const i=[];l.forEach(s=>{const n={};switch(s.type){case"header":break;case"group":console.warn("Download Warning - JSON downloader cannot process row groups");break;case"calc":console.warn("Download Warning - JSON downloader cannot process column calculations");break;case"row":s.columns.forEach(r=>{r&&(n[r.component.getTitleDownload()||r.component.getField()]=r.value)}),i.push(JSON.stringify(n));break}}),t(i.join(` +`),"application/x-ndjson")}var Ut={csv:Vt,json:It,jsonLines:jt,pdf:Nt,xlsx:Wt,html:Gt};const q=class q extends w{constructor(e){super(e),this.registerTableOption("downloadEncoder",function(t,i){return new Blob([t],{type:i})}),this.registerTableOption("downloadConfig",{}),this.registerTableOption("downloadRowRange","active"),this.registerColumnOption("download"),this.registerColumnOption("titleDownload")}initialize(){this.deprecatedOptionsCheck(),this.registerTableFunction("download",this.download.bind(this)),this.registerTableFunction("downloadToTab",this.downloadToTab.bind(this))}deprecatedOptionsCheck(){}downloadToTab(e,t,i,s){this.download(e,t,i,s,!0)}download(e,t,i,s,n){var r=!1;function o(h,d){n?n===!0?this.triggerDownload(h,d,e,t,!0):n(h):this.triggerDownload(h,d,e,t)}if(typeof e=="function"?r=e:q.downloaders[e]?r=q.downloaders[e]:console.warn("Download Error - No such download type found: ",e),r){var a=this.generateExportList(s);r.call(this.table,a,i||{},o.bind(this))}}generateExportList(e){var t=this.table.modules.export.generateExportList(this.table.options.downloadConfig,!1,e||this.table.options.downloadRowRange,"download"),i=this.table.options.groupHeaderDownload;return i&&!Array.isArray(i)&&(i=[i]),t.forEach(s=>{var n;s.type==="group"&&(n=s.columns[0],i&&i[s.indent]&&(n.value=i[s.indent](n.value,s.component._group.getRowCount(),s.component._group.getData(),s.component)))}),t}triggerDownload(e,t,i,s,n){var r=document.createElement("a"),o=this.table.options.downloadEncoder(e,t);o&&(n?window.open(window.URL.createObjectURL(o)):(s=s||"Tabulator."+(typeof i=="function"?"txt":i),navigator.msSaveOrOpenBlob?navigator.msSaveOrOpenBlob(o,s):(r.setAttribute("href",window.URL.createObjectURL(o)),r.setAttribute("download",s),r.style.display="none",document.body.appendChild(r),r.click(),document.body.removeChild(r))),this.dispatchExternal("downloadComplete"))}commsReceived(e,t,i){switch(t){case"intercept":this.download(i.type,"",i.options,i.active,i.intercept);break}}};b(q,"moduleName","download"),b(q,"downloaders",Ut);let ve=q;function ae(l,e){var t=e.mask,i=typeof e.maskLetterChar<"u"?e.maskLetterChar:"A",s=typeof e.maskNumberChar<"u"?e.maskNumberChar:"9",n=typeof e.maskWildcardChar<"u"?e.maskWildcardChar:"*";function r(o){var a=t[o];typeof a<"u"&&a!==n&&a!==i&&a!==s&&(l.value=l.value+""+a,r(o+1))}l.addEventListener("keydown",o=>{var a=l.value.length,h=o.key;if(o.keyCode>46&&!o.ctrlKey&&!o.metaKey){if(a>=t.length)return o.preventDefault(),o.stopPropagation(),!1;switch(t[a]){case i:if(h.toUpperCase()==h.toLowerCase())return o.preventDefault(),o.stopPropagation(),!1;break;case s:if(isNaN(h))return o.preventDefault(),o.stopPropagation(),!1;break;case n:break;default:if(h!==t[a])return o.preventDefault(),o.stopPropagation(),!1}}}),l.addEventListener("keyup",o=>{o.keyCode>46&&e.maskAutoFill&&r(l.value.length)}),l.placeholder||(l.placeholder=t),e.maskAutoFill&&r(l.value.length)}function Xt(l,e,t,i,s){var n=l.getValue(),r=document.createElement("input");if(r.setAttribute("type",s.search?"search":"text"),r.style.padding="4px",r.style.width="100%",r.style.boxSizing="border-box",s.elementAttributes&&typeof s.elementAttributes=="object")for(let a in s.elementAttributes)a.charAt(0)=="+"?(a=a.slice(1),r.setAttribute(a,r.getAttribute(a)+s.elementAttributes["+"+a])):r.setAttribute(a,s.elementAttributes[a]);r.value=typeof n<"u"?n:"",e(function(){l.getType()==="cell"&&(r.focus({preventScroll:!0}),r.style.height="100%",s.selectContents&&r.select())});function o(a){(n===null||typeof n>"u")&&r.value!==""||r.value!==n?t(r.value)&&(n=r.value):i()}return r.addEventListener("change",o),r.addEventListener("blur",o),r.addEventListener("keydown",function(a){switch(a.keyCode){case 13:o();break;case 27:i();break;case 35:case 36:a.stopPropagation();break}}),s.mask&&ae(r,s),r}function Jt(l,e,t,i,s){var n=l.getValue(),r=s.verticalNavigation||"hybrid",o=String(n!==null&&typeof n<"u"?n:""),a=document.createElement("textarea"),h=0;if(a.style.display="block",a.style.padding="2px",a.style.height="100%",a.style.width="100%",a.style.boxSizing="border-box",a.style.whiteSpace="pre-wrap",a.style.resize="none",s.elementAttributes&&typeof s.elementAttributes=="object")for(let u in s.elementAttributes)u.charAt(0)=="+"?(u=u.slice(1),a.setAttribute(u,a.getAttribute(u)+s.elementAttributes["+"+u])):a.setAttribute(u,s.elementAttributes[u]);a.value=o,e(function(){l.getType()==="cell"&&(a.focus({preventScroll:!0}),a.style.height="100%",a.scrollHeight,a.style.height=a.scrollHeight+"px",l.getRow().normalizeHeight(),s.selectContents&&a.select())});function d(u){(n===null||typeof n>"u")&&a.value!==""||a.value!==n?(t(a.value)&&(n=a.value),setTimeout(function(){l.getRow().normalizeHeight()},300)):i()}return a.addEventListener("change",d),a.addEventListener("blur",d),a.addEventListener("keyup",function(){a.style.height="";var u=a.scrollHeight;a.style.height=u+"px",u!=h&&(h=u,l.getRow().normalizeHeight())}),a.addEventListener("keydown",function(u){switch(u.keyCode){case 13:u.shiftKey&&s.shiftEnterSubmit&&d();break;case 27:i();break;case 38:(r=="editor"||r=="hybrid"&&a.selectionStart)&&(u.stopImmediatePropagation(),u.stopPropagation());break;case 40:(r=="editor"||r=="hybrid"&&a.selectionStart!==a.value.length)&&(u.stopImmediatePropagation(),u.stopPropagation());break;case 35:case 36:u.stopPropagation();break}}),s.mask&&ae(a,s),a}function Kt(l,e,t,i,s){var n=l.getValue(),r=s.verticalNavigation||"editor",o=document.createElement("input");if(o.setAttribute("type","number"),typeof s.max<"u"&&o.setAttribute("max",s.max),typeof s.min<"u"&&o.setAttribute("min",s.min),typeof s.step<"u"&&o.setAttribute("step",s.step),o.style.padding="4px",o.style.width="100%",o.style.boxSizing="border-box",s.elementAttributes&&typeof s.elementAttributes=="object")for(let d in s.elementAttributes)d.charAt(0)=="+"?(d=d.slice(1),o.setAttribute(d,o.getAttribute(d)+s.elementAttributes["+"+d])):o.setAttribute(d,s.elementAttributes[d]);o.value=n;var a=function(d){h()};e(function(){l.getType()==="cell"&&(o.removeEventListener("blur",a),o.focus({preventScroll:!0}),o.style.height="100%",o.addEventListener("blur",a),s.selectContents&&o.select())});function h(){var d=o.value;!isNaN(d)&&d!==""&&(d=Number(d)),d!==n?t(d)&&(n=d):i()}return o.addEventListener("keydown",function(d){switch(d.keyCode){case 13:h();break;case 27:i();break;case 38:case 40:r=="editor"&&(d.stopImmediatePropagation(),d.stopPropagation());break;case 35:case 36:d.stopPropagation();break}}),s.mask&&ae(o,s),o}function qt(l,e,t,i,s){var n=l.getValue(),r=document.createElement("input");if(r.setAttribute("type","range"),typeof s.max<"u"&&r.setAttribute("max",s.max),typeof s.min<"u"&&r.setAttribute("min",s.min),typeof s.step<"u"&&r.setAttribute("step",s.step),r.style.padding="4px",r.style.width="100%",r.style.boxSizing="border-box",s.elementAttributes&&typeof s.elementAttributes=="object")for(let a in s.elementAttributes)a.charAt(0)=="+"?(a=a.slice(1),r.setAttribute(a,r.getAttribute(a)+s.elementAttributes["+"+a])):r.setAttribute(a,s.elementAttributes[a]);r.value=n,e(function(){l.getType()==="cell"&&(r.focus({preventScroll:!0}),r.style.height="100%")});function o(){var a=r.value;!isNaN(a)&&a!==""&&(a=Number(a)),a!=n?t(a)&&(n=a):i()}return r.addEventListener("blur",function(a){o()}),r.addEventListener("keydown",function(a){switch(a.keyCode){case 13:o();break;case 27:i();break}}),r}function Yt(l,e,t,i,s){var n=s.format,r=s.verticalNavigation||"editor",o=n?window.DateTime||luxon.DateTime:null,a=l.getValue(),h=document.createElement("input");function d(c){var f;return o.isDateTime(c)?f=c:n==="iso"?f=o.fromISO(String(c)):f=o.fromFormat(String(c),n),f.toFormat("yyyy-MM-dd")}if(h.type="date",h.style.padding="4px",h.style.width="100%",h.style.boxSizing="border-box",s.max&&h.setAttribute("max",n?d(s.max):s.max),s.min&&h.setAttribute("min",n?d(s.min):s.min),s.elementAttributes&&typeof s.elementAttributes=="object")for(let c in s.elementAttributes)c.charAt(0)=="+"?(c=c.slice(1),h.setAttribute(c,h.getAttribute(c)+s.elementAttributes["+"+c])):h.setAttribute(c,s.elementAttributes[c]);a=typeof a<"u"?a:"",n&&(o?a=d(a):console.error("Editor Error - 'date' editor 'format' param is dependant on luxon.js")),h.value=a,e(function(){l.getType()==="cell"&&(h.focus({preventScroll:!0}),h.style.height="100%",s.selectContents&&h.select())});function u(){var c=h.value,f;if((a===null||typeof a>"u")&&c!==""||c!==a){if(c&&n)switch(f=o.fromFormat(String(c),"yyyy-MM-dd"),n){case!0:c=f;break;case"iso":c=f.toISO();break;default:c=f.toFormat(n)}t(c)&&(a=h.value)}else i()}return h.addEventListener("blur",function(c){(c.relatedTarget||c.rangeParent||c.explicitOriginalTarget!==h)&&u()}),h.addEventListener("keydown",function(c){switch(c.keyCode){case 13:u();break;case 27:i();break;case 35:case 36:c.stopPropagation();break;case 38:case 40:r=="editor"&&(c.stopImmediatePropagation(),c.stopPropagation());break}}),h}function $t(l,e,t,i,s){var n=s.format,r=s.verticalNavigation||"editor",o=n?window.DateTime||luxon.DateTime:null,a,h=l.getValue(),d=document.createElement("input");if(d.type="time",d.style.padding="4px",d.style.width="100%",d.style.boxSizing="border-box",s.elementAttributes&&typeof s.elementAttributes=="object")for(let c in s.elementAttributes)c.charAt(0)=="+"?(c=c.slice(1),d.setAttribute(c,d.getAttribute(c)+s.elementAttributes["+"+c])):d.setAttribute(c,s.elementAttributes[c]);h=typeof h<"u"?h:"",n&&(o?(o.isDateTime(h)?a=h:n==="iso"?a=o.fromISO(String(h)):a=o.fromFormat(String(h),n),h=a.toFormat("HH:mm")):console.error("Editor Error - 'date' editor 'format' param is dependant on luxon.js")),d.value=h,e(function(){l.getType()=="cell"&&(d.focus({preventScroll:!0}),d.style.height="100%",s.selectContents&&d.select())});function u(){var c=d.value,f;if((h===null||typeof h>"u")&&c!==""||c!==h){if(c&&n)switch(f=o.fromFormat(String(c),"hh:mm"),n){case!0:c=f;break;case"iso":c=f.toISO();break;default:c=f.toFormat(n)}t(c)&&(h=d.value)}else i()}return d.addEventListener("blur",function(c){(c.relatedTarget||c.rangeParent||c.explicitOriginalTarget!==d)&&u()}),d.addEventListener("keydown",function(c){switch(c.keyCode){case 13:u();break;case 27:i();break;case 35:case 36:c.stopPropagation();break;case 38:case 40:r=="editor"&&(c.stopImmediatePropagation(),c.stopPropagation());break}}),d}function Qt(l,e,t,i,s){var n=s.format,r=s.verticalNavigation||"editor",o=n?window.DateTime||luxon.DateTime:null,a,h=l.getValue(),d=document.createElement("input");if(d.type="datetime-local",d.style.padding="4px",d.style.width="100%",d.style.boxSizing="border-box",s.elementAttributes&&typeof s.elementAttributes=="object")for(let c in s.elementAttributes)c.charAt(0)=="+"?(c=c.slice(1),d.setAttribute(c,d.getAttribute(c)+s.elementAttributes["+"+c])):d.setAttribute(c,s.elementAttributes[c]);h=typeof h<"u"?h:"",n&&(o?(o.isDateTime(h)?a=h:n==="iso"?a=o.fromISO(String(h)):a=o.fromFormat(String(h),n),h=a.toFormat("yyyy-MM-dd")+"T"+a.toFormat("HH:mm")):console.error("Editor Error - 'date' editor 'format' param is dependant on luxon.js")),d.value=h,e(function(){l.getType()==="cell"&&(d.focus({preventScroll:!0}),d.style.height="100%",s.selectContents&&d.select())});function u(){var c=d.value,f;if((h===null||typeof h>"u")&&c!==""||c!==h){if(c&&n)switch(f=o.fromISO(String(c)),n){case!0:c=f;break;case"iso":c=f.toISO();break;default:c=f.toFormat(n)}t(c)&&(h=d.value)}else i()}return d.addEventListener("blur",function(c){(c.relatedTarget||c.rangeParent||c.explicitOriginalTarget!==d)&&u()}),d.addEventListener("keydown",function(c){switch(c.keyCode){case 13:u();break;case 27:i();break;case 35:case 36:c.stopPropagation();break;case 38:case 40:r=="editor"&&(c.stopImmediatePropagation(),c.stopPropagation());break}}),d}let Zt=class{constructor(e,t,i,s,n,r){this.edit=e,this.table=e.table,this.cell=t,this.params=this._initializeParams(r),this.data=[],this.displayItems=[],this.currentItems=[],this.focusedItem=null,this.input=this._createInputElement(),this.listEl=this._createListElement(),this.initialValues=null,this.isFilter=t.getType()==="header",this.filterTimeout=null,this.filtered=!1,this.typing=!1,this.values=[],this.popup=null,this.listIteration=0,this.lastAction="",this.filterTerm="",this.blurable=!0,this.actions={success:s,cancel:n},this._deprecatedOptionsCheck(),this._initializeValue(),i(this._onRendered.bind(this))}_deprecatedOptionsCheck(){}_initializeValue(){var e=this.cell.getValue();typeof e>"u"&&typeof this.params.defaultValue<"u"&&(e=this.params.defaultValue),this.initialValues=this.params.multiselect?e:[e],this.isFilter&&(this.input.value=this.initialValues?this.initialValues.join(","):"",this.headerFilterInitialListGen())}_onRendered(){var e=this.cell.getElement();function t(i){i.stopPropagation()}this.isFilter||(this.input.style.height="100%",this.input.focus({preventScroll:!0})),e.addEventListener("click",t),setTimeout(()=>{e.removeEventListener("click",t)},1e3),this.input.addEventListener("mousedown",this._preventPopupBlur.bind(this))}_createListElement(){var e=document.createElement("div");return e.classList.add("tabulator-edit-list"),e.addEventListener("mousedown",this._preventBlur.bind(this)),e.addEventListener("keydown",this._inputKeyDown.bind(this)),e}_setListWidth(){var e=this.isFilter?this.input:this.cell.getElement();this.listEl.style.minWidth=e.offsetWidth+"px",this.params.maxWidth&&(this.params.maxWidth===!0?this.listEl.style.maxWidth=e.offsetWidth+"px":typeof this.params.maxWidth=="number"?this.listEl.style.maxWidth=this.params.maxWidth+"px":this.listEl.style.maxWidth=this.params.maxWidth)}_createInputElement(){var e=this.params.elementAttributes,t=document.createElement("input");if(t.setAttribute("type",this.params.clearable?"search":"text"),t.style.padding="4px",t.style.width="100%",t.style.boxSizing="border-box",this.params.autocomplete||(t.style.cursor="default",t.style.caretColor="transparent"),e&&typeof e=="object")for(let i in e)i.charAt(0)=="+"?(i=i.slice(1),t.setAttribute(i,t.getAttribute(i)+e["+"+i])):t.setAttribute(i,e[i]);return this.params.mask&&ae(t,this.params),this._bindInputEvents(t),t}_initializeParams(e){var t=["values","valuesURL","valuesLookup"],i;return e=Object.assign({},e),e.verticalNavigation=e.verticalNavigation||"editor",e.placeholderLoading=typeof e.placeholderLoading>"u"?"Searching ...":e.placeholderLoading,e.placeholderEmpty=typeof e.placeholderEmpty>"u"?"No Results Found":e.placeholderEmpty,e.filterDelay=typeof e.filterDelay>"u"?300:e.filterDelay,e.emptyValue=Object.keys(e).includes("emptyValue")?e.emptyValue:"",i=Object.keys(e).filter(s=>t.includes(s)).length,i?i>1&&console.warn("list editor config error - only one of the values, valuesURL, or valuesLookup options can be set on the same editor"):console.warn("list editor config error - either the values, valuesURL, or valuesLookup option must be set"),e.autocomplete?e.multiselect&&(e.multiselect=!1,console.warn("list editor config error - multiselect option is not available when autocomplete is enabled")):(e.freetext&&(e.freetext=!1,console.warn("list editor config error - freetext option is only available when autocomplete is enabled")),e.filterFunc&&(e.filterFunc=!1,console.warn("list editor config error - filterFunc option is only available when autocomplete is enabled")),e.filterRemote&&(e.filterRemote=!1,console.warn("list editor config error - filterRemote option is only available when autocomplete is enabled")),e.mask&&(e.mask=!1,console.warn("list editor config error - mask option is only available when autocomplete is enabled")),e.allowEmpty&&(e.allowEmpty=!1,console.warn("list editor config error - allowEmpty option is only available when autocomplete is enabled")),e.listOnEmpty&&(e.listOnEmpty=!1,console.warn("list editor config error - listOnEmpty option is only available when autocomplete is enabled"))),e.filterRemote&&!(typeof e.valuesLookup=="function"||e.valuesURL)&&(e.filterRemote=!1,console.warn("list editor config error - filterRemote option should only be used when values list is populated from a remote source")),e}_bindInputEvents(e){e.addEventListener("focus",this._inputFocus.bind(this)),e.addEventListener("click",this._inputClick.bind(this)),e.addEventListener("blur",this._inputBlur.bind(this)),e.addEventListener("keydown",this._inputKeyDown.bind(this)),e.addEventListener("search",this._inputSearch.bind(this)),this.params.autocomplete&&e.addEventListener("keyup",this._inputKeyUp.bind(this))}_inputFocus(e){this.rebuildOptionsList()}_filter(){this.params.filterRemote?(clearTimeout(this.filterTimeout),this.filterTimeout=setTimeout(()=>{this.rebuildOptionsList()},this.params.filterDelay)):this._filterList()}_inputClick(e){e.stopPropagation()}_inputBlur(e){this.blurable&&(this.popup?this.popup.hide():this._resolveValue(!0))}_inputSearch(){this._clearChoices()}_inputKeyDown(e){switch(e.keyCode){case 38:this._keyUp(e);break;case 40:this._keyDown(e);break;case 37:case 39:this._keySide(e);break;case 13:this._keyEnter();break;case 27:this._keyEsc();break;case 36:case 35:this._keyHomeEnd(e);break;case 9:this._keyTab(e);break;default:this._keySelectLetter(e)}}_inputKeyUp(e){switch(e.keyCode){case 38:case 37:case 39:case 40:case 13:case 27:break;default:this._keyAutoCompLetter(e)}}_preventPopupBlur(){this.popup&&this.popup.blockHide(),setTimeout(()=>{this.popup&&this.popup.restoreHide()},10)}_preventBlur(){this.blurable=!1,setTimeout(()=>{this.blurable=!0},10)}_keyTab(e){this.params.autocomplete&&this.lastAction==="typing"?this._resolveValue(!0):this.focusedItem&&this._chooseItem(this.focusedItem,!0)}_keyUp(e){var t=this.displayItems.indexOf(this.focusedItem);(this.params.verticalNavigation=="editor"||this.params.verticalNavigation=="hybrid"&&t)&&(e.stopImmediatePropagation(),e.stopPropagation(),e.preventDefault(),t>0&&this._focusItem(this.displayItems[t-1]))}_keyDown(e){var t=this.displayItems.indexOf(this.focusedItem);(this.params.verticalNavigation=="editor"||this.params.verticalNavigation=="hybrid"&&t=38&&e.keyCode<=90&&this._scrollToValue(e.keyCode))}_keyAutoCompLetter(e){this._filter(),this.lastAction="typing",this.typing=!0}_scrollToValue(e){clearTimeout(this.filterTimeout);var t=String.fromCharCode(e).toLowerCase();this.filterTerm+=t.toLowerCase();var i=this.displayItems.find(s=>typeof s.label<"u"&&s.label.toLowerCase().startsWith(this.filterTerm));i&&this._focusItem(i),this.filterTimeout=setTimeout(()=>{this.filterTerm=""},800)}_focusItem(e){this.lastAction="focus",this.focusedItem&&this.focusedItem.element&&this.focusedItem.element.classList.remove("focused"),this.focusedItem=e,e&&e.element&&(e.element.classList.add("focused"),e.element.scrollIntoView({behavior:"smooth",block:"nearest",inline:"start"}))}headerFilterInitialListGen(){this._generateOptions(!0)}rebuildOptionsList(){this._generateOptions().then(this._sortOptions.bind(this)).then(this._buildList.bind(this)).then(this._showList.bind(this)).catch(e=>{Number.isInteger(e)||console.error("List generation error",e)})}_filterList(){this._buildList(this._filterOptions()),this._showList()}_generateOptions(e){var t=[],i=++this.listIteration;return this.filtered=!1,this.params.values?t=this.params.values:this.params.valuesURL?t=this._ajaxRequest(this.params.valuesURL,this.input.value):typeof this.params.valuesLookup=="function"?t=this.params.valuesLookup(this.cell,this.input.value):this.params.valuesLookup&&(t=this._uniqueColumnValues(this.params.valuesLookupField)),t instanceof Promise?(e||this._addPlaceholder(this.params.placeholderLoading),t.then().then(s=>this.listIteration===i?this._parseList(s):Promise.reject(i))):Promise.resolve(this._parseList(t))}_addPlaceholder(e){var t=document.createElement("div");typeof e=="function"&&(e=e(this.cell.getComponent(),this.listEl)),e&&(this._clearList(),e instanceof HTMLElement?t=e:(t.classList.add("tabulator-edit-list-placeholder"),t.innerHTML=e),this.listEl.appendChild(t),this._showList())}_ajaxRequest(e,t){var i=this.params.filterRemote?{term:t}:{};return e=qe(e,{},i),fetch(e).then(s=>s.ok?s.json().catch(n=>(console.warn("List Ajax Load Error - Invalid JSON returned",n),Promise.reject(n))):(console.error("List Ajax Load Error - Connection Error: "+s.status,s.statusText),Promise.reject(s))).catch(s=>(console.error("List Ajax Load Error - Connection Error: ",s),Promise.reject(s)))}_uniqueColumnValues(e){var t={},i=this.table.getData(this.params.valuesLookup),s;return e?s=this.table.columnManager.getColumnByField(e):s=this.cell.getColumn()._getSelf(),s?i.forEach(n=>{var r=s.getFieldValue(n);r!==null&&typeof r<"u"&&r!==""&&(t[r]=!0)}):(console.warn("unable to find matching column to create select lookup list:",e),t=[]),Object.keys(t)}_parseList(e){var t=[];return Array.isArray(e)||(e=Object.entries(e).map(([i,s])=>({label:s,value:i}))),e.forEach(i=>{typeof i!="object"&&(i={label:i,value:i}),this._parseListItem(i,t,0)}),!this.currentItems.length&&this.params.freetext&&(this.input.value=this.initialValues,this.typing=!0,this.lastAction="typing"),this.data=t,t}_parseListItem(e,t,i){var s={};e.options?s=this._parseListGroup(e,i+1):(s={label:e.label,value:e.value,itemParams:e.itemParams,elementAttributes:e.elementAttributes,element:!1,selected:!1,visible:!0,level:i,original:e},this.initialValues&&this.initialValues.indexOf(e.value)>-1&&this._chooseItem(s,!0)),t.push(s)}_parseListGroup(e,t){var i={label:e.label,group:!0,itemParams:e.itemParams,elementAttributes:e.elementAttributes,element:!1,visible:!0,level:t,options:[],original:e};return e.options.forEach(s=>{this._parseListItem(s,i.options,t)}),i}_sortOptions(e){var t;return this.params.sort&&(t=typeof this.params.sort=="function"?this.params.sort:this._defaultSortFunction.bind(this),this._sortGroup(t,e)),e}_sortGroup(e,t){t.sort((i,s)=>e(i.label,s.label,i.value,s.value,i.original,s.original)),t.forEach(i=>{i.group&&this._sortGroup(e,i.options)})}_defaultSortFunction(e,t){var i,s,n,r,o=0,a,h=/(\d+)|(\D+)/g,d=/\d/,u=0;if(this.params.sort==="desc"&&([e,t]=[t,e]),!e&&e!==0)u=!t&&t!==0?0:-1;else if(!t&&t!==0)u=1;else{if(isFinite(e)&&isFinite(t))return e-t;if(i=String(e).toLowerCase(),s=String(t).toLowerCase(),i===s)return 0;if(!(d.test(i)&&d.test(s)))return i>s?1:-1;for(i=i.match(h),s=s.match(h),a=i.length>s.length?s.length:i.length;or?1:-1;return i.length>s.length}return u}_filterOptions(){var e=this.params.filterFunc||this._defaultFilterFunc,t=this.input.value;return t?(this.filtered=!0,this.data.forEach(i=>{this._filterItem(e,t,i)})):this.filtered=!1,this.data}_filterItem(e,t,i){var s=!1;return i.group?(i.options.forEach(n=>{this._filterItem(e,t,n)&&(s=!0)}),i.visible=s):i.visible=e(t,i.label,i.value,i.original),i.visible}_defaultFilterFunc(e,t,i,s){return e=String(e).toLowerCase(),t!==null&&typeof t<"u"&&(String(t).toLowerCase().indexOf(e)>-1||String(i).toLowerCase().indexOf(e)>-1)}_clearList(){for(;this.listEl.firstChild;)this.listEl.removeChild(this.listEl.firstChild);this.displayItems=[]}_buildList(e){this._clearList(),e.forEach(t=>{this._buildItem(t)}),this.displayItems.length||this._addPlaceholder(this.params.placeholderEmpty)}_buildItem(e){var t=e.element,i;if(!this.filtered||e.visible){if(!t){if(t=document.createElement("div"),t.tabIndex=0,i=this.params.itemFormatter?this.params.itemFormatter(e.label,e.value,e.original,t):e.label,i instanceof HTMLElement?t.appendChild(i):t.innerHTML=i,e.group?t.classList.add("tabulator-edit-list-group"):t.classList.add("tabulator-edit-list-item"),t.classList.add("tabulator-edit-list-group-level-"+e.level),e.elementAttributes&&typeof e.elementAttributes=="object")for(let s in e.elementAttributes)s.charAt(0)=="+"?(s=s.slice(1),t.setAttribute(s,this.input.getAttribute(s)+e.elementAttributes["+"+s])):t.setAttribute(s,e.elementAttributes[s]);e.group?t.addEventListener("click",this._groupClick.bind(this,e)):t.addEventListener("click",this._itemClick.bind(this,e)),t.addEventListener("mousedown",this._preventBlur.bind(this)),e.element=t}this._styleItem(e),this.listEl.appendChild(t),e.group?e.options.forEach(s=>{this._buildItem(s)}):this.displayItems.push(e)}}_showList(){var e=this.popup&&this.popup.isVisible();if(this.input.parentNode){if(this.params.autocomplete&&this.input.value===""&&!this.params.listOnEmpty){this.popup&&this.popup.hide(!0);return}this._setListWidth(),this.popup||(this.popup=this.edit.popup(this.listEl)),this.popup.show(this.cell.getElement(),"bottom"),e||setTimeout(()=>{this.popup.hideOnBlur(this._resolveValue.bind(this,!0))},10)}}_styleItem(e){e&&e.element&&(e.selected?e.element.classList.add("active"):e.element.classList.remove("active"))}_itemClick(e,t){t.stopPropagation(),this._chooseItem(e)}_groupClick(e,t){t.stopPropagation()}_cancel(){this.popup.hide(!0),this.actions.cancel()}_clearChoices(){this.typing=!0,this.currentItems.forEach(e=>{e.selected=!1,this._styleItem(e)}),this.currentItems=[],this.focusedItem=null}_chooseItem(e,t){var i;this.typing=!1,this.params.multiselect?(i=this.currentItems.indexOf(e),i>-1?(this.currentItems.splice(i,1),e.selected=!1):(this.currentItems.push(e),e.selected=!0),this.input.value=this.currentItems.map(s=>s.label).join(","),this._styleItem(e)):(this.currentItems=[e],e.selected=!0,this.input.value=e.label,this._styleItem(e),t||this._resolveValue()),this._focusItem(e)}_resolveValue(e){var t,i;if(this.popup&&this.popup.hide(!0),this.params.multiselect)t=this.currentItems.map(s=>s.value);else if(e&&this.params.autocomplete&&this.typing)if(this.params.freetext||this.params.allowEmpty&&this.input.value==="")t=this.input.value;else{this.actions.cancel();return}else this.currentItems[0]?t=this.currentItems[0].value:(i=Array.isArray(this.initialValues)?this.initialValues[0]:this.initialValues,i===null||typeof i>"u"||i===""?t=i:t=this.params.emptyValue);t===""&&(t=this.params.emptyValue),this.actions.success(t),this.isFilter&&(this.initialValues=t&&!Array.isArray(t)?[t]:t,this.currentItems=[])}};function ei(l,e,t,i,s){var n=new Zt(this,l,e,t,i,s);return n.input}function ti(l,e,t,i,s){var n=this,r=l.getElement(),o=l.getValue(),a=r.getElementsByTagName("svg").length||5,h=r.getElementsByTagName("svg")[0]?r.getElementsByTagName("svg")[0].getAttribute("width"):14,d=[],u=document.createElement("div"),c=document.createElementNS("http://www.w3.org/2000/svg","svg");function f(m){d.forEach(function(C,T){T'):(n.table.browser=="ie"?C.setAttribute("class","tabulator-star-inactive"):C.classList.replace("tabulator-star-active","tabulator-star-inactive"),C.innerHTML='')})}function g(m){var C=document.createElement("span"),T=c.cloneNode(!0);d.push(T),C.addEventListener("mouseenter",function(y){y.stopPropagation(),y.stopImmediatePropagation(),f(m)}),C.addEventListener("mousemove",function(y){y.stopPropagation(),y.stopImmediatePropagation()}),C.addEventListener("click",function(y){y.stopPropagation(),y.stopImmediatePropagation(),t(m),r.blur()}),C.appendChild(T),u.appendChild(C)}function p(m){o=m,f(m)}if(r.style.whiteSpace="nowrap",r.style.overflow="hidden",r.style.textOverflow="ellipsis",u.style.verticalAlign="middle",u.style.display="inline-block",u.style.padding="4px",c.setAttribute("width",h),c.setAttribute("height",h),c.setAttribute("viewBox","0 0 512 512"),c.setAttribute("xml:space","preserve"),c.style.padding="0 1px",s.elementAttributes&&typeof s.elementAttributes=="object")for(let m in s.elementAttributes)m.charAt(0)=="+"?(m=m.slice(1),u.setAttribute(m,u.getAttribute(m)+s.elementAttributes["+"+m])):u.setAttribute(m,s.elementAttributes[m]);for(var v=1;v<=a;v++)g(v);return o=Math.min(parseInt(o),a),f(o),u.addEventListener("mousemove",function(m){f(0)}),u.addEventListener("click",function(m){t(0)}),r.addEventListener("blur",function(m){i()}),r.addEventListener("keydown",function(m){switch(m.keyCode){case 39:p(o+1);break;case 37:p(o-1);break;case 13:t(o);break;case 27:i();break}}),u}function ii(l,e,t,i,s){var n=l.getElement(),r=typeof s.max>"u"?n.getElementsByTagName("div")[0]&&n.getElementsByTagName("div")[0].getAttribute("max")||100:s.max,o=typeof s.min>"u"?n.getElementsByTagName("div")[0]&&n.getElementsByTagName("div")[0].getAttribute("min")||0:s.min,a=(r-o)/100,h=l.getValue()||0,d=document.createElement("div"),u=document.createElement("div"),c,f;function g(){var p=window.getComputedStyle(n,null),v=a*Math.round(u.offsetWidth/((n.clientWidth-parseInt(p.getPropertyValue("padding-left"))-parseInt(p.getPropertyValue("padding-right")))/100))+o;t(v),n.setAttribute("aria-valuenow",v),n.setAttribute("aria-label",h)}if(d.style.position="absolute",d.style.right="0",d.style.top="0",d.style.bottom="0",d.style.width="5px",d.classList.add("tabulator-progress-handle"),u.style.display="inline-block",u.style.position="relative",u.style.height="100%",u.style.backgroundColor="#488CE9",u.style.maxWidth="100%",u.style.minWidth="0%",s.elementAttributes&&typeof s.elementAttributes=="object")for(let p in s.elementAttributes)p.charAt(0)=="+"?(p=p.slice(1),u.setAttribute(p,u.getAttribute(p)+s.elementAttributes["+"+p])):u.setAttribute(p,s.elementAttributes[p]);return n.style.padding="4px 4px",h=Math.min(parseFloat(h),r),h=Math.max(parseFloat(h),o),h=Math.round((h-o)/a),u.style.width=h+"%",n.setAttribute("aria-valuemin",o),n.setAttribute("aria-valuemax",r),u.appendChild(d),d.addEventListener("mousedown",function(p){c=p.screenX,f=u.offsetWidth}),d.addEventListener("mouseover",function(){d.style.cursor="ew-resize"}),n.addEventListener("mousemove",function(p){c&&(u.style.width=f+p.screenX-c+"px")}),n.addEventListener("mouseup",function(p){c&&(p.stopPropagation(),p.stopImmediatePropagation(),c=!1,f=!1,g())}),n.addEventListener("keydown",function(p){switch(p.keyCode){case 39:p.preventDefault(),u.style.width=u.clientWidth+n.clientWidth/100+"px";break;case 37:p.preventDefault(),u.style.width=u.clientWidth-n.clientWidth/100+"px";break;case 9:case 13:g();break;case 27:i();break}}),n.addEventListener("blur",function(){i()}),u}function si(l,e,t,i,s){var n=l.getValue(),r=document.createElement("input"),o=s.tristate,a=typeof s.indeterminateValue>"u"?null:s.indeterminateValue,h=!1,d=Object.keys(s).includes("trueValue"),u=Object.keys(s).includes("falseValue");if(r.setAttribute("type","checkbox"),r.style.marginTop="5px",r.style.boxSizing="border-box",s.elementAttributes&&typeof s.elementAttributes=="object")for(let f in s.elementAttributes)f.charAt(0)=="+"?(f=f.slice(1),r.setAttribute(f,r.getAttribute(f)+s.elementAttributes["+"+f])):r.setAttribute(f,s.elementAttributes[f]);r.value=n,o&&(typeof n>"u"||n===a||n==="")&&(h=!0,r.indeterminate=!0),this.table.browser!="firefox"&&this.table.browser!="safari"&&e(function(){l.getType()==="cell"&&r.focus({preventScroll:!0})}),r.checked=d?n===s.trueValue:n===!0||n==="true"||n==="True"||n===1;function c(f){var g=r.checked;return d&&g?g=s.trueValue:u&&!g&&(g=s.falseValue),o?f?h?a:g:r.checked&&!h?(r.checked=!1,r.indeterminate=!0,h=!0,a):(h=!1,g):g}return r.addEventListener("change",function(f){t(c())}),r.addEventListener("blur",function(f){t(c(!0))}),r.addEventListener("keydown",function(f){f.keyCode==13&&t(c()),f.keyCode==27&&i()}),r}var ni={input:Xt,textarea:Jt,number:Kt,range:qt,date:Yt,time:$t,datetime:Qt,list:ei,star:ti,progress:ii,tickCross:si};const Z=class Z extends w{constructor(e){super(e),this.currentCell=!1,this.mouseClick=!1,this.recursionBlock=!1,this.invalidEdit=!1,this.editedCells=[],this.convertEmptyValues=!1,this.editors=Z.editors,this.registerTableOption("editTriggerEvent","focus"),this.registerTableOption("editorEmptyValue"),this.registerTableOption("editorEmptyValueFunc",this.emptyValueCheck.bind(this)),this.registerColumnOption("editable"),this.registerColumnOption("editor"),this.registerColumnOption("editorParams"),this.registerColumnOption("editorEmptyValue"),this.registerColumnOption("editorEmptyValueFunc"),this.registerColumnOption("cellEditing"),this.registerColumnOption("cellEdited"),this.registerColumnOption("cellEditCancelled"),this.registerTableFunction("getEditedCells",this.getEditedCells.bind(this)),this.registerTableFunction("clearCellEdited",this.clearCellEdited.bind(this)),this.registerTableFunction("navigatePrev",this.navigatePrev.bind(this)),this.registerTableFunction("navigateNext",this.navigateNext.bind(this)),this.registerTableFunction("navigateLeft",this.navigateLeft.bind(this)),this.registerTableFunction("navigateRight",this.navigateRight.bind(this)),this.registerTableFunction("navigateUp",this.navigateUp.bind(this)),this.registerTableFunction("navigateDown",this.navigateDown.bind(this)),this.registerComponentFunction("cell","isEdited",this.cellIsEdited.bind(this)),this.registerComponentFunction("cell","clearEdited",this.clearEdited.bind(this)),this.registerComponentFunction("cell","edit",this.editCell.bind(this)),this.registerComponentFunction("cell","cancelEdit",this.cellCancelEdit.bind(this)),this.registerComponentFunction("cell","navigatePrev",this.navigatePrev.bind(this)),this.registerComponentFunction("cell","navigateNext",this.navigateNext.bind(this)),this.registerComponentFunction("cell","navigateLeft",this.navigateLeft.bind(this)),this.registerComponentFunction("cell","navigateRight",this.navigateRight.bind(this)),this.registerComponentFunction("cell","navigateUp",this.navigateUp.bind(this)),this.registerComponentFunction("cell","navigateDown",this.navigateDown.bind(this))}initialize(){this.subscribe("cell-init",this.bindEditor.bind(this)),this.subscribe("cell-delete",this.clearEdited.bind(this)),this.subscribe("cell-value-changed",this.updateCellClass.bind(this)),this.subscribe("column-layout",this.initializeColumnCheck.bind(this)),this.subscribe("column-delete",this.columnDeleteCheck.bind(this)),this.subscribe("row-deleting",this.rowDeleteCheck.bind(this)),this.subscribe("row-layout",this.rowEditableCheck.bind(this)),this.subscribe("data-refreshing",this.cancelEdit.bind(this)),this.subscribe("clipboard-paste",this.pasteBlocker.bind(this)),this.subscribe("keybinding-nav-prev",this.navigatePrev.bind(this,void 0)),this.subscribe("keybinding-nav-next",this.keybindingNavigateNext.bind(this)),this.subscribe("keybinding-nav-up",this.navigateUp.bind(this,void 0)),this.subscribe("keybinding-nav-down",this.navigateDown.bind(this,void 0)),Object.keys(this.table.options).includes("editorEmptyValue")&&(this.convertEmptyValues=!0)}pasteBlocker(e){if(this.currentCell)return!0}keybindingNavigateNext(e){var t=this.currentCell,i=this.options("tabEndNewRow");t&&(this.navigateNext(t,e)||i&&(t.getElement().firstChild.blur(),this.invalidEdit||(i===!0?i=this.table.addRow({}):typeof i=="function"?i=this.table.addRow(i(t.row.getComponent())):i=this.table.addRow(Object.assign({},i)),i.then(()=>{setTimeout(()=>{t.getComponent().navigateNext()})}))))}cellIsEdited(e){return!!e.modules.edit&&e.modules.edit.edited}cellCancelEdit(e){e===this.currentCell?this.table.modules.edit.cancelEdit():console.warn("Cancel Editor Error - This cell is not currently being edited ")}updateCellClass(e){this.allowEdit(e)?e.getElement().classList.add("tabulator-editable"):e.getElement().classList.remove("tabulator-editable")}clearCellEdited(e){e||(e=this.table.modules.edit.getEditedCells()),Array.isArray(e)||(e=[e]),e.forEach(t=>{this.table.modules.edit.clearEdited(t._getSelf())})}navigatePrev(e=this.currentCell,t){var i,s;if(e){if(t&&t.preventDefault(),i=this.navigateLeft(),i)return!0;if(s=this.table.rowManager.prevDisplayRow(e.row,!0),s&&(i=this.findPrevEditableCell(s,s.cells.length),i))return i.getComponent().edit(),!0}return!1}navigateNext(e=this.currentCell,t){var i,s;if(e){if(t&&t.preventDefault(),i=this.navigateRight(),i)return!0;if(s=this.table.rowManager.nextDisplayRow(e.row,!0),s&&(i=this.findNextEditableCell(s,-1),i))return i.getComponent().edit(),!0}return!1}navigateLeft(e=this.currentCell,t){var i,s;return e&&(t&&t.preventDefault(),i=e.getIndex(),s=this.findPrevEditableCell(e.row,i),s)?(s.getComponent().edit(),!0):!1}navigateRight(e=this.currentCell,t){var i,s;return e&&(t&&t.preventDefault(),i=e.getIndex(),s=this.findNextEditableCell(e.row,i),s)?(s.getComponent().edit(),!0):!1}navigateUp(e=this.currentCell,t){var i,s;return e&&(t&&t.preventDefault(),i=e.getIndex(),s=this.table.rowManager.prevDisplayRow(e.row,!0),s)?(s.cells[i].getComponent().edit(),!0):!1}navigateDown(e=this.currentCell,t){var i,s;return e&&(t&&t.preventDefault(),i=e.getIndex(),s=this.table.rowManager.nextDisplayRow(e.row,!0),s)?(s.cells[i].getComponent().edit(),!0):!1}findNextEditableCell(e,t){var i=!1;if(t0)for(var s=t-1;s>=0;s--){let n=e.cells[s];if(n.column.modules.edit&&x.elVisible(n.getElement())&&this.allowEdit(n)){i=n;break}}return i}initializeColumnCheck(e){typeof e.definition.editor<"u"&&this.initializeColumn(e)}columnDeleteCheck(e){this.currentCell&&this.currentCell.column===e&&this.cancelEdit()}rowDeleteCheck(e){this.currentCell&&this.currentCell.row===e&&this.cancelEdit()}rowEditableCheck(e){e.getCells().forEach(t=>{t.column.modules.edit&&typeof t.column.modules.edit.check=="function"&&this.updateCellClass(t)})}initializeColumn(e){var t=Object.keys(e.definition).includes("editorEmptyValue"),i={editor:!1,blocked:!1,check:e.definition.editable,params:e.definition.editorParams||{},convertEmptyValues:t,editorEmptyValue:e.definition.editorEmptyValue,editorEmptyValueFunc:e.definition.editorEmptyValueFunc};switch(typeof e.definition.editor){case"string":this.editors[e.definition.editor]?i.editor=this.editors[e.definition.editor]:console.warn("Editor Error - No such editor found: ",e.definition.editor);break;case"function":i.editor=e.definition.editor;break;case"boolean":e.definition.editor===!0&&(typeof e.definition.formatter!="function"?this.editors[e.definition.formatter]?i.editor=this.editors[e.definition.formatter]:i.editor=this.editors.input:console.warn("Editor Error - Cannot auto lookup editor for a custom formatter: ",e.definition.formatter));break}i.editor&&(e.modules.edit=i)}getCurrentCell(){return this.currentCell?this.currentCell.getComponent():!1}clearEditor(e){var t=this.currentCell,i;if(this.invalidEdit=!1,t){for(this.currentCell=!1,i=t.getElement(),this.dispatch("edit-editor-clear",t,e),i.classList.remove("tabulator-editing");i.firstChild;)i.removeChild(i.firstChild);t.row.getElement().classList.remove("tabulator-editing"),t.table.element.classList.remove("tabulator-editing")}}cancelEdit(){if(this.currentCell){var e=this.currentCell,t=this.currentCell.getComponent();this.clearEditor(!0),e.setValueActual(e.getValue()),e.cellRendered(),(e.column.definition.editor=="textarea"||e.column.definition.variableHeight)&&e.row.normalizeHeight(!0),e.column.definition.cellEditCancelled&&e.column.definition.cellEditCancelled.call(this.table,t),this.dispatch("edit-cancelled",e),this.dispatchExternal("cellEditCancelled",t)}}bindEditor(e){if(e.column.modules.edit){var t=this,i=e.getElement(!0);this.updateCellClass(e),i.setAttribute("tabindex",0),i.addEventListener("mousedown",function(s){s.button===2?s.preventDefault():t.mouseClick=!0}),this.options("editTriggerEvent")==="dblclick"&&i.addEventListener("dblclick",function(s){i.classList.contains("tabulator-editing")||(i.focus({preventScroll:!0}),t.edit(e,s,!1))}),(this.options("editTriggerEvent")==="focus"||this.options("editTriggerEvent")==="click")&&i.addEventListener("click",function(s){i.classList.contains("tabulator-editing")||(i.focus({preventScroll:!0}),t.edit(e,s,!1))}),this.options("editTriggerEvent")==="focus"&&i.addEventListener("focus",function(s){t.recursionBlock||t.edit(e,s,!1)})}}focusCellNoEvent(e,t){this.recursionBlock=!0,t&&this.table.browser==="ie"||e.getElement().focus({preventScroll:!0}),this.recursionBlock=!1}editCell(e,t){this.focusCellNoEvent(e),this.edit(e,!1,t)}focusScrollAdjust(e){if(this.table.rowManager.getRenderMode()=="virtual"){var t=this.table.rowManager.element.scrollTop,i=this.table.rowManager.element.clientHeight+this.table.rowManager.element.scrollTop,s=e.row.getElement();s.offsetTopi&&(this.table.rowManager.element.scrollTop+=s.offsetTop+s.offsetHeight-i);var n=this.table.rowManager.element.scrollLeft,r=this.table.rowManager.element.clientWidth+this.table.rowManager.element.scrollLeft,o=e.getElement();this.table.modExists("frozenColumns")&&(n+=parseInt(this.table.modules.frozenColumns.leftMargin||0),r-=parseInt(this.table.modules.frozenColumns.rightMargin||0)),this.table.options.renderHorizontal==="virtual"&&(n-=parseInt(this.table.columnManager.renderer.vDomPadLeft),r-=parseInt(this.table.columnManager.renderer.vDomPadLeft)),o.offsetLeftr&&(this.table.rowManager.element.scrollLeft+=o.offsetLeft+o.offsetWidth-r)}}allowEdit(e){var t=!!e.column.modules.edit;if(e.column.modules.edit)switch(typeof e.column.modules.edit.check){case"function":e.row.initialized&&(t=e.column.modules.edit.check(e.getComponent()));break;case"string":t=!!e.row.data[e.column.modules.edit.check];break;case"boolean":t=e.column.modules.edit.check;break}return t}edit(e,t,i){var s=this,n=!0,r=function(){},o=e.getElement(),a=!1,h,d,u;if(this.currentCell){!this.invalidEdit&&this.currentCell!==e&&this.cancelEdit();return}function c(m){if(s.currentCell===e&&!a){var C=s.chain("edit-success",[e,m],!0,!0);return C===!0||s.table.options.validationMode==="highlight"?(a=!0,s.clearEditor(),e.modules.edit||(e.modules.edit={}),e.modules.edit.edited=!0,s.editedCells.indexOf(e)==-1&&s.editedCells.push(e),m=s.transformEmptyValues(m,e),e.setValue(m,!0),C===!0):(a=!0,s.invalidEdit=!0,s.focusCellNoEvent(e,!0),r(),setTimeout(()=>{a=!1},10),!1)}}function f(){s.currentCell===e&&!a&&s.cancelEdit()}function g(m){r=m}if(e.column.modules.edit.blocked)return this.mouseClick=!1,this.blur(o),!1;if(t&&t.stopPropagation(),n=this.allowEdit(e),n||i){if(s.cancelEdit(),s.currentCell=e,this.focusScrollAdjust(e),d=e.getComponent(),this.mouseClick&&(this.mouseClick=!1,e.column.definition.cellClick&&e.column.definition.cellClick.call(this.table,t,d)),e.column.definition.cellEditing&&e.column.definition.cellEditing.call(this.table,d),this.dispatch("cell-editing",e),this.dispatchExternal("cellEditing",d),u=typeof e.column.modules.edit.params=="function"?e.column.modules.edit.params(d):e.column.modules.edit.params,h=e.column.modules.edit.editor.call(s,d,g,c,f,u),this.currentCell&&h!==!1)if(h instanceof Node){for(o.classList.add("tabulator-editing"),e.row.getElement().classList.add("tabulator-editing"),e.table.element.classList.add("tabulator-editing");o.firstChild;)o.removeChild(o.firstChild);o.appendChild(h),r();for(var p=o.children,v=0;v"u"}transformEmptyValues(e,t){var i=t.column.modules.edit,s=i.convertEmptyValues||this.convertEmptyValues,n;return s&&(n=i.editorEmptyValueFunc||this.options("editorEmptyValueFunc"),n&&n(e)&&(e=i.convertEmptyValues?i.editorEmptyValue:this.options("editorEmptyValue"))),e}blur(e){this.confirm("edit-blur",[e])||e.blur()}getEditedCells(){var e=[];return this.editedCells.forEach(t=>{e.push(t.getComponent())}),e}clearEdited(e){var t;e.modules.edit&&e.modules.edit.edited&&(e.modules.edit.edited=!1,this.dispatch("edit-edited-clear",e)),t=this.editedCells.indexOf(e),t>-1&&this.editedCells.splice(t,1)}};b(Z,"moduleName","edit"),b(Z,"editors",ni);let we=Z;class Ue{constructor(e,t,i,s){this.type=e,this.columns=t,this.component=i||!1,this.indent=s||0}}class de{constructor(e,t,i,s,n){this.value=e,this.component=t||!1,this.width=i,this.height=s,this.depth=n}}var ri={},oi={visible:function(){return this.rowManager.getVisibleRows(!1,!0)},all:function(){return this.rowManager.rows},selected:function(){return this.modules.selectRow.selectedRows},active:function(){return this.options.pagination?this.rowManager.getDisplayRows(this.rowManager.displayRows.length-2):this.rowManager.getDisplayRows()}};const V=class V extends w{constructor(e){super(e),this.config={},this.cloneTableStyle=!0,this.colVisProp="",this.colVisPropAttach="",this.registerTableOption("htmlOutputConfig",!1),this.registerColumnOption("htmlOutput"),this.registerColumnOption("titleHtmlOutput")}initialize(){this.registerTableFunction("getHtml",this.getHtml.bind(this))}generateExportList(e,t,i,s){var n,r,o,a;return this.cloneTableStyle=t,this.config=e||{},this.colVisProp=s,this.colVisPropAttach=this.colVisProp.charAt(0).toUpperCase()+this.colVisProp.slice(1),a=V.columnLookups[i],a&&(o=a.call(this.table),o=o.filter(h=>this.columnVisCheck(h))),n=this.config.columnHeaders!==!1?this.headersToExportRows(this.generateColumnGroupHeaders(o)):[],o&&(o=o.map(h=>h.getComponent())),r=this.bodyToExportRows(this.rowLookup(i),o),n.concat(r)}generateTable(e,t,i,s){var n=this.generateExportList(e,t,i,s);return this.generateTableElement(n)}rowLookup(e){var t=[],i;return typeof e=="function"?e.call(this.table).forEach(s=>{s=this.table.rowManager.findRow(s),s&&t.push(s)}):(i=V.rowLookups[e]||V.rowLookups.active,t=i.call(this.table)),Object.assign([],t)}generateColumnGroupHeaders(e){var t=[];return e||(e=this.config.columnGroups!==!1?this.table.columnManager.columns:this.table.columnManager.columnsByIndex),e.forEach(i=>{var s=this.processColumnGroup(i);s&&t.push(s)}),t}processColumnGroup(e){var t=e.columns,i=0,s=e.definition["title"+this.colVisPropAttach]||e.definition.title,n={title:s,column:e,depth:1};if(t.length){if(n.subGroups=[],n.width=0,t.forEach(r=>{var o=this.processColumnGroup(r);o&&(n.width+=o.width,n.subGroups.push(o),o.depth>i&&(i=o.depth))}),n.depth+=i,!n.width)return!1}else if(this.columnVisCheck(e))n.width=1;else return!1;return n}columnVisCheck(e){var t=e.definition[this.colVisProp];return this.config.rowHeaders===!1&&e.isRowHeader?!1:(typeof t=="function"&&(t=t.call(this.table,e.getComponent())),t===!1||t===!0?t:e.visible&&e.field)}headersToExportRows(e){var t=[],i=0,s=[];function n(r,o){var a=i-o;if(typeof t[o]>"u"&&(t[o]=[]),r.height=r.subGroups?1:a-r.depth+1,t[o].push(r),r.height>1)for(let h=1;h"u"&&(t[o+h]=[]),t[o+h].push(!1);if(r.width>1)for(let h=1;hi&&(i=r.depth)}),e.forEach(function(r){n(r,0)}),t.forEach(r=>{var o=[];r.forEach(a=>{if(a){let h=typeof a.title>"u"?"":a.title;o.push(new de(h,a.column.getComponent(),a.width,a.height,a.depth))}else o.push(null)}),s.push(new Ue("header",o))}),s}bodyToExportRows(e,t=[]){var i=[];return t.length===0&&this.table.columnManager.columnsByIndex.forEach(s=>{this.columnVisCheck(s)&&t.push(s.getComponent())}),this.config.columnCalcs!==!1&&this.table.modExists("columnCalcs")&&(this.table.modules.columnCalcs.topInitialized&&e.unshift(this.table.modules.columnCalcs.topRow),this.table.modules.columnCalcs.botInitialized&&e.push(this.table.modules.columnCalcs.botRow)),e=e.filter(s=>{switch(s.type){case"group":return this.config.rowGroups!==!1;case"calc":return this.config.columnCalcs!==!1;case"row":return!(this.table.options.dataTree&&this.config.dataTree===!1&&s.modules.dataTree.parent)}return!0}),e.forEach((s,n)=>{var r=s.getData(this.colVisProp),o=[],a=0;switch(s.type){case"group":a=s.level,o.push(new de(s.key,s.getComponent(),t.length,1));break;case"calc":case"row":t.forEach(h=>{o.push(new de(h._column.getFieldValue(r),h,1,1))}),this.table.options.dataTree&&this.config.dataTree!==!1&&(a=s.modules.dataTree.index);break}i.push(new Ue(s.type,o,s.getComponent(),a))}),i}generateTableElement(e){var t=document.createElement("table"),i=document.createElement("thead"),s=document.createElement("tbody"),n=this.lookupTableStyles(),r=this.table.options["rowFormatter"+this.colVisPropAttach],o={};return o.rowFormatter=r!==null?r:this.table.options.rowFormatter,this.table.options.dataTree&&this.config.dataTree!==!1&&this.table.modExists("columnCalcs")&&(o.treeElementField=this.table.modules.dataTree.elementField),o.groupHeader=this.table.options["groupHeader"+this.colVisPropAttach],o.groupHeader&&!Array.isArray(o.groupHeader)&&(o.groupHeader=[o.groupHeader]),t.classList.add("tabulator-print-table"),this.mapElementStyles(this.table.columnManager.getHeadersElement(),i,["border-top","border-left","border-right","border-bottom","background-color","color","font-weight","font-family","font-size"]),e.length>1e3&&console.warn("It may take a long time to render an HTML table with more than 1000 rows"),e.forEach((a,h)=>{let d;switch(a.type){case"header":i.appendChild(this.generateHeaderElement(a,o,n));break;case"group":s.appendChild(this.generateGroupElement(a,o,n));break;case"calc":s.appendChild(this.generateCalcElement(a,o,n));break;case"row":d=this.generateRowElement(a,o,n),this.mapElementStyles(h%2&&n.evenRow?n.evenRow:n.oddRow,d,["border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","background-color"]),s.appendChild(d);break}}),i.innerHTML&&t.appendChild(i),t.appendChild(s),this.mapElementStyles(this.table.element,t,["border-top","border-left","border-right","border-bottom"]),t}lookupTableStyles(){var e={};return this.cloneTableStyle&&window.getComputedStyle&&(e.oddRow=this.table.element.querySelector(".tabulator-row-odd:not(.tabulator-group):not(.tabulator-calcs)"),e.evenRow=this.table.element.querySelector(".tabulator-row-even:not(.tabulator-group):not(.tabulator-calcs)"),e.calcRow=this.table.element.querySelector(".tabulator-row.tabulator-calcs"),e.firstRow=this.table.element.querySelector(".tabulator-row:not(.tabulator-group):not(.tabulator-calcs)"),e.firstGroup=this.table.element.getElementsByClassName("tabulator-group")[0],e.firstRow&&(e.styleCells=e.firstRow.getElementsByClassName("tabulator-cell"),e.styleRowHeader=e.firstRow.getElementsByClassName("tabulator-row-header")[0],e.firstCell=e.styleCells[0],e.lastCell=e.styleCells[e.styleCells.length-1])),e}generateHeaderElement(e,t,i){var s=document.createElement("tr");return e.columns.forEach(n=>{if(n){var r=document.createElement("th"),o=n.component._column.definition.cssClass?n.component._column.definition.cssClass.split(" "):[];r.colSpan=n.width,r.rowSpan=n.height,r.innerHTML=n.value,this.cloneTableStyle&&(r.style.boxSizing="border-box"),o.forEach(function(a){r.classList.add(a)}),this.mapElementStyles(n.component.getElement(),r,["text-align","border-left","border-right","background-color","color","font-weight","font-family","font-size"]),this.mapElementStyles(n.component._column.contentElement,r,["padding-top","padding-left","padding-right","padding-bottom"]),n.component._column.visible?this.mapElementStyles(n.component.getElement(),r,["width"]):n.component._column.definition.width&&(r.style.width=n.component._column.definition.width+"px"),n.component._column.parent&&n.component._column.parent.isGroup?this.mapElementStyles(n.component._column.parent.groupElement,r,["border-top"]):this.mapElementStyles(n.component.getElement(),r,["border-top"]),n.component._column.isGroup?this.mapElementStyles(n.component.getElement(),r,["border-bottom"]):this.mapElementStyles(this.table.columnManager.getElement(),r,["border-bottom"]),s.appendChild(r)}}),s}generateGroupElement(e,t,i){var s=document.createElement("tr"),n=document.createElement("td"),r=e.columns[0];return s.classList.add("tabulator-print-table-row"),t.groupHeader&&t.groupHeader[e.indent]?r.value=t.groupHeader[e.indent](r.value,e.component._group.getRowCount(),e.component._group.getData(),e.component):t.groupHeader!==!1&&(r.value=e.component._group.generator(r.value,e.component._group.getRowCount(),e.component._group.getData(),e.component)),n.colSpan=r.width,n.innerHTML=r.value,s.classList.add("tabulator-print-table-group"),s.classList.add("tabulator-group-level-"+e.indent),r.component.isVisible()&&s.classList.add("tabulator-group-visible"),this.mapElementStyles(i.firstGroup,s,["border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","background-color"]),this.mapElementStyles(i.firstGroup,n,["padding-top","padding-left","padding-right","padding-bottom"]),s.appendChild(n),s}generateCalcElement(e,t,i){var s=this.generateRowElement(e,t,i);return s.classList.add("tabulator-print-table-calcs"),this.mapElementStyles(i.calcRow,s,["border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","background-color"]),s}generateRowElement(e,t,i){var s=document.createElement("tr");if(s.classList.add("tabulator-print-table-row"),e.columns.forEach((n,r)=>{if(n){var o=document.createElement("td"),a=n.component._column,h=this.table,d=h.columnManager.findColumnIndex(a),u=n.value,c,f,g={modules:{},getValue:function(){return u},getField:function(){return a.definition.field},getElement:function(){return o},getType:function(){return"cell"},getColumn:function(){return a.getComponent()},getData:function(){return e.component.getData()},getRow:function(){return e.component},getTable:function(){return h},getComponent:function(){return g},column:a},p=a.definition.cssClass?a.definition.cssClass.split(" "):[];if(p.forEach(function(v){o.classList.add(v)}),this.table.modExists("format")&&this.config.formatCells!==!1)u=this.table.modules.format.formatExportValue(g,this.colVisProp);else switch(typeof u){case"object":u=u!==null?JSON.stringify(u):"";break;case"undefined":u="";break}u instanceof Node?o.appendChild(u):o.innerHTML=u,f=["padding-top","padding-left","padding-right","padding-bottom","border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","text-align"],a.isRowHeader?(c=i.styleRowHeader,f.push("background-color")):c=i.styleCells&&i.styleCells[d]?i.styleCells[d]:i.firstCell,c&&(this.mapElementStyles(c,o,f),a.definition.align&&(o.style.textAlign=a.definition.align)),this.table.options.dataTree&&this.config.dataTree!==!1&&(t.treeElementField&&t.treeElementField==a.field||!t.treeElementField&&r==0)&&(e.component._row.modules.dataTree.controlEl&&o.insertBefore(e.component._row.modules.dataTree.controlEl.cloneNode(!0),o.firstChild),e.component._row.modules.dataTree.branchEl&&o.insertBefore(e.component._row.modules.dataTree.branchEl.cloneNode(!0),o.firstChild)),s.appendChild(o),g.modules.format&&g.modules.format.renderedCallback&&g.modules.format.renderedCallback()}}),t.rowFormatter&&e.type==="row"&&this.config.formatCells!==!1){let n=Object.assign(e.component);n.getElement=function(){return s},t.rowFormatter(e.component)}return s}generateHTMLTable(e){var t=document.createElement("div");return t.appendChild(this.generateTableElement(e)),t.innerHTML}getHtml(e,t,i,s){var n=this.generateExportList(i||this.table.options.htmlOutputConfig,t,e,s||"htmlOutput");return this.generateHTMLTable(n)}mapElementStyles(e,t,i){if(this.cloneTableStyle&&e&&t){var s={"background-color":"backgroundColor",color:"fontColor",width:"width","font-weight":"fontWeight","font-family":"fontFamily","font-size":"fontSize","text-align":"textAlign","border-top":"borderTop","border-left":"borderLeft","border-right":"borderRight","border-bottom":"borderBottom","padding-top":"paddingTop","padding-left":"paddingLeft","padding-right":"paddingRight","padding-bottom":"paddingBottom"};if(window.getComputedStyle){var n=window.getComputedStyle(e);i.forEach(function(r){t.style[s[r]]||(t.style[s[r]]=n.getPropertyValue(r))})}}}};b(V,"moduleName","export"),b(V,"columnLookups",ri),b(V,"rowLookups",oi);let Ce=V;var ai={"=":function(l,e,t,i){return e==l},"<":function(l,e,t,i){return e":function(l,e,t,i){return e>l},">=":function(l,e,t,i){return e>=l},"!=":function(l,e,t,i){return e!=l},regex:function(l,e,t,i){return typeof l=="string"&&(l=new RegExp(l)),l.test(e)},like:function(l,e,t,i){return l===null||typeof l>"u"?e===l:typeof e<"u"&&e!==null?String(e).toLowerCase().indexOf(l.toLowerCase())>-1:!1},keywords:function(l,e,t,i){var s=l.toLowerCase().split(typeof i.separator>"u"?" ":i.separator),n=String(e===null||typeof e>"u"?"":e).toLowerCase(),r=[];return s.forEach(o=>{n.includes(o)&&r.push(!0)}),i.matchAll?r.length===s.length:!!r.length},starts:function(l,e,t,i){return l===null||typeof l>"u"?e===l:typeof e<"u"&&e!==null?String(e).toLowerCase().startsWith(l.toLowerCase()):!1},ends:function(l,e,t,i){return l===null||typeof l>"u"?e===l:typeof e<"u"&&e!==null?String(e).toLowerCase().endsWith(l.toLowerCase()):!1},in:function(l,e,t,i){return Array.isArray(l)?l.length?l.indexOf(e)>-1:!0:(console.warn("Filter Error - filter value is not an array:",l),!1)}};const O=class O extends w{constructor(e){super(e),this.filterList=[],this.headerFilters={},this.headerFilterColumns=[],this.prevHeaderFilterChangeCheck="",this.prevHeaderFilterChangeCheck="{}",this.changed=!1,this.tableInitialized=!1,this.registerTableOption("filterMode","local"),this.registerTableOption("initialFilter",!1),this.registerTableOption("initialHeaderFilter",!1),this.registerTableOption("headerFilterLiveFilterDelay",300),this.registerTableOption("placeholderHeaderFilter",!1),this.registerColumnOption("headerFilter"),this.registerColumnOption("headerFilterPlaceholder"),this.registerColumnOption("headerFilterParams"),this.registerColumnOption("headerFilterEmptyCheck"),this.registerColumnOption("headerFilterFunc"),this.registerColumnOption("headerFilterFuncParams"),this.registerColumnOption("headerFilterLiveFilter"),this.registerTableFunction("searchRows",this.searchRows.bind(this)),this.registerTableFunction("searchData",this.searchData.bind(this)),this.registerTableFunction("setFilter",this.userSetFilter.bind(this)),this.registerTableFunction("refreshFilter",this.userRefreshFilter.bind(this)),this.registerTableFunction("addFilter",this.userAddFilter.bind(this)),this.registerTableFunction("getFilters",this.getFilters.bind(this)),this.registerTableFunction("setHeaderFilterFocus",this.userSetHeaderFilterFocus.bind(this)),this.registerTableFunction("getHeaderFilterValue",this.userGetHeaderFilterValue.bind(this)),this.registerTableFunction("setHeaderFilterValue",this.userSetHeaderFilterValue.bind(this)),this.registerTableFunction("getHeaderFilters",this.getHeaderFilters.bind(this)),this.registerTableFunction("removeFilter",this.userRemoveFilter.bind(this)),this.registerTableFunction("clearFilter",this.userClearFilter.bind(this)),this.registerTableFunction("clearHeaderFilter",this.userClearHeaderFilter.bind(this)),this.registerComponentFunction("column","headerFilterFocus",this.setHeaderFilterFocus.bind(this)),this.registerComponentFunction("column","reloadHeaderFilter",this.reloadHeaderFilter.bind(this)),this.registerComponentFunction("column","getHeaderFilterValue",this.getHeaderFilterValue.bind(this)),this.registerComponentFunction("column","setHeaderFilterValue",this.setHeaderFilterValue.bind(this))}initialize(){this.subscribe("column-init",this.initializeColumnHeaderFilter.bind(this)),this.subscribe("column-width-fit-before",this.hideHeaderFilterElements.bind(this)),this.subscribe("column-width-fit-after",this.showHeaderFilterElements.bind(this)),this.subscribe("table-built",this.tableBuilt.bind(this)),this.subscribe("placeholder",this.generatePlaceholder.bind(this)),this.table.options.filterMode==="remote"&&this.subscribe("data-params",this.remoteFilterParams.bind(this)),this.registerDataHandler(this.filter.bind(this),10)}tableBuilt(){this.table.options.initialFilter&&this.setFilter(this.table.options.initialFilter),this.table.options.initialHeaderFilter&&this.table.options.initialHeaderFilter.forEach(e=>{var t=this.table.columnManager.findColumn(e.field);if(t)this.setHeaderFilterValue(t,e.value);else return console.warn("Column Filter Error - No matching column found:",e.field),!1}),this.tableInitialized=!0}remoteFilterParams(e,t,i,s){return s.filter=this.getFilters(!0,!0),s}generatePlaceholder(e){if(this.table.options.placeholderHeaderFilter&&Object.keys(this.headerFilters).length)return this.table.options.placeholderHeaderFilter}userSetFilter(e,t,i,s){this.setFilter(e,t,i,s),this.refreshFilter()}userRefreshFilter(){this.refreshFilter()}userAddFilter(e,t,i,s){this.addFilter(e,t,i,s),this.refreshFilter()}userSetHeaderFilterFocus(e){var t=this.table.columnManager.findColumn(e);if(t)this.setHeaderFilterFocus(t);else return console.warn("Column Filter Focus Error - No matching column found:",e),!1}userGetHeaderFilterValue(e){var t=this.table.columnManager.findColumn(e);if(t)return this.getHeaderFilterValue(t);console.warn("Column Filter Error - No matching column found:",e)}userSetHeaderFilterValue(e,t){var i=this.table.columnManager.findColumn(e);if(i)this.setHeaderFilterValue(i,t);else return console.warn("Column Filter Error - No matching column found:",e),!1}userRemoveFilter(e,t,i){this.removeFilter(e,t,i),this.refreshFilter()}userClearFilter(e){this.clearFilter(e),this.refreshFilter()}userClearHeaderFilter(){this.clearHeaderFilter(),this.refreshFilter()}searchRows(e,t,i){return this.search("rows",e,t,i)}searchData(e,t,i){return this.search("data",e,t,i)}initializeColumnHeaderFilter(e){var t=e.definition;t.headerFilter&&this.initializeColumn(e)}initializeColumn(e,t){var i=this,s=e.getField();function n(r){var o=e.modules.filter.tagType=="input"&&e.modules.filter.attrType=="text"||e.modules.filter.tagType=="textarea"?"partial":"match",a="",h="",d;if(typeof e.modules.filter.prevSuccess>"u"||e.modules.filter.prevSuccess!==r){if(e.modules.filter.prevSuccess=r,e.modules.filter.emptyFunc(r))delete i.headerFilters[s];else{switch(e.modules.filter.value=r,typeof e.definition.headerFilterFunc){case"string":O.filters[e.definition.headerFilterFunc]?(a=e.definition.headerFilterFunc,d=function(u){var c=e.definition.headerFilterFuncParams||{},f=e.getFieldValue(u);return c=typeof c=="function"?c(r,f,u):c,O.filters[e.definition.headerFilterFunc](r,f,u,c)}):console.warn("Header Filter Error - Matching filter function not found: ",e.definition.headerFilterFunc);break;case"function":d=function(u){var c=e.definition.headerFilterFuncParams||{},f=e.getFieldValue(u);return c=typeof c=="function"?c(r,f,u):c,e.definition.headerFilterFunc(r,f,u,c)},a=d;break}if(!d)switch(o){case"partial":d=function(u){var c=e.getFieldValue(u);return typeof c<"u"&&c!==null?String(c).toLowerCase().indexOf(String(r).toLowerCase())>-1:!1},a="like";break;default:d=function(u){return e.getFieldValue(u)==r},a="="}i.headerFilters[s]={value:r,func:d,type:a}}e.modules.filter.value=r,h=JSON.stringify(i.headerFilters),i.prevHeaderFilterChangeCheck!==h&&(i.prevHeaderFilterChangeCheck=h,i.trackChanges(),i.refreshFilter())}return!0}e.modules.filter={success:n,attrType:!1,tagType:!1,emptyFunc:!1},this.generateHeaderFilterElement(e)}generateHeaderFilterElement(e,t,i){var s=this,n=e.modules.filter.success,r=e.getField(),o,a,h,d,u,c,f,g;e.modules.filter.value=t;function p(){}function v(m){g=m}if(e.modules.filter.headerElement&&e.modules.filter.headerElement.parentNode&&e.contentElement.removeChild(e.modules.filter.headerElement.parentNode),r){switch(e.modules.filter.emptyFunc=e.definition.headerFilterEmptyCheck||function(m){return!m&&m!==0},o=document.createElement("div"),o.classList.add("tabulator-header-filter"),typeof e.definition.headerFilter){case"string":s.table.modules.edit.editors[e.definition.headerFilter]?(a=s.table.modules.edit.editors[e.definition.headerFilter],(e.definition.headerFilter==="tick"||e.definition.headerFilter==="tickCross")&&!e.definition.headerFilterEmptyCheck&&(e.modules.filter.emptyFunc=function(m){return m!==!0&&m!==!1})):console.warn("Filter Error - Cannot build header filter, No such editor found: ",e.definition.editor);break;case"function":a=e.definition.headerFilter;break;case"boolean":e.modules.edit&&e.modules.edit.editor?a=e.modules.edit.editor:e.definition.formatter&&s.table.modules.edit.editors[e.definition.formatter]?(a=s.table.modules.edit.editors[e.definition.formatter],(e.definition.formatter==="tick"||e.definition.formatter==="tickCross")&&!e.definition.headerFilterEmptyCheck&&(e.modules.filter.emptyFunc=function(m){return m!==!0&&m!==!1})):a=s.table.modules.edit.editors.input;break}if(a){if(d={getValue:function(){return typeof t<"u"?t:""},getField:function(){return e.definition.field},getElement:function(){return o},getColumn:function(){return e.getComponent()},getTable:()=>this.table,getType:()=>"header",getRow:function(){return{normalizeHeight:function(){}}}},f=e.definition.headerFilterParams||{},f=typeof f=="function"?f.call(s.table,d):f,h=a.call(this.table.modules.edit,d,v,n,p,f),!h){console.warn("Filter Error - Cannot add filter to "+r+" column, editor returned a value of false");return}if(!(h instanceof Node)){console.warn("Filter Error - Cannot add filter to "+r+" column, editor should return an instance of Node, the editor returned:",h);return}s.langBind("headerFilters|columns|"+e.definition.field,function(m){h.setAttribute("placeholder",typeof m<"u"&&m?m:e.definition.headerFilterPlaceholder||s.langText("headerFilters|default"))}),h.addEventListener("click",function(m){m.stopPropagation(),h.focus()}),h.addEventListener("focus",m=>{var C=this.table.columnManager.contentsElement.scrollLeft,T=this.table.rowManager.element.scrollLeft;C!==T&&(this.table.rowManager.scrollHorizontal(C),this.table.columnManager.scrollHorizontal(C))}),u=!1,c=function(m){u&&clearTimeout(u),u=setTimeout(function(){n(h.value)},s.table.options.headerFilterLiveFilterDelay)},e.modules.filter.headerElement=h,e.modules.filter.attrType=h.hasAttribute("type")?h.getAttribute("type").toLowerCase():"",e.modules.filter.tagType=h.tagName.toLowerCase(),e.definition.headerFilterLiveFilter!==!1&&(e.definition.headerFilter==="autocomplete"||e.definition.headerFilter==="tickCross"||(e.definition.editor==="autocomplete"||e.definition.editor==="tickCross")&&e.definition.headerFilter===!0||(h.addEventListener("keyup",c),h.addEventListener("search",c),e.modules.filter.attrType=="number"&&h.addEventListener("change",function(m){n(h.value)}),e.modules.filter.attrType=="text"&&this.table.browser!=="ie"&&h.setAttribute("type","search")),(e.modules.filter.tagType=="input"||e.modules.filter.tagType=="select"||e.modules.filter.tagType=="textarea")&&h.addEventListener("mousedown",function(m){m.stopPropagation()})),o.appendChild(h),e.contentElement.appendChild(o),i||s.headerFilterColumns.push(e),g&&g()}}else console.warn("Filter Error - Cannot add header filter, column has no field set:",e.definition.title)}hideHeaderFilterElements(){this.headerFilterColumns.forEach(function(e){e.modules.filter&&e.modules.filter.headerElement&&(e.modules.filter.headerElement.style.display="none")})}showHeaderFilterElements(){this.headerFilterColumns.forEach(function(e){e.modules.filter&&e.modules.filter.headerElement&&(e.modules.filter.headerElement.style.display="")})}setHeaderFilterFocus(e){e.modules.filter&&e.modules.filter.headerElement?e.modules.filter.headerElement.focus():console.warn("Column Filter Focus Error - No header filter set on column:",e.getField())}getHeaderFilterValue(e){if(e.modules.filter&&e.modules.filter.headerElement)return e.modules.filter.value;console.warn("Column Filter Error - No header filter set on column:",e.getField())}setHeaderFilterValue(e,t){e&&(e.modules.filter&&e.modules.filter.headerElement?(this.generateHeaderFilterElement(e,t,!0),e.modules.filter.success(t)):console.warn("Column Filter Error - No header filter set on column:",e.getField()))}reloadHeaderFilter(e){e&&(e.modules.filter&&e.modules.filter.headerElement?this.generateHeaderFilterElement(e,e.modules.filter.value,!0):console.warn("Column Filter Error - No header filter set on column:",e.getField()))}refreshFilter(){this.tableInitialized&&(this.table.options.filterMode==="remote"?this.reloadData(null,!1,!1):this.refreshData(!0))}trackChanges(){this.changed=!0,this.dispatch("filter-changed")}hasChanged(){var e=this.changed;return this.changed=!1,e}setFilter(e,t,i,s){this.filterList=[],Array.isArray(e)||(e=[{field:e,type:t,value:i,params:s}]),this.addFilter(e)}addFilter(e,t,i,s){var n=!1;Array.isArray(e)||(e=[{field:e,type:t,value:i,params:s}]),e.forEach(r=>{r=this.findFilter(r),r&&(this.filterList.push(r),n=!0)}),n&&this.trackChanges()}findFilter(e){var t;if(Array.isArray(e))return this.findSubFilters(e);var i=!1;return typeof e.field=="function"?i=function(s){return e.field(s,e.type||{})}:O.filters[e.type]?(t=this.table.columnManager.getColumnByField(e.field),t?i=function(s){return O.filters[e.type](e.value,t.getFieldValue(s),s,e.params||{})}:i=function(s){return O.filters[e.type](e.value,s[e.field],s,e.params||{})}):console.warn("Filter Error - No such filter type found, ignoring: ",e.type),e.func=i,e.func?e:!1}findSubFilters(e){var t=[];return e.forEach(i=>{i=this.findFilter(i),i&&t.push(i)}),t.length?t:!1}getFilters(e,t){var i=[];return e&&(i=this.getHeaderFilters()),t&&i.forEach(function(s){typeof s.type=="function"&&(s.type="function")}),i=i.concat(this.filtersToArray(this.filterList,t)),i}filtersToArray(e,t){var i=[];return e.forEach(s=>{var n;Array.isArray(s)?i.push(this.filtersToArray(s,t)):(n={field:s.field,type:s.type,value:s.value},t&&typeof n.type=="function"&&(n.type="function"),i.push(n))}),i}getHeaderFilters(){var e=[];for(var t in this.headerFilters)e.push({field:t,type:this.headerFilters[t].type,value:this.headerFilters[t].value});return e}removeFilter(e,t,i){Array.isArray(e)||(e=[{field:e,type:t,value:i}]),e.forEach(s=>{var n=-1;typeof s.field=="object"?n=this.filterList.findIndex(r=>s===r):n=this.filterList.findIndex(r=>s.field===r.field&&s.type===r.type&&s.value===r.value),n>-1?this.filterList.splice(n,1):console.warn("Filter Error - No matching filter type found, ignoring: ",s.type)}),this.trackChanges()}clearFilter(e){this.filterList=[],e&&this.clearHeaderFilter(),this.trackChanges()}clearHeaderFilter(){this.headerFilters={},this.prevHeaderFilterChangeCheck="{}",this.headerFilterColumns.forEach(e=>{typeof e.modules.filter.value<"u"&&delete e.modules.filter.value,e.modules.filter.prevSuccess=void 0,this.reloadHeaderFilter(e)}),this.trackChanges()}search(e,t,i,s){var n=[],r=[];return Array.isArray(t)||(t=[{field:t,type:i,value:s}]),t.forEach(o=>{o=this.findFilter(o),o&&r.push(o)}),this.table.rowManager.rows.forEach(o=>{var a=!0;r.forEach(h=>{this.filterRecurse(h,o.getData())||(a=!1)}),a&&n.push(e==="data"?o.getData("data"):o.getComponent())}),n}filter(e,t){var i=[],s=[];return this.subscribedExternal("dataFiltering")&&this.dispatchExternal("dataFiltering",this.getFilters(!0)),this.table.options.filterMode!=="remote"&&(this.filterList.length||Object.keys(this.headerFilters).length)?e.forEach(n=>{this.filterRow(n)&&i.push(n)}):i=e.slice(0),this.subscribedExternal("dataFiltered")&&(i.forEach(n=>{s.push(n.getComponent())}),this.dispatchExternal("dataFiltered",this.getFilters(!0),s)),i}filterRow(e,t){var i=!0,s=e.getData();this.filterList.forEach(r=>{this.filterRecurse(r,s)||(i=!1)});for(var n in this.headerFilters)this.headerFilters[n].func(s)||(i=!1);return i}filterRecurse(e,t){var i=!1;return Array.isArray(e)?e.forEach(s=>{this.filterRecurse(s,t)&&(i=!0)}):i=e.func(t),i}};b(O,"moduleName","filter"),b(O,"filters",ai);let Ee=O;function li(l,e,t){return this.emptyToSpace(this.sanitizeHTML(l.getValue()))}function hi(l,e,t){return l.getValue()}function di(l,e,t){return l.getElement().style.whiteSpace="pre-wrap",this.emptyToSpace(this.sanitizeHTML(l.getValue()))}function ui(l,e,t){var i=parseFloat(l.getValue()),s="",n,r,o,a,h,d=e.decimal||".",u=e.thousand||",",c=e.negativeSign||"-",f=e.symbol||"",g=!!e.symbolAfter,p=typeof e.precision<"u"?e.precision:2;if(isNaN(i))return this.emptyToSpace(this.sanitizeHTML(l.getValue()));if(i<0&&(i=Math.abs(i),s=c),n=p!==!1?i.toFixed(p):i,n=String(n).split("."),r=n[0],o=n.length>1?d+n[1]:"",e.thousand!==!1)for(a=/(\d+)(\d{3})/;a.test(r);)r=r.replace(a,"$1"+u+"$2");return h=r+o,s===!0?(h="("+h+")",g?h+f:f+h):g?s+h+f:s+f+h}function ci(l,e,t){var i=l.getValue(),s=e.urlPrefix||"",n=e.download,r=i,o=document.createElement("a"),a;function h(d,u){var c=d.shift(),f=u[c];return d.length&&typeof f=="object"?h(d,f):f}if(e.labelField&&(a=l.getData(),r=h(e.labelField.split(this.table.options.nestedFieldSeparator),a)),e.label)switch(typeof e.label){case"string":r=e.label;break;case"function":r=e.label(l);break}if(r){if(e.urlField&&(a=l.getData(),i=x.retrieveNestedData(this.table.options.nestedFieldSeparator,e.urlField,a)),e.url)switch(typeof e.url){case"string":i=e.url;break;case"function":i=e.url(l);break}return o.setAttribute("href",s+i),e.target&&o.setAttribute("target",e.target),e.download&&(typeof n=="function"?n=n(l):n=n===!0?"":n,o.setAttribute("download",n)),o.innerHTML=this.emptyToSpace(this.sanitizeHTML(r)),o}else return" "}function fi(l,e,t){var i=document.createElement("img"),s=l.getValue();switch(e.urlPrefix&&(s=e.urlPrefix+l.getValue()),e.urlSuffix&&(s=s+e.urlSuffix),i.setAttribute("src",s),typeof e.height){case"number":i.style.height=e.height+"px";break;case"string":i.style.height=e.height;break}switch(typeof e.width){case"number":i.style.width=e.width+"px";break;case"string":i.style.width=e.width;break}return i.addEventListener("load",function(){l.getRow().normalizeHeight()}),i}function pi(l,e,t){var i=l.getValue(),s=l.getElement(),n=e.allowEmpty,r=e.allowTruthy,o=Object.keys(e).includes("trueValue"),a=typeof e.tickElement<"u"?e.tickElement:'',h=typeof e.crossElement<"u"?e.crossElement:'';return o&&i===e.trueValue||!o&&(r&&i||i===!0||i==="true"||i==="True"||i===1||i==="1")?(s.setAttribute("aria-checked",!0),a||""):n&&(i==="null"||i===""||i===null||typeof i>"u")?(s.setAttribute("aria-checked","mixed"),""):(s.setAttribute("aria-checked",!1),h||"")}function mi(l,e,t){var i=window.DateTime||luxon.DateTime,s=e.inputFormat||"yyyy-MM-dd HH:mm:ss",n=e.outputFormat||"dd/MM/yyyy HH:mm:ss",r=typeof e.invalidPlaceholder<"u"?e.invalidPlaceholder:"",o=l.getValue();if(typeof i<"u"){var a;return i.isDateTime(o)?a=o:s==="iso"?a=i.fromISO(String(o)):a=i.fromFormat(String(o),s),a.isValid?(e.timezone&&(a=a.setZone(e.timezone)),a.toFormat(n)):r===!0||!o?o:typeof r=="function"?r(o):r}else console.error("Format Error - 'datetime' formatter is dependant on luxon.js")}function gi(l,e,t){var i=window.DateTime||luxon.DateTime,s=e.inputFormat||"yyyy-MM-dd HH:mm:ss",n=typeof e.invalidPlaceholder<"u"?e.invalidPlaceholder:"",r=typeof e.suffix<"u"?e.suffix:!1,o=typeof e.unit<"u"?e.unit:"days",a=typeof e.humanize<"u"?e.humanize:!1,h=typeof e.date<"u"?e.date:i.now(),d=l.getValue();if(typeof i<"u"){var u;return i.isDateTime(d)?u=d:s==="iso"?u=i.fromISO(String(d)):u=i.fromFormat(String(d),s),u.isValid?a?u.diff(h,o).toHuman()+(r?" "+r:""):parseInt(u.diff(h,o)[o])+(r?" "+r:""):n===!0?d:typeof n=="function"?n(d):n}else console.error("Format Error - 'datetimediff' formatter is dependant on luxon.js")}function bi(l,e,t){var i=l.getValue();return typeof e[i]>"u"?(console.warn("Missing display value for "+i),i):e[i]}function vi(l,e,t){var i=l.getValue(),s=l.getElement(),n=e&&e.stars?e.stars:5,r=document.createElement("span"),o=document.createElementNS("http://www.w3.org/2000/svg","svg"),a='',h='';r.style.verticalAlign="middle",o.setAttribute("width","14"),o.setAttribute("height","14"),o.setAttribute("viewBox","0 0 512 512"),o.setAttribute("xml:space","preserve"),o.style.padding="0 1px",i=i&&!isNaN(i)?parseInt(i):0,i=Math.max(0,Math.min(i,n));for(var d=1;d<=n;d++){var u=o.cloneNode(!0);u.innerHTML=d<=i?a:h,r.appendChild(u)}return s.style.whiteSpace="nowrap",s.style.overflow="hidden",s.style.textOverflow="ellipsis",s.setAttribute("aria-label",i),r}function wi(l,e,t){var i=this.sanitizeHTML(l.getValue())||0,s=document.createElement("span"),n=e&&e.max?e.max:100,r=e&&e.min?e.min:0,o=e&&typeof e.color<"u"?e.color:["red","orange","green"],a="#666666",h,d;if(!(isNaN(i)||typeof l.getValue()>"u")){switch(s.classList.add("tabulator-traffic-light"),d=parseFloat(i)<=n?parseFloat(i):n,d=parseFloat(d)>=r?parseFloat(d):r,h=(n-r)/100,d=Math.round((d-r)/h),typeof o){case"string":a=o;break;case"function":a=o(i);break;case"object":if(Array.isArray(o)){var u=100/o.length,c=Math.floor(d/u);c=Math.min(c,o.length-1),c=Math.max(c,0),a=o[c];break}}return s.style.backgroundColor=a,s}}function Ci(l,e={},t){var i=this.sanitizeHTML(l.getValue())||0,s=l.getElement(),n=e.max?e.max:100,r=e.min?e.min:0,o=e.legendAlign?e.legendAlign:"center",a,h,d,u,c;switch(h=parseFloat(i)<=n?parseFloat(i):n,h=parseFloat(h)>=r?parseFloat(h):r,a=(n-r)/100,h=Math.round((h-r)/a),typeof e.color){case"string":d=e.color;break;case"function":d=e.color(i);break;case"object":if(Array.isArray(e.color)){let v=100/e.color.length,m=Math.floor(h/v);m=Math.min(m,e.color.length-1),m=Math.max(m,0),d=e.color[m];break}default:d="#2DC214"}switch(typeof e.legend){case"string":u=e.legend;break;case"function":u=e.legend(i);break;case"boolean":u=i;break;default:u=!1}switch(typeof e.legendColor){case"string":c=e.legendColor;break;case"function":c=e.legendColor(i);break;case"object":if(Array.isArray(e.legendColor)){let v=100/e.legendColor.length,m=Math.floor(h/v);m=Math.min(m,e.legendColor.length-1),m=Math.max(m,0),c=e.legendColor[m]}break;default:c="#000"}s.style.minWidth="30px",s.style.position="relative",s.setAttribute("aria-label",h);var f=document.createElement("div");f.style.display="inline-block",f.style.width=h+"%",f.style.backgroundColor=d,f.style.height="100%",f.setAttribute("data-max",n),f.setAttribute("data-min",r);var g=document.createElement("div");if(g.style.position="relative",g.style.width="100%",g.style.height="100%",u){var p=document.createElement("div");p.style.position="absolute",p.style.top=0,p.style.left=0,p.style.textAlign=o,p.style.width="100%",p.style.color=c,p.innerHTML=u}return t(function(){if(!(l instanceof Ye)){var v=document.createElement("div");v.style.position="absolute",v.style.top="4px",v.style.bottom="4px",v.style.left="4px",v.style.right="4px",s.appendChild(v),s=v}s.appendChild(g),g.appendChild(f),u&&g.appendChild(p)}),""}function Ei(l,e,t){return l.getElement().style.backgroundColor=this.sanitizeHTML(l.getValue()),""}function yi(l,e,t){return''}function Ri(l,e,t){return''}function xi(l,e,t){var i=l.getValue(),s=e.size||15,n=s+"px",r,o,a=e.hasOwnProperty("onValue")?e.onValue:!0,h=e.hasOwnProperty("offValue")?e.offValue:!1,d=e.onTruthy?i:i===a;return r=document.createElement("div"),r.classList.add("tabulator-toggle"),d?(r.classList.add("tabulator-toggle-on"),r.style.flexDirection="row-reverse",e.onColor&&(r.style.background=e.onColor)):e.offColor&&(r.style.background=e.offColor),r.style.width=2.5*s+"px",r.style.borderRadius=n,e.clickable&&r.addEventListener("click",u=>{l.setValue(d?h:a)}),o=document.createElement("div"),o.classList.add("tabulator-toggle-switch"),o.style.height=n,o.style.width=n,o.style.borderRadius=n,r.appendChild(o),r}function Ti(l,e,t){var i=document.createElement("span"),s=l.getRow(),n=l.getTable();return s.watchPosition(r=>{e.relativeToPage&&(r+=n.modules.page.getPageSize()*(n.modules.page.getPage()-1)),i.innerText=r}),i}function ki(l,e,t){return l.getElement().classList.add("tabulator-row-handle"),"
"}var Mi={plaintext:li,html:hi,textarea:di,money:ui,link:ci,image:fi,tickCross:pi,datetime:mi,datetimediff:gi,lookup:bi,star:vi,traffic:wi,progress:Ci,color:Ei,buttonTick:yi,buttonCross:Ri,toggle:xi,rownum:Ti,handle:ki};const H=class H extends w{constructor(e){super(e),this.registerColumnOption("formatter"),this.registerColumnOption("formatterParams"),this.registerColumnOption("formatterPrint"),this.registerColumnOption("formatterPrintParams"),this.registerColumnOption("formatterClipboard"),this.registerColumnOption("formatterClipboardParams"),this.registerColumnOption("formatterHtmlOutput"),this.registerColumnOption("formatterHtmlOutputParams"),this.registerColumnOption("titleFormatter"),this.registerColumnOption("titleFormatterParams")}initialize(){this.subscribe("cell-format",this.formatValue.bind(this)),this.subscribe("cell-rendered",this.cellRendered.bind(this)),this.subscribe("column-layout",this.initializeColumn.bind(this)),this.subscribe("column-format",this.formatHeader.bind(this))}initializeColumn(e){e.modules.format=this.lookupFormatter(e,""),typeof e.definition.formatterPrint<"u"&&(e.modules.format.print=this.lookupFormatter(e,"Print")),typeof e.definition.formatterClipboard<"u"&&(e.modules.format.clipboard=this.lookupFormatter(e,"Clipboard")),typeof e.definition.formatterHtmlOutput<"u"&&(e.modules.format.htmlOutput=this.lookupFormatter(e,"HtmlOutput"))}lookupFormatter(e,t){var i={params:e.definition["formatter"+t+"Params"]||{}},s=e.definition["formatter"+t];switch(typeof s){case"string":H.formatters[s]?i.formatter=H.formatters[s]:(console.warn("Formatter Error - No such formatter found: ",s),i.formatter=H.formatters.plaintext);break;case"function":i.formatter=s;break;default:i.formatter=H.formatters.plaintext;break}return i}cellRendered(e){e.modules.format&&e.modules.format.renderedCallback&&!e.modules.format.rendered&&(e.modules.format.renderedCallback(),e.modules.format.rendered=!0)}formatHeader(e,t,i){var s,n,r,o;return e.definition.titleFormatter?(s=this.getFormatter(e.definition.titleFormatter),r=a=>{e.titleFormatterRendered=a},o={getValue:function(){return t},getElement:function(){return i},getType:function(){return"header"},getColumn:function(){return e.getComponent()},getTable:()=>this.table},n=e.definition.titleFormatterParams||{},n=typeof n=="function"?n():n,s.call(this,o,n,r)):t}formatValue(e){var t=e.getComponent(),i=typeof e.column.modules.format.params=="function"?e.column.modules.format.params(t):e.column.modules.format.params;function s(n){e.modules.format||(e.modules.format={}),e.modules.format.renderedCallback=n,e.modules.format.rendered=!1}return e.column.modules.format.formatter.call(this,t,i,s)}formatExportValue(e,t){var i=e.column.modules.format[t],s;if(i){let n=function(r){e.modules.format||(e.modules.format={}),e.modules.format.renderedCallback=r,e.modules.format.rendered=!1};return s=typeof i.params=="function"?i.params(e.getComponent()):i.params,i.formatter.call(this,e.getComponent(),s,n)}else return this.formatValue(e)}sanitizeHTML(e){if(e){var t={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/","`":"`","=":"="};return String(e).replace(/[&<>"'`=/]/g,function(i){return t[i]})}else return e}emptyToSpace(e){return e===null||typeof e>"u"||e===""?" ":e}getFormatter(e){switch(typeof e){case"string":H.formatters[e]?e=H.formatters[e]:(console.warn("Formatter Error - No such formatter found: ",e),e=H.formatters.plaintext);break;case"function":break;default:e=H.formatters.plaintext;break}return e}};b(H,"moduleName","format"),b(H,"formatters",Mi);let ye=H;class et extends w{constructor(e){super(e),this.leftColumns=[],this.rightColumns=[],this.initializationMode="left",this.active=!1,this.blocked=!0,this.registerColumnOption("frozen")}reset(){this.initializationMode="left",this.leftColumns=[],this.rightColumns=[],this.active=!1}initialize(){this.subscribe("cell-layout",this.layoutCell.bind(this)),this.subscribe("column-init",this.initializeColumn.bind(this)),this.subscribe("column-width",this.layout.bind(this)),this.subscribe("row-layout-after",this.layoutRow.bind(this)),this.subscribe("table-layout",this.layout.bind(this)),this.subscribe("columns-loading",this.reset.bind(this)),this.subscribe("column-add",this.reinitializeColumns.bind(this)),this.subscribe("column-deleted",this.reinitializeColumns.bind(this)),this.subscribe("column-hide",this.reinitializeColumns.bind(this)),this.subscribe("column-show",this.reinitializeColumns.bind(this)),this.subscribe("columns-loaded",this.reinitializeColumns.bind(this)),this.subscribe("table-redraw",this.layout.bind(this)),this.subscribe("layout-refreshing",this.blockLayout.bind(this)),this.subscribe("layout-refreshed",this.unblockLayout.bind(this)),this.subscribe("scrollbar-vertical",this.adjustForScrollbar.bind(this))}blockLayout(){this.blocked=!0}unblockLayout(){this.blocked=!1}layoutCell(e){this.layoutElement(e.element,e.column)}reinitializeColumns(){this.reset(),this.table.columnManager.columnsByIndex.forEach(e=>{this.initializeColumn(e)}),this.layout()}initializeColumn(e){var t={margin:0,edge:!1};e.isGroup||(this.frozenCheck(e)?(t.position=this.initializationMode,this.initializationMode=="left"?this.leftColumns.push(e):this.rightColumns.unshift(e),this.active=!0,e.modules.frozen=t):this.initializationMode="right")}frozenCheck(e){return e.parent.isGroup&&e.definition.frozen&&console.warn("Frozen Column Error - Parent column group must be frozen, not individual columns or sub column groups"),e.parent.isGroup?this.frozenCheck(e.parent):e.definition.frozen}layoutCalcRows(){this.table.modExists("columnCalcs")&&(this.table.modules.columnCalcs.topInitialized&&this.table.modules.columnCalcs.topRow&&this.layoutRow(this.table.modules.columnCalcs.topRow),this.table.modules.columnCalcs.botInitialized&&this.table.modules.columnCalcs.botRow&&this.layoutRow(this.table.modules.columnCalcs.botRow),this.table.modExists("groupRows")&&this.layoutGroupCalcs(this.table.modules.groupRows.getGroups()))}layoutGroupCalcs(e){e.forEach(t=>{t.calcs.top&&this.layoutRow(t.calcs.top),t.calcs.bottom&&this.layoutRow(t.calcs.bottom),t.groupList&&t.groupList.length&&this.layoutGroupCalcs(t.groupList)})}layoutColumnPosition(e){var t=[],i=0,s=0;this.leftColumns.forEach((n,r)=>{if(n.modules.frozen.marginValue=i,n.modules.frozen.margin=n.modules.frozen.marginValue+"px",n.visible&&(i+=n.getWidth()),r==this.leftColumns.length-1?n.modules.frozen.edge=!0:n.modules.frozen.edge=!1,n.parent.isGroup){var o=this.getColGroupParentElement(n);t.includes(o)||(this.layoutElement(o,n),t.push(o)),o.classList.toggle("tabulator-frozen-left",n.modules.frozen.edge&&n.modules.frozen.position==="left"),o.classList.toggle("tabulator-frozen-right",n.modules.frozen.edge&&n.modules.frozen.position==="right")}else this.layoutElement(n.getElement(),n);e&&n.cells.forEach(a=>{this.layoutElement(a.getElement(!0),n)})}),this.rightColumns.forEach((n,r)=>{n.modules.frozen.marginValue=s,n.modules.frozen.margin=n.modules.frozen.marginValue+"px",n.visible&&(s+=n.getWidth()),r==this.rightColumns.length-1?n.modules.frozen.edge=!0:n.modules.frozen.edge=!1,n.parent.isGroup?this.layoutElement(this.getColGroupParentElement(n),n):this.layoutElement(n.getElement(),n),e&&n.cells.forEach(o=>{this.layoutElement(o.getElement(!0),n)})})}getColGroupParentElement(e){return e.parent.isGroup?this.getColGroupParentElement(e.parent):e.getElement()}layout(){this.active&&!this.blocked&&(this.layoutColumnPosition(),this.reinitializeRows(),this.layoutCalcRows())}reinitializeRows(){var e=this.table.rowManager.getVisibleRows(!0),t=this.table.rowManager.getRows().filter(i=>!e.includes(i));t.forEach(i=>{i.deinitialize()}),e.forEach(i=>{i.type==="row"&&this.layoutRow(i)})}layoutRow(e){this.table.options.layout==="fitDataFill"&&this.rightColumns.length&&(this.table.rowManager.getTableElement().style.minWidth="calc(100% - "+this.rightMargin+")"),this.leftColumns.forEach(t=>{var i=e.getCell(t);i&&this.layoutElement(i.getElement(!0),t)}),this.rightColumns.forEach(t=>{var i=e.getCell(t);i&&this.layoutElement(i.getElement(!0),t)})}layoutElement(e,t){var i;t.modules.frozen&&e&&(e.style.position="sticky",this.table.rtl?i=t.modules.frozen.position==="left"?"right":"left":i=t.modules.frozen.position,e.style[i]=t.modules.frozen.margin,e.classList.add("tabulator-frozen"),e.classList.toggle("tabulator-frozen-left",t.modules.frozen.edge&&t.modules.frozen.position==="left"),e.classList.toggle("tabulator-frozen-right",t.modules.frozen.edge&&t.modules.frozen.position==="right"))}adjustForScrollbar(e){this.rightColumns.length&&(this.table.columnManager.getContentsElement().style.width="calc(100% - "+e+"px)")}getFrozenColumns(){return this.leftColumns.concat(this.rightColumns)}_calcSpace(e,t){var i=0;for(let s=0;s{this.initializeRow(e)})}initializeRow(e){var t=this.table.options.frozenRows,i=typeof t;i==="number"?e.getPosition()&&e.getPosition()+this.rows.length<=t&&this.freezeRow(e):i==="function"?t.call(this.table,e.getComponent())&&this.freezeRow(e):Array.isArray(t)&&t.includes(e.data[this.options("frozenRowsField")])&&this.freezeRow(e)}isRowFrozen(e){var t=this.rows.indexOf(e);return t>-1}isFrozen(){return!!this.rows.length}visibleRows(e,t){return this.rows.forEach(i=>{t.push(i)}),t}getRows(e){var t=e.slice(0);return this.rows.forEach(function(i){var s=t.indexOf(i);s>-1&&t.splice(s,1)}),t}freezeRow(e){e.modules.frozen?console.warn("Freeze Error - Row is already frozen"):(e.modules.frozen=!0,this.topElement.appendChild(e.getElement()),e.initialize(),e.normalizeHeight(),this.rows.push(e),this.refreshData(!1,"display"),this.table.rowManager.adjustTableSize(),this.styleRows())}unfreezeRow(e){e.modules.frozen?(e.modules.frozen=!1,this.detachRow(e),this.table.rowManager.adjustTableSize(),this.refreshData(!1,"display"),this.rows.length&&this.styleRows()):console.warn("Freeze Error - Row is already unfrozen")}detachRow(e){var t=this.rows.indexOf(e);if(t>-1){var i=e.getElement();i.parentNode&&i.parentNode.removeChild(i),this.rows.splice(t,1)}}styleRows(e){this.rows.forEach((t,i)=>{this.table.rowManager.styleRow(t,i)})}}b(tt,"moduleName","frozenRows");class Li{constructor(e){return this._group=e,this.type="GroupComponent",new Proxy(this,{get:function(t,i,s){return typeof t[i]<"u"?t[i]:t._group.groupManager.table.componentFunctionBinder.handle("group",t._group,i)}})}getKey(){return this._group.key}getField(){return this._group.field}getElement(){return this._group.element}getRows(){return this._group.getRows(!0)}getSubGroups(){return this._group.getSubGroups(!0)}getParentGroup(){return this._group.parent?this._group.parent.getComponent():!1}isVisible(){return this._group.visible}show(){this._group.show()}hide(){this._group.hide()}toggle(){this._group.toggleVisibility()}scrollTo(e,t){return this._group.groupManager.table.rowManager.scrollToRow(this._group,e,t)}_getSelf(){return this._group}getTable(){return this._group.groupManager.table}}class J{constructor(e,t,i,s,n,r,o){this.groupManager=e,this.parent=t,this.key=s,this.level=i,this.field=n,this.hasSubGroups=i{t.modules&&delete t.modules.group})),this.element=!1,this.arrowElement=!1,this.elementContents=!1}createElements(){var e=document.createElement("div");e.classList.add("tabulator-arrow"),this.element=document.createElement("div"),this.element.classList.add("tabulator-row"),this.element.classList.add("tabulator-group"),this.element.classList.add("tabulator-group-level-"+this.level),this.element.setAttribute("role","rowgroup"),this.arrowElement=document.createElement("div"),this.arrowElement.classList.add("tabulator-group-toggle"),this.arrowElement.appendChild(e),this.groupManager.table.options.movableRows!==!1&&this.groupManager.table.modExists("moveRow")&&this.groupManager.table.modules.moveRow.initializeGroupHeader(this)}createValueGroups(){var e=this.level+1;this.groupManager.allowedValues&&this.groupManager.allowedValues[e]&&this.groupManager.allowedValues[e].forEach(t=>{this._createGroup(t,e)})}addBindings(){var e;this.groupManager.table.options.groupToggleElement&&(e=this.groupManager.table.options.groupToggleElement=="arrow"?this.arrowElement:this.element,e.addEventListener("click",t=>{this.groupManager.table.options.groupToggleElement==="arrow"&&(t.stopPropagation(),t.stopImmediatePropagation()),setTimeout(()=>{this.toggleVisibility()})}))}_createGroup(e,t){var i=t+"_"+e,s=new J(this.groupManager,this,t,e,this.groupManager.groupIDLookups[t].field,this.groupManager.headerGenerator[t]||this.groupManager.headerGenerator[0],this.old?this.old.groups[i]:!1);this.groups[i]=s,this.groupList.push(s)}_addRowToGroup(e){var t=this.level+1;if(this.hasSubGroups){var i=this.groupManager.groupIDLookups[t].func(e.getData()),s=t+"_"+i;this.groupManager.allowedValues&&this.groupManager.allowedValues[t]?this.groups[s]&&this.groups[s].addRow(e):(this.groups[s]||this._createGroup(i,t),this.groups[s].addRow(e))}}_addRow(e){this.rows.push(e),e.modules.group=this}insertRow(e,t,i){var s=this.conformRowData({});e.updateData(s);var n=this.rows.indexOf(t);n>-1?i?this.rows.splice(n+1,0,e):this.rows.splice(n,0,e):i?this.rows.push(e):this.rows.unshift(e),e.modules.group=this,this.groupManager.table.modExists("columnCalcs")&&this.groupManager.table.options.columnCalcs!="table"&&this.groupManager.table.modules.columnCalcs.recalcGroup(this),this.groupManager.updateGroupRows(!0)}scrollHeader(e){this.arrowElement&&(this.arrowElement.style.marginLeft=e,this.groupList.forEach(function(t){t.scrollHeader(e)}))}getRowIndex(e){}conformRowData(e){return this.field?e[this.field]=this.key:console.warn("Data Conforming Error - Cannot conform row data to match new group as groupBy is a function"),this.parent&&(e=this.parent.conformRowData(e)),e}removeRow(e){var t=this.rows.indexOf(e),i=e.getElement();t>-1&&this.rows.splice(t,1),!this.groupManager.table.options.groupValues&&!this.rows.length?(this.parent?this.parent.removeGroup(this):this.groupManager.removeGroup(this),this.groupManager.updateGroupRows(!0)):(i.parentNode&&i.parentNode.removeChild(i),this.groupManager.blockRedraw||(this.generateGroupHeaderContents(),this.groupManager.table.modExists("columnCalcs")&&this.groupManager.table.options.columnCalcs!="table"&&this.groupManager.table.modules.columnCalcs.recalcGroup(this)))}removeGroup(e){var t=e.level+"_"+e.key,i;this.groups[t]&&(delete this.groups[t],i=this.groupList.indexOf(e),i>-1&&this.groupList.splice(i,1),this.groupList.length||(this.parent?this.parent.removeGroup(this):this.groupManager.removeGroup(this)))}getHeadersAndRows(){var e=[];return e.push(this),this._visSet(),this.calcs.top&&(this.calcs.top.detachElement(),this.calcs.top.deleteCells()),this.calcs.bottom&&(this.calcs.bottom.detachElement(),this.calcs.bottom.deleteCells()),this.visible?this.groupList.length?this.groupList.forEach(function(t){e=e.concat(t.getHeadersAndRows())}):(this.groupManager.table.options.columnCalcs!="table"&&this.groupManager.table.modExists("columnCalcs")&&this.groupManager.table.modules.columnCalcs.hasTopCalcs()&&(this.calcs.top=this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows),e.push(this.calcs.top)),e=e.concat(this.rows),this.groupManager.table.options.columnCalcs!="table"&&this.groupManager.table.modExists("columnCalcs")&&this.groupManager.table.modules.columnCalcs.hasBottomCalcs()&&(this.calcs.bottom=this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows),e.push(this.calcs.bottom))):!this.groupList.length&&this.groupManager.table.options.columnCalcs!="table"&&this.groupManager.table.modExists("columnCalcs")&&(this.groupManager.table.modules.columnCalcs.hasTopCalcs()&&this.groupManager.table.options.groupClosedShowCalcs&&(this.calcs.top=this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows),e.push(this.calcs.top)),this.groupManager.table.modules.columnCalcs.hasBottomCalcs()&&this.groupManager.table.options.groupClosedShowCalcs&&(this.calcs.bottom=this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows),e.push(this.calcs.bottom))),e}getData(e,t){var i=[];return this._visSet(),(!e||e&&this.visible)&&this.rows.forEach(s=>{i.push(s.getData(t||"data"))}),i}getRowCount(){var e=0;return this.groupList.length?this.groupList.forEach(t=>{e+=t.getRowCount()}):e=this.rows.length,e}toggleVisibility(){this.visible?this.hide():this.show()}hide(){this.visible=!1,this.groupManager.table.rowManager.getRenderMode()=="basic"&&!this.groupManager.table.options.pagination?(this.element.classList.remove("tabulator-group-visible"),this.groupList.length?this.groupList.forEach(e=>{var t=e.getHeadersAndRows();t.forEach(i=>{i.detachElement()})}):this.rows.forEach(e=>{var t=e.getElement();t.parentNode.removeChild(t)}),this.groupManager.updateGroupRows(!0)):this.groupManager.updateGroupRows(!0),this.groupManager.table.externalEvents.dispatch("groupVisibilityChanged",this.getComponent(),!1)}show(){if(this.visible=!0,this.groupManager.table.rowManager.getRenderMode()=="basic"&&!this.groupManager.table.options.pagination){this.element.classList.add("tabulator-group-visible");var e=this.generateElement();this.groupList.length?this.groupList.forEach(t=>{var i=t.getHeadersAndRows();i.forEach(s=>{var n=s.getElement();e.parentNode.insertBefore(n,e.nextSibling),s.initialize(),e=n})}):this.rows.forEach(t=>{var i=t.getElement();e.parentNode.insertBefore(i,e.nextSibling),t.initialize(),e=i}),this.groupManager.updateGroupRows(!0)}else this.groupManager.updateGroupRows(!0);this.groupManager.table.externalEvents.dispatch("groupVisibilityChanged",this.getComponent(),!0)}_visSet(){var e=[];typeof this.visible=="function"&&(this.rows.forEach(function(t){e.push(t.getData())}),this.visible=this.visible(this.key,this.getRowCount(),e,this.getComponent()))}getRowGroup(e){var t=!1;return this.groupList.length?this.groupList.forEach(function(i){var s=i.getRowGroup(e);s&&(t=s)}):this.rows.find(function(i){return i===e})&&(t=this),t}getSubGroups(e){var t=[];return this.groupList.forEach(function(i){t.push(e?i.getComponent():i)}),t}getRows(e,t){var i=[];return t&&this.groupList.length?this.groupList.forEach(s=>{i=i.concat(s.getRows(e,t))}):this.rows.forEach(function(s){i.push(e?s.getComponent():s)}),i}generateGroupHeaderContents(){var e=[],t=this.getRows(!1,!0);for(t.forEach(function(i){e.push(i.getData())}),this.elementContents=this.generator(this.key,this.getRowCount(),e,this.getComponent());this.element.firstChild;)this.element.removeChild(this.element.firstChild);typeof this.elementContents=="string"?this.element.innerHTML=this.elementContents:this.element.appendChild(this.elementContents),this.element.insertBefore(this.arrowElement,this.element.firstChild)}getPath(e=[]){return e.unshift(this.key),this.parent&&this.parent.getPath(e),e}getElement(){return this.elementContents?this.element:this.generateElement()}generateElement(){this.addBindings=!1,this._visSet(),this.visible?this.element.classList.add("tabulator-group-visible"):this.element.classList.remove("tabulator-group-visible");for(var e=0;ei.length&&console.warn("Error creating group headers, groupHeader array is shorter than groupBy array"),this.headerGenerator=[function(){return""}],this.startOpen=[function(){return!1}],this.langBind("groups|item",(n,r)=>{this.headerGenerator[0]=(o,a,h)=>(typeof o>"u"?"":o)+"("+a+" "+(a===1?n:r.groups.items)+")"}),this.groupIDLookups=[],e)this.table.modExists("columnCalcs")&&this.table.options.columnCalcs!="table"&&this.table.options.columnCalcs!="both"&&this.table.modules.columnCalcs.removeCalcs();else if(this.table.modExists("columnCalcs")&&this.table.options.columnCalcs!="group"){var s=this.table.columnManager.getRealColumns();s.forEach(n=>{n.definition.topCalc&&this.table.modules.columnCalcs.initializeTopRow(),n.definition.bottomCalc&&this.table.modules.columnCalcs.initializeBottomRow()})}Array.isArray(e)||(e=[e]),e.forEach((n,r)=>{var o,a;typeof n=="function"?o=n:(a=this.table.columnManager.getColumnByField(n),a?o=function(h){return a.getFieldValue(h)}:o=function(h){return h[n]}),this.groupIDLookups.push({field:typeof n=="function"?!1:n,func:o,values:this.allowedValues?this.allowedValues[r]:!1})}),t&&(Array.isArray(t)||(t=[t]),t.forEach(n=>{}),this.startOpen=t),i&&(this.headerGenerator=Array.isArray(i)?i:[i])}else this.groupList=[],this.groups={}}rowSample(e,t){if(this.table.options.groupBy){var i=this.getGroups(!1)[0];t.push(i.getRows(!1)[0])}return t}virtualRenderFill(){var e=this.table.rowManager.tableElement,t=this.table.rowManager.getVisibleRows();if(this.table.options.groupBy)t=t.filter(i=>i.type!=="group"),e.style.minWidth=t.length?"":this.table.columnManager.getWidth()+"px";else return t}rowAddingIndex(e,t,i){if(this.table.options.groupBy){this.assignRowToGroup(e);var s=e.modules.group.rows;return s.length>1&&(!t||t&&s.indexOf(t)==-1?i?s[0]!==e&&(t=s[0],this.table.rowManager.moveRowInArray(e.modules.group.rows,e,t,!i)):s[s.length-1]!==e&&(t=s[s.length-1],this.table.rowManager.moveRowInArray(e.modules.group.rows,e,t,!i)):this.table.rowManager.moveRowInArray(e.modules.group.rows,e,t,!i)),t}}trackChanges(){this.dispatch("group-changed")}setGroupBy(e){this.table.options.groupBy=e,this.initialized||this.initialize(),this.configureGroupSetup(),!e&&this.table.modExists("columnCalcs")&&this.table.options.columnCalcs===!0&&this.table.modules.columnCalcs.reinitializeCalcs(),this.refreshData(),this.trackChanges()}setGroupValues(e){this.table.options.groupValues=e,this.configureGroupSetup(),this.refreshData(),this.trackChanges()}setGroupStartOpen(e){this.table.options.groupStartOpen=e,this.configureGroupSetup(),this.table.options.groupBy?(this.refreshData(),this.trackChanges()):console.warn("Grouping Update - cant refresh view, no groups have been set")}setGroupHeader(e){this.table.options.groupHeader=e,this.configureGroupSetup(),this.table.options.groupBy?(this.refreshData(),this.trackChanges()):console.warn("Grouping Update - cant refresh view, no groups have been set")}userGetGroups(e){return this.getGroups(!0)}userGetGroupedData(){return this.table.options.groupBy?this.getGroupedData():this.getData()}rowGetGroup(e){return e.modules.group?e.modules.group.getComponent():!1}rowMoving(e,t,i){if(this.table.options.groupBy){!i&&t instanceof J&&(t=this.table.rowManager.prevDisplayRow(e)||t);var s=t instanceof J?t:t.modules.group,n=e instanceof J?e:e.modules.group;s===n?this.table.rowManager.moveRowInArray(s.rows,e,t,i):(n&&n.removeRow(e),s.insertRow(e,t,i))}}rowDeleting(e){this.table.options.groupBy&&e.modules.group&&e.modules.group.removeRow(e)}rowsUpdated(e){this.table.options.groupBy&&this.updateGroupRows(!0)}cellUpdated(e){this.table.options.groupBy&&this.reassignRowToGroup(e.row)}getRows(e){return this.table.options.groupBy&&this.groupIDLookups.length?(this.dispatchExternal("dataGrouping"),this.generateGroups(e),this.subscribedExternal("dataGrouped")&&this.dispatchExternal("dataGrouped",this.getGroups(!0)),this.updateGroupRows()):e.slice(0)}getGroups(e){var t=[];return this.groupList.forEach(function(i){t.push(e?i.getComponent():i)}),t}getChildGroups(e){var t=[];return e||(e=this),e.groupList.forEach(i=>{i.groupList.length?t=t.concat(this.getChildGroups(i)):t.push(i)}),t}wipe(){this.table.options.groupBy&&(this.groupList.forEach(function(e){e.wipe()}),this.groupList=[],this.groups={})}pullGroupListData(e){var t=[];return e.forEach(i=>{var s={};s.level=0,s.rowCount=0,s.headerContent="";var n=[];i.hasSubGroups?(n=this.pullGroupListData(i.groupList),s.level=i.level,s.rowCount=n.length-i.groupList.length,s.headerContent=i.generator(i.key,s.rowCount,i.rows,i),t.push(s),t=t.concat(n)):(s.level=i.level,s.headerContent=i.generator(i.key,i.rows.length,i.rows,i),s.rowCount=i.getRows().length,t.push(s),i.getRows().forEach(r=>{t.push(r.getData("data"))}))}),t}getGroupedData(){return this.pullGroupListData(this.groupList)}getRowGroup(e){var t=!1;return this.options("dataTree")&&(e=this.table.modules.dataTree.getTreeParentRoot(e)),this.groupList.forEach(i=>{var s=i.getRowGroup(e);s&&(t=s)}),t}countGroups(){return this.groupList.length}generateGroups(e){var t=this.groups;this.groups={},this.groupList=[],this.allowedValues&&this.allowedValues[0]?(this.allowedValues[0].forEach(i=>{this.createGroup(i,0,t)}),e.forEach(i=>{this.assignRowToExistingGroup(i,t)})):e.forEach(i=>{this.assignRowToGroup(i,t)}),Object.values(t).forEach(i=>{i.wipe(!0)})}createGroup(e,t,i){var s=t+"_"+e,n;i=i||[],n=new J(this,!1,t,e,this.groupIDLookups[0].field,this.headerGenerator[0],i[s]),this.groups[s]=n,this.groupList.push(n)}assignRowToExistingGroup(e,t){var i=this.groupIDLookups[0].func(e.getData()),s="0_"+i;this.groups[s]&&this.groups[s].addRow(e)}assignRowToGroup(e,t){var i=this.groupIDLookups[0].func(e.getData()),s=!this.groups["0_"+i];return s&&this.createGroup(i,0,t),this.groups["0_"+i].addRow(e),!s}reassignRowToGroup(e){if(e.type==="row"){var t=e.modules.group,i=t.getPath(),s=this.getExpectedPath(e),n;n=i.length==s.length&&i.every((r,o)=>r===s[o]),n||(t.removeRow(e),this.assignRowToGroup(e,this.groups),this.refreshData(!0))}}getExpectedPath(e){var t=[],i=e.getData();return this.groupIDLookups.forEach(s=>{t.push(s.func(i))}),t}updateGroupRows(e){var t=[];return this.blockRedraw||(this.groupList.forEach(i=>{t=t.concat(i.getHeadersAndRows())}),e&&this.refreshData(!0)),t}scrollHeaders(e){this.table.options.groupBy&&(this.table.options.renderHorizontal==="virtual"&&(e-=this.table.columnManager.renderer.vDomPadLeft),e=e+"px",this.groupList.forEach(t=>{t.scrollHeader(e)}))}removeGroup(e){var t=e.level+"_"+e.key,i;this.groups[t]&&(delete this.groups[t],i=this.groupList.indexOf(e),i>-1&&this.groupList.splice(i,1))}checkBasicModeGroupHeaderWidth(){var e=this.table.rowManager.tableElement,t=!0;this.table.rowManager.getDisplayRows().forEach((i,s)=>{this.table.rowManager.styleRow(i,s),e.appendChild(i.getElement()),i.initialize(!0),i.type!=="group"&&(t=!1)}),t?e.style.minWidth=this.table.columnManager.getWidth()+"px":e.style.minWidth=""}}b(it,"moduleName","groupRows");var Si={cellEdit:function(l){l.component.setValueProcessData(l.data.oldValue),l.component.cellRendered()},rowAdd:function(l){l.component.deleteActual(),this.table.rowManager.checkPlaceholder()},rowDelete:function(l){var e=this.table.rowManager.addRowActual(l.data.data,l.data.pos,l.data.index);this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.updateGroupRows(!0),this._rebindRow(l.component,e),this.table.rowManager.checkPlaceholder()},rowMove:function(l){var e=l.data.posFrom-l.data.posTo>0;this.table.rowManager.moveRowActual(l.component,this.table.rowManager.getRowFromPosition(l.data.posFrom),e),this.table.rowManager.regenerateRowPositions(),this.table.rowManager.reRenderInPosition()}},Di={cellEdit:function(l){l.component.setValueProcessData(l.data.newValue),l.component.cellRendered()},rowAdd:function(l){var e=this.table.rowManager.addRowActual(l.data.data,l.data.pos,l.data.index);this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.updateGroupRows(!0),this._rebindRow(l.component,e),this.table.rowManager.checkPlaceholder()},rowDelete:function(l){l.component.deleteActual(),this.table.rowManager.checkPlaceholder()},rowMove:function(l){this.table.rowManager.moveRowActual(l.component,this.table.rowManager.getRowFromPosition(l.data.posTo),l.data.after),this.table.rowManager.regenerateRowPositions(),this.table.rowManager.reRenderInPosition()}},zi={undo:["ctrl + 90","meta + 90"],redo:["ctrl + 89","meta + 89"]},Hi={undo:function(l){var e=!1;this.table.options.history&&this.table.modExists("history")&&this.table.modExists("edit")&&(e=this.table.modules.edit.currentCell,e||(l.preventDefault(),this.table.modules.history.undo()))},redo:function(l){var e=!1;this.table.options.history&&this.table.modExists("history")&&this.table.modExists("edit")&&(e=this.table.modules.edit.currentCell,e||(l.preventDefault(),this.table.modules.history.redo()))}},Fi={keybindings:{bindings:zi,actions:Hi}};const I=class I extends w{constructor(e){super(e),this.history=[],this.index=-1,this.registerTableOption("history",!1)}initialize(){this.table.options.history&&(this.subscribe("cell-value-updated",this.cellUpdated.bind(this)),this.subscribe("cell-delete",this.clearComponentHistory.bind(this)),this.subscribe("row-delete",this.rowDeleted.bind(this)),this.subscribe("rows-wipe",this.clear.bind(this)),this.subscribe("row-added",this.rowAdded.bind(this)),this.subscribe("row-move",this.rowMoved.bind(this))),this.registerTableFunction("undo",this.undo.bind(this)),this.registerTableFunction("redo",this.redo.bind(this)),this.registerTableFunction("getHistoryUndoSize",this.getHistoryUndoSize.bind(this)),this.registerTableFunction("getHistoryRedoSize",this.getHistoryRedoSize.bind(this)),this.registerTableFunction("clearHistory",this.clear.bind(this))}rowMoved(e,t,i){this.action("rowMove",e,{posFrom:e.getPosition(),posTo:t.getPosition(),to:t,after:i})}rowAdded(e,t,i,s){this.action("rowAdd",e,{data:t,pos:i,index:s})}rowDeleted(e){var t,i;this.table.options.groupBy?(i=e.getComponent().getGroup()._getSelf().rows,t=i.indexOf(e),t&&(t=i[t-1])):(t=e.table.rowManager.getRowIndex(e),t&&(t=e.table.rowManager.rows[t-1])),this.action("rowDelete",e,{data:e.getData(),pos:!t,index:t})}cellUpdated(e){this.action("cellEdit",e,{oldValue:e.oldValue,newValue:e.value})}clear(){this.history=[],this.index=-1}action(e,t,i){this.history=this.history.slice(0,this.index+1),this.history.push({type:e,component:t,data:i}),this.index++}getHistoryUndoSize(){return this.index+1}getHistoryRedoSize(){return this.history.length-(this.index+1)}clearComponentHistory(e){var t=this.history.findIndex(function(i){return i.component===e});t>-1&&(this.history.splice(t,1),t<=this.index&&this.index--,this.clearComponentHistory(e))}undo(){if(this.index>-1){let e=this.history[this.index];return I.undoers[e.type].call(this,e),this.index--,this.dispatchExternal("historyUndo",e.type,e.component.getComponent(),e.data),!0}else return console.warn(this.options("history")?"History Undo Error - No more history to undo":"History module not enabled"),!1}redo(){if(this.history.length-1>this.index){this.index++;let e=this.history[this.index];return I.redoers[e.type].call(this,e),this.dispatchExternal("historyRedo",e.type,e.component.getComponent(),e.data),!0}else return console.warn(this.options("history")?"History Redo Error - No more history to redo":"History module not enabled"),!1}_rebindRow(e,t){this.history.forEach(function(i){if(i.component instanceof S)i.component===e&&(i.component=t);else if(i.component instanceof ne&&i.component.row===e){var s=i.component.column.getField();s&&(i.component=t.getCell(s))}})}};b(I,"moduleName","history"),b(I,"moduleExtensions",Fi),b(I,"undoers",Si),b(I,"redoers",Di);let Re=I;class st extends w{constructor(e){super(e),this.fieldIndex=[],this.hasIndex=!1}initialize(){this.tableElementCheck()}tableElementCheck(){this.table.originalElement&&this.table.originalElement.tagName==="TABLE"&&(this.table.originalElement.childNodes.length?this.parseTable():console.warn("Unable to parse data from empty table tag, Tabulator should be initialized on a div tag unless importing data from a table element."))}parseTable(){var e=this.table.originalElement,t=this.table.options,i=e.getElementsByTagName("th"),s=e.getElementsByTagName("tbody")[0],n=[];this.hasIndex=!1,this.dispatchExternal("htmlImporting"),s=s?s.getElementsByTagName("tr"):[],this._extractOptions(e,t),i.length?this._extractHeaders(i,s):this._generateBlankHeaders(i,s);for(var r=0;r{r[d.toLowerCase()]=d});for(var o in s){var a=s[o],h;a&&typeof a=="object"&&a.name&&a.name.indexOf("tabulator-")===0&&(h=a.name.replace("tabulator-",""),typeof r[h]<"u"&&(t[r[h]]=this._attribValue(a.value)))}}_attribValue(e){return e==="true"?!0:e==="false"?!1:e}_findCol(e){var t=this.table.options.columns.find(i=>i.title===e);return t||!1}_extractHeaders(e,t){for(var i=0;i(console.error("Import Error:",r||"Unable to import data"),Promise.reject(r)))}lookupImporter(e){var t;return e||(e=this.table.options.importFormat),typeof e=="string"?t=ee.importers[e]:t=e,t||console.error("Import Error - Importer not found:",e),t}importFromFile(e,t,i){var s=this.lookupImporter(e);if(s)return this.pickFile(t,i).then(this.importData.bind(this,s)).then(this.structureData.bind(this)).then(this.setData.bind(this)).catch(n=>(this.dispatch("import-error",n),this.dispatchExternal("importError",n),console.error("Import Error:",n||"Unable to import file"),Promise.reject(n)))}pickFile(e,t){return new Promise((i,s)=>{var n=document.createElement("input");n.type="file",n.accept=e,n.addEventListener("change",r=>{var o=n.files[0],a=new FileReader;switch(this.dispatch("import-importing",n.files),this.dispatchExternal("importImporting",n.files),t||this.table.options.importReader){case"buffer":a.readAsArrayBuffer(o);break;case"binary":a.readAsBinaryString(o);break;case"url":a.readAsDataURL(o);break;case"text":default:a.readAsText(o)}a.onload=h=>{i(a.result)},a.onerror=h=>{console.warn("File Load Error - Unable to read file"),s()}}),this.dispatch("import-choose"),this.dispatchExternal("importChoose"),n.click()})}importData(e,t){var i=e.call(this.table,t);return i instanceof Promise?i:i?Promise.resolve(i):Promise.reject()}structureData(e){var t=[];return Array.isArray(e)&&e.length&&Array.isArray(e[0])?(this.table.options.autoColumns?t=this.structureArrayToObject(e):t=this.structureArrayToColumns(e),t):e}structureArrayToObject(e){var t=e.shift(),i=e.map(s=>{var n={};return t.forEach((r,o)=>{n[r]=s[o]}),n});return i}structureArrayToColumns(e){var t=[],i=this.table.getColumns();return i[0]&&e[0][0]&&i[0].getDefinition().title===e[0][0]&&e.shift(),e.forEach(s=>{var n={};s.forEach((r,o)=>{var a=i[o];a&&(n[a.getField()]=r)}),t.push(n)}),t}setData(e){return this.dispatch("import-imported",e),this.dispatchExternal("importImported",e),this.table.setData(e)}};b(ee,"moduleName","import"),b(ee,"importers",Bi);let xe=ee;class nt extends w{constructor(e){super(e),this.eventMap={rowClick:"row-click",rowDblClick:"row-dblclick",rowContext:"row-contextmenu",rowMouseEnter:"row-mouseenter",rowMouseLeave:"row-mouseleave",rowMouseOver:"row-mouseover",rowMouseOut:"row-mouseout",rowMouseMove:"row-mousemove",rowMouseDown:"row-mousedown",rowMouseUp:"row-mouseup",rowTap:"row",rowDblTap:"row",rowTapHold:"row",cellClick:"cell-click",cellDblClick:"cell-dblclick",cellContext:"cell-contextmenu",cellMouseEnter:"cell-mouseenter",cellMouseLeave:"cell-mouseleave",cellMouseOver:"cell-mouseover",cellMouseOut:"cell-mouseout",cellMouseMove:"cell-mousemove",cellMouseDown:"cell-mousedown",cellMouseUp:"cell-mouseup",cellTap:"cell",cellDblTap:"cell",cellTapHold:"cell",headerClick:"column-click",headerDblClick:"column-dblclick",headerContext:"column-contextmenu",headerMouseEnter:"column-mouseenter",headerMouseLeave:"column-mouseleave",headerMouseOver:"column-mouseover",headerMouseOut:"column-mouseout",headerMouseMove:"column-mousemove",headerMouseDown:"column-mousedown",headerMouseUp:"column-mouseup",headerTap:"column",headerDblTap:"column",headerTapHold:"column",groupClick:"group-click",groupDblClick:"group-dblclick",groupContext:"group-contextmenu",groupMouseEnter:"group-mouseenter",groupMouseLeave:"group-mouseleave",groupMouseOver:"group-mouseover",groupMouseOut:"group-mouseout",groupMouseMove:"group-mousemove",groupMouseDown:"group-mousedown",groupMouseUp:"group-mouseup",groupTap:"group",groupDblTap:"group",groupTapHold:"group"},this.subscribers={},this.touchSubscribers={},this.columnSubscribers={},this.touchWatchers={row:{tap:null,tapDbl:null,tapHold:null},cell:{tap:null,tapDbl:null,tapHold:null},column:{tap:null,tapDbl:null,tapHold:null},group:{tap:null,tapDbl:null,tapHold:null}},this.registerColumnOption("headerClick"),this.registerColumnOption("headerDblClick"),this.registerColumnOption("headerContext"),this.registerColumnOption("headerMouseEnter"),this.registerColumnOption("headerMouseLeave"),this.registerColumnOption("headerMouseOver"),this.registerColumnOption("headerMouseOut"),this.registerColumnOption("headerMouseMove"),this.registerColumnOption("headerMouseDown"),this.registerColumnOption("headerMouseUp"),this.registerColumnOption("headerTap"),this.registerColumnOption("headerDblTap"),this.registerColumnOption("headerTapHold"),this.registerColumnOption("cellClick"),this.registerColumnOption("cellDblClick"),this.registerColumnOption("cellContext"),this.registerColumnOption("cellMouseEnter"),this.registerColumnOption("cellMouseLeave"),this.registerColumnOption("cellMouseOver"),this.registerColumnOption("cellMouseOut"),this.registerColumnOption("cellMouseMove"),this.registerColumnOption("cellMouseDown"),this.registerColumnOption("cellMouseUp"),this.registerColumnOption("cellTap"),this.registerColumnOption("cellDblTap"),this.registerColumnOption("cellTapHold")}initialize(){this.initializeExternalEvents(),this.subscribe("column-init",this.initializeColumn.bind(this)),this.subscribe("cell-dblclick",this.cellContentsSelectionFixer.bind(this)),this.subscribe("scroll-horizontal",this.clearTouchWatchers.bind(this)),this.subscribe("scroll-vertical",this.clearTouchWatchers.bind(this))}clearTouchWatchers(){var e=Object.values(this.touchWatchers);e.forEach(t=>{for(let i in t)t[i]=null})}cellContentsSelectionFixer(e,t){var i;if(!(this.table.modExists("edit")&&this.table.modules.edit.currentCell===t)){e.preventDefault();try{document.selection?(i=document.body.createTextRange(),i.moveToElementText(t.getElement()),i.select()):window.getSelection&&(i=document.createRange(),i.selectNode(t.getElement()),window.getSelection().removeAllRanges(),window.getSelection().addRange(i))}catch{}}}initializeExternalEvents(){for(let e in this.eventMap)this.subscriptionChangeExternal(e,this.subscriptionChanged.bind(this,e))}subscriptionChanged(e,t){t?this.subscribers[e]||(this.eventMap[e].includes("-")?(this.subscribers[e]=this.handle.bind(this,e),this.subscribe(this.eventMap[e],this.subscribers[e])):this.subscribeTouchEvents(e)):this.eventMap[e].includes("-")?this.subscribers[e]&&!this.columnSubscribers[e]&&!this.subscribedExternal(e)&&(this.unsubscribe(this.eventMap[e],this.subscribers[e]),delete this.subscribers[e]):this.unsubscribeTouchEvents(e)}subscribeTouchEvents(e){var t=this.eventMap[e];this.touchSubscribers[t+"-touchstart"]||(this.touchSubscribers[t+"-touchstart"]=this.handleTouch.bind(this,t,"start"),this.touchSubscribers[t+"-touchend"]=this.handleTouch.bind(this,t,"end"),this.subscribe(t+"-touchstart",this.touchSubscribers[t+"-touchstart"]),this.subscribe(t+"-touchend",this.touchSubscribers[t+"-touchend"])),this.subscribers[e]=!0}unsubscribeTouchEvents(e){var t=!0,i=this.eventMap[e];if(this.subscribers[e]&&!this.subscribedExternal(e)){delete this.subscribers[e];for(let s in this.eventMap)this.eventMap[s]===i&&this.subscribers[s]&&(t=!1);t&&(this.unsubscribe(i+"-touchstart",this.touchSubscribers[i+"-touchstart"]),this.unsubscribe(i+"-touchend",this.touchSubscribers[i+"-touchend"]),delete this.touchSubscribers[i+"-touchstart"],delete this.touchSubscribers[i+"-touchend"])}}initializeColumn(e){var t=e.definition;for(let i in this.eventMap)t[i]&&(this.subscriptionChanged(i,!0),this.columnSubscribers[i]||(this.columnSubscribers[i]=[]),this.columnSubscribers[i].push(e))}handle(e,t,i){this.dispatchEvent(e,t,i)}handleTouch(e,t,i,s){var n=this.touchWatchers[e];switch(e==="column"&&(e="header"),t){case"start":n.tap=!0,clearTimeout(n.tapHold),n.tapHold=setTimeout(()=>{clearTimeout(n.tapHold),n.tapHold=null,n.tap=null,clearTimeout(n.tapDbl),n.tapDbl=null,this.dispatchEvent(e+"TapHold",i,s)},1e3);break;case"end":n.tap&&(n.tap=null,this.dispatchEvent(e+"Tap",i,s)),n.tapDbl?(clearTimeout(n.tapDbl),n.tapDbl=null,this.dispatchEvent(e+"DblTap",i,s)):n.tapDbl=setTimeout(()=>{clearTimeout(n.tapDbl),n.tapDbl=null},300),clearTimeout(n.tapHold),n.tapHold=null;break}}dispatchEvent(e,t,i){var s=i.getComponent(),n;this.columnSubscribers[e]&&(i instanceof ne?n=i.column.definition[e]:i instanceof U&&(n=i.definition[e]),n&&n(t,s)),this.dispatchExternal(e,t,s)}}b(nt,"moduleName","interaction");var Vi={navPrev:"shift + 9",navNext:9,navUp:38,navDown:40,navLeft:37,navRight:39,scrollPageUp:33,scrollPageDown:34,scrollToStart:36,scrollToEnd:35},Ii={keyBlock:function(l){l.stopPropagation(),l.preventDefault()},scrollPageUp:function(l){var e=this.table.rowManager,t=e.scrollTop-e.element.clientHeight;l.preventDefault(),e.displayRowsCount&&(t>=0?e.element.scrollTop=t:e.scrollToRow(e.getDisplayRows()[0])),this.table.element.focus()},scrollPageDown:function(l){var e=this.table.rowManager,t=e.scrollTop+e.element.clientHeight,i=e.element.scrollHeight;l.preventDefault(),e.displayRowsCount&&(t<=i?e.element.scrollTop=t:e.scrollToRow(e.getDisplayRows()[e.displayRowsCount-1])),this.table.element.focus()},scrollToStart:function(l){var e=this.table.rowManager;l.preventDefault(),e.displayRowsCount&&e.scrollToRow(e.getDisplayRows()[0]),this.table.element.focus()},scrollToEnd:function(l){var e=this.table.rowManager;l.preventDefault(),e.displayRowsCount&&e.scrollToRow(e.getDisplayRows()[e.displayRowsCount-1]),this.table.element.focus()},navPrev:function(l){this.dispatch("keybinding-nav-prev",l)},navNext:function(l){this.dispatch("keybinding-nav-next",l)},navLeft:function(l){this.dispatch("keybinding-nav-left",l)},navRight:function(l){this.dispatch("keybinding-nav-right",l)},navUp:function(l){this.dispatch("keybinding-nav-up",l)},navDown:function(l){this.dispatch("keybinding-nav-down",l)}};const N=class N extends w{constructor(e){super(e),this.watchKeys=null,this.pressedKeys=null,this.keyupBinding=!1,this.keydownBinding=!1,this.registerTableOption("keybindings",{}),this.registerTableOption("tabEndNewRow",!1)}initialize(){var e=this.table.options.keybindings,t={};this.watchKeys={},this.pressedKeys=[],e!==!1&&(Object.assign(t,N.bindings),Object.assign(t,e),this.mapBindings(t),this.bindEvents()),this.subscribe("table-destroy",this.clearBindings.bind(this))}mapBindings(e){for(let t in e)N.actions[t]?e[t]&&(typeof e[t]!="object"&&(e[t]=[e[t]]),e[t].forEach(i=>{var s=Array.isArray(i)?i:[i];s.forEach(n=>{this.mapBinding(t,n)})})):console.warn("Key Binding Error - no such action:",t)}mapBinding(e,t){var i={action:N.actions[e],keys:[],ctrl:!1,shift:!1,meta:!1},s=t.toString().toLowerCase().split(" ").join("").split("+");s.forEach(n=>{switch(n){case"ctrl":i.ctrl=!0;break;case"shift":i.shift=!0;break;case"meta":i.meta=!0;break;default:n=isNaN(n)?n.toUpperCase().charCodeAt(0):parseInt(n),i.keys.push(n),this.watchKeys[n]||(this.watchKeys[n]=[]),this.watchKeys[n].push(i)}})}bindEvents(){var e=this;this.keyupBinding=function(t){var i=t.keyCode,s=e.watchKeys[i];s&&(e.pressedKeys.push(i),s.forEach(function(n){e.checkBinding(t,n)}))},this.keydownBinding=function(t){var i=t.keyCode,s=e.watchKeys[i];if(s){var n=e.pressedKeys.indexOf(i);n>-1&&e.pressedKeys.splice(n,1)}},this.table.element.addEventListener("keydown",this.keyupBinding),this.table.element.addEventListener("keyup",this.keydownBinding)}clearBindings(){this.keyupBinding&&this.table.element.removeEventListener("keydown",this.keyupBinding),this.keydownBinding&&this.table.element.removeEventListener("keyup",this.keydownBinding)}checkBinding(e,t){var i=!0;return e.ctrlKey==t.ctrl&&e.shiftKey==t.shift&&e.metaKey==t.meta?(t.keys.forEach(s=>{var n=this.pressedKeys.indexOf(s);n==-1&&(i=!1)}),i&&t.action.call(this,e),!0):!1}};b(N,"moduleName","keybindings"),b(N,"bindings",Vi),b(N,"actions",Ii);let Te=N;class rt extends w{constructor(e){super(e),this.menuContainer=null,this.nestedMenuBlock=!1,this.currentComponent=null,this.rootPopup=null,this.columnSubscribers={},this.registerTableOption("rowContextMenu",!1),this.registerTableOption("rowClickMenu",!1),this.registerTableOption("rowDblClickMenu",!1),this.registerTableOption("groupContextMenu",!1),this.registerTableOption("groupClickMenu",!1),this.registerTableOption("groupDblClickMenu",!1),this.registerColumnOption("headerContextMenu"),this.registerColumnOption("headerClickMenu"),this.registerColumnOption("headerDblClickMenu"),this.registerColumnOption("headerMenu"),this.registerColumnOption("headerMenuIcon"),this.registerColumnOption("contextMenu"),this.registerColumnOption("clickMenu"),this.registerColumnOption("dblClickMenu")}initialize(){this.deprecatedOptionsCheck(),this.initializeRowWatchers(),this.initializeGroupWatchers(),this.subscribe("column-init",this.initializeColumn.bind(this))}deprecatedOptionsCheck(){}initializeRowWatchers(){this.table.options.rowContextMenu&&(this.subscribe("row-contextmenu",this.loadMenuEvent.bind(this,this.table.options.rowContextMenu)),this.table.on("rowTapHold",this.loadMenuEvent.bind(this,this.table.options.rowContextMenu))),this.table.options.rowClickMenu&&this.subscribe("row-click",this.loadMenuEvent.bind(this,this.table.options.rowClickMenu)),this.table.options.rowDblClickMenu&&this.subscribe("row-dblclick",this.loadMenuEvent.bind(this,this.table.options.rowDblClickMenu))}initializeGroupWatchers(){this.table.options.groupContextMenu&&(this.subscribe("group-contextmenu",this.loadMenuEvent.bind(this,this.table.options.groupContextMenu)),this.table.on("groupTapHold",this.loadMenuEvent.bind(this,this.table.options.groupContextMenu))),this.table.options.groupClickMenu&&this.subscribe("group-click",this.loadMenuEvent.bind(this,this.table.options.groupClickMenu)),this.table.options.groupDblClickMenu&&this.subscribe("group-dblclick",this.loadMenuEvent.bind(this,this.table.options.groupDblClickMenu))}initializeColumn(e){var t=e.definition;t.headerContextMenu&&!this.columnSubscribers.headerContextMenu&&(this.columnSubscribers.headerContextMenu=this.loadMenuTableColumnEvent.bind(this,"headerContextMenu"),this.subscribe("column-contextmenu",this.columnSubscribers.headerContextMenu),this.table.on("headerTapHold",this.loadMenuTableColumnEvent.bind(this,"headerContextMenu"))),t.headerClickMenu&&!this.columnSubscribers.headerClickMenu&&(this.columnSubscribers.headerClickMenu=this.loadMenuTableColumnEvent.bind(this,"headerClickMenu"),this.subscribe("column-click",this.columnSubscribers.headerClickMenu)),t.headerDblClickMenu&&!this.columnSubscribers.headerDblClickMenu&&(this.columnSubscribers.headerDblClickMenu=this.loadMenuTableColumnEvent.bind(this,"headerDblClickMenu"),this.subscribe("column-dblclick",this.columnSubscribers.headerDblClickMenu)),t.headerMenu&&this.initializeColumnHeaderMenu(e),t.contextMenu&&!this.columnSubscribers.contextMenu&&(this.columnSubscribers.contextMenu=this.loadMenuTableCellEvent.bind(this,"contextMenu"),this.subscribe("cell-contextmenu",this.columnSubscribers.contextMenu),this.table.on("cellTapHold",this.loadMenuTableCellEvent.bind(this,"contextMenu"))),t.clickMenu&&!this.columnSubscribers.clickMenu&&(this.columnSubscribers.clickMenu=this.loadMenuTableCellEvent.bind(this,"clickMenu"),this.subscribe("cell-click",this.columnSubscribers.clickMenu)),t.dblClickMenu&&!this.columnSubscribers.dblClickMenu&&(this.columnSubscribers.dblClickMenu=this.loadMenuTableCellEvent.bind(this,"dblClickMenu"),this.subscribe("cell-dblclick",this.columnSubscribers.dblClickMenu))}initializeColumnHeaderMenu(e){var t=e.definition.headerMenuIcon,i;i=document.createElement("span"),i.classList.add("tabulator-header-popup-button"),t?(typeof t=="function"&&(t=t(e.getComponent())),t instanceof HTMLElement?i.appendChild(t):i.innerHTML=t):i.innerHTML="⋮",i.addEventListener("click",s=>{s.stopPropagation(),s.preventDefault(),this.loadMenuEvent(e.definition.headerMenu,s,e)}),e.titleElement.insertBefore(i,e.titleElement.firstChild)}loadMenuTableCellEvent(e,t,i){i._cell&&(i=i._cell),i.column.definition[e]&&this.loadMenuEvent(i.column.definition[e],t,i)}loadMenuTableColumnEvent(e,t,i){i._column&&(i=i._column),i.definition[e]&&this.loadMenuEvent(i.definition[e],t,i)}loadMenuEvent(e,t,i){i._group?i=i._group:i._row&&(i=i._row),e=typeof e=="function"?e.call(this.table,t,i.getComponent()):e,this.loadMenu(t,i,e)}loadMenu(e,t,i,s,n){var r=!(e instanceof MouseEvent),o=document.createElement("div"),a;if(o.classList.add("tabulator-menu"),r||e.preventDefault(),!(!i||!i.length)){if(s)a=n.child(o);else{if(this.nestedMenuBlock){if(this.rootPopup)return}else this.nestedMenuBlock=setTimeout(()=>{this.nestedMenuBlock=!1},100);this.rootPopup&&this.rootPopup.hide(),this.rootPopup=a=this.popup(o)}i.forEach(h=>{var d=document.createElement("div"),u=h.label,c=h.disabled;h.separator?d.classList.add("tabulator-menu-separator"):(d.classList.add("tabulator-menu-item"),typeof u=="function"&&(u=u.call(this.table,t.getComponent())),u instanceof Node?d.appendChild(u):d.innerHTML=u,typeof c=="function"&&(c=c.call(this.table,t.getComponent())),c?(d.classList.add("tabulator-menu-item-disabled"),d.addEventListener("click",f=>{f.stopPropagation()})):h.menu&&h.menu.length?d.addEventListener("click",f=>{f.stopPropagation(),this.loadMenu(f,t,h.menu,d,a)}):h.action&&d.addEventListener("click",f=>{h.action(f,t.getComponent())}),h.menu&&h.menu.length&&d.classList.add("tabulator-menu-item-submenu")),o.appendChild(d)}),o.addEventListener("click",h=>{this.rootPopup&&this.rootPopup.hide()}),a.show(s||e),a===this.rootPopup&&(this.rootPopup.hideOnBlur(()=>{this.rootPopup=null,this.currentComponent&&(this.dispatch("menu-closed",i,a),this.dispatchExternal("menuClosed",this.currentComponent.getComponent()),this.currentComponent=null)}),this.currentComponent=t,this.dispatch("menu-opened",i,a),this.dispatchExternal("menuOpened",t.getComponent()))}}}b(rt,"moduleName","menu");class ot extends w{constructor(e){super(e),this.placeholderElement=this.createPlaceholderElement(),this.hoverElement=!1,this.checkTimeout=!1,this.checkPeriod=250,this.moving=!1,this.toCol=!1,this.toColAfter=!1,this.startX=0,this.autoScrollMargin=40,this.autoScrollStep=5,this.autoScrollTimeout=!1,this.touchMove=!1,this.moveHover=this.moveHover.bind(this),this.endMove=this.endMove.bind(this),this.registerTableOption("movableColumns",!1)}createPlaceholderElement(){var e=document.createElement("div");return e.classList.add("tabulator-col"),e.classList.add("tabulator-col-placeholder"),e}initialize(){this.table.options.movableColumns&&(this.subscribe("column-init",this.initializeColumn.bind(this)),this.subscribe("alert-show",this.abortMove.bind(this)))}abortMove(){clearTimeout(this.checkTimeout)}initializeColumn(e){var t=this,i={},s;!e.modules.frozen&&!e.isGroup&&!e.isRowHeader&&(s=e.getElement(),i.mousemove=(function(n){e.parent===t.moving.parent&&((t.touchMove?n.touches[0].pageX:n.pageX)-x.elOffset(s).left+t.table.columnManager.contentsElement.scrollLeft>e.getWidth()/2?(t.toCol!==e||!t.toColAfter)&&(s.parentNode.insertBefore(t.placeholderElement,s.nextSibling),t.moveColumn(e,!0)):(t.toCol!==e||t.toColAfter)&&(s.parentNode.insertBefore(t.placeholderElement,s),t.moveColumn(e,!1)))}).bind(t),s.addEventListener("mousedown",function(n){t.touchMove=!1,n.which===1&&(t.checkTimeout=setTimeout(function(){t.startMove(n,e)},t.checkPeriod))}),s.addEventListener("mouseup",function(n){n.which===1&&t.checkTimeout&&clearTimeout(t.checkTimeout)}),t.bindTouchEvents(e)),e.modules.moveColumn=i}bindTouchEvents(e){var t=e.getElement(),i=!1,s,n,r,o,a,h;t.addEventListener("touchstart",d=>{this.checkTimeout=setTimeout(()=>{this.touchMove=!0,s=e.nextColumn(),r=s?s.getWidth()/2:0,n=e.prevColumn(),o=n?n.getWidth()/2:0,a=0,h=0,i=!1,this.startMove(d,e)},this.checkPeriod)},{passive:!0}),t.addEventListener("touchmove",d=>{var u,c;this.moving&&(this.moveHover(d),i||(i=d.touches[0].pageX),u=d.touches[0].pageX-i,u>0?s&&u-a>r&&(c=s,c!==e&&(i=d.touches[0].pageX,c.getElement().parentNode.insertBefore(this.placeholderElement,c.getElement().nextSibling),this.moveColumn(c,!0))):n&&-u-h>o&&(c=n,c!==e&&(i=d.touches[0].pageX,c.getElement().parentNode.insertBefore(this.placeholderElement,c.getElement()),this.moveColumn(c,!1))),c&&(s=c.nextColumn(),a=r,r=s?s.getWidth()/2:0,n=c.prevColumn(),h=o,o=n?n.getWidth()/2:0))},{passive:!0}),t.addEventListener("touchend",d=>{this.checkTimeout&&clearTimeout(this.checkTimeout),this.moving&&this.endMove(d)})}startMove(e,t){var i=t.getElement(),s=this.table.columnManager.getContentsElement(),n=this.table.columnManager.getHeadersElement();this.table.modules.selectRange&&this.table.modules.selectRange.columnSelection&&this.table.modules.selectRange.mousedown&&this.table.modules.selectRange.selecting==="column"||(this.moving=t,this.startX=(this.touchMove?e.touches[0].pageX:e.pageX)-x.elOffset(i).left,this.table.element.classList.add("tabulator-block-select"),this.placeholderElement.style.width=t.getWidth()+"px",this.placeholderElement.style.height=t.getHeight()+"px",i.parentNode.insertBefore(this.placeholderElement,i),i.parentNode.removeChild(i),this.hoverElement=i.cloneNode(!0),this.hoverElement.classList.add("tabulator-moving"),s.appendChild(this.hoverElement),this.hoverElement.style.left="0",this.hoverElement.style.bottom=s.clientHeight-n.offsetHeight+"px",this.touchMove||(this._bindMouseMove(),document.body.addEventListener("mousemove",this.moveHover),document.body.addEventListener("mouseup",this.endMove)),this.moveHover(e),this.dispatch("column-moving",e,this.moving))}_bindMouseMove(){this.table.columnManager.columnsByIndex.forEach(function(e){e.modules.moveColumn.mousemove&&e.getElement().addEventListener("mousemove",e.modules.moveColumn.mousemove)})}_unbindMouseMove(){this.table.columnManager.columnsByIndex.forEach(function(e){e.modules.moveColumn.mousemove&&e.getElement().removeEventListener("mousemove",e.modules.moveColumn.mousemove)})}moveColumn(e,t){var i=this.moving.getCells();this.toCol=e,this.toColAfter=t,t?e.getCells().forEach(function(s,n){var r=s.getElement(!0);r.parentNode&&i[n]&&r.parentNode.insertBefore(i[n].getElement(),r.nextSibling)}):e.getCells().forEach(function(s,n){var r=s.getElement(!0);r.parentNode&&i[n]&&r.parentNode.insertBefore(i[n].getElement(),r)})}endMove(e){(e.which===1||this.touchMove)&&(this._unbindMouseMove(),this.placeholderElement.parentNode.insertBefore(this.moving.getElement(),this.placeholderElement.nextSibling),this.placeholderElement.parentNode.removeChild(this.placeholderElement),this.hoverElement.parentNode.removeChild(this.hoverElement),this.table.element.classList.remove("tabulator-block-select"),this.toCol&&this.table.columnManager.moveColumnActual(this.moving,this.toCol,this.toColAfter),this.moving=!1,this.toCol=!1,this.toColAfter=!1,this.touchMove||(document.body.removeEventListener("mousemove",this.moveHover),document.body.removeEventListener("mouseup",this.endMove)))}moveHover(e){var t=this.table.columnManager.getContentsElement(),i=t.scrollLeft,s=(this.touchMove?e.touches[0].pageX:e.pageX)-x.elOffset(t).left+i,n;this.hoverElement.style.left=s-this.startX+"px",s-i{n=Math.max(0,i-5),this.table.rowManager.getElement().scrollLeft=n,this.autoScrollTimeout=!1},1))),i+t.clientWidth-s{n=Math.min(t.clientWidth,i+5),this.table.rowManager.getElement().scrollLeft=n,this.autoScrollTimeout=!1},1)))}}b(ot,"moduleName","moveColumn");var Ni={delete:function(l,e,t){l.delete()}},Wi={insert:function(l,e,t){return this.table.addRow(l.getData(),void 0,e),!0},add:function(l,e,t){return this.table.addRow(l.getData()),!0},update:function(l,e,t){return e?(e.update(l.getData()),!0):!1},replace:function(l,e,t){return e?(this.table.addRow(l.getData(),void 0,e),e.delete(),!0):!1}};const G=class G extends w{constructor(e){super(e),this.placeholderElement=this.createPlaceholderElement(),this.hoverElement=!1,this.checkTimeout=!1,this.checkPeriod=150,this.moving=!1,this.toRow=!1,this.toRowAfter=!1,this.hasHandle=!1,this.startY=0,this.startX=0,this.moveHover=this.moveHover.bind(this),this.endMove=this.endMove.bind(this),this.tableRowDropEvent=!1,this.touchMove=!1,this.connection=!1,this.connectionSelectorsTables=!1,this.connectionSelectorsElements=!1,this.connectionElements=[],this.connections=[],this.connectedTable=!1,this.connectedRow=!1,this.registerTableOption("movableRows",!1),this.registerTableOption("movableRowsConnectedTables",!1),this.registerTableOption("movableRowsConnectedElements",!1),this.registerTableOption("movableRowsSender",!1),this.registerTableOption("movableRowsReceiver","insert"),this.registerColumnOption("rowHandle")}createPlaceholderElement(){var e=document.createElement("div");return e.classList.add("tabulator-row"),e.classList.add("tabulator-row-placeholder"),e}initialize(){this.table.options.movableRows&&(this.connectionSelectorsTables=this.table.options.movableRowsConnectedTables,this.connectionSelectorsElements=this.table.options.movableRowsConnectedElements,this.connection=this.connectionSelectorsTables||this.connectionSelectorsElements,this.subscribe("cell-init",this.initializeCell.bind(this)),this.subscribe("column-init",this.initializeColumn.bind(this)),this.subscribe("row-init",this.initializeRow.bind(this)))}initializeGroupHeader(e){var t=this,i={};i.mouseup=(function(s){t.tableRowDrop(s,e)}).bind(t),i.mousemove=(function(s){var n;s.pageY-x.elOffset(e.element).top+t.table.rowManager.element.scrollTop>e.getHeight()/2?(t.toRow!==e||!t.toRowAfter)&&(n=e.getElement(),n.parentNode.insertBefore(t.placeholderElement,n.nextSibling),t.moveRow(e,!0)):(t.toRow!==e||t.toRowAfter)&&(n=e.getElement(),n.previousSibling&&(n.parentNode.insertBefore(t.placeholderElement,n),t.moveRow(e,!1)))}).bind(t),e.modules.moveRow=i}initializeRow(e){var t=this,i={},s;i.mouseup=(function(n){t.tableRowDrop(n,e)}).bind(t),i.mousemove=(function(n){var r=e.getElement();n.pageY-x.elOffset(r).top+t.table.rowManager.element.scrollTop>e.getHeight()/2?(t.toRow!==e||!t.toRowAfter)&&(r.parentNode.insertBefore(t.placeholderElement,r.nextSibling),t.moveRow(e,!0)):(t.toRow!==e||t.toRowAfter)&&(r.parentNode.insertBefore(t.placeholderElement,r),t.moveRow(e,!1))}).bind(t),this.hasHandle||(s=e.getElement(),s.addEventListener("mousedown",function(n){n.which===1&&(t.checkTimeout=setTimeout(function(){t.startMove(n,e)},t.checkPeriod))}),s.addEventListener("mouseup",function(n){n.which===1&&t.checkTimeout&&clearTimeout(t.checkTimeout)}),this.bindTouchEvents(e,e.getElement())),e.modules.moveRow=i}initializeColumn(e){e.definition.rowHandle&&this.table.options.movableRows!==!1&&(this.hasHandle=!0)}initializeCell(e){if(e.column.definition.rowHandle&&this.table.options.movableRows!==!1){var t=this,i=e.getElement(!0);i.addEventListener("mousedown",function(s){s.which===1&&(t.checkTimeout=setTimeout(function(){t.startMove(s,e.row)},t.checkPeriod))}),i.addEventListener("mouseup",function(s){s.which===1&&t.checkTimeout&&clearTimeout(t.checkTimeout)}),this.bindTouchEvents(e.row,i)}}bindTouchEvents(e,t){var i=!1,s,n,r,o,a,h;t.addEventListener("touchstart",d=>{this.checkTimeout=setTimeout(()=>{this.touchMove=!0,s=e.nextRow(),r=s?s.getHeight()/2:0,n=e.prevRow(),o=n?n.getHeight()/2:0,a=0,h=0,i=!1,this.startMove(d,e)},this.checkPeriod)},{passive:!0}),this.moving,this.toRow,this.toRowAfter,t.addEventListener("touchmove",d=>{var u,c;this.moving&&(d.preventDefault(),this.moveHover(d),i||(i=d.touches[0].pageY),u=d.touches[0].pageY-i,u>0?s&&u-a>r&&(c=s,c!==e&&(i=d.touches[0].pageY,c.getElement().parentNode.insertBefore(this.placeholderElement,c.getElement().nextSibling),this.moveRow(c,!0))):n&&-u-h>o&&(c=n,c!==e&&(i=d.touches[0].pageY,c.getElement().parentNode.insertBefore(this.placeholderElement,c.getElement()),this.moveRow(c,!1))),c&&(s=c.nextRow(),a=r,r=s?s.getHeight()/2:0,n=c.prevRow(),h=o,o=n?n.getHeight()/2:0))}),t.addEventListener("touchend",d=>{this.checkTimeout&&clearTimeout(this.checkTimeout),this.moving&&(this.endMove(d),this.touchMove=!1)})}_bindMouseMove(){this.table.rowManager.getDisplayRows().forEach(e=>{(e.type==="row"||e.type==="group")&&e.modules.moveRow&&e.modules.moveRow.mousemove&&e.getElement().addEventListener("mousemove",e.modules.moveRow.mousemove)})}_unbindMouseMove(){this.table.rowManager.getDisplayRows().forEach(e=>{(e.type==="row"||e.type==="group")&&e.modules.moveRow&&e.modules.moveRow.mousemove&&e.getElement().removeEventListener("mousemove",e.modules.moveRow.mousemove)})}startMove(e,t){var i=t.getElement();this.setStartPosition(e,t),this.moving=t,this.table.element.classList.add("tabulator-block-select"),this.placeholderElement.style.width=t.getWidth()+"px",this.placeholderElement.style.height=t.getHeight()+"px",this.connection?(this.table.element.classList.add("tabulator-movingrow-sending"),this.connectToTables(t)):(i.parentNode.insertBefore(this.placeholderElement,i),i.parentNode.removeChild(i)),this.hoverElement=i.cloneNode(!0),this.hoverElement.classList.add("tabulator-moving"),this.connection?(document.body.appendChild(this.hoverElement),this.hoverElement.style.left="0",this.hoverElement.style.top="0",this.hoverElement.style.width=this.table.element.clientWidth+"px",this.hoverElement.style.whiteSpace="nowrap",this.hoverElement.style.overflow="hidden",this.hoverElement.style.pointerEvents="none"):(this.table.rowManager.getTableElement().appendChild(this.hoverElement),this.hoverElement.style.left="0",this.hoverElement.style.top="0",this._bindMouseMove()),document.body.addEventListener("mousemove",this.moveHover),document.body.addEventListener("mouseup",this.endMove),this.dispatchExternal("rowMoving",t.getComponent()),this.moveHover(e)}setStartPosition(e,t){var i=this.touchMove?e.touches[0].pageX:e.pageX,s=this.touchMove?e.touches[0].pageY:e.pageY,n,r;n=t.getElement(),this.connection?(r=n.getBoundingClientRect(),this.startX=r.left-i+window.pageXOffset,this.startY=r.top-s+window.pageYOffset):this.startY=s-n.getBoundingClientRect().top}endMove(e){(!e||e.which===1||this.touchMove)&&(this._unbindMouseMove(),this.connection||(this.placeholderElement.parentNode.insertBefore(this.moving.getElement(),this.placeholderElement.nextSibling),this.placeholderElement.parentNode.removeChild(this.placeholderElement)),this.hoverElement.parentNode.removeChild(this.hoverElement),this.table.element.classList.remove("tabulator-block-select"),this.toRow?this.table.rowManager.moveRow(this.moving,this.toRow,this.toRowAfter):this.dispatchExternal("rowMoveCancelled",this.moving.getComponent()),this.moving=!1,this.toRow=!1,this.toRowAfter=!1,document.body.removeEventListener("mousemove",this.moveHover),document.body.removeEventListener("mouseup",this.endMove),this.connection&&(this.table.element.classList.remove("tabulator-movingrow-sending"),this.disconnectFromTables()))}moveRow(e,t){this.toRow=e,this.toRowAfter=t}moveHover(e){this.connection?this.moveHoverConnections.call(this,e):this.moveHoverTable.call(this,e)}moveHoverTable(e){var t=this.table.rowManager.getElement(),i=t.scrollTop,s=(this.touchMove?e.touches[0].pageY:e.pageY)-t.getBoundingClientRect().top+i;this.hoverElement.style.top=Math.min(s-this.startY,this.table.rowManager.element.scrollHeight-this.hoverElement.offsetHeight)+"px"}moveHoverConnections(e){this.hoverElement.style.left=this.startX+(this.touchMove?e.touches[0].pageX:e.pageX)+"px",this.hoverElement.style.top=this.startY+(this.touchMove?e.touches[0].pageY:e.pageY)+"px"}elementRowDrop(e,t,i){this.dispatchExternal("movableRowsElementDrop",e,t,i?i.getComponent():!1)}connectToTables(e){var t;this.connectionSelectorsTables&&(t=this.commsConnections(this.connectionSelectorsTables),this.dispatchExternal("movableRowsSendingStart",t),this.commsSend(this.connectionSelectorsTables,"moveRow","connect",{row:e})),this.connectionSelectorsElements&&(this.connectionElements=[],Array.isArray(this.connectionSelectorsElements)||(this.connectionSelectorsElements=[this.connectionSelectorsElements]),this.connectionSelectorsElements.forEach(i=>{typeof i=="string"?this.connectionElements=this.connectionElements.concat(Array.prototype.slice.call(document.querySelectorAll(i))):this.connectionElements.push(i)}),this.connectionElements.forEach(i=>{var s=n=>{this.elementRowDrop(n,i,this.moving)};i.addEventListener("mouseup",s),i.tabulatorElementDropEvent=s,i.classList.add("tabulator-movingrow-receiving")}))}disconnectFromTables(){var e;this.connectionSelectorsTables&&(e=this.commsConnections(this.connectionSelectorsTables),this.dispatchExternal("movableRowsSendingStop",e),this.commsSend(this.connectionSelectorsTables,"moveRow","disconnect")),this.connectionElements.forEach(t=>{t.classList.remove("tabulator-movingrow-receiving"),t.removeEventListener("mouseup",t.tabulatorElementDropEvent),delete t.tabulatorElementDropEvent})}connect(e,t){return this.connectedTable?(console.warn("Move Row Error - Table cannot accept connection, already connected to table:",this.connectedTable),!1):(this.connectedTable=e,this.connectedRow=t,this.table.element.classList.add("tabulator-movingrow-receiving"),this.table.rowManager.getDisplayRows().forEach(i=>{i.type==="row"&&i.modules.moveRow&&i.modules.moveRow.mouseup&&i.getElement().addEventListener("mouseup",i.modules.moveRow.mouseup)}),this.tableRowDropEvent=this.tableRowDrop.bind(this),this.table.element.addEventListener("mouseup",this.tableRowDropEvent),this.dispatchExternal("movableRowsReceivingStart",t,e),!0)}disconnect(e){e===this.connectedTable?(this.connectedTable=!1,this.connectedRow=!1,this.table.element.classList.remove("tabulator-movingrow-receiving"),this.table.rowManager.getDisplayRows().forEach(t=>{t.type==="row"&&t.modules.moveRow&&t.modules.moveRow.mouseup&&t.getElement().removeEventListener("mouseup",t.modules.moveRow.mouseup)}),this.table.element.removeEventListener("mouseup",this.tableRowDropEvent),this.dispatchExternal("movableRowsReceivingStop",e)):console.warn("Move Row Error - trying to disconnect from non connected table")}dropComplete(e,t,i){var s=!1;if(i){switch(typeof this.table.options.movableRowsSender){case"string":s=G.senders[this.table.options.movableRowsSender];break;case"function":s=this.table.options.movableRowsSender;break}s?s.call(this,this.moving?this.moving.getComponent():void 0,t?t.getComponent():void 0,e):this.table.options.movableRowsSender&&console.warn("Mover Row Error - no matching sender found:",this.table.options.movableRowsSender),this.dispatchExternal("movableRowsSent",this.moving.getComponent(),t?t.getComponent():void 0,e)}else this.dispatchExternal("movableRowsSentFailed",this.moving.getComponent(),t?t.getComponent():void 0,e);this.endMove()}tableRowDrop(e,t){var i=!1,s=!1;switch(e.stopImmediatePropagation(),typeof this.table.options.movableRowsReceiver){case"string":i=G.receivers[this.table.options.movableRowsReceiver];break;case"function":i=this.table.options.movableRowsReceiver;break}i?s=i.call(this,this.connectedRow.getComponent(),t?t.getComponent():void 0,this.connectedTable):console.warn("Mover Row Error - no matching receiver found:",this.table.options.movableRowsReceiver),s?this.dispatchExternal("movableRowsReceived",this.connectedRow.getComponent(),t?t.getComponent():void 0,this.connectedTable):this.dispatchExternal("movableRowsReceivedFailed",this.connectedRow.getComponent(),t?t.getComponent():void 0,this.connectedTable),this.commsSend(this.connectedTable,"moveRow","dropcomplete",{row:t,success:s})}commsReceived(e,t,i){switch(t){case"connect":return this.connect(e,i.row);case"disconnect":return this.disconnect(e);case"dropcomplete":return this.dropComplete(e,i.row,i.success)}}};b(G,"moduleName","moveRow"),b(G,"senders",Ni),b(G,"receivers",Wi);let ke=G;var Gi={};const Y=class Y extends w{constructor(e){super(e),this.allowedTypes=["","data","edit","clipboard"],this.enabled=!0,this.registerColumnOption("mutator"),this.registerColumnOption("mutatorParams"),this.registerColumnOption("mutatorData"),this.registerColumnOption("mutatorDataParams"),this.registerColumnOption("mutatorEdit"),this.registerColumnOption("mutatorEditParams"),this.registerColumnOption("mutatorClipboard"),this.registerColumnOption("mutatorClipboardParams"),this.registerColumnOption("mutateLink")}initialize(){this.subscribe("cell-value-changing",this.transformCell.bind(this)),this.subscribe("cell-value-changed",this.mutateLink.bind(this)),this.subscribe("column-layout",this.initializeColumn.bind(this)),this.subscribe("row-data-init-before",this.rowDataChanged.bind(this)),this.subscribe("row-data-changing",this.rowDataChanged.bind(this))}rowDataChanged(e,t,i){return this.transformRow(t,"data",i)}initializeColumn(e){var t=!1,i={};this.allowedTypes.forEach(s=>{var n="mutator"+(s.charAt(0).toUpperCase()+s.slice(1)),r;e.definition[n]&&(r=this.lookupMutator(e.definition[n]),r&&(t=!0,i[n]={mutator:r,params:e.definition[n+"Params"]||{}}))}),t&&(e.modules.mutate=i)}lookupMutator(e){var t=!1;switch(typeof e){case"string":Y.mutators[e]?t=Y.mutators[e]:console.warn("Mutator Error - No such mutator found, ignoring: ",e);break;case"function":t=e;break}return t}transformRow(e,t,i){var s="mutator"+(t.charAt(0).toUpperCase()+t.slice(1)),n;return this.enabled&&this.table.columnManager.traverse(r=>{var o,a,h;r.modules.mutate&&(o=r.modules.mutate[s]||r.modules.mutate.mutator||!1,o&&(n=r.getFieldValue(typeof i<"u"?i:e),(t=="data"&&!i||typeof n<"u")&&(h=r.getComponent(),a=typeof o.params=="function"?o.params(n,e,t,h):o.params,r.setFieldValue(e,o.mutator(n,e,t,a,h)))))}),e}transformCell(e,t){if(e.column.modules.mutate){var i=e.column.modules.mutate.mutatorEdit||e.column.modules.mutate.mutator||!1,s={};if(i)return s=Object.assign(s,e.row.getData()),e.column.setFieldValue(s,t),i.mutator(t,s,"edit",i.params,e.getComponent())}return t}mutateLink(e){var t=e.column.definition.mutateLink;t&&(Array.isArray(t)||(t=[t]),t.forEach(i=>{var s=e.row.getCell(i);s&&s.setValue(s.getValue(),!0,!0)}))}enable(){this.enabled=!0}disable(){this.enabled=!1}};b(Y,"moduleName","mutator"),b(Y,"mutators",Gi);let Me=Y;function ji(l,e,t,i,s){var n=document.createElement("span"),r=document.createElement("span"),o=document.createElement("span"),a=document.createElement("span"),h=document.createElement("span"),d=document.createElement("span");return this.table.modules.localize.langBind("pagination|counter|showing",u=>{r.innerHTML=u}),this.table.modules.localize.langBind("pagination|counter|of",u=>{a.innerHTML=u}),this.table.modules.localize.langBind("pagination|counter|rows",u=>{d.innerHTML=u}),i?(o.innerHTML=" "+e+"-"+Math.min(e+l-1,i)+" ",h.innerHTML=" "+i+" ",n.appendChild(r),n.appendChild(o),n.appendChild(a),n.appendChild(h),n.appendChild(d)):(o.innerHTML=" 0 ",n.appendChild(r),n.appendChild(o),n.appendChild(d)),n}function Ui(l,e,t,i,s){var n=document.createElement("span"),r=document.createElement("span"),o=document.createElement("span"),a=document.createElement("span"),h=document.createElement("span"),d=document.createElement("span");return this.table.modules.localize.langBind("pagination|counter|showing",u=>{r.innerHTML=u}),o.innerHTML=" "+t+" ",this.table.modules.localize.langBind("pagination|counter|of",u=>{a.innerHTML=u}),h.innerHTML=" "+s+" ",this.table.modules.localize.langBind("pagination|counter|pages",u=>{d.innerHTML=u}),n.appendChild(r),n.appendChild(o),n.appendChild(a),n.appendChild(h),n.appendChild(d),n}var Xi={rows:ji,pages:Ui};const te=class te extends w{constructor(e){super(e),this.mode="local",this.progressiveLoad=!1,this.element=null,this.pageCounterElement=null,this.pageCounter=null,this.size=0,this.page=1,this.count=5,this.max=1,this.remoteRowCountEstimate=null,this.initialLoad=!0,this.dataChanging=!1,this.pageSizes=[],this.registerTableOption("pagination",!1),this.registerTableOption("paginationMode","local"),this.registerTableOption("paginationSize",!1),this.registerTableOption("paginationInitialPage",1),this.registerTableOption("paginationCounter",!1),this.registerTableOption("paginationCounterElement",!1),this.registerTableOption("paginationButtonCount",5),this.registerTableOption("paginationSizeSelector",!1),this.registerTableOption("paginationElement",!1),this.registerTableOption("paginationAddRow","page"),this.registerTableOption("progressiveLoad",!1),this.registerTableOption("progressiveLoadDelay",0),this.registerTableOption("progressiveLoadScrollMargin",0),this.registerTableFunction("setMaxPage",this.setMaxPage.bind(this)),this.registerTableFunction("setPage",this.setPage.bind(this)),this.registerTableFunction("setPageToRow",this.userSetPageToRow.bind(this)),this.registerTableFunction("setPageSize",this.userSetPageSize.bind(this)),this.registerTableFunction("getPageSize",this.getPageSize.bind(this)),this.registerTableFunction("previousPage",this.previousPage.bind(this)),this.registerTableFunction("nextPage",this.nextPage.bind(this)),this.registerTableFunction("getPage",this.getPage.bind(this)),this.registerTableFunction("getPageMax",this.getPageMax.bind(this)),this.registerComponentFunction("row","pageTo",this.setPageToRow.bind(this))}initialize(){this.table.options.pagination?(this.subscribe("row-deleted",this.rowsUpdated.bind(this)),this.subscribe("row-added",this.rowsUpdated.bind(this)),this.subscribe("data-processed",this.initialLoadComplete.bind(this)),this.subscribe("table-built",this.calculatePageSizes.bind(this)),this.subscribe("footer-redraw",this.footerRedraw.bind(this)),this.table.options.paginationAddRow=="page"&&this.subscribe("row-adding-position",this.rowAddingPosition.bind(this)),this.table.options.paginationMode==="remote"&&(this.subscribe("data-params",this.remotePageParams.bind(this)),this.subscribe("data-loaded",this._parseRemoteData.bind(this))),this.table.options.progressiveLoad&&console.error("Progressive Load Error - Pagination and progressive load cannot be used at the same time"),this.registerDisplayHandler(this.restOnRenderBefore.bind(this),40),this.registerDisplayHandler(this.getRows.bind(this),50),this.createElements(),this.initializePageCounter(),this.initializePaginator()):this.table.options.progressiveLoad&&(this.subscribe("data-params",this.remotePageParams.bind(this)),this.subscribe("data-loaded",this._parseRemoteData.bind(this)),this.subscribe("table-built",this.calculatePageSizes.bind(this)),this.subscribe("data-processed",this.initialLoadComplete.bind(this)),this.initializeProgressive(this.table.options.progressiveLoad),this.table.options.progressiveLoad==="scroll"&&this.subscribe("scroll-vertical",this.scrollVertical.bind(this)))}rowAddingPosition(e,t){var i=this.table.rowManager,s=i.getDisplayRows(),n;return t?s.length?n=s[0]:i.activeRows.length&&(n=i.activeRows[i.activeRows.length-1],t=!1):s.length&&(n=s[s.length-1],t=!(s.length{}))}restOnRenderBefore(e,t){return t||this.mode==="local"&&this.reset(),e}rowsUpdated(){this.refreshData(!0,"all")}createElements(){var e;this.element=document.createElement("span"),this.element.classList.add("tabulator-paginator"),this.pagesElement=document.createElement("span"),this.pagesElement.classList.add("tabulator-pages"),e=document.createElement("button"),e.classList.add("tabulator-page"),e.setAttribute("type","button"),e.setAttribute("role","button"),e.setAttribute("aria-label",""),e.setAttribute("title",""),this.firstBut=e.cloneNode(!0),this.firstBut.setAttribute("data-page","first"),this.prevBut=e.cloneNode(!0),this.prevBut.setAttribute("data-page","prev"),this.nextBut=e.cloneNode(!0),this.nextBut.setAttribute("data-page","next"),this.lastBut=e.cloneNode(!0),this.lastBut.setAttribute("data-page","last"),this.table.options.paginationSizeSelector&&(this.pageSizeSelect=document.createElement("select"),this.pageSizeSelect.classList.add("tabulator-page-size"))}generatePageSizeSelectList(){var e=[];if(this.pageSizeSelect){if(Array.isArray(this.table.options.paginationSizeSelector))e=this.table.options.paginationSizeSelector,this.pageSizes=e,this.pageSizes.indexOf(this.size)==-1&&e.unshift(this.size);else if(this.pageSizes.indexOf(this.size)==-1){e=[];for(let t=1;t<5;t++)e.push(this.size*t);this.pageSizes=e}else e=this.pageSizes;for(;this.pageSizeSelect.firstChild;)this.pageSizeSelect.removeChild(this.pageSizeSelect.firstChild);e.forEach(t=>{var i=document.createElement("option");i.value=t,t===!0?this.langBind("pagination|all",function(s){i.innerHTML=s}):i.innerHTML=t,this.pageSizeSelect.appendChild(i)}),this.pageSizeSelect.value=this.size}}initializePageCounter(){var e=this.table.options.paginationCounter,t=null;e&&(typeof e=="function"?t=e:t=te.pageCounters[e],t?(this.pageCounter=t,this.pageCounterElement=document.createElement("span"),this.pageCounterElement.classList.add("tabulator-page-counter")):console.warn("Pagination Error - No such page counter found: ",e))}initializePaginator(e){var t,i;e||(this.langBind("pagination|first",s=>{this.firstBut.innerHTML=s}),this.langBind("pagination|first_title",s=>{this.firstBut.setAttribute("aria-label",s),this.firstBut.setAttribute("title",s)}),this.langBind("pagination|prev",s=>{this.prevBut.innerHTML=s}),this.langBind("pagination|prev_title",s=>{this.prevBut.setAttribute("aria-label",s),this.prevBut.setAttribute("title",s)}),this.langBind("pagination|next",s=>{this.nextBut.innerHTML=s}),this.langBind("pagination|next_title",s=>{this.nextBut.setAttribute("aria-label",s),this.nextBut.setAttribute("title",s)}),this.langBind("pagination|last",s=>{this.lastBut.innerHTML=s}),this.langBind("pagination|last_title",s=>{this.lastBut.setAttribute("aria-label",s),this.lastBut.setAttribute("title",s)}),this.firstBut.addEventListener("click",()=>{this.setPage(1)}),this.prevBut.addEventListener("click",()=>{this.previousPage()}),this.nextBut.addEventListener("click",()=>{this.nextPage()}),this.lastBut.addEventListener("click",()=>{this.setPage(this.max)}),this.table.options.paginationElement&&(this.element=this.table.options.paginationElement),this.pageSizeSelect&&(t=document.createElement("label"),this.langBind("pagination|page_size",s=>{this.pageSizeSelect.setAttribute("aria-label",s),this.pageSizeSelect.setAttribute("title",s),t.innerHTML=s}),this.element.appendChild(t),this.element.appendChild(this.pageSizeSelect),this.pageSizeSelect.addEventListener("change",s=>{this.setPageSize(this.pageSizeSelect.value=="true"?!0:this.pageSizeSelect.value),this.setPage(1)})),this.element.appendChild(this.firstBut),this.element.appendChild(this.prevBut),this.element.appendChild(this.pagesElement),this.element.appendChild(this.nextBut),this.element.appendChild(this.lastBut),this.table.options.paginationElement||(this.table.options.paginationCounter&&(this.table.options.paginationCounterElement?this.table.options.paginationCounterElement instanceof HTMLElement?this.table.options.paginationCounterElement.appendChild(this.pageCounterElement):typeof this.table.options.paginationCounterElement=="string"&&(i=document.querySelector(this.table.options.paginationCounterElement),i?i.appendChild(this.pageCounterElement):console.warn("Pagination Error - Unable to find element matching paginationCounterElement selector:",this.table.options.paginationCounterElement)):this.footerAppend(this.pageCounterElement)),this.footerAppend(this.element)),this.page=this.table.options.paginationInitialPage,this.count=this.table.options.paginationButtonCount),this.mode=this.table.options.paginationMode}initializeProgressive(e){this.initializePaginator(!0),this.mode="progressive_"+e,this.progressiveLoad=!0}trackChanges(){this.dispatch("page-changed")}setMaxRows(e){e?this.max=this.size===!0?1:Math.ceil(e/this.size):this.max=1,this.page>this.max&&(this.page=this.max)}reset(e){this.initialLoad||(this.mode=="local"||e)&&(this.page=1,this.trackChanges())}setMaxPage(e){e=parseInt(e),this.max=e||1,this.page>this.max&&(this.page=this.max,this.trigger())}setPage(e){switch(e){case"first":return this.setPage(1);case"prev":return this.previousPage();case"next":return this.nextPage();case"last":return this.setPage(this.max)}return e=parseInt(e),e>0&&e<=this.max||this.mode!=="local"?(this.page=e,this.trackChanges(),this.trigger()):(console.warn("Pagination Error - Requested page is out of range of 1 - "+this.max+":",e),Promise.reject())}setPageToRow(e){var t=this.displayRows(-1),i=t.indexOf(e);if(i>-1){var s=this.size===!0?1:Math.ceil((i+1)/this.size);return this.setPage(s)}else return console.warn("Pagination Error - Requested row is not visible"),Promise.reject()}setPageSize(e){e!==!0&&(e=parseInt(e)),e>0&&(this.size=e,this.dispatchExternal("pageSizeChanged",e)),this.pageSizeSelect&&this.generatePageSizeSelectList(),this.trackChanges()}_setPageCounter(e,t,i){var s;if(this.pageCounter)switch(this.mode==="remote"&&(t=this.size,i=(this.page-1)*this.size+1,e=this.remoteRowCountEstimate),s=this.pageCounter.call(this,t,i,this.page,e,this.max),typeof s){case"object":if(s instanceof Node){for(;this.pageCounterElement.firstChild;)this.pageCounterElement.removeChild(this.pageCounterElement.firstChild);this.pageCounterElement.appendChild(s)}else this.pageCounterElement.innerHTML="",s!=null&&console.warn("Page Counter Error - Page Counter has returned a type of object, the only valid page counter object return is an instance of Node, the page counter returned:",s);break;case"undefined":this.pageCounterElement.innerHTML="";break;default:this.pageCounterElement.innerHTML=s}}_setPageButtons(){let e=Math.floor((this.count-1)/2),t=Math.ceil((this.count-1)/2),i=this.max-this.page+e+10&&n<=this.max&&this.pagesElement.appendChild(this._generatePageButton(n));this.footerRedraw()}_generatePageButton(e){var t=document.createElement("button");return t.classList.add("tabulator-page"),e==this.page&&t.classList.add("active"),t.setAttribute("type","button"),t.setAttribute("role","button"),this.langBind("pagination|page_title",i=>{t.setAttribute("aria-label",i+" "+e),t.setAttribute("title",i+" "+e)}),t.setAttribute("data-page",e),t.textContent=e,t.addEventListener("click",i=>{this.setPage(e)}),t}previousPage(){return this.page>1?(this.page--,this.trackChanges(),this.trigger()):(console.warn("Pagination Error - Previous page would be less than page 1:",0),Promise.reject())}nextPage(){return this.pagea.type==="row");if(this.mode=="local"){i=[],this.setMaxRows(e.length),this.size===!0?(s=0,n=e.length):(s=this.size*(this.page-1),n=s+parseInt(this.size)),this._setPageButtons();for(let a=s;a{this.dataChanging=!1});case"progressive_load":case"progressive_scroll":return this.reloadData(null,!0);default:return console.warn("Pagination Error - no such pagination mode:",this.mode),Promise.reject()}}_parseRemoteData(e){var t;if(typeof e.last_page>"u"&&console.warn("Remote Pagination Error - Server response missing '"+(this.options("dataReceiveParams").last_page||"last_page")+"' property"),e.data)if(this.max=parseInt(e.last_page)||1,this.remoteRowCountEstimate=typeof e.last_row<"u"?e.last_row:e.last_page*this.size-(this.page==e.last_page?this.size-e.data.length:0),this.progressiveLoad){switch(this.mode){case"progressive_load":this.page==1?this.table.rowManager.setData(e.data,!1,this.page==1):this.table.rowManager.addRows(e.data),this.page{this.nextPage()},this.table.options.progressiveLoadDelay);break;case"progressive_scroll":e=this.page===1?e.data:this.table.rowManager.getData().concat(e.data),this.table.rowManager.setData(e,this.page!==1,this.page==1),t=this.table.options.progressiveLoadScrollMargin||this.table.rowManager.element.clientHeight*2,this.table.rowManager.element.scrollHeight<=this.table.rowManager.element.clientHeight+t&&this.page{this.nextPage()});break}return!1}else this.dispatchExternal("pageLoaded",this.getPage());else console.warn("Remote Pagination Error - Server response missing '"+(this.options("dataReceiveParams").data||"data")+"' property");return e.data}footerRedraw(){var e=this.table.footerManager.containerElement;Math.ceil(e.clientWidth)-e.scrollWidth<0?this.pagesElement.style.display="none":(this.pagesElement.style.display="",Math.ceil(e.clientWidth)-e.scrollWidth<0&&(this.pagesElement.style.display="none"))}};b(te,"moduleName","page"),b(te,"pageCounters",Xi);let Le=te;var Ji={local:function(l,e){var t=localStorage.getItem(l+"-"+e);return t?JSON.parse(t):!1},cookie:function(l,e){var t=document.cookie,i=l+"-"+e,s=t.indexOf(i+"="),n,r;return s>-1&&(t=t.slice(s),n=t.indexOf(";"),n>-1&&(t=t.slice(0,n)),r=t.replace(i+"=","")),r?JSON.parse(r):!1}},Ki={local:function(l,e,t){localStorage.setItem(l+"-"+e,JSON.stringify(t))},cookie:function(l,e,t){var i=new Date;i.setDate(i.getDate()+1e4),document.cookie=l+"-"+e+"="+JSON.stringify(t)+"; expires="+i.toUTCString()}};const D=class D extends w{constructor(e){super(e),this.mode="",this.id="",this.defWatcherBlock=!1,this.config={},this.readFunc=!1,this.writeFunc=!1,this.registerTableOption("persistence",!1),this.registerTableOption("persistenceID",""),this.registerTableOption("persistenceMode",!0),this.registerTableOption("persistenceReaderFunc",!1),this.registerTableOption("persistenceWriterFunc",!1)}localStorageTest(){var e="_tabulator_test";try{return window.localStorage.setItem(e,e),window.localStorage.removeItem(e),!0}catch{return!1}}initialize(){if(this.table.options.persistence){var e=this.table.options.persistenceMode,t=this.table.options.persistenceID,i;this.mode=e!==!0?e:this.localStorageTest()?"local":"cookie",this.table.options.persistenceReaderFunc?typeof this.table.options.persistenceReaderFunc=="function"?this.readFunc=this.table.options.persistenceReaderFunc:D.readers[this.table.options.persistenceReaderFunc]?this.readFunc=D.readers[this.table.options.persistenceReaderFunc]:console.warn("Persistence Read Error - invalid reader set",this.table.options.persistenceReaderFunc):D.readers[this.mode]?this.readFunc=D.readers[this.mode]:console.warn("Persistence Read Error - invalid reader set",this.mode),this.table.options.persistenceWriterFunc?typeof this.table.options.persistenceWriterFunc=="function"?this.writeFunc=this.table.options.persistenceWriterFunc:D.writers[this.table.options.persistenceWriterFunc]?this.writeFunc=D.writers[this.table.options.persistenceWriterFunc]:console.warn("Persistence Write Error - invalid reader set",this.table.options.persistenceWriterFunc):D.writers[this.mode]?this.writeFunc=D.writers[this.mode]:console.warn("Persistence Write Error - invalid writer set",this.mode),this.id="tabulator-"+(t||this.table.element.getAttribute("id")||""),this.config={sort:this.table.options.persistence===!0||this.table.options.persistence.sort,filter:this.table.options.persistence===!0||this.table.options.persistence.filter,headerFilter:this.table.options.persistence===!0||this.table.options.persistence.headerFilter,group:this.table.options.persistence===!0||this.table.options.persistence.group,page:this.table.options.persistence===!0||this.table.options.persistence.page,columns:this.table.options.persistence===!0?["title","width","visible"]:this.table.options.persistence.columns},this.config.page&&(i=this.retrieveData("page"),i&&(typeof i.paginationSize<"u"&&(this.config.page===!0||this.config.page.size)&&(this.table.options.paginationSize=i.paginationSize),typeof i.paginationInitialPage<"u"&&(this.config.page===!0||this.config.page.page)&&(this.table.options.paginationInitialPage=i.paginationInitialPage))),this.config.group&&(i=this.retrieveData("group"),i&&(typeof i.groupBy<"u"&&(this.config.group===!0||this.config.group.groupBy)&&(this.table.options.groupBy=i.groupBy),typeof i.groupStartOpen<"u"&&(this.config.group===!0||this.config.group.groupStartOpen)&&(this.table.options.groupStartOpen=i.groupStartOpen),typeof i.groupHeader<"u"&&(this.config.group===!0||this.config.group.groupHeader)&&(this.table.options.groupHeader=i.groupHeader))),this.config.columns&&(this.table.options.columns=this.load("columns",this.table.options.columns),this.subscribe("column-init",this.initializeColumn.bind(this)),this.subscribe("column-show",this.save.bind(this,"columns")),this.subscribe("column-hide",this.save.bind(this,"columns")),this.subscribe("column-moved",this.save.bind(this,"columns"))),this.subscribe("table-built",this.tableBuilt.bind(this),0),this.subscribe("table-redraw",this.tableRedraw.bind(this)),this.subscribe("filter-changed",this.eventSave.bind(this,"filter")),this.subscribe("filter-changed",this.eventSave.bind(this,"headerFilter")),this.subscribe("sort-changed",this.eventSave.bind(this,"sort")),this.subscribe("group-changed",this.eventSave.bind(this,"group")),this.subscribe("page-changed",this.eventSave.bind(this,"page")),this.subscribe("column-resized",this.eventSave.bind(this,"columns")),this.subscribe("column-width",this.eventSave.bind(this,"columns")),this.subscribe("layout-refreshed",this.eventSave.bind(this,"columns"))}this.registerTableFunction("getColumnLayout",this.getColumnLayout.bind(this)),this.registerTableFunction("setColumnLayout",this.setColumnLayout.bind(this))}eventSave(e){this.config[e]&&this.save(e)}tableBuilt(){var e,t,i;this.config.sort&&(e=this.load("sort"),e&&(this.table.options.initialSort=e)),this.config.filter&&(t=this.load("filter"),t&&(this.table.options.initialFilter=t)),this.config.headerFilter&&(i=this.load("headerFilter"),i&&(this.table.options.initialHeaderFilter=i))}tableRedraw(e){e&&this.config.columns&&this.save("columns")}getColumnLayout(){return this.parseColumns(this.table.columnManager.getColumns())}setColumnLayout(e){return this.table.columnManager.setColumns(this.mergeDefinition(this.table.options.columns,e,!0)),!0}initializeColumn(e){var t,i;this.config.columns&&(this.defWatcherBlock=!0,t=e.getDefinition(),i=this.config.columns===!0?Object.keys(t):this.config.columns,i.forEach(s=>{var n=Object.getOwnPropertyDescriptor(t,s),r=t[s];n&&Object.defineProperty(t,s,{set:o=>{r=o,this.defWatcherBlock||this.save("columns"),n.set&&n.set(o)},get:()=>(n.get&&n.get(),r)})}),this.defWatcherBlock=!1)}load(e,t){var i=this.retrieveData(e);return t&&(i=i?this.mergeDefinition(t,i):t),i}retrieveData(e){return this.readFunc?this.readFunc(this.id,e):!1}mergeDefinition(e,t,i){var s=[];return t=t||[],t.forEach((n,r)=>{var o=this._findColumn(e,n),a;o&&(i?a=Object.keys(n):this.config.columns===!0||this.config.columns==null?(a=Object.keys(o),a.push("width")):a=this.config.columns,a.forEach(h=>{h!=="columns"&&typeof n[h]<"u"&&(o[h]=n[h])}),o.columns&&(o.columns=this.mergeDefinition(o.columns,n.columns)),s.push(o))}),e.forEach((n,r)=>{var o=this._findColumn(t,n);o||(s.length>r?s.splice(r,0,n):s.push(n))}),s}_findColumn(e,t){var i=t.columns?"group":t.field?"field":"object";return e.find(function(s){switch(i){case"group":return s.title===t.title&&s.columns.length===t.columns.length;case"field":return s.field===t.field;case"object":return s===t}})}save(e){var t={};switch(e){case"columns":t=this.parseColumns(this.table.columnManager.getColumns());break;case"filter":t=this.table.modules.filter.getFilters();break;case"headerFilter":t=this.table.modules.filter.getHeaderFilters();break;case"sort":t=this.validateSorters(this.table.modules.sort.getSort());break;case"group":t=this.getGroupConfig();break;case"page":t=this.getPageConfig();break}this.writeFunc&&this.writeFunc(this.id,e,t)}validateSorters(e){return e.forEach(function(t){t.column=t.field,delete t.field}),e}getGroupConfig(){var e={};return this.config.group&&((this.config.group===!0||this.config.group.groupBy)&&(e.groupBy=this.table.options.groupBy),(this.config.group===!0||this.config.group.groupStartOpen)&&(e.groupStartOpen=this.table.options.groupStartOpen),(this.config.group===!0||this.config.group.groupHeader)&&(e.groupHeader=this.table.options.groupHeader)),e}getPageConfig(){var e={};return this.config.page&&((this.config.page===!0||this.config.page.size)&&(e.paginationSize=this.table.modules.page.getPageSize()),(this.config.page===!0||this.config.page.page)&&(e.paginationInitialPage=this.table.modules.page.getPage())),e}parseColumns(e){var t=[],i=["headerContextMenu","headerMenu","contextMenu","clickMenu"];return e.forEach(s=>{var n={},r=s.getDefinition(),o;s.isGroup?(n.title=r.title,n.columns=this.parseColumns(s.getColumns())):(n.field=s.getField(),this.config.columns===!0||this.config.columns==null?(o=Object.keys(r),o.push("width"),o.push("visible")):o=this.config.columns,o.forEach(a=>{switch(a){case"width":n.width=s.getWidth();break;case"visible":n.visible=s.visible;break;default:typeof r[a]!="function"&&i.indexOf(a)===-1&&(n[a]=r[a])}})),t.push(n)}),t}};b(D,"moduleName","persistence"),b(D,"moduleInitOrder",-10),b(D,"readers",Ji),b(D,"writers",Ki);let Se=D;class at extends w{constructor(e){super(e),this.columnSubscribers={},this.registerTableOption("rowContextPopup",!1),this.registerTableOption("rowClickPopup",!1),this.registerTableOption("rowDblClickPopup",!1),this.registerTableOption("groupContextPopup",!1),this.registerTableOption("groupClickPopup",!1),this.registerTableOption("groupDblClickPopup",!1),this.registerColumnOption("headerContextPopup"),this.registerColumnOption("headerClickPopup"),this.registerColumnOption("headerDblClickPopup"),this.registerColumnOption("headerPopup"),this.registerColumnOption("headerPopupIcon"),this.registerColumnOption("contextPopup"),this.registerColumnOption("clickPopup"),this.registerColumnOption("dblClickPopup"),this.registerComponentFunction("cell","popup",this._componentPopupCall.bind(this)),this.registerComponentFunction("column","popup",this._componentPopupCall.bind(this)),this.registerComponentFunction("row","popup",this._componentPopupCall.bind(this)),this.registerComponentFunction("group","popup",this._componentPopupCall.bind(this))}initialize(){this.initializeRowWatchers(),this.initializeGroupWatchers(),this.subscribe("column-init",this.initializeColumn.bind(this))}_componentPopupCall(e,t,i){this.loadPopupEvent(t,null,e,i)}initializeRowWatchers(){this.table.options.rowContextPopup&&(this.subscribe("row-contextmenu",this.loadPopupEvent.bind(this,this.table.options.rowContextPopup)),this.table.on("rowTapHold",this.loadPopupEvent.bind(this,this.table.options.rowContextPopup))),this.table.options.rowClickPopup&&this.subscribe("row-click",this.loadPopupEvent.bind(this,this.table.options.rowClickPopup)),this.table.options.rowDblClickPopup&&this.subscribe("row-dblclick",this.loadPopupEvent.bind(this,this.table.options.rowDblClickPopup))}initializeGroupWatchers(){this.table.options.groupContextPopup&&(this.subscribe("group-contextmenu",this.loadPopupEvent.bind(this,this.table.options.groupContextPopup)),this.table.on("groupTapHold",this.loadPopupEvent.bind(this,this.table.options.groupContextPopup))),this.table.options.groupClickPopup&&this.subscribe("group-click",this.loadPopupEvent.bind(this,this.table.options.groupClickPopup)),this.table.options.groupDblClickPopup&&this.subscribe("group-dblclick",this.loadPopupEvent.bind(this,this.table.options.groupDblClickPopup))}initializeColumn(e){var t=e.definition;t.headerContextPopup&&!this.columnSubscribers.headerContextPopup&&(this.columnSubscribers.headerContextPopup=this.loadPopupTableColumnEvent.bind(this,"headerContextPopup"),this.subscribe("column-contextmenu",this.columnSubscribers.headerContextPopup),this.table.on("headerTapHold",this.loadPopupTableColumnEvent.bind(this,"headerContextPopup"))),t.headerClickPopup&&!this.columnSubscribers.headerClickPopup&&(this.columnSubscribers.headerClickPopup=this.loadPopupTableColumnEvent.bind(this,"headerClickPopup"),this.subscribe("column-click",this.columnSubscribers.headerClickPopup)),t.headerDblClickPopup&&!this.columnSubscribers.headerDblClickPopup&&(this.columnSubscribers.headerDblClickPopup=this.loadPopupTableColumnEvent.bind(this,"headerDblClickPopup"),this.subscribe("column-dblclick",this.columnSubscribers.headerDblClickPopup)),t.headerPopup&&this.initializeColumnHeaderPopup(e),t.contextPopup&&!this.columnSubscribers.contextPopup&&(this.columnSubscribers.contextPopup=this.loadPopupTableCellEvent.bind(this,"contextPopup"),this.subscribe("cell-contextmenu",this.columnSubscribers.contextPopup),this.table.on("cellTapHold",this.loadPopupTableCellEvent.bind(this,"contextPopup"))),t.clickPopup&&!this.columnSubscribers.clickPopup&&(this.columnSubscribers.clickPopup=this.loadPopupTableCellEvent.bind(this,"clickPopup"),this.subscribe("cell-click",this.columnSubscribers.clickPopup)),t.dblClickPopup&&!this.columnSubscribers.dblClickPopup&&(this.columnSubscribers.dblClickPopup=this.loadPopupTableCellEvent.bind(this,"dblClickPopup"),this.subscribe("cell-click",this.columnSubscribers.dblClickPopup))}initializeColumnHeaderPopup(e){var t=e.definition.headerPopupIcon,i;i=document.createElement("span"),i.classList.add("tabulator-header-popup-button"),t?(typeof t=="function"&&(t=t(e.getComponent())),t instanceof HTMLElement?i.appendChild(t):i.innerHTML=t):i.innerHTML="⋮",i.addEventListener("click",s=>{s.stopPropagation(),s.preventDefault(),this.loadPopupEvent(e.definition.headerPopup,s,e)}),e.titleElement.insertBefore(i,e.titleElement.firstChild)}loadPopupTableCellEvent(e,t,i){i._cell&&(i=i._cell),i.column.definition[e]&&this.loadPopupEvent(i.column.definition[e],t,i)}loadPopupTableColumnEvent(e,t,i){i._column&&(i=i._column),i.definition[e]&&this.loadPopupEvent(i.definition[e],t,i)}loadPopupEvent(e,t,i,s){var n;function r(o){n=o}i._group?i=i._group:i._row&&(i=i._row),e=typeof e=="function"?e.call(this.table,t,i.getComponent(),r):e,this.loadPopup(t,i,e,n,s)}loadPopup(e,t,i,s,n){var r=!(e instanceof MouseEvent),o,a;i instanceof HTMLElement?o=i:(o=document.createElement("div"),o.innerHTML=i),o.classList.add("tabulator-popup"),o.addEventListener("click",h=>{h.stopPropagation()}),r||e.preventDefault(),a=this.popup(o),typeof s=="function"&&a.renderCallback(s),e?a.show(e):a.show(t.getElement(),n||"center"),a.hideOnBlur(()=>{this.dispatchExternal("popupClosed",t.getComponent())}),this.dispatchExternal("popupOpened",t.getComponent())}}b(at,"moduleName","popup");class lt extends w{constructor(e){super(e),this.element=!1,this.manualBlock=!1,this.beforeprintEventHandler=null,this.afterprintEventHandler=null,this.registerTableOption("printAsHtml",!1),this.registerTableOption("printFormatter",!1),this.registerTableOption("printHeader",!1),this.registerTableOption("printFooter",!1),this.registerTableOption("printStyled",!0),this.registerTableOption("printRowRange","visible"),this.registerTableOption("printConfig",{}),this.registerColumnOption("print"),this.registerColumnOption("titlePrint")}initialize(){this.table.options.printAsHtml&&(this.beforeprintEventHandler=this.replaceTable.bind(this),this.afterprintEventHandler=this.cleanup.bind(this),window.addEventListener("beforeprint",this.beforeprintEventHandler),window.addEventListener("afterprint",this.afterprintEventHandler),this.subscribe("table-destroy",this.destroy.bind(this))),this.registerTableFunction("print",this.printFullscreen.bind(this))}destroy(){this.table.options.printAsHtml&&(window.removeEventListener("beforeprint",this.beforeprintEventHandler),window.removeEventListener("afterprint",this.afterprintEventHandler))}replaceTable(){this.manualBlock||(this.element=document.createElement("div"),this.element.classList.add("tabulator-print-table"),this.element.appendChild(this.table.modules.export.generateTable(this.table.options.printConfig,this.table.options.printStyled,this.table.options.printRowRange,"print")),this.table.element.style.display="none",this.table.element.parentNode.insertBefore(this.element,this.table.element))}cleanup(){document.body.classList.remove("tabulator-print-fullscreen-hide"),this.element&&this.element.parentNode&&(this.element.parentNode.removeChild(this.element),this.table.element.style.display="")}printFullscreen(e,t,i){var s=window.scrollX,n=window.scrollY,r=document.createElement("div"),o=document.createElement("div"),a=this.table.modules.export.generateTable(typeof i<"u"?i:this.table.options.printConfig,typeof t<"u"?t:this.table.options.printStyled,e||this.table.options.printRowRange,"print"),h,d;this.manualBlock=!0,this.element=document.createElement("div"),this.element.classList.add("tabulator-print-fullscreen"),this.table.options.printHeader&&(r.classList.add("tabulator-print-header"),h=typeof this.table.options.printHeader=="function"?this.table.options.printHeader.call(this.table):this.table.options.printHeader,typeof h=="string"?r.innerHTML=h:r.appendChild(h),this.element.appendChild(r)),this.element.appendChild(a),this.table.options.printFooter&&(o.classList.add("tabulator-print-footer"),d=typeof this.table.options.printFooter=="function"?this.table.options.printFooter.call(this.table):this.table.options.printFooter,typeof d=="string"?o.innerHTML=d:o.appendChild(d),this.element.appendChild(o)),document.body.classList.add("tabulator-print-fullscreen-hide"),document.body.appendChild(this.element),this.table.options.printFormatter&&this.table.options.printFormatter(this.element,a),window.print(),this.cleanup(),window.scrollTo(s,n),this.manualBlock=!1}}b(lt,"moduleName","print");class ht extends w{constructor(e){super(e),this.data=!1,this.blocked=!1,this.origFuncs={},this.currentVersion=0,this.registerTableOption("reactiveData",!1)}initialize(){this.table.options.reactiveData&&(this.subscribe("cell-value-save-before",this.block.bind(this,"cellsave")),this.subscribe("cell-value-save-after",this.unblock.bind(this,"cellsave")),this.subscribe("row-data-save-before",this.block.bind(this,"rowsave")),this.subscribe("row-data-save-after",this.unblock.bind(this,"rowsave")),this.subscribe("row-data-init-after",this.watchRow.bind(this)),this.subscribe("data-processing",this.watchData.bind(this)),this.subscribe("table-destroy",this.unwatchData.bind(this)))}watchData(e){var t=this,i;this.currentVersion++,i=this.currentVersion,this.unwatchData(),this.data=e,this.origFuncs.push=e.push,Object.defineProperty(this.data,"push",{enumerable:!1,configurable:!0,value:function(){var s=Array.from(arguments),n;return!t.blocked&&i===t.currentVersion&&(t.block("data-push"),s.forEach(r=>{t.table.rowManager.addRowActual(r,!1)}),n=t.origFuncs.push.apply(e,arguments),t.unblock("data-push")),n}}),this.origFuncs.unshift=e.unshift,Object.defineProperty(this.data,"unshift",{enumerable:!1,configurable:!0,value:function(){var s=Array.from(arguments),n;return!t.blocked&&i===t.currentVersion&&(t.block("data-unshift"),s.forEach(r=>{t.table.rowManager.addRowActual(r,!0)}),n=t.origFuncs.unshift.apply(e,arguments),t.unblock("data-unshift")),n}}),this.origFuncs.shift=e.shift,Object.defineProperty(this.data,"shift",{enumerable:!1,configurable:!0,value:function(){var s,n;return!t.blocked&&i===t.currentVersion&&(t.block("data-shift"),t.data.length&&(s=t.table.rowManager.getRowFromDataObject(t.data[0]),s&&s.deleteActual()),n=t.origFuncs.shift.call(e),t.unblock("data-shift")),n}}),this.origFuncs.pop=e.pop,Object.defineProperty(this.data,"pop",{enumerable:!1,configurable:!0,value:function(){var s,n;return!t.blocked&&i===t.currentVersion&&(t.block("data-pop"),t.data.length&&(s=t.table.rowManager.getRowFromDataObject(t.data[t.data.length-1]),s&&s.deleteActual()),n=t.origFuncs.pop.call(e),t.unblock("data-pop")),n}}),this.origFuncs.splice=e.splice,Object.defineProperty(this.data,"splice",{enumerable:!1,configurable:!0,value:function(){var s=Array.from(arguments),n=s[0]<0?e.length+s[0]:s[0],r=s[1],o=s[2]?s.slice(2):!1,a,h;if(!t.blocked&&i===t.currentVersion){if(t.block("data-splice"),o&&(a=e[n]?t.table.rowManager.getRowFromDataObject(e[n]):!1,a?o.forEach(u=>{t.table.rowManager.addRowActual(u,!0,a,!0)}):(o=o.slice().reverse(),o.forEach(u=>{t.table.rowManager.addRowActual(u,!0,!1,!0)}))),r!==0){var d=e.slice(n,typeof s[1]>"u"?s[1]:n+r);d.forEach((u,c)=>{var f=t.table.rowManager.getRowFromDataObject(u);f&&f.deleteActual(c!==d.length-1)})}(o||r!==0)&&t.table.rowManager.reRenderInPosition(),h=t.origFuncs.splice.apply(e,arguments),t.unblock("data-splice")}return h}})}unwatchData(){if(this.data!==!1)for(var e in this.origFuncs)Object.defineProperty(this.data,e,{enumerable:!0,configurable:!0,writable:!0,value:this.origFuncs.key})}watchRow(e){var t=e.getData();for(var i in t)this.watchKey(e,t,i);this.table.options.dataTree&&this.watchTreeChildren(e)}watchTreeChildren(e){var t=this,i=e.getData()[this.table.options.dataTreeChildField],s={};i&&(s.push=i.push,Object.defineProperty(i,"push",{enumerable:!1,configurable:!0,value:()=>{if(!t.blocked){t.block("tree-push");var n=s.push.apply(i,arguments);this.rebuildTree(e),t.unblock("tree-push")}return n}}),s.unshift=i.unshift,Object.defineProperty(i,"unshift",{enumerable:!1,configurable:!0,value:()=>{if(!t.blocked){t.block("tree-unshift");var n=s.unshift.apply(i,arguments);this.rebuildTree(e),t.unblock("tree-unshift")}return n}}),s.shift=i.shift,Object.defineProperty(i,"shift",{enumerable:!1,configurable:!0,value:()=>{if(!t.blocked){t.block("tree-shift");var n=s.shift.call(i);this.rebuildTree(e),t.unblock("tree-shift")}return n}}),s.pop=i.pop,Object.defineProperty(i,"pop",{enumerable:!1,configurable:!0,value:()=>{if(!t.blocked){t.block("tree-pop");var n=s.pop.call(i);this.rebuildTree(e),t.unblock("tree-pop")}return n}}),s.splice=i.splice,Object.defineProperty(i,"splice",{enumerable:!1,configurable:!0,value:()=>{if(!t.blocked){t.block("tree-splice");var n=s.splice.apply(i,arguments);this.rebuildTree(e),t.unblock("tree-splice")}return n}}))}rebuildTree(e){this.table.modules.dataTree.initializeRow(e),this.table.modules.dataTree.layoutRow(e),this.table.rowManager.refreshActiveData("tree",!1,!0)}watchKey(e,t,i){var s=this,n=Object.getOwnPropertyDescriptor(t,i),r=t[i],o=this.currentVersion;Object.defineProperty(t,i,{set:a=>{if(r=a,!s.blocked&&o===s.currentVersion){s.block("key");var h={};h[i]=a,e.updateData(h),s.unblock("key")}n.set&&n.set(a)},get:()=>(n.get&&n.get(),r)})}unwatchRow(e){var t=e.getData();for(var i in t)Object.defineProperty(t,i,{value:t[i]})}block(e){this.blocked||(this.blocked=e)}unblock(e){this.blocked===e&&(this.blocked=!1)}}b(ht,"moduleName","reactiveData");class dt extends w{constructor(e){super(e),this.startColumn=!1,this.startX=!1,this.startWidth=!1,this.latestX=!1,this.handle=null,this.initialNextColumn=null,this.nextColumn=null,this.initialized=!1,this.registerColumnOption("resizable",!0),this.registerTableOption("resizableColumnFit",!1),this.registerTableOption("resizableColumnGuide",!1)}initialize(){this.subscribe("column-rendered",this.layoutColumnHeader.bind(this))}initializeEventWatchers(){this.initialized||(this.subscribe("cell-rendered",this.layoutCellHandles.bind(this)),this.subscribe("cell-delete",this.deInitializeComponent.bind(this)),this.subscribe("cell-height",this.resizeHandle.bind(this)),this.subscribe("column-moved",this.columnLayoutUpdated.bind(this)),this.subscribe("column-hide",this.deInitializeColumn.bind(this)),this.subscribe("column-show",this.columnLayoutUpdated.bind(this)),this.subscribe("column-width",this.columnWidthUpdated.bind(this)),this.subscribe("column-delete",this.deInitializeComponent.bind(this)),this.subscribe("column-height",this.resizeHandle.bind(this)),this.initialized=!0)}layoutCellHandles(e){e.row.type==="row"&&(this.deInitializeComponent(e),this.initializeColumn("cell",e,e.column,e.element))}layoutColumnHeader(e){e.definition.resizable&&(this.initializeEventWatchers(),this.deInitializeComponent(e),this.initializeColumn("header",e,e,e.element))}columnLayoutUpdated(e){var t=e.prevColumn();this.reinitializeColumn(e),t&&this.reinitializeColumn(t)}columnWidthUpdated(e){e.modules.frozen&&(this.table.modules.frozenColumns.leftColumns.includes(e)?this.table.modules.frozenColumns.leftColumns.forEach(t=>{this.reinitializeColumn(t)}):this.table.modules.frozenColumns.rightColumns.includes(e)&&this.table.modules.frozenColumns.rightColumns.forEach(t=>{this.reinitializeColumn(t)}))}frozenColumnOffset(e){var t=!1;return e.modules.frozen&&(t=e.modules.frozen.marginValue,e.modules.frozen.position==="left"?t+=e.getWidth()-3:t&&(t-=3)),t!==!1?t+"px":!1}reinitializeColumn(e){var t=this.frozenColumnOffset(e);e.cells.forEach(i=>{i.modules.resize&&i.modules.resize.handleEl&&(t&&(i.modules.resize.handleEl.style[e.modules.frozen.position]=t,i.modules.resize.handleEl.style["z-index"]=11),i.element.after(i.modules.resize.handleEl))}),e.modules.resize&&e.modules.resize.handleEl&&(t&&(e.modules.resize.handleEl.style[e.modules.frozen.position]=t),e.element.after(e.modules.resize.handleEl))}initializeColumn(e,t,i,s){var n=this,r=!1,o=i.definition.resizable,a={},h=i.getLastColumn();if(e==="header"&&(r=i.definition.formatter=="textarea"||i.definition.variableHeight,a={variableHeight:r}),(o===!0||o==e)&&this._checkResizability(h)){var d=document.createElement("span");d.className="tabulator-col-resize-handle",d.addEventListener("click",function(c){c.stopPropagation()});var u=function(c){n.startColumn=i,n.initialNextColumn=n.nextColumn=h.nextColumn(),n._mouseDown(c,h,d)};d.addEventListener("mousedown",u),d.addEventListener("touchstart",u,{passive:!0}),d.addEventListener("dblclick",c=>{var f=h.getWidth();c.stopPropagation(),h.reinitializeWidth(!0),f!==h.getWidth()&&(n.dispatch("column-resized",h),n.dispatchExternal("columnResized",h.getComponent()))}),i.modules.frozen&&(d.style.position="sticky",d.style[i.modules.frozen.position]=this.frozenColumnOffset(i)),a.handleEl=d,s.parentNode&&i.visible&&s.after(d)}t.modules.resize=a}deInitializeColumn(e){this.deInitializeComponent(e),e.cells.forEach(t=>{this.deInitializeComponent(t)})}deInitializeComponent(e){var t;e.modules.resize&&(t=e.modules.resize.handleEl,t&&t.parentElement&&t.parentElement.removeChild(t))}resizeHandle(e,t){e.modules.resize&&e.modules.resize.handleEl&&(e.modules.resize.handleEl.style.height=t)}resize(e,t){var i=typeof e.clientX>"u"?e.touches[0].clientX:e.clientX,s=i-this.startX,n=i-this.latestX,r,o;if(this.latestX=i,this.table.rtl&&(s=-s,n=-n),r=t.width==t.minWidth||t.width==t.maxWidth,t.setWidth(this.startWidth+s),o=t.width==t.minWidth||t.width==t.maxWidth,n<0&&(this.nextColumn=this.initialNextColumn),this.table.options.resizableColumnFit&&this.nextColumn&&!(r&&o)){let a=this.nextColumn.getWidth();n>0&&a<=this.nextColumn.minWidth&&(this.nextColumn=this.nextColumn.nextColumn()),this.nextColumn&&this.nextColumn.setWidth(this.nextColumn.getWidth()-n)}this.table.columnManager.rerenderColumns(!0),!this.table.browserSlow&&t.modules.resize&&t.modules.resize.variableHeight&&t.checkCellHeights()}calcGuidePosition(e,t,i){var s=typeof e.clientX>"u"?e.touches[0].clientX:e.clientX,n=i.getBoundingClientRect().x-this.table.element.getBoundingClientRect().x,r=this.table.element.getBoundingClientRect().x,o=t.element.getBoundingClientRect().left-r,a=s-this.startX,h=Math.max(n+a,o+t.minWidth);return t.maxWidth&&(h=Math.min(h,o+t.maxWidth)),h}_checkResizability(e){return e.definition.resizable}_mouseDown(e,t,i){var s=this,n;this.dispatchExternal("columnResizing",t.getComponent()),s.table.options.resizableColumnGuide&&(n=document.createElement("span"),n.classList.add("tabulator-col-resize-guide"),s.table.element.appendChild(n),setTimeout(()=>{n.style.left=s.calcGuidePosition(e,t,i)+"px"})),s.table.element.classList.add("tabulator-block-select");function r(a){s.table.options.resizableColumnGuide?n.style.left=s.calcGuidePosition(a,t,i)+"px":s.resize(a,t)}function o(a){s.table.options.resizableColumnGuide&&(s.resize(a,t),n.remove()),s.startColumn.modules.edit&&(s.startColumn.modules.edit.blocked=!1),s.table.browserSlow&&t.modules.resize&&t.modules.resize.variableHeight&&t.checkCellHeights(),document.body.removeEventListener("mouseup",o),document.body.removeEventListener("mousemove",r),i.removeEventListener("touchmove",r),i.removeEventListener("touchend",o),s.table.element.classList.remove("tabulator-block-select"),s.startWidth!==t.getWidth()&&(s.table.columnManager.verticalAlignHeaders(),s.dispatch("column-resized",t),s.dispatchExternal("columnResized",t.getComponent()))}e.stopPropagation(),s.startColumn.modules.edit&&(s.startColumn.modules.edit.blocked=!0),s.startX=typeof e.clientX>"u"?e.touches[0].clientX:e.clientX,s.latestX=s.startX,s.startWidth=t.getWidth(),document.body.addEventListener("mousemove",r),document.body.addEventListener("mouseup",o),i.addEventListener("touchmove",r,{passive:!0}),i.addEventListener("touchend",o)}}b(dt,"moduleName","resizeColumns");class ut extends w{constructor(e){super(e),this.startColumn=!1,this.startY=!1,this.startHeight=!1,this.handle=null,this.prevHandle=null,this.registerTableOption("resizableRows",!1),this.registerTableOption("resizableRowGuide",!1)}initialize(){this.table.options.resizableRows&&this.subscribe("row-layout-after",this.initializeRow.bind(this))}initializeRow(e){var t=this,i=e.getElement(),s=document.createElement("div");s.className="tabulator-row-resize-handle";var n=document.createElement("div");n.className="tabulator-row-resize-handle prev",s.addEventListener("click",function(a){a.stopPropagation()});var r=function(a){t.startRow=e,t._mouseDown(a,e,s)};s.addEventListener("mousedown",r),s.addEventListener("touchstart",r,{passive:!0}),n.addEventListener("click",function(a){a.stopPropagation()});var o=function(a){var h=t.table.rowManager.prevDisplayRow(e);h&&(t.startRow=h,t._mouseDown(a,h,n))};n.addEventListener("mousedown",o),n.addEventListener("touchstart",o,{passive:!0}),i.appendChild(s),i.appendChild(n)}resize(e,t){t.setHeight(this.startHeight+((typeof e.screenY>"u"?e.touches[0].screenY:e.screenY)-this.startY))}calcGuidePosition(e,t,i){var s=typeof e.screenY>"u"?e.touches[0].screenY:e.screenY,n=i.getBoundingClientRect().y-this.table.element.getBoundingClientRect().y,r=this.table.element.getBoundingClientRect().y,o=t.element.getBoundingClientRect().top-r,a=s-this.startY;return Math.max(n+a,o)}_mouseDown(e,t,i){var s=this,n;s.dispatchExternal("rowResizing",t.getComponent()),s.table.options.resizableRowGuide&&(n=document.createElement("span"),n.classList.add("tabulator-row-resize-guide"),s.table.element.appendChild(n),setTimeout(()=>{n.style.top=s.calcGuidePosition(e,t,i)+"px"})),s.table.element.classList.add("tabulator-block-select");function r(a){s.table.options.resizableRowGuide?n.style.top=s.calcGuidePosition(a,t,i)+"px":s.resize(a,t)}function o(a){s.table.options.resizableRowGuide&&(s.resize(a,t),n.remove()),document.body.removeEventListener("mouseup",r),document.body.removeEventListener("mousemove",r),i.removeEventListener("touchmove",r),i.removeEventListener("touchend",o),s.table.element.classList.remove("tabulator-block-select"),s.dispatchExternal("rowResized",t.getComponent())}e.stopPropagation(),s.startY=typeof e.screenY>"u"?e.touches[0].screenY:e.screenY,s.startHeight=t.getHeight(),document.body.addEventListener("mousemove",r),document.body.addEventListener("mouseup",o),i.addEventListener("touchmove",r,{passive:!0}),i.addEventListener("touchend",o)}}b(ut,"moduleName","resizeRows");class ct extends w{constructor(e){super(e),this.binding=!1,this.visibilityObserver=!1,this.resizeObserver=!1,this.containerObserver=!1,this.tableHeight=0,this.tableWidth=0,this.containerHeight=0,this.containerWidth=0,this.autoResize=!1,this.visible=!1,this.initialized=!1,this.initialRedraw=!1,this.registerTableOption("autoResize",!0)}initialize(){if(this.table.options.autoResize){var e=this.table,t;this.tableHeight=e.element.clientHeight,this.tableWidth=e.element.clientWidth,e.element.parentNode&&(this.containerHeight=e.element.parentNode.clientHeight,this.containerWidth=e.element.parentNode.clientWidth),typeof IntersectionObserver<"u"&&typeof ResizeObserver<"u"&&e.rowManager.getRenderMode()==="virtual"?(this.initializeVisibilityObserver(),this.autoResize=!0,this.resizeObserver=new ResizeObserver(i=>{if(!e.browserMobile||e.browserMobile&&(!e.modules.edit||e.modules.edit&&!e.modules.edit.currentCell)){var s=Math.floor(i[0].contentRect.height),n=Math.floor(i[0].contentRect.width);(this.tableHeight!=s||this.tableWidth!=n)&&(this.tableHeight=s,this.tableWidth=n,e.element.parentNode&&(this.containerHeight=e.element.parentNode.clientHeight,this.containerWidth=e.element.parentNode.clientWidth),this.redrawTable())}}),this.resizeObserver.observe(e.element),t=window.getComputedStyle(e.element),this.table.element.parentNode&&!this.table.rowManager.fixedHeight&&(t.getPropertyValue("max-height")||t.getPropertyValue("min-height"))&&(this.containerObserver=new ResizeObserver(i=>{if(!e.browserMobile||e.browserMobile&&(!e.modules.edit||e.modules.edit&&!e.modules.edit.currentCell)){var s=Math.floor(i[0].contentRect.height),n=Math.floor(i[0].contentRect.width);(this.containerHeight!=s||this.containerWidth!=n)&&(this.containerHeight=s,this.containerWidth=n,this.tableHeight=e.element.clientHeight,this.tableWidth=e.element.clientWidth),this.redrawTable()}}),this.containerObserver.observe(this.table.element.parentNode)),this.subscribe("table-resize",this.tableResized.bind(this))):(this.binding=function(){(!e.browserMobile||e.browserMobile&&(!e.modules.edit||e.modules.edit&&!e.modules.edit.currentCell))&&(e.columnManager.rerenderColumns(!0),e.redraw())},window.addEventListener("resize",this.binding)),this.subscribe("table-destroy",this.clearBindings.bind(this))}}initializeVisibilityObserver(){this.visibilityObserver=new IntersectionObserver(e=>{this.visible=e[0].isIntersecting,this.initialized?this.visible&&(this.redrawTable(this.initialRedraw),this.initialRedraw=!1):(this.initialized=!0,this.initialRedraw=!this.visible)}),this.visibilityObserver.observe(this.table.element)}redrawTable(e){this.initialized&&this.visible&&(this.table.columnManager.rerenderColumns(!0),this.table.redraw(e))}tableResized(){this.table.rowManager.redraw()}clearBindings(){this.binding&&window.removeEventListener("resize",this.binding),this.resizeObserver&&this.resizeObserver.unobserve(this.table.element),this.visibilityObserver&&this.visibilityObserver.unobserve(this.table.element),this.containerObserver&&this.containerObserver.unobserve(this.table.element.parentNode)}}b(ct,"moduleName","resizeTable");function qi(l,e,t){var i=document.createElement("div"),s=l.getRow()._row.modules.responsiveLayout;i.classList.add("tabulator-responsive-collapse-toggle"),i.innerHTML=` + + + + + + +`,l.getElement().classList.add("tabulator-row-handle");function n(r){var o=s.element;s.open=r,o&&(s.open?(i.classList.add("open"),o.style.display=""):(i.classList.remove("open"),o.style.display="none"))}return i.addEventListener("click",function(r){r.stopImmediatePropagation(),n(!s.open),l.getTable().rowManager.adjustTableSize()}),n(s.open),i}var Yi={format:{formatters:{responsiveCollapse:qi}}};class De extends w{constructor(e){super(e),this.columns=[],this.hiddenColumns=[],this.mode="",this.index=0,this.collapseFormatter=[],this.collapseStartOpen=!0,this.collapseHandleColumn=!1,this.registerTableOption("responsiveLayout",!1),this.registerTableOption("responsiveLayoutCollapseStartOpen",!0),this.registerTableOption("responsiveLayoutCollapseUseFormatters",!0),this.registerTableOption("responsiveLayoutCollapseFormatter",!1),this.registerColumnOption("responsive")}initialize(){this.table.options.responsiveLayout&&(this.subscribe("column-layout",this.initializeColumn.bind(this)),this.subscribe("column-show",this.updateColumnVisibility.bind(this)),this.subscribe("column-hide",this.updateColumnVisibility.bind(this)),this.subscribe("columns-loaded",this.initializeResponsivity.bind(this)),this.subscribe("column-moved",this.initializeResponsivity.bind(this)),this.subscribe("column-add",this.initializeResponsivity.bind(this)),this.subscribe("column-delete",this.initializeResponsivity.bind(this)),this.subscribe("table-redrawing",this.tableRedraw.bind(this)),this.table.options.responsiveLayout==="collapse"&&(this.subscribe("row-data-changed",this.generateCollapsedRowContent.bind(this)),this.subscribe("row-init",this.initializeRow.bind(this)),this.subscribe("row-layout",this.layoutRow.bind(this))))}tableRedraw(e){["fitColumns","fitDataStretch"].indexOf(this.layoutMode())===-1&&(e||this.update())}initializeResponsivity(){var e=[];this.mode=this.table.options.responsiveLayout,this.collapseFormatter=this.table.options.responsiveLayoutCollapseFormatter||this.formatCollapsedData,this.collapseStartOpen=this.table.options.responsiveLayoutCollapseStartOpen,this.hiddenColumns=[],this.collapseFormatter&&(this.collapseFormatter=this.collapseFormatter.bind(this.table)),this.table.columnManager.columnsByIndex.forEach((t,i)=>{t.modules.responsive&&t.modules.responsive.order&&t.modules.responsive.visible&&(t.modules.responsive.index=i,e.push(t),!t.visible&&this.mode==="collapse"&&this.hiddenColumns.push(t))}),e=e.reverse(),e=e.sort((t,i)=>{var s=i.modules.responsive.order-t.modules.responsive.order;return s||i.modules.responsive.index-t.modules.responsive.index}),this.columns=e,this.mode==="collapse"&&this.generateCollapsedContent();for(let t of this.table.columnManager.columnsByIndex)if(t.definition.formatter=="responsiveCollapse"){this.collapseHandleColumn=t;break}this.collapseHandleColumn&&(this.hiddenColumns.length?this.collapseHandleColumn.show():this.collapseHandleColumn.hide())}initializeColumn(e){var t=e.getDefinition();e.modules.responsive={order:typeof t.responsive>"u"?1:t.responsive,visible:t.visible!==!1}}initializeRow(e){var t;e.type!=="calc"&&(t=document.createElement("div"),t.classList.add("tabulator-responsive-collapse"),e.modules.responsiveLayout={element:t,open:this.collapseStartOpen},this.collapseStartOpen||(t.style.display="none"))}layoutRow(e){var t=e.getElement();e.modules.responsiveLayout&&(t.appendChild(e.modules.responsiveLayout.element),this.generateCollapsedRowContent(e))}updateColumnVisibility(e,t){!t&&e.modules.responsive&&(e.modules.responsive.visible=e.visible,this.initializeResponsivity())}hideColumn(e){var t=this.hiddenColumns.length;e.hide(!1,!0),this.mode==="collapse"&&(this.hiddenColumns.unshift(e),this.generateCollapsedContent(),this.collapseHandleColumn&&!t&&this.collapseHandleColumn.show())}showColumn(e){var t;e.show(!1,!0),e.setWidth(e.getWidth()),this.mode==="collapse"&&(t=this.hiddenColumns.indexOf(e),t>-1&&this.hiddenColumns.splice(t,1),this.generateCollapsedContent(),this.collapseHandleColumn&&!this.hiddenColumns.length&&this.collapseHandleColumn.hide())}update(){for(var e=!0;e;){let t=this.table.modules.layout.getMode()=="fitColumns"?this.table.columnManager.getFlexBaseWidth():this.table.columnManager.getWidth(),i=(this.table.options.headerVisible?this.table.columnManager.element.clientWidth:this.table.element.clientWidth)-t;if(i<0){let s=this.columns[this.index];s?(this.hideColumn(s),this.index++):e=!1}else{let s=this.columns[this.index-1];s&&i>0&&i>=s.getWidth()?(this.showColumn(s),this.index--):e=!1}this.table.rowManager.activeRowsCount||this.table.rowManager.renderEmptyScroll()}}generateCollapsedContent(){var e=this.table.rowManager.getDisplayRows();e.forEach(t=>{this.generateCollapsedRowContent(t)})}generateCollapsedRowContent(e){var t,i;if(e.modules.responsiveLayout){for(t=e.modules.responsiveLayout.element;t.firstChild;)t.removeChild(t.firstChild);i=this.collapseFormatter(this.generateCollapsedRowData(e)),i&&t.appendChild(i),e.calcHeight(!0)}}generateCollapsedRowData(e){var t=e.getData(),i=[],s;return this.hiddenColumns.forEach(n=>{var r=n.getFieldValue(t);if(n.definition.title&&n.field)if(n.modules.format&&this.table.options.responsiveLayoutCollapseUseFormatters){let o=function(a){a()};s={value:!1,data:{},getValue:function(){return r},getData:function(){return t},getType:function(){return"cell"},getElement:function(){return document.createElement("div")},getRow:function(){return e.getComponent()},getColumn:function(){return n.getComponent()},getTable:()=>this.table},i.push({field:n.field,title:n.definition.title,value:n.modules.format.formatter.call(this.table.modules.format,s,n.modules.format.params,o)})}else i.push({field:n.field,title:n.definition.title,value:r})}),i}formatCollapsedData(e){var t=document.createElement("table");return e.forEach(i=>{var s=document.createElement("tr"),n=document.createElement("td"),r=document.createElement("td"),o,a=document.createElement("strong");n.appendChild(a),this.modules.localize.bind("columns|"+i.field,function(h){a.innerHTML=h||i.title}),i.value instanceof Node?(o=document.createElement("div"),o.appendChild(i.value),r.appendChild(o)):r.innerHTML=i.value,s.appendChild(n),s.appendChild(r),t.appendChild(s)}),Object.keys(e).length?t:""}}b(De,"moduleName","responsiveLayout"),b(De,"moduleExtensions",Yi);function $i(l,e,t){var i=document.createElement("input"),s=!1;if(i.type="checkbox",i.setAttribute("aria-label","Select Row"),this.table.modExists("selectRow",!0))if(i.addEventListener("click",r=>{r.stopPropagation()}),typeof l.getRow=="function"){var n=l.getRow();n instanceof oe?(i.addEventListener("change",r=>{this.table.options.selectableRowsRangeMode==="click"&&s?s=!1:n.toggleSelect()}),this.table.options.selectableRowsRangeMode==="click"&&i.addEventListener("click",r=>{s=!0,this.table.modules.selectRow.handleComplexRowClick(n._row,r)}),i.checked=n.isSelected&&n.isSelected(),this.table.modules.selectRow.registerRowSelectCheckbox(n,i)):i=""}else i.addEventListener("change",r=>{this.table.modules.selectRow.selectedRows.length?this.table.deselectRow():this.table.selectRow(e.rowRange)}),this.table.modules.selectRow.registerHeaderSelectCheckbox(i);return i}var Qi={format:{formatters:{rowSelection:$i}}};class ze extends w{constructor(e){super(e),this.selecting=!1,this.lastClickedRow=!1,this.selectPrev=[],this.selectedRows=[],this.headerCheckboxElement=null,this.registerTableOption("selectableRows","highlight"),this.registerTableOption("selectableRowsRangeMode","drag"),this.registerTableOption("selectableRowsRollingSelection",!0),this.registerTableOption("selectableRowsPersistence",!0),this.registerTableOption("selectableRowsCheck",function(t,i){return!0}),this.registerTableFunction("selectRow",this.selectRows.bind(this)),this.registerTableFunction("deselectRow",this.deselectRows.bind(this)),this.registerTableFunction("toggleSelectRow",this.toggleRow.bind(this)),this.registerTableFunction("getSelectedRows",this.getSelectedRows.bind(this)),this.registerTableFunction("getSelectedData",this.getSelectedData.bind(this)),this.registerComponentFunction("row","select",this.selectRows.bind(this)),this.registerComponentFunction("row","deselect",this.deselectRows.bind(this)),this.registerComponentFunction("row","toggleSelect",this.toggleRow.bind(this)),this.registerComponentFunction("row","isSelected",this.isRowSelected.bind(this))}initialize(){this.deprecatedOptionsCheck(),this.table.options.selectableRows==="highlight"&&this.table.options.selectableRange&&(this.table.options.selectableRows=!1),this.table.options.selectableRows!==!1&&(this.subscribe("row-init",this.initializeRow.bind(this)),this.subscribe("row-deleting",this.rowDeleted.bind(this)),this.subscribe("rows-wipe",this.clearSelectionData.bind(this)),this.subscribe("rows-retrieve",this.rowRetrieve.bind(this)),this.table.options.selectableRows&&!this.table.options.selectableRowsPersistence&&this.subscribe("data-refreshing",this.deselectRows.bind(this)))}deprecatedOptionsCheck(){}rowRetrieve(e,t){return e==="selected"?this.selectedRows:t}rowDeleted(e){this._deselectRow(e,!0)}clearSelectionData(e){var t=this.selectedRows.length;this.selecting=!1,this.lastClickedRow=!1,this.selectPrev=[],this.selectedRows=[],t&&e!==!0&&this._rowSelectionChanged()}initializeRow(e){var t=this,i=t.checkRowSelectability(e),s=e.getElement(),n=function(){setTimeout(function(){t.selecting=!1},50),document.body.removeEventListener("mouseup",n)};e.modules.select={selected:!1},s.classList.toggle("tabulator-selectable",i),s.classList.toggle("tabulator-unselectable",!i),t.checkRowSelectability(e)&&t.table.options.selectableRows&&t.table.options.selectableRows!="highlight"&&(t.table.options.selectableRowsRangeMode==="click"?s.addEventListener("click",this.handleComplexRowClick.bind(this,e)):(s.addEventListener("click",function(r){(!t.table.modExists("edit")||!t.table.modules.edit.getCurrentCell())&&t.table._clearSelection(),t.selecting||t.toggleRow(e)}),s.addEventListener("mousedown",function(r){if(r.shiftKey)return t.table._clearSelection(),t.selecting=!0,t.selectPrev=[],document.body.addEventListener("mouseup",n),document.body.addEventListener("keyup",n),t.toggleRow(e),!1}),s.addEventListener("mouseenter",function(r){t.selecting&&(t.table._clearSelection(),t.toggleRow(e),t.selectPrev[1]==e&&t.toggleRow(t.selectPrev[0]))}),s.addEventListener("mouseout",function(r){t.selecting&&(t.table._clearSelection(),t.selectPrev.unshift(e))})))}handleComplexRowClick(e,t){if(t.shiftKey){this.table._clearSelection(),this.lastClickedRow=this.lastClickedRow||e;var i=this.table.rowManager.getDisplayRowIndex(this.lastClickedRow),s=this.table.rowManager.getDisplayRowIndex(e),n=i<=s?i:s,r=i>=s?i:s,o=this.table.rowManager.getDisplayRows().slice(0),a=o.splice(n,r-n+1);t.ctrlKey||t.metaKey?(a.forEach(h=>{h!==this.lastClickedRow&&(this.table.options.selectableRows!==!0&&!this.isRowSelected(e)?this.selectedRows.lengththis.table.options.selectableRows&&(a=a.slice(0,this.table.options.selectableRows)),this.selectRows(a)),this.table._clearSelection()}else t.ctrlKey||t.metaKey?(this.toggleRow(e),this.lastClickedRow=e):(this.deselectRows(void 0,!0),this.selectRows(e),this.lastClickedRow=e)}checkRowSelectability(e){return e&&e.type==="row"?this.table.options.selectableRowsCheck.call(this.table,e.getComponent()):!1}toggleRow(e){this.checkRowSelectability(e)&&(e.modules.select&&e.modules.select.selected?this._deselectRow(e):this._selectRow(e))}selectRows(e){var t=[],i,s;switch(typeof e){case"undefined":i=this.table.rowManager.rows;break;case"number":i=this.table.rowManager.findRow(e);break;case"string":i=this.table.rowManager.findRow(e),i||(i=this.table.rowManager.getRows(e));break;default:i=e;break}Array.isArray(i)?i.length&&(i.forEach(n=>{s=this._selectRow(n,!0,!0),s&&t.push(s)}),this._rowSelectionChanged(!1,t)):i&&this._selectRow(i,!1,!0)}_selectRow(e,t,i){if(!isNaN(this.table.options.selectableRows)&&this.table.options.selectableRows!==!0&&!i&&this.selectedRows.length>=this.table.options.selectableRows)if(this.table.options.selectableRowsRollingSelection)this._deselectRow(this.selectedRows[0]);else return!1;var s=this.table.rowManager.findRow(e);if(s){if(this.selectedRows.indexOf(s)==-1)return s.getElement().classList.add("tabulator-selected"),s.modules.select||(s.modules.select={}),s.modules.select.selected=!0,s.modules.select.checkboxEl&&(s.modules.select.checkboxEl.checked=!0),this.selectedRows.push(s),this.table.options.dataTreeSelectPropagate&&this.childRowSelection(s,!0),this.dispatchExternal("rowSelected",s.getComponent()),this._rowSelectionChanged(t,s),s}else t||console.warn("Selection Error - No such row found, ignoring selection:"+e)}isRowSelected(e){return this.selectedRows.indexOf(e)!==-1}deselectRows(e,t){var i=[],s,n;switch(typeof e){case"undefined":s=Object.assign([],this.selectedRows);break;case"number":s=this.table.rowManager.findRow(e);break;case"string":s=this.table.rowManager.findRow(e),s||(s=this.table.rowManager.getRows(e));break;default:s=e;break}Array.isArray(s)?s.length&&(s.forEach(r=>{n=this._deselectRow(r,!0,!0),n&&i.push(n)}),this._rowSelectionChanged(t,[],i)):s&&this._deselectRow(s,t,!0)}_deselectRow(e,t){var i=this,s=i.table.rowManager.findRow(e),n,r;if(s){if(n=i.selectedRows.findIndex(function(o){return o==s}),n>-1)return r=s.getElement(),r&&r.classList.remove("tabulator-selected"),s.modules.select||(s.modules.select={}),s.modules.select.selected=!1,s.modules.select.checkboxEl&&(s.modules.select.checkboxEl.checked=!1),i.selectedRows.splice(n,1),this.table.options.dataTreeSelectPropagate&&this.childRowSelection(s,!1),this.dispatchExternal("rowDeselected",s.getComponent()),i._rowSelectionChanged(t,void 0,s),s}else t||console.warn("Deselection Error - No such row found, ignoring selection:"+e)}getSelectedData(){var e=[];return this.selectedRows.forEach(function(t){e.push(t.getData())}),e}getSelectedRows(){var e=[];return this.selectedRows.forEach(function(t){e.push(t.getComponent())}),e}_rowSelectionChanged(e,t=[],i=[]){this.headerCheckboxElement&&(this.selectedRows.length===0?(this.headerCheckboxElement.checked=!1,this.headerCheckboxElement.indeterminate=!1):this.table.rowManager.rows.length===this.selectedRows.length?(this.headerCheckboxElement.checked=!0,this.headerCheckboxElement.indeterminate=!1):(this.headerCheckboxElement.indeterminate=!0,this.headerCheckboxElement.checked=!1)),e||(Array.isArray(t)||(t=[t]),t=t.map(s=>s.getComponent()),Array.isArray(i)||(i=[i]),i=i.map(s=>s.getComponent()),this.dispatchExternal("rowSelectionChanged",this.getSelectedData(),this.getSelectedRows(),t,i))}registerRowSelectCheckbox(e,t){e._row.modules.select||(e._row.modules.select={}),e._row.modules.select.checkboxEl=t}registerHeaderSelectCheckbox(e){this.headerCheckboxElement=e}childRowSelection(e,t){var i=this.table.modules.dataTree.getChildren(e,!0,!0);if(t)for(let s of i)this._selectRow(s,!0);else for(let s of i)this._deselectRow(s,!0)}}b(ze,"moduleName","selectRow"),b(ze,"moduleExtensions",Qi);class Zi{constructor(e){return this._range=e,new Proxy(this,{get:function(t,i,s){return typeof t[i]<"u"?t[i]:t._range.table.componentFunctionBinder.handle("range",t._range,i)}})}getElement(){return this._range.element}getData(){return this._range.getData()}getCells(){return this._range.getCells(!0,!0)}getStructuredCells(){return this._range.getStructuredCells()}getRows(){return this._range.getRows().map(e=>e.getComponent())}getColumns(){return this._range.getColumns().map(e=>e.getComponent())}getBounds(){return this._range.getBounds()}getTopEdge(){return this._range.top}getBottomEdge(){return this._range.bottom}getLeftEdge(){return this._range.left}getRightEdge(){return this._range.right}setBounds(e,t){this._range.destroyedGuard("setBounds")&&this._range.setBounds(e&&e._cell,t&&t._cell)}setStartBound(e){this._range.destroyedGuard("setStartBound")&&(this._range.setEndBound(e&&e._cell),this._range.rangeManager.layoutElement())}setEndBound(e){this._range.destroyedGuard("setEndBound")&&(this._range.setEndBound(e&&e._cell),this._range.rangeManager.layoutElement())}clearValues(){this._range.destroyedGuard("clearValues")&&this._range.clearValues()}remove(){this._range.destroyedGuard("remove")&&this._range.destroy(!0)}}class es extends M{constructor(e,t,i,s){super(e),this.rangeManager=t,this.element=null,this.initialized=!1,this.initializing={start:!1,end:!1},this.destroyed=!1,this.top=0,this.bottom=0,this.left=0,this.right=0,this.table=e,this.start={row:0,col:0},this.end={row:0,col:0},this.rangeManager.rowHeader&&(this.left=1,this.right=1,this.start.col=1,this.end.col=1),this.initElement(),setTimeout(()=>{this.initBounds(i,s)})}initElement(){this.element=document.createElement("div"),this.element.classList.add("tabulator-range")}initBounds(e,t){this._updateMinMax(),e&&this.setBounds(e,t||e)}setStart(e,t){(this.start.row!==e||this.start.col!==t)&&(this.start.row=e,this.start.col=t,this.initializing.start=!0,this._updateMinMax())}setEnd(e,t){(this.end.row!==e||this.end.col!==t)&&(this.end.row=e,this.end.col=t,this.initializing.end=!0,this._updateMinMax())}setBounds(e,t,i){e&&this.setStartBound(e),this.setEndBound(t||e),this.rangeManager.layoutElement(i)}setStartBound(e){var t,i;e.type==="column"?this.rangeManager.columnSelection&&this.setStart(0,e.getPosition()-1):(t=e.row.position-1,i=e.column.getPosition()-1,e.column===this.rangeManager.rowHeader?this.setStart(t,1):this.setStart(t,i))}setEndBound(e){var t=this._getTableRows().length,i,s,n;e.type==="column"?this.rangeManager.columnSelection&&(this.rangeManager.selecting==="column"?this.setEnd(t-1,e.getPosition()-1):this.rangeManager.selecting==="cell"&&this.setEnd(0,e.getPosition()-1)):(i=e.row.position-1,s=e.column.getPosition()-1,n=e.column===this.rangeManager.rowHeader,this.rangeManager.selecting==="row"?this.setEnd(i,this._getTableColumns().length-1):this.rangeManager.selecting!=="row"&&n?this.setEnd(i,0):this.rangeManager.selecting==="column"?this.setEnd(t-1,s):this.setEnd(i,s))}_updateMinMax(){this.top=Math.min(this.start.row,this.end.row),this.bottom=Math.max(this.start.row,this.end.row),this.left=Math.min(this.start.col,this.end.col),this.right=Math.max(this.start.col,this.end.col),this.initialized?this.dispatchExternal("rangeChanged",this.getComponent()):this.initializing.start&&this.initializing.end&&(this.initialized=!0,this.dispatchExternal("rangeAdded",this.getComponent()))}_getTableColumns(){return this.table.columnManager.getVisibleColumnsByIndex()}_getTableRows(){return this.table.rowManager.getDisplayRows().filter(e=>e.type==="row")}layout(){var e=this.table.rowManager.renderer.vDomTop,t=this.table.rowManager.renderer.vDomBottom,i=this.table.columnManager.renderer.leftCol,s=this.table.columnManager.renderer.rightCol,n,r,o,a,h,d,u,c,f,g;this.table.options.renderHorizontal==="virtual"&&this.rangeManager.rowHeader&&(s+=1),e==null&&(e=0),t==null&&(t=1/0),i==null&&(i=0),s==null&&(s=1/0),this.overlaps(i,e,s,t)&&(n=Math.max(this.top,e),r=Math.min(this.bottom,t),o=Math.max(this.left,i),a=Math.min(this.right,s),h=this.rangeManager.getCell(n,o),d=this.rangeManager.getCell(r,a),u=h.getElement(),c=d.getElement(),f=h.row.getElement(),g=d.row.getElement(),this.element.classList.add("tabulator-range-active"),this.table.rtl?(this.element.style.right=f.offsetWidth-u.offsetLeft-u.offsetWidth+"px",this.element.style.width=u.offsetLeft+u.offsetWidth-c.offsetLeft+"px"):(this.element.style.left=f.offsetLeft+u.offsetLeft+"px",this.element.style.width=c.offsetLeft+c.offsetWidth-u.offsetLeft+"px"),this.element.style.top=f.offsetTop+"px",this.element.style.height=g.offsetTop+g.offsetHeight-f.offsetTop+"px")}atTopLeft(e){return e.row.position-1===this.top&&e.column.getPosition()-1===this.left}atBottomRight(e){return e.row.position-1===this.bottom&&e.column.getPosition()-1===this.right}occupies(e){return this.occupiesRow(e.row)&&this.occupiesColumn(e.column)}occupiesRow(e){return this.top<=e.position-1&&e.position-1<=this.bottom}occupiesColumn(e){return this.left<=e.getPosition()-1&&e.getPosition()-1<=this.right}overlaps(e,t,i,s){return!(this.left>i||e>this.right||this.top>s||t>this.bottom)}getData(){var e=[],t=this.getRows(),i=this.getColumns();return t.forEach(s=>{var n=s.getData(),r={};i.forEach(o=>{r[o.field]=n[o.field]}),e.push(r)}),e}getCells(e,t){var i=[],s=this.getRows(),n=this.getColumns();return e?i=s.map(r=>{var o=[];return r.getCells().forEach(a=>{n.includes(a.column)&&o.push(t?a.getComponent():a)}),o}):s.forEach(r=>{r.getCells().forEach(o=>{n.includes(o.column)&&i.push(t?o.getComponent():o)})}),i}getStructuredCells(){return this.getCells(!0,!0)}getRows(){return this._getTableRows().slice(this.top,this.bottom+1)}getColumns(){return this._getTableColumns().slice(this.left,this.right+1)}clearValues(){var e=this.getCells(),t=this.table.options.selectableRangeClearCellsValue;this.table.blockRedraw(),e.forEach(i=>{i.setValue(t)}),this.table.restoreRedraw()}getBounds(e){var t=this.getCells(!1,e),i={start:null,end:null};return t.length?(i.start=t[0],i.end=t[t.length-1]):console.warn("No bounds defined on range"),i}getComponent(){return this.component||(this.component=new Zi(this)),this.component}destroy(e){this.destroyed=!0,this.element.remove(),e&&this.rangeManager.rangeRemoved(this),this.initialized&&this.dispatchExternal("rangeRemoved",this.getComponent())}destroyedGuard(e){return this.destroyed&&console.warn("You cannot call the "+e+" function on a destroyed range"),!this.destroyed}}var ts={rangeJumpUp:["ctrl + 38","meta + 38"],rangeJumpDown:["ctrl + 40","meta + 40"],rangeJumpLeft:["ctrl + 37","meta + 37"],rangeJumpRight:["ctrl + 39","meta + 39"],rangeExpandUp:"shift + 38",rangeExpandDown:"shift + 40",rangeExpandLeft:"shift + 37",rangeExpandRight:"shift + 39",rangeExpandJumpUp:["ctrl + shift + 38","meta + shift + 38"],rangeExpandJumpDown:["ctrl + shift + 40","meta + shift + 40"],rangeExpandJumpLeft:["ctrl + shift + 37","meta + shift + 37"],rangeExpandJumpRight:["ctrl + shift + 39","meta + shift + 39"]},is={rangeJumpLeft:function(l){this.dispatch("keybinding-nav-range",l,"left",!0,!1)},rangeJumpRight:function(l){this.dispatch("keybinding-nav-range",l,"right",!0,!1)},rangeJumpUp:function(l){this.dispatch("keybinding-nav-range",l,"up",!0,!1)},rangeJumpDown:function(l){this.dispatch("keybinding-nav-range",l,"down",!0,!1)},rangeExpandLeft:function(l){this.dispatch("keybinding-nav-range",l,"left",!1,!0)},rangeExpandRight:function(l){this.dispatch("keybinding-nav-range",l,"right",!1,!0)},rangeExpandUp:function(l){this.dispatch("keybinding-nav-range",l,"up",!1,!0)},rangeExpandDown:function(l){this.dispatch("keybinding-nav-range",l,"down",!1,!0)},rangeExpandJumpLeft:function(l){this.dispatch("keybinding-nav-range",l,"left",!0,!0)},rangeExpandJumpRight:function(l){this.dispatch("keybinding-nav-range",l,"right",!0,!0)},rangeExpandJumpUp:function(l){this.dispatch("keybinding-nav-range",l,"up",!0,!0)},rangeExpandJumpDown:function(l){this.dispatch("keybinding-nav-range",l,"down",!0,!0)}},ss={range:function(l){var e=[],t=this.table.modules.selectRange.activeRange,i=!1,s,n,r,o,a;return a=l.length,t&&(s=t.getBounds(),n=s.start,s.start===s.end&&(i=!0),n&&(e=this.table.rowManager.activeRows.slice(),r=e.indexOf(n.row),i?o=l.length:o=e.indexOf(s.end.row)-r+1,r>-1&&(this.table.blockRedraw(),e=e.slice(r,r+o),e.forEach((h,d)=>{h.updateData(l[d%a])}),this.table.restoreRedraw()))),e}},ns={range:function(l){var e=[],t=[],i=this.table.modules.selectRange.activeRange,s=!1,n,r,o,a,h;return i&&(n=i.getBounds(),r=n.start,n.start===n.end&&(s=!0),r&&(l=l.split(` +`),l.forEach(function(d){e.push(d.split(" "))}),e.length&&(a=this.table.columnManager.getVisibleColumnsByIndex(),h=a.indexOf(r.column),h>-1)))?(s?o=e[0].length:o=a.indexOf(n.end.column)-h+1,a=a.slice(h,h+o),e.forEach(d=>{var u={},c=d.length;a.forEach(function(f,g){u[f.field]=d[g%c]}),t.push(u)}),t):!1}},rs={range:function(){var l=this.modules.selectRange.selectedColumns();return this.columnManager.rowHeader&&l.unshift(this.columnManager.rowHeader),l}},os={range:function(){return this.modules.selectRange.selectedRows()}},as={keybindings:{bindings:ts,actions:is},clipboard:{pasteActions:ss,pasteParsers:ns},export:{columnLookups:rs,rowLookups:os}};class re extends w{constructor(e){super(e),this.selecting="cell",this.mousedown=!1,this.ranges=[],this.overlay=null,this.rowHeader=null,this.layoutChangeTimeout=null,this.columnSelection=!1,this.rowSelection=!1,this.maxRanges=0,this.activeRange=!1,this.blockKeydown=!1,this.keyDownEvent=this._handleKeyDown.bind(this),this.mouseUpEvent=this._handleMouseUp.bind(this),this.registerTableOption("selectableRange",!1),this.registerTableOption("selectableRangeColumns",!1),this.registerTableOption("selectableRangeRows",!1),this.registerTableOption("selectableRangeClearCells",!1),this.registerTableOption("selectableRangeClearCellsValue",void 0),this.registerTableFunction("getRangesData",this.getRangesData.bind(this)),this.registerTableFunction("getRanges",this.getRanges.bind(this)),this.registerTableFunction("addRange",this.addRangeFromComponent.bind(this)),this.registerComponentFunction("cell","getRanges",this.cellGetRanges.bind(this)),this.registerComponentFunction("row","getRanges",this.rowGetRanges.bind(this)),this.registerComponentFunction("column","getRanges",this.colGetRanges.bind(this))}initialize(){this.options("selectableRange")&&(this.options("selectableRows")?console.warn("SelectRange functionality cannot be used in conjunction with row selection"):(this.maxRanges=this.options("selectableRange"),this.initializeTable(),this.initializeWatchers()),this.options("columns").findIndex(e=>e.frozen)>0&&console.warn("Having frozen column in arbitrary position with selectRange option may result in unpredictable behavior."),this.options("columns").filter(e=>e.frozen)>1&&console.warn("Having multiple frozen columns with selectRange option may result in unpredictable behavior."))}initializeTable(){this.overlay=document.createElement("div"),this.overlay.classList.add("tabulator-range-overlay"),this.rangeContainer=document.createElement("div"),this.rangeContainer.classList.add("tabulator-range-container"),this.activeRangeCellElement=document.createElement("div"),this.activeRangeCellElement.classList.add("tabulator-range-cell-active"),this.overlay.appendChild(this.rangeContainer),this.overlay.appendChild(this.activeRangeCellElement),this.table.rowManager.element.addEventListener("keydown",this.keyDownEvent),this.resetRanges(),this.table.rowManager.element.appendChild(this.overlay),this.table.columnManager.element.setAttribute("tabindex",0),this.table.element.classList.add("tabulator-ranges")}initializeWatchers(){this.columnSelection=this.options("selectableRangeColumns"),this.rowSelection=this.options("selectableRangeRows"),this.subscribe("column-init",this.initializeColumn.bind(this)),this.subscribe("column-mousedown",this.handleColumnMouseDown.bind(this)),this.subscribe("column-mousemove",this.handleColumnMouseMove.bind(this)),this.subscribe("column-resized",this.handleColumnResized.bind(this)),this.subscribe("column-moving",this.handleColumnMoving.bind(this)),this.subscribe("column-moved",this.handleColumnMoved.bind(this)),this.subscribe("column-width",this.layoutChange.bind(this)),this.subscribe("column-height",this.layoutChange.bind(this)),this.subscribe("column-resized",this.layoutChange.bind(this)),this.subscribe("columns-loaded",this.updateHeaderColumn.bind(this)),this.subscribe("cell-height",this.layoutChange.bind(this)),this.subscribe("cell-rendered",this.renderCell.bind(this)),this.subscribe("cell-mousedown",this.handleCellMouseDown.bind(this)),this.subscribe("cell-mousemove",this.handleCellMouseMove.bind(this)),this.subscribe("cell-click",this.handleCellClick.bind(this)),this.subscribe("cell-editing",this.handleEditingCell.bind(this)),this.subscribe("page-changed",this.redraw.bind(this)),this.subscribe("scroll-vertical",this.layoutChange.bind(this)),this.subscribe("scroll-horizontal",this.layoutChange.bind(this)),this.subscribe("data-destroy",this.tableDestroyed.bind(this)),this.subscribe("data-processed",this.resetRanges.bind(this)),this.subscribe("table-layout",this.layoutElement.bind(this)),this.subscribe("table-redraw",this.redraw.bind(this)),this.subscribe("table-destroy",this.tableDestroyed.bind(this)),this.subscribe("edit-editor-clear",this.finishEditingCell.bind(this)),this.subscribe("edit-blur",this.restoreFocus.bind(this)),this.subscribe("keybinding-nav-prev",this.keyNavigate.bind(this,"left")),this.subscribe("keybinding-nav-next",this.keyNavigate.bind(this,"right")),this.subscribe("keybinding-nav-left",this.keyNavigate.bind(this,"left")),this.subscribe("keybinding-nav-right",this.keyNavigate.bind(this,"right")),this.subscribe("keybinding-nav-up",this.keyNavigate.bind(this,"up")),this.subscribe("keybinding-nav-down",this.keyNavigate.bind(this,"down")),this.subscribe("keybinding-nav-range",this.keyNavigateRange.bind(this))}initializeColumn(e){this.columnSelection&&e.definition.headerSort&&this.options("headerSortClickElement")!=="icon"&&console.warn("Using column headerSort with selectableRangeColumns option may result in unpredictable behavior. Consider using headerSortClickElement: 'icon'."),e.modules.edit}updateHeaderColumn(){var e;this.rowSelection&&(this.rowHeader=this.table.columnManager.getVisibleColumnsByIndex()[0],this.rowHeader&&(this.rowHeader.definition.cssClass=this.rowHeader.definition.cssClass+" tabulator-range-row-header",this.rowHeader.definition.headerSort&&console.warn("Using column headerSort with selectableRangeRows option may result in unpredictable behavior"),this.rowHeader.definition.editor&&console.warn("Using column editor with selectableRangeRows option may result in unpredictable behavior"))),this.table.modules.frozenColumns&&this.table.modules.frozenColumns.active&&(e=this.table.modules.frozenColumns.getFrozenColumns(),(e.length>1||e.length===1&&e[0]!==this.rowHeader)&&console.warn("Using frozen columns that are not the range header in combination with the selectRange option may result in unpredictable behavior"))}getRanges(){return this.ranges.map(e=>e.getComponent())}getRangesData(){return this.ranges.map(e=>e.getData())}addRangeFromComponent(e,t){return e=e?e._cell:null,t=t?t._cell:null,this.addRange(e,t)}cellGetRanges(e){var t=[];return e.column===this.rowHeader?t=this.ranges.filter(i=>i.occupiesRow(e.row)):t=this.ranges.filter(i=>i.occupies(e)),t.map(i=>i.getComponent())}rowGetRanges(e){var t=this.ranges.filter(i=>i.occupiesRow(e));return t.map(i=>i.getComponent())}colGetRanges(e){var t=this.ranges.filter(i=>i.occupiesColumn(e));return t.map(i=>i.getComponent())}_handleMouseUp(e){this.mousedown=!1,document.removeEventListener("mouseup",this.mouseUpEvent)}_handleKeyDown(e){if(!this.blockKeydown&&(!this.table.modules.edit||this.table.modules.edit&&!this.table.modules.edit.currentCell)){if(e.key==="Enter"){if(this.table.modules.edit&&this.table.modules.edit.currentCell)return;this.table.modules.edit.editCell(this.getActiveCell()),e.preventDefault()}(e.key==="Backspace"||e.key==="Delete")&&this.options("selectableRangeClearCells")&&this.activeRange&&this.activeRange.clearValues()}}initializeFocus(e){var t;this.restoreFocus();try{document.selection?(t=document.body.createTextRange(),t.moveToElementText(e.getElement()),t.select()):window.getSelection&&(t=document.createRange(),t.selectNode(e.getElement()),window.getSelection().removeAllRanges(),window.getSelection().addRange(t))}catch{}}restoreFocus(e){return this.table.rowManager.element.focus(),!0}handleColumnResized(e){var t;this.selecting!=="column"&&this.selecting!=="all"||(t=this.ranges.some(i=>i.occupiesColumn(e)),t&&this.ranges.forEach(i=>{var s=i.getColumns(!0);s.forEach(n=>{n!==e&&n.setWidth(e.width)})}))}handleColumnMoving(e,t){this.resetRanges().setBounds(t),this.overlay.style.visibility="hidden"}handleColumnMoved(e,t,i){this.activeRange.setBounds(e),this.layoutElement()}handleColumnMouseDown(e,t){e.button===2&&(this.selecting==="column"||this.selecting==="all")&&this.activeRange.occupiesColumn(t)||this.table.options.movableColumns&&this.selecting==="column"&&this.activeRange.occupiesColumn(t)||(this.mousedown=!0,document.addEventListener("mouseup",this.mouseUpEvent),this.newSelection(e,t))}handleColumnMouseMove(e,t){t===this.rowHeader||!this.mousedown||this.selecting==="all"||this.activeRange.setBounds(!1,t,!0)}renderCell(e){var t=e.getElement(),i=this.ranges.findIndex(s=>s.occupies(e));t.classList.toggle("tabulator-range-selected",i!==-1),t.classList.toggle("tabulator-range-only-cell-selected",this.ranges.length===1&&this.ranges[0].atTopLeft(e)&&this.ranges[0].atBottomRight(e)),t.dataset.range=i}handleCellMouseDown(e,t){e.button===2&&(this.activeRange.occupies(t)||(this.selecting==="row"||this.selecting==="all")&&this.activeRange.occupiesRow(t.row))||(this.mousedown=!0,document.addEventListener("mouseup",this.mouseUpEvent),this.newSelection(e,t))}handleCellMouseMove(e,t){!this.mousedown||this.selecting==="all"||this.activeRange.setBounds(!1,t,!0)}handleCellClick(e,t){this.initializeFocus(t)}handleEditingCell(e){this.activeRange&&this.activeRange.setBounds(e)}finishEditingCell(){this.blockKeydown=!0,this.table.rowManager.element.focus(),setTimeout(()=>{this.blockKeydown=!1},10)}keyNavigate(e,t){this.navigate(!1,!1,e),t.preventDefault()}keyNavigateRange(e,t,i,s){this.navigate(i,s,t),e.preventDefault()}navigate(e,t,i){var s=!1,n,r,o,a,h,d;if(this.table.modules.edit&&this.table.modules.edit.currentCell)return!1;if(this.ranges.length>1&&(this.ranges=this.ranges.filter(u=>u===this.activeRange?(u.setEnd(u.start.row,u.start.col),!0):(u.destroy(),!1))),n=this.activeRange,r=t?n.end:n.start,o=r.row,a=r.col,e)switch(i){case"left":a=this.findJumpCellLeft(n.start.row,r.col);break;case"right":a=this.findJumpCellRight(n.start.row,r.col);break;case"up":o=this.findJumpCellUp(r.row,n.start.col);break;case"down":o=this.findJumpCellDown(r.row,n.start.col);break}else{if(t&&(this.selecting==="row"&&(i==="left"||i==="right")||this.selecting==="column"&&(i==="up"||i==="down")))return;switch(i){case"left":a=Math.max(a-1,0);break;case"right":a=Math.min(a+1,this.getTableColumns().length-1);break;case"up":o=Math.max(o-1,0);break;case"down":o=Math.min(o+1,this.getTableRows().length-1);break}}if(this.rowHeader&&a===0&&(a=1),s=a!==r.col||o!==r.row,t||n.setStart(o,a),n.setEnd(o,a),t||(this.selecting="cell"),s)return h=this.getRowByRangePos(n.end.row),d=this.getColumnByRangePos(n.end.col),(i==="left"||i==="right")&&d.getElement().parentNode===null?d.getComponent().scrollTo(void 0,!1):(i==="up"||i==="down")&&h.getElement().parentNode===null?h.getComponent().scrollTo(void 0,!1):this.autoScroll(n,h.getElement(),d.getElement()),this.layoutElement(),!0}rangeRemoved(e){this.ranges=this.ranges.filter(t=>t!==e),this.activeRange===e&&(this.ranges.length?this.activeRange=this.ranges[this.ranges.length-1]:this.addRange()),this.layoutElement()}findJumpRow(e,t,i,s,n){return i&&(t=t.reverse()),this.findJumpItem(s,n,t,function(r){return r.getData()[e.getField()]})}findJumpCol(e,t,i,s,n){return i&&(t=t.reverse()),this.findJumpItem(s,n,t,function(r){return e.getData()[r.getField()]})}findJumpItem(e,t,i,s){var n;for(let r of i){let o=s(r);if(e){if(n=r,o)break}else if(t){if(n=r,o)break}else if(o)n=r;else break}return n}findJumpCellLeft(e,t){var i=this.getRowByRangePos(e),s=this.getTableColumns(),n=this.isEmpty(i.getData()[s[t].getField()]),r=s[t-1]?this.isEmpty(i.getData()[s[t-1].getField()]):!1,o=this.rowHeader?s.slice(1,t):s.slice(0,t),a=this.findJumpCol(i,o,!0,n,r);return a?a.getPosition()-1:t}findJumpCellRight(e,t){var i=this.getRowByRangePos(e),s=this.getTableColumns(),n=this.isEmpty(i.getData()[s[t].getField()]),r=s[t+1]?this.isEmpty(i.getData()[s[t+1].getField()]):!1,o=this.findJumpCol(i,s.slice(t+1,s.length),!1,n,r);return o?o.getPosition()-1:t}findJumpCellUp(e,t){var i=this.getColumnByRangePos(t),s=this.getTableRows(),n=this.isEmpty(s[e].getData()[i.getField()]),r=s[e-1]?this.isEmpty(s[e-1].getData()[i.getField()]):!1,o=this.findJumpRow(i,s.slice(0,e),!0,n,r);return o?o.position-1:e}findJumpCellDown(e,t){var i=this.getColumnByRangePos(t),s=this.getTableRows(),n=this.isEmpty(s[e].getData()[i.getField()]),r=s[e+1]?this.isEmpty(s[e+1].getData()[i.getField()]):!1,o=this.findJumpRow(i,s.slice(e+1,s.length),!1,n,r);return o?o.position-1:e}newSelection(e,t){var i;if(t.type==="column"){if(!this.columnSelection)return;if(t===this.rowHeader){i=this.resetRanges(),this.selecting="all";var s,n=this.getCell(-1,-1);this.rowHeader?s=this.getCell(0,1):s=this.getCell(0,0),i.setBounds(s,n);return}else this.selecting="column"}else t.column===this.rowHeader?this.selecting="row":this.selecting="cell";e.shiftKey?this.activeRange.setBounds(!1,t):e.ctrlKey?this.addRange().setBounds(t):this.resetRanges().setBounds(t)}autoScroll(e,t,i){var s=this.table.rowManager.element,n,r,o,a,h;typeof t>"u"&&(t=this.getRowByRangePos(e.end.row).getElement()),typeof i>"u"&&(i=this.getColumnByRangePos(e.end.col).getElement()),this.rowHeader&&(n=this.rowHeader.getElement()),r={left:i.offsetLeft,right:i.offsetLeft+i.offsetWidth,top:t.offsetTop,bottom:t.offsetTop+t.offsetHeight},o={left:s.scrollLeft,right:Math.ceil(s.scrollLeft+s.clientWidth),top:s.scrollTop,bottom:s.scrollTop+s.offsetHeight-this.table.rowManager.scrollbarWidth},n&&(o.left+=n.offsetWidth),a=o.lefto.right&&(s.scrollLeft=r.right-s.clientWidth)),h||(r.topo.bottom&&(s.scrollTop=r.bottom-s.clientHeight))}layoutChange(){this.overlay.style.visibility="hidden",clearTimeout(this.layoutChangeTimeout),this.layoutChangeTimeout=setTimeout(this.layoutRanges.bind(this),200)}redraw(e){e&&(this.selecting="cell",this.resetRanges(),this.layoutElement())}layoutElement(e){var t;e?t=this.table.rowManager.getVisibleRows(!0):t=this.table.rowManager.getRows(),t.forEach(i=>{i.type==="row"&&(this.layoutRow(i),i.cells.forEach(s=>this.renderCell(s)))}),this.getTableColumns().forEach(i=>{this.layoutColumn(i)}),this.layoutRanges()}layoutRow(e){var t=e.getElement(),i=!1,s=this.ranges.some(n=>n.occupiesRow(e));this.selecting==="row"?i=s:this.selecting==="all"&&(i=!0),t.classList.toggle("tabulator-range-selected",i),t.classList.toggle("tabulator-range-highlight",s)}layoutColumn(e){var t=e.getElement(),i=!1,s=this.ranges.some(n=>n.occupiesColumn(e));this.selecting==="column"?i=s:this.selecting==="all"&&(i=!0),t.classList.toggle("tabulator-range-selected",i),t.classList.toggle("tabulator-range-highlight",s)}layoutRanges(){var e,t,i;this.table.initialized&&(e=this.getActiveCell(),e&&(t=e.getElement(),i=e.row.getElement(),this.table.rtl?this.activeRangeCellElement.style.right=i.offsetWidth-t.offsetLeft-t.offsetWidth+"px":this.activeRangeCellElement.style.left=i.offsetLeft+t.offsetLeft+"px",this.activeRangeCellElement.style.top=i.offsetTop+"px",this.activeRangeCellElement.style.width=t.offsetWidth+"px",this.activeRangeCellElement.style.height=i.offsetHeight+"px",this.ranges.forEach(s=>s.layout()),this.overlay.style.visibility="visible"))}getCell(e,t){var i;return t<0&&(t=this.getTableColumns().length+t,t<0)?null:(e<0&&(e=this.getTableRows().length+e),i=this.table.rowManager.getRowFromPosition(e+1),i?i.getCells(!1,!0).filter(s=>s.column.visible)[t]:null)}getActiveCell(){return this.getCell(this.activeRange.start.row,this.activeRange.start.col)}getRowByRangePos(e){return this.getTableRows()[e]}getColumnByRangePos(e){return this.getTableColumns()[e]}getTableRows(){return this.table.rowManager.getDisplayRows().filter(e=>e.type==="row")}getTableColumns(){return this.table.columnManager.getVisibleColumnsByIndex()}addRange(e,t){var i;return this.maxRanges!==!0&&this.ranges.length>=this.maxRanges&&this.ranges.shift().destroy(),i=new es(this.table,this,e,t),this.activeRange=i,this.ranges.push(i),this.rangeContainer.appendChild(i.element),i}resetRanges(){var e,t,i;return this.ranges.forEach(s=>s.destroy()),this.ranges=[],e=this.addRange(),this.table.rowManager.activeRows.length&&(i=this.table.rowManager.activeRows[0].cells.filter(s=>s.column.visible),t=i[this.rowHeader?1:0],t&&(e.setBounds(t),this.initializeFocus(t))),e}tableDestroyed(){document.removeEventListener("mouseup",this.mouseUpEvent),this.table.rowManager.element.removeEventListener("keydown",this.keyDownEvent)}selectedRows(e){return e?this.activeRange.getRows().map(t=>t.getComponent()):this.activeRange.getRows()}selectedColumns(e){return e?this.activeRange.getColumns().map(t=>t.getComponent()):this.activeRange.getColumns()}isEmpty(e){return e==null||e===""}}b(re,"moduleName","selectRange"),b(re,"moduleInitOrder",1),b(re,"moduleExtensions",as);function ls(l,e,t,i,s,n,r){var o=r.alignEmptyValues,a=r.decimalSeparator,h=r.thousandSeparator,d=0;if(l=String(l),e=String(e),h&&(l=l.split(h).join(""),e=e.split(h).join("")),a&&(l=l.split(a).join("."),e=e.split(a).join(".")),l=parseFloat(l),e=parseFloat(e),isNaN(l))d=isNaN(e)?0:-1;else if(isNaN(e))d=1;else return l-e;return(o==="top"&&n==="desc"||o==="bottom"&&n==="asc")&&(d*=-1),d}function hs(l,e,t,i,s,n,r){var o=r.alignEmptyValues,a=0,h;if(!l)a=e?-1:0;else if(!e)a=1;else{switch(typeof r.locale){case"boolean":r.locale&&(h=this.langLocale());break;case"string":h=r.locale;break}return String(l).toLowerCase().localeCompare(String(e).toLowerCase(),h)}return(o==="top"&&n==="desc"||o==="bottom"&&n==="asc")&&(a*=-1),a}function Ve(l,e,t,i,s,n,r){var o=window.DateTime||luxon.DateTime,a=r.format||"dd/MM/yyyy HH:mm:ss",h=r.alignEmptyValues,d=0;if(typeof o<"u"){if(o.isDateTime(l)||(a==="iso"?l=o.fromISO(String(l)):l=o.fromFormat(String(l),a)),o.isDateTime(e)||(a==="iso"?e=o.fromISO(String(e)):e=o.fromFormat(String(e),a)),!l.isValid)d=e.isValid?-1:0;else if(!e.isValid)d=1;else return l-e;return(h==="top"&&n==="desc"||h==="bottom"&&n==="asc")&&(d*=-1),d}else console.error("Sort Error - 'datetime' sorter is dependant on luxon.js")}function ds(l,e,t,i,s,n,r){return r.format||(r.format="dd/MM/yyyy"),Ve.call(this,l,e,t,i,s,n,r)}function us(l,e,t,i,s,n,r){return r.format||(r.format="HH:mm"),Ve.call(this,l,e,t,i,s,n,r)}function cs(l,e,t,i,s,n,r){var o=l===!0||l==="true"||l==="True"||l===1?1:0,a=e===!0||e==="true"||e==="True"||e===1?1:0;return o-a}function fs(l,e,t,i,s,n,r){var o=r.type||"length",a=r.alignEmptyValues,h=0;function d(u){var c;switch(o){case"length":c=u.length;break;case"sum":c=u.reduce(function(f,g){return f+g});break;case"max":c=Math.max.apply(null,u);break;case"min":c=Math.min.apply(null,u);break;case"avg":c=u.reduce(function(f,g){return f+g})/u.length;break}return c}if(!Array.isArray(l))h=Array.isArray(e)?-1:0;else if(!Array.isArray(e))h=1;else return d(e)-d(l);return(a==="top"&&n==="desc"||a==="bottom"&&n==="asc")&&(h*=-1),h}function ps(l,e,t,i,s,n,r){var o=typeof l>"u"?0:1,a=typeof e>"u"?0:1;return o-a}function ms(l,e,t,i,s,n,r){var o,a,h,d,u=0,c,f=/(\d+)|(\D+)/g,g=/\d/,p=r.alignEmptyValues,v=0;if(!l&&l!==0)v=!e&&e!==0?0:-1;else if(!e&&e!==0)v=1;else{if(isFinite(l)&&isFinite(e))return l-e;if(o=String(l).toLowerCase(),a=String(e).toLowerCase(),o===a)return 0;if(!(g.test(o)&&g.test(a)))return o>a?1:-1;for(o=o.match(f),a=a.match(f),c=o.length>a.length?a.length:o.length;ud?1:-1;return o.length>a.length}return(p==="top"&&n==="desc"||p==="bottom"&&n==="asc")&&(v*=-1),v}var gs={number:ls,string:hs,date:ds,time:us,datetime:Ve,boolean:cs,array:fs,exists:ps,alphanum:ms};const j=class j extends w{constructor(e){super(e),this.sortList=[],this.changed=!1,this.registerTableOption("sortMode","local"),this.registerTableOption("initialSort",!1),this.registerTableOption("columnHeaderSortMulti",!0),this.registerTableOption("sortOrderReverse",!1),this.registerTableOption("headerSortElement","
"),this.registerTableOption("headerSortClickElement","header"),this.registerColumnOption("sorter"),this.registerColumnOption("sorterParams"),this.registerColumnOption("headerSort",!0),this.registerColumnOption("headerSortStartingDir"),this.registerColumnOption("headerSortTristate")}initialize(){this.subscribe("column-layout",this.initializeColumn.bind(this)),this.subscribe("table-built",this.tableBuilt.bind(this)),this.registerDataHandler(this.sort.bind(this),20),this.registerTableFunction("setSort",this.userSetSort.bind(this)),this.registerTableFunction("getSorters",this.getSort.bind(this)),this.registerTableFunction("clearSort",this.clearSort.bind(this)),this.table.options.sortMode==="remote"&&this.subscribe("data-params",this.remoteSortParams.bind(this))}tableBuilt(){this.table.options.initialSort&&this.setSort(this.table.options.initialSort)}remoteSortParams(e,t,i,s){var n=this.getSort();return n.forEach(r=>{delete r.column}),s.sort=n,s}userSetSort(e,t){this.setSort(e,t),this.refreshSort()}clearSort(){this.clear(),this.refreshSort()}initializeColumn(e){var t=!1,i,s;switch(typeof e.definition.sorter){case"string":j.sorters[e.definition.sorter]?t=j.sorters[e.definition.sorter]:console.warn("Sort Error - No such sorter found: ",e.definition.sorter);break;case"function":t=e.definition.sorter;break}if(e.modules.sort={sorter:t,dir:"none",params:e.definition.sorterParams||{},startingDir:e.definition.headerSortStartingDir||"asc",tristate:e.definition.headerSortTristate},e.definition.headerSort!==!1){switch(i=e.getElement(),i.classList.add("tabulator-sortable"),s=document.createElement("div"),s.classList.add("tabulator-col-sorter"),this.table.options.headerSortClickElement){case"icon":s.classList.add("tabulator-col-sorter-element");break;case"header":i.classList.add("tabulator-col-sorter-element");break;default:i.classList.add("tabulator-col-sorter-element");break}switch(this.table.options.headerSortElement){case"function":break;case"object":s.appendChild(this.table.options.headerSortElement);break;default:s.innerHTML=this.table.options.headerSortElement}e.titleHolderElement.appendChild(s),e.modules.sort.element=s,this.setColumnHeaderSortIcon(e,"none"),this.table.options.headerSortClickElement==="icon"&&s.addEventListener("mousedown",n=>{n.stopPropagation()}),(this.table.options.headerSortClickElement==="icon"?s:i).addEventListener("click",n=>{var r="",o=[],a=!1;if(e.modules.sort){if(e.modules.sort.tristate)e.modules.sort.dir=="none"?r=e.modules.sort.startingDir:e.modules.sort.dir==e.modules.sort.startingDir?r=e.modules.sort.dir=="asc"?"desc":"asc":r="none";else switch(e.modules.sort.dir){case"asc":r="desc";break;case"desc":r="asc";break;default:r=e.modules.sort.startingDir}this.table.options.columnHeaderSortMulti&&(n.shiftKey||n.ctrlKey)?(o=this.getSort(),a=o.findIndex(h=>h.field===e.getField()),a>-1?(o[a].dir=r,a=o.splice(a,1)[0],r!="none"&&o.push(a)):r!="none"&&o.push({column:e,dir:r}),this.setSort(o)):r=="none"?this.clear():this.setSort(e,r),this.refreshSort()}})}}refreshSort(){this.table.options.sortMode==="remote"?this.reloadData(null,!1,!1):this.refreshData(!0)}hasChanged(){var e=this.changed;return this.changed=!1,e}getSort(){var e=this,t=[];return e.sortList.forEach(function(i){i.column&&t.push({column:i.column.getComponent(),field:i.column.getField(),dir:i.dir})}),t}setSort(e,t){var i=this,s=[];Array.isArray(e)||(e=[{column:e,dir:t}]),e.forEach(function(n){var r;r=i.table.columnManager.findColumn(n.column),r?(n.column=r,s.push(n),i.changed=!0):console.warn("Sort Warning - Sort field does not exist and is being ignored: ",n.column)}),i.sortList=s,this.dispatch("sort-changed")}clear(){this.setSort([])}findSorter(e){var t=this.table.rowManager.activeRows[0],i="string",s,n;if(t&&(t=t.getData(),s=e.getField(),s))switch(n=e.getFieldValue(t),typeof n){case"undefined":i="string";break;case"boolean":i="boolean";break;default:!isNaN(n)&&n!==""?i="number":n.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)&&(i="alphanum");break}return j.sorters[i]}sort(e,t){var i=this,s=this.table.options.sortOrderReverse?i.sortList.slice().reverse():i.sortList,n=[],r=[];return this.subscribedExternal("dataSorting")&&this.dispatchExternal("dataSorting",i.getSort()),t||i.clearColumnHeaders(),this.table.options.sortMode!=="remote"?(s.forEach(function(o,a){var h;o.column&&(h=o.column.modules.sort,h&&(h.sorter||(h.sorter=i.findSorter(o.column)),o.params=typeof h.params=="function"?h.params(o.column.getComponent(),o.dir):h.params,n.push(o)),t||i.setColumnHeader(o.column,o.dir))}),n.length&&i._sortItems(e,n)):t||s.forEach(function(o,a){i.setColumnHeader(o.column,o.dir)}),this.subscribedExternal("dataSorted")&&(e.forEach(o=>{r.push(o.getComponent())}),this.dispatchExternal("dataSorted",i.getSort(),r)),e}clearColumnHeaders(){this.table.columnManager.getRealColumns().forEach(e=>{e.modules.sort&&(e.modules.sort.dir="none",e.getElement().setAttribute("aria-sort","none"),this.setColumnHeaderSortIcon(e,"none"))})}setColumnHeader(e,t){e.modules.sort.dir=t,e.getElement().setAttribute("aria-sort",t==="asc"?"ascending":"descending"),this.setColumnHeaderSortIcon(e,t)}setColumnHeaderSortIcon(e,t){var i=e.modules.sort.element,s;if(e.definition.headerSort&&typeof this.table.options.headerSortElement=="function"){for(;i.firstChild;)i.removeChild(i.firstChild);s=this.table.options.headerSortElement.call(this.table,e.getComponent(),t),typeof s=="object"?i.appendChild(s):i.innerHTML=s}}_sortItems(e,t){var i=t.length-1;e.sort((s,n)=>{for(var r,o=i;o>=0;o--){let a=t[o];if(r=this._sortRow(s,n,a.column,a.dir,a.params),r!==0)break}return r})}_sortRow(e,t,i,s,n){var r,o,a=s=="asc"?e:t,h=s=="asc"?t:e;return e=i.getFieldValue(a.getData()),t=i.getFieldValue(h.getData()),e=typeof e<"u"?e:"",t=typeof t<"u"?t:"",r=a.getComponent(),o=h.getComponent(),i.modules.sort.sorter.call(this,e,t,r,o,i.getComponent(),s,n)}};b(j,"moduleName","sort"),b(j,"sorters",gs);let He=j;class bs{constructor(e,t){this.columnCount=e,this.rowCount=t,this.columnString=[],this.columns=[],this.rows=[]}genColumns(e){var t=Math.max(this.columnCount,Math.max(...e.map(i=>i.length)));this.columnString=[],this.columns=[];for(let i=1;i<=t;i++)this.incrementChar(this.columnString.length-1),this.columns.push(this.columnString.join(""));return this.columns}genRows(e){var t=Math.max(this.rowCount,e.length);this.rows=[];for(let i=1;i<=t;i++)this.rows.push(i);return this.rows}incrementChar(e){let t=this.columnString[e];t?t!=="Z"?this.columnString[e]=String.fromCharCode(this.columnString[e].charCodeAt(0)+1):(this.columnString[e]="A",e?this.incrementChar(e-1):this.columnString.push("A")):this.columnString.push("A")}setRowCount(e){this.rowCount=e}setColumnCount(e){this.columnCount=e}}class ft{constructor(e){return this._sheet=e,new Proxy(this,{get:function(t,i,s){return typeof t[i]<"u"?t[i]:t._sheet.table.componentFunctionBinder.handle("sheet",t._sheet,i)}})}getTitle(){return this._sheet.title}getKey(){return this._sheet.key}getDefinition(){return this._sheet.getDefinition()}getData(){return this._sheet.getData()}setData(e){return this._sheet.setData(e)}clear(){return this._sheet.clear()}remove(){return this._sheet.remove()}active(){return this._sheet.active()}setTitle(e){return this._sheet.setTitle(e)}setRows(e){return this._sheet.setRows(e)}setColumns(e){return this._sheet.setColumns(e)}}class Xe extends M{constructor(e,t){super(e.table),this.spreadsheetManager=e,this.definition=t,this.title=this.definition.title||"",this.key=this.definition.key||this.definition.title,this.rowCount=this.definition.rows,this.columnCount=this.definition.columns,this.data=this.definition.data||[],this.element=null,this.isActive=!1,this.grid=new bs(this.columnCount,this.rowCount),this.defaultColumnDefinition={width:100,headerHozAlign:"center",headerSort:!1},this.columnDefinition=Object.assign(this.defaultColumnDefinition,this.options("spreadsheetColumnDefinition")),this.columnDefs=[],this.rowDefs=[],this.columnFields=[],this.columns=[],this.rows=[],this.scrollTop=null,this.scrollLeft=null,this.initialize(),this.dispatchExternal("sheetAdded",this.getComponent())}initialize(){this.initializeElement(),this.initializeColumns(),this.initializeRows()}reinitialize(){this.initializeColumns(),this.initializeRows()}initializeElement(){this.element=document.createElement("div"),this.element.classList.add("tabulator-spreadsheet-tab"),this.element.innerText=this.title,this.element.addEventListener("click",()=>{this.spreadsheetManager.loadSheet(this)})}initializeColumns(){this.grid.setColumnCount(this.columnCount),this.columnFields=this.grid.genColumns(this.data),this.columnDefs=[],this.columnFields.forEach(e=>{var t=Object.assign({},this.columnDefinition);t.field=e,t.title=e,this.columnDefs.push(t)})}initializeRows(){var e;this.grid.setRowCount(this.rowCount),e=this.grid.genRows(this.data),this.rowDefs=[],e.forEach((t,i)=>{var s={_id:t},n=this.data[i];n&&n.forEach((r,o)=>{var a=this.columnFields[o];a&&(s[a]=r)}),this.rowDefs.push(s)})}unload(){this.isActive=!1,this.scrollTop=this.table.rowManager.scrollTop,this.scrollLeft=this.table.rowManager.scrollLeft,this.data=this.getData(!0),this.element.classList.remove("tabulator-spreadsheet-tab-active")}load(){var e=!this.isActive;this.isActive=!0,this.table.blockRedraw(),this.table.setData([]),this.table.setColumns(this.columnDefs),this.table.setData(this.rowDefs),this.table.restoreRedraw(),e&&this.scrollTop!==null&&(this.table.rowManager.element.scrollLeft=this.scrollLeft,this.table.rowManager.element.scrollTop=this.scrollTop),this.element.classList.add("tabulator-spreadsheet-tab-active"),this.dispatchExternal("sheetLoaded",this.getComponent())}getComponent(){return new ft(this)}getDefinition(){return{title:this.title,key:this.key,rows:this.rowCount,columns:this.columnCount,data:this.getData()}}getData(e){var t=[],i,s,n;return this.rowDefs.forEach(r=>{var o=[];this.columnFields.forEach(a=>{o.push(r[a])}),t.push(o)}),!e&&!this.options("spreadsheetOutputFull")&&(i=t.map(r=>r.findLastIndex(o=>typeof o<"u")+1),s=Math.max(...i),n=i.findLastIndex(r=>r>0)+1,t=t.slice(0,n),t=t.map(r=>r.slice(0,s))),t}setData(e){this.data=e,this.reinitialize(),this.dispatchExternal("sheetUpdated",this.getComponent()),this.isActive&&this.load()}clear(){this.setData([])}setTitle(e){this.title=e,this.element.innerText=e,this.dispatchExternal("sheetUpdated",this.getComponent())}setRows(e){this.rowCount=e,this.initializeRows(),this.dispatchExternal("sheetUpdated",this.getComponent()),this.isActive&&this.load()}setColumns(e){this.columnCount=e,this.reinitialize(),this.dispatchExternal("sheetUpdated",this.getComponent()),this.isActive&&this.load()}remove(){this.spreadsheetManager.removeSheet(this)}destroy(){this.element.parentNode&&this.element.parentNode.removeChild(this.element),this.dispatchExternal("sheetRemoved",this.getComponent())}active(){this.spreadsheetManager.loadSheet(this)}}class pt extends w{constructor(e){super(e),this.sheets=[],this.element=null,this.registerTableOption("spreadsheet",!1),this.registerTableOption("spreadsheetRows",50),this.registerTableOption("spreadsheetColumns",50),this.registerTableOption("spreadsheetColumnDefinition",{}),this.registerTableOption("spreadsheetOutputFull",!1),this.registerTableOption("spreadsheetData",!1),this.registerTableOption("spreadsheetSheets",!1),this.registerTableOption("spreadsheetSheetTabs",!1),this.registerTableOption("spreadsheetSheetTabsElement",!1),this.registerTableFunction("setSheets",this.setSheets.bind(this)),this.registerTableFunction("addSheet",this.addSheet.bind(this)),this.registerTableFunction("getSheets",this.getSheets.bind(this)),this.registerTableFunction("getSheetDefinitions",this.getSheetDefinitions.bind(this)),this.registerTableFunction("setSheetData",this.setSheetData.bind(this)),this.registerTableFunction("getSheet",this.getSheet.bind(this)),this.registerTableFunction("getSheetData",this.getSheetData.bind(this)),this.registerTableFunction("clearSheet",this.clearSheet.bind(this)),this.registerTableFunction("removeSheet",this.removeSheetFunc.bind(this)),this.registerTableFunction("activeSheet",this.activeSheetFunc.bind(this))}initialize(){this.options("spreadsheet")&&(this.subscribe("table-initialized",this.tableInitialized.bind(this)),this.subscribe("data-loaded",this.loadRemoteData.bind(this)),this.table.options.index="_id",this.options("spreadsheetData")&&this.options("spreadsheetSheets")&&(console.warn("You cannot use spreadsheetData and spreadsheetSheets at the same time, ignoring spreadsheetData"),this.table.options.spreadsheetData=!1),this.compatibilityCheck(),this.options("spreadsheetSheetTabs")&&this.initializeTabset())}compatibilityCheck(){this.options("data")&&console.warn("Do not use the data option when working with spreadsheets, use either spreadsheetData or spreadsheetSheets to pass data into the table"),this.options("pagination")&&console.warn("The spreadsheet module is not compatible with the pagination module"),this.options("groupBy")&&console.warn("The spreadsheet module is not compatible with the row grouping module"),this.options("responsiveCollapse")&&console.warn("The spreadsheet module is not compatible with the responsive collapse module")}initializeTabset(){this.element=document.createElement("div"),this.element.classList.add("tabulator-spreadsheet-tabs");var e=this.options("spreadsheetSheetTabsElement");e&&!(e instanceof HTMLElement)&&(e=document.querySelector(e),e||console.warn("Unable to find element matching spreadsheetSheetTabsElement selector:",this.options("spreadsheetSheetTabsElement"))),e?e.appendChild(this.element):this.footerAppend(this.element)}tableInitialized(){this.sheets.length?this.loadSheet(this.sheets[0]):this.options("spreadsheetSheets")?this.loadSheets(this.options("spreadsheetSheets")):this.options("spreadsheetData")&&this.loadData(this.options("spreadsheetData"))}loadRemoteData(e,t,i){return console.log("data",e,t,i),Array.isArray(e)?(this.table.dataLoader.clearAlert(),this.dispatchExternal("dataLoaded",e),!e.length||Array.isArray(e[0])?this.loadData(e):this.loadSheets(e)):console.error(`Spreadsheet Loading Error - Unable to process remote data due to invalid data type +Expecting: array +Received: `,typeof e,` +Data: `,e),!1}loadData(e){var t={data:e};this.loadSheet(this.newSheet(t))}destroySheets(){this.sheets.forEach(e=>{e.destroy()}),this.sheets=[],this.activeSheet=null}loadSheets(e){Array.isArray(e)||(e=[]),this.destroySheets(),e.forEach(t=>{this.newSheet(t)}),this.loadSheet(this.sheets[0])}loadSheet(e){this.activeSheet!==e&&(this.activeSheet&&this.activeSheet.unload(),this.activeSheet=e,e.load())}newSheet(e={}){var t;return e.rows||(e.rows=this.options("spreadsheetRows")),e.columns||(e.columns=this.options("spreadsheetColumns")),t=new Xe(this,e),this.sheets.push(t),this.element&&this.element.appendChild(t.element),t}removeSheet(e){var t=this.sheets.indexOf(e),i;this.sheets.length>1?t>-1&&(this.sheets.splice(t,1),e.destroy(),this.activeSheet===e&&(i=this.sheets[t-1]||this.sheets[0],i?this.loadSheet(i):this.activeSheet=null)):console.warn("Unable to remove sheet, at least one sheet must be active")}lookupSheet(e){return e?e instanceof Xe?e:e instanceof ft?e._sheet:this.sheets.find(t=>t.key===e)||!1:this.activeSheet}setSheets(e){return this.loadSheets(e),this.getSheets()}addSheet(e){return this.newSheet(e).getComponent()}getSheetDefinitions(){return this.sheets.map(e=>e.getDefinition())}getSheets(){return this.sheets.map(e=>e.getComponent())}getSheet(e){var t=this.lookupSheet(e);return t?t.getComponent():!1}setSheetData(e,t){e&&!t&&(t=e,e=!1);var i=this.lookupSheet(e);return i?i.setData(t):!1}getSheetData(e){var t=this.lookupSheet(e);return t?t.getData():!1}clearSheet(e){var t=this.lookupSheet(e);return t?t.clear():!1}removeSheetFunc(e){var t=this.lookupSheet(e);t&&this.removeSheet(t)}activeSheetFunc(e){var t=this.lookupSheet(e);return t?this.loadSheet(t):!1}}b(pt,"moduleName","spreadsheet");class mt extends w{constructor(e){super(e),this.tooltipSubscriber=null,this.headerSubscriber=null,this.timeout=null,this.popupInstance=null,this.registerTableOption("tooltipDelay",300),this.registerColumnOption("tooltip"),this.registerColumnOption("headerTooltip")}initialize(){this.deprecatedOptionsCheck(),this.subscribe("column-init",this.initializeColumn.bind(this))}deprecatedOptionsCheck(){}initializeColumn(e){e.definition.headerTooltip&&!this.headerSubscriber&&(this.headerSubscriber=!0,this.subscribe("column-mousemove",this.mousemoveCheck.bind(this,"headerTooltip")),this.subscribe("column-mouseout",this.mouseoutCheck.bind(this,"headerTooltip"))),e.definition.tooltip&&!this.tooltipSubscriber&&(this.tooltipSubscriber=!0,this.subscribe("cell-mousemove",this.mousemoveCheck.bind(this,"tooltip")),this.subscribe("cell-mouseout",this.mouseoutCheck.bind(this,"tooltip")))}mousemoveCheck(e,t,i){var s=e==="tooltip"?i.column.definition.tooltip:i.definition.headerTooltip;s&&(this.clearPopup(),this.timeout=setTimeout(this.loadTooltip.bind(this,t,i,s),this.table.options.tooltipDelay))}mouseoutCheck(e,t,i){this.popupInstance||this.clearPopup()}clearPopup(e,t,i){clearTimeout(this.timeout),this.timeout=null,this.popupInstance&&this.popupInstance.hide()}loadTooltip(e,t,i){var s,n,r;function o(a){n=a}typeof i=="function"&&(i=i(e,t.getComponent(),o)),i instanceof HTMLElement?s=i:(s=document.createElement("div"),i===!0&&(t instanceof ne?i=t.value:t.definition.field?this.langBind("columns|"+t.definition.field,a=>{s.innerHTML=i=a||t.definition.title}):i=t.definition.title),s.innerHTML=i),(i||i===0||i===!1)&&(s.classList.add("tabulator-tooltip"),s.addEventListener("mousemove",a=>a.preventDefault()),this.popupInstance=this.popup(s),typeof n=="function"&&this.popupInstance.renderCallback(n),r=this.popupInstance.containerEventCoords(e),this.popupInstance.show(r.x+15,r.y+15).hideOnBlur(()=>{this.dispatchExternal("TooltipClosed",t.getComponent()),this.popupInstance=null}),this.dispatchExternal("TooltipOpened",t.getComponent()))}}b(mt,"moduleName","tooltip");var vs={integer:function(l,e,t){return e===""||e===null||typeof e>"u"?!0:(e=Number(e),!isNaN(e)&&isFinite(e)&&Math.floor(e)===e)},float:function(l,e,t){return e===""||e===null||typeof e>"u"?!0:(e=Number(e),!isNaN(e)&&isFinite(e)&&e%1!==0)},numeric:function(l,e,t){return e===""||e===null||typeof e>"u"?!0:!isNaN(e)},string:function(l,e,t){return e===""||e===null||typeof e>"u"?!0:isNaN(e)},alphanumeric:function(l,e,t){if(e===""||e===null||typeof e>"u")return!0;var i=new RegExp(/^[a-z0-9]+$/i);return i.test(e)},max:function(l,e,t){return e===""||e===null||typeof e>"u"?!0:parseFloat(e)<=t},min:function(l,e,t){return e===""||e===null||typeof e>"u"?!0:parseFloat(e)>=t},starts:function(l,e,t){return e===""||e===null||typeof e>"u"?!0:String(e).toLowerCase().startsWith(String(t).toLowerCase())},ends:function(l,e,t){return e===""||e===null||typeof e>"u"?!0:String(e).toLowerCase().endsWith(String(t).toLowerCase())},minLength:function(l,e,t){return e===""||e===null||typeof e>"u"?!0:String(e).length>=t},maxLength:function(l,e,t){return e===""||e===null||typeof e>"u"?!0:String(e).length<=t},in:function(l,e,t){return e===""||e===null||typeof e>"u"?!0:(typeof t=="string"&&(t=t.split("|")),t.indexOf(e)>-1)},regex:function(l,e,t){if(e===""||e===null||typeof e>"u")return!0;var i=new RegExp(t);return i.test(e)},unique:function(l,e,t){if(e===""||e===null||typeof e>"u")return!0;var i=!0,s=l.getData(),n=l.getColumn()._getSelf();return this.table.rowManager.rows.forEach(function(r){var o=r.getData();o!==s&&e==n.getFieldValue(o)&&(i=!1)}),i},required:function(l,e,t){return e!==""&&e!==null&&typeof e<"u"}};const ie=class ie extends w{constructor(e){super(e),this.invalidCells=[],this.registerTableOption("validationMode","blocking"),this.registerColumnOption("validator"),this.registerTableFunction("getInvalidCells",this.getInvalidCells.bind(this)),this.registerTableFunction("clearCellValidation",this.userClearCellValidation.bind(this)),this.registerTableFunction("validate",this.userValidate.bind(this)),this.registerComponentFunction("cell","isValid",this.cellIsValid.bind(this)),this.registerComponentFunction("cell","clearValidation",this.clearValidation.bind(this)),this.registerComponentFunction("cell","validate",this.cellValidate.bind(this)),this.registerComponentFunction("column","validate",this.columnValidate.bind(this)),this.registerComponentFunction("row","validate",this.rowValidate.bind(this))}initialize(){this.subscribe("cell-delete",this.clearValidation.bind(this)),this.subscribe("column-layout",this.initializeColumnCheck.bind(this)),this.subscribe("edit-success",this.editValidate.bind(this)),this.subscribe("edit-editor-clear",this.editorClear.bind(this)),this.subscribe("edit-edited-clear",this.editedClear.bind(this))}editValidate(e,t,i){var s=this.table.options.validationMode!=="manual"?this.validate(e.column.modules.validate,e,t):!0;return s!==!0&&setTimeout(()=>{e.getElement().classList.add("tabulator-validation-fail"),this.dispatchExternal("validationFailed",e.getComponent(),t,s)}),s}editorClear(e,t){t&&e.column.modules.validate&&this.cellValidate(e),e.getElement().classList.remove("tabulator-validation-fail")}editedClear(e){e.modules.validate&&(e.modules.validate.invalid=!1)}cellIsValid(e){return e.modules.validate&&e.modules.validate.invalid||!0}cellValidate(e){return this.validate(e.column.modules.validate,e,e.getValue())}columnValidate(e){var t=[];return e.cells.forEach(i=>{this.cellValidate(i)!==!0&&t.push(i.getComponent())}),t.length?t:!0}rowValidate(e){var t=[];return e.cells.forEach(i=>{this.cellValidate(i)!==!0&&t.push(i.getComponent())}),t.length?t:!0}userClearCellValidation(e){e||(e=this.getInvalidCells()),Array.isArray(e)||(e=[e]),e.forEach(t=>{this.clearValidation(t._getSelf())})}userValidate(e){var t=[];return this.table.rowManager.rows.forEach(i=>{i=i.getComponent();var s=i.validate();s!==!0&&(t=t.concat(s))}),t.length?t:!0}initializeColumnCheck(e){typeof e.definition.validator<"u"&&this.initializeColumn(e)}initializeColumn(e){var t=this,i=[],s;e.definition.validator&&(Array.isArray(e.definition.validator)?e.definition.validator.forEach(n=>{s=t._extractValidator(n),s&&i.push(s)}):(s=this._extractValidator(e.definition.validator),s&&i.push(s)),e.modules.validate=i.length?i:!1)}_extractValidator(e){var t,i,s;switch(typeof e){case"string":return s=e.indexOf(":"),s>-1?(t=e.substring(0,s),i=e.substring(s+1)):t=e,this._buildValidator(t,i);case"function":return this._buildValidator(e);case"object":return this._buildValidator(e.type,e.parameters)}}_buildValidator(e,t){var i=typeof e=="function"?e:ie.validators[e];return i?{type:typeof e=="function"?"function":e,func:i,params:t}:(console.warn("Validator Setup Error - No matching validator found:",e),!1)}validate(e,t,i){var s=this,n=[],r=this.invalidCells.indexOf(t);return e&&e.forEach(o=>{o.func.call(s,t.getComponent(),i,o.params)||n.push({type:o.type,parameters:o.params})}),t.modules.validate||(t.modules.validate={}),n.length?(t.modules.validate.invalid=n,this.table.options.validationMode!=="manual"&&t.getElement().classList.add("tabulator-validation-fail"),r==-1&&this.invalidCells.push(t)):(t.modules.validate.invalid=!1,t.getElement().classList.remove("tabulator-validation-fail"),r>-1&&this.invalidCells.splice(r,1)),n.length?n:!0}getInvalidCells(){var e=[];return this.invalidCells.forEach(t=>{e.push(t.getComponent())}),e}clearValidation(e){var t;e.modules.validate&&e.modules.validate.invalid&&(e.getElement().classList.remove("tabulator-validation-fail"),e.modules.validate.invalid=!1,t=this.invalidCells.indexOf(e),t>-1&&this.invalidCells.splice(t,1))}};b(ie,"moduleName","validate"),b(ie,"validators",vs);let Fe=ie;var ue=Object.freeze({__proto__:null,AccessorModule:ce,AjaxModule:me,ClipboardModule:ge,ColumnCalcsModule:be,DataTreeModule:Ze,DownloadModule:ve,EditModule:we,ExportModule:Ce,FilterModule:Ee,FormatModule:ye,FrozenColumnsModule:et,FrozenRowsModule:tt,GroupRowsModule:it,HistoryModule:Re,HtmlTableImportModule:st,ImportModule:xe,InteractionModule:nt,KeybindingsModule:Te,MenuModule:rt,MoveColumnsModule:ot,MoveRowsModule:ke,MutatorModule:Me,PageModule:Le,PersistenceModule:Se,PopupModule:at,PrintModule:lt,ReactiveDataModule:ht,ResizeColumnsModule:dt,ResizeRowsModule:ut,ResizeTableModule:ct,ResponsiveLayoutModule:De,SelectRangeModule:re,SelectRowModule:ze,SortModule:He,SpreadsheetModule:pt,TooltipModule:mt,ValidateModule:Fe}),ws={debugEventsExternal:!1,debugEventsInternal:!1,debugInvalidOptions:!0,debugInvalidComponentFuncs:!0,debugInitialization:!0,debugDeprecation:!0,height:!1,minHeight:!1,maxHeight:!1,columnHeaderVertAlign:"top",popupContainer:!1,columns:[],columnDefaults:{},rowHeader:!1,data:!1,autoColumns:!1,autoColumnsDefinitions:!1,nestedFieldSeparator:".",footerElement:!1,index:"id",textDirection:"auto",addRowPos:"bottom",headerVisible:!0,renderVertical:"virtual",renderHorizontal:"basic",renderVerticalBuffer:0,scrollToRowPosition:"top",scrollToRowIfVisible:!0,scrollToColumnPosition:"left",scrollToColumnIfVisible:!0,rowFormatter:!1,rowFormatterPrint:null,rowFormatterClipboard:null,rowFormatterHtmlOutput:null,rowHeight:null,placeholder:!1,dataLoader:!0,dataLoaderLoading:!1,dataLoaderError:!1,dataLoaderErrorTimeout:3e3,dataSendParams:{},dataReceiveParams:{}};class gt{constructor(e,t,i={}){this.table=e,this.msgType=t,this.registeredDefaults=Object.assign({},i)}register(e,t){this.registeredDefaults[e]=t}generate(e,t={}){var i=Object.assign({},this.registeredDefaults),s=this.table.options.debugInvalidOptions||t.debugInvalidOptions===!0;Object.assign(i,e);for(let n in t)i.hasOwnProperty(n)||(s&&console.warn("Invalid "+this.msgType+" option:",n),i[n]=t.key);for(let n in i)n in t?i[n]=t[n]:Array.isArray(i[n])?i[n]=Object.assign([],i[n]):typeof i[n]=="object"&&i[n]!==null?i[n]=Object.assign({},i[n]):typeof i[n]>"u"&&delete i[n];return i}}class le extends M{constructor(e){super(e),this.elementVertical=e.rowManager.element,this.elementHorizontal=e.columnManager.element,this.tableElement=e.rowManager.tableElement,this.verticalFillMode="fit"}initialize(){}clearRows(){}clearColumns(){}reinitializeColumnWidths(e){}renderRows(){}renderColumns(){}rerenderRows(e){e&&e()}rerenderColumns(e,t){}renderRowCells(e){}rerenderRowCells(e,t){}scrollColumns(e,t){}scrollRows(e,t){}resize(){}scrollToRow(e){}scrollToRowNearestTop(e){}visibleRows(e){return[]}rows(){return this.table.rowManager.getDisplayRows()}styleRow(e,t){var i=e.getElement();t%2?(i.classList.add("tabulator-row-even"),i.classList.remove("tabulator-row-odd")):(i.classList.add("tabulator-row-odd"),i.classList.remove("tabulator-row-even"))}clear(){this.clearRows(),this.clearColumns()}render(){this.renderRows(),this.renderColumns()}rerender(e){this.rerenderRows(),this.rerenderColumns()}scrollToRowPosition(e,t,i){var s=this.rows().indexOf(e),n=e.getElement(),r=0;return new Promise((o,a)=>{if(s>-1){if(typeof i>"u"&&(i=this.table.options.scrollToRowIfVisible),!i&&x.elVisible(n)&&(r=x.elOffset(n).top-x.elOffset(this.elementVertical).top,r>0&&r"u"&&(t=this.table.options.scrollToRowPosition),t==="nearest"&&(t=this.scrollToRowNearestTop(e)?"top":"bottom"),this.scrollToRow(e),t){case"middle":case"center":this.elementVertical.scrollHeight-this.elementVertical.scrollTop==this.elementVertical.clientHeight?this.elementVertical.scrollTop=this.elementVertical.scrollTop+(n.offsetTop-this.elementVertical.scrollTop)-(this.elementVertical.scrollHeight-n.offsetTop)/2:this.elementVertical.scrollTop=this.elementVertical.scrollTop-this.elementVertical.clientHeight/2;break;case"bottom":this.elementVertical.scrollHeight-this.elementVertical.scrollTop==this.elementVertical.clientHeight?this.elementVertical.scrollTop=this.elementVertical.scrollTop-(this.elementVertical.scrollHeight-n.offsetTop)+n.offsetHeight:this.elementVertical.scrollTop=this.elementVertical.scrollTop-this.elementVertical.clientHeight+n.offsetHeight;break;case"top":this.elementVertical.scrollTop=n.offsetTop;break}o()}else console.warn("Scroll Error - Row not visible"),a("Scroll Error - Row not visible")})}}class Cs extends le{constructor(e){super(e)}renderRowCells(e,t){const i=document.createDocumentFragment();e.cells.forEach(s=>{i.appendChild(s.getElement())}),e.element.appendChild(i),t||e.cells.forEach(s=>{s.cellRendered()})}reinitializeColumnWidths(e){e.forEach(function(t){t.reinitializeWidth()})}}class Es extends le{constructor(e){super(e),this.leftCol=0,this.rightCol=0,this.scrollLeft=0,this.vDomScrollPosLeft=0,this.vDomScrollPosRight=0,this.vDomPadLeft=0,this.vDomPadRight=0,this.fitDataColAvg=0,this.windowBuffer=200,this.visibleRows=null,this.initialized=!1,this.isFitData=!1,this.columns=[]}initialize(){this.compatibilityCheck(),this.layoutCheck(),this.vertScrollListen()}compatibilityCheck(){this.options("layout")=="fitDataTable"&&console.warn("Horizontal Virtual DOM is not compatible with fitDataTable layout mode"),this.options("responsiveLayout")&&console.warn("Horizontal Virtual DOM is not compatible with responsive columns"),this.options("rtl")&&console.warn("Horizontal Virtual DOM is not currently compatible with RTL text direction")}layoutCheck(){this.isFitData=this.options("layout").startsWith("fitData")}vertScrollListen(){this.subscribe("scroll-vertical",this.clearVisRowCache.bind(this)),this.subscribe("data-refreshed",this.clearVisRowCache.bind(this))}clearVisRowCache(){this.visibleRows=null}renderColumns(e,t){this.dataChange()}scrollColumns(e,t){this.scrollLeft!=e&&(this.scrollLeft=e,this.scroll(e-(this.vDomScrollPosLeft+this.windowBuffer)))}calcWindowBuffer(){var e=this.elementVertical.clientWidth;this.table.columnManager.columnsByIndex.forEach(t=>{if(t.visible){var i=t.getWidth();i>e&&(e=i)}}),this.windowBuffer=e*2}rerenderColumns(e,t){var i={cols:this.columns,leftCol:this.leftCol,rightCol:this.rightCol},s=0;e&&!this.initialized||(this.clear(),this.calcWindowBuffer(),this.scrollLeft=this.elementVertical.scrollLeft,this.vDomScrollPosLeft=this.scrollLeft-this.windowBuffer,this.vDomScrollPosRight=this.scrollLeft+this.elementVertical.clientWidth+this.windowBuffer,this.table.columnManager.columnsByIndex.forEach(n=>{var r={},o;n.visible&&(n.modules.frozen||(o=n.getWidth(),r.leftPos=s,r.rightPos=s+o,r.width=o,this.isFitData&&(r.fitDataCheck=n.modules.vdomHoz?n.modules.vdomHoz.fitDataCheck:!0),s+o>this.vDomScrollPosLeft&&s{t.appendChild(i.getElement())}),e.element.appendChild(t),e.cells.forEach(i=>{i.cellRendered()})}}rerenderRowCells(e,t){this.reinitializeRow(e,t)}reinitializeColumnWidths(e){for(let t=this.leftCol;t<=this.rightCol;t++)this.columns[t].reinitializeWidth()}deinitialize(){this.initialized=!1}clear(){this.columns=[],this.leftCol=-1,this.rightCol=0,this.vDomScrollPosLeft=0,this.vDomScrollPosRight=0,this.vDomPadLeft=0,this.vDomPadRight=0}dataChange(){var e=!1,t,i;if(this.isFitData){if(this.table.columnManager.columnsByIndex.forEach(s=>{!s.definition.width&&s.visible&&(e=!0)}),e&&this.table.rowManager.getDisplayRows().length&&(this.vDomScrollPosRight=this.scrollLeft+this.elementVertical.clientWidth+this.windowBuffer,t=this.chain("rows-sample",[1],[],()=>this.table.rowManager.getDisplayRows())[0],t)){i=t.getElement(),t.generateCells(),this.tableElement.appendChild(i);for(let s=0;s{i!==this.columns[s]&&(t=!1)}),!t)}reinitializeRows(){var e=this.getVisibleRows(),t=this.table.rowManager.getRows().filter(i=>!e.includes(i));e.forEach(i=>{this.reinitializeRow(i,!0)}),t.forEach(i=>{i.deinitialize()})}getVisibleRows(){return this.visibleRows||(this.visibleRows=this.table.rowManager.getVisibleRows()),this.visibleRows}scroll(e){this.vDomScrollPosLeft+=e,this.vDomScrollPosRight+=e,Math.abs(e)>this.windowBuffer/2?this.rerenderColumns():e>0?(this.addColRight(),this.removeColLeft()):(this.addColLeft(),this.removeColRight())}colPositionAdjust(e,t,i){for(let s=e;s{if(s.type!=="group"){var n=s.getCell(i);s.getElement().insertBefore(n.getElement(),s.getCell(this.columns[this.rightCol]).getElement().nextSibling),n.cellRendered()}}),this.fitDataColActualWidthCheck(i),this.rightCol++,this.getVisibleRows().forEach(s=>{s.type!=="group"&&(s.modules.vdomHoz.rightCol=this.rightCol)}),this.rightCol>=this.columns.length-1?this.vDomPadRight=0:this.vDomPadRight-=i.getWidth()):t=!1}e&&(this.tableElement.style.paddingRight=this.vDomPadRight+"px")}addColLeft(){for(var e=!1,t=!0;t;){let i=this.columns[this.leftCol-1];if(i)if(i.modules.vdomHoz.rightPos>=this.vDomScrollPosLeft){e=!0,this.getVisibleRows().forEach(n=>{if(n.type!=="group"){var r=n.getCell(i);n.getElement().insertBefore(r.getElement(),n.getCell(this.columns[this.leftCol]).getElement()),r.cellRendered()}}),this.leftCol--,this.getVisibleRows().forEach(n=>{n.type!=="group"&&(n.modules.vdomHoz.leftCol=this.leftCol)}),this.leftCol<=0?this.vDomPadLeft=0:this.vDomPadLeft-=i.getWidth();let s=this.fitDataColActualWidthCheck(i);s&&(this.scrollLeft=this.elementVertical.scrollLeft=this.elementVertical.scrollLeft+s,this.vDomPadRight-=s)}else t=!1;else t=!1}e&&(this.tableElement.style.paddingLeft=this.vDomPadLeft+"px")}removeColRight(){for(var e=!1,t=!0;t;){let i=this.columns[this.rightCol];i&&i.modules.vdomHoz.leftPos>this.vDomScrollPosRight?(e=!0,this.getVisibleRows().forEach(s=>{if(s.type!=="group"){var n=s.getCell(i);try{s.getElement().removeChild(n.getElement())}catch(r){console.warn("Could not removeColRight",r.message)}}}),this.vDomPadRight+=i.getWidth(),this.rightCol--,this.getVisibleRows().forEach(s=>{s.type!=="group"&&(s.modules.vdomHoz.rightCol=this.rightCol)})):t=!1}e&&(this.tableElement.style.paddingRight=this.vDomPadRight+"px")}removeColLeft(){for(var e=!1,t=!0;t;){let i=this.columns[this.leftCol];i&&i.modules.vdomHoz.rightPos{if(s.type!=="group"){var n=s.getCell(i);try{s.getElement().removeChild(n.getElement())}catch(r){console.warn("Could not removeColLeft",r.message)}}}),this.vDomPadLeft+=i.getWidth(),this.leftCol++,this.getVisibleRows().forEach(s=>{s.type!=="group"&&(s.modules.vdomHoz.leftCol=this.leftCol)})):t=!1}e&&(this.tableElement.style.paddingLeft=this.vDomPadLeft+"px")}fitDataColActualWidthCheck(e){var t,i;return e.modules.vdomHoz.fitDataCheck&&(e.reinitializeWidth(),t=e.getWidth(),i=t-e.modules.vdomHoz.width,i&&(e.modules.vdomHoz.rightPos+=i,e.modules.vdomHoz.width=t,this.colPositionAdjust(this.columns.indexOf(e)+1,this.columns.length,i)),e.modules.vdomHoz.fitDataCheck=!1),i}initializeRow(e){if(e.type!=="group"){e.modules.vdomHoz={leftCol:this.leftCol,rightCol:this.rightCol},this.table.modules.frozenColumns&&this.table.modules.frozenColumns.leftColumns.forEach(t=>{this.appendCell(e,t)});for(let t=this.leftCol;t<=this.rightCol;t++)this.appendCell(e,this.columns[t]);this.table.modules.frozenColumns&&this.table.modules.frozenColumns.rightColumns.forEach(t=>{this.appendCell(e,t)})}}appendCell(e,t){if(t&&t.visible){let i=e.getCell(t);e.getElement().appendChild(i.getElement()),i.cellRendered()}}reinitializeRow(e,t){if(e.type!=="group"&&(t||!e.modules.vdomHoz||e.modules.vdomHoz.leftCol!==this.leftCol||e.modules.vdomHoz.rightCol!==this.rightCol)){for(var i=e.getElement();i.firstChild;)i.removeChild(i.firstChild);this.initializeRow(e)}}}class ys extends M{constructor(e){super(e),this.blockHozScrollEvent=!1,this.headersElement=null,this.contentsElement=null,this.rowHeader=null,this.element=null,this.columns=[],this.columnsByIndex=[],this.columnsByField={},this.scrollLeft=0,this.optionsList=new gt(this.table,"column definition",Qe),this.redrawBlock=!1,this.redrawBlockUpdate=null,this.renderer=null}initialize(){this.initializeRenderer(),this.headersElement=this.createHeadersElement(),this.contentsElement=this.createHeaderContentsElement(),this.element=this.createHeaderElement(),this.contentsElement.insertBefore(this.headersElement,this.contentsElement.firstChild),this.element.insertBefore(this.contentsElement,this.element.firstChild),this.initializeScrollWheelWatcher(),this.subscribe("scroll-horizontal",this.scrollHorizontal.bind(this)),this.subscribe("scrollbar-vertical",this.padVerticalScrollbar.bind(this))}padVerticalScrollbar(e){this.table.rtl?this.headersElement.style.marginLeft=e+"px":this.headersElement.style.marginRight=e+"px"}initializeRenderer(){var e,t={virtual:Es,basic:Cs};typeof this.table.options.renderHorizontal=="string"?e=t[this.table.options.renderHorizontal]:e=this.table.options.renderHorizontal,e?(this.renderer=new e(this.table,this.element,this.tableElement),this.renderer.initialize()):console.error("Unable to find matching renderer:",this.table.options.renderHorizontal)}createHeadersElement(){var e=document.createElement("div");return e.classList.add("tabulator-headers"),e.setAttribute("role","row"),e}createHeaderContentsElement(){var e=document.createElement("div");return e.classList.add("tabulator-header-contents"),e.setAttribute("role","rowgroup"),e}createHeaderElement(){var e=document.createElement("div");return e.classList.add("tabulator-header"),e.setAttribute("role","rowgroup"),this.table.options.headerVisible||e.classList.add("tabulator-header-hidden"),e}getElement(){return this.element}getContentsElement(){return this.contentsElement}getHeadersElement(){return this.headersElement}scrollHorizontal(e){this.contentsElement.scrollLeft=e,this.scrollLeft=e,this.renderer.scrollColumns(e)}initializeScrollWheelWatcher(){this.contentsElement.addEventListener("wheel",e=>{var t;e.deltaX&&(t=this.contentsElement.scrollLeft+e.deltaX,this.table.rowManager.scrollHorizontal(t),this.table.columnManager.scrollHorizontal(t))})}generateColumnsFromRowData(e){var t=[],i={},s=this.table.options.autoColumns==="full"?e:[e[0]],n=this.table.options.autoColumnsDefinitions;if(e&&e.length){if(s.forEach(r=>{Object.keys(r).forEach((o,a)=>{let h=r[o],d;i[o]?i[o]!==!0&&typeof h<"u"&&(i[o].sorter=this.calculateSorterFromValue(h),i[o]=!0):(d={field:o,title:o,sorter:this.calculateSorterFromValue(h)},t.splice(a,0,d),i[o]=typeof h>"u"?d:!0)})}),n)switch(typeof n){case"function":this.table.options.columns=n.call(this.table,t);break;case"object":Array.isArray(n)?t.forEach(r=>{var o=n.find(a=>a.field===r.field);o&&Object.assign(r,o)}):t.forEach(r=>{n[r.field]&&Object.assign(r,n[r.field])}),this.table.options.columns=t;break}else this.table.options.columns=t;this.setColumns(this.table.options.columns)}}calculateSorterFromValue(e){var t;switch(typeof e){case"undefined":t="string";break;case"boolean":t="boolean";break;case"number":t="number";break;case"object":Array.isArray(e)?t="array":t="string";break;default:!isNaN(e)&&e!==""?t="number":e.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)?t="alphanum":t="string";break}return t}setColumns(e,t){for(;this.headersElement.firstChild;)this.headersElement.removeChild(this.headersElement.firstChild);this.columns=[],this.columnsByIndex=[],this.columnsByField={},this.dispatch("columns-loading"),this.dispatchExternal("columnsLoading"),this.table.options.rowHeader&&(this.rowHeader=new U(this.table.options.rowHeader===!0?{}:this.table.options.rowHeader,this,!0),this.columns.push(this.rowHeader),this.headersElement.appendChild(this.rowHeader.getElement()),this.rowHeader.columnRendered()),e.forEach((i,s)=>{this._addColumn(i)}),this._reIndexColumns(),this.dispatch("columns-loaded"),this.subscribedExternal("columnsLoaded")&&this.dispatchExternal("columnsLoaded",this.getComponents()),this.rerenderColumns(!1,!0),this.redraw(!0)}_addColumn(e,t,i){var s=new U(e,this),n=s.getElement(),r=i&&this.findColumnIndex(i);if(t&&this.rowHeader&&(!i||i===this.rowHeader)&&(t=!1,i=this.rowHeader,r=0),i&&r>-1){var o=i.getTopColumn(),a=this.columns.indexOf(o),h=o.getElement();t?(this.columns.splice(a,0,s),h.parentNode.insertBefore(n,h)):(this.columns.splice(a+1,0,s),h.parentNode.insertBefore(n,h.nextSibling))}else t?(this.columns.unshift(s),this.headersElement.insertBefore(s.getElement(),this.headersElement.firstChild)):(this.columns.push(s),this.headersElement.appendChild(s.getElement()));return s.columnRendered(),s}registerColumnField(e){e.definition.field&&(this.columnsByField[e.definition.field]=e)}registerColumnPosition(e){this.columnsByIndex.push(e)}_reIndexColumns(){this.columnsByIndex=[],this.columns.forEach(function(e){e.reRegisterPosition()})}verticalAlignHeaders(){var e=0;this.redrawBlock||(this.headersElement.style.height="",this.columns.forEach(t=>{t.clearVerticalAlign()}),this.columns.forEach(t=>{var i=t.getHeight();i>e&&(e=i)}),this.headersElement.style.height=e+"px",this.columns.forEach(t=>{t.verticalAlign(this.table.options.columnHeaderVertAlign,e)}),this.table.rowManager.adjustTableSize())}findColumn(e){var t;if(typeof e=="object"){if(e instanceof U)return e;if(e instanceof $e)return e._getSelf()||!1;if(typeof HTMLElement<"u"&&e instanceof HTMLElement)return t=[],this.columns.forEach(s=>{t.push(s),t=t.concat(s.getColumns(!0))}),t.find(s=>s.element===e)||!1}else return this.columnsByField[e]||!1;return!1}getColumnByField(e){return this.columnsByField[e]}getColumnsByFieldRoot(e){var t=[];return Object.keys(this.columnsByField).forEach(i=>{var s=this.table.options.nestedFieldSeparator?i.split(this.table.options.nestedFieldSeparator)[0]:i;s===e&&t.push(this.columnsByField[i])}),t}getColumnByIndex(e){return this.columnsByIndex[e]}getFirstVisibleColumn(){var e=this.columnsByIndex.findIndex(t=>t.visible);return e>-1?this.columnsByIndex[e]:!1}getVisibleColumnsByIndex(){return this.columnsByIndex.filter(e=>e.visible)}getColumns(){return this.columns}findColumnIndex(e){return this.columnsByIndex.findIndex(t=>e===t)}getRealColumns(){return this.columnsByIndex}traverse(e){this.columnsByIndex.forEach((t,i)=>{e(t,i)})}getDefinitions(e){var t=[];return this.columnsByIndex.forEach(i=>{(!e||e&&i.visible)&&t.push(i.getDefinition())}),t}getDefinitionTree(){var e=[];return this.columns.forEach(t=>{e.push(t.getDefinition(!0))}),e}getComponents(e){var t=[],i=e?this.columns:this.columnsByIndex;return i.forEach(s=>{t.push(s.getComponent())}),t}getWidth(){var e=0;return this.columnsByIndex.forEach(t=>{t.visible&&(e+=t.getWidth())}),e}moveColumn(e,t,i){t.element.parentNode.insertBefore(e.element,t.element),i&&t.element.parentNode.insertBefore(t.element,e.element),this.moveColumnActual(e,t,i),this.verticalAlignHeaders(),this.table.rowManager.reinitialize()}moveColumnActual(e,t,i){e.parent.isGroup?this._moveColumnInArray(e.parent.columns,e,t,i):this._moveColumnInArray(this.columns,e,t,i),this._moveColumnInArray(this.columnsByIndex,e,t,i,!0),this.rerenderColumns(!0),this.dispatch("column-moved",e,t,i),this.subscribedExternal("columnMoved")&&this.dispatchExternal("columnMoved",e.getComponent(),this.table.columnManager.getComponents())}_moveColumnInArray(e,t,i,s,n){var r=e.indexOf(t),o,a=[];r>-1&&(e.splice(r,1),o=e.indexOf(i),o>-1?s&&(o=o+1):o=r,e.splice(o,0,t),n&&(a=this.chain("column-moving-rows",[t,i,s],null,[])||[],a=a.concat(this.table.rowManager.rows),a.forEach(function(h){if(h.cells.length){var d=h.cells.splice(r,1)[0];h.cells.splice(o,0,d)}})))}scrollToColumn(e,t,i){var s=0,n=e.getLeftOffset(),r=0,o=e.getElement();return new Promise((a,h)=>{if(typeof t>"u"&&(t=this.table.options.scrollToColumnPosition),typeof i>"u"&&(i=this.table.options.scrollToColumnIfVisible),e.visible){switch(t){case"middle":case"center":r=-this.element.clientWidth/2;break;case"right":r=o.clientWidth-this.headersElement.clientWidth;break}if(!i&&n>0&&n+o.offsetWidth{t.push(i.generateCell(e))}),t}getFlexBaseWidth(){var e=this.table.element.clientWidth,t=0;return this.table.rowManager.element.scrollHeight>this.table.rowManager.element.clientHeight&&(e-=this.table.rowManager.element.offsetWidth-this.table.rowManager.element.clientWidth),this.columnsByIndex.forEach(function(i){var s,n,r;i.visible&&(s=i.definition.width||0,n=parseInt(i.minWidth),typeof s=="string"?s.indexOf("%")>-1?r=e/100*parseInt(s):r=parseInt(s):r=s,t+=r>n?r:n)}),t}addColumn(e,t,i){return new Promise((s,n)=>{var r=this._addColumn(e,t,i);this._reIndexColumns(),this.dispatch("column-add",e,t,i),this.layoutMode()!="fitColumns"&&r.reinitializeWidth(),this.redraw(!0),this.table.rowManager.reinitialize(),this.rerenderColumns(),s(r)})}deregisterColumn(e){var t=e.getField(),i;t&&delete this.columnsByField[t],i=this.columnsByIndex.indexOf(e),i>-1&&this.columnsByIndex.splice(i,1),i=this.columns.indexOf(e),i>-1&&this.columns.splice(i,1),this.verticalAlignHeaders(),this.redraw()}rerenderColumns(e,t){this.redrawBlock?(e===!1||e===!0&&this.redrawBlockUpdate===null)&&(this.redrawBlockUpdate=e):this.renderer.rerenderColumns(e,t)}blockRedraw(){this.redrawBlock=!0,this.redrawBlockUpdate=null}restoreRedraw(){this.redrawBlock=!1,this.verticalAlignHeaders(),this.renderer.rerenderColumns(this.redrawBlockUpdate)}redraw(e){x.elVisible(this.element)&&this.verticalAlignHeaders(),e&&(this.table.rowManager.resetScroll(),this.table.rowManager.reinitialize()),this.confirm("table-redrawing",e)||this.layoutRefresh(e),this.dispatch("table-redraw",e),this.table.footerManager.redraw()}}class Rs extends le{constructor(e){super(e),this.verticalFillMode="fill",this.scrollTop=0,this.scrollLeft=0,this.scrollTop=0,this.scrollLeft=0}clearRows(){for(var e=this.tableElement;e.firstChild;)e.removeChild(e.firstChild);e.scrollTop=0,e.scrollLeft=0,e.style.minWidth="",e.style.minHeight="",e.style.display="",e.style.visibility=""}renderRows(){var e=this.tableElement,t=!0,i=document.createDocumentFragment(),s=this.rows();s.forEach((n,r)=>{this.styleRow(n,r),n.initialize(!1,!0),n.type!=="group"&&(t=!1),i.appendChild(n.getElement())}),e.appendChild(i),s.forEach(n=>{n.rendered(),n.heightInitialized||n.calcHeight(!0)}),s.forEach(n=>{n.heightInitialized||n.setCellHeight()}),t?e.style.minWidth=this.table.columnManager.getWidth()+"px":e.style.minWidth=""}rerenderRows(e){this.clearRows(),e&&e(),this.renderRows(),this.rows().length||this.table.rowManager.tableEmpty()}scrollToRowNearestTop(e){var t=x.elOffset(e.getElement()).top;return!(Math.abs(this.elementVertical.scrollTop-t)>Math.abs(this.elementVertical.scrollTop+this.elementVertical.clientHeight-t))}scrollToRow(e){var t=e.getElement();this.elementVertical.scrollTop=x.elOffset(t).top-x.elOffset(this.elementVertical).top+this.elementVertical.scrollTop}visibleRows(e){return this.rows()}}class xs extends le{constructor(e){super(e),this.verticalFillMode="fill",this.scrollTop=0,this.scrollLeft=0,this.vDomRowHeight=20,this.vDomTop=0,this.vDomBottom=0,this.vDomScrollPosTop=0,this.vDomScrollPosBottom=0,this.vDomTopPad=0,this.vDomBottomPad=0,this.vDomMaxRenderChain=90,this.vDomWindowBuffer=0,this.vDomWindowMinTotalRows=20,this.vDomWindowMinMarginRows=5,this.vDomTopNewRows=[],this.vDomBottomNewRows=[]}clearRows(){for(var e=this.tableElement;e.firstChild;)e.removeChild(e.firstChild);e.style.paddingTop="",e.style.paddingBottom="",e.style.minHeight="",e.style.display="",e.style.visibility="",this.elementVertical.scrollTop=0,this.elementVertical.scrollLeft=0,this.scrollTop=0,this.scrollLeft=0,this.vDomTop=0,this.vDomBottom=0,this.vDomTopPad=0,this.vDomBottomPad=0,this.vDomScrollPosTop=0,this.vDomScrollPosBottom=0}renderRows(){this._virtualRenderFill()}rerenderRows(e){for(var t=this.elementVertical.scrollTop,i=!1,s=!1,n=this.table.rowManager.scrollLeft,r=this.rows(),o=this.vDomTop;o<=this.vDomBottom;o++)if(r[o]){var a=t-r[o].getElement().offsetTop;if(s===!1||Math.abs(a){h.deinitializeHeight()}),e&&e(),this.rows().length?this._virtualRenderFill(i===!1?this.rows.length-1:i,!0,s||0):(this.clear(),this.table.rowManager.tableEmpty()),this.scrollColumns(n)}scrollColumns(e){this.table.rowManager.scrollHorizontal(e)}scrollRows(e,t){var i=e-this.vDomScrollPosTop,s=e-this.vDomScrollPosBottom,n=this.vDomWindowBuffer*2,r=this.rows();if(this.scrollTop=e,-i>n||s>n){var o=this.table.rowManager.scrollLeft;this._virtualRenderFill(Math.floor(this.elementVertical.scrollTop/this.elementVertical.scrollHeight*r.length)),this.scrollColumns(o)}else t?(i<0&&this._addTopRow(r,-i),s<0&&(this.vDomScrollHeight-this.scrollTop>this.vDomWindowBuffer?this._removeBottomRow(r,-s):this.vDomScrollPosBottom=this.scrollTop)):(s>=0&&this._addBottomRow(r,s),i>=0&&(this.scrollTop>this.vDomWindowBuffer?this._removeTopRow(r,i):this.vDomScrollPosTop=this.scrollTop))}resize(){this.vDomWindowBuffer=this.table.options.renderVerticalBuffer||this.elementVertical.clientHeight}scrollToRowNearestTop(e){var t=this.rows().indexOf(e);return!(Math.abs(this.vDomTop-t)>Math.abs(this.vDomBottom-t))}scrollToRow(e){var t=this.rows().indexOf(e);t>-1&&this._virtualRenderFill(t,!0)}visibleRows(e){var t=this.elementVertical.scrollTop,i=this.elementVertical.clientHeight+t,s=!1,n=0,r=0,o=this.rows();if(e)n=this.vDomTop,r=this.vDomBottom;else for(var a=this.vDomTop;a<=this.vDomBottom;a++)if(o[a])if(s)if(i-o[a].getElement().offsetTop>=0)r=a;else break;else if(t-o[a].getElement().offsetTop>=0)n=a;else if(s=!0,i-o[a].getElement().offsetTop>=0)r=a;else break;return o.slice(n,r+1)}_virtualRenderFill(e,t,i){var s=this.tableElement,n=this.elementVertical,r=0,o=0,a=0,h=0,d=0,u=0,c=this.rows(),f=c.length,g=0,p,v,m=[],C=0,T=0,y=this.table.rowManager.fixedHeight,k=this.elementVertical.clientHeight,P=this.table.options.rowHeight,X=!0;if(e=e||0,i=i||0,!e)this.clear();else{for(;s.firstChild;)s.removeChild(s.firstChild);h=(f-e+1)*this.vDomRowHeight,h{L.rendered(),L.heightInitialized||L.calcHeight(!0)}),m.forEach(L=>{L.heightInitialized||L.setCellHeight()}),m.forEach(L=>{a=L.getHeight(),Cthis.vDomWindowBuffer&&(this.vDomWindowBuffer=a*2),C++}),X=this.table.rowManager.adjustTableSize(),k=this.elementVertical.clientHeight,X&&(y||this.table.options.maxHeight)&&(P=o/C,T=Math.max(this.vDomWindowMinTotalRows,Math.ceil(k/P+this.vDomWindowBuffer/P)))}e?(this.vDomTopPad=t?this.vDomRowHeight*this.vDomTop+i:this.scrollTop-d,this.vDomBottomPad=this.vDomBottom==f-1?0:Math.max(this.vDomScrollHeight-this.vDomTopPad-o-d,0)):(this.vDomTopPad=0,this.vDomRowHeight=Math.floor((o+d)/C),this.vDomBottomPad=this.vDomRowHeight*(f-this.vDomBottom-1),this.vDomScrollHeight=d+o+this.vDomBottomPad-k),s.style.paddingTop=this.vDomTopPad+"px",s.style.paddingBottom=this.vDomBottomPad+"px",t&&(this.scrollTop=this.vDomTopPad+d+i-(this.elementVertical.scrollWidth>this.elementVertical.clientWidth?this.elementVertical.offsetHeight-k:0)),this.scrollTop=Math.min(this.scrollTop,this.elementVertical.scrollHeight-k),this.elementVertical.scrollWidth>this.elementVertical.clientWidth&&t&&(this.scrollTop+=this.elementVertical.offsetHeight-k),this.vDomScrollPosTop=this.scrollTop,this.vDomScrollPosBottom=this.scrollTop,n.scrollTop=this.scrollTop,this.dispatch("render-virtual-fill")}}_addTopRow(e,t){for(var i=this.tableElement,s=[],n=0,r=this.vDomTop-1,o=0,a=!0;a;)if(this.vDomTop){let h=e[r],d,u;h&&o=d?(this.styleRow(h,r),i.insertBefore(h.getElement(),i.firstChild),(!h.initialized||!h.heightInitialized)&&s.push(h),h.initialize(),u||(d=h.getElement().offsetHeight,d>this.vDomWindowBuffer&&(this.vDomWindowBuffer=d*2)),t-=d,n+=d,this.vDomTop--,r--,o++):a=!1):a=!1}else a=!1;for(let h of s)h.clearCellHeight();this._quickNormalizeRowHeight(s),n&&(this.vDomTopPad-=n,this.vDomTopPad<0&&(this.vDomTopPad=r*this.vDomRowHeight),r<1&&(this.vDomTopPad=0),i.style.paddingTop=this.vDomTopPad+"px",this.vDomScrollPosTop-=n)}_removeTopRow(e,t){for(var i=[],s=0,n=0,r=!0;r;){let o=e[this.vDomTop],a;o&&n=a?(this.vDomTop++,t-=a,s+=a,i.push(o),n++):r=!1):r=!1}for(let o of i){let a=o.getElement();a.parentNode&&a.parentNode.removeChild(a)}s&&(this.vDomTopPad+=s,this.tableElement.style.paddingTop=this.vDomTopPad+"px",this.vDomScrollPosTop+=this.vDomTop?s:s+this.vDomWindowBuffer)}_addBottomRow(e,t){for(var i=this.tableElement,s=[],n=0,r=this.vDomBottom+1,o=0,a=!0;a;){let h=e[r],d,u;h&&o=d?(this.styleRow(h,r),i.appendChild(h.getElement()),(!h.initialized||!h.heightInitialized)&&s.push(h),h.initialize(),u||(d=h.getElement().offsetHeight,d>this.vDomWindowBuffer&&(this.vDomWindowBuffer=d*2)),t-=d,n+=d,this.vDomBottom++,r++,o++):a=!1):a=!1}for(let h of s)h.clearCellHeight();this._quickNormalizeRowHeight(s),n&&(this.vDomBottomPad-=n,(this.vDomBottomPad<0||r==e.length-1)&&(this.vDomBottomPad=0),i.style.paddingBottom=this.vDomBottomPad+"px",this.vDomScrollPosBottom+=n)}_removeBottomRow(e,t){for(var i=[],s=0,n=0,r=!0;r;){let o=e[this.vDomBottom],a;o&&n=a?(this.vDomBottom--,t-=a,s+=a,i.push(o),n++):r=!1):r=!1}for(let o of i){let a=o.getElement();a.parentNode&&a.parentNode.removeChild(a)}s&&(this.vDomBottomPad+=s,this.vDomBottomPad<0&&(this.vDomBottomPad=0),this.tableElement.style.paddingBottom=this.vDomBottomPad+"px",this.vDomScrollPosBottom-=s)}_quickNormalizeRowHeight(e){for(let t of e)t.calcHeight();for(let t of e)t.setCellHeight()}}class Ts extends M{constructor(e){super(e),this.element=this.createHolderElement(),this.tableElement=this.createTableElement(),this.heightFixer=this.createTableElement(),this.placeholder=null,this.placeholderContents=null,this.firstRender=!1,this.renderMode="virtual",this.fixedHeight=!1,this.rows=[],this.activeRowsPipeline=[],this.activeRows=[],this.activeRowsCount=0,this.displayRows=[],this.displayRowsCount=0,this.scrollTop=0,this.scrollLeft=0,this.redrawBlock=!1,this.redrawBlockRestoreConfig=!1,this.redrawBlockRenderInPosition=!1,this.dataPipeline=[],this.displayPipeline=[],this.scrollbarWidth=0,this.renderer=null}createHolderElement(){var e=document.createElement("div");return e.classList.add("tabulator-tableholder"),e.setAttribute("tabindex",0),e}createTableElement(){var e=document.createElement("div");return e.classList.add("tabulator-table"),e.setAttribute("role","rowgroup"),e}initializePlaceholder(){var e=this.table.options.placeholder;if(typeof e=="function"&&(e=e.call(this.table)),e=this.chain("placeholder",[e],e,e)||e,e){let t=document.createElement("div");if(t.classList.add("tabulator-placeholder"),typeof e=="string"){let i=document.createElement("div");i.classList.add("tabulator-placeholder-contents"),i.innerHTML=e,t.appendChild(i),this.placeholderContents=i}else typeof HTMLElement<"u"&&e instanceof HTMLElement?(t.appendChild(e),this.placeholderContents=e):(console.warn("Invalid placeholder provided, must be string or HTML Element",e),this.el=null);this.placeholder=t}}getElement(){return this.element}getTableElement(){return this.tableElement}initialize(){this.initializePlaceholder(),this.initializeRenderer(),this.element.appendChild(this.tableElement),this.firstRender=!0,this.element.addEventListener("scroll",()=>{var e=this.element.scrollLeft,t=this.scrollLeft>e,i=this.element.scrollTop,s=this.scrollTop>i;this.scrollLeft!=e&&(this.scrollLeft=e,this.dispatch("scroll-horizontal",e,t),this.dispatchExternal("scrollHorizontal",e,t),this._positionPlaceholder()),this.scrollTop!=i&&(this.scrollTop=i,this.renderer.scrollRows(i,s),this.dispatch("scroll-vertical",i,s),this.dispatchExternal("scrollVertical",i,s))})}findRow(e){if(typeof e=="object"){if(e instanceof S)return e;if(e instanceof oe)return e._getSelf()||!1;if(typeof HTMLElement<"u"&&e instanceof HTMLElement)return this.rows.find(i=>i.getElement()===e)||!1;if(e===null)return!1}else return typeof e>"u"?!1:this.rows.find(i=>i.data[this.table.options.index]==e)||!1;return!1}getRowFromDataObject(e){var t=this.rows.find(i=>i.data===e);return t||!1}getRowFromPosition(e){return this.getDisplayRows().find(t=>t.type==="row"&&t.getPosition()===e&&t.isDisplayed())}scrollToRow(e,t,i){return this.renderer.scrollToRowPosition(e,t,i)}setData(e,t,i){return new Promise((s,n)=>{t&&this.getDisplayRows().length?this.table.options.pagination?this._setDataActual(e,!0):this.reRenderInPosition(()=>{this._setDataActual(e)}):(this.table.options.autoColumns&&i&&this.table.initialized&&this.table.columnManager.generateColumnsFromRowData(e),this.resetScroll(),this._setDataActual(e)),s()})}_setDataActual(e,t){this.dispatchExternal("dataProcessing",e),this._wipeElements(),Array.isArray(e)?(this.dispatch("data-processing",e),e.forEach((i,s)=>{if(i&&typeof i=="object"){var n=new S(i,this);this.rows.push(n)}else console.warn("Data Loading Warning - Invalid row data detected and ignored, expecting object but received:",i)}),this.refreshActiveData(!1,!1,t),this.dispatch("data-processed",e),this.dispatchExternal("dataProcessed",e)):console.error(`Data Loading Error - Unable to process data due to invalid data type +Expecting: array +Received: `,typeof e,` +Data: `,e)}_wipeElements(){this.dispatch("rows-wipe"),this.destroy(),this.adjustTableSize(),this.dispatch("rows-wiped")}destroy(){this.rows.forEach(e=>{e.wipe()}),this.rows=[],this.activeRows=[],this.activeRowsPipeline=[],this.activeRowsCount=0,this.displayRows=[],this.displayRowsCount=0}deleteRow(e,t){var i=this.rows.indexOf(e),s=this.activeRows.indexOf(e);s>-1&&this.activeRows.splice(s,1),i>-1&&this.rows.splice(i,1),this.setActiveRows(this.activeRows),this.displayRowIterator(n=>{var r=n.indexOf(e);r>-1&&n.splice(r,1)}),t||this.reRenderInPosition(),this.regenerateRowPositions(),this.dispatchExternal("rowDeleted",e.getComponent()),this.displayRowsCount||this.tableEmpty(),this.subscribedExternal("dataChanged")&&this.dispatchExternal("dataChanged",this.getData())}addRow(e,t,i,s){var n=this.addRowActual(e,t,i,s);return n}addRows(e,t,i,s){var n=[];return new Promise((r,o)=>{t=this.findAddRowPos(t),Array.isArray(e)||(e=[e]),(typeof i>"u"&&t||typeof i<"u"&&!t)&&e.reverse(),e.forEach((a,h)=>{var d=this.addRow(a,t,i,!0);n.push(d),this.dispatch("row-added",d,a,t,i)}),this.refreshActiveData(s?"displayPipeline":!1,!1,!0),this.regenerateRowPositions(),this.displayRowsCount&&this._clearPlaceholder(),r(n)})}findAddRowPos(e){return typeof e>"u"&&(e=this.table.options.addRowPos),e==="pos"&&(e=!0),e==="bottom"&&(e=!1),e}addRowActual(e,t,i,s){var n=e instanceof S?e:new S(e||{},this),r=this.findAddRowPos(t),o=-1,a,h;return i||(h=this.chain("row-adding-position",[n,r],null,{index:i,top:r}),i=h.index,r=h.top),typeof i<"u"&&(i=this.findRow(i)),i=this.chain("row-adding-index",[n,i,r],null,i),i&&(o=this.rows.indexOf(i)),i&&o>-1?(a=this.activeRows.indexOf(i),this.displayRowIterator(function(d){var u=d.indexOf(i);u>-1&&d.splice(r?u:u+1,0,n)}),a>-1&&this.activeRows.splice(r?a:a+1,0,n),this.rows.splice(r?o:o+1,0,n)):r?(this.displayRowIterator(function(d){d.unshift(n)}),this.activeRows.unshift(n),this.rows.unshift(n)):(this.displayRowIterator(function(d){d.push(n)}),this.activeRows.push(n),this.rows.push(n)),this.setActiveRows(this.activeRows),this.dispatchExternal("rowAdded",n.getComponent()),this.subscribedExternal("dataChanged")&&this.dispatchExternal("dataChanged",this.table.rowManager.getData()),s||this.reRenderInPosition(),n}moveRow(e,t,i){this.dispatch("row-move",e,t,i),this.moveRowActual(e,t,i),this.regenerateRowPositions(),this.dispatch("row-moved",e,t,i),this.dispatchExternal("rowMoved",e.getComponent())}moveRowActual(e,t,i){this.moveRowInArray(this.rows,e,t,i),this.moveRowInArray(this.activeRows,e,t,i),this.displayRowIterator(s=>{this.moveRowInArray(s,e,t,i)}),this.dispatch("row-moving",e,t,i)}moveRowInArray(e,t,i,s){var n,r,o,a;if(t!==i&&(n=e.indexOf(t),n>-1&&(e.splice(n,1),r=e.indexOf(i),r>-1?s?e.splice(r+1,0,t):e.splice(r,0,t):e.splice(n,0,t)),e===this.getDisplayRows())){o=nn?r:n+1;for(let h=o;h<=a;h++)e[h]&&this.styleRow(e[h],h)}}clearData(){this.setData([])}getRowIndex(e){return this.findRowIndex(e,this.rows)}getDisplayRowIndex(e){var t=this.getDisplayRows().indexOf(e);return t>-1?t:!1}nextDisplayRow(e,t){var i=this.getDisplayRowIndex(e),s=!1;return i!==!1&&i-1)?i:!1}getData(e,t){var i=[],s=this.getRows(e);return s.forEach(function(n){n.type=="row"&&i.push(n.getData(t||"data"))}),i}getComponents(e){var t=[],i=this.getRows(e);return i.forEach(function(s){t.push(s.getComponent())}),t}getDataCount(e){var t=this.getRows(e);return t.length}scrollHorizontal(e){this.scrollLeft=e,this.element.scrollLeft=e,this.dispatch("scroll-horizontal",e)}registerDataPipelineHandler(e,t){typeof t<"u"?(this.dataPipeline.push({handler:e,priority:t}),this.dataPipeline.sort((i,s)=>i.priority-s.priority)):console.error("Data pipeline handlers must have a priority in order to be registered")}registerDisplayPipelineHandler(e,t){typeof t<"u"?(this.displayPipeline.push({handler:e,priority:t}),this.displayPipeline.sort((i,s)=>i.priority-s.priority)):console.error("Display pipeline handlers must have a priority in order to be registered")}refreshActiveData(e,t,i){var s=this.table,n="",r=0,o=["all","dataPipeline","display","displayPipeline","end"];if(!this.table.destroyed){if(typeof e=="function")if(r=this.dataPipeline.findIndex(a=>a.handler===e),r>-1)n="dataPipeline",t&&(r==this.dataPipeline.length-1?n="display":r++);else if(r=this.displayPipeline.findIndex(a=>a.handler===e),r>-1)n="displayPipeline",t&&(r==this.displayPipeline.length-1?n="end":r++);else{console.error("Unable to refresh data, invalid handler provided",e);return}else n=e||"all",r=0;if(this.redrawBlock){(!this.redrawBlockRestoreConfig||this.redrawBlockRestoreConfig&&(this.redrawBlockRestoreConfig.stage===n&&r{i.type==="row"&&(i.setPosition(t),t++)})}setActiveRows(e){this.activeRows=this.activeRows=Object.assign([],e),this.activeRowsCount=this.activeRows.length}resetDisplayRows(){this.displayRows=[],this.displayRows.push(this.activeRows.slice(0)),this.displayRowsCount=this.displayRows[0].length}setDisplayRows(e,t){this.displayRows[t]=e,t==this.displayRows.length-1&&(this.displayRowsCount=this.displayRows[this.displayRows.length-1].length)}getDisplayRows(e){return typeof e>"u"?this.displayRows.length?this.displayRows[this.displayRows.length-1]:[]:this.displayRows[e]||[]}getVisibleRows(e,t){var i=Object.assign([],this.renderer.visibleRows(!t));return e&&(i=this.chain("rows-visible",[t],i,i)),i}displayRowIterator(e){this.activeRowsPipeline.forEach(e),this.displayRows.forEach(e),this.displayRowsCount=this.displayRows[this.displayRows.length-1].length}getRows(e){var t=[];switch(e){case"active":t=this.activeRows;break;case"display":t=this.table.rowManager.getDisplayRows();break;case"visible":t=this.getVisibleRows(!1,!0);break;default:t=this.chain("rows-retrieve",e,null,this.rows)||this.rows}return t}reRenderInPosition(e){this.redrawBlock?e?e():this.redrawBlockRenderInPosition=!0:(this.dispatchExternal("renderStarted"),this.renderer.rerenderRows(e),this.fixedHeight||this.adjustTableSize(),this.scrollBarCheck(),this.dispatchExternal("renderComplete"))}scrollBarCheck(){var e=0;this.element.scrollHeight>this.element.clientHeight&&(e=this.element.offsetWidth-this.element.clientWidth),e!==this.scrollbarWidth&&(this.scrollbarWidth=e,this.dispatch("scrollbar-vertical",e))}initializeRenderer(){var e,t={virtual:xs,basic:Rs};typeof this.table.options.renderVertical=="string"?e=t[this.table.options.renderVertical]:e=this.table.options.renderVertical,e?(this.renderMode=this.table.options.renderVertical,this.renderer=new e(this.table,this.element,this.tableElement),this.renderer.initialize(),(this.table.element.clientHeight||this.table.options.height)&&!(this.table.options.minHeight&&this.table.options.maxHeight)?this.fixedHeight=!0:this.fixedHeight=!1):console.error("Unable to find matching renderer:",this.table.options.renderVertical)}getRenderMode(){return this.renderMode}renderTable(){this.dispatchExternal("renderStarted"),this.element.scrollTop=0,this._clearTable(),this.displayRowsCount?(this.renderer.renderRows(),this.firstRender&&(this.firstRender=!1,this.fixedHeight||this.adjustTableSize(),this.layoutRefresh(!0))):this.renderEmptyScroll(),this.fixedHeight||this.adjustTableSize(),this.dispatch("table-layout"),this.displayRowsCount||this._showPlaceholder(),this.scrollBarCheck(),this.dispatchExternal("renderComplete")}renderEmptyScroll(){this.placeholder?this.tableElement.style.display="none":this.tableElement.style.minWidth=this.table.columnManager.getWidth()+"px"}_clearTable(){this._clearPlaceholder(),this.scrollTop=0,this.scrollLeft=0,this.renderer.clearRows()}tableEmpty(){this.renderEmptyScroll(),this._showPlaceholder()}checkPlaceholder(){this.displayRowsCount?this._clearPlaceholder():this.tableEmpty()}_showPlaceholder(){this.placeholder&&(this.placeholder&&this.placeholder.parentNode&&this.placeholder.parentNode.removeChild(this.placeholder),this.initializePlaceholder(),this.placeholder.setAttribute("tabulator-render-mode",this.renderMode),this.getElement().appendChild(this.placeholder),this._positionPlaceholder(),this.adjustTableSize())}_clearPlaceholder(){this.placeholder&&this.placeholder.parentNode&&this.placeholder.parentNode.removeChild(this.placeholder),this.tableElement.style.minWidth="",this.tableElement.style.display=""}_positionPlaceholder(){this.placeholder&&this.placeholder.parentNode&&(this.placeholder.style.width=this.table.columnManager.getWidth()+"px",this.placeholderContents.style.width=this.table.rowManager.element.clientWidth+"px",this.placeholderContents.style.marginLeft=this.scrollLeft+"px")}styleRow(e,t){var i=e.getElement();t%2?(i.classList.add("tabulator-row-even"),i.classList.remove("tabulator-row-odd")):(i.classList.add("tabulator-row-odd"),i.classList.remove("tabulator-row-even"))}normalizeHeight(){this.activeRows.forEach(function(e){e.normalizeHeight()})}adjustTableSize(){let e=this.element.clientHeight,t,i=!1;if(this.renderer.verticalFillMode==="fill"){let s=Math.floor(this.table.columnManager.getElement().getBoundingClientRect().height+(this.table.footerManager&&this.table.footerManager.active&&!this.table.footerManager.external?this.table.footerManager.getElement().getBoundingClientRect().height:0));if(this.fixedHeight){t=isNaN(this.table.options.minHeight)?this.table.options.minHeight:this.table.options.minHeight+"px";const n="calc(100% - "+s+"px)";this.element.style.minHeight=t||"calc(100% - "+s+"px)",this.element.style.height=n,this.element.style.maxHeight=n}else this.element.style.height="",this.element.style.height=this.table.element.clientHeight-s+"px",this.element.scrollTop=this.scrollTop;this.renderer.resize(),!this.fixedHeight&&e!=this.element.clientHeight&&(i=!0,this.subscribed("table-resize")?this.dispatch("table-resize"):this.redraw()),this.scrollBarCheck()}return this._positionPlaceholder(),i}reinitialize(){this.rows.forEach(function(e){e.reinitialize(!0)})}blockRedraw(){this.redrawBlock=!0,this.redrawBlockRestoreConfig=!1}restoreRedraw(){this.redrawBlock=!1,this.redrawBlockRestoreConfig?(this.refreshActiveData(this.redrawBlockRestoreConfig.handler,this.redrawBlockRestoreConfig.skipStage,this.redrawBlockRestoreConfig.renderInPosition),this.redrawBlockRestoreConfig=!1):this.redrawBlockRenderInPosition&&this.reRenderInPosition(),this.redrawBlockRenderInPosition=!1}redraw(e){this.adjustTableSize(),this.table.tableWidth=this.table.element.clientWidth,e?this.renderTable():(this.reRenderInPosition(),this.scrollHorizontal(this.scrollLeft))}resetScroll(){if(this.element.scrollLeft=0,this.element.scrollTop=0,this.table.browser==="ie"){var e=document.createEvent("Event");e.initEvent("scroll",!1,!0),this.element.dispatchEvent(e)}else this.element.dispatchEvent(new Event("scroll"))}}class ks extends M{constructor(e){super(e),this.active=!1,this.element=this.createElement(),this.containerElement=this.createContainerElement(),this.external=!1}initialize(){this.initializeElement()}createElement(){var e=document.createElement("div");return e.classList.add("tabulator-footer"),e}createContainerElement(){var e=document.createElement("div");return e.classList.add("tabulator-footer-contents"),this.element.appendChild(e),e}initializeElement(){if(this.table.options.footerElement)switch(typeof this.table.options.footerElement){case"string":this.table.options.footerElement[0]==="<"?this.containerElement.innerHTML=this.table.options.footerElement:(this.external=!0,this.containerElement=document.querySelector(this.table.options.footerElement));break;default:this.element=this.table.options.footerElement;break}}getElement(){return this.element}append(e){this.activate(),this.containerElement.appendChild(e),this.table.rowManager.adjustTableSize()}prepend(e){this.activate(),this.element.insertBefore(e,this.element.firstChild),this.table.rowManager.adjustTableSize()}remove(e){e.parentNode.removeChild(e),this.deactivate()}deactivate(e){(!this.element.firstChild||e)&&(this.external||this.element.parentNode.removeChild(this.element),this.active=!1)}activate(){this.active||(this.active=!0,this.external||(this.table.element.appendChild(this.getElement()),this.table.element.style.display=""))}redraw(){this.dispatch("footer-redraw")}}class Ms extends M{constructor(e){super(e),this.el=null,this.abortClasses=["tabulator-headers","tabulator-table"],this.previousTargets={},this.listeners=["click","dblclick","contextmenu","mouseenter","mouseleave","mouseover","mouseout","mousemove","mouseup","mousedown","touchstart","touchend"],this.componentMap={"tabulator-cell":"cell","tabulator-row":"row","tabulator-group":"group","tabulator-col":"column"},this.pseudoTrackers={row:{subscriber:null,target:null},cell:{subscriber:null,target:null},group:{subscriber:null,target:null},column:{subscriber:null,target:null}},this.pseudoTracking=!1}initialize(){this.el=this.table.element,this.buildListenerMap(),this.bindSubscriptionWatchers()}buildListenerMap(){var e={};this.listeners.forEach(t=>{e[t]={handler:null,components:[]}}),this.listeners=e}bindPseudoEvents(){Object.keys(this.pseudoTrackers).forEach(e=>{this.pseudoTrackers[e].subscriber=this.pseudoMouseEnter.bind(this,e),this.subscribe(e+"-mouseover",this.pseudoTrackers[e].subscriber)}),this.pseudoTracking=!0}pseudoMouseEnter(e,t,i){this.pseudoTrackers[e].target!==i&&(this.pseudoTrackers[e].target&&this.dispatch(e+"-mouseleave",t,this.pseudoTrackers[e].target),this.pseudoMouseLeave(e,t),this.pseudoTrackers[e].target=i,this.dispatch(e+"-mouseenter",t,i))}pseudoMouseLeave(e,t){var i=Object.keys(this.pseudoTrackers),s={row:["cell"],cell:["row"]};i=i.filter(n=>{var r=s[e];return n!==e&&(!r||r&&!r.includes(n))}),i.forEach(n=>{var r=this.pseudoTrackers[n].target;this.pseudoTrackers[n].target&&(this.dispatch(n+"-mouseleave",t,r),this.pseudoTrackers[n].target=null)})}bindSubscriptionWatchers(){var e=Object.keys(this.listeners),t=Object.values(this.componentMap);for(let i of t)for(let s of e){let n=i+"-"+s;this.subscriptionChange(n,this.subscriptionChanged.bind(this,i,s))}this.subscribe("table-destroy",this.clearWatchers.bind(this))}subscriptionChanged(e,t,i){var s=this.listeners[t].components,n=s.indexOf(e),r=!1;i?n===-1&&(s.push(e),r=!0):this.subscribed(e+"-"+t)||n>-1&&(s.splice(n,1),r=!0),(t==="mouseenter"||t==="mouseleave")&&!this.pseudoTracking&&this.bindPseudoEvents(),r&&this.updateEventListeners()}updateEventListeners(){for(let e in this.listeners){let t=this.listeners[e];t.components.length?t.handler||(t.handler=this.track.bind(this,e),this.el.addEventListener(e,t.handler)):t.handler&&(this.el.removeEventListener(e,t.handler),t.handler=null)}}track(e,t){var i=t.composedPath&&t.composedPath()||t.path,s=this.findTargets(i);s=this.bindComponents(e,s),this.triggerEvents(e,t,s),this.pseudoTracking&&(e=="mouseover"||e=="mouseleave")&&!Object.keys(s).length&&this.pseudoMouseLeave("none",t)}findTargets(e){var t={};let i=Object.keys(this.componentMap);for(let s of e){let n=s.classList?[...s.classList]:[];if(n.filter(a=>this.abortClasses.includes(a)).length)break;let o=n.filter(a=>i.includes(a));for(let a of o)t[this.componentMap[a]]||(t[this.componentMap[a]]=s)}return t.group&&t.group===t.row&&delete t.row,t}bindComponents(e,t){var i=Object.keys(t).reverse(),s=this.listeners[e],n={},r={};for(let o of i){let a,h=t[o],d=this.previousTargets[o];if(d&&d.target===h)a=d.component;else switch(o){case"row":case"group":(s.components.includes("row")||s.components.includes("cell")||s.components.includes("group"))&&(a=this.table.rowManager.getVisibleRows(!0).find(c=>c.getElement()===h),t.row&&t.row.parentNode&&t.row.parentNode.closest(".tabulator-row")&&(t[o]=!1));break;case"column":s.components.includes("column")&&(a=this.table.columnManager.findColumn(h));break;case"cell":s.components.includes("cell")&&(n.row instanceof S?a=n.row.findCell(h):t.row&&console.warn("Event Target Lookup Error - The row this cell is attached to cannot be found, has the table been reinitialized without being destroyed first?"));break}a&&(n[o]=a,r[o]={target:h,component:a})}return this.previousTargets=r,n}triggerEvents(e,t,i){var s=this.listeners[e];for(let n in i)i[n]&&s.components.includes(n)&&this.dispatch(n+"-"+e,t,i[n])}clearWatchers(){for(let e in this.listeners){let t=this.listeners[e];t.handler&&(this.el.removeEventListener(e,t.handler),t.handler=null)}}}class Ls{constructor(e){this.table=e,this.bindings={}}bind(e,t,i){this.bindings[e]||(this.bindings[e]={}),this.bindings[e][t]?console.warn("Unable to bind component handler, a matching function name is already bound",e,t,i):this.bindings[e][t]=i}handle(e,t,i){if(this.bindings[e]&&this.bindings[e][i]&&typeof this.bindings[e][i].bind=="function")return this.bindings[e][i].bind(null,t);i!=="then"&&typeof i=="string"&&!i.startsWith("_")&&this.table.options.debugInvalidComponentFuncs&&console.error("The "+e+" component does not have a "+i+" function, have you checked that you have the correct Tabulator module installed?")}}class Ss extends M{constructor(e){super(e),this.requestOrder=0,this.loading=!1}initialize(){}load(e,t,i,s,n,r){var o=++this.requestOrder;if(this.table.destroyed)return Promise.resolve();if(this.dispatchExternal("dataLoading",e),e&&(e.indexOf("{")==0||e.indexOf("[")==0)&&(e=JSON.parse(e)),this.confirm("data-loading",[e,t,i,n])){this.loading=!0,n||this.alertLoader(),t=this.chain("data-params",[e,i,n],t||{},t||{}),t=this.mapParams(t,this.table.options.dataSendParams);var a=this.chain("data-load",[e,t,i,n],!1,Promise.resolve([]));return a.then(h=>{if(this.table.destroyed)console.warn("Data Load Response Blocked - Table has been destroyed");else{!Array.isArray(h)&&typeof h=="object"&&(h=this.mapParams(h,this.objectInvert(this.table.options.dataReceiveParams)));var d=this.chain("data-loaded",[h],null,h);o==this.requestOrder?(this.clearAlert(),d!==!1&&(this.dispatchExternal("dataLoaded",d),this.table.rowManager.setData(d,s,typeof r>"u"?!s:r))):console.warn("Data Load Response Blocked - An active data load request was blocked by an attempt to change table data while the request was being made")}}).catch(h=>{console.error("Data Load Error: ",h),this.dispatchExternal("dataLoadError",h),n||this.alertError(),setTimeout(()=>{this.clearAlert()},this.table.options.dataLoaderErrorTimeout)}).finally(()=>{this.loading=!1})}else return this.dispatchExternal("dataLoaded",e),e||(e=[]),this.table.rowManager.setData(e,s,typeof r>"u"?!s:r),Promise.resolve()}mapParams(e,t){var i={};for(let s in e)i[t.hasOwnProperty(s)?t[s]:s]=e[s];return i}objectInvert(e){var t={};for(let i in e)t[e[i]]=i;return t}blockActiveLoad(){this.requestOrder++}alertLoader(){var e=typeof this.table.options.dataLoader=="function"?this.table.options.dataLoader():this.table.options.dataLoader;e&&this.table.alertManager.alert(this.table.options.dataLoaderLoading||this.langText("data|loading"))}alertError(){this.table.alertManager.alert(this.table.options.dataLoaderError||this.langText("data|error"),"error")}clearAlert(){this.table.alertManager.clear()}}class Ds{constructor(e,t,i){this.table=e,this.events={},this.optionsList=t||{},this.subscriptionNotifiers={},this.dispatch=i?this._debugDispatch.bind(this):this._dispatch.bind(this),this.debug=i}subscriptionChange(e,t){this.subscriptionNotifiers[e]||(this.subscriptionNotifiers[e]=[]),this.subscriptionNotifiers[e].push(t),this.subscribed(e)&&this._notifySubscriptionChange(e,!0)}subscribe(e,t){this.events[e]||(this.events[e]=[]),this.events[e].push(t),this._notifySubscriptionChange(e,!0)}unsubscribe(e,t){var i;if(this.events[e])if(t)if(i=this.events[e].findIndex(s=>s===t),i>-1)this.events[e].splice(i,1);else{console.warn("Cannot remove event, no matching event found:",e,t);return}else delete this.events[e];else{console.warn("Cannot remove event, no events set on:",e);return}this._notifySubscriptionChange(e,!1)}subscribed(e){return this.events[e]&&this.events[e].length}_notifySubscriptionChange(e,t){var i=this.subscriptionNotifiers[e];i&&i.forEach(s=>{s(t)})}_dispatch(){var e=Array.from(arguments),t=e.shift(),i;return this.events[t]&&this.events[t].forEach((s,n)=>{let r=s.apply(this.table,e);n||(i=r)}),i}_debugDispatch(){var e=Array.from(arguments),t=e[0];return e[0]="ExternalEvent:"+e[0],(this.debug===!0||this.debug.includes(t))&&console.log(...e),this._dispatch(...arguments)}}class zs{constructor(e){this.events={},this.subscriptionNotifiers={},this.dispatch=e?this._debugDispatch.bind(this):this._dispatch.bind(this),this.chain=e?this._debugChain.bind(this):this._chain.bind(this),this.confirm=e?this._debugConfirm.bind(this):this._confirm.bind(this),this.debug=e}subscriptionChange(e,t){this.subscriptionNotifiers[e]||(this.subscriptionNotifiers[e]=[]),this.subscriptionNotifiers[e].push(t),this.subscribed(e)&&this._notifySubscriptionChange(e,!0)}subscribe(e,t,i=1e4){this.events[e]||(this.events[e]=[]),this.events[e].push({callback:t,priority:i}),this.events[e].sort((s,n)=>s.priority-n.priority),this._notifySubscriptionChange(e,!0)}unsubscribe(e,t){var i;if(this.events[e]){if(t)if(i=this.events[e].findIndex(s=>s.callback===t),i>-1)this.events[e].splice(i,1);else{console.warn("Cannot remove event, no matching event found:",e,t);return}}else{console.warn("Cannot remove event, no events set on:",e);return}this._notifySubscriptionChange(e,!1)}subscribed(e){return this.events[e]&&this.events[e].length}_chain(e,t,i,s){var n=i;return Array.isArray(t)||(t=[t]),this.subscribed(e)?(this.events[e].forEach((r,o)=>{n=r.callback.apply(this,t.concat([n]))}),n):typeof s=="function"?s():s}_confirm(e,t){var i=!1;return Array.isArray(t)||(t=[t]),this.subscribed(e)&&this.events[e].forEach((s,n)=>{s.callback.apply(this,t)&&(i=!0)}),i}_notifySubscriptionChange(e,t){var i=this.subscriptionNotifiers[e];i&&i.forEach(s=>{s(t)})}_dispatch(){var e=Array.from(arguments),t=e.shift();this.events[t]&&this.events[t].forEach(i=>{i.callback.apply(this,e)})}_debugDispatch(){var e=Array.from(arguments),t=e[0];return e[0]="InternalEvent:"+t,(this.debug===!0||this.debug.includes(t))&&console.log(...e),this._dispatch(...arguments)}_debugChain(){var e=Array.from(arguments),t=e[0];return e[0]="InternalEvent:"+t,(this.debug===!0||this.debug.includes(t))&&console.log(...e),this._chain(...arguments)}_debugConfirm(){var e=Array.from(arguments),t=e[0];return e[0]="InternalEvent:"+t,(this.debug===!0||this.debug.includes(t))&&console.log(...e),this._confirm(...arguments)}}class Hs extends M{constructor(e){super(e)}_warnUser(){this.options("debugDeprecation")&&console.warn(...arguments)}check(e,t,i){var s="";return typeof this.options(e)<"u"?(s="Deprecated Setup Option - Use of the %c"+e+"%c option is now deprecated",t?(s=s+", Please use the %c"+t+"%c option instead",this._warnUser(s,"font-weight: bold;","font-weight: normal;","font-weight: bold;","font-weight: normal;"),i&&(this.table.options[t]=this.table.options[e])):this._warnUser(s,"font-weight: bold;","font-weight: normal;"),!1):!0}checkMsg(e,t){return typeof this.options(e)<"u"?(this._warnUser("%cDeprecated Setup Option - Use of the %c"+e+" %c option is now deprecated, "+t,"font-weight: normal;","font-weight: bold;","font-weight: normal;"),!1):!0}msg(e){this._warnUser(e)}}function Fs(l,e){e&&this.table.columnManager.renderer.reinitializeColumnWidths(l),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update()}function Je(l,e){l.forEach(function(t){t.reinitializeWidth()}),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update()}function Ps(l,e){var t=0,i=this.table.rowManager.element.clientWidth,s=0,n=!1;l.forEach((r,o)=>{r.widthFixed||r.reinitializeWidth(),(this.table.options.responsiveLayout?r.modules.responsive.visible:r.visible)&&(n=r),r.visible&&(t+=r.getWidth())}),n?(s=i-t+n.getWidth(),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&(n.setWidth(0),this.table.modules.responsiveLayout.update()),s>0?n.setWidth(s):n.reinitializeWidth()):this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update()}function Os(l,e){var t=this.table.rowManager.element.getBoundingClientRect().width,i=0,s=0,n=0,r=0,o=[],a=[],h=0,d=0,u=0;function c(g){var p;return typeof g=="string"?g.indexOf("%")>-1?p=t/100*parseInt(g):p=parseInt(g):p=g,p}function f(g,p,v,m){var C=[],T=0,y=0,k=0,P=n,X=0,L=0,he=[];function Ie(E){return v*(E.column.definition.widthGrow||1)}function Ne(E){return c(E.width)-v*(E.column.definition.widthShrink||0)}return g.forEach(function(E,Ws){var We=m?Ne(E):Ie(E);E.column.minWidth>=We?C.push(E):E.column.maxWidth&&E.column.maxWidththis.table.rowManager.element.clientHeight&&(t-=this.table.rowManager.element.offsetWidth-this.table.rowManager.element.clientWidth),l.forEach(function(g){var p,v,m;g.visible&&(p=g.definition.width,v=parseInt(g.minWidth),p?(m=c(p),i+=m>v?m:v,g.definition.widthShrink&&(a.push({column:g,width:m>v?m:v}),h+=g.definition.widthShrink)):(o.push({column:g,width:0}),n+=g.definition.widthGrow||1))}),s=t-i,r=Math.floor(s/n),u=f(o,s,r,!1),o.length&&u>0&&(o[o.length-1].width+=u),o.forEach(function(g){s-=g.width}),d=Math.abs(u)+s,d>0&&h&&(u=f(a,d,Math.floor(d/h),!0)),u&&a.length&&(a[a.length-1].width-=u),o.forEach(function(g){g.column.setWidth(g.width)}),a.forEach(function(g){g.column.setWidth(g.width)})}var As={fitData:Fs,fitDataFill:Je,fitDataTable:Je,fitDataStretch:Ps,fitColumns:Os};const $=class $ extends w{constructor(e){super(e,"layout"),this.mode=null,this.registerTableOption("layout","fitData"),this.registerTableOption("layoutColumnsOnNewData",!1),this.registerColumnOption("widthGrow"),this.registerColumnOption("widthShrink")}initialize(){var e=this.table.options.layout;$.modes[e]?this.mode=e:(console.warn("Layout Error - invalid mode set, defaulting to 'fitData' : "+e),this.mode="fitData"),this.table.element.setAttribute("tabulator-layout",this.mode),this.subscribe("column-init",this.initializeColumn.bind(this))}initializeColumn(e){e.definition.widthGrow&&(e.definition.widthGrow=Number(e.definition.widthGrow)),e.definition.widthShrink&&(e.definition.widthShrink=Number(e.definition.widthShrink))}getMode(){return this.mode}layout(e){this.dispatch("layout-refreshing"),$.modes[this.mode].call(this,this.table.columnManager.columnsByIndex,e),this.dispatch("layout-refreshed")}};b($,"moduleName","layout"),b($,"modes",As);let Pe=$;var _s={default:{groups:{item:"item",items:"items"},columns:{},data:{loading:"Loading",error:"Error"},pagination:{page_size:"Page Size",page_title:"Show Page",first:"First",first_title:"First Page",last:"Last",last_title:"Last Page",prev:"Prev",prev_title:"Prev Page",next:"Next",next_title:"Next Page",all:"All",counter:{showing:"Showing",of:"of",rows:"rows",pages:"pages"}},headerFilters:{default:"filter column...",columns:{}}}};const se=class se extends w{constructor(e){super(e),this.locale="default",this.lang=!1,this.bindings={},this.langList={},this.registerTableOption("locale",!1),this.registerTableOption("langs",{})}initialize(){this.langList=x.deepClone(se.langs),this.table.options.columnDefaults.headerFilterPlaceholder!==!1&&this.setHeaderFilterPlaceholder(this.table.options.columnDefaults.headerFilterPlaceholder);for(let e in this.table.options.langs)this.installLang(e,this.table.options.langs[e]);this.setLocale(this.table.options.locale),this.registerTableFunction("setLocale",this.setLocale.bind(this)),this.registerTableFunction("getLocale",this.getLocale.bind(this)),this.registerTableFunction("getLang",this.getLang.bind(this))}setHeaderFilterPlaceholder(e){this.langList.default.headerFilters.default=e}installLang(e,t){this.langList[e]?this._setLangProp(this.langList[e],t):this.langList[e]=t}_setLangProp(e,t){for(let i in t)e[i]&&typeof e[i]=="object"?this._setLangProp(e[i],t[i]):e[i]=t[i]}setLocale(e){e=e||"default";function t(i,s){for(var n in i)typeof i[n]=="object"?(s[n]||(s[n]={}),t(i[n],s[n])):s[n]=i[n]}if(e===!0&&navigator.language&&(e=navigator.language.toLowerCase()),e&&!this.langList[e]){let i=e.split("-")[0];this.langList[i]?(console.warn("Localization Error - Exact matching locale not found, using closest match: ",e,i),e=i):(console.warn("Localization Error - Matching locale not found, using default: ",e),e="default")}this.locale=e,this.lang=x.deepClone(this.langList.default||{}),e!="default"&&t(this.langList[e],this.lang),this.dispatchExternal("localized",this.locale,this.lang),this._executeBindings()}getLocale(e){return this.locale}getLang(e){return e?this.langList[e]:this.lang}getText(e,t){var i=t?e+"|"+t:e,s=i.split("|"),n=this._getLangElement(s,this.locale);return n||""}_getLangElement(e,t){var i=this.lang;return e.forEach(function(s){var n;i&&(n=i[s],typeof n<"u"?i=n:i=!1)}),i}bind(e,t){this.bindings[e]||(this.bindings[e]=[]),this.bindings[e].push(t),t(this.getText(e),this.lang)}_executeBindings(){for(let e in this.bindings)this.bindings[e].forEach(t=>{t(this.getText(e),this.lang)})}};b(se,"moduleName","localize"),b(se,"langs",_s);let Oe=se;class bt extends w{constructor(e){super(e)}initialize(){this.registerTableFunction("tableComms",this.receive.bind(this))}getConnections(e){var t=[],i;return i=this.table.constructor.registry.lookupTable(e),i.forEach(s=>{this.table!==s&&t.push(s)}),t}send(e,t,i,s){var n=this.getConnections(e);n.forEach(r=>{r.tableComms(this.table.element,t,i,s)}),!n.length&&e&&console.warn("Table Connection Error - No tables matching selector found",e)}receive(e,t,i,s){if(this.table.modExists(t))return this.table.modules[t].commsReceived(e,i,s);console.warn("Inter-table Comms Error - no such module:",t)}}b(bt,"moduleName","comms");var Bs=Object.freeze({__proto__:null,CommsModule:bt,LayoutModule:Pe,LocalizeModule:Oe});const z=class z{static findTable(e){var t=z.registry.lookupTable(e,!0);return Array.isArray(t)&&!t.length?!1:t}};b(z,"registry",{tables:[],register(e){z.registry.tables.push(e)},deregister(e){var t=z.registry.tables.indexOf(e);t>-1&&z.registry.tables.splice(t,1)},lookupTable(e,t){var i=[],s,n;if(typeof e=="string"){if(s=document.querySelectorAll(e),s.length)for(var r=0;r{s.prototype.moduleCore=!0}),R._registerModule(i)}static _registerModule(e){Array.isArray(e)||(e=[e]),e.forEach(t=>{R._registerModuleBinding(t),R._registerModuleExtensions(t)})}static _registerModuleBinding(e){e.moduleName?R.moduleBindings[e.moduleName]=e:console.error("Unable to bind module, no moduleName defined",e.moduleName)}static _registerModuleExtensions(e){var t=e.moduleExtensions;if(e.moduleExtensions)for(let i in t){let s=t[i];if(R.moduleBindings[i])for(let n in s)R._extendModule(i,n,s[n]);else{R.moduleExtensions[i]||(R.moduleExtensions[i]={});for(let n in s)R.moduleExtensions[i][n]||(R.moduleExtensions[i][n]={}),Object.assign(R.moduleExtensions[i][n],s[n])}}R._extendModuleFromQueue(e)}static _extendModuleFromQueue(e){var t=R.moduleExtensions[e.moduleName];if(t)for(let i in t)R._extendModule(e.moduleName,i,t[i])}_bindModules(){var e=[],t=[],i=[];this.modules={};for(var s in R.moduleBindings){let n=R.moduleBindings[s],r=new n(this);this.modules[s]=r,n.prototype.moduleCore?this.modulesCore.push(r):n.moduleInitOrder?n.moduleInitOrder<0?e.push(r):t.push(r):i.push(r)}e.sort((n,r)=>n.moduleInitOrder>r.moduleInitOrder?1:-1),t.sort((n,r)=>n.moduleInitOrder>r.moduleInitOrder?1:-1),this.modulesRegular=e.concat(i.concat(t))}};b(R,"moduleBindings",{}),b(R,"moduleExtensions",{}),b(R,"modulesRegistered",!1),b(R,"defaultModules",!1);let _e=R;class Vs extends M{constructor(e){super(e),this.element=this._createAlertElement(),this.msgElement=this._createMsgElement(),this.type=null,this.element.appendChild(this.msgElement)}_createAlertElement(){var e=document.createElement("div");return e.classList.add("tabulator-alert"),e}_createMsgElement(){var e=document.createElement("div");return e.classList.add("tabulator-alert-msg"),e.setAttribute("role","alert"),e}_typeClass(){return"tabulator-alert-state-"+this.type}alert(e,t="msg"){if(e){for(this.clear(),this.dispatch("alert-show",t),this.type=t;this.msgElement.firstChild;)this.msgElement.removeChild(this.msgElement.firstChild);this.msgElement.classList.add(this._typeClass()),typeof e=="function"&&(e=e()),e instanceof HTMLElement?this.msgElement.appendChild(e):this.msgElement.innerHTML=e,this.table.element.appendChild(this.element)}}clear(){this.dispatch("alert-hide",this.type),this.element.parentNode&&this.element.parentNode.removeChild(this.element),this.msgElement.classList.remove(this._typeClass())}}const A=class A extends _e{static extendModule(){A.initializeModuleBinder(),A._extendModule(...arguments)}static registerModule(){A.initializeModuleBinder(),A._registerModule(...arguments)}constructor(e,t,i){super(),A.initializeModuleBinder(i),this.options={},this.columnManager=null,this.rowManager=null,this.footerManager=null,this.alertManager=null,this.vdomHoz=null,this.externalEvents=null,this.eventBus=null,this.interactionMonitor=!1,this.browser="",this.browserSlow=!1,this.browserMobile=!1,this.rtl=!1,this.originalElement=null,this.componentFunctionBinder=new Ls(this),this.dataLoader=!1,this.modules={},this.modulesCore=[],this.modulesRegular=[],this.deprecationAdvisor=new Hs(this),this.optionsList=new gt(this,"table constructor"),this.initialized=!1,this.destroyed=!1,this.initializeElement(e)&&(this.initializeCoreSystems(t),setTimeout(()=>{this._create()})),this.constructor.registry.register(this)}initializeElement(e){return typeof HTMLElement<"u"&&e instanceof HTMLElement?(this.element=e,!0):typeof e=="string"?(this.element=document.querySelector(e),this.element?!0:(console.error("Tabulator Creation Error - no element found matching selector: ",e),!1)):(console.error("Tabulator Creation Error - Invalid element provided:",e),!1)}initializeCoreSystems(e){this.columnManager=new ys(this),this.rowManager=new Ts(this),this.footerManager=new ks(this),this.dataLoader=new Ss(this),this.alertManager=new Vs(this),this._bindModules(),this.options=this.optionsList.generate(A.defaultOptions,e),this._clearObjectPointers(),this._mapDeprecatedFunctionality(),this.externalEvents=new Ds(this,this.options,this.options.debugEventsExternal),this.eventBus=new zs(this.options.debugEventsInternal),this.interactionMonitor=new Ms(this),this.dataLoader.initialize(),this.footerManager.initialize()}_mapDeprecatedFunctionality(){}_clearSelection(){this.element.classList.add("tabulator-block-select"),window.getSelection?window.getSelection().empty?window.getSelection().empty():window.getSelection().removeAllRanges&&window.getSelection().removeAllRanges():document.selection&&document.selection.empty(),this.element.classList.remove("tabulator-block-select")}_create(){this.externalEvents.dispatch("tableBuilding"),this.eventBus.dispatch("table-building"),this._rtlCheck(),this._buildElement(),this._initializeTable(),this.initialized=!0,this._loadInitialData().finally(()=>{this.eventBus.dispatch("table-initialized"),this.externalEvents.dispatch("tableBuilt")})}_rtlCheck(){var e=window.getComputedStyle(this.element);switch(this.options.textDirection){case"auto":if(e.direction!=="rtl")break;case"rtl":this.element.classList.add("tabulator-rtl"),this.rtl=!0;break;case"ltr":this.element.classList.add("tabulator-ltr");default:this.rtl=!1}}_clearObjectPointers(){this.options.columns=this.options.columns.slice(0),Array.isArray(this.options.data)&&!this.options.reactiveData&&(this.options.data=this.options.data.slice(0))}_buildElement(){var e=this.element,t=this.options,i;if(e.tagName==="TABLE"){this.originalElement=this.element,i=document.createElement("div");var s=e.attributes;for(var n in s)typeof s[n]=="object"&&i.setAttribute(s[n].name,s[n].value);e.parentNode.replaceChild(i,e),this.element=e=i}for(e.classList.add("tabulator"),e.setAttribute("role","grid");e.firstChild;)e.removeChild(e.firstChild);t.height&&(t.height=isNaN(t.height)?t.height:t.height+"px",e.style.height=t.height),t.minHeight!==!1&&(t.minHeight=isNaN(t.minHeight)?t.minHeight:t.minHeight+"px",e.style.minHeight=t.minHeight),t.maxHeight!==!1&&(t.maxHeight=isNaN(t.maxHeight)?t.maxHeight:t.maxHeight+"px",e.style.maxHeight=t.maxHeight)}_initializeTable(){var e=this.element,t=this.options;this.interactionMonitor.initialize(),this.columnManager.initialize(),this.rowManager.initialize(),this._detectBrowser(),this.modulesCore.forEach(i=>{i.initialize()}),e.appendChild(this.columnManager.getElement()),e.appendChild(this.rowManager.getElement()),t.footerElement&&this.footerManager.activate(),t.autoColumns&&t.data&&this.columnManager.generateColumnsFromRowData(this.options.data),this.modulesRegular.forEach(i=>{i.initialize()}),this.columnManager.setColumns(t.columns),this.eventBus.dispatch("table-built")}_loadInitialData(){return this.dataLoader.load(this.options.data).finally(()=>{this.columnManager.verticalAlignHeaders()})}destroy(){var e=this.element;for(this.destroyed=!0,this.constructor.registry.deregister(this),this.eventBus.dispatch("table-destroy"),this.rowManager.destroy();e.firstChild;)e.removeChild(e.firstChild);e.classList.remove("tabulator"),this.externalEvents.dispatch("tableDestroyed")}_detectBrowser(){var e=navigator.userAgent||navigator.vendor||window.opera;e.indexOf("Trident")>-1?(this.browser="ie",this.browserSlow=!0):e.indexOf("Edge")>-1?(this.browser="edge",this.browserSlow=!0):e.indexOf("Firefox")>-1?(this.browser="firefox",this.browserSlow=!1):e.indexOf("Mac OS")>-1?(this.browser="safari",this.browserSlow=!1):(this.browser="other",this.browserSlow=!1),this.browserMobile=/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(e)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw-(n|u)|c55\/|capi|ccwa|cdm-|cell|chtm|cldc|cmd-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc-s|devi|dica|dmob|do(c|p)o|ds(12|-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(-|_)|g1 u|g560|gene|gf-5|g-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd-(m|p|t)|hei-|hi(pt|ta)|hp( i|ip)|hs-c|ht(c(-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i-(20|go|ma)|i230|iac( |-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|-[a-w])|libw|lynx|m1-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|-([1-8]|c))|phil|pire|pl(ay|uc)|pn-2|po(ck|rt|se)|prox|psio|pt-g|qa-a|qc(07|12|21|32|60|-[2-7]|i-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h-|oo|p-)|sdk\/|se(c(-|0|1)|47|mc|nd|ri)|sgh-|shar|sie(-|m)|sk-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h-|v-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl-|tdg-|tel(i|m)|tim-|t-mo|to(pl|sh)|ts(70|m-|m3|m5)|tx-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas-|your|zeto|zte-/i.test(e.slice(0,4))}initGuard(e,t){var i,s;return this.options.debugInitialization&&!this.initialized&&(e||(i=new Error().stack.split(` +`),s=i[0]=="Error"?i[2]:i[1],s[0]==" "?e=s.trim().split(" ")[1].split(".")[1]:e=s.trim().split("@")[0]),console.warn("Table Not Initialized - Calling the "+e+" function before the table is initialized may result in inconsistent behavior, Please wait for the `tableBuilt` event before calling this function."+(t?" "+t:""))),this.initialized}blockRedraw(){this.initGuard(),this.eventBus.dispatch("redraw-blocking"),this.rowManager.blockRedraw(),this.columnManager.blockRedraw(),this.eventBus.dispatch("redraw-blocked")}restoreRedraw(){this.initGuard(),this.eventBus.dispatch("redraw-restoring"),this.rowManager.restoreRedraw(),this.columnManager.restoreRedraw(),this.eventBus.dispatch("redraw-restored")}setData(e,t,i){return this.initGuard(!1,"To set initial data please use the 'data' property in the table constructor."),this.dataLoader.load(e,t,i,!1)}clearData(){this.initGuard(),this.dataLoader.blockActiveLoad(),this.rowManager.clearData()}getData(e){return this.rowManager.getData(e)}getDataCount(e){return this.rowManager.getDataCount(e)}replaceData(e,t,i){return this.initGuard(),this.dataLoader.load(e,t,i,!0,!0)}updateData(e){var t=0;return this.initGuard(),new Promise((i,s)=>{this.dataLoader.blockActiveLoad(),typeof e=="string"&&(e=JSON.parse(e)),e&&e.length>0?e.forEach(n=>{var r=this.rowManager.findRow(n[this.options.index]);r?(t++,r.updateData(n).then(()=>{t--,t||i()}).catch(o=>{s("Update Error - Unable to update row",n,o)})):s("Update Error - Unable to find row",n)}):(console.warn("Update Error - No data provided"),s("Update Error - No data provided"))})}addData(e,t,i){return this.initGuard(),new Promise((s,n)=>{this.dataLoader.blockActiveLoad(),typeof e=="string"&&(e=JSON.parse(e)),e?this.rowManager.addRows(e,t,i).then(r=>{var o=[];r.forEach(function(a){o.push(a.getComponent())}),s(o)}):(console.warn("Update Error - No data provided"),n("Update Error - No data provided"))})}updateOrAddData(e){var t=[],i=0;return this.initGuard(),new Promise((s,n)=>{this.dataLoader.blockActiveLoad(),typeof e=="string"&&(e=JSON.parse(e)),e&&e.length>0?e.forEach(r=>{var o=this.rowManager.findRow(r[this.options.index]);i++,o?o.updateData(r).then(()=>{i--,t.push(o.getComponent()),i||s(t)}):this.rowManager.addRows(r).then(a=>{i--,t.push(a[0].getComponent()),i||s(t)})}):(console.warn("Update Error - No data provided"),n("Update Error - No data provided"))})}getRow(e){var t=this.rowManager.findRow(e);return t?t.getComponent():(console.warn("Find Error - No matching row found:",e),!1)}getRowFromPosition(e){var t=this.rowManager.getRowFromPosition(e);return t?t.getComponent():(console.warn("Find Error - No matching row found:",e),!1)}deleteRow(e){var t=[];this.initGuard(),Array.isArray(e)||(e=[e]);for(let i of e){let s=this.rowManager.findRow(i,!0);if(s)t.push(s);else return console.error("Delete Error - No matching row found:",i),Promise.reject("Delete Error - No matching row found")}return t.sort((i,s)=>this.rowManager.rows.indexOf(i)>this.rowManager.rows.indexOf(s)?1:-1),t.forEach(i=>{i.delete()}),this.rowManager.reRenderInPosition(),Promise.resolve()}addRow(e,t,i){return this.initGuard(),typeof e=="string"&&(e=JSON.parse(e)),this.rowManager.addRows(e,t,i,!0).then(s=>s[0].getComponent())}updateOrAddRow(e,t){var i=this.rowManager.findRow(e);return this.initGuard(),typeof t=="string"&&(t=JSON.parse(t)),i?i.updateData(t).then(()=>i.getComponent()):this.rowManager.addRows(t).then(s=>s[0].getComponent())}updateRow(e,t){var i=this.rowManager.findRow(e);return this.initGuard(),typeof t=="string"&&(t=JSON.parse(t)),i?i.updateData(t).then(()=>Promise.resolve(i.getComponent())):(console.warn("Update Error - No matching row found:",e),Promise.reject("Update Error - No matching row found"))}scrollToRow(e,t,i){var s=this.rowManager.findRow(e);return s?this.rowManager.scrollToRow(s,t,i):(console.warn("Scroll Error - No matching row found:",e),Promise.reject("Scroll Error - No matching row found"))}moveRow(e,t,i){var s=this.rowManager.findRow(e);this.initGuard(),s?s.moveToRow(t,i):console.warn("Move Error - No matching row found:",e)}getRows(e){return this.rowManager.getComponents(e)}getRowPosition(e){var t=this.rowManager.findRow(e);return t?t.getPosition():(console.warn("Position Error - No matching row found:",e),!1)}setColumns(e){this.initGuard(!1,"To set initial columns please use the 'columns' property in the table constructor"),this.columnManager.setColumns(e)}getColumns(e){return this.columnManager.getComponents(e)}getColumn(e){var t=this.columnManager.findColumn(e);return t?t.getComponent():(console.warn("Find Error - No matching column found:",e),!1)}getColumnDefinitions(){return this.columnManager.getDefinitionTree()}showColumn(e){var t=this.columnManager.findColumn(e);if(this.initGuard(),t)t.show();else return console.warn("Column Show Error - No matching column found:",e),!1}hideColumn(e){var t=this.columnManager.findColumn(e);if(this.initGuard(),t)t.hide();else return console.warn("Column Hide Error - No matching column found:",e),!1}toggleColumn(e){var t=this.columnManager.findColumn(e);if(this.initGuard(),t)t.visible?t.hide():t.show();else return console.warn("Column Visibility Toggle Error - No matching column found:",e),!1}addColumn(e,t,i){var s=this.columnManager.findColumn(i);return this.initGuard(),this.columnManager.addColumn(e,t,s).then(n=>n.getComponent())}deleteColumn(e){var t=this.columnManager.findColumn(e);return this.initGuard(),t?t.delete():(console.warn("Column Delete Error - No matching column found:",e),Promise.reject())}updateColumnDefinition(e,t){var i=this.columnManager.findColumn(e);return this.initGuard(),i?i.updateDefinition(t):(console.warn("Column Update Error - No matching column found:",e),Promise.reject())}moveColumn(e,t,i){var s=this.columnManager.findColumn(e),n=this.columnManager.findColumn(t);this.initGuard(),s?n?this.columnManager.moveColumn(s,n,i):console.warn("Move Error - No matching column found:",n):console.warn("Move Error - No matching column found:",e)}scrollToColumn(e,t,i){return new Promise((s,n)=>{var r=this.columnManager.findColumn(e);return r?this.columnManager.scrollToColumn(r,t,i):(console.warn("Scroll Error - No matching column found:",e),Promise.reject("Scroll Error - No matching column found"))})}redraw(e){this.initGuard(),this.columnManager.redraw(e),this.rowManager.redraw(e)}setHeight(e){this.options.height=isNaN(e)?e:e+"px",this.element.style.height=this.options.height,this.rowManager.initializeRenderer(),this.rowManager.redraw(!0)}on(e,t){this.externalEvents.subscribe(e,t)}off(e,t){this.externalEvents.unsubscribe(e,t)}dispatchEvent(){var e=Array.from(arguments);e.shift(),this.externalEvents.dispatch(...arguments)}alert(e,t){this.initGuard(),this.alertManager.alert(e,t)}clearAlert(){this.initGuard(),this.alertManager.clear()}modExists(e,t){return this.modules[e]?!0:(t&&console.error("Tabulator Module Not Installed: "+e),!1)}module(e){var t=this.modules[e];return t||console.error("Tabulator module not installed: "+e),t}};b(A,"defaultOptions",ws);let Be=A;var Q=Be;class Is extends Q{static extendModule(){Q.initializeModuleBinder(ue),Q._extendModule(...arguments)}static registerModule(){Q.initializeModuleBinder(ue),Q._registerModule(...arguments)}constructor(e,t,i){super(e,t,ue)}}var Ns=Is;const Xs=Ct({__name:"Tabulator",props:{columns:{},tableData:{}},setup(l){const e=l,t=Ge(null),i=Ge(null);je(()=>e.columns,()=>{i.value?i.value.setColumns(e.columns):s()}),je(()=>e.tableData,()=>{n()}),Et(async()=>{await yt(),s()}),Rt(()=>{i.value&&(i.value.destroy(),i.value=null)});const s=()=>{!t.value||i.value||(i.value=new Ns(t.value,{data:e.tableData??[],reactiveData:!0,columns:e.columns,height:"auto",pagination:!0,paginationSize:6,paginationSizeSelector:[3,6,8,10],movableColumns:!0,paginationCounter:"rows"}))},n=()=>{if(!i.value){s();return}i.value.replaceData(e.tableData??[])};return(r,o)=>(Tt(),xt("div",{ref_key:"table",ref:t},null,512))}});export{Xs as _}; diff --git a/src/main/resources/static/assets/Tabulator.vue_vue_type_style_index_0_lang-COGEFirO.js b/src/main/resources/static/assets/Tabulator.vue_vue_type_style_index_0_lang-COGEFirO.js new file mode 100644 index 00000000..021e2288 --- /dev/null +++ b/src/main/resources/static/assets/Tabulator.vue_vue_type_style_index_0_lang-COGEFirO.js @@ -0,0 +1,22 @@ +var vt=Object.defineProperty;var wt=(l,e,t)=>e in l?vt(l,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):l[e]=t;var b=(l,e,t)=>wt(l,typeof e!="symbol"?e+"":e,t);import{d as Ct,r as Ge,h as je,i as Et,B as yt,x as Rt,c as xt,o as Tt}from"./index-DU977P1k.js";class M{constructor(e){this.table=e}reloadData(e,t,i){return this.table.dataLoader.load(e,void 0,void 0,void 0,t,i)}langText(){return this.table.modules.localize.getText(...arguments)}langBind(){return this.table.modules.localize.bind(...arguments)}langLocale(){return this.table.modules.localize.getLocale(...arguments)}commsConnections(){return this.table.modules.comms.getConnections(...arguments)}commsSend(){return this.table.modules.comms.send(...arguments)}layoutMode(){return this.table.modules.layout.getMode()}layoutRefresh(e){return this.table.modules.layout.layout(e)}subscribe(){return this.table.eventBus.subscribe(...arguments)}unsubscribe(){return this.table.eventBus.unsubscribe(...arguments)}subscribed(e){return this.table.eventBus.subscribed(e)}subscriptionChange(){return this.table.eventBus.subscriptionChange(...arguments)}dispatch(){return this.table.eventBus.dispatch(...arguments)}chain(){return this.table.eventBus.chain(...arguments)}confirm(){return this.table.eventBus.confirm(...arguments)}dispatchExternal(){return this.table.externalEvents.dispatch(...arguments)}subscribedExternal(e){return this.table.externalEvents.subscribed(e)}subscriptionChangeExternal(){return this.table.externalEvents.subscriptionChange(...arguments)}options(e){return this.table.options[e]}setOption(e,t){return typeof t<"u"&&(this.table.options[e]=t),this.table.options[e]}deprecationCheck(e,t,i){return this.table.deprecationAdvisor.check(e,t,i)}deprecationCheckMsg(e,t){return this.table.deprecationAdvisor.checkMsg(e,t)}deprecationMsg(e){return this.table.deprecationAdvisor.msg(e)}module(e){return this.table.module(e)}}class x{static elVisible(e){return!(e.offsetWidth<=0&&e.offsetHeight<=0)}static elOffset(e){var t=e.getBoundingClientRect();return{top:t.top+window.pageYOffset-document.documentElement.clientTop,left:t.left+window.pageXOffset-document.documentElement.clientLeft}}static retrieveNestedData(e,t,i){var s=e?t.split(e):[t],n=s.length,r;for(let o=0;od.subject===o),a>-1?t[r]=i[a].copy:(h=Object.assign(Array.isArray(o)?[]:{},o),i.unshift({subject:o,copy:h}),t[r]=this.deepClone(o,h,i)))}return t}}let kt=class Ke extends M{constructor(e,t,i){super(e),this.element=t,this.container=this._lookupContainer(),this.parent=i,this.reversedX=!1,this.childPopup=null,this.blurable=!1,this.blurCallback=null,this.blurEventsBound=!1,this.renderedCallback=null,this.visible=!1,this.hideable=!0,this.element.classList.add("tabulator-popup-container"),this.blurEvent=this.hide.bind(this,!1),this.escEvent=this._escapeCheck.bind(this),this.destroyBinding=this.tableDestroyed.bind(this),this.destroyed=!1}tableDestroyed(){this.destroyed=!0,this.hide(!0)}_lookupContainer(){var e=this.table.options.popupContainer;return typeof e=="string"?(e=document.querySelector(e),e||console.warn("Menu Error - no container element found matching selector:",this.table.options.popupContainer,"(defaulting to document body)")):e===!0&&(e=this.table.element),e&&!this._checkContainerIsParent(e)&&(e=!1,console.warn("Menu Error - container element does not contain this table:",this.table.options.popupContainer,"(defaulting to document body)")),e||(e=document.body),e}_checkContainerIsParent(e,t=this.table.element){return e===t?!0:t.parentNode?this._checkContainerIsParent(e,t.parentNode):!1}renderCallback(e){this.renderedCallback=e}containerEventCoords(e){var t=!(e instanceof MouseEvent),i=t?e.touches[0].pageX:e.pageX,s=t?e.touches[0].pageY:e.pageY;if(this.container!==document.body){let n=x.elOffset(this.container);i-=n.left,s-=n.top}return{x:i,y:s}}elementPositionCoords(e,t="right"){var i=x.elOffset(e),s,n,r;switch(this.container!==document.body&&(s=x.elOffset(this.container),i.left-=s.left,i.top-=s.top),t){case"right":n=i.left+e.offsetWidth,r=i.top-1;break;case"bottom":n=i.left,r=i.top+e.offsetHeight;break;case"left":n=i.left,r=i.top-1;break;case"top":n=i.left,r=i.top;break;case"center":n=i.left+e.offsetWidth/2,r=i.top+e.offsetHeight/2;break}return{x:n,y:r,offset:i}}show(e,t){var i,s,n,r,o;return this.destroyed||this.table.destroyed?this:(e instanceof HTMLElement?(n=e,o=this.elementPositionCoords(e,t),r=o.offset,i=o.x,s=o.y):typeof e=="number"?(r={top:0,left:0},i=e,s=t):(o=this.containerEventCoords(e),i=o.x,s=o.y,this.reversedX=!1),this.element.style.top=s+"px",this.element.style.left=i+"px",this.container.appendChild(this.element),typeof this.renderedCallback=="function"&&this.renderedCallback(),this._fitToScreen(i,s,n,r,t),this.visible=!0,this.subscribe("table-destroy",this.destroyBinding),this.element.addEventListener("mousedown",a=>{a.stopPropagation()}),this)}_fitToScreen(e,t,i,s,n){var r=this.container===document.body?document.documentElement.scrollTop:this.container.scrollTop;(e+this.element.offsetWidth>=this.container.offsetWidth||this.reversedX)&&(this.element.style.left="",i?this.element.style.right=this.container.offsetWidth-s.left+"px":this.element.style.right=this.container.offsetWidth-e+"px",this.reversedX=!0);let o=Math.max(this.container.offsetHeight,r?this.container.scrollHeight:0);if(t+this.element.offsetHeight>o)if(i)switch(n){case"bottom":this.element.style.top=parseInt(this.element.style.top)-this.element.offsetHeight-i.offsetHeight-1+"px";break;default:this.element.style.top=parseInt(this.element.style.top)-this.element.offsetHeight+i.offsetHeight+1+"px"}else this.element.style.height=o+"px"}isVisible(){return this.visible}hideOnBlur(e){return this.blurable=!0,this.visible&&(setTimeout(()=>{this.visible&&(this.table.rowManager.element.addEventListener("scroll",this.blurEvent),this.subscribe("cell-editing",this.blurEvent),document.body.addEventListener("click",this.blurEvent),document.body.addEventListener("contextmenu",this.blurEvent),document.body.addEventListener("mousedown",this.blurEvent),window.addEventListener("resize",this.blurEvent),document.body.addEventListener("keydown",this.escEvent),this.blurEventsBound=!0)},100),this.blurCallback=e),this}_escapeCheck(e){e.keyCode==27&&this.hide()}blockHide(){this.hideable=!1}restoreHide(){this.hideable=!0}hide(e=!1){return this.visible&&this.hideable&&(this.blurable&&this.blurEventsBound&&(document.body.removeEventListener("keydown",this.escEvent),document.body.removeEventListener("click",this.blurEvent),document.body.removeEventListener("contextmenu",this.blurEvent),document.body.removeEventListener("mousedown",this.blurEvent),window.removeEventListener("resize",this.blurEvent),this.table.rowManager.element.removeEventListener("scroll",this.blurEvent),this.unsubscribe("cell-editing",this.blurEvent),this.blurEventsBound=!1),this.childPopup&&this.childPopup.hide(),this.parent&&(this.parent.childPopup=null),this.element.parentNode&&this.element.parentNode.removeChild(this.element),this.visible=!1,this.blurCallback&&!e&&this.blurCallback(),this.unsubscribe("table-destroy",this.destroyBinding)),this}child(e){return this.childPopup&&this.childPopup.hide(),this.childPopup=new Ke(this.table,e,this),this.childPopup}};class w extends M{constructor(e,t){super(e),this._handler=null}initialize(){}registerTableOption(e,t){this.table.optionsList.register(e,t)}registerColumnOption(e,t){this.table.columnManager.optionsList.register(e,t)}registerTableFunction(e,t){typeof this.table[e]>"u"?this.table[e]=(...i)=>(this.table.initGuard(e),t(...i)):console.warn("Unable to bind table function, name already in use",e)}registerComponentFunction(e,t,i){return this.table.componentFunctionBinder.bind(e,t,i)}registerDataHandler(e,t){this.table.rowManager.registerDataPipelineHandler(e,t),this._handler=e}registerDisplayHandler(e,t){this.table.rowManager.registerDisplayPipelineHandler(e,t),this._handler=e}displayRows(e){var t=this.table.rowManager.displayRows.length-1,i;if(this._handler&&(i=this.table.rowManager.displayPipeline.findIndex(s=>s.handler===this._handler),i>-1&&(t=i)),e&&(t=t+e),this._handler)return t>-1?this.table.rowManager.getDisplayRows(t):this.activeRows()}activeRows(){return this.table.rowManager.activeRows}refreshData(e,t){t||(t=this._handler),t&&this.table.rowManager.refreshActiveData(t,!1,e)}footerAppend(e){return this.table.footerManager.append(e)}footerPrepend(e){return this.table.footerManager.prepend(e)}footerRemove(e){return this.table.footerManager.remove(e)}popup(e,t){return new kt(this.table,e,t)}alert(e,t){return this.table.alertManager.alert(e,t)}clearAlert(){return this.table.alertManager.clear()}}var Mt={rownum:function(l,e,t,i,s,n){return n.getPosition()}};const K=class K extends w{constructor(e){super(e),this.allowedTypes=["","data","download","clipboard","print","htmlOutput"],this.registerColumnOption("accessor"),this.registerColumnOption("accessorParams"),this.registerColumnOption("accessorData"),this.registerColumnOption("accessorDataParams"),this.registerColumnOption("accessorDownload"),this.registerColumnOption("accessorDownloadParams"),this.registerColumnOption("accessorClipboard"),this.registerColumnOption("accessorClipboardParams"),this.registerColumnOption("accessorPrint"),this.registerColumnOption("accessorPrintParams"),this.registerColumnOption("accessorHtmlOutput"),this.registerColumnOption("accessorHtmlOutputParams")}initialize(){this.subscribe("column-layout",this.initializeColumn.bind(this)),this.subscribe("row-data-retrieve",this.transformRow.bind(this))}initializeColumn(e){var t=!1,i={};this.allowedTypes.forEach(s=>{var n="accessor"+(s.charAt(0).toUpperCase()+s.slice(1)),r;e.definition[n]&&(r=this.lookupAccessor(e.definition[n]),r&&(t=!0,i[n]={accessor:r,params:e.definition[n+"Params"]||{}}))}),t&&(e.modules.accessor=i)}lookupAccessor(e){var t=!1;switch(typeof e){case"string":K.accessors[e]?t=K.accessors[e]:console.warn("Accessor Error - No such accessor found, ignoring: ",e);break;case"function":t=e;break}return t}transformRow(e,t){var i="accessor"+(t.charAt(0).toUpperCase()+t.slice(1)),s=e.getComponent(),n=x.deepClone(e.data||{});return this.table.columnManager.traverse(function(r){var o,a,h,d;r.modules.accessor&&(a=r.modules.accessor[i]||r.modules.accessor.accessor||!1,a&&(o=r.getFieldValue(n),o!="undefined"&&(d=r.getComponent(),h=typeof a.params=="function"?a.params(o,n,t,d,s):a.params,r.setFieldValue(n,a.accessor(o,n,t,h,d,s)))))}),n}};b(K,"moduleName","accessor"),b(K,"accessors",Mt);let ce=K;var Lt={method:"GET"};function fe(l,e){var t=[];if(e=e||"",Array.isArray(l))l.forEach((s,n)=>{t=t.concat(fe(s,e?e+"["+n+"]":n))});else if(typeof l=="object")for(var i in l)t=t.concat(fe(l[i],e?e+"["+i+"]":i));else t.push({key:e,value:l});return t}function St(l){var e=fe(l),t=[];return e.forEach(function(i){t.push(encodeURIComponent(i.key)+"="+encodeURIComponent(i.value))}),t.join("&")}function qe(l,e,t){return l&&t&&Object.keys(t).length&&(!e.method||e.method.toLowerCase()=="get")&&(e.method="get",l+=(l.includes("?")?"&":"?")+St(t)),l}function Dt(l,e,t){var i;return new Promise((s,n)=>{if(l=this.urlGenerator.call(this.table,l,e,t),e.method.toUpperCase()!="GET")if(i=typeof this.table.options.ajaxContentType=="object"?this.table.options.ajaxContentType:this.contentTypeFormatters[this.table.options.ajaxContentType],i){for(var r in i.headers)e.headers||(e.headers={}),typeof e.headers[r]>"u"&&(e.headers[r]=i.headers[r]);e.body=i.body.call(this,l,e,t)}else console.warn("Ajax Error - Invalid ajaxContentType value:",this.table.options.ajaxContentType);l?(typeof e.headers>"u"&&(e.headers={}),typeof e.headers.Accept>"u"&&(e.headers.Accept="application/json"),typeof e.headers["X-Requested-With"]>"u"&&(e.headers["X-Requested-With"]="XMLHttpRequest"),typeof e.mode>"u"&&(e.mode="cors"),e.mode=="cors"?(typeof e.headers.Origin>"u"&&(e.headers.Origin=window.location.origin),typeof e.credentials>"u"&&(e.credentials="same-origin")):typeof e.credentials>"u"&&(e.credentials="include"),fetch(l,e).then(o=>{o.ok?o.json().then(a=>{s(a)}).catch(a=>{n(a),console.warn("Ajax Load Error - Invalid JSON returned",a)}):(console.error("Ajax Load Error - Connection Error: "+o.status,o.statusText),n(o))}).catch(o=>{console.error("Ajax Load Error - Connection Error: ",o),n(o)})):(console.warn("Ajax Load Error - No URL Set"),s([]))})}function pe(l,e){var t=[];if(e=e||"",Array.isArray(l))l.forEach((s,n)=>{t=t.concat(pe(s,e?e+"["+n+"]":n))});else if(typeof l=="object")for(var i in l)t=t.concat(pe(l[i],e?e+"["+i+"]":i));else t.push({key:e,value:l});return t}var zt={json:{headers:{"Content-Type":"application/json"},body:function(l,e,t){return JSON.stringify(t)}},form:{headers:{},body:function(l,e,t){var i=pe(t),s=new FormData;return i.forEach(function(n){s.append(n.key,n.value)}),s}}};const F=class F extends w{constructor(e){super(e),this.config={},this.url="",this.urlGenerator=!1,this.params=!1,this.loaderPromise=!1,this.registerTableOption("ajaxURL",!1),this.registerTableOption("ajaxURLGenerator",!1),this.registerTableOption("ajaxParams",{}),this.registerTableOption("ajaxConfig","get"),this.registerTableOption("ajaxContentType","form"),this.registerTableOption("ajaxRequestFunc",!1),this.registerTableOption("ajaxRequesting",function(){}),this.registerTableOption("ajaxResponse",!1),this.contentTypeFormatters=F.contentTypeFormatters}initialize(){this.loaderPromise=this.table.options.ajaxRequestFunc||F.defaultLoaderPromise,this.urlGenerator=this.table.options.ajaxURLGenerator||F.defaultURLGenerator,this.table.options.ajaxURL&&this.setUrl(this.table.options.ajaxURL),this.setDefaultConfig(this.table.options.ajaxConfig),this.registerTableFunction("getAjaxUrl",this.getUrl.bind(this)),this.subscribe("data-loading",this.requestDataCheck.bind(this)),this.subscribe("data-params",this.requestParams.bind(this)),this.subscribe("data-load",this.requestData.bind(this))}requestParams(e,t,i,s){var n=this.table.options.ajaxParams;return n&&(typeof n=="function"&&(n=n.call(this.table)),s=Object.assign(Object.assign({},n),s)),s}requestDataCheck(e,t,i,s){return!!(!e&&this.url||typeof e=="string")}requestData(e,t,i,s,n){var r;return!n&&this.requestDataCheck(e)?(e&&this.setUrl(e),r=this.generateConfig(i),this.sendRequest(this.url,t,r)):n}setDefaultConfig(e={}){this.config=Object.assign({},F.defaultConfig),typeof e=="string"?this.config.method=e:Object.assign(this.config,e)}generateConfig(e={}){var t=Object.assign({},this.config);return typeof e=="string"?t.method=e:Object.assign(t,e),t}setUrl(e){this.url=e}getUrl(){return this.url}sendRequest(e,t,i){return this.table.options.ajaxRequesting.call(this.table,e,t)!==!1?this.loaderPromise(e,i,t).then(s=>(this.table.options.ajaxResponse&&(s=this.table.options.ajaxResponse.call(this.table,e,t,s)),s)):Promise.reject()}};b(F,"moduleName","ajax"),b(F,"defaultConfig",Lt),b(F,"defaultURLGenerator",qe),b(F,"defaultLoaderPromise",Dt),b(F,"contentTypeFormatters",zt);let me=F;var Ht={replace:function(l){return this.table.setData(l)},update:function(l){return this.table.updateOrAddData(l)},insert:function(l){return this.table.addData(l)}},Ft={table:function(l){var e=[],t=!0,i=this.table.columnManager.columns,s=[],n=[];return l=l.split(` +`),l.forEach(function(r){e.push(r.split(" "))}),e.length&&!(e.length===1&&e[0].length<2)?(e[0].forEach(function(r){var o=i.find(function(a){return r&&a.definition.title&&r.trim()&&a.definition.title.trim()===r.trim()});o?s.push(o):t=!1}),t||(t=!0,s=[],e[0].forEach(function(r){var o=i.find(function(a){return r&&a.field&&r.trim()&&a.field.trim()===r.trim()});o?s.push(o):t=!1}),t||(s=this.table.columnManager.columnsByIndex)),t&&e.shift(),e.forEach(function(r){var o={};r.forEach(function(a,h){s[h]&&(o[s[h].field]=a)}),n.push(o)}),n):!1}},Pt={copyToClipboard:["ctrl + 67","meta + 67"]},Ot={copyToClipboard:function(l){this.table.modules.edit.currentCell||this.table.modExists("clipboard",!0)&&this.table.modules.clipboard.copy(!1,!0)}},At={keybindings:{bindings:Pt,actions:Ot}};const _=class _ extends w{constructor(e){super(e),this.mode=!0,this.pasteParser=function(){},this.pasteAction=function(){},this.customSelection=!1,this.rowRange=!1,this.blocked=!0,this.registerTableOption("clipboard",!1),this.registerTableOption("clipboardCopyStyled",!0),this.registerTableOption("clipboardCopyConfig",!1),this.registerTableOption("clipboardCopyFormatter",!1),this.registerTableOption("clipboardCopyRowRange","active"),this.registerTableOption("clipboardPasteParser","table"),this.registerTableOption("clipboardPasteAction","insert"),this.registerColumnOption("clipboard"),this.registerColumnOption("titleClipboard")}initialize(){this.mode=this.table.options.clipboard,this.rowRange=this.table.options.clipboardCopyRowRange,(this.mode===!0||this.mode==="copy")&&this.table.element.addEventListener("copy",e=>{var t,i,s;this.blocked||(e.preventDefault(),this.customSelection?(t=this.customSelection,this.table.options.clipboardCopyFormatter&&(t=this.table.options.clipboardCopyFormatter("plain",t))):(s=this.table.modules.export.generateExportList(this.table.options.clipboardCopyConfig,this.table.options.clipboardCopyStyled,this.rowRange,"clipboard"),i=this.table.modules.export.generateHTMLTable(s),t=i?this.generatePlainContent(s):"",this.table.options.clipboardCopyFormatter&&(t=this.table.options.clipboardCopyFormatter("plain",t),i=this.table.options.clipboardCopyFormatter("html",i))),window.clipboardData&&window.clipboardData.setData?window.clipboardData.setData("Text",t):e.clipboardData&&e.clipboardData.setData?(e.clipboardData.setData("text/plain",t),i&&e.clipboardData.setData("text/html",i)):e.originalEvent&&e.originalEvent.clipboardData.setData&&(e.originalEvent.clipboardData.setData("text/plain",t),i&&e.originalEvent.clipboardData.setData("text/html",i)),this.dispatchExternal("clipboardCopied",t,i),this.reset())}),(this.mode===!0||this.mode==="paste")&&this.table.element.addEventListener("paste",e=>{this.paste(e)}),this.setPasteParser(this.table.options.clipboardPasteParser),this.setPasteAction(this.table.options.clipboardPasteAction),this.registerTableFunction("copyToClipboard",this.copy.bind(this))}reset(){this.blocked=!0,this.customSelection=!1}generatePlainContent(e){var t=[];return e.forEach(i=>{var s=[];i.columns.forEach(n=>{var r="";if(n)if(i.type==="group"&&(n.value=n.component.getKey()),n.value===null)r="";else switch(typeof n.value){case"object":r=JSON.stringify(n.value);break;case"undefined":r="";break;default:r=n.value}s.push(r)}),t.push(s.join(" "))}),t.join(` +`)}copy(e,t){var i,s;this.blocked=!1,this.customSelection=!1,(this.mode===!0||this.mode==="copy")&&(this.rowRange=e||this.table.options.clipboardCopyRowRange,typeof window.getSelection<"u"&&typeof document.createRange<"u"?(e=document.createRange(),e.selectNodeContents(this.table.element),i=window.getSelection(),i.toString()&&t&&(this.customSelection=i.toString()),i.removeAllRanges(),i.addRange(e)):typeof document.selection<"u"&&typeof document.body.createTextRange<"u"&&(s=document.body.createTextRange(),s.moveToElementText(this.table.element),s.select()),document.execCommand("copy"),i&&i.removeAllRanges())}setPasteAction(e){switch(typeof e){case"string":this.pasteAction=_.pasteActions[e],this.pasteAction||console.warn("Clipboard Error - No such paste action found:",e);break;case"function":this.pasteAction=e;break}}setPasteParser(e){switch(typeof e){case"string":this.pasteParser=_.pasteParsers[e],this.pasteParser||console.warn("Clipboard Error - No such paste parser found:",e);break;case"function":this.pasteParser=e;break}}paste(e){var t,i,s;this.checkPasteOrigin(e)&&(t=this.getPasteData(e),i=this.pasteParser.call(this,t),i?(e.preventDefault(),this.table.modExists("mutator")&&(i=this.mutateData(i)),s=this.pasteAction.call(this,i),this.dispatchExternal("clipboardPasted",t,i,s)):this.dispatchExternal("clipboardPasteError",t))}mutateData(e){var t=[];return Array.isArray(e)?e.forEach(i=>{t.push(this.table.modules.mutator.transformRow(i,"clipboard"))}):t=e,t}checkPasteOrigin(e){var t=!0,i=this.confirm("clipboard-paste",[e]);return(i||!["DIV","SPAN"].includes(e.target.tagName))&&(t=!1),t}getPasteData(e){var t;return window.clipboardData&&window.clipboardData.getData?t=window.clipboardData.getData("Text"):e.clipboardData&&e.clipboardData.getData?t=e.clipboardData.getData("text/plain"):e.originalEvent&&e.originalEvent.clipboardData.getData&&(t=e.originalEvent.clipboardData.getData("text/plain")),t}};b(_,"moduleName","clipboard"),b(_,"moduleExtensions",At),b(_,"pasteActions",Ht),b(_,"pasteParsers",Ft);let ge=_;class _t{constructor(e){return this._row=e,new Proxy(this,{get:function(t,i,s){return typeof t[i]<"u"?t[i]:t._row.table.componentFunctionBinder.handle("row",t._row,i)}})}getData(e){return this._row.getData(e)}getElement(){return this._row.getElement()}getTable(){return this._row.table}getCells(){var e=[];return this._row.getCells().forEach(function(t){e.push(t.getComponent())}),e}getCell(e){var t=this._row.getCell(e);return t?t.getComponent():!1}_getSelf(){return this._row}}class Ye{constructor(e){return this._cell=e,new Proxy(this,{get:function(t,i,s){return typeof t[i]<"u"?t[i]:t._cell.table.componentFunctionBinder.handle("cell",t._cell,i)}})}getValue(){return this._cell.getValue()}getOldValue(){return this._cell.getOldValue()}getInitialValue(){return this._cell.initialValue}getElement(){return this._cell.getElement()}getRow(){return this._cell.row.getComponent()}getData(e){return this._cell.row.getData(e)}getType(){return"cell"}getField(){return this._cell.column.getField()}getColumn(){return this._cell.column.getComponent()}setValue(e,t){typeof t>"u"&&(t=!0),this._cell.setValue(e,t)}restoreOldValue(){this._cell.setValueActual(this._cell.getOldValue())}restoreInitialValue(){this._cell.setValueActual(this._cell.initialValue)}checkHeight(){this._cell.checkHeight()}getTable(){return this._cell.table}_getSelf(){return this._cell}}class ne extends M{constructor(e,t){super(e.table),this.table=e.table,this.column=e,this.row=t,this.element=null,this.value=null,this.initialValue,this.oldValue=null,this.modules={},this.height=null,this.width=null,this.minWidth=null,this.component=null,this.loaded=!1,this.build()}build(){this.generateElement(),this.setWidth(),this._configureCell(),this.setValueActual(this.column.getFieldValue(this.row.data)),this.initialValue=this.value}generateElement(){this.element=document.createElement("div"),this.element.className="tabulator-cell",this.element.setAttribute("role","gridcell"),this.column.isRowHeader&&this.element.classList.add("tabulator-row-header")}_configureCell(){var e=this.element,t=this.column.getField(),i={top:"flex-start",bottom:"flex-end",middle:"center"},s={left:"flex-start",right:"flex-end",center:"center"};if(e.style.textAlign=this.column.hozAlign,this.column.vertAlign&&(e.style.display="inline-flex",e.style.alignItems=i[this.column.vertAlign]||"",this.column.hozAlign&&(e.style.justifyContent=s[this.column.hozAlign]||"")),t&&e.setAttribute("tabulator-field",t),this.column.definition.cssClass){var n=this.column.definition.cssClass.split(" ");n.forEach(r=>{e.classList.add(r)})}this.dispatch("cell-init",this),this.column.visible||this.hide()}_generateContents(){var e;switch(e=this.chain("cell-format",this,null,()=>this.element.innerHTML=this.value),typeof e){case"object":if(e instanceof Node){for(;this.element.firstChild;)this.element.removeChild(this.element.firstChild);this.element.appendChild(e)}else this.element.innerHTML="",e!=null&&console.warn("Format Error - Formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:",e);break;case"undefined":this.element.innerHTML="";break;default:this.element.innerHTML=e}}cellRendered(){this.dispatch("cell-rendered",this)}getElement(e){return this.loaded||(this.loaded=!0,e||this.layoutElement()),this.element}getValue(){return this.value}getOldValue(){return this.oldValue}setValue(e,t,i){var s=this.setValueProcessData(e,t,i);s&&(this.dispatch("cell-value-updated",this),this.cellRendered(),this.column.definition.cellEdited&&this.column.definition.cellEdited.call(this.table,this.getComponent()),this.dispatchExternal("cellEdited",this.getComponent()),this.subscribedExternal("dataChanged")&&this.dispatchExternal("dataChanged",this.table.rowManager.getData()))}setValueProcessData(e,t,i){var s=!1;return(this.value!==e||i)&&(s=!0,t&&(e=this.chain("cell-value-changing",[this,e],null,e))),this.setValueActual(e),s&&this.dispatch("cell-value-changed",this),s}setValueActual(e){this.oldValue=this.value,this.value=e,this.dispatch("cell-value-save-before",this),this.column.setFieldValue(this.row.data,e),this.dispatch("cell-value-save-after",this),this.loaded&&this.layoutElement()}layoutElement(){this._generateContents(),this.dispatch("cell-layout",this)}setWidth(){this.width=this.column.width,this.element.style.width=this.column.widthStyled}clearWidth(){this.width="",this.element.style.width=""}getWidth(){return this.width||this.element.offsetWidth}setMinWidth(){this.minWidth=this.column.minWidth,this.element.style.minWidth=this.column.minWidthStyled}setMaxWidth(){this.maxWidth=this.column.maxWidth,this.element.style.maxWidth=this.column.maxWidthStyled}checkHeight(){this.row.reinitializeHeight()}clearHeight(){this.element.style.height="",this.height=null,this.dispatch("cell-height",this,"")}setHeight(){this.height=this.row.height,this.element.style.height=this.row.heightStyled,this.dispatch("cell-height",this,this.row.heightStyled)}getHeight(){return this.height||this.element.offsetHeight}show(){this.element.style.display=this.column.vertAlign?"inline-flex":""}hide(){this.element.style.display="none"}delete(){this.dispatch("cell-delete",this),!this.table.rowManager.redrawBlock&&this.element.parentNode&&this.element.parentNode.removeChild(this.element),this.element=!1,this.column.deleteCell(this),this.row.deleteCell(this),this.calcs={}}getIndex(){return this.row.getCellIndex(this)}getComponent(){return this.component||(this.component=new Ye(this)),this.component}}class $e{constructor(e){return this._column=e,this.type="ColumnComponent",new Proxy(this,{get:function(t,i,s){return typeof t[i]<"u"?t[i]:t._column.table.componentFunctionBinder.handle("column",t._column,i)}})}getElement(){return this._column.getElement()}getDefinition(){return this._column.getDefinition()}getField(){return this._column.getField()}getTitleDownload(){return this._column.getTitleDownload()}getCells(){var e=[];return this._column.cells.forEach(function(t){e.push(t.getComponent())}),e}isVisible(){return this._column.visible}show(){this._column.isGroup?this._column.columns.forEach(function(e){e.show()}):this._column.show()}hide(){this._column.isGroup?this._column.columns.forEach(function(e){e.hide()}):this._column.hide()}toggle(){this._column.visible?this.hide():this.show()}delete(){return this._column.delete()}getSubColumns(){var e=[];return this._column.columns.length&&this._column.columns.forEach(function(t){e.push(t.getComponent())}),e}getParentColumn(){return this._column.getParentComponent()}_getSelf(){return this._column}scrollTo(e,t){return this._column.table.columnManager.scrollToColumn(this._column,e,t)}getTable(){return this._column.table}move(e,t){var i=this._column.table.columnManager.findColumn(e);i?this._column.table.columnManager.moveColumn(this._column,i,t):console.warn("Move Error - No matching column found:",i)}getNextColumn(){var e=this._column.nextColumn();return e?e.getComponent():!1}getPrevColumn(){var e=this._column.prevColumn();return e?e.getComponent():!1}updateDefinition(e){return this._column.updateDefinition(e)}getWidth(){return this._column.getWidth()}setWidth(e){var t;return e===!0?t=this._column.reinitializeWidth(!0):t=this._column.setWidth(e),this._column.table.columnManager.rerenderColumns(!0),t}}var Qe={title:void 0,field:void 0,columns:void 0,visible:void 0,hozAlign:void 0,vertAlign:void 0,width:void 0,minWidth:40,maxWidth:void 0,maxInitialWidth:void 0,cssClass:void 0,variableHeight:void 0,headerVertical:void 0,headerHozAlign:void 0,headerWordWrap:!1,editableTitle:void 0};const W=class W extends M{constructor(e,t,i){super(t.table),this.definition=e,this.parent=t,this.type="column",this.columns=[],this.cells=[],this.isGroup=!1,this.isRowHeader=i,this.element=this.createElement(),this.contentElement=!1,this.titleHolderElement=!1,this.titleElement=!1,this.groupElement=this.createGroupElement(),this.hozAlign="",this.vertAlign="",this.field="",this.fieldStructure="",this.getFieldValue="",this.setFieldValue="",this.titleDownload=null,this.titleFormatterRendered=!1,this.mapDefinitions(),this.setField(this.definition.field),this.modules={},this.width=null,this.widthStyled="",this.maxWidth=null,this.maxWidthStyled="",this.maxInitialWidth=null,this.minWidth=null,this.minWidthStyled="",this.widthFixed=!1,this.visible=!0,this.component=null,this.definition.columns?(this.isGroup=!0,this.definition.columns.forEach((s,n)=>{var r=new W(s,this);this.attachColumn(r)}),this.checkColumnVisibility()):t.registerColumnField(this),this._initialize()}createElement(){var e=document.createElement("div");switch(e.classList.add("tabulator-col"),e.setAttribute("role","columnheader"),e.setAttribute("aria-sort","none"),this.isRowHeader&&e.classList.add("tabulator-row-header"),this.table.options.columnHeaderVertAlign){case"middle":e.style.justifyContent="center";break;case"bottom":e.style.justifyContent="flex-end";break}return e}createGroupElement(){var e=document.createElement("div");return e.classList.add("tabulator-col-group-cols"),e}mapDefinitions(){var e=this.table.options.columnDefaults;if(e)for(let t in e)typeof this.definition[t]>"u"&&(this.definition[t]=e[t]);this.definition=this.table.columnManager.optionsList.generate(W.defaultOptionList,this.definition)}checkDefinition(){Object.keys(this.definition).forEach(e=>{W.defaultOptionList.indexOf(e)===-1&&console.warn("Invalid column definition option in '"+(this.field||this.definition.title)+"' column:",e)})}setField(e){this.field=e,this.fieldStructure=e?this.table.options.nestedFieldSeparator?e.split(this.table.options.nestedFieldSeparator):[e]:[],this.getFieldValue=this.fieldStructure.length>1?this._getNestedData:this._getFlatData,this.setFieldValue=this.fieldStructure.length>1?this._setNestedData:this._setFlatData}registerColumnPosition(e){this.parent.registerColumnPosition(e)}registerColumnField(e){this.parent.registerColumnField(e)}reRegisterPosition(){this.isGroup?this.columns.forEach(function(e){e.reRegisterPosition()}):this.registerColumnPosition(this)}_initialize(){for(var e=this.definition;this.element.firstChild;)this.element.removeChild(this.element.firstChild);e.headerVertical&&(this.element.classList.add("tabulator-col-vertical"),e.headerVertical==="flip"&&this.element.classList.add("tabulator-col-vertical-flip")),this.contentElement=this._buildColumnHeaderContent(),this.element.appendChild(this.contentElement),this.isGroup?this._buildGroupHeader():this._buildColumnHeader(),this.dispatch("column-init",this)}_buildColumnHeader(){var e=this.definition;if(this.dispatch("column-layout",this),typeof e.visible<"u"&&(e.visible?this.show(!0):this.hide(!0)),e.cssClass){var t=e.cssClass.split(" ");t.forEach(i=>{this.element.classList.add(i)})}e.field&&this.element.setAttribute("tabulator-field",e.field),this.setMinWidth(parseInt(e.minWidth)),e.maxInitialWidth&&(this.maxInitialWidth=parseInt(e.maxInitialWidth)),e.maxWidth&&this.setMaxWidth(parseInt(e.maxWidth)),this.reinitializeWidth(),this.hozAlign=this.definition.hozAlign,this.vertAlign=this.definition.vertAlign,this.titleElement.style.textAlign=this.definition.headerHozAlign}_buildColumnHeaderContent(){var e=document.createElement("div");return e.classList.add("tabulator-col-content"),this.titleHolderElement=document.createElement("div"),this.titleHolderElement.classList.add("tabulator-col-title-holder"),e.appendChild(this.titleHolderElement),this.titleElement=this._buildColumnHeaderTitle(),this.titleHolderElement.appendChild(this.titleElement),e}_buildColumnHeaderTitle(){var e=this.definition,t=document.createElement("div");if(t.classList.add("tabulator-col-title"),e.headerWordWrap&&t.classList.add("tabulator-col-title-wrap"),e.editableTitle){var i=document.createElement("input");i.classList.add("tabulator-title-editor"),i.addEventListener("click",s=>{s.stopPropagation(),i.focus()}),i.addEventListener("mousedown",s=>{s.stopPropagation()}),i.addEventListener("change",()=>{e.title=i.value,this.dispatchExternal("columnTitleChanged",this.getComponent())}),t.appendChild(i),e.field?this.langBind("columns|"+e.field,s=>{i.value=s||e.title||" "}):i.value=e.title||" "}else e.field?this.langBind("columns|"+e.field,s=>{this._formatColumnHeaderTitle(t,s||e.title||" ")}):this._formatColumnHeaderTitle(t,e.title||" ");return t}_formatColumnHeaderTitle(e,t){var i=this.chain("column-format",[this,t,e],null,()=>t);switch(typeof i){case"object":i instanceof Node?e.appendChild(i):(e.innerHTML="",console.warn("Format Error - Title formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:",i));break;case"undefined":e.innerHTML="";break;default:e.innerHTML=i}}_buildGroupHeader(){if(this.element.classList.add("tabulator-col-group"),this.element.setAttribute("role","columngroup"),this.element.setAttribute("aria-title",this.definition.title),this.definition.cssClass){var e=this.definition.cssClass.split(" ");e.forEach(t=>{this.element.classList.add(t)})}this.titleElement.style.textAlign=this.definition.headerHozAlign,this.element.appendChild(this.groupElement)}_getFlatData(e){return e[this.field]}_getNestedData(e){var t=e,i=this.fieldStructure,s=i.length,n;for(let r=0;r{t.push(i),t=t.concat(i.getColumns(!0))}):t=this.columns,t}getCells(){return this.cells}getTopColumn(){return this.parent.isGroup?this.parent.getTopColumn():this}getDefinition(e){var t=[];return this.isGroup&&e&&(this.columns.forEach(function(i){t.push(i.getDefinition(!0))}),this.definition.columns=t),this.definition}checkColumnVisibility(){var e=!1;this.columns.forEach(function(t){t.visible&&(e=!0)}),e?(this.show(),this.dispatchExternal("columnVisibilityChanged",this.getComponent(),!1)):this.hide()}show(e,t){this.visible||(this.visible=!0,this.element.style.display="",this.parent.isGroup&&this.parent.checkColumnVisibility(),this.cells.forEach(function(i){i.show()}),!this.isGroup&&this.width===null&&this.reinitializeWidth(),this.table.columnManager.verticalAlignHeaders(),this.dispatch("column-show",this,t),e||this.dispatchExternal("columnVisibilityChanged",this.getComponent(),!0),this.parent.isGroup&&this.parent.matchChildWidths(),this.silent||this.table.columnManager.rerenderColumns())}hide(e,t){this.visible&&(this.visible=!1,this.element.style.display="none",this.table.columnManager.verticalAlignHeaders(),this.parent.isGroup&&this.parent.checkColumnVisibility(),this.cells.forEach(function(i){i.hide()}),this.dispatch("column-hide",this,t),e||this.dispatchExternal("columnVisibilityChanged",this.getComponent(),!1),this.parent.isGroup&&this.parent.matchChildWidths(),this.silent||this.table.columnManager.rerenderColumns())}matchChildWidths(){var e=0;this.contentElement&&this.columns.length&&(this.columns.forEach(function(t){t.visible&&(e+=t.getWidth())}),this.contentElement.style.maxWidth=e-1+"px",this.table.initialized&&(this.element.style.width=e+"px"),this.parent.isGroup&&this.parent.matchChildWidths())}removeChild(e){var t=this.columns.indexOf(e);t>-1&&this.columns.splice(t,1),this.columns.length||this.delete()}setWidth(e){this.widthFixed=!0,this.setWidthActual(e)}setWidthActual(e){isNaN(e)&&(e=Math.floor(this.table.element.clientWidth/100*parseInt(e))),e=Math.max(this.minWidth,e),this.maxWidth&&(e=Math.min(this.maxWidth,e)),this.width=e,this.widthStyled=e?e+"px":"",this.element.style.width=this.widthStyled,this.isGroup||this.cells.forEach(function(t){t.setWidth()}),this.parent.isGroup&&this.parent.matchChildWidths(),this.dispatch("column-width",this),this.subscribedExternal("columnWidth")&&this.dispatchExternal("columnWidth",this.getComponent())}checkCellHeights(){var e=[];this.cells.forEach(function(t){t.row.heightInitialized&&(t.row.getElement().offsetParent!==null?(e.push(t.row),t.row.clearCellHeight()):t.row.heightInitialized=!1)}),e.forEach(function(t){t.calcHeight()}),e.forEach(function(t){t.setCellHeight()})}getWidth(){var e=0;return this.isGroup?this.columns.forEach(function(t){t.visible&&(e+=t.getWidth())}):e=this.width,e}getLeftOffset(){var e=this.element.offsetLeft;return this.parent.isGroup&&(e+=this.parent.getLeftOffset()),e}getHeight(){return Math.ceil(this.element.getBoundingClientRect().height)}setMinWidth(e){this.maxWidth&&e>this.maxWidth&&(e=this.maxWidth,console.warn("the minWidth ("+e+"px) for column '"+this.field+"' cannot be bigger that its maxWidth ("+this.maxWidthStyled+")")),this.minWidth=e,this.minWidthStyled=e?e+"px":"",this.element.style.minWidth=this.minWidthStyled,this.cells.forEach(function(t){t.setMinWidth()})}setMaxWidth(e){this.minWidth&&e{this.isGroup&&this.columns.forEach(function(s){s.delete()}),this.dispatch("column-delete",this);var i=this.cells.length;for(let s=0;s-1?this._nextVisibleColumn(e+1):!1}_nextVisibleColumn(e){var t=this.table.columnManager.getColumnByIndex(e);return!t||t.visible?t:this._nextVisibleColumn(e+1)}prevColumn(){var e=this.table.columnManager.findColumnIndex(this);return e>-1?this._prevVisibleColumn(e-1):!1}_prevVisibleColumn(e){var t=this.table.columnManager.getColumnByIndex(e);return!t||t.visible?t:this._prevVisibleColumn(e-1)}reinitializeWidth(e){this.widthFixed=!1,typeof this.definition.width<"u"&&!e&&this.setWidth(this.definition.width),this.dispatch("column-width-fit-before",this),this.fitToData(e),this.dispatch("column-width-fit-after",this)}fitToData(e){if(!this.isGroup){this.widthFixed||(this.element.style.width="",this.cells.forEach(s=>{s.clearWidth()}));var t=this.element.offsetWidth;if((!this.width||!this.widthFixed)&&(this.cells.forEach(s=>{var n=s.getWidth();n>t&&(t=n)}),t)){var i=t+1;this.maxInitialWidth&&!e&&(i=Math.min(i,this.maxInitialWidth)),this.setWidthActual(i)}}}updateDefinition(e){var t;return this.isGroup||this.parent.isGroup?(console.error("Column Update Error - The updateDefinition function is only available on ungrouped columns"),Promise.reject("Column Update Error - The updateDefinition function is only available on columns, not column groups")):(t=Object.assign({},this.getDefinition()),t=Object.assign(t,e),this.table.columnManager.addColumn(t,!1,this).then(i=>(t.field==this.field&&(this.field=!1),this.delete().then(()=>i.getComponent()))))}deleteCell(e){var t=this.cells.indexOf(e);t>-1&&this.cells.splice(t,1)}getComponent(){return this.component||(this.component=new $e(this)),this.component}getPosition(){return this.table.columnManager.getVisibleColumnsByIndex().indexOf(this)+1}getParentComponent(){return this.parent instanceof W?this.parent.getComponent():!1}};b(W,"defaultOptionList",Qe);let U=W;class oe{constructor(e){return this._row=e,new Proxy(this,{get:function(t,i,s){return typeof t[i]<"u"?t[i]:t._row.table.componentFunctionBinder.handle("row",t._row,i)}})}getData(e){return this._row.getData(e)}getElement(){return this._row.getElement()}getCells(){var e=[];return this._row.getCells().forEach(function(t){e.push(t.getComponent())}),e}getCell(e){var t=this._row.getCell(e);return t?t.getComponent():!1}getIndex(){return this._row.getData("data")[this._row.table.options.index]}getPosition(){return this._row.getPosition()}watchPosition(e){return this._row.watchPosition(e)}delete(){return this._row.delete()}scrollTo(e,t){return this._row.table.rowManager.scrollToRow(this._row,e,t)}move(e,t){this._row.moveToRow(e,t)}update(e){return this._row.updateData(e)}normalizeHeight(){this._row.normalizeHeight(!0)}_getSelf(){return this._row}reformat(){return this._row.reinitialize()}getTable(){return this._row.table}getNextRow(){var e=this._row.nextRow();return e&&e.getComponent()}getPrevRow(){var e=this._row.prevRow();return e&&e.getComponent()}}class S extends M{constructor(e,t,i="row"){super(t.table),this.parent=t,this.data={},this.type=i,this.element=!1,this.modules={},this.cells=[],this.height=0,this.heightStyled="",this.manualHeight=!1,this.outerHeight=0,this.initialized=!1,this.heightInitialized=!1,this.position=0,this.positionWatchers=[],this.component=null,this.created=!1,this.setData(e)}create(){this.created||(this.created=!0,this.generateElement())}createElement(){var e=document.createElement("div");e.classList.add("tabulator-row"),e.setAttribute("role","row"),this.element=e}getElement(){return this.create(),this.element}detachElement(){this.element&&this.element.parentNode&&this.element.parentNode.removeChild(this.element)}generateElement(){this.createElement(),this.dispatch("row-init",this)}generateCells(){this.cells=this.table.columnManager.generateCells(this)}initialize(e,t){if(this.create(),!this.initialized||e){for(this.deleteCells();this.element.firstChild;)this.element.removeChild(this.element.firstChild);this.dispatch("row-layout-before",this),this.generateCells(),this.initialized=!0,this.table.columnManager.renderer.renderRowCells(this,t),e&&this.normalizeHeight(),this.dispatch("row-layout",this),this.table.options.rowFormatter&&this.table.options.rowFormatter(this.getComponent()),this.dispatch("row-layout-after",this)}else this.table.columnManager.renderer.rerenderRowCells(this,t)}rendered(){this.cells.forEach(e=>{e.cellRendered()})}reinitializeHeight(){this.heightInitialized=!1,this.element&&this.element.offsetParent!==null&&this.normalizeHeight(!0)}deinitialize(){this.initialized=!1}deinitializeHeight(){this.heightInitialized=!1}reinitialize(e){this.initialized=!1,this.heightInitialized=!1,this.manualHeight||(this.height=0,this.heightStyled=""),this.element&&this.element.offsetParent!==null&&this.initialize(!0),this.dispatch("row-relayout",this)}calcHeight(e){var t=0,i=0;this.table.options.rowHeight?this.height=this.table.options.rowHeight:(i=this.calcMinHeight(),t=this.calcMaxHeight(),e?this.height=Math.max(t,i):this.height=this.manualHeight?this.height:Math.max(t,i)),this.heightStyled=this.height?this.height+"px":"",this.outerHeight=this.element.offsetHeight}calcMinHeight(){return this.table.options.resizableRows?this.element.clientHeight:0}calcMaxHeight(){var e=0;return this.cells.forEach(function(t){var i=t.getHeight();i>e&&(e=i)}),e}setCellHeight(){this.cells.forEach(function(e){e.setHeight()}),this.heightInitialized=!0}clearCellHeight(){this.cells.forEach(function(e){e.clearHeight()})}normalizeHeight(e){e&&!this.table.options.rowHeight&&this.clearCellHeight(),this.calcHeight(e),this.setCellHeight()}setHeight(e,t){(this.height!=e||t)&&(this.manualHeight=!0,this.height=e,this.heightStyled=e?e+"px":"",this.setCellHeight(),this.outerHeight=this.element.offsetHeight,this.subscribedExternal("rowHeight")&&this.dispatchExternal("rowHeight",this.getComponent()))}getHeight(){return this.outerHeight}getWidth(){return this.element.offsetWidth}deleteCell(e){var t=this.cells.indexOf(e);t>-1&&this.cells.splice(t,1)}setData(e){this.data=this.chain("row-data-init-before",[this,e],void 0,e),this.dispatch("row-data-init-after",this)}updateData(e){var t=this.element&&x.elVisible(this.element),i={},s;return new Promise((n,r)=>{typeof e=="string"&&(e=JSON.parse(e)),this.dispatch("row-data-save-before",this),this.subscribed("row-data-changing")&&(i=Object.assign(i,this.data),i=Object.assign(i,e)),s=this.chain("row-data-changing",[this,i,e],null,e);for(let o in s)this.data[o]=s[o];this.dispatch("row-data-save-after",this);for(let o in e)this.table.columnManager.getColumnsByFieldRoot(o).forEach(h=>{let d=this.getCell(h.getField());if(d){let u=h.getFieldValue(s);d.getValue()!==u&&(d.setValueProcessData(u),t&&d.cellRendered())}});t?(this.normalizeHeight(!0),this.table.options.rowFormatter&&this.table.options.rowFormatter(this.getComponent())):(this.initialized=!1,this.height=0,this.heightStyled=""),this.dispatch("row-data-changed",this,t,e),this.dispatchExternal("rowUpdated",this.getComponent()),this.subscribedExternal("dataChanged")&&this.dispatchExternal("dataChanged",this.table.rowManager.getData()),n()})}getData(e){return e?this.chain("row-data-retrieve",[this,e],null,this.data):this.data}getCell(e){var t=!1;return e=this.table.columnManager.findColumn(e),!this.initialized&&this.cells.length===0&&this.generateCells(),t=this.cells.find(function(i){return i.column===e}),t}getCellIndex(e){return this.cells.findIndex(function(t){return t===e})}findCell(e){return this.cells.find(t=>t.element===e)}getCells(){return!this.initialized&&this.cells.length===0&&this.generateCells(),this.cells}nextRow(){var e=this.table.rowManager.nextDisplayRow(this,!0);return e||!1}prevRow(){var e=this.table.rowManager.prevDisplayRow(this,!0);return e||!1}moveToRow(e,t){var i=this.table.rowManager.findRow(e);i?(this.table.rowManager.moveRowActual(this,i,!t),this.table.rowManager.refreshActiveData("display",!1,!0)):console.warn("Move Error - No matching row found:",e)}delete(){return this.dispatch("row-delete",this),this.deleteActual(),Promise.resolve()}deleteActual(e){this.detachModules(),this.table.rowManager.deleteRow(this,e),this.deleteCells(),this.initialized=!1,this.heightInitialized=!1,this.element=!1,this.dispatch("row-deleted",this)}detachModules(){this.dispatch("row-deleting",this)}deleteCells(){var e=this.cells.length;for(let t=0;t{t(this.position)}))}watchPosition(e){this.positionWatchers.push(e),e(this.position)}getGroup(){return this.modules.group||!1}getComponent(){return this.component||(this.component=new oe(this)),this.component}}var Bt={avg:function(l,e,t){var i=0,s=typeof t.precision<"u"?t.precision:2;return l.length&&(i=l.reduce(function(n,r){return Number(n)+Number(r)}),i=i/l.length,i=s!==!1?i.toFixed(s):i),parseFloat(i).toString()},max:function(l,e,t){var i=null,s=typeof t.precision<"u"?t.precision:!1;return l.forEach(function(n){n=Number(n),(n>i||i===null)&&(i=n)}),i!==null?s!==!1?i.toFixed(s):i:""},min:function(l,e,t){var i=null,s=typeof t.precision<"u"?t.precision:!1;return l.forEach(function(n){n=Number(n),(n(l||s===0)&&l.indexOf(s)===n);return i.length}};const B=class B extends w{constructor(e){super(e),this.topCalcs=[],this.botCalcs=[],this.genColumn=!1,this.topElement=this.createElement(),this.botElement=this.createElement(),this.topRow=!1,this.botRow=!1,this.topInitialized=!1,this.botInitialized=!1,this.blocked=!1,this.recalcAfterBlock=!1,this.registerTableOption("columnCalcs",!0),this.registerColumnOption("topCalc"),this.registerColumnOption("topCalcParams"),this.registerColumnOption("topCalcFormatter"),this.registerColumnOption("topCalcFormatterParams"),this.registerColumnOption("bottomCalc"),this.registerColumnOption("bottomCalcParams"),this.registerColumnOption("bottomCalcFormatter"),this.registerColumnOption("bottomCalcFormatterParams")}createElement(){var e=document.createElement("div");return e.classList.add("tabulator-calcs-holder"),e}initialize(){this.genColumn=new U({field:"value"},this),this.subscribe("cell-value-changed",this.cellValueChanged.bind(this)),this.subscribe("column-init",this.initializeColumnCheck.bind(this)),this.subscribe("row-deleted",this.rowsUpdated.bind(this)),this.subscribe("scroll-horizontal",this.scrollHorizontal.bind(this)),this.subscribe("row-added",this.rowsUpdated.bind(this)),this.subscribe("column-moved",this.recalcActiveRows.bind(this)),this.subscribe("column-add",this.recalcActiveRows.bind(this)),this.subscribe("data-refreshed",this.recalcActiveRowsRefresh.bind(this)),this.subscribe("table-redraw",this.tableRedraw.bind(this)),this.subscribe("rows-visible",this.visibleRows.bind(this)),this.subscribe("scrollbar-vertical",this.adjustForScrollbar.bind(this)),this.subscribe("redraw-blocked",this.blockRedraw.bind(this)),this.subscribe("redraw-restored",this.restoreRedraw.bind(this)),this.subscribe("table-redrawing",this.resizeHolderWidth.bind(this)),this.subscribe("column-resized",this.resizeHolderWidth.bind(this)),this.subscribe("column-show",this.resizeHolderWidth.bind(this)),this.subscribe("column-hide",this.resizeHolderWidth.bind(this)),this.registerTableFunction("getCalcResults",this.getResults.bind(this)),this.registerTableFunction("recalc",this.userRecalc.bind(this)),this.resizeHolderWidth()}resizeHolderWidth(){this.topElement.style.minWidth=this.table.columnManager.headersElement.offsetWidth+"px"}tableRedraw(e){this.recalc(this.table.rowManager.activeRows),e&&this.redraw()}blockRedraw(){this.blocked=!0,this.recalcAfterBlock=!1}restoreRedraw(){this.blocked=!1,this.recalcAfterBlock&&(this.recalcAfterBlock=!1,this.recalcActiveRowsRefresh())}userRecalc(){this.recalc(this.table.rowManager.activeRows)}blockCheck(){return this.blocked&&(this.recalcAfterBlock=!0),this.blocked}visibleRows(e,t){return this.topRow&&t.unshift(this.topRow),this.botRow&&t.push(this.botRow),t}rowsUpdated(e){this.table.options.groupBy?this.recalcRowGroup(e):this.recalcActiveRows()}recalcActiveRowsRefresh(){this.table.options.groupBy&&this.table.options.dataTreeStartExpanded&&this.table.options.dataTree?this.recalcAll():this.recalcActiveRows()}recalcActiveRows(){this.recalc(this.table.rowManager.activeRows)}cellValueChanged(e){(e.column.definition.topCalc||e.column.definition.bottomCalc)&&(this.table.options.groupBy?((this.table.options.columnCalcs=="table"||this.table.options.columnCalcs=="both")&&this.recalcActiveRows(),this.table.options.columnCalcs!="table"&&this.recalcRowGroup(e.row)):this.recalcActiveRows())}initializeColumnCheck(e){(e.definition.topCalc||e.definition.bottomCalc)&&this.initializeColumn(e)}initializeColumn(e){var t=e.definition,i={topCalcParams:t.topCalcParams||{},botCalcParams:t.bottomCalcParams||{}};if(t.topCalc){switch(typeof t.topCalc){case"string":B.calculations[t.topCalc]?i.topCalc=B.calculations[t.topCalc]:console.warn("Column Calc Error - No such calculation found, ignoring: ",t.topCalc);break;case"function":i.topCalc=t.topCalc;break}i.topCalc&&(e.modules.columnCalcs=i,this.topCalcs.push(e),this.table.options.columnCalcs!="group"&&this.initializeTopRow())}if(t.bottomCalc){switch(typeof t.bottomCalc){case"string":B.calculations[t.bottomCalc]?i.botCalc=B.calculations[t.bottomCalc]:console.warn("Column Calc Error - No such calculation found, ignoring: ",t.bottomCalc);break;case"function":i.botCalc=t.bottomCalc;break}i.botCalc&&(e.modules.columnCalcs=i,this.botCalcs.push(e),this.table.options.columnCalcs!="group"&&this.initializeBottomRow())}}registerColumnField(){}removeCalcs(){var e=!1;this.topInitialized&&(this.topInitialized=!1,this.topElement.parentNode.removeChild(this.topElement),e=!0),this.botInitialized&&(this.botInitialized=!1,this.footerRemove(this.botElement),e=!0),e&&this.table.rowManager.adjustTableSize()}reinitializeCalcs(){this.topCalcs.length&&this.initializeTopRow(),this.botCalcs.length&&this.initializeBottomRow()}initializeTopRow(){var e=document.createDocumentFragment();this.topInitialized||(e.appendChild(document.createElement("br")),e.appendChild(this.topElement),this.table.columnManager.getContentsElement().insertBefore(e,this.table.columnManager.headersElement.nextSibling),this.topInitialized=!0)}initializeBottomRow(){this.botInitialized||(this.footerPrepend(this.botElement),this.botInitialized=!0)}scrollHorizontal(e){this.botInitialized&&this.botRow&&(this.botElement.scrollLeft=e)}recalc(e){var t,i;if(!this.blockCheck()&&(this.topInitialized||this.botInitialized)){if(t=this.rowsToData(e),this.topInitialized){for(this.topRow&&this.topRow.deleteCells(),i=this.generateRow("top",t),this.topRow=i;this.topElement.firstChild;)this.topElement.removeChild(this.topElement.firstChild);this.topElement.appendChild(i.getElement()),i.initialize(!0)}if(this.botInitialized){for(this.botRow&&this.botRow.deleteCells(),i=this.generateRow("bottom",t),this.botRow=i;this.botElement.firstChild;)this.botElement.removeChild(this.botElement.firstChild);this.botElement.appendChild(i.getElement()),i.initialize(!0)}this.table.rowManager.adjustTableSize(),this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layout()}}recalcRowGroup(e){this.recalcGroup(this.table.modules.groupRows.getRowGroup(e))}recalcAll(){if((this.topCalcs.length||this.botCalcs.length)&&(this.table.options.columnCalcs!=="group"&&this.recalcActiveRows(),this.table.options.groupBy&&this.table.options.columnCalcs!=="table")){var e=this.table.modules.groupRows.getChildGroups();e.forEach(t=>{this.recalcGroup(t)})}}recalcGroup(e){var t,i;this.blockCheck()||e&&e.calcs&&(e.calcs.bottom&&(t=this.rowsToData(e.rows),i=this.generateRowData("bottom",t),e.calcs.bottom.updateData(i),e.calcs.bottom.reinitialize()),e.calcs.top&&(t=this.rowsToData(e.rows),i=this.generateRowData("top",t),e.calcs.top.updateData(i),e.calcs.top.reinitialize()))}generateTopRow(e){return this.generateRow("top",this.rowsToData(e))}generateBottomRow(e){return this.generateRow("bottom",this.rowsToData(e))}rowsToData(e){var t=[],i=this.table.options.dataTree&&this.table.options.dataTreeChildColumnCalcs,s=this.table.modules.dataTree;return e.forEach(n=>{var r;t.push(n.getData()),i&&((r=n.modules.dataTree)!=null&&r.open)&&this.rowsToData(s.getFilteredTreeChildren(n)).forEach(o=>{t.push(n)})}),t}generateRow(e,t){var i=this.generateRowData(e,t),s;return this.table.modExists("mutator")&&this.table.modules.mutator.disable(),s=new S(i,this,"calc"),this.table.modExists("mutator")&&this.table.modules.mutator.enable(),s.getElement().classList.add("tabulator-calcs","tabulator-calcs-"+e),s.component=!1,s.getComponent=()=>(s.component||(s.component=new _t(s)),s.component),s.generateCells=()=>{var n=[];this.table.columnManager.columnsByIndex.forEach(r=>{this.genColumn.setField(r.getField()),this.genColumn.hozAlign=r.hozAlign,r.definition[e+"CalcFormatter"]&&this.table.modExists("format")?this.genColumn.modules.format={formatter:this.table.modules.format.getFormatter(r.definition[e+"CalcFormatter"]),params:r.definition[e+"CalcFormatterParams"]||{}}:this.genColumn.modules.format={formatter:this.table.modules.format.getFormatter("plaintext"),params:{}},this.genColumn.definition.cssClass=r.definition.cssClass;var o=new ne(this.genColumn,s);o.getElement(),o.column=r,o.setWidth(),r.cells.push(o),n.push(o),r.visible||o.hide()}),s.cells=n},s}generateRowData(e,t){var i={},s=e=="top"?this.topCalcs:this.botCalcs,n=e=="top"?"topCalc":"botCalc",r,o;return s.forEach(function(a){var h=[];a.modules.columnCalcs&&a.modules.columnCalcs[n]&&(t.forEach(function(d){h.push(a.getFieldValue(d))}),o=n+"Params",r=typeof a.modules.columnCalcs[o]=="function"?a.modules.columnCalcs[o](h,t):a.modules.columnCalcs[o],a.setFieldValue(i,a.modules.columnCalcs[n](h,t,r)))}),i}hasTopCalcs(){return!!this.topCalcs.length}hasBottomCalcs(){return!!this.botCalcs.length}redraw(){this.topRow&&this.topRow.normalizeHeight(!0),this.botRow&&this.botRow.normalizeHeight(!0)}getResults(){var e={},t;return this.table.options.groupBy&&this.table.modExists("groupRows")?(t=this.table.modules.groupRows.getGroups(!0),t.forEach(i=>{e[i.getKey()]=this.getGroupResults(i)})):e={top:this.topRow?this.topRow.getData():{},bottom:this.botRow?this.botRow.getData():{}},e}getGroupResults(e){var t=e._getSelf(),i=e.getSubGroups(),s={},n={};return i.forEach(r=>{s[r.getKey()]=this.getGroupResults(r)}),n={top:t.calcs.top?t.calcs.top.getData():{},bottom:t.calcs.bottom?t.calcs.bottom.getData():{},groups:s},n}adjustForScrollbar(e){this.botRow&&(this.table.rtl?this.botElement.style.paddingLeft=e+"px":this.botElement.style.paddingRight=e+"px")}};b(B,"moduleName","columnCalcs"),b(B,"calculations",Bt);let be=B;class Ze extends w{constructor(e){super(e),this.indent=10,this.field="",this.collapseEl=null,this.expandEl=null,this.branchEl=null,this.elementField=!1,this.startOpen=function(){},this.registerTableOption("dataTree",!1),this.registerTableOption("dataTreeFilter",!0),this.registerTableOption("dataTreeSort",!0),this.registerTableOption("dataTreeElementColumn",!1),this.registerTableOption("dataTreeBranchElement",!0),this.registerTableOption("dataTreeChildIndent",9),this.registerTableOption("dataTreeChildField","_children"),this.registerTableOption("dataTreeCollapseElement",!1),this.registerTableOption("dataTreeExpandElement",!1),this.registerTableOption("dataTreeStartExpanded",!1),this.registerTableOption("dataTreeChildColumnCalcs",!1),this.registerTableOption("dataTreeSelectPropagate",!1),this.registerComponentFunction("row","treeCollapse",this.collapseRow.bind(this)),this.registerComponentFunction("row","treeExpand",this.expandRow.bind(this)),this.registerComponentFunction("row","treeToggle",this.toggleRow.bind(this)),this.registerComponentFunction("row","getTreeParent",this.getTreeParent.bind(this)),this.registerComponentFunction("row","getTreeChildren",this.getRowChildren.bind(this)),this.registerComponentFunction("row","addTreeChild",this.addTreeChildRow.bind(this)),this.registerComponentFunction("row","isTreeExpanded",this.isRowExpanded.bind(this))}initialize(){if(this.table.options.dataTree){var e=null,t=this.table.options;switch(this.field=t.dataTreeChildField,this.indent=t.dataTreeChildIndent,this.options("movableRows")&&console.warn("The movableRows option is not available with dataTree enabled, moving of child rows could result in unpredictable behavior"),t.dataTreeBranchElement?t.dataTreeBranchElement===!0?(this.branchEl=document.createElement("div"),this.branchEl.classList.add("tabulator-data-tree-branch")):typeof t.dataTreeBranchElement=="string"?(e=document.createElement("div"),e.innerHTML=t.dataTreeBranchElement,this.branchEl=e.firstChild):this.branchEl=t.dataTreeBranchElement:(this.branchEl=document.createElement("div"),this.branchEl.classList.add("tabulator-data-tree-branch-empty")),t.dataTreeCollapseElement?typeof t.dataTreeCollapseElement=="string"?(e=document.createElement("div"),e.innerHTML=t.dataTreeCollapseElement,this.collapseEl=e.firstChild):this.collapseEl=t.dataTreeCollapseElement:(this.collapseEl=document.createElement("div"),this.collapseEl.classList.add("tabulator-data-tree-control"),this.collapseEl.tabIndex=0,this.collapseEl.innerHTML="
"),t.dataTreeExpandElement?typeof t.dataTreeExpandElement=="string"?(e=document.createElement("div"),e.innerHTML=t.dataTreeExpandElement,this.expandEl=e.firstChild):this.expandEl=t.dataTreeExpandElement:(this.expandEl=document.createElement("div"),this.expandEl.classList.add("tabulator-data-tree-control"),this.expandEl.tabIndex=0,this.expandEl.innerHTML="
"),typeof t.dataTreeStartExpanded){case"boolean":this.startOpen=function(i,s){return t.dataTreeStartExpanded};break;case"function":this.startOpen=t.dataTreeStartExpanded;break;default:this.startOpen=function(i,s){return t.dataTreeStartExpanded[s]};break}this.subscribe("row-init",this.initializeRow.bind(this)),this.subscribe("row-layout-after",this.layoutRow.bind(this)),this.subscribe("row-deleted",this.rowDelete.bind(this),0),this.subscribe("row-data-changed",this.rowDataChanged.bind(this),10),this.subscribe("cell-value-updated",this.cellValueChanged.bind(this)),this.subscribe("edit-cancelled",this.cellValueChanged.bind(this)),this.subscribe("column-moving-rows",this.columnMoving.bind(this)),this.subscribe("table-built",this.initializeElementField.bind(this)),this.subscribe("table-redrawing",this.tableRedrawing.bind(this)),this.registerDisplayHandler(this.getRows.bind(this),30)}}tableRedrawing(e){var t;e&&(t=this.table.rowManager.getRows(),t.forEach(i=>{this.reinitializeRowChildren(i)}))}initializeElementField(){var e=this.table.columnManager.getFirstVisibleColumn();this.elementField=this.table.options.dataTreeElementColumn||(e?e.field:!1)}getRowChildren(e){return this.getTreeChildren(e,!0)}columnMoving(){var e=[];return this.table.rowManager.rows.forEach(t=>{e=e.concat(this.getTreeChildren(t,!1,!0))}),e}rowDataChanged(e,t,i){this.redrawNeeded(i)&&(this.initializeRow(e),t&&(this.layoutRow(e),this.refreshData(!0)))}cellValueChanged(e){var t=e.column.getField();t===this.elementField&&this.layoutRow(e.row)}initializeRow(e){var t=e.getData()[this.field],i=Array.isArray(t),s=i||!i&&typeof t=="object"&&t!==null;!s&&e.modules.dataTree&&e.modules.dataTree.branchEl&&e.modules.dataTree.branchEl.parentNode.removeChild(e.modules.dataTree.branchEl),!s&&e.modules.dataTree&&e.modules.dataTree.controlEl&&e.modules.dataTree.controlEl.parentNode.removeChild(e.modules.dataTree.controlEl),e.modules.dataTree={index:e.modules.dataTree?e.modules.dataTree.index:0,open:s?e.modules.dataTree?e.modules.dataTree.open:this.startOpen(e.getComponent(),0):!1,controlEl:e.modules.dataTree&&s?e.modules.dataTree.controlEl:!1,branchEl:e.modules.dataTree&&s?e.modules.dataTree.branchEl:!1,parent:e.modules.dataTree?e.modules.dataTree.parent:!1,children:s}}reinitializeRowChildren(e){var t=this.getTreeChildren(e,!1,!0);t.forEach(function(i){i.reinitialize(!0)})}layoutRow(e){var t=this.elementField?e.getCell(this.elementField):e.getCells()[0],i=t.getElement(),s=e.modules.dataTree;s.branchEl&&(s.branchEl.parentNode&&s.branchEl.parentNode.removeChild(s.branchEl),s.branchEl=!1),s.controlEl&&(s.controlEl.parentNode&&s.controlEl.parentNode.removeChild(s.controlEl),s.controlEl=!1),this.generateControlElement(e,i),e.getElement().classList.add("tabulator-tree-level-"+s.index),s.index&&(this.branchEl?(s.branchEl=this.branchEl.cloneNode(!0),i.insertBefore(s.branchEl,i.firstChild),this.table.rtl?s.branchEl.style.marginRight=(s.branchEl.offsetWidth+s.branchEl.style.marginLeft)*(s.index-1)+s.index*this.indent+"px":s.branchEl.style.marginLeft=(s.branchEl.offsetWidth+s.branchEl.style.marginRight)*(s.index-1)+s.index*this.indent+"px"):this.table.rtl?i.style.paddingRight=parseInt(window.getComputedStyle(i,null).getPropertyValue("padding-right"))+s.index*this.indent+"px":i.style.paddingLeft=parseInt(window.getComputedStyle(i,null).getPropertyValue("padding-left"))+s.index*this.indent+"px")}generateControlElement(e,t){var i=e.modules.dataTree,s=i.controlEl;t=t||e.getCells()[0].getElement(),i.children!==!1&&(i.open?(i.controlEl=this.collapseEl.cloneNode(!0),i.controlEl.addEventListener("click",n=>{n.stopPropagation(),this.collapseRow(e)})):(i.controlEl=this.expandEl.cloneNode(!0),i.controlEl.addEventListener("click",n=>{n.stopPropagation(),this.expandRow(e)})),i.controlEl.addEventListener("mousedown",n=>{n.stopPropagation()}),s&&s.parentNode===t?s.parentNode.replaceChild(i.controlEl,s):t.insertBefore(i.controlEl,t.firstChild))}getRows(e){var t=[];return e.forEach((i,s)=>{var n,r;t.push(i),i instanceof S&&(i.create(),n=i.modules.dataTree,!n.index&&n.children!==!1&&(r=this.getChildren(i,!1,!0),r.forEach(o=>{o.create(),t.push(o)})))}),t}getChildren(e,t,i){var s=e.modules.dataTree,n=[],r=[];return s.children!==!1&&(s.open||t)&&(Array.isArray(s.children)||(s.children=this.generateChildren(e)),this.table.modExists("filter")&&this.table.options.dataTreeFilter?n=this.table.modules.filter.filter(s.children):n=s.children,this.table.modExists("sort")&&this.table.options.dataTreeSort&&this.table.modules.sort.sort(n,i),n.forEach(o=>{r.push(o);var a=this.getChildren(o,!1,!0);a.forEach(h=>{r.push(h)})})),r}generateChildren(e){var t=[],i=e.getData()[this.field];return Array.isArray(i)||(i=[i]),i.forEach(s=>{var n=new S(s||{},this.table.rowManager);n.create(),n.modules.dataTree.index=e.modules.dataTree.index+1,n.modules.dataTree.parent=e,n.modules.dataTree.children&&(n.modules.dataTree.open=this.startOpen(n.getComponent(),n.modules.dataTree.index)),t.push(n)}),t}expandRow(e,t){var i=e.modules.dataTree;i.children!==!1&&(i.open=!0,e.reinitialize(),this.refreshData(!0),this.dispatchExternal("dataTreeRowExpanded",e.getComponent(),e.modules.dataTree.index))}collapseRow(e){var t=e.modules.dataTree;t.children!==!1&&(t.open=!1,e.reinitialize(),this.refreshData(!0),this.dispatchExternal("dataTreeRowCollapsed",e.getComponent(),e.modules.dataTree.index))}toggleRow(e){var t=e.modules.dataTree;t.children!==!1&&(t.open?this.collapseRow(e):this.expandRow(e))}isRowExpanded(e){return e.modules.dataTree.open}getTreeParent(e){return e.modules.dataTree.parent?e.modules.dataTree.parent.getComponent():!1}getTreeParentRoot(e){return e.modules.dataTree&&e.modules.dataTree.parent?this.getTreeParentRoot(e.modules.dataTree.parent):e}getFilteredTreeChildren(e){var t=e.modules.dataTree,i=[],s;return t.children&&(Array.isArray(t.children)||(t.children=this.generateChildren(e)),this.table.modExists("filter")&&this.table.options.dataTreeFilter?s=this.table.modules.filter.filter(t.children):s=t.children,s.forEach(n=>{n instanceof S&&i.push(n)})),i}rowDelete(e){var t=e.modules.dataTree.parent,i;t&&(i=this.findChildIndex(e,t),i!==!1&&t.data[this.field].splice(i,1),t.data[this.field].length||delete t.data[this.field],this.initializeRow(t),this.layoutRow(t)),this.refreshData(!0)}addTreeChildRow(e,t,i,s){var n=!1;typeof t=="string"&&(t=JSON.parse(t)),Array.isArray(e.data[this.field])||(e.data[this.field]=[],e.modules.dataTree.open=this.startOpen(e.getComponent(),e.modules.dataTree.index)),typeof s<"u"&&(n=this.findChildIndex(s,e),n!==!1&&e.data[this.field].splice(i?n:n+1,0,t)),n===!1&&(i?e.data[this.field].unshift(t):e.data[this.field].push(t)),this.initializeRow(e),this.layoutRow(e),this.refreshData(!0)}findChildIndex(e,t){var i=!1;return typeof e=="object"?e instanceof S?i=e.data:e instanceof oe?i=e._getSelf().data:typeof HTMLElement<"u"&&e instanceof HTMLElement?t.modules.dataTree&&(i=t.modules.dataTree.children.find(s=>s instanceof S?s.element===e:!1),i&&(i=i.data)):e===null&&(i=!1):typeof e>"u"?i=!1:i=t.data[this.field].find(s=>s.data[this.table.options.index]==e),i&&(Array.isArray(t.data[this.field])&&(i=t.data[this.field].indexOf(i)),i==-1&&(i=!1)),i}getTreeChildren(e,t,i){var s=e.modules.dataTree,n=[];return s&&s.children&&(Array.isArray(s.children)||(s.children=this.generateChildren(e)),s.children.forEach(r=>{r instanceof S&&(n.push(t?r.getComponent():r),i&&this.getTreeChildren(r,t,i).forEach(o=>{n.push(o)}))})),n}getChildField(){return this.field}redrawNeeded(e){return(this.field?typeof e[this.field]<"u":!1)||(this.elementField?typeof e[this.elementField]<"u":!1)}}b(Ze,"moduleName","dataTree");function Vt(l,e={},t){var i=e.delimiter?e.delimiter:",",s=[],n=[];l.forEach(r=>{var o=[];switch(r.type){case"group":console.warn("Download Warning - CSV downloader cannot process row groups");break;case"calc":console.warn("Download Warning - CSV downloader cannot process column calculations");break;case"header":r.columns.forEach((a,h)=>{a&&a.depth===1&&(n[h]=typeof a.value>"u"||a.value===null?"":'"'+String(a.value).split('"').join('""')+'"')});break;case"row":r.columns.forEach(a=>{if(a){switch(typeof a.value){case"object":a.value=a.value!==null?JSON.stringify(a.value):"";break;case"undefined":a.value="";break}o.push('"'+String(a.value).split('"').join('""')+'"')}}),s.push(o.join(i));break}}),n.length&&s.unshift(n.join(i)),s=s.join(` +`),e.bom&&(s="\uFEFF"+s),t(s,"text/csv")}function It(l,e,t){var i=[];l.forEach(s=>{var n={};switch(s.type){case"header":break;case"group":console.warn("Download Warning - JSON downloader cannot process row groups");break;case"calc":console.warn("Download Warning - JSON downloader cannot process column calculations");break;case"row":s.columns.forEach(r=>{r&&(n[r.component.getTitleDownload()||r.component.getField()]=r.value)}),i.push(n);break}}),i=JSON.stringify(i,null," "),t(i,"application/json")}function Nt(l,e={},t){var i=[],s=[],n={},r=e.rowGroupStyles||{fontStyle:"bold",fontSize:12,cellPadding:6,fillColor:220},o=e.rowCalcStyles||{fontStyle:"bold",fontSize:10,cellPadding:4,fillColor:232},a=e.jsPDF||{},h=e.title?e.title:"";a.orientation||(a.orientation=e.orientation||"landscape"),a.unit||(a.unit="pt"),l.forEach(c=>{switch(c.type){case"header":i.push(d(c));break;case"group":s.push(d(c,r));break;case"calc":s.push(d(c,o));break;case"row":s.push(d(c));break}});function d(c,f){var g=[];return c.columns.forEach(p=>{var v;if(p){switch(typeof p.value){case"object":p.value=p.value!==null?JSON.stringify(p.value):"";break;case"undefined":p.value="";break}v={content:p.value,colSpan:p.width,rowSpan:p.height},f&&(v.styles=f),g.push(v)}}),g}var u=new jspdf.jsPDF(a);e.autoTable&&(typeof e.autoTable=="function"?n=e.autoTable(u)||{}:n=e.autoTable),h&&(n.didDrawPage=function(c){u.text(h,40,30)}),n.head=i,n.body=s,u.autoTable(n),e.documentProcessing&&e.documentProcessing(u),t(u.output("arraybuffer"),"application/pdf")}function Wt(l,e,t){var i=this,s=e.sheetName||"Sheet1",n=XLSX.utils.book_new(),r=new M(this),o="compress"in e?e.compress:!0,a=e.writeOptions||{bookType:"xlsx",bookSST:!0,compression:o},h;a.type="binary",n.SheetNames=[],n.Sheets={};function d(){var f=[],g=[],p={},v={s:{c:0,r:0},e:{c:l[0]?l[0].columns.reduce((m,C)=>m+(C&&C.width?C.width:1),0):0,r:l.length}};return l.forEach((m,C)=>{var T=[];m.columns.forEach(function(y,k){y?(T.push(!(y.value instanceof Date)&&typeof y.value=="object"?JSON.stringify(y.value):y.value),(y.width>1||y.height>-1)&&(y.height>1||y.width>1)&&g.push({s:{r:C,c:k},e:{r:C+y.height-1,c:k+y.width-1}})):T.push("")}),f.push(T)}),XLSX.utils.sheet_add_aoa(p,f),p["!ref"]=XLSX.utils.encode_range(v),g.length&&(p["!merges"]=g),p}if(e.sheetOnly){t(d());return}if(e.sheets)for(var u in e.sheets)e.sheets[u]===!0?(n.SheetNames.push(u),n.Sheets[u]=d()):(n.SheetNames.push(u),r.commsSend(e.sheets[u],"download","intercept",{type:"xlsx",options:{sheetOnly:!0},active:i.active,intercept:function(f){n.Sheets[u]=f}}));else n.SheetNames.push(s),n.Sheets[s]=d();e.documentProcessing&&(n=e.documentProcessing(n));function c(f){for(var g=new ArrayBuffer(f.length),p=new Uint8Array(g),v=0;v!=f.length;++v)p[v]=f.charCodeAt(v)&255;return g}h=XLSX.write(n,a),t(c(h),"application/octet-stream")}function Gt(l,e,t){this.modExists("export",!0)&&t(this.modules.export.generateHTMLTable(l),"text/html")}function jt(l,e,t){const i=[];l.forEach(s=>{const n={};switch(s.type){case"header":break;case"group":console.warn("Download Warning - JSON downloader cannot process row groups");break;case"calc":console.warn("Download Warning - JSON downloader cannot process column calculations");break;case"row":s.columns.forEach(r=>{r&&(n[r.component.getTitleDownload()||r.component.getField()]=r.value)}),i.push(JSON.stringify(n));break}}),t(i.join(` +`),"application/x-ndjson")}var Ut={csv:Vt,json:It,jsonLines:jt,pdf:Nt,xlsx:Wt,html:Gt};const q=class q extends w{constructor(e){super(e),this.registerTableOption("downloadEncoder",function(t,i){return new Blob([t],{type:i})}),this.registerTableOption("downloadConfig",{}),this.registerTableOption("downloadRowRange","active"),this.registerColumnOption("download"),this.registerColumnOption("titleDownload")}initialize(){this.deprecatedOptionsCheck(),this.registerTableFunction("download",this.download.bind(this)),this.registerTableFunction("downloadToTab",this.downloadToTab.bind(this))}deprecatedOptionsCheck(){}downloadToTab(e,t,i,s){this.download(e,t,i,s,!0)}download(e,t,i,s,n){var r=!1;function o(h,d){n?n===!0?this.triggerDownload(h,d,e,t,!0):n(h):this.triggerDownload(h,d,e,t)}if(typeof e=="function"?r=e:q.downloaders[e]?r=q.downloaders[e]:console.warn("Download Error - No such download type found: ",e),r){var a=this.generateExportList(s);r.call(this.table,a,i||{},o.bind(this))}}generateExportList(e){var t=this.table.modules.export.generateExportList(this.table.options.downloadConfig,!1,e||this.table.options.downloadRowRange,"download"),i=this.table.options.groupHeaderDownload;return i&&!Array.isArray(i)&&(i=[i]),t.forEach(s=>{var n;s.type==="group"&&(n=s.columns[0],i&&i[s.indent]&&(n.value=i[s.indent](n.value,s.component._group.getRowCount(),s.component._group.getData(),s.component)))}),t}triggerDownload(e,t,i,s,n){var r=document.createElement("a"),o=this.table.options.downloadEncoder(e,t);o&&(n?window.open(window.URL.createObjectURL(o)):(s=s||"Tabulator."+(typeof i=="function"?"txt":i),navigator.msSaveOrOpenBlob?navigator.msSaveOrOpenBlob(o,s):(r.setAttribute("href",window.URL.createObjectURL(o)),r.setAttribute("download",s),r.style.display="none",document.body.appendChild(r),r.click(),document.body.removeChild(r))),this.dispatchExternal("downloadComplete"))}commsReceived(e,t,i){switch(t){case"intercept":this.download(i.type,"",i.options,i.active,i.intercept);break}}};b(q,"moduleName","download"),b(q,"downloaders",Ut);let ve=q;function ae(l,e){var t=e.mask,i=typeof e.maskLetterChar<"u"?e.maskLetterChar:"A",s=typeof e.maskNumberChar<"u"?e.maskNumberChar:"9",n=typeof e.maskWildcardChar<"u"?e.maskWildcardChar:"*";function r(o){var a=t[o];typeof a<"u"&&a!==n&&a!==i&&a!==s&&(l.value=l.value+""+a,r(o+1))}l.addEventListener("keydown",o=>{var a=l.value.length,h=o.key;if(o.keyCode>46&&!o.ctrlKey&&!o.metaKey){if(a>=t.length)return o.preventDefault(),o.stopPropagation(),!1;switch(t[a]){case i:if(h.toUpperCase()==h.toLowerCase())return o.preventDefault(),o.stopPropagation(),!1;break;case s:if(isNaN(h))return o.preventDefault(),o.stopPropagation(),!1;break;case n:break;default:if(h!==t[a])return o.preventDefault(),o.stopPropagation(),!1}}}),l.addEventListener("keyup",o=>{o.keyCode>46&&e.maskAutoFill&&r(l.value.length)}),l.placeholder||(l.placeholder=t),e.maskAutoFill&&r(l.value.length)}function Xt(l,e,t,i,s){var n=l.getValue(),r=document.createElement("input");if(r.setAttribute("type",s.search?"search":"text"),r.style.padding="4px",r.style.width="100%",r.style.boxSizing="border-box",s.elementAttributes&&typeof s.elementAttributes=="object")for(let a in s.elementAttributes)a.charAt(0)=="+"?(a=a.slice(1),r.setAttribute(a,r.getAttribute(a)+s.elementAttributes["+"+a])):r.setAttribute(a,s.elementAttributes[a]);r.value=typeof n<"u"?n:"",e(function(){l.getType()==="cell"&&(r.focus({preventScroll:!0}),r.style.height="100%",s.selectContents&&r.select())});function o(a){(n===null||typeof n>"u")&&r.value!==""||r.value!==n?t(r.value)&&(n=r.value):i()}return r.addEventListener("change",o),r.addEventListener("blur",o),r.addEventListener("keydown",function(a){switch(a.keyCode){case 13:o();break;case 27:i();break;case 35:case 36:a.stopPropagation();break}}),s.mask&&ae(r,s),r}function Jt(l,e,t,i,s){var n=l.getValue(),r=s.verticalNavigation||"hybrid",o=String(n!==null&&typeof n<"u"?n:""),a=document.createElement("textarea"),h=0;if(a.style.display="block",a.style.padding="2px",a.style.height="100%",a.style.width="100%",a.style.boxSizing="border-box",a.style.whiteSpace="pre-wrap",a.style.resize="none",s.elementAttributes&&typeof s.elementAttributes=="object")for(let u in s.elementAttributes)u.charAt(0)=="+"?(u=u.slice(1),a.setAttribute(u,a.getAttribute(u)+s.elementAttributes["+"+u])):a.setAttribute(u,s.elementAttributes[u]);a.value=o,e(function(){l.getType()==="cell"&&(a.focus({preventScroll:!0}),a.style.height="100%",a.scrollHeight,a.style.height=a.scrollHeight+"px",l.getRow().normalizeHeight(),s.selectContents&&a.select())});function d(u){(n===null||typeof n>"u")&&a.value!==""||a.value!==n?(t(a.value)&&(n=a.value),setTimeout(function(){l.getRow().normalizeHeight()},300)):i()}return a.addEventListener("change",d),a.addEventListener("blur",d),a.addEventListener("keyup",function(){a.style.height="";var u=a.scrollHeight;a.style.height=u+"px",u!=h&&(h=u,l.getRow().normalizeHeight())}),a.addEventListener("keydown",function(u){switch(u.keyCode){case 13:u.shiftKey&&s.shiftEnterSubmit&&d();break;case 27:i();break;case 38:(r=="editor"||r=="hybrid"&&a.selectionStart)&&(u.stopImmediatePropagation(),u.stopPropagation());break;case 40:(r=="editor"||r=="hybrid"&&a.selectionStart!==a.value.length)&&(u.stopImmediatePropagation(),u.stopPropagation());break;case 35:case 36:u.stopPropagation();break}}),s.mask&&ae(a,s),a}function Kt(l,e,t,i,s){var n=l.getValue(),r=s.verticalNavigation||"editor",o=document.createElement("input");if(o.setAttribute("type","number"),typeof s.max<"u"&&o.setAttribute("max",s.max),typeof s.min<"u"&&o.setAttribute("min",s.min),typeof s.step<"u"&&o.setAttribute("step",s.step),o.style.padding="4px",o.style.width="100%",o.style.boxSizing="border-box",s.elementAttributes&&typeof s.elementAttributes=="object")for(let d in s.elementAttributes)d.charAt(0)=="+"?(d=d.slice(1),o.setAttribute(d,o.getAttribute(d)+s.elementAttributes["+"+d])):o.setAttribute(d,s.elementAttributes[d]);o.value=n;var a=function(d){h()};e(function(){l.getType()==="cell"&&(o.removeEventListener("blur",a),o.focus({preventScroll:!0}),o.style.height="100%",o.addEventListener("blur",a),s.selectContents&&o.select())});function h(){var d=o.value;!isNaN(d)&&d!==""&&(d=Number(d)),d!==n?t(d)&&(n=d):i()}return o.addEventListener("keydown",function(d){switch(d.keyCode){case 13:h();break;case 27:i();break;case 38:case 40:r=="editor"&&(d.stopImmediatePropagation(),d.stopPropagation());break;case 35:case 36:d.stopPropagation();break}}),s.mask&&ae(o,s),o}function qt(l,e,t,i,s){var n=l.getValue(),r=document.createElement("input");if(r.setAttribute("type","range"),typeof s.max<"u"&&r.setAttribute("max",s.max),typeof s.min<"u"&&r.setAttribute("min",s.min),typeof s.step<"u"&&r.setAttribute("step",s.step),r.style.padding="4px",r.style.width="100%",r.style.boxSizing="border-box",s.elementAttributes&&typeof s.elementAttributes=="object")for(let a in s.elementAttributes)a.charAt(0)=="+"?(a=a.slice(1),r.setAttribute(a,r.getAttribute(a)+s.elementAttributes["+"+a])):r.setAttribute(a,s.elementAttributes[a]);r.value=n,e(function(){l.getType()==="cell"&&(r.focus({preventScroll:!0}),r.style.height="100%")});function o(){var a=r.value;!isNaN(a)&&a!==""&&(a=Number(a)),a!=n?t(a)&&(n=a):i()}return r.addEventListener("blur",function(a){o()}),r.addEventListener("keydown",function(a){switch(a.keyCode){case 13:o();break;case 27:i();break}}),r}function Yt(l,e,t,i,s){var n=s.format,r=s.verticalNavigation||"editor",o=n?window.DateTime||luxon.DateTime:null,a=l.getValue(),h=document.createElement("input");function d(c){var f;return o.isDateTime(c)?f=c:n==="iso"?f=o.fromISO(String(c)):f=o.fromFormat(String(c),n),f.toFormat("yyyy-MM-dd")}if(h.type="date",h.style.padding="4px",h.style.width="100%",h.style.boxSizing="border-box",s.max&&h.setAttribute("max",n?d(s.max):s.max),s.min&&h.setAttribute("min",n?d(s.min):s.min),s.elementAttributes&&typeof s.elementAttributes=="object")for(let c in s.elementAttributes)c.charAt(0)=="+"?(c=c.slice(1),h.setAttribute(c,h.getAttribute(c)+s.elementAttributes["+"+c])):h.setAttribute(c,s.elementAttributes[c]);a=typeof a<"u"?a:"",n&&(o?a=d(a):console.error("Editor Error - 'date' editor 'format' param is dependant on luxon.js")),h.value=a,e(function(){l.getType()==="cell"&&(h.focus({preventScroll:!0}),h.style.height="100%",s.selectContents&&h.select())});function u(){var c=h.value,f;if((a===null||typeof a>"u")&&c!==""||c!==a){if(c&&n)switch(f=o.fromFormat(String(c),"yyyy-MM-dd"),n){case!0:c=f;break;case"iso":c=f.toISO();break;default:c=f.toFormat(n)}t(c)&&(a=h.value)}else i()}return h.addEventListener("blur",function(c){(c.relatedTarget||c.rangeParent||c.explicitOriginalTarget!==h)&&u()}),h.addEventListener("keydown",function(c){switch(c.keyCode){case 13:u();break;case 27:i();break;case 35:case 36:c.stopPropagation();break;case 38:case 40:r=="editor"&&(c.stopImmediatePropagation(),c.stopPropagation());break}}),h}function $t(l,e,t,i,s){var n=s.format,r=s.verticalNavigation||"editor",o=n?window.DateTime||luxon.DateTime:null,a,h=l.getValue(),d=document.createElement("input");if(d.type="time",d.style.padding="4px",d.style.width="100%",d.style.boxSizing="border-box",s.elementAttributes&&typeof s.elementAttributes=="object")for(let c in s.elementAttributes)c.charAt(0)=="+"?(c=c.slice(1),d.setAttribute(c,d.getAttribute(c)+s.elementAttributes["+"+c])):d.setAttribute(c,s.elementAttributes[c]);h=typeof h<"u"?h:"",n&&(o?(o.isDateTime(h)?a=h:n==="iso"?a=o.fromISO(String(h)):a=o.fromFormat(String(h),n),h=a.toFormat("HH:mm")):console.error("Editor Error - 'date' editor 'format' param is dependant on luxon.js")),d.value=h,e(function(){l.getType()=="cell"&&(d.focus({preventScroll:!0}),d.style.height="100%",s.selectContents&&d.select())});function u(){var c=d.value,f;if((h===null||typeof h>"u")&&c!==""||c!==h){if(c&&n)switch(f=o.fromFormat(String(c),"hh:mm"),n){case!0:c=f;break;case"iso":c=f.toISO();break;default:c=f.toFormat(n)}t(c)&&(h=d.value)}else i()}return d.addEventListener("blur",function(c){(c.relatedTarget||c.rangeParent||c.explicitOriginalTarget!==d)&&u()}),d.addEventListener("keydown",function(c){switch(c.keyCode){case 13:u();break;case 27:i();break;case 35:case 36:c.stopPropagation();break;case 38:case 40:r=="editor"&&(c.stopImmediatePropagation(),c.stopPropagation());break}}),d}function Qt(l,e,t,i,s){var n=s.format,r=s.verticalNavigation||"editor",o=n?window.DateTime||luxon.DateTime:null,a,h=l.getValue(),d=document.createElement("input");if(d.type="datetime-local",d.style.padding="4px",d.style.width="100%",d.style.boxSizing="border-box",s.elementAttributes&&typeof s.elementAttributes=="object")for(let c in s.elementAttributes)c.charAt(0)=="+"?(c=c.slice(1),d.setAttribute(c,d.getAttribute(c)+s.elementAttributes["+"+c])):d.setAttribute(c,s.elementAttributes[c]);h=typeof h<"u"?h:"",n&&(o?(o.isDateTime(h)?a=h:n==="iso"?a=o.fromISO(String(h)):a=o.fromFormat(String(h),n),h=a.toFormat("yyyy-MM-dd")+"T"+a.toFormat("HH:mm")):console.error("Editor Error - 'date' editor 'format' param is dependant on luxon.js")),d.value=h,e(function(){l.getType()==="cell"&&(d.focus({preventScroll:!0}),d.style.height="100%",s.selectContents&&d.select())});function u(){var c=d.value,f;if((h===null||typeof h>"u")&&c!==""||c!==h){if(c&&n)switch(f=o.fromISO(String(c)),n){case!0:c=f;break;case"iso":c=f.toISO();break;default:c=f.toFormat(n)}t(c)&&(h=d.value)}else i()}return d.addEventListener("blur",function(c){(c.relatedTarget||c.rangeParent||c.explicitOriginalTarget!==d)&&u()}),d.addEventListener("keydown",function(c){switch(c.keyCode){case 13:u();break;case 27:i();break;case 35:case 36:c.stopPropagation();break;case 38:case 40:r=="editor"&&(c.stopImmediatePropagation(),c.stopPropagation());break}}),d}let Zt=class{constructor(e,t,i,s,n,r){this.edit=e,this.table=e.table,this.cell=t,this.params=this._initializeParams(r),this.data=[],this.displayItems=[],this.currentItems=[],this.focusedItem=null,this.input=this._createInputElement(),this.listEl=this._createListElement(),this.initialValues=null,this.isFilter=t.getType()==="header",this.filterTimeout=null,this.filtered=!1,this.typing=!1,this.values=[],this.popup=null,this.listIteration=0,this.lastAction="",this.filterTerm="",this.blurable=!0,this.actions={success:s,cancel:n},this._deprecatedOptionsCheck(),this._initializeValue(),i(this._onRendered.bind(this))}_deprecatedOptionsCheck(){}_initializeValue(){var e=this.cell.getValue();typeof e>"u"&&typeof this.params.defaultValue<"u"&&(e=this.params.defaultValue),this.initialValues=this.params.multiselect?e:[e],this.isFilter&&(this.input.value=this.initialValues?this.initialValues.join(","):"",this.headerFilterInitialListGen())}_onRendered(){var e=this.cell.getElement();function t(i){i.stopPropagation()}this.isFilter||(this.input.style.height="100%",this.input.focus({preventScroll:!0})),e.addEventListener("click",t),setTimeout(()=>{e.removeEventListener("click",t)},1e3),this.input.addEventListener("mousedown",this._preventPopupBlur.bind(this))}_createListElement(){var e=document.createElement("div");return e.classList.add("tabulator-edit-list"),e.addEventListener("mousedown",this._preventBlur.bind(this)),e.addEventListener("keydown",this._inputKeyDown.bind(this)),e}_setListWidth(){var e=this.isFilter?this.input:this.cell.getElement();this.listEl.style.minWidth=e.offsetWidth+"px",this.params.maxWidth&&(this.params.maxWidth===!0?this.listEl.style.maxWidth=e.offsetWidth+"px":typeof this.params.maxWidth=="number"?this.listEl.style.maxWidth=this.params.maxWidth+"px":this.listEl.style.maxWidth=this.params.maxWidth)}_createInputElement(){var e=this.params.elementAttributes,t=document.createElement("input");if(t.setAttribute("type",this.params.clearable?"search":"text"),t.style.padding="4px",t.style.width="100%",t.style.boxSizing="border-box",this.params.autocomplete||(t.style.cursor="default",t.style.caretColor="transparent"),e&&typeof e=="object")for(let i in e)i.charAt(0)=="+"?(i=i.slice(1),t.setAttribute(i,t.getAttribute(i)+e["+"+i])):t.setAttribute(i,e[i]);return this.params.mask&&ae(t,this.params),this._bindInputEvents(t),t}_initializeParams(e){var t=["values","valuesURL","valuesLookup"],i;return e=Object.assign({},e),e.verticalNavigation=e.verticalNavigation||"editor",e.placeholderLoading=typeof e.placeholderLoading>"u"?"Searching ...":e.placeholderLoading,e.placeholderEmpty=typeof e.placeholderEmpty>"u"?"No Results Found":e.placeholderEmpty,e.filterDelay=typeof e.filterDelay>"u"?300:e.filterDelay,e.emptyValue=Object.keys(e).includes("emptyValue")?e.emptyValue:"",i=Object.keys(e).filter(s=>t.includes(s)).length,i?i>1&&console.warn("list editor config error - only one of the values, valuesURL, or valuesLookup options can be set on the same editor"):console.warn("list editor config error - either the values, valuesURL, or valuesLookup option must be set"),e.autocomplete?e.multiselect&&(e.multiselect=!1,console.warn("list editor config error - multiselect option is not available when autocomplete is enabled")):(e.freetext&&(e.freetext=!1,console.warn("list editor config error - freetext option is only available when autocomplete is enabled")),e.filterFunc&&(e.filterFunc=!1,console.warn("list editor config error - filterFunc option is only available when autocomplete is enabled")),e.filterRemote&&(e.filterRemote=!1,console.warn("list editor config error - filterRemote option is only available when autocomplete is enabled")),e.mask&&(e.mask=!1,console.warn("list editor config error - mask option is only available when autocomplete is enabled")),e.allowEmpty&&(e.allowEmpty=!1,console.warn("list editor config error - allowEmpty option is only available when autocomplete is enabled")),e.listOnEmpty&&(e.listOnEmpty=!1,console.warn("list editor config error - listOnEmpty option is only available when autocomplete is enabled"))),e.filterRemote&&!(typeof e.valuesLookup=="function"||e.valuesURL)&&(e.filterRemote=!1,console.warn("list editor config error - filterRemote option should only be used when values list is populated from a remote source")),e}_bindInputEvents(e){e.addEventListener("focus",this._inputFocus.bind(this)),e.addEventListener("click",this._inputClick.bind(this)),e.addEventListener("blur",this._inputBlur.bind(this)),e.addEventListener("keydown",this._inputKeyDown.bind(this)),e.addEventListener("search",this._inputSearch.bind(this)),this.params.autocomplete&&e.addEventListener("keyup",this._inputKeyUp.bind(this))}_inputFocus(e){this.rebuildOptionsList()}_filter(){this.params.filterRemote?(clearTimeout(this.filterTimeout),this.filterTimeout=setTimeout(()=>{this.rebuildOptionsList()},this.params.filterDelay)):this._filterList()}_inputClick(e){e.stopPropagation()}_inputBlur(e){this.blurable&&(this.popup?this.popup.hide():this._resolveValue(!0))}_inputSearch(){this._clearChoices()}_inputKeyDown(e){switch(e.keyCode){case 38:this._keyUp(e);break;case 40:this._keyDown(e);break;case 37:case 39:this._keySide(e);break;case 13:this._keyEnter();break;case 27:this._keyEsc();break;case 36:case 35:this._keyHomeEnd(e);break;case 9:this._keyTab(e);break;default:this._keySelectLetter(e)}}_inputKeyUp(e){switch(e.keyCode){case 38:case 37:case 39:case 40:case 13:case 27:break;default:this._keyAutoCompLetter(e)}}_preventPopupBlur(){this.popup&&this.popup.blockHide(),setTimeout(()=>{this.popup&&this.popup.restoreHide()},10)}_preventBlur(){this.blurable=!1,setTimeout(()=>{this.blurable=!0},10)}_keyTab(e){this.params.autocomplete&&this.lastAction==="typing"?this._resolveValue(!0):this.focusedItem&&this._chooseItem(this.focusedItem,!0)}_keyUp(e){var t=this.displayItems.indexOf(this.focusedItem);(this.params.verticalNavigation=="editor"||this.params.verticalNavigation=="hybrid"&&t)&&(e.stopImmediatePropagation(),e.stopPropagation(),e.preventDefault(),t>0&&this._focusItem(this.displayItems[t-1]))}_keyDown(e){var t=this.displayItems.indexOf(this.focusedItem);(this.params.verticalNavigation=="editor"||this.params.verticalNavigation=="hybrid"&&t=38&&e.keyCode<=90&&this._scrollToValue(e.keyCode))}_keyAutoCompLetter(e){this._filter(),this.lastAction="typing",this.typing=!0}_scrollToValue(e){clearTimeout(this.filterTimeout);var t=String.fromCharCode(e).toLowerCase();this.filterTerm+=t.toLowerCase();var i=this.displayItems.find(s=>typeof s.label<"u"&&s.label.toLowerCase().startsWith(this.filterTerm));i&&this._focusItem(i),this.filterTimeout=setTimeout(()=>{this.filterTerm=""},800)}_focusItem(e){this.lastAction="focus",this.focusedItem&&this.focusedItem.element&&this.focusedItem.element.classList.remove("focused"),this.focusedItem=e,e&&e.element&&(e.element.classList.add("focused"),e.element.scrollIntoView({behavior:"smooth",block:"nearest",inline:"start"}))}headerFilterInitialListGen(){this._generateOptions(!0)}rebuildOptionsList(){this._generateOptions().then(this._sortOptions.bind(this)).then(this._buildList.bind(this)).then(this._showList.bind(this)).catch(e=>{Number.isInteger(e)||console.error("List generation error",e)})}_filterList(){this._buildList(this._filterOptions()),this._showList()}_generateOptions(e){var t=[],i=++this.listIteration;return this.filtered=!1,this.params.values?t=this.params.values:this.params.valuesURL?t=this._ajaxRequest(this.params.valuesURL,this.input.value):typeof this.params.valuesLookup=="function"?t=this.params.valuesLookup(this.cell,this.input.value):this.params.valuesLookup&&(t=this._uniqueColumnValues(this.params.valuesLookupField)),t instanceof Promise?(e||this._addPlaceholder(this.params.placeholderLoading),t.then().then(s=>this.listIteration===i?this._parseList(s):Promise.reject(i))):Promise.resolve(this._parseList(t))}_addPlaceholder(e){var t=document.createElement("div");typeof e=="function"&&(e=e(this.cell.getComponent(),this.listEl)),e&&(this._clearList(),e instanceof HTMLElement?t=e:(t.classList.add("tabulator-edit-list-placeholder"),t.innerHTML=e),this.listEl.appendChild(t),this._showList())}_ajaxRequest(e,t){var i=this.params.filterRemote?{term:t}:{};return e=qe(e,{},i),fetch(e).then(s=>s.ok?s.json().catch(n=>(console.warn("List Ajax Load Error - Invalid JSON returned",n),Promise.reject(n))):(console.error("List Ajax Load Error - Connection Error: "+s.status,s.statusText),Promise.reject(s))).catch(s=>(console.error("List Ajax Load Error - Connection Error: ",s),Promise.reject(s)))}_uniqueColumnValues(e){var t={},i=this.table.getData(this.params.valuesLookup),s;return e?s=this.table.columnManager.getColumnByField(e):s=this.cell.getColumn()._getSelf(),s?i.forEach(n=>{var r=s.getFieldValue(n);r!==null&&typeof r<"u"&&r!==""&&(t[r]=!0)}):(console.warn("unable to find matching column to create select lookup list:",e),t=[]),Object.keys(t)}_parseList(e){var t=[];return Array.isArray(e)||(e=Object.entries(e).map(([i,s])=>({label:s,value:i}))),e.forEach(i=>{typeof i!="object"&&(i={label:i,value:i}),this._parseListItem(i,t,0)}),!this.currentItems.length&&this.params.freetext&&(this.input.value=this.initialValues,this.typing=!0,this.lastAction="typing"),this.data=t,t}_parseListItem(e,t,i){var s={};e.options?s=this._parseListGroup(e,i+1):(s={label:e.label,value:e.value,itemParams:e.itemParams,elementAttributes:e.elementAttributes,element:!1,selected:!1,visible:!0,level:i,original:e},this.initialValues&&this.initialValues.indexOf(e.value)>-1&&this._chooseItem(s,!0)),t.push(s)}_parseListGroup(e,t){var i={label:e.label,group:!0,itemParams:e.itemParams,elementAttributes:e.elementAttributes,element:!1,visible:!0,level:t,options:[],original:e};return e.options.forEach(s=>{this._parseListItem(s,i.options,t)}),i}_sortOptions(e){var t;return this.params.sort&&(t=typeof this.params.sort=="function"?this.params.sort:this._defaultSortFunction.bind(this),this._sortGroup(t,e)),e}_sortGroup(e,t){t.sort((i,s)=>e(i.label,s.label,i.value,s.value,i.original,s.original)),t.forEach(i=>{i.group&&this._sortGroup(e,i.options)})}_defaultSortFunction(e,t){var i,s,n,r,o=0,a,h=/(\d+)|(\D+)/g,d=/\d/,u=0;if(this.params.sort==="desc"&&([e,t]=[t,e]),!e&&e!==0)u=!t&&t!==0?0:-1;else if(!t&&t!==0)u=1;else{if(isFinite(e)&&isFinite(t))return e-t;if(i=String(e).toLowerCase(),s=String(t).toLowerCase(),i===s)return 0;if(!(d.test(i)&&d.test(s)))return i>s?1:-1;for(i=i.match(h),s=s.match(h),a=i.length>s.length?s.length:i.length;or?1:-1;return i.length>s.length}return u}_filterOptions(){var e=this.params.filterFunc||this._defaultFilterFunc,t=this.input.value;return t?(this.filtered=!0,this.data.forEach(i=>{this._filterItem(e,t,i)})):this.filtered=!1,this.data}_filterItem(e,t,i){var s=!1;return i.group?(i.options.forEach(n=>{this._filterItem(e,t,n)&&(s=!0)}),i.visible=s):i.visible=e(t,i.label,i.value,i.original),i.visible}_defaultFilterFunc(e,t,i,s){return e=String(e).toLowerCase(),t!==null&&typeof t<"u"&&(String(t).toLowerCase().indexOf(e)>-1||String(i).toLowerCase().indexOf(e)>-1)}_clearList(){for(;this.listEl.firstChild;)this.listEl.removeChild(this.listEl.firstChild);this.displayItems=[]}_buildList(e){this._clearList(),e.forEach(t=>{this._buildItem(t)}),this.displayItems.length||this._addPlaceholder(this.params.placeholderEmpty)}_buildItem(e){var t=e.element,i;if(!this.filtered||e.visible){if(!t){if(t=document.createElement("div"),t.tabIndex=0,i=this.params.itemFormatter?this.params.itemFormatter(e.label,e.value,e.original,t):e.label,i instanceof HTMLElement?t.appendChild(i):t.innerHTML=i,e.group?t.classList.add("tabulator-edit-list-group"):t.classList.add("tabulator-edit-list-item"),t.classList.add("tabulator-edit-list-group-level-"+e.level),e.elementAttributes&&typeof e.elementAttributes=="object")for(let s in e.elementAttributes)s.charAt(0)=="+"?(s=s.slice(1),t.setAttribute(s,this.input.getAttribute(s)+e.elementAttributes["+"+s])):t.setAttribute(s,e.elementAttributes[s]);e.group?t.addEventListener("click",this._groupClick.bind(this,e)):t.addEventListener("click",this._itemClick.bind(this,e)),t.addEventListener("mousedown",this._preventBlur.bind(this)),e.element=t}this._styleItem(e),this.listEl.appendChild(t),e.group?e.options.forEach(s=>{this._buildItem(s)}):this.displayItems.push(e)}}_showList(){var e=this.popup&&this.popup.isVisible();if(this.input.parentNode){if(this.params.autocomplete&&this.input.value===""&&!this.params.listOnEmpty){this.popup&&this.popup.hide(!0);return}this._setListWidth(),this.popup||(this.popup=this.edit.popup(this.listEl)),this.popup.show(this.cell.getElement(),"bottom"),e||setTimeout(()=>{this.popup.hideOnBlur(this._resolveValue.bind(this,!0))},10)}}_styleItem(e){e&&e.element&&(e.selected?e.element.classList.add("active"):e.element.classList.remove("active"))}_itemClick(e,t){t.stopPropagation(),this._chooseItem(e)}_groupClick(e,t){t.stopPropagation()}_cancel(){this.popup.hide(!0),this.actions.cancel()}_clearChoices(){this.typing=!0,this.currentItems.forEach(e=>{e.selected=!1,this._styleItem(e)}),this.currentItems=[],this.focusedItem=null}_chooseItem(e,t){var i;this.typing=!1,this.params.multiselect?(i=this.currentItems.indexOf(e),i>-1?(this.currentItems.splice(i,1),e.selected=!1):(this.currentItems.push(e),e.selected=!0),this.input.value=this.currentItems.map(s=>s.label).join(","),this._styleItem(e)):(this.currentItems=[e],e.selected=!0,this.input.value=e.label,this._styleItem(e),t||this._resolveValue()),this._focusItem(e)}_resolveValue(e){var t,i;if(this.popup&&this.popup.hide(!0),this.params.multiselect)t=this.currentItems.map(s=>s.value);else if(e&&this.params.autocomplete&&this.typing)if(this.params.freetext||this.params.allowEmpty&&this.input.value==="")t=this.input.value;else{this.actions.cancel();return}else this.currentItems[0]?t=this.currentItems[0].value:(i=Array.isArray(this.initialValues)?this.initialValues[0]:this.initialValues,i===null||typeof i>"u"||i===""?t=i:t=this.params.emptyValue);t===""&&(t=this.params.emptyValue),this.actions.success(t),this.isFilter&&(this.initialValues=t&&!Array.isArray(t)?[t]:t,this.currentItems=[])}};function ei(l,e,t,i,s){var n=new Zt(this,l,e,t,i,s);return n.input}function ti(l,e,t,i,s){var n=this,r=l.getElement(),o=l.getValue(),a=r.getElementsByTagName("svg").length||5,h=r.getElementsByTagName("svg")[0]?r.getElementsByTagName("svg")[0].getAttribute("width"):14,d=[],u=document.createElement("div"),c=document.createElementNS("http://www.w3.org/2000/svg","svg");function f(m){d.forEach(function(C,T){T'):(n.table.browser=="ie"?C.setAttribute("class","tabulator-star-inactive"):C.classList.replace("tabulator-star-active","tabulator-star-inactive"),C.innerHTML='')})}function g(m){var C=document.createElement("span"),T=c.cloneNode(!0);d.push(T),C.addEventListener("mouseenter",function(y){y.stopPropagation(),y.stopImmediatePropagation(),f(m)}),C.addEventListener("mousemove",function(y){y.stopPropagation(),y.stopImmediatePropagation()}),C.addEventListener("click",function(y){y.stopPropagation(),y.stopImmediatePropagation(),t(m),r.blur()}),C.appendChild(T),u.appendChild(C)}function p(m){o=m,f(m)}if(r.style.whiteSpace="nowrap",r.style.overflow="hidden",r.style.textOverflow="ellipsis",u.style.verticalAlign="middle",u.style.display="inline-block",u.style.padding="4px",c.setAttribute("width",h),c.setAttribute("height",h),c.setAttribute("viewBox","0 0 512 512"),c.setAttribute("xml:space","preserve"),c.style.padding="0 1px",s.elementAttributes&&typeof s.elementAttributes=="object")for(let m in s.elementAttributes)m.charAt(0)=="+"?(m=m.slice(1),u.setAttribute(m,u.getAttribute(m)+s.elementAttributes["+"+m])):u.setAttribute(m,s.elementAttributes[m]);for(var v=1;v<=a;v++)g(v);return o=Math.min(parseInt(o),a),f(o),u.addEventListener("mousemove",function(m){f(0)}),u.addEventListener("click",function(m){t(0)}),r.addEventListener("blur",function(m){i()}),r.addEventListener("keydown",function(m){switch(m.keyCode){case 39:p(o+1);break;case 37:p(o-1);break;case 13:t(o);break;case 27:i();break}}),u}function ii(l,e,t,i,s){var n=l.getElement(),r=typeof s.max>"u"?n.getElementsByTagName("div")[0]&&n.getElementsByTagName("div")[0].getAttribute("max")||100:s.max,o=typeof s.min>"u"?n.getElementsByTagName("div")[0]&&n.getElementsByTagName("div")[0].getAttribute("min")||0:s.min,a=(r-o)/100,h=l.getValue()||0,d=document.createElement("div"),u=document.createElement("div"),c,f;function g(){var p=window.getComputedStyle(n,null),v=a*Math.round(u.offsetWidth/((n.clientWidth-parseInt(p.getPropertyValue("padding-left"))-parseInt(p.getPropertyValue("padding-right")))/100))+o;t(v),n.setAttribute("aria-valuenow",v),n.setAttribute("aria-label",h)}if(d.style.position="absolute",d.style.right="0",d.style.top="0",d.style.bottom="0",d.style.width="5px",d.classList.add("tabulator-progress-handle"),u.style.display="inline-block",u.style.position="relative",u.style.height="100%",u.style.backgroundColor="#488CE9",u.style.maxWidth="100%",u.style.minWidth="0%",s.elementAttributes&&typeof s.elementAttributes=="object")for(let p in s.elementAttributes)p.charAt(0)=="+"?(p=p.slice(1),u.setAttribute(p,u.getAttribute(p)+s.elementAttributes["+"+p])):u.setAttribute(p,s.elementAttributes[p]);return n.style.padding="4px 4px",h=Math.min(parseFloat(h),r),h=Math.max(parseFloat(h),o),h=Math.round((h-o)/a),u.style.width=h+"%",n.setAttribute("aria-valuemin",o),n.setAttribute("aria-valuemax",r),u.appendChild(d),d.addEventListener("mousedown",function(p){c=p.screenX,f=u.offsetWidth}),d.addEventListener("mouseover",function(){d.style.cursor="ew-resize"}),n.addEventListener("mousemove",function(p){c&&(u.style.width=f+p.screenX-c+"px")}),n.addEventListener("mouseup",function(p){c&&(p.stopPropagation(),p.stopImmediatePropagation(),c=!1,f=!1,g())}),n.addEventListener("keydown",function(p){switch(p.keyCode){case 39:p.preventDefault(),u.style.width=u.clientWidth+n.clientWidth/100+"px";break;case 37:p.preventDefault(),u.style.width=u.clientWidth-n.clientWidth/100+"px";break;case 9:case 13:g();break;case 27:i();break}}),n.addEventListener("blur",function(){i()}),u}function si(l,e,t,i,s){var n=l.getValue(),r=document.createElement("input"),o=s.tristate,a=typeof s.indeterminateValue>"u"?null:s.indeterminateValue,h=!1,d=Object.keys(s).includes("trueValue"),u=Object.keys(s).includes("falseValue");if(r.setAttribute("type","checkbox"),r.style.marginTop="5px",r.style.boxSizing="border-box",s.elementAttributes&&typeof s.elementAttributes=="object")for(let f in s.elementAttributes)f.charAt(0)=="+"?(f=f.slice(1),r.setAttribute(f,r.getAttribute(f)+s.elementAttributes["+"+f])):r.setAttribute(f,s.elementAttributes[f]);r.value=n,o&&(typeof n>"u"||n===a||n==="")&&(h=!0,r.indeterminate=!0),this.table.browser!="firefox"&&this.table.browser!="safari"&&e(function(){l.getType()==="cell"&&r.focus({preventScroll:!0})}),r.checked=d?n===s.trueValue:n===!0||n==="true"||n==="True"||n===1;function c(f){var g=r.checked;return d&&g?g=s.trueValue:u&&!g&&(g=s.falseValue),o?f?h?a:g:r.checked&&!h?(r.checked=!1,r.indeterminate=!0,h=!0,a):(h=!1,g):g}return r.addEventListener("change",function(f){t(c())}),r.addEventListener("blur",function(f){t(c(!0))}),r.addEventListener("keydown",function(f){f.keyCode==13&&t(c()),f.keyCode==27&&i()}),r}var ni={input:Xt,textarea:Jt,number:Kt,range:qt,date:Yt,time:$t,datetime:Qt,list:ei,star:ti,progress:ii,tickCross:si};const Z=class Z extends w{constructor(e){super(e),this.currentCell=!1,this.mouseClick=!1,this.recursionBlock=!1,this.invalidEdit=!1,this.editedCells=[],this.convertEmptyValues=!1,this.editors=Z.editors,this.registerTableOption("editTriggerEvent","focus"),this.registerTableOption("editorEmptyValue"),this.registerTableOption("editorEmptyValueFunc",this.emptyValueCheck.bind(this)),this.registerColumnOption("editable"),this.registerColumnOption("editor"),this.registerColumnOption("editorParams"),this.registerColumnOption("editorEmptyValue"),this.registerColumnOption("editorEmptyValueFunc"),this.registerColumnOption("cellEditing"),this.registerColumnOption("cellEdited"),this.registerColumnOption("cellEditCancelled"),this.registerTableFunction("getEditedCells",this.getEditedCells.bind(this)),this.registerTableFunction("clearCellEdited",this.clearCellEdited.bind(this)),this.registerTableFunction("navigatePrev",this.navigatePrev.bind(this)),this.registerTableFunction("navigateNext",this.navigateNext.bind(this)),this.registerTableFunction("navigateLeft",this.navigateLeft.bind(this)),this.registerTableFunction("navigateRight",this.navigateRight.bind(this)),this.registerTableFunction("navigateUp",this.navigateUp.bind(this)),this.registerTableFunction("navigateDown",this.navigateDown.bind(this)),this.registerComponentFunction("cell","isEdited",this.cellIsEdited.bind(this)),this.registerComponentFunction("cell","clearEdited",this.clearEdited.bind(this)),this.registerComponentFunction("cell","edit",this.editCell.bind(this)),this.registerComponentFunction("cell","cancelEdit",this.cellCancelEdit.bind(this)),this.registerComponentFunction("cell","navigatePrev",this.navigatePrev.bind(this)),this.registerComponentFunction("cell","navigateNext",this.navigateNext.bind(this)),this.registerComponentFunction("cell","navigateLeft",this.navigateLeft.bind(this)),this.registerComponentFunction("cell","navigateRight",this.navigateRight.bind(this)),this.registerComponentFunction("cell","navigateUp",this.navigateUp.bind(this)),this.registerComponentFunction("cell","navigateDown",this.navigateDown.bind(this))}initialize(){this.subscribe("cell-init",this.bindEditor.bind(this)),this.subscribe("cell-delete",this.clearEdited.bind(this)),this.subscribe("cell-value-changed",this.updateCellClass.bind(this)),this.subscribe("column-layout",this.initializeColumnCheck.bind(this)),this.subscribe("column-delete",this.columnDeleteCheck.bind(this)),this.subscribe("row-deleting",this.rowDeleteCheck.bind(this)),this.subscribe("row-layout",this.rowEditableCheck.bind(this)),this.subscribe("data-refreshing",this.cancelEdit.bind(this)),this.subscribe("clipboard-paste",this.pasteBlocker.bind(this)),this.subscribe("keybinding-nav-prev",this.navigatePrev.bind(this,void 0)),this.subscribe("keybinding-nav-next",this.keybindingNavigateNext.bind(this)),this.subscribe("keybinding-nav-up",this.navigateUp.bind(this,void 0)),this.subscribe("keybinding-nav-down",this.navigateDown.bind(this,void 0)),Object.keys(this.table.options).includes("editorEmptyValue")&&(this.convertEmptyValues=!0)}pasteBlocker(e){if(this.currentCell)return!0}keybindingNavigateNext(e){var t=this.currentCell,i=this.options("tabEndNewRow");t&&(this.navigateNext(t,e)||i&&(t.getElement().firstChild.blur(),this.invalidEdit||(i===!0?i=this.table.addRow({}):typeof i=="function"?i=this.table.addRow(i(t.row.getComponent())):i=this.table.addRow(Object.assign({},i)),i.then(()=>{setTimeout(()=>{t.getComponent().navigateNext()})}))))}cellIsEdited(e){return!!e.modules.edit&&e.modules.edit.edited}cellCancelEdit(e){e===this.currentCell?this.table.modules.edit.cancelEdit():console.warn("Cancel Editor Error - This cell is not currently being edited ")}updateCellClass(e){this.allowEdit(e)?e.getElement().classList.add("tabulator-editable"):e.getElement().classList.remove("tabulator-editable")}clearCellEdited(e){e||(e=this.table.modules.edit.getEditedCells()),Array.isArray(e)||(e=[e]),e.forEach(t=>{this.table.modules.edit.clearEdited(t._getSelf())})}navigatePrev(e=this.currentCell,t){var i,s;if(e){if(t&&t.preventDefault(),i=this.navigateLeft(),i)return!0;if(s=this.table.rowManager.prevDisplayRow(e.row,!0),s&&(i=this.findPrevEditableCell(s,s.cells.length),i))return i.getComponent().edit(),!0}return!1}navigateNext(e=this.currentCell,t){var i,s;if(e){if(t&&t.preventDefault(),i=this.navigateRight(),i)return!0;if(s=this.table.rowManager.nextDisplayRow(e.row,!0),s&&(i=this.findNextEditableCell(s,-1),i))return i.getComponent().edit(),!0}return!1}navigateLeft(e=this.currentCell,t){var i,s;return e&&(t&&t.preventDefault(),i=e.getIndex(),s=this.findPrevEditableCell(e.row,i),s)?(s.getComponent().edit(),!0):!1}navigateRight(e=this.currentCell,t){var i,s;return e&&(t&&t.preventDefault(),i=e.getIndex(),s=this.findNextEditableCell(e.row,i),s)?(s.getComponent().edit(),!0):!1}navigateUp(e=this.currentCell,t){var i,s;return e&&(t&&t.preventDefault(),i=e.getIndex(),s=this.table.rowManager.prevDisplayRow(e.row,!0),s)?(s.cells[i].getComponent().edit(),!0):!1}navigateDown(e=this.currentCell,t){var i,s;return e&&(t&&t.preventDefault(),i=e.getIndex(),s=this.table.rowManager.nextDisplayRow(e.row,!0),s)?(s.cells[i].getComponent().edit(),!0):!1}findNextEditableCell(e,t){var i=!1;if(t0)for(var s=t-1;s>=0;s--){let n=e.cells[s];if(n.column.modules.edit&&x.elVisible(n.getElement())&&this.allowEdit(n)){i=n;break}}return i}initializeColumnCheck(e){typeof e.definition.editor<"u"&&this.initializeColumn(e)}columnDeleteCheck(e){this.currentCell&&this.currentCell.column===e&&this.cancelEdit()}rowDeleteCheck(e){this.currentCell&&this.currentCell.row===e&&this.cancelEdit()}rowEditableCheck(e){e.getCells().forEach(t=>{t.column.modules.edit&&typeof t.column.modules.edit.check=="function"&&this.updateCellClass(t)})}initializeColumn(e){var t=Object.keys(e.definition).includes("editorEmptyValue"),i={editor:!1,blocked:!1,check:e.definition.editable,params:e.definition.editorParams||{},convertEmptyValues:t,editorEmptyValue:e.definition.editorEmptyValue,editorEmptyValueFunc:e.definition.editorEmptyValueFunc};switch(typeof e.definition.editor){case"string":this.editors[e.definition.editor]?i.editor=this.editors[e.definition.editor]:console.warn("Editor Error - No such editor found: ",e.definition.editor);break;case"function":i.editor=e.definition.editor;break;case"boolean":e.definition.editor===!0&&(typeof e.definition.formatter!="function"?this.editors[e.definition.formatter]?i.editor=this.editors[e.definition.formatter]:i.editor=this.editors.input:console.warn("Editor Error - Cannot auto lookup editor for a custom formatter: ",e.definition.formatter));break}i.editor&&(e.modules.edit=i)}getCurrentCell(){return this.currentCell?this.currentCell.getComponent():!1}clearEditor(e){var t=this.currentCell,i;if(this.invalidEdit=!1,t){for(this.currentCell=!1,i=t.getElement(),this.dispatch("edit-editor-clear",t,e),i.classList.remove("tabulator-editing");i.firstChild;)i.removeChild(i.firstChild);t.row.getElement().classList.remove("tabulator-editing"),t.table.element.classList.remove("tabulator-editing")}}cancelEdit(){if(this.currentCell){var e=this.currentCell,t=this.currentCell.getComponent();this.clearEditor(!0),e.setValueActual(e.getValue()),e.cellRendered(),(e.column.definition.editor=="textarea"||e.column.definition.variableHeight)&&e.row.normalizeHeight(!0),e.column.definition.cellEditCancelled&&e.column.definition.cellEditCancelled.call(this.table,t),this.dispatch("edit-cancelled",e),this.dispatchExternal("cellEditCancelled",t)}}bindEditor(e){if(e.column.modules.edit){var t=this,i=e.getElement(!0);this.updateCellClass(e),i.setAttribute("tabindex",0),i.addEventListener("mousedown",function(s){s.button===2?s.preventDefault():t.mouseClick=!0}),this.options("editTriggerEvent")==="dblclick"&&i.addEventListener("dblclick",function(s){i.classList.contains("tabulator-editing")||(i.focus({preventScroll:!0}),t.edit(e,s,!1))}),(this.options("editTriggerEvent")==="focus"||this.options("editTriggerEvent")==="click")&&i.addEventListener("click",function(s){i.classList.contains("tabulator-editing")||(i.focus({preventScroll:!0}),t.edit(e,s,!1))}),this.options("editTriggerEvent")==="focus"&&i.addEventListener("focus",function(s){t.recursionBlock||t.edit(e,s,!1)})}}focusCellNoEvent(e,t){this.recursionBlock=!0,t&&this.table.browser==="ie"||e.getElement().focus({preventScroll:!0}),this.recursionBlock=!1}editCell(e,t){this.focusCellNoEvent(e),this.edit(e,!1,t)}focusScrollAdjust(e){if(this.table.rowManager.getRenderMode()=="virtual"){var t=this.table.rowManager.element.scrollTop,i=this.table.rowManager.element.clientHeight+this.table.rowManager.element.scrollTop,s=e.row.getElement();s.offsetTopi&&(this.table.rowManager.element.scrollTop+=s.offsetTop+s.offsetHeight-i);var n=this.table.rowManager.element.scrollLeft,r=this.table.rowManager.element.clientWidth+this.table.rowManager.element.scrollLeft,o=e.getElement();this.table.modExists("frozenColumns")&&(n+=parseInt(this.table.modules.frozenColumns.leftMargin||0),r-=parseInt(this.table.modules.frozenColumns.rightMargin||0)),this.table.options.renderHorizontal==="virtual"&&(n-=parseInt(this.table.columnManager.renderer.vDomPadLeft),r-=parseInt(this.table.columnManager.renderer.vDomPadLeft)),o.offsetLeftr&&(this.table.rowManager.element.scrollLeft+=o.offsetLeft+o.offsetWidth-r)}}allowEdit(e){var t=!!e.column.modules.edit;if(e.column.modules.edit)switch(typeof e.column.modules.edit.check){case"function":e.row.initialized&&(t=e.column.modules.edit.check(e.getComponent()));break;case"string":t=!!e.row.data[e.column.modules.edit.check];break;case"boolean":t=e.column.modules.edit.check;break}return t}edit(e,t,i){var s=this,n=!0,r=function(){},o=e.getElement(),a=!1,h,d,u;if(this.currentCell){!this.invalidEdit&&this.currentCell!==e&&this.cancelEdit();return}function c(m){if(s.currentCell===e&&!a){var C=s.chain("edit-success",[e,m],!0,!0);return C===!0||s.table.options.validationMode==="highlight"?(a=!0,s.clearEditor(),e.modules.edit||(e.modules.edit={}),e.modules.edit.edited=!0,s.editedCells.indexOf(e)==-1&&s.editedCells.push(e),m=s.transformEmptyValues(m,e),e.setValue(m,!0),C===!0):(a=!0,s.invalidEdit=!0,s.focusCellNoEvent(e,!0),r(),setTimeout(()=>{a=!1},10),!1)}}function f(){s.currentCell===e&&!a&&s.cancelEdit()}function g(m){r=m}if(e.column.modules.edit.blocked)return this.mouseClick=!1,this.blur(o),!1;if(t&&t.stopPropagation(),n=this.allowEdit(e),n||i){if(s.cancelEdit(),s.currentCell=e,this.focusScrollAdjust(e),d=e.getComponent(),this.mouseClick&&(this.mouseClick=!1,e.column.definition.cellClick&&e.column.definition.cellClick.call(this.table,t,d)),e.column.definition.cellEditing&&e.column.definition.cellEditing.call(this.table,d),this.dispatch("cell-editing",e),this.dispatchExternal("cellEditing",d),u=typeof e.column.modules.edit.params=="function"?e.column.modules.edit.params(d):e.column.modules.edit.params,h=e.column.modules.edit.editor.call(s,d,g,c,f,u),this.currentCell&&h!==!1)if(h instanceof Node){for(o.classList.add("tabulator-editing"),e.row.getElement().classList.add("tabulator-editing"),e.table.element.classList.add("tabulator-editing");o.firstChild;)o.removeChild(o.firstChild);o.appendChild(h),r();for(var p=o.children,v=0;v"u"}transformEmptyValues(e,t){var i=t.column.modules.edit,s=i.convertEmptyValues||this.convertEmptyValues,n;return s&&(n=i.editorEmptyValueFunc||this.options("editorEmptyValueFunc"),n&&n(e)&&(e=i.convertEmptyValues?i.editorEmptyValue:this.options("editorEmptyValue"))),e}blur(e){this.confirm("edit-blur",[e])||e.blur()}getEditedCells(){var e=[];return this.editedCells.forEach(t=>{e.push(t.getComponent())}),e}clearEdited(e){var t;e.modules.edit&&e.modules.edit.edited&&(e.modules.edit.edited=!1,this.dispatch("edit-edited-clear",e)),t=this.editedCells.indexOf(e),t>-1&&this.editedCells.splice(t,1)}};b(Z,"moduleName","edit"),b(Z,"editors",ni);let we=Z;class Ue{constructor(e,t,i,s){this.type=e,this.columns=t,this.component=i||!1,this.indent=s||0}}class de{constructor(e,t,i,s,n){this.value=e,this.component=t||!1,this.width=i,this.height=s,this.depth=n}}var ri={},oi={visible:function(){return this.rowManager.getVisibleRows(!1,!0)},all:function(){return this.rowManager.rows},selected:function(){return this.modules.selectRow.selectedRows},active:function(){return this.options.pagination?this.rowManager.getDisplayRows(this.rowManager.displayRows.length-2):this.rowManager.getDisplayRows()}};const V=class V extends w{constructor(e){super(e),this.config={},this.cloneTableStyle=!0,this.colVisProp="",this.colVisPropAttach="",this.registerTableOption("htmlOutputConfig",!1),this.registerColumnOption("htmlOutput"),this.registerColumnOption("titleHtmlOutput")}initialize(){this.registerTableFunction("getHtml",this.getHtml.bind(this))}generateExportList(e,t,i,s){var n,r,o,a;return this.cloneTableStyle=t,this.config=e||{},this.colVisProp=s,this.colVisPropAttach=this.colVisProp.charAt(0).toUpperCase()+this.colVisProp.slice(1),a=V.columnLookups[i],a&&(o=a.call(this.table),o=o.filter(h=>this.columnVisCheck(h))),n=this.config.columnHeaders!==!1?this.headersToExportRows(this.generateColumnGroupHeaders(o)):[],o&&(o=o.map(h=>h.getComponent())),r=this.bodyToExportRows(this.rowLookup(i),o),n.concat(r)}generateTable(e,t,i,s){var n=this.generateExportList(e,t,i,s);return this.generateTableElement(n)}rowLookup(e){var t=[],i;return typeof e=="function"?e.call(this.table).forEach(s=>{s=this.table.rowManager.findRow(s),s&&t.push(s)}):(i=V.rowLookups[e]||V.rowLookups.active,t=i.call(this.table)),Object.assign([],t)}generateColumnGroupHeaders(e){var t=[];return e||(e=this.config.columnGroups!==!1?this.table.columnManager.columns:this.table.columnManager.columnsByIndex),e.forEach(i=>{var s=this.processColumnGroup(i);s&&t.push(s)}),t}processColumnGroup(e){var t=e.columns,i=0,s=e.definition["title"+this.colVisPropAttach]||e.definition.title,n={title:s,column:e,depth:1};if(t.length){if(n.subGroups=[],n.width=0,t.forEach(r=>{var o=this.processColumnGroup(r);o&&(n.width+=o.width,n.subGroups.push(o),o.depth>i&&(i=o.depth))}),n.depth+=i,!n.width)return!1}else if(this.columnVisCheck(e))n.width=1;else return!1;return n}columnVisCheck(e){var t=e.definition[this.colVisProp];return this.config.rowHeaders===!1&&e.isRowHeader?!1:(typeof t=="function"&&(t=t.call(this.table,e.getComponent())),t===!1||t===!0?t:e.visible&&e.field)}headersToExportRows(e){var t=[],i=0,s=[];function n(r,o){var a=i-o;if(typeof t[o]>"u"&&(t[o]=[]),r.height=r.subGroups?1:a-r.depth+1,t[o].push(r),r.height>1)for(let h=1;h"u"&&(t[o+h]=[]),t[o+h].push(!1);if(r.width>1)for(let h=1;hi&&(i=r.depth)}),e.forEach(function(r){n(r,0)}),t.forEach(r=>{var o=[];r.forEach(a=>{if(a){let h=typeof a.title>"u"?"":a.title;o.push(new de(h,a.column.getComponent(),a.width,a.height,a.depth))}else o.push(null)}),s.push(new Ue("header",o))}),s}bodyToExportRows(e,t=[]){var i=[];return t.length===0&&this.table.columnManager.columnsByIndex.forEach(s=>{this.columnVisCheck(s)&&t.push(s.getComponent())}),this.config.columnCalcs!==!1&&this.table.modExists("columnCalcs")&&(this.table.modules.columnCalcs.topInitialized&&e.unshift(this.table.modules.columnCalcs.topRow),this.table.modules.columnCalcs.botInitialized&&e.push(this.table.modules.columnCalcs.botRow)),e=e.filter(s=>{switch(s.type){case"group":return this.config.rowGroups!==!1;case"calc":return this.config.columnCalcs!==!1;case"row":return!(this.table.options.dataTree&&this.config.dataTree===!1&&s.modules.dataTree.parent)}return!0}),e.forEach((s,n)=>{var r=s.getData(this.colVisProp),o=[],a=0;switch(s.type){case"group":a=s.level,o.push(new de(s.key,s.getComponent(),t.length,1));break;case"calc":case"row":t.forEach(h=>{o.push(new de(h._column.getFieldValue(r),h,1,1))}),this.table.options.dataTree&&this.config.dataTree!==!1&&(a=s.modules.dataTree.index);break}i.push(new Ue(s.type,o,s.getComponent(),a))}),i}generateTableElement(e){var t=document.createElement("table"),i=document.createElement("thead"),s=document.createElement("tbody"),n=this.lookupTableStyles(),r=this.table.options["rowFormatter"+this.colVisPropAttach],o={};return o.rowFormatter=r!==null?r:this.table.options.rowFormatter,this.table.options.dataTree&&this.config.dataTree!==!1&&this.table.modExists("columnCalcs")&&(o.treeElementField=this.table.modules.dataTree.elementField),o.groupHeader=this.table.options["groupHeader"+this.colVisPropAttach],o.groupHeader&&!Array.isArray(o.groupHeader)&&(o.groupHeader=[o.groupHeader]),t.classList.add("tabulator-print-table"),this.mapElementStyles(this.table.columnManager.getHeadersElement(),i,["border-top","border-left","border-right","border-bottom","background-color","color","font-weight","font-family","font-size"]),e.length>1e3&&console.warn("It may take a long time to render an HTML table with more than 1000 rows"),e.forEach((a,h)=>{let d;switch(a.type){case"header":i.appendChild(this.generateHeaderElement(a,o,n));break;case"group":s.appendChild(this.generateGroupElement(a,o,n));break;case"calc":s.appendChild(this.generateCalcElement(a,o,n));break;case"row":d=this.generateRowElement(a,o,n),this.mapElementStyles(h%2&&n.evenRow?n.evenRow:n.oddRow,d,["border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","background-color"]),s.appendChild(d);break}}),i.innerHTML&&t.appendChild(i),t.appendChild(s),this.mapElementStyles(this.table.element,t,["border-top","border-left","border-right","border-bottom"]),t}lookupTableStyles(){var e={};return this.cloneTableStyle&&window.getComputedStyle&&(e.oddRow=this.table.element.querySelector(".tabulator-row-odd:not(.tabulator-group):not(.tabulator-calcs)"),e.evenRow=this.table.element.querySelector(".tabulator-row-even:not(.tabulator-group):not(.tabulator-calcs)"),e.calcRow=this.table.element.querySelector(".tabulator-row.tabulator-calcs"),e.firstRow=this.table.element.querySelector(".tabulator-row:not(.tabulator-group):not(.tabulator-calcs)"),e.firstGroup=this.table.element.getElementsByClassName("tabulator-group")[0],e.firstRow&&(e.styleCells=e.firstRow.getElementsByClassName("tabulator-cell"),e.styleRowHeader=e.firstRow.getElementsByClassName("tabulator-row-header")[0],e.firstCell=e.styleCells[0],e.lastCell=e.styleCells[e.styleCells.length-1])),e}generateHeaderElement(e,t,i){var s=document.createElement("tr");return e.columns.forEach(n=>{if(n){var r=document.createElement("th"),o=n.component._column.definition.cssClass?n.component._column.definition.cssClass.split(" "):[];r.colSpan=n.width,r.rowSpan=n.height,r.innerHTML=n.value,this.cloneTableStyle&&(r.style.boxSizing="border-box"),o.forEach(function(a){r.classList.add(a)}),this.mapElementStyles(n.component.getElement(),r,["text-align","border-left","border-right","background-color","color","font-weight","font-family","font-size"]),this.mapElementStyles(n.component._column.contentElement,r,["padding-top","padding-left","padding-right","padding-bottom"]),n.component._column.visible?this.mapElementStyles(n.component.getElement(),r,["width"]):n.component._column.definition.width&&(r.style.width=n.component._column.definition.width+"px"),n.component._column.parent&&n.component._column.parent.isGroup?this.mapElementStyles(n.component._column.parent.groupElement,r,["border-top"]):this.mapElementStyles(n.component.getElement(),r,["border-top"]),n.component._column.isGroup?this.mapElementStyles(n.component.getElement(),r,["border-bottom"]):this.mapElementStyles(this.table.columnManager.getElement(),r,["border-bottom"]),s.appendChild(r)}}),s}generateGroupElement(e,t,i){var s=document.createElement("tr"),n=document.createElement("td"),r=e.columns[0];return s.classList.add("tabulator-print-table-row"),t.groupHeader&&t.groupHeader[e.indent]?r.value=t.groupHeader[e.indent](r.value,e.component._group.getRowCount(),e.component._group.getData(),e.component):t.groupHeader!==!1&&(r.value=e.component._group.generator(r.value,e.component._group.getRowCount(),e.component._group.getData(),e.component)),n.colSpan=r.width,n.innerHTML=r.value,s.classList.add("tabulator-print-table-group"),s.classList.add("tabulator-group-level-"+e.indent),r.component.isVisible()&&s.classList.add("tabulator-group-visible"),this.mapElementStyles(i.firstGroup,s,["border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","background-color"]),this.mapElementStyles(i.firstGroup,n,["padding-top","padding-left","padding-right","padding-bottom"]),s.appendChild(n),s}generateCalcElement(e,t,i){var s=this.generateRowElement(e,t,i);return s.classList.add("tabulator-print-table-calcs"),this.mapElementStyles(i.calcRow,s,["border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","background-color"]),s}generateRowElement(e,t,i){var s=document.createElement("tr");if(s.classList.add("tabulator-print-table-row"),e.columns.forEach((n,r)=>{if(n){var o=document.createElement("td"),a=n.component._column,h=this.table,d=h.columnManager.findColumnIndex(a),u=n.value,c,f,g={modules:{},getValue:function(){return u},getField:function(){return a.definition.field},getElement:function(){return o},getType:function(){return"cell"},getColumn:function(){return a.getComponent()},getData:function(){return e.component.getData()},getRow:function(){return e.component},getTable:function(){return h},getComponent:function(){return g},column:a},p=a.definition.cssClass?a.definition.cssClass.split(" "):[];if(p.forEach(function(v){o.classList.add(v)}),this.table.modExists("format")&&this.config.formatCells!==!1)u=this.table.modules.format.formatExportValue(g,this.colVisProp);else switch(typeof u){case"object":u=u!==null?JSON.stringify(u):"";break;case"undefined":u="";break}u instanceof Node?o.appendChild(u):o.innerHTML=u,f=["padding-top","padding-left","padding-right","padding-bottom","border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","text-align"],a.isRowHeader?(c=i.styleRowHeader,f.push("background-color")):c=i.styleCells&&i.styleCells[d]?i.styleCells[d]:i.firstCell,c&&(this.mapElementStyles(c,o,f),a.definition.align&&(o.style.textAlign=a.definition.align)),this.table.options.dataTree&&this.config.dataTree!==!1&&(t.treeElementField&&t.treeElementField==a.field||!t.treeElementField&&r==0)&&(e.component._row.modules.dataTree.controlEl&&o.insertBefore(e.component._row.modules.dataTree.controlEl.cloneNode(!0),o.firstChild),e.component._row.modules.dataTree.branchEl&&o.insertBefore(e.component._row.modules.dataTree.branchEl.cloneNode(!0),o.firstChild)),s.appendChild(o),g.modules.format&&g.modules.format.renderedCallback&&g.modules.format.renderedCallback()}}),t.rowFormatter&&e.type==="row"&&this.config.formatCells!==!1){let n=Object.assign(e.component);n.getElement=function(){return s},t.rowFormatter(e.component)}return s}generateHTMLTable(e){var t=document.createElement("div");return t.appendChild(this.generateTableElement(e)),t.innerHTML}getHtml(e,t,i,s){var n=this.generateExportList(i||this.table.options.htmlOutputConfig,t,e,s||"htmlOutput");return this.generateHTMLTable(n)}mapElementStyles(e,t,i){if(this.cloneTableStyle&&e&&t){var s={"background-color":"backgroundColor",color:"fontColor",width:"width","font-weight":"fontWeight","font-family":"fontFamily","font-size":"fontSize","text-align":"textAlign","border-top":"borderTop","border-left":"borderLeft","border-right":"borderRight","border-bottom":"borderBottom","padding-top":"paddingTop","padding-left":"paddingLeft","padding-right":"paddingRight","padding-bottom":"paddingBottom"};if(window.getComputedStyle){var n=window.getComputedStyle(e);i.forEach(function(r){t.style[s[r]]||(t.style[s[r]]=n.getPropertyValue(r))})}}}};b(V,"moduleName","export"),b(V,"columnLookups",ri),b(V,"rowLookups",oi);let Ce=V;var ai={"=":function(l,e,t,i){return e==l},"<":function(l,e,t,i){return e":function(l,e,t,i){return e>l},">=":function(l,e,t,i){return e>=l},"!=":function(l,e,t,i){return e!=l},regex:function(l,e,t,i){return typeof l=="string"&&(l=new RegExp(l)),l.test(e)},like:function(l,e,t,i){return l===null||typeof l>"u"?e===l:typeof e<"u"&&e!==null?String(e).toLowerCase().indexOf(l.toLowerCase())>-1:!1},keywords:function(l,e,t,i){var s=l.toLowerCase().split(typeof i.separator>"u"?" ":i.separator),n=String(e===null||typeof e>"u"?"":e).toLowerCase(),r=[];return s.forEach(o=>{n.includes(o)&&r.push(!0)}),i.matchAll?r.length===s.length:!!r.length},starts:function(l,e,t,i){return l===null||typeof l>"u"?e===l:typeof e<"u"&&e!==null?String(e).toLowerCase().startsWith(l.toLowerCase()):!1},ends:function(l,e,t,i){return l===null||typeof l>"u"?e===l:typeof e<"u"&&e!==null?String(e).toLowerCase().endsWith(l.toLowerCase()):!1},in:function(l,e,t,i){return Array.isArray(l)?l.length?l.indexOf(e)>-1:!0:(console.warn("Filter Error - filter value is not an array:",l),!1)}};const O=class O extends w{constructor(e){super(e),this.filterList=[],this.headerFilters={},this.headerFilterColumns=[],this.prevHeaderFilterChangeCheck="",this.prevHeaderFilterChangeCheck="{}",this.changed=!1,this.tableInitialized=!1,this.registerTableOption("filterMode","local"),this.registerTableOption("initialFilter",!1),this.registerTableOption("initialHeaderFilter",!1),this.registerTableOption("headerFilterLiveFilterDelay",300),this.registerTableOption("placeholderHeaderFilter",!1),this.registerColumnOption("headerFilter"),this.registerColumnOption("headerFilterPlaceholder"),this.registerColumnOption("headerFilterParams"),this.registerColumnOption("headerFilterEmptyCheck"),this.registerColumnOption("headerFilterFunc"),this.registerColumnOption("headerFilterFuncParams"),this.registerColumnOption("headerFilterLiveFilter"),this.registerTableFunction("searchRows",this.searchRows.bind(this)),this.registerTableFunction("searchData",this.searchData.bind(this)),this.registerTableFunction("setFilter",this.userSetFilter.bind(this)),this.registerTableFunction("refreshFilter",this.userRefreshFilter.bind(this)),this.registerTableFunction("addFilter",this.userAddFilter.bind(this)),this.registerTableFunction("getFilters",this.getFilters.bind(this)),this.registerTableFunction("setHeaderFilterFocus",this.userSetHeaderFilterFocus.bind(this)),this.registerTableFunction("getHeaderFilterValue",this.userGetHeaderFilterValue.bind(this)),this.registerTableFunction("setHeaderFilterValue",this.userSetHeaderFilterValue.bind(this)),this.registerTableFunction("getHeaderFilters",this.getHeaderFilters.bind(this)),this.registerTableFunction("removeFilter",this.userRemoveFilter.bind(this)),this.registerTableFunction("clearFilter",this.userClearFilter.bind(this)),this.registerTableFunction("clearHeaderFilter",this.userClearHeaderFilter.bind(this)),this.registerComponentFunction("column","headerFilterFocus",this.setHeaderFilterFocus.bind(this)),this.registerComponentFunction("column","reloadHeaderFilter",this.reloadHeaderFilter.bind(this)),this.registerComponentFunction("column","getHeaderFilterValue",this.getHeaderFilterValue.bind(this)),this.registerComponentFunction("column","setHeaderFilterValue",this.setHeaderFilterValue.bind(this))}initialize(){this.subscribe("column-init",this.initializeColumnHeaderFilter.bind(this)),this.subscribe("column-width-fit-before",this.hideHeaderFilterElements.bind(this)),this.subscribe("column-width-fit-after",this.showHeaderFilterElements.bind(this)),this.subscribe("table-built",this.tableBuilt.bind(this)),this.subscribe("placeholder",this.generatePlaceholder.bind(this)),this.table.options.filterMode==="remote"&&this.subscribe("data-params",this.remoteFilterParams.bind(this)),this.registerDataHandler(this.filter.bind(this),10)}tableBuilt(){this.table.options.initialFilter&&this.setFilter(this.table.options.initialFilter),this.table.options.initialHeaderFilter&&this.table.options.initialHeaderFilter.forEach(e=>{var t=this.table.columnManager.findColumn(e.field);if(t)this.setHeaderFilterValue(t,e.value);else return console.warn("Column Filter Error - No matching column found:",e.field),!1}),this.tableInitialized=!0}remoteFilterParams(e,t,i,s){return s.filter=this.getFilters(!0,!0),s}generatePlaceholder(e){if(this.table.options.placeholderHeaderFilter&&Object.keys(this.headerFilters).length)return this.table.options.placeholderHeaderFilter}userSetFilter(e,t,i,s){this.setFilter(e,t,i,s),this.refreshFilter()}userRefreshFilter(){this.refreshFilter()}userAddFilter(e,t,i,s){this.addFilter(e,t,i,s),this.refreshFilter()}userSetHeaderFilterFocus(e){var t=this.table.columnManager.findColumn(e);if(t)this.setHeaderFilterFocus(t);else return console.warn("Column Filter Focus Error - No matching column found:",e),!1}userGetHeaderFilterValue(e){var t=this.table.columnManager.findColumn(e);if(t)return this.getHeaderFilterValue(t);console.warn("Column Filter Error - No matching column found:",e)}userSetHeaderFilterValue(e,t){var i=this.table.columnManager.findColumn(e);if(i)this.setHeaderFilterValue(i,t);else return console.warn("Column Filter Error - No matching column found:",e),!1}userRemoveFilter(e,t,i){this.removeFilter(e,t,i),this.refreshFilter()}userClearFilter(e){this.clearFilter(e),this.refreshFilter()}userClearHeaderFilter(){this.clearHeaderFilter(),this.refreshFilter()}searchRows(e,t,i){return this.search("rows",e,t,i)}searchData(e,t,i){return this.search("data",e,t,i)}initializeColumnHeaderFilter(e){var t=e.definition;t.headerFilter&&this.initializeColumn(e)}initializeColumn(e,t){var i=this,s=e.getField();function n(r){var o=e.modules.filter.tagType=="input"&&e.modules.filter.attrType=="text"||e.modules.filter.tagType=="textarea"?"partial":"match",a="",h="",d;if(typeof e.modules.filter.prevSuccess>"u"||e.modules.filter.prevSuccess!==r){if(e.modules.filter.prevSuccess=r,e.modules.filter.emptyFunc(r))delete i.headerFilters[s];else{switch(e.modules.filter.value=r,typeof e.definition.headerFilterFunc){case"string":O.filters[e.definition.headerFilterFunc]?(a=e.definition.headerFilterFunc,d=function(u){var c=e.definition.headerFilterFuncParams||{},f=e.getFieldValue(u);return c=typeof c=="function"?c(r,f,u):c,O.filters[e.definition.headerFilterFunc](r,f,u,c)}):console.warn("Header Filter Error - Matching filter function not found: ",e.definition.headerFilterFunc);break;case"function":d=function(u){var c=e.definition.headerFilterFuncParams||{},f=e.getFieldValue(u);return c=typeof c=="function"?c(r,f,u):c,e.definition.headerFilterFunc(r,f,u,c)},a=d;break}if(!d)switch(o){case"partial":d=function(u){var c=e.getFieldValue(u);return typeof c<"u"&&c!==null?String(c).toLowerCase().indexOf(String(r).toLowerCase())>-1:!1},a="like";break;default:d=function(u){return e.getFieldValue(u)==r},a="="}i.headerFilters[s]={value:r,func:d,type:a}}e.modules.filter.value=r,h=JSON.stringify(i.headerFilters),i.prevHeaderFilterChangeCheck!==h&&(i.prevHeaderFilterChangeCheck=h,i.trackChanges(),i.refreshFilter())}return!0}e.modules.filter={success:n,attrType:!1,tagType:!1,emptyFunc:!1},this.generateHeaderFilterElement(e)}generateHeaderFilterElement(e,t,i){var s=this,n=e.modules.filter.success,r=e.getField(),o,a,h,d,u,c,f,g;e.modules.filter.value=t;function p(){}function v(m){g=m}if(e.modules.filter.headerElement&&e.modules.filter.headerElement.parentNode&&e.contentElement.removeChild(e.modules.filter.headerElement.parentNode),r){switch(e.modules.filter.emptyFunc=e.definition.headerFilterEmptyCheck||function(m){return!m&&m!==0},o=document.createElement("div"),o.classList.add("tabulator-header-filter"),typeof e.definition.headerFilter){case"string":s.table.modules.edit.editors[e.definition.headerFilter]?(a=s.table.modules.edit.editors[e.definition.headerFilter],(e.definition.headerFilter==="tick"||e.definition.headerFilter==="tickCross")&&!e.definition.headerFilterEmptyCheck&&(e.modules.filter.emptyFunc=function(m){return m!==!0&&m!==!1})):console.warn("Filter Error - Cannot build header filter, No such editor found: ",e.definition.editor);break;case"function":a=e.definition.headerFilter;break;case"boolean":e.modules.edit&&e.modules.edit.editor?a=e.modules.edit.editor:e.definition.formatter&&s.table.modules.edit.editors[e.definition.formatter]?(a=s.table.modules.edit.editors[e.definition.formatter],(e.definition.formatter==="tick"||e.definition.formatter==="tickCross")&&!e.definition.headerFilterEmptyCheck&&(e.modules.filter.emptyFunc=function(m){return m!==!0&&m!==!1})):a=s.table.modules.edit.editors.input;break}if(a){if(d={getValue:function(){return typeof t<"u"?t:""},getField:function(){return e.definition.field},getElement:function(){return o},getColumn:function(){return e.getComponent()},getTable:()=>this.table,getType:()=>"header",getRow:function(){return{normalizeHeight:function(){}}}},f=e.definition.headerFilterParams||{},f=typeof f=="function"?f.call(s.table,d):f,h=a.call(this.table.modules.edit,d,v,n,p,f),!h){console.warn("Filter Error - Cannot add filter to "+r+" column, editor returned a value of false");return}if(!(h instanceof Node)){console.warn("Filter Error - Cannot add filter to "+r+" column, editor should return an instance of Node, the editor returned:",h);return}s.langBind("headerFilters|columns|"+e.definition.field,function(m){h.setAttribute("placeholder",typeof m<"u"&&m?m:e.definition.headerFilterPlaceholder||s.langText("headerFilters|default"))}),h.addEventListener("click",function(m){m.stopPropagation(),h.focus()}),h.addEventListener("focus",m=>{var C=this.table.columnManager.contentsElement.scrollLeft,T=this.table.rowManager.element.scrollLeft;C!==T&&(this.table.rowManager.scrollHorizontal(C),this.table.columnManager.scrollHorizontal(C))}),u=!1,c=function(m){u&&clearTimeout(u),u=setTimeout(function(){n(h.value)},s.table.options.headerFilterLiveFilterDelay)},e.modules.filter.headerElement=h,e.modules.filter.attrType=h.hasAttribute("type")?h.getAttribute("type").toLowerCase():"",e.modules.filter.tagType=h.tagName.toLowerCase(),e.definition.headerFilterLiveFilter!==!1&&(e.definition.headerFilter==="autocomplete"||e.definition.headerFilter==="tickCross"||(e.definition.editor==="autocomplete"||e.definition.editor==="tickCross")&&e.definition.headerFilter===!0||(h.addEventListener("keyup",c),h.addEventListener("search",c),e.modules.filter.attrType=="number"&&h.addEventListener("change",function(m){n(h.value)}),e.modules.filter.attrType=="text"&&this.table.browser!=="ie"&&h.setAttribute("type","search")),(e.modules.filter.tagType=="input"||e.modules.filter.tagType=="select"||e.modules.filter.tagType=="textarea")&&h.addEventListener("mousedown",function(m){m.stopPropagation()})),o.appendChild(h),e.contentElement.appendChild(o),i||s.headerFilterColumns.push(e),g&&g()}}else console.warn("Filter Error - Cannot add header filter, column has no field set:",e.definition.title)}hideHeaderFilterElements(){this.headerFilterColumns.forEach(function(e){e.modules.filter&&e.modules.filter.headerElement&&(e.modules.filter.headerElement.style.display="none")})}showHeaderFilterElements(){this.headerFilterColumns.forEach(function(e){e.modules.filter&&e.modules.filter.headerElement&&(e.modules.filter.headerElement.style.display="")})}setHeaderFilterFocus(e){e.modules.filter&&e.modules.filter.headerElement?e.modules.filter.headerElement.focus():console.warn("Column Filter Focus Error - No header filter set on column:",e.getField())}getHeaderFilterValue(e){if(e.modules.filter&&e.modules.filter.headerElement)return e.modules.filter.value;console.warn("Column Filter Error - No header filter set on column:",e.getField())}setHeaderFilterValue(e,t){e&&(e.modules.filter&&e.modules.filter.headerElement?(this.generateHeaderFilterElement(e,t,!0),e.modules.filter.success(t)):console.warn("Column Filter Error - No header filter set on column:",e.getField()))}reloadHeaderFilter(e){e&&(e.modules.filter&&e.modules.filter.headerElement?this.generateHeaderFilterElement(e,e.modules.filter.value,!0):console.warn("Column Filter Error - No header filter set on column:",e.getField()))}refreshFilter(){this.tableInitialized&&(this.table.options.filterMode==="remote"?this.reloadData(null,!1,!1):this.refreshData(!0))}trackChanges(){this.changed=!0,this.dispatch("filter-changed")}hasChanged(){var e=this.changed;return this.changed=!1,e}setFilter(e,t,i,s){this.filterList=[],Array.isArray(e)||(e=[{field:e,type:t,value:i,params:s}]),this.addFilter(e)}addFilter(e,t,i,s){var n=!1;Array.isArray(e)||(e=[{field:e,type:t,value:i,params:s}]),e.forEach(r=>{r=this.findFilter(r),r&&(this.filterList.push(r),n=!0)}),n&&this.trackChanges()}findFilter(e){var t;if(Array.isArray(e))return this.findSubFilters(e);var i=!1;return typeof e.field=="function"?i=function(s){return e.field(s,e.type||{})}:O.filters[e.type]?(t=this.table.columnManager.getColumnByField(e.field),t?i=function(s){return O.filters[e.type](e.value,t.getFieldValue(s),s,e.params||{})}:i=function(s){return O.filters[e.type](e.value,s[e.field],s,e.params||{})}):console.warn("Filter Error - No such filter type found, ignoring: ",e.type),e.func=i,e.func?e:!1}findSubFilters(e){var t=[];return e.forEach(i=>{i=this.findFilter(i),i&&t.push(i)}),t.length?t:!1}getFilters(e,t){var i=[];return e&&(i=this.getHeaderFilters()),t&&i.forEach(function(s){typeof s.type=="function"&&(s.type="function")}),i=i.concat(this.filtersToArray(this.filterList,t)),i}filtersToArray(e,t){var i=[];return e.forEach(s=>{var n;Array.isArray(s)?i.push(this.filtersToArray(s,t)):(n={field:s.field,type:s.type,value:s.value},t&&typeof n.type=="function"&&(n.type="function"),i.push(n))}),i}getHeaderFilters(){var e=[];for(var t in this.headerFilters)e.push({field:t,type:this.headerFilters[t].type,value:this.headerFilters[t].value});return e}removeFilter(e,t,i){Array.isArray(e)||(e=[{field:e,type:t,value:i}]),e.forEach(s=>{var n=-1;typeof s.field=="object"?n=this.filterList.findIndex(r=>s===r):n=this.filterList.findIndex(r=>s.field===r.field&&s.type===r.type&&s.value===r.value),n>-1?this.filterList.splice(n,1):console.warn("Filter Error - No matching filter type found, ignoring: ",s.type)}),this.trackChanges()}clearFilter(e){this.filterList=[],e&&this.clearHeaderFilter(),this.trackChanges()}clearHeaderFilter(){this.headerFilters={},this.prevHeaderFilterChangeCheck="{}",this.headerFilterColumns.forEach(e=>{typeof e.modules.filter.value<"u"&&delete e.modules.filter.value,e.modules.filter.prevSuccess=void 0,this.reloadHeaderFilter(e)}),this.trackChanges()}search(e,t,i,s){var n=[],r=[];return Array.isArray(t)||(t=[{field:t,type:i,value:s}]),t.forEach(o=>{o=this.findFilter(o),o&&r.push(o)}),this.table.rowManager.rows.forEach(o=>{var a=!0;r.forEach(h=>{this.filterRecurse(h,o.getData())||(a=!1)}),a&&n.push(e==="data"?o.getData("data"):o.getComponent())}),n}filter(e,t){var i=[],s=[];return this.subscribedExternal("dataFiltering")&&this.dispatchExternal("dataFiltering",this.getFilters(!0)),this.table.options.filterMode!=="remote"&&(this.filterList.length||Object.keys(this.headerFilters).length)?e.forEach(n=>{this.filterRow(n)&&i.push(n)}):i=e.slice(0),this.subscribedExternal("dataFiltered")&&(i.forEach(n=>{s.push(n.getComponent())}),this.dispatchExternal("dataFiltered",this.getFilters(!0),s)),i}filterRow(e,t){var i=!0,s=e.getData();this.filterList.forEach(r=>{this.filterRecurse(r,s)||(i=!1)});for(var n in this.headerFilters)this.headerFilters[n].func(s)||(i=!1);return i}filterRecurse(e,t){var i=!1;return Array.isArray(e)?e.forEach(s=>{this.filterRecurse(s,t)&&(i=!0)}):i=e.func(t),i}};b(O,"moduleName","filter"),b(O,"filters",ai);let Ee=O;function li(l,e,t){return this.emptyToSpace(this.sanitizeHTML(l.getValue()))}function hi(l,e,t){return l.getValue()}function di(l,e,t){return l.getElement().style.whiteSpace="pre-wrap",this.emptyToSpace(this.sanitizeHTML(l.getValue()))}function ui(l,e,t){var i=parseFloat(l.getValue()),s="",n,r,o,a,h,d=e.decimal||".",u=e.thousand||",",c=e.negativeSign||"-",f=e.symbol||"",g=!!e.symbolAfter,p=typeof e.precision<"u"?e.precision:2;if(isNaN(i))return this.emptyToSpace(this.sanitizeHTML(l.getValue()));if(i<0&&(i=Math.abs(i),s=c),n=p!==!1?i.toFixed(p):i,n=String(n).split("."),r=n[0],o=n.length>1?d+n[1]:"",e.thousand!==!1)for(a=/(\d+)(\d{3})/;a.test(r);)r=r.replace(a,"$1"+u+"$2");return h=r+o,s===!0?(h="("+h+")",g?h+f:f+h):g?s+h+f:s+f+h}function ci(l,e,t){var i=l.getValue(),s=e.urlPrefix||"",n=e.download,r=i,o=document.createElement("a"),a;function h(d,u){var c=d.shift(),f=u[c];return d.length&&typeof f=="object"?h(d,f):f}if(e.labelField&&(a=l.getData(),r=h(e.labelField.split(this.table.options.nestedFieldSeparator),a)),e.label)switch(typeof e.label){case"string":r=e.label;break;case"function":r=e.label(l);break}if(r){if(e.urlField&&(a=l.getData(),i=x.retrieveNestedData(this.table.options.nestedFieldSeparator,e.urlField,a)),e.url)switch(typeof e.url){case"string":i=e.url;break;case"function":i=e.url(l);break}return o.setAttribute("href",s+i),e.target&&o.setAttribute("target",e.target),e.download&&(typeof n=="function"?n=n(l):n=n===!0?"":n,o.setAttribute("download",n)),o.innerHTML=this.emptyToSpace(this.sanitizeHTML(r)),o}else return" "}function fi(l,e,t){var i=document.createElement("img"),s=l.getValue();switch(e.urlPrefix&&(s=e.urlPrefix+l.getValue()),e.urlSuffix&&(s=s+e.urlSuffix),i.setAttribute("src",s),typeof e.height){case"number":i.style.height=e.height+"px";break;case"string":i.style.height=e.height;break}switch(typeof e.width){case"number":i.style.width=e.width+"px";break;case"string":i.style.width=e.width;break}return i.addEventListener("load",function(){l.getRow().normalizeHeight()}),i}function pi(l,e,t){var i=l.getValue(),s=l.getElement(),n=e.allowEmpty,r=e.allowTruthy,o=Object.keys(e).includes("trueValue"),a=typeof e.tickElement<"u"?e.tickElement:'',h=typeof e.crossElement<"u"?e.crossElement:'';return o&&i===e.trueValue||!o&&(r&&i||i===!0||i==="true"||i==="True"||i===1||i==="1")?(s.setAttribute("aria-checked",!0),a||""):n&&(i==="null"||i===""||i===null||typeof i>"u")?(s.setAttribute("aria-checked","mixed"),""):(s.setAttribute("aria-checked",!1),h||"")}function mi(l,e,t){var i=window.DateTime||luxon.DateTime,s=e.inputFormat||"yyyy-MM-dd HH:mm:ss",n=e.outputFormat||"dd/MM/yyyy HH:mm:ss",r=typeof e.invalidPlaceholder<"u"?e.invalidPlaceholder:"",o=l.getValue();if(typeof i<"u"){var a;return i.isDateTime(o)?a=o:s==="iso"?a=i.fromISO(String(o)):a=i.fromFormat(String(o),s),a.isValid?(e.timezone&&(a=a.setZone(e.timezone)),a.toFormat(n)):r===!0||!o?o:typeof r=="function"?r(o):r}else console.error("Format Error - 'datetime' formatter is dependant on luxon.js")}function gi(l,e,t){var i=window.DateTime||luxon.DateTime,s=e.inputFormat||"yyyy-MM-dd HH:mm:ss",n=typeof e.invalidPlaceholder<"u"?e.invalidPlaceholder:"",r=typeof e.suffix<"u"?e.suffix:!1,o=typeof e.unit<"u"?e.unit:"days",a=typeof e.humanize<"u"?e.humanize:!1,h=typeof e.date<"u"?e.date:i.now(),d=l.getValue();if(typeof i<"u"){var u;return i.isDateTime(d)?u=d:s==="iso"?u=i.fromISO(String(d)):u=i.fromFormat(String(d),s),u.isValid?a?u.diff(h,o).toHuman()+(r?" "+r:""):parseInt(u.diff(h,o)[o])+(r?" "+r:""):n===!0?d:typeof n=="function"?n(d):n}else console.error("Format Error - 'datetimediff' formatter is dependant on luxon.js")}function bi(l,e,t){var i=l.getValue();return typeof e[i]>"u"?(console.warn("Missing display value for "+i),i):e[i]}function vi(l,e,t){var i=l.getValue(),s=l.getElement(),n=e&&e.stars?e.stars:5,r=document.createElement("span"),o=document.createElementNS("http://www.w3.org/2000/svg","svg"),a='',h='';r.style.verticalAlign="middle",o.setAttribute("width","14"),o.setAttribute("height","14"),o.setAttribute("viewBox","0 0 512 512"),o.setAttribute("xml:space","preserve"),o.style.padding="0 1px",i=i&&!isNaN(i)?parseInt(i):0,i=Math.max(0,Math.min(i,n));for(var d=1;d<=n;d++){var u=o.cloneNode(!0);u.innerHTML=d<=i?a:h,r.appendChild(u)}return s.style.whiteSpace="nowrap",s.style.overflow="hidden",s.style.textOverflow="ellipsis",s.setAttribute("aria-label",i),r}function wi(l,e,t){var i=this.sanitizeHTML(l.getValue())||0,s=document.createElement("span"),n=e&&e.max?e.max:100,r=e&&e.min?e.min:0,o=e&&typeof e.color<"u"?e.color:["red","orange","green"],a="#666666",h,d;if(!(isNaN(i)||typeof l.getValue()>"u")){switch(s.classList.add("tabulator-traffic-light"),d=parseFloat(i)<=n?parseFloat(i):n,d=parseFloat(d)>=r?parseFloat(d):r,h=(n-r)/100,d=Math.round((d-r)/h),typeof o){case"string":a=o;break;case"function":a=o(i);break;case"object":if(Array.isArray(o)){var u=100/o.length,c=Math.floor(d/u);c=Math.min(c,o.length-1),c=Math.max(c,0),a=o[c];break}}return s.style.backgroundColor=a,s}}function Ci(l,e={},t){var i=this.sanitizeHTML(l.getValue())||0,s=l.getElement(),n=e.max?e.max:100,r=e.min?e.min:0,o=e.legendAlign?e.legendAlign:"center",a,h,d,u,c;switch(h=parseFloat(i)<=n?parseFloat(i):n,h=parseFloat(h)>=r?parseFloat(h):r,a=(n-r)/100,h=Math.round((h-r)/a),typeof e.color){case"string":d=e.color;break;case"function":d=e.color(i);break;case"object":if(Array.isArray(e.color)){let v=100/e.color.length,m=Math.floor(h/v);m=Math.min(m,e.color.length-1),m=Math.max(m,0),d=e.color[m];break}default:d="#2DC214"}switch(typeof e.legend){case"string":u=e.legend;break;case"function":u=e.legend(i);break;case"boolean":u=i;break;default:u=!1}switch(typeof e.legendColor){case"string":c=e.legendColor;break;case"function":c=e.legendColor(i);break;case"object":if(Array.isArray(e.legendColor)){let v=100/e.legendColor.length,m=Math.floor(h/v);m=Math.min(m,e.legendColor.length-1),m=Math.max(m,0),c=e.legendColor[m]}break;default:c="#000"}s.style.minWidth="30px",s.style.position="relative",s.setAttribute("aria-label",h);var f=document.createElement("div");f.style.display="inline-block",f.style.width=h+"%",f.style.backgroundColor=d,f.style.height="100%",f.setAttribute("data-max",n),f.setAttribute("data-min",r);var g=document.createElement("div");if(g.style.position="relative",g.style.width="100%",g.style.height="100%",u){var p=document.createElement("div");p.style.position="absolute",p.style.top=0,p.style.left=0,p.style.textAlign=o,p.style.width="100%",p.style.color=c,p.innerHTML=u}return t(function(){if(!(l instanceof Ye)){var v=document.createElement("div");v.style.position="absolute",v.style.top="4px",v.style.bottom="4px",v.style.left="4px",v.style.right="4px",s.appendChild(v),s=v}s.appendChild(g),g.appendChild(f),u&&g.appendChild(p)}),""}function Ei(l,e,t){return l.getElement().style.backgroundColor=this.sanitizeHTML(l.getValue()),""}function yi(l,e,t){return''}function Ri(l,e,t){return''}function xi(l,e,t){var i=l.getValue(),s=e.size||15,n=s+"px",r,o,a=e.hasOwnProperty("onValue")?e.onValue:!0,h=e.hasOwnProperty("offValue")?e.offValue:!1,d=e.onTruthy?i:i===a;return r=document.createElement("div"),r.classList.add("tabulator-toggle"),d?(r.classList.add("tabulator-toggle-on"),r.style.flexDirection="row-reverse",e.onColor&&(r.style.background=e.onColor)):e.offColor&&(r.style.background=e.offColor),r.style.width=2.5*s+"px",r.style.borderRadius=n,e.clickable&&r.addEventListener("click",u=>{l.setValue(d?h:a)}),o=document.createElement("div"),o.classList.add("tabulator-toggle-switch"),o.style.height=n,o.style.width=n,o.style.borderRadius=n,r.appendChild(o),r}function Ti(l,e,t){var i=document.createElement("span"),s=l.getRow(),n=l.getTable();return s.watchPosition(r=>{e.relativeToPage&&(r+=n.modules.page.getPageSize()*(n.modules.page.getPage()-1)),i.innerText=r}),i}function ki(l,e,t){return l.getElement().classList.add("tabulator-row-handle"),"
"}var Mi={plaintext:li,html:hi,textarea:di,money:ui,link:ci,image:fi,tickCross:pi,datetime:mi,datetimediff:gi,lookup:bi,star:vi,traffic:wi,progress:Ci,color:Ei,buttonTick:yi,buttonCross:Ri,toggle:xi,rownum:Ti,handle:ki};const H=class H extends w{constructor(e){super(e),this.registerColumnOption("formatter"),this.registerColumnOption("formatterParams"),this.registerColumnOption("formatterPrint"),this.registerColumnOption("formatterPrintParams"),this.registerColumnOption("formatterClipboard"),this.registerColumnOption("formatterClipboardParams"),this.registerColumnOption("formatterHtmlOutput"),this.registerColumnOption("formatterHtmlOutputParams"),this.registerColumnOption("titleFormatter"),this.registerColumnOption("titleFormatterParams")}initialize(){this.subscribe("cell-format",this.formatValue.bind(this)),this.subscribe("cell-rendered",this.cellRendered.bind(this)),this.subscribe("column-layout",this.initializeColumn.bind(this)),this.subscribe("column-format",this.formatHeader.bind(this))}initializeColumn(e){e.modules.format=this.lookupFormatter(e,""),typeof e.definition.formatterPrint<"u"&&(e.modules.format.print=this.lookupFormatter(e,"Print")),typeof e.definition.formatterClipboard<"u"&&(e.modules.format.clipboard=this.lookupFormatter(e,"Clipboard")),typeof e.definition.formatterHtmlOutput<"u"&&(e.modules.format.htmlOutput=this.lookupFormatter(e,"HtmlOutput"))}lookupFormatter(e,t){var i={params:e.definition["formatter"+t+"Params"]||{}},s=e.definition["formatter"+t];switch(typeof s){case"string":H.formatters[s]?i.formatter=H.formatters[s]:(console.warn("Formatter Error - No such formatter found: ",s),i.formatter=H.formatters.plaintext);break;case"function":i.formatter=s;break;default:i.formatter=H.formatters.plaintext;break}return i}cellRendered(e){e.modules.format&&e.modules.format.renderedCallback&&!e.modules.format.rendered&&(e.modules.format.renderedCallback(),e.modules.format.rendered=!0)}formatHeader(e,t,i){var s,n,r,o;return e.definition.titleFormatter?(s=this.getFormatter(e.definition.titleFormatter),r=a=>{e.titleFormatterRendered=a},o={getValue:function(){return t},getElement:function(){return i},getType:function(){return"header"},getColumn:function(){return e.getComponent()},getTable:()=>this.table},n=e.definition.titleFormatterParams||{},n=typeof n=="function"?n():n,s.call(this,o,n,r)):t}formatValue(e){var t=e.getComponent(),i=typeof e.column.modules.format.params=="function"?e.column.modules.format.params(t):e.column.modules.format.params;function s(n){e.modules.format||(e.modules.format={}),e.modules.format.renderedCallback=n,e.modules.format.rendered=!1}return e.column.modules.format.formatter.call(this,t,i,s)}formatExportValue(e,t){var i=e.column.modules.format[t],s;if(i){let n=function(r){e.modules.format||(e.modules.format={}),e.modules.format.renderedCallback=r,e.modules.format.rendered=!1};return s=typeof i.params=="function"?i.params(e.getComponent()):i.params,i.formatter.call(this,e.getComponent(),s,n)}else return this.formatValue(e)}sanitizeHTML(e){if(e){var t={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/","`":"`","=":"="};return String(e).replace(/[&<>"'`=/]/g,function(i){return t[i]})}else return e}emptyToSpace(e){return e===null||typeof e>"u"||e===""?" ":e}getFormatter(e){switch(typeof e){case"string":H.formatters[e]?e=H.formatters[e]:(console.warn("Formatter Error - No such formatter found: ",e),e=H.formatters.plaintext);break;case"function":break;default:e=H.formatters.plaintext;break}return e}};b(H,"moduleName","format"),b(H,"formatters",Mi);let ye=H;class et extends w{constructor(e){super(e),this.leftColumns=[],this.rightColumns=[],this.initializationMode="left",this.active=!1,this.blocked=!0,this.registerColumnOption("frozen")}reset(){this.initializationMode="left",this.leftColumns=[],this.rightColumns=[],this.active=!1}initialize(){this.subscribe("cell-layout",this.layoutCell.bind(this)),this.subscribe("column-init",this.initializeColumn.bind(this)),this.subscribe("column-width",this.layout.bind(this)),this.subscribe("row-layout-after",this.layoutRow.bind(this)),this.subscribe("table-layout",this.layout.bind(this)),this.subscribe("columns-loading",this.reset.bind(this)),this.subscribe("column-add",this.reinitializeColumns.bind(this)),this.subscribe("column-deleted",this.reinitializeColumns.bind(this)),this.subscribe("column-hide",this.reinitializeColumns.bind(this)),this.subscribe("column-show",this.reinitializeColumns.bind(this)),this.subscribe("columns-loaded",this.reinitializeColumns.bind(this)),this.subscribe("table-redraw",this.layout.bind(this)),this.subscribe("layout-refreshing",this.blockLayout.bind(this)),this.subscribe("layout-refreshed",this.unblockLayout.bind(this)),this.subscribe("scrollbar-vertical",this.adjustForScrollbar.bind(this))}blockLayout(){this.blocked=!0}unblockLayout(){this.blocked=!1}layoutCell(e){this.layoutElement(e.element,e.column)}reinitializeColumns(){this.reset(),this.table.columnManager.columnsByIndex.forEach(e=>{this.initializeColumn(e)}),this.layout()}initializeColumn(e){var t={margin:0,edge:!1};e.isGroup||(this.frozenCheck(e)?(t.position=this.initializationMode,this.initializationMode=="left"?this.leftColumns.push(e):this.rightColumns.unshift(e),this.active=!0,e.modules.frozen=t):this.initializationMode="right")}frozenCheck(e){return e.parent.isGroup&&e.definition.frozen&&console.warn("Frozen Column Error - Parent column group must be frozen, not individual columns or sub column groups"),e.parent.isGroup?this.frozenCheck(e.parent):e.definition.frozen}layoutCalcRows(){this.table.modExists("columnCalcs")&&(this.table.modules.columnCalcs.topInitialized&&this.table.modules.columnCalcs.topRow&&this.layoutRow(this.table.modules.columnCalcs.topRow),this.table.modules.columnCalcs.botInitialized&&this.table.modules.columnCalcs.botRow&&this.layoutRow(this.table.modules.columnCalcs.botRow),this.table.modExists("groupRows")&&this.layoutGroupCalcs(this.table.modules.groupRows.getGroups()))}layoutGroupCalcs(e){e.forEach(t=>{t.calcs.top&&this.layoutRow(t.calcs.top),t.calcs.bottom&&this.layoutRow(t.calcs.bottom),t.groupList&&t.groupList.length&&this.layoutGroupCalcs(t.groupList)})}layoutColumnPosition(e){var t=[],i=0,s=0;this.leftColumns.forEach((n,r)=>{if(n.modules.frozen.marginValue=i,n.modules.frozen.margin=n.modules.frozen.marginValue+"px",n.visible&&(i+=n.getWidth()),r==this.leftColumns.length-1?n.modules.frozen.edge=!0:n.modules.frozen.edge=!1,n.parent.isGroup){var o=this.getColGroupParentElement(n);t.includes(o)||(this.layoutElement(o,n),t.push(o)),o.classList.toggle("tabulator-frozen-left",n.modules.frozen.edge&&n.modules.frozen.position==="left"),o.classList.toggle("tabulator-frozen-right",n.modules.frozen.edge&&n.modules.frozen.position==="right")}else this.layoutElement(n.getElement(),n);e&&n.cells.forEach(a=>{this.layoutElement(a.getElement(!0),n)})}),this.rightColumns.forEach((n,r)=>{n.modules.frozen.marginValue=s,n.modules.frozen.margin=n.modules.frozen.marginValue+"px",n.visible&&(s+=n.getWidth()),r==this.rightColumns.length-1?n.modules.frozen.edge=!0:n.modules.frozen.edge=!1,n.parent.isGroup?this.layoutElement(this.getColGroupParentElement(n),n):this.layoutElement(n.getElement(),n),e&&n.cells.forEach(o=>{this.layoutElement(o.getElement(!0),n)})})}getColGroupParentElement(e){return e.parent.isGroup?this.getColGroupParentElement(e.parent):e.getElement()}layout(){this.active&&!this.blocked&&(this.layoutColumnPosition(),this.reinitializeRows(),this.layoutCalcRows())}reinitializeRows(){var e=this.table.rowManager.getVisibleRows(!0),t=this.table.rowManager.getRows().filter(i=>!e.includes(i));t.forEach(i=>{i.deinitialize()}),e.forEach(i=>{i.type==="row"&&this.layoutRow(i)})}layoutRow(e){this.table.options.layout==="fitDataFill"&&this.rightColumns.length&&(this.table.rowManager.getTableElement().style.minWidth="calc(100% - "+this.rightMargin+")"),this.leftColumns.forEach(t=>{var i=e.getCell(t);i&&this.layoutElement(i.getElement(!0),t)}),this.rightColumns.forEach(t=>{var i=e.getCell(t);i&&this.layoutElement(i.getElement(!0),t)})}layoutElement(e,t){var i;t.modules.frozen&&e&&(e.style.position="sticky",this.table.rtl?i=t.modules.frozen.position==="left"?"right":"left":i=t.modules.frozen.position,e.style[i]=t.modules.frozen.margin,e.classList.add("tabulator-frozen"),e.classList.toggle("tabulator-frozen-left",t.modules.frozen.edge&&t.modules.frozen.position==="left"),e.classList.toggle("tabulator-frozen-right",t.modules.frozen.edge&&t.modules.frozen.position==="right"))}adjustForScrollbar(e){this.rightColumns.length&&(this.table.columnManager.getContentsElement().style.width="calc(100% - "+e+"px)")}getFrozenColumns(){return this.leftColumns.concat(this.rightColumns)}_calcSpace(e,t){var i=0;for(let s=0;s{this.initializeRow(e)})}initializeRow(e){var t=this.table.options.frozenRows,i=typeof t;i==="number"?e.getPosition()&&e.getPosition()+this.rows.length<=t&&this.freezeRow(e):i==="function"?t.call(this.table,e.getComponent())&&this.freezeRow(e):Array.isArray(t)&&t.includes(e.data[this.options("frozenRowsField")])&&this.freezeRow(e)}isRowFrozen(e){var t=this.rows.indexOf(e);return t>-1}isFrozen(){return!!this.rows.length}visibleRows(e,t){return this.rows.forEach(i=>{t.push(i)}),t}getRows(e){var t=e.slice(0);return this.rows.forEach(function(i){var s=t.indexOf(i);s>-1&&t.splice(s,1)}),t}freezeRow(e){e.modules.frozen?console.warn("Freeze Error - Row is already frozen"):(e.modules.frozen=!0,this.topElement.appendChild(e.getElement()),e.initialize(),e.normalizeHeight(),this.rows.push(e),this.refreshData(!1,"display"),this.table.rowManager.adjustTableSize(),this.styleRows())}unfreezeRow(e){e.modules.frozen?(e.modules.frozen=!1,this.detachRow(e),this.table.rowManager.adjustTableSize(),this.refreshData(!1,"display"),this.rows.length&&this.styleRows()):console.warn("Freeze Error - Row is already unfrozen")}detachRow(e){var t=this.rows.indexOf(e);if(t>-1){var i=e.getElement();i.parentNode&&i.parentNode.removeChild(i),this.rows.splice(t,1)}}styleRows(e){this.rows.forEach((t,i)=>{this.table.rowManager.styleRow(t,i)})}}b(tt,"moduleName","frozenRows");class Li{constructor(e){return this._group=e,this.type="GroupComponent",new Proxy(this,{get:function(t,i,s){return typeof t[i]<"u"?t[i]:t._group.groupManager.table.componentFunctionBinder.handle("group",t._group,i)}})}getKey(){return this._group.key}getField(){return this._group.field}getElement(){return this._group.element}getRows(){return this._group.getRows(!0)}getSubGroups(){return this._group.getSubGroups(!0)}getParentGroup(){return this._group.parent?this._group.parent.getComponent():!1}isVisible(){return this._group.visible}show(){this._group.show()}hide(){this._group.hide()}toggle(){this._group.toggleVisibility()}scrollTo(e,t){return this._group.groupManager.table.rowManager.scrollToRow(this._group,e,t)}_getSelf(){return this._group}getTable(){return this._group.groupManager.table}}class J{constructor(e,t,i,s,n,r,o){this.groupManager=e,this.parent=t,this.key=s,this.level=i,this.field=n,this.hasSubGroups=i{t.modules&&delete t.modules.group})),this.element=!1,this.arrowElement=!1,this.elementContents=!1}createElements(){var e=document.createElement("div");e.classList.add("tabulator-arrow"),this.element=document.createElement("div"),this.element.classList.add("tabulator-row"),this.element.classList.add("tabulator-group"),this.element.classList.add("tabulator-group-level-"+this.level),this.element.setAttribute("role","rowgroup"),this.arrowElement=document.createElement("div"),this.arrowElement.classList.add("tabulator-group-toggle"),this.arrowElement.appendChild(e),this.groupManager.table.options.movableRows!==!1&&this.groupManager.table.modExists("moveRow")&&this.groupManager.table.modules.moveRow.initializeGroupHeader(this)}createValueGroups(){var e=this.level+1;this.groupManager.allowedValues&&this.groupManager.allowedValues[e]&&this.groupManager.allowedValues[e].forEach(t=>{this._createGroup(t,e)})}addBindings(){var e;this.groupManager.table.options.groupToggleElement&&(e=this.groupManager.table.options.groupToggleElement=="arrow"?this.arrowElement:this.element,e.addEventListener("click",t=>{this.groupManager.table.options.groupToggleElement==="arrow"&&(t.stopPropagation(),t.stopImmediatePropagation()),setTimeout(()=>{this.toggleVisibility()})}))}_createGroup(e,t){var i=t+"_"+e,s=new J(this.groupManager,this,t,e,this.groupManager.groupIDLookups[t].field,this.groupManager.headerGenerator[t]||this.groupManager.headerGenerator[0],this.old?this.old.groups[i]:!1);this.groups[i]=s,this.groupList.push(s)}_addRowToGroup(e){var t=this.level+1;if(this.hasSubGroups){var i=this.groupManager.groupIDLookups[t].func(e.getData()),s=t+"_"+i;this.groupManager.allowedValues&&this.groupManager.allowedValues[t]?this.groups[s]&&this.groups[s].addRow(e):(this.groups[s]||this._createGroup(i,t),this.groups[s].addRow(e))}}_addRow(e){this.rows.push(e),e.modules.group=this}insertRow(e,t,i){var s=this.conformRowData({});e.updateData(s);var n=this.rows.indexOf(t);n>-1?i?this.rows.splice(n+1,0,e):this.rows.splice(n,0,e):i?this.rows.push(e):this.rows.unshift(e),e.modules.group=this,this.groupManager.table.modExists("columnCalcs")&&this.groupManager.table.options.columnCalcs!="table"&&this.groupManager.table.modules.columnCalcs.recalcGroup(this),this.groupManager.updateGroupRows(!0)}scrollHeader(e){this.arrowElement&&(this.arrowElement.style.marginLeft=e,this.groupList.forEach(function(t){t.scrollHeader(e)}))}getRowIndex(e){}conformRowData(e){return this.field?e[this.field]=this.key:console.warn("Data Conforming Error - Cannot conform row data to match new group as groupBy is a function"),this.parent&&(e=this.parent.conformRowData(e)),e}removeRow(e){var t=this.rows.indexOf(e),i=e.getElement();t>-1&&this.rows.splice(t,1),!this.groupManager.table.options.groupValues&&!this.rows.length?(this.parent?this.parent.removeGroup(this):this.groupManager.removeGroup(this),this.groupManager.updateGroupRows(!0)):(i.parentNode&&i.parentNode.removeChild(i),this.groupManager.blockRedraw||(this.generateGroupHeaderContents(),this.groupManager.table.modExists("columnCalcs")&&this.groupManager.table.options.columnCalcs!="table"&&this.groupManager.table.modules.columnCalcs.recalcGroup(this)))}removeGroup(e){var t=e.level+"_"+e.key,i;this.groups[t]&&(delete this.groups[t],i=this.groupList.indexOf(e),i>-1&&this.groupList.splice(i,1),this.groupList.length||(this.parent?this.parent.removeGroup(this):this.groupManager.removeGroup(this)))}getHeadersAndRows(){var e=[];return e.push(this),this._visSet(),this.calcs.top&&(this.calcs.top.detachElement(),this.calcs.top.deleteCells()),this.calcs.bottom&&(this.calcs.bottom.detachElement(),this.calcs.bottom.deleteCells()),this.visible?this.groupList.length?this.groupList.forEach(function(t){e=e.concat(t.getHeadersAndRows())}):(this.groupManager.table.options.columnCalcs!="table"&&this.groupManager.table.modExists("columnCalcs")&&this.groupManager.table.modules.columnCalcs.hasTopCalcs()&&(this.calcs.top=this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows),e.push(this.calcs.top)),e=e.concat(this.rows),this.groupManager.table.options.columnCalcs!="table"&&this.groupManager.table.modExists("columnCalcs")&&this.groupManager.table.modules.columnCalcs.hasBottomCalcs()&&(this.calcs.bottom=this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows),e.push(this.calcs.bottom))):!this.groupList.length&&this.groupManager.table.options.columnCalcs!="table"&&this.groupManager.table.modExists("columnCalcs")&&(this.groupManager.table.modules.columnCalcs.hasTopCalcs()&&this.groupManager.table.options.groupClosedShowCalcs&&(this.calcs.top=this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows),e.push(this.calcs.top)),this.groupManager.table.modules.columnCalcs.hasBottomCalcs()&&this.groupManager.table.options.groupClosedShowCalcs&&(this.calcs.bottom=this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows),e.push(this.calcs.bottom))),e}getData(e,t){var i=[];return this._visSet(),(!e||e&&this.visible)&&this.rows.forEach(s=>{i.push(s.getData(t||"data"))}),i}getRowCount(){var e=0;return this.groupList.length?this.groupList.forEach(t=>{e+=t.getRowCount()}):e=this.rows.length,e}toggleVisibility(){this.visible?this.hide():this.show()}hide(){this.visible=!1,this.groupManager.table.rowManager.getRenderMode()=="basic"&&!this.groupManager.table.options.pagination?(this.element.classList.remove("tabulator-group-visible"),this.groupList.length?this.groupList.forEach(e=>{var t=e.getHeadersAndRows();t.forEach(i=>{i.detachElement()})}):this.rows.forEach(e=>{var t=e.getElement();t.parentNode.removeChild(t)}),this.groupManager.updateGroupRows(!0)):this.groupManager.updateGroupRows(!0),this.groupManager.table.externalEvents.dispatch("groupVisibilityChanged",this.getComponent(),!1)}show(){if(this.visible=!0,this.groupManager.table.rowManager.getRenderMode()=="basic"&&!this.groupManager.table.options.pagination){this.element.classList.add("tabulator-group-visible");var e=this.generateElement();this.groupList.length?this.groupList.forEach(t=>{var i=t.getHeadersAndRows();i.forEach(s=>{var n=s.getElement();e.parentNode.insertBefore(n,e.nextSibling),s.initialize(),e=n})}):this.rows.forEach(t=>{var i=t.getElement();e.parentNode.insertBefore(i,e.nextSibling),t.initialize(),e=i}),this.groupManager.updateGroupRows(!0)}else this.groupManager.updateGroupRows(!0);this.groupManager.table.externalEvents.dispatch("groupVisibilityChanged",this.getComponent(),!0)}_visSet(){var e=[];typeof this.visible=="function"&&(this.rows.forEach(function(t){e.push(t.getData())}),this.visible=this.visible(this.key,this.getRowCount(),e,this.getComponent()))}getRowGroup(e){var t=!1;return this.groupList.length?this.groupList.forEach(function(i){var s=i.getRowGroup(e);s&&(t=s)}):this.rows.find(function(i){return i===e})&&(t=this),t}getSubGroups(e){var t=[];return this.groupList.forEach(function(i){t.push(e?i.getComponent():i)}),t}getRows(e,t){var i=[];return t&&this.groupList.length?this.groupList.forEach(s=>{i=i.concat(s.getRows(e,t))}):this.rows.forEach(function(s){i.push(e?s.getComponent():s)}),i}generateGroupHeaderContents(){var e=[],t=this.getRows(!1,!0);for(t.forEach(function(i){e.push(i.getData())}),this.elementContents=this.generator(this.key,this.getRowCount(),e,this.getComponent());this.element.firstChild;)this.element.removeChild(this.element.firstChild);typeof this.elementContents=="string"?this.element.innerHTML=this.elementContents:this.element.appendChild(this.elementContents),this.element.insertBefore(this.arrowElement,this.element.firstChild)}getPath(e=[]){return e.unshift(this.key),this.parent&&this.parent.getPath(e),e}getElement(){return this.elementContents?this.element:this.generateElement()}generateElement(){this.addBindings=!1,this._visSet(),this.visible?this.element.classList.add("tabulator-group-visible"):this.element.classList.remove("tabulator-group-visible");for(var e=0;ei.length&&console.warn("Error creating group headers, groupHeader array is shorter than groupBy array"),this.headerGenerator=[function(){return""}],this.startOpen=[function(){return!1}],this.langBind("groups|item",(n,r)=>{this.headerGenerator[0]=(o,a,h)=>(typeof o>"u"?"":o)+"("+a+" "+(a===1?n:r.groups.items)+")"}),this.groupIDLookups=[],e)this.table.modExists("columnCalcs")&&this.table.options.columnCalcs!="table"&&this.table.options.columnCalcs!="both"&&this.table.modules.columnCalcs.removeCalcs();else if(this.table.modExists("columnCalcs")&&this.table.options.columnCalcs!="group"){var s=this.table.columnManager.getRealColumns();s.forEach(n=>{n.definition.topCalc&&this.table.modules.columnCalcs.initializeTopRow(),n.definition.bottomCalc&&this.table.modules.columnCalcs.initializeBottomRow()})}Array.isArray(e)||(e=[e]),e.forEach((n,r)=>{var o,a;typeof n=="function"?o=n:(a=this.table.columnManager.getColumnByField(n),a?o=function(h){return a.getFieldValue(h)}:o=function(h){return h[n]}),this.groupIDLookups.push({field:typeof n=="function"?!1:n,func:o,values:this.allowedValues?this.allowedValues[r]:!1})}),t&&(Array.isArray(t)||(t=[t]),t.forEach(n=>{}),this.startOpen=t),i&&(this.headerGenerator=Array.isArray(i)?i:[i])}else this.groupList=[],this.groups={}}rowSample(e,t){if(this.table.options.groupBy){var i=this.getGroups(!1)[0];t.push(i.getRows(!1)[0])}return t}virtualRenderFill(){var e=this.table.rowManager.tableElement,t=this.table.rowManager.getVisibleRows();if(this.table.options.groupBy)t=t.filter(i=>i.type!=="group"),e.style.minWidth=t.length?"":this.table.columnManager.getWidth()+"px";else return t}rowAddingIndex(e,t,i){if(this.table.options.groupBy){this.assignRowToGroup(e);var s=e.modules.group.rows;return s.length>1&&(!t||t&&s.indexOf(t)==-1?i?s[0]!==e&&(t=s[0],this.table.rowManager.moveRowInArray(e.modules.group.rows,e,t,!i)):s[s.length-1]!==e&&(t=s[s.length-1],this.table.rowManager.moveRowInArray(e.modules.group.rows,e,t,!i)):this.table.rowManager.moveRowInArray(e.modules.group.rows,e,t,!i)),t}}trackChanges(){this.dispatch("group-changed")}setGroupBy(e){this.table.options.groupBy=e,this.initialized||this.initialize(),this.configureGroupSetup(),!e&&this.table.modExists("columnCalcs")&&this.table.options.columnCalcs===!0&&this.table.modules.columnCalcs.reinitializeCalcs(),this.refreshData(),this.trackChanges()}setGroupValues(e){this.table.options.groupValues=e,this.configureGroupSetup(),this.refreshData(),this.trackChanges()}setGroupStartOpen(e){this.table.options.groupStartOpen=e,this.configureGroupSetup(),this.table.options.groupBy?(this.refreshData(),this.trackChanges()):console.warn("Grouping Update - cant refresh view, no groups have been set")}setGroupHeader(e){this.table.options.groupHeader=e,this.configureGroupSetup(),this.table.options.groupBy?(this.refreshData(),this.trackChanges()):console.warn("Grouping Update - cant refresh view, no groups have been set")}userGetGroups(e){return this.getGroups(!0)}userGetGroupedData(){return this.table.options.groupBy?this.getGroupedData():this.getData()}rowGetGroup(e){return e.modules.group?e.modules.group.getComponent():!1}rowMoving(e,t,i){if(this.table.options.groupBy){!i&&t instanceof J&&(t=this.table.rowManager.prevDisplayRow(e)||t);var s=t instanceof J?t:t.modules.group,n=e instanceof J?e:e.modules.group;s===n?this.table.rowManager.moveRowInArray(s.rows,e,t,i):(n&&n.removeRow(e),s.insertRow(e,t,i))}}rowDeleting(e){this.table.options.groupBy&&e.modules.group&&e.modules.group.removeRow(e)}rowsUpdated(e){this.table.options.groupBy&&this.updateGroupRows(!0)}cellUpdated(e){this.table.options.groupBy&&this.reassignRowToGroup(e.row)}getRows(e){return this.table.options.groupBy&&this.groupIDLookups.length?(this.dispatchExternal("dataGrouping"),this.generateGroups(e),this.subscribedExternal("dataGrouped")&&this.dispatchExternal("dataGrouped",this.getGroups(!0)),this.updateGroupRows()):e.slice(0)}getGroups(e){var t=[];return this.groupList.forEach(function(i){t.push(e?i.getComponent():i)}),t}getChildGroups(e){var t=[];return e||(e=this),e.groupList.forEach(i=>{i.groupList.length?t=t.concat(this.getChildGroups(i)):t.push(i)}),t}wipe(){this.table.options.groupBy&&(this.groupList.forEach(function(e){e.wipe()}),this.groupList=[],this.groups={})}pullGroupListData(e){var t=[];return e.forEach(i=>{var s={};s.level=0,s.rowCount=0,s.headerContent="";var n=[];i.hasSubGroups?(n=this.pullGroupListData(i.groupList),s.level=i.level,s.rowCount=n.length-i.groupList.length,s.headerContent=i.generator(i.key,s.rowCount,i.rows,i),t.push(s),t=t.concat(n)):(s.level=i.level,s.headerContent=i.generator(i.key,i.rows.length,i.rows,i),s.rowCount=i.getRows().length,t.push(s),i.getRows().forEach(r=>{t.push(r.getData("data"))}))}),t}getGroupedData(){return this.pullGroupListData(this.groupList)}getRowGroup(e){var t=!1;return this.options("dataTree")&&(e=this.table.modules.dataTree.getTreeParentRoot(e)),this.groupList.forEach(i=>{var s=i.getRowGroup(e);s&&(t=s)}),t}countGroups(){return this.groupList.length}generateGroups(e){var t=this.groups;this.groups={},this.groupList=[],this.allowedValues&&this.allowedValues[0]?(this.allowedValues[0].forEach(i=>{this.createGroup(i,0,t)}),e.forEach(i=>{this.assignRowToExistingGroup(i,t)})):e.forEach(i=>{this.assignRowToGroup(i,t)}),Object.values(t).forEach(i=>{i.wipe(!0)})}createGroup(e,t,i){var s=t+"_"+e,n;i=i||[],n=new J(this,!1,t,e,this.groupIDLookups[0].field,this.headerGenerator[0],i[s]),this.groups[s]=n,this.groupList.push(n)}assignRowToExistingGroup(e,t){var i=this.groupIDLookups[0].func(e.getData()),s="0_"+i;this.groups[s]&&this.groups[s].addRow(e)}assignRowToGroup(e,t){var i=this.groupIDLookups[0].func(e.getData()),s=!this.groups["0_"+i];return s&&this.createGroup(i,0,t),this.groups["0_"+i].addRow(e),!s}reassignRowToGroup(e){if(e.type==="row"){var t=e.modules.group,i=t.getPath(),s=this.getExpectedPath(e),n;n=i.length==s.length&&i.every((r,o)=>r===s[o]),n||(t.removeRow(e),this.assignRowToGroup(e,this.groups),this.refreshData(!0))}}getExpectedPath(e){var t=[],i=e.getData();return this.groupIDLookups.forEach(s=>{t.push(s.func(i))}),t}updateGroupRows(e){var t=[];return this.blockRedraw||(this.groupList.forEach(i=>{t=t.concat(i.getHeadersAndRows())}),e&&this.refreshData(!0)),t}scrollHeaders(e){this.table.options.groupBy&&(this.table.options.renderHorizontal==="virtual"&&(e-=this.table.columnManager.renderer.vDomPadLeft),e=e+"px",this.groupList.forEach(t=>{t.scrollHeader(e)}))}removeGroup(e){var t=e.level+"_"+e.key,i;this.groups[t]&&(delete this.groups[t],i=this.groupList.indexOf(e),i>-1&&this.groupList.splice(i,1))}checkBasicModeGroupHeaderWidth(){var e=this.table.rowManager.tableElement,t=!0;this.table.rowManager.getDisplayRows().forEach((i,s)=>{this.table.rowManager.styleRow(i,s),e.appendChild(i.getElement()),i.initialize(!0),i.type!=="group"&&(t=!1)}),t?e.style.minWidth=this.table.columnManager.getWidth()+"px":e.style.minWidth=""}}b(it,"moduleName","groupRows");var Si={cellEdit:function(l){l.component.setValueProcessData(l.data.oldValue),l.component.cellRendered()},rowAdd:function(l){l.component.deleteActual(),this.table.rowManager.checkPlaceholder()},rowDelete:function(l){var e=this.table.rowManager.addRowActual(l.data.data,l.data.pos,l.data.index);this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.updateGroupRows(!0),this._rebindRow(l.component,e),this.table.rowManager.checkPlaceholder()},rowMove:function(l){var e=l.data.posFrom-l.data.posTo>0;this.table.rowManager.moveRowActual(l.component,this.table.rowManager.getRowFromPosition(l.data.posFrom),e),this.table.rowManager.regenerateRowPositions(),this.table.rowManager.reRenderInPosition()}},Di={cellEdit:function(l){l.component.setValueProcessData(l.data.newValue),l.component.cellRendered()},rowAdd:function(l){var e=this.table.rowManager.addRowActual(l.data.data,l.data.pos,l.data.index);this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.updateGroupRows(!0),this._rebindRow(l.component,e),this.table.rowManager.checkPlaceholder()},rowDelete:function(l){l.component.deleteActual(),this.table.rowManager.checkPlaceholder()},rowMove:function(l){this.table.rowManager.moveRowActual(l.component,this.table.rowManager.getRowFromPosition(l.data.posTo),l.data.after),this.table.rowManager.regenerateRowPositions(),this.table.rowManager.reRenderInPosition()}},zi={undo:["ctrl + 90","meta + 90"],redo:["ctrl + 89","meta + 89"]},Hi={undo:function(l){var e=!1;this.table.options.history&&this.table.modExists("history")&&this.table.modExists("edit")&&(e=this.table.modules.edit.currentCell,e||(l.preventDefault(),this.table.modules.history.undo()))},redo:function(l){var e=!1;this.table.options.history&&this.table.modExists("history")&&this.table.modExists("edit")&&(e=this.table.modules.edit.currentCell,e||(l.preventDefault(),this.table.modules.history.redo()))}},Fi={keybindings:{bindings:zi,actions:Hi}};const I=class I extends w{constructor(e){super(e),this.history=[],this.index=-1,this.registerTableOption("history",!1)}initialize(){this.table.options.history&&(this.subscribe("cell-value-updated",this.cellUpdated.bind(this)),this.subscribe("cell-delete",this.clearComponentHistory.bind(this)),this.subscribe("row-delete",this.rowDeleted.bind(this)),this.subscribe("rows-wipe",this.clear.bind(this)),this.subscribe("row-added",this.rowAdded.bind(this)),this.subscribe("row-move",this.rowMoved.bind(this))),this.registerTableFunction("undo",this.undo.bind(this)),this.registerTableFunction("redo",this.redo.bind(this)),this.registerTableFunction("getHistoryUndoSize",this.getHistoryUndoSize.bind(this)),this.registerTableFunction("getHistoryRedoSize",this.getHistoryRedoSize.bind(this)),this.registerTableFunction("clearHistory",this.clear.bind(this))}rowMoved(e,t,i){this.action("rowMove",e,{posFrom:e.getPosition(),posTo:t.getPosition(),to:t,after:i})}rowAdded(e,t,i,s){this.action("rowAdd",e,{data:t,pos:i,index:s})}rowDeleted(e){var t,i;this.table.options.groupBy?(i=e.getComponent().getGroup()._getSelf().rows,t=i.indexOf(e),t&&(t=i[t-1])):(t=e.table.rowManager.getRowIndex(e),t&&(t=e.table.rowManager.rows[t-1])),this.action("rowDelete",e,{data:e.getData(),pos:!t,index:t})}cellUpdated(e){this.action("cellEdit",e,{oldValue:e.oldValue,newValue:e.value})}clear(){this.history=[],this.index=-1}action(e,t,i){this.history=this.history.slice(0,this.index+1),this.history.push({type:e,component:t,data:i}),this.index++}getHistoryUndoSize(){return this.index+1}getHistoryRedoSize(){return this.history.length-(this.index+1)}clearComponentHistory(e){var t=this.history.findIndex(function(i){return i.component===e});t>-1&&(this.history.splice(t,1),t<=this.index&&this.index--,this.clearComponentHistory(e))}undo(){if(this.index>-1){let e=this.history[this.index];return I.undoers[e.type].call(this,e),this.index--,this.dispatchExternal("historyUndo",e.type,e.component.getComponent(),e.data),!0}else return console.warn(this.options("history")?"History Undo Error - No more history to undo":"History module not enabled"),!1}redo(){if(this.history.length-1>this.index){this.index++;let e=this.history[this.index];return I.redoers[e.type].call(this,e),this.dispatchExternal("historyRedo",e.type,e.component.getComponent(),e.data),!0}else return console.warn(this.options("history")?"History Redo Error - No more history to redo":"History module not enabled"),!1}_rebindRow(e,t){this.history.forEach(function(i){if(i.component instanceof S)i.component===e&&(i.component=t);else if(i.component instanceof ne&&i.component.row===e){var s=i.component.column.getField();s&&(i.component=t.getCell(s))}})}};b(I,"moduleName","history"),b(I,"moduleExtensions",Fi),b(I,"undoers",Si),b(I,"redoers",Di);let Re=I;class st extends w{constructor(e){super(e),this.fieldIndex=[],this.hasIndex=!1}initialize(){this.tableElementCheck()}tableElementCheck(){this.table.originalElement&&this.table.originalElement.tagName==="TABLE"&&(this.table.originalElement.childNodes.length?this.parseTable():console.warn("Unable to parse data from empty table tag, Tabulator should be initialized on a div tag unless importing data from a table element."))}parseTable(){var e=this.table.originalElement,t=this.table.options,i=e.getElementsByTagName("th"),s=e.getElementsByTagName("tbody")[0],n=[];this.hasIndex=!1,this.dispatchExternal("htmlImporting"),s=s?s.getElementsByTagName("tr"):[],this._extractOptions(e,t),i.length?this._extractHeaders(i,s):this._generateBlankHeaders(i,s);for(var r=0;r{r[d.toLowerCase()]=d});for(var o in s){var a=s[o],h;a&&typeof a=="object"&&a.name&&a.name.indexOf("tabulator-")===0&&(h=a.name.replace("tabulator-",""),typeof r[h]<"u"&&(t[r[h]]=this._attribValue(a.value)))}}_attribValue(e){return e==="true"?!0:e==="false"?!1:e}_findCol(e){var t=this.table.options.columns.find(i=>i.title===e);return t||!1}_extractHeaders(e,t){for(var i=0;i(console.error("Import Error:",r||"Unable to import data"),Promise.reject(r)))}lookupImporter(e){var t;return e||(e=this.table.options.importFormat),typeof e=="string"?t=ee.importers[e]:t=e,t||console.error("Import Error - Importer not found:",e),t}importFromFile(e,t,i){var s=this.lookupImporter(e);if(s)return this.pickFile(t,i).then(this.importData.bind(this,s)).then(this.structureData.bind(this)).then(this.setData.bind(this)).catch(n=>(this.dispatch("import-error",n),this.dispatchExternal("importError",n),console.error("Import Error:",n||"Unable to import file"),Promise.reject(n)))}pickFile(e,t){return new Promise((i,s)=>{var n=document.createElement("input");n.type="file",n.accept=e,n.addEventListener("change",r=>{var o=n.files[0],a=new FileReader;switch(this.dispatch("import-importing",n.files),this.dispatchExternal("importImporting",n.files),t||this.table.options.importReader){case"buffer":a.readAsArrayBuffer(o);break;case"binary":a.readAsBinaryString(o);break;case"url":a.readAsDataURL(o);break;case"text":default:a.readAsText(o)}a.onload=h=>{i(a.result)},a.onerror=h=>{console.warn("File Load Error - Unable to read file"),s()}}),this.dispatch("import-choose"),this.dispatchExternal("importChoose"),n.click()})}importData(e,t){var i=e.call(this.table,t);return i instanceof Promise?i:i?Promise.resolve(i):Promise.reject()}structureData(e){var t=[];return Array.isArray(e)&&e.length&&Array.isArray(e[0])?(this.table.options.autoColumns?t=this.structureArrayToObject(e):t=this.structureArrayToColumns(e),t):e}structureArrayToObject(e){var t=e.shift(),i=e.map(s=>{var n={};return t.forEach((r,o)=>{n[r]=s[o]}),n});return i}structureArrayToColumns(e){var t=[],i=this.table.getColumns();return i[0]&&e[0][0]&&i[0].getDefinition().title===e[0][0]&&e.shift(),e.forEach(s=>{var n={};s.forEach((r,o)=>{var a=i[o];a&&(n[a.getField()]=r)}),t.push(n)}),t}setData(e){return this.dispatch("import-imported",e),this.dispatchExternal("importImported",e),this.table.setData(e)}};b(ee,"moduleName","import"),b(ee,"importers",Bi);let xe=ee;class nt extends w{constructor(e){super(e),this.eventMap={rowClick:"row-click",rowDblClick:"row-dblclick",rowContext:"row-contextmenu",rowMouseEnter:"row-mouseenter",rowMouseLeave:"row-mouseleave",rowMouseOver:"row-mouseover",rowMouseOut:"row-mouseout",rowMouseMove:"row-mousemove",rowMouseDown:"row-mousedown",rowMouseUp:"row-mouseup",rowTap:"row",rowDblTap:"row",rowTapHold:"row",cellClick:"cell-click",cellDblClick:"cell-dblclick",cellContext:"cell-contextmenu",cellMouseEnter:"cell-mouseenter",cellMouseLeave:"cell-mouseleave",cellMouseOver:"cell-mouseover",cellMouseOut:"cell-mouseout",cellMouseMove:"cell-mousemove",cellMouseDown:"cell-mousedown",cellMouseUp:"cell-mouseup",cellTap:"cell",cellDblTap:"cell",cellTapHold:"cell",headerClick:"column-click",headerDblClick:"column-dblclick",headerContext:"column-contextmenu",headerMouseEnter:"column-mouseenter",headerMouseLeave:"column-mouseleave",headerMouseOver:"column-mouseover",headerMouseOut:"column-mouseout",headerMouseMove:"column-mousemove",headerMouseDown:"column-mousedown",headerMouseUp:"column-mouseup",headerTap:"column",headerDblTap:"column",headerTapHold:"column",groupClick:"group-click",groupDblClick:"group-dblclick",groupContext:"group-contextmenu",groupMouseEnter:"group-mouseenter",groupMouseLeave:"group-mouseleave",groupMouseOver:"group-mouseover",groupMouseOut:"group-mouseout",groupMouseMove:"group-mousemove",groupMouseDown:"group-mousedown",groupMouseUp:"group-mouseup",groupTap:"group",groupDblTap:"group",groupTapHold:"group"},this.subscribers={},this.touchSubscribers={},this.columnSubscribers={},this.touchWatchers={row:{tap:null,tapDbl:null,tapHold:null},cell:{tap:null,tapDbl:null,tapHold:null},column:{tap:null,tapDbl:null,tapHold:null},group:{tap:null,tapDbl:null,tapHold:null}},this.registerColumnOption("headerClick"),this.registerColumnOption("headerDblClick"),this.registerColumnOption("headerContext"),this.registerColumnOption("headerMouseEnter"),this.registerColumnOption("headerMouseLeave"),this.registerColumnOption("headerMouseOver"),this.registerColumnOption("headerMouseOut"),this.registerColumnOption("headerMouseMove"),this.registerColumnOption("headerMouseDown"),this.registerColumnOption("headerMouseUp"),this.registerColumnOption("headerTap"),this.registerColumnOption("headerDblTap"),this.registerColumnOption("headerTapHold"),this.registerColumnOption("cellClick"),this.registerColumnOption("cellDblClick"),this.registerColumnOption("cellContext"),this.registerColumnOption("cellMouseEnter"),this.registerColumnOption("cellMouseLeave"),this.registerColumnOption("cellMouseOver"),this.registerColumnOption("cellMouseOut"),this.registerColumnOption("cellMouseMove"),this.registerColumnOption("cellMouseDown"),this.registerColumnOption("cellMouseUp"),this.registerColumnOption("cellTap"),this.registerColumnOption("cellDblTap"),this.registerColumnOption("cellTapHold")}initialize(){this.initializeExternalEvents(),this.subscribe("column-init",this.initializeColumn.bind(this)),this.subscribe("cell-dblclick",this.cellContentsSelectionFixer.bind(this)),this.subscribe("scroll-horizontal",this.clearTouchWatchers.bind(this)),this.subscribe("scroll-vertical",this.clearTouchWatchers.bind(this))}clearTouchWatchers(){var e=Object.values(this.touchWatchers);e.forEach(t=>{for(let i in t)t[i]=null})}cellContentsSelectionFixer(e,t){var i;if(!(this.table.modExists("edit")&&this.table.modules.edit.currentCell===t)){e.preventDefault();try{document.selection?(i=document.body.createTextRange(),i.moveToElementText(t.getElement()),i.select()):window.getSelection&&(i=document.createRange(),i.selectNode(t.getElement()),window.getSelection().removeAllRanges(),window.getSelection().addRange(i))}catch{}}}initializeExternalEvents(){for(let e in this.eventMap)this.subscriptionChangeExternal(e,this.subscriptionChanged.bind(this,e))}subscriptionChanged(e,t){t?this.subscribers[e]||(this.eventMap[e].includes("-")?(this.subscribers[e]=this.handle.bind(this,e),this.subscribe(this.eventMap[e],this.subscribers[e])):this.subscribeTouchEvents(e)):this.eventMap[e].includes("-")?this.subscribers[e]&&!this.columnSubscribers[e]&&!this.subscribedExternal(e)&&(this.unsubscribe(this.eventMap[e],this.subscribers[e]),delete this.subscribers[e]):this.unsubscribeTouchEvents(e)}subscribeTouchEvents(e){var t=this.eventMap[e];this.touchSubscribers[t+"-touchstart"]||(this.touchSubscribers[t+"-touchstart"]=this.handleTouch.bind(this,t,"start"),this.touchSubscribers[t+"-touchend"]=this.handleTouch.bind(this,t,"end"),this.subscribe(t+"-touchstart",this.touchSubscribers[t+"-touchstart"]),this.subscribe(t+"-touchend",this.touchSubscribers[t+"-touchend"])),this.subscribers[e]=!0}unsubscribeTouchEvents(e){var t=!0,i=this.eventMap[e];if(this.subscribers[e]&&!this.subscribedExternal(e)){delete this.subscribers[e];for(let s in this.eventMap)this.eventMap[s]===i&&this.subscribers[s]&&(t=!1);t&&(this.unsubscribe(i+"-touchstart",this.touchSubscribers[i+"-touchstart"]),this.unsubscribe(i+"-touchend",this.touchSubscribers[i+"-touchend"]),delete this.touchSubscribers[i+"-touchstart"],delete this.touchSubscribers[i+"-touchend"])}}initializeColumn(e){var t=e.definition;for(let i in this.eventMap)t[i]&&(this.subscriptionChanged(i,!0),this.columnSubscribers[i]||(this.columnSubscribers[i]=[]),this.columnSubscribers[i].push(e))}handle(e,t,i){this.dispatchEvent(e,t,i)}handleTouch(e,t,i,s){var n=this.touchWatchers[e];switch(e==="column"&&(e="header"),t){case"start":n.tap=!0,clearTimeout(n.tapHold),n.tapHold=setTimeout(()=>{clearTimeout(n.tapHold),n.tapHold=null,n.tap=null,clearTimeout(n.tapDbl),n.tapDbl=null,this.dispatchEvent(e+"TapHold",i,s)},1e3);break;case"end":n.tap&&(n.tap=null,this.dispatchEvent(e+"Tap",i,s)),n.tapDbl?(clearTimeout(n.tapDbl),n.tapDbl=null,this.dispatchEvent(e+"DblTap",i,s)):n.tapDbl=setTimeout(()=>{clearTimeout(n.tapDbl),n.tapDbl=null},300),clearTimeout(n.tapHold),n.tapHold=null;break}}dispatchEvent(e,t,i){var s=i.getComponent(),n;this.columnSubscribers[e]&&(i instanceof ne?n=i.column.definition[e]:i instanceof U&&(n=i.definition[e]),n&&n(t,s)),this.dispatchExternal(e,t,s)}}b(nt,"moduleName","interaction");var Vi={navPrev:"shift + 9",navNext:9,navUp:38,navDown:40,navLeft:37,navRight:39,scrollPageUp:33,scrollPageDown:34,scrollToStart:36,scrollToEnd:35},Ii={keyBlock:function(l){l.stopPropagation(),l.preventDefault()},scrollPageUp:function(l){var e=this.table.rowManager,t=e.scrollTop-e.element.clientHeight;l.preventDefault(),e.displayRowsCount&&(t>=0?e.element.scrollTop=t:e.scrollToRow(e.getDisplayRows()[0])),this.table.element.focus()},scrollPageDown:function(l){var e=this.table.rowManager,t=e.scrollTop+e.element.clientHeight,i=e.element.scrollHeight;l.preventDefault(),e.displayRowsCount&&(t<=i?e.element.scrollTop=t:e.scrollToRow(e.getDisplayRows()[e.displayRowsCount-1])),this.table.element.focus()},scrollToStart:function(l){var e=this.table.rowManager;l.preventDefault(),e.displayRowsCount&&e.scrollToRow(e.getDisplayRows()[0]),this.table.element.focus()},scrollToEnd:function(l){var e=this.table.rowManager;l.preventDefault(),e.displayRowsCount&&e.scrollToRow(e.getDisplayRows()[e.displayRowsCount-1]),this.table.element.focus()},navPrev:function(l){this.dispatch("keybinding-nav-prev",l)},navNext:function(l){this.dispatch("keybinding-nav-next",l)},navLeft:function(l){this.dispatch("keybinding-nav-left",l)},navRight:function(l){this.dispatch("keybinding-nav-right",l)},navUp:function(l){this.dispatch("keybinding-nav-up",l)},navDown:function(l){this.dispatch("keybinding-nav-down",l)}};const N=class N extends w{constructor(e){super(e),this.watchKeys=null,this.pressedKeys=null,this.keyupBinding=!1,this.keydownBinding=!1,this.registerTableOption("keybindings",{}),this.registerTableOption("tabEndNewRow",!1)}initialize(){var e=this.table.options.keybindings,t={};this.watchKeys={},this.pressedKeys=[],e!==!1&&(Object.assign(t,N.bindings),Object.assign(t,e),this.mapBindings(t),this.bindEvents()),this.subscribe("table-destroy",this.clearBindings.bind(this))}mapBindings(e){for(let t in e)N.actions[t]?e[t]&&(typeof e[t]!="object"&&(e[t]=[e[t]]),e[t].forEach(i=>{var s=Array.isArray(i)?i:[i];s.forEach(n=>{this.mapBinding(t,n)})})):console.warn("Key Binding Error - no such action:",t)}mapBinding(e,t){var i={action:N.actions[e],keys:[],ctrl:!1,shift:!1,meta:!1},s=t.toString().toLowerCase().split(" ").join("").split("+");s.forEach(n=>{switch(n){case"ctrl":i.ctrl=!0;break;case"shift":i.shift=!0;break;case"meta":i.meta=!0;break;default:n=isNaN(n)?n.toUpperCase().charCodeAt(0):parseInt(n),i.keys.push(n),this.watchKeys[n]||(this.watchKeys[n]=[]),this.watchKeys[n].push(i)}})}bindEvents(){var e=this;this.keyupBinding=function(t){var i=t.keyCode,s=e.watchKeys[i];s&&(e.pressedKeys.push(i),s.forEach(function(n){e.checkBinding(t,n)}))},this.keydownBinding=function(t){var i=t.keyCode,s=e.watchKeys[i];if(s){var n=e.pressedKeys.indexOf(i);n>-1&&e.pressedKeys.splice(n,1)}},this.table.element.addEventListener("keydown",this.keyupBinding),this.table.element.addEventListener("keyup",this.keydownBinding)}clearBindings(){this.keyupBinding&&this.table.element.removeEventListener("keydown",this.keyupBinding),this.keydownBinding&&this.table.element.removeEventListener("keyup",this.keydownBinding)}checkBinding(e,t){var i=!0;return e.ctrlKey==t.ctrl&&e.shiftKey==t.shift&&e.metaKey==t.meta?(t.keys.forEach(s=>{var n=this.pressedKeys.indexOf(s);n==-1&&(i=!1)}),i&&t.action.call(this,e),!0):!1}};b(N,"moduleName","keybindings"),b(N,"bindings",Vi),b(N,"actions",Ii);let Te=N;class rt extends w{constructor(e){super(e),this.menuContainer=null,this.nestedMenuBlock=!1,this.currentComponent=null,this.rootPopup=null,this.columnSubscribers={},this.registerTableOption("rowContextMenu",!1),this.registerTableOption("rowClickMenu",!1),this.registerTableOption("rowDblClickMenu",!1),this.registerTableOption("groupContextMenu",!1),this.registerTableOption("groupClickMenu",!1),this.registerTableOption("groupDblClickMenu",!1),this.registerColumnOption("headerContextMenu"),this.registerColumnOption("headerClickMenu"),this.registerColumnOption("headerDblClickMenu"),this.registerColumnOption("headerMenu"),this.registerColumnOption("headerMenuIcon"),this.registerColumnOption("contextMenu"),this.registerColumnOption("clickMenu"),this.registerColumnOption("dblClickMenu")}initialize(){this.deprecatedOptionsCheck(),this.initializeRowWatchers(),this.initializeGroupWatchers(),this.subscribe("column-init",this.initializeColumn.bind(this))}deprecatedOptionsCheck(){}initializeRowWatchers(){this.table.options.rowContextMenu&&(this.subscribe("row-contextmenu",this.loadMenuEvent.bind(this,this.table.options.rowContextMenu)),this.table.on("rowTapHold",this.loadMenuEvent.bind(this,this.table.options.rowContextMenu))),this.table.options.rowClickMenu&&this.subscribe("row-click",this.loadMenuEvent.bind(this,this.table.options.rowClickMenu)),this.table.options.rowDblClickMenu&&this.subscribe("row-dblclick",this.loadMenuEvent.bind(this,this.table.options.rowDblClickMenu))}initializeGroupWatchers(){this.table.options.groupContextMenu&&(this.subscribe("group-contextmenu",this.loadMenuEvent.bind(this,this.table.options.groupContextMenu)),this.table.on("groupTapHold",this.loadMenuEvent.bind(this,this.table.options.groupContextMenu))),this.table.options.groupClickMenu&&this.subscribe("group-click",this.loadMenuEvent.bind(this,this.table.options.groupClickMenu)),this.table.options.groupDblClickMenu&&this.subscribe("group-dblclick",this.loadMenuEvent.bind(this,this.table.options.groupDblClickMenu))}initializeColumn(e){var t=e.definition;t.headerContextMenu&&!this.columnSubscribers.headerContextMenu&&(this.columnSubscribers.headerContextMenu=this.loadMenuTableColumnEvent.bind(this,"headerContextMenu"),this.subscribe("column-contextmenu",this.columnSubscribers.headerContextMenu),this.table.on("headerTapHold",this.loadMenuTableColumnEvent.bind(this,"headerContextMenu"))),t.headerClickMenu&&!this.columnSubscribers.headerClickMenu&&(this.columnSubscribers.headerClickMenu=this.loadMenuTableColumnEvent.bind(this,"headerClickMenu"),this.subscribe("column-click",this.columnSubscribers.headerClickMenu)),t.headerDblClickMenu&&!this.columnSubscribers.headerDblClickMenu&&(this.columnSubscribers.headerDblClickMenu=this.loadMenuTableColumnEvent.bind(this,"headerDblClickMenu"),this.subscribe("column-dblclick",this.columnSubscribers.headerDblClickMenu)),t.headerMenu&&this.initializeColumnHeaderMenu(e),t.contextMenu&&!this.columnSubscribers.contextMenu&&(this.columnSubscribers.contextMenu=this.loadMenuTableCellEvent.bind(this,"contextMenu"),this.subscribe("cell-contextmenu",this.columnSubscribers.contextMenu),this.table.on("cellTapHold",this.loadMenuTableCellEvent.bind(this,"contextMenu"))),t.clickMenu&&!this.columnSubscribers.clickMenu&&(this.columnSubscribers.clickMenu=this.loadMenuTableCellEvent.bind(this,"clickMenu"),this.subscribe("cell-click",this.columnSubscribers.clickMenu)),t.dblClickMenu&&!this.columnSubscribers.dblClickMenu&&(this.columnSubscribers.dblClickMenu=this.loadMenuTableCellEvent.bind(this,"dblClickMenu"),this.subscribe("cell-dblclick",this.columnSubscribers.dblClickMenu))}initializeColumnHeaderMenu(e){var t=e.definition.headerMenuIcon,i;i=document.createElement("span"),i.classList.add("tabulator-header-popup-button"),t?(typeof t=="function"&&(t=t(e.getComponent())),t instanceof HTMLElement?i.appendChild(t):i.innerHTML=t):i.innerHTML="⋮",i.addEventListener("click",s=>{s.stopPropagation(),s.preventDefault(),this.loadMenuEvent(e.definition.headerMenu,s,e)}),e.titleElement.insertBefore(i,e.titleElement.firstChild)}loadMenuTableCellEvent(e,t,i){i._cell&&(i=i._cell),i.column.definition[e]&&this.loadMenuEvent(i.column.definition[e],t,i)}loadMenuTableColumnEvent(e,t,i){i._column&&(i=i._column),i.definition[e]&&this.loadMenuEvent(i.definition[e],t,i)}loadMenuEvent(e,t,i){i._group?i=i._group:i._row&&(i=i._row),e=typeof e=="function"?e.call(this.table,t,i.getComponent()):e,this.loadMenu(t,i,e)}loadMenu(e,t,i,s,n){var r=!(e instanceof MouseEvent),o=document.createElement("div"),a;if(o.classList.add("tabulator-menu"),r||e.preventDefault(),!(!i||!i.length)){if(s)a=n.child(o);else{if(this.nestedMenuBlock){if(this.rootPopup)return}else this.nestedMenuBlock=setTimeout(()=>{this.nestedMenuBlock=!1},100);this.rootPopup&&this.rootPopup.hide(),this.rootPopup=a=this.popup(o)}i.forEach(h=>{var d=document.createElement("div"),u=h.label,c=h.disabled;h.separator?d.classList.add("tabulator-menu-separator"):(d.classList.add("tabulator-menu-item"),typeof u=="function"&&(u=u.call(this.table,t.getComponent())),u instanceof Node?d.appendChild(u):d.innerHTML=u,typeof c=="function"&&(c=c.call(this.table,t.getComponent())),c?(d.classList.add("tabulator-menu-item-disabled"),d.addEventListener("click",f=>{f.stopPropagation()})):h.menu&&h.menu.length?d.addEventListener("click",f=>{f.stopPropagation(),this.loadMenu(f,t,h.menu,d,a)}):h.action&&d.addEventListener("click",f=>{h.action(f,t.getComponent())}),h.menu&&h.menu.length&&d.classList.add("tabulator-menu-item-submenu")),o.appendChild(d)}),o.addEventListener("click",h=>{this.rootPopup&&this.rootPopup.hide()}),a.show(s||e),a===this.rootPopup&&(this.rootPopup.hideOnBlur(()=>{this.rootPopup=null,this.currentComponent&&(this.dispatch("menu-closed",i,a),this.dispatchExternal("menuClosed",this.currentComponent.getComponent()),this.currentComponent=null)}),this.currentComponent=t,this.dispatch("menu-opened",i,a),this.dispatchExternal("menuOpened",t.getComponent()))}}}b(rt,"moduleName","menu");class ot extends w{constructor(e){super(e),this.placeholderElement=this.createPlaceholderElement(),this.hoverElement=!1,this.checkTimeout=!1,this.checkPeriod=250,this.moving=!1,this.toCol=!1,this.toColAfter=!1,this.startX=0,this.autoScrollMargin=40,this.autoScrollStep=5,this.autoScrollTimeout=!1,this.touchMove=!1,this.moveHover=this.moveHover.bind(this),this.endMove=this.endMove.bind(this),this.registerTableOption("movableColumns",!1)}createPlaceholderElement(){var e=document.createElement("div");return e.classList.add("tabulator-col"),e.classList.add("tabulator-col-placeholder"),e}initialize(){this.table.options.movableColumns&&(this.subscribe("column-init",this.initializeColumn.bind(this)),this.subscribe("alert-show",this.abortMove.bind(this)))}abortMove(){clearTimeout(this.checkTimeout)}initializeColumn(e){var t=this,i={},s;!e.modules.frozen&&!e.isGroup&&!e.isRowHeader&&(s=e.getElement(),i.mousemove=(function(n){e.parent===t.moving.parent&&((t.touchMove?n.touches[0].pageX:n.pageX)-x.elOffset(s).left+t.table.columnManager.contentsElement.scrollLeft>e.getWidth()/2?(t.toCol!==e||!t.toColAfter)&&(s.parentNode.insertBefore(t.placeholderElement,s.nextSibling),t.moveColumn(e,!0)):(t.toCol!==e||t.toColAfter)&&(s.parentNode.insertBefore(t.placeholderElement,s),t.moveColumn(e,!1)))}).bind(t),s.addEventListener("mousedown",function(n){t.touchMove=!1,n.which===1&&(t.checkTimeout=setTimeout(function(){t.startMove(n,e)},t.checkPeriod))}),s.addEventListener("mouseup",function(n){n.which===1&&t.checkTimeout&&clearTimeout(t.checkTimeout)}),t.bindTouchEvents(e)),e.modules.moveColumn=i}bindTouchEvents(e){var t=e.getElement(),i=!1,s,n,r,o,a,h;t.addEventListener("touchstart",d=>{this.checkTimeout=setTimeout(()=>{this.touchMove=!0,s=e.nextColumn(),r=s?s.getWidth()/2:0,n=e.prevColumn(),o=n?n.getWidth()/2:0,a=0,h=0,i=!1,this.startMove(d,e)},this.checkPeriod)},{passive:!0}),t.addEventListener("touchmove",d=>{var u,c;this.moving&&(this.moveHover(d),i||(i=d.touches[0].pageX),u=d.touches[0].pageX-i,u>0?s&&u-a>r&&(c=s,c!==e&&(i=d.touches[0].pageX,c.getElement().parentNode.insertBefore(this.placeholderElement,c.getElement().nextSibling),this.moveColumn(c,!0))):n&&-u-h>o&&(c=n,c!==e&&(i=d.touches[0].pageX,c.getElement().parentNode.insertBefore(this.placeholderElement,c.getElement()),this.moveColumn(c,!1))),c&&(s=c.nextColumn(),a=r,r=s?s.getWidth()/2:0,n=c.prevColumn(),h=o,o=n?n.getWidth()/2:0))},{passive:!0}),t.addEventListener("touchend",d=>{this.checkTimeout&&clearTimeout(this.checkTimeout),this.moving&&this.endMove(d)})}startMove(e,t){var i=t.getElement(),s=this.table.columnManager.getContentsElement(),n=this.table.columnManager.getHeadersElement();this.table.modules.selectRange&&this.table.modules.selectRange.columnSelection&&this.table.modules.selectRange.mousedown&&this.table.modules.selectRange.selecting==="column"||(this.moving=t,this.startX=(this.touchMove?e.touches[0].pageX:e.pageX)-x.elOffset(i).left,this.table.element.classList.add("tabulator-block-select"),this.placeholderElement.style.width=t.getWidth()+"px",this.placeholderElement.style.height=t.getHeight()+"px",i.parentNode.insertBefore(this.placeholderElement,i),i.parentNode.removeChild(i),this.hoverElement=i.cloneNode(!0),this.hoverElement.classList.add("tabulator-moving"),s.appendChild(this.hoverElement),this.hoverElement.style.left="0",this.hoverElement.style.bottom=s.clientHeight-n.offsetHeight+"px",this.touchMove||(this._bindMouseMove(),document.body.addEventListener("mousemove",this.moveHover),document.body.addEventListener("mouseup",this.endMove)),this.moveHover(e),this.dispatch("column-moving",e,this.moving))}_bindMouseMove(){this.table.columnManager.columnsByIndex.forEach(function(e){e.modules.moveColumn.mousemove&&e.getElement().addEventListener("mousemove",e.modules.moveColumn.mousemove)})}_unbindMouseMove(){this.table.columnManager.columnsByIndex.forEach(function(e){e.modules.moveColumn.mousemove&&e.getElement().removeEventListener("mousemove",e.modules.moveColumn.mousemove)})}moveColumn(e,t){var i=this.moving.getCells();this.toCol=e,this.toColAfter=t,t?e.getCells().forEach(function(s,n){var r=s.getElement(!0);r.parentNode&&i[n]&&r.parentNode.insertBefore(i[n].getElement(),r.nextSibling)}):e.getCells().forEach(function(s,n){var r=s.getElement(!0);r.parentNode&&i[n]&&r.parentNode.insertBefore(i[n].getElement(),r)})}endMove(e){(e.which===1||this.touchMove)&&(this._unbindMouseMove(),this.placeholderElement.parentNode.insertBefore(this.moving.getElement(),this.placeholderElement.nextSibling),this.placeholderElement.parentNode.removeChild(this.placeholderElement),this.hoverElement.parentNode.removeChild(this.hoverElement),this.table.element.classList.remove("tabulator-block-select"),this.toCol&&this.table.columnManager.moveColumnActual(this.moving,this.toCol,this.toColAfter),this.moving=!1,this.toCol=!1,this.toColAfter=!1,this.touchMove||(document.body.removeEventListener("mousemove",this.moveHover),document.body.removeEventListener("mouseup",this.endMove)))}moveHover(e){var t=this.table.columnManager.getContentsElement(),i=t.scrollLeft,s=(this.touchMove?e.touches[0].pageX:e.pageX)-x.elOffset(t).left+i,n;this.hoverElement.style.left=s-this.startX+"px",s-i{n=Math.max(0,i-5),this.table.rowManager.getElement().scrollLeft=n,this.autoScrollTimeout=!1},1))),i+t.clientWidth-s{n=Math.min(t.clientWidth,i+5),this.table.rowManager.getElement().scrollLeft=n,this.autoScrollTimeout=!1},1)))}}b(ot,"moduleName","moveColumn");var Ni={delete:function(l,e,t){l.delete()}},Wi={insert:function(l,e,t){return this.table.addRow(l.getData(),void 0,e),!0},add:function(l,e,t){return this.table.addRow(l.getData()),!0},update:function(l,e,t){return e?(e.update(l.getData()),!0):!1},replace:function(l,e,t){return e?(this.table.addRow(l.getData(),void 0,e),e.delete(),!0):!1}};const G=class G extends w{constructor(e){super(e),this.placeholderElement=this.createPlaceholderElement(),this.hoverElement=!1,this.checkTimeout=!1,this.checkPeriod=150,this.moving=!1,this.toRow=!1,this.toRowAfter=!1,this.hasHandle=!1,this.startY=0,this.startX=0,this.moveHover=this.moveHover.bind(this),this.endMove=this.endMove.bind(this),this.tableRowDropEvent=!1,this.touchMove=!1,this.connection=!1,this.connectionSelectorsTables=!1,this.connectionSelectorsElements=!1,this.connectionElements=[],this.connections=[],this.connectedTable=!1,this.connectedRow=!1,this.registerTableOption("movableRows",!1),this.registerTableOption("movableRowsConnectedTables",!1),this.registerTableOption("movableRowsConnectedElements",!1),this.registerTableOption("movableRowsSender",!1),this.registerTableOption("movableRowsReceiver","insert"),this.registerColumnOption("rowHandle")}createPlaceholderElement(){var e=document.createElement("div");return e.classList.add("tabulator-row"),e.classList.add("tabulator-row-placeholder"),e}initialize(){this.table.options.movableRows&&(this.connectionSelectorsTables=this.table.options.movableRowsConnectedTables,this.connectionSelectorsElements=this.table.options.movableRowsConnectedElements,this.connection=this.connectionSelectorsTables||this.connectionSelectorsElements,this.subscribe("cell-init",this.initializeCell.bind(this)),this.subscribe("column-init",this.initializeColumn.bind(this)),this.subscribe("row-init",this.initializeRow.bind(this)))}initializeGroupHeader(e){var t=this,i={};i.mouseup=(function(s){t.tableRowDrop(s,e)}).bind(t),i.mousemove=(function(s){var n;s.pageY-x.elOffset(e.element).top+t.table.rowManager.element.scrollTop>e.getHeight()/2?(t.toRow!==e||!t.toRowAfter)&&(n=e.getElement(),n.parentNode.insertBefore(t.placeholderElement,n.nextSibling),t.moveRow(e,!0)):(t.toRow!==e||t.toRowAfter)&&(n=e.getElement(),n.previousSibling&&(n.parentNode.insertBefore(t.placeholderElement,n),t.moveRow(e,!1)))}).bind(t),e.modules.moveRow=i}initializeRow(e){var t=this,i={},s;i.mouseup=(function(n){t.tableRowDrop(n,e)}).bind(t),i.mousemove=(function(n){var r=e.getElement();n.pageY-x.elOffset(r).top+t.table.rowManager.element.scrollTop>e.getHeight()/2?(t.toRow!==e||!t.toRowAfter)&&(r.parentNode.insertBefore(t.placeholderElement,r.nextSibling),t.moveRow(e,!0)):(t.toRow!==e||t.toRowAfter)&&(r.parentNode.insertBefore(t.placeholderElement,r),t.moveRow(e,!1))}).bind(t),this.hasHandle||(s=e.getElement(),s.addEventListener("mousedown",function(n){n.which===1&&(t.checkTimeout=setTimeout(function(){t.startMove(n,e)},t.checkPeriod))}),s.addEventListener("mouseup",function(n){n.which===1&&t.checkTimeout&&clearTimeout(t.checkTimeout)}),this.bindTouchEvents(e,e.getElement())),e.modules.moveRow=i}initializeColumn(e){e.definition.rowHandle&&this.table.options.movableRows!==!1&&(this.hasHandle=!0)}initializeCell(e){if(e.column.definition.rowHandle&&this.table.options.movableRows!==!1){var t=this,i=e.getElement(!0);i.addEventListener("mousedown",function(s){s.which===1&&(t.checkTimeout=setTimeout(function(){t.startMove(s,e.row)},t.checkPeriod))}),i.addEventListener("mouseup",function(s){s.which===1&&t.checkTimeout&&clearTimeout(t.checkTimeout)}),this.bindTouchEvents(e.row,i)}}bindTouchEvents(e,t){var i=!1,s,n,r,o,a,h;t.addEventListener("touchstart",d=>{this.checkTimeout=setTimeout(()=>{this.touchMove=!0,s=e.nextRow(),r=s?s.getHeight()/2:0,n=e.prevRow(),o=n?n.getHeight()/2:0,a=0,h=0,i=!1,this.startMove(d,e)},this.checkPeriod)},{passive:!0}),this.moving,this.toRow,this.toRowAfter,t.addEventListener("touchmove",d=>{var u,c;this.moving&&(d.preventDefault(),this.moveHover(d),i||(i=d.touches[0].pageY),u=d.touches[0].pageY-i,u>0?s&&u-a>r&&(c=s,c!==e&&(i=d.touches[0].pageY,c.getElement().parentNode.insertBefore(this.placeholderElement,c.getElement().nextSibling),this.moveRow(c,!0))):n&&-u-h>o&&(c=n,c!==e&&(i=d.touches[0].pageY,c.getElement().parentNode.insertBefore(this.placeholderElement,c.getElement()),this.moveRow(c,!1))),c&&(s=c.nextRow(),a=r,r=s?s.getHeight()/2:0,n=c.prevRow(),h=o,o=n?n.getHeight()/2:0))}),t.addEventListener("touchend",d=>{this.checkTimeout&&clearTimeout(this.checkTimeout),this.moving&&(this.endMove(d),this.touchMove=!1)})}_bindMouseMove(){this.table.rowManager.getDisplayRows().forEach(e=>{(e.type==="row"||e.type==="group")&&e.modules.moveRow&&e.modules.moveRow.mousemove&&e.getElement().addEventListener("mousemove",e.modules.moveRow.mousemove)})}_unbindMouseMove(){this.table.rowManager.getDisplayRows().forEach(e=>{(e.type==="row"||e.type==="group")&&e.modules.moveRow&&e.modules.moveRow.mousemove&&e.getElement().removeEventListener("mousemove",e.modules.moveRow.mousemove)})}startMove(e,t){var i=t.getElement();this.setStartPosition(e,t),this.moving=t,this.table.element.classList.add("tabulator-block-select"),this.placeholderElement.style.width=t.getWidth()+"px",this.placeholderElement.style.height=t.getHeight()+"px",this.connection?(this.table.element.classList.add("tabulator-movingrow-sending"),this.connectToTables(t)):(i.parentNode.insertBefore(this.placeholderElement,i),i.parentNode.removeChild(i)),this.hoverElement=i.cloneNode(!0),this.hoverElement.classList.add("tabulator-moving"),this.connection?(document.body.appendChild(this.hoverElement),this.hoverElement.style.left="0",this.hoverElement.style.top="0",this.hoverElement.style.width=this.table.element.clientWidth+"px",this.hoverElement.style.whiteSpace="nowrap",this.hoverElement.style.overflow="hidden",this.hoverElement.style.pointerEvents="none"):(this.table.rowManager.getTableElement().appendChild(this.hoverElement),this.hoverElement.style.left="0",this.hoverElement.style.top="0",this._bindMouseMove()),document.body.addEventListener("mousemove",this.moveHover),document.body.addEventListener("mouseup",this.endMove),this.dispatchExternal("rowMoving",t.getComponent()),this.moveHover(e)}setStartPosition(e,t){var i=this.touchMove?e.touches[0].pageX:e.pageX,s=this.touchMove?e.touches[0].pageY:e.pageY,n,r;n=t.getElement(),this.connection?(r=n.getBoundingClientRect(),this.startX=r.left-i+window.pageXOffset,this.startY=r.top-s+window.pageYOffset):this.startY=s-n.getBoundingClientRect().top}endMove(e){(!e||e.which===1||this.touchMove)&&(this._unbindMouseMove(),this.connection||(this.placeholderElement.parentNode.insertBefore(this.moving.getElement(),this.placeholderElement.nextSibling),this.placeholderElement.parentNode.removeChild(this.placeholderElement)),this.hoverElement.parentNode.removeChild(this.hoverElement),this.table.element.classList.remove("tabulator-block-select"),this.toRow?this.table.rowManager.moveRow(this.moving,this.toRow,this.toRowAfter):this.dispatchExternal("rowMoveCancelled",this.moving.getComponent()),this.moving=!1,this.toRow=!1,this.toRowAfter=!1,document.body.removeEventListener("mousemove",this.moveHover),document.body.removeEventListener("mouseup",this.endMove),this.connection&&(this.table.element.classList.remove("tabulator-movingrow-sending"),this.disconnectFromTables()))}moveRow(e,t){this.toRow=e,this.toRowAfter=t}moveHover(e){this.connection?this.moveHoverConnections.call(this,e):this.moveHoverTable.call(this,e)}moveHoverTable(e){var t=this.table.rowManager.getElement(),i=t.scrollTop,s=(this.touchMove?e.touches[0].pageY:e.pageY)-t.getBoundingClientRect().top+i;this.hoverElement.style.top=Math.min(s-this.startY,this.table.rowManager.element.scrollHeight-this.hoverElement.offsetHeight)+"px"}moveHoverConnections(e){this.hoverElement.style.left=this.startX+(this.touchMove?e.touches[0].pageX:e.pageX)+"px",this.hoverElement.style.top=this.startY+(this.touchMove?e.touches[0].pageY:e.pageY)+"px"}elementRowDrop(e,t,i){this.dispatchExternal("movableRowsElementDrop",e,t,i?i.getComponent():!1)}connectToTables(e){var t;this.connectionSelectorsTables&&(t=this.commsConnections(this.connectionSelectorsTables),this.dispatchExternal("movableRowsSendingStart",t),this.commsSend(this.connectionSelectorsTables,"moveRow","connect",{row:e})),this.connectionSelectorsElements&&(this.connectionElements=[],Array.isArray(this.connectionSelectorsElements)||(this.connectionSelectorsElements=[this.connectionSelectorsElements]),this.connectionSelectorsElements.forEach(i=>{typeof i=="string"?this.connectionElements=this.connectionElements.concat(Array.prototype.slice.call(document.querySelectorAll(i))):this.connectionElements.push(i)}),this.connectionElements.forEach(i=>{var s=n=>{this.elementRowDrop(n,i,this.moving)};i.addEventListener("mouseup",s),i.tabulatorElementDropEvent=s,i.classList.add("tabulator-movingrow-receiving")}))}disconnectFromTables(){var e;this.connectionSelectorsTables&&(e=this.commsConnections(this.connectionSelectorsTables),this.dispatchExternal("movableRowsSendingStop",e),this.commsSend(this.connectionSelectorsTables,"moveRow","disconnect")),this.connectionElements.forEach(t=>{t.classList.remove("tabulator-movingrow-receiving"),t.removeEventListener("mouseup",t.tabulatorElementDropEvent),delete t.tabulatorElementDropEvent})}connect(e,t){return this.connectedTable?(console.warn("Move Row Error - Table cannot accept connection, already connected to table:",this.connectedTable),!1):(this.connectedTable=e,this.connectedRow=t,this.table.element.classList.add("tabulator-movingrow-receiving"),this.table.rowManager.getDisplayRows().forEach(i=>{i.type==="row"&&i.modules.moveRow&&i.modules.moveRow.mouseup&&i.getElement().addEventListener("mouseup",i.modules.moveRow.mouseup)}),this.tableRowDropEvent=this.tableRowDrop.bind(this),this.table.element.addEventListener("mouseup",this.tableRowDropEvent),this.dispatchExternal("movableRowsReceivingStart",t,e),!0)}disconnect(e){e===this.connectedTable?(this.connectedTable=!1,this.connectedRow=!1,this.table.element.classList.remove("tabulator-movingrow-receiving"),this.table.rowManager.getDisplayRows().forEach(t=>{t.type==="row"&&t.modules.moveRow&&t.modules.moveRow.mouseup&&t.getElement().removeEventListener("mouseup",t.modules.moveRow.mouseup)}),this.table.element.removeEventListener("mouseup",this.tableRowDropEvent),this.dispatchExternal("movableRowsReceivingStop",e)):console.warn("Move Row Error - trying to disconnect from non connected table")}dropComplete(e,t,i){var s=!1;if(i){switch(typeof this.table.options.movableRowsSender){case"string":s=G.senders[this.table.options.movableRowsSender];break;case"function":s=this.table.options.movableRowsSender;break}s?s.call(this,this.moving?this.moving.getComponent():void 0,t?t.getComponent():void 0,e):this.table.options.movableRowsSender&&console.warn("Mover Row Error - no matching sender found:",this.table.options.movableRowsSender),this.dispatchExternal("movableRowsSent",this.moving.getComponent(),t?t.getComponent():void 0,e)}else this.dispatchExternal("movableRowsSentFailed",this.moving.getComponent(),t?t.getComponent():void 0,e);this.endMove()}tableRowDrop(e,t){var i=!1,s=!1;switch(e.stopImmediatePropagation(),typeof this.table.options.movableRowsReceiver){case"string":i=G.receivers[this.table.options.movableRowsReceiver];break;case"function":i=this.table.options.movableRowsReceiver;break}i?s=i.call(this,this.connectedRow.getComponent(),t?t.getComponent():void 0,this.connectedTable):console.warn("Mover Row Error - no matching receiver found:",this.table.options.movableRowsReceiver),s?this.dispatchExternal("movableRowsReceived",this.connectedRow.getComponent(),t?t.getComponent():void 0,this.connectedTable):this.dispatchExternal("movableRowsReceivedFailed",this.connectedRow.getComponent(),t?t.getComponent():void 0,this.connectedTable),this.commsSend(this.connectedTable,"moveRow","dropcomplete",{row:t,success:s})}commsReceived(e,t,i){switch(t){case"connect":return this.connect(e,i.row);case"disconnect":return this.disconnect(e);case"dropcomplete":return this.dropComplete(e,i.row,i.success)}}};b(G,"moduleName","moveRow"),b(G,"senders",Ni),b(G,"receivers",Wi);let ke=G;var Gi={};const Y=class Y extends w{constructor(e){super(e),this.allowedTypes=["","data","edit","clipboard"],this.enabled=!0,this.registerColumnOption("mutator"),this.registerColumnOption("mutatorParams"),this.registerColumnOption("mutatorData"),this.registerColumnOption("mutatorDataParams"),this.registerColumnOption("mutatorEdit"),this.registerColumnOption("mutatorEditParams"),this.registerColumnOption("mutatorClipboard"),this.registerColumnOption("mutatorClipboardParams"),this.registerColumnOption("mutateLink")}initialize(){this.subscribe("cell-value-changing",this.transformCell.bind(this)),this.subscribe("cell-value-changed",this.mutateLink.bind(this)),this.subscribe("column-layout",this.initializeColumn.bind(this)),this.subscribe("row-data-init-before",this.rowDataChanged.bind(this)),this.subscribe("row-data-changing",this.rowDataChanged.bind(this))}rowDataChanged(e,t,i){return this.transformRow(t,"data",i)}initializeColumn(e){var t=!1,i={};this.allowedTypes.forEach(s=>{var n="mutator"+(s.charAt(0).toUpperCase()+s.slice(1)),r;e.definition[n]&&(r=this.lookupMutator(e.definition[n]),r&&(t=!0,i[n]={mutator:r,params:e.definition[n+"Params"]||{}}))}),t&&(e.modules.mutate=i)}lookupMutator(e){var t=!1;switch(typeof e){case"string":Y.mutators[e]?t=Y.mutators[e]:console.warn("Mutator Error - No such mutator found, ignoring: ",e);break;case"function":t=e;break}return t}transformRow(e,t,i){var s="mutator"+(t.charAt(0).toUpperCase()+t.slice(1)),n;return this.enabled&&this.table.columnManager.traverse(r=>{var o,a,h;r.modules.mutate&&(o=r.modules.mutate[s]||r.modules.mutate.mutator||!1,o&&(n=r.getFieldValue(typeof i<"u"?i:e),(t=="data"&&!i||typeof n<"u")&&(h=r.getComponent(),a=typeof o.params=="function"?o.params(n,e,t,h):o.params,r.setFieldValue(e,o.mutator(n,e,t,a,h)))))}),e}transformCell(e,t){if(e.column.modules.mutate){var i=e.column.modules.mutate.mutatorEdit||e.column.modules.mutate.mutator||!1,s={};if(i)return s=Object.assign(s,e.row.getData()),e.column.setFieldValue(s,t),i.mutator(t,s,"edit",i.params,e.getComponent())}return t}mutateLink(e){var t=e.column.definition.mutateLink;t&&(Array.isArray(t)||(t=[t]),t.forEach(i=>{var s=e.row.getCell(i);s&&s.setValue(s.getValue(),!0,!0)}))}enable(){this.enabled=!0}disable(){this.enabled=!1}};b(Y,"moduleName","mutator"),b(Y,"mutators",Gi);let Me=Y;function ji(l,e,t,i,s){var n=document.createElement("span"),r=document.createElement("span"),o=document.createElement("span"),a=document.createElement("span"),h=document.createElement("span"),d=document.createElement("span");return this.table.modules.localize.langBind("pagination|counter|showing",u=>{r.innerHTML=u}),this.table.modules.localize.langBind("pagination|counter|of",u=>{a.innerHTML=u}),this.table.modules.localize.langBind("pagination|counter|rows",u=>{d.innerHTML=u}),i?(o.innerHTML=" "+e+"-"+Math.min(e+l-1,i)+" ",h.innerHTML=" "+i+" ",n.appendChild(r),n.appendChild(o),n.appendChild(a),n.appendChild(h),n.appendChild(d)):(o.innerHTML=" 0 ",n.appendChild(r),n.appendChild(o),n.appendChild(d)),n}function Ui(l,e,t,i,s){var n=document.createElement("span"),r=document.createElement("span"),o=document.createElement("span"),a=document.createElement("span"),h=document.createElement("span"),d=document.createElement("span");return this.table.modules.localize.langBind("pagination|counter|showing",u=>{r.innerHTML=u}),o.innerHTML=" "+t+" ",this.table.modules.localize.langBind("pagination|counter|of",u=>{a.innerHTML=u}),h.innerHTML=" "+s+" ",this.table.modules.localize.langBind("pagination|counter|pages",u=>{d.innerHTML=u}),n.appendChild(r),n.appendChild(o),n.appendChild(a),n.appendChild(h),n.appendChild(d),n}var Xi={rows:ji,pages:Ui};const te=class te extends w{constructor(e){super(e),this.mode="local",this.progressiveLoad=!1,this.element=null,this.pageCounterElement=null,this.pageCounter=null,this.size=0,this.page=1,this.count=5,this.max=1,this.remoteRowCountEstimate=null,this.initialLoad=!0,this.dataChanging=!1,this.pageSizes=[],this.registerTableOption("pagination",!1),this.registerTableOption("paginationMode","local"),this.registerTableOption("paginationSize",!1),this.registerTableOption("paginationInitialPage",1),this.registerTableOption("paginationCounter",!1),this.registerTableOption("paginationCounterElement",!1),this.registerTableOption("paginationButtonCount",5),this.registerTableOption("paginationSizeSelector",!1),this.registerTableOption("paginationElement",!1),this.registerTableOption("paginationAddRow","page"),this.registerTableOption("progressiveLoad",!1),this.registerTableOption("progressiveLoadDelay",0),this.registerTableOption("progressiveLoadScrollMargin",0),this.registerTableFunction("setMaxPage",this.setMaxPage.bind(this)),this.registerTableFunction("setPage",this.setPage.bind(this)),this.registerTableFunction("setPageToRow",this.userSetPageToRow.bind(this)),this.registerTableFunction("setPageSize",this.userSetPageSize.bind(this)),this.registerTableFunction("getPageSize",this.getPageSize.bind(this)),this.registerTableFunction("previousPage",this.previousPage.bind(this)),this.registerTableFunction("nextPage",this.nextPage.bind(this)),this.registerTableFunction("getPage",this.getPage.bind(this)),this.registerTableFunction("getPageMax",this.getPageMax.bind(this)),this.registerComponentFunction("row","pageTo",this.setPageToRow.bind(this))}initialize(){this.table.options.pagination?(this.subscribe("row-deleted",this.rowsUpdated.bind(this)),this.subscribe("row-added",this.rowsUpdated.bind(this)),this.subscribe("data-processed",this.initialLoadComplete.bind(this)),this.subscribe("table-built",this.calculatePageSizes.bind(this)),this.subscribe("footer-redraw",this.footerRedraw.bind(this)),this.table.options.paginationAddRow=="page"&&this.subscribe("row-adding-position",this.rowAddingPosition.bind(this)),this.table.options.paginationMode==="remote"&&(this.subscribe("data-params",this.remotePageParams.bind(this)),this.subscribe("data-loaded",this._parseRemoteData.bind(this))),this.table.options.progressiveLoad&&console.error("Progressive Load Error - Pagination and progressive load cannot be used at the same time"),this.registerDisplayHandler(this.restOnRenderBefore.bind(this),40),this.registerDisplayHandler(this.getRows.bind(this),50),this.createElements(),this.initializePageCounter(),this.initializePaginator()):this.table.options.progressiveLoad&&(this.subscribe("data-params",this.remotePageParams.bind(this)),this.subscribe("data-loaded",this._parseRemoteData.bind(this)),this.subscribe("table-built",this.calculatePageSizes.bind(this)),this.subscribe("data-processed",this.initialLoadComplete.bind(this)),this.initializeProgressive(this.table.options.progressiveLoad),this.table.options.progressiveLoad==="scroll"&&this.subscribe("scroll-vertical",this.scrollVertical.bind(this)))}rowAddingPosition(e,t){var i=this.table.rowManager,s=i.getDisplayRows(),n;return t?s.length?n=s[0]:i.activeRows.length&&(n=i.activeRows[i.activeRows.length-1],t=!1):s.length&&(n=s[s.length-1],t=!(s.length{}))}restOnRenderBefore(e,t){return t||this.mode==="local"&&this.reset(),e}rowsUpdated(){this.refreshData(!0,"all")}createElements(){var e;this.element=document.createElement("span"),this.element.classList.add("tabulator-paginator"),this.pagesElement=document.createElement("span"),this.pagesElement.classList.add("tabulator-pages"),e=document.createElement("button"),e.classList.add("tabulator-page"),e.setAttribute("type","button"),e.setAttribute("role","button"),e.setAttribute("aria-label",""),e.setAttribute("title",""),this.firstBut=e.cloneNode(!0),this.firstBut.setAttribute("data-page","first"),this.prevBut=e.cloneNode(!0),this.prevBut.setAttribute("data-page","prev"),this.nextBut=e.cloneNode(!0),this.nextBut.setAttribute("data-page","next"),this.lastBut=e.cloneNode(!0),this.lastBut.setAttribute("data-page","last"),this.table.options.paginationSizeSelector&&(this.pageSizeSelect=document.createElement("select"),this.pageSizeSelect.classList.add("tabulator-page-size"))}generatePageSizeSelectList(){var e=[];if(this.pageSizeSelect){if(Array.isArray(this.table.options.paginationSizeSelector))e=this.table.options.paginationSizeSelector,this.pageSizes=e,this.pageSizes.indexOf(this.size)==-1&&e.unshift(this.size);else if(this.pageSizes.indexOf(this.size)==-1){e=[];for(let t=1;t<5;t++)e.push(this.size*t);this.pageSizes=e}else e=this.pageSizes;for(;this.pageSizeSelect.firstChild;)this.pageSizeSelect.removeChild(this.pageSizeSelect.firstChild);e.forEach(t=>{var i=document.createElement("option");i.value=t,t===!0?this.langBind("pagination|all",function(s){i.innerHTML=s}):i.innerHTML=t,this.pageSizeSelect.appendChild(i)}),this.pageSizeSelect.value=this.size}}initializePageCounter(){var e=this.table.options.paginationCounter,t=null;e&&(typeof e=="function"?t=e:t=te.pageCounters[e],t?(this.pageCounter=t,this.pageCounterElement=document.createElement("span"),this.pageCounterElement.classList.add("tabulator-page-counter")):console.warn("Pagination Error - No such page counter found: ",e))}initializePaginator(e){var t,i;e||(this.langBind("pagination|first",s=>{this.firstBut.innerHTML=s}),this.langBind("pagination|first_title",s=>{this.firstBut.setAttribute("aria-label",s),this.firstBut.setAttribute("title",s)}),this.langBind("pagination|prev",s=>{this.prevBut.innerHTML=s}),this.langBind("pagination|prev_title",s=>{this.prevBut.setAttribute("aria-label",s),this.prevBut.setAttribute("title",s)}),this.langBind("pagination|next",s=>{this.nextBut.innerHTML=s}),this.langBind("pagination|next_title",s=>{this.nextBut.setAttribute("aria-label",s),this.nextBut.setAttribute("title",s)}),this.langBind("pagination|last",s=>{this.lastBut.innerHTML=s}),this.langBind("pagination|last_title",s=>{this.lastBut.setAttribute("aria-label",s),this.lastBut.setAttribute("title",s)}),this.firstBut.addEventListener("click",()=>{this.setPage(1)}),this.prevBut.addEventListener("click",()=>{this.previousPage()}),this.nextBut.addEventListener("click",()=>{this.nextPage()}),this.lastBut.addEventListener("click",()=>{this.setPage(this.max)}),this.table.options.paginationElement&&(this.element=this.table.options.paginationElement),this.pageSizeSelect&&(t=document.createElement("label"),this.langBind("pagination|page_size",s=>{this.pageSizeSelect.setAttribute("aria-label",s),this.pageSizeSelect.setAttribute("title",s),t.innerHTML=s}),this.element.appendChild(t),this.element.appendChild(this.pageSizeSelect),this.pageSizeSelect.addEventListener("change",s=>{this.setPageSize(this.pageSizeSelect.value=="true"?!0:this.pageSizeSelect.value),this.setPage(1)})),this.element.appendChild(this.firstBut),this.element.appendChild(this.prevBut),this.element.appendChild(this.pagesElement),this.element.appendChild(this.nextBut),this.element.appendChild(this.lastBut),this.table.options.paginationElement||(this.table.options.paginationCounter&&(this.table.options.paginationCounterElement?this.table.options.paginationCounterElement instanceof HTMLElement?this.table.options.paginationCounterElement.appendChild(this.pageCounterElement):typeof this.table.options.paginationCounterElement=="string"&&(i=document.querySelector(this.table.options.paginationCounterElement),i?i.appendChild(this.pageCounterElement):console.warn("Pagination Error - Unable to find element matching paginationCounterElement selector:",this.table.options.paginationCounterElement)):this.footerAppend(this.pageCounterElement)),this.footerAppend(this.element)),this.page=this.table.options.paginationInitialPage,this.count=this.table.options.paginationButtonCount),this.mode=this.table.options.paginationMode}initializeProgressive(e){this.initializePaginator(!0),this.mode="progressive_"+e,this.progressiveLoad=!0}trackChanges(){this.dispatch("page-changed")}setMaxRows(e){e?this.max=this.size===!0?1:Math.ceil(e/this.size):this.max=1,this.page>this.max&&(this.page=this.max)}reset(e){this.initialLoad||(this.mode=="local"||e)&&(this.page=1,this.trackChanges())}setMaxPage(e){e=parseInt(e),this.max=e||1,this.page>this.max&&(this.page=this.max,this.trigger())}setPage(e){switch(e){case"first":return this.setPage(1);case"prev":return this.previousPage();case"next":return this.nextPage();case"last":return this.setPage(this.max)}return e=parseInt(e),e>0&&e<=this.max||this.mode!=="local"?(this.page=e,this.trackChanges(),this.trigger()):(console.warn("Pagination Error - Requested page is out of range of 1 - "+this.max+":",e),Promise.reject())}setPageToRow(e){var t=this.displayRows(-1),i=t.indexOf(e);if(i>-1){var s=this.size===!0?1:Math.ceil((i+1)/this.size);return this.setPage(s)}else return console.warn("Pagination Error - Requested row is not visible"),Promise.reject()}setPageSize(e){e!==!0&&(e=parseInt(e)),e>0&&(this.size=e,this.dispatchExternal("pageSizeChanged",e)),this.pageSizeSelect&&this.generatePageSizeSelectList(),this.trackChanges()}_setPageCounter(e,t,i){var s;if(this.pageCounter)switch(this.mode==="remote"&&(t=this.size,i=(this.page-1)*this.size+1,e=this.remoteRowCountEstimate),s=this.pageCounter.call(this,t,i,this.page,e,this.max),typeof s){case"object":if(s instanceof Node){for(;this.pageCounterElement.firstChild;)this.pageCounterElement.removeChild(this.pageCounterElement.firstChild);this.pageCounterElement.appendChild(s)}else this.pageCounterElement.innerHTML="",s!=null&&console.warn("Page Counter Error - Page Counter has returned a type of object, the only valid page counter object return is an instance of Node, the page counter returned:",s);break;case"undefined":this.pageCounterElement.innerHTML="";break;default:this.pageCounterElement.innerHTML=s}}_setPageButtons(){let e=Math.floor((this.count-1)/2),t=Math.ceil((this.count-1)/2),i=this.max-this.page+e+10&&n<=this.max&&this.pagesElement.appendChild(this._generatePageButton(n));this.footerRedraw()}_generatePageButton(e){var t=document.createElement("button");return t.classList.add("tabulator-page"),e==this.page&&t.classList.add("active"),t.setAttribute("type","button"),t.setAttribute("role","button"),this.langBind("pagination|page_title",i=>{t.setAttribute("aria-label",i+" "+e),t.setAttribute("title",i+" "+e)}),t.setAttribute("data-page",e),t.textContent=e,t.addEventListener("click",i=>{this.setPage(e)}),t}previousPage(){return this.page>1?(this.page--,this.trackChanges(),this.trigger()):(console.warn("Pagination Error - Previous page would be less than page 1:",0),Promise.reject())}nextPage(){return this.pagea.type==="row");if(this.mode=="local"){i=[],this.setMaxRows(e.length),this.size===!0?(s=0,n=e.length):(s=this.size*(this.page-1),n=s+parseInt(this.size)),this._setPageButtons();for(let a=s;a{this.dataChanging=!1});case"progressive_load":case"progressive_scroll":return this.reloadData(null,!0);default:return console.warn("Pagination Error - no such pagination mode:",this.mode),Promise.reject()}}_parseRemoteData(e){var t;if(typeof e.last_page>"u"&&console.warn("Remote Pagination Error - Server response missing '"+(this.options("dataReceiveParams").last_page||"last_page")+"' property"),e.data)if(this.max=parseInt(e.last_page)||1,this.remoteRowCountEstimate=typeof e.last_row<"u"?e.last_row:e.last_page*this.size-(this.page==e.last_page?this.size-e.data.length:0),this.progressiveLoad){switch(this.mode){case"progressive_load":this.page==1?this.table.rowManager.setData(e.data,!1,this.page==1):this.table.rowManager.addRows(e.data),this.page{this.nextPage()},this.table.options.progressiveLoadDelay);break;case"progressive_scroll":e=this.page===1?e.data:this.table.rowManager.getData().concat(e.data),this.table.rowManager.setData(e,this.page!==1,this.page==1),t=this.table.options.progressiveLoadScrollMargin||this.table.rowManager.element.clientHeight*2,this.table.rowManager.element.scrollHeight<=this.table.rowManager.element.clientHeight+t&&this.page{this.nextPage()});break}return!1}else this.dispatchExternal("pageLoaded",this.getPage());else console.warn("Remote Pagination Error - Server response missing '"+(this.options("dataReceiveParams").data||"data")+"' property");return e.data}footerRedraw(){var e=this.table.footerManager.containerElement;Math.ceil(e.clientWidth)-e.scrollWidth<0?this.pagesElement.style.display="none":(this.pagesElement.style.display="",Math.ceil(e.clientWidth)-e.scrollWidth<0&&(this.pagesElement.style.display="none"))}};b(te,"moduleName","page"),b(te,"pageCounters",Xi);let Le=te;var Ji={local:function(l,e){var t=localStorage.getItem(l+"-"+e);return t?JSON.parse(t):!1},cookie:function(l,e){var t=document.cookie,i=l+"-"+e,s=t.indexOf(i+"="),n,r;return s>-1&&(t=t.slice(s),n=t.indexOf(";"),n>-1&&(t=t.slice(0,n)),r=t.replace(i+"=","")),r?JSON.parse(r):!1}},Ki={local:function(l,e,t){localStorage.setItem(l+"-"+e,JSON.stringify(t))},cookie:function(l,e,t){var i=new Date;i.setDate(i.getDate()+1e4),document.cookie=l+"-"+e+"="+JSON.stringify(t)+"; expires="+i.toUTCString()}};const D=class D extends w{constructor(e){super(e),this.mode="",this.id="",this.defWatcherBlock=!1,this.config={},this.readFunc=!1,this.writeFunc=!1,this.registerTableOption("persistence",!1),this.registerTableOption("persistenceID",""),this.registerTableOption("persistenceMode",!0),this.registerTableOption("persistenceReaderFunc",!1),this.registerTableOption("persistenceWriterFunc",!1)}localStorageTest(){var e="_tabulator_test";try{return window.localStorage.setItem(e,e),window.localStorage.removeItem(e),!0}catch{return!1}}initialize(){if(this.table.options.persistence){var e=this.table.options.persistenceMode,t=this.table.options.persistenceID,i;this.mode=e!==!0?e:this.localStorageTest()?"local":"cookie",this.table.options.persistenceReaderFunc?typeof this.table.options.persistenceReaderFunc=="function"?this.readFunc=this.table.options.persistenceReaderFunc:D.readers[this.table.options.persistenceReaderFunc]?this.readFunc=D.readers[this.table.options.persistenceReaderFunc]:console.warn("Persistence Read Error - invalid reader set",this.table.options.persistenceReaderFunc):D.readers[this.mode]?this.readFunc=D.readers[this.mode]:console.warn("Persistence Read Error - invalid reader set",this.mode),this.table.options.persistenceWriterFunc?typeof this.table.options.persistenceWriterFunc=="function"?this.writeFunc=this.table.options.persistenceWriterFunc:D.writers[this.table.options.persistenceWriterFunc]?this.writeFunc=D.writers[this.table.options.persistenceWriterFunc]:console.warn("Persistence Write Error - invalid reader set",this.table.options.persistenceWriterFunc):D.writers[this.mode]?this.writeFunc=D.writers[this.mode]:console.warn("Persistence Write Error - invalid writer set",this.mode),this.id="tabulator-"+(t||this.table.element.getAttribute("id")||""),this.config={sort:this.table.options.persistence===!0||this.table.options.persistence.sort,filter:this.table.options.persistence===!0||this.table.options.persistence.filter,headerFilter:this.table.options.persistence===!0||this.table.options.persistence.headerFilter,group:this.table.options.persistence===!0||this.table.options.persistence.group,page:this.table.options.persistence===!0||this.table.options.persistence.page,columns:this.table.options.persistence===!0?["title","width","visible"]:this.table.options.persistence.columns},this.config.page&&(i=this.retrieveData("page"),i&&(typeof i.paginationSize<"u"&&(this.config.page===!0||this.config.page.size)&&(this.table.options.paginationSize=i.paginationSize),typeof i.paginationInitialPage<"u"&&(this.config.page===!0||this.config.page.page)&&(this.table.options.paginationInitialPage=i.paginationInitialPage))),this.config.group&&(i=this.retrieveData("group"),i&&(typeof i.groupBy<"u"&&(this.config.group===!0||this.config.group.groupBy)&&(this.table.options.groupBy=i.groupBy),typeof i.groupStartOpen<"u"&&(this.config.group===!0||this.config.group.groupStartOpen)&&(this.table.options.groupStartOpen=i.groupStartOpen),typeof i.groupHeader<"u"&&(this.config.group===!0||this.config.group.groupHeader)&&(this.table.options.groupHeader=i.groupHeader))),this.config.columns&&(this.table.options.columns=this.load("columns",this.table.options.columns),this.subscribe("column-init",this.initializeColumn.bind(this)),this.subscribe("column-show",this.save.bind(this,"columns")),this.subscribe("column-hide",this.save.bind(this,"columns")),this.subscribe("column-moved",this.save.bind(this,"columns"))),this.subscribe("table-built",this.tableBuilt.bind(this),0),this.subscribe("table-redraw",this.tableRedraw.bind(this)),this.subscribe("filter-changed",this.eventSave.bind(this,"filter")),this.subscribe("filter-changed",this.eventSave.bind(this,"headerFilter")),this.subscribe("sort-changed",this.eventSave.bind(this,"sort")),this.subscribe("group-changed",this.eventSave.bind(this,"group")),this.subscribe("page-changed",this.eventSave.bind(this,"page")),this.subscribe("column-resized",this.eventSave.bind(this,"columns")),this.subscribe("column-width",this.eventSave.bind(this,"columns")),this.subscribe("layout-refreshed",this.eventSave.bind(this,"columns"))}this.registerTableFunction("getColumnLayout",this.getColumnLayout.bind(this)),this.registerTableFunction("setColumnLayout",this.setColumnLayout.bind(this))}eventSave(e){this.config[e]&&this.save(e)}tableBuilt(){var e,t,i;this.config.sort&&(e=this.load("sort"),e&&(this.table.options.initialSort=e)),this.config.filter&&(t=this.load("filter"),t&&(this.table.options.initialFilter=t)),this.config.headerFilter&&(i=this.load("headerFilter"),i&&(this.table.options.initialHeaderFilter=i))}tableRedraw(e){e&&this.config.columns&&this.save("columns")}getColumnLayout(){return this.parseColumns(this.table.columnManager.getColumns())}setColumnLayout(e){return this.table.columnManager.setColumns(this.mergeDefinition(this.table.options.columns,e,!0)),!0}initializeColumn(e){var t,i;this.config.columns&&(this.defWatcherBlock=!0,t=e.getDefinition(),i=this.config.columns===!0?Object.keys(t):this.config.columns,i.forEach(s=>{var n=Object.getOwnPropertyDescriptor(t,s),r=t[s];n&&Object.defineProperty(t,s,{set:o=>{r=o,this.defWatcherBlock||this.save("columns"),n.set&&n.set(o)},get:()=>(n.get&&n.get(),r)})}),this.defWatcherBlock=!1)}load(e,t){var i=this.retrieveData(e);return t&&(i=i?this.mergeDefinition(t,i):t),i}retrieveData(e){return this.readFunc?this.readFunc(this.id,e):!1}mergeDefinition(e,t,i){var s=[];return t=t||[],t.forEach((n,r)=>{var o=this._findColumn(e,n),a;o&&(i?a=Object.keys(n):this.config.columns===!0||this.config.columns==null?(a=Object.keys(o),a.push("width")):a=this.config.columns,a.forEach(h=>{h!=="columns"&&typeof n[h]<"u"&&(o[h]=n[h])}),o.columns&&(o.columns=this.mergeDefinition(o.columns,n.columns)),s.push(o))}),e.forEach((n,r)=>{var o=this._findColumn(t,n);o||(s.length>r?s.splice(r,0,n):s.push(n))}),s}_findColumn(e,t){var i=t.columns?"group":t.field?"field":"object";return e.find(function(s){switch(i){case"group":return s.title===t.title&&s.columns.length===t.columns.length;case"field":return s.field===t.field;case"object":return s===t}})}save(e){var t={};switch(e){case"columns":t=this.parseColumns(this.table.columnManager.getColumns());break;case"filter":t=this.table.modules.filter.getFilters();break;case"headerFilter":t=this.table.modules.filter.getHeaderFilters();break;case"sort":t=this.validateSorters(this.table.modules.sort.getSort());break;case"group":t=this.getGroupConfig();break;case"page":t=this.getPageConfig();break}this.writeFunc&&this.writeFunc(this.id,e,t)}validateSorters(e){return e.forEach(function(t){t.column=t.field,delete t.field}),e}getGroupConfig(){var e={};return this.config.group&&((this.config.group===!0||this.config.group.groupBy)&&(e.groupBy=this.table.options.groupBy),(this.config.group===!0||this.config.group.groupStartOpen)&&(e.groupStartOpen=this.table.options.groupStartOpen),(this.config.group===!0||this.config.group.groupHeader)&&(e.groupHeader=this.table.options.groupHeader)),e}getPageConfig(){var e={};return this.config.page&&((this.config.page===!0||this.config.page.size)&&(e.paginationSize=this.table.modules.page.getPageSize()),(this.config.page===!0||this.config.page.page)&&(e.paginationInitialPage=this.table.modules.page.getPage())),e}parseColumns(e){var t=[],i=["headerContextMenu","headerMenu","contextMenu","clickMenu"];return e.forEach(s=>{var n={},r=s.getDefinition(),o;s.isGroup?(n.title=r.title,n.columns=this.parseColumns(s.getColumns())):(n.field=s.getField(),this.config.columns===!0||this.config.columns==null?(o=Object.keys(r),o.push("width"),o.push("visible")):o=this.config.columns,o.forEach(a=>{switch(a){case"width":n.width=s.getWidth();break;case"visible":n.visible=s.visible;break;default:typeof r[a]!="function"&&i.indexOf(a)===-1&&(n[a]=r[a])}})),t.push(n)}),t}};b(D,"moduleName","persistence"),b(D,"moduleInitOrder",-10),b(D,"readers",Ji),b(D,"writers",Ki);let Se=D;class at extends w{constructor(e){super(e),this.columnSubscribers={},this.registerTableOption("rowContextPopup",!1),this.registerTableOption("rowClickPopup",!1),this.registerTableOption("rowDblClickPopup",!1),this.registerTableOption("groupContextPopup",!1),this.registerTableOption("groupClickPopup",!1),this.registerTableOption("groupDblClickPopup",!1),this.registerColumnOption("headerContextPopup"),this.registerColumnOption("headerClickPopup"),this.registerColumnOption("headerDblClickPopup"),this.registerColumnOption("headerPopup"),this.registerColumnOption("headerPopupIcon"),this.registerColumnOption("contextPopup"),this.registerColumnOption("clickPopup"),this.registerColumnOption("dblClickPopup"),this.registerComponentFunction("cell","popup",this._componentPopupCall.bind(this)),this.registerComponentFunction("column","popup",this._componentPopupCall.bind(this)),this.registerComponentFunction("row","popup",this._componentPopupCall.bind(this)),this.registerComponentFunction("group","popup",this._componentPopupCall.bind(this))}initialize(){this.initializeRowWatchers(),this.initializeGroupWatchers(),this.subscribe("column-init",this.initializeColumn.bind(this))}_componentPopupCall(e,t,i){this.loadPopupEvent(t,null,e,i)}initializeRowWatchers(){this.table.options.rowContextPopup&&(this.subscribe("row-contextmenu",this.loadPopupEvent.bind(this,this.table.options.rowContextPopup)),this.table.on("rowTapHold",this.loadPopupEvent.bind(this,this.table.options.rowContextPopup))),this.table.options.rowClickPopup&&this.subscribe("row-click",this.loadPopupEvent.bind(this,this.table.options.rowClickPopup)),this.table.options.rowDblClickPopup&&this.subscribe("row-dblclick",this.loadPopupEvent.bind(this,this.table.options.rowDblClickPopup))}initializeGroupWatchers(){this.table.options.groupContextPopup&&(this.subscribe("group-contextmenu",this.loadPopupEvent.bind(this,this.table.options.groupContextPopup)),this.table.on("groupTapHold",this.loadPopupEvent.bind(this,this.table.options.groupContextPopup))),this.table.options.groupClickPopup&&this.subscribe("group-click",this.loadPopupEvent.bind(this,this.table.options.groupClickPopup)),this.table.options.groupDblClickPopup&&this.subscribe("group-dblclick",this.loadPopupEvent.bind(this,this.table.options.groupDblClickPopup))}initializeColumn(e){var t=e.definition;t.headerContextPopup&&!this.columnSubscribers.headerContextPopup&&(this.columnSubscribers.headerContextPopup=this.loadPopupTableColumnEvent.bind(this,"headerContextPopup"),this.subscribe("column-contextmenu",this.columnSubscribers.headerContextPopup),this.table.on("headerTapHold",this.loadPopupTableColumnEvent.bind(this,"headerContextPopup"))),t.headerClickPopup&&!this.columnSubscribers.headerClickPopup&&(this.columnSubscribers.headerClickPopup=this.loadPopupTableColumnEvent.bind(this,"headerClickPopup"),this.subscribe("column-click",this.columnSubscribers.headerClickPopup)),t.headerDblClickPopup&&!this.columnSubscribers.headerDblClickPopup&&(this.columnSubscribers.headerDblClickPopup=this.loadPopupTableColumnEvent.bind(this,"headerDblClickPopup"),this.subscribe("column-dblclick",this.columnSubscribers.headerDblClickPopup)),t.headerPopup&&this.initializeColumnHeaderPopup(e),t.contextPopup&&!this.columnSubscribers.contextPopup&&(this.columnSubscribers.contextPopup=this.loadPopupTableCellEvent.bind(this,"contextPopup"),this.subscribe("cell-contextmenu",this.columnSubscribers.contextPopup),this.table.on("cellTapHold",this.loadPopupTableCellEvent.bind(this,"contextPopup"))),t.clickPopup&&!this.columnSubscribers.clickPopup&&(this.columnSubscribers.clickPopup=this.loadPopupTableCellEvent.bind(this,"clickPopup"),this.subscribe("cell-click",this.columnSubscribers.clickPopup)),t.dblClickPopup&&!this.columnSubscribers.dblClickPopup&&(this.columnSubscribers.dblClickPopup=this.loadPopupTableCellEvent.bind(this,"dblClickPopup"),this.subscribe("cell-click",this.columnSubscribers.dblClickPopup))}initializeColumnHeaderPopup(e){var t=e.definition.headerPopupIcon,i;i=document.createElement("span"),i.classList.add("tabulator-header-popup-button"),t?(typeof t=="function"&&(t=t(e.getComponent())),t instanceof HTMLElement?i.appendChild(t):i.innerHTML=t):i.innerHTML="⋮",i.addEventListener("click",s=>{s.stopPropagation(),s.preventDefault(),this.loadPopupEvent(e.definition.headerPopup,s,e)}),e.titleElement.insertBefore(i,e.titleElement.firstChild)}loadPopupTableCellEvent(e,t,i){i._cell&&(i=i._cell),i.column.definition[e]&&this.loadPopupEvent(i.column.definition[e],t,i)}loadPopupTableColumnEvent(e,t,i){i._column&&(i=i._column),i.definition[e]&&this.loadPopupEvent(i.definition[e],t,i)}loadPopupEvent(e,t,i,s){var n;function r(o){n=o}i._group?i=i._group:i._row&&(i=i._row),e=typeof e=="function"?e.call(this.table,t,i.getComponent(),r):e,this.loadPopup(t,i,e,n,s)}loadPopup(e,t,i,s,n){var r=!(e instanceof MouseEvent),o,a;i instanceof HTMLElement?o=i:(o=document.createElement("div"),o.innerHTML=i),o.classList.add("tabulator-popup"),o.addEventListener("click",h=>{h.stopPropagation()}),r||e.preventDefault(),a=this.popup(o),typeof s=="function"&&a.renderCallback(s),e?a.show(e):a.show(t.getElement(),n||"center"),a.hideOnBlur(()=>{this.dispatchExternal("popupClosed",t.getComponent())}),this.dispatchExternal("popupOpened",t.getComponent())}}b(at,"moduleName","popup");class lt extends w{constructor(e){super(e),this.element=!1,this.manualBlock=!1,this.beforeprintEventHandler=null,this.afterprintEventHandler=null,this.registerTableOption("printAsHtml",!1),this.registerTableOption("printFormatter",!1),this.registerTableOption("printHeader",!1),this.registerTableOption("printFooter",!1),this.registerTableOption("printStyled",!0),this.registerTableOption("printRowRange","visible"),this.registerTableOption("printConfig",{}),this.registerColumnOption("print"),this.registerColumnOption("titlePrint")}initialize(){this.table.options.printAsHtml&&(this.beforeprintEventHandler=this.replaceTable.bind(this),this.afterprintEventHandler=this.cleanup.bind(this),window.addEventListener("beforeprint",this.beforeprintEventHandler),window.addEventListener("afterprint",this.afterprintEventHandler),this.subscribe("table-destroy",this.destroy.bind(this))),this.registerTableFunction("print",this.printFullscreen.bind(this))}destroy(){this.table.options.printAsHtml&&(window.removeEventListener("beforeprint",this.beforeprintEventHandler),window.removeEventListener("afterprint",this.afterprintEventHandler))}replaceTable(){this.manualBlock||(this.element=document.createElement("div"),this.element.classList.add("tabulator-print-table"),this.element.appendChild(this.table.modules.export.generateTable(this.table.options.printConfig,this.table.options.printStyled,this.table.options.printRowRange,"print")),this.table.element.style.display="none",this.table.element.parentNode.insertBefore(this.element,this.table.element))}cleanup(){document.body.classList.remove("tabulator-print-fullscreen-hide"),this.element&&this.element.parentNode&&(this.element.parentNode.removeChild(this.element),this.table.element.style.display="")}printFullscreen(e,t,i){var s=window.scrollX,n=window.scrollY,r=document.createElement("div"),o=document.createElement("div"),a=this.table.modules.export.generateTable(typeof i<"u"?i:this.table.options.printConfig,typeof t<"u"?t:this.table.options.printStyled,e||this.table.options.printRowRange,"print"),h,d;this.manualBlock=!0,this.element=document.createElement("div"),this.element.classList.add("tabulator-print-fullscreen"),this.table.options.printHeader&&(r.classList.add("tabulator-print-header"),h=typeof this.table.options.printHeader=="function"?this.table.options.printHeader.call(this.table):this.table.options.printHeader,typeof h=="string"?r.innerHTML=h:r.appendChild(h),this.element.appendChild(r)),this.element.appendChild(a),this.table.options.printFooter&&(o.classList.add("tabulator-print-footer"),d=typeof this.table.options.printFooter=="function"?this.table.options.printFooter.call(this.table):this.table.options.printFooter,typeof d=="string"?o.innerHTML=d:o.appendChild(d),this.element.appendChild(o)),document.body.classList.add("tabulator-print-fullscreen-hide"),document.body.appendChild(this.element),this.table.options.printFormatter&&this.table.options.printFormatter(this.element,a),window.print(),this.cleanup(),window.scrollTo(s,n),this.manualBlock=!1}}b(lt,"moduleName","print");class ht extends w{constructor(e){super(e),this.data=!1,this.blocked=!1,this.origFuncs={},this.currentVersion=0,this.registerTableOption("reactiveData",!1)}initialize(){this.table.options.reactiveData&&(this.subscribe("cell-value-save-before",this.block.bind(this,"cellsave")),this.subscribe("cell-value-save-after",this.unblock.bind(this,"cellsave")),this.subscribe("row-data-save-before",this.block.bind(this,"rowsave")),this.subscribe("row-data-save-after",this.unblock.bind(this,"rowsave")),this.subscribe("row-data-init-after",this.watchRow.bind(this)),this.subscribe("data-processing",this.watchData.bind(this)),this.subscribe("table-destroy",this.unwatchData.bind(this)))}watchData(e){var t=this,i;this.currentVersion++,i=this.currentVersion,this.unwatchData(),this.data=e,this.origFuncs.push=e.push,Object.defineProperty(this.data,"push",{enumerable:!1,configurable:!0,value:function(){var s=Array.from(arguments),n;return!t.blocked&&i===t.currentVersion&&(t.block("data-push"),s.forEach(r=>{t.table.rowManager.addRowActual(r,!1)}),n=t.origFuncs.push.apply(e,arguments),t.unblock("data-push")),n}}),this.origFuncs.unshift=e.unshift,Object.defineProperty(this.data,"unshift",{enumerable:!1,configurable:!0,value:function(){var s=Array.from(arguments),n;return!t.blocked&&i===t.currentVersion&&(t.block("data-unshift"),s.forEach(r=>{t.table.rowManager.addRowActual(r,!0)}),n=t.origFuncs.unshift.apply(e,arguments),t.unblock("data-unshift")),n}}),this.origFuncs.shift=e.shift,Object.defineProperty(this.data,"shift",{enumerable:!1,configurable:!0,value:function(){var s,n;return!t.blocked&&i===t.currentVersion&&(t.block("data-shift"),t.data.length&&(s=t.table.rowManager.getRowFromDataObject(t.data[0]),s&&s.deleteActual()),n=t.origFuncs.shift.call(e),t.unblock("data-shift")),n}}),this.origFuncs.pop=e.pop,Object.defineProperty(this.data,"pop",{enumerable:!1,configurable:!0,value:function(){var s,n;return!t.blocked&&i===t.currentVersion&&(t.block("data-pop"),t.data.length&&(s=t.table.rowManager.getRowFromDataObject(t.data[t.data.length-1]),s&&s.deleteActual()),n=t.origFuncs.pop.call(e),t.unblock("data-pop")),n}}),this.origFuncs.splice=e.splice,Object.defineProperty(this.data,"splice",{enumerable:!1,configurable:!0,value:function(){var s=Array.from(arguments),n=s[0]<0?e.length+s[0]:s[0],r=s[1],o=s[2]?s.slice(2):!1,a,h;if(!t.blocked&&i===t.currentVersion){if(t.block("data-splice"),o&&(a=e[n]?t.table.rowManager.getRowFromDataObject(e[n]):!1,a?o.forEach(u=>{t.table.rowManager.addRowActual(u,!0,a,!0)}):(o=o.slice().reverse(),o.forEach(u=>{t.table.rowManager.addRowActual(u,!0,!1,!0)}))),r!==0){var d=e.slice(n,typeof s[1]>"u"?s[1]:n+r);d.forEach((u,c)=>{var f=t.table.rowManager.getRowFromDataObject(u);f&&f.deleteActual(c!==d.length-1)})}(o||r!==0)&&t.table.rowManager.reRenderInPosition(),h=t.origFuncs.splice.apply(e,arguments),t.unblock("data-splice")}return h}})}unwatchData(){if(this.data!==!1)for(var e in this.origFuncs)Object.defineProperty(this.data,e,{enumerable:!0,configurable:!0,writable:!0,value:this.origFuncs.key})}watchRow(e){var t=e.getData();for(var i in t)this.watchKey(e,t,i);this.table.options.dataTree&&this.watchTreeChildren(e)}watchTreeChildren(e){var t=this,i=e.getData()[this.table.options.dataTreeChildField],s={};i&&(s.push=i.push,Object.defineProperty(i,"push",{enumerable:!1,configurable:!0,value:()=>{if(!t.blocked){t.block("tree-push");var n=s.push.apply(i,arguments);this.rebuildTree(e),t.unblock("tree-push")}return n}}),s.unshift=i.unshift,Object.defineProperty(i,"unshift",{enumerable:!1,configurable:!0,value:()=>{if(!t.blocked){t.block("tree-unshift");var n=s.unshift.apply(i,arguments);this.rebuildTree(e),t.unblock("tree-unshift")}return n}}),s.shift=i.shift,Object.defineProperty(i,"shift",{enumerable:!1,configurable:!0,value:()=>{if(!t.blocked){t.block("tree-shift");var n=s.shift.call(i);this.rebuildTree(e),t.unblock("tree-shift")}return n}}),s.pop=i.pop,Object.defineProperty(i,"pop",{enumerable:!1,configurable:!0,value:()=>{if(!t.blocked){t.block("tree-pop");var n=s.pop.call(i);this.rebuildTree(e),t.unblock("tree-pop")}return n}}),s.splice=i.splice,Object.defineProperty(i,"splice",{enumerable:!1,configurable:!0,value:()=>{if(!t.blocked){t.block("tree-splice");var n=s.splice.apply(i,arguments);this.rebuildTree(e),t.unblock("tree-splice")}return n}}))}rebuildTree(e){this.table.modules.dataTree.initializeRow(e),this.table.modules.dataTree.layoutRow(e),this.table.rowManager.refreshActiveData("tree",!1,!0)}watchKey(e,t,i){var s=this,n=Object.getOwnPropertyDescriptor(t,i),r=t[i],o=this.currentVersion;Object.defineProperty(t,i,{set:a=>{if(r=a,!s.blocked&&o===s.currentVersion){s.block("key");var h={};h[i]=a,e.updateData(h),s.unblock("key")}n.set&&n.set(a)},get:()=>(n.get&&n.get(),r)})}unwatchRow(e){var t=e.getData();for(var i in t)Object.defineProperty(t,i,{value:t[i]})}block(e){this.blocked||(this.blocked=e)}unblock(e){this.blocked===e&&(this.blocked=!1)}}b(ht,"moduleName","reactiveData");class dt extends w{constructor(e){super(e),this.startColumn=!1,this.startX=!1,this.startWidth=!1,this.latestX=!1,this.handle=null,this.initialNextColumn=null,this.nextColumn=null,this.initialized=!1,this.registerColumnOption("resizable",!0),this.registerTableOption("resizableColumnFit",!1),this.registerTableOption("resizableColumnGuide",!1)}initialize(){this.subscribe("column-rendered",this.layoutColumnHeader.bind(this))}initializeEventWatchers(){this.initialized||(this.subscribe("cell-rendered",this.layoutCellHandles.bind(this)),this.subscribe("cell-delete",this.deInitializeComponent.bind(this)),this.subscribe("cell-height",this.resizeHandle.bind(this)),this.subscribe("column-moved",this.columnLayoutUpdated.bind(this)),this.subscribe("column-hide",this.deInitializeColumn.bind(this)),this.subscribe("column-show",this.columnLayoutUpdated.bind(this)),this.subscribe("column-width",this.columnWidthUpdated.bind(this)),this.subscribe("column-delete",this.deInitializeComponent.bind(this)),this.subscribe("column-height",this.resizeHandle.bind(this)),this.initialized=!0)}layoutCellHandles(e){e.row.type==="row"&&(this.deInitializeComponent(e),this.initializeColumn("cell",e,e.column,e.element))}layoutColumnHeader(e){e.definition.resizable&&(this.initializeEventWatchers(),this.deInitializeComponent(e),this.initializeColumn("header",e,e,e.element))}columnLayoutUpdated(e){var t=e.prevColumn();this.reinitializeColumn(e),t&&this.reinitializeColumn(t)}columnWidthUpdated(e){e.modules.frozen&&(this.table.modules.frozenColumns.leftColumns.includes(e)?this.table.modules.frozenColumns.leftColumns.forEach(t=>{this.reinitializeColumn(t)}):this.table.modules.frozenColumns.rightColumns.includes(e)&&this.table.modules.frozenColumns.rightColumns.forEach(t=>{this.reinitializeColumn(t)}))}frozenColumnOffset(e){var t=!1;return e.modules.frozen&&(t=e.modules.frozen.marginValue,e.modules.frozen.position==="left"?t+=e.getWidth()-3:t&&(t-=3)),t!==!1?t+"px":!1}reinitializeColumn(e){var t=this.frozenColumnOffset(e);e.cells.forEach(i=>{i.modules.resize&&i.modules.resize.handleEl&&(t&&(i.modules.resize.handleEl.style[e.modules.frozen.position]=t,i.modules.resize.handleEl.style["z-index"]=11),i.element.after(i.modules.resize.handleEl))}),e.modules.resize&&e.modules.resize.handleEl&&(t&&(e.modules.resize.handleEl.style[e.modules.frozen.position]=t),e.element.after(e.modules.resize.handleEl))}initializeColumn(e,t,i,s){var n=this,r=!1,o=i.definition.resizable,a={},h=i.getLastColumn();if(e==="header"&&(r=i.definition.formatter=="textarea"||i.definition.variableHeight,a={variableHeight:r}),(o===!0||o==e)&&this._checkResizability(h)){var d=document.createElement("span");d.className="tabulator-col-resize-handle",d.addEventListener("click",function(c){c.stopPropagation()});var u=function(c){n.startColumn=i,n.initialNextColumn=n.nextColumn=h.nextColumn(),n._mouseDown(c,h,d)};d.addEventListener("mousedown",u),d.addEventListener("touchstart",u,{passive:!0}),d.addEventListener("dblclick",c=>{var f=h.getWidth();c.stopPropagation(),h.reinitializeWidth(!0),f!==h.getWidth()&&(n.dispatch("column-resized",h),n.dispatchExternal("columnResized",h.getComponent()))}),i.modules.frozen&&(d.style.position="sticky",d.style[i.modules.frozen.position]=this.frozenColumnOffset(i)),a.handleEl=d,s.parentNode&&i.visible&&s.after(d)}t.modules.resize=a}deInitializeColumn(e){this.deInitializeComponent(e),e.cells.forEach(t=>{this.deInitializeComponent(t)})}deInitializeComponent(e){var t;e.modules.resize&&(t=e.modules.resize.handleEl,t&&t.parentElement&&t.parentElement.removeChild(t))}resizeHandle(e,t){e.modules.resize&&e.modules.resize.handleEl&&(e.modules.resize.handleEl.style.height=t)}resize(e,t){var i=typeof e.clientX>"u"?e.touches[0].clientX:e.clientX,s=i-this.startX,n=i-this.latestX,r,o;if(this.latestX=i,this.table.rtl&&(s=-s,n=-n),r=t.width==t.minWidth||t.width==t.maxWidth,t.setWidth(this.startWidth+s),o=t.width==t.minWidth||t.width==t.maxWidth,n<0&&(this.nextColumn=this.initialNextColumn),this.table.options.resizableColumnFit&&this.nextColumn&&!(r&&o)){let a=this.nextColumn.getWidth();n>0&&a<=this.nextColumn.minWidth&&(this.nextColumn=this.nextColumn.nextColumn()),this.nextColumn&&this.nextColumn.setWidth(this.nextColumn.getWidth()-n)}this.table.columnManager.rerenderColumns(!0),!this.table.browserSlow&&t.modules.resize&&t.modules.resize.variableHeight&&t.checkCellHeights()}calcGuidePosition(e,t,i){var s=typeof e.clientX>"u"?e.touches[0].clientX:e.clientX,n=i.getBoundingClientRect().x-this.table.element.getBoundingClientRect().x,r=this.table.element.getBoundingClientRect().x,o=t.element.getBoundingClientRect().left-r,a=s-this.startX,h=Math.max(n+a,o+t.minWidth);return t.maxWidth&&(h=Math.min(h,o+t.maxWidth)),h}_checkResizability(e){return e.definition.resizable}_mouseDown(e,t,i){var s=this,n;this.dispatchExternal("columnResizing",t.getComponent()),s.table.options.resizableColumnGuide&&(n=document.createElement("span"),n.classList.add("tabulator-col-resize-guide"),s.table.element.appendChild(n),setTimeout(()=>{n.style.left=s.calcGuidePosition(e,t,i)+"px"})),s.table.element.classList.add("tabulator-block-select");function r(a){s.table.options.resizableColumnGuide?n.style.left=s.calcGuidePosition(a,t,i)+"px":s.resize(a,t)}function o(a){s.table.options.resizableColumnGuide&&(s.resize(a,t),n.remove()),s.startColumn.modules.edit&&(s.startColumn.modules.edit.blocked=!1),s.table.browserSlow&&t.modules.resize&&t.modules.resize.variableHeight&&t.checkCellHeights(),document.body.removeEventListener("mouseup",o),document.body.removeEventListener("mousemove",r),i.removeEventListener("touchmove",r),i.removeEventListener("touchend",o),s.table.element.classList.remove("tabulator-block-select"),s.startWidth!==t.getWidth()&&(s.table.columnManager.verticalAlignHeaders(),s.dispatch("column-resized",t),s.dispatchExternal("columnResized",t.getComponent()))}e.stopPropagation(),s.startColumn.modules.edit&&(s.startColumn.modules.edit.blocked=!0),s.startX=typeof e.clientX>"u"?e.touches[0].clientX:e.clientX,s.latestX=s.startX,s.startWidth=t.getWidth(),document.body.addEventListener("mousemove",r),document.body.addEventListener("mouseup",o),i.addEventListener("touchmove",r,{passive:!0}),i.addEventListener("touchend",o)}}b(dt,"moduleName","resizeColumns");class ut extends w{constructor(e){super(e),this.startColumn=!1,this.startY=!1,this.startHeight=!1,this.handle=null,this.prevHandle=null,this.registerTableOption("resizableRows",!1),this.registerTableOption("resizableRowGuide",!1)}initialize(){this.table.options.resizableRows&&this.subscribe("row-layout-after",this.initializeRow.bind(this))}initializeRow(e){var t=this,i=e.getElement(),s=document.createElement("div");s.className="tabulator-row-resize-handle";var n=document.createElement("div");n.className="tabulator-row-resize-handle prev",s.addEventListener("click",function(a){a.stopPropagation()});var r=function(a){t.startRow=e,t._mouseDown(a,e,s)};s.addEventListener("mousedown",r),s.addEventListener("touchstart",r,{passive:!0}),n.addEventListener("click",function(a){a.stopPropagation()});var o=function(a){var h=t.table.rowManager.prevDisplayRow(e);h&&(t.startRow=h,t._mouseDown(a,h,n))};n.addEventListener("mousedown",o),n.addEventListener("touchstart",o,{passive:!0}),i.appendChild(s),i.appendChild(n)}resize(e,t){t.setHeight(this.startHeight+((typeof e.screenY>"u"?e.touches[0].screenY:e.screenY)-this.startY))}calcGuidePosition(e,t,i){var s=typeof e.screenY>"u"?e.touches[0].screenY:e.screenY,n=i.getBoundingClientRect().y-this.table.element.getBoundingClientRect().y,r=this.table.element.getBoundingClientRect().y,o=t.element.getBoundingClientRect().top-r,a=s-this.startY;return Math.max(n+a,o)}_mouseDown(e,t,i){var s=this,n;s.dispatchExternal("rowResizing",t.getComponent()),s.table.options.resizableRowGuide&&(n=document.createElement("span"),n.classList.add("tabulator-row-resize-guide"),s.table.element.appendChild(n),setTimeout(()=>{n.style.top=s.calcGuidePosition(e,t,i)+"px"})),s.table.element.classList.add("tabulator-block-select");function r(a){s.table.options.resizableRowGuide?n.style.top=s.calcGuidePosition(a,t,i)+"px":s.resize(a,t)}function o(a){s.table.options.resizableRowGuide&&(s.resize(a,t),n.remove()),document.body.removeEventListener("mouseup",r),document.body.removeEventListener("mousemove",r),i.removeEventListener("touchmove",r),i.removeEventListener("touchend",o),s.table.element.classList.remove("tabulator-block-select"),s.dispatchExternal("rowResized",t.getComponent())}e.stopPropagation(),s.startY=typeof e.screenY>"u"?e.touches[0].screenY:e.screenY,s.startHeight=t.getHeight(),document.body.addEventListener("mousemove",r),document.body.addEventListener("mouseup",o),i.addEventListener("touchmove",r,{passive:!0}),i.addEventListener("touchend",o)}}b(ut,"moduleName","resizeRows");class ct extends w{constructor(e){super(e),this.binding=!1,this.visibilityObserver=!1,this.resizeObserver=!1,this.containerObserver=!1,this.tableHeight=0,this.tableWidth=0,this.containerHeight=0,this.containerWidth=0,this.autoResize=!1,this.visible=!1,this.initialized=!1,this.initialRedraw=!1,this.registerTableOption("autoResize",!0)}initialize(){if(this.table.options.autoResize){var e=this.table,t;this.tableHeight=e.element.clientHeight,this.tableWidth=e.element.clientWidth,e.element.parentNode&&(this.containerHeight=e.element.parentNode.clientHeight,this.containerWidth=e.element.parentNode.clientWidth),typeof IntersectionObserver<"u"&&typeof ResizeObserver<"u"&&e.rowManager.getRenderMode()==="virtual"?(this.initializeVisibilityObserver(),this.autoResize=!0,this.resizeObserver=new ResizeObserver(i=>{if(!e.browserMobile||e.browserMobile&&(!e.modules.edit||e.modules.edit&&!e.modules.edit.currentCell)){var s=Math.floor(i[0].contentRect.height),n=Math.floor(i[0].contentRect.width);(this.tableHeight!=s||this.tableWidth!=n)&&(this.tableHeight=s,this.tableWidth=n,e.element.parentNode&&(this.containerHeight=e.element.parentNode.clientHeight,this.containerWidth=e.element.parentNode.clientWidth),this.redrawTable())}}),this.resizeObserver.observe(e.element),t=window.getComputedStyle(e.element),this.table.element.parentNode&&!this.table.rowManager.fixedHeight&&(t.getPropertyValue("max-height")||t.getPropertyValue("min-height"))&&(this.containerObserver=new ResizeObserver(i=>{if(!e.browserMobile||e.browserMobile&&(!e.modules.edit||e.modules.edit&&!e.modules.edit.currentCell)){var s=Math.floor(i[0].contentRect.height),n=Math.floor(i[0].contentRect.width);(this.containerHeight!=s||this.containerWidth!=n)&&(this.containerHeight=s,this.containerWidth=n,this.tableHeight=e.element.clientHeight,this.tableWidth=e.element.clientWidth),this.redrawTable()}}),this.containerObserver.observe(this.table.element.parentNode)),this.subscribe("table-resize",this.tableResized.bind(this))):(this.binding=function(){(!e.browserMobile||e.browserMobile&&(!e.modules.edit||e.modules.edit&&!e.modules.edit.currentCell))&&(e.columnManager.rerenderColumns(!0),e.redraw())},window.addEventListener("resize",this.binding)),this.subscribe("table-destroy",this.clearBindings.bind(this))}}initializeVisibilityObserver(){this.visibilityObserver=new IntersectionObserver(e=>{this.visible=e[0].isIntersecting,this.initialized?this.visible&&(this.redrawTable(this.initialRedraw),this.initialRedraw=!1):(this.initialized=!0,this.initialRedraw=!this.visible)}),this.visibilityObserver.observe(this.table.element)}redrawTable(e){this.initialized&&this.visible&&(this.table.columnManager.rerenderColumns(!0),this.table.redraw(e))}tableResized(){this.table.rowManager.redraw()}clearBindings(){this.binding&&window.removeEventListener("resize",this.binding),this.resizeObserver&&this.resizeObserver.unobserve(this.table.element),this.visibilityObserver&&this.visibilityObserver.unobserve(this.table.element),this.containerObserver&&this.containerObserver.unobserve(this.table.element.parentNode)}}b(ct,"moduleName","resizeTable");function qi(l,e,t){var i=document.createElement("div"),s=l.getRow()._row.modules.responsiveLayout;i.classList.add("tabulator-responsive-collapse-toggle"),i.innerHTML=` + + + + + + +`,l.getElement().classList.add("tabulator-row-handle");function n(r){var o=s.element;s.open=r,o&&(s.open?(i.classList.add("open"),o.style.display=""):(i.classList.remove("open"),o.style.display="none"))}return i.addEventListener("click",function(r){r.stopImmediatePropagation(),n(!s.open),l.getTable().rowManager.adjustTableSize()}),n(s.open),i}var Yi={format:{formatters:{responsiveCollapse:qi}}};class De extends w{constructor(e){super(e),this.columns=[],this.hiddenColumns=[],this.mode="",this.index=0,this.collapseFormatter=[],this.collapseStartOpen=!0,this.collapseHandleColumn=!1,this.registerTableOption("responsiveLayout",!1),this.registerTableOption("responsiveLayoutCollapseStartOpen",!0),this.registerTableOption("responsiveLayoutCollapseUseFormatters",!0),this.registerTableOption("responsiveLayoutCollapseFormatter",!1),this.registerColumnOption("responsive")}initialize(){this.table.options.responsiveLayout&&(this.subscribe("column-layout",this.initializeColumn.bind(this)),this.subscribe("column-show",this.updateColumnVisibility.bind(this)),this.subscribe("column-hide",this.updateColumnVisibility.bind(this)),this.subscribe("columns-loaded",this.initializeResponsivity.bind(this)),this.subscribe("column-moved",this.initializeResponsivity.bind(this)),this.subscribe("column-add",this.initializeResponsivity.bind(this)),this.subscribe("column-delete",this.initializeResponsivity.bind(this)),this.subscribe("table-redrawing",this.tableRedraw.bind(this)),this.table.options.responsiveLayout==="collapse"&&(this.subscribe("row-data-changed",this.generateCollapsedRowContent.bind(this)),this.subscribe("row-init",this.initializeRow.bind(this)),this.subscribe("row-layout",this.layoutRow.bind(this))))}tableRedraw(e){["fitColumns","fitDataStretch"].indexOf(this.layoutMode())===-1&&(e||this.update())}initializeResponsivity(){var e=[];this.mode=this.table.options.responsiveLayout,this.collapseFormatter=this.table.options.responsiveLayoutCollapseFormatter||this.formatCollapsedData,this.collapseStartOpen=this.table.options.responsiveLayoutCollapseStartOpen,this.hiddenColumns=[],this.collapseFormatter&&(this.collapseFormatter=this.collapseFormatter.bind(this.table)),this.table.columnManager.columnsByIndex.forEach((t,i)=>{t.modules.responsive&&t.modules.responsive.order&&t.modules.responsive.visible&&(t.modules.responsive.index=i,e.push(t),!t.visible&&this.mode==="collapse"&&this.hiddenColumns.push(t))}),e=e.reverse(),e=e.sort((t,i)=>{var s=i.modules.responsive.order-t.modules.responsive.order;return s||i.modules.responsive.index-t.modules.responsive.index}),this.columns=e,this.mode==="collapse"&&this.generateCollapsedContent();for(let t of this.table.columnManager.columnsByIndex)if(t.definition.formatter=="responsiveCollapse"){this.collapseHandleColumn=t;break}this.collapseHandleColumn&&(this.hiddenColumns.length?this.collapseHandleColumn.show():this.collapseHandleColumn.hide())}initializeColumn(e){var t=e.getDefinition();e.modules.responsive={order:typeof t.responsive>"u"?1:t.responsive,visible:t.visible!==!1}}initializeRow(e){var t;e.type!=="calc"&&(t=document.createElement("div"),t.classList.add("tabulator-responsive-collapse"),e.modules.responsiveLayout={element:t,open:this.collapseStartOpen},this.collapseStartOpen||(t.style.display="none"))}layoutRow(e){var t=e.getElement();e.modules.responsiveLayout&&(t.appendChild(e.modules.responsiveLayout.element),this.generateCollapsedRowContent(e))}updateColumnVisibility(e,t){!t&&e.modules.responsive&&(e.modules.responsive.visible=e.visible,this.initializeResponsivity())}hideColumn(e){var t=this.hiddenColumns.length;e.hide(!1,!0),this.mode==="collapse"&&(this.hiddenColumns.unshift(e),this.generateCollapsedContent(),this.collapseHandleColumn&&!t&&this.collapseHandleColumn.show())}showColumn(e){var t;e.show(!1,!0),e.setWidth(e.getWidth()),this.mode==="collapse"&&(t=this.hiddenColumns.indexOf(e),t>-1&&this.hiddenColumns.splice(t,1),this.generateCollapsedContent(),this.collapseHandleColumn&&!this.hiddenColumns.length&&this.collapseHandleColumn.hide())}update(){for(var e=!0;e;){let t=this.table.modules.layout.getMode()=="fitColumns"?this.table.columnManager.getFlexBaseWidth():this.table.columnManager.getWidth(),i=(this.table.options.headerVisible?this.table.columnManager.element.clientWidth:this.table.element.clientWidth)-t;if(i<0){let s=this.columns[this.index];s?(this.hideColumn(s),this.index++):e=!1}else{let s=this.columns[this.index-1];s&&i>0&&i>=s.getWidth()?(this.showColumn(s),this.index--):e=!1}this.table.rowManager.activeRowsCount||this.table.rowManager.renderEmptyScroll()}}generateCollapsedContent(){var e=this.table.rowManager.getDisplayRows();e.forEach(t=>{this.generateCollapsedRowContent(t)})}generateCollapsedRowContent(e){var t,i;if(e.modules.responsiveLayout){for(t=e.modules.responsiveLayout.element;t.firstChild;)t.removeChild(t.firstChild);i=this.collapseFormatter(this.generateCollapsedRowData(e)),i&&t.appendChild(i),e.calcHeight(!0)}}generateCollapsedRowData(e){var t=e.getData(),i=[],s;return this.hiddenColumns.forEach(n=>{var r=n.getFieldValue(t);if(n.definition.title&&n.field)if(n.modules.format&&this.table.options.responsiveLayoutCollapseUseFormatters){let o=function(a){a()};s={value:!1,data:{},getValue:function(){return r},getData:function(){return t},getType:function(){return"cell"},getElement:function(){return document.createElement("div")},getRow:function(){return e.getComponent()},getColumn:function(){return n.getComponent()},getTable:()=>this.table},i.push({field:n.field,title:n.definition.title,value:n.modules.format.formatter.call(this.table.modules.format,s,n.modules.format.params,o)})}else i.push({field:n.field,title:n.definition.title,value:r})}),i}formatCollapsedData(e){var t=document.createElement("table");return e.forEach(i=>{var s=document.createElement("tr"),n=document.createElement("td"),r=document.createElement("td"),o,a=document.createElement("strong");n.appendChild(a),this.modules.localize.bind("columns|"+i.field,function(h){a.innerHTML=h||i.title}),i.value instanceof Node?(o=document.createElement("div"),o.appendChild(i.value),r.appendChild(o)):r.innerHTML=i.value,s.appendChild(n),s.appendChild(r),t.appendChild(s)}),Object.keys(e).length?t:""}}b(De,"moduleName","responsiveLayout"),b(De,"moduleExtensions",Yi);function $i(l,e,t){var i=document.createElement("input"),s=!1;if(i.type="checkbox",i.setAttribute("aria-label","Select Row"),this.table.modExists("selectRow",!0))if(i.addEventListener("click",r=>{r.stopPropagation()}),typeof l.getRow=="function"){var n=l.getRow();n instanceof oe?(i.addEventListener("change",r=>{this.table.options.selectableRowsRangeMode==="click"&&s?s=!1:n.toggleSelect()}),this.table.options.selectableRowsRangeMode==="click"&&i.addEventListener("click",r=>{s=!0,this.table.modules.selectRow.handleComplexRowClick(n._row,r)}),i.checked=n.isSelected&&n.isSelected(),this.table.modules.selectRow.registerRowSelectCheckbox(n,i)):i=""}else i.addEventListener("change",r=>{this.table.modules.selectRow.selectedRows.length?this.table.deselectRow():this.table.selectRow(e.rowRange)}),this.table.modules.selectRow.registerHeaderSelectCheckbox(i);return i}var Qi={format:{formatters:{rowSelection:$i}}};class ze extends w{constructor(e){super(e),this.selecting=!1,this.lastClickedRow=!1,this.selectPrev=[],this.selectedRows=[],this.headerCheckboxElement=null,this.registerTableOption("selectableRows","highlight"),this.registerTableOption("selectableRowsRangeMode","drag"),this.registerTableOption("selectableRowsRollingSelection",!0),this.registerTableOption("selectableRowsPersistence",!0),this.registerTableOption("selectableRowsCheck",function(t,i){return!0}),this.registerTableFunction("selectRow",this.selectRows.bind(this)),this.registerTableFunction("deselectRow",this.deselectRows.bind(this)),this.registerTableFunction("toggleSelectRow",this.toggleRow.bind(this)),this.registerTableFunction("getSelectedRows",this.getSelectedRows.bind(this)),this.registerTableFunction("getSelectedData",this.getSelectedData.bind(this)),this.registerComponentFunction("row","select",this.selectRows.bind(this)),this.registerComponentFunction("row","deselect",this.deselectRows.bind(this)),this.registerComponentFunction("row","toggleSelect",this.toggleRow.bind(this)),this.registerComponentFunction("row","isSelected",this.isRowSelected.bind(this))}initialize(){this.deprecatedOptionsCheck(),this.table.options.selectableRows==="highlight"&&this.table.options.selectableRange&&(this.table.options.selectableRows=!1),this.table.options.selectableRows!==!1&&(this.subscribe("row-init",this.initializeRow.bind(this)),this.subscribe("row-deleting",this.rowDeleted.bind(this)),this.subscribe("rows-wipe",this.clearSelectionData.bind(this)),this.subscribe("rows-retrieve",this.rowRetrieve.bind(this)),this.table.options.selectableRows&&!this.table.options.selectableRowsPersistence&&this.subscribe("data-refreshing",this.deselectRows.bind(this)))}deprecatedOptionsCheck(){}rowRetrieve(e,t){return e==="selected"?this.selectedRows:t}rowDeleted(e){this._deselectRow(e,!0)}clearSelectionData(e){var t=this.selectedRows.length;this.selecting=!1,this.lastClickedRow=!1,this.selectPrev=[],this.selectedRows=[],t&&e!==!0&&this._rowSelectionChanged()}initializeRow(e){var t=this,i=t.checkRowSelectability(e),s=e.getElement(),n=function(){setTimeout(function(){t.selecting=!1},50),document.body.removeEventListener("mouseup",n)};e.modules.select={selected:!1},s.classList.toggle("tabulator-selectable",i),s.classList.toggle("tabulator-unselectable",!i),t.checkRowSelectability(e)&&t.table.options.selectableRows&&t.table.options.selectableRows!="highlight"&&(t.table.options.selectableRowsRangeMode==="click"?s.addEventListener("click",this.handleComplexRowClick.bind(this,e)):(s.addEventListener("click",function(r){(!t.table.modExists("edit")||!t.table.modules.edit.getCurrentCell())&&t.table._clearSelection(),t.selecting||t.toggleRow(e)}),s.addEventListener("mousedown",function(r){if(r.shiftKey)return t.table._clearSelection(),t.selecting=!0,t.selectPrev=[],document.body.addEventListener("mouseup",n),document.body.addEventListener("keyup",n),t.toggleRow(e),!1}),s.addEventListener("mouseenter",function(r){t.selecting&&(t.table._clearSelection(),t.toggleRow(e),t.selectPrev[1]==e&&t.toggleRow(t.selectPrev[0]))}),s.addEventListener("mouseout",function(r){t.selecting&&(t.table._clearSelection(),t.selectPrev.unshift(e))})))}handleComplexRowClick(e,t){if(t.shiftKey){this.table._clearSelection(),this.lastClickedRow=this.lastClickedRow||e;var i=this.table.rowManager.getDisplayRowIndex(this.lastClickedRow),s=this.table.rowManager.getDisplayRowIndex(e),n=i<=s?i:s,r=i>=s?i:s,o=this.table.rowManager.getDisplayRows().slice(0),a=o.splice(n,r-n+1);t.ctrlKey||t.metaKey?(a.forEach(h=>{h!==this.lastClickedRow&&(this.table.options.selectableRows!==!0&&!this.isRowSelected(e)?this.selectedRows.lengththis.table.options.selectableRows&&(a=a.slice(0,this.table.options.selectableRows)),this.selectRows(a)),this.table._clearSelection()}else t.ctrlKey||t.metaKey?(this.toggleRow(e),this.lastClickedRow=e):(this.deselectRows(void 0,!0),this.selectRows(e),this.lastClickedRow=e)}checkRowSelectability(e){return e&&e.type==="row"?this.table.options.selectableRowsCheck.call(this.table,e.getComponent()):!1}toggleRow(e){this.checkRowSelectability(e)&&(e.modules.select&&e.modules.select.selected?this._deselectRow(e):this._selectRow(e))}selectRows(e){var t=[],i,s;switch(typeof e){case"undefined":i=this.table.rowManager.rows;break;case"number":i=this.table.rowManager.findRow(e);break;case"string":i=this.table.rowManager.findRow(e),i||(i=this.table.rowManager.getRows(e));break;default:i=e;break}Array.isArray(i)?i.length&&(i.forEach(n=>{s=this._selectRow(n,!0,!0),s&&t.push(s)}),this._rowSelectionChanged(!1,t)):i&&this._selectRow(i,!1,!0)}_selectRow(e,t,i){if(!isNaN(this.table.options.selectableRows)&&this.table.options.selectableRows!==!0&&!i&&this.selectedRows.length>=this.table.options.selectableRows)if(this.table.options.selectableRowsRollingSelection)this._deselectRow(this.selectedRows[0]);else return!1;var s=this.table.rowManager.findRow(e);if(s){if(this.selectedRows.indexOf(s)==-1)return s.getElement().classList.add("tabulator-selected"),s.modules.select||(s.modules.select={}),s.modules.select.selected=!0,s.modules.select.checkboxEl&&(s.modules.select.checkboxEl.checked=!0),this.selectedRows.push(s),this.table.options.dataTreeSelectPropagate&&this.childRowSelection(s,!0),this.dispatchExternal("rowSelected",s.getComponent()),this._rowSelectionChanged(t,s),s}else t||console.warn("Selection Error - No such row found, ignoring selection:"+e)}isRowSelected(e){return this.selectedRows.indexOf(e)!==-1}deselectRows(e,t){var i=[],s,n;switch(typeof e){case"undefined":s=Object.assign([],this.selectedRows);break;case"number":s=this.table.rowManager.findRow(e);break;case"string":s=this.table.rowManager.findRow(e),s||(s=this.table.rowManager.getRows(e));break;default:s=e;break}Array.isArray(s)?s.length&&(s.forEach(r=>{n=this._deselectRow(r,!0,!0),n&&i.push(n)}),this._rowSelectionChanged(t,[],i)):s&&this._deselectRow(s,t,!0)}_deselectRow(e,t){var i=this,s=i.table.rowManager.findRow(e),n,r;if(s){if(n=i.selectedRows.findIndex(function(o){return o==s}),n>-1)return r=s.getElement(),r&&r.classList.remove("tabulator-selected"),s.modules.select||(s.modules.select={}),s.modules.select.selected=!1,s.modules.select.checkboxEl&&(s.modules.select.checkboxEl.checked=!1),i.selectedRows.splice(n,1),this.table.options.dataTreeSelectPropagate&&this.childRowSelection(s,!1),this.dispatchExternal("rowDeselected",s.getComponent()),i._rowSelectionChanged(t,void 0,s),s}else t||console.warn("Deselection Error - No such row found, ignoring selection:"+e)}getSelectedData(){var e=[];return this.selectedRows.forEach(function(t){e.push(t.getData())}),e}getSelectedRows(){var e=[];return this.selectedRows.forEach(function(t){e.push(t.getComponent())}),e}_rowSelectionChanged(e,t=[],i=[]){this.headerCheckboxElement&&(this.selectedRows.length===0?(this.headerCheckboxElement.checked=!1,this.headerCheckboxElement.indeterminate=!1):this.table.rowManager.rows.length===this.selectedRows.length?(this.headerCheckboxElement.checked=!0,this.headerCheckboxElement.indeterminate=!1):(this.headerCheckboxElement.indeterminate=!0,this.headerCheckboxElement.checked=!1)),e||(Array.isArray(t)||(t=[t]),t=t.map(s=>s.getComponent()),Array.isArray(i)||(i=[i]),i=i.map(s=>s.getComponent()),this.dispatchExternal("rowSelectionChanged",this.getSelectedData(),this.getSelectedRows(),t,i))}registerRowSelectCheckbox(e,t){e._row.modules.select||(e._row.modules.select={}),e._row.modules.select.checkboxEl=t}registerHeaderSelectCheckbox(e){this.headerCheckboxElement=e}childRowSelection(e,t){var i=this.table.modules.dataTree.getChildren(e,!0,!0);if(t)for(let s of i)this._selectRow(s,!0);else for(let s of i)this._deselectRow(s,!0)}}b(ze,"moduleName","selectRow"),b(ze,"moduleExtensions",Qi);class Zi{constructor(e){return this._range=e,new Proxy(this,{get:function(t,i,s){return typeof t[i]<"u"?t[i]:t._range.table.componentFunctionBinder.handle("range",t._range,i)}})}getElement(){return this._range.element}getData(){return this._range.getData()}getCells(){return this._range.getCells(!0,!0)}getStructuredCells(){return this._range.getStructuredCells()}getRows(){return this._range.getRows().map(e=>e.getComponent())}getColumns(){return this._range.getColumns().map(e=>e.getComponent())}getBounds(){return this._range.getBounds()}getTopEdge(){return this._range.top}getBottomEdge(){return this._range.bottom}getLeftEdge(){return this._range.left}getRightEdge(){return this._range.right}setBounds(e,t){this._range.destroyedGuard("setBounds")&&this._range.setBounds(e&&e._cell,t&&t._cell)}setStartBound(e){this._range.destroyedGuard("setStartBound")&&(this._range.setEndBound(e&&e._cell),this._range.rangeManager.layoutElement())}setEndBound(e){this._range.destroyedGuard("setEndBound")&&(this._range.setEndBound(e&&e._cell),this._range.rangeManager.layoutElement())}clearValues(){this._range.destroyedGuard("clearValues")&&this._range.clearValues()}remove(){this._range.destroyedGuard("remove")&&this._range.destroy(!0)}}class es extends M{constructor(e,t,i,s){super(e),this.rangeManager=t,this.element=null,this.initialized=!1,this.initializing={start:!1,end:!1},this.destroyed=!1,this.top=0,this.bottom=0,this.left=0,this.right=0,this.table=e,this.start={row:0,col:0},this.end={row:0,col:0},this.rangeManager.rowHeader&&(this.left=1,this.right=1,this.start.col=1,this.end.col=1),this.initElement(),setTimeout(()=>{this.initBounds(i,s)})}initElement(){this.element=document.createElement("div"),this.element.classList.add("tabulator-range")}initBounds(e,t){this._updateMinMax(),e&&this.setBounds(e,t||e)}setStart(e,t){(this.start.row!==e||this.start.col!==t)&&(this.start.row=e,this.start.col=t,this.initializing.start=!0,this._updateMinMax())}setEnd(e,t){(this.end.row!==e||this.end.col!==t)&&(this.end.row=e,this.end.col=t,this.initializing.end=!0,this._updateMinMax())}setBounds(e,t,i){e&&this.setStartBound(e),this.setEndBound(t||e),this.rangeManager.layoutElement(i)}setStartBound(e){var t,i;e.type==="column"?this.rangeManager.columnSelection&&this.setStart(0,e.getPosition()-1):(t=e.row.position-1,i=e.column.getPosition()-1,e.column===this.rangeManager.rowHeader?this.setStart(t,1):this.setStart(t,i))}setEndBound(e){var t=this._getTableRows().length,i,s,n;e.type==="column"?this.rangeManager.columnSelection&&(this.rangeManager.selecting==="column"?this.setEnd(t-1,e.getPosition()-1):this.rangeManager.selecting==="cell"&&this.setEnd(0,e.getPosition()-1)):(i=e.row.position-1,s=e.column.getPosition()-1,n=e.column===this.rangeManager.rowHeader,this.rangeManager.selecting==="row"?this.setEnd(i,this._getTableColumns().length-1):this.rangeManager.selecting!=="row"&&n?this.setEnd(i,0):this.rangeManager.selecting==="column"?this.setEnd(t-1,s):this.setEnd(i,s))}_updateMinMax(){this.top=Math.min(this.start.row,this.end.row),this.bottom=Math.max(this.start.row,this.end.row),this.left=Math.min(this.start.col,this.end.col),this.right=Math.max(this.start.col,this.end.col),this.initialized?this.dispatchExternal("rangeChanged",this.getComponent()):this.initializing.start&&this.initializing.end&&(this.initialized=!0,this.dispatchExternal("rangeAdded",this.getComponent()))}_getTableColumns(){return this.table.columnManager.getVisibleColumnsByIndex()}_getTableRows(){return this.table.rowManager.getDisplayRows().filter(e=>e.type==="row")}layout(){var e=this.table.rowManager.renderer.vDomTop,t=this.table.rowManager.renderer.vDomBottom,i=this.table.columnManager.renderer.leftCol,s=this.table.columnManager.renderer.rightCol,n,r,o,a,h,d,u,c,f,g;this.table.options.renderHorizontal==="virtual"&&this.rangeManager.rowHeader&&(s+=1),e==null&&(e=0),t==null&&(t=1/0),i==null&&(i=0),s==null&&(s=1/0),this.overlaps(i,e,s,t)&&(n=Math.max(this.top,e),r=Math.min(this.bottom,t),o=Math.max(this.left,i),a=Math.min(this.right,s),h=this.rangeManager.getCell(n,o),d=this.rangeManager.getCell(r,a),u=h.getElement(),c=d.getElement(),f=h.row.getElement(),g=d.row.getElement(),this.element.classList.add("tabulator-range-active"),this.table.rtl?(this.element.style.right=f.offsetWidth-u.offsetLeft-u.offsetWidth+"px",this.element.style.width=u.offsetLeft+u.offsetWidth-c.offsetLeft+"px"):(this.element.style.left=f.offsetLeft+u.offsetLeft+"px",this.element.style.width=c.offsetLeft+c.offsetWidth-u.offsetLeft+"px"),this.element.style.top=f.offsetTop+"px",this.element.style.height=g.offsetTop+g.offsetHeight-f.offsetTop+"px")}atTopLeft(e){return e.row.position-1===this.top&&e.column.getPosition()-1===this.left}atBottomRight(e){return e.row.position-1===this.bottom&&e.column.getPosition()-1===this.right}occupies(e){return this.occupiesRow(e.row)&&this.occupiesColumn(e.column)}occupiesRow(e){return this.top<=e.position-1&&e.position-1<=this.bottom}occupiesColumn(e){return this.left<=e.getPosition()-1&&e.getPosition()-1<=this.right}overlaps(e,t,i,s){return!(this.left>i||e>this.right||this.top>s||t>this.bottom)}getData(){var e=[],t=this.getRows(),i=this.getColumns();return t.forEach(s=>{var n=s.getData(),r={};i.forEach(o=>{r[o.field]=n[o.field]}),e.push(r)}),e}getCells(e,t){var i=[],s=this.getRows(),n=this.getColumns();return e?i=s.map(r=>{var o=[];return r.getCells().forEach(a=>{n.includes(a.column)&&o.push(t?a.getComponent():a)}),o}):s.forEach(r=>{r.getCells().forEach(o=>{n.includes(o.column)&&i.push(t?o.getComponent():o)})}),i}getStructuredCells(){return this.getCells(!0,!0)}getRows(){return this._getTableRows().slice(this.top,this.bottom+1)}getColumns(){return this._getTableColumns().slice(this.left,this.right+1)}clearValues(){var e=this.getCells(),t=this.table.options.selectableRangeClearCellsValue;this.table.blockRedraw(),e.forEach(i=>{i.setValue(t)}),this.table.restoreRedraw()}getBounds(e){var t=this.getCells(!1,e),i={start:null,end:null};return t.length?(i.start=t[0],i.end=t[t.length-1]):console.warn("No bounds defined on range"),i}getComponent(){return this.component||(this.component=new Zi(this)),this.component}destroy(e){this.destroyed=!0,this.element.remove(),e&&this.rangeManager.rangeRemoved(this),this.initialized&&this.dispatchExternal("rangeRemoved",this.getComponent())}destroyedGuard(e){return this.destroyed&&console.warn("You cannot call the "+e+" function on a destroyed range"),!this.destroyed}}var ts={rangeJumpUp:["ctrl + 38","meta + 38"],rangeJumpDown:["ctrl + 40","meta + 40"],rangeJumpLeft:["ctrl + 37","meta + 37"],rangeJumpRight:["ctrl + 39","meta + 39"],rangeExpandUp:"shift + 38",rangeExpandDown:"shift + 40",rangeExpandLeft:"shift + 37",rangeExpandRight:"shift + 39",rangeExpandJumpUp:["ctrl + shift + 38","meta + shift + 38"],rangeExpandJumpDown:["ctrl + shift + 40","meta + shift + 40"],rangeExpandJumpLeft:["ctrl + shift + 37","meta + shift + 37"],rangeExpandJumpRight:["ctrl + shift + 39","meta + shift + 39"]},is={rangeJumpLeft:function(l){this.dispatch("keybinding-nav-range",l,"left",!0,!1)},rangeJumpRight:function(l){this.dispatch("keybinding-nav-range",l,"right",!0,!1)},rangeJumpUp:function(l){this.dispatch("keybinding-nav-range",l,"up",!0,!1)},rangeJumpDown:function(l){this.dispatch("keybinding-nav-range",l,"down",!0,!1)},rangeExpandLeft:function(l){this.dispatch("keybinding-nav-range",l,"left",!1,!0)},rangeExpandRight:function(l){this.dispatch("keybinding-nav-range",l,"right",!1,!0)},rangeExpandUp:function(l){this.dispatch("keybinding-nav-range",l,"up",!1,!0)},rangeExpandDown:function(l){this.dispatch("keybinding-nav-range",l,"down",!1,!0)},rangeExpandJumpLeft:function(l){this.dispatch("keybinding-nav-range",l,"left",!0,!0)},rangeExpandJumpRight:function(l){this.dispatch("keybinding-nav-range",l,"right",!0,!0)},rangeExpandJumpUp:function(l){this.dispatch("keybinding-nav-range",l,"up",!0,!0)},rangeExpandJumpDown:function(l){this.dispatch("keybinding-nav-range",l,"down",!0,!0)}},ss={range:function(l){var e=[],t=this.table.modules.selectRange.activeRange,i=!1,s,n,r,o,a;return a=l.length,t&&(s=t.getBounds(),n=s.start,s.start===s.end&&(i=!0),n&&(e=this.table.rowManager.activeRows.slice(),r=e.indexOf(n.row),i?o=l.length:o=e.indexOf(s.end.row)-r+1,r>-1&&(this.table.blockRedraw(),e=e.slice(r,r+o),e.forEach((h,d)=>{h.updateData(l[d%a])}),this.table.restoreRedraw()))),e}},ns={range:function(l){var e=[],t=[],i=this.table.modules.selectRange.activeRange,s=!1,n,r,o,a,h;return i&&(n=i.getBounds(),r=n.start,n.start===n.end&&(s=!0),r&&(l=l.split(` +`),l.forEach(function(d){e.push(d.split(" "))}),e.length&&(a=this.table.columnManager.getVisibleColumnsByIndex(),h=a.indexOf(r.column),h>-1)))?(s?o=e[0].length:o=a.indexOf(n.end.column)-h+1,a=a.slice(h,h+o),e.forEach(d=>{var u={},c=d.length;a.forEach(function(f,g){u[f.field]=d[g%c]}),t.push(u)}),t):!1}},rs={range:function(){var l=this.modules.selectRange.selectedColumns();return this.columnManager.rowHeader&&l.unshift(this.columnManager.rowHeader),l}},os={range:function(){return this.modules.selectRange.selectedRows()}},as={keybindings:{bindings:ts,actions:is},clipboard:{pasteActions:ss,pasteParsers:ns},export:{columnLookups:rs,rowLookups:os}};class re extends w{constructor(e){super(e),this.selecting="cell",this.mousedown=!1,this.ranges=[],this.overlay=null,this.rowHeader=null,this.layoutChangeTimeout=null,this.columnSelection=!1,this.rowSelection=!1,this.maxRanges=0,this.activeRange=!1,this.blockKeydown=!1,this.keyDownEvent=this._handleKeyDown.bind(this),this.mouseUpEvent=this._handleMouseUp.bind(this),this.registerTableOption("selectableRange",!1),this.registerTableOption("selectableRangeColumns",!1),this.registerTableOption("selectableRangeRows",!1),this.registerTableOption("selectableRangeClearCells",!1),this.registerTableOption("selectableRangeClearCellsValue",void 0),this.registerTableFunction("getRangesData",this.getRangesData.bind(this)),this.registerTableFunction("getRanges",this.getRanges.bind(this)),this.registerTableFunction("addRange",this.addRangeFromComponent.bind(this)),this.registerComponentFunction("cell","getRanges",this.cellGetRanges.bind(this)),this.registerComponentFunction("row","getRanges",this.rowGetRanges.bind(this)),this.registerComponentFunction("column","getRanges",this.colGetRanges.bind(this))}initialize(){this.options("selectableRange")&&(this.options("selectableRows")?console.warn("SelectRange functionality cannot be used in conjunction with row selection"):(this.maxRanges=this.options("selectableRange"),this.initializeTable(),this.initializeWatchers()),this.options("columns").findIndex(e=>e.frozen)>0&&console.warn("Having frozen column in arbitrary position with selectRange option may result in unpredictable behavior."),this.options("columns").filter(e=>e.frozen)>1&&console.warn("Having multiple frozen columns with selectRange option may result in unpredictable behavior."))}initializeTable(){this.overlay=document.createElement("div"),this.overlay.classList.add("tabulator-range-overlay"),this.rangeContainer=document.createElement("div"),this.rangeContainer.classList.add("tabulator-range-container"),this.activeRangeCellElement=document.createElement("div"),this.activeRangeCellElement.classList.add("tabulator-range-cell-active"),this.overlay.appendChild(this.rangeContainer),this.overlay.appendChild(this.activeRangeCellElement),this.table.rowManager.element.addEventListener("keydown",this.keyDownEvent),this.resetRanges(),this.table.rowManager.element.appendChild(this.overlay),this.table.columnManager.element.setAttribute("tabindex",0),this.table.element.classList.add("tabulator-ranges")}initializeWatchers(){this.columnSelection=this.options("selectableRangeColumns"),this.rowSelection=this.options("selectableRangeRows"),this.subscribe("column-init",this.initializeColumn.bind(this)),this.subscribe("column-mousedown",this.handleColumnMouseDown.bind(this)),this.subscribe("column-mousemove",this.handleColumnMouseMove.bind(this)),this.subscribe("column-resized",this.handleColumnResized.bind(this)),this.subscribe("column-moving",this.handleColumnMoving.bind(this)),this.subscribe("column-moved",this.handleColumnMoved.bind(this)),this.subscribe("column-width",this.layoutChange.bind(this)),this.subscribe("column-height",this.layoutChange.bind(this)),this.subscribe("column-resized",this.layoutChange.bind(this)),this.subscribe("columns-loaded",this.updateHeaderColumn.bind(this)),this.subscribe("cell-height",this.layoutChange.bind(this)),this.subscribe("cell-rendered",this.renderCell.bind(this)),this.subscribe("cell-mousedown",this.handleCellMouseDown.bind(this)),this.subscribe("cell-mousemove",this.handleCellMouseMove.bind(this)),this.subscribe("cell-click",this.handleCellClick.bind(this)),this.subscribe("cell-editing",this.handleEditingCell.bind(this)),this.subscribe("page-changed",this.redraw.bind(this)),this.subscribe("scroll-vertical",this.layoutChange.bind(this)),this.subscribe("scroll-horizontal",this.layoutChange.bind(this)),this.subscribe("data-destroy",this.tableDestroyed.bind(this)),this.subscribe("data-processed",this.resetRanges.bind(this)),this.subscribe("table-layout",this.layoutElement.bind(this)),this.subscribe("table-redraw",this.redraw.bind(this)),this.subscribe("table-destroy",this.tableDestroyed.bind(this)),this.subscribe("edit-editor-clear",this.finishEditingCell.bind(this)),this.subscribe("edit-blur",this.restoreFocus.bind(this)),this.subscribe("keybinding-nav-prev",this.keyNavigate.bind(this,"left")),this.subscribe("keybinding-nav-next",this.keyNavigate.bind(this,"right")),this.subscribe("keybinding-nav-left",this.keyNavigate.bind(this,"left")),this.subscribe("keybinding-nav-right",this.keyNavigate.bind(this,"right")),this.subscribe("keybinding-nav-up",this.keyNavigate.bind(this,"up")),this.subscribe("keybinding-nav-down",this.keyNavigate.bind(this,"down")),this.subscribe("keybinding-nav-range",this.keyNavigateRange.bind(this))}initializeColumn(e){this.columnSelection&&e.definition.headerSort&&this.options("headerSortClickElement")!=="icon"&&console.warn("Using column headerSort with selectableRangeColumns option may result in unpredictable behavior. Consider using headerSortClickElement: 'icon'."),e.modules.edit}updateHeaderColumn(){var e;this.rowSelection&&(this.rowHeader=this.table.columnManager.getVisibleColumnsByIndex()[0],this.rowHeader&&(this.rowHeader.definition.cssClass=this.rowHeader.definition.cssClass+" tabulator-range-row-header",this.rowHeader.definition.headerSort&&console.warn("Using column headerSort with selectableRangeRows option may result in unpredictable behavior"),this.rowHeader.definition.editor&&console.warn("Using column editor with selectableRangeRows option may result in unpredictable behavior"))),this.table.modules.frozenColumns&&this.table.modules.frozenColumns.active&&(e=this.table.modules.frozenColumns.getFrozenColumns(),(e.length>1||e.length===1&&e[0]!==this.rowHeader)&&console.warn("Using frozen columns that are not the range header in combination with the selectRange option may result in unpredictable behavior"))}getRanges(){return this.ranges.map(e=>e.getComponent())}getRangesData(){return this.ranges.map(e=>e.getData())}addRangeFromComponent(e,t){return e=e?e._cell:null,t=t?t._cell:null,this.addRange(e,t)}cellGetRanges(e){var t=[];return e.column===this.rowHeader?t=this.ranges.filter(i=>i.occupiesRow(e.row)):t=this.ranges.filter(i=>i.occupies(e)),t.map(i=>i.getComponent())}rowGetRanges(e){var t=this.ranges.filter(i=>i.occupiesRow(e));return t.map(i=>i.getComponent())}colGetRanges(e){var t=this.ranges.filter(i=>i.occupiesColumn(e));return t.map(i=>i.getComponent())}_handleMouseUp(e){this.mousedown=!1,document.removeEventListener("mouseup",this.mouseUpEvent)}_handleKeyDown(e){if(!this.blockKeydown&&(!this.table.modules.edit||this.table.modules.edit&&!this.table.modules.edit.currentCell)){if(e.key==="Enter"){if(this.table.modules.edit&&this.table.modules.edit.currentCell)return;this.table.modules.edit.editCell(this.getActiveCell()),e.preventDefault()}(e.key==="Backspace"||e.key==="Delete")&&this.options("selectableRangeClearCells")&&this.activeRange&&this.activeRange.clearValues()}}initializeFocus(e){var t;this.restoreFocus();try{document.selection?(t=document.body.createTextRange(),t.moveToElementText(e.getElement()),t.select()):window.getSelection&&(t=document.createRange(),t.selectNode(e.getElement()),window.getSelection().removeAllRanges(),window.getSelection().addRange(t))}catch{}}restoreFocus(e){return this.table.rowManager.element.focus(),!0}handleColumnResized(e){var t;this.selecting!=="column"&&this.selecting!=="all"||(t=this.ranges.some(i=>i.occupiesColumn(e)),t&&this.ranges.forEach(i=>{var s=i.getColumns(!0);s.forEach(n=>{n!==e&&n.setWidth(e.width)})}))}handleColumnMoving(e,t){this.resetRanges().setBounds(t),this.overlay.style.visibility="hidden"}handleColumnMoved(e,t,i){this.activeRange.setBounds(e),this.layoutElement()}handleColumnMouseDown(e,t){e.button===2&&(this.selecting==="column"||this.selecting==="all")&&this.activeRange.occupiesColumn(t)||this.table.options.movableColumns&&this.selecting==="column"&&this.activeRange.occupiesColumn(t)||(this.mousedown=!0,document.addEventListener("mouseup",this.mouseUpEvent),this.newSelection(e,t))}handleColumnMouseMove(e,t){t===this.rowHeader||!this.mousedown||this.selecting==="all"||this.activeRange.setBounds(!1,t,!0)}renderCell(e){var t=e.getElement(),i=this.ranges.findIndex(s=>s.occupies(e));t.classList.toggle("tabulator-range-selected",i!==-1),t.classList.toggle("tabulator-range-only-cell-selected",this.ranges.length===1&&this.ranges[0].atTopLeft(e)&&this.ranges[0].atBottomRight(e)),t.dataset.range=i}handleCellMouseDown(e,t){e.button===2&&(this.activeRange.occupies(t)||(this.selecting==="row"||this.selecting==="all")&&this.activeRange.occupiesRow(t.row))||(this.mousedown=!0,document.addEventListener("mouseup",this.mouseUpEvent),this.newSelection(e,t))}handleCellMouseMove(e,t){!this.mousedown||this.selecting==="all"||this.activeRange.setBounds(!1,t,!0)}handleCellClick(e,t){this.initializeFocus(t)}handleEditingCell(e){this.activeRange&&this.activeRange.setBounds(e)}finishEditingCell(){this.blockKeydown=!0,this.table.rowManager.element.focus(),setTimeout(()=>{this.blockKeydown=!1},10)}keyNavigate(e,t){this.navigate(!1,!1,e),t.preventDefault()}keyNavigateRange(e,t,i,s){this.navigate(i,s,t),e.preventDefault()}navigate(e,t,i){var s=!1,n,r,o,a,h,d;if(this.table.modules.edit&&this.table.modules.edit.currentCell)return!1;if(this.ranges.length>1&&(this.ranges=this.ranges.filter(u=>u===this.activeRange?(u.setEnd(u.start.row,u.start.col),!0):(u.destroy(),!1))),n=this.activeRange,r=t?n.end:n.start,o=r.row,a=r.col,e)switch(i){case"left":a=this.findJumpCellLeft(n.start.row,r.col);break;case"right":a=this.findJumpCellRight(n.start.row,r.col);break;case"up":o=this.findJumpCellUp(r.row,n.start.col);break;case"down":o=this.findJumpCellDown(r.row,n.start.col);break}else{if(t&&(this.selecting==="row"&&(i==="left"||i==="right")||this.selecting==="column"&&(i==="up"||i==="down")))return;switch(i){case"left":a=Math.max(a-1,0);break;case"right":a=Math.min(a+1,this.getTableColumns().length-1);break;case"up":o=Math.max(o-1,0);break;case"down":o=Math.min(o+1,this.getTableRows().length-1);break}}if(this.rowHeader&&a===0&&(a=1),s=a!==r.col||o!==r.row,t||n.setStart(o,a),n.setEnd(o,a),t||(this.selecting="cell"),s)return h=this.getRowByRangePos(n.end.row),d=this.getColumnByRangePos(n.end.col),(i==="left"||i==="right")&&d.getElement().parentNode===null?d.getComponent().scrollTo(void 0,!1):(i==="up"||i==="down")&&h.getElement().parentNode===null?h.getComponent().scrollTo(void 0,!1):this.autoScroll(n,h.getElement(),d.getElement()),this.layoutElement(),!0}rangeRemoved(e){this.ranges=this.ranges.filter(t=>t!==e),this.activeRange===e&&(this.ranges.length?this.activeRange=this.ranges[this.ranges.length-1]:this.addRange()),this.layoutElement()}findJumpRow(e,t,i,s,n){return i&&(t=t.reverse()),this.findJumpItem(s,n,t,function(r){return r.getData()[e.getField()]})}findJumpCol(e,t,i,s,n){return i&&(t=t.reverse()),this.findJumpItem(s,n,t,function(r){return e.getData()[r.getField()]})}findJumpItem(e,t,i,s){var n;for(let r of i){let o=s(r);if(e){if(n=r,o)break}else if(t){if(n=r,o)break}else if(o)n=r;else break}return n}findJumpCellLeft(e,t){var i=this.getRowByRangePos(e),s=this.getTableColumns(),n=this.isEmpty(i.getData()[s[t].getField()]),r=s[t-1]?this.isEmpty(i.getData()[s[t-1].getField()]):!1,o=this.rowHeader?s.slice(1,t):s.slice(0,t),a=this.findJumpCol(i,o,!0,n,r);return a?a.getPosition()-1:t}findJumpCellRight(e,t){var i=this.getRowByRangePos(e),s=this.getTableColumns(),n=this.isEmpty(i.getData()[s[t].getField()]),r=s[t+1]?this.isEmpty(i.getData()[s[t+1].getField()]):!1,o=this.findJumpCol(i,s.slice(t+1,s.length),!1,n,r);return o?o.getPosition()-1:t}findJumpCellUp(e,t){var i=this.getColumnByRangePos(t),s=this.getTableRows(),n=this.isEmpty(s[e].getData()[i.getField()]),r=s[e-1]?this.isEmpty(s[e-1].getData()[i.getField()]):!1,o=this.findJumpRow(i,s.slice(0,e),!0,n,r);return o?o.position-1:e}findJumpCellDown(e,t){var i=this.getColumnByRangePos(t),s=this.getTableRows(),n=this.isEmpty(s[e].getData()[i.getField()]),r=s[e+1]?this.isEmpty(s[e+1].getData()[i.getField()]):!1,o=this.findJumpRow(i,s.slice(e+1,s.length),!1,n,r);return o?o.position-1:e}newSelection(e,t){var i;if(t.type==="column"){if(!this.columnSelection)return;if(t===this.rowHeader){i=this.resetRanges(),this.selecting="all";var s,n=this.getCell(-1,-1);this.rowHeader?s=this.getCell(0,1):s=this.getCell(0,0),i.setBounds(s,n);return}else this.selecting="column"}else t.column===this.rowHeader?this.selecting="row":this.selecting="cell";e.shiftKey?this.activeRange.setBounds(!1,t):e.ctrlKey?this.addRange().setBounds(t):this.resetRanges().setBounds(t)}autoScroll(e,t,i){var s=this.table.rowManager.element,n,r,o,a,h;typeof t>"u"&&(t=this.getRowByRangePos(e.end.row).getElement()),typeof i>"u"&&(i=this.getColumnByRangePos(e.end.col).getElement()),this.rowHeader&&(n=this.rowHeader.getElement()),r={left:i.offsetLeft,right:i.offsetLeft+i.offsetWidth,top:t.offsetTop,bottom:t.offsetTop+t.offsetHeight},o={left:s.scrollLeft,right:Math.ceil(s.scrollLeft+s.clientWidth),top:s.scrollTop,bottom:s.scrollTop+s.offsetHeight-this.table.rowManager.scrollbarWidth},n&&(o.left+=n.offsetWidth),a=o.lefto.right&&(s.scrollLeft=r.right-s.clientWidth)),h||(r.topo.bottom&&(s.scrollTop=r.bottom-s.clientHeight))}layoutChange(){this.overlay.style.visibility="hidden",clearTimeout(this.layoutChangeTimeout),this.layoutChangeTimeout=setTimeout(this.layoutRanges.bind(this),200)}redraw(e){e&&(this.selecting="cell",this.resetRanges(),this.layoutElement())}layoutElement(e){var t;e?t=this.table.rowManager.getVisibleRows(!0):t=this.table.rowManager.getRows(),t.forEach(i=>{i.type==="row"&&(this.layoutRow(i),i.cells.forEach(s=>this.renderCell(s)))}),this.getTableColumns().forEach(i=>{this.layoutColumn(i)}),this.layoutRanges()}layoutRow(e){var t=e.getElement(),i=!1,s=this.ranges.some(n=>n.occupiesRow(e));this.selecting==="row"?i=s:this.selecting==="all"&&(i=!0),t.classList.toggle("tabulator-range-selected",i),t.classList.toggle("tabulator-range-highlight",s)}layoutColumn(e){var t=e.getElement(),i=!1,s=this.ranges.some(n=>n.occupiesColumn(e));this.selecting==="column"?i=s:this.selecting==="all"&&(i=!0),t.classList.toggle("tabulator-range-selected",i),t.classList.toggle("tabulator-range-highlight",s)}layoutRanges(){var e,t,i;this.table.initialized&&(e=this.getActiveCell(),e&&(t=e.getElement(),i=e.row.getElement(),this.table.rtl?this.activeRangeCellElement.style.right=i.offsetWidth-t.offsetLeft-t.offsetWidth+"px":this.activeRangeCellElement.style.left=i.offsetLeft+t.offsetLeft+"px",this.activeRangeCellElement.style.top=i.offsetTop+"px",this.activeRangeCellElement.style.width=t.offsetWidth+"px",this.activeRangeCellElement.style.height=i.offsetHeight+"px",this.ranges.forEach(s=>s.layout()),this.overlay.style.visibility="visible"))}getCell(e,t){var i;return t<0&&(t=this.getTableColumns().length+t,t<0)?null:(e<0&&(e=this.getTableRows().length+e),i=this.table.rowManager.getRowFromPosition(e+1),i?i.getCells(!1,!0).filter(s=>s.column.visible)[t]:null)}getActiveCell(){return this.getCell(this.activeRange.start.row,this.activeRange.start.col)}getRowByRangePos(e){return this.getTableRows()[e]}getColumnByRangePos(e){return this.getTableColumns()[e]}getTableRows(){return this.table.rowManager.getDisplayRows().filter(e=>e.type==="row")}getTableColumns(){return this.table.columnManager.getVisibleColumnsByIndex()}addRange(e,t){var i;return this.maxRanges!==!0&&this.ranges.length>=this.maxRanges&&this.ranges.shift().destroy(),i=new es(this.table,this,e,t),this.activeRange=i,this.ranges.push(i),this.rangeContainer.appendChild(i.element),i}resetRanges(){var e,t,i;return this.ranges.forEach(s=>s.destroy()),this.ranges=[],e=this.addRange(),this.table.rowManager.activeRows.length&&(i=this.table.rowManager.activeRows[0].cells.filter(s=>s.column.visible),t=i[this.rowHeader?1:0],t&&(e.setBounds(t),this.initializeFocus(t))),e}tableDestroyed(){document.removeEventListener("mouseup",this.mouseUpEvent),this.table.rowManager.element.removeEventListener("keydown",this.keyDownEvent)}selectedRows(e){return e?this.activeRange.getRows().map(t=>t.getComponent()):this.activeRange.getRows()}selectedColumns(e){return e?this.activeRange.getColumns().map(t=>t.getComponent()):this.activeRange.getColumns()}isEmpty(e){return e==null||e===""}}b(re,"moduleName","selectRange"),b(re,"moduleInitOrder",1),b(re,"moduleExtensions",as);function ls(l,e,t,i,s,n,r){var o=r.alignEmptyValues,a=r.decimalSeparator,h=r.thousandSeparator,d=0;if(l=String(l),e=String(e),h&&(l=l.split(h).join(""),e=e.split(h).join("")),a&&(l=l.split(a).join("."),e=e.split(a).join(".")),l=parseFloat(l),e=parseFloat(e),isNaN(l))d=isNaN(e)?0:-1;else if(isNaN(e))d=1;else return l-e;return(o==="top"&&n==="desc"||o==="bottom"&&n==="asc")&&(d*=-1),d}function hs(l,e,t,i,s,n,r){var o=r.alignEmptyValues,a=0,h;if(!l)a=e?-1:0;else if(!e)a=1;else{switch(typeof r.locale){case"boolean":r.locale&&(h=this.langLocale());break;case"string":h=r.locale;break}return String(l).toLowerCase().localeCompare(String(e).toLowerCase(),h)}return(o==="top"&&n==="desc"||o==="bottom"&&n==="asc")&&(a*=-1),a}function Ve(l,e,t,i,s,n,r){var o=window.DateTime||luxon.DateTime,a=r.format||"dd/MM/yyyy HH:mm:ss",h=r.alignEmptyValues,d=0;if(typeof o<"u"){if(o.isDateTime(l)||(a==="iso"?l=o.fromISO(String(l)):l=o.fromFormat(String(l),a)),o.isDateTime(e)||(a==="iso"?e=o.fromISO(String(e)):e=o.fromFormat(String(e),a)),!l.isValid)d=e.isValid?-1:0;else if(!e.isValid)d=1;else return l-e;return(h==="top"&&n==="desc"||h==="bottom"&&n==="asc")&&(d*=-1),d}else console.error("Sort Error - 'datetime' sorter is dependant on luxon.js")}function ds(l,e,t,i,s,n,r){return r.format||(r.format="dd/MM/yyyy"),Ve.call(this,l,e,t,i,s,n,r)}function us(l,e,t,i,s,n,r){return r.format||(r.format="HH:mm"),Ve.call(this,l,e,t,i,s,n,r)}function cs(l,e,t,i,s,n,r){var o=l===!0||l==="true"||l==="True"||l===1?1:0,a=e===!0||e==="true"||e==="True"||e===1?1:0;return o-a}function fs(l,e,t,i,s,n,r){var o=r.type||"length",a=r.alignEmptyValues,h=0;function d(u){var c;switch(o){case"length":c=u.length;break;case"sum":c=u.reduce(function(f,g){return f+g});break;case"max":c=Math.max.apply(null,u);break;case"min":c=Math.min.apply(null,u);break;case"avg":c=u.reduce(function(f,g){return f+g})/u.length;break}return c}if(!Array.isArray(l))h=Array.isArray(e)?-1:0;else if(!Array.isArray(e))h=1;else return d(e)-d(l);return(a==="top"&&n==="desc"||a==="bottom"&&n==="asc")&&(h*=-1),h}function ps(l,e,t,i,s,n,r){var o=typeof l>"u"?0:1,a=typeof e>"u"?0:1;return o-a}function ms(l,e,t,i,s,n,r){var o,a,h,d,u=0,c,f=/(\d+)|(\D+)/g,g=/\d/,p=r.alignEmptyValues,v=0;if(!l&&l!==0)v=!e&&e!==0?0:-1;else if(!e&&e!==0)v=1;else{if(isFinite(l)&&isFinite(e))return l-e;if(o=String(l).toLowerCase(),a=String(e).toLowerCase(),o===a)return 0;if(!(g.test(o)&&g.test(a)))return o>a?1:-1;for(o=o.match(f),a=a.match(f),c=o.length>a.length?a.length:o.length;ud?1:-1;return o.length>a.length}return(p==="top"&&n==="desc"||p==="bottom"&&n==="asc")&&(v*=-1),v}var gs={number:ls,string:hs,date:ds,time:us,datetime:Ve,boolean:cs,array:fs,exists:ps,alphanum:ms};const j=class j extends w{constructor(e){super(e),this.sortList=[],this.changed=!1,this.registerTableOption("sortMode","local"),this.registerTableOption("initialSort",!1),this.registerTableOption("columnHeaderSortMulti",!0),this.registerTableOption("sortOrderReverse",!1),this.registerTableOption("headerSortElement","
"),this.registerTableOption("headerSortClickElement","header"),this.registerColumnOption("sorter"),this.registerColumnOption("sorterParams"),this.registerColumnOption("headerSort",!0),this.registerColumnOption("headerSortStartingDir"),this.registerColumnOption("headerSortTristate")}initialize(){this.subscribe("column-layout",this.initializeColumn.bind(this)),this.subscribe("table-built",this.tableBuilt.bind(this)),this.registerDataHandler(this.sort.bind(this),20),this.registerTableFunction("setSort",this.userSetSort.bind(this)),this.registerTableFunction("getSorters",this.getSort.bind(this)),this.registerTableFunction("clearSort",this.clearSort.bind(this)),this.table.options.sortMode==="remote"&&this.subscribe("data-params",this.remoteSortParams.bind(this))}tableBuilt(){this.table.options.initialSort&&this.setSort(this.table.options.initialSort)}remoteSortParams(e,t,i,s){var n=this.getSort();return n.forEach(r=>{delete r.column}),s.sort=n,s}userSetSort(e,t){this.setSort(e,t),this.refreshSort()}clearSort(){this.clear(),this.refreshSort()}initializeColumn(e){var t=!1,i,s;switch(typeof e.definition.sorter){case"string":j.sorters[e.definition.sorter]?t=j.sorters[e.definition.sorter]:console.warn("Sort Error - No such sorter found: ",e.definition.sorter);break;case"function":t=e.definition.sorter;break}if(e.modules.sort={sorter:t,dir:"none",params:e.definition.sorterParams||{},startingDir:e.definition.headerSortStartingDir||"asc",tristate:e.definition.headerSortTristate},e.definition.headerSort!==!1){switch(i=e.getElement(),i.classList.add("tabulator-sortable"),s=document.createElement("div"),s.classList.add("tabulator-col-sorter"),this.table.options.headerSortClickElement){case"icon":s.classList.add("tabulator-col-sorter-element");break;case"header":i.classList.add("tabulator-col-sorter-element");break;default:i.classList.add("tabulator-col-sorter-element");break}switch(this.table.options.headerSortElement){case"function":break;case"object":s.appendChild(this.table.options.headerSortElement);break;default:s.innerHTML=this.table.options.headerSortElement}e.titleHolderElement.appendChild(s),e.modules.sort.element=s,this.setColumnHeaderSortIcon(e,"none"),this.table.options.headerSortClickElement==="icon"&&s.addEventListener("mousedown",n=>{n.stopPropagation()}),(this.table.options.headerSortClickElement==="icon"?s:i).addEventListener("click",n=>{var r="",o=[],a=!1;if(e.modules.sort){if(e.modules.sort.tristate)e.modules.sort.dir=="none"?r=e.modules.sort.startingDir:e.modules.sort.dir==e.modules.sort.startingDir?r=e.modules.sort.dir=="asc"?"desc":"asc":r="none";else switch(e.modules.sort.dir){case"asc":r="desc";break;case"desc":r="asc";break;default:r=e.modules.sort.startingDir}this.table.options.columnHeaderSortMulti&&(n.shiftKey||n.ctrlKey)?(o=this.getSort(),a=o.findIndex(h=>h.field===e.getField()),a>-1?(o[a].dir=r,a=o.splice(a,1)[0],r!="none"&&o.push(a)):r!="none"&&o.push({column:e,dir:r}),this.setSort(o)):r=="none"?this.clear():this.setSort(e,r),this.refreshSort()}})}}refreshSort(){this.table.options.sortMode==="remote"?this.reloadData(null,!1,!1):this.refreshData(!0)}hasChanged(){var e=this.changed;return this.changed=!1,e}getSort(){var e=this,t=[];return e.sortList.forEach(function(i){i.column&&t.push({column:i.column.getComponent(),field:i.column.getField(),dir:i.dir})}),t}setSort(e,t){var i=this,s=[];Array.isArray(e)||(e=[{column:e,dir:t}]),e.forEach(function(n){var r;r=i.table.columnManager.findColumn(n.column),r?(n.column=r,s.push(n),i.changed=!0):console.warn("Sort Warning - Sort field does not exist and is being ignored: ",n.column)}),i.sortList=s,this.dispatch("sort-changed")}clear(){this.setSort([])}findSorter(e){var t=this.table.rowManager.activeRows[0],i="string",s,n;if(t&&(t=t.getData(),s=e.getField(),s))switch(n=e.getFieldValue(t),typeof n){case"undefined":i="string";break;case"boolean":i="boolean";break;default:!isNaN(n)&&n!==""?i="number":n.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)&&(i="alphanum");break}return j.sorters[i]}sort(e,t){var i=this,s=this.table.options.sortOrderReverse?i.sortList.slice().reverse():i.sortList,n=[],r=[];return this.subscribedExternal("dataSorting")&&this.dispatchExternal("dataSorting",i.getSort()),t||i.clearColumnHeaders(),this.table.options.sortMode!=="remote"?(s.forEach(function(o,a){var h;o.column&&(h=o.column.modules.sort,h&&(h.sorter||(h.sorter=i.findSorter(o.column)),o.params=typeof h.params=="function"?h.params(o.column.getComponent(),o.dir):h.params,n.push(o)),t||i.setColumnHeader(o.column,o.dir))}),n.length&&i._sortItems(e,n)):t||s.forEach(function(o,a){i.setColumnHeader(o.column,o.dir)}),this.subscribedExternal("dataSorted")&&(e.forEach(o=>{r.push(o.getComponent())}),this.dispatchExternal("dataSorted",i.getSort(),r)),e}clearColumnHeaders(){this.table.columnManager.getRealColumns().forEach(e=>{e.modules.sort&&(e.modules.sort.dir="none",e.getElement().setAttribute("aria-sort","none"),this.setColumnHeaderSortIcon(e,"none"))})}setColumnHeader(e,t){e.modules.sort.dir=t,e.getElement().setAttribute("aria-sort",t==="asc"?"ascending":"descending"),this.setColumnHeaderSortIcon(e,t)}setColumnHeaderSortIcon(e,t){var i=e.modules.sort.element,s;if(e.definition.headerSort&&typeof this.table.options.headerSortElement=="function"){for(;i.firstChild;)i.removeChild(i.firstChild);s=this.table.options.headerSortElement.call(this.table,e.getComponent(),t),typeof s=="object"?i.appendChild(s):i.innerHTML=s}}_sortItems(e,t){var i=t.length-1;e.sort((s,n)=>{for(var r,o=i;o>=0;o--){let a=t[o];if(r=this._sortRow(s,n,a.column,a.dir,a.params),r!==0)break}return r})}_sortRow(e,t,i,s,n){var r,o,a=s=="asc"?e:t,h=s=="asc"?t:e;return e=i.getFieldValue(a.getData()),t=i.getFieldValue(h.getData()),e=typeof e<"u"?e:"",t=typeof t<"u"?t:"",r=a.getComponent(),o=h.getComponent(),i.modules.sort.sorter.call(this,e,t,r,o,i.getComponent(),s,n)}};b(j,"moduleName","sort"),b(j,"sorters",gs);let He=j;class bs{constructor(e,t){this.columnCount=e,this.rowCount=t,this.columnString=[],this.columns=[],this.rows=[]}genColumns(e){var t=Math.max(this.columnCount,Math.max(...e.map(i=>i.length)));this.columnString=[],this.columns=[];for(let i=1;i<=t;i++)this.incrementChar(this.columnString.length-1),this.columns.push(this.columnString.join(""));return this.columns}genRows(e){var t=Math.max(this.rowCount,e.length);this.rows=[];for(let i=1;i<=t;i++)this.rows.push(i);return this.rows}incrementChar(e){let t=this.columnString[e];t?t!=="Z"?this.columnString[e]=String.fromCharCode(this.columnString[e].charCodeAt(0)+1):(this.columnString[e]="A",e?this.incrementChar(e-1):this.columnString.push("A")):this.columnString.push("A")}setRowCount(e){this.rowCount=e}setColumnCount(e){this.columnCount=e}}class ft{constructor(e){return this._sheet=e,new Proxy(this,{get:function(t,i,s){return typeof t[i]<"u"?t[i]:t._sheet.table.componentFunctionBinder.handle("sheet",t._sheet,i)}})}getTitle(){return this._sheet.title}getKey(){return this._sheet.key}getDefinition(){return this._sheet.getDefinition()}getData(){return this._sheet.getData()}setData(e){return this._sheet.setData(e)}clear(){return this._sheet.clear()}remove(){return this._sheet.remove()}active(){return this._sheet.active()}setTitle(e){return this._sheet.setTitle(e)}setRows(e){return this._sheet.setRows(e)}setColumns(e){return this._sheet.setColumns(e)}}class Xe extends M{constructor(e,t){super(e.table),this.spreadsheetManager=e,this.definition=t,this.title=this.definition.title||"",this.key=this.definition.key||this.definition.title,this.rowCount=this.definition.rows,this.columnCount=this.definition.columns,this.data=this.definition.data||[],this.element=null,this.isActive=!1,this.grid=new bs(this.columnCount,this.rowCount),this.defaultColumnDefinition={width:100,headerHozAlign:"center",headerSort:!1},this.columnDefinition=Object.assign(this.defaultColumnDefinition,this.options("spreadsheetColumnDefinition")),this.columnDefs=[],this.rowDefs=[],this.columnFields=[],this.columns=[],this.rows=[],this.scrollTop=null,this.scrollLeft=null,this.initialize(),this.dispatchExternal("sheetAdded",this.getComponent())}initialize(){this.initializeElement(),this.initializeColumns(),this.initializeRows()}reinitialize(){this.initializeColumns(),this.initializeRows()}initializeElement(){this.element=document.createElement("div"),this.element.classList.add("tabulator-spreadsheet-tab"),this.element.innerText=this.title,this.element.addEventListener("click",()=>{this.spreadsheetManager.loadSheet(this)})}initializeColumns(){this.grid.setColumnCount(this.columnCount),this.columnFields=this.grid.genColumns(this.data),this.columnDefs=[],this.columnFields.forEach(e=>{var t=Object.assign({},this.columnDefinition);t.field=e,t.title=e,this.columnDefs.push(t)})}initializeRows(){var e;this.grid.setRowCount(this.rowCount),e=this.grid.genRows(this.data),this.rowDefs=[],e.forEach((t,i)=>{var s={_id:t},n=this.data[i];n&&n.forEach((r,o)=>{var a=this.columnFields[o];a&&(s[a]=r)}),this.rowDefs.push(s)})}unload(){this.isActive=!1,this.scrollTop=this.table.rowManager.scrollTop,this.scrollLeft=this.table.rowManager.scrollLeft,this.data=this.getData(!0),this.element.classList.remove("tabulator-spreadsheet-tab-active")}load(){var e=!this.isActive;this.isActive=!0,this.table.blockRedraw(),this.table.setData([]),this.table.setColumns(this.columnDefs),this.table.setData(this.rowDefs),this.table.restoreRedraw(),e&&this.scrollTop!==null&&(this.table.rowManager.element.scrollLeft=this.scrollLeft,this.table.rowManager.element.scrollTop=this.scrollTop),this.element.classList.add("tabulator-spreadsheet-tab-active"),this.dispatchExternal("sheetLoaded",this.getComponent())}getComponent(){return new ft(this)}getDefinition(){return{title:this.title,key:this.key,rows:this.rowCount,columns:this.columnCount,data:this.getData()}}getData(e){var t=[],i,s,n;return this.rowDefs.forEach(r=>{var o=[];this.columnFields.forEach(a=>{o.push(r[a])}),t.push(o)}),!e&&!this.options("spreadsheetOutputFull")&&(i=t.map(r=>r.findLastIndex(o=>typeof o<"u")+1),s=Math.max(...i),n=i.findLastIndex(r=>r>0)+1,t=t.slice(0,n),t=t.map(r=>r.slice(0,s))),t}setData(e){this.data=e,this.reinitialize(),this.dispatchExternal("sheetUpdated",this.getComponent()),this.isActive&&this.load()}clear(){this.setData([])}setTitle(e){this.title=e,this.element.innerText=e,this.dispatchExternal("sheetUpdated",this.getComponent())}setRows(e){this.rowCount=e,this.initializeRows(),this.dispatchExternal("sheetUpdated",this.getComponent()),this.isActive&&this.load()}setColumns(e){this.columnCount=e,this.reinitialize(),this.dispatchExternal("sheetUpdated",this.getComponent()),this.isActive&&this.load()}remove(){this.spreadsheetManager.removeSheet(this)}destroy(){this.element.parentNode&&this.element.parentNode.removeChild(this.element),this.dispatchExternal("sheetRemoved",this.getComponent())}active(){this.spreadsheetManager.loadSheet(this)}}class pt extends w{constructor(e){super(e),this.sheets=[],this.element=null,this.registerTableOption("spreadsheet",!1),this.registerTableOption("spreadsheetRows",50),this.registerTableOption("spreadsheetColumns",50),this.registerTableOption("spreadsheetColumnDefinition",{}),this.registerTableOption("spreadsheetOutputFull",!1),this.registerTableOption("spreadsheetData",!1),this.registerTableOption("spreadsheetSheets",!1),this.registerTableOption("spreadsheetSheetTabs",!1),this.registerTableOption("spreadsheetSheetTabsElement",!1),this.registerTableFunction("setSheets",this.setSheets.bind(this)),this.registerTableFunction("addSheet",this.addSheet.bind(this)),this.registerTableFunction("getSheets",this.getSheets.bind(this)),this.registerTableFunction("getSheetDefinitions",this.getSheetDefinitions.bind(this)),this.registerTableFunction("setSheetData",this.setSheetData.bind(this)),this.registerTableFunction("getSheet",this.getSheet.bind(this)),this.registerTableFunction("getSheetData",this.getSheetData.bind(this)),this.registerTableFunction("clearSheet",this.clearSheet.bind(this)),this.registerTableFunction("removeSheet",this.removeSheetFunc.bind(this)),this.registerTableFunction("activeSheet",this.activeSheetFunc.bind(this))}initialize(){this.options("spreadsheet")&&(this.subscribe("table-initialized",this.tableInitialized.bind(this)),this.subscribe("data-loaded",this.loadRemoteData.bind(this)),this.table.options.index="_id",this.options("spreadsheetData")&&this.options("spreadsheetSheets")&&(console.warn("You cannot use spreadsheetData and spreadsheetSheets at the same time, ignoring spreadsheetData"),this.table.options.spreadsheetData=!1),this.compatibilityCheck(),this.options("spreadsheetSheetTabs")&&this.initializeTabset())}compatibilityCheck(){this.options("data")&&console.warn("Do not use the data option when working with spreadsheets, use either spreadsheetData or spreadsheetSheets to pass data into the table"),this.options("pagination")&&console.warn("The spreadsheet module is not compatible with the pagination module"),this.options("groupBy")&&console.warn("The spreadsheet module is not compatible with the row grouping module"),this.options("responsiveCollapse")&&console.warn("The spreadsheet module is not compatible with the responsive collapse module")}initializeTabset(){this.element=document.createElement("div"),this.element.classList.add("tabulator-spreadsheet-tabs");var e=this.options("spreadsheetSheetTabsElement");e&&!(e instanceof HTMLElement)&&(e=document.querySelector(e),e||console.warn("Unable to find element matching spreadsheetSheetTabsElement selector:",this.options("spreadsheetSheetTabsElement"))),e?e.appendChild(this.element):this.footerAppend(this.element)}tableInitialized(){this.sheets.length?this.loadSheet(this.sheets[0]):this.options("spreadsheetSheets")?this.loadSheets(this.options("spreadsheetSheets")):this.options("spreadsheetData")&&this.loadData(this.options("spreadsheetData"))}loadRemoteData(e,t,i){return console.log("data",e,t,i),Array.isArray(e)?(this.table.dataLoader.clearAlert(),this.dispatchExternal("dataLoaded",e),!e.length||Array.isArray(e[0])?this.loadData(e):this.loadSheets(e)):console.error(`Spreadsheet Loading Error - Unable to process remote data due to invalid data type +Expecting: array +Received: `,typeof e,` +Data: `,e),!1}loadData(e){var t={data:e};this.loadSheet(this.newSheet(t))}destroySheets(){this.sheets.forEach(e=>{e.destroy()}),this.sheets=[],this.activeSheet=null}loadSheets(e){Array.isArray(e)||(e=[]),this.destroySheets(),e.forEach(t=>{this.newSheet(t)}),this.loadSheet(this.sheets[0])}loadSheet(e){this.activeSheet!==e&&(this.activeSheet&&this.activeSheet.unload(),this.activeSheet=e,e.load())}newSheet(e={}){var t;return e.rows||(e.rows=this.options("spreadsheetRows")),e.columns||(e.columns=this.options("spreadsheetColumns")),t=new Xe(this,e),this.sheets.push(t),this.element&&this.element.appendChild(t.element),t}removeSheet(e){var t=this.sheets.indexOf(e),i;this.sheets.length>1?t>-1&&(this.sheets.splice(t,1),e.destroy(),this.activeSheet===e&&(i=this.sheets[t-1]||this.sheets[0],i?this.loadSheet(i):this.activeSheet=null)):console.warn("Unable to remove sheet, at least one sheet must be active")}lookupSheet(e){return e?e instanceof Xe?e:e instanceof ft?e._sheet:this.sheets.find(t=>t.key===e)||!1:this.activeSheet}setSheets(e){return this.loadSheets(e),this.getSheets()}addSheet(e){return this.newSheet(e).getComponent()}getSheetDefinitions(){return this.sheets.map(e=>e.getDefinition())}getSheets(){return this.sheets.map(e=>e.getComponent())}getSheet(e){var t=this.lookupSheet(e);return t?t.getComponent():!1}setSheetData(e,t){e&&!t&&(t=e,e=!1);var i=this.lookupSheet(e);return i?i.setData(t):!1}getSheetData(e){var t=this.lookupSheet(e);return t?t.getData():!1}clearSheet(e){var t=this.lookupSheet(e);return t?t.clear():!1}removeSheetFunc(e){var t=this.lookupSheet(e);t&&this.removeSheet(t)}activeSheetFunc(e){var t=this.lookupSheet(e);return t?this.loadSheet(t):!1}}b(pt,"moduleName","spreadsheet");class mt extends w{constructor(e){super(e),this.tooltipSubscriber=null,this.headerSubscriber=null,this.timeout=null,this.popupInstance=null,this.registerTableOption("tooltipDelay",300),this.registerColumnOption("tooltip"),this.registerColumnOption("headerTooltip")}initialize(){this.deprecatedOptionsCheck(),this.subscribe("column-init",this.initializeColumn.bind(this))}deprecatedOptionsCheck(){}initializeColumn(e){e.definition.headerTooltip&&!this.headerSubscriber&&(this.headerSubscriber=!0,this.subscribe("column-mousemove",this.mousemoveCheck.bind(this,"headerTooltip")),this.subscribe("column-mouseout",this.mouseoutCheck.bind(this,"headerTooltip"))),e.definition.tooltip&&!this.tooltipSubscriber&&(this.tooltipSubscriber=!0,this.subscribe("cell-mousemove",this.mousemoveCheck.bind(this,"tooltip")),this.subscribe("cell-mouseout",this.mouseoutCheck.bind(this,"tooltip")))}mousemoveCheck(e,t,i){var s=e==="tooltip"?i.column.definition.tooltip:i.definition.headerTooltip;s&&(this.clearPopup(),this.timeout=setTimeout(this.loadTooltip.bind(this,t,i,s),this.table.options.tooltipDelay))}mouseoutCheck(e,t,i){this.popupInstance||this.clearPopup()}clearPopup(e,t,i){clearTimeout(this.timeout),this.timeout=null,this.popupInstance&&this.popupInstance.hide()}loadTooltip(e,t,i){var s,n,r;function o(a){n=a}typeof i=="function"&&(i=i(e,t.getComponent(),o)),i instanceof HTMLElement?s=i:(s=document.createElement("div"),i===!0&&(t instanceof ne?i=t.value:t.definition.field?this.langBind("columns|"+t.definition.field,a=>{s.innerHTML=i=a||t.definition.title}):i=t.definition.title),s.innerHTML=i),(i||i===0||i===!1)&&(s.classList.add("tabulator-tooltip"),s.addEventListener("mousemove",a=>a.preventDefault()),this.popupInstance=this.popup(s),typeof n=="function"&&this.popupInstance.renderCallback(n),r=this.popupInstance.containerEventCoords(e),this.popupInstance.show(r.x+15,r.y+15).hideOnBlur(()=>{this.dispatchExternal("TooltipClosed",t.getComponent()),this.popupInstance=null}),this.dispatchExternal("TooltipOpened",t.getComponent()))}}b(mt,"moduleName","tooltip");var vs={integer:function(l,e,t){return e===""||e===null||typeof e>"u"?!0:(e=Number(e),!isNaN(e)&&isFinite(e)&&Math.floor(e)===e)},float:function(l,e,t){return e===""||e===null||typeof e>"u"?!0:(e=Number(e),!isNaN(e)&&isFinite(e)&&e%1!==0)},numeric:function(l,e,t){return e===""||e===null||typeof e>"u"?!0:!isNaN(e)},string:function(l,e,t){return e===""||e===null||typeof e>"u"?!0:isNaN(e)},alphanumeric:function(l,e,t){if(e===""||e===null||typeof e>"u")return!0;var i=new RegExp(/^[a-z0-9]+$/i);return i.test(e)},max:function(l,e,t){return e===""||e===null||typeof e>"u"?!0:parseFloat(e)<=t},min:function(l,e,t){return e===""||e===null||typeof e>"u"?!0:parseFloat(e)>=t},starts:function(l,e,t){return e===""||e===null||typeof e>"u"?!0:String(e).toLowerCase().startsWith(String(t).toLowerCase())},ends:function(l,e,t){return e===""||e===null||typeof e>"u"?!0:String(e).toLowerCase().endsWith(String(t).toLowerCase())},minLength:function(l,e,t){return e===""||e===null||typeof e>"u"?!0:String(e).length>=t},maxLength:function(l,e,t){return e===""||e===null||typeof e>"u"?!0:String(e).length<=t},in:function(l,e,t){return e===""||e===null||typeof e>"u"?!0:(typeof t=="string"&&(t=t.split("|")),t.indexOf(e)>-1)},regex:function(l,e,t){if(e===""||e===null||typeof e>"u")return!0;var i=new RegExp(t);return i.test(e)},unique:function(l,e,t){if(e===""||e===null||typeof e>"u")return!0;var i=!0,s=l.getData(),n=l.getColumn()._getSelf();return this.table.rowManager.rows.forEach(function(r){var o=r.getData();o!==s&&e==n.getFieldValue(o)&&(i=!1)}),i},required:function(l,e,t){return e!==""&&e!==null&&typeof e<"u"}};const ie=class ie extends w{constructor(e){super(e),this.invalidCells=[],this.registerTableOption("validationMode","blocking"),this.registerColumnOption("validator"),this.registerTableFunction("getInvalidCells",this.getInvalidCells.bind(this)),this.registerTableFunction("clearCellValidation",this.userClearCellValidation.bind(this)),this.registerTableFunction("validate",this.userValidate.bind(this)),this.registerComponentFunction("cell","isValid",this.cellIsValid.bind(this)),this.registerComponentFunction("cell","clearValidation",this.clearValidation.bind(this)),this.registerComponentFunction("cell","validate",this.cellValidate.bind(this)),this.registerComponentFunction("column","validate",this.columnValidate.bind(this)),this.registerComponentFunction("row","validate",this.rowValidate.bind(this))}initialize(){this.subscribe("cell-delete",this.clearValidation.bind(this)),this.subscribe("column-layout",this.initializeColumnCheck.bind(this)),this.subscribe("edit-success",this.editValidate.bind(this)),this.subscribe("edit-editor-clear",this.editorClear.bind(this)),this.subscribe("edit-edited-clear",this.editedClear.bind(this))}editValidate(e,t,i){var s=this.table.options.validationMode!=="manual"?this.validate(e.column.modules.validate,e,t):!0;return s!==!0&&setTimeout(()=>{e.getElement().classList.add("tabulator-validation-fail"),this.dispatchExternal("validationFailed",e.getComponent(),t,s)}),s}editorClear(e,t){t&&e.column.modules.validate&&this.cellValidate(e),e.getElement().classList.remove("tabulator-validation-fail")}editedClear(e){e.modules.validate&&(e.modules.validate.invalid=!1)}cellIsValid(e){return e.modules.validate&&e.modules.validate.invalid||!0}cellValidate(e){return this.validate(e.column.modules.validate,e,e.getValue())}columnValidate(e){var t=[];return e.cells.forEach(i=>{this.cellValidate(i)!==!0&&t.push(i.getComponent())}),t.length?t:!0}rowValidate(e){var t=[];return e.cells.forEach(i=>{this.cellValidate(i)!==!0&&t.push(i.getComponent())}),t.length?t:!0}userClearCellValidation(e){e||(e=this.getInvalidCells()),Array.isArray(e)||(e=[e]),e.forEach(t=>{this.clearValidation(t._getSelf())})}userValidate(e){var t=[];return this.table.rowManager.rows.forEach(i=>{i=i.getComponent();var s=i.validate();s!==!0&&(t=t.concat(s))}),t.length?t:!0}initializeColumnCheck(e){typeof e.definition.validator<"u"&&this.initializeColumn(e)}initializeColumn(e){var t=this,i=[],s;e.definition.validator&&(Array.isArray(e.definition.validator)?e.definition.validator.forEach(n=>{s=t._extractValidator(n),s&&i.push(s)}):(s=this._extractValidator(e.definition.validator),s&&i.push(s)),e.modules.validate=i.length?i:!1)}_extractValidator(e){var t,i,s;switch(typeof e){case"string":return s=e.indexOf(":"),s>-1?(t=e.substring(0,s),i=e.substring(s+1)):t=e,this._buildValidator(t,i);case"function":return this._buildValidator(e);case"object":return this._buildValidator(e.type,e.parameters)}}_buildValidator(e,t){var i=typeof e=="function"?e:ie.validators[e];return i?{type:typeof e=="function"?"function":e,func:i,params:t}:(console.warn("Validator Setup Error - No matching validator found:",e),!1)}validate(e,t,i){var s=this,n=[],r=this.invalidCells.indexOf(t);return e&&e.forEach(o=>{o.func.call(s,t.getComponent(),i,o.params)||n.push({type:o.type,parameters:o.params})}),t.modules.validate||(t.modules.validate={}),n.length?(t.modules.validate.invalid=n,this.table.options.validationMode!=="manual"&&t.getElement().classList.add("tabulator-validation-fail"),r==-1&&this.invalidCells.push(t)):(t.modules.validate.invalid=!1,t.getElement().classList.remove("tabulator-validation-fail"),r>-1&&this.invalidCells.splice(r,1)),n.length?n:!0}getInvalidCells(){var e=[];return this.invalidCells.forEach(t=>{e.push(t.getComponent())}),e}clearValidation(e){var t;e.modules.validate&&e.modules.validate.invalid&&(e.getElement().classList.remove("tabulator-validation-fail"),e.modules.validate.invalid=!1,t=this.invalidCells.indexOf(e),t>-1&&this.invalidCells.splice(t,1))}};b(ie,"moduleName","validate"),b(ie,"validators",vs);let Fe=ie;var ue=Object.freeze({__proto__:null,AccessorModule:ce,AjaxModule:me,ClipboardModule:ge,ColumnCalcsModule:be,DataTreeModule:Ze,DownloadModule:ve,EditModule:we,ExportModule:Ce,FilterModule:Ee,FormatModule:ye,FrozenColumnsModule:et,FrozenRowsModule:tt,GroupRowsModule:it,HistoryModule:Re,HtmlTableImportModule:st,ImportModule:xe,InteractionModule:nt,KeybindingsModule:Te,MenuModule:rt,MoveColumnsModule:ot,MoveRowsModule:ke,MutatorModule:Me,PageModule:Le,PersistenceModule:Se,PopupModule:at,PrintModule:lt,ReactiveDataModule:ht,ResizeColumnsModule:dt,ResizeRowsModule:ut,ResizeTableModule:ct,ResponsiveLayoutModule:De,SelectRangeModule:re,SelectRowModule:ze,SortModule:He,SpreadsheetModule:pt,TooltipModule:mt,ValidateModule:Fe}),ws={debugEventsExternal:!1,debugEventsInternal:!1,debugInvalidOptions:!0,debugInvalidComponentFuncs:!0,debugInitialization:!0,debugDeprecation:!0,height:!1,minHeight:!1,maxHeight:!1,columnHeaderVertAlign:"top",popupContainer:!1,columns:[],columnDefaults:{},rowHeader:!1,data:!1,autoColumns:!1,autoColumnsDefinitions:!1,nestedFieldSeparator:".",footerElement:!1,index:"id",textDirection:"auto",addRowPos:"bottom",headerVisible:!0,renderVertical:"virtual",renderHorizontal:"basic",renderVerticalBuffer:0,scrollToRowPosition:"top",scrollToRowIfVisible:!0,scrollToColumnPosition:"left",scrollToColumnIfVisible:!0,rowFormatter:!1,rowFormatterPrint:null,rowFormatterClipboard:null,rowFormatterHtmlOutput:null,rowHeight:null,placeholder:!1,dataLoader:!0,dataLoaderLoading:!1,dataLoaderError:!1,dataLoaderErrorTimeout:3e3,dataSendParams:{},dataReceiveParams:{}};class gt{constructor(e,t,i={}){this.table=e,this.msgType=t,this.registeredDefaults=Object.assign({},i)}register(e,t){this.registeredDefaults[e]=t}generate(e,t={}){var i=Object.assign({},this.registeredDefaults),s=this.table.options.debugInvalidOptions||t.debugInvalidOptions===!0;Object.assign(i,e);for(let n in t)i.hasOwnProperty(n)||(s&&console.warn("Invalid "+this.msgType+" option:",n),i[n]=t.key);for(let n in i)n in t?i[n]=t[n]:Array.isArray(i[n])?i[n]=Object.assign([],i[n]):typeof i[n]=="object"&&i[n]!==null?i[n]=Object.assign({},i[n]):typeof i[n]>"u"&&delete i[n];return i}}class le extends M{constructor(e){super(e),this.elementVertical=e.rowManager.element,this.elementHorizontal=e.columnManager.element,this.tableElement=e.rowManager.tableElement,this.verticalFillMode="fit"}initialize(){}clearRows(){}clearColumns(){}reinitializeColumnWidths(e){}renderRows(){}renderColumns(){}rerenderRows(e){e&&e()}rerenderColumns(e,t){}renderRowCells(e){}rerenderRowCells(e,t){}scrollColumns(e,t){}scrollRows(e,t){}resize(){}scrollToRow(e){}scrollToRowNearestTop(e){}visibleRows(e){return[]}rows(){return this.table.rowManager.getDisplayRows()}styleRow(e,t){var i=e.getElement();t%2?(i.classList.add("tabulator-row-even"),i.classList.remove("tabulator-row-odd")):(i.classList.add("tabulator-row-odd"),i.classList.remove("tabulator-row-even"))}clear(){this.clearRows(),this.clearColumns()}render(){this.renderRows(),this.renderColumns()}rerender(e){this.rerenderRows(),this.rerenderColumns()}scrollToRowPosition(e,t,i){var s=this.rows().indexOf(e),n=e.getElement(),r=0;return new Promise((o,a)=>{if(s>-1){if(typeof i>"u"&&(i=this.table.options.scrollToRowIfVisible),!i&&x.elVisible(n)&&(r=x.elOffset(n).top-x.elOffset(this.elementVertical).top,r>0&&r"u"&&(t=this.table.options.scrollToRowPosition),t==="nearest"&&(t=this.scrollToRowNearestTop(e)?"top":"bottom"),this.scrollToRow(e),t){case"middle":case"center":this.elementVertical.scrollHeight-this.elementVertical.scrollTop==this.elementVertical.clientHeight?this.elementVertical.scrollTop=this.elementVertical.scrollTop+(n.offsetTop-this.elementVertical.scrollTop)-(this.elementVertical.scrollHeight-n.offsetTop)/2:this.elementVertical.scrollTop=this.elementVertical.scrollTop-this.elementVertical.clientHeight/2;break;case"bottom":this.elementVertical.scrollHeight-this.elementVertical.scrollTop==this.elementVertical.clientHeight?this.elementVertical.scrollTop=this.elementVertical.scrollTop-(this.elementVertical.scrollHeight-n.offsetTop)+n.offsetHeight:this.elementVertical.scrollTop=this.elementVertical.scrollTop-this.elementVertical.clientHeight+n.offsetHeight;break;case"top":this.elementVertical.scrollTop=n.offsetTop;break}o()}else console.warn("Scroll Error - Row not visible"),a("Scroll Error - Row not visible")})}}class Cs extends le{constructor(e){super(e)}renderRowCells(e,t){const i=document.createDocumentFragment();e.cells.forEach(s=>{i.appendChild(s.getElement())}),e.element.appendChild(i),t||e.cells.forEach(s=>{s.cellRendered()})}reinitializeColumnWidths(e){e.forEach(function(t){t.reinitializeWidth()})}}class Es extends le{constructor(e){super(e),this.leftCol=0,this.rightCol=0,this.scrollLeft=0,this.vDomScrollPosLeft=0,this.vDomScrollPosRight=0,this.vDomPadLeft=0,this.vDomPadRight=0,this.fitDataColAvg=0,this.windowBuffer=200,this.visibleRows=null,this.initialized=!1,this.isFitData=!1,this.columns=[]}initialize(){this.compatibilityCheck(),this.layoutCheck(),this.vertScrollListen()}compatibilityCheck(){this.options("layout")=="fitDataTable"&&console.warn("Horizontal Virtual DOM is not compatible with fitDataTable layout mode"),this.options("responsiveLayout")&&console.warn("Horizontal Virtual DOM is not compatible with responsive columns"),this.options("rtl")&&console.warn("Horizontal Virtual DOM is not currently compatible with RTL text direction")}layoutCheck(){this.isFitData=this.options("layout").startsWith("fitData")}vertScrollListen(){this.subscribe("scroll-vertical",this.clearVisRowCache.bind(this)),this.subscribe("data-refreshed",this.clearVisRowCache.bind(this))}clearVisRowCache(){this.visibleRows=null}renderColumns(e,t){this.dataChange()}scrollColumns(e,t){this.scrollLeft!=e&&(this.scrollLeft=e,this.scroll(e-(this.vDomScrollPosLeft+this.windowBuffer)))}calcWindowBuffer(){var e=this.elementVertical.clientWidth;this.table.columnManager.columnsByIndex.forEach(t=>{if(t.visible){var i=t.getWidth();i>e&&(e=i)}}),this.windowBuffer=e*2}rerenderColumns(e,t){var i={cols:this.columns,leftCol:this.leftCol,rightCol:this.rightCol},s=0;e&&!this.initialized||(this.clear(),this.calcWindowBuffer(),this.scrollLeft=this.elementVertical.scrollLeft,this.vDomScrollPosLeft=this.scrollLeft-this.windowBuffer,this.vDomScrollPosRight=this.scrollLeft+this.elementVertical.clientWidth+this.windowBuffer,this.table.columnManager.columnsByIndex.forEach(n=>{var r={},o;n.visible&&(n.modules.frozen||(o=n.getWidth(),r.leftPos=s,r.rightPos=s+o,r.width=o,this.isFitData&&(r.fitDataCheck=n.modules.vdomHoz?n.modules.vdomHoz.fitDataCheck:!0),s+o>this.vDomScrollPosLeft&&s{t.appendChild(i.getElement())}),e.element.appendChild(t),e.cells.forEach(i=>{i.cellRendered()})}}rerenderRowCells(e,t){this.reinitializeRow(e,t)}reinitializeColumnWidths(e){for(let t=this.leftCol;t<=this.rightCol;t++)this.columns[t].reinitializeWidth()}deinitialize(){this.initialized=!1}clear(){this.columns=[],this.leftCol=-1,this.rightCol=0,this.vDomScrollPosLeft=0,this.vDomScrollPosRight=0,this.vDomPadLeft=0,this.vDomPadRight=0}dataChange(){var e=!1,t,i;if(this.isFitData){if(this.table.columnManager.columnsByIndex.forEach(s=>{!s.definition.width&&s.visible&&(e=!0)}),e&&this.table.rowManager.getDisplayRows().length&&(this.vDomScrollPosRight=this.scrollLeft+this.elementVertical.clientWidth+this.windowBuffer,t=this.chain("rows-sample",[1],[],()=>this.table.rowManager.getDisplayRows())[0],t)){i=t.getElement(),t.generateCells(),this.tableElement.appendChild(i);for(let s=0;s{i!==this.columns[s]&&(t=!1)}),!t)}reinitializeRows(){var e=this.getVisibleRows(),t=this.table.rowManager.getRows().filter(i=>!e.includes(i));e.forEach(i=>{this.reinitializeRow(i,!0)}),t.forEach(i=>{i.deinitialize()})}getVisibleRows(){return this.visibleRows||(this.visibleRows=this.table.rowManager.getVisibleRows()),this.visibleRows}scroll(e){this.vDomScrollPosLeft+=e,this.vDomScrollPosRight+=e,Math.abs(e)>this.windowBuffer/2?this.rerenderColumns():e>0?(this.addColRight(),this.removeColLeft()):(this.addColLeft(),this.removeColRight())}colPositionAdjust(e,t,i){for(let s=e;s{if(s.type!=="group"){var n=s.getCell(i);s.getElement().insertBefore(n.getElement(),s.getCell(this.columns[this.rightCol]).getElement().nextSibling),n.cellRendered()}}),this.fitDataColActualWidthCheck(i),this.rightCol++,this.getVisibleRows().forEach(s=>{s.type!=="group"&&(s.modules.vdomHoz.rightCol=this.rightCol)}),this.rightCol>=this.columns.length-1?this.vDomPadRight=0:this.vDomPadRight-=i.getWidth()):t=!1}e&&(this.tableElement.style.paddingRight=this.vDomPadRight+"px")}addColLeft(){for(var e=!1,t=!0;t;){let i=this.columns[this.leftCol-1];if(i)if(i.modules.vdomHoz.rightPos>=this.vDomScrollPosLeft){e=!0,this.getVisibleRows().forEach(n=>{if(n.type!=="group"){var r=n.getCell(i);n.getElement().insertBefore(r.getElement(),n.getCell(this.columns[this.leftCol]).getElement()),r.cellRendered()}}),this.leftCol--,this.getVisibleRows().forEach(n=>{n.type!=="group"&&(n.modules.vdomHoz.leftCol=this.leftCol)}),this.leftCol<=0?this.vDomPadLeft=0:this.vDomPadLeft-=i.getWidth();let s=this.fitDataColActualWidthCheck(i);s&&(this.scrollLeft=this.elementVertical.scrollLeft=this.elementVertical.scrollLeft+s,this.vDomPadRight-=s)}else t=!1;else t=!1}e&&(this.tableElement.style.paddingLeft=this.vDomPadLeft+"px")}removeColRight(){for(var e=!1,t=!0;t;){let i=this.columns[this.rightCol];i&&i.modules.vdomHoz.leftPos>this.vDomScrollPosRight?(e=!0,this.getVisibleRows().forEach(s=>{if(s.type!=="group"){var n=s.getCell(i);try{s.getElement().removeChild(n.getElement())}catch(r){console.warn("Could not removeColRight",r.message)}}}),this.vDomPadRight+=i.getWidth(),this.rightCol--,this.getVisibleRows().forEach(s=>{s.type!=="group"&&(s.modules.vdomHoz.rightCol=this.rightCol)})):t=!1}e&&(this.tableElement.style.paddingRight=this.vDomPadRight+"px")}removeColLeft(){for(var e=!1,t=!0;t;){let i=this.columns[this.leftCol];i&&i.modules.vdomHoz.rightPos{if(s.type!=="group"){var n=s.getCell(i);try{s.getElement().removeChild(n.getElement())}catch(r){console.warn("Could not removeColLeft",r.message)}}}),this.vDomPadLeft+=i.getWidth(),this.leftCol++,this.getVisibleRows().forEach(s=>{s.type!=="group"&&(s.modules.vdomHoz.leftCol=this.leftCol)})):t=!1}e&&(this.tableElement.style.paddingLeft=this.vDomPadLeft+"px")}fitDataColActualWidthCheck(e){var t,i;return e.modules.vdomHoz.fitDataCheck&&(e.reinitializeWidth(),t=e.getWidth(),i=t-e.modules.vdomHoz.width,i&&(e.modules.vdomHoz.rightPos+=i,e.modules.vdomHoz.width=t,this.colPositionAdjust(this.columns.indexOf(e)+1,this.columns.length,i)),e.modules.vdomHoz.fitDataCheck=!1),i}initializeRow(e){if(e.type!=="group"){e.modules.vdomHoz={leftCol:this.leftCol,rightCol:this.rightCol},this.table.modules.frozenColumns&&this.table.modules.frozenColumns.leftColumns.forEach(t=>{this.appendCell(e,t)});for(let t=this.leftCol;t<=this.rightCol;t++)this.appendCell(e,this.columns[t]);this.table.modules.frozenColumns&&this.table.modules.frozenColumns.rightColumns.forEach(t=>{this.appendCell(e,t)})}}appendCell(e,t){if(t&&t.visible){let i=e.getCell(t);e.getElement().appendChild(i.getElement()),i.cellRendered()}}reinitializeRow(e,t){if(e.type!=="group"&&(t||!e.modules.vdomHoz||e.modules.vdomHoz.leftCol!==this.leftCol||e.modules.vdomHoz.rightCol!==this.rightCol)){for(var i=e.getElement();i.firstChild;)i.removeChild(i.firstChild);this.initializeRow(e)}}}class ys extends M{constructor(e){super(e),this.blockHozScrollEvent=!1,this.headersElement=null,this.contentsElement=null,this.rowHeader=null,this.element=null,this.columns=[],this.columnsByIndex=[],this.columnsByField={},this.scrollLeft=0,this.optionsList=new gt(this.table,"column definition",Qe),this.redrawBlock=!1,this.redrawBlockUpdate=null,this.renderer=null}initialize(){this.initializeRenderer(),this.headersElement=this.createHeadersElement(),this.contentsElement=this.createHeaderContentsElement(),this.element=this.createHeaderElement(),this.contentsElement.insertBefore(this.headersElement,this.contentsElement.firstChild),this.element.insertBefore(this.contentsElement,this.element.firstChild),this.initializeScrollWheelWatcher(),this.subscribe("scroll-horizontal",this.scrollHorizontal.bind(this)),this.subscribe("scrollbar-vertical",this.padVerticalScrollbar.bind(this))}padVerticalScrollbar(e){this.table.rtl?this.headersElement.style.marginLeft=e+"px":this.headersElement.style.marginRight=e+"px"}initializeRenderer(){var e,t={virtual:Es,basic:Cs};typeof this.table.options.renderHorizontal=="string"?e=t[this.table.options.renderHorizontal]:e=this.table.options.renderHorizontal,e?(this.renderer=new e(this.table,this.element,this.tableElement),this.renderer.initialize()):console.error("Unable to find matching renderer:",this.table.options.renderHorizontal)}createHeadersElement(){var e=document.createElement("div");return e.classList.add("tabulator-headers"),e.setAttribute("role","row"),e}createHeaderContentsElement(){var e=document.createElement("div");return e.classList.add("tabulator-header-contents"),e.setAttribute("role","rowgroup"),e}createHeaderElement(){var e=document.createElement("div");return e.classList.add("tabulator-header"),e.setAttribute("role","rowgroup"),this.table.options.headerVisible||e.classList.add("tabulator-header-hidden"),e}getElement(){return this.element}getContentsElement(){return this.contentsElement}getHeadersElement(){return this.headersElement}scrollHorizontal(e){this.contentsElement.scrollLeft=e,this.scrollLeft=e,this.renderer.scrollColumns(e)}initializeScrollWheelWatcher(){this.contentsElement.addEventListener("wheel",e=>{var t;e.deltaX&&(t=this.contentsElement.scrollLeft+e.deltaX,this.table.rowManager.scrollHorizontal(t),this.table.columnManager.scrollHorizontal(t))})}generateColumnsFromRowData(e){var t=[],i={},s=this.table.options.autoColumns==="full"?e:[e[0]],n=this.table.options.autoColumnsDefinitions;if(e&&e.length){if(s.forEach(r=>{Object.keys(r).forEach((o,a)=>{let h=r[o],d;i[o]?i[o]!==!0&&typeof h<"u"&&(i[o].sorter=this.calculateSorterFromValue(h),i[o]=!0):(d={field:o,title:o,sorter:this.calculateSorterFromValue(h)},t.splice(a,0,d),i[o]=typeof h>"u"?d:!0)})}),n)switch(typeof n){case"function":this.table.options.columns=n.call(this.table,t);break;case"object":Array.isArray(n)?t.forEach(r=>{var o=n.find(a=>a.field===r.field);o&&Object.assign(r,o)}):t.forEach(r=>{n[r.field]&&Object.assign(r,n[r.field])}),this.table.options.columns=t;break}else this.table.options.columns=t;this.setColumns(this.table.options.columns)}}calculateSorterFromValue(e){var t;switch(typeof e){case"undefined":t="string";break;case"boolean":t="boolean";break;case"number":t="number";break;case"object":Array.isArray(e)?t="array":t="string";break;default:!isNaN(e)&&e!==""?t="number":e.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)?t="alphanum":t="string";break}return t}setColumns(e,t){for(;this.headersElement.firstChild;)this.headersElement.removeChild(this.headersElement.firstChild);this.columns=[],this.columnsByIndex=[],this.columnsByField={},this.dispatch("columns-loading"),this.dispatchExternal("columnsLoading"),this.table.options.rowHeader&&(this.rowHeader=new U(this.table.options.rowHeader===!0?{}:this.table.options.rowHeader,this,!0),this.columns.push(this.rowHeader),this.headersElement.appendChild(this.rowHeader.getElement()),this.rowHeader.columnRendered()),e.forEach((i,s)=>{this._addColumn(i)}),this._reIndexColumns(),this.dispatch("columns-loaded"),this.subscribedExternal("columnsLoaded")&&this.dispatchExternal("columnsLoaded",this.getComponents()),this.rerenderColumns(!1,!0),this.redraw(!0)}_addColumn(e,t,i){var s=new U(e,this),n=s.getElement(),r=i&&this.findColumnIndex(i);if(t&&this.rowHeader&&(!i||i===this.rowHeader)&&(t=!1,i=this.rowHeader,r=0),i&&r>-1){var o=i.getTopColumn(),a=this.columns.indexOf(o),h=o.getElement();t?(this.columns.splice(a,0,s),h.parentNode.insertBefore(n,h)):(this.columns.splice(a+1,0,s),h.parentNode.insertBefore(n,h.nextSibling))}else t?(this.columns.unshift(s),this.headersElement.insertBefore(s.getElement(),this.headersElement.firstChild)):(this.columns.push(s),this.headersElement.appendChild(s.getElement()));return s.columnRendered(),s}registerColumnField(e){e.definition.field&&(this.columnsByField[e.definition.field]=e)}registerColumnPosition(e){this.columnsByIndex.push(e)}_reIndexColumns(){this.columnsByIndex=[],this.columns.forEach(function(e){e.reRegisterPosition()})}verticalAlignHeaders(){var e=0;this.redrawBlock||(this.headersElement.style.height="",this.columns.forEach(t=>{t.clearVerticalAlign()}),this.columns.forEach(t=>{var i=t.getHeight();i>e&&(e=i)}),this.headersElement.style.height=e+"px",this.columns.forEach(t=>{t.verticalAlign(this.table.options.columnHeaderVertAlign,e)}),this.table.rowManager.adjustTableSize())}findColumn(e){var t;if(typeof e=="object"){if(e instanceof U)return e;if(e instanceof $e)return e._getSelf()||!1;if(typeof HTMLElement<"u"&&e instanceof HTMLElement)return t=[],this.columns.forEach(s=>{t.push(s),t=t.concat(s.getColumns(!0))}),t.find(s=>s.element===e)||!1}else return this.columnsByField[e]||!1;return!1}getColumnByField(e){return this.columnsByField[e]}getColumnsByFieldRoot(e){var t=[];return Object.keys(this.columnsByField).forEach(i=>{var s=this.table.options.nestedFieldSeparator?i.split(this.table.options.nestedFieldSeparator)[0]:i;s===e&&t.push(this.columnsByField[i])}),t}getColumnByIndex(e){return this.columnsByIndex[e]}getFirstVisibleColumn(){var e=this.columnsByIndex.findIndex(t=>t.visible);return e>-1?this.columnsByIndex[e]:!1}getVisibleColumnsByIndex(){return this.columnsByIndex.filter(e=>e.visible)}getColumns(){return this.columns}findColumnIndex(e){return this.columnsByIndex.findIndex(t=>e===t)}getRealColumns(){return this.columnsByIndex}traverse(e){this.columnsByIndex.forEach((t,i)=>{e(t,i)})}getDefinitions(e){var t=[];return this.columnsByIndex.forEach(i=>{(!e||e&&i.visible)&&t.push(i.getDefinition())}),t}getDefinitionTree(){var e=[];return this.columns.forEach(t=>{e.push(t.getDefinition(!0))}),e}getComponents(e){var t=[],i=e?this.columns:this.columnsByIndex;return i.forEach(s=>{t.push(s.getComponent())}),t}getWidth(){var e=0;return this.columnsByIndex.forEach(t=>{t.visible&&(e+=t.getWidth())}),e}moveColumn(e,t,i){t.element.parentNode.insertBefore(e.element,t.element),i&&t.element.parentNode.insertBefore(t.element,e.element),this.moveColumnActual(e,t,i),this.verticalAlignHeaders(),this.table.rowManager.reinitialize()}moveColumnActual(e,t,i){e.parent.isGroup?this._moveColumnInArray(e.parent.columns,e,t,i):this._moveColumnInArray(this.columns,e,t,i),this._moveColumnInArray(this.columnsByIndex,e,t,i,!0),this.rerenderColumns(!0),this.dispatch("column-moved",e,t,i),this.subscribedExternal("columnMoved")&&this.dispatchExternal("columnMoved",e.getComponent(),this.table.columnManager.getComponents())}_moveColumnInArray(e,t,i,s,n){var r=e.indexOf(t),o,a=[];r>-1&&(e.splice(r,1),o=e.indexOf(i),o>-1?s&&(o=o+1):o=r,e.splice(o,0,t),n&&(a=this.chain("column-moving-rows",[t,i,s],null,[])||[],a=a.concat(this.table.rowManager.rows),a.forEach(function(h){if(h.cells.length){var d=h.cells.splice(r,1)[0];h.cells.splice(o,0,d)}})))}scrollToColumn(e,t,i){var s=0,n=e.getLeftOffset(),r=0,o=e.getElement();return new Promise((a,h)=>{if(typeof t>"u"&&(t=this.table.options.scrollToColumnPosition),typeof i>"u"&&(i=this.table.options.scrollToColumnIfVisible),e.visible){switch(t){case"middle":case"center":r=-this.element.clientWidth/2;break;case"right":r=o.clientWidth-this.headersElement.clientWidth;break}if(!i&&n>0&&n+o.offsetWidth{t.push(i.generateCell(e))}),t}getFlexBaseWidth(){var e=this.table.element.clientWidth,t=0;return this.table.rowManager.element.scrollHeight>this.table.rowManager.element.clientHeight&&(e-=this.table.rowManager.element.offsetWidth-this.table.rowManager.element.clientWidth),this.columnsByIndex.forEach(function(i){var s,n,r;i.visible&&(s=i.definition.width||0,n=parseInt(i.minWidth),typeof s=="string"?s.indexOf("%")>-1?r=e/100*parseInt(s):r=parseInt(s):r=s,t+=r>n?r:n)}),t}addColumn(e,t,i){return new Promise((s,n)=>{var r=this._addColumn(e,t,i);this._reIndexColumns(),this.dispatch("column-add",e,t,i),this.layoutMode()!="fitColumns"&&r.reinitializeWidth(),this.redraw(!0),this.table.rowManager.reinitialize(),this.rerenderColumns(),s(r)})}deregisterColumn(e){var t=e.getField(),i;t&&delete this.columnsByField[t],i=this.columnsByIndex.indexOf(e),i>-1&&this.columnsByIndex.splice(i,1),i=this.columns.indexOf(e),i>-1&&this.columns.splice(i,1),this.verticalAlignHeaders(),this.redraw()}rerenderColumns(e,t){this.redrawBlock?(e===!1||e===!0&&this.redrawBlockUpdate===null)&&(this.redrawBlockUpdate=e):this.renderer.rerenderColumns(e,t)}blockRedraw(){this.redrawBlock=!0,this.redrawBlockUpdate=null}restoreRedraw(){this.redrawBlock=!1,this.verticalAlignHeaders(),this.renderer.rerenderColumns(this.redrawBlockUpdate)}redraw(e){x.elVisible(this.element)&&this.verticalAlignHeaders(),e&&(this.table.rowManager.resetScroll(),this.table.rowManager.reinitialize()),this.confirm("table-redrawing",e)||this.layoutRefresh(e),this.dispatch("table-redraw",e),this.table.footerManager.redraw()}}class Rs extends le{constructor(e){super(e),this.verticalFillMode="fill",this.scrollTop=0,this.scrollLeft=0,this.scrollTop=0,this.scrollLeft=0}clearRows(){for(var e=this.tableElement;e.firstChild;)e.removeChild(e.firstChild);e.scrollTop=0,e.scrollLeft=0,e.style.minWidth="",e.style.minHeight="",e.style.display="",e.style.visibility=""}renderRows(){var e=this.tableElement,t=!0,i=document.createDocumentFragment(),s=this.rows();s.forEach((n,r)=>{this.styleRow(n,r),n.initialize(!1,!0),n.type!=="group"&&(t=!1),i.appendChild(n.getElement())}),e.appendChild(i),s.forEach(n=>{n.rendered(),n.heightInitialized||n.calcHeight(!0)}),s.forEach(n=>{n.heightInitialized||n.setCellHeight()}),t?e.style.minWidth=this.table.columnManager.getWidth()+"px":e.style.minWidth=""}rerenderRows(e){this.clearRows(),e&&e(),this.renderRows(),this.rows().length||this.table.rowManager.tableEmpty()}scrollToRowNearestTop(e){var t=x.elOffset(e.getElement()).top;return!(Math.abs(this.elementVertical.scrollTop-t)>Math.abs(this.elementVertical.scrollTop+this.elementVertical.clientHeight-t))}scrollToRow(e){var t=e.getElement();this.elementVertical.scrollTop=x.elOffset(t).top-x.elOffset(this.elementVertical).top+this.elementVertical.scrollTop}visibleRows(e){return this.rows()}}class xs extends le{constructor(e){super(e),this.verticalFillMode="fill",this.scrollTop=0,this.scrollLeft=0,this.vDomRowHeight=20,this.vDomTop=0,this.vDomBottom=0,this.vDomScrollPosTop=0,this.vDomScrollPosBottom=0,this.vDomTopPad=0,this.vDomBottomPad=0,this.vDomMaxRenderChain=90,this.vDomWindowBuffer=0,this.vDomWindowMinTotalRows=20,this.vDomWindowMinMarginRows=5,this.vDomTopNewRows=[],this.vDomBottomNewRows=[]}clearRows(){for(var e=this.tableElement;e.firstChild;)e.removeChild(e.firstChild);e.style.paddingTop="",e.style.paddingBottom="",e.style.minHeight="",e.style.display="",e.style.visibility="",this.elementVertical.scrollTop=0,this.elementVertical.scrollLeft=0,this.scrollTop=0,this.scrollLeft=0,this.vDomTop=0,this.vDomBottom=0,this.vDomTopPad=0,this.vDomBottomPad=0,this.vDomScrollPosTop=0,this.vDomScrollPosBottom=0}renderRows(){this._virtualRenderFill()}rerenderRows(e){for(var t=this.elementVertical.scrollTop,i=!1,s=!1,n=this.table.rowManager.scrollLeft,r=this.rows(),o=this.vDomTop;o<=this.vDomBottom;o++)if(r[o]){var a=t-r[o].getElement().offsetTop;if(s===!1||Math.abs(a){h.deinitializeHeight()}),e&&e(),this.rows().length?this._virtualRenderFill(i===!1?this.rows.length-1:i,!0,s||0):(this.clear(),this.table.rowManager.tableEmpty()),this.scrollColumns(n)}scrollColumns(e){this.table.rowManager.scrollHorizontal(e)}scrollRows(e,t){var i=e-this.vDomScrollPosTop,s=e-this.vDomScrollPosBottom,n=this.vDomWindowBuffer*2,r=this.rows();if(this.scrollTop=e,-i>n||s>n){var o=this.table.rowManager.scrollLeft;this._virtualRenderFill(Math.floor(this.elementVertical.scrollTop/this.elementVertical.scrollHeight*r.length)),this.scrollColumns(o)}else t?(i<0&&this._addTopRow(r,-i),s<0&&(this.vDomScrollHeight-this.scrollTop>this.vDomWindowBuffer?this._removeBottomRow(r,-s):this.vDomScrollPosBottom=this.scrollTop)):(s>=0&&this._addBottomRow(r,s),i>=0&&(this.scrollTop>this.vDomWindowBuffer?this._removeTopRow(r,i):this.vDomScrollPosTop=this.scrollTop))}resize(){this.vDomWindowBuffer=this.table.options.renderVerticalBuffer||this.elementVertical.clientHeight}scrollToRowNearestTop(e){var t=this.rows().indexOf(e);return!(Math.abs(this.vDomTop-t)>Math.abs(this.vDomBottom-t))}scrollToRow(e){var t=this.rows().indexOf(e);t>-1&&this._virtualRenderFill(t,!0)}visibleRows(e){var t=this.elementVertical.scrollTop,i=this.elementVertical.clientHeight+t,s=!1,n=0,r=0,o=this.rows();if(e)n=this.vDomTop,r=this.vDomBottom;else for(var a=this.vDomTop;a<=this.vDomBottom;a++)if(o[a])if(s)if(i-o[a].getElement().offsetTop>=0)r=a;else break;else if(t-o[a].getElement().offsetTop>=0)n=a;else if(s=!0,i-o[a].getElement().offsetTop>=0)r=a;else break;return o.slice(n,r+1)}_virtualRenderFill(e,t,i){var s=this.tableElement,n=this.elementVertical,r=0,o=0,a=0,h=0,d=0,u=0,c=this.rows(),f=c.length,g=0,p,v,m=[],C=0,T=0,y=this.table.rowManager.fixedHeight,k=this.elementVertical.clientHeight,P=this.table.options.rowHeight,X=!0;if(e=e||0,i=i||0,!e)this.clear();else{for(;s.firstChild;)s.removeChild(s.firstChild);h=(f-e+1)*this.vDomRowHeight,h{L.rendered(),L.heightInitialized||L.calcHeight(!0)}),m.forEach(L=>{L.heightInitialized||L.setCellHeight()}),m.forEach(L=>{a=L.getHeight(),Cthis.vDomWindowBuffer&&(this.vDomWindowBuffer=a*2),C++}),X=this.table.rowManager.adjustTableSize(),k=this.elementVertical.clientHeight,X&&(y||this.table.options.maxHeight)&&(P=o/C,T=Math.max(this.vDomWindowMinTotalRows,Math.ceil(k/P+this.vDomWindowBuffer/P)))}e?(this.vDomTopPad=t?this.vDomRowHeight*this.vDomTop+i:this.scrollTop-d,this.vDomBottomPad=this.vDomBottom==f-1?0:Math.max(this.vDomScrollHeight-this.vDomTopPad-o-d,0)):(this.vDomTopPad=0,this.vDomRowHeight=Math.floor((o+d)/C),this.vDomBottomPad=this.vDomRowHeight*(f-this.vDomBottom-1),this.vDomScrollHeight=d+o+this.vDomBottomPad-k),s.style.paddingTop=this.vDomTopPad+"px",s.style.paddingBottom=this.vDomBottomPad+"px",t&&(this.scrollTop=this.vDomTopPad+d+i-(this.elementVertical.scrollWidth>this.elementVertical.clientWidth?this.elementVertical.offsetHeight-k:0)),this.scrollTop=Math.min(this.scrollTop,this.elementVertical.scrollHeight-k),this.elementVertical.scrollWidth>this.elementVertical.clientWidth&&t&&(this.scrollTop+=this.elementVertical.offsetHeight-k),this.vDomScrollPosTop=this.scrollTop,this.vDomScrollPosBottom=this.scrollTop,n.scrollTop=this.scrollTop,this.dispatch("render-virtual-fill")}}_addTopRow(e,t){for(var i=this.tableElement,s=[],n=0,r=this.vDomTop-1,o=0,a=!0;a;)if(this.vDomTop){let h=e[r],d,u;h&&o=d?(this.styleRow(h,r),i.insertBefore(h.getElement(),i.firstChild),(!h.initialized||!h.heightInitialized)&&s.push(h),h.initialize(),u||(d=h.getElement().offsetHeight,d>this.vDomWindowBuffer&&(this.vDomWindowBuffer=d*2)),t-=d,n+=d,this.vDomTop--,r--,o++):a=!1):a=!1}else a=!1;for(let h of s)h.clearCellHeight();this._quickNormalizeRowHeight(s),n&&(this.vDomTopPad-=n,this.vDomTopPad<0&&(this.vDomTopPad=r*this.vDomRowHeight),r<1&&(this.vDomTopPad=0),i.style.paddingTop=this.vDomTopPad+"px",this.vDomScrollPosTop-=n)}_removeTopRow(e,t){for(var i=[],s=0,n=0,r=!0;r;){let o=e[this.vDomTop],a;o&&n=a?(this.vDomTop++,t-=a,s+=a,i.push(o),n++):r=!1):r=!1}for(let o of i){let a=o.getElement();a.parentNode&&a.parentNode.removeChild(a)}s&&(this.vDomTopPad+=s,this.tableElement.style.paddingTop=this.vDomTopPad+"px",this.vDomScrollPosTop+=this.vDomTop?s:s+this.vDomWindowBuffer)}_addBottomRow(e,t){for(var i=this.tableElement,s=[],n=0,r=this.vDomBottom+1,o=0,a=!0;a;){let h=e[r],d,u;h&&o=d?(this.styleRow(h,r),i.appendChild(h.getElement()),(!h.initialized||!h.heightInitialized)&&s.push(h),h.initialize(),u||(d=h.getElement().offsetHeight,d>this.vDomWindowBuffer&&(this.vDomWindowBuffer=d*2)),t-=d,n+=d,this.vDomBottom++,r++,o++):a=!1):a=!1}for(let h of s)h.clearCellHeight();this._quickNormalizeRowHeight(s),n&&(this.vDomBottomPad-=n,(this.vDomBottomPad<0||r==e.length-1)&&(this.vDomBottomPad=0),i.style.paddingBottom=this.vDomBottomPad+"px",this.vDomScrollPosBottom+=n)}_removeBottomRow(e,t){for(var i=[],s=0,n=0,r=!0;r;){let o=e[this.vDomBottom],a;o&&n=a?(this.vDomBottom--,t-=a,s+=a,i.push(o),n++):r=!1):r=!1}for(let o of i){let a=o.getElement();a.parentNode&&a.parentNode.removeChild(a)}s&&(this.vDomBottomPad+=s,this.vDomBottomPad<0&&(this.vDomBottomPad=0),this.tableElement.style.paddingBottom=this.vDomBottomPad+"px",this.vDomScrollPosBottom-=s)}_quickNormalizeRowHeight(e){for(let t of e)t.calcHeight();for(let t of e)t.setCellHeight()}}class Ts extends M{constructor(e){super(e),this.element=this.createHolderElement(),this.tableElement=this.createTableElement(),this.heightFixer=this.createTableElement(),this.placeholder=null,this.placeholderContents=null,this.firstRender=!1,this.renderMode="virtual",this.fixedHeight=!1,this.rows=[],this.activeRowsPipeline=[],this.activeRows=[],this.activeRowsCount=0,this.displayRows=[],this.displayRowsCount=0,this.scrollTop=0,this.scrollLeft=0,this.redrawBlock=!1,this.redrawBlockRestoreConfig=!1,this.redrawBlockRenderInPosition=!1,this.dataPipeline=[],this.displayPipeline=[],this.scrollbarWidth=0,this.renderer=null}createHolderElement(){var e=document.createElement("div");return e.classList.add("tabulator-tableholder"),e.setAttribute("tabindex",0),e}createTableElement(){var e=document.createElement("div");return e.classList.add("tabulator-table"),e.setAttribute("role","rowgroup"),e}initializePlaceholder(){var e=this.table.options.placeholder;if(typeof e=="function"&&(e=e.call(this.table)),e=this.chain("placeholder",[e],e,e)||e,e){let t=document.createElement("div");if(t.classList.add("tabulator-placeholder"),typeof e=="string"){let i=document.createElement("div");i.classList.add("tabulator-placeholder-contents"),i.innerHTML=e,t.appendChild(i),this.placeholderContents=i}else typeof HTMLElement<"u"&&e instanceof HTMLElement?(t.appendChild(e),this.placeholderContents=e):(console.warn("Invalid placeholder provided, must be string or HTML Element",e),this.el=null);this.placeholder=t}}getElement(){return this.element}getTableElement(){return this.tableElement}initialize(){this.initializePlaceholder(),this.initializeRenderer(),this.element.appendChild(this.tableElement),this.firstRender=!0,this.element.addEventListener("scroll",()=>{var e=this.element.scrollLeft,t=this.scrollLeft>e,i=this.element.scrollTop,s=this.scrollTop>i;this.scrollLeft!=e&&(this.scrollLeft=e,this.dispatch("scroll-horizontal",e,t),this.dispatchExternal("scrollHorizontal",e,t),this._positionPlaceholder()),this.scrollTop!=i&&(this.scrollTop=i,this.renderer.scrollRows(i,s),this.dispatch("scroll-vertical",i,s),this.dispatchExternal("scrollVertical",i,s))})}findRow(e){if(typeof e=="object"){if(e instanceof S)return e;if(e instanceof oe)return e._getSelf()||!1;if(typeof HTMLElement<"u"&&e instanceof HTMLElement)return this.rows.find(i=>i.getElement()===e)||!1;if(e===null)return!1}else return typeof e>"u"?!1:this.rows.find(i=>i.data[this.table.options.index]==e)||!1;return!1}getRowFromDataObject(e){var t=this.rows.find(i=>i.data===e);return t||!1}getRowFromPosition(e){return this.getDisplayRows().find(t=>t.type==="row"&&t.getPosition()===e&&t.isDisplayed())}scrollToRow(e,t,i){return this.renderer.scrollToRowPosition(e,t,i)}setData(e,t,i){return new Promise((s,n)=>{t&&this.getDisplayRows().length?this.table.options.pagination?this._setDataActual(e,!0):this.reRenderInPosition(()=>{this._setDataActual(e)}):(this.table.options.autoColumns&&i&&this.table.initialized&&this.table.columnManager.generateColumnsFromRowData(e),this.resetScroll(),this._setDataActual(e)),s()})}_setDataActual(e,t){this.dispatchExternal("dataProcessing",e),this._wipeElements(),Array.isArray(e)?(this.dispatch("data-processing",e),e.forEach((i,s)=>{if(i&&typeof i=="object"){var n=new S(i,this);this.rows.push(n)}else console.warn("Data Loading Warning - Invalid row data detected and ignored, expecting object but received:",i)}),this.refreshActiveData(!1,!1,t),this.dispatch("data-processed",e),this.dispatchExternal("dataProcessed",e)):console.error(`Data Loading Error - Unable to process data due to invalid data type +Expecting: array +Received: `,typeof e,` +Data: `,e)}_wipeElements(){this.dispatch("rows-wipe"),this.destroy(),this.adjustTableSize(),this.dispatch("rows-wiped")}destroy(){this.rows.forEach(e=>{e.wipe()}),this.rows=[],this.activeRows=[],this.activeRowsPipeline=[],this.activeRowsCount=0,this.displayRows=[],this.displayRowsCount=0}deleteRow(e,t){var i=this.rows.indexOf(e),s=this.activeRows.indexOf(e);s>-1&&this.activeRows.splice(s,1),i>-1&&this.rows.splice(i,1),this.setActiveRows(this.activeRows),this.displayRowIterator(n=>{var r=n.indexOf(e);r>-1&&n.splice(r,1)}),t||this.reRenderInPosition(),this.regenerateRowPositions(),this.dispatchExternal("rowDeleted",e.getComponent()),this.displayRowsCount||this.tableEmpty(),this.subscribedExternal("dataChanged")&&this.dispatchExternal("dataChanged",this.getData())}addRow(e,t,i,s){var n=this.addRowActual(e,t,i,s);return n}addRows(e,t,i,s){var n=[];return new Promise((r,o)=>{t=this.findAddRowPos(t),Array.isArray(e)||(e=[e]),(typeof i>"u"&&t||typeof i<"u"&&!t)&&e.reverse(),e.forEach((a,h)=>{var d=this.addRow(a,t,i,!0);n.push(d),this.dispatch("row-added",d,a,t,i)}),this.refreshActiveData(s?"displayPipeline":!1,!1,!0),this.regenerateRowPositions(),this.displayRowsCount&&this._clearPlaceholder(),r(n)})}findAddRowPos(e){return typeof e>"u"&&(e=this.table.options.addRowPos),e==="pos"&&(e=!0),e==="bottom"&&(e=!1),e}addRowActual(e,t,i,s){var n=e instanceof S?e:new S(e||{},this),r=this.findAddRowPos(t),o=-1,a,h;return i||(h=this.chain("row-adding-position",[n,r],null,{index:i,top:r}),i=h.index,r=h.top),typeof i<"u"&&(i=this.findRow(i)),i=this.chain("row-adding-index",[n,i,r],null,i),i&&(o=this.rows.indexOf(i)),i&&o>-1?(a=this.activeRows.indexOf(i),this.displayRowIterator(function(d){var u=d.indexOf(i);u>-1&&d.splice(r?u:u+1,0,n)}),a>-1&&this.activeRows.splice(r?a:a+1,0,n),this.rows.splice(r?o:o+1,0,n)):r?(this.displayRowIterator(function(d){d.unshift(n)}),this.activeRows.unshift(n),this.rows.unshift(n)):(this.displayRowIterator(function(d){d.push(n)}),this.activeRows.push(n),this.rows.push(n)),this.setActiveRows(this.activeRows),this.dispatchExternal("rowAdded",n.getComponent()),this.subscribedExternal("dataChanged")&&this.dispatchExternal("dataChanged",this.table.rowManager.getData()),s||this.reRenderInPosition(),n}moveRow(e,t,i){this.dispatch("row-move",e,t,i),this.moveRowActual(e,t,i),this.regenerateRowPositions(),this.dispatch("row-moved",e,t,i),this.dispatchExternal("rowMoved",e.getComponent())}moveRowActual(e,t,i){this.moveRowInArray(this.rows,e,t,i),this.moveRowInArray(this.activeRows,e,t,i),this.displayRowIterator(s=>{this.moveRowInArray(s,e,t,i)}),this.dispatch("row-moving",e,t,i)}moveRowInArray(e,t,i,s){var n,r,o,a;if(t!==i&&(n=e.indexOf(t),n>-1&&(e.splice(n,1),r=e.indexOf(i),r>-1?s?e.splice(r+1,0,t):e.splice(r,0,t):e.splice(n,0,t)),e===this.getDisplayRows())){o=nn?r:n+1;for(let h=o;h<=a;h++)e[h]&&this.styleRow(e[h],h)}}clearData(){this.setData([])}getRowIndex(e){return this.findRowIndex(e,this.rows)}getDisplayRowIndex(e){var t=this.getDisplayRows().indexOf(e);return t>-1?t:!1}nextDisplayRow(e,t){var i=this.getDisplayRowIndex(e),s=!1;return i!==!1&&i-1)?i:!1}getData(e,t){var i=[],s=this.getRows(e);return s.forEach(function(n){n.type=="row"&&i.push(n.getData(t||"data"))}),i}getComponents(e){var t=[],i=this.getRows(e);return i.forEach(function(s){t.push(s.getComponent())}),t}getDataCount(e){var t=this.getRows(e);return t.length}scrollHorizontal(e){this.scrollLeft=e,this.element.scrollLeft=e,this.dispatch("scroll-horizontal",e)}registerDataPipelineHandler(e,t){typeof t<"u"?(this.dataPipeline.push({handler:e,priority:t}),this.dataPipeline.sort((i,s)=>i.priority-s.priority)):console.error("Data pipeline handlers must have a priority in order to be registered")}registerDisplayPipelineHandler(e,t){typeof t<"u"?(this.displayPipeline.push({handler:e,priority:t}),this.displayPipeline.sort((i,s)=>i.priority-s.priority)):console.error("Display pipeline handlers must have a priority in order to be registered")}refreshActiveData(e,t,i){var s=this.table,n="",r=0,o=["all","dataPipeline","display","displayPipeline","end"];if(!this.table.destroyed){if(typeof e=="function")if(r=this.dataPipeline.findIndex(a=>a.handler===e),r>-1)n="dataPipeline",t&&(r==this.dataPipeline.length-1?n="display":r++);else if(r=this.displayPipeline.findIndex(a=>a.handler===e),r>-1)n="displayPipeline",t&&(r==this.displayPipeline.length-1?n="end":r++);else{console.error("Unable to refresh data, invalid handler provided",e);return}else n=e||"all",r=0;if(this.redrawBlock){(!this.redrawBlockRestoreConfig||this.redrawBlockRestoreConfig&&(this.redrawBlockRestoreConfig.stage===n&&r{i.type==="row"&&(i.setPosition(t),t++)})}setActiveRows(e){this.activeRows=this.activeRows=Object.assign([],e),this.activeRowsCount=this.activeRows.length}resetDisplayRows(){this.displayRows=[],this.displayRows.push(this.activeRows.slice(0)),this.displayRowsCount=this.displayRows[0].length}setDisplayRows(e,t){this.displayRows[t]=e,t==this.displayRows.length-1&&(this.displayRowsCount=this.displayRows[this.displayRows.length-1].length)}getDisplayRows(e){return typeof e>"u"?this.displayRows.length?this.displayRows[this.displayRows.length-1]:[]:this.displayRows[e]||[]}getVisibleRows(e,t){var i=Object.assign([],this.renderer.visibleRows(!t));return e&&(i=this.chain("rows-visible",[t],i,i)),i}displayRowIterator(e){this.activeRowsPipeline.forEach(e),this.displayRows.forEach(e),this.displayRowsCount=this.displayRows[this.displayRows.length-1].length}getRows(e){var t=[];switch(e){case"active":t=this.activeRows;break;case"display":t=this.table.rowManager.getDisplayRows();break;case"visible":t=this.getVisibleRows(!1,!0);break;default:t=this.chain("rows-retrieve",e,null,this.rows)||this.rows}return t}reRenderInPosition(e){this.redrawBlock?e?e():this.redrawBlockRenderInPosition=!0:(this.dispatchExternal("renderStarted"),this.renderer.rerenderRows(e),this.fixedHeight||this.adjustTableSize(),this.scrollBarCheck(),this.dispatchExternal("renderComplete"))}scrollBarCheck(){var e=0;this.element.scrollHeight>this.element.clientHeight&&(e=this.element.offsetWidth-this.element.clientWidth),e!==this.scrollbarWidth&&(this.scrollbarWidth=e,this.dispatch("scrollbar-vertical",e))}initializeRenderer(){var e,t={virtual:xs,basic:Rs};typeof this.table.options.renderVertical=="string"?e=t[this.table.options.renderVertical]:e=this.table.options.renderVertical,e?(this.renderMode=this.table.options.renderVertical,this.renderer=new e(this.table,this.element,this.tableElement),this.renderer.initialize(),(this.table.element.clientHeight||this.table.options.height)&&!(this.table.options.minHeight&&this.table.options.maxHeight)?this.fixedHeight=!0:this.fixedHeight=!1):console.error("Unable to find matching renderer:",this.table.options.renderVertical)}getRenderMode(){return this.renderMode}renderTable(){this.dispatchExternal("renderStarted"),this.element.scrollTop=0,this._clearTable(),this.displayRowsCount?(this.renderer.renderRows(),this.firstRender&&(this.firstRender=!1,this.fixedHeight||this.adjustTableSize(),this.layoutRefresh(!0))):this.renderEmptyScroll(),this.fixedHeight||this.adjustTableSize(),this.dispatch("table-layout"),this.displayRowsCount||this._showPlaceholder(),this.scrollBarCheck(),this.dispatchExternal("renderComplete")}renderEmptyScroll(){this.placeholder?this.tableElement.style.display="none":this.tableElement.style.minWidth=this.table.columnManager.getWidth()+"px"}_clearTable(){this._clearPlaceholder(),this.scrollTop=0,this.scrollLeft=0,this.renderer.clearRows()}tableEmpty(){this.renderEmptyScroll(),this._showPlaceholder()}checkPlaceholder(){this.displayRowsCount?this._clearPlaceholder():this.tableEmpty()}_showPlaceholder(){this.placeholder&&(this.placeholder&&this.placeholder.parentNode&&this.placeholder.parentNode.removeChild(this.placeholder),this.initializePlaceholder(),this.placeholder.setAttribute("tabulator-render-mode",this.renderMode),this.getElement().appendChild(this.placeholder),this._positionPlaceholder(),this.adjustTableSize())}_clearPlaceholder(){this.placeholder&&this.placeholder.parentNode&&this.placeholder.parentNode.removeChild(this.placeholder),this.tableElement.style.minWidth="",this.tableElement.style.display=""}_positionPlaceholder(){this.placeholder&&this.placeholder.parentNode&&(this.placeholder.style.width=this.table.columnManager.getWidth()+"px",this.placeholderContents.style.width=this.table.rowManager.element.clientWidth+"px",this.placeholderContents.style.marginLeft=this.scrollLeft+"px")}styleRow(e,t){var i=e.getElement();t%2?(i.classList.add("tabulator-row-even"),i.classList.remove("tabulator-row-odd")):(i.classList.add("tabulator-row-odd"),i.classList.remove("tabulator-row-even"))}normalizeHeight(){this.activeRows.forEach(function(e){e.normalizeHeight()})}adjustTableSize(){let e=this.element.clientHeight,t,i=!1;if(this.renderer.verticalFillMode==="fill"){let s=Math.floor(this.table.columnManager.getElement().getBoundingClientRect().height+(this.table.footerManager&&this.table.footerManager.active&&!this.table.footerManager.external?this.table.footerManager.getElement().getBoundingClientRect().height:0));if(this.fixedHeight){t=isNaN(this.table.options.minHeight)?this.table.options.minHeight:this.table.options.minHeight+"px";const n="calc(100% - "+s+"px)";this.element.style.minHeight=t||"calc(100% - "+s+"px)",this.element.style.height=n,this.element.style.maxHeight=n}else this.element.style.height="",this.element.style.height=this.table.element.clientHeight-s+"px",this.element.scrollTop=this.scrollTop;this.renderer.resize(),!this.fixedHeight&&e!=this.element.clientHeight&&(i=!0,this.subscribed("table-resize")?this.dispatch("table-resize"):this.redraw()),this.scrollBarCheck()}return this._positionPlaceholder(),i}reinitialize(){this.rows.forEach(function(e){e.reinitialize(!0)})}blockRedraw(){this.redrawBlock=!0,this.redrawBlockRestoreConfig=!1}restoreRedraw(){this.redrawBlock=!1,this.redrawBlockRestoreConfig?(this.refreshActiveData(this.redrawBlockRestoreConfig.handler,this.redrawBlockRestoreConfig.skipStage,this.redrawBlockRestoreConfig.renderInPosition),this.redrawBlockRestoreConfig=!1):this.redrawBlockRenderInPosition&&this.reRenderInPosition(),this.redrawBlockRenderInPosition=!1}redraw(e){this.adjustTableSize(),this.table.tableWidth=this.table.element.clientWidth,e?this.renderTable():(this.reRenderInPosition(),this.scrollHorizontal(this.scrollLeft))}resetScroll(){if(this.element.scrollLeft=0,this.element.scrollTop=0,this.table.browser==="ie"){var e=document.createEvent("Event");e.initEvent("scroll",!1,!0),this.element.dispatchEvent(e)}else this.element.dispatchEvent(new Event("scroll"))}}class ks extends M{constructor(e){super(e),this.active=!1,this.element=this.createElement(),this.containerElement=this.createContainerElement(),this.external=!1}initialize(){this.initializeElement()}createElement(){var e=document.createElement("div");return e.classList.add("tabulator-footer"),e}createContainerElement(){var e=document.createElement("div");return e.classList.add("tabulator-footer-contents"),this.element.appendChild(e),e}initializeElement(){if(this.table.options.footerElement)switch(typeof this.table.options.footerElement){case"string":this.table.options.footerElement[0]==="<"?this.containerElement.innerHTML=this.table.options.footerElement:(this.external=!0,this.containerElement=document.querySelector(this.table.options.footerElement));break;default:this.element=this.table.options.footerElement;break}}getElement(){return this.element}append(e){this.activate(),this.containerElement.appendChild(e),this.table.rowManager.adjustTableSize()}prepend(e){this.activate(),this.element.insertBefore(e,this.element.firstChild),this.table.rowManager.adjustTableSize()}remove(e){e.parentNode.removeChild(e),this.deactivate()}deactivate(e){(!this.element.firstChild||e)&&(this.external||this.element.parentNode.removeChild(this.element),this.active=!1)}activate(){this.active||(this.active=!0,this.external||(this.table.element.appendChild(this.getElement()),this.table.element.style.display=""))}redraw(){this.dispatch("footer-redraw")}}class Ms extends M{constructor(e){super(e),this.el=null,this.abortClasses=["tabulator-headers","tabulator-table"],this.previousTargets={},this.listeners=["click","dblclick","contextmenu","mouseenter","mouseleave","mouseover","mouseout","mousemove","mouseup","mousedown","touchstart","touchend"],this.componentMap={"tabulator-cell":"cell","tabulator-row":"row","tabulator-group":"group","tabulator-col":"column"},this.pseudoTrackers={row:{subscriber:null,target:null},cell:{subscriber:null,target:null},group:{subscriber:null,target:null},column:{subscriber:null,target:null}},this.pseudoTracking=!1}initialize(){this.el=this.table.element,this.buildListenerMap(),this.bindSubscriptionWatchers()}buildListenerMap(){var e={};this.listeners.forEach(t=>{e[t]={handler:null,components:[]}}),this.listeners=e}bindPseudoEvents(){Object.keys(this.pseudoTrackers).forEach(e=>{this.pseudoTrackers[e].subscriber=this.pseudoMouseEnter.bind(this,e),this.subscribe(e+"-mouseover",this.pseudoTrackers[e].subscriber)}),this.pseudoTracking=!0}pseudoMouseEnter(e,t,i){this.pseudoTrackers[e].target!==i&&(this.pseudoTrackers[e].target&&this.dispatch(e+"-mouseleave",t,this.pseudoTrackers[e].target),this.pseudoMouseLeave(e,t),this.pseudoTrackers[e].target=i,this.dispatch(e+"-mouseenter",t,i))}pseudoMouseLeave(e,t){var i=Object.keys(this.pseudoTrackers),s={row:["cell"],cell:["row"]};i=i.filter(n=>{var r=s[e];return n!==e&&(!r||r&&!r.includes(n))}),i.forEach(n=>{var r=this.pseudoTrackers[n].target;this.pseudoTrackers[n].target&&(this.dispatch(n+"-mouseleave",t,r),this.pseudoTrackers[n].target=null)})}bindSubscriptionWatchers(){var e=Object.keys(this.listeners),t=Object.values(this.componentMap);for(let i of t)for(let s of e){let n=i+"-"+s;this.subscriptionChange(n,this.subscriptionChanged.bind(this,i,s))}this.subscribe("table-destroy",this.clearWatchers.bind(this))}subscriptionChanged(e,t,i){var s=this.listeners[t].components,n=s.indexOf(e),r=!1;i?n===-1&&(s.push(e),r=!0):this.subscribed(e+"-"+t)||n>-1&&(s.splice(n,1),r=!0),(t==="mouseenter"||t==="mouseleave")&&!this.pseudoTracking&&this.bindPseudoEvents(),r&&this.updateEventListeners()}updateEventListeners(){for(let e in this.listeners){let t=this.listeners[e];t.components.length?t.handler||(t.handler=this.track.bind(this,e),this.el.addEventListener(e,t.handler)):t.handler&&(this.el.removeEventListener(e,t.handler),t.handler=null)}}track(e,t){var i=t.composedPath&&t.composedPath()||t.path,s=this.findTargets(i);s=this.bindComponents(e,s),this.triggerEvents(e,t,s),this.pseudoTracking&&(e=="mouseover"||e=="mouseleave")&&!Object.keys(s).length&&this.pseudoMouseLeave("none",t)}findTargets(e){var t={};let i=Object.keys(this.componentMap);for(let s of e){let n=s.classList?[...s.classList]:[];if(n.filter(a=>this.abortClasses.includes(a)).length)break;let o=n.filter(a=>i.includes(a));for(let a of o)t[this.componentMap[a]]||(t[this.componentMap[a]]=s)}return t.group&&t.group===t.row&&delete t.row,t}bindComponents(e,t){var i=Object.keys(t).reverse(),s=this.listeners[e],n={},r={};for(let o of i){let a,h=t[o],d=this.previousTargets[o];if(d&&d.target===h)a=d.component;else switch(o){case"row":case"group":(s.components.includes("row")||s.components.includes("cell")||s.components.includes("group"))&&(a=this.table.rowManager.getVisibleRows(!0).find(c=>c.getElement()===h),t.row&&t.row.parentNode&&t.row.parentNode.closest(".tabulator-row")&&(t[o]=!1));break;case"column":s.components.includes("column")&&(a=this.table.columnManager.findColumn(h));break;case"cell":s.components.includes("cell")&&(n.row instanceof S?a=n.row.findCell(h):t.row&&console.warn("Event Target Lookup Error - The row this cell is attached to cannot be found, has the table been reinitialized without being destroyed first?"));break}a&&(n[o]=a,r[o]={target:h,component:a})}return this.previousTargets=r,n}triggerEvents(e,t,i){var s=this.listeners[e];for(let n in i)i[n]&&s.components.includes(n)&&this.dispatch(n+"-"+e,t,i[n])}clearWatchers(){for(let e in this.listeners){let t=this.listeners[e];t.handler&&(this.el.removeEventListener(e,t.handler),t.handler=null)}}}class Ls{constructor(e){this.table=e,this.bindings={}}bind(e,t,i){this.bindings[e]||(this.bindings[e]={}),this.bindings[e][t]?console.warn("Unable to bind component handler, a matching function name is already bound",e,t,i):this.bindings[e][t]=i}handle(e,t,i){if(this.bindings[e]&&this.bindings[e][i]&&typeof this.bindings[e][i].bind=="function")return this.bindings[e][i].bind(null,t);i!=="then"&&typeof i=="string"&&!i.startsWith("_")&&this.table.options.debugInvalidComponentFuncs&&console.error("The "+e+" component does not have a "+i+" function, have you checked that you have the correct Tabulator module installed?")}}class Ss extends M{constructor(e){super(e),this.requestOrder=0,this.loading=!1}initialize(){}load(e,t,i,s,n,r){var o=++this.requestOrder;if(this.table.destroyed)return Promise.resolve();if(this.dispatchExternal("dataLoading",e),e&&(e.indexOf("{")==0||e.indexOf("[")==0)&&(e=JSON.parse(e)),this.confirm("data-loading",[e,t,i,n])){this.loading=!0,n||this.alertLoader(),t=this.chain("data-params",[e,i,n],t||{},t||{}),t=this.mapParams(t,this.table.options.dataSendParams);var a=this.chain("data-load",[e,t,i,n],!1,Promise.resolve([]));return a.then(h=>{if(this.table.destroyed)console.warn("Data Load Response Blocked - Table has been destroyed");else{!Array.isArray(h)&&typeof h=="object"&&(h=this.mapParams(h,this.objectInvert(this.table.options.dataReceiveParams)));var d=this.chain("data-loaded",[h],null,h);o==this.requestOrder?(this.clearAlert(),d!==!1&&(this.dispatchExternal("dataLoaded",d),this.table.rowManager.setData(d,s,typeof r>"u"?!s:r))):console.warn("Data Load Response Blocked - An active data load request was blocked by an attempt to change table data while the request was being made")}}).catch(h=>{console.error("Data Load Error: ",h),this.dispatchExternal("dataLoadError",h),n||this.alertError(),setTimeout(()=>{this.clearAlert()},this.table.options.dataLoaderErrorTimeout)}).finally(()=>{this.loading=!1})}else return this.dispatchExternal("dataLoaded",e),e||(e=[]),this.table.rowManager.setData(e,s,typeof r>"u"?!s:r),Promise.resolve()}mapParams(e,t){var i={};for(let s in e)i[t.hasOwnProperty(s)?t[s]:s]=e[s];return i}objectInvert(e){var t={};for(let i in e)t[e[i]]=i;return t}blockActiveLoad(){this.requestOrder++}alertLoader(){var e=typeof this.table.options.dataLoader=="function"?this.table.options.dataLoader():this.table.options.dataLoader;e&&this.table.alertManager.alert(this.table.options.dataLoaderLoading||this.langText("data|loading"))}alertError(){this.table.alertManager.alert(this.table.options.dataLoaderError||this.langText("data|error"),"error")}clearAlert(){this.table.alertManager.clear()}}class Ds{constructor(e,t,i){this.table=e,this.events={},this.optionsList=t||{},this.subscriptionNotifiers={},this.dispatch=i?this._debugDispatch.bind(this):this._dispatch.bind(this),this.debug=i}subscriptionChange(e,t){this.subscriptionNotifiers[e]||(this.subscriptionNotifiers[e]=[]),this.subscriptionNotifiers[e].push(t),this.subscribed(e)&&this._notifySubscriptionChange(e,!0)}subscribe(e,t){this.events[e]||(this.events[e]=[]),this.events[e].push(t),this._notifySubscriptionChange(e,!0)}unsubscribe(e,t){var i;if(this.events[e])if(t)if(i=this.events[e].findIndex(s=>s===t),i>-1)this.events[e].splice(i,1);else{console.warn("Cannot remove event, no matching event found:",e,t);return}else delete this.events[e];else{console.warn("Cannot remove event, no events set on:",e);return}this._notifySubscriptionChange(e,!1)}subscribed(e){return this.events[e]&&this.events[e].length}_notifySubscriptionChange(e,t){var i=this.subscriptionNotifiers[e];i&&i.forEach(s=>{s(t)})}_dispatch(){var e=Array.from(arguments),t=e.shift(),i;return this.events[t]&&this.events[t].forEach((s,n)=>{let r=s.apply(this.table,e);n||(i=r)}),i}_debugDispatch(){var e=Array.from(arguments),t=e[0];return e[0]="ExternalEvent:"+e[0],(this.debug===!0||this.debug.includes(t))&&console.log(...e),this._dispatch(...arguments)}}class zs{constructor(e){this.events={},this.subscriptionNotifiers={},this.dispatch=e?this._debugDispatch.bind(this):this._dispatch.bind(this),this.chain=e?this._debugChain.bind(this):this._chain.bind(this),this.confirm=e?this._debugConfirm.bind(this):this._confirm.bind(this),this.debug=e}subscriptionChange(e,t){this.subscriptionNotifiers[e]||(this.subscriptionNotifiers[e]=[]),this.subscriptionNotifiers[e].push(t),this.subscribed(e)&&this._notifySubscriptionChange(e,!0)}subscribe(e,t,i=1e4){this.events[e]||(this.events[e]=[]),this.events[e].push({callback:t,priority:i}),this.events[e].sort((s,n)=>s.priority-n.priority),this._notifySubscriptionChange(e,!0)}unsubscribe(e,t){var i;if(this.events[e]){if(t)if(i=this.events[e].findIndex(s=>s.callback===t),i>-1)this.events[e].splice(i,1);else{console.warn("Cannot remove event, no matching event found:",e,t);return}}else{console.warn("Cannot remove event, no events set on:",e);return}this._notifySubscriptionChange(e,!1)}subscribed(e){return this.events[e]&&this.events[e].length}_chain(e,t,i,s){var n=i;return Array.isArray(t)||(t=[t]),this.subscribed(e)?(this.events[e].forEach((r,o)=>{n=r.callback.apply(this,t.concat([n]))}),n):typeof s=="function"?s():s}_confirm(e,t){var i=!1;return Array.isArray(t)||(t=[t]),this.subscribed(e)&&this.events[e].forEach((s,n)=>{s.callback.apply(this,t)&&(i=!0)}),i}_notifySubscriptionChange(e,t){var i=this.subscriptionNotifiers[e];i&&i.forEach(s=>{s(t)})}_dispatch(){var e=Array.from(arguments),t=e.shift();this.events[t]&&this.events[t].forEach(i=>{i.callback.apply(this,e)})}_debugDispatch(){var e=Array.from(arguments),t=e[0];return e[0]="InternalEvent:"+t,(this.debug===!0||this.debug.includes(t))&&console.log(...e),this._dispatch(...arguments)}_debugChain(){var e=Array.from(arguments),t=e[0];return e[0]="InternalEvent:"+t,(this.debug===!0||this.debug.includes(t))&&console.log(...e),this._chain(...arguments)}_debugConfirm(){var e=Array.from(arguments),t=e[0];return e[0]="InternalEvent:"+t,(this.debug===!0||this.debug.includes(t))&&console.log(...e),this._confirm(...arguments)}}class Hs extends M{constructor(e){super(e)}_warnUser(){this.options("debugDeprecation")&&console.warn(...arguments)}check(e,t,i){var s="";return typeof this.options(e)<"u"?(s="Deprecated Setup Option - Use of the %c"+e+"%c option is now deprecated",t?(s=s+", Please use the %c"+t+"%c option instead",this._warnUser(s,"font-weight: bold;","font-weight: normal;","font-weight: bold;","font-weight: normal;"),i&&(this.table.options[t]=this.table.options[e])):this._warnUser(s,"font-weight: bold;","font-weight: normal;"),!1):!0}checkMsg(e,t){return typeof this.options(e)<"u"?(this._warnUser("%cDeprecated Setup Option - Use of the %c"+e+" %c option is now deprecated, "+t,"font-weight: normal;","font-weight: bold;","font-weight: normal;"),!1):!0}msg(e){this._warnUser(e)}}function Fs(l,e){e&&this.table.columnManager.renderer.reinitializeColumnWidths(l),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update()}function Je(l,e){l.forEach(function(t){t.reinitializeWidth()}),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update()}function Ps(l,e){var t=0,i=this.table.rowManager.element.clientWidth,s=0,n=!1;l.forEach((r,o)=>{r.widthFixed||r.reinitializeWidth(),(this.table.options.responsiveLayout?r.modules.responsive.visible:r.visible)&&(n=r),r.visible&&(t+=r.getWidth())}),n?(s=i-t+n.getWidth(),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&(n.setWidth(0),this.table.modules.responsiveLayout.update()),s>0?n.setWidth(s):n.reinitializeWidth()):this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update()}function Os(l,e){var t=this.table.rowManager.element.getBoundingClientRect().width,i=0,s=0,n=0,r=0,o=[],a=[],h=0,d=0,u=0;function c(g){var p;return typeof g=="string"?g.indexOf("%")>-1?p=t/100*parseInt(g):p=parseInt(g):p=g,p}function f(g,p,v,m){var C=[],T=0,y=0,k=0,P=n,X=0,L=0,he=[];function Ie(E){return v*(E.column.definition.widthGrow||1)}function Ne(E){return c(E.width)-v*(E.column.definition.widthShrink||0)}return g.forEach(function(E,Ws){var We=m?Ne(E):Ie(E);E.column.minWidth>=We?C.push(E):E.column.maxWidth&&E.column.maxWidththis.table.rowManager.element.clientHeight&&(t-=this.table.rowManager.element.offsetWidth-this.table.rowManager.element.clientWidth),l.forEach(function(g){var p,v,m;g.visible&&(p=g.definition.width,v=parseInt(g.minWidth),p?(m=c(p),i+=m>v?m:v,g.definition.widthShrink&&(a.push({column:g,width:m>v?m:v}),h+=g.definition.widthShrink)):(o.push({column:g,width:0}),n+=g.definition.widthGrow||1))}),s=t-i,r=Math.floor(s/n),u=f(o,s,r,!1),o.length&&u>0&&(o[o.length-1].width+=u),o.forEach(function(g){s-=g.width}),d=Math.abs(u)+s,d>0&&h&&(u=f(a,d,Math.floor(d/h),!0)),u&&a.length&&(a[a.length-1].width-=u),o.forEach(function(g){g.column.setWidth(g.width)}),a.forEach(function(g){g.column.setWidth(g.width)})}var As={fitData:Fs,fitDataFill:Je,fitDataTable:Je,fitDataStretch:Ps,fitColumns:Os};const $=class $ extends w{constructor(e){super(e,"layout"),this.mode=null,this.registerTableOption("layout","fitData"),this.registerTableOption("layoutColumnsOnNewData",!1),this.registerColumnOption("widthGrow"),this.registerColumnOption("widthShrink")}initialize(){var e=this.table.options.layout;$.modes[e]?this.mode=e:(console.warn("Layout Error - invalid mode set, defaulting to 'fitData' : "+e),this.mode="fitData"),this.table.element.setAttribute("tabulator-layout",this.mode),this.subscribe("column-init",this.initializeColumn.bind(this))}initializeColumn(e){e.definition.widthGrow&&(e.definition.widthGrow=Number(e.definition.widthGrow)),e.definition.widthShrink&&(e.definition.widthShrink=Number(e.definition.widthShrink))}getMode(){return this.mode}layout(e){this.dispatch("layout-refreshing"),$.modes[this.mode].call(this,this.table.columnManager.columnsByIndex,e),this.dispatch("layout-refreshed")}};b($,"moduleName","layout"),b($,"modes",As);let Pe=$;var _s={default:{groups:{item:"item",items:"items"},columns:{},data:{loading:"Loading",error:"Error"},pagination:{page_size:"Page Size",page_title:"Show Page",first:"First",first_title:"First Page",last:"Last",last_title:"Last Page",prev:"Prev",prev_title:"Prev Page",next:"Next",next_title:"Next Page",all:"All",counter:{showing:"Showing",of:"of",rows:"rows",pages:"pages"}},headerFilters:{default:"filter column...",columns:{}}}};const se=class se extends w{constructor(e){super(e),this.locale="default",this.lang=!1,this.bindings={},this.langList={},this.registerTableOption("locale",!1),this.registerTableOption("langs",{})}initialize(){this.langList=x.deepClone(se.langs),this.table.options.columnDefaults.headerFilterPlaceholder!==!1&&this.setHeaderFilterPlaceholder(this.table.options.columnDefaults.headerFilterPlaceholder);for(let e in this.table.options.langs)this.installLang(e,this.table.options.langs[e]);this.setLocale(this.table.options.locale),this.registerTableFunction("setLocale",this.setLocale.bind(this)),this.registerTableFunction("getLocale",this.getLocale.bind(this)),this.registerTableFunction("getLang",this.getLang.bind(this))}setHeaderFilterPlaceholder(e){this.langList.default.headerFilters.default=e}installLang(e,t){this.langList[e]?this._setLangProp(this.langList[e],t):this.langList[e]=t}_setLangProp(e,t){for(let i in t)e[i]&&typeof e[i]=="object"?this._setLangProp(e[i],t[i]):e[i]=t[i]}setLocale(e){e=e||"default";function t(i,s){for(var n in i)typeof i[n]=="object"?(s[n]||(s[n]={}),t(i[n],s[n])):s[n]=i[n]}if(e===!0&&navigator.language&&(e=navigator.language.toLowerCase()),e&&!this.langList[e]){let i=e.split("-")[0];this.langList[i]?(console.warn("Localization Error - Exact matching locale not found, using closest match: ",e,i),e=i):(console.warn("Localization Error - Matching locale not found, using default: ",e),e="default")}this.locale=e,this.lang=x.deepClone(this.langList.default||{}),e!="default"&&t(this.langList[e],this.lang),this.dispatchExternal("localized",this.locale,this.lang),this._executeBindings()}getLocale(e){return this.locale}getLang(e){return e?this.langList[e]:this.lang}getText(e,t){var i=t?e+"|"+t:e,s=i.split("|"),n=this._getLangElement(s,this.locale);return n||""}_getLangElement(e,t){var i=this.lang;return e.forEach(function(s){var n;i&&(n=i[s],typeof n<"u"?i=n:i=!1)}),i}bind(e,t){this.bindings[e]||(this.bindings[e]=[]),this.bindings[e].push(t),t(this.getText(e),this.lang)}_executeBindings(){for(let e in this.bindings)this.bindings[e].forEach(t=>{t(this.getText(e),this.lang)})}};b(se,"moduleName","localize"),b(se,"langs",_s);let Oe=se;class bt extends w{constructor(e){super(e)}initialize(){this.registerTableFunction("tableComms",this.receive.bind(this))}getConnections(e){var t=[],i;return i=this.table.constructor.registry.lookupTable(e),i.forEach(s=>{this.table!==s&&t.push(s)}),t}send(e,t,i,s){var n=this.getConnections(e);n.forEach(r=>{r.tableComms(this.table.element,t,i,s)}),!n.length&&e&&console.warn("Table Connection Error - No tables matching selector found",e)}receive(e,t,i,s){if(this.table.modExists(t))return this.table.modules[t].commsReceived(e,i,s);console.warn("Inter-table Comms Error - no such module:",t)}}b(bt,"moduleName","comms");var Bs=Object.freeze({__proto__:null,CommsModule:bt,LayoutModule:Pe,LocalizeModule:Oe});const z=class z{static findTable(e){var t=z.registry.lookupTable(e,!0);return Array.isArray(t)&&!t.length?!1:t}};b(z,"registry",{tables:[],register(e){z.registry.tables.push(e)},deregister(e){var t=z.registry.tables.indexOf(e);t>-1&&z.registry.tables.splice(t,1)},lookupTable(e,t){var i=[],s,n;if(typeof e=="string"){if(s=document.querySelectorAll(e),s.length)for(var r=0;r{s.prototype.moduleCore=!0}),R._registerModule(i)}static _registerModule(e){Array.isArray(e)||(e=[e]),e.forEach(t=>{R._registerModuleBinding(t),R._registerModuleExtensions(t)})}static _registerModuleBinding(e){e.moduleName?R.moduleBindings[e.moduleName]=e:console.error("Unable to bind module, no moduleName defined",e.moduleName)}static _registerModuleExtensions(e){var t=e.moduleExtensions;if(e.moduleExtensions)for(let i in t){let s=t[i];if(R.moduleBindings[i])for(let n in s)R._extendModule(i,n,s[n]);else{R.moduleExtensions[i]||(R.moduleExtensions[i]={});for(let n in s)R.moduleExtensions[i][n]||(R.moduleExtensions[i][n]={}),Object.assign(R.moduleExtensions[i][n],s[n])}}R._extendModuleFromQueue(e)}static _extendModuleFromQueue(e){var t=R.moduleExtensions[e.moduleName];if(t)for(let i in t)R._extendModule(e.moduleName,i,t[i])}_bindModules(){var e=[],t=[],i=[];this.modules={};for(var s in R.moduleBindings){let n=R.moduleBindings[s],r=new n(this);this.modules[s]=r,n.prototype.moduleCore?this.modulesCore.push(r):n.moduleInitOrder?n.moduleInitOrder<0?e.push(r):t.push(r):i.push(r)}e.sort((n,r)=>n.moduleInitOrder>r.moduleInitOrder?1:-1),t.sort((n,r)=>n.moduleInitOrder>r.moduleInitOrder?1:-1),this.modulesRegular=e.concat(i.concat(t))}};b(R,"moduleBindings",{}),b(R,"moduleExtensions",{}),b(R,"modulesRegistered",!1),b(R,"defaultModules",!1);let _e=R;class Vs extends M{constructor(e){super(e),this.element=this._createAlertElement(),this.msgElement=this._createMsgElement(),this.type=null,this.element.appendChild(this.msgElement)}_createAlertElement(){var e=document.createElement("div");return e.classList.add("tabulator-alert"),e}_createMsgElement(){var e=document.createElement("div");return e.classList.add("tabulator-alert-msg"),e.setAttribute("role","alert"),e}_typeClass(){return"tabulator-alert-state-"+this.type}alert(e,t="msg"){if(e){for(this.clear(),this.dispatch("alert-show",t),this.type=t;this.msgElement.firstChild;)this.msgElement.removeChild(this.msgElement.firstChild);this.msgElement.classList.add(this._typeClass()),typeof e=="function"&&(e=e()),e instanceof HTMLElement?this.msgElement.appendChild(e):this.msgElement.innerHTML=e,this.table.element.appendChild(this.element)}}clear(){this.dispatch("alert-hide",this.type),this.element.parentNode&&this.element.parentNode.removeChild(this.element),this.msgElement.classList.remove(this._typeClass())}}const A=class A extends _e{static extendModule(){A.initializeModuleBinder(),A._extendModule(...arguments)}static registerModule(){A.initializeModuleBinder(),A._registerModule(...arguments)}constructor(e,t,i){super(),A.initializeModuleBinder(i),this.options={},this.columnManager=null,this.rowManager=null,this.footerManager=null,this.alertManager=null,this.vdomHoz=null,this.externalEvents=null,this.eventBus=null,this.interactionMonitor=!1,this.browser="",this.browserSlow=!1,this.browserMobile=!1,this.rtl=!1,this.originalElement=null,this.componentFunctionBinder=new Ls(this),this.dataLoader=!1,this.modules={},this.modulesCore=[],this.modulesRegular=[],this.deprecationAdvisor=new Hs(this),this.optionsList=new gt(this,"table constructor"),this.initialized=!1,this.destroyed=!1,this.initializeElement(e)&&(this.initializeCoreSystems(t),setTimeout(()=>{this._create()})),this.constructor.registry.register(this)}initializeElement(e){return typeof HTMLElement<"u"&&e instanceof HTMLElement?(this.element=e,!0):typeof e=="string"?(this.element=document.querySelector(e),this.element?!0:(console.error("Tabulator Creation Error - no element found matching selector: ",e),!1)):(console.error("Tabulator Creation Error - Invalid element provided:",e),!1)}initializeCoreSystems(e){this.columnManager=new ys(this),this.rowManager=new Ts(this),this.footerManager=new ks(this),this.dataLoader=new Ss(this),this.alertManager=new Vs(this),this._bindModules(),this.options=this.optionsList.generate(A.defaultOptions,e),this._clearObjectPointers(),this._mapDeprecatedFunctionality(),this.externalEvents=new Ds(this,this.options,this.options.debugEventsExternal),this.eventBus=new zs(this.options.debugEventsInternal),this.interactionMonitor=new Ms(this),this.dataLoader.initialize(),this.footerManager.initialize()}_mapDeprecatedFunctionality(){}_clearSelection(){this.element.classList.add("tabulator-block-select"),window.getSelection?window.getSelection().empty?window.getSelection().empty():window.getSelection().removeAllRanges&&window.getSelection().removeAllRanges():document.selection&&document.selection.empty(),this.element.classList.remove("tabulator-block-select")}_create(){this.externalEvents.dispatch("tableBuilding"),this.eventBus.dispatch("table-building"),this._rtlCheck(),this._buildElement(),this._initializeTable(),this.initialized=!0,this._loadInitialData().finally(()=>{this.eventBus.dispatch("table-initialized"),this.externalEvents.dispatch("tableBuilt")})}_rtlCheck(){var e=window.getComputedStyle(this.element);switch(this.options.textDirection){case"auto":if(e.direction!=="rtl")break;case"rtl":this.element.classList.add("tabulator-rtl"),this.rtl=!0;break;case"ltr":this.element.classList.add("tabulator-ltr");default:this.rtl=!1}}_clearObjectPointers(){this.options.columns=this.options.columns.slice(0),Array.isArray(this.options.data)&&!this.options.reactiveData&&(this.options.data=this.options.data.slice(0))}_buildElement(){var e=this.element,t=this.options,i;if(e.tagName==="TABLE"){this.originalElement=this.element,i=document.createElement("div");var s=e.attributes;for(var n in s)typeof s[n]=="object"&&i.setAttribute(s[n].name,s[n].value);e.parentNode.replaceChild(i,e),this.element=e=i}for(e.classList.add("tabulator"),e.setAttribute("role","grid");e.firstChild;)e.removeChild(e.firstChild);t.height&&(t.height=isNaN(t.height)?t.height:t.height+"px",e.style.height=t.height),t.minHeight!==!1&&(t.minHeight=isNaN(t.minHeight)?t.minHeight:t.minHeight+"px",e.style.minHeight=t.minHeight),t.maxHeight!==!1&&(t.maxHeight=isNaN(t.maxHeight)?t.maxHeight:t.maxHeight+"px",e.style.maxHeight=t.maxHeight)}_initializeTable(){var e=this.element,t=this.options;this.interactionMonitor.initialize(),this.columnManager.initialize(),this.rowManager.initialize(),this._detectBrowser(),this.modulesCore.forEach(i=>{i.initialize()}),e.appendChild(this.columnManager.getElement()),e.appendChild(this.rowManager.getElement()),t.footerElement&&this.footerManager.activate(),t.autoColumns&&t.data&&this.columnManager.generateColumnsFromRowData(this.options.data),this.modulesRegular.forEach(i=>{i.initialize()}),this.columnManager.setColumns(t.columns),this.eventBus.dispatch("table-built")}_loadInitialData(){return this.dataLoader.load(this.options.data).finally(()=>{this.columnManager.verticalAlignHeaders()})}destroy(){var e=this.element;for(this.destroyed=!0,this.constructor.registry.deregister(this),this.eventBus.dispatch("table-destroy"),this.rowManager.destroy();e.firstChild;)e.removeChild(e.firstChild);e.classList.remove("tabulator"),this.externalEvents.dispatch("tableDestroyed")}_detectBrowser(){var e=navigator.userAgent||navigator.vendor||window.opera;e.indexOf("Trident")>-1?(this.browser="ie",this.browserSlow=!0):e.indexOf("Edge")>-1?(this.browser="edge",this.browserSlow=!0):e.indexOf("Firefox")>-1?(this.browser="firefox",this.browserSlow=!1):e.indexOf("Mac OS")>-1?(this.browser="safari",this.browserSlow=!1):(this.browser="other",this.browserSlow=!1),this.browserMobile=/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(e)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw-(n|u)|c55\/|capi|ccwa|cdm-|cell|chtm|cldc|cmd-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc-s|devi|dica|dmob|do(c|p)o|ds(12|-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(-|_)|g1 u|g560|gene|gf-5|g-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd-(m|p|t)|hei-|hi(pt|ta)|hp( i|ip)|hs-c|ht(c(-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i-(20|go|ma)|i230|iac( |-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|-[a-w])|libw|lynx|m1-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|-([1-8]|c))|phil|pire|pl(ay|uc)|pn-2|po(ck|rt|se)|prox|psio|pt-g|qa-a|qc(07|12|21|32|60|-[2-7]|i-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h-|oo|p-)|sdk\/|se(c(-|0|1)|47|mc|nd|ri)|sgh-|shar|sie(-|m)|sk-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h-|v-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl-|tdg-|tel(i|m)|tim-|t-mo|to(pl|sh)|ts(70|m-|m3|m5)|tx-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas-|your|zeto|zte-/i.test(e.slice(0,4))}initGuard(e,t){var i,s;return this.options.debugInitialization&&!this.initialized&&(e||(i=new Error().stack.split(` +`),s=i[0]=="Error"?i[2]:i[1],s[0]==" "?e=s.trim().split(" ")[1].split(".")[1]:e=s.trim().split("@")[0]),console.warn("Table Not Initialized - Calling the "+e+" function before the table is initialized may result in inconsistent behavior, Please wait for the `tableBuilt` event before calling this function."+(t?" "+t:""))),this.initialized}blockRedraw(){this.initGuard(),this.eventBus.dispatch("redraw-blocking"),this.rowManager.blockRedraw(),this.columnManager.blockRedraw(),this.eventBus.dispatch("redraw-blocked")}restoreRedraw(){this.initGuard(),this.eventBus.dispatch("redraw-restoring"),this.rowManager.restoreRedraw(),this.columnManager.restoreRedraw(),this.eventBus.dispatch("redraw-restored")}setData(e,t,i){return this.initGuard(!1,"To set initial data please use the 'data' property in the table constructor."),this.dataLoader.load(e,t,i,!1)}clearData(){this.initGuard(),this.dataLoader.blockActiveLoad(),this.rowManager.clearData()}getData(e){return this.rowManager.getData(e)}getDataCount(e){return this.rowManager.getDataCount(e)}replaceData(e,t,i){return this.initGuard(),this.dataLoader.load(e,t,i,!0,!0)}updateData(e){var t=0;return this.initGuard(),new Promise((i,s)=>{this.dataLoader.blockActiveLoad(),typeof e=="string"&&(e=JSON.parse(e)),e&&e.length>0?e.forEach(n=>{var r=this.rowManager.findRow(n[this.options.index]);r?(t++,r.updateData(n).then(()=>{t--,t||i()}).catch(o=>{s("Update Error - Unable to update row",n,o)})):s("Update Error - Unable to find row",n)}):(console.warn("Update Error - No data provided"),s("Update Error - No data provided"))})}addData(e,t,i){return this.initGuard(),new Promise((s,n)=>{this.dataLoader.blockActiveLoad(),typeof e=="string"&&(e=JSON.parse(e)),e?this.rowManager.addRows(e,t,i).then(r=>{var o=[];r.forEach(function(a){o.push(a.getComponent())}),s(o)}):(console.warn("Update Error - No data provided"),n("Update Error - No data provided"))})}updateOrAddData(e){var t=[],i=0;return this.initGuard(),new Promise((s,n)=>{this.dataLoader.blockActiveLoad(),typeof e=="string"&&(e=JSON.parse(e)),e&&e.length>0?e.forEach(r=>{var o=this.rowManager.findRow(r[this.options.index]);i++,o?o.updateData(r).then(()=>{i--,t.push(o.getComponent()),i||s(t)}):this.rowManager.addRows(r).then(a=>{i--,t.push(a[0].getComponent()),i||s(t)})}):(console.warn("Update Error - No data provided"),n("Update Error - No data provided"))})}getRow(e){var t=this.rowManager.findRow(e);return t?t.getComponent():(console.warn("Find Error - No matching row found:",e),!1)}getRowFromPosition(e){var t=this.rowManager.getRowFromPosition(e);return t?t.getComponent():(console.warn("Find Error - No matching row found:",e),!1)}deleteRow(e){var t=[];this.initGuard(),Array.isArray(e)||(e=[e]);for(let i of e){let s=this.rowManager.findRow(i,!0);if(s)t.push(s);else return console.error("Delete Error - No matching row found:",i),Promise.reject("Delete Error - No matching row found")}return t.sort((i,s)=>this.rowManager.rows.indexOf(i)>this.rowManager.rows.indexOf(s)?1:-1),t.forEach(i=>{i.delete()}),this.rowManager.reRenderInPosition(),Promise.resolve()}addRow(e,t,i){return this.initGuard(),typeof e=="string"&&(e=JSON.parse(e)),this.rowManager.addRows(e,t,i,!0).then(s=>s[0].getComponent())}updateOrAddRow(e,t){var i=this.rowManager.findRow(e);return this.initGuard(),typeof t=="string"&&(t=JSON.parse(t)),i?i.updateData(t).then(()=>i.getComponent()):this.rowManager.addRows(t).then(s=>s[0].getComponent())}updateRow(e,t){var i=this.rowManager.findRow(e);return this.initGuard(),typeof t=="string"&&(t=JSON.parse(t)),i?i.updateData(t).then(()=>Promise.resolve(i.getComponent())):(console.warn("Update Error - No matching row found:",e),Promise.reject("Update Error - No matching row found"))}scrollToRow(e,t,i){var s=this.rowManager.findRow(e);return s?this.rowManager.scrollToRow(s,t,i):(console.warn("Scroll Error - No matching row found:",e),Promise.reject("Scroll Error - No matching row found"))}moveRow(e,t,i){var s=this.rowManager.findRow(e);this.initGuard(),s?s.moveToRow(t,i):console.warn("Move Error - No matching row found:",e)}getRows(e){return this.rowManager.getComponents(e)}getRowPosition(e){var t=this.rowManager.findRow(e);return t?t.getPosition():(console.warn("Position Error - No matching row found:",e),!1)}setColumns(e){this.initGuard(!1,"To set initial columns please use the 'columns' property in the table constructor"),this.columnManager.setColumns(e)}getColumns(e){return this.columnManager.getComponents(e)}getColumn(e){var t=this.columnManager.findColumn(e);return t?t.getComponent():(console.warn("Find Error - No matching column found:",e),!1)}getColumnDefinitions(){return this.columnManager.getDefinitionTree()}showColumn(e){var t=this.columnManager.findColumn(e);if(this.initGuard(),t)t.show();else return console.warn("Column Show Error - No matching column found:",e),!1}hideColumn(e){var t=this.columnManager.findColumn(e);if(this.initGuard(),t)t.hide();else return console.warn("Column Hide Error - No matching column found:",e),!1}toggleColumn(e){var t=this.columnManager.findColumn(e);if(this.initGuard(),t)t.visible?t.hide():t.show();else return console.warn("Column Visibility Toggle Error - No matching column found:",e),!1}addColumn(e,t,i){var s=this.columnManager.findColumn(i);return this.initGuard(),this.columnManager.addColumn(e,t,s).then(n=>n.getComponent())}deleteColumn(e){var t=this.columnManager.findColumn(e);return this.initGuard(),t?t.delete():(console.warn("Column Delete Error - No matching column found:",e),Promise.reject())}updateColumnDefinition(e,t){var i=this.columnManager.findColumn(e);return this.initGuard(),i?i.updateDefinition(t):(console.warn("Column Update Error - No matching column found:",e),Promise.reject())}moveColumn(e,t,i){var s=this.columnManager.findColumn(e),n=this.columnManager.findColumn(t);this.initGuard(),s?n?this.columnManager.moveColumn(s,n,i):console.warn("Move Error - No matching column found:",n):console.warn("Move Error - No matching column found:",e)}scrollToColumn(e,t,i){return new Promise((s,n)=>{var r=this.columnManager.findColumn(e);return r?this.columnManager.scrollToColumn(r,t,i):(console.warn("Scroll Error - No matching column found:",e),Promise.reject("Scroll Error - No matching column found"))})}redraw(e){this.initGuard(),this.columnManager.redraw(e),this.rowManager.redraw(e)}setHeight(e){this.options.height=isNaN(e)?e:e+"px",this.element.style.height=this.options.height,this.rowManager.initializeRenderer(),this.rowManager.redraw(!0)}on(e,t){this.externalEvents.subscribe(e,t)}off(e,t){this.externalEvents.unsubscribe(e,t)}dispatchEvent(){var e=Array.from(arguments);e.shift(),this.externalEvents.dispatch(...arguments)}alert(e,t){this.initGuard(),this.alertManager.alert(e,t)}clearAlert(){this.initGuard(),this.alertManager.clear()}modExists(e,t){return this.modules[e]?!0:(t&&console.error("Tabulator Module Not Installed: "+e),!1)}module(e){var t=this.modules[e];return t||console.error("Tabulator module not installed: "+e),t}};b(A,"defaultOptions",ws);let Be=A;var Q=Be;class Is extends Q{static extendModule(){Q.initializeModuleBinder(ue),Q._extendModule(...arguments)}static registerModule(){Q.initializeModuleBinder(ue),Q._registerModule(...arguments)}constructor(e,t,i){super(e,t,ue)}}var Ns=Is;const Xs=Ct({__name:"Tabulator",props:{columns:{},tableData:{}},setup(l){const e=l,t=Ge(null),i=Ge(null);je(()=>e.columns,()=>{i.value?i.value.setColumns(e.columns):s()}),je(()=>e.tableData,()=>{n()}),Et(async()=>{await yt(),s()}),Rt(()=>{i.value&&(i.value.destroy(),i.value=null)});const s=()=>{!t.value||i.value||(i.value=new Ns(t.value,{data:e.tableData??[],reactiveData:!0,columns:e.columns,height:"auto",pagination:!0,paginationSize:6,paginationSizeSelector:[3,6,8,10],movableColumns:!0,paginationCounter:"rows"}))},n=()=>{if(!i.value){s();return}i.value.replaceData(e.tableData??[])};return(r,o)=>(Tt(),xt("div",{ref_key:"table",ref:t},null,512))}});export{Xs as _}; diff --git a/src/main/resources/static/assets/Tabulator.vue_vue_type_style_index_0_lang-DYWrT5tk.js b/src/main/resources/static/assets/Tabulator.vue_vue_type_style_index_0_lang-DYWrT5tk.js new file mode 100644 index 00000000..b948eb80 --- /dev/null +++ b/src/main/resources/static/assets/Tabulator.vue_vue_type_style_index_0_lang-DYWrT5tk.js @@ -0,0 +1,22 @@ +var vt=Object.defineProperty;var wt=(l,e,t)=>e in l?vt(l,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):l[e]=t;var b=(l,e,t)=>wt(l,typeof e!="symbol"?e+"":e,t);import{d as Ct,r as Ge,h as je,i as Et,B as yt,x as Rt,c as xt,o as Tt}from"./index-BKFNv1Gc.js";class M{constructor(e){this.table=e}reloadData(e,t,i){return this.table.dataLoader.load(e,void 0,void 0,void 0,t,i)}langText(){return this.table.modules.localize.getText(...arguments)}langBind(){return this.table.modules.localize.bind(...arguments)}langLocale(){return this.table.modules.localize.getLocale(...arguments)}commsConnections(){return this.table.modules.comms.getConnections(...arguments)}commsSend(){return this.table.modules.comms.send(...arguments)}layoutMode(){return this.table.modules.layout.getMode()}layoutRefresh(e){return this.table.modules.layout.layout(e)}subscribe(){return this.table.eventBus.subscribe(...arguments)}unsubscribe(){return this.table.eventBus.unsubscribe(...arguments)}subscribed(e){return this.table.eventBus.subscribed(e)}subscriptionChange(){return this.table.eventBus.subscriptionChange(...arguments)}dispatch(){return this.table.eventBus.dispatch(...arguments)}chain(){return this.table.eventBus.chain(...arguments)}confirm(){return this.table.eventBus.confirm(...arguments)}dispatchExternal(){return this.table.externalEvents.dispatch(...arguments)}subscribedExternal(e){return this.table.externalEvents.subscribed(e)}subscriptionChangeExternal(){return this.table.externalEvents.subscriptionChange(...arguments)}options(e){return this.table.options[e]}setOption(e,t){return typeof t<"u"&&(this.table.options[e]=t),this.table.options[e]}deprecationCheck(e,t,i){return this.table.deprecationAdvisor.check(e,t,i)}deprecationCheckMsg(e,t){return this.table.deprecationAdvisor.checkMsg(e,t)}deprecationMsg(e){return this.table.deprecationAdvisor.msg(e)}module(e){return this.table.module(e)}}class x{static elVisible(e){return!(e.offsetWidth<=0&&e.offsetHeight<=0)}static elOffset(e){var t=e.getBoundingClientRect();return{top:t.top+window.pageYOffset-document.documentElement.clientTop,left:t.left+window.pageXOffset-document.documentElement.clientLeft}}static retrieveNestedData(e,t,i){var s=e?t.split(e):[t],n=s.length,r;for(let o=0;od.subject===o),a>-1?t[r]=i[a].copy:(h=Object.assign(Array.isArray(o)?[]:{},o),i.unshift({subject:o,copy:h}),t[r]=this.deepClone(o,h,i)))}return t}}let kt=class Ke extends M{constructor(e,t,i){super(e),this.element=t,this.container=this._lookupContainer(),this.parent=i,this.reversedX=!1,this.childPopup=null,this.blurable=!1,this.blurCallback=null,this.blurEventsBound=!1,this.renderedCallback=null,this.visible=!1,this.hideable=!0,this.element.classList.add("tabulator-popup-container"),this.blurEvent=this.hide.bind(this,!1),this.escEvent=this._escapeCheck.bind(this),this.destroyBinding=this.tableDestroyed.bind(this),this.destroyed=!1}tableDestroyed(){this.destroyed=!0,this.hide(!0)}_lookupContainer(){var e=this.table.options.popupContainer;return typeof e=="string"?(e=document.querySelector(e),e||console.warn("Menu Error - no container element found matching selector:",this.table.options.popupContainer,"(defaulting to document body)")):e===!0&&(e=this.table.element),e&&!this._checkContainerIsParent(e)&&(e=!1,console.warn("Menu Error - container element does not contain this table:",this.table.options.popupContainer,"(defaulting to document body)")),e||(e=document.body),e}_checkContainerIsParent(e,t=this.table.element){return e===t?!0:t.parentNode?this._checkContainerIsParent(e,t.parentNode):!1}renderCallback(e){this.renderedCallback=e}containerEventCoords(e){var t=!(e instanceof MouseEvent),i=t?e.touches[0].pageX:e.pageX,s=t?e.touches[0].pageY:e.pageY;if(this.container!==document.body){let n=x.elOffset(this.container);i-=n.left,s-=n.top}return{x:i,y:s}}elementPositionCoords(e,t="right"){var i=x.elOffset(e),s,n,r;switch(this.container!==document.body&&(s=x.elOffset(this.container),i.left-=s.left,i.top-=s.top),t){case"right":n=i.left+e.offsetWidth,r=i.top-1;break;case"bottom":n=i.left,r=i.top+e.offsetHeight;break;case"left":n=i.left,r=i.top-1;break;case"top":n=i.left,r=i.top;break;case"center":n=i.left+e.offsetWidth/2,r=i.top+e.offsetHeight/2;break}return{x:n,y:r,offset:i}}show(e,t){var i,s,n,r,o;return this.destroyed||this.table.destroyed?this:(e instanceof HTMLElement?(n=e,o=this.elementPositionCoords(e,t),r=o.offset,i=o.x,s=o.y):typeof e=="number"?(r={top:0,left:0},i=e,s=t):(o=this.containerEventCoords(e),i=o.x,s=o.y,this.reversedX=!1),this.element.style.top=s+"px",this.element.style.left=i+"px",this.container.appendChild(this.element),typeof this.renderedCallback=="function"&&this.renderedCallback(),this._fitToScreen(i,s,n,r,t),this.visible=!0,this.subscribe("table-destroy",this.destroyBinding),this.element.addEventListener("mousedown",a=>{a.stopPropagation()}),this)}_fitToScreen(e,t,i,s,n){var r=this.container===document.body?document.documentElement.scrollTop:this.container.scrollTop;(e+this.element.offsetWidth>=this.container.offsetWidth||this.reversedX)&&(this.element.style.left="",i?this.element.style.right=this.container.offsetWidth-s.left+"px":this.element.style.right=this.container.offsetWidth-e+"px",this.reversedX=!0);let o=Math.max(this.container.offsetHeight,r?this.container.scrollHeight:0);if(t+this.element.offsetHeight>o)if(i)switch(n){case"bottom":this.element.style.top=parseInt(this.element.style.top)-this.element.offsetHeight-i.offsetHeight-1+"px";break;default:this.element.style.top=parseInt(this.element.style.top)-this.element.offsetHeight+i.offsetHeight+1+"px"}else this.element.style.height=o+"px"}isVisible(){return this.visible}hideOnBlur(e){return this.blurable=!0,this.visible&&(setTimeout(()=>{this.visible&&(this.table.rowManager.element.addEventListener("scroll",this.blurEvent),this.subscribe("cell-editing",this.blurEvent),document.body.addEventListener("click",this.blurEvent),document.body.addEventListener("contextmenu",this.blurEvent),document.body.addEventListener("mousedown",this.blurEvent),window.addEventListener("resize",this.blurEvent),document.body.addEventListener("keydown",this.escEvent),this.blurEventsBound=!0)},100),this.blurCallback=e),this}_escapeCheck(e){e.keyCode==27&&this.hide()}blockHide(){this.hideable=!1}restoreHide(){this.hideable=!0}hide(e=!1){return this.visible&&this.hideable&&(this.blurable&&this.blurEventsBound&&(document.body.removeEventListener("keydown",this.escEvent),document.body.removeEventListener("click",this.blurEvent),document.body.removeEventListener("contextmenu",this.blurEvent),document.body.removeEventListener("mousedown",this.blurEvent),window.removeEventListener("resize",this.blurEvent),this.table.rowManager.element.removeEventListener("scroll",this.blurEvent),this.unsubscribe("cell-editing",this.blurEvent),this.blurEventsBound=!1),this.childPopup&&this.childPopup.hide(),this.parent&&(this.parent.childPopup=null),this.element.parentNode&&this.element.parentNode.removeChild(this.element),this.visible=!1,this.blurCallback&&!e&&this.blurCallback(),this.unsubscribe("table-destroy",this.destroyBinding)),this}child(e){return this.childPopup&&this.childPopup.hide(),this.childPopup=new Ke(this.table,e,this),this.childPopup}};class w extends M{constructor(e,t){super(e),this._handler=null}initialize(){}registerTableOption(e,t){this.table.optionsList.register(e,t)}registerColumnOption(e,t){this.table.columnManager.optionsList.register(e,t)}registerTableFunction(e,t){typeof this.table[e]>"u"?this.table[e]=(...i)=>(this.table.initGuard(e),t(...i)):console.warn("Unable to bind table function, name already in use",e)}registerComponentFunction(e,t,i){return this.table.componentFunctionBinder.bind(e,t,i)}registerDataHandler(e,t){this.table.rowManager.registerDataPipelineHandler(e,t),this._handler=e}registerDisplayHandler(e,t){this.table.rowManager.registerDisplayPipelineHandler(e,t),this._handler=e}displayRows(e){var t=this.table.rowManager.displayRows.length-1,i;if(this._handler&&(i=this.table.rowManager.displayPipeline.findIndex(s=>s.handler===this._handler),i>-1&&(t=i)),e&&(t=t+e),this._handler)return t>-1?this.table.rowManager.getDisplayRows(t):this.activeRows()}activeRows(){return this.table.rowManager.activeRows}refreshData(e,t){t||(t=this._handler),t&&this.table.rowManager.refreshActiveData(t,!1,e)}footerAppend(e){return this.table.footerManager.append(e)}footerPrepend(e){return this.table.footerManager.prepend(e)}footerRemove(e){return this.table.footerManager.remove(e)}popup(e,t){return new kt(this.table,e,t)}alert(e,t){return this.table.alertManager.alert(e,t)}clearAlert(){return this.table.alertManager.clear()}}var Mt={rownum:function(l,e,t,i,s,n){return n.getPosition()}};const K=class K extends w{constructor(e){super(e),this.allowedTypes=["","data","download","clipboard","print","htmlOutput"],this.registerColumnOption("accessor"),this.registerColumnOption("accessorParams"),this.registerColumnOption("accessorData"),this.registerColumnOption("accessorDataParams"),this.registerColumnOption("accessorDownload"),this.registerColumnOption("accessorDownloadParams"),this.registerColumnOption("accessorClipboard"),this.registerColumnOption("accessorClipboardParams"),this.registerColumnOption("accessorPrint"),this.registerColumnOption("accessorPrintParams"),this.registerColumnOption("accessorHtmlOutput"),this.registerColumnOption("accessorHtmlOutputParams")}initialize(){this.subscribe("column-layout",this.initializeColumn.bind(this)),this.subscribe("row-data-retrieve",this.transformRow.bind(this))}initializeColumn(e){var t=!1,i={};this.allowedTypes.forEach(s=>{var n="accessor"+(s.charAt(0).toUpperCase()+s.slice(1)),r;e.definition[n]&&(r=this.lookupAccessor(e.definition[n]),r&&(t=!0,i[n]={accessor:r,params:e.definition[n+"Params"]||{}}))}),t&&(e.modules.accessor=i)}lookupAccessor(e){var t=!1;switch(typeof e){case"string":K.accessors[e]?t=K.accessors[e]:console.warn("Accessor Error - No such accessor found, ignoring: ",e);break;case"function":t=e;break}return t}transformRow(e,t){var i="accessor"+(t.charAt(0).toUpperCase()+t.slice(1)),s=e.getComponent(),n=x.deepClone(e.data||{});return this.table.columnManager.traverse(function(r){var o,a,h,d;r.modules.accessor&&(a=r.modules.accessor[i]||r.modules.accessor.accessor||!1,a&&(o=r.getFieldValue(n),o!="undefined"&&(d=r.getComponent(),h=typeof a.params=="function"?a.params(o,n,t,d,s):a.params,r.setFieldValue(n,a.accessor(o,n,t,h,d,s)))))}),n}};b(K,"moduleName","accessor"),b(K,"accessors",Mt);let ce=K;var Lt={method:"GET"};function fe(l,e){var t=[];if(e=e||"",Array.isArray(l))l.forEach((s,n)=>{t=t.concat(fe(s,e?e+"["+n+"]":n))});else if(typeof l=="object")for(var i in l)t=t.concat(fe(l[i],e?e+"["+i+"]":i));else t.push({key:e,value:l});return t}function St(l){var e=fe(l),t=[];return e.forEach(function(i){t.push(encodeURIComponent(i.key)+"="+encodeURIComponent(i.value))}),t.join("&")}function qe(l,e,t){return l&&t&&Object.keys(t).length&&(!e.method||e.method.toLowerCase()=="get")&&(e.method="get",l+=(l.includes("?")?"&":"?")+St(t)),l}function Dt(l,e,t){var i;return new Promise((s,n)=>{if(l=this.urlGenerator.call(this.table,l,e,t),e.method.toUpperCase()!="GET")if(i=typeof this.table.options.ajaxContentType=="object"?this.table.options.ajaxContentType:this.contentTypeFormatters[this.table.options.ajaxContentType],i){for(var r in i.headers)e.headers||(e.headers={}),typeof e.headers[r]>"u"&&(e.headers[r]=i.headers[r]);e.body=i.body.call(this,l,e,t)}else console.warn("Ajax Error - Invalid ajaxContentType value:",this.table.options.ajaxContentType);l?(typeof e.headers>"u"&&(e.headers={}),typeof e.headers.Accept>"u"&&(e.headers.Accept="application/json"),typeof e.headers["X-Requested-With"]>"u"&&(e.headers["X-Requested-With"]="XMLHttpRequest"),typeof e.mode>"u"&&(e.mode="cors"),e.mode=="cors"?(typeof e.headers.Origin>"u"&&(e.headers.Origin=window.location.origin),typeof e.credentials>"u"&&(e.credentials="same-origin")):typeof e.credentials>"u"&&(e.credentials="include"),fetch(l,e).then(o=>{o.ok?o.json().then(a=>{s(a)}).catch(a=>{n(a),console.warn("Ajax Load Error - Invalid JSON returned",a)}):(console.error("Ajax Load Error - Connection Error: "+o.status,o.statusText),n(o))}).catch(o=>{console.error("Ajax Load Error - Connection Error: ",o),n(o)})):(console.warn("Ajax Load Error - No URL Set"),s([]))})}function pe(l,e){var t=[];if(e=e||"",Array.isArray(l))l.forEach((s,n)=>{t=t.concat(pe(s,e?e+"["+n+"]":n))});else if(typeof l=="object")for(var i in l)t=t.concat(pe(l[i],e?e+"["+i+"]":i));else t.push({key:e,value:l});return t}var zt={json:{headers:{"Content-Type":"application/json"},body:function(l,e,t){return JSON.stringify(t)}},form:{headers:{},body:function(l,e,t){var i=pe(t),s=new FormData;return i.forEach(function(n){s.append(n.key,n.value)}),s}}};const F=class F extends w{constructor(e){super(e),this.config={},this.url="",this.urlGenerator=!1,this.params=!1,this.loaderPromise=!1,this.registerTableOption("ajaxURL",!1),this.registerTableOption("ajaxURLGenerator",!1),this.registerTableOption("ajaxParams",{}),this.registerTableOption("ajaxConfig","get"),this.registerTableOption("ajaxContentType","form"),this.registerTableOption("ajaxRequestFunc",!1),this.registerTableOption("ajaxRequesting",function(){}),this.registerTableOption("ajaxResponse",!1),this.contentTypeFormatters=F.contentTypeFormatters}initialize(){this.loaderPromise=this.table.options.ajaxRequestFunc||F.defaultLoaderPromise,this.urlGenerator=this.table.options.ajaxURLGenerator||F.defaultURLGenerator,this.table.options.ajaxURL&&this.setUrl(this.table.options.ajaxURL),this.setDefaultConfig(this.table.options.ajaxConfig),this.registerTableFunction("getAjaxUrl",this.getUrl.bind(this)),this.subscribe("data-loading",this.requestDataCheck.bind(this)),this.subscribe("data-params",this.requestParams.bind(this)),this.subscribe("data-load",this.requestData.bind(this))}requestParams(e,t,i,s){var n=this.table.options.ajaxParams;return n&&(typeof n=="function"&&(n=n.call(this.table)),s=Object.assign(Object.assign({},n),s)),s}requestDataCheck(e,t,i,s){return!!(!e&&this.url||typeof e=="string")}requestData(e,t,i,s,n){var r;return!n&&this.requestDataCheck(e)?(e&&this.setUrl(e),r=this.generateConfig(i),this.sendRequest(this.url,t,r)):n}setDefaultConfig(e={}){this.config=Object.assign({},F.defaultConfig),typeof e=="string"?this.config.method=e:Object.assign(this.config,e)}generateConfig(e={}){var t=Object.assign({},this.config);return typeof e=="string"?t.method=e:Object.assign(t,e),t}setUrl(e){this.url=e}getUrl(){return this.url}sendRequest(e,t,i){return this.table.options.ajaxRequesting.call(this.table,e,t)!==!1?this.loaderPromise(e,i,t).then(s=>(this.table.options.ajaxResponse&&(s=this.table.options.ajaxResponse.call(this.table,e,t,s)),s)):Promise.reject()}};b(F,"moduleName","ajax"),b(F,"defaultConfig",Lt),b(F,"defaultURLGenerator",qe),b(F,"defaultLoaderPromise",Dt),b(F,"contentTypeFormatters",zt);let me=F;var Ht={replace:function(l){return this.table.setData(l)},update:function(l){return this.table.updateOrAddData(l)},insert:function(l){return this.table.addData(l)}},Ft={table:function(l){var e=[],t=!0,i=this.table.columnManager.columns,s=[],n=[];return l=l.split(` +`),l.forEach(function(r){e.push(r.split(" "))}),e.length&&!(e.length===1&&e[0].length<2)?(e[0].forEach(function(r){var o=i.find(function(a){return r&&a.definition.title&&r.trim()&&a.definition.title.trim()===r.trim()});o?s.push(o):t=!1}),t||(t=!0,s=[],e[0].forEach(function(r){var o=i.find(function(a){return r&&a.field&&r.trim()&&a.field.trim()===r.trim()});o?s.push(o):t=!1}),t||(s=this.table.columnManager.columnsByIndex)),t&&e.shift(),e.forEach(function(r){var o={};r.forEach(function(a,h){s[h]&&(o[s[h].field]=a)}),n.push(o)}),n):!1}},Pt={copyToClipboard:["ctrl + 67","meta + 67"]},Ot={copyToClipboard:function(l){this.table.modules.edit.currentCell||this.table.modExists("clipboard",!0)&&this.table.modules.clipboard.copy(!1,!0)}},At={keybindings:{bindings:Pt,actions:Ot}};const _=class _ extends w{constructor(e){super(e),this.mode=!0,this.pasteParser=function(){},this.pasteAction=function(){},this.customSelection=!1,this.rowRange=!1,this.blocked=!0,this.registerTableOption("clipboard",!1),this.registerTableOption("clipboardCopyStyled",!0),this.registerTableOption("clipboardCopyConfig",!1),this.registerTableOption("clipboardCopyFormatter",!1),this.registerTableOption("clipboardCopyRowRange","active"),this.registerTableOption("clipboardPasteParser","table"),this.registerTableOption("clipboardPasteAction","insert"),this.registerColumnOption("clipboard"),this.registerColumnOption("titleClipboard")}initialize(){this.mode=this.table.options.clipboard,this.rowRange=this.table.options.clipboardCopyRowRange,(this.mode===!0||this.mode==="copy")&&this.table.element.addEventListener("copy",e=>{var t,i,s;this.blocked||(e.preventDefault(),this.customSelection?(t=this.customSelection,this.table.options.clipboardCopyFormatter&&(t=this.table.options.clipboardCopyFormatter("plain",t))):(s=this.table.modules.export.generateExportList(this.table.options.clipboardCopyConfig,this.table.options.clipboardCopyStyled,this.rowRange,"clipboard"),i=this.table.modules.export.generateHTMLTable(s),t=i?this.generatePlainContent(s):"",this.table.options.clipboardCopyFormatter&&(t=this.table.options.clipboardCopyFormatter("plain",t),i=this.table.options.clipboardCopyFormatter("html",i))),window.clipboardData&&window.clipboardData.setData?window.clipboardData.setData("Text",t):e.clipboardData&&e.clipboardData.setData?(e.clipboardData.setData("text/plain",t),i&&e.clipboardData.setData("text/html",i)):e.originalEvent&&e.originalEvent.clipboardData.setData&&(e.originalEvent.clipboardData.setData("text/plain",t),i&&e.originalEvent.clipboardData.setData("text/html",i)),this.dispatchExternal("clipboardCopied",t,i),this.reset())}),(this.mode===!0||this.mode==="paste")&&this.table.element.addEventListener("paste",e=>{this.paste(e)}),this.setPasteParser(this.table.options.clipboardPasteParser),this.setPasteAction(this.table.options.clipboardPasteAction),this.registerTableFunction("copyToClipboard",this.copy.bind(this))}reset(){this.blocked=!0,this.customSelection=!1}generatePlainContent(e){var t=[];return e.forEach(i=>{var s=[];i.columns.forEach(n=>{var r="";if(n)if(i.type==="group"&&(n.value=n.component.getKey()),n.value===null)r="";else switch(typeof n.value){case"object":r=JSON.stringify(n.value);break;case"undefined":r="";break;default:r=n.value}s.push(r)}),t.push(s.join(" "))}),t.join(` +`)}copy(e,t){var i,s;this.blocked=!1,this.customSelection=!1,(this.mode===!0||this.mode==="copy")&&(this.rowRange=e||this.table.options.clipboardCopyRowRange,typeof window.getSelection<"u"&&typeof document.createRange<"u"?(e=document.createRange(),e.selectNodeContents(this.table.element),i=window.getSelection(),i.toString()&&t&&(this.customSelection=i.toString()),i.removeAllRanges(),i.addRange(e)):typeof document.selection<"u"&&typeof document.body.createTextRange<"u"&&(s=document.body.createTextRange(),s.moveToElementText(this.table.element),s.select()),document.execCommand("copy"),i&&i.removeAllRanges())}setPasteAction(e){switch(typeof e){case"string":this.pasteAction=_.pasteActions[e],this.pasteAction||console.warn("Clipboard Error - No such paste action found:",e);break;case"function":this.pasteAction=e;break}}setPasteParser(e){switch(typeof e){case"string":this.pasteParser=_.pasteParsers[e],this.pasteParser||console.warn("Clipboard Error - No such paste parser found:",e);break;case"function":this.pasteParser=e;break}}paste(e){var t,i,s;this.checkPasteOrigin(e)&&(t=this.getPasteData(e),i=this.pasteParser.call(this,t),i?(e.preventDefault(),this.table.modExists("mutator")&&(i=this.mutateData(i)),s=this.pasteAction.call(this,i),this.dispatchExternal("clipboardPasted",t,i,s)):this.dispatchExternal("clipboardPasteError",t))}mutateData(e){var t=[];return Array.isArray(e)?e.forEach(i=>{t.push(this.table.modules.mutator.transformRow(i,"clipboard"))}):t=e,t}checkPasteOrigin(e){var t=!0,i=this.confirm("clipboard-paste",[e]);return(i||!["DIV","SPAN"].includes(e.target.tagName))&&(t=!1),t}getPasteData(e){var t;return window.clipboardData&&window.clipboardData.getData?t=window.clipboardData.getData("Text"):e.clipboardData&&e.clipboardData.getData?t=e.clipboardData.getData("text/plain"):e.originalEvent&&e.originalEvent.clipboardData.getData&&(t=e.originalEvent.clipboardData.getData("text/plain")),t}};b(_,"moduleName","clipboard"),b(_,"moduleExtensions",At),b(_,"pasteActions",Ht),b(_,"pasteParsers",Ft);let ge=_;class _t{constructor(e){return this._row=e,new Proxy(this,{get:function(t,i,s){return typeof t[i]<"u"?t[i]:t._row.table.componentFunctionBinder.handle("row",t._row,i)}})}getData(e){return this._row.getData(e)}getElement(){return this._row.getElement()}getTable(){return this._row.table}getCells(){var e=[];return this._row.getCells().forEach(function(t){e.push(t.getComponent())}),e}getCell(e){var t=this._row.getCell(e);return t?t.getComponent():!1}_getSelf(){return this._row}}class Ye{constructor(e){return this._cell=e,new Proxy(this,{get:function(t,i,s){return typeof t[i]<"u"?t[i]:t._cell.table.componentFunctionBinder.handle("cell",t._cell,i)}})}getValue(){return this._cell.getValue()}getOldValue(){return this._cell.getOldValue()}getInitialValue(){return this._cell.initialValue}getElement(){return this._cell.getElement()}getRow(){return this._cell.row.getComponent()}getData(e){return this._cell.row.getData(e)}getType(){return"cell"}getField(){return this._cell.column.getField()}getColumn(){return this._cell.column.getComponent()}setValue(e,t){typeof t>"u"&&(t=!0),this._cell.setValue(e,t)}restoreOldValue(){this._cell.setValueActual(this._cell.getOldValue())}restoreInitialValue(){this._cell.setValueActual(this._cell.initialValue)}checkHeight(){this._cell.checkHeight()}getTable(){return this._cell.table}_getSelf(){return this._cell}}class ne extends M{constructor(e,t){super(e.table),this.table=e.table,this.column=e,this.row=t,this.element=null,this.value=null,this.initialValue,this.oldValue=null,this.modules={},this.height=null,this.width=null,this.minWidth=null,this.component=null,this.loaded=!1,this.build()}build(){this.generateElement(),this.setWidth(),this._configureCell(),this.setValueActual(this.column.getFieldValue(this.row.data)),this.initialValue=this.value}generateElement(){this.element=document.createElement("div"),this.element.className="tabulator-cell",this.element.setAttribute("role","gridcell"),this.column.isRowHeader&&this.element.classList.add("tabulator-row-header")}_configureCell(){var e=this.element,t=this.column.getField(),i={top:"flex-start",bottom:"flex-end",middle:"center"},s={left:"flex-start",right:"flex-end",center:"center"};if(e.style.textAlign=this.column.hozAlign,this.column.vertAlign&&(e.style.display="inline-flex",e.style.alignItems=i[this.column.vertAlign]||"",this.column.hozAlign&&(e.style.justifyContent=s[this.column.hozAlign]||"")),t&&e.setAttribute("tabulator-field",t),this.column.definition.cssClass){var n=this.column.definition.cssClass.split(" ");n.forEach(r=>{e.classList.add(r)})}this.dispatch("cell-init",this),this.column.visible||this.hide()}_generateContents(){var e;switch(e=this.chain("cell-format",this,null,()=>this.element.innerHTML=this.value),typeof e){case"object":if(e instanceof Node){for(;this.element.firstChild;)this.element.removeChild(this.element.firstChild);this.element.appendChild(e)}else this.element.innerHTML="",e!=null&&console.warn("Format Error - Formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:",e);break;case"undefined":this.element.innerHTML="";break;default:this.element.innerHTML=e}}cellRendered(){this.dispatch("cell-rendered",this)}getElement(e){return this.loaded||(this.loaded=!0,e||this.layoutElement()),this.element}getValue(){return this.value}getOldValue(){return this.oldValue}setValue(e,t,i){var s=this.setValueProcessData(e,t,i);s&&(this.dispatch("cell-value-updated",this),this.cellRendered(),this.column.definition.cellEdited&&this.column.definition.cellEdited.call(this.table,this.getComponent()),this.dispatchExternal("cellEdited",this.getComponent()),this.subscribedExternal("dataChanged")&&this.dispatchExternal("dataChanged",this.table.rowManager.getData()))}setValueProcessData(e,t,i){var s=!1;return(this.value!==e||i)&&(s=!0,t&&(e=this.chain("cell-value-changing",[this,e],null,e))),this.setValueActual(e),s&&this.dispatch("cell-value-changed",this),s}setValueActual(e){this.oldValue=this.value,this.value=e,this.dispatch("cell-value-save-before",this),this.column.setFieldValue(this.row.data,e),this.dispatch("cell-value-save-after",this),this.loaded&&this.layoutElement()}layoutElement(){this._generateContents(),this.dispatch("cell-layout",this)}setWidth(){this.width=this.column.width,this.element.style.width=this.column.widthStyled}clearWidth(){this.width="",this.element.style.width=""}getWidth(){return this.width||this.element.offsetWidth}setMinWidth(){this.minWidth=this.column.minWidth,this.element.style.minWidth=this.column.minWidthStyled}setMaxWidth(){this.maxWidth=this.column.maxWidth,this.element.style.maxWidth=this.column.maxWidthStyled}checkHeight(){this.row.reinitializeHeight()}clearHeight(){this.element.style.height="",this.height=null,this.dispatch("cell-height",this,"")}setHeight(){this.height=this.row.height,this.element.style.height=this.row.heightStyled,this.dispatch("cell-height",this,this.row.heightStyled)}getHeight(){return this.height||this.element.offsetHeight}show(){this.element.style.display=this.column.vertAlign?"inline-flex":""}hide(){this.element.style.display="none"}delete(){this.dispatch("cell-delete",this),!this.table.rowManager.redrawBlock&&this.element.parentNode&&this.element.parentNode.removeChild(this.element),this.element=!1,this.column.deleteCell(this),this.row.deleteCell(this),this.calcs={}}getIndex(){return this.row.getCellIndex(this)}getComponent(){return this.component||(this.component=new Ye(this)),this.component}}class $e{constructor(e){return this._column=e,this.type="ColumnComponent",new Proxy(this,{get:function(t,i,s){return typeof t[i]<"u"?t[i]:t._column.table.componentFunctionBinder.handle("column",t._column,i)}})}getElement(){return this._column.getElement()}getDefinition(){return this._column.getDefinition()}getField(){return this._column.getField()}getTitleDownload(){return this._column.getTitleDownload()}getCells(){var e=[];return this._column.cells.forEach(function(t){e.push(t.getComponent())}),e}isVisible(){return this._column.visible}show(){this._column.isGroup?this._column.columns.forEach(function(e){e.show()}):this._column.show()}hide(){this._column.isGroup?this._column.columns.forEach(function(e){e.hide()}):this._column.hide()}toggle(){this._column.visible?this.hide():this.show()}delete(){return this._column.delete()}getSubColumns(){var e=[];return this._column.columns.length&&this._column.columns.forEach(function(t){e.push(t.getComponent())}),e}getParentColumn(){return this._column.getParentComponent()}_getSelf(){return this._column}scrollTo(e,t){return this._column.table.columnManager.scrollToColumn(this._column,e,t)}getTable(){return this._column.table}move(e,t){var i=this._column.table.columnManager.findColumn(e);i?this._column.table.columnManager.moveColumn(this._column,i,t):console.warn("Move Error - No matching column found:",i)}getNextColumn(){var e=this._column.nextColumn();return e?e.getComponent():!1}getPrevColumn(){var e=this._column.prevColumn();return e?e.getComponent():!1}updateDefinition(e){return this._column.updateDefinition(e)}getWidth(){return this._column.getWidth()}setWidth(e){var t;return e===!0?t=this._column.reinitializeWidth(!0):t=this._column.setWidth(e),this._column.table.columnManager.rerenderColumns(!0),t}}var Qe={title:void 0,field:void 0,columns:void 0,visible:void 0,hozAlign:void 0,vertAlign:void 0,width:void 0,minWidth:40,maxWidth:void 0,maxInitialWidth:void 0,cssClass:void 0,variableHeight:void 0,headerVertical:void 0,headerHozAlign:void 0,headerWordWrap:!1,editableTitle:void 0};const W=class W extends M{constructor(e,t,i){super(t.table),this.definition=e,this.parent=t,this.type="column",this.columns=[],this.cells=[],this.isGroup=!1,this.isRowHeader=i,this.element=this.createElement(),this.contentElement=!1,this.titleHolderElement=!1,this.titleElement=!1,this.groupElement=this.createGroupElement(),this.hozAlign="",this.vertAlign="",this.field="",this.fieldStructure="",this.getFieldValue="",this.setFieldValue="",this.titleDownload=null,this.titleFormatterRendered=!1,this.mapDefinitions(),this.setField(this.definition.field),this.modules={},this.width=null,this.widthStyled="",this.maxWidth=null,this.maxWidthStyled="",this.maxInitialWidth=null,this.minWidth=null,this.minWidthStyled="",this.widthFixed=!1,this.visible=!0,this.component=null,this.definition.columns?(this.isGroup=!0,this.definition.columns.forEach((s,n)=>{var r=new W(s,this);this.attachColumn(r)}),this.checkColumnVisibility()):t.registerColumnField(this),this._initialize()}createElement(){var e=document.createElement("div");switch(e.classList.add("tabulator-col"),e.setAttribute("role","columnheader"),e.setAttribute("aria-sort","none"),this.isRowHeader&&e.classList.add("tabulator-row-header"),this.table.options.columnHeaderVertAlign){case"middle":e.style.justifyContent="center";break;case"bottom":e.style.justifyContent="flex-end";break}return e}createGroupElement(){var e=document.createElement("div");return e.classList.add("tabulator-col-group-cols"),e}mapDefinitions(){var e=this.table.options.columnDefaults;if(e)for(let t in e)typeof this.definition[t]>"u"&&(this.definition[t]=e[t]);this.definition=this.table.columnManager.optionsList.generate(W.defaultOptionList,this.definition)}checkDefinition(){Object.keys(this.definition).forEach(e=>{W.defaultOptionList.indexOf(e)===-1&&console.warn("Invalid column definition option in '"+(this.field||this.definition.title)+"' column:",e)})}setField(e){this.field=e,this.fieldStructure=e?this.table.options.nestedFieldSeparator?e.split(this.table.options.nestedFieldSeparator):[e]:[],this.getFieldValue=this.fieldStructure.length>1?this._getNestedData:this._getFlatData,this.setFieldValue=this.fieldStructure.length>1?this._setNestedData:this._setFlatData}registerColumnPosition(e){this.parent.registerColumnPosition(e)}registerColumnField(e){this.parent.registerColumnField(e)}reRegisterPosition(){this.isGroup?this.columns.forEach(function(e){e.reRegisterPosition()}):this.registerColumnPosition(this)}_initialize(){for(var e=this.definition;this.element.firstChild;)this.element.removeChild(this.element.firstChild);e.headerVertical&&(this.element.classList.add("tabulator-col-vertical"),e.headerVertical==="flip"&&this.element.classList.add("tabulator-col-vertical-flip")),this.contentElement=this._buildColumnHeaderContent(),this.element.appendChild(this.contentElement),this.isGroup?this._buildGroupHeader():this._buildColumnHeader(),this.dispatch("column-init",this)}_buildColumnHeader(){var e=this.definition;if(this.dispatch("column-layout",this),typeof e.visible<"u"&&(e.visible?this.show(!0):this.hide(!0)),e.cssClass){var t=e.cssClass.split(" ");t.forEach(i=>{this.element.classList.add(i)})}e.field&&this.element.setAttribute("tabulator-field",e.field),this.setMinWidth(parseInt(e.minWidth)),e.maxInitialWidth&&(this.maxInitialWidth=parseInt(e.maxInitialWidth)),e.maxWidth&&this.setMaxWidth(parseInt(e.maxWidth)),this.reinitializeWidth(),this.hozAlign=this.definition.hozAlign,this.vertAlign=this.definition.vertAlign,this.titleElement.style.textAlign=this.definition.headerHozAlign}_buildColumnHeaderContent(){var e=document.createElement("div");return e.classList.add("tabulator-col-content"),this.titleHolderElement=document.createElement("div"),this.titleHolderElement.classList.add("tabulator-col-title-holder"),e.appendChild(this.titleHolderElement),this.titleElement=this._buildColumnHeaderTitle(),this.titleHolderElement.appendChild(this.titleElement),e}_buildColumnHeaderTitle(){var e=this.definition,t=document.createElement("div");if(t.classList.add("tabulator-col-title"),e.headerWordWrap&&t.classList.add("tabulator-col-title-wrap"),e.editableTitle){var i=document.createElement("input");i.classList.add("tabulator-title-editor"),i.addEventListener("click",s=>{s.stopPropagation(),i.focus()}),i.addEventListener("mousedown",s=>{s.stopPropagation()}),i.addEventListener("change",()=>{e.title=i.value,this.dispatchExternal("columnTitleChanged",this.getComponent())}),t.appendChild(i),e.field?this.langBind("columns|"+e.field,s=>{i.value=s||e.title||" "}):i.value=e.title||" "}else e.field?this.langBind("columns|"+e.field,s=>{this._formatColumnHeaderTitle(t,s||e.title||" ")}):this._formatColumnHeaderTitle(t,e.title||" ");return t}_formatColumnHeaderTitle(e,t){var i=this.chain("column-format",[this,t,e],null,()=>t);switch(typeof i){case"object":i instanceof Node?e.appendChild(i):(e.innerHTML="",console.warn("Format Error - Title formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:",i));break;case"undefined":e.innerHTML="";break;default:e.innerHTML=i}}_buildGroupHeader(){if(this.element.classList.add("tabulator-col-group"),this.element.setAttribute("role","columngroup"),this.element.setAttribute("aria-title",this.definition.title),this.definition.cssClass){var e=this.definition.cssClass.split(" ");e.forEach(t=>{this.element.classList.add(t)})}this.titleElement.style.textAlign=this.definition.headerHozAlign,this.element.appendChild(this.groupElement)}_getFlatData(e){return e[this.field]}_getNestedData(e){var t=e,i=this.fieldStructure,s=i.length,n;for(let r=0;r{t.push(i),t=t.concat(i.getColumns(!0))}):t=this.columns,t}getCells(){return this.cells}getTopColumn(){return this.parent.isGroup?this.parent.getTopColumn():this}getDefinition(e){var t=[];return this.isGroup&&e&&(this.columns.forEach(function(i){t.push(i.getDefinition(!0))}),this.definition.columns=t),this.definition}checkColumnVisibility(){var e=!1;this.columns.forEach(function(t){t.visible&&(e=!0)}),e?(this.show(),this.dispatchExternal("columnVisibilityChanged",this.getComponent(),!1)):this.hide()}show(e,t){this.visible||(this.visible=!0,this.element.style.display="",this.parent.isGroup&&this.parent.checkColumnVisibility(),this.cells.forEach(function(i){i.show()}),!this.isGroup&&this.width===null&&this.reinitializeWidth(),this.table.columnManager.verticalAlignHeaders(),this.dispatch("column-show",this,t),e||this.dispatchExternal("columnVisibilityChanged",this.getComponent(),!0),this.parent.isGroup&&this.parent.matchChildWidths(),this.silent||this.table.columnManager.rerenderColumns())}hide(e,t){this.visible&&(this.visible=!1,this.element.style.display="none",this.table.columnManager.verticalAlignHeaders(),this.parent.isGroup&&this.parent.checkColumnVisibility(),this.cells.forEach(function(i){i.hide()}),this.dispatch("column-hide",this,t),e||this.dispatchExternal("columnVisibilityChanged",this.getComponent(),!1),this.parent.isGroup&&this.parent.matchChildWidths(),this.silent||this.table.columnManager.rerenderColumns())}matchChildWidths(){var e=0;this.contentElement&&this.columns.length&&(this.columns.forEach(function(t){t.visible&&(e+=t.getWidth())}),this.contentElement.style.maxWidth=e-1+"px",this.table.initialized&&(this.element.style.width=e+"px"),this.parent.isGroup&&this.parent.matchChildWidths())}removeChild(e){var t=this.columns.indexOf(e);t>-1&&this.columns.splice(t,1),this.columns.length||this.delete()}setWidth(e){this.widthFixed=!0,this.setWidthActual(e)}setWidthActual(e){isNaN(e)&&(e=Math.floor(this.table.element.clientWidth/100*parseInt(e))),e=Math.max(this.minWidth,e),this.maxWidth&&(e=Math.min(this.maxWidth,e)),this.width=e,this.widthStyled=e?e+"px":"",this.element.style.width=this.widthStyled,this.isGroup||this.cells.forEach(function(t){t.setWidth()}),this.parent.isGroup&&this.parent.matchChildWidths(),this.dispatch("column-width",this),this.subscribedExternal("columnWidth")&&this.dispatchExternal("columnWidth",this.getComponent())}checkCellHeights(){var e=[];this.cells.forEach(function(t){t.row.heightInitialized&&(t.row.getElement().offsetParent!==null?(e.push(t.row),t.row.clearCellHeight()):t.row.heightInitialized=!1)}),e.forEach(function(t){t.calcHeight()}),e.forEach(function(t){t.setCellHeight()})}getWidth(){var e=0;return this.isGroup?this.columns.forEach(function(t){t.visible&&(e+=t.getWidth())}):e=this.width,e}getLeftOffset(){var e=this.element.offsetLeft;return this.parent.isGroup&&(e+=this.parent.getLeftOffset()),e}getHeight(){return Math.ceil(this.element.getBoundingClientRect().height)}setMinWidth(e){this.maxWidth&&e>this.maxWidth&&(e=this.maxWidth,console.warn("the minWidth ("+e+"px) for column '"+this.field+"' cannot be bigger that its maxWidth ("+this.maxWidthStyled+")")),this.minWidth=e,this.minWidthStyled=e?e+"px":"",this.element.style.minWidth=this.minWidthStyled,this.cells.forEach(function(t){t.setMinWidth()})}setMaxWidth(e){this.minWidth&&e{this.isGroup&&this.columns.forEach(function(s){s.delete()}),this.dispatch("column-delete",this);var i=this.cells.length;for(let s=0;s-1?this._nextVisibleColumn(e+1):!1}_nextVisibleColumn(e){var t=this.table.columnManager.getColumnByIndex(e);return!t||t.visible?t:this._nextVisibleColumn(e+1)}prevColumn(){var e=this.table.columnManager.findColumnIndex(this);return e>-1?this._prevVisibleColumn(e-1):!1}_prevVisibleColumn(e){var t=this.table.columnManager.getColumnByIndex(e);return!t||t.visible?t:this._prevVisibleColumn(e-1)}reinitializeWidth(e){this.widthFixed=!1,typeof this.definition.width<"u"&&!e&&this.setWidth(this.definition.width),this.dispatch("column-width-fit-before",this),this.fitToData(e),this.dispatch("column-width-fit-after",this)}fitToData(e){if(!this.isGroup){this.widthFixed||(this.element.style.width="",this.cells.forEach(s=>{s.clearWidth()}));var t=this.element.offsetWidth;if((!this.width||!this.widthFixed)&&(this.cells.forEach(s=>{var n=s.getWidth();n>t&&(t=n)}),t)){var i=t+1;this.maxInitialWidth&&!e&&(i=Math.min(i,this.maxInitialWidth)),this.setWidthActual(i)}}}updateDefinition(e){var t;return this.isGroup||this.parent.isGroup?(console.error("Column Update Error - The updateDefinition function is only available on ungrouped columns"),Promise.reject("Column Update Error - The updateDefinition function is only available on columns, not column groups")):(t=Object.assign({},this.getDefinition()),t=Object.assign(t,e),this.table.columnManager.addColumn(t,!1,this).then(i=>(t.field==this.field&&(this.field=!1),this.delete().then(()=>i.getComponent()))))}deleteCell(e){var t=this.cells.indexOf(e);t>-1&&this.cells.splice(t,1)}getComponent(){return this.component||(this.component=new $e(this)),this.component}getPosition(){return this.table.columnManager.getVisibleColumnsByIndex().indexOf(this)+1}getParentComponent(){return this.parent instanceof W?this.parent.getComponent():!1}};b(W,"defaultOptionList",Qe);let U=W;class oe{constructor(e){return this._row=e,new Proxy(this,{get:function(t,i,s){return typeof t[i]<"u"?t[i]:t._row.table.componentFunctionBinder.handle("row",t._row,i)}})}getData(e){return this._row.getData(e)}getElement(){return this._row.getElement()}getCells(){var e=[];return this._row.getCells().forEach(function(t){e.push(t.getComponent())}),e}getCell(e){var t=this._row.getCell(e);return t?t.getComponent():!1}getIndex(){return this._row.getData("data")[this._row.table.options.index]}getPosition(){return this._row.getPosition()}watchPosition(e){return this._row.watchPosition(e)}delete(){return this._row.delete()}scrollTo(e,t){return this._row.table.rowManager.scrollToRow(this._row,e,t)}move(e,t){this._row.moveToRow(e,t)}update(e){return this._row.updateData(e)}normalizeHeight(){this._row.normalizeHeight(!0)}_getSelf(){return this._row}reformat(){return this._row.reinitialize()}getTable(){return this._row.table}getNextRow(){var e=this._row.nextRow();return e&&e.getComponent()}getPrevRow(){var e=this._row.prevRow();return e&&e.getComponent()}}class S extends M{constructor(e,t,i="row"){super(t.table),this.parent=t,this.data={},this.type=i,this.element=!1,this.modules={},this.cells=[],this.height=0,this.heightStyled="",this.manualHeight=!1,this.outerHeight=0,this.initialized=!1,this.heightInitialized=!1,this.position=0,this.positionWatchers=[],this.component=null,this.created=!1,this.setData(e)}create(){this.created||(this.created=!0,this.generateElement())}createElement(){var e=document.createElement("div");e.classList.add("tabulator-row"),e.setAttribute("role","row"),this.element=e}getElement(){return this.create(),this.element}detachElement(){this.element&&this.element.parentNode&&this.element.parentNode.removeChild(this.element)}generateElement(){this.createElement(),this.dispatch("row-init",this)}generateCells(){this.cells=this.table.columnManager.generateCells(this)}initialize(e,t){if(this.create(),!this.initialized||e){for(this.deleteCells();this.element.firstChild;)this.element.removeChild(this.element.firstChild);this.dispatch("row-layout-before",this),this.generateCells(),this.initialized=!0,this.table.columnManager.renderer.renderRowCells(this,t),e&&this.normalizeHeight(),this.dispatch("row-layout",this),this.table.options.rowFormatter&&this.table.options.rowFormatter(this.getComponent()),this.dispatch("row-layout-after",this)}else this.table.columnManager.renderer.rerenderRowCells(this,t)}rendered(){this.cells.forEach(e=>{e.cellRendered()})}reinitializeHeight(){this.heightInitialized=!1,this.element&&this.element.offsetParent!==null&&this.normalizeHeight(!0)}deinitialize(){this.initialized=!1}deinitializeHeight(){this.heightInitialized=!1}reinitialize(e){this.initialized=!1,this.heightInitialized=!1,this.manualHeight||(this.height=0,this.heightStyled=""),this.element&&this.element.offsetParent!==null&&this.initialize(!0),this.dispatch("row-relayout",this)}calcHeight(e){var t=0,i=0;this.table.options.rowHeight?this.height=this.table.options.rowHeight:(i=this.calcMinHeight(),t=this.calcMaxHeight(),e?this.height=Math.max(t,i):this.height=this.manualHeight?this.height:Math.max(t,i)),this.heightStyled=this.height?this.height+"px":"",this.outerHeight=this.element.offsetHeight}calcMinHeight(){return this.table.options.resizableRows?this.element.clientHeight:0}calcMaxHeight(){var e=0;return this.cells.forEach(function(t){var i=t.getHeight();i>e&&(e=i)}),e}setCellHeight(){this.cells.forEach(function(e){e.setHeight()}),this.heightInitialized=!0}clearCellHeight(){this.cells.forEach(function(e){e.clearHeight()})}normalizeHeight(e){e&&!this.table.options.rowHeight&&this.clearCellHeight(),this.calcHeight(e),this.setCellHeight()}setHeight(e,t){(this.height!=e||t)&&(this.manualHeight=!0,this.height=e,this.heightStyled=e?e+"px":"",this.setCellHeight(),this.outerHeight=this.element.offsetHeight,this.subscribedExternal("rowHeight")&&this.dispatchExternal("rowHeight",this.getComponent()))}getHeight(){return this.outerHeight}getWidth(){return this.element.offsetWidth}deleteCell(e){var t=this.cells.indexOf(e);t>-1&&this.cells.splice(t,1)}setData(e){this.data=this.chain("row-data-init-before",[this,e],void 0,e),this.dispatch("row-data-init-after",this)}updateData(e){var t=this.element&&x.elVisible(this.element),i={},s;return new Promise((n,r)=>{typeof e=="string"&&(e=JSON.parse(e)),this.dispatch("row-data-save-before",this),this.subscribed("row-data-changing")&&(i=Object.assign(i,this.data),i=Object.assign(i,e)),s=this.chain("row-data-changing",[this,i,e],null,e);for(let o in s)this.data[o]=s[o];this.dispatch("row-data-save-after",this);for(let o in e)this.table.columnManager.getColumnsByFieldRoot(o).forEach(h=>{let d=this.getCell(h.getField());if(d){let u=h.getFieldValue(s);d.getValue()!==u&&(d.setValueProcessData(u),t&&d.cellRendered())}});t?(this.normalizeHeight(!0),this.table.options.rowFormatter&&this.table.options.rowFormatter(this.getComponent())):(this.initialized=!1,this.height=0,this.heightStyled=""),this.dispatch("row-data-changed",this,t,e),this.dispatchExternal("rowUpdated",this.getComponent()),this.subscribedExternal("dataChanged")&&this.dispatchExternal("dataChanged",this.table.rowManager.getData()),n()})}getData(e){return e?this.chain("row-data-retrieve",[this,e],null,this.data):this.data}getCell(e){var t=!1;return e=this.table.columnManager.findColumn(e),!this.initialized&&this.cells.length===0&&this.generateCells(),t=this.cells.find(function(i){return i.column===e}),t}getCellIndex(e){return this.cells.findIndex(function(t){return t===e})}findCell(e){return this.cells.find(t=>t.element===e)}getCells(){return!this.initialized&&this.cells.length===0&&this.generateCells(),this.cells}nextRow(){var e=this.table.rowManager.nextDisplayRow(this,!0);return e||!1}prevRow(){var e=this.table.rowManager.prevDisplayRow(this,!0);return e||!1}moveToRow(e,t){var i=this.table.rowManager.findRow(e);i?(this.table.rowManager.moveRowActual(this,i,!t),this.table.rowManager.refreshActiveData("display",!1,!0)):console.warn("Move Error - No matching row found:",e)}delete(){return this.dispatch("row-delete",this),this.deleteActual(),Promise.resolve()}deleteActual(e){this.detachModules(),this.table.rowManager.deleteRow(this,e),this.deleteCells(),this.initialized=!1,this.heightInitialized=!1,this.element=!1,this.dispatch("row-deleted",this)}detachModules(){this.dispatch("row-deleting",this)}deleteCells(){var e=this.cells.length;for(let t=0;t{t(this.position)}))}watchPosition(e){this.positionWatchers.push(e),e(this.position)}getGroup(){return this.modules.group||!1}getComponent(){return this.component||(this.component=new oe(this)),this.component}}var Bt={avg:function(l,e,t){var i=0,s=typeof t.precision<"u"?t.precision:2;return l.length&&(i=l.reduce(function(n,r){return Number(n)+Number(r)}),i=i/l.length,i=s!==!1?i.toFixed(s):i),parseFloat(i).toString()},max:function(l,e,t){var i=null,s=typeof t.precision<"u"?t.precision:!1;return l.forEach(function(n){n=Number(n),(n>i||i===null)&&(i=n)}),i!==null?s!==!1?i.toFixed(s):i:""},min:function(l,e,t){var i=null,s=typeof t.precision<"u"?t.precision:!1;return l.forEach(function(n){n=Number(n),(n(l||s===0)&&l.indexOf(s)===n);return i.length}};const B=class B extends w{constructor(e){super(e),this.topCalcs=[],this.botCalcs=[],this.genColumn=!1,this.topElement=this.createElement(),this.botElement=this.createElement(),this.topRow=!1,this.botRow=!1,this.topInitialized=!1,this.botInitialized=!1,this.blocked=!1,this.recalcAfterBlock=!1,this.registerTableOption("columnCalcs",!0),this.registerColumnOption("topCalc"),this.registerColumnOption("topCalcParams"),this.registerColumnOption("topCalcFormatter"),this.registerColumnOption("topCalcFormatterParams"),this.registerColumnOption("bottomCalc"),this.registerColumnOption("bottomCalcParams"),this.registerColumnOption("bottomCalcFormatter"),this.registerColumnOption("bottomCalcFormatterParams")}createElement(){var e=document.createElement("div");return e.classList.add("tabulator-calcs-holder"),e}initialize(){this.genColumn=new U({field:"value"},this),this.subscribe("cell-value-changed",this.cellValueChanged.bind(this)),this.subscribe("column-init",this.initializeColumnCheck.bind(this)),this.subscribe("row-deleted",this.rowsUpdated.bind(this)),this.subscribe("scroll-horizontal",this.scrollHorizontal.bind(this)),this.subscribe("row-added",this.rowsUpdated.bind(this)),this.subscribe("column-moved",this.recalcActiveRows.bind(this)),this.subscribe("column-add",this.recalcActiveRows.bind(this)),this.subscribe("data-refreshed",this.recalcActiveRowsRefresh.bind(this)),this.subscribe("table-redraw",this.tableRedraw.bind(this)),this.subscribe("rows-visible",this.visibleRows.bind(this)),this.subscribe("scrollbar-vertical",this.adjustForScrollbar.bind(this)),this.subscribe("redraw-blocked",this.blockRedraw.bind(this)),this.subscribe("redraw-restored",this.restoreRedraw.bind(this)),this.subscribe("table-redrawing",this.resizeHolderWidth.bind(this)),this.subscribe("column-resized",this.resizeHolderWidth.bind(this)),this.subscribe("column-show",this.resizeHolderWidth.bind(this)),this.subscribe("column-hide",this.resizeHolderWidth.bind(this)),this.registerTableFunction("getCalcResults",this.getResults.bind(this)),this.registerTableFunction("recalc",this.userRecalc.bind(this)),this.resizeHolderWidth()}resizeHolderWidth(){this.topElement.style.minWidth=this.table.columnManager.headersElement.offsetWidth+"px"}tableRedraw(e){this.recalc(this.table.rowManager.activeRows),e&&this.redraw()}blockRedraw(){this.blocked=!0,this.recalcAfterBlock=!1}restoreRedraw(){this.blocked=!1,this.recalcAfterBlock&&(this.recalcAfterBlock=!1,this.recalcActiveRowsRefresh())}userRecalc(){this.recalc(this.table.rowManager.activeRows)}blockCheck(){return this.blocked&&(this.recalcAfterBlock=!0),this.blocked}visibleRows(e,t){return this.topRow&&t.unshift(this.topRow),this.botRow&&t.push(this.botRow),t}rowsUpdated(e){this.table.options.groupBy?this.recalcRowGroup(e):this.recalcActiveRows()}recalcActiveRowsRefresh(){this.table.options.groupBy&&this.table.options.dataTreeStartExpanded&&this.table.options.dataTree?this.recalcAll():this.recalcActiveRows()}recalcActiveRows(){this.recalc(this.table.rowManager.activeRows)}cellValueChanged(e){(e.column.definition.topCalc||e.column.definition.bottomCalc)&&(this.table.options.groupBy?((this.table.options.columnCalcs=="table"||this.table.options.columnCalcs=="both")&&this.recalcActiveRows(),this.table.options.columnCalcs!="table"&&this.recalcRowGroup(e.row)):this.recalcActiveRows())}initializeColumnCheck(e){(e.definition.topCalc||e.definition.bottomCalc)&&this.initializeColumn(e)}initializeColumn(e){var t=e.definition,i={topCalcParams:t.topCalcParams||{},botCalcParams:t.bottomCalcParams||{}};if(t.topCalc){switch(typeof t.topCalc){case"string":B.calculations[t.topCalc]?i.topCalc=B.calculations[t.topCalc]:console.warn("Column Calc Error - No such calculation found, ignoring: ",t.topCalc);break;case"function":i.topCalc=t.topCalc;break}i.topCalc&&(e.modules.columnCalcs=i,this.topCalcs.push(e),this.table.options.columnCalcs!="group"&&this.initializeTopRow())}if(t.bottomCalc){switch(typeof t.bottomCalc){case"string":B.calculations[t.bottomCalc]?i.botCalc=B.calculations[t.bottomCalc]:console.warn("Column Calc Error - No such calculation found, ignoring: ",t.bottomCalc);break;case"function":i.botCalc=t.bottomCalc;break}i.botCalc&&(e.modules.columnCalcs=i,this.botCalcs.push(e),this.table.options.columnCalcs!="group"&&this.initializeBottomRow())}}registerColumnField(){}removeCalcs(){var e=!1;this.topInitialized&&(this.topInitialized=!1,this.topElement.parentNode.removeChild(this.topElement),e=!0),this.botInitialized&&(this.botInitialized=!1,this.footerRemove(this.botElement),e=!0),e&&this.table.rowManager.adjustTableSize()}reinitializeCalcs(){this.topCalcs.length&&this.initializeTopRow(),this.botCalcs.length&&this.initializeBottomRow()}initializeTopRow(){var e=document.createDocumentFragment();this.topInitialized||(e.appendChild(document.createElement("br")),e.appendChild(this.topElement),this.table.columnManager.getContentsElement().insertBefore(e,this.table.columnManager.headersElement.nextSibling),this.topInitialized=!0)}initializeBottomRow(){this.botInitialized||(this.footerPrepend(this.botElement),this.botInitialized=!0)}scrollHorizontal(e){this.botInitialized&&this.botRow&&(this.botElement.scrollLeft=e)}recalc(e){var t,i;if(!this.blockCheck()&&(this.topInitialized||this.botInitialized)){if(t=this.rowsToData(e),this.topInitialized){for(this.topRow&&this.topRow.deleteCells(),i=this.generateRow("top",t),this.topRow=i;this.topElement.firstChild;)this.topElement.removeChild(this.topElement.firstChild);this.topElement.appendChild(i.getElement()),i.initialize(!0)}if(this.botInitialized){for(this.botRow&&this.botRow.deleteCells(),i=this.generateRow("bottom",t),this.botRow=i;this.botElement.firstChild;)this.botElement.removeChild(this.botElement.firstChild);this.botElement.appendChild(i.getElement()),i.initialize(!0)}this.table.rowManager.adjustTableSize(),this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layout()}}recalcRowGroup(e){this.recalcGroup(this.table.modules.groupRows.getRowGroup(e))}recalcAll(){if((this.topCalcs.length||this.botCalcs.length)&&(this.table.options.columnCalcs!=="group"&&this.recalcActiveRows(),this.table.options.groupBy&&this.table.options.columnCalcs!=="table")){var e=this.table.modules.groupRows.getChildGroups();e.forEach(t=>{this.recalcGroup(t)})}}recalcGroup(e){var t,i;this.blockCheck()||e&&e.calcs&&(e.calcs.bottom&&(t=this.rowsToData(e.rows),i=this.generateRowData("bottom",t),e.calcs.bottom.updateData(i),e.calcs.bottom.reinitialize()),e.calcs.top&&(t=this.rowsToData(e.rows),i=this.generateRowData("top",t),e.calcs.top.updateData(i),e.calcs.top.reinitialize()))}generateTopRow(e){return this.generateRow("top",this.rowsToData(e))}generateBottomRow(e){return this.generateRow("bottom",this.rowsToData(e))}rowsToData(e){var t=[],i=this.table.options.dataTree&&this.table.options.dataTreeChildColumnCalcs,s=this.table.modules.dataTree;return e.forEach(n=>{var r;t.push(n.getData()),i&&((r=n.modules.dataTree)!=null&&r.open)&&this.rowsToData(s.getFilteredTreeChildren(n)).forEach(o=>{t.push(n)})}),t}generateRow(e,t){var i=this.generateRowData(e,t),s;return this.table.modExists("mutator")&&this.table.modules.mutator.disable(),s=new S(i,this,"calc"),this.table.modExists("mutator")&&this.table.modules.mutator.enable(),s.getElement().classList.add("tabulator-calcs","tabulator-calcs-"+e),s.component=!1,s.getComponent=()=>(s.component||(s.component=new _t(s)),s.component),s.generateCells=()=>{var n=[];this.table.columnManager.columnsByIndex.forEach(r=>{this.genColumn.setField(r.getField()),this.genColumn.hozAlign=r.hozAlign,r.definition[e+"CalcFormatter"]&&this.table.modExists("format")?this.genColumn.modules.format={formatter:this.table.modules.format.getFormatter(r.definition[e+"CalcFormatter"]),params:r.definition[e+"CalcFormatterParams"]||{}}:this.genColumn.modules.format={formatter:this.table.modules.format.getFormatter("plaintext"),params:{}},this.genColumn.definition.cssClass=r.definition.cssClass;var o=new ne(this.genColumn,s);o.getElement(),o.column=r,o.setWidth(),r.cells.push(o),n.push(o),r.visible||o.hide()}),s.cells=n},s}generateRowData(e,t){var i={},s=e=="top"?this.topCalcs:this.botCalcs,n=e=="top"?"topCalc":"botCalc",r,o;return s.forEach(function(a){var h=[];a.modules.columnCalcs&&a.modules.columnCalcs[n]&&(t.forEach(function(d){h.push(a.getFieldValue(d))}),o=n+"Params",r=typeof a.modules.columnCalcs[o]=="function"?a.modules.columnCalcs[o](h,t):a.modules.columnCalcs[o],a.setFieldValue(i,a.modules.columnCalcs[n](h,t,r)))}),i}hasTopCalcs(){return!!this.topCalcs.length}hasBottomCalcs(){return!!this.botCalcs.length}redraw(){this.topRow&&this.topRow.normalizeHeight(!0),this.botRow&&this.botRow.normalizeHeight(!0)}getResults(){var e={},t;return this.table.options.groupBy&&this.table.modExists("groupRows")?(t=this.table.modules.groupRows.getGroups(!0),t.forEach(i=>{e[i.getKey()]=this.getGroupResults(i)})):e={top:this.topRow?this.topRow.getData():{},bottom:this.botRow?this.botRow.getData():{}},e}getGroupResults(e){var t=e._getSelf(),i=e.getSubGroups(),s={},n={};return i.forEach(r=>{s[r.getKey()]=this.getGroupResults(r)}),n={top:t.calcs.top?t.calcs.top.getData():{},bottom:t.calcs.bottom?t.calcs.bottom.getData():{},groups:s},n}adjustForScrollbar(e){this.botRow&&(this.table.rtl?this.botElement.style.paddingLeft=e+"px":this.botElement.style.paddingRight=e+"px")}};b(B,"moduleName","columnCalcs"),b(B,"calculations",Bt);let be=B;class Ze extends w{constructor(e){super(e),this.indent=10,this.field="",this.collapseEl=null,this.expandEl=null,this.branchEl=null,this.elementField=!1,this.startOpen=function(){},this.registerTableOption("dataTree",!1),this.registerTableOption("dataTreeFilter",!0),this.registerTableOption("dataTreeSort",!0),this.registerTableOption("dataTreeElementColumn",!1),this.registerTableOption("dataTreeBranchElement",!0),this.registerTableOption("dataTreeChildIndent",9),this.registerTableOption("dataTreeChildField","_children"),this.registerTableOption("dataTreeCollapseElement",!1),this.registerTableOption("dataTreeExpandElement",!1),this.registerTableOption("dataTreeStartExpanded",!1),this.registerTableOption("dataTreeChildColumnCalcs",!1),this.registerTableOption("dataTreeSelectPropagate",!1),this.registerComponentFunction("row","treeCollapse",this.collapseRow.bind(this)),this.registerComponentFunction("row","treeExpand",this.expandRow.bind(this)),this.registerComponentFunction("row","treeToggle",this.toggleRow.bind(this)),this.registerComponentFunction("row","getTreeParent",this.getTreeParent.bind(this)),this.registerComponentFunction("row","getTreeChildren",this.getRowChildren.bind(this)),this.registerComponentFunction("row","addTreeChild",this.addTreeChildRow.bind(this)),this.registerComponentFunction("row","isTreeExpanded",this.isRowExpanded.bind(this))}initialize(){if(this.table.options.dataTree){var e=null,t=this.table.options;switch(this.field=t.dataTreeChildField,this.indent=t.dataTreeChildIndent,this.options("movableRows")&&console.warn("The movableRows option is not available with dataTree enabled, moving of child rows could result in unpredictable behavior"),t.dataTreeBranchElement?t.dataTreeBranchElement===!0?(this.branchEl=document.createElement("div"),this.branchEl.classList.add("tabulator-data-tree-branch")):typeof t.dataTreeBranchElement=="string"?(e=document.createElement("div"),e.innerHTML=t.dataTreeBranchElement,this.branchEl=e.firstChild):this.branchEl=t.dataTreeBranchElement:(this.branchEl=document.createElement("div"),this.branchEl.classList.add("tabulator-data-tree-branch-empty")),t.dataTreeCollapseElement?typeof t.dataTreeCollapseElement=="string"?(e=document.createElement("div"),e.innerHTML=t.dataTreeCollapseElement,this.collapseEl=e.firstChild):this.collapseEl=t.dataTreeCollapseElement:(this.collapseEl=document.createElement("div"),this.collapseEl.classList.add("tabulator-data-tree-control"),this.collapseEl.tabIndex=0,this.collapseEl.innerHTML="
"),t.dataTreeExpandElement?typeof t.dataTreeExpandElement=="string"?(e=document.createElement("div"),e.innerHTML=t.dataTreeExpandElement,this.expandEl=e.firstChild):this.expandEl=t.dataTreeExpandElement:(this.expandEl=document.createElement("div"),this.expandEl.classList.add("tabulator-data-tree-control"),this.expandEl.tabIndex=0,this.expandEl.innerHTML="
"),typeof t.dataTreeStartExpanded){case"boolean":this.startOpen=function(i,s){return t.dataTreeStartExpanded};break;case"function":this.startOpen=t.dataTreeStartExpanded;break;default:this.startOpen=function(i,s){return t.dataTreeStartExpanded[s]};break}this.subscribe("row-init",this.initializeRow.bind(this)),this.subscribe("row-layout-after",this.layoutRow.bind(this)),this.subscribe("row-deleted",this.rowDelete.bind(this),0),this.subscribe("row-data-changed",this.rowDataChanged.bind(this),10),this.subscribe("cell-value-updated",this.cellValueChanged.bind(this)),this.subscribe("edit-cancelled",this.cellValueChanged.bind(this)),this.subscribe("column-moving-rows",this.columnMoving.bind(this)),this.subscribe("table-built",this.initializeElementField.bind(this)),this.subscribe("table-redrawing",this.tableRedrawing.bind(this)),this.registerDisplayHandler(this.getRows.bind(this),30)}}tableRedrawing(e){var t;e&&(t=this.table.rowManager.getRows(),t.forEach(i=>{this.reinitializeRowChildren(i)}))}initializeElementField(){var e=this.table.columnManager.getFirstVisibleColumn();this.elementField=this.table.options.dataTreeElementColumn||(e?e.field:!1)}getRowChildren(e){return this.getTreeChildren(e,!0)}columnMoving(){var e=[];return this.table.rowManager.rows.forEach(t=>{e=e.concat(this.getTreeChildren(t,!1,!0))}),e}rowDataChanged(e,t,i){this.redrawNeeded(i)&&(this.initializeRow(e),t&&(this.layoutRow(e),this.refreshData(!0)))}cellValueChanged(e){var t=e.column.getField();t===this.elementField&&this.layoutRow(e.row)}initializeRow(e){var t=e.getData()[this.field],i=Array.isArray(t),s=i||!i&&typeof t=="object"&&t!==null;!s&&e.modules.dataTree&&e.modules.dataTree.branchEl&&e.modules.dataTree.branchEl.parentNode.removeChild(e.modules.dataTree.branchEl),!s&&e.modules.dataTree&&e.modules.dataTree.controlEl&&e.modules.dataTree.controlEl.parentNode.removeChild(e.modules.dataTree.controlEl),e.modules.dataTree={index:e.modules.dataTree?e.modules.dataTree.index:0,open:s?e.modules.dataTree?e.modules.dataTree.open:this.startOpen(e.getComponent(),0):!1,controlEl:e.modules.dataTree&&s?e.modules.dataTree.controlEl:!1,branchEl:e.modules.dataTree&&s?e.modules.dataTree.branchEl:!1,parent:e.modules.dataTree?e.modules.dataTree.parent:!1,children:s}}reinitializeRowChildren(e){var t=this.getTreeChildren(e,!1,!0);t.forEach(function(i){i.reinitialize(!0)})}layoutRow(e){var t=this.elementField?e.getCell(this.elementField):e.getCells()[0],i=t.getElement(),s=e.modules.dataTree;s.branchEl&&(s.branchEl.parentNode&&s.branchEl.parentNode.removeChild(s.branchEl),s.branchEl=!1),s.controlEl&&(s.controlEl.parentNode&&s.controlEl.parentNode.removeChild(s.controlEl),s.controlEl=!1),this.generateControlElement(e,i),e.getElement().classList.add("tabulator-tree-level-"+s.index),s.index&&(this.branchEl?(s.branchEl=this.branchEl.cloneNode(!0),i.insertBefore(s.branchEl,i.firstChild),this.table.rtl?s.branchEl.style.marginRight=(s.branchEl.offsetWidth+s.branchEl.style.marginLeft)*(s.index-1)+s.index*this.indent+"px":s.branchEl.style.marginLeft=(s.branchEl.offsetWidth+s.branchEl.style.marginRight)*(s.index-1)+s.index*this.indent+"px"):this.table.rtl?i.style.paddingRight=parseInt(window.getComputedStyle(i,null).getPropertyValue("padding-right"))+s.index*this.indent+"px":i.style.paddingLeft=parseInt(window.getComputedStyle(i,null).getPropertyValue("padding-left"))+s.index*this.indent+"px")}generateControlElement(e,t){var i=e.modules.dataTree,s=i.controlEl;t=t||e.getCells()[0].getElement(),i.children!==!1&&(i.open?(i.controlEl=this.collapseEl.cloneNode(!0),i.controlEl.addEventListener("click",n=>{n.stopPropagation(),this.collapseRow(e)})):(i.controlEl=this.expandEl.cloneNode(!0),i.controlEl.addEventListener("click",n=>{n.stopPropagation(),this.expandRow(e)})),i.controlEl.addEventListener("mousedown",n=>{n.stopPropagation()}),s&&s.parentNode===t?s.parentNode.replaceChild(i.controlEl,s):t.insertBefore(i.controlEl,t.firstChild))}getRows(e){var t=[];return e.forEach((i,s)=>{var n,r;t.push(i),i instanceof S&&(i.create(),n=i.modules.dataTree,!n.index&&n.children!==!1&&(r=this.getChildren(i,!1,!0),r.forEach(o=>{o.create(),t.push(o)})))}),t}getChildren(e,t,i){var s=e.modules.dataTree,n=[],r=[];return s.children!==!1&&(s.open||t)&&(Array.isArray(s.children)||(s.children=this.generateChildren(e)),this.table.modExists("filter")&&this.table.options.dataTreeFilter?n=this.table.modules.filter.filter(s.children):n=s.children,this.table.modExists("sort")&&this.table.options.dataTreeSort&&this.table.modules.sort.sort(n,i),n.forEach(o=>{r.push(o);var a=this.getChildren(o,!1,!0);a.forEach(h=>{r.push(h)})})),r}generateChildren(e){var t=[],i=e.getData()[this.field];return Array.isArray(i)||(i=[i]),i.forEach(s=>{var n=new S(s||{},this.table.rowManager);n.create(),n.modules.dataTree.index=e.modules.dataTree.index+1,n.modules.dataTree.parent=e,n.modules.dataTree.children&&(n.modules.dataTree.open=this.startOpen(n.getComponent(),n.modules.dataTree.index)),t.push(n)}),t}expandRow(e,t){var i=e.modules.dataTree;i.children!==!1&&(i.open=!0,e.reinitialize(),this.refreshData(!0),this.dispatchExternal("dataTreeRowExpanded",e.getComponent(),e.modules.dataTree.index))}collapseRow(e){var t=e.modules.dataTree;t.children!==!1&&(t.open=!1,e.reinitialize(),this.refreshData(!0),this.dispatchExternal("dataTreeRowCollapsed",e.getComponent(),e.modules.dataTree.index))}toggleRow(e){var t=e.modules.dataTree;t.children!==!1&&(t.open?this.collapseRow(e):this.expandRow(e))}isRowExpanded(e){return e.modules.dataTree.open}getTreeParent(e){return e.modules.dataTree.parent?e.modules.dataTree.parent.getComponent():!1}getTreeParentRoot(e){return e.modules.dataTree&&e.modules.dataTree.parent?this.getTreeParentRoot(e.modules.dataTree.parent):e}getFilteredTreeChildren(e){var t=e.modules.dataTree,i=[],s;return t.children&&(Array.isArray(t.children)||(t.children=this.generateChildren(e)),this.table.modExists("filter")&&this.table.options.dataTreeFilter?s=this.table.modules.filter.filter(t.children):s=t.children,s.forEach(n=>{n instanceof S&&i.push(n)})),i}rowDelete(e){var t=e.modules.dataTree.parent,i;t&&(i=this.findChildIndex(e,t),i!==!1&&t.data[this.field].splice(i,1),t.data[this.field].length||delete t.data[this.field],this.initializeRow(t),this.layoutRow(t)),this.refreshData(!0)}addTreeChildRow(e,t,i,s){var n=!1;typeof t=="string"&&(t=JSON.parse(t)),Array.isArray(e.data[this.field])||(e.data[this.field]=[],e.modules.dataTree.open=this.startOpen(e.getComponent(),e.modules.dataTree.index)),typeof s<"u"&&(n=this.findChildIndex(s,e),n!==!1&&e.data[this.field].splice(i?n:n+1,0,t)),n===!1&&(i?e.data[this.field].unshift(t):e.data[this.field].push(t)),this.initializeRow(e),this.layoutRow(e),this.refreshData(!0)}findChildIndex(e,t){var i=!1;return typeof e=="object"?e instanceof S?i=e.data:e instanceof oe?i=e._getSelf().data:typeof HTMLElement<"u"&&e instanceof HTMLElement?t.modules.dataTree&&(i=t.modules.dataTree.children.find(s=>s instanceof S?s.element===e:!1),i&&(i=i.data)):e===null&&(i=!1):typeof e>"u"?i=!1:i=t.data[this.field].find(s=>s.data[this.table.options.index]==e),i&&(Array.isArray(t.data[this.field])&&(i=t.data[this.field].indexOf(i)),i==-1&&(i=!1)),i}getTreeChildren(e,t,i){var s=e.modules.dataTree,n=[];return s&&s.children&&(Array.isArray(s.children)||(s.children=this.generateChildren(e)),s.children.forEach(r=>{r instanceof S&&(n.push(t?r.getComponent():r),i&&this.getTreeChildren(r,t,i).forEach(o=>{n.push(o)}))})),n}getChildField(){return this.field}redrawNeeded(e){return(this.field?typeof e[this.field]<"u":!1)||(this.elementField?typeof e[this.elementField]<"u":!1)}}b(Ze,"moduleName","dataTree");function Vt(l,e={},t){var i=e.delimiter?e.delimiter:",",s=[],n=[];l.forEach(r=>{var o=[];switch(r.type){case"group":console.warn("Download Warning - CSV downloader cannot process row groups");break;case"calc":console.warn("Download Warning - CSV downloader cannot process column calculations");break;case"header":r.columns.forEach((a,h)=>{a&&a.depth===1&&(n[h]=typeof a.value>"u"||a.value===null?"":'"'+String(a.value).split('"').join('""')+'"')});break;case"row":r.columns.forEach(a=>{if(a){switch(typeof a.value){case"object":a.value=a.value!==null?JSON.stringify(a.value):"";break;case"undefined":a.value="";break}o.push('"'+String(a.value).split('"').join('""')+'"')}}),s.push(o.join(i));break}}),n.length&&s.unshift(n.join(i)),s=s.join(` +`),e.bom&&(s="\uFEFF"+s),t(s,"text/csv")}function It(l,e,t){var i=[];l.forEach(s=>{var n={};switch(s.type){case"header":break;case"group":console.warn("Download Warning - JSON downloader cannot process row groups");break;case"calc":console.warn("Download Warning - JSON downloader cannot process column calculations");break;case"row":s.columns.forEach(r=>{r&&(n[r.component.getTitleDownload()||r.component.getField()]=r.value)}),i.push(n);break}}),i=JSON.stringify(i,null," "),t(i,"application/json")}function Nt(l,e={},t){var i=[],s=[],n={},r=e.rowGroupStyles||{fontStyle:"bold",fontSize:12,cellPadding:6,fillColor:220},o=e.rowCalcStyles||{fontStyle:"bold",fontSize:10,cellPadding:4,fillColor:232},a=e.jsPDF||{},h=e.title?e.title:"";a.orientation||(a.orientation=e.orientation||"landscape"),a.unit||(a.unit="pt"),l.forEach(c=>{switch(c.type){case"header":i.push(d(c));break;case"group":s.push(d(c,r));break;case"calc":s.push(d(c,o));break;case"row":s.push(d(c));break}});function d(c,f){var g=[];return c.columns.forEach(p=>{var v;if(p){switch(typeof p.value){case"object":p.value=p.value!==null?JSON.stringify(p.value):"";break;case"undefined":p.value="";break}v={content:p.value,colSpan:p.width,rowSpan:p.height},f&&(v.styles=f),g.push(v)}}),g}var u=new jspdf.jsPDF(a);e.autoTable&&(typeof e.autoTable=="function"?n=e.autoTable(u)||{}:n=e.autoTable),h&&(n.didDrawPage=function(c){u.text(h,40,30)}),n.head=i,n.body=s,u.autoTable(n),e.documentProcessing&&e.documentProcessing(u),t(u.output("arraybuffer"),"application/pdf")}function Wt(l,e,t){var i=this,s=e.sheetName||"Sheet1",n=XLSX.utils.book_new(),r=new M(this),o="compress"in e?e.compress:!0,a=e.writeOptions||{bookType:"xlsx",bookSST:!0,compression:o},h;a.type="binary",n.SheetNames=[],n.Sheets={};function d(){var f=[],g=[],p={},v={s:{c:0,r:0},e:{c:l[0]?l[0].columns.reduce((m,C)=>m+(C&&C.width?C.width:1),0):0,r:l.length}};return l.forEach((m,C)=>{var T=[];m.columns.forEach(function(y,k){y?(T.push(!(y.value instanceof Date)&&typeof y.value=="object"?JSON.stringify(y.value):y.value),(y.width>1||y.height>-1)&&(y.height>1||y.width>1)&&g.push({s:{r:C,c:k},e:{r:C+y.height-1,c:k+y.width-1}})):T.push("")}),f.push(T)}),XLSX.utils.sheet_add_aoa(p,f),p["!ref"]=XLSX.utils.encode_range(v),g.length&&(p["!merges"]=g),p}if(e.sheetOnly){t(d());return}if(e.sheets)for(var u in e.sheets)e.sheets[u]===!0?(n.SheetNames.push(u),n.Sheets[u]=d()):(n.SheetNames.push(u),r.commsSend(e.sheets[u],"download","intercept",{type:"xlsx",options:{sheetOnly:!0},active:i.active,intercept:function(f){n.Sheets[u]=f}}));else n.SheetNames.push(s),n.Sheets[s]=d();e.documentProcessing&&(n=e.documentProcessing(n));function c(f){for(var g=new ArrayBuffer(f.length),p=new Uint8Array(g),v=0;v!=f.length;++v)p[v]=f.charCodeAt(v)&255;return g}h=XLSX.write(n,a),t(c(h),"application/octet-stream")}function Gt(l,e,t){this.modExists("export",!0)&&t(this.modules.export.generateHTMLTable(l),"text/html")}function jt(l,e,t){const i=[];l.forEach(s=>{const n={};switch(s.type){case"header":break;case"group":console.warn("Download Warning - JSON downloader cannot process row groups");break;case"calc":console.warn("Download Warning - JSON downloader cannot process column calculations");break;case"row":s.columns.forEach(r=>{r&&(n[r.component.getTitleDownload()||r.component.getField()]=r.value)}),i.push(JSON.stringify(n));break}}),t(i.join(` +`),"application/x-ndjson")}var Ut={csv:Vt,json:It,jsonLines:jt,pdf:Nt,xlsx:Wt,html:Gt};const q=class q extends w{constructor(e){super(e),this.registerTableOption("downloadEncoder",function(t,i){return new Blob([t],{type:i})}),this.registerTableOption("downloadConfig",{}),this.registerTableOption("downloadRowRange","active"),this.registerColumnOption("download"),this.registerColumnOption("titleDownload")}initialize(){this.deprecatedOptionsCheck(),this.registerTableFunction("download",this.download.bind(this)),this.registerTableFunction("downloadToTab",this.downloadToTab.bind(this))}deprecatedOptionsCheck(){}downloadToTab(e,t,i,s){this.download(e,t,i,s,!0)}download(e,t,i,s,n){var r=!1;function o(h,d){n?n===!0?this.triggerDownload(h,d,e,t,!0):n(h):this.triggerDownload(h,d,e,t)}if(typeof e=="function"?r=e:q.downloaders[e]?r=q.downloaders[e]:console.warn("Download Error - No such download type found: ",e),r){var a=this.generateExportList(s);r.call(this.table,a,i||{},o.bind(this))}}generateExportList(e){var t=this.table.modules.export.generateExportList(this.table.options.downloadConfig,!1,e||this.table.options.downloadRowRange,"download"),i=this.table.options.groupHeaderDownload;return i&&!Array.isArray(i)&&(i=[i]),t.forEach(s=>{var n;s.type==="group"&&(n=s.columns[0],i&&i[s.indent]&&(n.value=i[s.indent](n.value,s.component._group.getRowCount(),s.component._group.getData(),s.component)))}),t}triggerDownload(e,t,i,s,n){var r=document.createElement("a"),o=this.table.options.downloadEncoder(e,t);o&&(n?window.open(window.URL.createObjectURL(o)):(s=s||"Tabulator."+(typeof i=="function"?"txt":i),navigator.msSaveOrOpenBlob?navigator.msSaveOrOpenBlob(o,s):(r.setAttribute("href",window.URL.createObjectURL(o)),r.setAttribute("download",s),r.style.display="none",document.body.appendChild(r),r.click(),document.body.removeChild(r))),this.dispatchExternal("downloadComplete"))}commsReceived(e,t,i){switch(t){case"intercept":this.download(i.type,"",i.options,i.active,i.intercept);break}}};b(q,"moduleName","download"),b(q,"downloaders",Ut);let ve=q;function ae(l,e){var t=e.mask,i=typeof e.maskLetterChar<"u"?e.maskLetterChar:"A",s=typeof e.maskNumberChar<"u"?e.maskNumberChar:"9",n=typeof e.maskWildcardChar<"u"?e.maskWildcardChar:"*";function r(o){var a=t[o];typeof a<"u"&&a!==n&&a!==i&&a!==s&&(l.value=l.value+""+a,r(o+1))}l.addEventListener("keydown",o=>{var a=l.value.length,h=o.key;if(o.keyCode>46&&!o.ctrlKey&&!o.metaKey){if(a>=t.length)return o.preventDefault(),o.stopPropagation(),!1;switch(t[a]){case i:if(h.toUpperCase()==h.toLowerCase())return o.preventDefault(),o.stopPropagation(),!1;break;case s:if(isNaN(h))return o.preventDefault(),o.stopPropagation(),!1;break;case n:break;default:if(h!==t[a])return o.preventDefault(),o.stopPropagation(),!1}}}),l.addEventListener("keyup",o=>{o.keyCode>46&&e.maskAutoFill&&r(l.value.length)}),l.placeholder||(l.placeholder=t),e.maskAutoFill&&r(l.value.length)}function Xt(l,e,t,i,s){var n=l.getValue(),r=document.createElement("input");if(r.setAttribute("type",s.search?"search":"text"),r.style.padding="4px",r.style.width="100%",r.style.boxSizing="border-box",s.elementAttributes&&typeof s.elementAttributes=="object")for(let a in s.elementAttributes)a.charAt(0)=="+"?(a=a.slice(1),r.setAttribute(a,r.getAttribute(a)+s.elementAttributes["+"+a])):r.setAttribute(a,s.elementAttributes[a]);r.value=typeof n<"u"?n:"",e(function(){l.getType()==="cell"&&(r.focus({preventScroll:!0}),r.style.height="100%",s.selectContents&&r.select())});function o(a){(n===null||typeof n>"u")&&r.value!==""||r.value!==n?t(r.value)&&(n=r.value):i()}return r.addEventListener("change",o),r.addEventListener("blur",o),r.addEventListener("keydown",function(a){switch(a.keyCode){case 13:o();break;case 27:i();break;case 35:case 36:a.stopPropagation();break}}),s.mask&&ae(r,s),r}function Jt(l,e,t,i,s){var n=l.getValue(),r=s.verticalNavigation||"hybrid",o=String(n!==null&&typeof n<"u"?n:""),a=document.createElement("textarea"),h=0;if(a.style.display="block",a.style.padding="2px",a.style.height="100%",a.style.width="100%",a.style.boxSizing="border-box",a.style.whiteSpace="pre-wrap",a.style.resize="none",s.elementAttributes&&typeof s.elementAttributes=="object")for(let u in s.elementAttributes)u.charAt(0)=="+"?(u=u.slice(1),a.setAttribute(u,a.getAttribute(u)+s.elementAttributes["+"+u])):a.setAttribute(u,s.elementAttributes[u]);a.value=o,e(function(){l.getType()==="cell"&&(a.focus({preventScroll:!0}),a.style.height="100%",a.scrollHeight,a.style.height=a.scrollHeight+"px",l.getRow().normalizeHeight(),s.selectContents&&a.select())});function d(u){(n===null||typeof n>"u")&&a.value!==""||a.value!==n?(t(a.value)&&(n=a.value),setTimeout(function(){l.getRow().normalizeHeight()},300)):i()}return a.addEventListener("change",d),a.addEventListener("blur",d),a.addEventListener("keyup",function(){a.style.height="";var u=a.scrollHeight;a.style.height=u+"px",u!=h&&(h=u,l.getRow().normalizeHeight())}),a.addEventListener("keydown",function(u){switch(u.keyCode){case 13:u.shiftKey&&s.shiftEnterSubmit&&d();break;case 27:i();break;case 38:(r=="editor"||r=="hybrid"&&a.selectionStart)&&(u.stopImmediatePropagation(),u.stopPropagation());break;case 40:(r=="editor"||r=="hybrid"&&a.selectionStart!==a.value.length)&&(u.stopImmediatePropagation(),u.stopPropagation());break;case 35:case 36:u.stopPropagation();break}}),s.mask&&ae(a,s),a}function Kt(l,e,t,i,s){var n=l.getValue(),r=s.verticalNavigation||"editor",o=document.createElement("input");if(o.setAttribute("type","number"),typeof s.max<"u"&&o.setAttribute("max",s.max),typeof s.min<"u"&&o.setAttribute("min",s.min),typeof s.step<"u"&&o.setAttribute("step",s.step),o.style.padding="4px",o.style.width="100%",o.style.boxSizing="border-box",s.elementAttributes&&typeof s.elementAttributes=="object")for(let d in s.elementAttributes)d.charAt(0)=="+"?(d=d.slice(1),o.setAttribute(d,o.getAttribute(d)+s.elementAttributes["+"+d])):o.setAttribute(d,s.elementAttributes[d]);o.value=n;var a=function(d){h()};e(function(){l.getType()==="cell"&&(o.removeEventListener("blur",a),o.focus({preventScroll:!0}),o.style.height="100%",o.addEventListener("blur",a),s.selectContents&&o.select())});function h(){var d=o.value;!isNaN(d)&&d!==""&&(d=Number(d)),d!==n?t(d)&&(n=d):i()}return o.addEventListener("keydown",function(d){switch(d.keyCode){case 13:h();break;case 27:i();break;case 38:case 40:r=="editor"&&(d.stopImmediatePropagation(),d.stopPropagation());break;case 35:case 36:d.stopPropagation();break}}),s.mask&&ae(o,s),o}function qt(l,e,t,i,s){var n=l.getValue(),r=document.createElement("input");if(r.setAttribute("type","range"),typeof s.max<"u"&&r.setAttribute("max",s.max),typeof s.min<"u"&&r.setAttribute("min",s.min),typeof s.step<"u"&&r.setAttribute("step",s.step),r.style.padding="4px",r.style.width="100%",r.style.boxSizing="border-box",s.elementAttributes&&typeof s.elementAttributes=="object")for(let a in s.elementAttributes)a.charAt(0)=="+"?(a=a.slice(1),r.setAttribute(a,r.getAttribute(a)+s.elementAttributes["+"+a])):r.setAttribute(a,s.elementAttributes[a]);r.value=n,e(function(){l.getType()==="cell"&&(r.focus({preventScroll:!0}),r.style.height="100%")});function o(){var a=r.value;!isNaN(a)&&a!==""&&(a=Number(a)),a!=n?t(a)&&(n=a):i()}return r.addEventListener("blur",function(a){o()}),r.addEventListener("keydown",function(a){switch(a.keyCode){case 13:o();break;case 27:i();break}}),r}function Yt(l,e,t,i,s){var n=s.format,r=s.verticalNavigation||"editor",o=n?window.DateTime||luxon.DateTime:null,a=l.getValue(),h=document.createElement("input");function d(c){var f;return o.isDateTime(c)?f=c:n==="iso"?f=o.fromISO(String(c)):f=o.fromFormat(String(c),n),f.toFormat("yyyy-MM-dd")}if(h.type="date",h.style.padding="4px",h.style.width="100%",h.style.boxSizing="border-box",s.max&&h.setAttribute("max",n?d(s.max):s.max),s.min&&h.setAttribute("min",n?d(s.min):s.min),s.elementAttributes&&typeof s.elementAttributes=="object")for(let c in s.elementAttributes)c.charAt(0)=="+"?(c=c.slice(1),h.setAttribute(c,h.getAttribute(c)+s.elementAttributes["+"+c])):h.setAttribute(c,s.elementAttributes[c]);a=typeof a<"u"?a:"",n&&(o?a=d(a):console.error("Editor Error - 'date' editor 'format' param is dependant on luxon.js")),h.value=a,e(function(){l.getType()==="cell"&&(h.focus({preventScroll:!0}),h.style.height="100%",s.selectContents&&h.select())});function u(){var c=h.value,f;if((a===null||typeof a>"u")&&c!==""||c!==a){if(c&&n)switch(f=o.fromFormat(String(c),"yyyy-MM-dd"),n){case!0:c=f;break;case"iso":c=f.toISO();break;default:c=f.toFormat(n)}t(c)&&(a=h.value)}else i()}return h.addEventListener("blur",function(c){(c.relatedTarget||c.rangeParent||c.explicitOriginalTarget!==h)&&u()}),h.addEventListener("keydown",function(c){switch(c.keyCode){case 13:u();break;case 27:i();break;case 35:case 36:c.stopPropagation();break;case 38:case 40:r=="editor"&&(c.stopImmediatePropagation(),c.stopPropagation());break}}),h}function $t(l,e,t,i,s){var n=s.format,r=s.verticalNavigation||"editor",o=n?window.DateTime||luxon.DateTime:null,a,h=l.getValue(),d=document.createElement("input");if(d.type="time",d.style.padding="4px",d.style.width="100%",d.style.boxSizing="border-box",s.elementAttributes&&typeof s.elementAttributes=="object")for(let c in s.elementAttributes)c.charAt(0)=="+"?(c=c.slice(1),d.setAttribute(c,d.getAttribute(c)+s.elementAttributes["+"+c])):d.setAttribute(c,s.elementAttributes[c]);h=typeof h<"u"?h:"",n&&(o?(o.isDateTime(h)?a=h:n==="iso"?a=o.fromISO(String(h)):a=o.fromFormat(String(h),n),h=a.toFormat("HH:mm")):console.error("Editor Error - 'date' editor 'format' param is dependant on luxon.js")),d.value=h,e(function(){l.getType()=="cell"&&(d.focus({preventScroll:!0}),d.style.height="100%",s.selectContents&&d.select())});function u(){var c=d.value,f;if((h===null||typeof h>"u")&&c!==""||c!==h){if(c&&n)switch(f=o.fromFormat(String(c),"hh:mm"),n){case!0:c=f;break;case"iso":c=f.toISO();break;default:c=f.toFormat(n)}t(c)&&(h=d.value)}else i()}return d.addEventListener("blur",function(c){(c.relatedTarget||c.rangeParent||c.explicitOriginalTarget!==d)&&u()}),d.addEventListener("keydown",function(c){switch(c.keyCode){case 13:u();break;case 27:i();break;case 35:case 36:c.stopPropagation();break;case 38:case 40:r=="editor"&&(c.stopImmediatePropagation(),c.stopPropagation());break}}),d}function Qt(l,e,t,i,s){var n=s.format,r=s.verticalNavigation||"editor",o=n?window.DateTime||luxon.DateTime:null,a,h=l.getValue(),d=document.createElement("input");if(d.type="datetime-local",d.style.padding="4px",d.style.width="100%",d.style.boxSizing="border-box",s.elementAttributes&&typeof s.elementAttributes=="object")for(let c in s.elementAttributes)c.charAt(0)=="+"?(c=c.slice(1),d.setAttribute(c,d.getAttribute(c)+s.elementAttributes["+"+c])):d.setAttribute(c,s.elementAttributes[c]);h=typeof h<"u"?h:"",n&&(o?(o.isDateTime(h)?a=h:n==="iso"?a=o.fromISO(String(h)):a=o.fromFormat(String(h),n),h=a.toFormat("yyyy-MM-dd")+"T"+a.toFormat("HH:mm")):console.error("Editor Error - 'date' editor 'format' param is dependant on luxon.js")),d.value=h,e(function(){l.getType()==="cell"&&(d.focus({preventScroll:!0}),d.style.height="100%",s.selectContents&&d.select())});function u(){var c=d.value,f;if((h===null||typeof h>"u")&&c!==""||c!==h){if(c&&n)switch(f=o.fromISO(String(c)),n){case!0:c=f;break;case"iso":c=f.toISO();break;default:c=f.toFormat(n)}t(c)&&(h=d.value)}else i()}return d.addEventListener("blur",function(c){(c.relatedTarget||c.rangeParent||c.explicitOriginalTarget!==d)&&u()}),d.addEventListener("keydown",function(c){switch(c.keyCode){case 13:u();break;case 27:i();break;case 35:case 36:c.stopPropagation();break;case 38:case 40:r=="editor"&&(c.stopImmediatePropagation(),c.stopPropagation());break}}),d}let Zt=class{constructor(e,t,i,s,n,r){this.edit=e,this.table=e.table,this.cell=t,this.params=this._initializeParams(r),this.data=[],this.displayItems=[],this.currentItems=[],this.focusedItem=null,this.input=this._createInputElement(),this.listEl=this._createListElement(),this.initialValues=null,this.isFilter=t.getType()==="header",this.filterTimeout=null,this.filtered=!1,this.typing=!1,this.values=[],this.popup=null,this.listIteration=0,this.lastAction="",this.filterTerm="",this.blurable=!0,this.actions={success:s,cancel:n},this._deprecatedOptionsCheck(),this._initializeValue(),i(this._onRendered.bind(this))}_deprecatedOptionsCheck(){}_initializeValue(){var e=this.cell.getValue();typeof e>"u"&&typeof this.params.defaultValue<"u"&&(e=this.params.defaultValue),this.initialValues=this.params.multiselect?e:[e],this.isFilter&&(this.input.value=this.initialValues?this.initialValues.join(","):"",this.headerFilterInitialListGen())}_onRendered(){var e=this.cell.getElement();function t(i){i.stopPropagation()}this.isFilter||(this.input.style.height="100%",this.input.focus({preventScroll:!0})),e.addEventListener("click",t),setTimeout(()=>{e.removeEventListener("click",t)},1e3),this.input.addEventListener("mousedown",this._preventPopupBlur.bind(this))}_createListElement(){var e=document.createElement("div");return e.classList.add("tabulator-edit-list"),e.addEventListener("mousedown",this._preventBlur.bind(this)),e.addEventListener("keydown",this._inputKeyDown.bind(this)),e}_setListWidth(){var e=this.isFilter?this.input:this.cell.getElement();this.listEl.style.minWidth=e.offsetWidth+"px",this.params.maxWidth&&(this.params.maxWidth===!0?this.listEl.style.maxWidth=e.offsetWidth+"px":typeof this.params.maxWidth=="number"?this.listEl.style.maxWidth=this.params.maxWidth+"px":this.listEl.style.maxWidth=this.params.maxWidth)}_createInputElement(){var e=this.params.elementAttributes,t=document.createElement("input");if(t.setAttribute("type",this.params.clearable?"search":"text"),t.style.padding="4px",t.style.width="100%",t.style.boxSizing="border-box",this.params.autocomplete||(t.style.cursor="default",t.style.caretColor="transparent"),e&&typeof e=="object")for(let i in e)i.charAt(0)=="+"?(i=i.slice(1),t.setAttribute(i,t.getAttribute(i)+e["+"+i])):t.setAttribute(i,e[i]);return this.params.mask&&ae(t,this.params),this._bindInputEvents(t),t}_initializeParams(e){var t=["values","valuesURL","valuesLookup"],i;return e=Object.assign({},e),e.verticalNavigation=e.verticalNavigation||"editor",e.placeholderLoading=typeof e.placeholderLoading>"u"?"Searching ...":e.placeholderLoading,e.placeholderEmpty=typeof e.placeholderEmpty>"u"?"No Results Found":e.placeholderEmpty,e.filterDelay=typeof e.filterDelay>"u"?300:e.filterDelay,e.emptyValue=Object.keys(e).includes("emptyValue")?e.emptyValue:"",i=Object.keys(e).filter(s=>t.includes(s)).length,i?i>1&&console.warn("list editor config error - only one of the values, valuesURL, or valuesLookup options can be set on the same editor"):console.warn("list editor config error - either the values, valuesURL, or valuesLookup option must be set"),e.autocomplete?e.multiselect&&(e.multiselect=!1,console.warn("list editor config error - multiselect option is not available when autocomplete is enabled")):(e.freetext&&(e.freetext=!1,console.warn("list editor config error - freetext option is only available when autocomplete is enabled")),e.filterFunc&&(e.filterFunc=!1,console.warn("list editor config error - filterFunc option is only available when autocomplete is enabled")),e.filterRemote&&(e.filterRemote=!1,console.warn("list editor config error - filterRemote option is only available when autocomplete is enabled")),e.mask&&(e.mask=!1,console.warn("list editor config error - mask option is only available when autocomplete is enabled")),e.allowEmpty&&(e.allowEmpty=!1,console.warn("list editor config error - allowEmpty option is only available when autocomplete is enabled")),e.listOnEmpty&&(e.listOnEmpty=!1,console.warn("list editor config error - listOnEmpty option is only available when autocomplete is enabled"))),e.filterRemote&&!(typeof e.valuesLookup=="function"||e.valuesURL)&&(e.filterRemote=!1,console.warn("list editor config error - filterRemote option should only be used when values list is populated from a remote source")),e}_bindInputEvents(e){e.addEventListener("focus",this._inputFocus.bind(this)),e.addEventListener("click",this._inputClick.bind(this)),e.addEventListener("blur",this._inputBlur.bind(this)),e.addEventListener("keydown",this._inputKeyDown.bind(this)),e.addEventListener("search",this._inputSearch.bind(this)),this.params.autocomplete&&e.addEventListener("keyup",this._inputKeyUp.bind(this))}_inputFocus(e){this.rebuildOptionsList()}_filter(){this.params.filterRemote?(clearTimeout(this.filterTimeout),this.filterTimeout=setTimeout(()=>{this.rebuildOptionsList()},this.params.filterDelay)):this._filterList()}_inputClick(e){e.stopPropagation()}_inputBlur(e){this.blurable&&(this.popup?this.popup.hide():this._resolveValue(!0))}_inputSearch(){this._clearChoices()}_inputKeyDown(e){switch(e.keyCode){case 38:this._keyUp(e);break;case 40:this._keyDown(e);break;case 37:case 39:this._keySide(e);break;case 13:this._keyEnter();break;case 27:this._keyEsc();break;case 36:case 35:this._keyHomeEnd(e);break;case 9:this._keyTab(e);break;default:this._keySelectLetter(e)}}_inputKeyUp(e){switch(e.keyCode){case 38:case 37:case 39:case 40:case 13:case 27:break;default:this._keyAutoCompLetter(e)}}_preventPopupBlur(){this.popup&&this.popup.blockHide(),setTimeout(()=>{this.popup&&this.popup.restoreHide()},10)}_preventBlur(){this.blurable=!1,setTimeout(()=>{this.blurable=!0},10)}_keyTab(e){this.params.autocomplete&&this.lastAction==="typing"?this._resolveValue(!0):this.focusedItem&&this._chooseItem(this.focusedItem,!0)}_keyUp(e){var t=this.displayItems.indexOf(this.focusedItem);(this.params.verticalNavigation=="editor"||this.params.verticalNavigation=="hybrid"&&t)&&(e.stopImmediatePropagation(),e.stopPropagation(),e.preventDefault(),t>0&&this._focusItem(this.displayItems[t-1]))}_keyDown(e){var t=this.displayItems.indexOf(this.focusedItem);(this.params.verticalNavigation=="editor"||this.params.verticalNavigation=="hybrid"&&t=38&&e.keyCode<=90&&this._scrollToValue(e.keyCode))}_keyAutoCompLetter(e){this._filter(),this.lastAction="typing",this.typing=!0}_scrollToValue(e){clearTimeout(this.filterTimeout);var t=String.fromCharCode(e).toLowerCase();this.filterTerm+=t.toLowerCase();var i=this.displayItems.find(s=>typeof s.label<"u"&&s.label.toLowerCase().startsWith(this.filterTerm));i&&this._focusItem(i),this.filterTimeout=setTimeout(()=>{this.filterTerm=""},800)}_focusItem(e){this.lastAction="focus",this.focusedItem&&this.focusedItem.element&&this.focusedItem.element.classList.remove("focused"),this.focusedItem=e,e&&e.element&&(e.element.classList.add("focused"),e.element.scrollIntoView({behavior:"smooth",block:"nearest",inline:"start"}))}headerFilterInitialListGen(){this._generateOptions(!0)}rebuildOptionsList(){this._generateOptions().then(this._sortOptions.bind(this)).then(this._buildList.bind(this)).then(this._showList.bind(this)).catch(e=>{Number.isInteger(e)||console.error("List generation error",e)})}_filterList(){this._buildList(this._filterOptions()),this._showList()}_generateOptions(e){var t=[],i=++this.listIteration;return this.filtered=!1,this.params.values?t=this.params.values:this.params.valuesURL?t=this._ajaxRequest(this.params.valuesURL,this.input.value):typeof this.params.valuesLookup=="function"?t=this.params.valuesLookup(this.cell,this.input.value):this.params.valuesLookup&&(t=this._uniqueColumnValues(this.params.valuesLookupField)),t instanceof Promise?(e||this._addPlaceholder(this.params.placeholderLoading),t.then().then(s=>this.listIteration===i?this._parseList(s):Promise.reject(i))):Promise.resolve(this._parseList(t))}_addPlaceholder(e){var t=document.createElement("div");typeof e=="function"&&(e=e(this.cell.getComponent(),this.listEl)),e&&(this._clearList(),e instanceof HTMLElement?t=e:(t.classList.add("tabulator-edit-list-placeholder"),t.innerHTML=e),this.listEl.appendChild(t),this._showList())}_ajaxRequest(e,t){var i=this.params.filterRemote?{term:t}:{};return e=qe(e,{},i),fetch(e).then(s=>s.ok?s.json().catch(n=>(console.warn("List Ajax Load Error - Invalid JSON returned",n),Promise.reject(n))):(console.error("List Ajax Load Error - Connection Error: "+s.status,s.statusText),Promise.reject(s))).catch(s=>(console.error("List Ajax Load Error - Connection Error: ",s),Promise.reject(s)))}_uniqueColumnValues(e){var t={},i=this.table.getData(this.params.valuesLookup),s;return e?s=this.table.columnManager.getColumnByField(e):s=this.cell.getColumn()._getSelf(),s?i.forEach(n=>{var r=s.getFieldValue(n);r!==null&&typeof r<"u"&&r!==""&&(t[r]=!0)}):(console.warn("unable to find matching column to create select lookup list:",e),t=[]),Object.keys(t)}_parseList(e){var t=[];return Array.isArray(e)||(e=Object.entries(e).map(([i,s])=>({label:s,value:i}))),e.forEach(i=>{typeof i!="object"&&(i={label:i,value:i}),this._parseListItem(i,t,0)}),!this.currentItems.length&&this.params.freetext&&(this.input.value=this.initialValues,this.typing=!0,this.lastAction="typing"),this.data=t,t}_parseListItem(e,t,i){var s={};e.options?s=this._parseListGroup(e,i+1):(s={label:e.label,value:e.value,itemParams:e.itemParams,elementAttributes:e.elementAttributes,element:!1,selected:!1,visible:!0,level:i,original:e},this.initialValues&&this.initialValues.indexOf(e.value)>-1&&this._chooseItem(s,!0)),t.push(s)}_parseListGroup(e,t){var i={label:e.label,group:!0,itemParams:e.itemParams,elementAttributes:e.elementAttributes,element:!1,visible:!0,level:t,options:[],original:e};return e.options.forEach(s=>{this._parseListItem(s,i.options,t)}),i}_sortOptions(e){var t;return this.params.sort&&(t=typeof this.params.sort=="function"?this.params.sort:this._defaultSortFunction.bind(this),this._sortGroup(t,e)),e}_sortGroup(e,t){t.sort((i,s)=>e(i.label,s.label,i.value,s.value,i.original,s.original)),t.forEach(i=>{i.group&&this._sortGroup(e,i.options)})}_defaultSortFunction(e,t){var i,s,n,r,o=0,a,h=/(\d+)|(\D+)/g,d=/\d/,u=0;if(this.params.sort==="desc"&&([e,t]=[t,e]),!e&&e!==0)u=!t&&t!==0?0:-1;else if(!t&&t!==0)u=1;else{if(isFinite(e)&&isFinite(t))return e-t;if(i=String(e).toLowerCase(),s=String(t).toLowerCase(),i===s)return 0;if(!(d.test(i)&&d.test(s)))return i>s?1:-1;for(i=i.match(h),s=s.match(h),a=i.length>s.length?s.length:i.length;or?1:-1;return i.length>s.length}return u}_filterOptions(){var e=this.params.filterFunc||this._defaultFilterFunc,t=this.input.value;return t?(this.filtered=!0,this.data.forEach(i=>{this._filterItem(e,t,i)})):this.filtered=!1,this.data}_filterItem(e,t,i){var s=!1;return i.group?(i.options.forEach(n=>{this._filterItem(e,t,n)&&(s=!0)}),i.visible=s):i.visible=e(t,i.label,i.value,i.original),i.visible}_defaultFilterFunc(e,t,i,s){return e=String(e).toLowerCase(),t!==null&&typeof t<"u"&&(String(t).toLowerCase().indexOf(e)>-1||String(i).toLowerCase().indexOf(e)>-1)}_clearList(){for(;this.listEl.firstChild;)this.listEl.removeChild(this.listEl.firstChild);this.displayItems=[]}_buildList(e){this._clearList(),e.forEach(t=>{this._buildItem(t)}),this.displayItems.length||this._addPlaceholder(this.params.placeholderEmpty)}_buildItem(e){var t=e.element,i;if(!this.filtered||e.visible){if(!t){if(t=document.createElement("div"),t.tabIndex=0,i=this.params.itemFormatter?this.params.itemFormatter(e.label,e.value,e.original,t):e.label,i instanceof HTMLElement?t.appendChild(i):t.innerHTML=i,e.group?t.classList.add("tabulator-edit-list-group"):t.classList.add("tabulator-edit-list-item"),t.classList.add("tabulator-edit-list-group-level-"+e.level),e.elementAttributes&&typeof e.elementAttributes=="object")for(let s in e.elementAttributes)s.charAt(0)=="+"?(s=s.slice(1),t.setAttribute(s,this.input.getAttribute(s)+e.elementAttributes["+"+s])):t.setAttribute(s,e.elementAttributes[s]);e.group?t.addEventListener("click",this._groupClick.bind(this,e)):t.addEventListener("click",this._itemClick.bind(this,e)),t.addEventListener("mousedown",this._preventBlur.bind(this)),e.element=t}this._styleItem(e),this.listEl.appendChild(t),e.group?e.options.forEach(s=>{this._buildItem(s)}):this.displayItems.push(e)}}_showList(){var e=this.popup&&this.popup.isVisible();if(this.input.parentNode){if(this.params.autocomplete&&this.input.value===""&&!this.params.listOnEmpty){this.popup&&this.popup.hide(!0);return}this._setListWidth(),this.popup||(this.popup=this.edit.popup(this.listEl)),this.popup.show(this.cell.getElement(),"bottom"),e||setTimeout(()=>{this.popup.hideOnBlur(this._resolveValue.bind(this,!0))},10)}}_styleItem(e){e&&e.element&&(e.selected?e.element.classList.add("active"):e.element.classList.remove("active"))}_itemClick(e,t){t.stopPropagation(),this._chooseItem(e)}_groupClick(e,t){t.stopPropagation()}_cancel(){this.popup.hide(!0),this.actions.cancel()}_clearChoices(){this.typing=!0,this.currentItems.forEach(e=>{e.selected=!1,this._styleItem(e)}),this.currentItems=[],this.focusedItem=null}_chooseItem(e,t){var i;this.typing=!1,this.params.multiselect?(i=this.currentItems.indexOf(e),i>-1?(this.currentItems.splice(i,1),e.selected=!1):(this.currentItems.push(e),e.selected=!0),this.input.value=this.currentItems.map(s=>s.label).join(","),this._styleItem(e)):(this.currentItems=[e],e.selected=!0,this.input.value=e.label,this._styleItem(e),t||this._resolveValue()),this._focusItem(e)}_resolveValue(e){var t,i;if(this.popup&&this.popup.hide(!0),this.params.multiselect)t=this.currentItems.map(s=>s.value);else if(e&&this.params.autocomplete&&this.typing)if(this.params.freetext||this.params.allowEmpty&&this.input.value==="")t=this.input.value;else{this.actions.cancel();return}else this.currentItems[0]?t=this.currentItems[0].value:(i=Array.isArray(this.initialValues)?this.initialValues[0]:this.initialValues,i===null||typeof i>"u"||i===""?t=i:t=this.params.emptyValue);t===""&&(t=this.params.emptyValue),this.actions.success(t),this.isFilter&&(this.initialValues=t&&!Array.isArray(t)?[t]:t,this.currentItems=[])}};function ei(l,e,t,i,s){var n=new Zt(this,l,e,t,i,s);return n.input}function ti(l,e,t,i,s){var n=this,r=l.getElement(),o=l.getValue(),a=r.getElementsByTagName("svg").length||5,h=r.getElementsByTagName("svg")[0]?r.getElementsByTagName("svg")[0].getAttribute("width"):14,d=[],u=document.createElement("div"),c=document.createElementNS("http://www.w3.org/2000/svg","svg");function f(m){d.forEach(function(C,T){T'):(n.table.browser=="ie"?C.setAttribute("class","tabulator-star-inactive"):C.classList.replace("tabulator-star-active","tabulator-star-inactive"),C.innerHTML='')})}function g(m){var C=document.createElement("span"),T=c.cloneNode(!0);d.push(T),C.addEventListener("mouseenter",function(y){y.stopPropagation(),y.stopImmediatePropagation(),f(m)}),C.addEventListener("mousemove",function(y){y.stopPropagation(),y.stopImmediatePropagation()}),C.addEventListener("click",function(y){y.stopPropagation(),y.stopImmediatePropagation(),t(m),r.blur()}),C.appendChild(T),u.appendChild(C)}function p(m){o=m,f(m)}if(r.style.whiteSpace="nowrap",r.style.overflow="hidden",r.style.textOverflow="ellipsis",u.style.verticalAlign="middle",u.style.display="inline-block",u.style.padding="4px",c.setAttribute("width",h),c.setAttribute("height",h),c.setAttribute("viewBox","0 0 512 512"),c.setAttribute("xml:space","preserve"),c.style.padding="0 1px",s.elementAttributes&&typeof s.elementAttributes=="object")for(let m in s.elementAttributes)m.charAt(0)=="+"?(m=m.slice(1),u.setAttribute(m,u.getAttribute(m)+s.elementAttributes["+"+m])):u.setAttribute(m,s.elementAttributes[m]);for(var v=1;v<=a;v++)g(v);return o=Math.min(parseInt(o),a),f(o),u.addEventListener("mousemove",function(m){f(0)}),u.addEventListener("click",function(m){t(0)}),r.addEventListener("blur",function(m){i()}),r.addEventListener("keydown",function(m){switch(m.keyCode){case 39:p(o+1);break;case 37:p(o-1);break;case 13:t(o);break;case 27:i();break}}),u}function ii(l,e,t,i,s){var n=l.getElement(),r=typeof s.max>"u"?n.getElementsByTagName("div")[0]&&n.getElementsByTagName("div")[0].getAttribute("max")||100:s.max,o=typeof s.min>"u"?n.getElementsByTagName("div")[0]&&n.getElementsByTagName("div")[0].getAttribute("min")||0:s.min,a=(r-o)/100,h=l.getValue()||0,d=document.createElement("div"),u=document.createElement("div"),c,f;function g(){var p=window.getComputedStyle(n,null),v=a*Math.round(u.offsetWidth/((n.clientWidth-parseInt(p.getPropertyValue("padding-left"))-parseInt(p.getPropertyValue("padding-right")))/100))+o;t(v),n.setAttribute("aria-valuenow",v),n.setAttribute("aria-label",h)}if(d.style.position="absolute",d.style.right="0",d.style.top="0",d.style.bottom="0",d.style.width="5px",d.classList.add("tabulator-progress-handle"),u.style.display="inline-block",u.style.position="relative",u.style.height="100%",u.style.backgroundColor="#488CE9",u.style.maxWidth="100%",u.style.minWidth="0%",s.elementAttributes&&typeof s.elementAttributes=="object")for(let p in s.elementAttributes)p.charAt(0)=="+"?(p=p.slice(1),u.setAttribute(p,u.getAttribute(p)+s.elementAttributes["+"+p])):u.setAttribute(p,s.elementAttributes[p]);return n.style.padding="4px 4px",h=Math.min(parseFloat(h),r),h=Math.max(parseFloat(h),o),h=Math.round((h-o)/a),u.style.width=h+"%",n.setAttribute("aria-valuemin",o),n.setAttribute("aria-valuemax",r),u.appendChild(d),d.addEventListener("mousedown",function(p){c=p.screenX,f=u.offsetWidth}),d.addEventListener("mouseover",function(){d.style.cursor="ew-resize"}),n.addEventListener("mousemove",function(p){c&&(u.style.width=f+p.screenX-c+"px")}),n.addEventListener("mouseup",function(p){c&&(p.stopPropagation(),p.stopImmediatePropagation(),c=!1,f=!1,g())}),n.addEventListener("keydown",function(p){switch(p.keyCode){case 39:p.preventDefault(),u.style.width=u.clientWidth+n.clientWidth/100+"px";break;case 37:p.preventDefault(),u.style.width=u.clientWidth-n.clientWidth/100+"px";break;case 9:case 13:g();break;case 27:i();break}}),n.addEventListener("blur",function(){i()}),u}function si(l,e,t,i,s){var n=l.getValue(),r=document.createElement("input"),o=s.tristate,a=typeof s.indeterminateValue>"u"?null:s.indeterminateValue,h=!1,d=Object.keys(s).includes("trueValue"),u=Object.keys(s).includes("falseValue");if(r.setAttribute("type","checkbox"),r.style.marginTop="5px",r.style.boxSizing="border-box",s.elementAttributes&&typeof s.elementAttributes=="object")for(let f in s.elementAttributes)f.charAt(0)=="+"?(f=f.slice(1),r.setAttribute(f,r.getAttribute(f)+s.elementAttributes["+"+f])):r.setAttribute(f,s.elementAttributes[f]);r.value=n,o&&(typeof n>"u"||n===a||n==="")&&(h=!0,r.indeterminate=!0),this.table.browser!="firefox"&&this.table.browser!="safari"&&e(function(){l.getType()==="cell"&&r.focus({preventScroll:!0})}),r.checked=d?n===s.trueValue:n===!0||n==="true"||n==="True"||n===1;function c(f){var g=r.checked;return d&&g?g=s.trueValue:u&&!g&&(g=s.falseValue),o?f?h?a:g:r.checked&&!h?(r.checked=!1,r.indeterminate=!0,h=!0,a):(h=!1,g):g}return r.addEventListener("change",function(f){t(c())}),r.addEventListener("blur",function(f){t(c(!0))}),r.addEventListener("keydown",function(f){f.keyCode==13&&t(c()),f.keyCode==27&&i()}),r}var ni={input:Xt,textarea:Jt,number:Kt,range:qt,date:Yt,time:$t,datetime:Qt,list:ei,star:ti,progress:ii,tickCross:si};const Z=class Z extends w{constructor(e){super(e),this.currentCell=!1,this.mouseClick=!1,this.recursionBlock=!1,this.invalidEdit=!1,this.editedCells=[],this.convertEmptyValues=!1,this.editors=Z.editors,this.registerTableOption("editTriggerEvent","focus"),this.registerTableOption("editorEmptyValue"),this.registerTableOption("editorEmptyValueFunc",this.emptyValueCheck.bind(this)),this.registerColumnOption("editable"),this.registerColumnOption("editor"),this.registerColumnOption("editorParams"),this.registerColumnOption("editorEmptyValue"),this.registerColumnOption("editorEmptyValueFunc"),this.registerColumnOption("cellEditing"),this.registerColumnOption("cellEdited"),this.registerColumnOption("cellEditCancelled"),this.registerTableFunction("getEditedCells",this.getEditedCells.bind(this)),this.registerTableFunction("clearCellEdited",this.clearCellEdited.bind(this)),this.registerTableFunction("navigatePrev",this.navigatePrev.bind(this)),this.registerTableFunction("navigateNext",this.navigateNext.bind(this)),this.registerTableFunction("navigateLeft",this.navigateLeft.bind(this)),this.registerTableFunction("navigateRight",this.navigateRight.bind(this)),this.registerTableFunction("navigateUp",this.navigateUp.bind(this)),this.registerTableFunction("navigateDown",this.navigateDown.bind(this)),this.registerComponentFunction("cell","isEdited",this.cellIsEdited.bind(this)),this.registerComponentFunction("cell","clearEdited",this.clearEdited.bind(this)),this.registerComponentFunction("cell","edit",this.editCell.bind(this)),this.registerComponentFunction("cell","cancelEdit",this.cellCancelEdit.bind(this)),this.registerComponentFunction("cell","navigatePrev",this.navigatePrev.bind(this)),this.registerComponentFunction("cell","navigateNext",this.navigateNext.bind(this)),this.registerComponentFunction("cell","navigateLeft",this.navigateLeft.bind(this)),this.registerComponentFunction("cell","navigateRight",this.navigateRight.bind(this)),this.registerComponentFunction("cell","navigateUp",this.navigateUp.bind(this)),this.registerComponentFunction("cell","navigateDown",this.navigateDown.bind(this))}initialize(){this.subscribe("cell-init",this.bindEditor.bind(this)),this.subscribe("cell-delete",this.clearEdited.bind(this)),this.subscribe("cell-value-changed",this.updateCellClass.bind(this)),this.subscribe("column-layout",this.initializeColumnCheck.bind(this)),this.subscribe("column-delete",this.columnDeleteCheck.bind(this)),this.subscribe("row-deleting",this.rowDeleteCheck.bind(this)),this.subscribe("row-layout",this.rowEditableCheck.bind(this)),this.subscribe("data-refreshing",this.cancelEdit.bind(this)),this.subscribe("clipboard-paste",this.pasteBlocker.bind(this)),this.subscribe("keybinding-nav-prev",this.navigatePrev.bind(this,void 0)),this.subscribe("keybinding-nav-next",this.keybindingNavigateNext.bind(this)),this.subscribe("keybinding-nav-up",this.navigateUp.bind(this,void 0)),this.subscribe("keybinding-nav-down",this.navigateDown.bind(this,void 0)),Object.keys(this.table.options).includes("editorEmptyValue")&&(this.convertEmptyValues=!0)}pasteBlocker(e){if(this.currentCell)return!0}keybindingNavigateNext(e){var t=this.currentCell,i=this.options("tabEndNewRow");t&&(this.navigateNext(t,e)||i&&(t.getElement().firstChild.blur(),this.invalidEdit||(i===!0?i=this.table.addRow({}):typeof i=="function"?i=this.table.addRow(i(t.row.getComponent())):i=this.table.addRow(Object.assign({},i)),i.then(()=>{setTimeout(()=>{t.getComponent().navigateNext()})}))))}cellIsEdited(e){return!!e.modules.edit&&e.modules.edit.edited}cellCancelEdit(e){e===this.currentCell?this.table.modules.edit.cancelEdit():console.warn("Cancel Editor Error - This cell is not currently being edited ")}updateCellClass(e){this.allowEdit(e)?e.getElement().classList.add("tabulator-editable"):e.getElement().classList.remove("tabulator-editable")}clearCellEdited(e){e||(e=this.table.modules.edit.getEditedCells()),Array.isArray(e)||(e=[e]),e.forEach(t=>{this.table.modules.edit.clearEdited(t._getSelf())})}navigatePrev(e=this.currentCell,t){var i,s;if(e){if(t&&t.preventDefault(),i=this.navigateLeft(),i)return!0;if(s=this.table.rowManager.prevDisplayRow(e.row,!0),s&&(i=this.findPrevEditableCell(s,s.cells.length),i))return i.getComponent().edit(),!0}return!1}navigateNext(e=this.currentCell,t){var i,s;if(e){if(t&&t.preventDefault(),i=this.navigateRight(),i)return!0;if(s=this.table.rowManager.nextDisplayRow(e.row,!0),s&&(i=this.findNextEditableCell(s,-1),i))return i.getComponent().edit(),!0}return!1}navigateLeft(e=this.currentCell,t){var i,s;return e&&(t&&t.preventDefault(),i=e.getIndex(),s=this.findPrevEditableCell(e.row,i),s)?(s.getComponent().edit(),!0):!1}navigateRight(e=this.currentCell,t){var i,s;return e&&(t&&t.preventDefault(),i=e.getIndex(),s=this.findNextEditableCell(e.row,i),s)?(s.getComponent().edit(),!0):!1}navigateUp(e=this.currentCell,t){var i,s;return e&&(t&&t.preventDefault(),i=e.getIndex(),s=this.table.rowManager.prevDisplayRow(e.row,!0),s)?(s.cells[i].getComponent().edit(),!0):!1}navigateDown(e=this.currentCell,t){var i,s;return e&&(t&&t.preventDefault(),i=e.getIndex(),s=this.table.rowManager.nextDisplayRow(e.row,!0),s)?(s.cells[i].getComponent().edit(),!0):!1}findNextEditableCell(e,t){var i=!1;if(t0)for(var s=t-1;s>=0;s--){let n=e.cells[s];if(n.column.modules.edit&&x.elVisible(n.getElement())&&this.allowEdit(n)){i=n;break}}return i}initializeColumnCheck(e){typeof e.definition.editor<"u"&&this.initializeColumn(e)}columnDeleteCheck(e){this.currentCell&&this.currentCell.column===e&&this.cancelEdit()}rowDeleteCheck(e){this.currentCell&&this.currentCell.row===e&&this.cancelEdit()}rowEditableCheck(e){e.getCells().forEach(t=>{t.column.modules.edit&&typeof t.column.modules.edit.check=="function"&&this.updateCellClass(t)})}initializeColumn(e){var t=Object.keys(e.definition).includes("editorEmptyValue"),i={editor:!1,blocked:!1,check:e.definition.editable,params:e.definition.editorParams||{},convertEmptyValues:t,editorEmptyValue:e.definition.editorEmptyValue,editorEmptyValueFunc:e.definition.editorEmptyValueFunc};switch(typeof e.definition.editor){case"string":this.editors[e.definition.editor]?i.editor=this.editors[e.definition.editor]:console.warn("Editor Error - No such editor found: ",e.definition.editor);break;case"function":i.editor=e.definition.editor;break;case"boolean":e.definition.editor===!0&&(typeof e.definition.formatter!="function"?this.editors[e.definition.formatter]?i.editor=this.editors[e.definition.formatter]:i.editor=this.editors.input:console.warn("Editor Error - Cannot auto lookup editor for a custom formatter: ",e.definition.formatter));break}i.editor&&(e.modules.edit=i)}getCurrentCell(){return this.currentCell?this.currentCell.getComponent():!1}clearEditor(e){var t=this.currentCell,i;if(this.invalidEdit=!1,t){for(this.currentCell=!1,i=t.getElement(),this.dispatch("edit-editor-clear",t,e),i.classList.remove("tabulator-editing");i.firstChild;)i.removeChild(i.firstChild);t.row.getElement().classList.remove("tabulator-editing"),t.table.element.classList.remove("tabulator-editing")}}cancelEdit(){if(this.currentCell){var e=this.currentCell,t=this.currentCell.getComponent();this.clearEditor(!0),e.setValueActual(e.getValue()),e.cellRendered(),(e.column.definition.editor=="textarea"||e.column.definition.variableHeight)&&e.row.normalizeHeight(!0),e.column.definition.cellEditCancelled&&e.column.definition.cellEditCancelled.call(this.table,t),this.dispatch("edit-cancelled",e),this.dispatchExternal("cellEditCancelled",t)}}bindEditor(e){if(e.column.modules.edit){var t=this,i=e.getElement(!0);this.updateCellClass(e),i.setAttribute("tabindex",0),i.addEventListener("mousedown",function(s){s.button===2?s.preventDefault():t.mouseClick=!0}),this.options("editTriggerEvent")==="dblclick"&&i.addEventListener("dblclick",function(s){i.classList.contains("tabulator-editing")||(i.focus({preventScroll:!0}),t.edit(e,s,!1))}),(this.options("editTriggerEvent")==="focus"||this.options("editTriggerEvent")==="click")&&i.addEventListener("click",function(s){i.classList.contains("tabulator-editing")||(i.focus({preventScroll:!0}),t.edit(e,s,!1))}),this.options("editTriggerEvent")==="focus"&&i.addEventListener("focus",function(s){t.recursionBlock||t.edit(e,s,!1)})}}focusCellNoEvent(e,t){this.recursionBlock=!0,t&&this.table.browser==="ie"||e.getElement().focus({preventScroll:!0}),this.recursionBlock=!1}editCell(e,t){this.focusCellNoEvent(e),this.edit(e,!1,t)}focusScrollAdjust(e){if(this.table.rowManager.getRenderMode()=="virtual"){var t=this.table.rowManager.element.scrollTop,i=this.table.rowManager.element.clientHeight+this.table.rowManager.element.scrollTop,s=e.row.getElement();s.offsetTopi&&(this.table.rowManager.element.scrollTop+=s.offsetTop+s.offsetHeight-i);var n=this.table.rowManager.element.scrollLeft,r=this.table.rowManager.element.clientWidth+this.table.rowManager.element.scrollLeft,o=e.getElement();this.table.modExists("frozenColumns")&&(n+=parseInt(this.table.modules.frozenColumns.leftMargin||0),r-=parseInt(this.table.modules.frozenColumns.rightMargin||0)),this.table.options.renderHorizontal==="virtual"&&(n-=parseInt(this.table.columnManager.renderer.vDomPadLeft),r-=parseInt(this.table.columnManager.renderer.vDomPadLeft)),o.offsetLeftr&&(this.table.rowManager.element.scrollLeft+=o.offsetLeft+o.offsetWidth-r)}}allowEdit(e){var t=!!e.column.modules.edit;if(e.column.modules.edit)switch(typeof e.column.modules.edit.check){case"function":e.row.initialized&&(t=e.column.modules.edit.check(e.getComponent()));break;case"string":t=!!e.row.data[e.column.modules.edit.check];break;case"boolean":t=e.column.modules.edit.check;break}return t}edit(e,t,i){var s=this,n=!0,r=function(){},o=e.getElement(),a=!1,h,d,u;if(this.currentCell){!this.invalidEdit&&this.currentCell!==e&&this.cancelEdit();return}function c(m){if(s.currentCell===e&&!a){var C=s.chain("edit-success",[e,m],!0,!0);return C===!0||s.table.options.validationMode==="highlight"?(a=!0,s.clearEditor(),e.modules.edit||(e.modules.edit={}),e.modules.edit.edited=!0,s.editedCells.indexOf(e)==-1&&s.editedCells.push(e),m=s.transformEmptyValues(m,e),e.setValue(m,!0),C===!0):(a=!0,s.invalidEdit=!0,s.focusCellNoEvent(e,!0),r(),setTimeout(()=>{a=!1},10),!1)}}function f(){s.currentCell===e&&!a&&s.cancelEdit()}function g(m){r=m}if(e.column.modules.edit.blocked)return this.mouseClick=!1,this.blur(o),!1;if(t&&t.stopPropagation(),n=this.allowEdit(e),n||i){if(s.cancelEdit(),s.currentCell=e,this.focusScrollAdjust(e),d=e.getComponent(),this.mouseClick&&(this.mouseClick=!1,e.column.definition.cellClick&&e.column.definition.cellClick.call(this.table,t,d)),e.column.definition.cellEditing&&e.column.definition.cellEditing.call(this.table,d),this.dispatch("cell-editing",e),this.dispatchExternal("cellEditing",d),u=typeof e.column.modules.edit.params=="function"?e.column.modules.edit.params(d):e.column.modules.edit.params,h=e.column.modules.edit.editor.call(s,d,g,c,f,u),this.currentCell&&h!==!1)if(h instanceof Node){for(o.classList.add("tabulator-editing"),e.row.getElement().classList.add("tabulator-editing"),e.table.element.classList.add("tabulator-editing");o.firstChild;)o.removeChild(o.firstChild);o.appendChild(h),r();for(var p=o.children,v=0;v"u"}transformEmptyValues(e,t){var i=t.column.modules.edit,s=i.convertEmptyValues||this.convertEmptyValues,n;return s&&(n=i.editorEmptyValueFunc||this.options("editorEmptyValueFunc"),n&&n(e)&&(e=i.convertEmptyValues?i.editorEmptyValue:this.options("editorEmptyValue"))),e}blur(e){this.confirm("edit-blur",[e])||e.blur()}getEditedCells(){var e=[];return this.editedCells.forEach(t=>{e.push(t.getComponent())}),e}clearEdited(e){var t;e.modules.edit&&e.modules.edit.edited&&(e.modules.edit.edited=!1,this.dispatch("edit-edited-clear",e)),t=this.editedCells.indexOf(e),t>-1&&this.editedCells.splice(t,1)}};b(Z,"moduleName","edit"),b(Z,"editors",ni);let we=Z;class Ue{constructor(e,t,i,s){this.type=e,this.columns=t,this.component=i||!1,this.indent=s||0}}class de{constructor(e,t,i,s,n){this.value=e,this.component=t||!1,this.width=i,this.height=s,this.depth=n}}var ri={},oi={visible:function(){return this.rowManager.getVisibleRows(!1,!0)},all:function(){return this.rowManager.rows},selected:function(){return this.modules.selectRow.selectedRows},active:function(){return this.options.pagination?this.rowManager.getDisplayRows(this.rowManager.displayRows.length-2):this.rowManager.getDisplayRows()}};const V=class V extends w{constructor(e){super(e),this.config={},this.cloneTableStyle=!0,this.colVisProp="",this.colVisPropAttach="",this.registerTableOption("htmlOutputConfig",!1),this.registerColumnOption("htmlOutput"),this.registerColumnOption("titleHtmlOutput")}initialize(){this.registerTableFunction("getHtml",this.getHtml.bind(this))}generateExportList(e,t,i,s){var n,r,o,a;return this.cloneTableStyle=t,this.config=e||{},this.colVisProp=s,this.colVisPropAttach=this.colVisProp.charAt(0).toUpperCase()+this.colVisProp.slice(1),a=V.columnLookups[i],a&&(o=a.call(this.table),o=o.filter(h=>this.columnVisCheck(h))),n=this.config.columnHeaders!==!1?this.headersToExportRows(this.generateColumnGroupHeaders(o)):[],o&&(o=o.map(h=>h.getComponent())),r=this.bodyToExportRows(this.rowLookup(i),o),n.concat(r)}generateTable(e,t,i,s){var n=this.generateExportList(e,t,i,s);return this.generateTableElement(n)}rowLookup(e){var t=[],i;return typeof e=="function"?e.call(this.table).forEach(s=>{s=this.table.rowManager.findRow(s),s&&t.push(s)}):(i=V.rowLookups[e]||V.rowLookups.active,t=i.call(this.table)),Object.assign([],t)}generateColumnGroupHeaders(e){var t=[];return e||(e=this.config.columnGroups!==!1?this.table.columnManager.columns:this.table.columnManager.columnsByIndex),e.forEach(i=>{var s=this.processColumnGroup(i);s&&t.push(s)}),t}processColumnGroup(e){var t=e.columns,i=0,s=e.definition["title"+this.colVisPropAttach]||e.definition.title,n={title:s,column:e,depth:1};if(t.length){if(n.subGroups=[],n.width=0,t.forEach(r=>{var o=this.processColumnGroup(r);o&&(n.width+=o.width,n.subGroups.push(o),o.depth>i&&(i=o.depth))}),n.depth+=i,!n.width)return!1}else if(this.columnVisCheck(e))n.width=1;else return!1;return n}columnVisCheck(e){var t=e.definition[this.colVisProp];return this.config.rowHeaders===!1&&e.isRowHeader?!1:(typeof t=="function"&&(t=t.call(this.table,e.getComponent())),t===!1||t===!0?t:e.visible&&e.field)}headersToExportRows(e){var t=[],i=0,s=[];function n(r,o){var a=i-o;if(typeof t[o]>"u"&&(t[o]=[]),r.height=r.subGroups?1:a-r.depth+1,t[o].push(r),r.height>1)for(let h=1;h"u"&&(t[o+h]=[]),t[o+h].push(!1);if(r.width>1)for(let h=1;hi&&(i=r.depth)}),e.forEach(function(r){n(r,0)}),t.forEach(r=>{var o=[];r.forEach(a=>{if(a){let h=typeof a.title>"u"?"":a.title;o.push(new de(h,a.column.getComponent(),a.width,a.height,a.depth))}else o.push(null)}),s.push(new Ue("header",o))}),s}bodyToExportRows(e,t=[]){var i=[];return t.length===0&&this.table.columnManager.columnsByIndex.forEach(s=>{this.columnVisCheck(s)&&t.push(s.getComponent())}),this.config.columnCalcs!==!1&&this.table.modExists("columnCalcs")&&(this.table.modules.columnCalcs.topInitialized&&e.unshift(this.table.modules.columnCalcs.topRow),this.table.modules.columnCalcs.botInitialized&&e.push(this.table.modules.columnCalcs.botRow)),e=e.filter(s=>{switch(s.type){case"group":return this.config.rowGroups!==!1;case"calc":return this.config.columnCalcs!==!1;case"row":return!(this.table.options.dataTree&&this.config.dataTree===!1&&s.modules.dataTree.parent)}return!0}),e.forEach((s,n)=>{var r=s.getData(this.colVisProp),o=[],a=0;switch(s.type){case"group":a=s.level,o.push(new de(s.key,s.getComponent(),t.length,1));break;case"calc":case"row":t.forEach(h=>{o.push(new de(h._column.getFieldValue(r),h,1,1))}),this.table.options.dataTree&&this.config.dataTree!==!1&&(a=s.modules.dataTree.index);break}i.push(new Ue(s.type,o,s.getComponent(),a))}),i}generateTableElement(e){var t=document.createElement("table"),i=document.createElement("thead"),s=document.createElement("tbody"),n=this.lookupTableStyles(),r=this.table.options["rowFormatter"+this.colVisPropAttach],o={};return o.rowFormatter=r!==null?r:this.table.options.rowFormatter,this.table.options.dataTree&&this.config.dataTree!==!1&&this.table.modExists("columnCalcs")&&(o.treeElementField=this.table.modules.dataTree.elementField),o.groupHeader=this.table.options["groupHeader"+this.colVisPropAttach],o.groupHeader&&!Array.isArray(o.groupHeader)&&(o.groupHeader=[o.groupHeader]),t.classList.add("tabulator-print-table"),this.mapElementStyles(this.table.columnManager.getHeadersElement(),i,["border-top","border-left","border-right","border-bottom","background-color","color","font-weight","font-family","font-size"]),e.length>1e3&&console.warn("It may take a long time to render an HTML table with more than 1000 rows"),e.forEach((a,h)=>{let d;switch(a.type){case"header":i.appendChild(this.generateHeaderElement(a,o,n));break;case"group":s.appendChild(this.generateGroupElement(a,o,n));break;case"calc":s.appendChild(this.generateCalcElement(a,o,n));break;case"row":d=this.generateRowElement(a,o,n),this.mapElementStyles(h%2&&n.evenRow?n.evenRow:n.oddRow,d,["border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","background-color"]),s.appendChild(d);break}}),i.innerHTML&&t.appendChild(i),t.appendChild(s),this.mapElementStyles(this.table.element,t,["border-top","border-left","border-right","border-bottom"]),t}lookupTableStyles(){var e={};return this.cloneTableStyle&&window.getComputedStyle&&(e.oddRow=this.table.element.querySelector(".tabulator-row-odd:not(.tabulator-group):not(.tabulator-calcs)"),e.evenRow=this.table.element.querySelector(".tabulator-row-even:not(.tabulator-group):not(.tabulator-calcs)"),e.calcRow=this.table.element.querySelector(".tabulator-row.tabulator-calcs"),e.firstRow=this.table.element.querySelector(".tabulator-row:not(.tabulator-group):not(.tabulator-calcs)"),e.firstGroup=this.table.element.getElementsByClassName("tabulator-group")[0],e.firstRow&&(e.styleCells=e.firstRow.getElementsByClassName("tabulator-cell"),e.styleRowHeader=e.firstRow.getElementsByClassName("tabulator-row-header")[0],e.firstCell=e.styleCells[0],e.lastCell=e.styleCells[e.styleCells.length-1])),e}generateHeaderElement(e,t,i){var s=document.createElement("tr");return e.columns.forEach(n=>{if(n){var r=document.createElement("th"),o=n.component._column.definition.cssClass?n.component._column.definition.cssClass.split(" "):[];r.colSpan=n.width,r.rowSpan=n.height,r.innerHTML=n.value,this.cloneTableStyle&&(r.style.boxSizing="border-box"),o.forEach(function(a){r.classList.add(a)}),this.mapElementStyles(n.component.getElement(),r,["text-align","border-left","border-right","background-color","color","font-weight","font-family","font-size"]),this.mapElementStyles(n.component._column.contentElement,r,["padding-top","padding-left","padding-right","padding-bottom"]),n.component._column.visible?this.mapElementStyles(n.component.getElement(),r,["width"]):n.component._column.definition.width&&(r.style.width=n.component._column.definition.width+"px"),n.component._column.parent&&n.component._column.parent.isGroup?this.mapElementStyles(n.component._column.parent.groupElement,r,["border-top"]):this.mapElementStyles(n.component.getElement(),r,["border-top"]),n.component._column.isGroup?this.mapElementStyles(n.component.getElement(),r,["border-bottom"]):this.mapElementStyles(this.table.columnManager.getElement(),r,["border-bottom"]),s.appendChild(r)}}),s}generateGroupElement(e,t,i){var s=document.createElement("tr"),n=document.createElement("td"),r=e.columns[0];return s.classList.add("tabulator-print-table-row"),t.groupHeader&&t.groupHeader[e.indent]?r.value=t.groupHeader[e.indent](r.value,e.component._group.getRowCount(),e.component._group.getData(),e.component):t.groupHeader!==!1&&(r.value=e.component._group.generator(r.value,e.component._group.getRowCount(),e.component._group.getData(),e.component)),n.colSpan=r.width,n.innerHTML=r.value,s.classList.add("tabulator-print-table-group"),s.classList.add("tabulator-group-level-"+e.indent),r.component.isVisible()&&s.classList.add("tabulator-group-visible"),this.mapElementStyles(i.firstGroup,s,["border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","background-color"]),this.mapElementStyles(i.firstGroup,n,["padding-top","padding-left","padding-right","padding-bottom"]),s.appendChild(n),s}generateCalcElement(e,t,i){var s=this.generateRowElement(e,t,i);return s.classList.add("tabulator-print-table-calcs"),this.mapElementStyles(i.calcRow,s,["border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","background-color"]),s}generateRowElement(e,t,i){var s=document.createElement("tr");if(s.classList.add("tabulator-print-table-row"),e.columns.forEach((n,r)=>{if(n){var o=document.createElement("td"),a=n.component._column,h=this.table,d=h.columnManager.findColumnIndex(a),u=n.value,c,f,g={modules:{},getValue:function(){return u},getField:function(){return a.definition.field},getElement:function(){return o},getType:function(){return"cell"},getColumn:function(){return a.getComponent()},getData:function(){return e.component.getData()},getRow:function(){return e.component},getTable:function(){return h},getComponent:function(){return g},column:a},p=a.definition.cssClass?a.definition.cssClass.split(" "):[];if(p.forEach(function(v){o.classList.add(v)}),this.table.modExists("format")&&this.config.formatCells!==!1)u=this.table.modules.format.formatExportValue(g,this.colVisProp);else switch(typeof u){case"object":u=u!==null?JSON.stringify(u):"";break;case"undefined":u="";break}u instanceof Node?o.appendChild(u):o.innerHTML=u,f=["padding-top","padding-left","padding-right","padding-bottom","border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","text-align"],a.isRowHeader?(c=i.styleRowHeader,f.push("background-color")):c=i.styleCells&&i.styleCells[d]?i.styleCells[d]:i.firstCell,c&&(this.mapElementStyles(c,o,f),a.definition.align&&(o.style.textAlign=a.definition.align)),this.table.options.dataTree&&this.config.dataTree!==!1&&(t.treeElementField&&t.treeElementField==a.field||!t.treeElementField&&r==0)&&(e.component._row.modules.dataTree.controlEl&&o.insertBefore(e.component._row.modules.dataTree.controlEl.cloneNode(!0),o.firstChild),e.component._row.modules.dataTree.branchEl&&o.insertBefore(e.component._row.modules.dataTree.branchEl.cloneNode(!0),o.firstChild)),s.appendChild(o),g.modules.format&&g.modules.format.renderedCallback&&g.modules.format.renderedCallback()}}),t.rowFormatter&&e.type==="row"&&this.config.formatCells!==!1){let n=Object.assign(e.component);n.getElement=function(){return s},t.rowFormatter(e.component)}return s}generateHTMLTable(e){var t=document.createElement("div");return t.appendChild(this.generateTableElement(e)),t.innerHTML}getHtml(e,t,i,s){var n=this.generateExportList(i||this.table.options.htmlOutputConfig,t,e,s||"htmlOutput");return this.generateHTMLTable(n)}mapElementStyles(e,t,i){if(this.cloneTableStyle&&e&&t){var s={"background-color":"backgroundColor",color:"fontColor",width:"width","font-weight":"fontWeight","font-family":"fontFamily","font-size":"fontSize","text-align":"textAlign","border-top":"borderTop","border-left":"borderLeft","border-right":"borderRight","border-bottom":"borderBottom","padding-top":"paddingTop","padding-left":"paddingLeft","padding-right":"paddingRight","padding-bottom":"paddingBottom"};if(window.getComputedStyle){var n=window.getComputedStyle(e);i.forEach(function(r){t.style[s[r]]||(t.style[s[r]]=n.getPropertyValue(r))})}}}};b(V,"moduleName","export"),b(V,"columnLookups",ri),b(V,"rowLookups",oi);let Ce=V;var ai={"=":function(l,e,t,i){return e==l},"<":function(l,e,t,i){return e":function(l,e,t,i){return e>l},">=":function(l,e,t,i){return e>=l},"!=":function(l,e,t,i){return e!=l},regex:function(l,e,t,i){return typeof l=="string"&&(l=new RegExp(l)),l.test(e)},like:function(l,e,t,i){return l===null||typeof l>"u"?e===l:typeof e<"u"&&e!==null?String(e).toLowerCase().indexOf(l.toLowerCase())>-1:!1},keywords:function(l,e,t,i){var s=l.toLowerCase().split(typeof i.separator>"u"?" ":i.separator),n=String(e===null||typeof e>"u"?"":e).toLowerCase(),r=[];return s.forEach(o=>{n.includes(o)&&r.push(!0)}),i.matchAll?r.length===s.length:!!r.length},starts:function(l,e,t,i){return l===null||typeof l>"u"?e===l:typeof e<"u"&&e!==null?String(e).toLowerCase().startsWith(l.toLowerCase()):!1},ends:function(l,e,t,i){return l===null||typeof l>"u"?e===l:typeof e<"u"&&e!==null?String(e).toLowerCase().endsWith(l.toLowerCase()):!1},in:function(l,e,t,i){return Array.isArray(l)?l.length?l.indexOf(e)>-1:!0:(console.warn("Filter Error - filter value is not an array:",l),!1)}};const O=class O extends w{constructor(e){super(e),this.filterList=[],this.headerFilters={},this.headerFilterColumns=[],this.prevHeaderFilterChangeCheck="",this.prevHeaderFilterChangeCheck="{}",this.changed=!1,this.tableInitialized=!1,this.registerTableOption("filterMode","local"),this.registerTableOption("initialFilter",!1),this.registerTableOption("initialHeaderFilter",!1),this.registerTableOption("headerFilterLiveFilterDelay",300),this.registerTableOption("placeholderHeaderFilter",!1),this.registerColumnOption("headerFilter"),this.registerColumnOption("headerFilterPlaceholder"),this.registerColumnOption("headerFilterParams"),this.registerColumnOption("headerFilterEmptyCheck"),this.registerColumnOption("headerFilterFunc"),this.registerColumnOption("headerFilterFuncParams"),this.registerColumnOption("headerFilterLiveFilter"),this.registerTableFunction("searchRows",this.searchRows.bind(this)),this.registerTableFunction("searchData",this.searchData.bind(this)),this.registerTableFunction("setFilter",this.userSetFilter.bind(this)),this.registerTableFunction("refreshFilter",this.userRefreshFilter.bind(this)),this.registerTableFunction("addFilter",this.userAddFilter.bind(this)),this.registerTableFunction("getFilters",this.getFilters.bind(this)),this.registerTableFunction("setHeaderFilterFocus",this.userSetHeaderFilterFocus.bind(this)),this.registerTableFunction("getHeaderFilterValue",this.userGetHeaderFilterValue.bind(this)),this.registerTableFunction("setHeaderFilterValue",this.userSetHeaderFilterValue.bind(this)),this.registerTableFunction("getHeaderFilters",this.getHeaderFilters.bind(this)),this.registerTableFunction("removeFilter",this.userRemoveFilter.bind(this)),this.registerTableFunction("clearFilter",this.userClearFilter.bind(this)),this.registerTableFunction("clearHeaderFilter",this.userClearHeaderFilter.bind(this)),this.registerComponentFunction("column","headerFilterFocus",this.setHeaderFilterFocus.bind(this)),this.registerComponentFunction("column","reloadHeaderFilter",this.reloadHeaderFilter.bind(this)),this.registerComponentFunction("column","getHeaderFilterValue",this.getHeaderFilterValue.bind(this)),this.registerComponentFunction("column","setHeaderFilterValue",this.setHeaderFilterValue.bind(this))}initialize(){this.subscribe("column-init",this.initializeColumnHeaderFilter.bind(this)),this.subscribe("column-width-fit-before",this.hideHeaderFilterElements.bind(this)),this.subscribe("column-width-fit-after",this.showHeaderFilterElements.bind(this)),this.subscribe("table-built",this.tableBuilt.bind(this)),this.subscribe("placeholder",this.generatePlaceholder.bind(this)),this.table.options.filterMode==="remote"&&this.subscribe("data-params",this.remoteFilterParams.bind(this)),this.registerDataHandler(this.filter.bind(this),10)}tableBuilt(){this.table.options.initialFilter&&this.setFilter(this.table.options.initialFilter),this.table.options.initialHeaderFilter&&this.table.options.initialHeaderFilter.forEach(e=>{var t=this.table.columnManager.findColumn(e.field);if(t)this.setHeaderFilterValue(t,e.value);else return console.warn("Column Filter Error - No matching column found:",e.field),!1}),this.tableInitialized=!0}remoteFilterParams(e,t,i,s){return s.filter=this.getFilters(!0,!0),s}generatePlaceholder(e){if(this.table.options.placeholderHeaderFilter&&Object.keys(this.headerFilters).length)return this.table.options.placeholderHeaderFilter}userSetFilter(e,t,i,s){this.setFilter(e,t,i,s),this.refreshFilter()}userRefreshFilter(){this.refreshFilter()}userAddFilter(e,t,i,s){this.addFilter(e,t,i,s),this.refreshFilter()}userSetHeaderFilterFocus(e){var t=this.table.columnManager.findColumn(e);if(t)this.setHeaderFilterFocus(t);else return console.warn("Column Filter Focus Error - No matching column found:",e),!1}userGetHeaderFilterValue(e){var t=this.table.columnManager.findColumn(e);if(t)return this.getHeaderFilterValue(t);console.warn("Column Filter Error - No matching column found:",e)}userSetHeaderFilterValue(e,t){var i=this.table.columnManager.findColumn(e);if(i)this.setHeaderFilterValue(i,t);else return console.warn("Column Filter Error - No matching column found:",e),!1}userRemoveFilter(e,t,i){this.removeFilter(e,t,i),this.refreshFilter()}userClearFilter(e){this.clearFilter(e),this.refreshFilter()}userClearHeaderFilter(){this.clearHeaderFilter(),this.refreshFilter()}searchRows(e,t,i){return this.search("rows",e,t,i)}searchData(e,t,i){return this.search("data",e,t,i)}initializeColumnHeaderFilter(e){var t=e.definition;t.headerFilter&&this.initializeColumn(e)}initializeColumn(e,t){var i=this,s=e.getField();function n(r){var o=e.modules.filter.tagType=="input"&&e.modules.filter.attrType=="text"||e.modules.filter.tagType=="textarea"?"partial":"match",a="",h="",d;if(typeof e.modules.filter.prevSuccess>"u"||e.modules.filter.prevSuccess!==r){if(e.modules.filter.prevSuccess=r,e.modules.filter.emptyFunc(r))delete i.headerFilters[s];else{switch(e.modules.filter.value=r,typeof e.definition.headerFilterFunc){case"string":O.filters[e.definition.headerFilterFunc]?(a=e.definition.headerFilterFunc,d=function(u){var c=e.definition.headerFilterFuncParams||{},f=e.getFieldValue(u);return c=typeof c=="function"?c(r,f,u):c,O.filters[e.definition.headerFilterFunc](r,f,u,c)}):console.warn("Header Filter Error - Matching filter function not found: ",e.definition.headerFilterFunc);break;case"function":d=function(u){var c=e.definition.headerFilterFuncParams||{},f=e.getFieldValue(u);return c=typeof c=="function"?c(r,f,u):c,e.definition.headerFilterFunc(r,f,u,c)},a=d;break}if(!d)switch(o){case"partial":d=function(u){var c=e.getFieldValue(u);return typeof c<"u"&&c!==null?String(c).toLowerCase().indexOf(String(r).toLowerCase())>-1:!1},a="like";break;default:d=function(u){return e.getFieldValue(u)==r},a="="}i.headerFilters[s]={value:r,func:d,type:a}}e.modules.filter.value=r,h=JSON.stringify(i.headerFilters),i.prevHeaderFilterChangeCheck!==h&&(i.prevHeaderFilterChangeCheck=h,i.trackChanges(),i.refreshFilter())}return!0}e.modules.filter={success:n,attrType:!1,tagType:!1,emptyFunc:!1},this.generateHeaderFilterElement(e)}generateHeaderFilterElement(e,t,i){var s=this,n=e.modules.filter.success,r=e.getField(),o,a,h,d,u,c,f,g;e.modules.filter.value=t;function p(){}function v(m){g=m}if(e.modules.filter.headerElement&&e.modules.filter.headerElement.parentNode&&e.contentElement.removeChild(e.modules.filter.headerElement.parentNode),r){switch(e.modules.filter.emptyFunc=e.definition.headerFilterEmptyCheck||function(m){return!m&&m!==0},o=document.createElement("div"),o.classList.add("tabulator-header-filter"),typeof e.definition.headerFilter){case"string":s.table.modules.edit.editors[e.definition.headerFilter]?(a=s.table.modules.edit.editors[e.definition.headerFilter],(e.definition.headerFilter==="tick"||e.definition.headerFilter==="tickCross")&&!e.definition.headerFilterEmptyCheck&&(e.modules.filter.emptyFunc=function(m){return m!==!0&&m!==!1})):console.warn("Filter Error - Cannot build header filter, No such editor found: ",e.definition.editor);break;case"function":a=e.definition.headerFilter;break;case"boolean":e.modules.edit&&e.modules.edit.editor?a=e.modules.edit.editor:e.definition.formatter&&s.table.modules.edit.editors[e.definition.formatter]?(a=s.table.modules.edit.editors[e.definition.formatter],(e.definition.formatter==="tick"||e.definition.formatter==="tickCross")&&!e.definition.headerFilterEmptyCheck&&(e.modules.filter.emptyFunc=function(m){return m!==!0&&m!==!1})):a=s.table.modules.edit.editors.input;break}if(a){if(d={getValue:function(){return typeof t<"u"?t:""},getField:function(){return e.definition.field},getElement:function(){return o},getColumn:function(){return e.getComponent()},getTable:()=>this.table,getType:()=>"header",getRow:function(){return{normalizeHeight:function(){}}}},f=e.definition.headerFilterParams||{},f=typeof f=="function"?f.call(s.table,d):f,h=a.call(this.table.modules.edit,d,v,n,p,f),!h){console.warn("Filter Error - Cannot add filter to "+r+" column, editor returned a value of false");return}if(!(h instanceof Node)){console.warn("Filter Error - Cannot add filter to "+r+" column, editor should return an instance of Node, the editor returned:",h);return}s.langBind("headerFilters|columns|"+e.definition.field,function(m){h.setAttribute("placeholder",typeof m<"u"&&m?m:e.definition.headerFilterPlaceholder||s.langText("headerFilters|default"))}),h.addEventListener("click",function(m){m.stopPropagation(),h.focus()}),h.addEventListener("focus",m=>{var C=this.table.columnManager.contentsElement.scrollLeft,T=this.table.rowManager.element.scrollLeft;C!==T&&(this.table.rowManager.scrollHorizontal(C),this.table.columnManager.scrollHorizontal(C))}),u=!1,c=function(m){u&&clearTimeout(u),u=setTimeout(function(){n(h.value)},s.table.options.headerFilterLiveFilterDelay)},e.modules.filter.headerElement=h,e.modules.filter.attrType=h.hasAttribute("type")?h.getAttribute("type").toLowerCase():"",e.modules.filter.tagType=h.tagName.toLowerCase(),e.definition.headerFilterLiveFilter!==!1&&(e.definition.headerFilter==="autocomplete"||e.definition.headerFilter==="tickCross"||(e.definition.editor==="autocomplete"||e.definition.editor==="tickCross")&&e.definition.headerFilter===!0||(h.addEventListener("keyup",c),h.addEventListener("search",c),e.modules.filter.attrType=="number"&&h.addEventListener("change",function(m){n(h.value)}),e.modules.filter.attrType=="text"&&this.table.browser!=="ie"&&h.setAttribute("type","search")),(e.modules.filter.tagType=="input"||e.modules.filter.tagType=="select"||e.modules.filter.tagType=="textarea")&&h.addEventListener("mousedown",function(m){m.stopPropagation()})),o.appendChild(h),e.contentElement.appendChild(o),i||s.headerFilterColumns.push(e),g&&g()}}else console.warn("Filter Error - Cannot add header filter, column has no field set:",e.definition.title)}hideHeaderFilterElements(){this.headerFilterColumns.forEach(function(e){e.modules.filter&&e.modules.filter.headerElement&&(e.modules.filter.headerElement.style.display="none")})}showHeaderFilterElements(){this.headerFilterColumns.forEach(function(e){e.modules.filter&&e.modules.filter.headerElement&&(e.modules.filter.headerElement.style.display="")})}setHeaderFilterFocus(e){e.modules.filter&&e.modules.filter.headerElement?e.modules.filter.headerElement.focus():console.warn("Column Filter Focus Error - No header filter set on column:",e.getField())}getHeaderFilterValue(e){if(e.modules.filter&&e.modules.filter.headerElement)return e.modules.filter.value;console.warn("Column Filter Error - No header filter set on column:",e.getField())}setHeaderFilterValue(e,t){e&&(e.modules.filter&&e.modules.filter.headerElement?(this.generateHeaderFilterElement(e,t,!0),e.modules.filter.success(t)):console.warn("Column Filter Error - No header filter set on column:",e.getField()))}reloadHeaderFilter(e){e&&(e.modules.filter&&e.modules.filter.headerElement?this.generateHeaderFilterElement(e,e.modules.filter.value,!0):console.warn("Column Filter Error - No header filter set on column:",e.getField()))}refreshFilter(){this.tableInitialized&&(this.table.options.filterMode==="remote"?this.reloadData(null,!1,!1):this.refreshData(!0))}trackChanges(){this.changed=!0,this.dispatch("filter-changed")}hasChanged(){var e=this.changed;return this.changed=!1,e}setFilter(e,t,i,s){this.filterList=[],Array.isArray(e)||(e=[{field:e,type:t,value:i,params:s}]),this.addFilter(e)}addFilter(e,t,i,s){var n=!1;Array.isArray(e)||(e=[{field:e,type:t,value:i,params:s}]),e.forEach(r=>{r=this.findFilter(r),r&&(this.filterList.push(r),n=!0)}),n&&this.trackChanges()}findFilter(e){var t;if(Array.isArray(e))return this.findSubFilters(e);var i=!1;return typeof e.field=="function"?i=function(s){return e.field(s,e.type||{})}:O.filters[e.type]?(t=this.table.columnManager.getColumnByField(e.field),t?i=function(s){return O.filters[e.type](e.value,t.getFieldValue(s),s,e.params||{})}:i=function(s){return O.filters[e.type](e.value,s[e.field],s,e.params||{})}):console.warn("Filter Error - No such filter type found, ignoring: ",e.type),e.func=i,e.func?e:!1}findSubFilters(e){var t=[];return e.forEach(i=>{i=this.findFilter(i),i&&t.push(i)}),t.length?t:!1}getFilters(e,t){var i=[];return e&&(i=this.getHeaderFilters()),t&&i.forEach(function(s){typeof s.type=="function"&&(s.type="function")}),i=i.concat(this.filtersToArray(this.filterList,t)),i}filtersToArray(e,t){var i=[];return e.forEach(s=>{var n;Array.isArray(s)?i.push(this.filtersToArray(s,t)):(n={field:s.field,type:s.type,value:s.value},t&&typeof n.type=="function"&&(n.type="function"),i.push(n))}),i}getHeaderFilters(){var e=[];for(var t in this.headerFilters)e.push({field:t,type:this.headerFilters[t].type,value:this.headerFilters[t].value});return e}removeFilter(e,t,i){Array.isArray(e)||(e=[{field:e,type:t,value:i}]),e.forEach(s=>{var n=-1;typeof s.field=="object"?n=this.filterList.findIndex(r=>s===r):n=this.filterList.findIndex(r=>s.field===r.field&&s.type===r.type&&s.value===r.value),n>-1?this.filterList.splice(n,1):console.warn("Filter Error - No matching filter type found, ignoring: ",s.type)}),this.trackChanges()}clearFilter(e){this.filterList=[],e&&this.clearHeaderFilter(),this.trackChanges()}clearHeaderFilter(){this.headerFilters={},this.prevHeaderFilterChangeCheck="{}",this.headerFilterColumns.forEach(e=>{typeof e.modules.filter.value<"u"&&delete e.modules.filter.value,e.modules.filter.prevSuccess=void 0,this.reloadHeaderFilter(e)}),this.trackChanges()}search(e,t,i,s){var n=[],r=[];return Array.isArray(t)||(t=[{field:t,type:i,value:s}]),t.forEach(o=>{o=this.findFilter(o),o&&r.push(o)}),this.table.rowManager.rows.forEach(o=>{var a=!0;r.forEach(h=>{this.filterRecurse(h,o.getData())||(a=!1)}),a&&n.push(e==="data"?o.getData("data"):o.getComponent())}),n}filter(e,t){var i=[],s=[];return this.subscribedExternal("dataFiltering")&&this.dispatchExternal("dataFiltering",this.getFilters(!0)),this.table.options.filterMode!=="remote"&&(this.filterList.length||Object.keys(this.headerFilters).length)?e.forEach(n=>{this.filterRow(n)&&i.push(n)}):i=e.slice(0),this.subscribedExternal("dataFiltered")&&(i.forEach(n=>{s.push(n.getComponent())}),this.dispatchExternal("dataFiltered",this.getFilters(!0),s)),i}filterRow(e,t){var i=!0,s=e.getData();this.filterList.forEach(r=>{this.filterRecurse(r,s)||(i=!1)});for(var n in this.headerFilters)this.headerFilters[n].func(s)||(i=!1);return i}filterRecurse(e,t){var i=!1;return Array.isArray(e)?e.forEach(s=>{this.filterRecurse(s,t)&&(i=!0)}):i=e.func(t),i}};b(O,"moduleName","filter"),b(O,"filters",ai);let Ee=O;function li(l,e,t){return this.emptyToSpace(this.sanitizeHTML(l.getValue()))}function hi(l,e,t){return l.getValue()}function di(l,e,t){return l.getElement().style.whiteSpace="pre-wrap",this.emptyToSpace(this.sanitizeHTML(l.getValue()))}function ui(l,e,t){var i=parseFloat(l.getValue()),s="",n,r,o,a,h,d=e.decimal||".",u=e.thousand||",",c=e.negativeSign||"-",f=e.symbol||"",g=!!e.symbolAfter,p=typeof e.precision<"u"?e.precision:2;if(isNaN(i))return this.emptyToSpace(this.sanitizeHTML(l.getValue()));if(i<0&&(i=Math.abs(i),s=c),n=p!==!1?i.toFixed(p):i,n=String(n).split("."),r=n[0],o=n.length>1?d+n[1]:"",e.thousand!==!1)for(a=/(\d+)(\d{3})/;a.test(r);)r=r.replace(a,"$1"+u+"$2");return h=r+o,s===!0?(h="("+h+")",g?h+f:f+h):g?s+h+f:s+f+h}function ci(l,e,t){var i=l.getValue(),s=e.urlPrefix||"",n=e.download,r=i,o=document.createElement("a"),a;function h(d,u){var c=d.shift(),f=u[c];return d.length&&typeof f=="object"?h(d,f):f}if(e.labelField&&(a=l.getData(),r=h(e.labelField.split(this.table.options.nestedFieldSeparator),a)),e.label)switch(typeof e.label){case"string":r=e.label;break;case"function":r=e.label(l);break}if(r){if(e.urlField&&(a=l.getData(),i=x.retrieveNestedData(this.table.options.nestedFieldSeparator,e.urlField,a)),e.url)switch(typeof e.url){case"string":i=e.url;break;case"function":i=e.url(l);break}return o.setAttribute("href",s+i),e.target&&o.setAttribute("target",e.target),e.download&&(typeof n=="function"?n=n(l):n=n===!0?"":n,o.setAttribute("download",n)),o.innerHTML=this.emptyToSpace(this.sanitizeHTML(r)),o}else return" "}function fi(l,e,t){var i=document.createElement("img"),s=l.getValue();switch(e.urlPrefix&&(s=e.urlPrefix+l.getValue()),e.urlSuffix&&(s=s+e.urlSuffix),i.setAttribute("src",s),typeof e.height){case"number":i.style.height=e.height+"px";break;case"string":i.style.height=e.height;break}switch(typeof e.width){case"number":i.style.width=e.width+"px";break;case"string":i.style.width=e.width;break}return i.addEventListener("load",function(){l.getRow().normalizeHeight()}),i}function pi(l,e,t){var i=l.getValue(),s=l.getElement(),n=e.allowEmpty,r=e.allowTruthy,o=Object.keys(e).includes("trueValue"),a=typeof e.tickElement<"u"?e.tickElement:'',h=typeof e.crossElement<"u"?e.crossElement:'';return o&&i===e.trueValue||!o&&(r&&i||i===!0||i==="true"||i==="True"||i===1||i==="1")?(s.setAttribute("aria-checked",!0),a||""):n&&(i==="null"||i===""||i===null||typeof i>"u")?(s.setAttribute("aria-checked","mixed"),""):(s.setAttribute("aria-checked",!1),h||"")}function mi(l,e,t){var i=window.DateTime||luxon.DateTime,s=e.inputFormat||"yyyy-MM-dd HH:mm:ss",n=e.outputFormat||"dd/MM/yyyy HH:mm:ss",r=typeof e.invalidPlaceholder<"u"?e.invalidPlaceholder:"",o=l.getValue();if(typeof i<"u"){var a;return i.isDateTime(o)?a=o:s==="iso"?a=i.fromISO(String(o)):a=i.fromFormat(String(o),s),a.isValid?(e.timezone&&(a=a.setZone(e.timezone)),a.toFormat(n)):r===!0||!o?o:typeof r=="function"?r(o):r}else console.error("Format Error - 'datetime' formatter is dependant on luxon.js")}function gi(l,e,t){var i=window.DateTime||luxon.DateTime,s=e.inputFormat||"yyyy-MM-dd HH:mm:ss",n=typeof e.invalidPlaceholder<"u"?e.invalidPlaceholder:"",r=typeof e.suffix<"u"?e.suffix:!1,o=typeof e.unit<"u"?e.unit:"days",a=typeof e.humanize<"u"?e.humanize:!1,h=typeof e.date<"u"?e.date:i.now(),d=l.getValue();if(typeof i<"u"){var u;return i.isDateTime(d)?u=d:s==="iso"?u=i.fromISO(String(d)):u=i.fromFormat(String(d),s),u.isValid?a?u.diff(h,o).toHuman()+(r?" "+r:""):parseInt(u.diff(h,o)[o])+(r?" "+r:""):n===!0?d:typeof n=="function"?n(d):n}else console.error("Format Error - 'datetimediff' formatter is dependant on luxon.js")}function bi(l,e,t){var i=l.getValue();return typeof e[i]>"u"?(console.warn("Missing display value for "+i),i):e[i]}function vi(l,e,t){var i=l.getValue(),s=l.getElement(),n=e&&e.stars?e.stars:5,r=document.createElement("span"),o=document.createElementNS("http://www.w3.org/2000/svg","svg"),a='',h='';r.style.verticalAlign="middle",o.setAttribute("width","14"),o.setAttribute("height","14"),o.setAttribute("viewBox","0 0 512 512"),o.setAttribute("xml:space","preserve"),o.style.padding="0 1px",i=i&&!isNaN(i)?parseInt(i):0,i=Math.max(0,Math.min(i,n));for(var d=1;d<=n;d++){var u=o.cloneNode(!0);u.innerHTML=d<=i?a:h,r.appendChild(u)}return s.style.whiteSpace="nowrap",s.style.overflow="hidden",s.style.textOverflow="ellipsis",s.setAttribute("aria-label",i),r}function wi(l,e,t){var i=this.sanitizeHTML(l.getValue())||0,s=document.createElement("span"),n=e&&e.max?e.max:100,r=e&&e.min?e.min:0,o=e&&typeof e.color<"u"?e.color:["red","orange","green"],a="#666666",h,d;if(!(isNaN(i)||typeof l.getValue()>"u")){switch(s.classList.add("tabulator-traffic-light"),d=parseFloat(i)<=n?parseFloat(i):n,d=parseFloat(d)>=r?parseFloat(d):r,h=(n-r)/100,d=Math.round((d-r)/h),typeof o){case"string":a=o;break;case"function":a=o(i);break;case"object":if(Array.isArray(o)){var u=100/o.length,c=Math.floor(d/u);c=Math.min(c,o.length-1),c=Math.max(c,0),a=o[c];break}}return s.style.backgroundColor=a,s}}function Ci(l,e={},t){var i=this.sanitizeHTML(l.getValue())||0,s=l.getElement(),n=e.max?e.max:100,r=e.min?e.min:0,o=e.legendAlign?e.legendAlign:"center",a,h,d,u,c;switch(h=parseFloat(i)<=n?parseFloat(i):n,h=parseFloat(h)>=r?parseFloat(h):r,a=(n-r)/100,h=Math.round((h-r)/a),typeof e.color){case"string":d=e.color;break;case"function":d=e.color(i);break;case"object":if(Array.isArray(e.color)){let v=100/e.color.length,m=Math.floor(h/v);m=Math.min(m,e.color.length-1),m=Math.max(m,0),d=e.color[m];break}default:d="#2DC214"}switch(typeof e.legend){case"string":u=e.legend;break;case"function":u=e.legend(i);break;case"boolean":u=i;break;default:u=!1}switch(typeof e.legendColor){case"string":c=e.legendColor;break;case"function":c=e.legendColor(i);break;case"object":if(Array.isArray(e.legendColor)){let v=100/e.legendColor.length,m=Math.floor(h/v);m=Math.min(m,e.legendColor.length-1),m=Math.max(m,0),c=e.legendColor[m]}break;default:c="#000"}s.style.minWidth="30px",s.style.position="relative",s.setAttribute("aria-label",h);var f=document.createElement("div");f.style.display="inline-block",f.style.width=h+"%",f.style.backgroundColor=d,f.style.height="100%",f.setAttribute("data-max",n),f.setAttribute("data-min",r);var g=document.createElement("div");if(g.style.position="relative",g.style.width="100%",g.style.height="100%",u){var p=document.createElement("div");p.style.position="absolute",p.style.top=0,p.style.left=0,p.style.textAlign=o,p.style.width="100%",p.style.color=c,p.innerHTML=u}return t(function(){if(!(l instanceof Ye)){var v=document.createElement("div");v.style.position="absolute",v.style.top="4px",v.style.bottom="4px",v.style.left="4px",v.style.right="4px",s.appendChild(v),s=v}s.appendChild(g),g.appendChild(f),u&&g.appendChild(p)}),""}function Ei(l,e,t){return l.getElement().style.backgroundColor=this.sanitizeHTML(l.getValue()),""}function yi(l,e,t){return''}function Ri(l,e,t){return''}function xi(l,e,t){var i=l.getValue(),s=e.size||15,n=s+"px",r,o,a=e.hasOwnProperty("onValue")?e.onValue:!0,h=e.hasOwnProperty("offValue")?e.offValue:!1,d=e.onTruthy?i:i===a;return r=document.createElement("div"),r.classList.add("tabulator-toggle"),d?(r.classList.add("tabulator-toggle-on"),r.style.flexDirection="row-reverse",e.onColor&&(r.style.background=e.onColor)):e.offColor&&(r.style.background=e.offColor),r.style.width=2.5*s+"px",r.style.borderRadius=n,e.clickable&&r.addEventListener("click",u=>{l.setValue(d?h:a)}),o=document.createElement("div"),o.classList.add("tabulator-toggle-switch"),o.style.height=n,o.style.width=n,o.style.borderRadius=n,r.appendChild(o),r}function Ti(l,e,t){var i=document.createElement("span"),s=l.getRow(),n=l.getTable();return s.watchPosition(r=>{e.relativeToPage&&(r+=n.modules.page.getPageSize()*(n.modules.page.getPage()-1)),i.innerText=r}),i}function ki(l,e,t){return l.getElement().classList.add("tabulator-row-handle"),"
"}var Mi={plaintext:li,html:hi,textarea:di,money:ui,link:ci,image:fi,tickCross:pi,datetime:mi,datetimediff:gi,lookup:bi,star:vi,traffic:wi,progress:Ci,color:Ei,buttonTick:yi,buttonCross:Ri,toggle:xi,rownum:Ti,handle:ki};const H=class H extends w{constructor(e){super(e),this.registerColumnOption("formatter"),this.registerColumnOption("formatterParams"),this.registerColumnOption("formatterPrint"),this.registerColumnOption("formatterPrintParams"),this.registerColumnOption("formatterClipboard"),this.registerColumnOption("formatterClipboardParams"),this.registerColumnOption("formatterHtmlOutput"),this.registerColumnOption("formatterHtmlOutputParams"),this.registerColumnOption("titleFormatter"),this.registerColumnOption("titleFormatterParams")}initialize(){this.subscribe("cell-format",this.formatValue.bind(this)),this.subscribe("cell-rendered",this.cellRendered.bind(this)),this.subscribe("column-layout",this.initializeColumn.bind(this)),this.subscribe("column-format",this.formatHeader.bind(this))}initializeColumn(e){e.modules.format=this.lookupFormatter(e,""),typeof e.definition.formatterPrint<"u"&&(e.modules.format.print=this.lookupFormatter(e,"Print")),typeof e.definition.formatterClipboard<"u"&&(e.modules.format.clipboard=this.lookupFormatter(e,"Clipboard")),typeof e.definition.formatterHtmlOutput<"u"&&(e.modules.format.htmlOutput=this.lookupFormatter(e,"HtmlOutput"))}lookupFormatter(e,t){var i={params:e.definition["formatter"+t+"Params"]||{}},s=e.definition["formatter"+t];switch(typeof s){case"string":H.formatters[s]?i.formatter=H.formatters[s]:(console.warn("Formatter Error - No such formatter found: ",s),i.formatter=H.formatters.plaintext);break;case"function":i.formatter=s;break;default:i.formatter=H.formatters.plaintext;break}return i}cellRendered(e){e.modules.format&&e.modules.format.renderedCallback&&!e.modules.format.rendered&&(e.modules.format.renderedCallback(),e.modules.format.rendered=!0)}formatHeader(e,t,i){var s,n,r,o;return e.definition.titleFormatter?(s=this.getFormatter(e.definition.titleFormatter),r=a=>{e.titleFormatterRendered=a},o={getValue:function(){return t},getElement:function(){return i},getType:function(){return"header"},getColumn:function(){return e.getComponent()},getTable:()=>this.table},n=e.definition.titleFormatterParams||{},n=typeof n=="function"?n():n,s.call(this,o,n,r)):t}formatValue(e){var t=e.getComponent(),i=typeof e.column.modules.format.params=="function"?e.column.modules.format.params(t):e.column.modules.format.params;function s(n){e.modules.format||(e.modules.format={}),e.modules.format.renderedCallback=n,e.modules.format.rendered=!1}return e.column.modules.format.formatter.call(this,t,i,s)}formatExportValue(e,t){var i=e.column.modules.format[t],s;if(i){let n=function(r){e.modules.format||(e.modules.format={}),e.modules.format.renderedCallback=r,e.modules.format.rendered=!1};return s=typeof i.params=="function"?i.params(e.getComponent()):i.params,i.formatter.call(this,e.getComponent(),s,n)}else return this.formatValue(e)}sanitizeHTML(e){if(e){var t={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/","`":"`","=":"="};return String(e).replace(/[&<>"'`=/]/g,function(i){return t[i]})}else return e}emptyToSpace(e){return e===null||typeof e>"u"||e===""?" ":e}getFormatter(e){switch(typeof e){case"string":H.formatters[e]?e=H.formatters[e]:(console.warn("Formatter Error - No such formatter found: ",e),e=H.formatters.plaintext);break;case"function":break;default:e=H.formatters.plaintext;break}return e}};b(H,"moduleName","format"),b(H,"formatters",Mi);let ye=H;class et extends w{constructor(e){super(e),this.leftColumns=[],this.rightColumns=[],this.initializationMode="left",this.active=!1,this.blocked=!0,this.registerColumnOption("frozen")}reset(){this.initializationMode="left",this.leftColumns=[],this.rightColumns=[],this.active=!1}initialize(){this.subscribe("cell-layout",this.layoutCell.bind(this)),this.subscribe("column-init",this.initializeColumn.bind(this)),this.subscribe("column-width",this.layout.bind(this)),this.subscribe("row-layout-after",this.layoutRow.bind(this)),this.subscribe("table-layout",this.layout.bind(this)),this.subscribe("columns-loading",this.reset.bind(this)),this.subscribe("column-add",this.reinitializeColumns.bind(this)),this.subscribe("column-deleted",this.reinitializeColumns.bind(this)),this.subscribe("column-hide",this.reinitializeColumns.bind(this)),this.subscribe("column-show",this.reinitializeColumns.bind(this)),this.subscribe("columns-loaded",this.reinitializeColumns.bind(this)),this.subscribe("table-redraw",this.layout.bind(this)),this.subscribe("layout-refreshing",this.blockLayout.bind(this)),this.subscribe("layout-refreshed",this.unblockLayout.bind(this)),this.subscribe("scrollbar-vertical",this.adjustForScrollbar.bind(this))}blockLayout(){this.blocked=!0}unblockLayout(){this.blocked=!1}layoutCell(e){this.layoutElement(e.element,e.column)}reinitializeColumns(){this.reset(),this.table.columnManager.columnsByIndex.forEach(e=>{this.initializeColumn(e)}),this.layout()}initializeColumn(e){var t={margin:0,edge:!1};e.isGroup||(this.frozenCheck(e)?(t.position=this.initializationMode,this.initializationMode=="left"?this.leftColumns.push(e):this.rightColumns.unshift(e),this.active=!0,e.modules.frozen=t):this.initializationMode="right")}frozenCheck(e){return e.parent.isGroup&&e.definition.frozen&&console.warn("Frozen Column Error - Parent column group must be frozen, not individual columns or sub column groups"),e.parent.isGroup?this.frozenCheck(e.parent):e.definition.frozen}layoutCalcRows(){this.table.modExists("columnCalcs")&&(this.table.modules.columnCalcs.topInitialized&&this.table.modules.columnCalcs.topRow&&this.layoutRow(this.table.modules.columnCalcs.topRow),this.table.modules.columnCalcs.botInitialized&&this.table.modules.columnCalcs.botRow&&this.layoutRow(this.table.modules.columnCalcs.botRow),this.table.modExists("groupRows")&&this.layoutGroupCalcs(this.table.modules.groupRows.getGroups()))}layoutGroupCalcs(e){e.forEach(t=>{t.calcs.top&&this.layoutRow(t.calcs.top),t.calcs.bottom&&this.layoutRow(t.calcs.bottom),t.groupList&&t.groupList.length&&this.layoutGroupCalcs(t.groupList)})}layoutColumnPosition(e){var t=[],i=0,s=0;this.leftColumns.forEach((n,r)=>{if(n.modules.frozen.marginValue=i,n.modules.frozen.margin=n.modules.frozen.marginValue+"px",n.visible&&(i+=n.getWidth()),r==this.leftColumns.length-1?n.modules.frozen.edge=!0:n.modules.frozen.edge=!1,n.parent.isGroup){var o=this.getColGroupParentElement(n);t.includes(o)||(this.layoutElement(o,n),t.push(o)),o.classList.toggle("tabulator-frozen-left",n.modules.frozen.edge&&n.modules.frozen.position==="left"),o.classList.toggle("tabulator-frozen-right",n.modules.frozen.edge&&n.modules.frozen.position==="right")}else this.layoutElement(n.getElement(),n);e&&n.cells.forEach(a=>{this.layoutElement(a.getElement(!0),n)})}),this.rightColumns.forEach((n,r)=>{n.modules.frozen.marginValue=s,n.modules.frozen.margin=n.modules.frozen.marginValue+"px",n.visible&&(s+=n.getWidth()),r==this.rightColumns.length-1?n.modules.frozen.edge=!0:n.modules.frozen.edge=!1,n.parent.isGroup?this.layoutElement(this.getColGroupParentElement(n),n):this.layoutElement(n.getElement(),n),e&&n.cells.forEach(o=>{this.layoutElement(o.getElement(!0),n)})})}getColGroupParentElement(e){return e.parent.isGroup?this.getColGroupParentElement(e.parent):e.getElement()}layout(){this.active&&!this.blocked&&(this.layoutColumnPosition(),this.reinitializeRows(),this.layoutCalcRows())}reinitializeRows(){var e=this.table.rowManager.getVisibleRows(!0),t=this.table.rowManager.getRows().filter(i=>!e.includes(i));t.forEach(i=>{i.deinitialize()}),e.forEach(i=>{i.type==="row"&&this.layoutRow(i)})}layoutRow(e){this.table.options.layout==="fitDataFill"&&this.rightColumns.length&&(this.table.rowManager.getTableElement().style.minWidth="calc(100% - "+this.rightMargin+")"),this.leftColumns.forEach(t=>{var i=e.getCell(t);i&&this.layoutElement(i.getElement(!0),t)}),this.rightColumns.forEach(t=>{var i=e.getCell(t);i&&this.layoutElement(i.getElement(!0),t)})}layoutElement(e,t){var i;t.modules.frozen&&e&&(e.style.position="sticky",this.table.rtl?i=t.modules.frozen.position==="left"?"right":"left":i=t.modules.frozen.position,e.style[i]=t.modules.frozen.margin,e.classList.add("tabulator-frozen"),e.classList.toggle("tabulator-frozen-left",t.modules.frozen.edge&&t.modules.frozen.position==="left"),e.classList.toggle("tabulator-frozen-right",t.modules.frozen.edge&&t.modules.frozen.position==="right"))}adjustForScrollbar(e){this.rightColumns.length&&(this.table.columnManager.getContentsElement().style.width="calc(100% - "+e+"px)")}getFrozenColumns(){return this.leftColumns.concat(this.rightColumns)}_calcSpace(e,t){var i=0;for(let s=0;s{this.initializeRow(e)})}initializeRow(e){var t=this.table.options.frozenRows,i=typeof t;i==="number"?e.getPosition()&&e.getPosition()+this.rows.length<=t&&this.freezeRow(e):i==="function"?t.call(this.table,e.getComponent())&&this.freezeRow(e):Array.isArray(t)&&t.includes(e.data[this.options("frozenRowsField")])&&this.freezeRow(e)}isRowFrozen(e){var t=this.rows.indexOf(e);return t>-1}isFrozen(){return!!this.rows.length}visibleRows(e,t){return this.rows.forEach(i=>{t.push(i)}),t}getRows(e){var t=e.slice(0);return this.rows.forEach(function(i){var s=t.indexOf(i);s>-1&&t.splice(s,1)}),t}freezeRow(e){e.modules.frozen?console.warn("Freeze Error - Row is already frozen"):(e.modules.frozen=!0,this.topElement.appendChild(e.getElement()),e.initialize(),e.normalizeHeight(),this.rows.push(e),this.refreshData(!1,"display"),this.table.rowManager.adjustTableSize(),this.styleRows())}unfreezeRow(e){e.modules.frozen?(e.modules.frozen=!1,this.detachRow(e),this.table.rowManager.adjustTableSize(),this.refreshData(!1,"display"),this.rows.length&&this.styleRows()):console.warn("Freeze Error - Row is already unfrozen")}detachRow(e){var t=this.rows.indexOf(e);if(t>-1){var i=e.getElement();i.parentNode&&i.parentNode.removeChild(i),this.rows.splice(t,1)}}styleRows(e){this.rows.forEach((t,i)=>{this.table.rowManager.styleRow(t,i)})}}b(tt,"moduleName","frozenRows");class Li{constructor(e){return this._group=e,this.type="GroupComponent",new Proxy(this,{get:function(t,i,s){return typeof t[i]<"u"?t[i]:t._group.groupManager.table.componentFunctionBinder.handle("group",t._group,i)}})}getKey(){return this._group.key}getField(){return this._group.field}getElement(){return this._group.element}getRows(){return this._group.getRows(!0)}getSubGroups(){return this._group.getSubGroups(!0)}getParentGroup(){return this._group.parent?this._group.parent.getComponent():!1}isVisible(){return this._group.visible}show(){this._group.show()}hide(){this._group.hide()}toggle(){this._group.toggleVisibility()}scrollTo(e,t){return this._group.groupManager.table.rowManager.scrollToRow(this._group,e,t)}_getSelf(){return this._group}getTable(){return this._group.groupManager.table}}class J{constructor(e,t,i,s,n,r,o){this.groupManager=e,this.parent=t,this.key=s,this.level=i,this.field=n,this.hasSubGroups=i{t.modules&&delete t.modules.group})),this.element=!1,this.arrowElement=!1,this.elementContents=!1}createElements(){var e=document.createElement("div");e.classList.add("tabulator-arrow"),this.element=document.createElement("div"),this.element.classList.add("tabulator-row"),this.element.classList.add("tabulator-group"),this.element.classList.add("tabulator-group-level-"+this.level),this.element.setAttribute("role","rowgroup"),this.arrowElement=document.createElement("div"),this.arrowElement.classList.add("tabulator-group-toggle"),this.arrowElement.appendChild(e),this.groupManager.table.options.movableRows!==!1&&this.groupManager.table.modExists("moveRow")&&this.groupManager.table.modules.moveRow.initializeGroupHeader(this)}createValueGroups(){var e=this.level+1;this.groupManager.allowedValues&&this.groupManager.allowedValues[e]&&this.groupManager.allowedValues[e].forEach(t=>{this._createGroup(t,e)})}addBindings(){var e;this.groupManager.table.options.groupToggleElement&&(e=this.groupManager.table.options.groupToggleElement=="arrow"?this.arrowElement:this.element,e.addEventListener("click",t=>{this.groupManager.table.options.groupToggleElement==="arrow"&&(t.stopPropagation(),t.stopImmediatePropagation()),setTimeout(()=>{this.toggleVisibility()})}))}_createGroup(e,t){var i=t+"_"+e,s=new J(this.groupManager,this,t,e,this.groupManager.groupIDLookups[t].field,this.groupManager.headerGenerator[t]||this.groupManager.headerGenerator[0],this.old?this.old.groups[i]:!1);this.groups[i]=s,this.groupList.push(s)}_addRowToGroup(e){var t=this.level+1;if(this.hasSubGroups){var i=this.groupManager.groupIDLookups[t].func(e.getData()),s=t+"_"+i;this.groupManager.allowedValues&&this.groupManager.allowedValues[t]?this.groups[s]&&this.groups[s].addRow(e):(this.groups[s]||this._createGroup(i,t),this.groups[s].addRow(e))}}_addRow(e){this.rows.push(e),e.modules.group=this}insertRow(e,t,i){var s=this.conformRowData({});e.updateData(s);var n=this.rows.indexOf(t);n>-1?i?this.rows.splice(n+1,0,e):this.rows.splice(n,0,e):i?this.rows.push(e):this.rows.unshift(e),e.modules.group=this,this.groupManager.table.modExists("columnCalcs")&&this.groupManager.table.options.columnCalcs!="table"&&this.groupManager.table.modules.columnCalcs.recalcGroup(this),this.groupManager.updateGroupRows(!0)}scrollHeader(e){this.arrowElement&&(this.arrowElement.style.marginLeft=e,this.groupList.forEach(function(t){t.scrollHeader(e)}))}getRowIndex(e){}conformRowData(e){return this.field?e[this.field]=this.key:console.warn("Data Conforming Error - Cannot conform row data to match new group as groupBy is a function"),this.parent&&(e=this.parent.conformRowData(e)),e}removeRow(e){var t=this.rows.indexOf(e),i=e.getElement();t>-1&&this.rows.splice(t,1),!this.groupManager.table.options.groupValues&&!this.rows.length?(this.parent?this.parent.removeGroup(this):this.groupManager.removeGroup(this),this.groupManager.updateGroupRows(!0)):(i.parentNode&&i.parentNode.removeChild(i),this.groupManager.blockRedraw||(this.generateGroupHeaderContents(),this.groupManager.table.modExists("columnCalcs")&&this.groupManager.table.options.columnCalcs!="table"&&this.groupManager.table.modules.columnCalcs.recalcGroup(this)))}removeGroup(e){var t=e.level+"_"+e.key,i;this.groups[t]&&(delete this.groups[t],i=this.groupList.indexOf(e),i>-1&&this.groupList.splice(i,1),this.groupList.length||(this.parent?this.parent.removeGroup(this):this.groupManager.removeGroup(this)))}getHeadersAndRows(){var e=[];return e.push(this),this._visSet(),this.calcs.top&&(this.calcs.top.detachElement(),this.calcs.top.deleteCells()),this.calcs.bottom&&(this.calcs.bottom.detachElement(),this.calcs.bottom.deleteCells()),this.visible?this.groupList.length?this.groupList.forEach(function(t){e=e.concat(t.getHeadersAndRows())}):(this.groupManager.table.options.columnCalcs!="table"&&this.groupManager.table.modExists("columnCalcs")&&this.groupManager.table.modules.columnCalcs.hasTopCalcs()&&(this.calcs.top=this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows),e.push(this.calcs.top)),e=e.concat(this.rows),this.groupManager.table.options.columnCalcs!="table"&&this.groupManager.table.modExists("columnCalcs")&&this.groupManager.table.modules.columnCalcs.hasBottomCalcs()&&(this.calcs.bottom=this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows),e.push(this.calcs.bottom))):!this.groupList.length&&this.groupManager.table.options.columnCalcs!="table"&&this.groupManager.table.modExists("columnCalcs")&&(this.groupManager.table.modules.columnCalcs.hasTopCalcs()&&this.groupManager.table.options.groupClosedShowCalcs&&(this.calcs.top=this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows),e.push(this.calcs.top)),this.groupManager.table.modules.columnCalcs.hasBottomCalcs()&&this.groupManager.table.options.groupClosedShowCalcs&&(this.calcs.bottom=this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows),e.push(this.calcs.bottom))),e}getData(e,t){var i=[];return this._visSet(),(!e||e&&this.visible)&&this.rows.forEach(s=>{i.push(s.getData(t||"data"))}),i}getRowCount(){var e=0;return this.groupList.length?this.groupList.forEach(t=>{e+=t.getRowCount()}):e=this.rows.length,e}toggleVisibility(){this.visible?this.hide():this.show()}hide(){this.visible=!1,this.groupManager.table.rowManager.getRenderMode()=="basic"&&!this.groupManager.table.options.pagination?(this.element.classList.remove("tabulator-group-visible"),this.groupList.length?this.groupList.forEach(e=>{var t=e.getHeadersAndRows();t.forEach(i=>{i.detachElement()})}):this.rows.forEach(e=>{var t=e.getElement();t.parentNode.removeChild(t)}),this.groupManager.updateGroupRows(!0)):this.groupManager.updateGroupRows(!0),this.groupManager.table.externalEvents.dispatch("groupVisibilityChanged",this.getComponent(),!1)}show(){if(this.visible=!0,this.groupManager.table.rowManager.getRenderMode()=="basic"&&!this.groupManager.table.options.pagination){this.element.classList.add("tabulator-group-visible");var e=this.generateElement();this.groupList.length?this.groupList.forEach(t=>{var i=t.getHeadersAndRows();i.forEach(s=>{var n=s.getElement();e.parentNode.insertBefore(n,e.nextSibling),s.initialize(),e=n})}):this.rows.forEach(t=>{var i=t.getElement();e.parentNode.insertBefore(i,e.nextSibling),t.initialize(),e=i}),this.groupManager.updateGroupRows(!0)}else this.groupManager.updateGroupRows(!0);this.groupManager.table.externalEvents.dispatch("groupVisibilityChanged",this.getComponent(),!0)}_visSet(){var e=[];typeof this.visible=="function"&&(this.rows.forEach(function(t){e.push(t.getData())}),this.visible=this.visible(this.key,this.getRowCount(),e,this.getComponent()))}getRowGroup(e){var t=!1;return this.groupList.length?this.groupList.forEach(function(i){var s=i.getRowGroup(e);s&&(t=s)}):this.rows.find(function(i){return i===e})&&(t=this),t}getSubGroups(e){var t=[];return this.groupList.forEach(function(i){t.push(e?i.getComponent():i)}),t}getRows(e,t){var i=[];return t&&this.groupList.length?this.groupList.forEach(s=>{i=i.concat(s.getRows(e,t))}):this.rows.forEach(function(s){i.push(e?s.getComponent():s)}),i}generateGroupHeaderContents(){var e=[],t=this.getRows(!1,!0);for(t.forEach(function(i){e.push(i.getData())}),this.elementContents=this.generator(this.key,this.getRowCount(),e,this.getComponent());this.element.firstChild;)this.element.removeChild(this.element.firstChild);typeof this.elementContents=="string"?this.element.innerHTML=this.elementContents:this.element.appendChild(this.elementContents),this.element.insertBefore(this.arrowElement,this.element.firstChild)}getPath(e=[]){return e.unshift(this.key),this.parent&&this.parent.getPath(e),e}getElement(){return this.elementContents?this.element:this.generateElement()}generateElement(){this.addBindings=!1,this._visSet(),this.visible?this.element.classList.add("tabulator-group-visible"):this.element.classList.remove("tabulator-group-visible");for(var e=0;ei.length&&console.warn("Error creating group headers, groupHeader array is shorter than groupBy array"),this.headerGenerator=[function(){return""}],this.startOpen=[function(){return!1}],this.langBind("groups|item",(n,r)=>{this.headerGenerator[0]=(o,a,h)=>(typeof o>"u"?"":o)+"("+a+" "+(a===1?n:r.groups.items)+")"}),this.groupIDLookups=[],e)this.table.modExists("columnCalcs")&&this.table.options.columnCalcs!="table"&&this.table.options.columnCalcs!="both"&&this.table.modules.columnCalcs.removeCalcs();else if(this.table.modExists("columnCalcs")&&this.table.options.columnCalcs!="group"){var s=this.table.columnManager.getRealColumns();s.forEach(n=>{n.definition.topCalc&&this.table.modules.columnCalcs.initializeTopRow(),n.definition.bottomCalc&&this.table.modules.columnCalcs.initializeBottomRow()})}Array.isArray(e)||(e=[e]),e.forEach((n,r)=>{var o,a;typeof n=="function"?o=n:(a=this.table.columnManager.getColumnByField(n),a?o=function(h){return a.getFieldValue(h)}:o=function(h){return h[n]}),this.groupIDLookups.push({field:typeof n=="function"?!1:n,func:o,values:this.allowedValues?this.allowedValues[r]:!1})}),t&&(Array.isArray(t)||(t=[t]),t.forEach(n=>{}),this.startOpen=t),i&&(this.headerGenerator=Array.isArray(i)?i:[i])}else this.groupList=[],this.groups={}}rowSample(e,t){if(this.table.options.groupBy){var i=this.getGroups(!1)[0];t.push(i.getRows(!1)[0])}return t}virtualRenderFill(){var e=this.table.rowManager.tableElement,t=this.table.rowManager.getVisibleRows();if(this.table.options.groupBy)t=t.filter(i=>i.type!=="group"),e.style.minWidth=t.length?"":this.table.columnManager.getWidth()+"px";else return t}rowAddingIndex(e,t,i){if(this.table.options.groupBy){this.assignRowToGroup(e);var s=e.modules.group.rows;return s.length>1&&(!t||t&&s.indexOf(t)==-1?i?s[0]!==e&&(t=s[0],this.table.rowManager.moveRowInArray(e.modules.group.rows,e,t,!i)):s[s.length-1]!==e&&(t=s[s.length-1],this.table.rowManager.moveRowInArray(e.modules.group.rows,e,t,!i)):this.table.rowManager.moveRowInArray(e.modules.group.rows,e,t,!i)),t}}trackChanges(){this.dispatch("group-changed")}setGroupBy(e){this.table.options.groupBy=e,this.initialized||this.initialize(),this.configureGroupSetup(),!e&&this.table.modExists("columnCalcs")&&this.table.options.columnCalcs===!0&&this.table.modules.columnCalcs.reinitializeCalcs(),this.refreshData(),this.trackChanges()}setGroupValues(e){this.table.options.groupValues=e,this.configureGroupSetup(),this.refreshData(),this.trackChanges()}setGroupStartOpen(e){this.table.options.groupStartOpen=e,this.configureGroupSetup(),this.table.options.groupBy?(this.refreshData(),this.trackChanges()):console.warn("Grouping Update - cant refresh view, no groups have been set")}setGroupHeader(e){this.table.options.groupHeader=e,this.configureGroupSetup(),this.table.options.groupBy?(this.refreshData(),this.trackChanges()):console.warn("Grouping Update - cant refresh view, no groups have been set")}userGetGroups(e){return this.getGroups(!0)}userGetGroupedData(){return this.table.options.groupBy?this.getGroupedData():this.getData()}rowGetGroup(e){return e.modules.group?e.modules.group.getComponent():!1}rowMoving(e,t,i){if(this.table.options.groupBy){!i&&t instanceof J&&(t=this.table.rowManager.prevDisplayRow(e)||t);var s=t instanceof J?t:t.modules.group,n=e instanceof J?e:e.modules.group;s===n?this.table.rowManager.moveRowInArray(s.rows,e,t,i):(n&&n.removeRow(e),s.insertRow(e,t,i))}}rowDeleting(e){this.table.options.groupBy&&e.modules.group&&e.modules.group.removeRow(e)}rowsUpdated(e){this.table.options.groupBy&&this.updateGroupRows(!0)}cellUpdated(e){this.table.options.groupBy&&this.reassignRowToGroup(e.row)}getRows(e){return this.table.options.groupBy&&this.groupIDLookups.length?(this.dispatchExternal("dataGrouping"),this.generateGroups(e),this.subscribedExternal("dataGrouped")&&this.dispatchExternal("dataGrouped",this.getGroups(!0)),this.updateGroupRows()):e.slice(0)}getGroups(e){var t=[];return this.groupList.forEach(function(i){t.push(e?i.getComponent():i)}),t}getChildGroups(e){var t=[];return e||(e=this),e.groupList.forEach(i=>{i.groupList.length?t=t.concat(this.getChildGroups(i)):t.push(i)}),t}wipe(){this.table.options.groupBy&&(this.groupList.forEach(function(e){e.wipe()}),this.groupList=[],this.groups={})}pullGroupListData(e){var t=[];return e.forEach(i=>{var s={};s.level=0,s.rowCount=0,s.headerContent="";var n=[];i.hasSubGroups?(n=this.pullGroupListData(i.groupList),s.level=i.level,s.rowCount=n.length-i.groupList.length,s.headerContent=i.generator(i.key,s.rowCount,i.rows,i),t.push(s),t=t.concat(n)):(s.level=i.level,s.headerContent=i.generator(i.key,i.rows.length,i.rows,i),s.rowCount=i.getRows().length,t.push(s),i.getRows().forEach(r=>{t.push(r.getData("data"))}))}),t}getGroupedData(){return this.pullGroupListData(this.groupList)}getRowGroup(e){var t=!1;return this.options("dataTree")&&(e=this.table.modules.dataTree.getTreeParentRoot(e)),this.groupList.forEach(i=>{var s=i.getRowGroup(e);s&&(t=s)}),t}countGroups(){return this.groupList.length}generateGroups(e){var t=this.groups;this.groups={},this.groupList=[],this.allowedValues&&this.allowedValues[0]?(this.allowedValues[0].forEach(i=>{this.createGroup(i,0,t)}),e.forEach(i=>{this.assignRowToExistingGroup(i,t)})):e.forEach(i=>{this.assignRowToGroup(i,t)}),Object.values(t).forEach(i=>{i.wipe(!0)})}createGroup(e,t,i){var s=t+"_"+e,n;i=i||[],n=new J(this,!1,t,e,this.groupIDLookups[0].field,this.headerGenerator[0],i[s]),this.groups[s]=n,this.groupList.push(n)}assignRowToExistingGroup(e,t){var i=this.groupIDLookups[0].func(e.getData()),s="0_"+i;this.groups[s]&&this.groups[s].addRow(e)}assignRowToGroup(e,t){var i=this.groupIDLookups[0].func(e.getData()),s=!this.groups["0_"+i];return s&&this.createGroup(i,0,t),this.groups["0_"+i].addRow(e),!s}reassignRowToGroup(e){if(e.type==="row"){var t=e.modules.group,i=t.getPath(),s=this.getExpectedPath(e),n;n=i.length==s.length&&i.every((r,o)=>r===s[o]),n||(t.removeRow(e),this.assignRowToGroup(e,this.groups),this.refreshData(!0))}}getExpectedPath(e){var t=[],i=e.getData();return this.groupIDLookups.forEach(s=>{t.push(s.func(i))}),t}updateGroupRows(e){var t=[];return this.blockRedraw||(this.groupList.forEach(i=>{t=t.concat(i.getHeadersAndRows())}),e&&this.refreshData(!0)),t}scrollHeaders(e){this.table.options.groupBy&&(this.table.options.renderHorizontal==="virtual"&&(e-=this.table.columnManager.renderer.vDomPadLeft),e=e+"px",this.groupList.forEach(t=>{t.scrollHeader(e)}))}removeGroup(e){var t=e.level+"_"+e.key,i;this.groups[t]&&(delete this.groups[t],i=this.groupList.indexOf(e),i>-1&&this.groupList.splice(i,1))}checkBasicModeGroupHeaderWidth(){var e=this.table.rowManager.tableElement,t=!0;this.table.rowManager.getDisplayRows().forEach((i,s)=>{this.table.rowManager.styleRow(i,s),e.appendChild(i.getElement()),i.initialize(!0),i.type!=="group"&&(t=!1)}),t?e.style.minWidth=this.table.columnManager.getWidth()+"px":e.style.minWidth=""}}b(it,"moduleName","groupRows");var Si={cellEdit:function(l){l.component.setValueProcessData(l.data.oldValue),l.component.cellRendered()},rowAdd:function(l){l.component.deleteActual(),this.table.rowManager.checkPlaceholder()},rowDelete:function(l){var e=this.table.rowManager.addRowActual(l.data.data,l.data.pos,l.data.index);this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.updateGroupRows(!0),this._rebindRow(l.component,e),this.table.rowManager.checkPlaceholder()},rowMove:function(l){var e=l.data.posFrom-l.data.posTo>0;this.table.rowManager.moveRowActual(l.component,this.table.rowManager.getRowFromPosition(l.data.posFrom),e),this.table.rowManager.regenerateRowPositions(),this.table.rowManager.reRenderInPosition()}},Di={cellEdit:function(l){l.component.setValueProcessData(l.data.newValue),l.component.cellRendered()},rowAdd:function(l){var e=this.table.rowManager.addRowActual(l.data.data,l.data.pos,l.data.index);this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.updateGroupRows(!0),this._rebindRow(l.component,e),this.table.rowManager.checkPlaceholder()},rowDelete:function(l){l.component.deleteActual(),this.table.rowManager.checkPlaceholder()},rowMove:function(l){this.table.rowManager.moveRowActual(l.component,this.table.rowManager.getRowFromPosition(l.data.posTo),l.data.after),this.table.rowManager.regenerateRowPositions(),this.table.rowManager.reRenderInPosition()}},zi={undo:["ctrl + 90","meta + 90"],redo:["ctrl + 89","meta + 89"]},Hi={undo:function(l){var e=!1;this.table.options.history&&this.table.modExists("history")&&this.table.modExists("edit")&&(e=this.table.modules.edit.currentCell,e||(l.preventDefault(),this.table.modules.history.undo()))},redo:function(l){var e=!1;this.table.options.history&&this.table.modExists("history")&&this.table.modExists("edit")&&(e=this.table.modules.edit.currentCell,e||(l.preventDefault(),this.table.modules.history.redo()))}},Fi={keybindings:{bindings:zi,actions:Hi}};const I=class I extends w{constructor(e){super(e),this.history=[],this.index=-1,this.registerTableOption("history",!1)}initialize(){this.table.options.history&&(this.subscribe("cell-value-updated",this.cellUpdated.bind(this)),this.subscribe("cell-delete",this.clearComponentHistory.bind(this)),this.subscribe("row-delete",this.rowDeleted.bind(this)),this.subscribe("rows-wipe",this.clear.bind(this)),this.subscribe("row-added",this.rowAdded.bind(this)),this.subscribe("row-move",this.rowMoved.bind(this))),this.registerTableFunction("undo",this.undo.bind(this)),this.registerTableFunction("redo",this.redo.bind(this)),this.registerTableFunction("getHistoryUndoSize",this.getHistoryUndoSize.bind(this)),this.registerTableFunction("getHistoryRedoSize",this.getHistoryRedoSize.bind(this)),this.registerTableFunction("clearHistory",this.clear.bind(this))}rowMoved(e,t,i){this.action("rowMove",e,{posFrom:e.getPosition(),posTo:t.getPosition(),to:t,after:i})}rowAdded(e,t,i,s){this.action("rowAdd",e,{data:t,pos:i,index:s})}rowDeleted(e){var t,i;this.table.options.groupBy?(i=e.getComponent().getGroup()._getSelf().rows,t=i.indexOf(e),t&&(t=i[t-1])):(t=e.table.rowManager.getRowIndex(e),t&&(t=e.table.rowManager.rows[t-1])),this.action("rowDelete",e,{data:e.getData(),pos:!t,index:t})}cellUpdated(e){this.action("cellEdit",e,{oldValue:e.oldValue,newValue:e.value})}clear(){this.history=[],this.index=-1}action(e,t,i){this.history=this.history.slice(0,this.index+1),this.history.push({type:e,component:t,data:i}),this.index++}getHistoryUndoSize(){return this.index+1}getHistoryRedoSize(){return this.history.length-(this.index+1)}clearComponentHistory(e){var t=this.history.findIndex(function(i){return i.component===e});t>-1&&(this.history.splice(t,1),t<=this.index&&this.index--,this.clearComponentHistory(e))}undo(){if(this.index>-1){let e=this.history[this.index];return I.undoers[e.type].call(this,e),this.index--,this.dispatchExternal("historyUndo",e.type,e.component.getComponent(),e.data),!0}else return console.warn(this.options("history")?"History Undo Error - No more history to undo":"History module not enabled"),!1}redo(){if(this.history.length-1>this.index){this.index++;let e=this.history[this.index];return I.redoers[e.type].call(this,e),this.dispatchExternal("historyRedo",e.type,e.component.getComponent(),e.data),!0}else return console.warn(this.options("history")?"History Redo Error - No more history to redo":"History module not enabled"),!1}_rebindRow(e,t){this.history.forEach(function(i){if(i.component instanceof S)i.component===e&&(i.component=t);else if(i.component instanceof ne&&i.component.row===e){var s=i.component.column.getField();s&&(i.component=t.getCell(s))}})}};b(I,"moduleName","history"),b(I,"moduleExtensions",Fi),b(I,"undoers",Si),b(I,"redoers",Di);let Re=I;class st extends w{constructor(e){super(e),this.fieldIndex=[],this.hasIndex=!1}initialize(){this.tableElementCheck()}tableElementCheck(){this.table.originalElement&&this.table.originalElement.tagName==="TABLE"&&(this.table.originalElement.childNodes.length?this.parseTable():console.warn("Unable to parse data from empty table tag, Tabulator should be initialized on a div tag unless importing data from a table element."))}parseTable(){var e=this.table.originalElement,t=this.table.options,i=e.getElementsByTagName("th"),s=e.getElementsByTagName("tbody")[0],n=[];this.hasIndex=!1,this.dispatchExternal("htmlImporting"),s=s?s.getElementsByTagName("tr"):[],this._extractOptions(e,t),i.length?this._extractHeaders(i,s):this._generateBlankHeaders(i,s);for(var r=0;r{r[d.toLowerCase()]=d});for(var o in s){var a=s[o],h;a&&typeof a=="object"&&a.name&&a.name.indexOf("tabulator-")===0&&(h=a.name.replace("tabulator-",""),typeof r[h]<"u"&&(t[r[h]]=this._attribValue(a.value)))}}_attribValue(e){return e==="true"?!0:e==="false"?!1:e}_findCol(e){var t=this.table.options.columns.find(i=>i.title===e);return t||!1}_extractHeaders(e,t){for(var i=0;i(console.error("Import Error:",r||"Unable to import data"),Promise.reject(r)))}lookupImporter(e){var t;return e||(e=this.table.options.importFormat),typeof e=="string"?t=ee.importers[e]:t=e,t||console.error("Import Error - Importer not found:",e),t}importFromFile(e,t,i){var s=this.lookupImporter(e);if(s)return this.pickFile(t,i).then(this.importData.bind(this,s)).then(this.structureData.bind(this)).then(this.setData.bind(this)).catch(n=>(this.dispatch("import-error",n),this.dispatchExternal("importError",n),console.error("Import Error:",n||"Unable to import file"),Promise.reject(n)))}pickFile(e,t){return new Promise((i,s)=>{var n=document.createElement("input");n.type="file",n.accept=e,n.addEventListener("change",r=>{var o=n.files[0],a=new FileReader;switch(this.dispatch("import-importing",n.files),this.dispatchExternal("importImporting",n.files),t||this.table.options.importReader){case"buffer":a.readAsArrayBuffer(o);break;case"binary":a.readAsBinaryString(o);break;case"url":a.readAsDataURL(o);break;case"text":default:a.readAsText(o)}a.onload=h=>{i(a.result)},a.onerror=h=>{console.warn("File Load Error - Unable to read file"),s()}}),this.dispatch("import-choose"),this.dispatchExternal("importChoose"),n.click()})}importData(e,t){var i=e.call(this.table,t);return i instanceof Promise?i:i?Promise.resolve(i):Promise.reject()}structureData(e){var t=[];return Array.isArray(e)&&e.length&&Array.isArray(e[0])?(this.table.options.autoColumns?t=this.structureArrayToObject(e):t=this.structureArrayToColumns(e),t):e}structureArrayToObject(e){var t=e.shift(),i=e.map(s=>{var n={};return t.forEach((r,o)=>{n[r]=s[o]}),n});return i}structureArrayToColumns(e){var t=[],i=this.table.getColumns();return i[0]&&e[0][0]&&i[0].getDefinition().title===e[0][0]&&e.shift(),e.forEach(s=>{var n={};s.forEach((r,o)=>{var a=i[o];a&&(n[a.getField()]=r)}),t.push(n)}),t}setData(e){return this.dispatch("import-imported",e),this.dispatchExternal("importImported",e),this.table.setData(e)}};b(ee,"moduleName","import"),b(ee,"importers",Bi);let xe=ee;class nt extends w{constructor(e){super(e),this.eventMap={rowClick:"row-click",rowDblClick:"row-dblclick",rowContext:"row-contextmenu",rowMouseEnter:"row-mouseenter",rowMouseLeave:"row-mouseleave",rowMouseOver:"row-mouseover",rowMouseOut:"row-mouseout",rowMouseMove:"row-mousemove",rowMouseDown:"row-mousedown",rowMouseUp:"row-mouseup",rowTap:"row",rowDblTap:"row",rowTapHold:"row",cellClick:"cell-click",cellDblClick:"cell-dblclick",cellContext:"cell-contextmenu",cellMouseEnter:"cell-mouseenter",cellMouseLeave:"cell-mouseleave",cellMouseOver:"cell-mouseover",cellMouseOut:"cell-mouseout",cellMouseMove:"cell-mousemove",cellMouseDown:"cell-mousedown",cellMouseUp:"cell-mouseup",cellTap:"cell",cellDblTap:"cell",cellTapHold:"cell",headerClick:"column-click",headerDblClick:"column-dblclick",headerContext:"column-contextmenu",headerMouseEnter:"column-mouseenter",headerMouseLeave:"column-mouseleave",headerMouseOver:"column-mouseover",headerMouseOut:"column-mouseout",headerMouseMove:"column-mousemove",headerMouseDown:"column-mousedown",headerMouseUp:"column-mouseup",headerTap:"column",headerDblTap:"column",headerTapHold:"column",groupClick:"group-click",groupDblClick:"group-dblclick",groupContext:"group-contextmenu",groupMouseEnter:"group-mouseenter",groupMouseLeave:"group-mouseleave",groupMouseOver:"group-mouseover",groupMouseOut:"group-mouseout",groupMouseMove:"group-mousemove",groupMouseDown:"group-mousedown",groupMouseUp:"group-mouseup",groupTap:"group",groupDblTap:"group",groupTapHold:"group"},this.subscribers={},this.touchSubscribers={},this.columnSubscribers={},this.touchWatchers={row:{tap:null,tapDbl:null,tapHold:null},cell:{tap:null,tapDbl:null,tapHold:null},column:{tap:null,tapDbl:null,tapHold:null},group:{tap:null,tapDbl:null,tapHold:null}},this.registerColumnOption("headerClick"),this.registerColumnOption("headerDblClick"),this.registerColumnOption("headerContext"),this.registerColumnOption("headerMouseEnter"),this.registerColumnOption("headerMouseLeave"),this.registerColumnOption("headerMouseOver"),this.registerColumnOption("headerMouseOut"),this.registerColumnOption("headerMouseMove"),this.registerColumnOption("headerMouseDown"),this.registerColumnOption("headerMouseUp"),this.registerColumnOption("headerTap"),this.registerColumnOption("headerDblTap"),this.registerColumnOption("headerTapHold"),this.registerColumnOption("cellClick"),this.registerColumnOption("cellDblClick"),this.registerColumnOption("cellContext"),this.registerColumnOption("cellMouseEnter"),this.registerColumnOption("cellMouseLeave"),this.registerColumnOption("cellMouseOver"),this.registerColumnOption("cellMouseOut"),this.registerColumnOption("cellMouseMove"),this.registerColumnOption("cellMouseDown"),this.registerColumnOption("cellMouseUp"),this.registerColumnOption("cellTap"),this.registerColumnOption("cellDblTap"),this.registerColumnOption("cellTapHold")}initialize(){this.initializeExternalEvents(),this.subscribe("column-init",this.initializeColumn.bind(this)),this.subscribe("cell-dblclick",this.cellContentsSelectionFixer.bind(this)),this.subscribe("scroll-horizontal",this.clearTouchWatchers.bind(this)),this.subscribe("scroll-vertical",this.clearTouchWatchers.bind(this))}clearTouchWatchers(){var e=Object.values(this.touchWatchers);e.forEach(t=>{for(let i in t)t[i]=null})}cellContentsSelectionFixer(e,t){var i;if(!(this.table.modExists("edit")&&this.table.modules.edit.currentCell===t)){e.preventDefault();try{document.selection?(i=document.body.createTextRange(),i.moveToElementText(t.getElement()),i.select()):window.getSelection&&(i=document.createRange(),i.selectNode(t.getElement()),window.getSelection().removeAllRanges(),window.getSelection().addRange(i))}catch{}}}initializeExternalEvents(){for(let e in this.eventMap)this.subscriptionChangeExternal(e,this.subscriptionChanged.bind(this,e))}subscriptionChanged(e,t){t?this.subscribers[e]||(this.eventMap[e].includes("-")?(this.subscribers[e]=this.handle.bind(this,e),this.subscribe(this.eventMap[e],this.subscribers[e])):this.subscribeTouchEvents(e)):this.eventMap[e].includes("-")?this.subscribers[e]&&!this.columnSubscribers[e]&&!this.subscribedExternal(e)&&(this.unsubscribe(this.eventMap[e],this.subscribers[e]),delete this.subscribers[e]):this.unsubscribeTouchEvents(e)}subscribeTouchEvents(e){var t=this.eventMap[e];this.touchSubscribers[t+"-touchstart"]||(this.touchSubscribers[t+"-touchstart"]=this.handleTouch.bind(this,t,"start"),this.touchSubscribers[t+"-touchend"]=this.handleTouch.bind(this,t,"end"),this.subscribe(t+"-touchstart",this.touchSubscribers[t+"-touchstart"]),this.subscribe(t+"-touchend",this.touchSubscribers[t+"-touchend"])),this.subscribers[e]=!0}unsubscribeTouchEvents(e){var t=!0,i=this.eventMap[e];if(this.subscribers[e]&&!this.subscribedExternal(e)){delete this.subscribers[e];for(let s in this.eventMap)this.eventMap[s]===i&&this.subscribers[s]&&(t=!1);t&&(this.unsubscribe(i+"-touchstart",this.touchSubscribers[i+"-touchstart"]),this.unsubscribe(i+"-touchend",this.touchSubscribers[i+"-touchend"]),delete this.touchSubscribers[i+"-touchstart"],delete this.touchSubscribers[i+"-touchend"])}}initializeColumn(e){var t=e.definition;for(let i in this.eventMap)t[i]&&(this.subscriptionChanged(i,!0),this.columnSubscribers[i]||(this.columnSubscribers[i]=[]),this.columnSubscribers[i].push(e))}handle(e,t,i){this.dispatchEvent(e,t,i)}handleTouch(e,t,i,s){var n=this.touchWatchers[e];switch(e==="column"&&(e="header"),t){case"start":n.tap=!0,clearTimeout(n.tapHold),n.tapHold=setTimeout(()=>{clearTimeout(n.tapHold),n.tapHold=null,n.tap=null,clearTimeout(n.tapDbl),n.tapDbl=null,this.dispatchEvent(e+"TapHold",i,s)},1e3);break;case"end":n.tap&&(n.tap=null,this.dispatchEvent(e+"Tap",i,s)),n.tapDbl?(clearTimeout(n.tapDbl),n.tapDbl=null,this.dispatchEvent(e+"DblTap",i,s)):n.tapDbl=setTimeout(()=>{clearTimeout(n.tapDbl),n.tapDbl=null},300),clearTimeout(n.tapHold),n.tapHold=null;break}}dispatchEvent(e,t,i){var s=i.getComponent(),n;this.columnSubscribers[e]&&(i instanceof ne?n=i.column.definition[e]:i instanceof U&&(n=i.definition[e]),n&&n(t,s)),this.dispatchExternal(e,t,s)}}b(nt,"moduleName","interaction");var Vi={navPrev:"shift + 9",navNext:9,navUp:38,navDown:40,navLeft:37,navRight:39,scrollPageUp:33,scrollPageDown:34,scrollToStart:36,scrollToEnd:35},Ii={keyBlock:function(l){l.stopPropagation(),l.preventDefault()},scrollPageUp:function(l){var e=this.table.rowManager,t=e.scrollTop-e.element.clientHeight;l.preventDefault(),e.displayRowsCount&&(t>=0?e.element.scrollTop=t:e.scrollToRow(e.getDisplayRows()[0])),this.table.element.focus()},scrollPageDown:function(l){var e=this.table.rowManager,t=e.scrollTop+e.element.clientHeight,i=e.element.scrollHeight;l.preventDefault(),e.displayRowsCount&&(t<=i?e.element.scrollTop=t:e.scrollToRow(e.getDisplayRows()[e.displayRowsCount-1])),this.table.element.focus()},scrollToStart:function(l){var e=this.table.rowManager;l.preventDefault(),e.displayRowsCount&&e.scrollToRow(e.getDisplayRows()[0]),this.table.element.focus()},scrollToEnd:function(l){var e=this.table.rowManager;l.preventDefault(),e.displayRowsCount&&e.scrollToRow(e.getDisplayRows()[e.displayRowsCount-1]),this.table.element.focus()},navPrev:function(l){this.dispatch("keybinding-nav-prev",l)},navNext:function(l){this.dispatch("keybinding-nav-next",l)},navLeft:function(l){this.dispatch("keybinding-nav-left",l)},navRight:function(l){this.dispatch("keybinding-nav-right",l)},navUp:function(l){this.dispatch("keybinding-nav-up",l)},navDown:function(l){this.dispatch("keybinding-nav-down",l)}};const N=class N extends w{constructor(e){super(e),this.watchKeys=null,this.pressedKeys=null,this.keyupBinding=!1,this.keydownBinding=!1,this.registerTableOption("keybindings",{}),this.registerTableOption("tabEndNewRow",!1)}initialize(){var e=this.table.options.keybindings,t={};this.watchKeys={},this.pressedKeys=[],e!==!1&&(Object.assign(t,N.bindings),Object.assign(t,e),this.mapBindings(t),this.bindEvents()),this.subscribe("table-destroy",this.clearBindings.bind(this))}mapBindings(e){for(let t in e)N.actions[t]?e[t]&&(typeof e[t]!="object"&&(e[t]=[e[t]]),e[t].forEach(i=>{var s=Array.isArray(i)?i:[i];s.forEach(n=>{this.mapBinding(t,n)})})):console.warn("Key Binding Error - no such action:",t)}mapBinding(e,t){var i={action:N.actions[e],keys:[],ctrl:!1,shift:!1,meta:!1},s=t.toString().toLowerCase().split(" ").join("").split("+");s.forEach(n=>{switch(n){case"ctrl":i.ctrl=!0;break;case"shift":i.shift=!0;break;case"meta":i.meta=!0;break;default:n=isNaN(n)?n.toUpperCase().charCodeAt(0):parseInt(n),i.keys.push(n),this.watchKeys[n]||(this.watchKeys[n]=[]),this.watchKeys[n].push(i)}})}bindEvents(){var e=this;this.keyupBinding=function(t){var i=t.keyCode,s=e.watchKeys[i];s&&(e.pressedKeys.push(i),s.forEach(function(n){e.checkBinding(t,n)}))},this.keydownBinding=function(t){var i=t.keyCode,s=e.watchKeys[i];if(s){var n=e.pressedKeys.indexOf(i);n>-1&&e.pressedKeys.splice(n,1)}},this.table.element.addEventListener("keydown",this.keyupBinding),this.table.element.addEventListener("keyup",this.keydownBinding)}clearBindings(){this.keyupBinding&&this.table.element.removeEventListener("keydown",this.keyupBinding),this.keydownBinding&&this.table.element.removeEventListener("keyup",this.keydownBinding)}checkBinding(e,t){var i=!0;return e.ctrlKey==t.ctrl&&e.shiftKey==t.shift&&e.metaKey==t.meta?(t.keys.forEach(s=>{var n=this.pressedKeys.indexOf(s);n==-1&&(i=!1)}),i&&t.action.call(this,e),!0):!1}};b(N,"moduleName","keybindings"),b(N,"bindings",Vi),b(N,"actions",Ii);let Te=N;class rt extends w{constructor(e){super(e),this.menuContainer=null,this.nestedMenuBlock=!1,this.currentComponent=null,this.rootPopup=null,this.columnSubscribers={},this.registerTableOption("rowContextMenu",!1),this.registerTableOption("rowClickMenu",!1),this.registerTableOption("rowDblClickMenu",!1),this.registerTableOption("groupContextMenu",!1),this.registerTableOption("groupClickMenu",!1),this.registerTableOption("groupDblClickMenu",!1),this.registerColumnOption("headerContextMenu"),this.registerColumnOption("headerClickMenu"),this.registerColumnOption("headerDblClickMenu"),this.registerColumnOption("headerMenu"),this.registerColumnOption("headerMenuIcon"),this.registerColumnOption("contextMenu"),this.registerColumnOption("clickMenu"),this.registerColumnOption("dblClickMenu")}initialize(){this.deprecatedOptionsCheck(),this.initializeRowWatchers(),this.initializeGroupWatchers(),this.subscribe("column-init",this.initializeColumn.bind(this))}deprecatedOptionsCheck(){}initializeRowWatchers(){this.table.options.rowContextMenu&&(this.subscribe("row-contextmenu",this.loadMenuEvent.bind(this,this.table.options.rowContextMenu)),this.table.on("rowTapHold",this.loadMenuEvent.bind(this,this.table.options.rowContextMenu))),this.table.options.rowClickMenu&&this.subscribe("row-click",this.loadMenuEvent.bind(this,this.table.options.rowClickMenu)),this.table.options.rowDblClickMenu&&this.subscribe("row-dblclick",this.loadMenuEvent.bind(this,this.table.options.rowDblClickMenu))}initializeGroupWatchers(){this.table.options.groupContextMenu&&(this.subscribe("group-contextmenu",this.loadMenuEvent.bind(this,this.table.options.groupContextMenu)),this.table.on("groupTapHold",this.loadMenuEvent.bind(this,this.table.options.groupContextMenu))),this.table.options.groupClickMenu&&this.subscribe("group-click",this.loadMenuEvent.bind(this,this.table.options.groupClickMenu)),this.table.options.groupDblClickMenu&&this.subscribe("group-dblclick",this.loadMenuEvent.bind(this,this.table.options.groupDblClickMenu))}initializeColumn(e){var t=e.definition;t.headerContextMenu&&!this.columnSubscribers.headerContextMenu&&(this.columnSubscribers.headerContextMenu=this.loadMenuTableColumnEvent.bind(this,"headerContextMenu"),this.subscribe("column-contextmenu",this.columnSubscribers.headerContextMenu),this.table.on("headerTapHold",this.loadMenuTableColumnEvent.bind(this,"headerContextMenu"))),t.headerClickMenu&&!this.columnSubscribers.headerClickMenu&&(this.columnSubscribers.headerClickMenu=this.loadMenuTableColumnEvent.bind(this,"headerClickMenu"),this.subscribe("column-click",this.columnSubscribers.headerClickMenu)),t.headerDblClickMenu&&!this.columnSubscribers.headerDblClickMenu&&(this.columnSubscribers.headerDblClickMenu=this.loadMenuTableColumnEvent.bind(this,"headerDblClickMenu"),this.subscribe("column-dblclick",this.columnSubscribers.headerDblClickMenu)),t.headerMenu&&this.initializeColumnHeaderMenu(e),t.contextMenu&&!this.columnSubscribers.contextMenu&&(this.columnSubscribers.contextMenu=this.loadMenuTableCellEvent.bind(this,"contextMenu"),this.subscribe("cell-contextmenu",this.columnSubscribers.contextMenu),this.table.on("cellTapHold",this.loadMenuTableCellEvent.bind(this,"contextMenu"))),t.clickMenu&&!this.columnSubscribers.clickMenu&&(this.columnSubscribers.clickMenu=this.loadMenuTableCellEvent.bind(this,"clickMenu"),this.subscribe("cell-click",this.columnSubscribers.clickMenu)),t.dblClickMenu&&!this.columnSubscribers.dblClickMenu&&(this.columnSubscribers.dblClickMenu=this.loadMenuTableCellEvent.bind(this,"dblClickMenu"),this.subscribe("cell-dblclick",this.columnSubscribers.dblClickMenu))}initializeColumnHeaderMenu(e){var t=e.definition.headerMenuIcon,i;i=document.createElement("span"),i.classList.add("tabulator-header-popup-button"),t?(typeof t=="function"&&(t=t(e.getComponent())),t instanceof HTMLElement?i.appendChild(t):i.innerHTML=t):i.innerHTML="⋮",i.addEventListener("click",s=>{s.stopPropagation(),s.preventDefault(),this.loadMenuEvent(e.definition.headerMenu,s,e)}),e.titleElement.insertBefore(i,e.titleElement.firstChild)}loadMenuTableCellEvent(e,t,i){i._cell&&(i=i._cell),i.column.definition[e]&&this.loadMenuEvent(i.column.definition[e],t,i)}loadMenuTableColumnEvent(e,t,i){i._column&&(i=i._column),i.definition[e]&&this.loadMenuEvent(i.definition[e],t,i)}loadMenuEvent(e,t,i){i._group?i=i._group:i._row&&(i=i._row),e=typeof e=="function"?e.call(this.table,t,i.getComponent()):e,this.loadMenu(t,i,e)}loadMenu(e,t,i,s,n){var r=!(e instanceof MouseEvent),o=document.createElement("div"),a;if(o.classList.add("tabulator-menu"),r||e.preventDefault(),!(!i||!i.length)){if(s)a=n.child(o);else{if(this.nestedMenuBlock){if(this.rootPopup)return}else this.nestedMenuBlock=setTimeout(()=>{this.nestedMenuBlock=!1},100);this.rootPopup&&this.rootPopup.hide(),this.rootPopup=a=this.popup(o)}i.forEach(h=>{var d=document.createElement("div"),u=h.label,c=h.disabled;h.separator?d.classList.add("tabulator-menu-separator"):(d.classList.add("tabulator-menu-item"),typeof u=="function"&&(u=u.call(this.table,t.getComponent())),u instanceof Node?d.appendChild(u):d.innerHTML=u,typeof c=="function"&&(c=c.call(this.table,t.getComponent())),c?(d.classList.add("tabulator-menu-item-disabled"),d.addEventListener("click",f=>{f.stopPropagation()})):h.menu&&h.menu.length?d.addEventListener("click",f=>{f.stopPropagation(),this.loadMenu(f,t,h.menu,d,a)}):h.action&&d.addEventListener("click",f=>{h.action(f,t.getComponent())}),h.menu&&h.menu.length&&d.classList.add("tabulator-menu-item-submenu")),o.appendChild(d)}),o.addEventListener("click",h=>{this.rootPopup&&this.rootPopup.hide()}),a.show(s||e),a===this.rootPopup&&(this.rootPopup.hideOnBlur(()=>{this.rootPopup=null,this.currentComponent&&(this.dispatch("menu-closed",i,a),this.dispatchExternal("menuClosed",this.currentComponent.getComponent()),this.currentComponent=null)}),this.currentComponent=t,this.dispatch("menu-opened",i,a),this.dispatchExternal("menuOpened",t.getComponent()))}}}b(rt,"moduleName","menu");class ot extends w{constructor(e){super(e),this.placeholderElement=this.createPlaceholderElement(),this.hoverElement=!1,this.checkTimeout=!1,this.checkPeriod=250,this.moving=!1,this.toCol=!1,this.toColAfter=!1,this.startX=0,this.autoScrollMargin=40,this.autoScrollStep=5,this.autoScrollTimeout=!1,this.touchMove=!1,this.moveHover=this.moveHover.bind(this),this.endMove=this.endMove.bind(this),this.registerTableOption("movableColumns",!1)}createPlaceholderElement(){var e=document.createElement("div");return e.classList.add("tabulator-col"),e.classList.add("tabulator-col-placeholder"),e}initialize(){this.table.options.movableColumns&&(this.subscribe("column-init",this.initializeColumn.bind(this)),this.subscribe("alert-show",this.abortMove.bind(this)))}abortMove(){clearTimeout(this.checkTimeout)}initializeColumn(e){var t=this,i={},s;!e.modules.frozen&&!e.isGroup&&!e.isRowHeader&&(s=e.getElement(),i.mousemove=(function(n){e.parent===t.moving.parent&&((t.touchMove?n.touches[0].pageX:n.pageX)-x.elOffset(s).left+t.table.columnManager.contentsElement.scrollLeft>e.getWidth()/2?(t.toCol!==e||!t.toColAfter)&&(s.parentNode.insertBefore(t.placeholderElement,s.nextSibling),t.moveColumn(e,!0)):(t.toCol!==e||t.toColAfter)&&(s.parentNode.insertBefore(t.placeholderElement,s),t.moveColumn(e,!1)))}).bind(t),s.addEventListener("mousedown",function(n){t.touchMove=!1,n.which===1&&(t.checkTimeout=setTimeout(function(){t.startMove(n,e)},t.checkPeriod))}),s.addEventListener("mouseup",function(n){n.which===1&&t.checkTimeout&&clearTimeout(t.checkTimeout)}),t.bindTouchEvents(e)),e.modules.moveColumn=i}bindTouchEvents(e){var t=e.getElement(),i=!1,s,n,r,o,a,h;t.addEventListener("touchstart",d=>{this.checkTimeout=setTimeout(()=>{this.touchMove=!0,s=e.nextColumn(),r=s?s.getWidth()/2:0,n=e.prevColumn(),o=n?n.getWidth()/2:0,a=0,h=0,i=!1,this.startMove(d,e)},this.checkPeriod)},{passive:!0}),t.addEventListener("touchmove",d=>{var u,c;this.moving&&(this.moveHover(d),i||(i=d.touches[0].pageX),u=d.touches[0].pageX-i,u>0?s&&u-a>r&&(c=s,c!==e&&(i=d.touches[0].pageX,c.getElement().parentNode.insertBefore(this.placeholderElement,c.getElement().nextSibling),this.moveColumn(c,!0))):n&&-u-h>o&&(c=n,c!==e&&(i=d.touches[0].pageX,c.getElement().parentNode.insertBefore(this.placeholderElement,c.getElement()),this.moveColumn(c,!1))),c&&(s=c.nextColumn(),a=r,r=s?s.getWidth()/2:0,n=c.prevColumn(),h=o,o=n?n.getWidth()/2:0))},{passive:!0}),t.addEventListener("touchend",d=>{this.checkTimeout&&clearTimeout(this.checkTimeout),this.moving&&this.endMove(d)})}startMove(e,t){var i=t.getElement(),s=this.table.columnManager.getContentsElement(),n=this.table.columnManager.getHeadersElement();this.table.modules.selectRange&&this.table.modules.selectRange.columnSelection&&this.table.modules.selectRange.mousedown&&this.table.modules.selectRange.selecting==="column"||(this.moving=t,this.startX=(this.touchMove?e.touches[0].pageX:e.pageX)-x.elOffset(i).left,this.table.element.classList.add("tabulator-block-select"),this.placeholderElement.style.width=t.getWidth()+"px",this.placeholderElement.style.height=t.getHeight()+"px",i.parentNode.insertBefore(this.placeholderElement,i),i.parentNode.removeChild(i),this.hoverElement=i.cloneNode(!0),this.hoverElement.classList.add("tabulator-moving"),s.appendChild(this.hoverElement),this.hoverElement.style.left="0",this.hoverElement.style.bottom=s.clientHeight-n.offsetHeight+"px",this.touchMove||(this._bindMouseMove(),document.body.addEventListener("mousemove",this.moveHover),document.body.addEventListener("mouseup",this.endMove)),this.moveHover(e),this.dispatch("column-moving",e,this.moving))}_bindMouseMove(){this.table.columnManager.columnsByIndex.forEach(function(e){e.modules.moveColumn.mousemove&&e.getElement().addEventListener("mousemove",e.modules.moveColumn.mousemove)})}_unbindMouseMove(){this.table.columnManager.columnsByIndex.forEach(function(e){e.modules.moveColumn.mousemove&&e.getElement().removeEventListener("mousemove",e.modules.moveColumn.mousemove)})}moveColumn(e,t){var i=this.moving.getCells();this.toCol=e,this.toColAfter=t,t?e.getCells().forEach(function(s,n){var r=s.getElement(!0);r.parentNode&&i[n]&&r.parentNode.insertBefore(i[n].getElement(),r.nextSibling)}):e.getCells().forEach(function(s,n){var r=s.getElement(!0);r.parentNode&&i[n]&&r.parentNode.insertBefore(i[n].getElement(),r)})}endMove(e){(e.which===1||this.touchMove)&&(this._unbindMouseMove(),this.placeholderElement.parentNode.insertBefore(this.moving.getElement(),this.placeholderElement.nextSibling),this.placeholderElement.parentNode.removeChild(this.placeholderElement),this.hoverElement.parentNode.removeChild(this.hoverElement),this.table.element.classList.remove("tabulator-block-select"),this.toCol&&this.table.columnManager.moveColumnActual(this.moving,this.toCol,this.toColAfter),this.moving=!1,this.toCol=!1,this.toColAfter=!1,this.touchMove||(document.body.removeEventListener("mousemove",this.moveHover),document.body.removeEventListener("mouseup",this.endMove)))}moveHover(e){var t=this.table.columnManager.getContentsElement(),i=t.scrollLeft,s=(this.touchMove?e.touches[0].pageX:e.pageX)-x.elOffset(t).left+i,n;this.hoverElement.style.left=s-this.startX+"px",s-i{n=Math.max(0,i-5),this.table.rowManager.getElement().scrollLeft=n,this.autoScrollTimeout=!1},1))),i+t.clientWidth-s{n=Math.min(t.clientWidth,i+5),this.table.rowManager.getElement().scrollLeft=n,this.autoScrollTimeout=!1},1)))}}b(ot,"moduleName","moveColumn");var Ni={delete:function(l,e,t){l.delete()}},Wi={insert:function(l,e,t){return this.table.addRow(l.getData(),void 0,e),!0},add:function(l,e,t){return this.table.addRow(l.getData()),!0},update:function(l,e,t){return e?(e.update(l.getData()),!0):!1},replace:function(l,e,t){return e?(this.table.addRow(l.getData(),void 0,e),e.delete(),!0):!1}};const G=class G extends w{constructor(e){super(e),this.placeholderElement=this.createPlaceholderElement(),this.hoverElement=!1,this.checkTimeout=!1,this.checkPeriod=150,this.moving=!1,this.toRow=!1,this.toRowAfter=!1,this.hasHandle=!1,this.startY=0,this.startX=0,this.moveHover=this.moveHover.bind(this),this.endMove=this.endMove.bind(this),this.tableRowDropEvent=!1,this.touchMove=!1,this.connection=!1,this.connectionSelectorsTables=!1,this.connectionSelectorsElements=!1,this.connectionElements=[],this.connections=[],this.connectedTable=!1,this.connectedRow=!1,this.registerTableOption("movableRows",!1),this.registerTableOption("movableRowsConnectedTables",!1),this.registerTableOption("movableRowsConnectedElements",!1),this.registerTableOption("movableRowsSender",!1),this.registerTableOption("movableRowsReceiver","insert"),this.registerColumnOption("rowHandle")}createPlaceholderElement(){var e=document.createElement("div");return e.classList.add("tabulator-row"),e.classList.add("tabulator-row-placeholder"),e}initialize(){this.table.options.movableRows&&(this.connectionSelectorsTables=this.table.options.movableRowsConnectedTables,this.connectionSelectorsElements=this.table.options.movableRowsConnectedElements,this.connection=this.connectionSelectorsTables||this.connectionSelectorsElements,this.subscribe("cell-init",this.initializeCell.bind(this)),this.subscribe("column-init",this.initializeColumn.bind(this)),this.subscribe("row-init",this.initializeRow.bind(this)))}initializeGroupHeader(e){var t=this,i={};i.mouseup=(function(s){t.tableRowDrop(s,e)}).bind(t),i.mousemove=(function(s){var n;s.pageY-x.elOffset(e.element).top+t.table.rowManager.element.scrollTop>e.getHeight()/2?(t.toRow!==e||!t.toRowAfter)&&(n=e.getElement(),n.parentNode.insertBefore(t.placeholderElement,n.nextSibling),t.moveRow(e,!0)):(t.toRow!==e||t.toRowAfter)&&(n=e.getElement(),n.previousSibling&&(n.parentNode.insertBefore(t.placeholderElement,n),t.moveRow(e,!1)))}).bind(t),e.modules.moveRow=i}initializeRow(e){var t=this,i={},s;i.mouseup=(function(n){t.tableRowDrop(n,e)}).bind(t),i.mousemove=(function(n){var r=e.getElement();n.pageY-x.elOffset(r).top+t.table.rowManager.element.scrollTop>e.getHeight()/2?(t.toRow!==e||!t.toRowAfter)&&(r.parentNode.insertBefore(t.placeholderElement,r.nextSibling),t.moveRow(e,!0)):(t.toRow!==e||t.toRowAfter)&&(r.parentNode.insertBefore(t.placeholderElement,r),t.moveRow(e,!1))}).bind(t),this.hasHandle||(s=e.getElement(),s.addEventListener("mousedown",function(n){n.which===1&&(t.checkTimeout=setTimeout(function(){t.startMove(n,e)},t.checkPeriod))}),s.addEventListener("mouseup",function(n){n.which===1&&t.checkTimeout&&clearTimeout(t.checkTimeout)}),this.bindTouchEvents(e,e.getElement())),e.modules.moveRow=i}initializeColumn(e){e.definition.rowHandle&&this.table.options.movableRows!==!1&&(this.hasHandle=!0)}initializeCell(e){if(e.column.definition.rowHandle&&this.table.options.movableRows!==!1){var t=this,i=e.getElement(!0);i.addEventListener("mousedown",function(s){s.which===1&&(t.checkTimeout=setTimeout(function(){t.startMove(s,e.row)},t.checkPeriod))}),i.addEventListener("mouseup",function(s){s.which===1&&t.checkTimeout&&clearTimeout(t.checkTimeout)}),this.bindTouchEvents(e.row,i)}}bindTouchEvents(e,t){var i=!1,s,n,r,o,a,h;t.addEventListener("touchstart",d=>{this.checkTimeout=setTimeout(()=>{this.touchMove=!0,s=e.nextRow(),r=s?s.getHeight()/2:0,n=e.prevRow(),o=n?n.getHeight()/2:0,a=0,h=0,i=!1,this.startMove(d,e)},this.checkPeriod)},{passive:!0}),this.moving,this.toRow,this.toRowAfter,t.addEventListener("touchmove",d=>{var u,c;this.moving&&(d.preventDefault(),this.moveHover(d),i||(i=d.touches[0].pageY),u=d.touches[0].pageY-i,u>0?s&&u-a>r&&(c=s,c!==e&&(i=d.touches[0].pageY,c.getElement().parentNode.insertBefore(this.placeholderElement,c.getElement().nextSibling),this.moveRow(c,!0))):n&&-u-h>o&&(c=n,c!==e&&(i=d.touches[0].pageY,c.getElement().parentNode.insertBefore(this.placeholderElement,c.getElement()),this.moveRow(c,!1))),c&&(s=c.nextRow(),a=r,r=s?s.getHeight()/2:0,n=c.prevRow(),h=o,o=n?n.getHeight()/2:0))}),t.addEventListener("touchend",d=>{this.checkTimeout&&clearTimeout(this.checkTimeout),this.moving&&(this.endMove(d),this.touchMove=!1)})}_bindMouseMove(){this.table.rowManager.getDisplayRows().forEach(e=>{(e.type==="row"||e.type==="group")&&e.modules.moveRow&&e.modules.moveRow.mousemove&&e.getElement().addEventListener("mousemove",e.modules.moveRow.mousemove)})}_unbindMouseMove(){this.table.rowManager.getDisplayRows().forEach(e=>{(e.type==="row"||e.type==="group")&&e.modules.moveRow&&e.modules.moveRow.mousemove&&e.getElement().removeEventListener("mousemove",e.modules.moveRow.mousemove)})}startMove(e,t){var i=t.getElement();this.setStartPosition(e,t),this.moving=t,this.table.element.classList.add("tabulator-block-select"),this.placeholderElement.style.width=t.getWidth()+"px",this.placeholderElement.style.height=t.getHeight()+"px",this.connection?(this.table.element.classList.add("tabulator-movingrow-sending"),this.connectToTables(t)):(i.parentNode.insertBefore(this.placeholderElement,i),i.parentNode.removeChild(i)),this.hoverElement=i.cloneNode(!0),this.hoverElement.classList.add("tabulator-moving"),this.connection?(document.body.appendChild(this.hoverElement),this.hoverElement.style.left="0",this.hoverElement.style.top="0",this.hoverElement.style.width=this.table.element.clientWidth+"px",this.hoverElement.style.whiteSpace="nowrap",this.hoverElement.style.overflow="hidden",this.hoverElement.style.pointerEvents="none"):(this.table.rowManager.getTableElement().appendChild(this.hoverElement),this.hoverElement.style.left="0",this.hoverElement.style.top="0",this._bindMouseMove()),document.body.addEventListener("mousemove",this.moveHover),document.body.addEventListener("mouseup",this.endMove),this.dispatchExternal("rowMoving",t.getComponent()),this.moveHover(e)}setStartPosition(e,t){var i=this.touchMove?e.touches[0].pageX:e.pageX,s=this.touchMove?e.touches[0].pageY:e.pageY,n,r;n=t.getElement(),this.connection?(r=n.getBoundingClientRect(),this.startX=r.left-i+window.pageXOffset,this.startY=r.top-s+window.pageYOffset):this.startY=s-n.getBoundingClientRect().top}endMove(e){(!e||e.which===1||this.touchMove)&&(this._unbindMouseMove(),this.connection||(this.placeholderElement.parentNode.insertBefore(this.moving.getElement(),this.placeholderElement.nextSibling),this.placeholderElement.parentNode.removeChild(this.placeholderElement)),this.hoverElement.parentNode.removeChild(this.hoverElement),this.table.element.classList.remove("tabulator-block-select"),this.toRow?this.table.rowManager.moveRow(this.moving,this.toRow,this.toRowAfter):this.dispatchExternal("rowMoveCancelled",this.moving.getComponent()),this.moving=!1,this.toRow=!1,this.toRowAfter=!1,document.body.removeEventListener("mousemove",this.moveHover),document.body.removeEventListener("mouseup",this.endMove),this.connection&&(this.table.element.classList.remove("tabulator-movingrow-sending"),this.disconnectFromTables()))}moveRow(e,t){this.toRow=e,this.toRowAfter=t}moveHover(e){this.connection?this.moveHoverConnections.call(this,e):this.moveHoverTable.call(this,e)}moveHoverTable(e){var t=this.table.rowManager.getElement(),i=t.scrollTop,s=(this.touchMove?e.touches[0].pageY:e.pageY)-t.getBoundingClientRect().top+i;this.hoverElement.style.top=Math.min(s-this.startY,this.table.rowManager.element.scrollHeight-this.hoverElement.offsetHeight)+"px"}moveHoverConnections(e){this.hoverElement.style.left=this.startX+(this.touchMove?e.touches[0].pageX:e.pageX)+"px",this.hoverElement.style.top=this.startY+(this.touchMove?e.touches[0].pageY:e.pageY)+"px"}elementRowDrop(e,t,i){this.dispatchExternal("movableRowsElementDrop",e,t,i?i.getComponent():!1)}connectToTables(e){var t;this.connectionSelectorsTables&&(t=this.commsConnections(this.connectionSelectorsTables),this.dispatchExternal("movableRowsSendingStart",t),this.commsSend(this.connectionSelectorsTables,"moveRow","connect",{row:e})),this.connectionSelectorsElements&&(this.connectionElements=[],Array.isArray(this.connectionSelectorsElements)||(this.connectionSelectorsElements=[this.connectionSelectorsElements]),this.connectionSelectorsElements.forEach(i=>{typeof i=="string"?this.connectionElements=this.connectionElements.concat(Array.prototype.slice.call(document.querySelectorAll(i))):this.connectionElements.push(i)}),this.connectionElements.forEach(i=>{var s=n=>{this.elementRowDrop(n,i,this.moving)};i.addEventListener("mouseup",s),i.tabulatorElementDropEvent=s,i.classList.add("tabulator-movingrow-receiving")}))}disconnectFromTables(){var e;this.connectionSelectorsTables&&(e=this.commsConnections(this.connectionSelectorsTables),this.dispatchExternal("movableRowsSendingStop",e),this.commsSend(this.connectionSelectorsTables,"moveRow","disconnect")),this.connectionElements.forEach(t=>{t.classList.remove("tabulator-movingrow-receiving"),t.removeEventListener("mouseup",t.tabulatorElementDropEvent),delete t.tabulatorElementDropEvent})}connect(e,t){return this.connectedTable?(console.warn("Move Row Error - Table cannot accept connection, already connected to table:",this.connectedTable),!1):(this.connectedTable=e,this.connectedRow=t,this.table.element.classList.add("tabulator-movingrow-receiving"),this.table.rowManager.getDisplayRows().forEach(i=>{i.type==="row"&&i.modules.moveRow&&i.modules.moveRow.mouseup&&i.getElement().addEventListener("mouseup",i.modules.moveRow.mouseup)}),this.tableRowDropEvent=this.tableRowDrop.bind(this),this.table.element.addEventListener("mouseup",this.tableRowDropEvent),this.dispatchExternal("movableRowsReceivingStart",t,e),!0)}disconnect(e){e===this.connectedTable?(this.connectedTable=!1,this.connectedRow=!1,this.table.element.classList.remove("tabulator-movingrow-receiving"),this.table.rowManager.getDisplayRows().forEach(t=>{t.type==="row"&&t.modules.moveRow&&t.modules.moveRow.mouseup&&t.getElement().removeEventListener("mouseup",t.modules.moveRow.mouseup)}),this.table.element.removeEventListener("mouseup",this.tableRowDropEvent),this.dispatchExternal("movableRowsReceivingStop",e)):console.warn("Move Row Error - trying to disconnect from non connected table")}dropComplete(e,t,i){var s=!1;if(i){switch(typeof this.table.options.movableRowsSender){case"string":s=G.senders[this.table.options.movableRowsSender];break;case"function":s=this.table.options.movableRowsSender;break}s?s.call(this,this.moving?this.moving.getComponent():void 0,t?t.getComponent():void 0,e):this.table.options.movableRowsSender&&console.warn("Mover Row Error - no matching sender found:",this.table.options.movableRowsSender),this.dispatchExternal("movableRowsSent",this.moving.getComponent(),t?t.getComponent():void 0,e)}else this.dispatchExternal("movableRowsSentFailed",this.moving.getComponent(),t?t.getComponent():void 0,e);this.endMove()}tableRowDrop(e,t){var i=!1,s=!1;switch(e.stopImmediatePropagation(),typeof this.table.options.movableRowsReceiver){case"string":i=G.receivers[this.table.options.movableRowsReceiver];break;case"function":i=this.table.options.movableRowsReceiver;break}i?s=i.call(this,this.connectedRow.getComponent(),t?t.getComponent():void 0,this.connectedTable):console.warn("Mover Row Error - no matching receiver found:",this.table.options.movableRowsReceiver),s?this.dispatchExternal("movableRowsReceived",this.connectedRow.getComponent(),t?t.getComponent():void 0,this.connectedTable):this.dispatchExternal("movableRowsReceivedFailed",this.connectedRow.getComponent(),t?t.getComponent():void 0,this.connectedTable),this.commsSend(this.connectedTable,"moveRow","dropcomplete",{row:t,success:s})}commsReceived(e,t,i){switch(t){case"connect":return this.connect(e,i.row);case"disconnect":return this.disconnect(e);case"dropcomplete":return this.dropComplete(e,i.row,i.success)}}};b(G,"moduleName","moveRow"),b(G,"senders",Ni),b(G,"receivers",Wi);let ke=G;var Gi={};const Y=class Y extends w{constructor(e){super(e),this.allowedTypes=["","data","edit","clipboard"],this.enabled=!0,this.registerColumnOption("mutator"),this.registerColumnOption("mutatorParams"),this.registerColumnOption("mutatorData"),this.registerColumnOption("mutatorDataParams"),this.registerColumnOption("mutatorEdit"),this.registerColumnOption("mutatorEditParams"),this.registerColumnOption("mutatorClipboard"),this.registerColumnOption("mutatorClipboardParams"),this.registerColumnOption("mutateLink")}initialize(){this.subscribe("cell-value-changing",this.transformCell.bind(this)),this.subscribe("cell-value-changed",this.mutateLink.bind(this)),this.subscribe("column-layout",this.initializeColumn.bind(this)),this.subscribe("row-data-init-before",this.rowDataChanged.bind(this)),this.subscribe("row-data-changing",this.rowDataChanged.bind(this))}rowDataChanged(e,t,i){return this.transformRow(t,"data",i)}initializeColumn(e){var t=!1,i={};this.allowedTypes.forEach(s=>{var n="mutator"+(s.charAt(0).toUpperCase()+s.slice(1)),r;e.definition[n]&&(r=this.lookupMutator(e.definition[n]),r&&(t=!0,i[n]={mutator:r,params:e.definition[n+"Params"]||{}}))}),t&&(e.modules.mutate=i)}lookupMutator(e){var t=!1;switch(typeof e){case"string":Y.mutators[e]?t=Y.mutators[e]:console.warn("Mutator Error - No such mutator found, ignoring: ",e);break;case"function":t=e;break}return t}transformRow(e,t,i){var s="mutator"+(t.charAt(0).toUpperCase()+t.slice(1)),n;return this.enabled&&this.table.columnManager.traverse(r=>{var o,a,h;r.modules.mutate&&(o=r.modules.mutate[s]||r.modules.mutate.mutator||!1,o&&(n=r.getFieldValue(typeof i<"u"?i:e),(t=="data"&&!i||typeof n<"u")&&(h=r.getComponent(),a=typeof o.params=="function"?o.params(n,e,t,h):o.params,r.setFieldValue(e,o.mutator(n,e,t,a,h)))))}),e}transformCell(e,t){if(e.column.modules.mutate){var i=e.column.modules.mutate.mutatorEdit||e.column.modules.mutate.mutator||!1,s={};if(i)return s=Object.assign(s,e.row.getData()),e.column.setFieldValue(s,t),i.mutator(t,s,"edit",i.params,e.getComponent())}return t}mutateLink(e){var t=e.column.definition.mutateLink;t&&(Array.isArray(t)||(t=[t]),t.forEach(i=>{var s=e.row.getCell(i);s&&s.setValue(s.getValue(),!0,!0)}))}enable(){this.enabled=!0}disable(){this.enabled=!1}};b(Y,"moduleName","mutator"),b(Y,"mutators",Gi);let Me=Y;function ji(l,e,t,i,s){var n=document.createElement("span"),r=document.createElement("span"),o=document.createElement("span"),a=document.createElement("span"),h=document.createElement("span"),d=document.createElement("span");return this.table.modules.localize.langBind("pagination|counter|showing",u=>{r.innerHTML=u}),this.table.modules.localize.langBind("pagination|counter|of",u=>{a.innerHTML=u}),this.table.modules.localize.langBind("pagination|counter|rows",u=>{d.innerHTML=u}),i?(o.innerHTML=" "+e+"-"+Math.min(e+l-1,i)+" ",h.innerHTML=" "+i+" ",n.appendChild(r),n.appendChild(o),n.appendChild(a),n.appendChild(h),n.appendChild(d)):(o.innerHTML=" 0 ",n.appendChild(r),n.appendChild(o),n.appendChild(d)),n}function Ui(l,e,t,i,s){var n=document.createElement("span"),r=document.createElement("span"),o=document.createElement("span"),a=document.createElement("span"),h=document.createElement("span"),d=document.createElement("span");return this.table.modules.localize.langBind("pagination|counter|showing",u=>{r.innerHTML=u}),o.innerHTML=" "+t+" ",this.table.modules.localize.langBind("pagination|counter|of",u=>{a.innerHTML=u}),h.innerHTML=" "+s+" ",this.table.modules.localize.langBind("pagination|counter|pages",u=>{d.innerHTML=u}),n.appendChild(r),n.appendChild(o),n.appendChild(a),n.appendChild(h),n.appendChild(d),n}var Xi={rows:ji,pages:Ui};const te=class te extends w{constructor(e){super(e),this.mode="local",this.progressiveLoad=!1,this.element=null,this.pageCounterElement=null,this.pageCounter=null,this.size=0,this.page=1,this.count=5,this.max=1,this.remoteRowCountEstimate=null,this.initialLoad=!0,this.dataChanging=!1,this.pageSizes=[],this.registerTableOption("pagination",!1),this.registerTableOption("paginationMode","local"),this.registerTableOption("paginationSize",!1),this.registerTableOption("paginationInitialPage",1),this.registerTableOption("paginationCounter",!1),this.registerTableOption("paginationCounterElement",!1),this.registerTableOption("paginationButtonCount",5),this.registerTableOption("paginationSizeSelector",!1),this.registerTableOption("paginationElement",!1),this.registerTableOption("paginationAddRow","page"),this.registerTableOption("progressiveLoad",!1),this.registerTableOption("progressiveLoadDelay",0),this.registerTableOption("progressiveLoadScrollMargin",0),this.registerTableFunction("setMaxPage",this.setMaxPage.bind(this)),this.registerTableFunction("setPage",this.setPage.bind(this)),this.registerTableFunction("setPageToRow",this.userSetPageToRow.bind(this)),this.registerTableFunction("setPageSize",this.userSetPageSize.bind(this)),this.registerTableFunction("getPageSize",this.getPageSize.bind(this)),this.registerTableFunction("previousPage",this.previousPage.bind(this)),this.registerTableFunction("nextPage",this.nextPage.bind(this)),this.registerTableFunction("getPage",this.getPage.bind(this)),this.registerTableFunction("getPageMax",this.getPageMax.bind(this)),this.registerComponentFunction("row","pageTo",this.setPageToRow.bind(this))}initialize(){this.table.options.pagination?(this.subscribe("row-deleted",this.rowsUpdated.bind(this)),this.subscribe("row-added",this.rowsUpdated.bind(this)),this.subscribe("data-processed",this.initialLoadComplete.bind(this)),this.subscribe("table-built",this.calculatePageSizes.bind(this)),this.subscribe("footer-redraw",this.footerRedraw.bind(this)),this.table.options.paginationAddRow=="page"&&this.subscribe("row-adding-position",this.rowAddingPosition.bind(this)),this.table.options.paginationMode==="remote"&&(this.subscribe("data-params",this.remotePageParams.bind(this)),this.subscribe("data-loaded",this._parseRemoteData.bind(this))),this.table.options.progressiveLoad&&console.error("Progressive Load Error - Pagination and progressive load cannot be used at the same time"),this.registerDisplayHandler(this.restOnRenderBefore.bind(this),40),this.registerDisplayHandler(this.getRows.bind(this),50),this.createElements(),this.initializePageCounter(),this.initializePaginator()):this.table.options.progressiveLoad&&(this.subscribe("data-params",this.remotePageParams.bind(this)),this.subscribe("data-loaded",this._parseRemoteData.bind(this)),this.subscribe("table-built",this.calculatePageSizes.bind(this)),this.subscribe("data-processed",this.initialLoadComplete.bind(this)),this.initializeProgressive(this.table.options.progressiveLoad),this.table.options.progressiveLoad==="scroll"&&this.subscribe("scroll-vertical",this.scrollVertical.bind(this)))}rowAddingPosition(e,t){var i=this.table.rowManager,s=i.getDisplayRows(),n;return t?s.length?n=s[0]:i.activeRows.length&&(n=i.activeRows[i.activeRows.length-1],t=!1):s.length&&(n=s[s.length-1],t=!(s.length{}))}restOnRenderBefore(e,t){return t||this.mode==="local"&&this.reset(),e}rowsUpdated(){this.refreshData(!0,"all")}createElements(){var e;this.element=document.createElement("span"),this.element.classList.add("tabulator-paginator"),this.pagesElement=document.createElement("span"),this.pagesElement.classList.add("tabulator-pages"),e=document.createElement("button"),e.classList.add("tabulator-page"),e.setAttribute("type","button"),e.setAttribute("role","button"),e.setAttribute("aria-label",""),e.setAttribute("title",""),this.firstBut=e.cloneNode(!0),this.firstBut.setAttribute("data-page","first"),this.prevBut=e.cloneNode(!0),this.prevBut.setAttribute("data-page","prev"),this.nextBut=e.cloneNode(!0),this.nextBut.setAttribute("data-page","next"),this.lastBut=e.cloneNode(!0),this.lastBut.setAttribute("data-page","last"),this.table.options.paginationSizeSelector&&(this.pageSizeSelect=document.createElement("select"),this.pageSizeSelect.classList.add("tabulator-page-size"))}generatePageSizeSelectList(){var e=[];if(this.pageSizeSelect){if(Array.isArray(this.table.options.paginationSizeSelector))e=this.table.options.paginationSizeSelector,this.pageSizes=e,this.pageSizes.indexOf(this.size)==-1&&e.unshift(this.size);else if(this.pageSizes.indexOf(this.size)==-1){e=[];for(let t=1;t<5;t++)e.push(this.size*t);this.pageSizes=e}else e=this.pageSizes;for(;this.pageSizeSelect.firstChild;)this.pageSizeSelect.removeChild(this.pageSizeSelect.firstChild);e.forEach(t=>{var i=document.createElement("option");i.value=t,t===!0?this.langBind("pagination|all",function(s){i.innerHTML=s}):i.innerHTML=t,this.pageSizeSelect.appendChild(i)}),this.pageSizeSelect.value=this.size}}initializePageCounter(){var e=this.table.options.paginationCounter,t=null;e&&(typeof e=="function"?t=e:t=te.pageCounters[e],t?(this.pageCounter=t,this.pageCounterElement=document.createElement("span"),this.pageCounterElement.classList.add("tabulator-page-counter")):console.warn("Pagination Error - No such page counter found: ",e))}initializePaginator(e){var t,i;e||(this.langBind("pagination|first",s=>{this.firstBut.innerHTML=s}),this.langBind("pagination|first_title",s=>{this.firstBut.setAttribute("aria-label",s),this.firstBut.setAttribute("title",s)}),this.langBind("pagination|prev",s=>{this.prevBut.innerHTML=s}),this.langBind("pagination|prev_title",s=>{this.prevBut.setAttribute("aria-label",s),this.prevBut.setAttribute("title",s)}),this.langBind("pagination|next",s=>{this.nextBut.innerHTML=s}),this.langBind("pagination|next_title",s=>{this.nextBut.setAttribute("aria-label",s),this.nextBut.setAttribute("title",s)}),this.langBind("pagination|last",s=>{this.lastBut.innerHTML=s}),this.langBind("pagination|last_title",s=>{this.lastBut.setAttribute("aria-label",s),this.lastBut.setAttribute("title",s)}),this.firstBut.addEventListener("click",()=>{this.setPage(1)}),this.prevBut.addEventListener("click",()=>{this.previousPage()}),this.nextBut.addEventListener("click",()=>{this.nextPage()}),this.lastBut.addEventListener("click",()=>{this.setPage(this.max)}),this.table.options.paginationElement&&(this.element=this.table.options.paginationElement),this.pageSizeSelect&&(t=document.createElement("label"),this.langBind("pagination|page_size",s=>{this.pageSizeSelect.setAttribute("aria-label",s),this.pageSizeSelect.setAttribute("title",s),t.innerHTML=s}),this.element.appendChild(t),this.element.appendChild(this.pageSizeSelect),this.pageSizeSelect.addEventListener("change",s=>{this.setPageSize(this.pageSizeSelect.value=="true"?!0:this.pageSizeSelect.value),this.setPage(1)})),this.element.appendChild(this.firstBut),this.element.appendChild(this.prevBut),this.element.appendChild(this.pagesElement),this.element.appendChild(this.nextBut),this.element.appendChild(this.lastBut),this.table.options.paginationElement||(this.table.options.paginationCounter&&(this.table.options.paginationCounterElement?this.table.options.paginationCounterElement instanceof HTMLElement?this.table.options.paginationCounterElement.appendChild(this.pageCounterElement):typeof this.table.options.paginationCounterElement=="string"&&(i=document.querySelector(this.table.options.paginationCounterElement),i?i.appendChild(this.pageCounterElement):console.warn("Pagination Error - Unable to find element matching paginationCounterElement selector:",this.table.options.paginationCounterElement)):this.footerAppend(this.pageCounterElement)),this.footerAppend(this.element)),this.page=this.table.options.paginationInitialPage,this.count=this.table.options.paginationButtonCount),this.mode=this.table.options.paginationMode}initializeProgressive(e){this.initializePaginator(!0),this.mode="progressive_"+e,this.progressiveLoad=!0}trackChanges(){this.dispatch("page-changed")}setMaxRows(e){e?this.max=this.size===!0?1:Math.ceil(e/this.size):this.max=1,this.page>this.max&&(this.page=this.max)}reset(e){this.initialLoad||(this.mode=="local"||e)&&(this.page=1,this.trackChanges())}setMaxPage(e){e=parseInt(e),this.max=e||1,this.page>this.max&&(this.page=this.max,this.trigger())}setPage(e){switch(e){case"first":return this.setPage(1);case"prev":return this.previousPage();case"next":return this.nextPage();case"last":return this.setPage(this.max)}return e=parseInt(e),e>0&&e<=this.max||this.mode!=="local"?(this.page=e,this.trackChanges(),this.trigger()):(console.warn("Pagination Error - Requested page is out of range of 1 - "+this.max+":",e),Promise.reject())}setPageToRow(e){var t=this.displayRows(-1),i=t.indexOf(e);if(i>-1){var s=this.size===!0?1:Math.ceil((i+1)/this.size);return this.setPage(s)}else return console.warn("Pagination Error - Requested row is not visible"),Promise.reject()}setPageSize(e){e!==!0&&(e=parseInt(e)),e>0&&(this.size=e,this.dispatchExternal("pageSizeChanged",e)),this.pageSizeSelect&&this.generatePageSizeSelectList(),this.trackChanges()}_setPageCounter(e,t,i){var s;if(this.pageCounter)switch(this.mode==="remote"&&(t=this.size,i=(this.page-1)*this.size+1,e=this.remoteRowCountEstimate),s=this.pageCounter.call(this,t,i,this.page,e,this.max),typeof s){case"object":if(s instanceof Node){for(;this.pageCounterElement.firstChild;)this.pageCounterElement.removeChild(this.pageCounterElement.firstChild);this.pageCounterElement.appendChild(s)}else this.pageCounterElement.innerHTML="",s!=null&&console.warn("Page Counter Error - Page Counter has returned a type of object, the only valid page counter object return is an instance of Node, the page counter returned:",s);break;case"undefined":this.pageCounterElement.innerHTML="";break;default:this.pageCounterElement.innerHTML=s}}_setPageButtons(){let e=Math.floor((this.count-1)/2),t=Math.ceil((this.count-1)/2),i=this.max-this.page+e+10&&n<=this.max&&this.pagesElement.appendChild(this._generatePageButton(n));this.footerRedraw()}_generatePageButton(e){var t=document.createElement("button");return t.classList.add("tabulator-page"),e==this.page&&t.classList.add("active"),t.setAttribute("type","button"),t.setAttribute("role","button"),this.langBind("pagination|page_title",i=>{t.setAttribute("aria-label",i+" "+e),t.setAttribute("title",i+" "+e)}),t.setAttribute("data-page",e),t.textContent=e,t.addEventListener("click",i=>{this.setPage(e)}),t}previousPage(){return this.page>1?(this.page--,this.trackChanges(),this.trigger()):(console.warn("Pagination Error - Previous page would be less than page 1:",0),Promise.reject())}nextPage(){return this.pagea.type==="row");if(this.mode=="local"){i=[],this.setMaxRows(e.length),this.size===!0?(s=0,n=e.length):(s=this.size*(this.page-1),n=s+parseInt(this.size)),this._setPageButtons();for(let a=s;a{this.dataChanging=!1});case"progressive_load":case"progressive_scroll":return this.reloadData(null,!0);default:return console.warn("Pagination Error - no such pagination mode:",this.mode),Promise.reject()}}_parseRemoteData(e){var t;if(typeof e.last_page>"u"&&console.warn("Remote Pagination Error - Server response missing '"+(this.options("dataReceiveParams").last_page||"last_page")+"' property"),e.data)if(this.max=parseInt(e.last_page)||1,this.remoteRowCountEstimate=typeof e.last_row<"u"?e.last_row:e.last_page*this.size-(this.page==e.last_page?this.size-e.data.length:0),this.progressiveLoad){switch(this.mode){case"progressive_load":this.page==1?this.table.rowManager.setData(e.data,!1,this.page==1):this.table.rowManager.addRows(e.data),this.page{this.nextPage()},this.table.options.progressiveLoadDelay);break;case"progressive_scroll":e=this.page===1?e.data:this.table.rowManager.getData().concat(e.data),this.table.rowManager.setData(e,this.page!==1,this.page==1),t=this.table.options.progressiveLoadScrollMargin||this.table.rowManager.element.clientHeight*2,this.table.rowManager.element.scrollHeight<=this.table.rowManager.element.clientHeight+t&&this.page{this.nextPage()});break}return!1}else this.dispatchExternal("pageLoaded",this.getPage());else console.warn("Remote Pagination Error - Server response missing '"+(this.options("dataReceiveParams").data||"data")+"' property");return e.data}footerRedraw(){var e=this.table.footerManager.containerElement;Math.ceil(e.clientWidth)-e.scrollWidth<0?this.pagesElement.style.display="none":(this.pagesElement.style.display="",Math.ceil(e.clientWidth)-e.scrollWidth<0&&(this.pagesElement.style.display="none"))}};b(te,"moduleName","page"),b(te,"pageCounters",Xi);let Le=te;var Ji={local:function(l,e){var t=localStorage.getItem(l+"-"+e);return t?JSON.parse(t):!1},cookie:function(l,e){var t=document.cookie,i=l+"-"+e,s=t.indexOf(i+"="),n,r;return s>-1&&(t=t.slice(s),n=t.indexOf(";"),n>-1&&(t=t.slice(0,n)),r=t.replace(i+"=","")),r?JSON.parse(r):!1}},Ki={local:function(l,e,t){localStorage.setItem(l+"-"+e,JSON.stringify(t))},cookie:function(l,e,t){var i=new Date;i.setDate(i.getDate()+1e4),document.cookie=l+"-"+e+"="+JSON.stringify(t)+"; expires="+i.toUTCString()}};const D=class D extends w{constructor(e){super(e),this.mode="",this.id="",this.defWatcherBlock=!1,this.config={},this.readFunc=!1,this.writeFunc=!1,this.registerTableOption("persistence",!1),this.registerTableOption("persistenceID",""),this.registerTableOption("persistenceMode",!0),this.registerTableOption("persistenceReaderFunc",!1),this.registerTableOption("persistenceWriterFunc",!1)}localStorageTest(){var e="_tabulator_test";try{return window.localStorage.setItem(e,e),window.localStorage.removeItem(e),!0}catch{return!1}}initialize(){if(this.table.options.persistence){var e=this.table.options.persistenceMode,t=this.table.options.persistenceID,i;this.mode=e!==!0?e:this.localStorageTest()?"local":"cookie",this.table.options.persistenceReaderFunc?typeof this.table.options.persistenceReaderFunc=="function"?this.readFunc=this.table.options.persistenceReaderFunc:D.readers[this.table.options.persistenceReaderFunc]?this.readFunc=D.readers[this.table.options.persistenceReaderFunc]:console.warn("Persistence Read Error - invalid reader set",this.table.options.persistenceReaderFunc):D.readers[this.mode]?this.readFunc=D.readers[this.mode]:console.warn("Persistence Read Error - invalid reader set",this.mode),this.table.options.persistenceWriterFunc?typeof this.table.options.persistenceWriterFunc=="function"?this.writeFunc=this.table.options.persistenceWriterFunc:D.writers[this.table.options.persistenceWriterFunc]?this.writeFunc=D.writers[this.table.options.persistenceWriterFunc]:console.warn("Persistence Write Error - invalid reader set",this.table.options.persistenceWriterFunc):D.writers[this.mode]?this.writeFunc=D.writers[this.mode]:console.warn("Persistence Write Error - invalid writer set",this.mode),this.id="tabulator-"+(t||this.table.element.getAttribute("id")||""),this.config={sort:this.table.options.persistence===!0||this.table.options.persistence.sort,filter:this.table.options.persistence===!0||this.table.options.persistence.filter,headerFilter:this.table.options.persistence===!0||this.table.options.persistence.headerFilter,group:this.table.options.persistence===!0||this.table.options.persistence.group,page:this.table.options.persistence===!0||this.table.options.persistence.page,columns:this.table.options.persistence===!0?["title","width","visible"]:this.table.options.persistence.columns},this.config.page&&(i=this.retrieveData("page"),i&&(typeof i.paginationSize<"u"&&(this.config.page===!0||this.config.page.size)&&(this.table.options.paginationSize=i.paginationSize),typeof i.paginationInitialPage<"u"&&(this.config.page===!0||this.config.page.page)&&(this.table.options.paginationInitialPage=i.paginationInitialPage))),this.config.group&&(i=this.retrieveData("group"),i&&(typeof i.groupBy<"u"&&(this.config.group===!0||this.config.group.groupBy)&&(this.table.options.groupBy=i.groupBy),typeof i.groupStartOpen<"u"&&(this.config.group===!0||this.config.group.groupStartOpen)&&(this.table.options.groupStartOpen=i.groupStartOpen),typeof i.groupHeader<"u"&&(this.config.group===!0||this.config.group.groupHeader)&&(this.table.options.groupHeader=i.groupHeader))),this.config.columns&&(this.table.options.columns=this.load("columns",this.table.options.columns),this.subscribe("column-init",this.initializeColumn.bind(this)),this.subscribe("column-show",this.save.bind(this,"columns")),this.subscribe("column-hide",this.save.bind(this,"columns")),this.subscribe("column-moved",this.save.bind(this,"columns"))),this.subscribe("table-built",this.tableBuilt.bind(this),0),this.subscribe("table-redraw",this.tableRedraw.bind(this)),this.subscribe("filter-changed",this.eventSave.bind(this,"filter")),this.subscribe("filter-changed",this.eventSave.bind(this,"headerFilter")),this.subscribe("sort-changed",this.eventSave.bind(this,"sort")),this.subscribe("group-changed",this.eventSave.bind(this,"group")),this.subscribe("page-changed",this.eventSave.bind(this,"page")),this.subscribe("column-resized",this.eventSave.bind(this,"columns")),this.subscribe("column-width",this.eventSave.bind(this,"columns")),this.subscribe("layout-refreshed",this.eventSave.bind(this,"columns"))}this.registerTableFunction("getColumnLayout",this.getColumnLayout.bind(this)),this.registerTableFunction("setColumnLayout",this.setColumnLayout.bind(this))}eventSave(e){this.config[e]&&this.save(e)}tableBuilt(){var e,t,i;this.config.sort&&(e=this.load("sort"),e&&(this.table.options.initialSort=e)),this.config.filter&&(t=this.load("filter"),t&&(this.table.options.initialFilter=t)),this.config.headerFilter&&(i=this.load("headerFilter"),i&&(this.table.options.initialHeaderFilter=i))}tableRedraw(e){e&&this.config.columns&&this.save("columns")}getColumnLayout(){return this.parseColumns(this.table.columnManager.getColumns())}setColumnLayout(e){return this.table.columnManager.setColumns(this.mergeDefinition(this.table.options.columns,e,!0)),!0}initializeColumn(e){var t,i;this.config.columns&&(this.defWatcherBlock=!0,t=e.getDefinition(),i=this.config.columns===!0?Object.keys(t):this.config.columns,i.forEach(s=>{var n=Object.getOwnPropertyDescriptor(t,s),r=t[s];n&&Object.defineProperty(t,s,{set:o=>{r=o,this.defWatcherBlock||this.save("columns"),n.set&&n.set(o)},get:()=>(n.get&&n.get(),r)})}),this.defWatcherBlock=!1)}load(e,t){var i=this.retrieveData(e);return t&&(i=i?this.mergeDefinition(t,i):t),i}retrieveData(e){return this.readFunc?this.readFunc(this.id,e):!1}mergeDefinition(e,t,i){var s=[];return t=t||[],t.forEach((n,r)=>{var o=this._findColumn(e,n),a;o&&(i?a=Object.keys(n):this.config.columns===!0||this.config.columns==null?(a=Object.keys(o),a.push("width")):a=this.config.columns,a.forEach(h=>{h!=="columns"&&typeof n[h]<"u"&&(o[h]=n[h])}),o.columns&&(o.columns=this.mergeDefinition(o.columns,n.columns)),s.push(o))}),e.forEach((n,r)=>{var o=this._findColumn(t,n);o||(s.length>r?s.splice(r,0,n):s.push(n))}),s}_findColumn(e,t){var i=t.columns?"group":t.field?"field":"object";return e.find(function(s){switch(i){case"group":return s.title===t.title&&s.columns.length===t.columns.length;case"field":return s.field===t.field;case"object":return s===t}})}save(e){var t={};switch(e){case"columns":t=this.parseColumns(this.table.columnManager.getColumns());break;case"filter":t=this.table.modules.filter.getFilters();break;case"headerFilter":t=this.table.modules.filter.getHeaderFilters();break;case"sort":t=this.validateSorters(this.table.modules.sort.getSort());break;case"group":t=this.getGroupConfig();break;case"page":t=this.getPageConfig();break}this.writeFunc&&this.writeFunc(this.id,e,t)}validateSorters(e){return e.forEach(function(t){t.column=t.field,delete t.field}),e}getGroupConfig(){var e={};return this.config.group&&((this.config.group===!0||this.config.group.groupBy)&&(e.groupBy=this.table.options.groupBy),(this.config.group===!0||this.config.group.groupStartOpen)&&(e.groupStartOpen=this.table.options.groupStartOpen),(this.config.group===!0||this.config.group.groupHeader)&&(e.groupHeader=this.table.options.groupHeader)),e}getPageConfig(){var e={};return this.config.page&&((this.config.page===!0||this.config.page.size)&&(e.paginationSize=this.table.modules.page.getPageSize()),(this.config.page===!0||this.config.page.page)&&(e.paginationInitialPage=this.table.modules.page.getPage())),e}parseColumns(e){var t=[],i=["headerContextMenu","headerMenu","contextMenu","clickMenu"];return e.forEach(s=>{var n={},r=s.getDefinition(),o;s.isGroup?(n.title=r.title,n.columns=this.parseColumns(s.getColumns())):(n.field=s.getField(),this.config.columns===!0||this.config.columns==null?(o=Object.keys(r),o.push("width"),o.push("visible")):o=this.config.columns,o.forEach(a=>{switch(a){case"width":n.width=s.getWidth();break;case"visible":n.visible=s.visible;break;default:typeof r[a]!="function"&&i.indexOf(a)===-1&&(n[a]=r[a])}})),t.push(n)}),t}};b(D,"moduleName","persistence"),b(D,"moduleInitOrder",-10),b(D,"readers",Ji),b(D,"writers",Ki);let Se=D;class at extends w{constructor(e){super(e),this.columnSubscribers={},this.registerTableOption("rowContextPopup",!1),this.registerTableOption("rowClickPopup",!1),this.registerTableOption("rowDblClickPopup",!1),this.registerTableOption("groupContextPopup",!1),this.registerTableOption("groupClickPopup",!1),this.registerTableOption("groupDblClickPopup",!1),this.registerColumnOption("headerContextPopup"),this.registerColumnOption("headerClickPopup"),this.registerColumnOption("headerDblClickPopup"),this.registerColumnOption("headerPopup"),this.registerColumnOption("headerPopupIcon"),this.registerColumnOption("contextPopup"),this.registerColumnOption("clickPopup"),this.registerColumnOption("dblClickPopup"),this.registerComponentFunction("cell","popup",this._componentPopupCall.bind(this)),this.registerComponentFunction("column","popup",this._componentPopupCall.bind(this)),this.registerComponentFunction("row","popup",this._componentPopupCall.bind(this)),this.registerComponentFunction("group","popup",this._componentPopupCall.bind(this))}initialize(){this.initializeRowWatchers(),this.initializeGroupWatchers(),this.subscribe("column-init",this.initializeColumn.bind(this))}_componentPopupCall(e,t,i){this.loadPopupEvent(t,null,e,i)}initializeRowWatchers(){this.table.options.rowContextPopup&&(this.subscribe("row-contextmenu",this.loadPopupEvent.bind(this,this.table.options.rowContextPopup)),this.table.on("rowTapHold",this.loadPopupEvent.bind(this,this.table.options.rowContextPopup))),this.table.options.rowClickPopup&&this.subscribe("row-click",this.loadPopupEvent.bind(this,this.table.options.rowClickPopup)),this.table.options.rowDblClickPopup&&this.subscribe("row-dblclick",this.loadPopupEvent.bind(this,this.table.options.rowDblClickPopup))}initializeGroupWatchers(){this.table.options.groupContextPopup&&(this.subscribe("group-contextmenu",this.loadPopupEvent.bind(this,this.table.options.groupContextPopup)),this.table.on("groupTapHold",this.loadPopupEvent.bind(this,this.table.options.groupContextPopup))),this.table.options.groupClickPopup&&this.subscribe("group-click",this.loadPopupEvent.bind(this,this.table.options.groupClickPopup)),this.table.options.groupDblClickPopup&&this.subscribe("group-dblclick",this.loadPopupEvent.bind(this,this.table.options.groupDblClickPopup))}initializeColumn(e){var t=e.definition;t.headerContextPopup&&!this.columnSubscribers.headerContextPopup&&(this.columnSubscribers.headerContextPopup=this.loadPopupTableColumnEvent.bind(this,"headerContextPopup"),this.subscribe("column-contextmenu",this.columnSubscribers.headerContextPopup),this.table.on("headerTapHold",this.loadPopupTableColumnEvent.bind(this,"headerContextPopup"))),t.headerClickPopup&&!this.columnSubscribers.headerClickPopup&&(this.columnSubscribers.headerClickPopup=this.loadPopupTableColumnEvent.bind(this,"headerClickPopup"),this.subscribe("column-click",this.columnSubscribers.headerClickPopup)),t.headerDblClickPopup&&!this.columnSubscribers.headerDblClickPopup&&(this.columnSubscribers.headerDblClickPopup=this.loadPopupTableColumnEvent.bind(this,"headerDblClickPopup"),this.subscribe("column-dblclick",this.columnSubscribers.headerDblClickPopup)),t.headerPopup&&this.initializeColumnHeaderPopup(e),t.contextPopup&&!this.columnSubscribers.contextPopup&&(this.columnSubscribers.contextPopup=this.loadPopupTableCellEvent.bind(this,"contextPopup"),this.subscribe("cell-contextmenu",this.columnSubscribers.contextPopup),this.table.on("cellTapHold",this.loadPopupTableCellEvent.bind(this,"contextPopup"))),t.clickPopup&&!this.columnSubscribers.clickPopup&&(this.columnSubscribers.clickPopup=this.loadPopupTableCellEvent.bind(this,"clickPopup"),this.subscribe("cell-click",this.columnSubscribers.clickPopup)),t.dblClickPopup&&!this.columnSubscribers.dblClickPopup&&(this.columnSubscribers.dblClickPopup=this.loadPopupTableCellEvent.bind(this,"dblClickPopup"),this.subscribe("cell-click",this.columnSubscribers.dblClickPopup))}initializeColumnHeaderPopup(e){var t=e.definition.headerPopupIcon,i;i=document.createElement("span"),i.classList.add("tabulator-header-popup-button"),t?(typeof t=="function"&&(t=t(e.getComponent())),t instanceof HTMLElement?i.appendChild(t):i.innerHTML=t):i.innerHTML="⋮",i.addEventListener("click",s=>{s.stopPropagation(),s.preventDefault(),this.loadPopupEvent(e.definition.headerPopup,s,e)}),e.titleElement.insertBefore(i,e.titleElement.firstChild)}loadPopupTableCellEvent(e,t,i){i._cell&&(i=i._cell),i.column.definition[e]&&this.loadPopupEvent(i.column.definition[e],t,i)}loadPopupTableColumnEvent(e,t,i){i._column&&(i=i._column),i.definition[e]&&this.loadPopupEvent(i.definition[e],t,i)}loadPopupEvent(e,t,i,s){var n;function r(o){n=o}i._group?i=i._group:i._row&&(i=i._row),e=typeof e=="function"?e.call(this.table,t,i.getComponent(),r):e,this.loadPopup(t,i,e,n,s)}loadPopup(e,t,i,s,n){var r=!(e instanceof MouseEvent),o,a;i instanceof HTMLElement?o=i:(o=document.createElement("div"),o.innerHTML=i),o.classList.add("tabulator-popup"),o.addEventListener("click",h=>{h.stopPropagation()}),r||e.preventDefault(),a=this.popup(o),typeof s=="function"&&a.renderCallback(s),e?a.show(e):a.show(t.getElement(),n||"center"),a.hideOnBlur(()=>{this.dispatchExternal("popupClosed",t.getComponent())}),this.dispatchExternal("popupOpened",t.getComponent())}}b(at,"moduleName","popup");class lt extends w{constructor(e){super(e),this.element=!1,this.manualBlock=!1,this.beforeprintEventHandler=null,this.afterprintEventHandler=null,this.registerTableOption("printAsHtml",!1),this.registerTableOption("printFormatter",!1),this.registerTableOption("printHeader",!1),this.registerTableOption("printFooter",!1),this.registerTableOption("printStyled",!0),this.registerTableOption("printRowRange","visible"),this.registerTableOption("printConfig",{}),this.registerColumnOption("print"),this.registerColumnOption("titlePrint")}initialize(){this.table.options.printAsHtml&&(this.beforeprintEventHandler=this.replaceTable.bind(this),this.afterprintEventHandler=this.cleanup.bind(this),window.addEventListener("beforeprint",this.beforeprintEventHandler),window.addEventListener("afterprint",this.afterprintEventHandler),this.subscribe("table-destroy",this.destroy.bind(this))),this.registerTableFunction("print",this.printFullscreen.bind(this))}destroy(){this.table.options.printAsHtml&&(window.removeEventListener("beforeprint",this.beforeprintEventHandler),window.removeEventListener("afterprint",this.afterprintEventHandler))}replaceTable(){this.manualBlock||(this.element=document.createElement("div"),this.element.classList.add("tabulator-print-table"),this.element.appendChild(this.table.modules.export.generateTable(this.table.options.printConfig,this.table.options.printStyled,this.table.options.printRowRange,"print")),this.table.element.style.display="none",this.table.element.parentNode.insertBefore(this.element,this.table.element))}cleanup(){document.body.classList.remove("tabulator-print-fullscreen-hide"),this.element&&this.element.parentNode&&(this.element.parentNode.removeChild(this.element),this.table.element.style.display="")}printFullscreen(e,t,i){var s=window.scrollX,n=window.scrollY,r=document.createElement("div"),o=document.createElement("div"),a=this.table.modules.export.generateTable(typeof i<"u"?i:this.table.options.printConfig,typeof t<"u"?t:this.table.options.printStyled,e||this.table.options.printRowRange,"print"),h,d;this.manualBlock=!0,this.element=document.createElement("div"),this.element.classList.add("tabulator-print-fullscreen"),this.table.options.printHeader&&(r.classList.add("tabulator-print-header"),h=typeof this.table.options.printHeader=="function"?this.table.options.printHeader.call(this.table):this.table.options.printHeader,typeof h=="string"?r.innerHTML=h:r.appendChild(h),this.element.appendChild(r)),this.element.appendChild(a),this.table.options.printFooter&&(o.classList.add("tabulator-print-footer"),d=typeof this.table.options.printFooter=="function"?this.table.options.printFooter.call(this.table):this.table.options.printFooter,typeof d=="string"?o.innerHTML=d:o.appendChild(d),this.element.appendChild(o)),document.body.classList.add("tabulator-print-fullscreen-hide"),document.body.appendChild(this.element),this.table.options.printFormatter&&this.table.options.printFormatter(this.element,a),window.print(),this.cleanup(),window.scrollTo(s,n),this.manualBlock=!1}}b(lt,"moduleName","print");class ht extends w{constructor(e){super(e),this.data=!1,this.blocked=!1,this.origFuncs={},this.currentVersion=0,this.registerTableOption("reactiveData",!1)}initialize(){this.table.options.reactiveData&&(this.subscribe("cell-value-save-before",this.block.bind(this,"cellsave")),this.subscribe("cell-value-save-after",this.unblock.bind(this,"cellsave")),this.subscribe("row-data-save-before",this.block.bind(this,"rowsave")),this.subscribe("row-data-save-after",this.unblock.bind(this,"rowsave")),this.subscribe("row-data-init-after",this.watchRow.bind(this)),this.subscribe("data-processing",this.watchData.bind(this)),this.subscribe("table-destroy",this.unwatchData.bind(this)))}watchData(e){var t=this,i;this.currentVersion++,i=this.currentVersion,this.unwatchData(),this.data=e,this.origFuncs.push=e.push,Object.defineProperty(this.data,"push",{enumerable:!1,configurable:!0,value:function(){var s=Array.from(arguments),n;return!t.blocked&&i===t.currentVersion&&(t.block("data-push"),s.forEach(r=>{t.table.rowManager.addRowActual(r,!1)}),n=t.origFuncs.push.apply(e,arguments),t.unblock("data-push")),n}}),this.origFuncs.unshift=e.unshift,Object.defineProperty(this.data,"unshift",{enumerable:!1,configurable:!0,value:function(){var s=Array.from(arguments),n;return!t.blocked&&i===t.currentVersion&&(t.block("data-unshift"),s.forEach(r=>{t.table.rowManager.addRowActual(r,!0)}),n=t.origFuncs.unshift.apply(e,arguments),t.unblock("data-unshift")),n}}),this.origFuncs.shift=e.shift,Object.defineProperty(this.data,"shift",{enumerable:!1,configurable:!0,value:function(){var s,n;return!t.blocked&&i===t.currentVersion&&(t.block("data-shift"),t.data.length&&(s=t.table.rowManager.getRowFromDataObject(t.data[0]),s&&s.deleteActual()),n=t.origFuncs.shift.call(e),t.unblock("data-shift")),n}}),this.origFuncs.pop=e.pop,Object.defineProperty(this.data,"pop",{enumerable:!1,configurable:!0,value:function(){var s,n;return!t.blocked&&i===t.currentVersion&&(t.block("data-pop"),t.data.length&&(s=t.table.rowManager.getRowFromDataObject(t.data[t.data.length-1]),s&&s.deleteActual()),n=t.origFuncs.pop.call(e),t.unblock("data-pop")),n}}),this.origFuncs.splice=e.splice,Object.defineProperty(this.data,"splice",{enumerable:!1,configurable:!0,value:function(){var s=Array.from(arguments),n=s[0]<0?e.length+s[0]:s[0],r=s[1],o=s[2]?s.slice(2):!1,a,h;if(!t.blocked&&i===t.currentVersion){if(t.block("data-splice"),o&&(a=e[n]?t.table.rowManager.getRowFromDataObject(e[n]):!1,a?o.forEach(u=>{t.table.rowManager.addRowActual(u,!0,a,!0)}):(o=o.slice().reverse(),o.forEach(u=>{t.table.rowManager.addRowActual(u,!0,!1,!0)}))),r!==0){var d=e.slice(n,typeof s[1]>"u"?s[1]:n+r);d.forEach((u,c)=>{var f=t.table.rowManager.getRowFromDataObject(u);f&&f.deleteActual(c!==d.length-1)})}(o||r!==0)&&t.table.rowManager.reRenderInPosition(),h=t.origFuncs.splice.apply(e,arguments),t.unblock("data-splice")}return h}})}unwatchData(){if(this.data!==!1)for(var e in this.origFuncs)Object.defineProperty(this.data,e,{enumerable:!0,configurable:!0,writable:!0,value:this.origFuncs.key})}watchRow(e){var t=e.getData();for(var i in t)this.watchKey(e,t,i);this.table.options.dataTree&&this.watchTreeChildren(e)}watchTreeChildren(e){var t=this,i=e.getData()[this.table.options.dataTreeChildField],s={};i&&(s.push=i.push,Object.defineProperty(i,"push",{enumerable:!1,configurable:!0,value:()=>{if(!t.blocked){t.block("tree-push");var n=s.push.apply(i,arguments);this.rebuildTree(e),t.unblock("tree-push")}return n}}),s.unshift=i.unshift,Object.defineProperty(i,"unshift",{enumerable:!1,configurable:!0,value:()=>{if(!t.blocked){t.block("tree-unshift");var n=s.unshift.apply(i,arguments);this.rebuildTree(e),t.unblock("tree-unshift")}return n}}),s.shift=i.shift,Object.defineProperty(i,"shift",{enumerable:!1,configurable:!0,value:()=>{if(!t.blocked){t.block("tree-shift");var n=s.shift.call(i);this.rebuildTree(e),t.unblock("tree-shift")}return n}}),s.pop=i.pop,Object.defineProperty(i,"pop",{enumerable:!1,configurable:!0,value:()=>{if(!t.blocked){t.block("tree-pop");var n=s.pop.call(i);this.rebuildTree(e),t.unblock("tree-pop")}return n}}),s.splice=i.splice,Object.defineProperty(i,"splice",{enumerable:!1,configurable:!0,value:()=>{if(!t.blocked){t.block("tree-splice");var n=s.splice.apply(i,arguments);this.rebuildTree(e),t.unblock("tree-splice")}return n}}))}rebuildTree(e){this.table.modules.dataTree.initializeRow(e),this.table.modules.dataTree.layoutRow(e),this.table.rowManager.refreshActiveData("tree",!1,!0)}watchKey(e,t,i){var s=this,n=Object.getOwnPropertyDescriptor(t,i),r=t[i],o=this.currentVersion;Object.defineProperty(t,i,{set:a=>{if(r=a,!s.blocked&&o===s.currentVersion){s.block("key");var h={};h[i]=a,e.updateData(h),s.unblock("key")}n.set&&n.set(a)},get:()=>(n.get&&n.get(),r)})}unwatchRow(e){var t=e.getData();for(var i in t)Object.defineProperty(t,i,{value:t[i]})}block(e){this.blocked||(this.blocked=e)}unblock(e){this.blocked===e&&(this.blocked=!1)}}b(ht,"moduleName","reactiveData");class dt extends w{constructor(e){super(e),this.startColumn=!1,this.startX=!1,this.startWidth=!1,this.latestX=!1,this.handle=null,this.initialNextColumn=null,this.nextColumn=null,this.initialized=!1,this.registerColumnOption("resizable",!0),this.registerTableOption("resizableColumnFit",!1),this.registerTableOption("resizableColumnGuide",!1)}initialize(){this.subscribe("column-rendered",this.layoutColumnHeader.bind(this))}initializeEventWatchers(){this.initialized||(this.subscribe("cell-rendered",this.layoutCellHandles.bind(this)),this.subscribe("cell-delete",this.deInitializeComponent.bind(this)),this.subscribe("cell-height",this.resizeHandle.bind(this)),this.subscribe("column-moved",this.columnLayoutUpdated.bind(this)),this.subscribe("column-hide",this.deInitializeColumn.bind(this)),this.subscribe("column-show",this.columnLayoutUpdated.bind(this)),this.subscribe("column-width",this.columnWidthUpdated.bind(this)),this.subscribe("column-delete",this.deInitializeComponent.bind(this)),this.subscribe("column-height",this.resizeHandle.bind(this)),this.initialized=!0)}layoutCellHandles(e){e.row.type==="row"&&(this.deInitializeComponent(e),this.initializeColumn("cell",e,e.column,e.element))}layoutColumnHeader(e){e.definition.resizable&&(this.initializeEventWatchers(),this.deInitializeComponent(e),this.initializeColumn("header",e,e,e.element))}columnLayoutUpdated(e){var t=e.prevColumn();this.reinitializeColumn(e),t&&this.reinitializeColumn(t)}columnWidthUpdated(e){e.modules.frozen&&(this.table.modules.frozenColumns.leftColumns.includes(e)?this.table.modules.frozenColumns.leftColumns.forEach(t=>{this.reinitializeColumn(t)}):this.table.modules.frozenColumns.rightColumns.includes(e)&&this.table.modules.frozenColumns.rightColumns.forEach(t=>{this.reinitializeColumn(t)}))}frozenColumnOffset(e){var t=!1;return e.modules.frozen&&(t=e.modules.frozen.marginValue,e.modules.frozen.position==="left"?t+=e.getWidth()-3:t&&(t-=3)),t!==!1?t+"px":!1}reinitializeColumn(e){var t=this.frozenColumnOffset(e);e.cells.forEach(i=>{i.modules.resize&&i.modules.resize.handleEl&&(t&&(i.modules.resize.handleEl.style[e.modules.frozen.position]=t,i.modules.resize.handleEl.style["z-index"]=11),i.element.after(i.modules.resize.handleEl))}),e.modules.resize&&e.modules.resize.handleEl&&(t&&(e.modules.resize.handleEl.style[e.modules.frozen.position]=t),e.element.after(e.modules.resize.handleEl))}initializeColumn(e,t,i,s){var n=this,r=!1,o=i.definition.resizable,a={},h=i.getLastColumn();if(e==="header"&&(r=i.definition.formatter=="textarea"||i.definition.variableHeight,a={variableHeight:r}),(o===!0||o==e)&&this._checkResizability(h)){var d=document.createElement("span");d.className="tabulator-col-resize-handle",d.addEventListener("click",function(c){c.stopPropagation()});var u=function(c){n.startColumn=i,n.initialNextColumn=n.nextColumn=h.nextColumn(),n._mouseDown(c,h,d)};d.addEventListener("mousedown",u),d.addEventListener("touchstart",u,{passive:!0}),d.addEventListener("dblclick",c=>{var f=h.getWidth();c.stopPropagation(),h.reinitializeWidth(!0),f!==h.getWidth()&&(n.dispatch("column-resized",h),n.dispatchExternal("columnResized",h.getComponent()))}),i.modules.frozen&&(d.style.position="sticky",d.style[i.modules.frozen.position]=this.frozenColumnOffset(i)),a.handleEl=d,s.parentNode&&i.visible&&s.after(d)}t.modules.resize=a}deInitializeColumn(e){this.deInitializeComponent(e),e.cells.forEach(t=>{this.deInitializeComponent(t)})}deInitializeComponent(e){var t;e.modules.resize&&(t=e.modules.resize.handleEl,t&&t.parentElement&&t.parentElement.removeChild(t))}resizeHandle(e,t){e.modules.resize&&e.modules.resize.handleEl&&(e.modules.resize.handleEl.style.height=t)}resize(e,t){var i=typeof e.clientX>"u"?e.touches[0].clientX:e.clientX,s=i-this.startX,n=i-this.latestX,r,o;if(this.latestX=i,this.table.rtl&&(s=-s,n=-n),r=t.width==t.minWidth||t.width==t.maxWidth,t.setWidth(this.startWidth+s),o=t.width==t.minWidth||t.width==t.maxWidth,n<0&&(this.nextColumn=this.initialNextColumn),this.table.options.resizableColumnFit&&this.nextColumn&&!(r&&o)){let a=this.nextColumn.getWidth();n>0&&a<=this.nextColumn.minWidth&&(this.nextColumn=this.nextColumn.nextColumn()),this.nextColumn&&this.nextColumn.setWidth(this.nextColumn.getWidth()-n)}this.table.columnManager.rerenderColumns(!0),!this.table.browserSlow&&t.modules.resize&&t.modules.resize.variableHeight&&t.checkCellHeights()}calcGuidePosition(e,t,i){var s=typeof e.clientX>"u"?e.touches[0].clientX:e.clientX,n=i.getBoundingClientRect().x-this.table.element.getBoundingClientRect().x,r=this.table.element.getBoundingClientRect().x,o=t.element.getBoundingClientRect().left-r,a=s-this.startX,h=Math.max(n+a,o+t.minWidth);return t.maxWidth&&(h=Math.min(h,o+t.maxWidth)),h}_checkResizability(e){return e.definition.resizable}_mouseDown(e,t,i){var s=this,n;this.dispatchExternal("columnResizing",t.getComponent()),s.table.options.resizableColumnGuide&&(n=document.createElement("span"),n.classList.add("tabulator-col-resize-guide"),s.table.element.appendChild(n),setTimeout(()=>{n.style.left=s.calcGuidePosition(e,t,i)+"px"})),s.table.element.classList.add("tabulator-block-select");function r(a){s.table.options.resizableColumnGuide?n.style.left=s.calcGuidePosition(a,t,i)+"px":s.resize(a,t)}function o(a){s.table.options.resizableColumnGuide&&(s.resize(a,t),n.remove()),s.startColumn.modules.edit&&(s.startColumn.modules.edit.blocked=!1),s.table.browserSlow&&t.modules.resize&&t.modules.resize.variableHeight&&t.checkCellHeights(),document.body.removeEventListener("mouseup",o),document.body.removeEventListener("mousemove",r),i.removeEventListener("touchmove",r),i.removeEventListener("touchend",o),s.table.element.classList.remove("tabulator-block-select"),s.startWidth!==t.getWidth()&&(s.table.columnManager.verticalAlignHeaders(),s.dispatch("column-resized",t),s.dispatchExternal("columnResized",t.getComponent()))}e.stopPropagation(),s.startColumn.modules.edit&&(s.startColumn.modules.edit.blocked=!0),s.startX=typeof e.clientX>"u"?e.touches[0].clientX:e.clientX,s.latestX=s.startX,s.startWidth=t.getWidth(),document.body.addEventListener("mousemove",r),document.body.addEventListener("mouseup",o),i.addEventListener("touchmove",r,{passive:!0}),i.addEventListener("touchend",o)}}b(dt,"moduleName","resizeColumns");class ut extends w{constructor(e){super(e),this.startColumn=!1,this.startY=!1,this.startHeight=!1,this.handle=null,this.prevHandle=null,this.registerTableOption("resizableRows",!1),this.registerTableOption("resizableRowGuide",!1)}initialize(){this.table.options.resizableRows&&this.subscribe("row-layout-after",this.initializeRow.bind(this))}initializeRow(e){var t=this,i=e.getElement(),s=document.createElement("div");s.className="tabulator-row-resize-handle";var n=document.createElement("div");n.className="tabulator-row-resize-handle prev",s.addEventListener("click",function(a){a.stopPropagation()});var r=function(a){t.startRow=e,t._mouseDown(a,e,s)};s.addEventListener("mousedown",r),s.addEventListener("touchstart",r,{passive:!0}),n.addEventListener("click",function(a){a.stopPropagation()});var o=function(a){var h=t.table.rowManager.prevDisplayRow(e);h&&(t.startRow=h,t._mouseDown(a,h,n))};n.addEventListener("mousedown",o),n.addEventListener("touchstart",o,{passive:!0}),i.appendChild(s),i.appendChild(n)}resize(e,t){t.setHeight(this.startHeight+((typeof e.screenY>"u"?e.touches[0].screenY:e.screenY)-this.startY))}calcGuidePosition(e,t,i){var s=typeof e.screenY>"u"?e.touches[0].screenY:e.screenY,n=i.getBoundingClientRect().y-this.table.element.getBoundingClientRect().y,r=this.table.element.getBoundingClientRect().y,o=t.element.getBoundingClientRect().top-r,a=s-this.startY;return Math.max(n+a,o)}_mouseDown(e,t,i){var s=this,n;s.dispatchExternal("rowResizing",t.getComponent()),s.table.options.resizableRowGuide&&(n=document.createElement("span"),n.classList.add("tabulator-row-resize-guide"),s.table.element.appendChild(n),setTimeout(()=>{n.style.top=s.calcGuidePosition(e,t,i)+"px"})),s.table.element.classList.add("tabulator-block-select");function r(a){s.table.options.resizableRowGuide?n.style.top=s.calcGuidePosition(a,t,i)+"px":s.resize(a,t)}function o(a){s.table.options.resizableRowGuide&&(s.resize(a,t),n.remove()),document.body.removeEventListener("mouseup",r),document.body.removeEventListener("mousemove",r),i.removeEventListener("touchmove",r),i.removeEventListener("touchend",o),s.table.element.classList.remove("tabulator-block-select"),s.dispatchExternal("rowResized",t.getComponent())}e.stopPropagation(),s.startY=typeof e.screenY>"u"?e.touches[0].screenY:e.screenY,s.startHeight=t.getHeight(),document.body.addEventListener("mousemove",r),document.body.addEventListener("mouseup",o),i.addEventListener("touchmove",r,{passive:!0}),i.addEventListener("touchend",o)}}b(ut,"moduleName","resizeRows");class ct extends w{constructor(e){super(e),this.binding=!1,this.visibilityObserver=!1,this.resizeObserver=!1,this.containerObserver=!1,this.tableHeight=0,this.tableWidth=0,this.containerHeight=0,this.containerWidth=0,this.autoResize=!1,this.visible=!1,this.initialized=!1,this.initialRedraw=!1,this.registerTableOption("autoResize",!0)}initialize(){if(this.table.options.autoResize){var e=this.table,t;this.tableHeight=e.element.clientHeight,this.tableWidth=e.element.clientWidth,e.element.parentNode&&(this.containerHeight=e.element.parentNode.clientHeight,this.containerWidth=e.element.parentNode.clientWidth),typeof IntersectionObserver<"u"&&typeof ResizeObserver<"u"&&e.rowManager.getRenderMode()==="virtual"?(this.initializeVisibilityObserver(),this.autoResize=!0,this.resizeObserver=new ResizeObserver(i=>{if(!e.browserMobile||e.browserMobile&&(!e.modules.edit||e.modules.edit&&!e.modules.edit.currentCell)){var s=Math.floor(i[0].contentRect.height),n=Math.floor(i[0].contentRect.width);(this.tableHeight!=s||this.tableWidth!=n)&&(this.tableHeight=s,this.tableWidth=n,e.element.parentNode&&(this.containerHeight=e.element.parentNode.clientHeight,this.containerWidth=e.element.parentNode.clientWidth),this.redrawTable())}}),this.resizeObserver.observe(e.element),t=window.getComputedStyle(e.element),this.table.element.parentNode&&!this.table.rowManager.fixedHeight&&(t.getPropertyValue("max-height")||t.getPropertyValue("min-height"))&&(this.containerObserver=new ResizeObserver(i=>{if(!e.browserMobile||e.browserMobile&&(!e.modules.edit||e.modules.edit&&!e.modules.edit.currentCell)){var s=Math.floor(i[0].contentRect.height),n=Math.floor(i[0].contentRect.width);(this.containerHeight!=s||this.containerWidth!=n)&&(this.containerHeight=s,this.containerWidth=n,this.tableHeight=e.element.clientHeight,this.tableWidth=e.element.clientWidth),this.redrawTable()}}),this.containerObserver.observe(this.table.element.parentNode)),this.subscribe("table-resize",this.tableResized.bind(this))):(this.binding=function(){(!e.browserMobile||e.browserMobile&&(!e.modules.edit||e.modules.edit&&!e.modules.edit.currentCell))&&(e.columnManager.rerenderColumns(!0),e.redraw())},window.addEventListener("resize",this.binding)),this.subscribe("table-destroy",this.clearBindings.bind(this))}}initializeVisibilityObserver(){this.visibilityObserver=new IntersectionObserver(e=>{this.visible=e[0].isIntersecting,this.initialized?this.visible&&(this.redrawTable(this.initialRedraw),this.initialRedraw=!1):(this.initialized=!0,this.initialRedraw=!this.visible)}),this.visibilityObserver.observe(this.table.element)}redrawTable(e){this.initialized&&this.visible&&(this.table.columnManager.rerenderColumns(!0),this.table.redraw(e))}tableResized(){this.table.rowManager.redraw()}clearBindings(){this.binding&&window.removeEventListener("resize",this.binding),this.resizeObserver&&this.resizeObserver.unobserve(this.table.element),this.visibilityObserver&&this.visibilityObserver.unobserve(this.table.element),this.containerObserver&&this.containerObserver.unobserve(this.table.element.parentNode)}}b(ct,"moduleName","resizeTable");function qi(l,e,t){var i=document.createElement("div"),s=l.getRow()._row.modules.responsiveLayout;i.classList.add("tabulator-responsive-collapse-toggle"),i.innerHTML=` + + + + + + +`,l.getElement().classList.add("tabulator-row-handle");function n(r){var o=s.element;s.open=r,o&&(s.open?(i.classList.add("open"),o.style.display=""):(i.classList.remove("open"),o.style.display="none"))}return i.addEventListener("click",function(r){r.stopImmediatePropagation(),n(!s.open),l.getTable().rowManager.adjustTableSize()}),n(s.open),i}var Yi={format:{formatters:{responsiveCollapse:qi}}};class De extends w{constructor(e){super(e),this.columns=[],this.hiddenColumns=[],this.mode="",this.index=0,this.collapseFormatter=[],this.collapseStartOpen=!0,this.collapseHandleColumn=!1,this.registerTableOption("responsiveLayout",!1),this.registerTableOption("responsiveLayoutCollapseStartOpen",!0),this.registerTableOption("responsiveLayoutCollapseUseFormatters",!0),this.registerTableOption("responsiveLayoutCollapseFormatter",!1),this.registerColumnOption("responsive")}initialize(){this.table.options.responsiveLayout&&(this.subscribe("column-layout",this.initializeColumn.bind(this)),this.subscribe("column-show",this.updateColumnVisibility.bind(this)),this.subscribe("column-hide",this.updateColumnVisibility.bind(this)),this.subscribe("columns-loaded",this.initializeResponsivity.bind(this)),this.subscribe("column-moved",this.initializeResponsivity.bind(this)),this.subscribe("column-add",this.initializeResponsivity.bind(this)),this.subscribe("column-delete",this.initializeResponsivity.bind(this)),this.subscribe("table-redrawing",this.tableRedraw.bind(this)),this.table.options.responsiveLayout==="collapse"&&(this.subscribe("row-data-changed",this.generateCollapsedRowContent.bind(this)),this.subscribe("row-init",this.initializeRow.bind(this)),this.subscribe("row-layout",this.layoutRow.bind(this))))}tableRedraw(e){["fitColumns","fitDataStretch"].indexOf(this.layoutMode())===-1&&(e||this.update())}initializeResponsivity(){var e=[];this.mode=this.table.options.responsiveLayout,this.collapseFormatter=this.table.options.responsiveLayoutCollapseFormatter||this.formatCollapsedData,this.collapseStartOpen=this.table.options.responsiveLayoutCollapseStartOpen,this.hiddenColumns=[],this.collapseFormatter&&(this.collapseFormatter=this.collapseFormatter.bind(this.table)),this.table.columnManager.columnsByIndex.forEach((t,i)=>{t.modules.responsive&&t.modules.responsive.order&&t.modules.responsive.visible&&(t.modules.responsive.index=i,e.push(t),!t.visible&&this.mode==="collapse"&&this.hiddenColumns.push(t))}),e=e.reverse(),e=e.sort((t,i)=>{var s=i.modules.responsive.order-t.modules.responsive.order;return s||i.modules.responsive.index-t.modules.responsive.index}),this.columns=e,this.mode==="collapse"&&this.generateCollapsedContent();for(let t of this.table.columnManager.columnsByIndex)if(t.definition.formatter=="responsiveCollapse"){this.collapseHandleColumn=t;break}this.collapseHandleColumn&&(this.hiddenColumns.length?this.collapseHandleColumn.show():this.collapseHandleColumn.hide())}initializeColumn(e){var t=e.getDefinition();e.modules.responsive={order:typeof t.responsive>"u"?1:t.responsive,visible:t.visible!==!1}}initializeRow(e){var t;e.type!=="calc"&&(t=document.createElement("div"),t.classList.add("tabulator-responsive-collapse"),e.modules.responsiveLayout={element:t,open:this.collapseStartOpen},this.collapseStartOpen||(t.style.display="none"))}layoutRow(e){var t=e.getElement();e.modules.responsiveLayout&&(t.appendChild(e.modules.responsiveLayout.element),this.generateCollapsedRowContent(e))}updateColumnVisibility(e,t){!t&&e.modules.responsive&&(e.modules.responsive.visible=e.visible,this.initializeResponsivity())}hideColumn(e){var t=this.hiddenColumns.length;e.hide(!1,!0),this.mode==="collapse"&&(this.hiddenColumns.unshift(e),this.generateCollapsedContent(),this.collapseHandleColumn&&!t&&this.collapseHandleColumn.show())}showColumn(e){var t;e.show(!1,!0),e.setWidth(e.getWidth()),this.mode==="collapse"&&(t=this.hiddenColumns.indexOf(e),t>-1&&this.hiddenColumns.splice(t,1),this.generateCollapsedContent(),this.collapseHandleColumn&&!this.hiddenColumns.length&&this.collapseHandleColumn.hide())}update(){for(var e=!0;e;){let t=this.table.modules.layout.getMode()=="fitColumns"?this.table.columnManager.getFlexBaseWidth():this.table.columnManager.getWidth(),i=(this.table.options.headerVisible?this.table.columnManager.element.clientWidth:this.table.element.clientWidth)-t;if(i<0){let s=this.columns[this.index];s?(this.hideColumn(s),this.index++):e=!1}else{let s=this.columns[this.index-1];s&&i>0&&i>=s.getWidth()?(this.showColumn(s),this.index--):e=!1}this.table.rowManager.activeRowsCount||this.table.rowManager.renderEmptyScroll()}}generateCollapsedContent(){var e=this.table.rowManager.getDisplayRows();e.forEach(t=>{this.generateCollapsedRowContent(t)})}generateCollapsedRowContent(e){var t,i;if(e.modules.responsiveLayout){for(t=e.modules.responsiveLayout.element;t.firstChild;)t.removeChild(t.firstChild);i=this.collapseFormatter(this.generateCollapsedRowData(e)),i&&t.appendChild(i),e.calcHeight(!0)}}generateCollapsedRowData(e){var t=e.getData(),i=[],s;return this.hiddenColumns.forEach(n=>{var r=n.getFieldValue(t);if(n.definition.title&&n.field)if(n.modules.format&&this.table.options.responsiveLayoutCollapseUseFormatters){let o=function(a){a()};s={value:!1,data:{},getValue:function(){return r},getData:function(){return t},getType:function(){return"cell"},getElement:function(){return document.createElement("div")},getRow:function(){return e.getComponent()},getColumn:function(){return n.getComponent()},getTable:()=>this.table},i.push({field:n.field,title:n.definition.title,value:n.modules.format.formatter.call(this.table.modules.format,s,n.modules.format.params,o)})}else i.push({field:n.field,title:n.definition.title,value:r})}),i}formatCollapsedData(e){var t=document.createElement("table");return e.forEach(i=>{var s=document.createElement("tr"),n=document.createElement("td"),r=document.createElement("td"),o,a=document.createElement("strong");n.appendChild(a),this.modules.localize.bind("columns|"+i.field,function(h){a.innerHTML=h||i.title}),i.value instanceof Node?(o=document.createElement("div"),o.appendChild(i.value),r.appendChild(o)):r.innerHTML=i.value,s.appendChild(n),s.appendChild(r),t.appendChild(s)}),Object.keys(e).length?t:""}}b(De,"moduleName","responsiveLayout"),b(De,"moduleExtensions",Yi);function $i(l,e,t){var i=document.createElement("input"),s=!1;if(i.type="checkbox",i.setAttribute("aria-label","Select Row"),this.table.modExists("selectRow",!0))if(i.addEventListener("click",r=>{r.stopPropagation()}),typeof l.getRow=="function"){var n=l.getRow();n instanceof oe?(i.addEventListener("change",r=>{this.table.options.selectableRowsRangeMode==="click"&&s?s=!1:n.toggleSelect()}),this.table.options.selectableRowsRangeMode==="click"&&i.addEventListener("click",r=>{s=!0,this.table.modules.selectRow.handleComplexRowClick(n._row,r)}),i.checked=n.isSelected&&n.isSelected(),this.table.modules.selectRow.registerRowSelectCheckbox(n,i)):i=""}else i.addEventListener("change",r=>{this.table.modules.selectRow.selectedRows.length?this.table.deselectRow():this.table.selectRow(e.rowRange)}),this.table.modules.selectRow.registerHeaderSelectCheckbox(i);return i}var Qi={format:{formatters:{rowSelection:$i}}};class ze extends w{constructor(e){super(e),this.selecting=!1,this.lastClickedRow=!1,this.selectPrev=[],this.selectedRows=[],this.headerCheckboxElement=null,this.registerTableOption("selectableRows","highlight"),this.registerTableOption("selectableRowsRangeMode","drag"),this.registerTableOption("selectableRowsRollingSelection",!0),this.registerTableOption("selectableRowsPersistence",!0),this.registerTableOption("selectableRowsCheck",function(t,i){return!0}),this.registerTableFunction("selectRow",this.selectRows.bind(this)),this.registerTableFunction("deselectRow",this.deselectRows.bind(this)),this.registerTableFunction("toggleSelectRow",this.toggleRow.bind(this)),this.registerTableFunction("getSelectedRows",this.getSelectedRows.bind(this)),this.registerTableFunction("getSelectedData",this.getSelectedData.bind(this)),this.registerComponentFunction("row","select",this.selectRows.bind(this)),this.registerComponentFunction("row","deselect",this.deselectRows.bind(this)),this.registerComponentFunction("row","toggleSelect",this.toggleRow.bind(this)),this.registerComponentFunction("row","isSelected",this.isRowSelected.bind(this))}initialize(){this.deprecatedOptionsCheck(),this.table.options.selectableRows==="highlight"&&this.table.options.selectableRange&&(this.table.options.selectableRows=!1),this.table.options.selectableRows!==!1&&(this.subscribe("row-init",this.initializeRow.bind(this)),this.subscribe("row-deleting",this.rowDeleted.bind(this)),this.subscribe("rows-wipe",this.clearSelectionData.bind(this)),this.subscribe("rows-retrieve",this.rowRetrieve.bind(this)),this.table.options.selectableRows&&!this.table.options.selectableRowsPersistence&&this.subscribe("data-refreshing",this.deselectRows.bind(this)))}deprecatedOptionsCheck(){}rowRetrieve(e,t){return e==="selected"?this.selectedRows:t}rowDeleted(e){this._deselectRow(e,!0)}clearSelectionData(e){var t=this.selectedRows.length;this.selecting=!1,this.lastClickedRow=!1,this.selectPrev=[],this.selectedRows=[],t&&e!==!0&&this._rowSelectionChanged()}initializeRow(e){var t=this,i=t.checkRowSelectability(e),s=e.getElement(),n=function(){setTimeout(function(){t.selecting=!1},50),document.body.removeEventListener("mouseup",n)};e.modules.select={selected:!1},s.classList.toggle("tabulator-selectable",i),s.classList.toggle("tabulator-unselectable",!i),t.checkRowSelectability(e)&&t.table.options.selectableRows&&t.table.options.selectableRows!="highlight"&&(t.table.options.selectableRowsRangeMode==="click"?s.addEventListener("click",this.handleComplexRowClick.bind(this,e)):(s.addEventListener("click",function(r){(!t.table.modExists("edit")||!t.table.modules.edit.getCurrentCell())&&t.table._clearSelection(),t.selecting||t.toggleRow(e)}),s.addEventListener("mousedown",function(r){if(r.shiftKey)return t.table._clearSelection(),t.selecting=!0,t.selectPrev=[],document.body.addEventListener("mouseup",n),document.body.addEventListener("keyup",n),t.toggleRow(e),!1}),s.addEventListener("mouseenter",function(r){t.selecting&&(t.table._clearSelection(),t.toggleRow(e),t.selectPrev[1]==e&&t.toggleRow(t.selectPrev[0]))}),s.addEventListener("mouseout",function(r){t.selecting&&(t.table._clearSelection(),t.selectPrev.unshift(e))})))}handleComplexRowClick(e,t){if(t.shiftKey){this.table._clearSelection(),this.lastClickedRow=this.lastClickedRow||e;var i=this.table.rowManager.getDisplayRowIndex(this.lastClickedRow),s=this.table.rowManager.getDisplayRowIndex(e),n=i<=s?i:s,r=i>=s?i:s,o=this.table.rowManager.getDisplayRows().slice(0),a=o.splice(n,r-n+1);t.ctrlKey||t.metaKey?(a.forEach(h=>{h!==this.lastClickedRow&&(this.table.options.selectableRows!==!0&&!this.isRowSelected(e)?this.selectedRows.lengththis.table.options.selectableRows&&(a=a.slice(0,this.table.options.selectableRows)),this.selectRows(a)),this.table._clearSelection()}else t.ctrlKey||t.metaKey?(this.toggleRow(e),this.lastClickedRow=e):(this.deselectRows(void 0,!0),this.selectRows(e),this.lastClickedRow=e)}checkRowSelectability(e){return e&&e.type==="row"?this.table.options.selectableRowsCheck.call(this.table,e.getComponent()):!1}toggleRow(e){this.checkRowSelectability(e)&&(e.modules.select&&e.modules.select.selected?this._deselectRow(e):this._selectRow(e))}selectRows(e){var t=[],i,s;switch(typeof e){case"undefined":i=this.table.rowManager.rows;break;case"number":i=this.table.rowManager.findRow(e);break;case"string":i=this.table.rowManager.findRow(e),i||(i=this.table.rowManager.getRows(e));break;default:i=e;break}Array.isArray(i)?i.length&&(i.forEach(n=>{s=this._selectRow(n,!0,!0),s&&t.push(s)}),this._rowSelectionChanged(!1,t)):i&&this._selectRow(i,!1,!0)}_selectRow(e,t,i){if(!isNaN(this.table.options.selectableRows)&&this.table.options.selectableRows!==!0&&!i&&this.selectedRows.length>=this.table.options.selectableRows)if(this.table.options.selectableRowsRollingSelection)this._deselectRow(this.selectedRows[0]);else return!1;var s=this.table.rowManager.findRow(e);if(s){if(this.selectedRows.indexOf(s)==-1)return s.getElement().classList.add("tabulator-selected"),s.modules.select||(s.modules.select={}),s.modules.select.selected=!0,s.modules.select.checkboxEl&&(s.modules.select.checkboxEl.checked=!0),this.selectedRows.push(s),this.table.options.dataTreeSelectPropagate&&this.childRowSelection(s,!0),this.dispatchExternal("rowSelected",s.getComponent()),this._rowSelectionChanged(t,s),s}else t||console.warn("Selection Error - No such row found, ignoring selection:"+e)}isRowSelected(e){return this.selectedRows.indexOf(e)!==-1}deselectRows(e,t){var i=[],s,n;switch(typeof e){case"undefined":s=Object.assign([],this.selectedRows);break;case"number":s=this.table.rowManager.findRow(e);break;case"string":s=this.table.rowManager.findRow(e),s||(s=this.table.rowManager.getRows(e));break;default:s=e;break}Array.isArray(s)?s.length&&(s.forEach(r=>{n=this._deselectRow(r,!0,!0),n&&i.push(n)}),this._rowSelectionChanged(t,[],i)):s&&this._deselectRow(s,t,!0)}_deselectRow(e,t){var i=this,s=i.table.rowManager.findRow(e),n,r;if(s){if(n=i.selectedRows.findIndex(function(o){return o==s}),n>-1)return r=s.getElement(),r&&r.classList.remove("tabulator-selected"),s.modules.select||(s.modules.select={}),s.modules.select.selected=!1,s.modules.select.checkboxEl&&(s.modules.select.checkboxEl.checked=!1),i.selectedRows.splice(n,1),this.table.options.dataTreeSelectPropagate&&this.childRowSelection(s,!1),this.dispatchExternal("rowDeselected",s.getComponent()),i._rowSelectionChanged(t,void 0,s),s}else t||console.warn("Deselection Error - No such row found, ignoring selection:"+e)}getSelectedData(){var e=[];return this.selectedRows.forEach(function(t){e.push(t.getData())}),e}getSelectedRows(){var e=[];return this.selectedRows.forEach(function(t){e.push(t.getComponent())}),e}_rowSelectionChanged(e,t=[],i=[]){this.headerCheckboxElement&&(this.selectedRows.length===0?(this.headerCheckboxElement.checked=!1,this.headerCheckboxElement.indeterminate=!1):this.table.rowManager.rows.length===this.selectedRows.length?(this.headerCheckboxElement.checked=!0,this.headerCheckboxElement.indeterminate=!1):(this.headerCheckboxElement.indeterminate=!0,this.headerCheckboxElement.checked=!1)),e||(Array.isArray(t)||(t=[t]),t=t.map(s=>s.getComponent()),Array.isArray(i)||(i=[i]),i=i.map(s=>s.getComponent()),this.dispatchExternal("rowSelectionChanged",this.getSelectedData(),this.getSelectedRows(),t,i))}registerRowSelectCheckbox(e,t){e._row.modules.select||(e._row.modules.select={}),e._row.modules.select.checkboxEl=t}registerHeaderSelectCheckbox(e){this.headerCheckboxElement=e}childRowSelection(e,t){var i=this.table.modules.dataTree.getChildren(e,!0,!0);if(t)for(let s of i)this._selectRow(s,!0);else for(let s of i)this._deselectRow(s,!0)}}b(ze,"moduleName","selectRow"),b(ze,"moduleExtensions",Qi);class Zi{constructor(e){return this._range=e,new Proxy(this,{get:function(t,i,s){return typeof t[i]<"u"?t[i]:t._range.table.componentFunctionBinder.handle("range",t._range,i)}})}getElement(){return this._range.element}getData(){return this._range.getData()}getCells(){return this._range.getCells(!0,!0)}getStructuredCells(){return this._range.getStructuredCells()}getRows(){return this._range.getRows().map(e=>e.getComponent())}getColumns(){return this._range.getColumns().map(e=>e.getComponent())}getBounds(){return this._range.getBounds()}getTopEdge(){return this._range.top}getBottomEdge(){return this._range.bottom}getLeftEdge(){return this._range.left}getRightEdge(){return this._range.right}setBounds(e,t){this._range.destroyedGuard("setBounds")&&this._range.setBounds(e&&e._cell,t&&t._cell)}setStartBound(e){this._range.destroyedGuard("setStartBound")&&(this._range.setEndBound(e&&e._cell),this._range.rangeManager.layoutElement())}setEndBound(e){this._range.destroyedGuard("setEndBound")&&(this._range.setEndBound(e&&e._cell),this._range.rangeManager.layoutElement())}clearValues(){this._range.destroyedGuard("clearValues")&&this._range.clearValues()}remove(){this._range.destroyedGuard("remove")&&this._range.destroy(!0)}}class es extends M{constructor(e,t,i,s){super(e),this.rangeManager=t,this.element=null,this.initialized=!1,this.initializing={start:!1,end:!1},this.destroyed=!1,this.top=0,this.bottom=0,this.left=0,this.right=0,this.table=e,this.start={row:0,col:0},this.end={row:0,col:0},this.rangeManager.rowHeader&&(this.left=1,this.right=1,this.start.col=1,this.end.col=1),this.initElement(),setTimeout(()=>{this.initBounds(i,s)})}initElement(){this.element=document.createElement("div"),this.element.classList.add("tabulator-range")}initBounds(e,t){this._updateMinMax(),e&&this.setBounds(e,t||e)}setStart(e,t){(this.start.row!==e||this.start.col!==t)&&(this.start.row=e,this.start.col=t,this.initializing.start=!0,this._updateMinMax())}setEnd(e,t){(this.end.row!==e||this.end.col!==t)&&(this.end.row=e,this.end.col=t,this.initializing.end=!0,this._updateMinMax())}setBounds(e,t,i){e&&this.setStartBound(e),this.setEndBound(t||e),this.rangeManager.layoutElement(i)}setStartBound(e){var t,i;e.type==="column"?this.rangeManager.columnSelection&&this.setStart(0,e.getPosition()-1):(t=e.row.position-1,i=e.column.getPosition()-1,e.column===this.rangeManager.rowHeader?this.setStart(t,1):this.setStart(t,i))}setEndBound(e){var t=this._getTableRows().length,i,s,n;e.type==="column"?this.rangeManager.columnSelection&&(this.rangeManager.selecting==="column"?this.setEnd(t-1,e.getPosition()-1):this.rangeManager.selecting==="cell"&&this.setEnd(0,e.getPosition()-1)):(i=e.row.position-1,s=e.column.getPosition()-1,n=e.column===this.rangeManager.rowHeader,this.rangeManager.selecting==="row"?this.setEnd(i,this._getTableColumns().length-1):this.rangeManager.selecting!=="row"&&n?this.setEnd(i,0):this.rangeManager.selecting==="column"?this.setEnd(t-1,s):this.setEnd(i,s))}_updateMinMax(){this.top=Math.min(this.start.row,this.end.row),this.bottom=Math.max(this.start.row,this.end.row),this.left=Math.min(this.start.col,this.end.col),this.right=Math.max(this.start.col,this.end.col),this.initialized?this.dispatchExternal("rangeChanged",this.getComponent()):this.initializing.start&&this.initializing.end&&(this.initialized=!0,this.dispatchExternal("rangeAdded",this.getComponent()))}_getTableColumns(){return this.table.columnManager.getVisibleColumnsByIndex()}_getTableRows(){return this.table.rowManager.getDisplayRows().filter(e=>e.type==="row")}layout(){var e=this.table.rowManager.renderer.vDomTop,t=this.table.rowManager.renderer.vDomBottom,i=this.table.columnManager.renderer.leftCol,s=this.table.columnManager.renderer.rightCol,n,r,o,a,h,d,u,c,f,g;this.table.options.renderHorizontal==="virtual"&&this.rangeManager.rowHeader&&(s+=1),e==null&&(e=0),t==null&&(t=1/0),i==null&&(i=0),s==null&&(s=1/0),this.overlaps(i,e,s,t)&&(n=Math.max(this.top,e),r=Math.min(this.bottom,t),o=Math.max(this.left,i),a=Math.min(this.right,s),h=this.rangeManager.getCell(n,o),d=this.rangeManager.getCell(r,a),u=h.getElement(),c=d.getElement(),f=h.row.getElement(),g=d.row.getElement(),this.element.classList.add("tabulator-range-active"),this.table.rtl?(this.element.style.right=f.offsetWidth-u.offsetLeft-u.offsetWidth+"px",this.element.style.width=u.offsetLeft+u.offsetWidth-c.offsetLeft+"px"):(this.element.style.left=f.offsetLeft+u.offsetLeft+"px",this.element.style.width=c.offsetLeft+c.offsetWidth-u.offsetLeft+"px"),this.element.style.top=f.offsetTop+"px",this.element.style.height=g.offsetTop+g.offsetHeight-f.offsetTop+"px")}atTopLeft(e){return e.row.position-1===this.top&&e.column.getPosition()-1===this.left}atBottomRight(e){return e.row.position-1===this.bottom&&e.column.getPosition()-1===this.right}occupies(e){return this.occupiesRow(e.row)&&this.occupiesColumn(e.column)}occupiesRow(e){return this.top<=e.position-1&&e.position-1<=this.bottom}occupiesColumn(e){return this.left<=e.getPosition()-1&&e.getPosition()-1<=this.right}overlaps(e,t,i,s){return!(this.left>i||e>this.right||this.top>s||t>this.bottom)}getData(){var e=[],t=this.getRows(),i=this.getColumns();return t.forEach(s=>{var n=s.getData(),r={};i.forEach(o=>{r[o.field]=n[o.field]}),e.push(r)}),e}getCells(e,t){var i=[],s=this.getRows(),n=this.getColumns();return e?i=s.map(r=>{var o=[];return r.getCells().forEach(a=>{n.includes(a.column)&&o.push(t?a.getComponent():a)}),o}):s.forEach(r=>{r.getCells().forEach(o=>{n.includes(o.column)&&i.push(t?o.getComponent():o)})}),i}getStructuredCells(){return this.getCells(!0,!0)}getRows(){return this._getTableRows().slice(this.top,this.bottom+1)}getColumns(){return this._getTableColumns().slice(this.left,this.right+1)}clearValues(){var e=this.getCells(),t=this.table.options.selectableRangeClearCellsValue;this.table.blockRedraw(),e.forEach(i=>{i.setValue(t)}),this.table.restoreRedraw()}getBounds(e){var t=this.getCells(!1,e),i={start:null,end:null};return t.length?(i.start=t[0],i.end=t[t.length-1]):console.warn("No bounds defined on range"),i}getComponent(){return this.component||(this.component=new Zi(this)),this.component}destroy(e){this.destroyed=!0,this.element.remove(),e&&this.rangeManager.rangeRemoved(this),this.initialized&&this.dispatchExternal("rangeRemoved",this.getComponent())}destroyedGuard(e){return this.destroyed&&console.warn("You cannot call the "+e+" function on a destroyed range"),!this.destroyed}}var ts={rangeJumpUp:["ctrl + 38","meta + 38"],rangeJumpDown:["ctrl + 40","meta + 40"],rangeJumpLeft:["ctrl + 37","meta + 37"],rangeJumpRight:["ctrl + 39","meta + 39"],rangeExpandUp:"shift + 38",rangeExpandDown:"shift + 40",rangeExpandLeft:"shift + 37",rangeExpandRight:"shift + 39",rangeExpandJumpUp:["ctrl + shift + 38","meta + shift + 38"],rangeExpandJumpDown:["ctrl + shift + 40","meta + shift + 40"],rangeExpandJumpLeft:["ctrl + shift + 37","meta + shift + 37"],rangeExpandJumpRight:["ctrl + shift + 39","meta + shift + 39"]},is={rangeJumpLeft:function(l){this.dispatch("keybinding-nav-range",l,"left",!0,!1)},rangeJumpRight:function(l){this.dispatch("keybinding-nav-range",l,"right",!0,!1)},rangeJumpUp:function(l){this.dispatch("keybinding-nav-range",l,"up",!0,!1)},rangeJumpDown:function(l){this.dispatch("keybinding-nav-range",l,"down",!0,!1)},rangeExpandLeft:function(l){this.dispatch("keybinding-nav-range",l,"left",!1,!0)},rangeExpandRight:function(l){this.dispatch("keybinding-nav-range",l,"right",!1,!0)},rangeExpandUp:function(l){this.dispatch("keybinding-nav-range",l,"up",!1,!0)},rangeExpandDown:function(l){this.dispatch("keybinding-nav-range",l,"down",!1,!0)},rangeExpandJumpLeft:function(l){this.dispatch("keybinding-nav-range",l,"left",!0,!0)},rangeExpandJumpRight:function(l){this.dispatch("keybinding-nav-range",l,"right",!0,!0)},rangeExpandJumpUp:function(l){this.dispatch("keybinding-nav-range",l,"up",!0,!0)},rangeExpandJumpDown:function(l){this.dispatch("keybinding-nav-range",l,"down",!0,!0)}},ss={range:function(l){var e=[],t=this.table.modules.selectRange.activeRange,i=!1,s,n,r,o,a;return a=l.length,t&&(s=t.getBounds(),n=s.start,s.start===s.end&&(i=!0),n&&(e=this.table.rowManager.activeRows.slice(),r=e.indexOf(n.row),i?o=l.length:o=e.indexOf(s.end.row)-r+1,r>-1&&(this.table.blockRedraw(),e=e.slice(r,r+o),e.forEach((h,d)=>{h.updateData(l[d%a])}),this.table.restoreRedraw()))),e}},ns={range:function(l){var e=[],t=[],i=this.table.modules.selectRange.activeRange,s=!1,n,r,o,a,h;return i&&(n=i.getBounds(),r=n.start,n.start===n.end&&(s=!0),r&&(l=l.split(` +`),l.forEach(function(d){e.push(d.split(" "))}),e.length&&(a=this.table.columnManager.getVisibleColumnsByIndex(),h=a.indexOf(r.column),h>-1)))?(s?o=e[0].length:o=a.indexOf(n.end.column)-h+1,a=a.slice(h,h+o),e.forEach(d=>{var u={},c=d.length;a.forEach(function(f,g){u[f.field]=d[g%c]}),t.push(u)}),t):!1}},rs={range:function(){var l=this.modules.selectRange.selectedColumns();return this.columnManager.rowHeader&&l.unshift(this.columnManager.rowHeader),l}},os={range:function(){return this.modules.selectRange.selectedRows()}},as={keybindings:{bindings:ts,actions:is},clipboard:{pasteActions:ss,pasteParsers:ns},export:{columnLookups:rs,rowLookups:os}};class re extends w{constructor(e){super(e),this.selecting="cell",this.mousedown=!1,this.ranges=[],this.overlay=null,this.rowHeader=null,this.layoutChangeTimeout=null,this.columnSelection=!1,this.rowSelection=!1,this.maxRanges=0,this.activeRange=!1,this.blockKeydown=!1,this.keyDownEvent=this._handleKeyDown.bind(this),this.mouseUpEvent=this._handleMouseUp.bind(this),this.registerTableOption("selectableRange",!1),this.registerTableOption("selectableRangeColumns",!1),this.registerTableOption("selectableRangeRows",!1),this.registerTableOption("selectableRangeClearCells",!1),this.registerTableOption("selectableRangeClearCellsValue",void 0),this.registerTableFunction("getRangesData",this.getRangesData.bind(this)),this.registerTableFunction("getRanges",this.getRanges.bind(this)),this.registerTableFunction("addRange",this.addRangeFromComponent.bind(this)),this.registerComponentFunction("cell","getRanges",this.cellGetRanges.bind(this)),this.registerComponentFunction("row","getRanges",this.rowGetRanges.bind(this)),this.registerComponentFunction("column","getRanges",this.colGetRanges.bind(this))}initialize(){this.options("selectableRange")&&(this.options("selectableRows")?console.warn("SelectRange functionality cannot be used in conjunction with row selection"):(this.maxRanges=this.options("selectableRange"),this.initializeTable(),this.initializeWatchers()),this.options("columns").findIndex(e=>e.frozen)>0&&console.warn("Having frozen column in arbitrary position with selectRange option may result in unpredictable behavior."),this.options("columns").filter(e=>e.frozen)>1&&console.warn("Having multiple frozen columns with selectRange option may result in unpredictable behavior."))}initializeTable(){this.overlay=document.createElement("div"),this.overlay.classList.add("tabulator-range-overlay"),this.rangeContainer=document.createElement("div"),this.rangeContainer.classList.add("tabulator-range-container"),this.activeRangeCellElement=document.createElement("div"),this.activeRangeCellElement.classList.add("tabulator-range-cell-active"),this.overlay.appendChild(this.rangeContainer),this.overlay.appendChild(this.activeRangeCellElement),this.table.rowManager.element.addEventListener("keydown",this.keyDownEvent),this.resetRanges(),this.table.rowManager.element.appendChild(this.overlay),this.table.columnManager.element.setAttribute("tabindex",0),this.table.element.classList.add("tabulator-ranges")}initializeWatchers(){this.columnSelection=this.options("selectableRangeColumns"),this.rowSelection=this.options("selectableRangeRows"),this.subscribe("column-init",this.initializeColumn.bind(this)),this.subscribe("column-mousedown",this.handleColumnMouseDown.bind(this)),this.subscribe("column-mousemove",this.handleColumnMouseMove.bind(this)),this.subscribe("column-resized",this.handleColumnResized.bind(this)),this.subscribe("column-moving",this.handleColumnMoving.bind(this)),this.subscribe("column-moved",this.handleColumnMoved.bind(this)),this.subscribe("column-width",this.layoutChange.bind(this)),this.subscribe("column-height",this.layoutChange.bind(this)),this.subscribe("column-resized",this.layoutChange.bind(this)),this.subscribe("columns-loaded",this.updateHeaderColumn.bind(this)),this.subscribe("cell-height",this.layoutChange.bind(this)),this.subscribe("cell-rendered",this.renderCell.bind(this)),this.subscribe("cell-mousedown",this.handleCellMouseDown.bind(this)),this.subscribe("cell-mousemove",this.handleCellMouseMove.bind(this)),this.subscribe("cell-click",this.handleCellClick.bind(this)),this.subscribe("cell-editing",this.handleEditingCell.bind(this)),this.subscribe("page-changed",this.redraw.bind(this)),this.subscribe("scroll-vertical",this.layoutChange.bind(this)),this.subscribe("scroll-horizontal",this.layoutChange.bind(this)),this.subscribe("data-destroy",this.tableDestroyed.bind(this)),this.subscribe("data-processed",this.resetRanges.bind(this)),this.subscribe("table-layout",this.layoutElement.bind(this)),this.subscribe("table-redraw",this.redraw.bind(this)),this.subscribe("table-destroy",this.tableDestroyed.bind(this)),this.subscribe("edit-editor-clear",this.finishEditingCell.bind(this)),this.subscribe("edit-blur",this.restoreFocus.bind(this)),this.subscribe("keybinding-nav-prev",this.keyNavigate.bind(this,"left")),this.subscribe("keybinding-nav-next",this.keyNavigate.bind(this,"right")),this.subscribe("keybinding-nav-left",this.keyNavigate.bind(this,"left")),this.subscribe("keybinding-nav-right",this.keyNavigate.bind(this,"right")),this.subscribe("keybinding-nav-up",this.keyNavigate.bind(this,"up")),this.subscribe("keybinding-nav-down",this.keyNavigate.bind(this,"down")),this.subscribe("keybinding-nav-range",this.keyNavigateRange.bind(this))}initializeColumn(e){this.columnSelection&&e.definition.headerSort&&this.options("headerSortClickElement")!=="icon"&&console.warn("Using column headerSort with selectableRangeColumns option may result in unpredictable behavior. Consider using headerSortClickElement: 'icon'."),e.modules.edit}updateHeaderColumn(){var e;this.rowSelection&&(this.rowHeader=this.table.columnManager.getVisibleColumnsByIndex()[0],this.rowHeader&&(this.rowHeader.definition.cssClass=this.rowHeader.definition.cssClass+" tabulator-range-row-header",this.rowHeader.definition.headerSort&&console.warn("Using column headerSort with selectableRangeRows option may result in unpredictable behavior"),this.rowHeader.definition.editor&&console.warn("Using column editor with selectableRangeRows option may result in unpredictable behavior"))),this.table.modules.frozenColumns&&this.table.modules.frozenColumns.active&&(e=this.table.modules.frozenColumns.getFrozenColumns(),(e.length>1||e.length===1&&e[0]!==this.rowHeader)&&console.warn("Using frozen columns that are not the range header in combination with the selectRange option may result in unpredictable behavior"))}getRanges(){return this.ranges.map(e=>e.getComponent())}getRangesData(){return this.ranges.map(e=>e.getData())}addRangeFromComponent(e,t){return e=e?e._cell:null,t=t?t._cell:null,this.addRange(e,t)}cellGetRanges(e){var t=[];return e.column===this.rowHeader?t=this.ranges.filter(i=>i.occupiesRow(e.row)):t=this.ranges.filter(i=>i.occupies(e)),t.map(i=>i.getComponent())}rowGetRanges(e){var t=this.ranges.filter(i=>i.occupiesRow(e));return t.map(i=>i.getComponent())}colGetRanges(e){var t=this.ranges.filter(i=>i.occupiesColumn(e));return t.map(i=>i.getComponent())}_handleMouseUp(e){this.mousedown=!1,document.removeEventListener("mouseup",this.mouseUpEvent)}_handleKeyDown(e){if(!this.blockKeydown&&(!this.table.modules.edit||this.table.modules.edit&&!this.table.modules.edit.currentCell)){if(e.key==="Enter"){if(this.table.modules.edit&&this.table.modules.edit.currentCell)return;this.table.modules.edit.editCell(this.getActiveCell()),e.preventDefault()}(e.key==="Backspace"||e.key==="Delete")&&this.options("selectableRangeClearCells")&&this.activeRange&&this.activeRange.clearValues()}}initializeFocus(e){var t;this.restoreFocus();try{document.selection?(t=document.body.createTextRange(),t.moveToElementText(e.getElement()),t.select()):window.getSelection&&(t=document.createRange(),t.selectNode(e.getElement()),window.getSelection().removeAllRanges(),window.getSelection().addRange(t))}catch{}}restoreFocus(e){return this.table.rowManager.element.focus(),!0}handleColumnResized(e){var t;this.selecting!=="column"&&this.selecting!=="all"||(t=this.ranges.some(i=>i.occupiesColumn(e)),t&&this.ranges.forEach(i=>{var s=i.getColumns(!0);s.forEach(n=>{n!==e&&n.setWidth(e.width)})}))}handleColumnMoving(e,t){this.resetRanges().setBounds(t),this.overlay.style.visibility="hidden"}handleColumnMoved(e,t,i){this.activeRange.setBounds(e),this.layoutElement()}handleColumnMouseDown(e,t){e.button===2&&(this.selecting==="column"||this.selecting==="all")&&this.activeRange.occupiesColumn(t)||this.table.options.movableColumns&&this.selecting==="column"&&this.activeRange.occupiesColumn(t)||(this.mousedown=!0,document.addEventListener("mouseup",this.mouseUpEvent),this.newSelection(e,t))}handleColumnMouseMove(e,t){t===this.rowHeader||!this.mousedown||this.selecting==="all"||this.activeRange.setBounds(!1,t,!0)}renderCell(e){var t=e.getElement(),i=this.ranges.findIndex(s=>s.occupies(e));t.classList.toggle("tabulator-range-selected",i!==-1),t.classList.toggle("tabulator-range-only-cell-selected",this.ranges.length===1&&this.ranges[0].atTopLeft(e)&&this.ranges[0].atBottomRight(e)),t.dataset.range=i}handleCellMouseDown(e,t){e.button===2&&(this.activeRange.occupies(t)||(this.selecting==="row"||this.selecting==="all")&&this.activeRange.occupiesRow(t.row))||(this.mousedown=!0,document.addEventListener("mouseup",this.mouseUpEvent),this.newSelection(e,t))}handleCellMouseMove(e,t){!this.mousedown||this.selecting==="all"||this.activeRange.setBounds(!1,t,!0)}handleCellClick(e,t){this.initializeFocus(t)}handleEditingCell(e){this.activeRange&&this.activeRange.setBounds(e)}finishEditingCell(){this.blockKeydown=!0,this.table.rowManager.element.focus(),setTimeout(()=>{this.blockKeydown=!1},10)}keyNavigate(e,t){this.navigate(!1,!1,e),t.preventDefault()}keyNavigateRange(e,t,i,s){this.navigate(i,s,t),e.preventDefault()}navigate(e,t,i){var s=!1,n,r,o,a,h,d;if(this.table.modules.edit&&this.table.modules.edit.currentCell)return!1;if(this.ranges.length>1&&(this.ranges=this.ranges.filter(u=>u===this.activeRange?(u.setEnd(u.start.row,u.start.col),!0):(u.destroy(),!1))),n=this.activeRange,r=t?n.end:n.start,o=r.row,a=r.col,e)switch(i){case"left":a=this.findJumpCellLeft(n.start.row,r.col);break;case"right":a=this.findJumpCellRight(n.start.row,r.col);break;case"up":o=this.findJumpCellUp(r.row,n.start.col);break;case"down":o=this.findJumpCellDown(r.row,n.start.col);break}else{if(t&&(this.selecting==="row"&&(i==="left"||i==="right")||this.selecting==="column"&&(i==="up"||i==="down")))return;switch(i){case"left":a=Math.max(a-1,0);break;case"right":a=Math.min(a+1,this.getTableColumns().length-1);break;case"up":o=Math.max(o-1,0);break;case"down":o=Math.min(o+1,this.getTableRows().length-1);break}}if(this.rowHeader&&a===0&&(a=1),s=a!==r.col||o!==r.row,t||n.setStart(o,a),n.setEnd(o,a),t||(this.selecting="cell"),s)return h=this.getRowByRangePos(n.end.row),d=this.getColumnByRangePos(n.end.col),(i==="left"||i==="right")&&d.getElement().parentNode===null?d.getComponent().scrollTo(void 0,!1):(i==="up"||i==="down")&&h.getElement().parentNode===null?h.getComponent().scrollTo(void 0,!1):this.autoScroll(n,h.getElement(),d.getElement()),this.layoutElement(),!0}rangeRemoved(e){this.ranges=this.ranges.filter(t=>t!==e),this.activeRange===e&&(this.ranges.length?this.activeRange=this.ranges[this.ranges.length-1]:this.addRange()),this.layoutElement()}findJumpRow(e,t,i,s,n){return i&&(t=t.reverse()),this.findJumpItem(s,n,t,function(r){return r.getData()[e.getField()]})}findJumpCol(e,t,i,s,n){return i&&(t=t.reverse()),this.findJumpItem(s,n,t,function(r){return e.getData()[r.getField()]})}findJumpItem(e,t,i,s){var n;for(let r of i){let o=s(r);if(e){if(n=r,o)break}else if(t){if(n=r,o)break}else if(o)n=r;else break}return n}findJumpCellLeft(e,t){var i=this.getRowByRangePos(e),s=this.getTableColumns(),n=this.isEmpty(i.getData()[s[t].getField()]),r=s[t-1]?this.isEmpty(i.getData()[s[t-1].getField()]):!1,o=this.rowHeader?s.slice(1,t):s.slice(0,t),a=this.findJumpCol(i,o,!0,n,r);return a?a.getPosition()-1:t}findJumpCellRight(e,t){var i=this.getRowByRangePos(e),s=this.getTableColumns(),n=this.isEmpty(i.getData()[s[t].getField()]),r=s[t+1]?this.isEmpty(i.getData()[s[t+1].getField()]):!1,o=this.findJumpCol(i,s.slice(t+1,s.length),!1,n,r);return o?o.getPosition()-1:t}findJumpCellUp(e,t){var i=this.getColumnByRangePos(t),s=this.getTableRows(),n=this.isEmpty(s[e].getData()[i.getField()]),r=s[e-1]?this.isEmpty(s[e-1].getData()[i.getField()]):!1,o=this.findJumpRow(i,s.slice(0,e),!0,n,r);return o?o.position-1:e}findJumpCellDown(e,t){var i=this.getColumnByRangePos(t),s=this.getTableRows(),n=this.isEmpty(s[e].getData()[i.getField()]),r=s[e+1]?this.isEmpty(s[e+1].getData()[i.getField()]):!1,o=this.findJumpRow(i,s.slice(e+1,s.length),!1,n,r);return o?o.position-1:e}newSelection(e,t){var i;if(t.type==="column"){if(!this.columnSelection)return;if(t===this.rowHeader){i=this.resetRanges(),this.selecting="all";var s,n=this.getCell(-1,-1);this.rowHeader?s=this.getCell(0,1):s=this.getCell(0,0),i.setBounds(s,n);return}else this.selecting="column"}else t.column===this.rowHeader?this.selecting="row":this.selecting="cell";e.shiftKey?this.activeRange.setBounds(!1,t):e.ctrlKey?this.addRange().setBounds(t):this.resetRanges().setBounds(t)}autoScroll(e,t,i){var s=this.table.rowManager.element,n,r,o,a,h;typeof t>"u"&&(t=this.getRowByRangePos(e.end.row).getElement()),typeof i>"u"&&(i=this.getColumnByRangePos(e.end.col).getElement()),this.rowHeader&&(n=this.rowHeader.getElement()),r={left:i.offsetLeft,right:i.offsetLeft+i.offsetWidth,top:t.offsetTop,bottom:t.offsetTop+t.offsetHeight},o={left:s.scrollLeft,right:Math.ceil(s.scrollLeft+s.clientWidth),top:s.scrollTop,bottom:s.scrollTop+s.offsetHeight-this.table.rowManager.scrollbarWidth},n&&(o.left+=n.offsetWidth),a=o.lefto.right&&(s.scrollLeft=r.right-s.clientWidth)),h||(r.topo.bottom&&(s.scrollTop=r.bottom-s.clientHeight))}layoutChange(){this.overlay.style.visibility="hidden",clearTimeout(this.layoutChangeTimeout),this.layoutChangeTimeout=setTimeout(this.layoutRanges.bind(this),200)}redraw(e){e&&(this.selecting="cell",this.resetRanges(),this.layoutElement())}layoutElement(e){var t;e?t=this.table.rowManager.getVisibleRows(!0):t=this.table.rowManager.getRows(),t.forEach(i=>{i.type==="row"&&(this.layoutRow(i),i.cells.forEach(s=>this.renderCell(s)))}),this.getTableColumns().forEach(i=>{this.layoutColumn(i)}),this.layoutRanges()}layoutRow(e){var t=e.getElement(),i=!1,s=this.ranges.some(n=>n.occupiesRow(e));this.selecting==="row"?i=s:this.selecting==="all"&&(i=!0),t.classList.toggle("tabulator-range-selected",i),t.classList.toggle("tabulator-range-highlight",s)}layoutColumn(e){var t=e.getElement(),i=!1,s=this.ranges.some(n=>n.occupiesColumn(e));this.selecting==="column"?i=s:this.selecting==="all"&&(i=!0),t.classList.toggle("tabulator-range-selected",i),t.classList.toggle("tabulator-range-highlight",s)}layoutRanges(){var e,t,i;this.table.initialized&&(e=this.getActiveCell(),e&&(t=e.getElement(),i=e.row.getElement(),this.table.rtl?this.activeRangeCellElement.style.right=i.offsetWidth-t.offsetLeft-t.offsetWidth+"px":this.activeRangeCellElement.style.left=i.offsetLeft+t.offsetLeft+"px",this.activeRangeCellElement.style.top=i.offsetTop+"px",this.activeRangeCellElement.style.width=t.offsetWidth+"px",this.activeRangeCellElement.style.height=i.offsetHeight+"px",this.ranges.forEach(s=>s.layout()),this.overlay.style.visibility="visible"))}getCell(e,t){var i;return t<0&&(t=this.getTableColumns().length+t,t<0)?null:(e<0&&(e=this.getTableRows().length+e),i=this.table.rowManager.getRowFromPosition(e+1),i?i.getCells(!1,!0).filter(s=>s.column.visible)[t]:null)}getActiveCell(){return this.getCell(this.activeRange.start.row,this.activeRange.start.col)}getRowByRangePos(e){return this.getTableRows()[e]}getColumnByRangePos(e){return this.getTableColumns()[e]}getTableRows(){return this.table.rowManager.getDisplayRows().filter(e=>e.type==="row")}getTableColumns(){return this.table.columnManager.getVisibleColumnsByIndex()}addRange(e,t){var i;return this.maxRanges!==!0&&this.ranges.length>=this.maxRanges&&this.ranges.shift().destroy(),i=new es(this.table,this,e,t),this.activeRange=i,this.ranges.push(i),this.rangeContainer.appendChild(i.element),i}resetRanges(){var e,t,i;return this.ranges.forEach(s=>s.destroy()),this.ranges=[],e=this.addRange(),this.table.rowManager.activeRows.length&&(i=this.table.rowManager.activeRows[0].cells.filter(s=>s.column.visible),t=i[this.rowHeader?1:0],t&&(e.setBounds(t),this.initializeFocus(t))),e}tableDestroyed(){document.removeEventListener("mouseup",this.mouseUpEvent),this.table.rowManager.element.removeEventListener("keydown",this.keyDownEvent)}selectedRows(e){return e?this.activeRange.getRows().map(t=>t.getComponent()):this.activeRange.getRows()}selectedColumns(e){return e?this.activeRange.getColumns().map(t=>t.getComponent()):this.activeRange.getColumns()}isEmpty(e){return e==null||e===""}}b(re,"moduleName","selectRange"),b(re,"moduleInitOrder",1),b(re,"moduleExtensions",as);function ls(l,e,t,i,s,n,r){var o=r.alignEmptyValues,a=r.decimalSeparator,h=r.thousandSeparator,d=0;if(l=String(l),e=String(e),h&&(l=l.split(h).join(""),e=e.split(h).join("")),a&&(l=l.split(a).join("."),e=e.split(a).join(".")),l=parseFloat(l),e=parseFloat(e),isNaN(l))d=isNaN(e)?0:-1;else if(isNaN(e))d=1;else return l-e;return(o==="top"&&n==="desc"||o==="bottom"&&n==="asc")&&(d*=-1),d}function hs(l,e,t,i,s,n,r){var o=r.alignEmptyValues,a=0,h;if(!l)a=e?-1:0;else if(!e)a=1;else{switch(typeof r.locale){case"boolean":r.locale&&(h=this.langLocale());break;case"string":h=r.locale;break}return String(l).toLowerCase().localeCompare(String(e).toLowerCase(),h)}return(o==="top"&&n==="desc"||o==="bottom"&&n==="asc")&&(a*=-1),a}function Ve(l,e,t,i,s,n,r){var o=window.DateTime||luxon.DateTime,a=r.format||"dd/MM/yyyy HH:mm:ss",h=r.alignEmptyValues,d=0;if(typeof o<"u"){if(o.isDateTime(l)||(a==="iso"?l=o.fromISO(String(l)):l=o.fromFormat(String(l),a)),o.isDateTime(e)||(a==="iso"?e=o.fromISO(String(e)):e=o.fromFormat(String(e),a)),!l.isValid)d=e.isValid?-1:0;else if(!e.isValid)d=1;else return l-e;return(h==="top"&&n==="desc"||h==="bottom"&&n==="asc")&&(d*=-1),d}else console.error("Sort Error - 'datetime' sorter is dependant on luxon.js")}function ds(l,e,t,i,s,n,r){return r.format||(r.format="dd/MM/yyyy"),Ve.call(this,l,e,t,i,s,n,r)}function us(l,e,t,i,s,n,r){return r.format||(r.format="HH:mm"),Ve.call(this,l,e,t,i,s,n,r)}function cs(l,e,t,i,s,n,r){var o=l===!0||l==="true"||l==="True"||l===1?1:0,a=e===!0||e==="true"||e==="True"||e===1?1:0;return o-a}function fs(l,e,t,i,s,n,r){var o=r.type||"length",a=r.alignEmptyValues,h=0;function d(u){var c;switch(o){case"length":c=u.length;break;case"sum":c=u.reduce(function(f,g){return f+g});break;case"max":c=Math.max.apply(null,u);break;case"min":c=Math.min.apply(null,u);break;case"avg":c=u.reduce(function(f,g){return f+g})/u.length;break}return c}if(!Array.isArray(l))h=Array.isArray(e)?-1:0;else if(!Array.isArray(e))h=1;else return d(e)-d(l);return(a==="top"&&n==="desc"||a==="bottom"&&n==="asc")&&(h*=-1),h}function ps(l,e,t,i,s,n,r){var o=typeof l>"u"?0:1,a=typeof e>"u"?0:1;return o-a}function ms(l,e,t,i,s,n,r){var o,a,h,d,u=0,c,f=/(\d+)|(\D+)/g,g=/\d/,p=r.alignEmptyValues,v=0;if(!l&&l!==0)v=!e&&e!==0?0:-1;else if(!e&&e!==0)v=1;else{if(isFinite(l)&&isFinite(e))return l-e;if(o=String(l).toLowerCase(),a=String(e).toLowerCase(),o===a)return 0;if(!(g.test(o)&&g.test(a)))return o>a?1:-1;for(o=o.match(f),a=a.match(f),c=o.length>a.length?a.length:o.length;ud?1:-1;return o.length>a.length}return(p==="top"&&n==="desc"||p==="bottom"&&n==="asc")&&(v*=-1),v}var gs={number:ls,string:hs,date:ds,time:us,datetime:Ve,boolean:cs,array:fs,exists:ps,alphanum:ms};const j=class j extends w{constructor(e){super(e),this.sortList=[],this.changed=!1,this.registerTableOption("sortMode","local"),this.registerTableOption("initialSort",!1),this.registerTableOption("columnHeaderSortMulti",!0),this.registerTableOption("sortOrderReverse",!1),this.registerTableOption("headerSortElement","
"),this.registerTableOption("headerSortClickElement","header"),this.registerColumnOption("sorter"),this.registerColumnOption("sorterParams"),this.registerColumnOption("headerSort",!0),this.registerColumnOption("headerSortStartingDir"),this.registerColumnOption("headerSortTristate")}initialize(){this.subscribe("column-layout",this.initializeColumn.bind(this)),this.subscribe("table-built",this.tableBuilt.bind(this)),this.registerDataHandler(this.sort.bind(this),20),this.registerTableFunction("setSort",this.userSetSort.bind(this)),this.registerTableFunction("getSorters",this.getSort.bind(this)),this.registerTableFunction("clearSort",this.clearSort.bind(this)),this.table.options.sortMode==="remote"&&this.subscribe("data-params",this.remoteSortParams.bind(this))}tableBuilt(){this.table.options.initialSort&&this.setSort(this.table.options.initialSort)}remoteSortParams(e,t,i,s){var n=this.getSort();return n.forEach(r=>{delete r.column}),s.sort=n,s}userSetSort(e,t){this.setSort(e,t),this.refreshSort()}clearSort(){this.clear(),this.refreshSort()}initializeColumn(e){var t=!1,i,s;switch(typeof e.definition.sorter){case"string":j.sorters[e.definition.sorter]?t=j.sorters[e.definition.sorter]:console.warn("Sort Error - No such sorter found: ",e.definition.sorter);break;case"function":t=e.definition.sorter;break}if(e.modules.sort={sorter:t,dir:"none",params:e.definition.sorterParams||{},startingDir:e.definition.headerSortStartingDir||"asc",tristate:e.definition.headerSortTristate},e.definition.headerSort!==!1){switch(i=e.getElement(),i.classList.add("tabulator-sortable"),s=document.createElement("div"),s.classList.add("tabulator-col-sorter"),this.table.options.headerSortClickElement){case"icon":s.classList.add("tabulator-col-sorter-element");break;case"header":i.classList.add("tabulator-col-sorter-element");break;default:i.classList.add("tabulator-col-sorter-element");break}switch(this.table.options.headerSortElement){case"function":break;case"object":s.appendChild(this.table.options.headerSortElement);break;default:s.innerHTML=this.table.options.headerSortElement}e.titleHolderElement.appendChild(s),e.modules.sort.element=s,this.setColumnHeaderSortIcon(e,"none"),this.table.options.headerSortClickElement==="icon"&&s.addEventListener("mousedown",n=>{n.stopPropagation()}),(this.table.options.headerSortClickElement==="icon"?s:i).addEventListener("click",n=>{var r="",o=[],a=!1;if(e.modules.sort){if(e.modules.sort.tristate)e.modules.sort.dir=="none"?r=e.modules.sort.startingDir:e.modules.sort.dir==e.modules.sort.startingDir?r=e.modules.sort.dir=="asc"?"desc":"asc":r="none";else switch(e.modules.sort.dir){case"asc":r="desc";break;case"desc":r="asc";break;default:r=e.modules.sort.startingDir}this.table.options.columnHeaderSortMulti&&(n.shiftKey||n.ctrlKey)?(o=this.getSort(),a=o.findIndex(h=>h.field===e.getField()),a>-1?(o[a].dir=r,a=o.splice(a,1)[0],r!="none"&&o.push(a)):r!="none"&&o.push({column:e,dir:r}),this.setSort(o)):r=="none"?this.clear():this.setSort(e,r),this.refreshSort()}})}}refreshSort(){this.table.options.sortMode==="remote"?this.reloadData(null,!1,!1):this.refreshData(!0)}hasChanged(){var e=this.changed;return this.changed=!1,e}getSort(){var e=this,t=[];return e.sortList.forEach(function(i){i.column&&t.push({column:i.column.getComponent(),field:i.column.getField(),dir:i.dir})}),t}setSort(e,t){var i=this,s=[];Array.isArray(e)||(e=[{column:e,dir:t}]),e.forEach(function(n){var r;r=i.table.columnManager.findColumn(n.column),r?(n.column=r,s.push(n),i.changed=!0):console.warn("Sort Warning - Sort field does not exist and is being ignored: ",n.column)}),i.sortList=s,this.dispatch("sort-changed")}clear(){this.setSort([])}findSorter(e){var t=this.table.rowManager.activeRows[0],i="string",s,n;if(t&&(t=t.getData(),s=e.getField(),s))switch(n=e.getFieldValue(t),typeof n){case"undefined":i="string";break;case"boolean":i="boolean";break;default:!isNaN(n)&&n!==""?i="number":n.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)&&(i="alphanum");break}return j.sorters[i]}sort(e,t){var i=this,s=this.table.options.sortOrderReverse?i.sortList.slice().reverse():i.sortList,n=[],r=[];return this.subscribedExternal("dataSorting")&&this.dispatchExternal("dataSorting",i.getSort()),t||i.clearColumnHeaders(),this.table.options.sortMode!=="remote"?(s.forEach(function(o,a){var h;o.column&&(h=o.column.modules.sort,h&&(h.sorter||(h.sorter=i.findSorter(o.column)),o.params=typeof h.params=="function"?h.params(o.column.getComponent(),o.dir):h.params,n.push(o)),t||i.setColumnHeader(o.column,o.dir))}),n.length&&i._sortItems(e,n)):t||s.forEach(function(o,a){i.setColumnHeader(o.column,o.dir)}),this.subscribedExternal("dataSorted")&&(e.forEach(o=>{r.push(o.getComponent())}),this.dispatchExternal("dataSorted",i.getSort(),r)),e}clearColumnHeaders(){this.table.columnManager.getRealColumns().forEach(e=>{e.modules.sort&&(e.modules.sort.dir="none",e.getElement().setAttribute("aria-sort","none"),this.setColumnHeaderSortIcon(e,"none"))})}setColumnHeader(e,t){e.modules.sort.dir=t,e.getElement().setAttribute("aria-sort",t==="asc"?"ascending":"descending"),this.setColumnHeaderSortIcon(e,t)}setColumnHeaderSortIcon(e,t){var i=e.modules.sort.element,s;if(e.definition.headerSort&&typeof this.table.options.headerSortElement=="function"){for(;i.firstChild;)i.removeChild(i.firstChild);s=this.table.options.headerSortElement.call(this.table,e.getComponent(),t),typeof s=="object"?i.appendChild(s):i.innerHTML=s}}_sortItems(e,t){var i=t.length-1;e.sort((s,n)=>{for(var r,o=i;o>=0;o--){let a=t[o];if(r=this._sortRow(s,n,a.column,a.dir,a.params),r!==0)break}return r})}_sortRow(e,t,i,s,n){var r,o,a=s=="asc"?e:t,h=s=="asc"?t:e;return e=i.getFieldValue(a.getData()),t=i.getFieldValue(h.getData()),e=typeof e<"u"?e:"",t=typeof t<"u"?t:"",r=a.getComponent(),o=h.getComponent(),i.modules.sort.sorter.call(this,e,t,r,o,i.getComponent(),s,n)}};b(j,"moduleName","sort"),b(j,"sorters",gs);let He=j;class bs{constructor(e,t){this.columnCount=e,this.rowCount=t,this.columnString=[],this.columns=[],this.rows=[]}genColumns(e){var t=Math.max(this.columnCount,Math.max(...e.map(i=>i.length)));this.columnString=[],this.columns=[];for(let i=1;i<=t;i++)this.incrementChar(this.columnString.length-1),this.columns.push(this.columnString.join(""));return this.columns}genRows(e){var t=Math.max(this.rowCount,e.length);this.rows=[];for(let i=1;i<=t;i++)this.rows.push(i);return this.rows}incrementChar(e){let t=this.columnString[e];t?t!=="Z"?this.columnString[e]=String.fromCharCode(this.columnString[e].charCodeAt(0)+1):(this.columnString[e]="A",e?this.incrementChar(e-1):this.columnString.push("A")):this.columnString.push("A")}setRowCount(e){this.rowCount=e}setColumnCount(e){this.columnCount=e}}class ft{constructor(e){return this._sheet=e,new Proxy(this,{get:function(t,i,s){return typeof t[i]<"u"?t[i]:t._sheet.table.componentFunctionBinder.handle("sheet",t._sheet,i)}})}getTitle(){return this._sheet.title}getKey(){return this._sheet.key}getDefinition(){return this._sheet.getDefinition()}getData(){return this._sheet.getData()}setData(e){return this._sheet.setData(e)}clear(){return this._sheet.clear()}remove(){return this._sheet.remove()}active(){return this._sheet.active()}setTitle(e){return this._sheet.setTitle(e)}setRows(e){return this._sheet.setRows(e)}setColumns(e){return this._sheet.setColumns(e)}}class Xe extends M{constructor(e,t){super(e.table),this.spreadsheetManager=e,this.definition=t,this.title=this.definition.title||"",this.key=this.definition.key||this.definition.title,this.rowCount=this.definition.rows,this.columnCount=this.definition.columns,this.data=this.definition.data||[],this.element=null,this.isActive=!1,this.grid=new bs(this.columnCount,this.rowCount),this.defaultColumnDefinition={width:100,headerHozAlign:"center",headerSort:!1},this.columnDefinition=Object.assign(this.defaultColumnDefinition,this.options("spreadsheetColumnDefinition")),this.columnDefs=[],this.rowDefs=[],this.columnFields=[],this.columns=[],this.rows=[],this.scrollTop=null,this.scrollLeft=null,this.initialize(),this.dispatchExternal("sheetAdded",this.getComponent())}initialize(){this.initializeElement(),this.initializeColumns(),this.initializeRows()}reinitialize(){this.initializeColumns(),this.initializeRows()}initializeElement(){this.element=document.createElement("div"),this.element.classList.add("tabulator-spreadsheet-tab"),this.element.innerText=this.title,this.element.addEventListener("click",()=>{this.spreadsheetManager.loadSheet(this)})}initializeColumns(){this.grid.setColumnCount(this.columnCount),this.columnFields=this.grid.genColumns(this.data),this.columnDefs=[],this.columnFields.forEach(e=>{var t=Object.assign({},this.columnDefinition);t.field=e,t.title=e,this.columnDefs.push(t)})}initializeRows(){var e;this.grid.setRowCount(this.rowCount),e=this.grid.genRows(this.data),this.rowDefs=[],e.forEach((t,i)=>{var s={_id:t},n=this.data[i];n&&n.forEach((r,o)=>{var a=this.columnFields[o];a&&(s[a]=r)}),this.rowDefs.push(s)})}unload(){this.isActive=!1,this.scrollTop=this.table.rowManager.scrollTop,this.scrollLeft=this.table.rowManager.scrollLeft,this.data=this.getData(!0),this.element.classList.remove("tabulator-spreadsheet-tab-active")}load(){var e=!this.isActive;this.isActive=!0,this.table.blockRedraw(),this.table.setData([]),this.table.setColumns(this.columnDefs),this.table.setData(this.rowDefs),this.table.restoreRedraw(),e&&this.scrollTop!==null&&(this.table.rowManager.element.scrollLeft=this.scrollLeft,this.table.rowManager.element.scrollTop=this.scrollTop),this.element.classList.add("tabulator-spreadsheet-tab-active"),this.dispatchExternal("sheetLoaded",this.getComponent())}getComponent(){return new ft(this)}getDefinition(){return{title:this.title,key:this.key,rows:this.rowCount,columns:this.columnCount,data:this.getData()}}getData(e){var t=[],i,s,n;return this.rowDefs.forEach(r=>{var o=[];this.columnFields.forEach(a=>{o.push(r[a])}),t.push(o)}),!e&&!this.options("spreadsheetOutputFull")&&(i=t.map(r=>r.findLastIndex(o=>typeof o<"u")+1),s=Math.max(...i),n=i.findLastIndex(r=>r>0)+1,t=t.slice(0,n),t=t.map(r=>r.slice(0,s))),t}setData(e){this.data=e,this.reinitialize(),this.dispatchExternal("sheetUpdated",this.getComponent()),this.isActive&&this.load()}clear(){this.setData([])}setTitle(e){this.title=e,this.element.innerText=e,this.dispatchExternal("sheetUpdated",this.getComponent())}setRows(e){this.rowCount=e,this.initializeRows(),this.dispatchExternal("sheetUpdated",this.getComponent()),this.isActive&&this.load()}setColumns(e){this.columnCount=e,this.reinitialize(),this.dispatchExternal("sheetUpdated",this.getComponent()),this.isActive&&this.load()}remove(){this.spreadsheetManager.removeSheet(this)}destroy(){this.element.parentNode&&this.element.parentNode.removeChild(this.element),this.dispatchExternal("sheetRemoved",this.getComponent())}active(){this.spreadsheetManager.loadSheet(this)}}class pt extends w{constructor(e){super(e),this.sheets=[],this.element=null,this.registerTableOption("spreadsheet",!1),this.registerTableOption("spreadsheetRows",50),this.registerTableOption("spreadsheetColumns",50),this.registerTableOption("spreadsheetColumnDefinition",{}),this.registerTableOption("spreadsheetOutputFull",!1),this.registerTableOption("spreadsheetData",!1),this.registerTableOption("spreadsheetSheets",!1),this.registerTableOption("spreadsheetSheetTabs",!1),this.registerTableOption("spreadsheetSheetTabsElement",!1),this.registerTableFunction("setSheets",this.setSheets.bind(this)),this.registerTableFunction("addSheet",this.addSheet.bind(this)),this.registerTableFunction("getSheets",this.getSheets.bind(this)),this.registerTableFunction("getSheetDefinitions",this.getSheetDefinitions.bind(this)),this.registerTableFunction("setSheetData",this.setSheetData.bind(this)),this.registerTableFunction("getSheet",this.getSheet.bind(this)),this.registerTableFunction("getSheetData",this.getSheetData.bind(this)),this.registerTableFunction("clearSheet",this.clearSheet.bind(this)),this.registerTableFunction("removeSheet",this.removeSheetFunc.bind(this)),this.registerTableFunction("activeSheet",this.activeSheetFunc.bind(this))}initialize(){this.options("spreadsheet")&&(this.subscribe("table-initialized",this.tableInitialized.bind(this)),this.subscribe("data-loaded",this.loadRemoteData.bind(this)),this.table.options.index="_id",this.options("spreadsheetData")&&this.options("spreadsheetSheets")&&(console.warn("You cannot use spreadsheetData and spreadsheetSheets at the same time, ignoring spreadsheetData"),this.table.options.spreadsheetData=!1),this.compatibilityCheck(),this.options("spreadsheetSheetTabs")&&this.initializeTabset())}compatibilityCheck(){this.options("data")&&console.warn("Do not use the data option when working with spreadsheets, use either spreadsheetData or spreadsheetSheets to pass data into the table"),this.options("pagination")&&console.warn("The spreadsheet module is not compatible with the pagination module"),this.options("groupBy")&&console.warn("The spreadsheet module is not compatible with the row grouping module"),this.options("responsiveCollapse")&&console.warn("The spreadsheet module is not compatible with the responsive collapse module")}initializeTabset(){this.element=document.createElement("div"),this.element.classList.add("tabulator-spreadsheet-tabs");var e=this.options("spreadsheetSheetTabsElement");e&&!(e instanceof HTMLElement)&&(e=document.querySelector(e),e||console.warn("Unable to find element matching spreadsheetSheetTabsElement selector:",this.options("spreadsheetSheetTabsElement"))),e?e.appendChild(this.element):this.footerAppend(this.element)}tableInitialized(){this.sheets.length?this.loadSheet(this.sheets[0]):this.options("spreadsheetSheets")?this.loadSheets(this.options("spreadsheetSheets")):this.options("spreadsheetData")&&this.loadData(this.options("spreadsheetData"))}loadRemoteData(e,t,i){return console.log("data",e,t,i),Array.isArray(e)?(this.table.dataLoader.clearAlert(),this.dispatchExternal("dataLoaded",e),!e.length||Array.isArray(e[0])?this.loadData(e):this.loadSheets(e)):console.error(`Spreadsheet Loading Error - Unable to process remote data due to invalid data type +Expecting: array +Received: `,typeof e,` +Data: `,e),!1}loadData(e){var t={data:e};this.loadSheet(this.newSheet(t))}destroySheets(){this.sheets.forEach(e=>{e.destroy()}),this.sheets=[],this.activeSheet=null}loadSheets(e){Array.isArray(e)||(e=[]),this.destroySheets(),e.forEach(t=>{this.newSheet(t)}),this.loadSheet(this.sheets[0])}loadSheet(e){this.activeSheet!==e&&(this.activeSheet&&this.activeSheet.unload(),this.activeSheet=e,e.load())}newSheet(e={}){var t;return e.rows||(e.rows=this.options("spreadsheetRows")),e.columns||(e.columns=this.options("spreadsheetColumns")),t=new Xe(this,e),this.sheets.push(t),this.element&&this.element.appendChild(t.element),t}removeSheet(e){var t=this.sheets.indexOf(e),i;this.sheets.length>1?t>-1&&(this.sheets.splice(t,1),e.destroy(),this.activeSheet===e&&(i=this.sheets[t-1]||this.sheets[0],i?this.loadSheet(i):this.activeSheet=null)):console.warn("Unable to remove sheet, at least one sheet must be active")}lookupSheet(e){return e?e instanceof Xe?e:e instanceof ft?e._sheet:this.sheets.find(t=>t.key===e)||!1:this.activeSheet}setSheets(e){return this.loadSheets(e),this.getSheets()}addSheet(e){return this.newSheet(e).getComponent()}getSheetDefinitions(){return this.sheets.map(e=>e.getDefinition())}getSheets(){return this.sheets.map(e=>e.getComponent())}getSheet(e){var t=this.lookupSheet(e);return t?t.getComponent():!1}setSheetData(e,t){e&&!t&&(t=e,e=!1);var i=this.lookupSheet(e);return i?i.setData(t):!1}getSheetData(e){var t=this.lookupSheet(e);return t?t.getData():!1}clearSheet(e){var t=this.lookupSheet(e);return t?t.clear():!1}removeSheetFunc(e){var t=this.lookupSheet(e);t&&this.removeSheet(t)}activeSheetFunc(e){var t=this.lookupSheet(e);return t?this.loadSheet(t):!1}}b(pt,"moduleName","spreadsheet");class mt extends w{constructor(e){super(e),this.tooltipSubscriber=null,this.headerSubscriber=null,this.timeout=null,this.popupInstance=null,this.registerTableOption("tooltipDelay",300),this.registerColumnOption("tooltip"),this.registerColumnOption("headerTooltip")}initialize(){this.deprecatedOptionsCheck(),this.subscribe("column-init",this.initializeColumn.bind(this))}deprecatedOptionsCheck(){}initializeColumn(e){e.definition.headerTooltip&&!this.headerSubscriber&&(this.headerSubscriber=!0,this.subscribe("column-mousemove",this.mousemoveCheck.bind(this,"headerTooltip")),this.subscribe("column-mouseout",this.mouseoutCheck.bind(this,"headerTooltip"))),e.definition.tooltip&&!this.tooltipSubscriber&&(this.tooltipSubscriber=!0,this.subscribe("cell-mousemove",this.mousemoveCheck.bind(this,"tooltip")),this.subscribe("cell-mouseout",this.mouseoutCheck.bind(this,"tooltip")))}mousemoveCheck(e,t,i){var s=e==="tooltip"?i.column.definition.tooltip:i.definition.headerTooltip;s&&(this.clearPopup(),this.timeout=setTimeout(this.loadTooltip.bind(this,t,i,s),this.table.options.tooltipDelay))}mouseoutCheck(e,t,i){this.popupInstance||this.clearPopup()}clearPopup(e,t,i){clearTimeout(this.timeout),this.timeout=null,this.popupInstance&&this.popupInstance.hide()}loadTooltip(e,t,i){var s,n,r;function o(a){n=a}typeof i=="function"&&(i=i(e,t.getComponent(),o)),i instanceof HTMLElement?s=i:(s=document.createElement("div"),i===!0&&(t instanceof ne?i=t.value:t.definition.field?this.langBind("columns|"+t.definition.field,a=>{s.innerHTML=i=a||t.definition.title}):i=t.definition.title),s.innerHTML=i),(i||i===0||i===!1)&&(s.classList.add("tabulator-tooltip"),s.addEventListener("mousemove",a=>a.preventDefault()),this.popupInstance=this.popup(s),typeof n=="function"&&this.popupInstance.renderCallback(n),r=this.popupInstance.containerEventCoords(e),this.popupInstance.show(r.x+15,r.y+15).hideOnBlur(()=>{this.dispatchExternal("TooltipClosed",t.getComponent()),this.popupInstance=null}),this.dispatchExternal("TooltipOpened",t.getComponent()))}}b(mt,"moduleName","tooltip");var vs={integer:function(l,e,t){return e===""||e===null||typeof e>"u"?!0:(e=Number(e),!isNaN(e)&&isFinite(e)&&Math.floor(e)===e)},float:function(l,e,t){return e===""||e===null||typeof e>"u"?!0:(e=Number(e),!isNaN(e)&&isFinite(e)&&e%1!==0)},numeric:function(l,e,t){return e===""||e===null||typeof e>"u"?!0:!isNaN(e)},string:function(l,e,t){return e===""||e===null||typeof e>"u"?!0:isNaN(e)},alphanumeric:function(l,e,t){if(e===""||e===null||typeof e>"u")return!0;var i=new RegExp(/^[a-z0-9]+$/i);return i.test(e)},max:function(l,e,t){return e===""||e===null||typeof e>"u"?!0:parseFloat(e)<=t},min:function(l,e,t){return e===""||e===null||typeof e>"u"?!0:parseFloat(e)>=t},starts:function(l,e,t){return e===""||e===null||typeof e>"u"?!0:String(e).toLowerCase().startsWith(String(t).toLowerCase())},ends:function(l,e,t){return e===""||e===null||typeof e>"u"?!0:String(e).toLowerCase().endsWith(String(t).toLowerCase())},minLength:function(l,e,t){return e===""||e===null||typeof e>"u"?!0:String(e).length>=t},maxLength:function(l,e,t){return e===""||e===null||typeof e>"u"?!0:String(e).length<=t},in:function(l,e,t){return e===""||e===null||typeof e>"u"?!0:(typeof t=="string"&&(t=t.split("|")),t.indexOf(e)>-1)},regex:function(l,e,t){if(e===""||e===null||typeof e>"u")return!0;var i=new RegExp(t);return i.test(e)},unique:function(l,e,t){if(e===""||e===null||typeof e>"u")return!0;var i=!0,s=l.getData(),n=l.getColumn()._getSelf();return this.table.rowManager.rows.forEach(function(r){var o=r.getData();o!==s&&e==n.getFieldValue(o)&&(i=!1)}),i},required:function(l,e,t){return e!==""&&e!==null&&typeof e<"u"}};const ie=class ie extends w{constructor(e){super(e),this.invalidCells=[],this.registerTableOption("validationMode","blocking"),this.registerColumnOption("validator"),this.registerTableFunction("getInvalidCells",this.getInvalidCells.bind(this)),this.registerTableFunction("clearCellValidation",this.userClearCellValidation.bind(this)),this.registerTableFunction("validate",this.userValidate.bind(this)),this.registerComponentFunction("cell","isValid",this.cellIsValid.bind(this)),this.registerComponentFunction("cell","clearValidation",this.clearValidation.bind(this)),this.registerComponentFunction("cell","validate",this.cellValidate.bind(this)),this.registerComponentFunction("column","validate",this.columnValidate.bind(this)),this.registerComponentFunction("row","validate",this.rowValidate.bind(this))}initialize(){this.subscribe("cell-delete",this.clearValidation.bind(this)),this.subscribe("column-layout",this.initializeColumnCheck.bind(this)),this.subscribe("edit-success",this.editValidate.bind(this)),this.subscribe("edit-editor-clear",this.editorClear.bind(this)),this.subscribe("edit-edited-clear",this.editedClear.bind(this))}editValidate(e,t,i){var s=this.table.options.validationMode!=="manual"?this.validate(e.column.modules.validate,e,t):!0;return s!==!0&&setTimeout(()=>{e.getElement().classList.add("tabulator-validation-fail"),this.dispatchExternal("validationFailed",e.getComponent(),t,s)}),s}editorClear(e,t){t&&e.column.modules.validate&&this.cellValidate(e),e.getElement().classList.remove("tabulator-validation-fail")}editedClear(e){e.modules.validate&&(e.modules.validate.invalid=!1)}cellIsValid(e){return e.modules.validate&&e.modules.validate.invalid||!0}cellValidate(e){return this.validate(e.column.modules.validate,e,e.getValue())}columnValidate(e){var t=[];return e.cells.forEach(i=>{this.cellValidate(i)!==!0&&t.push(i.getComponent())}),t.length?t:!0}rowValidate(e){var t=[];return e.cells.forEach(i=>{this.cellValidate(i)!==!0&&t.push(i.getComponent())}),t.length?t:!0}userClearCellValidation(e){e||(e=this.getInvalidCells()),Array.isArray(e)||(e=[e]),e.forEach(t=>{this.clearValidation(t._getSelf())})}userValidate(e){var t=[];return this.table.rowManager.rows.forEach(i=>{i=i.getComponent();var s=i.validate();s!==!0&&(t=t.concat(s))}),t.length?t:!0}initializeColumnCheck(e){typeof e.definition.validator<"u"&&this.initializeColumn(e)}initializeColumn(e){var t=this,i=[],s;e.definition.validator&&(Array.isArray(e.definition.validator)?e.definition.validator.forEach(n=>{s=t._extractValidator(n),s&&i.push(s)}):(s=this._extractValidator(e.definition.validator),s&&i.push(s)),e.modules.validate=i.length?i:!1)}_extractValidator(e){var t,i,s;switch(typeof e){case"string":return s=e.indexOf(":"),s>-1?(t=e.substring(0,s),i=e.substring(s+1)):t=e,this._buildValidator(t,i);case"function":return this._buildValidator(e);case"object":return this._buildValidator(e.type,e.parameters)}}_buildValidator(e,t){var i=typeof e=="function"?e:ie.validators[e];return i?{type:typeof e=="function"?"function":e,func:i,params:t}:(console.warn("Validator Setup Error - No matching validator found:",e),!1)}validate(e,t,i){var s=this,n=[],r=this.invalidCells.indexOf(t);return e&&e.forEach(o=>{o.func.call(s,t.getComponent(),i,o.params)||n.push({type:o.type,parameters:o.params})}),t.modules.validate||(t.modules.validate={}),n.length?(t.modules.validate.invalid=n,this.table.options.validationMode!=="manual"&&t.getElement().classList.add("tabulator-validation-fail"),r==-1&&this.invalidCells.push(t)):(t.modules.validate.invalid=!1,t.getElement().classList.remove("tabulator-validation-fail"),r>-1&&this.invalidCells.splice(r,1)),n.length?n:!0}getInvalidCells(){var e=[];return this.invalidCells.forEach(t=>{e.push(t.getComponent())}),e}clearValidation(e){var t;e.modules.validate&&e.modules.validate.invalid&&(e.getElement().classList.remove("tabulator-validation-fail"),e.modules.validate.invalid=!1,t=this.invalidCells.indexOf(e),t>-1&&this.invalidCells.splice(t,1))}};b(ie,"moduleName","validate"),b(ie,"validators",vs);let Fe=ie;var ue=Object.freeze({__proto__:null,AccessorModule:ce,AjaxModule:me,ClipboardModule:ge,ColumnCalcsModule:be,DataTreeModule:Ze,DownloadModule:ve,EditModule:we,ExportModule:Ce,FilterModule:Ee,FormatModule:ye,FrozenColumnsModule:et,FrozenRowsModule:tt,GroupRowsModule:it,HistoryModule:Re,HtmlTableImportModule:st,ImportModule:xe,InteractionModule:nt,KeybindingsModule:Te,MenuModule:rt,MoveColumnsModule:ot,MoveRowsModule:ke,MutatorModule:Me,PageModule:Le,PersistenceModule:Se,PopupModule:at,PrintModule:lt,ReactiveDataModule:ht,ResizeColumnsModule:dt,ResizeRowsModule:ut,ResizeTableModule:ct,ResponsiveLayoutModule:De,SelectRangeModule:re,SelectRowModule:ze,SortModule:He,SpreadsheetModule:pt,TooltipModule:mt,ValidateModule:Fe}),ws={debugEventsExternal:!1,debugEventsInternal:!1,debugInvalidOptions:!0,debugInvalidComponentFuncs:!0,debugInitialization:!0,debugDeprecation:!0,height:!1,minHeight:!1,maxHeight:!1,columnHeaderVertAlign:"top",popupContainer:!1,columns:[],columnDefaults:{},rowHeader:!1,data:!1,autoColumns:!1,autoColumnsDefinitions:!1,nestedFieldSeparator:".",footerElement:!1,index:"id",textDirection:"auto",addRowPos:"bottom",headerVisible:!0,renderVertical:"virtual",renderHorizontal:"basic",renderVerticalBuffer:0,scrollToRowPosition:"top",scrollToRowIfVisible:!0,scrollToColumnPosition:"left",scrollToColumnIfVisible:!0,rowFormatter:!1,rowFormatterPrint:null,rowFormatterClipboard:null,rowFormatterHtmlOutput:null,rowHeight:null,placeholder:!1,dataLoader:!0,dataLoaderLoading:!1,dataLoaderError:!1,dataLoaderErrorTimeout:3e3,dataSendParams:{},dataReceiveParams:{}};class gt{constructor(e,t,i={}){this.table=e,this.msgType=t,this.registeredDefaults=Object.assign({},i)}register(e,t){this.registeredDefaults[e]=t}generate(e,t={}){var i=Object.assign({},this.registeredDefaults),s=this.table.options.debugInvalidOptions||t.debugInvalidOptions===!0;Object.assign(i,e);for(let n in t)i.hasOwnProperty(n)||(s&&console.warn("Invalid "+this.msgType+" option:",n),i[n]=t.key);for(let n in i)n in t?i[n]=t[n]:Array.isArray(i[n])?i[n]=Object.assign([],i[n]):typeof i[n]=="object"&&i[n]!==null?i[n]=Object.assign({},i[n]):typeof i[n]>"u"&&delete i[n];return i}}class le extends M{constructor(e){super(e),this.elementVertical=e.rowManager.element,this.elementHorizontal=e.columnManager.element,this.tableElement=e.rowManager.tableElement,this.verticalFillMode="fit"}initialize(){}clearRows(){}clearColumns(){}reinitializeColumnWidths(e){}renderRows(){}renderColumns(){}rerenderRows(e){e&&e()}rerenderColumns(e,t){}renderRowCells(e){}rerenderRowCells(e,t){}scrollColumns(e,t){}scrollRows(e,t){}resize(){}scrollToRow(e){}scrollToRowNearestTop(e){}visibleRows(e){return[]}rows(){return this.table.rowManager.getDisplayRows()}styleRow(e,t){var i=e.getElement();t%2?(i.classList.add("tabulator-row-even"),i.classList.remove("tabulator-row-odd")):(i.classList.add("tabulator-row-odd"),i.classList.remove("tabulator-row-even"))}clear(){this.clearRows(),this.clearColumns()}render(){this.renderRows(),this.renderColumns()}rerender(e){this.rerenderRows(),this.rerenderColumns()}scrollToRowPosition(e,t,i){var s=this.rows().indexOf(e),n=e.getElement(),r=0;return new Promise((o,a)=>{if(s>-1){if(typeof i>"u"&&(i=this.table.options.scrollToRowIfVisible),!i&&x.elVisible(n)&&(r=x.elOffset(n).top-x.elOffset(this.elementVertical).top,r>0&&r"u"&&(t=this.table.options.scrollToRowPosition),t==="nearest"&&(t=this.scrollToRowNearestTop(e)?"top":"bottom"),this.scrollToRow(e),t){case"middle":case"center":this.elementVertical.scrollHeight-this.elementVertical.scrollTop==this.elementVertical.clientHeight?this.elementVertical.scrollTop=this.elementVertical.scrollTop+(n.offsetTop-this.elementVertical.scrollTop)-(this.elementVertical.scrollHeight-n.offsetTop)/2:this.elementVertical.scrollTop=this.elementVertical.scrollTop-this.elementVertical.clientHeight/2;break;case"bottom":this.elementVertical.scrollHeight-this.elementVertical.scrollTop==this.elementVertical.clientHeight?this.elementVertical.scrollTop=this.elementVertical.scrollTop-(this.elementVertical.scrollHeight-n.offsetTop)+n.offsetHeight:this.elementVertical.scrollTop=this.elementVertical.scrollTop-this.elementVertical.clientHeight+n.offsetHeight;break;case"top":this.elementVertical.scrollTop=n.offsetTop;break}o()}else console.warn("Scroll Error - Row not visible"),a("Scroll Error - Row not visible")})}}class Cs extends le{constructor(e){super(e)}renderRowCells(e,t){const i=document.createDocumentFragment();e.cells.forEach(s=>{i.appendChild(s.getElement())}),e.element.appendChild(i),t||e.cells.forEach(s=>{s.cellRendered()})}reinitializeColumnWidths(e){e.forEach(function(t){t.reinitializeWidth()})}}class Es extends le{constructor(e){super(e),this.leftCol=0,this.rightCol=0,this.scrollLeft=0,this.vDomScrollPosLeft=0,this.vDomScrollPosRight=0,this.vDomPadLeft=0,this.vDomPadRight=0,this.fitDataColAvg=0,this.windowBuffer=200,this.visibleRows=null,this.initialized=!1,this.isFitData=!1,this.columns=[]}initialize(){this.compatibilityCheck(),this.layoutCheck(),this.vertScrollListen()}compatibilityCheck(){this.options("layout")=="fitDataTable"&&console.warn("Horizontal Virtual DOM is not compatible with fitDataTable layout mode"),this.options("responsiveLayout")&&console.warn("Horizontal Virtual DOM is not compatible with responsive columns"),this.options("rtl")&&console.warn("Horizontal Virtual DOM is not currently compatible with RTL text direction")}layoutCheck(){this.isFitData=this.options("layout").startsWith("fitData")}vertScrollListen(){this.subscribe("scroll-vertical",this.clearVisRowCache.bind(this)),this.subscribe("data-refreshed",this.clearVisRowCache.bind(this))}clearVisRowCache(){this.visibleRows=null}renderColumns(e,t){this.dataChange()}scrollColumns(e,t){this.scrollLeft!=e&&(this.scrollLeft=e,this.scroll(e-(this.vDomScrollPosLeft+this.windowBuffer)))}calcWindowBuffer(){var e=this.elementVertical.clientWidth;this.table.columnManager.columnsByIndex.forEach(t=>{if(t.visible){var i=t.getWidth();i>e&&(e=i)}}),this.windowBuffer=e*2}rerenderColumns(e,t){var i={cols:this.columns,leftCol:this.leftCol,rightCol:this.rightCol},s=0;e&&!this.initialized||(this.clear(),this.calcWindowBuffer(),this.scrollLeft=this.elementVertical.scrollLeft,this.vDomScrollPosLeft=this.scrollLeft-this.windowBuffer,this.vDomScrollPosRight=this.scrollLeft+this.elementVertical.clientWidth+this.windowBuffer,this.table.columnManager.columnsByIndex.forEach(n=>{var r={},o;n.visible&&(n.modules.frozen||(o=n.getWidth(),r.leftPos=s,r.rightPos=s+o,r.width=o,this.isFitData&&(r.fitDataCheck=n.modules.vdomHoz?n.modules.vdomHoz.fitDataCheck:!0),s+o>this.vDomScrollPosLeft&&s{t.appendChild(i.getElement())}),e.element.appendChild(t),e.cells.forEach(i=>{i.cellRendered()})}}rerenderRowCells(e,t){this.reinitializeRow(e,t)}reinitializeColumnWidths(e){for(let t=this.leftCol;t<=this.rightCol;t++)this.columns[t].reinitializeWidth()}deinitialize(){this.initialized=!1}clear(){this.columns=[],this.leftCol=-1,this.rightCol=0,this.vDomScrollPosLeft=0,this.vDomScrollPosRight=0,this.vDomPadLeft=0,this.vDomPadRight=0}dataChange(){var e=!1,t,i;if(this.isFitData){if(this.table.columnManager.columnsByIndex.forEach(s=>{!s.definition.width&&s.visible&&(e=!0)}),e&&this.table.rowManager.getDisplayRows().length&&(this.vDomScrollPosRight=this.scrollLeft+this.elementVertical.clientWidth+this.windowBuffer,t=this.chain("rows-sample",[1],[],()=>this.table.rowManager.getDisplayRows())[0],t)){i=t.getElement(),t.generateCells(),this.tableElement.appendChild(i);for(let s=0;s{i!==this.columns[s]&&(t=!1)}),!t)}reinitializeRows(){var e=this.getVisibleRows(),t=this.table.rowManager.getRows().filter(i=>!e.includes(i));e.forEach(i=>{this.reinitializeRow(i,!0)}),t.forEach(i=>{i.deinitialize()})}getVisibleRows(){return this.visibleRows||(this.visibleRows=this.table.rowManager.getVisibleRows()),this.visibleRows}scroll(e){this.vDomScrollPosLeft+=e,this.vDomScrollPosRight+=e,Math.abs(e)>this.windowBuffer/2?this.rerenderColumns():e>0?(this.addColRight(),this.removeColLeft()):(this.addColLeft(),this.removeColRight())}colPositionAdjust(e,t,i){for(let s=e;s{if(s.type!=="group"){var n=s.getCell(i);s.getElement().insertBefore(n.getElement(),s.getCell(this.columns[this.rightCol]).getElement().nextSibling),n.cellRendered()}}),this.fitDataColActualWidthCheck(i),this.rightCol++,this.getVisibleRows().forEach(s=>{s.type!=="group"&&(s.modules.vdomHoz.rightCol=this.rightCol)}),this.rightCol>=this.columns.length-1?this.vDomPadRight=0:this.vDomPadRight-=i.getWidth()):t=!1}e&&(this.tableElement.style.paddingRight=this.vDomPadRight+"px")}addColLeft(){for(var e=!1,t=!0;t;){let i=this.columns[this.leftCol-1];if(i)if(i.modules.vdomHoz.rightPos>=this.vDomScrollPosLeft){e=!0,this.getVisibleRows().forEach(n=>{if(n.type!=="group"){var r=n.getCell(i);n.getElement().insertBefore(r.getElement(),n.getCell(this.columns[this.leftCol]).getElement()),r.cellRendered()}}),this.leftCol--,this.getVisibleRows().forEach(n=>{n.type!=="group"&&(n.modules.vdomHoz.leftCol=this.leftCol)}),this.leftCol<=0?this.vDomPadLeft=0:this.vDomPadLeft-=i.getWidth();let s=this.fitDataColActualWidthCheck(i);s&&(this.scrollLeft=this.elementVertical.scrollLeft=this.elementVertical.scrollLeft+s,this.vDomPadRight-=s)}else t=!1;else t=!1}e&&(this.tableElement.style.paddingLeft=this.vDomPadLeft+"px")}removeColRight(){for(var e=!1,t=!0;t;){let i=this.columns[this.rightCol];i&&i.modules.vdomHoz.leftPos>this.vDomScrollPosRight?(e=!0,this.getVisibleRows().forEach(s=>{if(s.type!=="group"){var n=s.getCell(i);try{s.getElement().removeChild(n.getElement())}catch(r){console.warn("Could not removeColRight",r.message)}}}),this.vDomPadRight+=i.getWidth(),this.rightCol--,this.getVisibleRows().forEach(s=>{s.type!=="group"&&(s.modules.vdomHoz.rightCol=this.rightCol)})):t=!1}e&&(this.tableElement.style.paddingRight=this.vDomPadRight+"px")}removeColLeft(){for(var e=!1,t=!0;t;){let i=this.columns[this.leftCol];i&&i.modules.vdomHoz.rightPos{if(s.type!=="group"){var n=s.getCell(i);try{s.getElement().removeChild(n.getElement())}catch(r){console.warn("Could not removeColLeft",r.message)}}}),this.vDomPadLeft+=i.getWidth(),this.leftCol++,this.getVisibleRows().forEach(s=>{s.type!=="group"&&(s.modules.vdomHoz.leftCol=this.leftCol)})):t=!1}e&&(this.tableElement.style.paddingLeft=this.vDomPadLeft+"px")}fitDataColActualWidthCheck(e){var t,i;return e.modules.vdomHoz.fitDataCheck&&(e.reinitializeWidth(),t=e.getWidth(),i=t-e.modules.vdomHoz.width,i&&(e.modules.vdomHoz.rightPos+=i,e.modules.vdomHoz.width=t,this.colPositionAdjust(this.columns.indexOf(e)+1,this.columns.length,i)),e.modules.vdomHoz.fitDataCheck=!1),i}initializeRow(e){if(e.type!=="group"){e.modules.vdomHoz={leftCol:this.leftCol,rightCol:this.rightCol},this.table.modules.frozenColumns&&this.table.modules.frozenColumns.leftColumns.forEach(t=>{this.appendCell(e,t)});for(let t=this.leftCol;t<=this.rightCol;t++)this.appendCell(e,this.columns[t]);this.table.modules.frozenColumns&&this.table.modules.frozenColumns.rightColumns.forEach(t=>{this.appendCell(e,t)})}}appendCell(e,t){if(t&&t.visible){let i=e.getCell(t);e.getElement().appendChild(i.getElement()),i.cellRendered()}}reinitializeRow(e,t){if(e.type!=="group"&&(t||!e.modules.vdomHoz||e.modules.vdomHoz.leftCol!==this.leftCol||e.modules.vdomHoz.rightCol!==this.rightCol)){for(var i=e.getElement();i.firstChild;)i.removeChild(i.firstChild);this.initializeRow(e)}}}class ys extends M{constructor(e){super(e),this.blockHozScrollEvent=!1,this.headersElement=null,this.contentsElement=null,this.rowHeader=null,this.element=null,this.columns=[],this.columnsByIndex=[],this.columnsByField={},this.scrollLeft=0,this.optionsList=new gt(this.table,"column definition",Qe),this.redrawBlock=!1,this.redrawBlockUpdate=null,this.renderer=null}initialize(){this.initializeRenderer(),this.headersElement=this.createHeadersElement(),this.contentsElement=this.createHeaderContentsElement(),this.element=this.createHeaderElement(),this.contentsElement.insertBefore(this.headersElement,this.contentsElement.firstChild),this.element.insertBefore(this.contentsElement,this.element.firstChild),this.initializeScrollWheelWatcher(),this.subscribe("scroll-horizontal",this.scrollHorizontal.bind(this)),this.subscribe("scrollbar-vertical",this.padVerticalScrollbar.bind(this))}padVerticalScrollbar(e){this.table.rtl?this.headersElement.style.marginLeft=e+"px":this.headersElement.style.marginRight=e+"px"}initializeRenderer(){var e,t={virtual:Es,basic:Cs};typeof this.table.options.renderHorizontal=="string"?e=t[this.table.options.renderHorizontal]:e=this.table.options.renderHorizontal,e?(this.renderer=new e(this.table,this.element,this.tableElement),this.renderer.initialize()):console.error("Unable to find matching renderer:",this.table.options.renderHorizontal)}createHeadersElement(){var e=document.createElement("div");return e.classList.add("tabulator-headers"),e.setAttribute("role","row"),e}createHeaderContentsElement(){var e=document.createElement("div");return e.classList.add("tabulator-header-contents"),e.setAttribute("role","rowgroup"),e}createHeaderElement(){var e=document.createElement("div");return e.classList.add("tabulator-header"),e.setAttribute("role","rowgroup"),this.table.options.headerVisible||e.classList.add("tabulator-header-hidden"),e}getElement(){return this.element}getContentsElement(){return this.contentsElement}getHeadersElement(){return this.headersElement}scrollHorizontal(e){this.contentsElement.scrollLeft=e,this.scrollLeft=e,this.renderer.scrollColumns(e)}initializeScrollWheelWatcher(){this.contentsElement.addEventListener("wheel",e=>{var t;e.deltaX&&(t=this.contentsElement.scrollLeft+e.deltaX,this.table.rowManager.scrollHorizontal(t),this.table.columnManager.scrollHorizontal(t))})}generateColumnsFromRowData(e){var t=[],i={},s=this.table.options.autoColumns==="full"?e:[e[0]],n=this.table.options.autoColumnsDefinitions;if(e&&e.length){if(s.forEach(r=>{Object.keys(r).forEach((o,a)=>{let h=r[o],d;i[o]?i[o]!==!0&&typeof h<"u"&&(i[o].sorter=this.calculateSorterFromValue(h),i[o]=!0):(d={field:o,title:o,sorter:this.calculateSorterFromValue(h)},t.splice(a,0,d),i[o]=typeof h>"u"?d:!0)})}),n)switch(typeof n){case"function":this.table.options.columns=n.call(this.table,t);break;case"object":Array.isArray(n)?t.forEach(r=>{var o=n.find(a=>a.field===r.field);o&&Object.assign(r,o)}):t.forEach(r=>{n[r.field]&&Object.assign(r,n[r.field])}),this.table.options.columns=t;break}else this.table.options.columns=t;this.setColumns(this.table.options.columns)}}calculateSorterFromValue(e){var t;switch(typeof e){case"undefined":t="string";break;case"boolean":t="boolean";break;case"number":t="number";break;case"object":Array.isArray(e)?t="array":t="string";break;default:!isNaN(e)&&e!==""?t="number":e.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)?t="alphanum":t="string";break}return t}setColumns(e,t){for(;this.headersElement.firstChild;)this.headersElement.removeChild(this.headersElement.firstChild);this.columns=[],this.columnsByIndex=[],this.columnsByField={},this.dispatch("columns-loading"),this.dispatchExternal("columnsLoading"),this.table.options.rowHeader&&(this.rowHeader=new U(this.table.options.rowHeader===!0?{}:this.table.options.rowHeader,this,!0),this.columns.push(this.rowHeader),this.headersElement.appendChild(this.rowHeader.getElement()),this.rowHeader.columnRendered()),e.forEach((i,s)=>{this._addColumn(i)}),this._reIndexColumns(),this.dispatch("columns-loaded"),this.subscribedExternal("columnsLoaded")&&this.dispatchExternal("columnsLoaded",this.getComponents()),this.rerenderColumns(!1,!0),this.redraw(!0)}_addColumn(e,t,i){var s=new U(e,this),n=s.getElement(),r=i&&this.findColumnIndex(i);if(t&&this.rowHeader&&(!i||i===this.rowHeader)&&(t=!1,i=this.rowHeader,r=0),i&&r>-1){var o=i.getTopColumn(),a=this.columns.indexOf(o),h=o.getElement();t?(this.columns.splice(a,0,s),h.parentNode.insertBefore(n,h)):(this.columns.splice(a+1,0,s),h.parentNode.insertBefore(n,h.nextSibling))}else t?(this.columns.unshift(s),this.headersElement.insertBefore(s.getElement(),this.headersElement.firstChild)):(this.columns.push(s),this.headersElement.appendChild(s.getElement()));return s.columnRendered(),s}registerColumnField(e){e.definition.field&&(this.columnsByField[e.definition.field]=e)}registerColumnPosition(e){this.columnsByIndex.push(e)}_reIndexColumns(){this.columnsByIndex=[],this.columns.forEach(function(e){e.reRegisterPosition()})}verticalAlignHeaders(){var e=0;this.redrawBlock||(this.headersElement.style.height="",this.columns.forEach(t=>{t.clearVerticalAlign()}),this.columns.forEach(t=>{var i=t.getHeight();i>e&&(e=i)}),this.headersElement.style.height=e+"px",this.columns.forEach(t=>{t.verticalAlign(this.table.options.columnHeaderVertAlign,e)}),this.table.rowManager.adjustTableSize())}findColumn(e){var t;if(typeof e=="object"){if(e instanceof U)return e;if(e instanceof $e)return e._getSelf()||!1;if(typeof HTMLElement<"u"&&e instanceof HTMLElement)return t=[],this.columns.forEach(s=>{t.push(s),t=t.concat(s.getColumns(!0))}),t.find(s=>s.element===e)||!1}else return this.columnsByField[e]||!1;return!1}getColumnByField(e){return this.columnsByField[e]}getColumnsByFieldRoot(e){var t=[];return Object.keys(this.columnsByField).forEach(i=>{var s=this.table.options.nestedFieldSeparator?i.split(this.table.options.nestedFieldSeparator)[0]:i;s===e&&t.push(this.columnsByField[i])}),t}getColumnByIndex(e){return this.columnsByIndex[e]}getFirstVisibleColumn(){var e=this.columnsByIndex.findIndex(t=>t.visible);return e>-1?this.columnsByIndex[e]:!1}getVisibleColumnsByIndex(){return this.columnsByIndex.filter(e=>e.visible)}getColumns(){return this.columns}findColumnIndex(e){return this.columnsByIndex.findIndex(t=>e===t)}getRealColumns(){return this.columnsByIndex}traverse(e){this.columnsByIndex.forEach((t,i)=>{e(t,i)})}getDefinitions(e){var t=[];return this.columnsByIndex.forEach(i=>{(!e||e&&i.visible)&&t.push(i.getDefinition())}),t}getDefinitionTree(){var e=[];return this.columns.forEach(t=>{e.push(t.getDefinition(!0))}),e}getComponents(e){var t=[],i=e?this.columns:this.columnsByIndex;return i.forEach(s=>{t.push(s.getComponent())}),t}getWidth(){var e=0;return this.columnsByIndex.forEach(t=>{t.visible&&(e+=t.getWidth())}),e}moveColumn(e,t,i){t.element.parentNode.insertBefore(e.element,t.element),i&&t.element.parentNode.insertBefore(t.element,e.element),this.moveColumnActual(e,t,i),this.verticalAlignHeaders(),this.table.rowManager.reinitialize()}moveColumnActual(e,t,i){e.parent.isGroup?this._moveColumnInArray(e.parent.columns,e,t,i):this._moveColumnInArray(this.columns,e,t,i),this._moveColumnInArray(this.columnsByIndex,e,t,i,!0),this.rerenderColumns(!0),this.dispatch("column-moved",e,t,i),this.subscribedExternal("columnMoved")&&this.dispatchExternal("columnMoved",e.getComponent(),this.table.columnManager.getComponents())}_moveColumnInArray(e,t,i,s,n){var r=e.indexOf(t),o,a=[];r>-1&&(e.splice(r,1),o=e.indexOf(i),o>-1?s&&(o=o+1):o=r,e.splice(o,0,t),n&&(a=this.chain("column-moving-rows",[t,i,s],null,[])||[],a=a.concat(this.table.rowManager.rows),a.forEach(function(h){if(h.cells.length){var d=h.cells.splice(r,1)[0];h.cells.splice(o,0,d)}})))}scrollToColumn(e,t,i){var s=0,n=e.getLeftOffset(),r=0,o=e.getElement();return new Promise((a,h)=>{if(typeof t>"u"&&(t=this.table.options.scrollToColumnPosition),typeof i>"u"&&(i=this.table.options.scrollToColumnIfVisible),e.visible){switch(t){case"middle":case"center":r=-this.element.clientWidth/2;break;case"right":r=o.clientWidth-this.headersElement.clientWidth;break}if(!i&&n>0&&n+o.offsetWidth{t.push(i.generateCell(e))}),t}getFlexBaseWidth(){var e=this.table.element.clientWidth,t=0;return this.table.rowManager.element.scrollHeight>this.table.rowManager.element.clientHeight&&(e-=this.table.rowManager.element.offsetWidth-this.table.rowManager.element.clientWidth),this.columnsByIndex.forEach(function(i){var s,n,r;i.visible&&(s=i.definition.width||0,n=parseInt(i.minWidth),typeof s=="string"?s.indexOf("%")>-1?r=e/100*parseInt(s):r=parseInt(s):r=s,t+=r>n?r:n)}),t}addColumn(e,t,i){return new Promise((s,n)=>{var r=this._addColumn(e,t,i);this._reIndexColumns(),this.dispatch("column-add",e,t,i),this.layoutMode()!="fitColumns"&&r.reinitializeWidth(),this.redraw(!0),this.table.rowManager.reinitialize(),this.rerenderColumns(),s(r)})}deregisterColumn(e){var t=e.getField(),i;t&&delete this.columnsByField[t],i=this.columnsByIndex.indexOf(e),i>-1&&this.columnsByIndex.splice(i,1),i=this.columns.indexOf(e),i>-1&&this.columns.splice(i,1),this.verticalAlignHeaders(),this.redraw()}rerenderColumns(e,t){this.redrawBlock?(e===!1||e===!0&&this.redrawBlockUpdate===null)&&(this.redrawBlockUpdate=e):this.renderer.rerenderColumns(e,t)}blockRedraw(){this.redrawBlock=!0,this.redrawBlockUpdate=null}restoreRedraw(){this.redrawBlock=!1,this.verticalAlignHeaders(),this.renderer.rerenderColumns(this.redrawBlockUpdate)}redraw(e){x.elVisible(this.element)&&this.verticalAlignHeaders(),e&&(this.table.rowManager.resetScroll(),this.table.rowManager.reinitialize()),this.confirm("table-redrawing",e)||this.layoutRefresh(e),this.dispatch("table-redraw",e),this.table.footerManager.redraw()}}class Rs extends le{constructor(e){super(e),this.verticalFillMode="fill",this.scrollTop=0,this.scrollLeft=0,this.scrollTop=0,this.scrollLeft=0}clearRows(){for(var e=this.tableElement;e.firstChild;)e.removeChild(e.firstChild);e.scrollTop=0,e.scrollLeft=0,e.style.minWidth="",e.style.minHeight="",e.style.display="",e.style.visibility=""}renderRows(){var e=this.tableElement,t=!0,i=document.createDocumentFragment(),s=this.rows();s.forEach((n,r)=>{this.styleRow(n,r),n.initialize(!1,!0),n.type!=="group"&&(t=!1),i.appendChild(n.getElement())}),e.appendChild(i),s.forEach(n=>{n.rendered(),n.heightInitialized||n.calcHeight(!0)}),s.forEach(n=>{n.heightInitialized||n.setCellHeight()}),t?e.style.minWidth=this.table.columnManager.getWidth()+"px":e.style.minWidth=""}rerenderRows(e){this.clearRows(),e&&e(),this.renderRows(),this.rows().length||this.table.rowManager.tableEmpty()}scrollToRowNearestTop(e){var t=x.elOffset(e.getElement()).top;return!(Math.abs(this.elementVertical.scrollTop-t)>Math.abs(this.elementVertical.scrollTop+this.elementVertical.clientHeight-t))}scrollToRow(e){var t=e.getElement();this.elementVertical.scrollTop=x.elOffset(t).top-x.elOffset(this.elementVertical).top+this.elementVertical.scrollTop}visibleRows(e){return this.rows()}}class xs extends le{constructor(e){super(e),this.verticalFillMode="fill",this.scrollTop=0,this.scrollLeft=0,this.vDomRowHeight=20,this.vDomTop=0,this.vDomBottom=0,this.vDomScrollPosTop=0,this.vDomScrollPosBottom=0,this.vDomTopPad=0,this.vDomBottomPad=0,this.vDomMaxRenderChain=90,this.vDomWindowBuffer=0,this.vDomWindowMinTotalRows=20,this.vDomWindowMinMarginRows=5,this.vDomTopNewRows=[],this.vDomBottomNewRows=[]}clearRows(){for(var e=this.tableElement;e.firstChild;)e.removeChild(e.firstChild);e.style.paddingTop="",e.style.paddingBottom="",e.style.minHeight="",e.style.display="",e.style.visibility="",this.elementVertical.scrollTop=0,this.elementVertical.scrollLeft=0,this.scrollTop=0,this.scrollLeft=0,this.vDomTop=0,this.vDomBottom=0,this.vDomTopPad=0,this.vDomBottomPad=0,this.vDomScrollPosTop=0,this.vDomScrollPosBottom=0}renderRows(){this._virtualRenderFill()}rerenderRows(e){for(var t=this.elementVertical.scrollTop,i=!1,s=!1,n=this.table.rowManager.scrollLeft,r=this.rows(),o=this.vDomTop;o<=this.vDomBottom;o++)if(r[o]){var a=t-r[o].getElement().offsetTop;if(s===!1||Math.abs(a){h.deinitializeHeight()}),e&&e(),this.rows().length?this._virtualRenderFill(i===!1?this.rows.length-1:i,!0,s||0):(this.clear(),this.table.rowManager.tableEmpty()),this.scrollColumns(n)}scrollColumns(e){this.table.rowManager.scrollHorizontal(e)}scrollRows(e,t){var i=e-this.vDomScrollPosTop,s=e-this.vDomScrollPosBottom,n=this.vDomWindowBuffer*2,r=this.rows();if(this.scrollTop=e,-i>n||s>n){var o=this.table.rowManager.scrollLeft;this._virtualRenderFill(Math.floor(this.elementVertical.scrollTop/this.elementVertical.scrollHeight*r.length)),this.scrollColumns(o)}else t?(i<0&&this._addTopRow(r,-i),s<0&&(this.vDomScrollHeight-this.scrollTop>this.vDomWindowBuffer?this._removeBottomRow(r,-s):this.vDomScrollPosBottom=this.scrollTop)):(s>=0&&this._addBottomRow(r,s),i>=0&&(this.scrollTop>this.vDomWindowBuffer?this._removeTopRow(r,i):this.vDomScrollPosTop=this.scrollTop))}resize(){this.vDomWindowBuffer=this.table.options.renderVerticalBuffer||this.elementVertical.clientHeight}scrollToRowNearestTop(e){var t=this.rows().indexOf(e);return!(Math.abs(this.vDomTop-t)>Math.abs(this.vDomBottom-t))}scrollToRow(e){var t=this.rows().indexOf(e);t>-1&&this._virtualRenderFill(t,!0)}visibleRows(e){var t=this.elementVertical.scrollTop,i=this.elementVertical.clientHeight+t,s=!1,n=0,r=0,o=this.rows();if(e)n=this.vDomTop,r=this.vDomBottom;else for(var a=this.vDomTop;a<=this.vDomBottom;a++)if(o[a])if(s)if(i-o[a].getElement().offsetTop>=0)r=a;else break;else if(t-o[a].getElement().offsetTop>=0)n=a;else if(s=!0,i-o[a].getElement().offsetTop>=0)r=a;else break;return o.slice(n,r+1)}_virtualRenderFill(e,t,i){var s=this.tableElement,n=this.elementVertical,r=0,o=0,a=0,h=0,d=0,u=0,c=this.rows(),f=c.length,g=0,p,v,m=[],C=0,T=0,y=this.table.rowManager.fixedHeight,k=this.elementVertical.clientHeight,P=this.table.options.rowHeight,X=!0;if(e=e||0,i=i||0,!e)this.clear();else{for(;s.firstChild;)s.removeChild(s.firstChild);h=(f-e+1)*this.vDomRowHeight,h{L.rendered(),L.heightInitialized||L.calcHeight(!0)}),m.forEach(L=>{L.heightInitialized||L.setCellHeight()}),m.forEach(L=>{a=L.getHeight(),Cthis.vDomWindowBuffer&&(this.vDomWindowBuffer=a*2),C++}),X=this.table.rowManager.adjustTableSize(),k=this.elementVertical.clientHeight,X&&(y||this.table.options.maxHeight)&&(P=o/C,T=Math.max(this.vDomWindowMinTotalRows,Math.ceil(k/P+this.vDomWindowBuffer/P)))}e?(this.vDomTopPad=t?this.vDomRowHeight*this.vDomTop+i:this.scrollTop-d,this.vDomBottomPad=this.vDomBottom==f-1?0:Math.max(this.vDomScrollHeight-this.vDomTopPad-o-d,0)):(this.vDomTopPad=0,this.vDomRowHeight=Math.floor((o+d)/C),this.vDomBottomPad=this.vDomRowHeight*(f-this.vDomBottom-1),this.vDomScrollHeight=d+o+this.vDomBottomPad-k),s.style.paddingTop=this.vDomTopPad+"px",s.style.paddingBottom=this.vDomBottomPad+"px",t&&(this.scrollTop=this.vDomTopPad+d+i-(this.elementVertical.scrollWidth>this.elementVertical.clientWidth?this.elementVertical.offsetHeight-k:0)),this.scrollTop=Math.min(this.scrollTop,this.elementVertical.scrollHeight-k),this.elementVertical.scrollWidth>this.elementVertical.clientWidth&&t&&(this.scrollTop+=this.elementVertical.offsetHeight-k),this.vDomScrollPosTop=this.scrollTop,this.vDomScrollPosBottom=this.scrollTop,n.scrollTop=this.scrollTop,this.dispatch("render-virtual-fill")}}_addTopRow(e,t){for(var i=this.tableElement,s=[],n=0,r=this.vDomTop-1,o=0,a=!0;a;)if(this.vDomTop){let h=e[r],d,u;h&&o=d?(this.styleRow(h,r),i.insertBefore(h.getElement(),i.firstChild),(!h.initialized||!h.heightInitialized)&&s.push(h),h.initialize(),u||(d=h.getElement().offsetHeight,d>this.vDomWindowBuffer&&(this.vDomWindowBuffer=d*2)),t-=d,n+=d,this.vDomTop--,r--,o++):a=!1):a=!1}else a=!1;for(let h of s)h.clearCellHeight();this._quickNormalizeRowHeight(s),n&&(this.vDomTopPad-=n,this.vDomTopPad<0&&(this.vDomTopPad=r*this.vDomRowHeight),r<1&&(this.vDomTopPad=0),i.style.paddingTop=this.vDomTopPad+"px",this.vDomScrollPosTop-=n)}_removeTopRow(e,t){for(var i=[],s=0,n=0,r=!0;r;){let o=e[this.vDomTop],a;o&&n=a?(this.vDomTop++,t-=a,s+=a,i.push(o),n++):r=!1):r=!1}for(let o of i){let a=o.getElement();a.parentNode&&a.parentNode.removeChild(a)}s&&(this.vDomTopPad+=s,this.tableElement.style.paddingTop=this.vDomTopPad+"px",this.vDomScrollPosTop+=this.vDomTop?s:s+this.vDomWindowBuffer)}_addBottomRow(e,t){for(var i=this.tableElement,s=[],n=0,r=this.vDomBottom+1,o=0,a=!0;a;){let h=e[r],d,u;h&&o=d?(this.styleRow(h,r),i.appendChild(h.getElement()),(!h.initialized||!h.heightInitialized)&&s.push(h),h.initialize(),u||(d=h.getElement().offsetHeight,d>this.vDomWindowBuffer&&(this.vDomWindowBuffer=d*2)),t-=d,n+=d,this.vDomBottom++,r++,o++):a=!1):a=!1}for(let h of s)h.clearCellHeight();this._quickNormalizeRowHeight(s),n&&(this.vDomBottomPad-=n,(this.vDomBottomPad<0||r==e.length-1)&&(this.vDomBottomPad=0),i.style.paddingBottom=this.vDomBottomPad+"px",this.vDomScrollPosBottom+=n)}_removeBottomRow(e,t){for(var i=[],s=0,n=0,r=!0;r;){let o=e[this.vDomBottom],a;o&&n=a?(this.vDomBottom--,t-=a,s+=a,i.push(o),n++):r=!1):r=!1}for(let o of i){let a=o.getElement();a.parentNode&&a.parentNode.removeChild(a)}s&&(this.vDomBottomPad+=s,this.vDomBottomPad<0&&(this.vDomBottomPad=0),this.tableElement.style.paddingBottom=this.vDomBottomPad+"px",this.vDomScrollPosBottom-=s)}_quickNormalizeRowHeight(e){for(let t of e)t.calcHeight();for(let t of e)t.setCellHeight()}}class Ts extends M{constructor(e){super(e),this.element=this.createHolderElement(),this.tableElement=this.createTableElement(),this.heightFixer=this.createTableElement(),this.placeholder=null,this.placeholderContents=null,this.firstRender=!1,this.renderMode="virtual",this.fixedHeight=!1,this.rows=[],this.activeRowsPipeline=[],this.activeRows=[],this.activeRowsCount=0,this.displayRows=[],this.displayRowsCount=0,this.scrollTop=0,this.scrollLeft=0,this.redrawBlock=!1,this.redrawBlockRestoreConfig=!1,this.redrawBlockRenderInPosition=!1,this.dataPipeline=[],this.displayPipeline=[],this.scrollbarWidth=0,this.renderer=null}createHolderElement(){var e=document.createElement("div");return e.classList.add("tabulator-tableholder"),e.setAttribute("tabindex",0),e}createTableElement(){var e=document.createElement("div");return e.classList.add("tabulator-table"),e.setAttribute("role","rowgroup"),e}initializePlaceholder(){var e=this.table.options.placeholder;if(typeof e=="function"&&(e=e.call(this.table)),e=this.chain("placeholder",[e],e,e)||e,e){let t=document.createElement("div");if(t.classList.add("tabulator-placeholder"),typeof e=="string"){let i=document.createElement("div");i.classList.add("tabulator-placeholder-contents"),i.innerHTML=e,t.appendChild(i),this.placeholderContents=i}else typeof HTMLElement<"u"&&e instanceof HTMLElement?(t.appendChild(e),this.placeholderContents=e):(console.warn("Invalid placeholder provided, must be string or HTML Element",e),this.el=null);this.placeholder=t}}getElement(){return this.element}getTableElement(){return this.tableElement}initialize(){this.initializePlaceholder(),this.initializeRenderer(),this.element.appendChild(this.tableElement),this.firstRender=!0,this.element.addEventListener("scroll",()=>{var e=this.element.scrollLeft,t=this.scrollLeft>e,i=this.element.scrollTop,s=this.scrollTop>i;this.scrollLeft!=e&&(this.scrollLeft=e,this.dispatch("scroll-horizontal",e,t),this.dispatchExternal("scrollHorizontal",e,t),this._positionPlaceholder()),this.scrollTop!=i&&(this.scrollTop=i,this.renderer.scrollRows(i,s),this.dispatch("scroll-vertical",i,s),this.dispatchExternal("scrollVertical",i,s))})}findRow(e){if(typeof e=="object"){if(e instanceof S)return e;if(e instanceof oe)return e._getSelf()||!1;if(typeof HTMLElement<"u"&&e instanceof HTMLElement)return this.rows.find(i=>i.getElement()===e)||!1;if(e===null)return!1}else return typeof e>"u"?!1:this.rows.find(i=>i.data[this.table.options.index]==e)||!1;return!1}getRowFromDataObject(e){var t=this.rows.find(i=>i.data===e);return t||!1}getRowFromPosition(e){return this.getDisplayRows().find(t=>t.type==="row"&&t.getPosition()===e&&t.isDisplayed())}scrollToRow(e,t,i){return this.renderer.scrollToRowPosition(e,t,i)}setData(e,t,i){return new Promise((s,n)=>{t&&this.getDisplayRows().length?this.table.options.pagination?this._setDataActual(e,!0):this.reRenderInPosition(()=>{this._setDataActual(e)}):(this.table.options.autoColumns&&i&&this.table.initialized&&this.table.columnManager.generateColumnsFromRowData(e),this.resetScroll(),this._setDataActual(e)),s()})}_setDataActual(e,t){this.dispatchExternal("dataProcessing",e),this._wipeElements(),Array.isArray(e)?(this.dispatch("data-processing",e),e.forEach((i,s)=>{if(i&&typeof i=="object"){var n=new S(i,this);this.rows.push(n)}else console.warn("Data Loading Warning - Invalid row data detected and ignored, expecting object but received:",i)}),this.refreshActiveData(!1,!1,t),this.dispatch("data-processed",e),this.dispatchExternal("dataProcessed",e)):console.error(`Data Loading Error - Unable to process data due to invalid data type +Expecting: array +Received: `,typeof e,` +Data: `,e)}_wipeElements(){this.dispatch("rows-wipe"),this.destroy(),this.adjustTableSize(),this.dispatch("rows-wiped")}destroy(){this.rows.forEach(e=>{e.wipe()}),this.rows=[],this.activeRows=[],this.activeRowsPipeline=[],this.activeRowsCount=0,this.displayRows=[],this.displayRowsCount=0}deleteRow(e,t){var i=this.rows.indexOf(e),s=this.activeRows.indexOf(e);s>-1&&this.activeRows.splice(s,1),i>-1&&this.rows.splice(i,1),this.setActiveRows(this.activeRows),this.displayRowIterator(n=>{var r=n.indexOf(e);r>-1&&n.splice(r,1)}),t||this.reRenderInPosition(),this.regenerateRowPositions(),this.dispatchExternal("rowDeleted",e.getComponent()),this.displayRowsCount||this.tableEmpty(),this.subscribedExternal("dataChanged")&&this.dispatchExternal("dataChanged",this.getData())}addRow(e,t,i,s){var n=this.addRowActual(e,t,i,s);return n}addRows(e,t,i,s){var n=[];return new Promise((r,o)=>{t=this.findAddRowPos(t),Array.isArray(e)||(e=[e]),(typeof i>"u"&&t||typeof i<"u"&&!t)&&e.reverse(),e.forEach((a,h)=>{var d=this.addRow(a,t,i,!0);n.push(d),this.dispatch("row-added",d,a,t,i)}),this.refreshActiveData(s?"displayPipeline":!1,!1,!0),this.regenerateRowPositions(),this.displayRowsCount&&this._clearPlaceholder(),r(n)})}findAddRowPos(e){return typeof e>"u"&&(e=this.table.options.addRowPos),e==="pos"&&(e=!0),e==="bottom"&&(e=!1),e}addRowActual(e,t,i,s){var n=e instanceof S?e:new S(e||{},this),r=this.findAddRowPos(t),o=-1,a,h;return i||(h=this.chain("row-adding-position",[n,r],null,{index:i,top:r}),i=h.index,r=h.top),typeof i<"u"&&(i=this.findRow(i)),i=this.chain("row-adding-index",[n,i,r],null,i),i&&(o=this.rows.indexOf(i)),i&&o>-1?(a=this.activeRows.indexOf(i),this.displayRowIterator(function(d){var u=d.indexOf(i);u>-1&&d.splice(r?u:u+1,0,n)}),a>-1&&this.activeRows.splice(r?a:a+1,0,n),this.rows.splice(r?o:o+1,0,n)):r?(this.displayRowIterator(function(d){d.unshift(n)}),this.activeRows.unshift(n),this.rows.unshift(n)):(this.displayRowIterator(function(d){d.push(n)}),this.activeRows.push(n),this.rows.push(n)),this.setActiveRows(this.activeRows),this.dispatchExternal("rowAdded",n.getComponent()),this.subscribedExternal("dataChanged")&&this.dispatchExternal("dataChanged",this.table.rowManager.getData()),s||this.reRenderInPosition(),n}moveRow(e,t,i){this.dispatch("row-move",e,t,i),this.moveRowActual(e,t,i),this.regenerateRowPositions(),this.dispatch("row-moved",e,t,i),this.dispatchExternal("rowMoved",e.getComponent())}moveRowActual(e,t,i){this.moveRowInArray(this.rows,e,t,i),this.moveRowInArray(this.activeRows,e,t,i),this.displayRowIterator(s=>{this.moveRowInArray(s,e,t,i)}),this.dispatch("row-moving",e,t,i)}moveRowInArray(e,t,i,s){var n,r,o,a;if(t!==i&&(n=e.indexOf(t),n>-1&&(e.splice(n,1),r=e.indexOf(i),r>-1?s?e.splice(r+1,0,t):e.splice(r,0,t):e.splice(n,0,t)),e===this.getDisplayRows())){o=nn?r:n+1;for(let h=o;h<=a;h++)e[h]&&this.styleRow(e[h],h)}}clearData(){this.setData([])}getRowIndex(e){return this.findRowIndex(e,this.rows)}getDisplayRowIndex(e){var t=this.getDisplayRows().indexOf(e);return t>-1?t:!1}nextDisplayRow(e,t){var i=this.getDisplayRowIndex(e),s=!1;return i!==!1&&i-1)?i:!1}getData(e,t){var i=[],s=this.getRows(e);return s.forEach(function(n){n.type=="row"&&i.push(n.getData(t||"data"))}),i}getComponents(e){var t=[],i=this.getRows(e);return i.forEach(function(s){t.push(s.getComponent())}),t}getDataCount(e){var t=this.getRows(e);return t.length}scrollHorizontal(e){this.scrollLeft=e,this.element.scrollLeft=e,this.dispatch("scroll-horizontal",e)}registerDataPipelineHandler(e,t){typeof t<"u"?(this.dataPipeline.push({handler:e,priority:t}),this.dataPipeline.sort((i,s)=>i.priority-s.priority)):console.error("Data pipeline handlers must have a priority in order to be registered")}registerDisplayPipelineHandler(e,t){typeof t<"u"?(this.displayPipeline.push({handler:e,priority:t}),this.displayPipeline.sort((i,s)=>i.priority-s.priority)):console.error("Display pipeline handlers must have a priority in order to be registered")}refreshActiveData(e,t,i){var s=this.table,n="",r=0,o=["all","dataPipeline","display","displayPipeline","end"];if(!this.table.destroyed){if(typeof e=="function")if(r=this.dataPipeline.findIndex(a=>a.handler===e),r>-1)n="dataPipeline",t&&(r==this.dataPipeline.length-1?n="display":r++);else if(r=this.displayPipeline.findIndex(a=>a.handler===e),r>-1)n="displayPipeline",t&&(r==this.displayPipeline.length-1?n="end":r++);else{console.error("Unable to refresh data, invalid handler provided",e);return}else n=e||"all",r=0;if(this.redrawBlock){(!this.redrawBlockRestoreConfig||this.redrawBlockRestoreConfig&&(this.redrawBlockRestoreConfig.stage===n&&r{i.type==="row"&&(i.setPosition(t),t++)})}setActiveRows(e){this.activeRows=this.activeRows=Object.assign([],e),this.activeRowsCount=this.activeRows.length}resetDisplayRows(){this.displayRows=[],this.displayRows.push(this.activeRows.slice(0)),this.displayRowsCount=this.displayRows[0].length}setDisplayRows(e,t){this.displayRows[t]=e,t==this.displayRows.length-1&&(this.displayRowsCount=this.displayRows[this.displayRows.length-1].length)}getDisplayRows(e){return typeof e>"u"?this.displayRows.length?this.displayRows[this.displayRows.length-1]:[]:this.displayRows[e]||[]}getVisibleRows(e,t){var i=Object.assign([],this.renderer.visibleRows(!t));return e&&(i=this.chain("rows-visible",[t],i,i)),i}displayRowIterator(e){this.activeRowsPipeline.forEach(e),this.displayRows.forEach(e),this.displayRowsCount=this.displayRows[this.displayRows.length-1].length}getRows(e){var t=[];switch(e){case"active":t=this.activeRows;break;case"display":t=this.table.rowManager.getDisplayRows();break;case"visible":t=this.getVisibleRows(!1,!0);break;default:t=this.chain("rows-retrieve",e,null,this.rows)||this.rows}return t}reRenderInPosition(e){this.redrawBlock?e?e():this.redrawBlockRenderInPosition=!0:(this.dispatchExternal("renderStarted"),this.renderer.rerenderRows(e),this.fixedHeight||this.adjustTableSize(),this.scrollBarCheck(),this.dispatchExternal("renderComplete"))}scrollBarCheck(){var e=0;this.element.scrollHeight>this.element.clientHeight&&(e=this.element.offsetWidth-this.element.clientWidth),e!==this.scrollbarWidth&&(this.scrollbarWidth=e,this.dispatch("scrollbar-vertical",e))}initializeRenderer(){var e,t={virtual:xs,basic:Rs};typeof this.table.options.renderVertical=="string"?e=t[this.table.options.renderVertical]:e=this.table.options.renderVertical,e?(this.renderMode=this.table.options.renderVertical,this.renderer=new e(this.table,this.element,this.tableElement),this.renderer.initialize(),(this.table.element.clientHeight||this.table.options.height)&&!(this.table.options.minHeight&&this.table.options.maxHeight)?this.fixedHeight=!0:this.fixedHeight=!1):console.error("Unable to find matching renderer:",this.table.options.renderVertical)}getRenderMode(){return this.renderMode}renderTable(){this.dispatchExternal("renderStarted"),this.element.scrollTop=0,this._clearTable(),this.displayRowsCount?(this.renderer.renderRows(),this.firstRender&&(this.firstRender=!1,this.fixedHeight||this.adjustTableSize(),this.layoutRefresh(!0))):this.renderEmptyScroll(),this.fixedHeight||this.adjustTableSize(),this.dispatch("table-layout"),this.displayRowsCount||this._showPlaceholder(),this.scrollBarCheck(),this.dispatchExternal("renderComplete")}renderEmptyScroll(){this.placeholder?this.tableElement.style.display="none":this.tableElement.style.minWidth=this.table.columnManager.getWidth()+"px"}_clearTable(){this._clearPlaceholder(),this.scrollTop=0,this.scrollLeft=0,this.renderer.clearRows()}tableEmpty(){this.renderEmptyScroll(),this._showPlaceholder()}checkPlaceholder(){this.displayRowsCount?this._clearPlaceholder():this.tableEmpty()}_showPlaceholder(){this.placeholder&&(this.placeholder&&this.placeholder.parentNode&&this.placeholder.parentNode.removeChild(this.placeholder),this.initializePlaceholder(),this.placeholder.setAttribute("tabulator-render-mode",this.renderMode),this.getElement().appendChild(this.placeholder),this._positionPlaceholder(),this.adjustTableSize())}_clearPlaceholder(){this.placeholder&&this.placeholder.parentNode&&this.placeholder.parentNode.removeChild(this.placeholder),this.tableElement.style.minWidth="",this.tableElement.style.display=""}_positionPlaceholder(){this.placeholder&&this.placeholder.parentNode&&(this.placeholder.style.width=this.table.columnManager.getWidth()+"px",this.placeholderContents.style.width=this.table.rowManager.element.clientWidth+"px",this.placeholderContents.style.marginLeft=this.scrollLeft+"px")}styleRow(e,t){var i=e.getElement();t%2?(i.classList.add("tabulator-row-even"),i.classList.remove("tabulator-row-odd")):(i.classList.add("tabulator-row-odd"),i.classList.remove("tabulator-row-even"))}normalizeHeight(){this.activeRows.forEach(function(e){e.normalizeHeight()})}adjustTableSize(){let e=this.element.clientHeight,t,i=!1;if(this.renderer.verticalFillMode==="fill"){let s=Math.floor(this.table.columnManager.getElement().getBoundingClientRect().height+(this.table.footerManager&&this.table.footerManager.active&&!this.table.footerManager.external?this.table.footerManager.getElement().getBoundingClientRect().height:0));if(this.fixedHeight){t=isNaN(this.table.options.minHeight)?this.table.options.minHeight:this.table.options.minHeight+"px";const n="calc(100% - "+s+"px)";this.element.style.minHeight=t||"calc(100% - "+s+"px)",this.element.style.height=n,this.element.style.maxHeight=n}else this.element.style.height="",this.element.style.height=this.table.element.clientHeight-s+"px",this.element.scrollTop=this.scrollTop;this.renderer.resize(),!this.fixedHeight&&e!=this.element.clientHeight&&(i=!0,this.subscribed("table-resize")?this.dispatch("table-resize"):this.redraw()),this.scrollBarCheck()}return this._positionPlaceholder(),i}reinitialize(){this.rows.forEach(function(e){e.reinitialize(!0)})}blockRedraw(){this.redrawBlock=!0,this.redrawBlockRestoreConfig=!1}restoreRedraw(){this.redrawBlock=!1,this.redrawBlockRestoreConfig?(this.refreshActiveData(this.redrawBlockRestoreConfig.handler,this.redrawBlockRestoreConfig.skipStage,this.redrawBlockRestoreConfig.renderInPosition),this.redrawBlockRestoreConfig=!1):this.redrawBlockRenderInPosition&&this.reRenderInPosition(),this.redrawBlockRenderInPosition=!1}redraw(e){this.adjustTableSize(),this.table.tableWidth=this.table.element.clientWidth,e?this.renderTable():(this.reRenderInPosition(),this.scrollHorizontal(this.scrollLeft))}resetScroll(){if(this.element.scrollLeft=0,this.element.scrollTop=0,this.table.browser==="ie"){var e=document.createEvent("Event");e.initEvent("scroll",!1,!0),this.element.dispatchEvent(e)}else this.element.dispatchEvent(new Event("scroll"))}}class ks extends M{constructor(e){super(e),this.active=!1,this.element=this.createElement(),this.containerElement=this.createContainerElement(),this.external=!1}initialize(){this.initializeElement()}createElement(){var e=document.createElement("div");return e.classList.add("tabulator-footer"),e}createContainerElement(){var e=document.createElement("div");return e.classList.add("tabulator-footer-contents"),this.element.appendChild(e),e}initializeElement(){if(this.table.options.footerElement)switch(typeof this.table.options.footerElement){case"string":this.table.options.footerElement[0]==="<"?this.containerElement.innerHTML=this.table.options.footerElement:(this.external=!0,this.containerElement=document.querySelector(this.table.options.footerElement));break;default:this.element=this.table.options.footerElement;break}}getElement(){return this.element}append(e){this.activate(),this.containerElement.appendChild(e),this.table.rowManager.adjustTableSize()}prepend(e){this.activate(),this.element.insertBefore(e,this.element.firstChild),this.table.rowManager.adjustTableSize()}remove(e){e.parentNode.removeChild(e),this.deactivate()}deactivate(e){(!this.element.firstChild||e)&&(this.external||this.element.parentNode.removeChild(this.element),this.active=!1)}activate(){this.active||(this.active=!0,this.external||(this.table.element.appendChild(this.getElement()),this.table.element.style.display=""))}redraw(){this.dispatch("footer-redraw")}}class Ms extends M{constructor(e){super(e),this.el=null,this.abortClasses=["tabulator-headers","tabulator-table"],this.previousTargets={},this.listeners=["click","dblclick","contextmenu","mouseenter","mouseleave","mouseover","mouseout","mousemove","mouseup","mousedown","touchstart","touchend"],this.componentMap={"tabulator-cell":"cell","tabulator-row":"row","tabulator-group":"group","tabulator-col":"column"},this.pseudoTrackers={row:{subscriber:null,target:null},cell:{subscriber:null,target:null},group:{subscriber:null,target:null},column:{subscriber:null,target:null}},this.pseudoTracking=!1}initialize(){this.el=this.table.element,this.buildListenerMap(),this.bindSubscriptionWatchers()}buildListenerMap(){var e={};this.listeners.forEach(t=>{e[t]={handler:null,components:[]}}),this.listeners=e}bindPseudoEvents(){Object.keys(this.pseudoTrackers).forEach(e=>{this.pseudoTrackers[e].subscriber=this.pseudoMouseEnter.bind(this,e),this.subscribe(e+"-mouseover",this.pseudoTrackers[e].subscriber)}),this.pseudoTracking=!0}pseudoMouseEnter(e,t,i){this.pseudoTrackers[e].target!==i&&(this.pseudoTrackers[e].target&&this.dispatch(e+"-mouseleave",t,this.pseudoTrackers[e].target),this.pseudoMouseLeave(e,t),this.pseudoTrackers[e].target=i,this.dispatch(e+"-mouseenter",t,i))}pseudoMouseLeave(e,t){var i=Object.keys(this.pseudoTrackers),s={row:["cell"],cell:["row"]};i=i.filter(n=>{var r=s[e];return n!==e&&(!r||r&&!r.includes(n))}),i.forEach(n=>{var r=this.pseudoTrackers[n].target;this.pseudoTrackers[n].target&&(this.dispatch(n+"-mouseleave",t,r),this.pseudoTrackers[n].target=null)})}bindSubscriptionWatchers(){var e=Object.keys(this.listeners),t=Object.values(this.componentMap);for(let i of t)for(let s of e){let n=i+"-"+s;this.subscriptionChange(n,this.subscriptionChanged.bind(this,i,s))}this.subscribe("table-destroy",this.clearWatchers.bind(this))}subscriptionChanged(e,t,i){var s=this.listeners[t].components,n=s.indexOf(e),r=!1;i?n===-1&&(s.push(e),r=!0):this.subscribed(e+"-"+t)||n>-1&&(s.splice(n,1),r=!0),(t==="mouseenter"||t==="mouseleave")&&!this.pseudoTracking&&this.bindPseudoEvents(),r&&this.updateEventListeners()}updateEventListeners(){for(let e in this.listeners){let t=this.listeners[e];t.components.length?t.handler||(t.handler=this.track.bind(this,e),this.el.addEventListener(e,t.handler)):t.handler&&(this.el.removeEventListener(e,t.handler),t.handler=null)}}track(e,t){var i=t.composedPath&&t.composedPath()||t.path,s=this.findTargets(i);s=this.bindComponents(e,s),this.triggerEvents(e,t,s),this.pseudoTracking&&(e=="mouseover"||e=="mouseleave")&&!Object.keys(s).length&&this.pseudoMouseLeave("none",t)}findTargets(e){var t={};let i=Object.keys(this.componentMap);for(let s of e){let n=s.classList?[...s.classList]:[];if(n.filter(a=>this.abortClasses.includes(a)).length)break;let o=n.filter(a=>i.includes(a));for(let a of o)t[this.componentMap[a]]||(t[this.componentMap[a]]=s)}return t.group&&t.group===t.row&&delete t.row,t}bindComponents(e,t){var i=Object.keys(t).reverse(),s=this.listeners[e],n={},r={};for(let o of i){let a,h=t[o],d=this.previousTargets[o];if(d&&d.target===h)a=d.component;else switch(o){case"row":case"group":(s.components.includes("row")||s.components.includes("cell")||s.components.includes("group"))&&(a=this.table.rowManager.getVisibleRows(!0).find(c=>c.getElement()===h),t.row&&t.row.parentNode&&t.row.parentNode.closest(".tabulator-row")&&(t[o]=!1));break;case"column":s.components.includes("column")&&(a=this.table.columnManager.findColumn(h));break;case"cell":s.components.includes("cell")&&(n.row instanceof S?a=n.row.findCell(h):t.row&&console.warn("Event Target Lookup Error - The row this cell is attached to cannot be found, has the table been reinitialized without being destroyed first?"));break}a&&(n[o]=a,r[o]={target:h,component:a})}return this.previousTargets=r,n}triggerEvents(e,t,i){var s=this.listeners[e];for(let n in i)i[n]&&s.components.includes(n)&&this.dispatch(n+"-"+e,t,i[n])}clearWatchers(){for(let e in this.listeners){let t=this.listeners[e];t.handler&&(this.el.removeEventListener(e,t.handler),t.handler=null)}}}class Ls{constructor(e){this.table=e,this.bindings={}}bind(e,t,i){this.bindings[e]||(this.bindings[e]={}),this.bindings[e][t]?console.warn("Unable to bind component handler, a matching function name is already bound",e,t,i):this.bindings[e][t]=i}handle(e,t,i){if(this.bindings[e]&&this.bindings[e][i]&&typeof this.bindings[e][i].bind=="function")return this.bindings[e][i].bind(null,t);i!=="then"&&typeof i=="string"&&!i.startsWith("_")&&this.table.options.debugInvalidComponentFuncs&&console.error("The "+e+" component does not have a "+i+" function, have you checked that you have the correct Tabulator module installed?")}}class Ss extends M{constructor(e){super(e),this.requestOrder=0,this.loading=!1}initialize(){}load(e,t,i,s,n,r){var o=++this.requestOrder;if(this.table.destroyed)return Promise.resolve();if(this.dispatchExternal("dataLoading",e),e&&(e.indexOf("{")==0||e.indexOf("[")==0)&&(e=JSON.parse(e)),this.confirm("data-loading",[e,t,i,n])){this.loading=!0,n||this.alertLoader(),t=this.chain("data-params",[e,i,n],t||{},t||{}),t=this.mapParams(t,this.table.options.dataSendParams);var a=this.chain("data-load",[e,t,i,n],!1,Promise.resolve([]));return a.then(h=>{if(this.table.destroyed)console.warn("Data Load Response Blocked - Table has been destroyed");else{!Array.isArray(h)&&typeof h=="object"&&(h=this.mapParams(h,this.objectInvert(this.table.options.dataReceiveParams)));var d=this.chain("data-loaded",[h],null,h);o==this.requestOrder?(this.clearAlert(),d!==!1&&(this.dispatchExternal("dataLoaded",d),this.table.rowManager.setData(d,s,typeof r>"u"?!s:r))):console.warn("Data Load Response Blocked - An active data load request was blocked by an attempt to change table data while the request was being made")}}).catch(h=>{console.error("Data Load Error: ",h),this.dispatchExternal("dataLoadError",h),n||this.alertError(),setTimeout(()=>{this.clearAlert()},this.table.options.dataLoaderErrorTimeout)}).finally(()=>{this.loading=!1})}else return this.dispatchExternal("dataLoaded",e),e||(e=[]),this.table.rowManager.setData(e,s,typeof r>"u"?!s:r),Promise.resolve()}mapParams(e,t){var i={};for(let s in e)i[t.hasOwnProperty(s)?t[s]:s]=e[s];return i}objectInvert(e){var t={};for(let i in e)t[e[i]]=i;return t}blockActiveLoad(){this.requestOrder++}alertLoader(){var e=typeof this.table.options.dataLoader=="function"?this.table.options.dataLoader():this.table.options.dataLoader;e&&this.table.alertManager.alert(this.table.options.dataLoaderLoading||this.langText("data|loading"))}alertError(){this.table.alertManager.alert(this.table.options.dataLoaderError||this.langText("data|error"),"error")}clearAlert(){this.table.alertManager.clear()}}class Ds{constructor(e,t,i){this.table=e,this.events={},this.optionsList=t||{},this.subscriptionNotifiers={},this.dispatch=i?this._debugDispatch.bind(this):this._dispatch.bind(this),this.debug=i}subscriptionChange(e,t){this.subscriptionNotifiers[e]||(this.subscriptionNotifiers[e]=[]),this.subscriptionNotifiers[e].push(t),this.subscribed(e)&&this._notifySubscriptionChange(e,!0)}subscribe(e,t){this.events[e]||(this.events[e]=[]),this.events[e].push(t),this._notifySubscriptionChange(e,!0)}unsubscribe(e,t){var i;if(this.events[e])if(t)if(i=this.events[e].findIndex(s=>s===t),i>-1)this.events[e].splice(i,1);else{console.warn("Cannot remove event, no matching event found:",e,t);return}else delete this.events[e];else{console.warn("Cannot remove event, no events set on:",e);return}this._notifySubscriptionChange(e,!1)}subscribed(e){return this.events[e]&&this.events[e].length}_notifySubscriptionChange(e,t){var i=this.subscriptionNotifiers[e];i&&i.forEach(s=>{s(t)})}_dispatch(){var e=Array.from(arguments),t=e.shift(),i;return this.events[t]&&this.events[t].forEach((s,n)=>{let r=s.apply(this.table,e);n||(i=r)}),i}_debugDispatch(){var e=Array.from(arguments),t=e[0];return e[0]="ExternalEvent:"+e[0],(this.debug===!0||this.debug.includes(t))&&console.log(...e),this._dispatch(...arguments)}}class zs{constructor(e){this.events={},this.subscriptionNotifiers={},this.dispatch=e?this._debugDispatch.bind(this):this._dispatch.bind(this),this.chain=e?this._debugChain.bind(this):this._chain.bind(this),this.confirm=e?this._debugConfirm.bind(this):this._confirm.bind(this),this.debug=e}subscriptionChange(e,t){this.subscriptionNotifiers[e]||(this.subscriptionNotifiers[e]=[]),this.subscriptionNotifiers[e].push(t),this.subscribed(e)&&this._notifySubscriptionChange(e,!0)}subscribe(e,t,i=1e4){this.events[e]||(this.events[e]=[]),this.events[e].push({callback:t,priority:i}),this.events[e].sort((s,n)=>s.priority-n.priority),this._notifySubscriptionChange(e,!0)}unsubscribe(e,t){var i;if(this.events[e]){if(t)if(i=this.events[e].findIndex(s=>s.callback===t),i>-1)this.events[e].splice(i,1);else{console.warn("Cannot remove event, no matching event found:",e,t);return}}else{console.warn("Cannot remove event, no events set on:",e);return}this._notifySubscriptionChange(e,!1)}subscribed(e){return this.events[e]&&this.events[e].length}_chain(e,t,i,s){var n=i;return Array.isArray(t)||(t=[t]),this.subscribed(e)?(this.events[e].forEach((r,o)=>{n=r.callback.apply(this,t.concat([n]))}),n):typeof s=="function"?s():s}_confirm(e,t){var i=!1;return Array.isArray(t)||(t=[t]),this.subscribed(e)&&this.events[e].forEach((s,n)=>{s.callback.apply(this,t)&&(i=!0)}),i}_notifySubscriptionChange(e,t){var i=this.subscriptionNotifiers[e];i&&i.forEach(s=>{s(t)})}_dispatch(){var e=Array.from(arguments),t=e.shift();this.events[t]&&this.events[t].forEach(i=>{i.callback.apply(this,e)})}_debugDispatch(){var e=Array.from(arguments),t=e[0];return e[0]="InternalEvent:"+t,(this.debug===!0||this.debug.includes(t))&&console.log(...e),this._dispatch(...arguments)}_debugChain(){var e=Array.from(arguments),t=e[0];return e[0]="InternalEvent:"+t,(this.debug===!0||this.debug.includes(t))&&console.log(...e),this._chain(...arguments)}_debugConfirm(){var e=Array.from(arguments),t=e[0];return e[0]="InternalEvent:"+t,(this.debug===!0||this.debug.includes(t))&&console.log(...e),this._confirm(...arguments)}}class Hs extends M{constructor(e){super(e)}_warnUser(){this.options("debugDeprecation")&&console.warn(...arguments)}check(e,t,i){var s="";return typeof this.options(e)<"u"?(s="Deprecated Setup Option - Use of the %c"+e+"%c option is now deprecated",t?(s=s+", Please use the %c"+t+"%c option instead",this._warnUser(s,"font-weight: bold;","font-weight: normal;","font-weight: bold;","font-weight: normal;"),i&&(this.table.options[t]=this.table.options[e])):this._warnUser(s,"font-weight: bold;","font-weight: normal;"),!1):!0}checkMsg(e,t){return typeof this.options(e)<"u"?(this._warnUser("%cDeprecated Setup Option - Use of the %c"+e+" %c option is now deprecated, "+t,"font-weight: normal;","font-weight: bold;","font-weight: normal;"),!1):!0}msg(e){this._warnUser(e)}}function Fs(l,e){e&&this.table.columnManager.renderer.reinitializeColumnWidths(l),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update()}function Je(l,e){l.forEach(function(t){t.reinitializeWidth()}),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update()}function Ps(l,e){var t=0,i=this.table.rowManager.element.clientWidth,s=0,n=!1;l.forEach((r,o)=>{r.widthFixed||r.reinitializeWidth(),(this.table.options.responsiveLayout?r.modules.responsive.visible:r.visible)&&(n=r),r.visible&&(t+=r.getWidth())}),n?(s=i-t+n.getWidth(),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&(n.setWidth(0),this.table.modules.responsiveLayout.update()),s>0?n.setWidth(s):n.reinitializeWidth()):this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update()}function Os(l,e){var t=this.table.rowManager.element.getBoundingClientRect().width,i=0,s=0,n=0,r=0,o=[],a=[],h=0,d=0,u=0;function c(g){var p;return typeof g=="string"?g.indexOf("%")>-1?p=t/100*parseInt(g):p=parseInt(g):p=g,p}function f(g,p,v,m){var C=[],T=0,y=0,k=0,P=n,X=0,L=0,he=[];function Ie(E){return v*(E.column.definition.widthGrow||1)}function Ne(E){return c(E.width)-v*(E.column.definition.widthShrink||0)}return g.forEach(function(E,Ws){var We=m?Ne(E):Ie(E);E.column.minWidth>=We?C.push(E):E.column.maxWidth&&E.column.maxWidththis.table.rowManager.element.clientHeight&&(t-=this.table.rowManager.element.offsetWidth-this.table.rowManager.element.clientWidth),l.forEach(function(g){var p,v,m;g.visible&&(p=g.definition.width,v=parseInt(g.minWidth),p?(m=c(p),i+=m>v?m:v,g.definition.widthShrink&&(a.push({column:g,width:m>v?m:v}),h+=g.definition.widthShrink)):(o.push({column:g,width:0}),n+=g.definition.widthGrow||1))}),s=t-i,r=Math.floor(s/n),u=f(o,s,r,!1),o.length&&u>0&&(o[o.length-1].width+=u),o.forEach(function(g){s-=g.width}),d=Math.abs(u)+s,d>0&&h&&(u=f(a,d,Math.floor(d/h),!0)),u&&a.length&&(a[a.length-1].width-=u),o.forEach(function(g){g.column.setWidth(g.width)}),a.forEach(function(g){g.column.setWidth(g.width)})}var As={fitData:Fs,fitDataFill:Je,fitDataTable:Je,fitDataStretch:Ps,fitColumns:Os};const $=class $ extends w{constructor(e){super(e,"layout"),this.mode=null,this.registerTableOption("layout","fitData"),this.registerTableOption("layoutColumnsOnNewData",!1),this.registerColumnOption("widthGrow"),this.registerColumnOption("widthShrink")}initialize(){var e=this.table.options.layout;$.modes[e]?this.mode=e:(console.warn("Layout Error - invalid mode set, defaulting to 'fitData' : "+e),this.mode="fitData"),this.table.element.setAttribute("tabulator-layout",this.mode),this.subscribe("column-init",this.initializeColumn.bind(this))}initializeColumn(e){e.definition.widthGrow&&(e.definition.widthGrow=Number(e.definition.widthGrow)),e.definition.widthShrink&&(e.definition.widthShrink=Number(e.definition.widthShrink))}getMode(){return this.mode}layout(e){this.dispatch("layout-refreshing"),$.modes[this.mode].call(this,this.table.columnManager.columnsByIndex,e),this.dispatch("layout-refreshed")}};b($,"moduleName","layout"),b($,"modes",As);let Pe=$;var _s={default:{groups:{item:"item",items:"items"},columns:{},data:{loading:"Loading",error:"Error"},pagination:{page_size:"Page Size",page_title:"Show Page",first:"First",first_title:"First Page",last:"Last",last_title:"Last Page",prev:"Prev",prev_title:"Prev Page",next:"Next",next_title:"Next Page",all:"All",counter:{showing:"Showing",of:"of",rows:"rows",pages:"pages"}},headerFilters:{default:"filter column...",columns:{}}}};const se=class se extends w{constructor(e){super(e),this.locale="default",this.lang=!1,this.bindings={},this.langList={},this.registerTableOption("locale",!1),this.registerTableOption("langs",{})}initialize(){this.langList=x.deepClone(se.langs),this.table.options.columnDefaults.headerFilterPlaceholder!==!1&&this.setHeaderFilterPlaceholder(this.table.options.columnDefaults.headerFilterPlaceholder);for(let e in this.table.options.langs)this.installLang(e,this.table.options.langs[e]);this.setLocale(this.table.options.locale),this.registerTableFunction("setLocale",this.setLocale.bind(this)),this.registerTableFunction("getLocale",this.getLocale.bind(this)),this.registerTableFunction("getLang",this.getLang.bind(this))}setHeaderFilterPlaceholder(e){this.langList.default.headerFilters.default=e}installLang(e,t){this.langList[e]?this._setLangProp(this.langList[e],t):this.langList[e]=t}_setLangProp(e,t){for(let i in t)e[i]&&typeof e[i]=="object"?this._setLangProp(e[i],t[i]):e[i]=t[i]}setLocale(e){e=e||"default";function t(i,s){for(var n in i)typeof i[n]=="object"?(s[n]||(s[n]={}),t(i[n],s[n])):s[n]=i[n]}if(e===!0&&navigator.language&&(e=navigator.language.toLowerCase()),e&&!this.langList[e]){let i=e.split("-")[0];this.langList[i]?(console.warn("Localization Error - Exact matching locale not found, using closest match: ",e,i),e=i):(console.warn("Localization Error - Matching locale not found, using default: ",e),e="default")}this.locale=e,this.lang=x.deepClone(this.langList.default||{}),e!="default"&&t(this.langList[e],this.lang),this.dispatchExternal("localized",this.locale,this.lang),this._executeBindings()}getLocale(e){return this.locale}getLang(e){return e?this.langList[e]:this.lang}getText(e,t){var i=t?e+"|"+t:e,s=i.split("|"),n=this._getLangElement(s,this.locale);return n||""}_getLangElement(e,t){var i=this.lang;return e.forEach(function(s){var n;i&&(n=i[s],typeof n<"u"?i=n:i=!1)}),i}bind(e,t){this.bindings[e]||(this.bindings[e]=[]),this.bindings[e].push(t),t(this.getText(e),this.lang)}_executeBindings(){for(let e in this.bindings)this.bindings[e].forEach(t=>{t(this.getText(e),this.lang)})}};b(se,"moduleName","localize"),b(se,"langs",_s);let Oe=se;class bt extends w{constructor(e){super(e)}initialize(){this.registerTableFunction("tableComms",this.receive.bind(this))}getConnections(e){var t=[],i;return i=this.table.constructor.registry.lookupTable(e),i.forEach(s=>{this.table!==s&&t.push(s)}),t}send(e,t,i,s){var n=this.getConnections(e);n.forEach(r=>{r.tableComms(this.table.element,t,i,s)}),!n.length&&e&&console.warn("Table Connection Error - No tables matching selector found",e)}receive(e,t,i,s){if(this.table.modExists(t))return this.table.modules[t].commsReceived(e,i,s);console.warn("Inter-table Comms Error - no such module:",t)}}b(bt,"moduleName","comms");var Bs=Object.freeze({__proto__:null,CommsModule:bt,LayoutModule:Pe,LocalizeModule:Oe});const z=class z{static findTable(e){var t=z.registry.lookupTable(e,!0);return Array.isArray(t)&&!t.length?!1:t}};b(z,"registry",{tables:[],register(e){z.registry.tables.push(e)},deregister(e){var t=z.registry.tables.indexOf(e);t>-1&&z.registry.tables.splice(t,1)},lookupTable(e,t){var i=[],s,n;if(typeof e=="string"){if(s=document.querySelectorAll(e),s.length)for(var r=0;r{s.prototype.moduleCore=!0}),R._registerModule(i)}static _registerModule(e){Array.isArray(e)||(e=[e]),e.forEach(t=>{R._registerModuleBinding(t),R._registerModuleExtensions(t)})}static _registerModuleBinding(e){e.moduleName?R.moduleBindings[e.moduleName]=e:console.error("Unable to bind module, no moduleName defined",e.moduleName)}static _registerModuleExtensions(e){var t=e.moduleExtensions;if(e.moduleExtensions)for(let i in t){let s=t[i];if(R.moduleBindings[i])for(let n in s)R._extendModule(i,n,s[n]);else{R.moduleExtensions[i]||(R.moduleExtensions[i]={});for(let n in s)R.moduleExtensions[i][n]||(R.moduleExtensions[i][n]={}),Object.assign(R.moduleExtensions[i][n],s[n])}}R._extendModuleFromQueue(e)}static _extendModuleFromQueue(e){var t=R.moduleExtensions[e.moduleName];if(t)for(let i in t)R._extendModule(e.moduleName,i,t[i])}_bindModules(){var e=[],t=[],i=[];this.modules={};for(var s in R.moduleBindings){let n=R.moduleBindings[s],r=new n(this);this.modules[s]=r,n.prototype.moduleCore?this.modulesCore.push(r):n.moduleInitOrder?n.moduleInitOrder<0?e.push(r):t.push(r):i.push(r)}e.sort((n,r)=>n.moduleInitOrder>r.moduleInitOrder?1:-1),t.sort((n,r)=>n.moduleInitOrder>r.moduleInitOrder?1:-1),this.modulesRegular=e.concat(i.concat(t))}};b(R,"moduleBindings",{}),b(R,"moduleExtensions",{}),b(R,"modulesRegistered",!1),b(R,"defaultModules",!1);let _e=R;class Vs extends M{constructor(e){super(e),this.element=this._createAlertElement(),this.msgElement=this._createMsgElement(),this.type=null,this.element.appendChild(this.msgElement)}_createAlertElement(){var e=document.createElement("div");return e.classList.add("tabulator-alert"),e}_createMsgElement(){var e=document.createElement("div");return e.classList.add("tabulator-alert-msg"),e.setAttribute("role","alert"),e}_typeClass(){return"tabulator-alert-state-"+this.type}alert(e,t="msg"){if(e){for(this.clear(),this.dispatch("alert-show",t),this.type=t;this.msgElement.firstChild;)this.msgElement.removeChild(this.msgElement.firstChild);this.msgElement.classList.add(this._typeClass()),typeof e=="function"&&(e=e()),e instanceof HTMLElement?this.msgElement.appendChild(e):this.msgElement.innerHTML=e,this.table.element.appendChild(this.element)}}clear(){this.dispatch("alert-hide",this.type),this.element.parentNode&&this.element.parentNode.removeChild(this.element),this.msgElement.classList.remove(this._typeClass())}}const A=class A extends _e{static extendModule(){A.initializeModuleBinder(),A._extendModule(...arguments)}static registerModule(){A.initializeModuleBinder(),A._registerModule(...arguments)}constructor(e,t,i){super(),A.initializeModuleBinder(i),this.options={},this.columnManager=null,this.rowManager=null,this.footerManager=null,this.alertManager=null,this.vdomHoz=null,this.externalEvents=null,this.eventBus=null,this.interactionMonitor=!1,this.browser="",this.browserSlow=!1,this.browserMobile=!1,this.rtl=!1,this.originalElement=null,this.componentFunctionBinder=new Ls(this),this.dataLoader=!1,this.modules={},this.modulesCore=[],this.modulesRegular=[],this.deprecationAdvisor=new Hs(this),this.optionsList=new gt(this,"table constructor"),this.initialized=!1,this.destroyed=!1,this.initializeElement(e)&&(this.initializeCoreSystems(t),setTimeout(()=>{this._create()})),this.constructor.registry.register(this)}initializeElement(e){return typeof HTMLElement<"u"&&e instanceof HTMLElement?(this.element=e,!0):typeof e=="string"?(this.element=document.querySelector(e),this.element?!0:(console.error("Tabulator Creation Error - no element found matching selector: ",e),!1)):(console.error("Tabulator Creation Error - Invalid element provided:",e),!1)}initializeCoreSystems(e){this.columnManager=new ys(this),this.rowManager=new Ts(this),this.footerManager=new ks(this),this.dataLoader=new Ss(this),this.alertManager=new Vs(this),this._bindModules(),this.options=this.optionsList.generate(A.defaultOptions,e),this._clearObjectPointers(),this._mapDeprecatedFunctionality(),this.externalEvents=new Ds(this,this.options,this.options.debugEventsExternal),this.eventBus=new zs(this.options.debugEventsInternal),this.interactionMonitor=new Ms(this),this.dataLoader.initialize(),this.footerManager.initialize()}_mapDeprecatedFunctionality(){}_clearSelection(){this.element.classList.add("tabulator-block-select"),window.getSelection?window.getSelection().empty?window.getSelection().empty():window.getSelection().removeAllRanges&&window.getSelection().removeAllRanges():document.selection&&document.selection.empty(),this.element.classList.remove("tabulator-block-select")}_create(){this.externalEvents.dispatch("tableBuilding"),this.eventBus.dispatch("table-building"),this._rtlCheck(),this._buildElement(),this._initializeTable(),this.initialized=!0,this._loadInitialData().finally(()=>{this.eventBus.dispatch("table-initialized"),this.externalEvents.dispatch("tableBuilt")})}_rtlCheck(){var e=window.getComputedStyle(this.element);switch(this.options.textDirection){case"auto":if(e.direction!=="rtl")break;case"rtl":this.element.classList.add("tabulator-rtl"),this.rtl=!0;break;case"ltr":this.element.classList.add("tabulator-ltr");default:this.rtl=!1}}_clearObjectPointers(){this.options.columns=this.options.columns.slice(0),Array.isArray(this.options.data)&&!this.options.reactiveData&&(this.options.data=this.options.data.slice(0))}_buildElement(){var e=this.element,t=this.options,i;if(e.tagName==="TABLE"){this.originalElement=this.element,i=document.createElement("div");var s=e.attributes;for(var n in s)typeof s[n]=="object"&&i.setAttribute(s[n].name,s[n].value);e.parentNode.replaceChild(i,e),this.element=e=i}for(e.classList.add("tabulator"),e.setAttribute("role","grid");e.firstChild;)e.removeChild(e.firstChild);t.height&&(t.height=isNaN(t.height)?t.height:t.height+"px",e.style.height=t.height),t.minHeight!==!1&&(t.minHeight=isNaN(t.minHeight)?t.minHeight:t.minHeight+"px",e.style.minHeight=t.minHeight),t.maxHeight!==!1&&(t.maxHeight=isNaN(t.maxHeight)?t.maxHeight:t.maxHeight+"px",e.style.maxHeight=t.maxHeight)}_initializeTable(){var e=this.element,t=this.options;this.interactionMonitor.initialize(),this.columnManager.initialize(),this.rowManager.initialize(),this._detectBrowser(),this.modulesCore.forEach(i=>{i.initialize()}),e.appendChild(this.columnManager.getElement()),e.appendChild(this.rowManager.getElement()),t.footerElement&&this.footerManager.activate(),t.autoColumns&&t.data&&this.columnManager.generateColumnsFromRowData(this.options.data),this.modulesRegular.forEach(i=>{i.initialize()}),this.columnManager.setColumns(t.columns),this.eventBus.dispatch("table-built")}_loadInitialData(){return this.dataLoader.load(this.options.data).finally(()=>{this.columnManager.verticalAlignHeaders()})}destroy(){var e=this.element;for(this.destroyed=!0,this.constructor.registry.deregister(this),this.eventBus.dispatch("table-destroy"),this.rowManager.destroy();e.firstChild;)e.removeChild(e.firstChild);e.classList.remove("tabulator"),this.externalEvents.dispatch("tableDestroyed")}_detectBrowser(){var e=navigator.userAgent||navigator.vendor||window.opera;e.indexOf("Trident")>-1?(this.browser="ie",this.browserSlow=!0):e.indexOf("Edge")>-1?(this.browser="edge",this.browserSlow=!0):e.indexOf("Firefox")>-1?(this.browser="firefox",this.browserSlow=!1):e.indexOf("Mac OS")>-1?(this.browser="safari",this.browserSlow=!1):(this.browser="other",this.browserSlow=!1),this.browserMobile=/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(e)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw-(n|u)|c55\/|capi|ccwa|cdm-|cell|chtm|cldc|cmd-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc-s|devi|dica|dmob|do(c|p)o|ds(12|-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(-|_)|g1 u|g560|gene|gf-5|g-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd-(m|p|t)|hei-|hi(pt|ta)|hp( i|ip)|hs-c|ht(c(-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i-(20|go|ma)|i230|iac( |-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|-[a-w])|libw|lynx|m1-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|-([1-8]|c))|phil|pire|pl(ay|uc)|pn-2|po(ck|rt|se)|prox|psio|pt-g|qa-a|qc(07|12|21|32|60|-[2-7]|i-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h-|oo|p-)|sdk\/|se(c(-|0|1)|47|mc|nd|ri)|sgh-|shar|sie(-|m)|sk-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h-|v-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl-|tdg-|tel(i|m)|tim-|t-mo|to(pl|sh)|ts(70|m-|m3|m5)|tx-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas-|your|zeto|zte-/i.test(e.slice(0,4))}initGuard(e,t){var i,s;return this.options.debugInitialization&&!this.initialized&&(e||(i=new Error().stack.split(` +`),s=i[0]=="Error"?i[2]:i[1],s[0]==" "?e=s.trim().split(" ")[1].split(".")[1]:e=s.trim().split("@")[0]),console.warn("Table Not Initialized - Calling the "+e+" function before the table is initialized may result in inconsistent behavior, Please wait for the `tableBuilt` event before calling this function."+(t?" "+t:""))),this.initialized}blockRedraw(){this.initGuard(),this.eventBus.dispatch("redraw-blocking"),this.rowManager.blockRedraw(),this.columnManager.blockRedraw(),this.eventBus.dispatch("redraw-blocked")}restoreRedraw(){this.initGuard(),this.eventBus.dispatch("redraw-restoring"),this.rowManager.restoreRedraw(),this.columnManager.restoreRedraw(),this.eventBus.dispatch("redraw-restored")}setData(e,t,i){return this.initGuard(!1,"To set initial data please use the 'data' property in the table constructor."),this.dataLoader.load(e,t,i,!1)}clearData(){this.initGuard(),this.dataLoader.blockActiveLoad(),this.rowManager.clearData()}getData(e){return this.rowManager.getData(e)}getDataCount(e){return this.rowManager.getDataCount(e)}replaceData(e,t,i){return this.initGuard(),this.dataLoader.load(e,t,i,!0,!0)}updateData(e){var t=0;return this.initGuard(),new Promise((i,s)=>{this.dataLoader.blockActiveLoad(),typeof e=="string"&&(e=JSON.parse(e)),e&&e.length>0?e.forEach(n=>{var r=this.rowManager.findRow(n[this.options.index]);r?(t++,r.updateData(n).then(()=>{t--,t||i()}).catch(o=>{s("Update Error - Unable to update row",n,o)})):s("Update Error - Unable to find row",n)}):(console.warn("Update Error - No data provided"),s("Update Error - No data provided"))})}addData(e,t,i){return this.initGuard(),new Promise((s,n)=>{this.dataLoader.blockActiveLoad(),typeof e=="string"&&(e=JSON.parse(e)),e?this.rowManager.addRows(e,t,i).then(r=>{var o=[];r.forEach(function(a){o.push(a.getComponent())}),s(o)}):(console.warn("Update Error - No data provided"),n("Update Error - No data provided"))})}updateOrAddData(e){var t=[],i=0;return this.initGuard(),new Promise((s,n)=>{this.dataLoader.blockActiveLoad(),typeof e=="string"&&(e=JSON.parse(e)),e&&e.length>0?e.forEach(r=>{var o=this.rowManager.findRow(r[this.options.index]);i++,o?o.updateData(r).then(()=>{i--,t.push(o.getComponent()),i||s(t)}):this.rowManager.addRows(r).then(a=>{i--,t.push(a[0].getComponent()),i||s(t)})}):(console.warn("Update Error - No data provided"),n("Update Error - No data provided"))})}getRow(e){var t=this.rowManager.findRow(e);return t?t.getComponent():(console.warn("Find Error - No matching row found:",e),!1)}getRowFromPosition(e){var t=this.rowManager.getRowFromPosition(e);return t?t.getComponent():(console.warn("Find Error - No matching row found:",e),!1)}deleteRow(e){var t=[];this.initGuard(),Array.isArray(e)||(e=[e]);for(let i of e){let s=this.rowManager.findRow(i,!0);if(s)t.push(s);else return console.error("Delete Error - No matching row found:",i),Promise.reject("Delete Error - No matching row found")}return t.sort((i,s)=>this.rowManager.rows.indexOf(i)>this.rowManager.rows.indexOf(s)?1:-1),t.forEach(i=>{i.delete()}),this.rowManager.reRenderInPosition(),Promise.resolve()}addRow(e,t,i){return this.initGuard(),typeof e=="string"&&(e=JSON.parse(e)),this.rowManager.addRows(e,t,i,!0).then(s=>s[0].getComponent())}updateOrAddRow(e,t){var i=this.rowManager.findRow(e);return this.initGuard(),typeof t=="string"&&(t=JSON.parse(t)),i?i.updateData(t).then(()=>i.getComponent()):this.rowManager.addRows(t).then(s=>s[0].getComponent())}updateRow(e,t){var i=this.rowManager.findRow(e);return this.initGuard(),typeof t=="string"&&(t=JSON.parse(t)),i?i.updateData(t).then(()=>Promise.resolve(i.getComponent())):(console.warn("Update Error - No matching row found:",e),Promise.reject("Update Error - No matching row found"))}scrollToRow(e,t,i){var s=this.rowManager.findRow(e);return s?this.rowManager.scrollToRow(s,t,i):(console.warn("Scroll Error - No matching row found:",e),Promise.reject("Scroll Error - No matching row found"))}moveRow(e,t,i){var s=this.rowManager.findRow(e);this.initGuard(),s?s.moveToRow(t,i):console.warn("Move Error - No matching row found:",e)}getRows(e){return this.rowManager.getComponents(e)}getRowPosition(e){var t=this.rowManager.findRow(e);return t?t.getPosition():(console.warn("Position Error - No matching row found:",e),!1)}setColumns(e){this.initGuard(!1,"To set initial columns please use the 'columns' property in the table constructor"),this.columnManager.setColumns(e)}getColumns(e){return this.columnManager.getComponents(e)}getColumn(e){var t=this.columnManager.findColumn(e);return t?t.getComponent():(console.warn("Find Error - No matching column found:",e),!1)}getColumnDefinitions(){return this.columnManager.getDefinitionTree()}showColumn(e){var t=this.columnManager.findColumn(e);if(this.initGuard(),t)t.show();else return console.warn("Column Show Error - No matching column found:",e),!1}hideColumn(e){var t=this.columnManager.findColumn(e);if(this.initGuard(),t)t.hide();else return console.warn("Column Hide Error - No matching column found:",e),!1}toggleColumn(e){var t=this.columnManager.findColumn(e);if(this.initGuard(),t)t.visible?t.hide():t.show();else return console.warn("Column Visibility Toggle Error - No matching column found:",e),!1}addColumn(e,t,i){var s=this.columnManager.findColumn(i);return this.initGuard(),this.columnManager.addColumn(e,t,s).then(n=>n.getComponent())}deleteColumn(e){var t=this.columnManager.findColumn(e);return this.initGuard(),t?t.delete():(console.warn("Column Delete Error - No matching column found:",e),Promise.reject())}updateColumnDefinition(e,t){var i=this.columnManager.findColumn(e);return this.initGuard(),i?i.updateDefinition(t):(console.warn("Column Update Error - No matching column found:",e),Promise.reject())}moveColumn(e,t,i){var s=this.columnManager.findColumn(e),n=this.columnManager.findColumn(t);this.initGuard(),s?n?this.columnManager.moveColumn(s,n,i):console.warn("Move Error - No matching column found:",n):console.warn("Move Error - No matching column found:",e)}scrollToColumn(e,t,i){return new Promise((s,n)=>{var r=this.columnManager.findColumn(e);return r?this.columnManager.scrollToColumn(r,t,i):(console.warn("Scroll Error - No matching column found:",e),Promise.reject("Scroll Error - No matching column found"))})}redraw(e){this.initGuard(),this.columnManager.redraw(e),this.rowManager.redraw(e)}setHeight(e){this.options.height=isNaN(e)?e:e+"px",this.element.style.height=this.options.height,this.rowManager.initializeRenderer(),this.rowManager.redraw(!0)}on(e,t){this.externalEvents.subscribe(e,t)}off(e,t){this.externalEvents.unsubscribe(e,t)}dispatchEvent(){var e=Array.from(arguments);e.shift(),this.externalEvents.dispatch(...arguments)}alert(e,t){this.initGuard(),this.alertManager.alert(e,t)}clearAlert(){this.initGuard(),this.alertManager.clear()}modExists(e,t){return this.modules[e]?!0:(t&&console.error("Tabulator Module Not Installed: "+e),!1)}module(e){var t=this.modules[e];return t||console.error("Tabulator module not installed: "+e),t}};b(A,"defaultOptions",ws);let Be=A;var Q=Be;class Is extends Q{static extendModule(){Q.initializeModuleBinder(ue),Q._extendModule(...arguments)}static registerModule(){Q.initializeModuleBinder(ue),Q._registerModule(...arguments)}constructor(e,t,i){super(e,t,ue)}}var Ns=Is;const Xs=Ct({__name:"Tabulator",props:{columns:{},tableData:{}},setup(l){const e=l,t=Ge(null),i=Ge(null);je(()=>e.columns,()=>{i.value?i.value.setColumns(e.columns):s()}),je(()=>e.tableData,()=>{n()}),Et(async()=>{await yt(),s()}),Rt(()=>{i.value&&(i.value.destroy(),i.value=null)});const s=()=>{!t.value||i.value||(i.value=new Ns(t.value,{data:e.tableData??[],reactiveData:!0,columns:e.columns,height:"auto",pagination:!0,paginationSize:6,paginationSizeSelector:[3,6,8,10],movableColumns:!0,paginationCounter:"rows"}))},n=()=>{if(!i.value){s();return}i.value.replaceData(e.tableData??[])};return(r,o)=>(Tt(),xt("div",{ref_key:"table",ref:t},null,512))}});export{Xs as _}; diff --git a/src/main/resources/static/assets/Tabulator.vue_vue_type_style_index_0_lang-pkMkfUCQ.js b/src/main/resources/static/assets/Tabulator.vue_vue_type_style_index_0_lang-pkMkfUCQ.js new file mode 100644 index 00000000..db2d8f00 --- /dev/null +++ b/src/main/resources/static/assets/Tabulator.vue_vue_type_style_index_0_lang-pkMkfUCQ.js @@ -0,0 +1,22 @@ +var vt=Object.defineProperty;var wt=(l,e,t)=>e in l?vt(l,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):l[e]=t;var b=(l,e,t)=>wt(l,typeof e!="symbol"?e+"":e,t);import{d as Ct,r as Ge,h as je,i as Et,B as yt,x as Rt,c as xt,o as Tt}from"./index-8PPGy_cS.js";class M{constructor(e){this.table=e}reloadData(e,t,i){return this.table.dataLoader.load(e,void 0,void 0,void 0,t,i)}langText(){return this.table.modules.localize.getText(...arguments)}langBind(){return this.table.modules.localize.bind(...arguments)}langLocale(){return this.table.modules.localize.getLocale(...arguments)}commsConnections(){return this.table.modules.comms.getConnections(...arguments)}commsSend(){return this.table.modules.comms.send(...arguments)}layoutMode(){return this.table.modules.layout.getMode()}layoutRefresh(e){return this.table.modules.layout.layout(e)}subscribe(){return this.table.eventBus.subscribe(...arguments)}unsubscribe(){return this.table.eventBus.unsubscribe(...arguments)}subscribed(e){return this.table.eventBus.subscribed(e)}subscriptionChange(){return this.table.eventBus.subscriptionChange(...arguments)}dispatch(){return this.table.eventBus.dispatch(...arguments)}chain(){return this.table.eventBus.chain(...arguments)}confirm(){return this.table.eventBus.confirm(...arguments)}dispatchExternal(){return this.table.externalEvents.dispatch(...arguments)}subscribedExternal(e){return this.table.externalEvents.subscribed(e)}subscriptionChangeExternal(){return this.table.externalEvents.subscriptionChange(...arguments)}options(e){return this.table.options[e]}setOption(e,t){return typeof t<"u"&&(this.table.options[e]=t),this.table.options[e]}deprecationCheck(e,t,i){return this.table.deprecationAdvisor.check(e,t,i)}deprecationCheckMsg(e,t){return this.table.deprecationAdvisor.checkMsg(e,t)}deprecationMsg(e){return this.table.deprecationAdvisor.msg(e)}module(e){return this.table.module(e)}}class x{static elVisible(e){return!(e.offsetWidth<=0&&e.offsetHeight<=0)}static elOffset(e){var t=e.getBoundingClientRect();return{top:t.top+window.pageYOffset-document.documentElement.clientTop,left:t.left+window.pageXOffset-document.documentElement.clientLeft}}static retrieveNestedData(e,t,i){var s=e?t.split(e):[t],n=s.length,r;for(let o=0;od.subject===o),a>-1?t[r]=i[a].copy:(h=Object.assign(Array.isArray(o)?[]:{},o),i.unshift({subject:o,copy:h}),t[r]=this.deepClone(o,h,i)))}return t}}let kt=class Ke extends M{constructor(e,t,i){super(e),this.element=t,this.container=this._lookupContainer(),this.parent=i,this.reversedX=!1,this.childPopup=null,this.blurable=!1,this.blurCallback=null,this.blurEventsBound=!1,this.renderedCallback=null,this.visible=!1,this.hideable=!0,this.element.classList.add("tabulator-popup-container"),this.blurEvent=this.hide.bind(this,!1),this.escEvent=this._escapeCheck.bind(this),this.destroyBinding=this.tableDestroyed.bind(this),this.destroyed=!1}tableDestroyed(){this.destroyed=!0,this.hide(!0)}_lookupContainer(){var e=this.table.options.popupContainer;return typeof e=="string"?(e=document.querySelector(e),e||console.warn("Menu Error - no container element found matching selector:",this.table.options.popupContainer,"(defaulting to document body)")):e===!0&&(e=this.table.element),e&&!this._checkContainerIsParent(e)&&(e=!1,console.warn("Menu Error - container element does not contain this table:",this.table.options.popupContainer,"(defaulting to document body)")),e||(e=document.body),e}_checkContainerIsParent(e,t=this.table.element){return e===t?!0:t.parentNode?this._checkContainerIsParent(e,t.parentNode):!1}renderCallback(e){this.renderedCallback=e}containerEventCoords(e){var t=!(e instanceof MouseEvent),i=t?e.touches[0].pageX:e.pageX,s=t?e.touches[0].pageY:e.pageY;if(this.container!==document.body){let n=x.elOffset(this.container);i-=n.left,s-=n.top}return{x:i,y:s}}elementPositionCoords(e,t="right"){var i=x.elOffset(e),s,n,r;switch(this.container!==document.body&&(s=x.elOffset(this.container),i.left-=s.left,i.top-=s.top),t){case"right":n=i.left+e.offsetWidth,r=i.top-1;break;case"bottom":n=i.left,r=i.top+e.offsetHeight;break;case"left":n=i.left,r=i.top-1;break;case"top":n=i.left,r=i.top;break;case"center":n=i.left+e.offsetWidth/2,r=i.top+e.offsetHeight/2;break}return{x:n,y:r,offset:i}}show(e,t){var i,s,n,r,o;return this.destroyed||this.table.destroyed?this:(e instanceof HTMLElement?(n=e,o=this.elementPositionCoords(e,t),r=o.offset,i=o.x,s=o.y):typeof e=="number"?(r={top:0,left:0},i=e,s=t):(o=this.containerEventCoords(e),i=o.x,s=o.y,this.reversedX=!1),this.element.style.top=s+"px",this.element.style.left=i+"px",this.container.appendChild(this.element),typeof this.renderedCallback=="function"&&this.renderedCallback(),this._fitToScreen(i,s,n,r,t),this.visible=!0,this.subscribe("table-destroy",this.destroyBinding),this.element.addEventListener("mousedown",a=>{a.stopPropagation()}),this)}_fitToScreen(e,t,i,s,n){var r=this.container===document.body?document.documentElement.scrollTop:this.container.scrollTop;(e+this.element.offsetWidth>=this.container.offsetWidth||this.reversedX)&&(this.element.style.left="",i?this.element.style.right=this.container.offsetWidth-s.left+"px":this.element.style.right=this.container.offsetWidth-e+"px",this.reversedX=!0);let o=Math.max(this.container.offsetHeight,r?this.container.scrollHeight:0);if(t+this.element.offsetHeight>o)if(i)switch(n){case"bottom":this.element.style.top=parseInt(this.element.style.top)-this.element.offsetHeight-i.offsetHeight-1+"px";break;default:this.element.style.top=parseInt(this.element.style.top)-this.element.offsetHeight+i.offsetHeight+1+"px"}else this.element.style.height=o+"px"}isVisible(){return this.visible}hideOnBlur(e){return this.blurable=!0,this.visible&&(setTimeout(()=>{this.visible&&(this.table.rowManager.element.addEventListener("scroll",this.blurEvent),this.subscribe("cell-editing",this.blurEvent),document.body.addEventListener("click",this.blurEvent),document.body.addEventListener("contextmenu",this.blurEvent),document.body.addEventListener("mousedown",this.blurEvent),window.addEventListener("resize",this.blurEvent),document.body.addEventListener("keydown",this.escEvent),this.blurEventsBound=!0)},100),this.blurCallback=e),this}_escapeCheck(e){e.keyCode==27&&this.hide()}blockHide(){this.hideable=!1}restoreHide(){this.hideable=!0}hide(e=!1){return this.visible&&this.hideable&&(this.blurable&&this.blurEventsBound&&(document.body.removeEventListener("keydown",this.escEvent),document.body.removeEventListener("click",this.blurEvent),document.body.removeEventListener("contextmenu",this.blurEvent),document.body.removeEventListener("mousedown",this.blurEvent),window.removeEventListener("resize",this.blurEvent),this.table.rowManager.element.removeEventListener("scroll",this.blurEvent),this.unsubscribe("cell-editing",this.blurEvent),this.blurEventsBound=!1),this.childPopup&&this.childPopup.hide(),this.parent&&(this.parent.childPopup=null),this.element.parentNode&&this.element.parentNode.removeChild(this.element),this.visible=!1,this.blurCallback&&!e&&this.blurCallback(),this.unsubscribe("table-destroy",this.destroyBinding)),this}child(e){return this.childPopup&&this.childPopup.hide(),this.childPopup=new Ke(this.table,e,this),this.childPopup}};class w extends M{constructor(e,t){super(e),this._handler=null}initialize(){}registerTableOption(e,t){this.table.optionsList.register(e,t)}registerColumnOption(e,t){this.table.columnManager.optionsList.register(e,t)}registerTableFunction(e,t){typeof this.table[e]>"u"?this.table[e]=(...i)=>(this.table.initGuard(e),t(...i)):console.warn("Unable to bind table function, name already in use",e)}registerComponentFunction(e,t,i){return this.table.componentFunctionBinder.bind(e,t,i)}registerDataHandler(e,t){this.table.rowManager.registerDataPipelineHandler(e,t),this._handler=e}registerDisplayHandler(e,t){this.table.rowManager.registerDisplayPipelineHandler(e,t),this._handler=e}displayRows(e){var t=this.table.rowManager.displayRows.length-1,i;if(this._handler&&(i=this.table.rowManager.displayPipeline.findIndex(s=>s.handler===this._handler),i>-1&&(t=i)),e&&(t=t+e),this._handler)return t>-1?this.table.rowManager.getDisplayRows(t):this.activeRows()}activeRows(){return this.table.rowManager.activeRows}refreshData(e,t){t||(t=this._handler),t&&this.table.rowManager.refreshActiveData(t,!1,e)}footerAppend(e){return this.table.footerManager.append(e)}footerPrepend(e){return this.table.footerManager.prepend(e)}footerRemove(e){return this.table.footerManager.remove(e)}popup(e,t){return new kt(this.table,e,t)}alert(e,t){return this.table.alertManager.alert(e,t)}clearAlert(){return this.table.alertManager.clear()}}var Mt={rownum:function(l,e,t,i,s,n){return n.getPosition()}};const K=class K extends w{constructor(e){super(e),this.allowedTypes=["","data","download","clipboard","print","htmlOutput"],this.registerColumnOption("accessor"),this.registerColumnOption("accessorParams"),this.registerColumnOption("accessorData"),this.registerColumnOption("accessorDataParams"),this.registerColumnOption("accessorDownload"),this.registerColumnOption("accessorDownloadParams"),this.registerColumnOption("accessorClipboard"),this.registerColumnOption("accessorClipboardParams"),this.registerColumnOption("accessorPrint"),this.registerColumnOption("accessorPrintParams"),this.registerColumnOption("accessorHtmlOutput"),this.registerColumnOption("accessorHtmlOutputParams")}initialize(){this.subscribe("column-layout",this.initializeColumn.bind(this)),this.subscribe("row-data-retrieve",this.transformRow.bind(this))}initializeColumn(e){var t=!1,i={};this.allowedTypes.forEach(s=>{var n="accessor"+(s.charAt(0).toUpperCase()+s.slice(1)),r;e.definition[n]&&(r=this.lookupAccessor(e.definition[n]),r&&(t=!0,i[n]={accessor:r,params:e.definition[n+"Params"]||{}}))}),t&&(e.modules.accessor=i)}lookupAccessor(e){var t=!1;switch(typeof e){case"string":K.accessors[e]?t=K.accessors[e]:console.warn("Accessor Error - No such accessor found, ignoring: ",e);break;case"function":t=e;break}return t}transformRow(e,t){var i="accessor"+(t.charAt(0).toUpperCase()+t.slice(1)),s=e.getComponent(),n=x.deepClone(e.data||{});return this.table.columnManager.traverse(function(r){var o,a,h,d;r.modules.accessor&&(a=r.modules.accessor[i]||r.modules.accessor.accessor||!1,a&&(o=r.getFieldValue(n),o!="undefined"&&(d=r.getComponent(),h=typeof a.params=="function"?a.params(o,n,t,d,s):a.params,r.setFieldValue(n,a.accessor(o,n,t,h,d,s)))))}),n}};b(K,"moduleName","accessor"),b(K,"accessors",Mt);let ce=K;var Lt={method:"GET"};function fe(l,e){var t=[];if(e=e||"",Array.isArray(l))l.forEach((s,n)=>{t=t.concat(fe(s,e?e+"["+n+"]":n))});else if(typeof l=="object")for(var i in l)t=t.concat(fe(l[i],e?e+"["+i+"]":i));else t.push({key:e,value:l});return t}function St(l){var e=fe(l),t=[];return e.forEach(function(i){t.push(encodeURIComponent(i.key)+"="+encodeURIComponent(i.value))}),t.join("&")}function qe(l,e,t){return l&&t&&Object.keys(t).length&&(!e.method||e.method.toLowerCase()=="get")&&(e.method="get",l+=(l.includes("?")?"&":"?")+St(t)),l}function Dt(l,e,t){var i;return new Promise((s,n)=>{if(l=this.urlGenerator.call(this.table,l,e,t),e.method.toUpperCase()!="GET")if(i=typeof this.table.options.ajaxContentType=="object"?this.table.options.ajaxContentType:this.contentTypeFormatters[this.table.options.ajaxContentType],i){for(var r in i.headers)e.headers||(e.headers={}),typeof e.headers[r]>"u"&&(e.headers[r]=i.headers[r]);e.body=i.body.call(this,l,e,t)}else console.warn("Ajax Error - Invalid ajaxContentType value:",this.table.options.ajaxContentType);l?(typeof e.headers>"u"&&(e.headers={}),typeof e.headers.Accept>"u"&&(e.headers.Accept="application/json"),typeof e.headers["X-Requested-With"]>"u"&&(e.headers["X-Requested-With"]="XMLHttpRequest"),typeof e.mode>"u"&&(e.mode="cors"),e.mode=="cors"?(typeof e.headers.Origin>"u"&&(e.headers.Origin=window.location.origin),typeof e.credentials>"u"&&(e.credentials="same-origin")):typeof e.credentials>"u"&&(e.credentials="include"),fetch(l,e).then(o=>{o.ok?o.json().then(a=>{s(a)}).catch(a=>{n(a),console.warn("Ajax Load Error - Invalid JSON returned",a)}):(console.error("Ajax Load Error - Connection Error: "+o.status,o.statusText),n(o))}).catch(o=>{console.error("Ajax Load Error - Connection Error: ",o),n(o)})):(console.warn("Ajax Load Error - No URL Set"),s([]))})}function pe(l,e){var t=[];if(e=e||"",Array.isArray(l))l.forEach((s,n)=>{t=t.concat(pe(s,e?e+"["+n+"]":n))});else if(typeof l=="object")for(var i in l)t=t.concat(pe(l[i],e?e+"["+i+"]":i));else t.push({key:e,value:l});return t}var zt={json:{headers:{"Content-Type":"application/json"},body:function(l,e,t){return JSON.stringify(t)}},form:{headers:{},body:function(l,e,t){var i=pe(t),s=new FormData;return i.forEach(function(n){s.append(n.key,n.value)}),s}}};const F=class F extends w{constructor(e){super(e),this.config={},this.url="",this.urlGenerator=!1,this.params=!1,this.loaderPromise=!1,this.registerTableOption("ajaxURL",!1),this.registerTableOption("ajaxURLGenerator",!1),this.registerTableOption("ajaxParams",{}),this.registerTableOption("ajaxConfig","get"),this.registerTableOption("ajaxContentType","form"),this.registerTableOption("ajaxRequestFunc",!1),this.registerTableOption("ajaxRequesting",function(){}),this.registerTableOption("ajaxResponse",!1),this.contentTypeFormatters=F.contentTypeFormatters}initialize(){this.loaderPromise=this.table.options.ajaxRequestFunc||F.defaultLoaderPromise,this.urlGenerator=this.table.options.ajaxURLGenerator||F.defaultURLGenerator,this.table.options.ajaxURL&&this.setUrl(this.table.options.ajaxURL),this.setDefaultConfig(this.table.options.ajaxConfig),this.registerTableFunction("getAjaxUrl",this.getUrl.bind(this)),this.subscribe("data-loading",this.requestDataCheck.bind(this)),this.subscribe("data-params",this.requestParams.bind(this)),this.subscribe("data-load",this.requestData.bind(this))}requestParams(e,t,i,s){var n=this.table.options.ajaxParams;return n&&(typeof n=="function"&&(n=n.call(this.table)),s=Object.assign(Object.assign({},n),s)),s}requestDataCheck(e,t,i,s){return!!(!e&&this.url||typeof e=="string")}requestData(e,t,i,s,n){var r;return!n&&this.requestDataCheck(e)?(e&&this.setUrl(e),r=this.generateConfig(i),this.sendRequest(this.url,t,r)):n}setDefaultConfig(e={}){this.config=Object.assign({},F.defaultConfig),typeof e=="string"?this.config.method=e:Object.assign(this.config,e)}generateConfig(e={}){var t=Object.assign({},this.config);return typeof e=="string"?t.method=e:Object.assign(t,e),t}setUrl(e){this.url=e}getUrl(){return this.url}sendRequest(e,t,i){return this.table.options.ajaxRequesting.call(this.table,e,t)!==!1?this.loaderPromise(e,i,t).then(s=>(this.table.options.ajaxResponse&&(s=this.table.options.ajaxResponse.call(this.table,e,t,s)),s)):Promise.reject()}};b(F,"moduleName","ajax"),b(F,"defaultConfig",Lt),b(F,"defaultURLGenerator",qe),b(F,"defaultLoaderPromise",Dt),b(F,"contentTypeFormatters",zt);let me=F;var Ht={replace:function(l){return this.table.setData(l)},update:function(l){return this.table.updateOrAddData(l)},insert:function(l){return this.table.addData(l)}},Ft={table:function(l){var e=[],t=!0,i=this.table.columnManager.columns,s=[],n=[];return l=l.split(` +`),l.forEach(function(r){e.push(r.split(" "))}),e.length&&!(e.length===1&&e[0].length<2)?(e[0].forEach(function(r){var o=i.find(function(a){return r&&a.definition.title&&r.trim()&&a.definition.title.trim()===r.trim()});o?s.push(o):t=!1}),t||(t=!0,s=[],e[0].forEach(function(r){var o=i.find(function(a){return r&&a.field&&r.trim()&&a.field.trim()===r.trim()});o?s.push(o):t=!1}),t||(s=this.table.columnManager.columnsByIndex)),t&&e.shift(),e.forEach(function(r){var o={};r.forEach(function(a,h){s[h]&&(o[s[h].field]=a)}),n.push(o)}),n):!1}},Pt={copyToClipboard:["ctrl + 67","meta + 67"]},Ot={copyToClipboard:function(l){this.table.modules.edit.currentCell||this.table.modExists("clipboard",!0)&&this.table.modules.clipboard.copy(!1,!0)}},At={keybindings:{bindings:Pt,actions:Ot}};const _=class _ extends w{constructor(e){super(e),this.mode=!0,this.pasteParser=function(){},this.pasteAction=function(){},this.customSelection=!1,this.rowRange=!1,this.blocked=!0,this.registerTableOption("clipboard",!1),this.registerTableOption("clipboardCopyStyled",!0),this.registerTableOption("clipboardCopyConfig",!1),this.registerTableOption("clipboardCopyFormatter",!1),this.registerTableOption("clipboardCopyRowRange","active"),this.registerTableOption("clipboardPasteParser","table"),this.registerTableOption("clipboardPasteAction","insert"),this.registerColumnOption("clipboard"),this.registerColumnOption("titleClipboard")}initialize(){this.mode=this.table.options.clipboard,this.rowRange=this.table.options.clipboardCopyRowRange,(this.mode===!0||this.mode==="copy")&&this.table.element.addEventListener("copy",e=>{var t,i,s;this.blocked||(e.preventDefault(),this.customSelection?(t=this.customSelection,this.table.options.clipboardCopyFormatter&&(t=this.table.options.clipboardCopyFormatter("plain",t))):(s=this.table.modules.export.generateExportList(this.table.options.clipboardCopyConfig,this.table.options.clipboardCopyStyled,this.rowRange,"clipboard"),i=this.table.modules.export.generateHTMLTable(s),t=i?this.generatePlainContent(s):"",this.table.options.clipboardCopyFormatter&&(t=this.table.options.clipboardCopyFormatter("plain",t),i=this.table.options.clipboardCopyFormatter("html",i))),window.clipboardData&&window.clipboardData.setData?window.clipboardData.setData("Text",t):e.clipboardData&&e.clipboardData.setData?(e.clipboardData.setData("text/plain",t),i&&e.clipboardData.setData("text/html",i)):e.originalEvent&&e.originalEvent.clipboardData.setData&&(e.originalEvent.clipboardData.setData("text/plain",t),i&&e.originalEvent.clipboardData.setData("text/html",i)),this.dispatchExternal("clipboardCopied",t,i),this.reset())}),(this.mode===!0||this.mode==="paste")&&this.table.element.addEventListener("paste",e=>{this.paste(e)}),this.setPasteParser(this.table.options.clipboardPasteParser),this.setPasteAction(this.table.options.clipboardPasteAction),this.registerTableFunction("copyToClipboard",this.copy.bind(this))}reset(){this.blocked=!0,this.customSelection=!1}generatePlainContent(e){var t=[];return e.forEach(i=>{var s=[];i.columns.forEach(n=>{var r="";if(n)if(i.type==="group"&&(n.value=n.component.getKey()),n.value===null)r="";else switch(typeof n.value){case"object":r=JSON.stringify(n.value);break;case"undefined":r="";break;default:r=n.value}s.push(r)}),t.push(s.join(" "))}),t.join(` +`)}copy(e,t){var i,s;this.blocked=!1,this.customSelection=!1,(this.mode===!0||this.mode==="copy")&&(this.rowRange=e||this.table.options.clipboardCopyRowRange,typeof window.getSelection<"u"&&typeof document.createRange<"u"?(e=document.createRange(),e.selectNodeContents(this.table.element),i=window.getSelection(),i.toString()&&t&&(this.customSelection=i.toString()),i.removeAllRanges(),i.addRange(e)):typeof document.selection<"u"&&typeof document.body.createTextRange<"u"&&(s=document.body.createTextRange(),s.moveToElementText(this.table.element),s.select()),document.execCommand("copy"),i&&i.removeAllRanges())}setPasteAction(e){switch(typeof e){case"string":this.pasteAction=_.pasteActions[e],this.pasteAction||console.warn("Clipboard Error - No such paste action found:",e);break;case"function":this.pasteAction=e;break}}setPasteParser(e){switch(typeof e){case"string":this.pasteParser=_.pasteParsers[e],this.pasteParser||console.warn("Clipboard Error - No such paste parser found:",e);break;case"function":this.pasteParser=e;break}}paste(e){var t,i,s;this.checkPasteOrigin(e)&&(t=this.getPasteData(e),i=this.pasteParser.call(this,t),i?(e.preventDefault(),this.table.modExists("mutator")&&(i=this.mutateData(i)),s=this.pasteAction.call(this,i),this.dispatchExternal("clipboardPasted",t,i,s)):this.dispatchExternal("clipboardPasteError",t))}mutateData(e){var t=[];return Array.isArray(e)?e.forEach(i=>{t.push(this.table.modules.mutator.transformRow(i,"clipboard"))}):t=e,t}checkPasteOrigin(e){var t=!0,i=this.confirm("clipboard-paste",[e]);return(i||!["DIV","SPAN"].includes(e.target.tagName))&&(t=!1),t}getPasteData(e){var t;return window.clipboardData&&window.clipboardData.getData?t=window.clipboardData.getData("Text"):e.clipboardData&&e.clipboardData.getData?t=e.clipboardData.getData("text/plain"):e.originalEvent&&e.originalEvent.clipboardData.getData&&(t=e.originalEvent.clipboardData.getData("text/plain")),t}};b(_,"moduleName","clipboard"),b(_,"moduleExtensions",At),b(_,"pasteActions",Ht),b(_,"pasteParsers",Ft);let ge=_;class _t{constructor(e){return this._row=e,new Proxy(this,{get:function(t,i,s){return typeof t[i]<"u"?t[i]:t._row.table.componentFunctionBinder.handle("row",t._row,i)}})}getData(e){return this._row.getData(e)}getElement(){return this._row.getElement()}getTable(){return this._row.table}getCells(){var e=[];return this._row.getCells().forEach(function(t){e.push(t.getComponent())}),e}getCell(e){var t=this._row.getCell(e);return t?t.getComponent():!1}_getSelf(){return this._row}}class Ye{constructor(e){return this._cell=e,new Proxy(this,{get:function(t,i,s){return typeof t[i]<"u"?t[i]:t._cell.table.componentFunctionBinder.handle("cell",t._cell,i)}})}getValue(){return this._cell.getValue()}getOldValue(){return this._cell.getOldValue()}getInitialValue(){return this._cell.initialValue}getElement(){return this._cell.getElement()}getRow(){return this._cell.row.getComponent()}getData(e){return this._cell.row.getData(e)}getType(){return"cell"}getField(){return this._cell.column.getField()}getColumn(){return this._cell.column.getComponent()}setValue(e,t){typeof t>"u"&&(t=!0),this._cell.setValue(e,t)}restoreOldValue(){this._cell.setValueActual(this._cell.getOldValue())}restoreInitialValue(){this._cell.setValueActual(this._cell.initialValue)}checkHeight(){this._cell.checkHeight()}getTable(){return this._cell.table}_getSelf(){return this._cell}}class ne extends M{constructor(e,t){super(e.table),this.table=e.table,this.column=e,this.row=t,this.element=null,this.value=null,this.initialValue,this.oldValue=null,this.modules={},this.height=null,this.width=null,this.minWidth=null,this.component=null,this.loaded=!1,this.build()}build(){this.generateElement(),this.setWidth(),this._configureCell(),this.setValueActual(this.column.getFieldValue(this.row.data)),this.initialValue=this.value}generateElement(){this.element=document.createElement("div"),this.element.className="tabulator-cell",this.element.setAttribute("role","gridcell"),this.column.isRowHeader&&this.element.classList.add("tabulator-row-header")}_configureCell(){var e=this.element,t=this.column.getField(),i={top:"flex-start",bottom:"flex-end",middle:"center"},s={left:"flex-start",right:"flex-end",center:"center"};if(e.style.textAlign=this.column.hozAlign,this.column.vertAlign&&(e.style.display="inline-flex",e.style.alignItems=i[this.column.vertAlign]||"",this.column.hozAlign&&(e.style.justifyContent=s[this.column.hozAlign]||"")),t&&e.setAttribute("tabulator-field",t),this.column.definition.cssClass){var n=this.column.definition.cssClass.split(" ");n.forEach(r=>{e.classList.add(r)})}this.dispatch("cell-init",this),this.column.visible||this.hide()}_generateContents(){var e;switch(e=this.chain("cell-format",this,null,()=>this.element.innerHTML=this.value),typeof e){case"object":if(e instanceof Node){for(;this.element.firstChild;)this.element.removeChild(this.element.firstChild);this.element.appendChild(e)}else this.element.innerHTML="",e!=null&&console.warn("Format Error - Formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:",e);break;case"undefined":this.element.innerHTML="";break;default:this.element.innerHTML=e}}cellRendered(){this.dispatch("cell-rendered",this)}getElement(e){return this.loaded||(this.loaded=!0,e||this.layoutElement()),this.element}getValue(){return this.value}getOldValue(){return this.oldValue}setValue(e,t,i){var s=this.setValueProcessData(e,t,i);s&&(this.dispatch("cell-value-updated",this),this.cellRendered(),this.column.definition.cellEdited&&this.column.definition.cellEdited.call(this.table,this.getComponent()),this.dispatchExternal("cellEdited",this.getComponent()),this.subscribedExternal("dataChanged")&&this.dispatchExternal("dataChanged",this.table.rowManager.getData()))}setValueProcessData(e,t,i){var s=!1;return(this.value!==e||i)&&(s=!0,t&&(e=this.chain("cell-value-changing",[this,e],null,e))),this.setValueActual(e),s&&this.dispatch("cell-value-changed",this),s}setValueActual(e){this.oldValue=this.value,this.value=e,this.dispatch("cell-value-save-before",this),this.column.setFieldValue(this.row.data,e),this.dispatch("cell-value-save-after",this),this.loaded&&this.layoutElement()}layoutElement(){this._generateContents(),this.dispatch("cell-layout",this)}setWidth(){this.width=this.column.width,this.element.style.width=this.column.widthStyled}clearWidth(){this.width="",this.element.style.width=""}getWidth(){return this.width||this.element.offsetWidth}setMinWidth(){this.minWidth=this.column.minWidth,this.element.style.minWidth=this.column.minWidthStyled}setMaxWidth(){this.maxWidth=this.column.maxWidth,this.element.style.maxWidth=this.column.maxWidthStyled}checkHeight(){this.row.reinitializeHeight()}clearHeight(){this.element.style.height="",this.height=null,this.dispatch("cell-height",this,"")}setHeight(){this.height=this.row.height,this.element.style.height=this.row.heightStyled,this.dispatch("cell-height",this,this.row.heightStyled)}getHeight(){return this.height||this.element.offsetHeight}show(){this.element.style.display=this.column.vertAlign?"inline-flex":""}hide(){this.element.style.display="none"}delete(){this.dispatch("cell-delete",this),!this.table.rowManager.redrawBlock&&this.element.parentNode&&this.element.parentNode.removeChild(this.element),this.element=!1,this.column.deleteCell(this),this.row.deleteCell(this),this.calcs={}}getIndex(){return this.row.getCellIndex(this)}getComponent(){return this.component||(this.component=new Ye(this)),this.component}}class $e{constructor(e){return this._column=e,this.type="ColumnComponent",new Proxy(this,{get:function(t,i,s){return typeof t[i]<"u"?t[i]:t._column.table.componentFunctionBinder.handle("column",t._column,i)}})}getElement(){return this._column.getElement()}getDefinition(){return this._column.getDefinition()}getField(){return this._column.getField()}getTitleDownload(){return this._column.getTitleDownload()}getCells(){var e=[];return this._column.cells.forEach(function(t){e.push(t.getComponent())}),e}isVisible(){return this._column.visible}show(){this._column.isGroup?this._column.columns.forEach(function(e){e.show()}):this._column.show()}hide(){this._column.isGroup?this._column.columns.forEach(function(e){e.hide()}):this._column.hide()}toggle(){this._column.visible?this.hide():this.show()}delete(){return this._column.delete()}getSubColumns(){var e=[];return this._column.columns.length&&this._column.columns.forEach(function(t){e.push(t.getComponent())}),e}getParentColumn(){return this._column.getParentComponent()}_getSelf(){return this._column}scrollTo(e,t){return this._column.table.columnManager.scrollToColumn(this._column,e,t)}getTable(){return this._column.table}move(e,t){var i=this._column.table.columnManager.findColumn(e);i?this._column.table.columnManager.moveColumn(this._column,i,t):console.warn("Move Error - No matching column found:",i)}getNextColumn(){var e=this._column.nextColumn();return e?e.getComponent():!1}getPrevColumn(){var e=this._column.prevColumn();return e?e.getComponent():!1}updateDefinition(e){return this._column.updateDefinition(e)}getWidth(){return this._column.getWidth()}setWidth(e){var t;return e===!0?t=this._column.reinitializeWidth(!0):t=this._column.setWidth(e),this._column.table.columnManager.rerenderColumns(!0),t}}var Qe={title:void 0,field:void 0,columns:void 0,visible:void 0,hozAlign:void 0,vertAlign:void 0,width:void 0,minWidth:40,maxWidth:void 0,maxInitialWidth:void 0,cssClass:void 0,variableHeight:void 0,headerVertical:void 0,headerHozAlign:void 0,headerWordWrap:!1,editableTitle:void 0};const W=class W extends M{constructor(e,t,i){super(t.table),this.definition=e,this.parent=t,this.type="column",this.columns=[],this.cells=[],this.isGroup=!1,this.isRowHeader=i,this.element=this.createElement(),this.contentElement=!1,this.titleHolderElement=!1,this.titleElement=!1,this.groupElement=this.createGroupElement(),this.hozAlign="",this.vertAlign="",this.field="",this.fieldStructure="",this.getFieldValue="",this.setFieldValue="",this.titleDownload=null,this.titleFormatterRendered=!1,this.mapDefinitions(),this.setField(this.definition.field),this.modules={},this.width=null,this.widthStyled="",this.maxWidth=null,this.maxWidthStyled="",this.maxInitialWidth=null,this.minWidth=null,this.minWidthStyled="",this.widthFixed=!1,this.visible=!0,this.component=null,this.definition.columns?(this.isGroup=!0,this.definition.columns.forEach((s,n)=>{var r=new W(s,this);this.attachColumn(r)}),this.checkColumnVisibility()):t.registerColumnField(this),this._initialize()}createElement(){var e=document.createElement("div");switch(e.classList.add("tabulator-col"),e.setAttribute("role","columnheader"),e.setAttribute("aria-sort","none"),this.isRowHeader&&e.classList.add("tabulator-row-header"),this.table.options.columnHeaderVertAlign){case"middle":e.style.justifyContent="center";break;case"bottom":e.style.justifyContent="flex-end";break}return e}createGroupElement(){var e=document.createElement("div");return e.classList.add("tabulator-col-group-cols"),e}mapDefinitions(){var e=this.table.options.columnDefaults;if(e)for(let t in e)typeof this.definition[t]>"u"&&(this.definition[t]=e[t]);this.definition=this.table.columnManager.optionsList.generate(W.defaultOptionList,this.definition)}checkDefinition(){Object.keys(this.definition).forEach(e=>{W.defaultOptionList.indexOf(e)===-1&&console.warn("Invalid column definition option in '"+(this.field||this.definition.title)+"' column:",e)})}setField(e){this.field=e,this.fieldStructure=e?this.table.options.nestedFieldSeparator?e.split(this.table.options.nestedFieldSeparator):[e]:[],this.getFieldValue=this.fieldStructure.length>1?this._getNestedData:this._getFlatData,this.setFieldValue=this.fieldStructure.length>1?this._setNestedData:this._setFlatData}registerColumnPosition(e){this.parent.registerColumnPosition(e)}registerColumnField(e){this.parent.registerColumnField(e)}reRegisterPosition(){this.isGroup?this.columns.forEach(function(e){e.reRegisterPosition()}):this.registerColumnPosition(this)}_initialize(){for(var e=this.definition;this.element.firstChild;)this.element.removeChild(this.element.firstChild);e.headerVertical&&(this.element.classList.add("tabulator-col-vertical"),e.headerVertical==="flip"&&this.element.classList.add("tabulator-col-vertical-flip")),this.contentElement=this._buildColumnHeaderContent(),this.element.appendChild(this.contentElement),this.isGroup?this._buildGroupHeader():this._buildColumnHeader(),this.dispatch("column-init",this)}_buildColumnHeader(){var e=this.definition;if(this.dispatch("column-layout",this),typeof e.visible<"u"&&(e.visible?this.show(!0):this.hide(!0)),e.cssClass){var t=e.cssClass.split(" ");t.forEach(i=>{this.element.classList.add(i)})}e.field&&this.element.setAttribute("tabulator-field",e.field),this.setMinWidth(parseInt(e.minWidth)),e.maxInitialWidth&&(this.maxInitialWidth=parseInt(e.maxInitialWidth)),e.maxWidth&&this.setMaxWidth(parseInt(e.maxWidth)),this.reinitializeWidth(),this.hozAlign=this.definition.hozAlign,this.vertAlign=this.definition.vertAlign,this.titleElement.style.textAlign=this.definition.headerHozAlign}_buildColumnHeaderContent(){var e=document.createElement("div");return e.classList.add("tabulator-col-content"),this.titleHolderElement=document.createElement("div"),this.titleHolderElement.classList.add("tabulator-col-title-holder"),e.appendChild(this.titleHolderElement),this.titleElement=this._buildColumnHeaderTitle(),this.titleHolderElement.appendChild(this.titleElement),e}_buildColumnHeaderTitle(){var e=this.definition,t=document.createElement("div");if(t.classList.add("tabulator-col-title"),e.headerWordWrap&&t.classList.add("tabulator-col-title-wrap"),e.editableTitle){var i=document.createElement("input");i.classList.add("tabulator-title-editor"),i.addEventListener("click",s=>{s.stopPropagation(),i.focus()}),i.addEventListener("mousedown",s=>{s.stopPropagation()}),i.addEventListener("change",()=>{e.title=i.value,this.dispatchExternal("columnTitleChanged",this.getComponent())}),t.appendChild(i),e.field?this.langBind("columns|"+e.field,s=>{i.value=s||e.title||" "}):i.value=e.title||" "}else e.field?this.langBind("columns|"+e.field,s=>{this._formatColumnHeaderTitle(t,s||e.title||" ")}):this._formatColumnHeaderTitle(t,e.title||" ");return t}_formatColumnHeaderTitle(e,t){var i=this.chain("column-format",[this,t,e],null,()=>t);switch(typeof i){case"object":i instanceof Node?e.appendChild(i):(e.innerHTML="",console.warn("Format Error - Title formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:",i));break;case"undefined":e.innerHTML="";break;default:e.innerHTML=i}}_buildGroupHeader(){if(this.element.classList.add("tabulator-col-group"),this.element.setAttribute("role","columngroup"),this.element.setAttribute("aria-title",this.definition.title),this.definition.cssClass){var e=this.definition.cssClass.split(" ");e.forEach(t=>{this.element.classList.add(t)})}this.titleElement.style.textAlign=this.definition.headerHozAlign,this.element.appendChild(this.groupElement)}_getFlatData(e){return e[this.field]}_getNestedData(e){var t=e,i=this.fieldStructure,s=i.length,n;for(let r=0;r{t.push(i),t=t.concat(i.getColumns(!0))}):t=this.columns,t}getCells(){return this.cells}getTopColumn(){return this.parent.isGroup?this.parent.getTopColumn():this}getDefinition(e){var t=[];return this.isGroup&&e&&(this.columns.forEach(function(i){t.push(i.getDefinition(!0))}),this.definition.columns=t),this.definition}checkColumnVisibility(){var e=!1;this.columns.forEach(function(t){t.visible&&(e=!0)}),e?(this.show(),this.dispatchExternal("columnVisibilityChanged",this.getComponent(),!1)):this.hide()}show(e,t){this.visible||(this.visible=!0,this.element.style.display="",this.parent.isGroup&&this.parent.checkColumnVisibility(),this.cells.forEach(function(i){i.show()}),!this.isGroup&&this.width===null&&this.reinitializeWidth(),this.table.columnManager.verticalAlignHeaders(),this.dispatch("column-show",this,t),e||this.dispatchExternal("columnVisibilityChanged",this.getComponent(),!0),this.parent.isGroup&&this.parent.matchChildWidths(),this.silent||this.table.columnManager.rerenderColumns())}hide(e,t){this.visible&&(this.visible=!1,this.element.style.display="none",this.table.columnManager.verticalAlignHeaders(),this.parent.isGroup&&this.parent.checkColumnVisibility(),this.cells.forEach(function(i){i.hide()}),this.dispatch("column-hide",this,t),e||this.dispatchExternal("columnVisibilityChanged",this.getComponent(),!1),this.parent.isGroup&&this.parent.matchChildWidths(),this.silent||this.table.columnManager.rerenderColumns())}matchChildWidths(){var e=0;this.contentElement&&this.columns.length&&(this.columns.forEach(function(t){t.visible&&(e+=t.getWidth())}),this.contentElement.style.maxWidth=e-1+"px",this.table.initialized&&(this.element.style.width=e+"px"),this.parent.isGroup&&this.parent.matchChildWidths())}removeChild(e){var t=this.columns.indexOf(e);t>-1&&this.columns.splice(t,1),this.columns.length||this.delete()}setWidth(e){this.widthFixed=!0,this.setWidthActual(e)}setWidthActual(e){isNaN(e)&&(e=Math.floor(this.table.element.clientWidth/100*parseInt(e))),e=Math.max(this.minWidth,e),this.maxWidth&&(e=Math.min(this.maxWidth,e)),this.width=e,this.widthStyled=e?e+"px":"",this.element.style.width=this.widthStyled,this.isGroup||this.cells.forEach(function(t){t.setWidth()}),this.parent.isGroup&&this.parent.matchChildWidths(),this.dispatch("column-width",this),this.subscribedExternal("columnWidth")&&this.dispatchExternal("columnWidth",this.getComponent())}checkCellHeights(){var e=[];this.cells.forEach(function(t){t.row.heightInitialized&&(t.row.getElement().offsetParent!==null?(e.push(t.row),t.row.clearCellHeight()):t.row.heightInitialized=!1)}),e.forEach(function(t){t.calcHeight()}),e.forEach(function(t){t.setCellHeight()})}getWidth(){var e=0;return this.isGroup?this.columns.forEach(function(t){t.visible&&(e+=t.getWidth())}):e=this.width,e}getLeftOffset(){var e=this.element.offsetLeft;return this.parent.isGroup&&(e+=this.parent.getLeftOffset()),e}getHeight(){return Math.ceil(this.element.getBoundingClientRect().height)}setMinWidth(e){this.maxWidth&&e>this.maxWidth&&(e=this.maxWidth,console.warn("the minWidth ("+e+"px) for column '"+this.field+"' cannot be bigger that its maxWidth ("+this.maxWidthStyled+")")),this.minWidth=e,this.minWidthStyled=e?e+"px":"",this.element.style.minWidth=this.minWidthStyled,this.cells.forEach(function(t){t.setMinWidth()})}setMaxWidth(e){this.minWidth&&e{this.isGroup&&this.columns.forEach(function(s){s.delete()}),this.dispatch("column-delete",this);var i=this.cells.length;for(let s=0;s-1?this._nextVisibleColumn(e+1):!1}_nextVisibleColumn(e){var t=this.table.columnManager.getColumnByIndex(e);return!t||t.visible?t:this._nextVisibleColumn(e+1)}prevColumn(){var e=this.table.columnManager.findColumnIndex(this);return e>-1?this._prevVisibleColumn(e-1):!1}_prevVisibleColumn(e){var t=this.table.columnManager.getColumnByIndex(e);return!t||t.visible?t:this._prevVisibleColumn(e-1)}reinitializeWidth(e){this.widthFixed=!1,typeof this.definition.width<"u"&&!e&&this.setWidth(this.definition.width),this.dispatch("column-width-fit-before",this),this.fitToData(e),this.dispatch("column-width-fit-after",this)}fitToData(e){if(!this.isGroup){this.widthFixed||(this.element.style.width="",this.cells.forEach(s=>{s.clearWidth()}));var t=this.element.offsetWidth;if((!this.width||!this.widthFixed)&&(this.cells.forEach(s=>{var n=s.getWidth();n>t&&(t=n)}),t)){var i=t+1;this.maxInitialWidth&&!e&&(i=Math.min(i,this.maxInitialWidth)),this.setWidthActual(i)}}}updateDefinition(e){var t;return this.isGroup||this.parent.isGroup?(console.error("Column Update Error - The updateDefinition function is only available on ungrouped columns"),Promise.reject("Column Update Error - The updateDefinition function is only available on columns, not column groups")):(t=Object.assign({},this.getDefinition()),t=Object.assign(t,e),this.table.columnManager.addColumn(t,!1,this).then(i=>(t.field==this.field&&(this.field=!1),this.delete().then(()=>i.getComponent()))))}deleteCell(e){var t=this.cells.indexOf(e);t>-1&&this.cells.splice(t,1)}getComponent(){return this.component||(this.component=new $e(this)),this.component}getPosition(){return this.table.columnManager.getVisibleColumnsByIndex().indexOf(this)+1}getParentComponent(){return this.parent instanceof W?this.parent.getComponent():!1}};b(W,"defaultOptionList",Qe);let U=W;class oe{constructor(e){return this._row=e,new Proxy(this,{get:function(t,i,s){return typeof t[i]<"u"?t[i]:t._row.table.componentFunctionBinder.handle("row",t._row,i)}})}getData(e){return this._row.getData(e)}getElement(){return this._row.getElement()}getCells(){var e=[];return this._row.getCells().forEach(function(t){e.push(t.getComponent())}),e}getCell(e){var t=this._row.getCell(e);return t?t.getComponent():!1}getIndex(){return this._row.getData("data")[this._row.table.options.index]}getPosition(){return this._row.getPosition()}watchPosition(e){return this._row.watchPosition(e)}delete(){return this._row.delete()}scrollTo(e,t){return this._row.table.rowManager.scrollToRow(this._row,e,t)}move(e,t){this._row.moveToRow(e,t)}update(e){return this._row.updateData(e)}normalizeHeight(){this._row.normalizeHeight(!0)}_getSelf(){return this._row}reformat(){return this._row.reinitialize()}getTable(){return this._row.table}getNextRow(){var e=this._row.nextRow();return e&&e.getComponent()}getPrevRow(){var e=this._row.prevRow();return e&&e.getComponent()}}class S extends M{constructor(e,t,i="row"){super(t.table),this.parent=t,this.data={},this.type=i,this.element=!1,this.modules={},this.cells=[],this.height=0,this.heightStyled="",this.manualHeight=!1,this.outerHeight=0,this.initialized=!1,this.heightInitialized=!1,this.position=0,this.positionWatchers=[],this.component=null,this.created=!1,this.setData(e)}create(){this.created||(this.created=!0,this.generateElement())}createElement(){var e=document.createElement("div");e.classList.add("tabulator-row"),e.setAttribute("role","row"),this.element=e}getElement(){return this.create(),this.element}detachElement(){this.element&&this.element.parentNode&&this.element.parentNode.removeChild(this.element)}generateElement(){this.createElement(),this.dispatch("row-init",this)}generateCells(){this.cells=this.table.columnManager.generateCells(this)}initialize(e,t){if(this.create(),!this.initialized||e){for(this.deleteCells();this.element.firstChild;)this.element.removeChild(this.element.firstChild);this.dispatch("row-layout-before",this),this.generateCells(),this.initialized=!0,this.table.columnManager.renderer.renderRowCells(this,t),e&&this.normalizeHeight(),this.dispatch("row-layout",this),this.table.options.rowFormatter&&this.table.options.rowFormatter(this.getComponent()),this.dispatch("row-layout-after",this)}else this.table.columnManager.renderer.rerenderRowCells(this,t)}rendered(){this.cells.forEach(e=>{e.cellRendered()})}reinitializeHeight(){this.heightInitialized=!1,this.element&&this.element.offsetParent!==null&&this.normalizeHeight(!0)}deinitialize(){this.initialized=!1}deinitializeHeight(){this.heightInitialized=!1}reinitialize(e){this.initialized=!1,this.heightInitialized=!1,this.manualHeight||(this.height=0,this.heightStyled=""),this.element&&this.element.offsetParent!==null&&this.initialize(!0),this.dispatch("row-relayout",this)}calcHeight(e){var t=0,i=0;this.table.options.rowHeight?this.height=this.table.options.rowHeight:(i=this.calcMinHeight(),t=this.calcMaxHeight(),e?this.height=Math.max(t,i):this.height=this.manualHeight?this.height:Math.max(t,i)),this.heightStyled=this.height?this.height+"px":"",this.outerHeight=this.element.offsetHeight}calcMinHeight(){return this.table.options.resizableRows?this.element.clientHeight:0}calcMaxHeight(){var e=0;return this.cells.forEach(function(t){var i=t.getHeight();i>e&&(e=i)}),e}setCellHeight(){this.cells.forEach(function(e){e.setHeight()}),this.heightInitialized=!0}clearCellHeight(){this.cells.forEach(function(e){e.clearHeight()})}normalizeHeight(e){e&&!this.table.options.rowHeight&&this.clearCellHeight(),this.calcHeight(e),this.setCellHeight()}setHeight(e,t){(this.height!=e||t)&&(this.manualHeight=!0,this.height=e,this.heightStyled=e?e+"px":"",this.setCellHeight(),this.outerHeight=this.element.offsetHeight,this.subscribedExternal("rowHeight")&&this.dispatchExternal("rowHeight",this.getComponent()))}getHeight(){return this.outerHeight}getWidth(){return this.element.offsetWidth}deleteCell(e){var t=this.cells.indexOf(e);t>-1&&this.cells.splice(t,1)}setData(e){this.data=this.chain("row-data-init-before",[this,e],void 0,e),this.dispatch("row-data-init-after",this)}updateData(e){var t=this.element&&x.elVisible(this.element),i={},s;return new Promise((n,r)=>{typeof e=="string"&&(e=JSON.parse(e)),this.dispatch("row-data-save-before",this),this.subscribed("row-data-changing")&&(i=Object.assign(i,this.data),i=Object.assign(i,e)),s=this.chain("row-data-changing",[this,i,e],null,e);for(let o in s)this.data[o]=s[o];this.dispatch("row-data-save-after",this);for(let o in e)this.table.columnManager.getColumnsByFieldRoot(o).forEach(h=>{let d=this.getCell(h.getField());if(d){let u=h.getFieldValue(s);d.getValue()!==u&&(d.setValueProcessData(u),t&&d.cellRendered())}});t?(this.normalizeHeight(!0),this.table.options.rowFormatter&&this.table.options.rowFormatter(this.getComponent())):(this.initialized=!1,this.height=0,this.heightStyled=""),this.dispatch("row-data-changed",this,t,e),this.dispatchExternal("rowUpdated",this.getComponent()),this.subscribedExternal("dataChanged")&&this.dispatchExternal("dataChanged",this.table.rowManager.getData()),n()})}getData(e){return e?this.chain("row-data-retrieve",[this,e],null,this.data):this.data}getCell(e){var t=!1;return e=this.table.columnManager.findColumn(e),!this.initialized&&this.cells.length===0&&this.generateCells(),t=this.cells.find(function(i){return i.column===e}),t}getCellIndex(e){return this.cells.findIndex(function(t){return t===e})}findCell(e){return this.cells.find(t=>t.element===e)}getCells(){return!this.initialized&&this.cells.length===0&&this.generateCells(),this.cells}nextRow(){var e=this.table.rowManager.nextDisplayRow(this,!0);return e||!1}prevRow(){var e=this.table.rowManager.prevDisplayRow(this,!0);return e||!1}moveToRow(e,t){var i=this.table.rowManager.findRow(e);i?(this.table.rowManager.moveRowActual(this,i,!t),this.table.rowManager.refreshActiveData("display",!1,!0)):console.warn("Move Error - No matching row found:",e)}delete(){return this.dispatch("row-delete",this),this.deleteActual(),Promise.resolve()}deleteActual(e){this.detachModules(),this.table.rowManager.deleteRow(this,e),this.deleteCells(),this.initialized=!1,this.heightInitialized=!1,this.element=!1,this.dispatch("row-deleted",this)}detachModules(){this.dispatch("row-deleting",this)}deleteCells(){var e=this.cells.length;for(let t=0;t{t(this.position)}))}watchPosition(e){this.positionWatchers.push(e),e(this.position)}getGroup(){return this.modules.group||!1}getComponent(){return this.component||(this.component=new oe(this)),this.component}}var Bt={avg:function(l,e,t){var i=0,s=typeof t.precision<"u"?t.precision:2;return l.length&&(i=l.reduce(function(n,r){return Number(n)+Number(r)}),i=i/l.length,i=s!==!1?i.toFixed(s):i),parseFloat(i).toString()},max:function(l,e,t){var i=null,s=typeof t.precision<"u"?t.precision:!1;return l.forEach(function(n){n=Number(n),(n>i||i===null)&&(i=n)}),i!==null?s!==!1?i.toFixed(s):i:""},min:function(l,e,t){var i=null,s=typeof t.precision<"u"?t.precision:!1;return l.forEach(function(n){n=Number(n),(n(l||s===0)&&l.indexOf(s)===n);return i.length}};const B=class B extends w{constructor(e){super(e),this.topCalcs=[],this.botCalcs=[],this.genColumn=!1,this.topElement=this.createElement(),this.botElement=this.createElement(),this.topRow=!1,this.botRow=!1,this.topInitialized=!1,this.botInitialized=!1,this.blocked=!1,this.recalcAfterBlock=!1,this.registerTableOption("columnCalcs",!0),this.registerColumnOption("topCalc"),this.registerColumnOption("topCalcParams"),this.registerColumnOption("topCalcFormatter"),this.registerColumnOption("topCalcFormatterParams"),this.registerColumnOption("bottomCalc"),this.registerColumnOption("bottomCalcParams"),this.registerColumnOption("bottomCalcFormatter"),this.registerColumnOption("bottomCalcFormatterParams")}createElement(){var e=document.createElement("div");return e.classList.add("tabulator-calcs-holder"),e}initialize(){this.genColumn=new U({field:"value"},this),this.subscribe("cell-value-changed",this.cellValueChanged.bind(this)),this.subscribe("column-init",this.initializeColumnCheck.bind(this)),this.subscribe("row-deleted",this.rowsUpdated.bind(this)),this.subscribe("scroll-horizontal",this.scrollHorizontal.bind(this)),this.subscribe("row-added",this.rowsUpdated.bind(this)),this.subscribe("column-moved",this.recalcActiveRows.bind(this)),this.subscribe("column-add",this.recalcActiveRows.bind(this)),this.subscribe("data-refreshed",this.recalcActiveRowsRefresh.bind(this)),this.subscribe("table-redraw",this.tableRedraw.bind(this)),this.subscribe("rows-visible",this.visibleRows.bind(this)),this.subscribe("scrollbar-vertical",this.adjustForScrollbar.bind(this)),this.subscribe("redraw-blocked",this.blockRedraw.bind(this)),this.subscribe("redraw-restored",this.restoreRedraw.bind(this)),this.subscribe("table-redrawing",this.resizeHolderWidth.bind(this)),this.subscribe("column-resized",this.resizeHolderWidth.bind(this)),this.subscribe("column-show",this.resizeHolderWidth.bind(this)),this.subscribe("column-hide",this.resizeHolderWidth.bind(this)),this.registerTableFunction("getCalcResults",this.getResults.bind(this)),this.registerTableFunction("recalc",this.userRecalc.bind(this)),this.resizeHolderWidth()}resizeHolderWidth(){this.topElement.style.minWidth=this.table.columnManager.headersElement.offsetWidth+"px"}tableRedraw(e){this.recalc(this.table.rowManager.activeRows),e&&this.redraw()}blockRedraw(){this.blocked=!0,this.recalcAfterBlock=!1}restoreRedraw(){this.blocked=!1,this.recalcAfterBlock&&(this.recalcAfterBlock=!1,this.recalcActiveRowsRefresh())}userRecalc(){this.recalc(this.table.rowManager.activeRows)}blockCheck(){return this.blocked&&(this.recalcAfterBlock=!0),this.blocked}visibleRows(e,t){return this.topRow&&t.unshift(this.topRow),this.botRow&&t.push(this.botRow),t}rowsUpdated(e){this.table.options.groupBy?this.recalcRowGroup(e):this.recalcActiveRows()}recalcActiveRowsRefresh(){this.table.options.groupBy&&this.table.options.dataTreeStartExpanded&&this.table.options.dataTree?this.recalcAll():this.recalcActiveRows()}recalcActiveRows(){this.recalc(this.table.rowManager.activeRows)}cellValueChanged(e){(e.column.definition.topCalc||e.column.definition.bottomCalc)&&(this.table.options.groupBy?((this.table.options.columnCalcs=="table"||this.table.options.columnCalcs=="both")&&this.recalcActiveRows(),this.table.options.columnCalcs!="table"&&this.recalcRowGroup(e.row)):this.recalcActiveRows())}initializeColumnCheck(e){(e.definition.topCalc||e.definition.bottomCalc)&&this.initializeColumn(e)}initializeColumn(e){var t=e.definition,i={topCalcParams:t.topCalcParams||{},botCalcParams:t.bottomCalcParams||{}};if(t.topCalc){switch(typeof t.topCalc){case"string":B.calculations[t.topCalc]?i.topCalc=B.calculations[t.topCalc]:console.warn("Column Calc Error - No such calculation found, ignoring: ",t.topCalc);break;case"function":i.topCalc=t.topCalc;break}i.topCalc&&(e.modules.columnCalcs=i,this.topCalcs.push(e),this.table.options.columnCalcs!="group"&&this.initializeTopRow())}if(t.bottomCalc){switch(typeof t.bottomCalc){case"string":B.calculations[t.bottomCalc]?i.botCalc=B.calculations[t.bottomCalc]:console.warn("Column Calc Error - No such calculation found, ignoring: ",t.bottomCalc);break;case"function":i.botCalc=t.bottomCalc;break}i.botCalc&&(e.modules.columnCalcs=i,this.botCalcs.push(e),this.table.options.columnCalcs!="group"&&this.initializeBottomRow())}}registerColumnField(){}removeCalcs(){var e=!1;this.topInitialized&&(this.topInitialized=!1,this.topElement.parentNode.removeChild(this.topElement),e=!0),this.botInitialized&&(this.botInitialized=!1,this.footerRemove(this.botElement),e=!0),e&&this.table.rowManager.adjustTableSize()}reinitializeCalcs(){this.topCalcs.length&&this.initializeTopRow(),this.botCalcs.length&&this.initializeBottomRow()}initializeTopRow(){var e=document.createDocumentFragment();this.topInitialized||(e.appendChild(document.createElement("br")),e.appendChild(this.topElement),this.table.columnManager.getContentsElement().insertBefore(e,this.table.columnManager.headersElement.nextSibling),this.topInitialized=!0)}initializeBottomRow(){this.botInitialized||(this.footerPrepend(this.botElement),this.botInitialized=!0)}scrollHorizontal(e){this.botInitialized&&this.botRow&&(this.botElement.scrollLeft=e)}recalc(e){var t,i;if(!this.blockCheck()&&(this.topInitialized||this.botInitialized)){if(t=this.rowsToData(e),this.topInitialized){for(this.topRow&&this.topRow.deleteCells(),i=this.generateRow("top",t),this.topRow=i;this.topElement.firstChild;)this.topElement.removeChild(this.topElement.firstChild);this.topElement.appendChild(i.getElement()),i.initialize(!0)}if(this.botInitialized){for(this.botRow&&this.botRow.deleteCells(),i=this.generateRow("bottom",t),this.botRow=i;this.botElement.firstChild;)this.botElement.removeChild(this.botElement.firstChild);this.botElement.appendChild(i.getElement()),i.initialize(!0)}this.table.rowManager.adjustTableSize(),this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layout()}}recalcRowGroup(e){this.recalcGroup(this.table.modules.groupRows.getRowGroup(e))}recalcAll(){if((this.topCalcs.length||this.botCalcs.length)&&(this.table.options.columnCalcs!=="group"&&this.recalcActiveRows(),this.table.options.groupBy&&this.table.options.columnCalcs!=="table")){var e=this.table.modules.groupRows.getChildGroups();e.forEach(t=>{this.recalcGroup(t)})}}recalcGroup(e){var t,i;this.blockCheck()||e&&e.calcs&&(e.calcs.bottom&&(t=this.rowsToData(e.rows),i=this.generateRowData("bottom",t),e.calcs.bottom.updateData(i),e.calcs.bottom.reinitialize()),e.calcs.top&&(t=this.rowsToData(e.rows),i=this.generateRowData("top",t),e.calcs.top.updateData(i),e.calcs.top.reinitialize()))}generateTopRow(e){return this.generateRow("top",this.rowsToData(e))}generateBottomRow(e){return this.generateRow("bottom",this.rowsToData(e))}rowsToData(e){var t=[],i=this.table.options.dataTree&&this.table.options.dataTreeChildColumnCalcs,s=this.table.modules.dataTree;return e.forEach(n=>{var r;t.push(n.getData()),i&&((r=n.modules.dataTree)!=null&&r.open)&&this.rowsToData(s.getFilteredTreeChildren(n)).forEach(o=>{t.push(n)})}),t}generateRow(e,t){var i=this.generateRowData(e,t),s;return this.table.modExists("mutator")&&this.table.modules.mutator.disable(),s=new S(i,this,"calc"),this.table.modExists("mutator")&&this.table.modules.mutator.enable(),s.getElement().classList.add("tabulator-calcs","tabulator-calcs-"+e),s.component=!1,s.getComponent=()=>(s.component||(s.component=new _t(s)),s.component),s.generateCells=()=>{var n=[];this.table.columnManager.columnsByIndex.forEach(r=>{this.genColumn.setField(r.getField()),this.genColumn.hozAlign=r.hozAlign,r.definition[e+"CalcFormatter"]&&this.table.modExists("format")?this.genColumn.modules.format={formatter:this.table.modules.format.getFormatter(r.definition[e+"CalcFormatter"]),params:r.definition[e+"CalcFormatterParams"]||{}}:this.genColumn.modules.format={formatter:this.table.modules.format.getFormatter("plaintext"),params:{}},this.genColumn.definition.cssClass=r.definition.cssClass;var o=new ne(this.genColumn,s);o.getElement(),o.column=r,o.setWidth(),r.cells.push(o),n.push(o),r.visible||o.hide()}),s.cells=n},s}generateRowData(e,t){var i={},s=e=="top"?this.topCalcs:this.botCalcs,n=e=="top"?"topCalc":"botCalc",r,o;return s.forEach(function(a){var h=[];a.modules.columnCalcs&&a.modules.columnCalcs[n]&&(t.forEach(function(d){h.push(a.getFieldValue(d))}),o=n+"Params",r=typeof a.modules.columnCalcs[o]=="function"?a.modules.columnCalcs[o](h,t):a.modules.columnCalcs[o],a.setFieldValue(i,a.modules.columnCalcs[n](h,t,r)))}),i}hasTopCalcs(){return!!this.topCalcs.length}hasBottomCalcs(){return!!this.botCalcs.length}redraw(){this.topRow&&this.topRow.normalizeHeight(!0),this.botRow&&this.botRow.normalizeHeight(!0)}getResults(){var e={},t;return this.table.options.groupBy&&this.table.modExists("groupRows")?(t=this.table.modules.groupRows.getGroups(!0),t.forEach(i=>{e[i.getKey()]=this.getGroupResults(i)})):e={top:this.topRow?this.topRow.getData():{},bottom:this.botRow?this.botRow.getData():{}},e}getGroupResults(e){var t=e._getSelf(),i=e.getSubGroups(),s={},n={};return i.forEach(r=>{s[r.getKey()]=this.getGroupResults(r)}),n={top:t.calcs.top?t.calcs.top.getData():{},bottom:t.calcs.bottom?t.calcs.bottom.getData():{},groups:s},n}adjustForScrollbar(e){this.botRow&&(this.table.rtl?this.botElement.style.paddingLeft=e+"px":this.botElement.style.paddingRight=e+"px")}};b(B,"moduleName","columnCalcs"),b(B,"calculations",Bt);let be=B;class Ze extends w{constructor(e){super(e),this.indent=10,this.field="",this.collapseEl=null,this.expandEl=null,this.branchEl=null,this.elementField=!1,this.startOpen=function(){},this.registerTableOption("dataTree",!1),this.registerTableOption("dataTreeFilter",!0),this.registerTableOption("dataTreeSort",!0),this.registerTableOption("dataTreeElementColumn",!1),this.registerTableOption("dataTreeBranchElement",!0),this.registerTableOption("dataTreeChildIndent",9),this.registerTableOption("dataTreeChildField","_children"),this.registerTableOption("dataTreeCollapseElement",!1),this.registerTableOption("dataTreeExpandElement",!1),this.registerTableOption("dataTreeStartExpanded",!1),this.registerTableOption("dataTreeChildColumnCalcs",!1),this.registerTableOption("dataTreeSelectPropagate",!1),this.registerComponentFunction("row","treeCollapse",this.collapseRow.bind(this)),this.registerComponentFunction("row","treeExpand",this.expandRow.bind(this)),this.registerComponentFunction("row","treeToggle",this.toggleRow.bind(this)),this.registerComponentFunction("row","getTreeParent",this.getTreeParent.bind(this)),this.registerComponentFunction("row","getTreeChildren",this.getRowChildren.bind(this)),this.registerComponentFunction("row","addTreeChild",this.addTreeChildRow.bind(this)),this.registerComponentFunction("row","isTreeExpanded",this.isRowExpanded.bind(this))}initialize(){if(this.table.options.dataTree){var e=null,t=this.table.options;switch(this.field=t.dataTreeChildField,this.indent=t.dataTreeChildIndent,this.options("movableRows")&&console.warn("The movableRows option is not available with dataTree enabled, moving of child rows could result in unpredictable behavior"),t.dataTreeBranchElement?t.dataTreeBranchElement===!0?(this.branchEl=document.createElement("div"),this.branchEl.classList.add("tabulator-data-tree-branch")):typeof t.dataTreeBranchElement=="string"?(e=document.createElement("div"),e.innerHTML=t.dataTreeBranchElement,this.branchEl=e.firstChild):this.branchEl=t.dataTreeBranchElement:(this.branchEl=document.createElement("div"),this.branchEl.classList.add("tabulator-data-tree-branch-empty")),t.dataTreeCollapseElement?typeof t.dataTreeCollapseElement=="string"?(e=document.createElement("div"),e.innerHTML=t.dataTreeCollapseElement,this.collapseEl=e.firstChild):this.collapseEl=t.dataTreeCollapseElement:(this.collapseEl=document.createElement("div"),this.collapseEl.classList.add("tabulator-data-tree-control"),this.collapseEl.tabIndex=0,this.collapseEl.innerHTML="
"),t.dataTreeExpandElement?typeof t.dataTreeExpandElement=="string"?(e=document.createElement("div"),e.innerHTML=t.dataTreeExpandElement,this.expandEl=e.firstChild):this.expandEl=t.dataTreeExpandElement:(this.expandEl=document.createElement("div"),this.expandEl.classList.add("tabulator-data-tree-control"),this.expandEl.tabIndex=0,this.expandEl.innerHTML="
"),typeof t.dataTreeStartExpanded){case"boolean":this.startOpen=function(i,s){return t.dataTreeStartExpanded};break;case"function":this.startOpen=t.dataTreeStartExpanded;break;default:this.startOpen=function(i,s){return t.dataTreeStartExpanded[s]};break}this.subscribe("row-init",this.initializeRow.bind(this)),this.subscribe("row-layout-after",this.layoutRow.bind(this)),this.subscribe("row-deleted",this.rowDelete.bind(this),0),this.subscribe("row-data-changed",this.rowDataChanged.bind(this),10),this.subscribe("cell-value-updated",this.cellValueChanged.bind(this)),this.subscribe("edit-cancelled",this.cellValueChanged.bind(this)),this.subscribe("column-moving-rows",this.columnMoving.bind(this)),this.subscribe("table-built",this.initializeElementField.bind(this)),this.subscribe("table-redrawing",this.tableRedrawing.bind(this)),this.registerDisplayHandler(this.getRows.bind(this),30)}}tableRedrawing(e){var t;e&&(t=this.table.rowManager.getRows(),t.forEach(i=>{this.reinitializeRowChildren(i)}))}initializeElementField(){var e=this.table.columnManager.getFirstVisibleColumn();this.elementField=this.table.options.dataTreeElementColumn||(e?e.field:!1)}getRowChildren(e){return this.getTreeChildren(e,!0)}columnMoving(){var e=[];return this.table.rowManager.rows.forEach(t=>{e=e.concat(this.getTreeChildren(t,!1,!0))}),e}rowDataChanged(e,t,i){this.redrawNeeded(i)&&(this.initializeRow(e),t&&(this.layoutRow(e),this.refreshData(!0)))}cellValueChanged(e){var t=e.column.getField();t===this.elementField&&this.layoutRow(e.row)}initializeRow(e){var t=e.getData()[this.field],i=Array.isArray(t),s=i||!i&&typeof t=="object"&&t!==null;!s&&e.modules.dataTree&&e.modules.dataTree.branchEl&&e.modules.dataTree.branchEl.parentNode.removeChild(e.modules.dataTree.branchEl),!s&&e.modules.dataTree&&e.modules.dataTree.controlEl&&e.modules.dataTree.controlEl.parentNode.removeChild(e.modules.dataTree.controlEl),e.modules.dataTree={index:e.modules.dataTree?e.modules.dataTree.index:0,open:s?e.modules.dataTree?e.modules.dataTree.open:this.startOpen(e.getComponent(),0):!1,controlEl:e.modules.dataTree&&s?e.modules.dataTree.controlEl:!1,branchEl:e.modules.dataTree&&s?e.modules.dataTree.branchEl:!1,parent:e.modules.dataTree?e.modules.dataTree.parent:!1,children:s}}reinitializeRowChildren(e){var t=this.getTreeChildren(e,!1,!0);t.forEach(function(i){i.reinitialize(!0)})}layoutRow(e){var t=this.elementField?e.getCell(this.elementField):e.getCells()[0],i=t.getElement(),s=e.modules.dataTree;s.branchEl&&(s.branchEl.parentNode&&s.branchEl.parentNode.removeChild(s.branchEl),s.branchEl=!1),s.controlEl&&(s.controlEl.parentNode&&s.controlEl.parentNode.removeChild(s.controlEl),s.controlEl=!1),this.generateControlElement(e,i),e.getElement().classList.add("tabulator-tree-level-"+s.index),s.index&&(this.branchEl?(s.branchEl=this.branchEl.cloneNode(!0),i.insertBefore(s.branchEl,i.firstChild),this.table.rtl?s.branchEl.style.marginRight=(s.branchEl.offsetWidth+s.branchEl.style.marginLeft)*(s.index-1)+s.index*this.indent+"px":s.branchEl.style.marginLeft=(s.branchEl.offsetWidth+s.branchEl.style.marginRight)*(s.index-1)+s.index*this.indent+"px"):this.table.rtl?i.style.paddingRight=parseInt(window.getComputedStyle(i,null).getPropertyValue("padding-right"))+s.index*this.indent+"px":i.style.paddingLeft=parseInt(window.getComputedStyle(i,null).getPropertyValue("padding-left"))+s.index*this.indent+"px")}generateControlElement(e,t){var i=e.modules.dataTree,s=i.controlEl;t=t||e.getCells()[0].getElement(),i.children!==!1&&(i.open?(i.controlEl=this.collapseEl.cloneNode(!0),i.controlEl.addEventListener("click",n=>{n.stopPropagation(),this.collapseRow(e)})):(i.controlEl=this.expandEl.cloneNode(!0),i.controlEl.addEventListener("click",n=>{n.stopPropagation(),this.expandRow(e)})),i.controlEl.addEventListener("mousedown",n=>{n.stopPropagation()}),s&&s.parentNode===t?s.parentNode.replaceChild(i.controlEl,s):t.insertBefore(i.controlEl,t.firstChild))}getRows(e){var t=[];return e.forEach((i,s)=>{var n,r;t.push(i),i instanceof S&&(i.create(),n=i.modules.dataTree,!n.index&&n.children!==!1&&(r=this.getChildren(i,!1,!0),r.forEach(o=>{o.create(),t.push(o)})))}),t}getChildren(e,t,i){var s=e.modules.dataTree,n=[],r=[];return s.children!==!1&&(s.open||t)&&(Array.isArray(s.children)||(s.children=this.generateChildren(e)),this.table.modExists("filter")&&this.table.options.dataTreeFilter?n=this.table.modules.filter.filter(s.children):n=s.children,this.table.modExists("sort")&&this.table.options.dataTreeSort&&this.table.modules.sort.sort(n,i),n.forEach(o=>{r.push(o);var a=this.getChildren(o,!1,!0);a.forEach(h=>{r.push(h)})})),r}generateChildren(e){var t=[],i=e.getData()[this.field];return Array.isArray(i)||(i=[i]),i.forEach(s=>{var n=new S(s||{},this.table.rowManager);n.create(),n.modules.dataTree.index=e.modules.dataTree.index+1,n.modules.dataTree.parent=e,n.modules.dataTree.children&&(n.modules.dataTree.open=this.startOpen(n.getComponent(),n.modules.dataTree.index)),t.push(n)}),t}expandRow(e,t){var i=e.modules.dataTree;i.children!==!1&&(i.open=!0,e.reinitialize(),this.refreshData(!0),this.dispatchExternal("dataTreeRowExpanded",e.getComponent(),e.modules.dataTree.index))}collapseRow(e){var t=e.modules.dataTree;t.children!==!1&&(t.open=!1,e.reinitialize(),this.refreshData(!0),this.dispatchExternal("dataTreeRowCollapsed",e.getComponent(),e.modules.dataTree.index))}toggleRow(e){var t=e.modules.dataTree;t.children!==!1&&(t.open?this.collapseRow(e):this.expandRow(e))}isRowExpanded(e){return e.modules.dataTree.open}getTreeParent(e){return e.modules.dataTree.parent?e.modules.dataTree.parent.getComponent():!1}getTreeParentRoot(e){return e.modules.dataTree&&e.modules.dataTree.parent?this.getTreeParentRoot(e.modules.dataTree.parent):e}getFilteredTreeChildren(e){var t=e.modules.dataTree,i=[],s;return t.children&&(Array.isArray(t.children)||(t.children=this.generateChildren(e)),this.table.modExists("filter")&&this.table.options.dataTreeFilter?s=this.table.modules.filter.filter(t.children):s=t.children,s.forEach(n=>{n instanceof S&&i.push(n)})),i}rowDelete(e){var t=e.modules.dataTree.parent,i;t&&(i=this.findChildIndex(e,t),i!==!1&&t.data[this.field].splice(i,1),t.data[this.field].length||delete t.data[this.field],this.initializeRow(t),this.layoutRow(t)),this.refreshData(!0)}addTreeChildRow(e,t,i,s){var n=!1;typeof t=="string"&&(t=JSON.parse(t)),Array.isArray(e.data[this.field])||(e.data[this.field]=[],e.modules.dataTree.open=this.startOpen(e.getComponent(),e.modules.dataTree.index)),typeof s<"u"&&(n=this.findChildIndex(s,e),n!==!1&&e.data[this.field].splice(i?n:n+1,0,t)),n===!1&&(i?e.data[this.field].unshift(t):e.data[this.field].push(t)),this.initializeRow(e),this.layoutRow(e),this.refreshData(!0)}findChildIndex(e,t){var i=!1;return typeof e=="object"?e instanceof S?i=e.data:e instanceof oe?i=e._getSelf().data:typeof HTMLElement<"u"&&e instanceof HTMLElement?t.modules.dataTree&&(i=t.modules.dataTree.children.find(s=>s instanceof S?s.element===e:!1),i&&(i=i.data)):e===null&&(i=!1):typeof e>"u"?i=!1:i=t.data[this.field].find(s=>s.data[this.table.options.index]==e),i&&(Array.isArray(t.data[this.field])&&(i=t.data[this.field].indexOf(i)),i==-1&&(i=!1)),i}getTreeChildren(e,t,i){var s=e.modules.dataTree,n=[];return s&&s.children&&(Array.isArray(s.children)||(s.children=this.generateChildren(e)),s.children.forEach(r=>{r instanceof S&&(n.push(t?r.getComponent():r),i&&this.getTreeChildren(r,t,i).forEach(o=>{n.push(o)}))})),n}getChildField(){return this.field}redrawNeeded(e){return(this.field?typeof e[this.field]<"u":!1)||(this.elementField?typeof e[this.elementField]<"u":!1)}}b(Ze,"moduleName","dataTree");function Vt(l,e={},t){var i=e.delimiter?e.delimiter:",",s=[],n=[];l.forEach(r=>{var o=[];switch(r.type){case"group":console.warn("Download Warning - CSV downloader cannot process row groups");break;case"calc":console.warn("Download Warning - CSV downloader cannot process column calculations");break;case"header":r.columns.forEach((a,h)=>{a&&a.depth===1&&(n[h]=typeof a.value>"u"||a.value===null?"":'"'+String(a.value).split('"').join('""')+'"')});break;case"row":r.columns.forEach(a=>{if(a){switch(typeof a.value){case"object":a.value=a.value!==null?JSON.stringify(a.value):"";break;case"undefined":a.value="";break}o.push('"'+String(a.value).split('"').join('""')+'"')}}),s.push(o.join(i));break}}),n.length&&s.unshift(n.join(i)),s=s.join(` +`),e.bom&&(s="\uFEFF"+s),t(s,"text/csv")}function It(l,e,t){var i=[];l.forEach(s=>{var n={};switch(s.type){case"header":break;case"group":console.warn("Download Warning - JSON downloader cannot process row groups");break;case"calc":console.warn("Download Warning - JSON downloader cannot process column calculations");break;case"row":s.columns.forEach(r=>{r&&(n[r.component.getTitleDownload()||r.component.getField()]=r.value)}),i.push(n);break}}),i=JSON.stringify(i,null," "),t(i,"application/json")}function Nt(l,e={},t){var i=[],s=[],n={},r=e.rowGroupStyles||{fontStyle:"bold",fontSize:12,cellPadding:6,fillColor:220},o=e.rowCalcStyles||{fontStyle:"bold",fontSize:10,cellPadding:4,fillColor:232},a=e.jsPDF||{},h=e.title?e.title:"";a.orientation||(a.orientation=e.orientation||"landscape"),a.unit||(a.unit="pt"),l.forEach(c=>{switch(c.type){case"header":i.push(d(c));break;case"group":s.push(d(c,r));break;case"calc":s.push(d(c,o));break;case"row":s.push(d(c));break}});function d(c,f){var g=[];return c.columns.forEach(p=>{var v;if(p){switch(typeof p.value){case"object":p.value=p.value!==null?JSON.stringify(p.value):"";break;case"undefined":p.value="";break}v={content:p.value,colSpan:p.width,rowSpan:p.height},f&&(v.styles=f),g.push(v)}}),g}var u=new jspdf.jsPDF(a);e.autoTable&&(typeof e.autoTable=="function"?n=e.autoTable(u)||{}:n=e.autoTable),h&&(n.didDrawPage=function(c){u.text(h,40,30)}),n.head=i,n.body=s,u.autoTable(n),e.documentProcessing&&e.documentProcessing(u),t(u.output("arraybuffer"),"application/pdf")}function Wt(l,e,t){var i=this,s=e.sheetName||"Sheet1",n=XLSX.utils.book_new(),r=new M(this),o="compress"in e?e.compress:!0,a=e.writeOptions||{bookType:"xlsx",bookSST:!0,compression:o},h;a.type="binary",n.SheetNames=[],n.Sheets={};function d(){var f=[],g=[],p={},v={s:{c:0,r:0},e:{c:l[0]?l[0].columns.reduce((m,C)=>m+(C&&C.width?C.width:1),0):0,r:l.length}};return l.forEach((m,C)=>{var T=[];m.columns.forEach(function(y,k){y?(T.push(!(y.value instanceof Date)&&typeof y.value=="object"?JSON.stringify(y.value):y.value),(y.width>1||y.height>-1)&&(y.height>1||y.width>1)&&g.push({s:{r:C,c:k},e:{r:C+y.height-1,c:k+y.width-1}})):T.push("")}),f.push(T)}),XLSX.utils.sheet_add_aoa(p,f),p["!ref"]=XLSX.utils.encode_range(v),g.length&&(p["!merges"]=g),p}if(e.sheetOnly){t(d());return}if(e.sheets)for(var u in e.sheets)e.sheets[u]===!0?(n.SheetNames.push(u),n.Sheets[u]=d()):(n.SheetNames.push(u),r.commsSend(e.sheets[u],"download","intercept",{type:"xlsx",options:{sheetOnly:!0},active:i.active,intercept:function(f){n.Sheets[u]=f}}));else n.SheetNames.push(s),n.Sheets[s]=d();e.documentProcessing&&(n=e.documentProcessing(n));function c(f){for(var g=new ArrayBuffer(f.length),p=new Uint8Array(g),v=0;v!=f.length;++v)p[v]=f.charCodeAt(v)&255;return g}h=XLSX.write(n,a),t(c(h),"application/octet-stream")}function Gt(l,e,t){this.modExists("export",!0)&&t(this.modules.export.generateHTMLTable(l),"text/html")}function jt(l,e,t){const i=[];l.forEach(s=>{const n={};switch(s.type){case"header":break;case"group":console.warn("Download Warning - JSON downloader cannot process row groups");break;case"calc":console.warn("Download Warning - JSON downloader cannot process column calculations");break;case"row":s.columns.forEach(r=>{r&&(n[r.component.getTitleDownload()||r.component.getField()]=r.value)}),i.push(JSON.stringify(n));break}}),t(i.join(` +`),"application/x-ndjson")}var Ut={csv:Vt,json:It,jsonLines:jt,pdf:Nt,xlsx:Wt,html:Gt};const q=class q extends w{constructor(e){super(e),this.registerTableOption("downloadEncoder",function(t,i){return new Blob([t],{type:i})}),this.registerTableOption("downloadConfig",{}),this.registerTableOption("downloadRowRange","active"),this.registerColumnOption("download"),this.registerColumnOption("titleDownload")}initialize(){this.deprecatedOptionsCheck(),this.registerTableFunction("download",this.download.bind(this)),this.registerTableFunction("downloadToTab",this.downloadToTab.bind(this))}deprecatedOptionsCheck(){}downloadToTab(e,t,i,s){this.download(e,t,i,s,!0)}download(e,t,i,s,n){var r=!1;function o(h,d){n?n===!0?this.triggerDownload(h,d,e,t,!0):n(h):this.triggerDownload(h,d,e,t)}if(typeof e=="function"?r=e:q.downloaders[e]?r=q.downloaders[e]:console.warn("Download Error - No such download type found: ",e),r){var a=this.generateExportList(s);r.call(this.table,a,i||{},o.bind(this))}}generateExportList(e){var t=this.table.modules.export.generateExportList(this.table.options.downloadConfig,!1,e||this.table.options.downloadRowRange,"download"),i=this.table.options.groupHeaderDownload;return i&&!Array.isArray(i)&&(i=[i]),t.forEach(s=>{var n;s.type==="group"&&(n=s.columns[0],i&&i[s.indent]&&(n.value=i[s.indent](n.value,s.component._group.getRowCount(),s.component._group.getData(),s.component)))}),t}triggerDownload(e,t,i,s,n){var r=document.createElement("a"),o=this.table.options.downloadEncoder(e,t);o&&(n?window.open(window.URL.createObjectURL(o)):(s=s||"Tabulator."+(typeof i=="function"?"txt":i),navigator.msSaveOrOpenBlob?navigator.msSaveOrOpenBlob(o,s):(r.setAttribute("href",window.URL.createObjectURL(o)),r.setAttribute("download",s),r.style.display="none",document.body.appendChild(r),r.click(),document.body.removeChild(r))),this.dispatchExternal("downloadComplete"))}commsReceived(e,t,i){switch(t){case"intercept":this.download(i.type,"",i.options,i.active,i.intercept);break}}};b(q,"moduleName","download"),b(q,"downloaders",Ut);let ve=q;function ae(l,e){var t=e.mask,i=typeof e.maskLetterChar<"u"?e.maskLetterChar:"A",s=typeof e.maskNumberChar<"u"?e.maskNumberChar:"9",n=typeof e.maskWildcardChar<"u"?e.maskWildcardChar:"*";function r(o){var a=t[o];typeof a<"u"&&a!==n&&a!==i&&a!==s&&(l.value=l.value+""+a,r(o+1))}l.addEventListener("keydown",o=>{var a=l.value.length,h=o.key;if(o.keyCode>46&&!o.ctrlKey&&!o.metaKey){if(a>=t.length)return o.preventDefault(),o.stopPropagation(),!1;switch(t[a]){case i:if(h.toUpperCase()==h.toLowerCase())return o.preventDefault(),o.stopPropagation(),!1;break;case s:if(isNaN(h))return o.preventDefault(),o.stopPropagation(),!1;break;case n:break;default:if(h!==t[a])return o.preventDefault(),o.stopPropagation(),!1}}}),l.addEventListener("keyup",o=>{o.keyCode>46&&e.maskAutoFill&&r(l.value.length)}),l.placeholder||(l.placeholder=t),e.maskAutoFill&&r(l.value.length)}function Xt(l,e,t,i,s){var n=l.getValue(),r=document.createElement("input");if(r.setAttribute("type",s.search?"search":"text"),r.style.padding="4px",r.style.width="100%",r.style.boxSizing="border-box",s.elementAttributes&&typeof s.elementAttributes=="object")for(let a in s.elementAttributes)a.charAt(0)=="+"?(a=a.slice(1),r.setAttribute(a,r.getAttribute(a)+s.elementAttributes["+"+a])):r.setAttribute(a,s.elementAttributes[a]);r.value=typeof n<"u"?n:"",e(function(){l.getType()==="cell"&&(r.focus({preventScroll:!0}),r.style.height="100%",s.selectContents&&r.select())});function o(a){(n===null||typeof n>"u")&&r.value!==""||r.value!==n?t(r.value)&&(n=r.value):i()}return r.addEventListener("change",o),r.addEventListener("blur",o),r.addEventListener("keydown",function(a){switch(a.keyCode){case 13:o();break;case 27:i();break;case 35:case 36:a.stopPropagation();break}}),s.mask&&ae(r,s),r}function Jt(l,e,t,i,s){var n=l.getValue(),r=s.verticalNavigation||"hybrid",o=String(n!==null&&typeof n<"u"?n:""),a=document.createElement("textarea"),h=0;if(a.style.display="block",a.style.padding="2px",a.style.height="100%",a.style.width="100%",a.style.boxSizing="border-box",a.style.whiteSpace="pre-wrap",a.style.resize="none",s.elementAttributes&&typeof s.elementAttributes=="object")for(let u in s.elementAttributes)u.charAt(0)=="+"?(u=u.slice(1),a.setAttribute(u,a.getAttribute(u)+s.elementAttributes["+"+u])):a.setAttribute(u,s.elementAttributes[u]);a.value=o,e(function(){l.getType()==="cell"&&(a.focus({preventScroll:!0}),a.style.height="100%",a.scrollHeight,a.style.height=a.scrollHeight+"px",l.getRow().normalizeHeight(),s.selectContents&&a.select())});function d(u){(n===null||typeof n>"u")&&a.value!==""||a.value!==n?(t(a.value)&&(n=a.value),setTimeout(function(){l.getRow().normalizeHeight()},300)):i()}return a.addEventListener("change",d),a.addEventListener("blur",d),a.addEventListener("keyup",function(){a.style.height="";var u=a.scrollHeight;a.style.height=u+"px",u!=h&&(h=u,l.getRow().normalizeHeight())}),a.addEventListener("keydown",function(u){switch(u.keyCode){case 13:u.shiftKey&&s.shiftEnterSubmit&&d();break;case 27:i();break;case 38:(r=="editor"||r=="hybrid"&&a.selectionStart)&&(u.stopImmediatePropagation(),u.stopPropagation());break;case 40:(r=="editor"||r=="hybrid"&&a.selectionStart!==a.value.length)&&(u.stopImmediatePropagation(),u.stopPropagation());break;case 35:case 36:u.stopPropagation();break}}),s.mask&&ae(a,s),a}function Kt(l,e,t,i,s){var n=l.getValue(),r=s.verticalNavigation||"editor",o=document.createElement("input");if(o.setAttribute("type","number"),typeof s.max<"u"&&o.setAttribute("max",s.max),typeof s.min<"u"&&o.setAttribute("min",s.min),typeof s.step<"u"&&o.setAttribute("step",s.step),o.style.padding="4px",o.style.width="100%",o.style.boxSizing="border-box",s.elementAttributes&&typeof s.elementAttributes=="object")for(let d in s.elementAttributes)d.charAt(0)=="+"?(d=d.slice(1),o.setAttribute(d,o.getAttribute(d)+s.elementAttributes["+"+d])):o.setAttribute(d,s.elementAttributes[d]);o.value=n;var a=function(d){h()};e(function(){l.getType()==="cell"&&(o.removeEventListener("blur",a),o.focus({preventScroll:!0}),o.style.height="100%",o.addEventListener("blur",a),s.selectContents&&o.select())});function h(){var d=o.value;!isNaN(d)&&d!==""&&(d=Number(d)),d!==n?t(d)&&(n=d):i()}return o.addEventListener("keydown",function(d){switch(d.keyCode){case 13:h();break;case 27:i();break;case 38:case 40:r=="editor"&&(d.stopImmediatePropagation(),d.stopPropagation());break;case 35:case 36:d.stopPropagation();break}}),s.mask&&ae(o,s),o}function qt(l,e,t,i,s){var n=l.getValue(),r=document.createElement("input");if(r.setAttribute("type","range"),typeof s.max<"u"&&r.setAttribute("max",s.max),typeof s.min<"u"&&r.setAttribute("min",s.min),typeof s.step<"u"&&r.setAttribute("step",s.step),r.style.padding="4px",r.style.width="100%",r.style.boxSizing="border-box",s.elementAttributes&&typeof s.elementAttributes=="object")for(let a in s.elementAttributes)a.charAt(0)=="+"?(a=a.slice(1),r.setAttribute(a,r.getAttribute(a)+s.elementAttributes["+"+a])):r.setAttribute(a,s.elementAttributes[a]);r.value=n,e(function(){l.getType()==="cell"&&(r.focus({preventScroll:!0}),r.style.height="100%")});function o(){var a=r.value;!isNaN(a)&&a!==""&&(a=Number(a)),a!=n?t(a)&&(n=a):i()}return r.addEventListener("blur",function(a){o()}),r.addEventListener("keydown",function(a){switch(a.keyCode){case 13:o();break;case 27:i();break}}),r}function Yt(l,e,t,i,s){var n=s.format,r=s.verticalNavigation||"editor",o=n?window.DateTime||luxon.DateTime:null,a=l.getValue(),h=document.createElement("input");function d(c){var f;return o.isDateTime(c)?f=c:n==="iso"?f=o.fromISO(String(c)):f=o.fromFormat(String(c),n),f.toFormat("yyyy-MM-dd")}if(h.type="date",h.style.padding="4px",h.style.width="100%",h.style.boxSizing="border-box",s.max&&h.setAttribute("max",n?d(s.max):s.max),s.min&&h.setAttribute("min",n?d(s.min):s.min),s.elementAttributes&&typeof s.elementAttributes=="object")for(let c in s.elementAttributes)c.charAt(0)=="+"?(c=c.slice(1),h.setAttribute(c,h.getAttribute(c)+s.elementAttributes["+"+c])):h.setAttribute(c,s.elementAttributes[c]);a=typeof a<"u"?a:"",n&&(o?a=d(a):console.error("Editor Error - 'date' editor 'format' param is dependant on luxon.js")),h.value=a,e(function(){l.getType()==="cell"&&(h.focus({preventScroll:!0}),h.style.height="100%",s.selectContents&&h.select())});function u(){var c=h.value,f;if((a===null||typeof a>"u")&&c!==""||c!==a){if(c&&n)switch(f=o.fromFormat(String(c),"yyyy-MM-dd"),n){case!0:c=f;break;case"iso":c=f.toISO();break;default:c=f.toFormat(n)}t(c)&&(a=h.value)}else i()}return h.addEventListener("blur",function(c){(c.relatedTarget||c.rangeParent||c.explicitOriginalTarget!==h)&&u()}),h.addEventListener("keydown",function(c){switch(c.keyCode){case 13:u();break;case 27:i();break;case 35:case 36:c.stopPropagation();break;case 38:case 40:r=="editor"&&(c.stopImmediatePropagation(),c.stopPropagation());break}}),h}function $t(l,e,t,i,s){var n=s.format,r=s.verticalNavigation||"editor",o=n?window.DateTime||luxon.DateTime:null,a,h=l.getValue(),d=document.createElement("input");if(d.type="time",d.style.padding="4px",d.style.width="100%",d.style.boxSizing="border-box",s.elementAttributes&&typeof s.elementAttributes=="object")for(let c in s.elementAttributes)c.charAt(0)=="+"?(c=c.slice(1),d.setAttribute(c,d.getAttribute(c)+s.elementAttributes["+"+c])):d.setAttribute(c,s.elementAttributes[c]);h=typeof h<"u"?h:"",n&&(o?(o.isDateTime(h)?a=h:n==="iso"?a=o.fromISO(String(h)):a=o.fromFormat(String(h),n),h=a.toFormat("HH:mm")):console.error("Editor Error - 'date' editor 'format' param is dependant on luxon.js")),d.value=h,e(function(){l.getType()=="cell"&&(d.focus({preventScroll:!0}),d.style.height="100%",s.selectContents&&d.select())});function u(){var c=d.value,f;if((h===null||typeof h>"u")&&c!==""||c!==h){if(c&&n)switch(f=o.fromFormat(String(c),"hh:mm"),n){case!0:c=f;break;case"iso":c=f.toISO();break;default:c=f.toFormat(n)}t(c)&&(h=d.value)}else i()}return d.addEventListener("blur",function(c){(c.relatedTarget||c.rangeParent||c.explicitOriginalTarget!==d)&&u()}),d.addEventListener("keydown",function(c){switch(c.keyCode){case 13:u();break;case 27:i();break;case 35:case 36:c.stopPropagation();break;case 38:case 40:r=="editor"&&(c.stopImmediatePropagation(),c.stopPropagation());break}}),d}function Qt(l,e,t,i,s){var n=s.format,r=s.verticalNavigation||"editor",o=n?window.DateTime||luxon.DateTime:null,a,h=l.getValue(),d=document.createElement("input");if(d.type="datetime-local",d.style.padding="4px",d.style.width="100%",d.style.boxSizing="border-box",s.elementAttributes&&typeof s.elementAttributes=="object")for(let c in s.elementAttributes)c.charAt(0)=="+"?(c=c.slice(1),d.setAttribute(c,d.getAttribute(c)+s.elementAttributes["+"+c])):d.setAttribute(c,s.elementAttributes[c]);h=typeof h<"u"?h:"",n&&(o?(o.isDateTime(h)?a=h:n==="iso"?a=o.fromISO(String(h)):a=o.fromFormat(String(h),n),h=a.toFormat("yyyy-MM-dd")+"T"+a.toFormat("HH:mm")):console.error("Editor Error - 'date' editor 'format' param is dependant on luxon.js")),d.value=h,e(function(){l.getType()==="cell"&&(d.focus({preventScroll:!0}),d.style.height="100%",s.selectContents&&d.select())});function u(){var c=d.value,f;if((h===null||typeof h>"u")&&c!==""||c!==h){if(c&&n)switch(f=o.fromISO(String(c)),n){case!0:c=f;break;case"iso":c=f.toISO();break;default:c=f.toFormat(n)}t(c)&&(h=d.value)}else i()}return d.addEventListener("blur",function(c){(c.relatedTarget||c.rangeParent||c.explicitOriginalTarget!==d)&&u()}),d.addEventListener("keydown",function(c){switch(c.keyCode){case 13:u();break;case 27:i();break;case 35:case 36:c.stopPropagation();break;case 38:case 40:r=="editor"&&(c.stopImmediatePropagation(),c.stopPropagation());break}}),d}let Zt=class{constructor(e,t,i,s,n,r){this.edit=e,this.table=e.table,this.cell=t,this.params=this._initializeParams(r),this.data=[],this.displayItems=[],this.currentItems=[],this.focusedItem=null,this.input=this._createInputElement(),this.listEl=this._createListElement(),this.initialValues=null,this.isFilter=t.getType()==="header",this.filterTimeout=null,this.filtered=!1,this.typing=!1,this.values=[],this.popup=null,this.listIteration=0,this.lastAction="",this.filterTerm="",this.blurable=!0,this.actions={success:s,cancel:n},this._deprecatedOptionsCheck(),this._initializeValue(),i(this._onRendered.bind(this))}_deprecatedOptionsCheck(){}_initializeValue(){var e=this.cell.getValue();typeof e>"u"&&typeof this.params.defaultValue<"u"&&(e=this.params.defaultValue),this.initialValues=this.params.multiselect?e:[e],this.isFilter&&(this.input.value=this.initialValues?this.initialValues.join(","):"",this.headerFilterInitialListGen())}_onRendered(){var e=this.cell.getElement();function t(i){i.stopPropagation()}this.isFilter||(this.input.style.height="100%",this.input.focus({preventScroll:!0})),e.addEventListener("click",t),setTimeout(()=>{e.removeEventListener("click",t)},1e3),this.input.addEventListener("mousedown",this._preventPopupBlur.bind(this))}_createListElement(){var e=document.createElement("div");return e.classList.add("tabulator-edit-list"),e.addEventListener("mousedown",this._preventBlur.bind(this)),e.addEventListener("keydown",this._inputKeyDown.bind(this)),e}_setListWidth(){var e=this.isFilter?this.input:this.cell.getElement();this.listEl.style.minWidth=e.offsetWidth+"px",this.params.maxWidth&&(this.params.maxWidth===!0?this.listEl.style.maxWidth=e.offsetWidth+"px":typeof this.params.maxWidth=="number"?this.listEl.style.maxWidth=this.params.maxWidth+"px":this.listEl.style.maxWidth=this.params.maxWidth)}_createInputElement(){var e=this.params.elementAttributes,t=document.createElement("input");if(t.setAttribute("type",this.params.clearable?"search":"text"),t.style.padding="4px",t.style.width="100%",t.style.boxSizing="border-box",this.params.autocomplete||(t.style.cursor="default",t.style.caretColor="transparent"),e&&typeof e=="object")for(let i in e)i.charAt(0)=="+"?(i=i.slice(1),t.setAttribute(i,t.getAttribute(i)+e["+"+i])):t.setAttribute(i,e[i]);return this.params.mask&&ae(t,this.params),this._bindInputEvents(t),t}_initializeParams(e){var t=["values","valuesURL","valuesLookup"],i;return e=Object.assign({},e),e.verticalNavigation=e.verticalNavigation||"editor",e.placeholderLoading=typeof e.placeholderLoading>"u"?"Searching ...":e.placeholderLoading,e.placeholderEmpty=typeof e.placeholderEmpty>"u"?"No Results Found":e.placeholderEmpty,e.filterDelay=typeof e.filterDelay>"u"?300:e.filterDelay,e.emptyValue=Object.keys(e).includes("emptyValue")?e.emptyValue:"",i=Object.keys(e).filter(s=>t.includes(s)).length,i?i>1&&console.warn("list editor config error - only one of the values, valuesURL, or valuesLookup options can be set on the same editor"):console.warn("list editor config error - either the values, valuesURL, or valuesLookup option must be set"),e.autocomplete?e.multiselect&&(e.multiselect=!1,console.warn("list editor config error - multiselect option is not available when autocomplete is enabled")):(e.freetext&&(e.freetext=!1,console.warn("list editor config error - freetext option is only available when autocomplete is enabled")),e.filterFunc&&(e.filterFunc=!1,console.warn("list editor config error - filterFunc option is only available when autocomplete is enabled")),e.filterRemote&&(e.filterRemote=!1,console.warn("list editor config error - filterRemote option is only available when autocomplete is enabled")),e.mask&&(e.mask=!1,console.warn("list editor config error - mask option is only available when autocomplete is enabled")),e.allowEmpty&&(e.allowEmpty=!1,console.warn("list editor config error - allowEmpty option is only available when autocomplete is enabled")),e.listOnEmpty&&(e.listOnEmpty=!1,console.warn("list editor config error - listOnEmpty option is only available when autocomplete is enabled"))),e.filterRemote&&!(typeof e.valuesLookup=="function"||e.valuesURL)&&(e.filterRemote=!1,console.warn("list editor config error - filterRemote option should only be used when values list is populated from a remote source")),e}_bindInputEvents(e){e.addEventListener("focus",this._inputFocus.bind(this)),e.addEventListener("click",this._inputClick.bind(this)),e.addEventListener("blur",this._inputBlur.bind(this)),e.addEventListener("keydown",this._inputKeyDown.bind(this)),e.addEventListener("search",this._inputSearch.bind(this)),this.params.autocomplete&&e.addEventListener("keyup",this._inputKeyUp.bind(this))}_inputFocus(e){this.rebuildOptionsList()}_filter(){this.params.filterRemote?(clearTimeout(this.filterTimeout),this.filterTimeout=setTimeout(()=>{this.rebuildOptionsList()},this.params.filterDelay)):this._filterList()}_inputClick(e){e.stopPropagation()}_inputBlur(e){this.blurable&&(this.popup?this.popup.hide():this._resolveValue(!0))}_inputSearch(){this._clearChoices()}_inputKeyDown(e){switch(e.keyCode){case 38:this._keyUp(e);break;case 40:this._keyDown(e);break;case 37:case 39:this._keySide(e);break;case 13:this._keyEnter();break;case 27:this._keyEsc();break;case 36:case 35:this._keyHomeEnd(e);break;case 9:this._keyTab(e);break;default:this._keySelectLetter(e)}}_inputKeyUp(e){switch(e.keyCode){case 38:case 37:case 39:case 40:case 13:case 27:break;default:this._keyAutoCompLetter(e)}}_preventPopupBlur(){this.popup&&this.popup.blockHide(),setTimeout(()=>{this.popup&&this.popup.restoreHide()},10)}_preventBlur(){this.blurable=!1,setTimeout(()=>{this.blurable=!0},10)}_keyTab(e){this.params.autocomplete&&this.lastAction==="typing"?this._resolveValue(!0):this.focusedItem&&this._chooseItem(this.focusedItem,!0)}_keyUp(e){var t=this.displayItems.indexOf(this.focusedItem);(this.params.verticalNavigation=="editor"||this.params.verticalNavigation=="hybrid"&&t)&&(e.stopImmediatePropagation(),e.stopPropagation(),e.preventDefault(),t>0&&this._focusItem(this.displayItems[t-1]))}_keyDown(e){var t=this.displayItems.indexOf(this.focusedItem);(this.params.verticalNavigation=="editor"||this.params.verticalNavigation=="hybrid"&&t=38&&e.keyCode<=90&&this._scrollToValue(e.keyCode))}_keyAutoCompLetter(e){this._filter(),this.lastAction="typing",this.typing=!0}_scrollToValue(e){clearTimeout(this.filterTimeout);var t=String.fromCharCode(e).toLowerCase();this.filterTerm+=t.toLowerCase();var i=this.displayItems.find(s=>typeof s.label<"u"&&s.label.toLowerCase().startsWith(this.filterTerm));i&&this._focusItem(i),this.filterTimeout=setTimeout(()=>{this.filterTerm=""},800)}_focusItem(e){this.lastAction="focus",this.focusedItem&&this.focusedItem.element&&this.focusedItem.element.classList.remove("focused"),this.focusedItem=e,e&&e.element&&(e.element.classList.add("focused"),e.element.scrollIntoView({behavior:"smooth",block:"nearest",inline:"start"}))}headerFilterInitialListGen(){this._generateOptions(!0)}rebuildOptionsList(){this._generateOptions().then(this._sortOptions.bind(this)).then(this._buildList.bind(this)).then(this._showList.bind(this)).catch(e=>{Number.isInteger(e)||console.error("List generation error",e)})}_filterList(){this._buildList(this._filterOptions()),this._showList()}_generateOptions(e){var t=[],i=++this.listIteration;return this.filtered=!1,this.params.values?t=this.params.values:this.params.valuesURL?t=this._ajaxRequest(this.params.valuesURL,this.input.value):typeof this.params.valuesLookup=="function"?t=this.params.valuesLookup(this.cell,this.input.value):this.params.valuesLookup&&(t=this._uniqueColumnValues(this.params.valuesLookupField)),t instanceof Promise?(e||this._addPlaceholder(this.params.placeholderLoading),t.then().then(s=>this.listIteration===i?this._parseList(s):Promise.reject(i))):Promise.resolve(this._parseList(t))}_addPlaceholder(e){var t=document.createElement("div");typeof e=="function"&&(e=e(this.cell.getComponent(),this.listEl)),e&&(this._clearList(),e instanceof HTMLElement?t=e:(t.classList.add("tabulator-edit-list-placeholder"),t.innerHTML=e),this.listEl.appendChild(t),this._showList())}_ajaxRequest(e,t){var i=this.params.filterRemote?{term:t}:{};return e=qe(e,{},i),fetch(e).then(s=>s.ok?s.json().catch(n=>(console.warn("List Ajax Load Error - Invalid JSON returned",n),Promise.reject(n))):(console.error("List Ajax Load Error - Connection Error: "+s.status,s.statusText),Promise.reject(s))).catch(s=>(console.error("List Ajax Load Error - Connection Error: ",s),Promise.reject(s)))}_uniqueColumnValues(e){var t={},i=this.table.getData(this.params.valuesLookup),s;return e?s=this.table.columnManager.getColumnByField(e):s=this.cell.getColumn()._getSelf(),s?i.forEach(n=>{var r=s.getFieldValue(n);r!==null&&typeof r<"u"&&r!==""&&(t[r]=!0)}):(console.warn("unable to find matching column to create select lookup list:",e),t=[]),Object.keys(t)}_parseList(e){var t=[];return Array.isArray(e)||(e=Object.entries(e).map(([i,s])=>({label:s,value:i}))),e.forEach(i=>{typeof i!="object"&&(i={label:i,value:i}),this._parseListItem(i,t,0)}),!this.currentItems.length&&this.params.freetext&&(this.input.value=this.initialValues,this.typing=!0,this.lastAction="typing"),this.data=t,t}_parseListItem(e,t,i){var s={};e.options?s=this._parseListGroup(e,i+1):(s={label:e.label,value:e.value,itemParams:e.itemParams,elementAttributes:e.elementAttributes,element:!1,selected:!1,visible:!0,level:i,original:e},this.initialValues&&this.initialValues.indexOf(e.value)>-1&&this._chooseItem(s,!0)),t.push(s)}_parseListGroup(e,t){var i={label:e.label,group:!0,itemParams:e.itemParams,elementAttributes:e.elementAttributes,element:!1,visible:!0,level:t,options:[],original:e};return e.options.forEach(s=>{this._parseListItem(s,i.options,t)}),i}_sortOptions(e){var t;return this.params.sort&&(t=typeof this.params.sort=="function"?this.params.sort:this._defaultSortFunction.bind(this),this._sortGroup(t,e)),e}_sortGroup(e,t){t.sort((i,s)=>e(i.label,s.label,i.value,s.value,i.original,s.original)),t.forEach(i=>{i.group&&this._sortGroup(e,i.options)})}_defaultSortFunction(e,t){var i,s,n,r,o=0,a,h=/(\d+)|(\D+)/g,d=/\d/,u=0;if(this.params.sort==="desc"&&([e,t]=[t,e]),!e&&e!==0)u=!t&&t!==0?0:-1;else if(!t&&t!==0)u=1;else{if(isFinite(e)&&isFinite(t))return e-t;if(i=String(e).toLowerCase(),s=String(t).toLowerCase(),i===s)return 0;if(!(d.test(i)&&d.test(s)))return i>s?1:-1;for(i=i.match(h),s=s.match(h),a=i.length>s.length?s.length:i.length;or?1:-1;return i.length>s.length}return u}_filterOptions(){var e=this.params.filterFunc||this._defaultFilterFunc,t=this.input.value;return t?(this.filtered=!0,this.data.forEach(i=>{this._filterItem(e,t,i)})):this.filtered=!1,this.data}_filterItem(e,t,i){var s=!1;return i.group?(i.options.forEach(n=>{this._filterItem(e,t,n)&&(s=!0)}),i.visible=s):i.visible=e(t,i.label,i.value,i.original),i.visible}_defaultFilterFunc(e,t,i,s){return e=String(e).toLowerCase(),t!==null&&typeof t<"u"&&(String(t).toLowerCase().indexOf(e)>-1||String(i).toLowerCase().indexOf(e)>-1)}_clearList(){for(;this.listEl.firstChild;)this.listEl.removeChild(this.listEl.firstChild);this.displayItems=[]}_buildList(e){this._clearList(),e.forEach(t=>{this._buildItem(t)}),this.displayItems.length||this._addPlaceholder(this.params.placeholderEmpty)}_buildItem(e){var t=e.element,i;if(!this.filtered||e.visible){if(!t){if(t=document.createElement("div"),t.tabIndex=0,i=this.params.itemFormatter?this.params.itemFormatter(e.label,e.value,e.original,t):e.label,i instanceof HTMLElement?t.appendChild(i):t.innerHTML=i,e.group?t.classList.add("tabulator-edit-list-group"):t.classList.add("tabulator-edit-list-item"),t.classList.add("tabulator-edit-list-group-level-"+e.level),e.elementAttributes&&typeof e.elementAttributes=="object")for(let s in e.elementAttributes)s.charAt(0)=="+"?(s=s.slice(1),t.setAttribute(s,this.input.getAttribute(s)+e.elementAttributes["+"+s])):t.setAttribute(s,e.elementAttributes[s]);e.group?t.addEventListener("click",this._groupClick.bind(this,e)):t.addEventListener("click",this._itemClick.bind(this,e)),t.addEventListener("mousedown",this._preventBlur.bind(this)),e.element=t}this._styleItem(e),this.listEl.appendChild(t),e.group?e.options.forEach(s=>{this._buildItem(s)}):this.displayItems.push(e)}}_showList(){var e=this.popup&&this.popup.isVisible();if(this.input.parentNode){if(this.params.autocomplete&&this.input.value===""&&!this.params.listOnEmpty){this.popup&&this.popup.hide(!0);return}this._setListWidth(),this.popup||(this.popup=this.edit.popup(this.listEl)),this.popup.show(this.cell.getElement(),"bottom"),e||setTimeout(()=>{this.popup.hideOnBlur(this._resolveValue.bind(this,!0))},10)}}_styleItem(e){e&&e.element&&(e.selected?e.element.classList.add("active"):e.element.classList.remove("active"))}_itemClick(e,t){t.stopPropagation(),this._chooseItem(e)}_groupClick(e,t){t.stopPropagation()}_cancel(){this.popup.hide(!0),this.actions.cancel()}_clearChoices(){this.typing=!0,this.currentItems.forEach(e=>{e.selected=!1,this._styleItem(e)}),this.currentItems=[],this.focusedItem=null}_chooseItem(e,t){var i;this.typing=!1,this.params.multiselect?(i=this.currentItems.indexOf(e),i>-1?(this.currentItems.splice(i,1),e.selected=!1):(this.currentItems.push(e),e.selected=!0),this.input.value=this.currentItems.map(s=>s.label).join(","),this._styleItem(e)):(this.currentItems=[e],e.selected=!0,this.input.value=e.label,this._styleItem(e),t||this._resolveValue()),this._focusItem(e)}_resolveValue(e){var t,i;if(this.popup&&this.popup.hide(!0),this.params.multiselect)t=this.currentItems.map(s=>s.value);else if(e&&this.params.autocomplete&&this.typing)if(this.params.freetext||this.params.allowEmpty&&this.input.value==="")t=this.input.value;else{this.actions.cancel();return}else this.currentItems[0]?t=this.currentItems[0].value:(i=Array.isArray(this.initialValues)?this.initialValues[0]:this.initialValues,i===null||typeof i>"u"||i===""?t=i:t=this.params.emptyValue);t===""&&(t=this.params.emptyValue),this.actions.success(t),this.isFilter&&(this.initialValues=t&&!Array.isArray(t)?[t]:t,this.currentItems=[])}};function ei(l,e,t,i,s){var n=new Zt(this,l,e,t,i,s);return n.input}function ti(l,e,t,i,s){var n=this,r=l.getElement(),o=l.getValue(),a=r.getElementsByTagName("svg").length||5,h=r.getElementsByTagName("svg")[0]?r.getElementsByTagName("svg")[0].getAttribute("width"):14,d=[],u=document.createElement("div"),c=document.createElementNS("http://www.w3.org/2000/svg","svg");function f(m){d.forEach(function(C,T){T'):(n.table.browser=="ie"?C.setAttribute("class","tabulator-star-inactive"):C.classList.replace("tabulator-star-active","tabulator-star-inactive"),C.innerHTML='')})}function g(m){var C=document.createElement("span"),T=c.cloneNode(!0);d.push(T),C.addEventListener("mouseenter",function(y){y.stopPropagation(),y.stopImmediatePropagation(),f(m)}),C.addEventListener("mousemove",function(y){y.stopPropagation(),y.stopImmediatePropagation()}),C.addEventListener("click",function(y){y.stopPropagation(),y.stopImmediatePropagation(),t(m),r.blur()}),C.appendChild(T),u.appendChild(C)}function p(m){o=m,f(m)}if(r.style.whiteSpace="nowrap",r.style.overflow="hidden",r.style.textOverflow="ellipsis",u.style.verticalAlign="middle",u.style.display="inline-block",u.style.padding="4px",c.setAttribute("width",h),c.setAttribute("height",h),c.setAttribute("viewBox","0 0 512 512"),c.setAttribute("xml:space","preserve"),c.style.padding="0 1px",s.elementAttributes&&typeof s.elementAttributes=="object")for(let m in s.elementAttributes)m.charAt(0)=="+"?(m=m.slice(1),u.setAttribute(m,u.getAttribute(m)+s.elementAttributes["+"+m])):u.setAttribute(m,s.elementAttributes[m]);for(var v=1;v<=a;v++)g(v);return o=Math.min(parseInt(o),a),f(o),u.addEventListener("mousemove",function(m){f(0)}),u.addEventListener("click",function(m){t(0)}),r.addEventListener("blur",function(m){i()}),r.addEventListener("keydown",function(m){switch(m.keyCode){case 39:p(o+1);break;case 37:p(o-1);break;case 13:t(o);break;case 27:i();break}}),u}function ii(l,e,t,i,s){var n=l.getElement(),r=typeof s.max>"u"?n.getElementsByTagName("div")[0]&&n.getElementsByTagName("div")[0].getAttribute("max")||100:s.max,o=typeof s.min>"u"?n.getElementsByTagName("div")[0]&&n.getElementsByTagName("div")[0].getAttribute("min")||0:s.min,a=(r-o)/100,h=l.getValue()||0,d=document.createElement("div"),u=document.createElement("div"),c,f;function g(){var p=window.getComputedStyle(n,null),v=a*Math.round(u.offsetWidth/((n.clientWidth-parseInt(p.getPropertyValue("padding-left"))-parseInt(p.getPropertyValue("padding-right")))/100))+o;t(v),n.setAttribute("aria-valuenow",v),n.setAttribute("aria-label",h)}if(d.style.position="absolute",d.style.right="0",d.style.top="0",d.style.bottom="0",d.style.width="5px",d.classList.add("tabulator-progress-handle"),u.style.display="inline-block",u.style.position="relative",u.style.height="100%",u.style.backgroundColor="#488CE9",u.style.maxWidth="100%",u.style.minWidth="0%",s.elementAttributes&&typeof s.elementAttributes=="object")for(let p in s.elementAttributes)p.charAt(0)=="+"?(p=p.slice(1),u.setAttribute(p,u.getAttribute(p)+s.elementAttributes["+"+p])):u.setAttribute(p,s.elementAttributes[p]);return n.style.padding="4px 4px",h=Math.min(parseFloat(h),r),h=Math.max(parseFloat(h),o),h=Math.round((h-o)/a),u.style.width=h+"%",n.setAttribute("aria-valuemin",o),n.setAttribute("aria-valuemax",r),u.appendChild(d),d.addEventListener("mousedown",function(p){c=p.screenX,f=u.offsetWidth}),d.addEventListener("mouseover",function(){d.style.cursor="ew-resize"}),n.addEventListener("mousemove",function(p){c&&(u.style.width=f+p.screenX-c+"px")}),n.addEventListener("mouseup",function(p){c&&(p.stopPropagation(),p.stopImmediatePropagation(),c=!1,f=!1,g())}),n.addEventListener("keydown",function(p){switch(p.keyCode){case 39:p.preventDefault(),u.style.width=u.clientWidth+n.clientWidth/100+"px";break;case 37:p.preventDefault(),u.style.width=u.clientWidth-n.clientWidth/100+"px";break;case 9:case 13:g();break;case 27:i();break}}),n.addEventListener("blur",function(){i()}),u}function si(l,e,t,i,s){var n=l.getValue(),r=document.createElement("input"),o=s.tristate,a=typeof s.indeterminateValue>"u"?null:s.indeterminateValue,h=!1,d=Object.keys(s).includes("trueValue"),u=Object.keys(s).includes("falseValue");if(r.setAttribute("type","checkbox"),r.style.marginTop="5px",r.style.boxSizing="border-box",s.elementAttributes&&typeof s.elementAttributes=="object")for(let f in s.elementAttributes)f.charAt(0)=="+"?(f=f.slice(1),r.setAttribute(f,r.getAttribute(f)+s.elementAttributes["+"+f])):r.setAttribute(f,s.elementAttributes[f]);r.value=n,o&&(typeof n>"u"||n===a||n==="")&&(h=!0,r.indeterminate=!0),this.table.browser!="firefox"&&this.table.browser!="safari"&&e(function(){l.getType()==="cell"&&r.focus({preventScroll:!0})}),r.checked=d?n===s.trueValue:n===!0||n==="true"||n==="True"||n===1;function c(f){var g=r.checked;return d&&g?g=s.trueValue:u&&!g&&(g=s.falseValue),o?f?h?a:g:r.checked&&!h?(r.checked=!1,r.indeterminate=!0,h=!0,a):(h=!1,g):g}return r.addEventListener("change",function(f){t(c())}),r.addEventListener("blur",function(f){t(c(!0))}),r.addEventListener("keydown",function(f){f.keyCode==13&&t(c()),f.keyCode==27&&i()}),r}var ni={input:Xt,textarea:Jt,number:Kt,range:qt,date:Yt,time:$t,datetime:Qt,list:ei,star:ti,progress:ii,tickCross:si};const Z=class Z extends w{constructor(e){super(e),this.currentCell=!1,this.mouseClick=!1,this.recursionBlock=!1,this.invalidEdit=!1,this.editedCells=[],this.convertEmptyValues=!1,this.editors=Z.editors,this.registerTableOption("editTriggerEvent","focus"),this.registerTableOption("editorEmptyValue"),this.registerTableOption("editorEmptyValueFunc",this.emptyValueCheck.bind(this)),this.registerColumnOption("editable"),this.registerColumnOption("editor"),this.registerColumnOption("editorParams"),this.registerColumnOption("editorEmptyValue"),this.registerColumnOption("editorEmptyValueFunc"),this.registerColumnOption("cellEditing"),this.registerColumnOption("cellEdited"),this.registerColumnOption("cellEditCancelled"),this.registerTableFunction("getEditedCells",this.getEditedCells.bind(this)),this.registerTableFunction("clearCellEdited",this.clearCellEdited.bind(this)),this.registerTableFunction("navigatePrev",this.navigatePrev.bind(this)),this.registerTableFunction("navigateNext",this.navigateNext.bind(this)),this.registerTableFunction("navigateLeft",this.navigateLeft.bind(this)),this.registerTableFunction("navigateRight",this.navigateRight.bind(this)),this.registerTableFunction("navigateUp",this.navigateUp.bind(this)),this.registerTableFunction("navigateDown",this.navigateDown.bind(this)),this.registerComponentFunction("cell","isEdited",this.cellIsEdited.bind(this)),this.registerComponentFunction("cell","clearEdited",this.clearEdited.bind(this)),this.registerComponentFunction("cell","edit",this.editCell.bind(this)),this.registerComponentFunction("cell","cancelEdit",this.cellCancelEdit.bind(this)),this.registerComponentFunction("cell","navigatePrev",this.navigatePrev.bind(this)),this.registerComponentFunction("cell","navigateNext",this.navigateNext.bind(this)),this.registerComponentFunction("cell","navigateLeft",this.navigateLeft.bind(this)),this.registerComponentFunction("cell","navigateRight",this.navigateRight.bind(this)),this.registerComponentFunction("cell","navigateUp",this.navigateUp.bind(this)),this.registerComponentFunction("cell","navigateDown",this.navigateDown.bind(this))}initialize(){this.subscribe("cell-init",this.bindEditor.bind(this)),this.subscribe("cell-delete",this.clearEdited.bind(this)),this.subscribe("cell-value-changed",this.updateCellClass.bind(this)),this.subscribe("column-layout",this.initializeColumnCheck.bind(this)),this.subscribe("column-delete",this.columnDeleteCheck.bind(this)),this.subscribe("row-deleting",this.rowDeleteCheck.bind(this)),this.subscribe("row-layout",this.rowEditableCheck.bind(this)),this.subscribe("data-refreshing",this.cancelEdit.bind(this)),this.subscribe("clipboard-paste",this.pasteBlocker.bind(this)),this.subscribe("keybinding-nav-prev",this.navigatePrev.bind(this,void 0)),this.subscribe("keybinding-nav-next",this.keybindingNavigateNext.bind(this)),this.subscribe("keybinding-nav-up",this.navigateUp.bind(this,void 0)),this.subscribe("keybinding-nav-down",this.navigateDown.bind(this,void 0)),Object.keys(this.table.options).includes("editorEmptyValue")&&(this.convertEmptyValues=!0)}pasteBlocker(e){if(this.currentCell)return!0}keybindingNavigateNext(e){var t=this.currentCell,i=this.options("tabEndNewRow");t&&(this.navigateNext(t,e)||i&&(t.getElement().firstChild.blur(),this.invalidEdit||(i===!0?i=this.table.addRow({}):typeof i=="function"?i=this.table.addRow(i(t.row.getComponent())):i=this.table.addRow(Object.assign({},i)),i.then(()=>{setTimeout(()=>{t.getComponent().navigateNext()})}))))}cellIsEdited(e){return!!e.modules.edit&&e.modules.edit.edited}cellCancelEdit(e){e===this.currentCell?this.table.modules.edit.cancelEdit():console.warn("Cancel Editor Error - This cell is not currently being edited ")}updateCellClass(e){this.allowEdit(e)?e.getElement().classList.add("tabulator-editable"):e.getElement().classList.remove("tabulator-editable")}clearCellEdited(e){e||(e=this.table.modules.edit.getEditedCells()),Array.isArray(e)||(e=[e]),e.forEach(t=>{this.table.modules.edit.clearEdited(t._getSelf())})}navigatePrev(e=this.currentCell,t){var i,s;if(e){if(t&&t.preventDefault(),i=this.navigateLeft(),i)return!0;if(s=this.table.rowManager.prevDisplayRow(e.row,!0),s&&(i=this.findPrevEditableCell(s,s.cells.length),i))return i.getComponent().edit(),!0}return!1}navigateNext(e=this.currentCell,t){var i,s;if(e){if(t&&t.preventDefault(),i=this.navigateRight(),i)return!0;if(s=this.table.rowManager.nextDisplayRow(e.row,!0),s&&(i=this.findNextEditableCell(s,-1),i))return i.getComponent().edit(),!0}return!1}navigateLeft(e=this.currentCell,t){var i,s;return e&&(t&&t.preventDefault(),i=e.getIndex(),s=this.findPrevEditableCell(e.row,i),s)?(s.getComponent().edit(),!0):!1}navigateRight(e=this.currentCell,t){var i,s;return e&&(t&&t.preventDefault(),i=e.getIndex(),s=this.findNextEditableCell(e.row,i),s)?(s.getComponent().edit(),!0):!1}navigateUp(e=this.currentCell,t){var i,s;return e&&(t&&t.preventDefault(),i=e.getIndex(),s=this.table.rowManager.prevDisplayRow(e.row,!0),s)?(s.cells[i].getComponent().edit(),!0):!1}navigateDown(e=this.currentCell,t){var i,s;return e&&(t&&t.preventDefault(),i=e.getIndex(),s=this.table.rowManager.nextDisplayRow(e.row,!0),s)?(s.cells[i].getComponent().edit(),!0):!1}findNextEditableCell(e,t){var i=!1;if(t0)for(var s=t-1;s>=0;s--){let n=e.cells[s];if(n.column.modules.edit&&x.elVisible(n.getElement())&&this.allowEdit(n)){i=n;break}}return i}initializeColumnCheck(e){typeof e.definition.editor<"u"&&this.initializeColumn(e)}columnDeleteCheck(e){this.currentCell&&this.currentCell.column===e&&this.cancelEdit()}rowDeleteCheck(e){this.currentCell&&this.currentCell.row===e&&this.cancelEdit()}rowEditableCheck(e){e.getCells().forEach(t=>{t.column.modules.edit&&typeof t.column.modules.edit.check=="function"&&this.updateCellClass(t)})}initializeColumn(e){var t=Object.keys(e.definition).includes("editorEmptyValue"),i={editor:!1,blocked:!1,check:e.definition.editable,params:e.definition.editorParams||{},convertEmptyValues:t,editorEmptyValue:e.definition.editorEmptyValue,editorEmptyValueFunc:e.definition.editorEmptyValueFunc};switch(typeof e.definition.editor){case"string":this.editors[e.definition.editor]?i.editor=this.editors[e.definition.editor]:console.warn("Editor Error - No such editor found: ",e.definition.editor);break;case"function":i.editor=e.definition.editor;break;case"boolean":e.definition.editor===!0&&(typeof e.definition.formatter!="function"?this.editors[e.definition.formatter]?i.editor=this.editors[e.definition.formatter]:i.editor=this.editors.input:console.warn("Editor Error - Cannot auto lookup editor for a custom formatter: ",e.definition.formatter));break}i.editor&&(e.modules.edit=i)}getCurrentCell(){return this.currentCell?this.currentCell.getComponent():!1}clearEditor(e){var t=this.currentCell,i;if(this.invalidEdit=!1,t){for(this.currentCell=!1,i=t.getElement(),this.dispatch("edit-editor-clear",t,e),i.classList.remove("tabulator-editing");i.firstChild;)i.removeChild(i.firstChild);t.row.getElement().classList.remove("tabulator-editing"),t.table.element.classList.remove("tabulator-editing")}}cancelEdit(){if(this.currentCell){var e=this.currentCell,t=this.currentCell.getComponent();this.clearEditor(!0),e.setValueActual(e.getValue()),e.cellRendered(),(e.column.definition.editor=="textarea"||e.column.definition.variableHeight)&&e.row.normalizeHeight(!0),e.column.definition.cellEditCancelled&&e.column.definition.cellEditCancelled.call(this.table,t),this.dispatch("edit-cancelled",e),this.dispatchExternal("cellEditCancelled",t)}}bindEditor(e){if(e.column.modules.edit){var t=this,i=e.getElement(!0);this.updateCellClass(e),i.setAttribute("tabindex",0),i.addEventListener("mousedown",function(s){s.button===2?s.preventDefault():t.mouseClick=!0}),this.options("editTriggerEvent")==="dblclick"&&i.addEventListener("dblclick",function(s){i.classList.contains("tabulator-editing")||(i.focus({preventScroll:!0}),t.edit(e,s,!1))}),(this.options("editTriggerEvent")==="focus"||this.options("editTriggerEvent")==="click")&&i.addEventListener("click",function(s){i.classList.contains("tabulator-editing")||(i.focus({preventScroll:!0}),t.edit(e,s,!1))}),this.options("editTriggerEvent")==="focus"&&i.addEventListener("focus",function(s){t.recursionBlock||t.edit(e,s,!1)})}}focusCellNoEvent(e,t){this.recursionBlock=!0,t&&this.table.browser==="ie"||e.getElement().focus({preventScroll:!0}),this.recursionBlock=!1}editCell(e,t){this.focusCellNoEvent(e),this.edit(e,!1,t)}focusScrollAdjust(e){if(this.table.rowManager.getRenderMode()=="virtual"){var t=this.table.rowManager.element.scrollTop,i=this.table.rowManager.element.clientHeight+this.table.rowManager.element.scrollTop,s=e.row.getElement();s.offsetTopi&&(this.table.rowManager.element.scrollTop+=s.offsetTop+s.offsetHeight-i);var n=this.table.rowManager.element.scrollLeft,r=this.table.rowManager.element.clientWidth+this.table.rowManager.element.scrollLeft,o=e.getElement();this.table.modExists("frozenColumns")&&(n+=parseInt(this.table.modules.frozenColumns.leftMargin||0),r-=parseInt(this.table.modules.frozenColumns.rightMargin||0)),this.table.options.renderHorizontal==="virtual"&&(n-=parseInt(this.table.columnManager.renderer.vDomPadLeft),r-=parseInt(this.table.columnManager.renderer.vDomPadLeft)),o.offsetLeftr&&(this.table.rowManager.element.scrollLeft+=o.offsetLeft+o.offsetWidth-r)}}allowEdit(e){var t=!!e.column.modules.edit;if(e.column.modules.edit)switch(typeof e.column.modules.edit.check){case"function":e.row.initialized&&(t=e.column.modules.edit.check(e.getComponent()));break;case"string":t=!!e.row.data[e.column.modules.edit.check];break;case"boolean":t=e.column.modules.edit.check;break}return t}edit(e,t,i){var s=this,n=!0,r=function(){},o=e.getElement(),a=!1,h,d,u;if(this.currentCell){!this.invalidEdit&&this.currentCell!==e&&this.cancelEdit();return}function c(m){if(s.currentCell===e&&!a){var C=s.chain("edit-success",[e,m],!0,!0);return C===!0||s.table.options.validationMode==="highlight"?(a=!0,s.clearEditor(),e.modules.edit||(e.modules.edit={}),e.modules.edit.edited=!0,s.editedCells.indexOf(e)==-1&&s.editedCells.push(e),m=s.transformEmptyValues(m,e),e.setValue(m,!0),C===!0):(a=!0,s.invalidEdit=!0,s.focusCellNoEvent(e,!0),r(),setTimeout(()=>{a=!1},10),!1)}}function f(){s.currentCell===e&&!a&&s.cancelEdit()}function g(m){r=m}if(e.column.modules.edit.blocked)return this.mouseClick=!1,this.blur(o),!1;if(t&&t.stopPropagation(),n=this.allowEdit(e),n||i){if(s.cancelEdit(),s.currentCell=e,this.focusScrollAdjust(e),d=e.getComponent(),this.mouseClick&&(this.mouseClick=!1,e.column.definition.cellClick&&e.column.definition.cellClick.call(this.table,t,d)),e.column.definition.cellEditing&&e.column.definition.cellEditing.call(this.table,d),this.dispatch("cell-editing",e),this.dispatchExternal("cellEditing",d),u=typeof e.column.modules.edit.params=="function"?e.column.modules.edit.params(d):e.column.modules.edit.params,h=e.column.modules.edit.editor.call(s,d,g,c,f,u),this.currentCell&&h!==!1)if(h instanceof Node){for(o.classList.add("tabulator-editing"),e.row.getElement().classList.add("tabulator-editing"),e.table.element.classList.add("tabulator-editing");o.firstChild;)o.removeChild(o.firstChild);o.appendChild(h),r();for(var p=o.children,v=0;v"u"}transformEmptyValues(e,t){var i=t.column.modules.edit,s=i.convertEmptyValues||this.convertEmptyValues,n;return s&&(n=i.editorEmptyValueFunc||this.options("editorEmptyValueFunc"),n&&n(e)&&(e=i.convertEmptyValues?i.editorEmptyValue:this.options("editorEmptyValue"))),e}blur(e){this.confirm("edit-blur",[e])||e.blur()}getEditedCells(){var e=[];return this.editedCells.forEach(t=>{e.push(t.getComponent())}),e}clearEdited(e){var t;e.modules.edit&&e.modules.edit.edited&&(e.modules.edit.edited=!1,this.dispatch("edit-edited-clear",e)),t=this.editedCells.indexOf(e),t>-1&&this.editedCells.splice(t,1)}};b(Z,"moduleName","edit"),b(Z,"editors",ni);let we=Z;class Ue{constructor(e,t,i,s){this.type=e,this.columns=t,this.component=i||!1,this.indent=s||0}}class de{constructor(e,t,i,s,n){this.value=e,this.component=t||!1,this.width=i,this.height=s,this.depth=n}}var ri={},oi={visible:function(){return this.rowManager.getVisibleRows(!1,!0)},all:function(){return this.rowManager.rows},selected:function(){return this.modules.selectRow.selectedRows},active:function(){return this.options.pagination?this.rowManager.getDisplayRows(this.rowManager.displayRows.length-2):this.rowManager.getDisplayRows()}};const V=class V extends w{constructor(e){super(e),this.config={},this.cloneTableStyle=!0,this.colVisProp="",this.colVisPropAttach="",this.registerTableOption("htmlOutputConfig",!1),this.registerColumnOption("htmlOutput"),this.registerColumnOption("titleHtmlOutput")}initialize(){this.registerTableFunction("getHtml",this.getHtml.bind(this))}generateExportList(e,t,i,s){var n,r,o,a;return this.cloneTableStyle=t,this.config=e||{},this.colVisProp=s,this.colVisPropAttach=this.colVisProp.charAt(0).toUpperCase()+this.colVisProp.slice(1),a=V.columnLookups[i],a&&(o=a.call(this.table),o=o.filter(h=>this.columnVisCheck(h))),n=this.config.columnHeaders!==!1?this.headersToExportRows(this.generateColumnGroupHeaders(o)):[],o&&(o=o.map(h=>h.getComponent())),r=this.bodyToExportRows(this.rowLookup(i),o),n.concat(r)}generateTable(e,t,i,s){var n=this.generateExportList(e,t,i,s);return this.generateTableElement(n)}rowLookup(e){var t=[],i;return typeof e=="function"?e.call(this.table).forEach(s=>{s=this.table.rowManager.findRow(s),s&&t.push(s)}):(i=V.rowLookups[e]||V.rowLookups.active,t=i.call(this.table)),Object.assign([],t)}generateColumnGroupHeaders(e){var t=[];return e||(e=this.config.columnGroups!==!1?this.table.columnManager.columns:this.table.columnManager.columnsByIndex),e.forEach(i=>{var s=this.processColumnGroup(i);s&&t.push(s)}),t}processColumnGroup(e){var t=e.columns,i=0,s=e.definition["title"+this.colVisPropAttach]||e.definition.title,n={title:s,column:e,depth:1};if(t.length){if(n.subGroups=[],n.width=0,t.forEach(r=>{var o=this.processColumnGroup(r);o&&(n.width+=o.width,n.subGroups.push(o),o.depth>i&&(i=o.depth))}),n.depth+=i,!n.width)return!1}else if(this.columnVisCheck(e))n.width=1;else return!1;return n}columnVisCheck(e){var t=e.definition[this.colVisProp];return this.config.rowHeaders===!1&&e.isRowHeader?!1:(typeof t=="function"&&(t=t.call(this.table,e.getComponent())),t===!1||t===!0?t:e.visible&&e.field)}headersToExportRows(e){var t=[],i=0,s=[];function n(r,o){var a=i-o;if(typeof t[o]>"u"&&(t[o]=[]),r.height=r.subGroups?1:a-r.depth+1,t[o].push(r),r.height>1)for(let h=1;h"u"&&(t[o+h]=[]),t[o+h].push(!1);if(r.width>1)for(let h=1;hi&&(i=r.depth)}),e.forEach(function(r){n(r,0)}),t.forEach(r=>{var o=[];r.forEach(a=>{if(a){let h=typeof a.title>"u"?"":a.title;o.push(new de(h,a.column.getComponent(),a.width,a.height,a.depth))}else o.push(null)}),s.push(new Ue("header",o))}),s}bodyToExportRows(e,t=[]){var i=[];return t.length===0&&this.table.columnManager.columnsByIndex.forEach(s=>{this.columnVisCheck(s)&&t.push(s.getComponent())}),this.config.columnCalcs!==!1&&this.table.modExists("columnCalcs")&&(this.table.modules.columnCalcs.topInitialized&&e.unshift(this.table.modules.columnCalcs.topRow),this.table.modules.columnCalcs.botInitialized&&e.push(this.table.modules.columnCalcs.botRow)),e=e.filter(s=>{switch(s.type){case"group":return this.config.rowGroups!==!1;case"calc":return this.config.columnCalcs!==!1;case"row":return!(this.table.options.dataTree&&this.config.dataTree===!1&&s.modules.dataTree.parent)}return!0}),e.forEach((s,n)=>{var r=s.getData(this.colVisProp),o=[],a=0;switch(s.type){case"group":a=s.level,o.push(new de(s.key,s.getComponent(),t.length,1));break;case"calc":case"row":t.forEach(h=>{o.push(new de(h._column.getFieldValue(r),h,1,1))}),this.table.options.dataTree&&this.config.dataTree!==!1&&(a=s.modules.dataTree.index);break}i.push(new Ue(s.type,o,s.getComponent(),a))}),i}generateTableElement(e){var t=document.createElement("table"),i=document.createElement("thead"),s=document.createElement("tbody"),n=this.lookupTableStyles(),r=this.table.options["rowFormatter"+this.colVisPropAttach],o={};return o.rowFormatter=r!==null?r:this.table.options.rowFormatter,this.table.options.dataTree&&this.config.dataTree!==!1&&this.table.modExists("columnCalcs")&&(o.treeElementField=this.table.modules.dataTree.elementField),o.groupHeader=this.table.options["groupHeader"+this.colVisPropAttach],o.groupHeader&&!Array.isArray(o.groupHeader)&&(o.groupHeader=[o.groupHeader]),t.classList.add("tabulator-print-table"),this.mapElementStyles(this.table.columnManager.getHeadersElement(),i,["border-top","border-left","border-right","border-bottom","background-color","color","font-weight","font-family","font-size"]),e.length>1e3&&console.warn("It may take a long time to render an HTML table with more than 1000 rows"),e.forEach((a,h)=>{let d;switch(a.type){case"header":i.appendChild(this.generateHeaderElement(a,o,n));break;case"group":s.appendChild(this.generateGroupElement(a,o,n));break;case"calc":s.appendChild(this.generateCalcElement(a,o,n));break;case"row":d=this.generateRowElement(a,o,n),this.mapElementStyles(h%2&&n.evenRow?n.evenRow:n.oddRow,d,["border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","background-color"]),s.appendChild(d);break}}),i.innerHTML&&t.appendChild(i),t.appendChild(s),this.mapElementStyles(this.table.element,t,["border-top","border-left","border-right","border-bottom"]),t}lookupTableStyles(){var e={};return this.cloneTableStyle&&window.getComputedStyle&&(e.oddRow=this.table.element.querySelector(".tabulator-row-odd:not(.tabulator-group):not(.tabulator-calcs)"),e.evenRow=this.table.element.querySelector(".tabulator-row-even:not(.tabulator-group):not(.tabulator-calcs)"),e.calcRow=this.table.element.querySelector(".tabulator-row.tabulator-calcs"),e.firstRow=this.table.element.querySelector(".tabulator-row:not(.tabulator-group):not(.tabulator-calcs)"),e.firstGroup=this.table.element.getElementsByClassName("tabulator-group")[0],e.firstRow&&(e.styleCells=e.firstRow.getElementsByClassName("tabulator-cell"),e.styleRowHeader=e.firstRow.getElementsByClassName("tabulator-row-header")[0],e.firstCell=e.styleCells[0],e.lastCell=e.styleCells[e.styleCells.length-1])),e}generateHeaderElement(e,t,i){var s=document.createElement("tr");return e.columns.forEach(n=>{if(n){var r=document.createElement("th"),o=n.component._column.definition.cssClass?n.component._column.definition.cssClass.split(" "):[];r.colSpan=n.width,r.rowSpan=n.height,r.innerHTML=n.value,this.cloneTableStyle&&(r.style.boxSizing="border-box"),o.forEach(function(a){r.classList.add(a)}),this.mapElementStyles(n.component.getElement(),r,["text-align","border-left","border-right","background-color","color","font-weight","font-family","font-size"]),this.mapElementStyles(n.component._column.contentElement,r,["padding-top","padding-left","padding-right","padding-bottom"]),n.component._column.visible?this.mapElementStyles(n.component.getElement(),r,["width"]):n.component._column.definition.width&&(r.style.width=n.component._column.definition.width+"px"),n.component._column.parent&&n.component._column.parent.isGroup?this.mapElementStyles(n.component._column.parent.groupElement,r,["border-top"]):this.mapElementStyles(n.component.getElement(),r,["border-top"]),n.component._column.isGroup?this.mapElementStyles(n.component.getElement(),r,["border-bottom"]):this.mapElementStyles(this.table.columnManager.getElement(),r,["border-bottom"]),s.appendChild(r)}}),s}generateGroupElement(e,t,i){var s=document.createElement("tr"),n=document.createElement("td"),r=e.columns[0];return s.classList.add("tabulator-print-table-row"),t.groupHeader&&t.groupHeader[e.indent]?r.value=t.groupHeader[e.indent](r.value,e.component._group.getRowCount(),e.component._group.getData(),e.component):t.groupHeader!==!1&&(r.value=e.component._group.generator(r.value,e.component._group.getRowCount(),e.component._group.getData(),e.component)),n.colSpan=r.width,n.innerHTML=r.value,s.classList.add("tabulator-print-table-group"),s.classList.add("tabulator-group-level-"+e.indent),r.component.isVisible()&&s.classList.add("tabulator-group-visible"),this.mapElementStyles(i.firstGroup,s,["border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","background-color"]),this.mapElementStyles(i.firstGroup,n,["padding-top","padding-left","padding-right","padding-bottom"]),s.appendChild(n),s}generateCalcElement(e,t,i){var s=this.generateRowElement(e,t,i);return s.classList.add("tabulator-print-table-calcs"),this.mapElementStyles(i.calcRow,s,["border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","background-color"]),s}generateRowElement(e,t,i){var s=document.createElement("tr");if(s.classList.add("tabulator-print-table-row"),e.columns.forEach((n,r)=>{if(n){var o=document.createElement("td"),a=n.component._column,h=this.table,d=h.columnManager.findColumnIndex(a),u=n.value,c,f,g={modules:{},getValue:function(){return u},getField:function(){return a.definition.field},getElement:function(){return o},getType:function(){return"cell"},getColumn:function(){return a.getComponent()},getData:function(){return e.component.getData()},getRow:function(){return e.component},getTable:function(){return h},getComponent:function(){return g},column:a},p=a.definition.cssClass?a.definition.cssClass.split(" "):[];if(p.forEach(function(v){o.classList.add(v)}),this.table.modExists("format")&&this.config.formatCells!==!1)u=this.table.modules.format.formatExportValue(g,this.colVisProp);else switch(typeof u){case"object":u=u!==null?JSON.stringify(u):"";break;case"undefined":u="";break}u instanceof Node?o.appendChild(u):o.innerHTML=u,f=["padding-top","padding-left","padding-right","padding-bottom","border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","text-align"],a.isRowHeader?(c=i.styleRowHeader,f.push("background-color")):c=i.styleCells&&i.styleCells[d]?i.styleCells[d]:i.firstCell,c&&(this.mapElementStyles(c,o,f),a.definition.align&&(o.style.textAlign=a.definition.align)),this.table.options.dataTree&&this.config.dataTree!==!1&&(t.treeElementField&&t.treeElementField==a.field||!t.treeElementField&&r==0)&&(e.component._row.modules.dataTree.controlEl&&o.insertBefore(e.component._row.modules.dataTree.controlEl.cloneNode(!0),o.firstChild),e.component._row.modules.dataTree.branchEl&&o.insertBefore(e.component._row.modules.dataTree.branchEl.cloneNode(!0),o.firstChild)),s.appendChild(o),g.modules.format&&g.modules.format.renderedCallback&&g.modules.format.renderedCallback()}}),t.rowFormatter&&e.type==="row"&&this.config.formatCells!==!1){let n=Object.assign(e.component);n.getElement=function(){return s},t.rowFormatter(e.component)}return s}generateHTMLTable(e){var t=document.createElement("div");return t.appendChild(this.generateTableElement(e)),t.innerHTML}getHtml(e,t,i,s){var n=this.generateExportList(i||this.table.options.htmlOutputConfig,t,e,s||"htmlOutput");return this.generateHTMLTable(n)}mapElementStyles(e,t,i){if(this.cloneTableStyle&&e&&t){var s={"background-color":"backgroundColor",color:"fontColor",width:"width","font-weight":"fontWeight","font-family":"fontFamily","font-size":"fontSize","text-align":"textAlign","border-top":"borderTop","border-left":"borderLeft","border-right":"borderRight","border-bottom":"borderBottom","padding-top":"paddingTop","padding-left":"paddingLeft","padding-right":"paddingRight","padding-bottom":"paddingBottom"};if(window.getComputedStyle){var n=window.getComputedStyle(e);i.forEach(function(r){t.style[s[r]]||(t.style[s[r]]=n.getPropertyValue(r))})}}}};b(V,"moduleName","export"),b(V,"columnLookups",ri),b(V,"rowLookups",oi);let Ce=V;var ai={"=":function(l,e,t,i){return e==l},"<":function(l,e,t,i){return e":function(l,e,t,i){return e>l},">=":function(l,e,t,i){return e>=l},"!=":function(l,e,t,i){return e!=l},regex:function(l,e,t,i){return typeof l=="string"&&(l=new RegExp(l)),l.test(e)},like:function(l,e,t,i){return l===null||typeof l>"u"?e===l:typeof e<"u"&&e!==null?String(e).toLowerCase().indexOf(l.toLowerCase())>-1:!1},keywords:function(l,e,t,i){var s=l.toLowerCase().split(typeof i.separator>"u"?" ":i.separator),n=String(e===null||typeof e>"u"?"":e).toLowerCase(),r=[];return s.forEach(o=>{n.includes(o)&&r.push(!0)}),i.matchAll?r.length===s.length:!!r.length},starts:function(l,e,t,i){return l===null||typeof l>"u"?e===l:typeof e<"u"&&e!==null?String(e).toLowerCase().startsWith(l.toLowerCase()):!1},ends:function(l,e,t,i){return l===null||typeof l>"u"?e===l:typeof e<"u"&&e!==null?String(e).toLowerCase().endsWith(l.toLowerCase()):!1},in:function(l,e,t,i){return Array.isArray(l)?l.length?l.indexOf(e)>-1:!0:(console.warn("Filter Error - filter value is not an array:",l),!1)}};const O=class O extends w{constructor(e){super(e),this.filterList=[],this.headerFilters={},this.headerFilterColumns=[],this.prevHeaderFilterChangeCheck="",this.prevHeaderFilterChangeCheck="{}",this.changed=!1,this.tableInitialized=!1,this.registerTableOption("filterMode","local"),this.registerTableOption("initialFilter",!1),this.registerTableOption("initialHeaderFilter",!1),this.registerTableOption("headerFilterLiveFilterDelay",300),this.registerTableOption("placeholderHeaderFilter",!1),this.registerColumnOption("headerFilter"),this.registerColumnOption("headerFilterPlaceholder"),this.registerColumnOption("headerFilterParams"),this.registerColumnOption("headerFilterEmptyCheck"),this.registerColumnOption("headerFilterFunc"),this.registerColumnOption("headerFilterFuncParams"),this.registerColumnOption("headerFilterLiveFilter"),this.registerTableFunction("searchRows",this.searchRows.bind(this)),this.registerTableFunction("searchData",this.searchData.bind(this)),this.registerTableFunction("setFilter",this.userSetFilter.bind(this)),this.registerTableFunction("refreshFilter",this.userRefreshFilter.bind(this)),this.registerTableFunction("addFilter",this.userAddFilter.bind(this)),this.registerTableFunction("getFilters",this.getFilters.bind(this)),this.registerTableFunction("setHeaderFilterFocus",this.userSetHeaderFilterFocus.bind(this)),this.registerTableFunction("getHeaderFilterValue",this.userGetHeaderFilterValue.bind(this)),this.registerTableFunction("setHeaderFilterValue",this.userSetHeaderFilterValue.bind(this)),this.registerTableFunction("getHeaderFilters",this.getHeaderFilters.bind(this)),this.registerTableFunction("removeFilter",this.userRemoveFilter.bind(this)),this.registerTableFunction("clearFilter",this.userClearFilter.bind(this)),this.registerTableFunction("clearHeaderFilter",this.userClearHeaderFilter.bind(this)),this.registerComponentFunction("column","headerFilterFocus",this.setHeaderFilterFocus.bind(this)),this.registerComponentFunction("column","reloadHeaderFilter",this.reloadHeaderFilter.bind(this)),this.registerComponentFunction("column","getHeaderFilterValue",this.getHeaderFilterValue.bind(this)),this.registerComponentFunction("column","setHeaderFilterValue",this.setHeaderFilterValue.bind(this))}initialize(){this.subscribe("column-init",this.initializeColumnHeaderFilter.bind(this)),this.subscribe("column-width-fit-before",this.hideHeaderFilterElements.bind(this)),this.subscribe("column-width-fit-after",this.showHeaderFilterElements.bind(this)),this.subscribe("table-built",this.tableBuilt.bind(this)),this.subscribe("placeholder",this.generatePlaceholder.bind(this)),this.table.options.filterMode==="remote"&&this.subscribe("data-params",this.remoteFilterParams.bind(this)),this.registerDataHandler(this.filter.bind(this),10)}tableBuilt(){this.table.options.initialFilter&&this.setFilter(this.table.options.initialFilter),this.table.options.initialHeaderFilter&&this.table.options.initialHeaderFilter.forEach(e=>{var t=this.table.columnManager.findColumn(e.field);if(t)this.setHeaderFilterValue(t,e.value);else return console.warn("Column Filter Error - No matching column found:",e.field),!1}),this.tableInitialized=!0}remoteFilterParams(e,t,i,s){return s.filter=this.getFilters(!0,!0),s}generatePlaceholder(e){if(this.table.options.placeholderHeaderFilter&&Object.keys(this.headerFilters).length)return this.table.options.placeholderHeaderFilter}userSetFilter(e,t,i,s){this.setFilter(e,t,i,s),this.refreshFilter()}userRefreshFilter(){this.refreshFilter()}userAddFilter(e,t,i,s){this.addFilter(e,t,i,s),this.refreshFilter()}userSetHeaderFilterFocus(e){var t=this.table.columnManager.findColumn(e);if(t)this.setHeaderFilterFocus(t);else return console.warn("Column Filter Focus Error - No matching column found:",e),!1}userGetHeaderFilterValue(e){var t=this.table.columnManager.findColumn(e);if(t)return this.getHeaderFilterValue(t);console.warn("Column Filter Error - No matching column found:",e)}userSetHeaderFilterValue(e,t){var i=this.table.columnManager.findColumn(e);if(i)this.setHeaderFilterValue(i,t);else return console.warn("Column Filter Error - No matching column found:",e),!1}userRemoveFilter(e,t,i){this.removeFilter(e,t,i),this.refreshFilter()}userClearFilter(e){this.clearFilter(e),this.refreshFilter()}userClearHeaderFilter(){this.clearHeaderFilter(),this.refreshFilter()}searchRows(e,t,i){return this.search("rows",e,t,i)}searchData(e,t,i){return this.search("data",e,t,i)}initializeColumnHeaderFilter(e){var t=e.definition;t.headerFilter&&this.initializeColumn(e)}initializeColumn(e,t){var i=this,s=e.getField();function n(r){var o=e.modules.filter.tagType=="input"&&e.modules.filter.attrType=="text"||e.modules.filter.tagType=="textarea"?"partial":"match",a="",h="",d;if(typeof e.modules.filter.prevSuccess>"u"||e.modules.filter.prevSuccess!==r){if(e.modules.filter.prevSuccess=r,e.modules.filter.emptyFunc(r))delete i.headerFilters[s];else{switch(e.modules.filter.value=r,typeof e.definition.headerFilterFunc){case"string":O.filters[e.definition.headerFilterFunc]?(a=e.definition.headerFilterFunc,d=function(u){var c=e.definition.headerFilterFuncParams||{},f=e.getFieldValue(u);return c=typeof c=="function"?c(r,f,u):c,O.filters[e.definition.headerFilterFunc](r,f,u,c)}):console.warn("Header Filter Error - Matching filter function not found: ",e.definition.headerFilterFunc);break;case"function":d=function(u){var c=e.definition.headerFilterFuncParams||{},f=e.getFieldValue(u);return c=typeof c=="function"?c(r,f,u):c,e.definition.headerFilterFunc(r,f,u,c)},a=d;break}if(!d)switch(o){case"partial":d=function(u){var c=e.getFieldValue(u);return typeof c<"u"&&c!==null?String(c).toLowerCase().indexOf(String(r).toLowerCase())>-1:!1},a="like";break;default:d=function(u){return e.getFieldValue(u)==r},a="="}i.headerFilters[s]={value:r,func:d,type:a}}e.modules.filter.value=r,h=JSON.stringify(i.headerFilters),i.prevHeaderFilterChangeCheck!==h&&(i.prevHeaderFilterChangeCheck=h,i.trackChanges(),i.refreshFilter())}return!0}e.modules.filter={success:n,attrType:!1,tagType:!1,emptyFunc:!1},this.generateHeaderFilterElement(e)}generateHeaderFilterElement(e,t,i){var s=this,n=e.modules.filter.success,r=e.getField(),o,a,h,d,u,c,f,g;e.modules.filter.value=t;function p(){}function v(m){g=m}if(e.modules.filter.headerElement&&e.modules.filter.headerElement.parentNode&&e.contentElement.removeChild(e.modules.filter.headerElement.parentNode),r){switch(e.modules.filter.emptyFunc=e.definition.headerFilterEmptyCheck||function(m){return!m&&m!==0},o=document.createElement("div"),o.classList.add("tabulator-header-filter"),typeof e.definition.headerFilter){case"string":s.table.modules.edit.editors[e.definition.headerFilter]?(a=s.table.modules.edit.editors[e.definition.headerFilter],(e.definition.headerFilter==="tick"||e.definition.headerFilter==="tickCross")&&!e.definition.headerFilterEmptyCheck&&(e.modules.filter.emptyFunc=function(m){return m!==!0&&m!==!1})):console.warn("Filter Error - Cannot build header filter, No such editor found: ",e.definition.editor);break;case"function":a=e.definition.headerFilter;break;case"boolean":e.modules.edit&&e.modules.edit.editor?a=e.modules.edit.editor:e.definition.formatter&&s.table.modules.edit.editors[e.definition.formatter]?(a=s.table.modules.edit.editors[e.definition.formatter],(e.definition.formatter==="tick"||e.definition.formatter==="tickCross")&&!e.definition.headerFilterEmptyCheck&&(e.modules.filter.emptyFunc=function(m){return m!==!0&&m!==!1})):a=s.table.modules.edit.editors.input;break}if(a){if(d={getValue:function(){return typeof t<"u"?t:""},getField:function(){return e.definition.field},getElement:function(){return o},getColumn:function(){return e.getComponent()},getTable:()=>this.table,getType:()=>"header",getRow:function(){return{normalizeHeight:function(){}}}},f=e.definition.headerFilterParams||{},f=typeof f=="function"?f.call(s.table,d):f,h=a.call(this.table.modules.edit,d,v,n,p,f),!h){console.warn("Filter Error - Cannot add filter to "+r+" column, editor returned a value of false");return}if(!(h instanceof Node)){console.warn("Filter Error - Cannot add filter to "+r+" column, editor should return an instance of Node, the editor returned:",h);return}s.langBind("headerFilters|columns|"+e.definition.field,function(m){h.setAttribute("placeholder",typeof m<"u"&&m?m:e.definition.headerFilterPlaceholder||s.langText("headerFilters|default"))}),h.addEventListener("click",function(m){m.stopPropagation(),h.focus()}),h.addEventListener("focus",m=>{var C=this.table.columnManager.contentsElement.scrollLeft,T=this.table.rowManager.element.scrollLeft;C!==T&&(this.table.rowManager.scrollHorizontal(C),this.table.columnManager.scrollHorizontal(C))}),u=!1,c=function(m){u&&clearTimeout(u),u=setTimeout(function(){n(h.value)},s.table.options.headerFilterLiveFilterDelay)},e.modules.filter.headerElement=h,e.modules.filter.attrType=h.hasAttribute("type")?h.getAttribute("type").toLowerCase():"",e.modules.filter.tagType=h.tagName.toLowerCase(),e.definition.headerFilterLiveFilter!==!1&&(e.definition.headerFilter==="autocomplete"||e.definition.headerFilter==="tickCross"||(e.definition.editor==="autocomplete"||e.definition.editor==="tickCross")&&e.definition.headerFilter===!0||(h.addEventListener("keyup",c),h.addEventListener("search",c),e.modules.filter.attrType=="number"&&h.addEventListener("change",function(m){n(h.value)}),e.modules.filter.attrType=="text"&&this.table.browser!=="ie"&&h.setAttribute("type","search")),(e.modules.filter.tagType=="input"||e.modules.filter.tagType=="select"||e.modules.filter.tagType=="textarea")&&h.addEventListener("mousedown",function(m){m.stopPropagation()})),o.appendChild(h),e.contentElement.appendChild(o),i||s.headerFilterColumns.push(e),g&&g()}}else console.warn("Filter Error - Cannot add header filter, column has no field set:",e.definition.title)}hideHeaderFilterElements(){this.headerFilterColumns.forEach(function(e){e.modules.filter&&e.modules.filter.headerElement&&(e.modules.filter.headerElement.style.display="none")})}showHeaderFilterElements(){this.headerFilterColumns.forEach(function(e){e.modules.filter&&e.modules.filter.headerElement&&(e.modules.filter.headerElement.style.display="")})}setHeaderFilterFocus(e){e.modules.filter&&e.modules.filter.headerElement?e.modules.filter.headerElement.focus():console.warn("Column Filter Focus Error - No header filter set on column:",e.getField())}getHeaderFilterValue(e){if(e.modules.filter&&e.modules.filter.headerElement)return e.modules.filter.value;console.warn("Column Filter Error - No header filter set on column:",e.getField())}setHeaderFilterValue(e,t){e&&(e.modules.filter&&e.modules.filter.headerElement?(this.generateHeaderFilterElement(e,t,!0),e.modules.filter.success(t)):console.warn("Column Filter Error - No header filter set on column:",e.getField()))}reloadHeaderFilter(e){e&&(e.modules.filter&&e.modules.filter.headerElement?this.generateHeaderFilterElement(e,e.modules.filter.value,!0):console.warn("Column Filter Error - No header filter set on column:",e.getField()))}refreshFilter(){this.tableInitialized&&(this.table.options.filterMode==="remote"?this.reloadData(null,!1,!1):this.refreshData(!0))}trackChanges(){this.changed=!0,this.dispatch("filter-changed")}hasChanged(){var e=this.changed;return this.changed=!1,e}setFilter(e,t,i,s){this.filterList=[],Array.isArray(e)||(e=[{field:e,type:t,value:i,params:s}]),this.addFilter(e)}addFilter(e,t,i,s){var n=!1;Array.isArray(e)||(e=[{field:e,type:t,value:i,params:s}]),e.forEach(r=>{r=this.findFilter(r),r&&(this.filterList.push(r),n=!0)}),n&&this.trackChanges()}findFilter(e){var t;if(Array.isArray(e))return this.findSubFilters(e);var i=!1;return typeof e.field=="function"?i=function(s){return e.field(s,e.type||{})}:O.filters[e.type]?(t=this.table.columnManager.getColumnByField(e.field),t?i=function(s){return O.filters[e.type](e.value,t.getFieldValue(s),s,e.params||{})}:i=function(s){return O.filters[e.type](e.value,s[e.field],s,e.params||{})}):console.warn("Filter Error - No such filter type found, ignoring: ",e.type),e.func=i,e.func?e:!1}findSubFilters(e){var t=[];return e.forEach(i=>{i=this.findFilter(i),i&&t.push(i)}),t.length?t:!1}getFilters(e,t){var i=[];return e&&(i=this.getHeaderFilters()),t&&i.forEach(function(s){typeof s.type=="function"&&(s.type="function")}),i=i.concat(this.filtersToArray(this.filterList,t)),i}filtersToArray(e,t){var i=[];return e.forEach(s=>{var n;Array.isArray(s)?i.push(this.filtersToArray(s,t)):(n={field:s.field,type:s.type,value:s.value},t&&typeof n.type=="function"&&(n.type="function"),i.push(n))}),i}getHeaderFilters(){var e=[];for(var t in this.headerFilters)e.push({field:t,type:this.headerFilters[t].type,value:this.headerFilters[t].value});return e}removeFilter(e,t,i){Array.isArray(e)||(e=[{field:e,type:t,value:i}]),e.forEach(s=>{var n=-1;typeof s.field=="object"?n=this.filterList.findIndex(r=>s===r):n=this.filterList.findIndex(r=>s.field===r.field&&s.type===r.type&&s.value===r.value),n>-1?this.filterList.splice(n,1):console.warn("Filter Error - No matching filter type found, ignoring: ",s.type)}),this.trackChanges()}clearFilter(e){this.filterList=[],e&&this.clearHeaderFilter(),this.trackChanges()}clearHeaderFilter(){this.headerFilters={},this.prevHeaderFilterChangeCheck="{}",this.headerFilterColumns.forEach(e=>{typeof e.modules.filter.value<"u"&&delete e.modules.filter.value,e.modules.filter.prevSuccess=void 0,this.reloadHeaderFilter(e)}),this.trackChanges()}search(e,t,i,s){var n=[],r=[];return Array.isArray(t)||(t=[{field:t,type:i,value:s}]),t.forEach(o=>{o=this.findFilter(o),o&&r.push(o)}),this.table.rowManager.rows.forEach(o=>{var a=!0;r.forEach(h=>{this.filterRecurse(h,o.getData())||(a=!1)}),a&&n.push(e==="data"?o.getData("data"):o.getComponent())}),n}filter(e,t){var i=[],s=[];return this.subscribedExternal("dataFiltering")&&this.dispatchExternal("dataFiltering",this.getFilters(!0)),this.table.options.filterMode!=="remote"&&(this.filterList.length||Object.keys(this.headerFilters).length)?e.forEach(n=>{this.filterRow(n)&&i.push(n)}):i=e.slice(0),this.subscribedExternal("dataFiltered")&&(i.forEach(n=>{s.push(n.getComponent())}),this.dispatchExternal("dataFiltered",this.getFilters(!0),s)),i}filterRow(e,t){var i=!0,s=e.getData();this.filterList.forEach(r=>{this.filterRecurse(r,s)||(i=!1)});for(var n in this.headerFilters)this.headerFilters[n].func(s)||(i=!1);return i}filterRecurse(e,t){var i=!1;return Array.isArray(e)?e.forEach(s=>{this.filterRecurse(s,t)&&(i=!0)}):i=e.func(t),i}};b(O,"moduleName","filter"),b(O,"filters",ai);let Ee=O;function li(l,e,t){return this.emptyToSpace(this.sanitizeHTML(l.getValue()))}function hi(l,e,t){return l.getValue()}function di(l,e,t){return l.getElement().style.whiteSpace="pre-wrap",this.emptyToSpace(this.sanitizeHTML(l.getValue()))}function ui(l,e,t){var i=parseFloat(l.getValue()),s="",n,r,o,a,h,d=e.decimal||".",u=e.thousand||",",c=e.negativeSign||"-",f=e.symbol||"",g=!!e.symbolAfter,p=typeof e.precision<"u"?e.precision:2;if(isNaN(i))return this.emptyToSpace(this.sanitizeHTML(l.getValue()));if(i<0&&(i=Math.abs(i),s=c),n=p!==!1?i.toFixed(p):i,n=String(n).split("."),r=n[0],o=n.length>1?d+n[1]:"",e.thousand!==!1)for(a=/(\d+)(\d{3})/;a.test(r);)r=r.replace(a,"$1"+u+"$2");return h=r+o,s===!0?(h="("+h+")",g?h+f:f+h):g?s+h+f:s+f+h}function ci(l,e,t){var i=l.getValue(),s=e.urlPrefix||"",n=e.download,r=i,o=document.createElement("a"),a;function h(d,u){var c=d.shift(),f=u[c];return d.length&&typeof f=="object"?h(d,f):f}if(e.labelField&&(a=l.getData(),r=h(e.labelField.split(this.table.options.nestedFieldSeparator),a)),e.label)switch(typeof e.label){case"string":r=e.label;break;case"function":r=e.label(l);break}if(r){if(e.urlField&&(a=l.getData(),i=x.retrieveNestedData(this.table.options.nestedFieldSeparator,e.urlField,a)),e.url)switch(typeof e.url){case"string":i=e.url;break;case"function":i=e.url(l);break}return o.setAttribute("href",s+i),e.target&&o.setAttribute("target",e.target),e.download&&(typeof n=="function"?n=n(l):n=n===!0?"":n,o.setAttribute("download",n)),o.innerHTML=this.emptyToSpace(this.sanitizeHTML(r)),o}else return" "}function fi(l,e,t){var i=document.createElement("img"),s=l.getValue();switch(e.urlPrefix&&(s=e.urlPrefix+l.getValue()),e.urlSuffix&&(s=s+e.urlSuffix),i.setAttribute("src",s),typeof e.height){case"number":i.style.height=e.height+"px";break;case"string":i.style.height=e.height;break}switch(typeof e.width){case"number":i.style.width=e.width+"px";break;case"string":i.style.width=e.width;break}return i.addEventListener("load",function(){l.getRow().normalizeHeight()}),i}function pi(l,e,t){var i=l.getValue(),s=l.getElement(),n=e.allowEmpty,r=e.allowTruthy,o=Object.keys(e).includes("trueValue"),a=typeof e.tickElement<"u"?e.tickElement:'',h=typeof e.crossElement<"u"?e.crossElement:'';return o&&i===e.trueValue||!o&&(r&&i||i===!0||i==="true"||i==="True"||i===1||i==="1")?(s.setAttribute("aria-checked",!0),a||""):n&&(i==="null"||i===""||i===null||typeof i>"u")?(s.setAttribute("aria-checked","mixed"),""):(s.setAttribute("aria-checked",!1),h||"")}function mi(l,e,t){var i=window.DateTime||luxon.DateTime,s=e.inputFormat||"yyyy-MM-dd HH:mm:ss",n=e.outputFormat||"dd/MM/yyyy HH:mm:ss",r=typeof e.invalidPlaceholder<"u"?e.invalidPlaceholder:"",o=l.getValue();if(typeof i<"u"){var a;return i.isDateTime(o)?a=o:s==="iso"?a=i.fromISO(String(o)):a=i.fromFormat(String(o),s),a.isValid?(e.timezone&&(a=a.setZone(e.timezone)),a.toFormat(n)):r===!0||!o?o:typeof r=="function"?r(o):r}else console.error("Format Error - 'datetime' formatter is dependant on luxon.js")}function gi(l,e,t){var i=window.DateTime||luxon.DateTime,s=e.inputFormat||"yyyy-MM-dd HH:mm:ss",n=typeof e.invalidPlaceholder<"u"?e.invalidPlaceholder:"",r=typeof e.suffix<"u"?e.suffix:!1,o=typeof e.unit<"u"?e.unit:"days",a=typeof e.humanize<"u"?e.humanize:!1,h=typeof e.date<"u"?e.date:i.now(),d=l.getValue();if(typeof i<"u"){var u;return i.isDateTime(d)?u=d:s==="iso"?u=i.fromISO(String(d)):u=i.fromFormat(String(d),s),u.isValid?a?u.diff(h,o).toHuman()+(r?" "+r:""):parseInt(u.diff(h,o)[o])+(r?" "+r:""):n===!0?d:typeof n=="function"?n(d):n}else console.error("Format Error - 'datetimediff' formatter is dependant on luxon.js")}function bi(l,e,t){var i=l.getValue();return typeof e[i]>"u"?(console.warn("Missing display value for "+i),i):e[i]}function vi(l,e,t){var i=l.getValue(),s=l.getElement(),n=e&&e.stars?e.stars:5,r=document.createElement("span"),o=document.createElementNS("http://www.w3.org/2000/svg","svg"),a='',h='';r.style.verticalAlign="middle",o.setAttribute("width","14"),o.setAttribute("height","14"),o.setAttribute("viewBox","0 0 512 512"),o.setAttribute("xml:space","preserve"),o.style.padding="0 1px",i=i&&!isNaN(i)?parseInt(i):0,i=Math.max(0,Math.min(i,n));for(var d=1;d<=n;d++){var u=o.cloneNode(!0);u.innerHTML=d<=i?a:h,r.appendChild(u)}return s.style.whiteSpace="nowrap",s.style.overflow="hidden",s.style.textOverflow="ellipsis",s.setAttribute("aria-label",i),r}function wi(l,e,t){var i=this.sanitizeHTML(l.getValue())||0,s=document.createElement("span"),n=e&&e.max?e.max:100,r=e&&e.min?e.min:0,o=e&&typeof e.color<"u"?e.color:["red","orange","green"],a="#666666",h,d;if(!(isNaN(i)||typeof l.getValue()>"u")){switch(s.classList.add("tabulator-traffic-light"),d=parseFloat(i)<=n?parseFloat(i):n,d=parseFloat(d)>=r?parseFloat(d):r,h=(n-r)/100,d=Math.round((d-r)/h),typeof o){case"string":a=o;break;case"function":a=o(i);break;case"object":if(Array.isArray(o)){var u=100/o.length,c=Math.floor(d/u);c=Math.min(c,o.length-1),c=Math.max(c,0),a=o[c];break}}return s.style.backgroundColor=a,s}}function Ci(l,e={},t){var i=this.sanitizeHTML(l.getValue())||0,s=l.getElement(),n=e.max?e.max:100,r=e.min?e.min:0,o=e.legendAlign?e.legendAlign:"center",a,h,d,u,c;switch(h=parseFloat(i)<=n?parseFloat(i):n,h=parseFloat(h)>=r?parseFloat(h):r,a=(n-r)/100,h=Math.round((h-r)/a),typeof e.color){case"string":d=e.color;break;case"function":d=e.color(i);break;case"object":if(Array.isArray(e.color)){let v=100/e.color.length,m=Math.floor(h/v);m=Math.min(m,e.color.length-1),m=Math.max(m,0),d=e.color[m];break}default:d="#2DC214"}switch(typeof e.legend){case"string":u=e.legend;break;case"function":u=e.legend(i);break;case"boolean":u=i;break;default:u=!1}switch(typeof e.legendColor){case"string":c=e.legendColor;break;case"function":c=e.legendColor(i);break;case"object":if(Array.isArray(e.legendColor)){let v=100/e.legendColor.length,m=Math.floor(h/v);m=Math.min(m,e.legendColor.length-1),m=Math.max(m,0),c=e.legendColor[m]}break;default:c="#000"}s.style.minWidth="30px",s.style.position="relative",s.setAttribute("aria-label",h);var f=document.createElement("div");f.style.display="inline-block",f.style.width=h+"%",f.style.backgroundColor=d,f.style.height="100%",f.setAttribute("data-max",n),f.setAttribute("data-min",r);var g=document.createElement("div");if(g.style.position="relative",g.style.width="100%",g.style.height="100%",u){var p=document.createElement("div");p.style.position="absolute",p.style.top=0,p.style.left=0,p.style.textAlign=o,p.style.width="100%",p.style.color=c,p.innerHTML=u}return t(function(){if(!(l instanceof Ye)){var v=document.createElement("div");v.style.position="absolute",v.style.top="4px",v.style.bottom="4px",v.style.left="4px",v.style.right="4px",s.appendChild(v),s=v}s.appendChild(g),g.appendChild(f),u&&g.appendChild(p)}),""}function Ei(l,e,t){return l.getElement().style.backgroundColor=this.sanitizeHTML(l.getValue()),""}function yi(l,e,t){return''}function Ri(l,e,t){return''}function xi(l,e,t){var i=l.getValue(),s=e.size||15,n=s+"px",r,o,a=e.hasOwnProperty("onValue")?e.onValue:!0,h=e.hasOwnProperty("offValue")?e.offValue:!1,d=e.onTruthy?i:i===a;return r=document.createElement("div"),r.classList.add("tabulator-toggle"),d?(r.classList.add("tabulator-toggle-on"),r.style.flexDirection="row-reverse",e.onColor&&(r.style.background=e.onColor)):e.offColor&&(r.style.background=e.offColor),r.style.width=2.5*s+"px",r.style.borderRadius=n,e.clickable&&r.addEventListener("click",u=>{l.setValue(d?h:a)}),o=document.createElement("div"),o.classList.add("tabulator-toggle-switch"),o.style.height=n,o.style.width=n,o.style.borderRadius=n,r.appendChild(o),r}function Ti(l,e,t){var i=document.createElement("span"),s=l.getRow(),n=l.getTable();return s.watchPosition(r=>{e.relativeToPage&&(r+=n.modules.page.getPageSize()*(n.modules.page.getPage()-1)),i.innerText=r}),i}function ki(l,e,t){return l.getElement().classList.add("tabulator-row-handle"),"
"}var Mi={plaintext:li,html:hi,textarea:di,money:ui,link:ci,image:fi,tickCross:pi,datetime:mi,datetimediff:gi,lookup:bi,star:vi,traffic:wi,progress:Ci,color:Ei,buttonTick:yi,buttonCross:Ri,toggle:xi,rownum:Ti,handle:ki};const H=class H extends w{constructor(e){super(e),this.registerColumnOption("formatter"),this.registerColumnOption("formatterParams"),this.registerColumnOption("formatterPrint"),this.registerColumnOption("formatterPrintParams"),this.registerColumnOption("formatterClipboard"),this.registerColumnOption("formatterClipboardParams"),this.registerColumnOption("formatterHtmlOutput"),this.registerColumnOption("formatterHtmlOutputParams"),this.registerColumnOption("titleFormatter"),this.registerColumnOption("titleFormatterParams")}initialize(){this.subscribe("cell-format",this.formatValue.bind(this)),this.subscribe("cell-rendered",this.cellRendered.bind(this)),this.subscribe("column-layout",this.initializeColumn.bind(this)),this.subscribe("column-format",this.formatHeader.bind(this))}initializeColumn(e){e.modules.format=this.lookupFormatter(e,""),typeof e.definition.formatterPrint<"u"&&(e.modules.format.print=this.lookupFormatter(e,"Print")),typeof e.definition.formatterClipboard<"u"&&(e.modules.format.clipboard=this.lookupFormatter(e,"Clipboard")),typeof e.definition.formatterHtmlOutput<"u"&&(e.modules.format.htmlOutput=this.lookupFormatter(e,"HtmlOutput"))}lookupFormatter(e,t){var i={params:e.definition["formatter"+t+"Params"]||{}},s=e.definition["formatter"+t];switch(typeof s){case"string":H.formatters[s]?i.formatter=H.formatters[s]:(console.warn("Formatter Error - No such formatter found: ",s),i.formatter=H.formatters.plaintext);break;case"function":i.formatter=s;break;default:i.formatter=H.formatters.plaintext;break}return i}cellRendered(e){e.modules.format&&e.modules.format.renderedCallback&&!e.modules.format.rendered&&(e.modules.format.renderedCallback(),e.modules.format.rendered=!0)}formatHeader(e,t,i){var s,n,r,o;return e.definition.titleFormatter?(s=this.getFormatter(e.definition.titleFormatter),r=a=>{e.titleFormatterRendered=a},o={getValue:function(){return t},getElement:function(){return i},getType:function(){return"header"},getColumn:function(){return e.getComponent()},getTable:()=>this.table},n=e.definition.titleFormatterParams||{},n=typeof n=="function"?n():n,s.call(this,o,n,r)):t}formatValue(e){var t=e.getComponent(),i=typeof e.column.modules.format.params=="function"?e.column.modules.format.params(t):e.column.modules.format.params;function s(n){e.modules.format||(e.modules.format={}),e.modules.format.renderedCallback=n,e.modules.format.rendered=!1}return e.column.modules.format.formatter.call(this,t,i,s)}formatExportValue(e,t){var i=e.column.modules.format[t],s;if(i){let n=function(r){e.modules.format||(e.modules.format={}),e.modules.format.renderedCallback=r,e.modules.format.rendered=!1};return s=typeof i.params=="function"?i.params(e.getComponent()):i.params,i.formatter.call(this,e.getComponent(),s,n)}else return this.formatValue(e)}sanitizeHTML(e){if(e){var t={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/","`":"`","=":"="};return String(e).replace(/[&<>"'`=/]/g,function(i){return t[i]})}else return e}emptyToSpace(e){return e===null||typeof e>"u"||e===""?" ":e}getFormatter(e){switch(typeof e){case"string":H.formatters[e]?e=H.formatters[e]:(console.warn("Formatter Error - No such formatter found: ",e),e=H.formatters.plaintext);break;case"function":break;default:e=H.formatters.plaintext;break}return e}};b(H,"moduleName","format"),b(H,"formatters",Mi);let ye=H;class et extends w{constructor(e){super(e),this.leftColumns=[],this.rightColumns=[],this.initializationMode="left",this.active=!1,this.blocked=!0,this.registerColumnOption("frozen")}reset(){this.initializationMode="left",this.leftColumns=[],this.rightColumns=[],this.active=!1}initialize(){this.subscribe("cell-layout",this.layoutCell.bind(this)),this.subscribe("column-init",this.initializeColumn.bind(this)),this.subscribe("column-width",this.layout.bind(this)),this.subscribe("row-layout-after",this.layoutRow.bind(this)),this.subscribe("table-layout",this.layout.bind(this)),this.subscribe("columns-loading",this.reset.bind(this)),this.subscribe("column-add",this.reinitializeColumns.bind(this)),this.subscribe("column-deleted",this.reinitializeColumns.bind(this)),this.subscribe("column-hide",this.reinitializeColumns.bind(this)),this.subscribe("column-show",this.reinitializeColumns.bind(this)),this.subscribe("columns-loaded",this.reinitializeColumns.bind(this)),this.subscribe("table-redraw",this.layout.bind(this)),this.subscribe("layout-refreshing",this.blockLayout.bind(this)),this.subscribe("layout-refreshed",this.unblockLayout.bind(this)),this.subscribe("scrollbar-vertical",this.adjustForScrollbar.bind(this))}blockLayout(){this.blocked=!0}unblockLayout(){this.blocked=!1}layoutCell(e){this.layoutElement(e.element,e.column)}reinitializeColumns(){this.reset(),this.table.columnManager.columnsByIndex.forEach(e=>{this.initializeColumn(e)}),this.layout()}initializeColumn(e){var t={margin:0,edge:!1};e.isGroup||(this.frozenCheck(e)?(t.position=this.initializationMode,this.initializationMode=="left"?this.leftColumns.push(e):this.rightColumns.unshift(e),this.active=!0,e.modules.frozen=t):this.initializationMode="right")}frozenCheck(e){return e.parent.isGroup&&e.definition.frozen&&console.warn("Frozen Column Error - Parent column group must be frozen, not individual columns or sub column groups"),e.parent.isGroup?this.frozenCheck(e.parent):e.definition.frozen}layoutCalcRows(){this.table.modExists("columnCalcs")&&(this.table.modules.columnCalcs.topInitialized&&this.table.modules.columnCalcs.topRow&&this.layoutRow(this.table.modules.columnCalcs.topRow),this.table.modules.columnCalcs.botInitialized&&this.table.modules.columnCalcs.botRow&&this.layoutRow(this.table.modules.columnCalcs.botRow),this.table.modExists("groupRows")&&this.layoutGroupCalcs(this.table.modules.groupRows.getGroups()))}layoutGroupCalcs(e){e.forEach(t=>{t.calcs.top&&this.layoutRow(t.calcs.top),t.calcs.bottom&&this.layoutRow(t.calcs.bottom),t.groupList&&t.groupList.length&&this.layoutGroupCalcs(t.groupList)})}layoutColumnPosition(e){var t=[],i=0,s=0;this.leftColumns.forEach((n,r)=>{if(n.modules.frozen.marginValue=i,n.modules.frozen.margin=n.modules.frozen.marginValue+"px",n.visible&&(i+=n.getWidth()),r==this.leftColumns.length-1?n.modules.frozen.edge=!0:n.modules.frozen.edge=!1,n.parent.isGroup){var o=this.getColGroupParentElement(n);t.includes(o)||(this.layoutElement(o,n),t.push(o)),o.classList.toggle("tabulator-frozen-left",n.modules.frozen.edge&&n.modules.frozen.position==="left"),o.classList.toggle("tabulator-frozen-right",n.modules.frozen.edge&&n.modules.frozen.position==="right")}else this.layoutElement(n.getElement(),n);e&&n.cells.forEach(a=>{this.layoutElement(a.getElement(!0),n)})}),this.rightColumns.forEach((n,r)=>{n.modules.frozen.marginValue=s,n.modules.frozen.margin=n.modules.frozen.marginValue+"px",n.visible&&(s+=n.getWidth()),r==this.rightColumns.length-1?n.modules.frozen.edge=!0:n.modules.frozen.edge=!1,n.parent.isGroup?this.layoutElement(this.getColGroupParentElement(n),n):this.layoutElement(n.getElement(),n),e&&n.cells.forEach(o=>{this.layoutElement(o.getElement(!0),n)})})}getColGroupParentElement(e){return e.parent.isGroup?this.getColGroupParentElement(e.parent):e.getElement()}layout(){this.active&&!this.blocked&&(this.layoutColumnPosition(),this.reinitializeRows(),this.layoutCalcRows())}reinitializeRows(){var e=this.table.rowManager.getVisibleRows(!0),t=this.table.rowManager.getRows().filter(i=>!e.includes(i));t.forEach(i=>{i.deinitialize()}),e.forEach(i=>{i.type==="row"&&this.layoutRow(i)})}layoutRow(e){this.table.options.layout==="fitDataFill"&&this.rightColumns.length&&(this.table.rowManager.getTableElement().style.minWidth="calc(100% - "+this.rightMargin+")"),this.leftColumns.forEach(t=>{var i=e.getCell(t);i&&this.layoutElement(i.getElement(!0),t)}),this.rightColumns.forEach(t=>{var i=e.getCell(t);i&&this.layoutElement(i.getElement(!0),t)})}layoutElement(e,t){var i;t.modules.frozen&&e&&(e.style.position="sticky",this.table.rtl?i=t.modules.frozen.position==="left"?"right":"left":i=t.modules.frozen.position,e.style[i]=t.modules.frozen.margin,e.classList.add("tabulator-frozen"),e.classList.toggle("tabulator-frozen-left",t.modules.frozen.edge&&t.modules.frozen.position==="left"),e.classList.toggle("tabulator-frozen-right",t.modules.frozen.edge&&t.modules.frozen.position==="right"))}adjustForScrollbar(e){this.rightColumns.length&&(this.table.columnManager.getContentsElement().style.width="calc(100% - "+e+"px)")}getFrozenColumns(){return this.leftColumns.concat(this.rightColumns)}_calcSpace(e,t){var i=0;for(let s=0;s{this.initializeRow(e)})}initializeRow(e){var t=this.table.options.frozenRows,i=typeof t;i==="number"?e.getPosition()&&e.getPosition()+this.rows.length<=t&&this.freezeRow(e):i==="function"?t.call(this.table,e.getComponent())&&this.freezeRow(e):Array.isArray(t)&&t.includes(e.data[this.options("frozenRowsField")])&&this.freezeRow(e)}isRowFrozen(e){var t=this.rows.indexOf(e);return t>-1}isFrozen(){return!!this.rows.length}visibleRows(e,t){return this.rows.forEach(i=>{t.push(i)}),t}getRows(e){var t=e.slice(0);return this.rows.forEach(function(i){var s=t.indexOf(i);s>-1&&t.splice(s,1)}),t}freezeRow(e){e.modules.frozen?console.warn("Freeze Error - Row is already frozen"):(e.modules.frozen=!0,this.topElement.appendChild(e.getElement()),e.initialize(),e.normalizeHeight(),this.rows.push(e),this.refreshData(!1,"display"),this.table.rowManager.adjustTableSize(),this.styleRows())}unfreezeRow(e){e.modules.frozen?(e.modules.frozen=!1,this.detachRow(e),this.table.rowManager.adjustTableSize(),this.refreshData(!1,"display"),this.rows.length&&this.styleRows()):console.warn("Freeze Error - Row is already unfrozen")}detachRow(e){var t=this.rows.indexOf(e);if(t>-1){var i=e.getElement();i.parentNode&&i.parentNode.removeChild(i),this.rows.splice(t,1)}}styleRows(e){this.rows.forEach((t,i)=>{this.table.rowManager.styleRow(t,i)})}}b(tt,"moduleName","frozenRows");class Li{constructor(e){return this._group=e,this.type="GroupComponent",new Proxy(this,{get:function(t,i,s){return typeof t[i]<"u"?t[i]:t._group.groupManager.table.componentFunctionBinder.handle("group",t._group,i)}})}getKey(){return this._group.key}getField(){return this._group.field}getElement(){return this._group.element}getRows(){return this._group.getRows(!0)}getSubGroups(){return this._group.getSubGroups(!0)}getParentGroup(){return this._group.parent?this._group.parent.getComponent():!1}isVisible(){return this._group.visible}show(){this._group.show()}hide(){this._group.hide()}toggle(){this._group.toggleVisibility()}scrollTo(e,t){return this._group.groupManager.table.rowManager.scrollToRow(this._group,e,t)}_getSelf(){return this._group}getTable(){return this._group.groupManager.table}}class J{constructor(e,t,i,s,n,r,o){this.groupManager=e,this.parent=t,this.key=s,this.level=i,this.field=n,this.hasSubGroups=i{t.modules&&delete t.modules.group})),this.element=!1,this.arrowElement=!1,this.elementContents=!1}createElements(){var e=document.createElement("div");e.classList.add("tabulator-arrow"),this.element=document.createElement("div"),this.element.classList.add("tabulator-row"),this.element.classList.add("tabulator-group"),this.element.classList.add("tabulator-group-level-"+this.level),this.element.setAttribute("role","rowgroup"),this.arrowElement=document.createElement("div"),this.arrowElement.classList.add("tabulator-group-toggle"),this.arrowElement.appendChild(e),this.groupManager.table.options.movableRows!==!1&&this.groupManager.table.modExists("moveRow")&&this.groupManager.table.modules.moveRow.initializeGroupHeader(this)}createValueGroups(){var e=this.level+1;this.groupManager.allowedValues&&this.groupManager.allowedValues[e]&&this.groupManager.allowedValues[e].forEach(t=>{this._createGroup(t,e)})}addBindings(){var e;this.groupManager.table.options.groupToggleElement&&(e=this.groupManager.table.options.groupToggleElement=="arrow"?this.arrowElement:this.element,e.addEventListener("click",t=>{this.groupManager.table.options.groupToggleElement==="arrow"&&(t.stopPropagation(),t.stopImmediatePropagation()),setTimeout(()=>{this.toggleVisibility()})}))}_createGroup(e,t){var i=t+"_"+e,s=new J(this.groupManager,this,t,e,this.groupManager.groupIDLookups[t].field,this.groupManager.headerGenerator[t]||this.groupManager.headerGenerator[0],this.old?this.old.groups[i]:!1);this.groups[i]=s,this.groupList.push(s)}_addRowToGroup(e){var t=this.level+1;if(this.hasSubGroups){var i=this.groupManager.groupIDLookups[t].func(e.getData()),s=t+"_"+i;this.groupManager.allowedValues&&this.groupManager.allowedValues[t]?this.groups[s]&&this.groups[s].addRow(e):(this.groups[s]||this._createGroup(i,t),this.groups[s].addRow(e))}}_addRow(e){this.rows.push(e),e.modules.group=this}insertRow(e,t,i){var s=this.conformRowData({});e.updateData(s);var n=this.rows.indexOf(t);n>-1?i?this.rows.splice(n+1,0,e):this.rows.splice(n,0,e):i?this.rows.push(e):this.rows.unshift(e),e.modules.group=this,this.groupManager.table.modExists("columnCalcs")&&this.groupManager.table.options.columnCalcs!="table"&&this.groupManager.table.modules.columnCalcs.recalcGroup(this),this.groupManager.updateGroupRows(!0)}scrollHeader(e){this.arrowElement&&(this.arrowElement.style.marginLeft=e,this.groupList.forEach(function(t){t.scrollHeader(e)}))}getRowIndex(e){}conformRowData(e){return this.field?e[this.field]=this.key:console.warn("Data Conforming Error - Cannot conform row data to match new group as groupBy is a function"),this.parent&&(e=this.parent.conformRowData(e)),e}removeRow(e){var t=this.rows.indexOf(e),i=e.getElement();t>-1&&this.rows.splice(t,1),!this.groupManager.table.options.groupValues&&!this.rows.length?(this.parent?this.parent.removeGroup(this):this.groupManager.removeGroup(this),this.groupManager.updateGroupRows(!0)):(i.parentNode&&i.parentNode.removeChild(i),this.groupManager.blockRedraw||(this.generateGroupHeaderContents(),this.groupManager.table.modExists("columnCalcs")&&this.groupManager.table.options.columnCalcs!="table"&&this.groupManager.table.modules.columnCalcs.recalcGroup(this)))}removeGroup(e){var t=e.level+"_"+e.key,i;this.groups[t]&&(delete this.groups[t],i=this.groupList.indexOf(e),i>-1&&this.groupList.splice(i,1),this.groupList.length||(this.parent?this.parent.removeGroup(this):this.groupManager.removeGroup(this)))}getHeadersAndRows(){var e=[];return e.push(this),this._visSet(),this.calcs.top&&(this.calcs.top.detachElement(),this.calcs.top.deleteCells()),this.calcs.bottom&&(this.calcs.bottom.detachElement(),this.calcs.bottom.deleteCells()),this.visible?this.groupList.length?this.groupList.forEach(function(t){e=e.concat(t.getHeadersAndRows())}):(this.groupManager.table.options.columnCalcs!="table"&&this.groupManager.table.modExists("columnCalcs")&&this.groupManager.table.modules.columnCalcs.hasTopCalcs()&&(this.calcs.top=this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows),e.push(this.calcs.top)),e=e.concat(this.rows),this.groupManager.table.options.columnCalcs!="table"&&this.groupManager.table.modExists("columnCalcs")&&this.groupManager.table.modules.columnCalcs.hasBottomCalcs()&&(this.calcs.bottom=this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows),e.push(this.calcs.bottom))):!this.groupList.length&&this.groupManager.table.options.columnCalcs!="table"&&this.groupManager.table.modExists("columnCalcs")&&(this.groupManager.table.modules.columnCalcs.hasTopCalcs()&&this.groupManager.table.options.groupClosedShowCalcs&&(this.calcs.top=this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows),e.push(this.calcs.top)),this.groupManager.table.modules.columnCalcs.hasBottomCalcs()&&this.groupManager.table.options.groupClosedShowCalcs&&(this.calcs.bottom=this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows),e.push(this.calcs.bottom))),e}getData(e,t){var i=[];return this._visSet(),(!e||e&&this.visible)&&this.rows.forEach(s=>{i.push(s.getData(t||"data"))}),i}getRowCount(){var e=0;return this.groupList.length?this.groupList.forEach(t=>{e+=t.getRowCount()}):e=this.rows.length,e}toggleVisibility(){this.visible?this.hide():this.show()}hide(){this.visible=!1,this.groupManager.table.rowManager.getRenderMode()=="basic"&&!this.groupManager.table.options.pagination?(this.element.classList.remove("tabulator-group-visible"),this.groupList.length?this.groupList.forEach(e=>{var t=e.getHeadersAndRows();t.forEach(i=>{i.detachElement()})}):this.rows.forEach(e=>{var t=e.getElement();t.parentNode.removeChild(t)}),this.groupManager.updateGroupRows(!0)):this.groupManager.updateGroupRows(!0),this.groupManager.table.externalEvents.dispatch("groupVisibilityChanged",this.getComponent(),!1)}show(){if(this.visible=!0,this.groupManager.table.rowManager.getRenderMode()=="basic"&&!this.groupManager.table.options.pagination){this.element.classList.add("tabulator-group-visible");var e=this.generateElement();this.groupList.length?this.groupList.forEach(t=>{var i=t.getHeadersAndRows();i.forEach(s=>{var n=s.getElement();e.parentNode.insertBefore(n,e.nextSibling),s.initialize(),e=n})}):this.rows.forEach(t=>{var i=t.getElement();e.parentNode.insertBefore(i,e.nextSibling),t.initialize(),e=i}),this.groupManager.updateGroupRows(!0)}else this.groupManager.updateGroupRows(!0);this.groupManager.table.externalEvents.dispatch("groupVisibilityChanged",this.getComponent(),!0)}_visSet(){var e=[];typeof this.visible=="function"&&(this.rows.forEach(function(t){e.push(t.getData())}),this.visible=this.visible(this.key,this.getRowCount(),e,this.getComponent()))}getRowGroup(e){var t=!1;return this.groupList.length?this.groupList.forEach(function(i){var s=i.getRowGroup(e);s&&(t=s)}):this.rows.find(function(i){return i===e})&&(t=this),t}getSubGroups(e){var t=[];return this.groupList.forEach(function(i){t.push(e?i.getComponent():i)}),t}getRows(e,t){var i=[];return t&&this.groupList.length?this.groupList.forEach(s=>{i=i.concat(s.getRows(e,t))}):this.rows.forEach(function(s){i.push(e?s.getComponent():s)}),i}generateGroupHeaderContents(){var e=[],t=this.getRows(!1,!0);for(t.forEach(function(i){e.push(i.getData())}),this.elementContents=this.generator(this.key,this.getRowCount(),e,this.getComponent());this.element.firstChild;)this.element.removeChild(this.element.firstChild);typeof this.elementContents=="string"?this.element.innerHTML=this.elementContents:this.element.appendChild(this.elementContents),this.element.insertBefore(this.arrowElement,this.element.firstChild)}getPath(e=[]){return e.unshift(this.key),this.parent&&this.parent.getPath(e),e}getElement(){return this.elementContents?this.element:this.generateElement()}generateElement(){this.addBindings=!1,this._visSet(),this.visible?this.element.classList.add("tabulator-group-visible"):this.element.classList.remove("tabulator-group-visible");for(var e=0;ei.length&&console.warn("Error creating group headers, groupHeader array is shorter than groupBy array"),this.headerGenerator=[function(){return""}],this.startOpen=[function(){return!1}],this.langBind("groups|item",(n,r)=>{this.headerGenerator[0]=(o,a,h)=>(typeof o>"u"?"":o)+"("+a+" "+(a===1?n:r.groups.items)+")"}),this.groupIDLookups=[],e)this.table.modExists("columnCalcs")&&this.table.options.columnCalcs!="table"&&this.table.options.columnCalcs!="both"&&this.table.modules.columnCalcs.removeCalcs();else if(this.table.modExists("columnCalcs")&&this.table.options.columnCalcs!="group"){var s=this.table.columnManager.getRealColumns();s.forEach(n=>{n.definition.topCalc&&this.table.modules.columnCalcs.initializeTopRow(),n.definition.bottomCalc&&this.table.modules.columnCalcs.initializeBottomRow()})}Array.isArray(e)||(e=[e]),e.forEach((n,r)=>{var o,a;typeof n=="function"?o=n:(a=this.table.columnManager.getColumnByField(n),a?o=function(h){return a.getFieldValue(h)}:o=function(h){return h[n]}),this.groupIDLookups.push({field:typeof n=="function"?!1:n,func:o,values:this.allowedValues?this.allowedValues[r]:!1})}),t&&(Array.isArray(t)||(t=[t]),t.forEach(n=>{}),this.startOpen=t),i&&(this.headerGenerator=Array.isArray(i)?i:[i])}else this.groupList=[],this.groups={}}rowSample(e,t){if(this.table.options.groupBy){var i=this.getGroups(!1)[0];t.push(i.getRows(!1)[0])}return t}virtualRenderFill(){var e=this.table.rowManager.tableElement,t=this.table.rowManager.getVisibleRows();if(this.table.options.groupBy)t=t.filter(i=>i.type!=="group"),e.style.minWidth=t.length?"":this.table.columnManager.getWidth()+"px";else return t}rowAddingIndex(e,t,i){if(this.table.options.groupBy){this.assignRowToGroup(e);var s=e.modules.group.rows;return s.length>1&&(!t||t&&s.indexOf(t)==-1?i?s[0]!==e&&(t=s[0],this.table.rowManager.moveRowInArray(e.modules.group.rows,e,t,!i)):s[s.length-1]!==e&&(t=s[s.length-1],this.table.rowManager.moveRowInArray(e.modules.group.rows,e,t,!i)):this.table.rowManager.moveRowInArray(e.modules.group.rows,e,t,!i)),t}}trackChanges(){this.dispatch("group-changed")}setGroupBy(e){this.table.options.groupBy=e,this.initialized||this.initialize(),this.configureGroupSetup(),!e&&this.table.modExists("columnCalcs")&&this.table.options.columnCalcs===!0&&this.table.modules.columnCalcs.reinitializeCalcs(),this.refreshData(),this.trackChanges()}setGroupValues(e){this.table.options.groupValues=e,this.configureGroupSetup(),this.refreshData(),this.trackChanges()}setGroupStartOpen(e){this.table.options.groupStartOpen=e,this.configureGroupSetup(),this.table.options.groupBy?(this.refreshData(),this.trackChanges()):console.warn("Grouping Update - cant refresh view, no groups have been set")}setGroupHeader(e){this.table.options.groupHeader=e,this.configureGroupSetup(),this.table.options.groupBy?(this.refreshData(),this.trackChanges()):console.warn("Grouping Update - cant refresh view, no groups have been set")}userGetGroups(e){return this.getGroups(!0)}userGetGroupedData(){return this.table.options.groupBy?this.getGroupedData():this.getData()}rowGetGroup(e){return e.modules.group?e.modules.group.getComponent():!1}rowMoving(e,t,i){if(this.table.options.groupBy){!i&&t instanceof J&&(t=this.table.rowManager.prevDisplayRow(e)||t);var s=t instanceof J?t:t.modules.group,n=e instanceof J?e:e.modules.group;s===n?this.table.rowManager.moveRowInArray(s.rows,e,t,i):(n&&n.removeRow(e),s.insertRow(e,t,i))}}rowDeleting(e){this.table.options.groupBy&&e.modules.group&&e.modules.group.removeRow(e)}rowsUpdated(e){this.table.options.groupBy&&this.updateGroupRows(!0)}cellUpdated(e){this.table.options.groupBy&&this.reassignRowToGroup(e.row)}getRows(e){return this.table.options.groupBy&&this.groupIDLookups.length?(this.dispatchExternal("dataGrouping"),this.generateGroups(e),this.subscribedExternal("dataGrouped")&&this.dispatchExternal("dataGrouped",this.getGroups(!0)),this.updateGroupRows()):e.slice(0)}getGroups(e){var t=[];return this.groupList.forEach(function(i){t.push(e?i.getComponent():i)}),t}getChildGroups(e){var t=[];return e||(e=this),e.groupList.forEach(i=>{i.groupList.length?t=t.concat(this.getChildGroups(i)):t.push(i)}),t}wipe(){this.table.options.groupBy&&(this.groupList.forEach(function(e){e.wipe()}),this.groupList=[],this.groups={})}pullGroupListData(e){var t=[];return e.forEach(i=>{var s={};s.level=0,s.rowCount=0,s.headerContent="";var n=[];i.hasSubGroups?(n=this.pullGroupListData(i.groupList),s.level=i.level,s.rowCount=n.length-i.groupList.length,s.headerContent=i.generator(i.key,s.rowCount,i.rows,i),t.push(s),t=t.concat(n)):(s.level=i.level,s.headerContent=i.generator(i.key,i.rows.length,i.rows,i),s.rowCount=i.getRows().length,t.push(s),i.getRows().forEach(r=>{t.push(r.getData("data"))}))}),t}getGroupedData(){return this.pullGroupListData(this.groupList)}getRowGroup(e){var t=!1;return this.options("dataTree")&&(e=this.table.modules.dataTree.getTreeParentRoot(e)),this.groupList.forEach(i=>{var s=i.getRowGroup(e);s&&(t=s)}),t}countGroups(){return this.groupList.length}generateGroups(e){var t=this.groups;this.groups={},this.groupList=[],this.allowedValues&&this.allowedValues[0]?(this.allowedValues[0].forEach(i=>{this.createGroup(i,0,t)}),e.forEach(i=>{this.assignRowToExistingGroup(i,t)})):e.forEach(i=>{this.assignRowToGroup(i,t)}),Object.values(t).forEach(i=>{i.wipe(!0)})}createGroup(e,t,i){var s=t+"_"+e,n;i=i||[],n=new J(this,!1,t,e,this.groupIDLookups[0].field,this.headerGenerator[0],i[s]),this.groups[s]=n,this.groupList.push(n)}assignRowToExistingGroup(e,t){var i=this.groupIDLookups[0].func(e.getData()),s="0_"+i;this.groups[s]&&this.groups[s].addRow(e)}assignRowToGroup(e,t){var i=this.groupIDLookups[0].func(e.getData()),s=!this.groups["0_"+i];return s&&this.createGroup(i,0,t),this.groups["0_"+i].addRow(e),!s}reassignRowToGroup(e){if(e.type==="row"){var t=e.modules.group,i=t.getPath(),s=this.getExpectedPath(e),n;n=i.length==s.length&&i.every((r,o)=>r===s[o]),n||(t.removeRow(e),this.assignRowToGroup(e,this.groups),this.refreshData(!0))}}getExpectedPath(e){var t=[],i=e.getData();return this.groupIDLookups.forEach(s=>{t.push(s.func(i))}),t}updateGroupRows(e){var t=[];return this.blockRedraw||(this.groupList.forEach(i=>{t=t.concat(i.getHeadersAndRows())}),e&&this.refreshData(!0)),t}scrollHeaders(e){this.table.options.groupBy&&(this.table.options.renderHorizontal==="virtual"&&(e-=this.table.columnManager.renderer.vDomPadLeft),e=e+"px",this.groupList.forEach(t=>{t.scrollHeader(e)}))}removeGroup(e){var t=e.level+"_"+e.key,i;this.groups[t]&&(delete this.groups[t],i=this.groupList.indexOf(e),i>-1&&this.groupList.splice(i,1))}checkBasicModeGroupHeaderWidth(){var e=this.table.rowManager.tableElement,t=!0;this.table.rowManager.getDisplayRows().forEach((i,s)=>{this.table.rowManager.styleRow(i,s),e.appendChild(i.getElement()),i.initialize(!0),i.type!=="group"&&(t=!1)}),t?e.style.minWidth=this.table.columnManager.getWidth()+"px":e.style.minWidth=""}}b(it,"moduleName","groupRows");var Si={cellEdit:function(l){l.component.setValueProcessData(l.data.oldValue),l.component.cellRendered()},rowAdd:function(l){l.component.deleteActual(),this.table.rowManager.checkPlaceholder()},rowDelete:function(l){var e=this.table.rowManager.addRowActual(l.data.data,l.data.pos,l.data.index);this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.updateGroupRows(!0),this._rebindRow(l.component,e),this.table.rowManager.checkPlaceholder()},rowMove:function(l){var e=l.data.posFrom-l.data.posTo>0;this.table.rowManager.moveRowActual(l.component,this.table.rowManager.getRowFromPosition(l.data.posFrom),e),this.table.rowManager.regenerateRowPositions(),this.table.rowManager.reRenderInPosition()}},Di={cellEdit:function(l){l.component.setValueProcessData(l.data.newValue),l.component.cellRendered()},rowAdd:function(l){var e=this.table.rowManager.addRowActual(l.data.data,l.data.pos,l.data.index);this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.updateGroupRows(!0),this._rebindRow(l.component,e),this.table.rowManager.checkPlaceholder()},rowDelete:function(l){l.component.deleteActual(),this.table.rowManager.checkPlaceholder()},rowMove:function(l){this.table.rowManager.moveRowActual(l.component,this.table.rowManager.getRowFromPosition(l.data.posTo),l.data.after),this.table.rowManager.regenerateRowPositions(),this.table.rowManager.reRenderInPosition()}},zi={undo:["ctrl + 90","meta + 90"],redo:["ctrl + 89","meta + 89"]},Hi={undo:function(l){var e=!1;this.table.options.history&&this.table.modExists("history")&&this.table.modExists("edit")&&(e=this.table.modules.edit.currentCell,e||(l.preventDefault(),this.table.modules.history.undo()))},redo:function(l){var e=!1;this.table.options.history&&this.table.modExists("history")&&this.table.modExists("edit")&&(e=this.table.modules.edit.currentCell,e||(l.preventDefault(),this.table.modules.history.redo()))}},Fi={keybindings:{bindings:zi,actions:Hi}};const I=class I extends w{constructor(e){super(e),this.history=[],this.index=-1,this.registerTableOption("history",!1)}initialize(){this.table.options.history&&(this.subscribe("cell-value-updated",this.cellUpdated.bind(this)),this.subscribe("cell-delete",this.clearComponentHistory.bind(this)),this.subscribe("row-delete",this.rowDeleted.bind(this)),this.subscribe("rows-wipe",this.clear.bind(this)),this.subscribe("row-added",this.rowAdded.bind(this)),this.subscribe("row-move",this.rowMoved.bind(this))),this.registerTableFunction("undo",this.undo.bind(this)),this.registerTableFunction("redo",this.redo.bind(this)),this.registerTableFunction("getHistoryUndoSize",this.getHistoryUndoSize.bind(this)),this.registerTableFunction("getHistoryRedoSize",this.getHistoryRedoSize.bind(this)),this.registerTableFunction("clearHistory",this.clear.bind(this))}rowMoved(e,t,i){this.action("rowMove",e,{posFrom:e.getPosition(),posTo:t.getPosition(),to:t,after:i})}rowAdded(e,t,i,s){this.action("rowAdd",e,{data:t,pos:i,index:s})}rowDeleted(e){var t,i;this.table.options.groupBy?(i=e.getComponent().getGroup()._getSelf().rows,t=i.indexOf(e),t&&(t=i[t-1])):(t=e.table.rowManager.getRowIndex(e),t&&(t=e.table.rowManager.rows[t-1])),this.action("rowDelete",e,{data:e.getData(),pos:!t,index:t})}cellUpdated(e){this.action("cellEdit",e,{oldValue:e.oldValue,newValue:e.value})}clear(){this.history=[],this.index=-1}action(e,t,i){this.history=this.history.slice(0,this.index+1),this.history.push({type:e,component:t,data:i}),this.index++}getHistoryUndoSize(){return this.index+1}getHistoryRedoSize(){return this.history.length-(this.index+1)}clearComponentHistory(e){var t=this.history.findIndex(function(i){return i.component===e});t>-1&&(this.history.splice(t,1),t<=this.index&&this.index--,this.clearComponentHistory(e))}undo(){if(this.index>-1){let e=this.history[this.index];return I.undoers[e.type].call(this,e),this.index--,this.dispatchExternal("historyUndo",e.type,e.component.getComponent(),e.data),!0}else return console.warn(this.options("history")?"History Undo Error - No more history to undo":"History module not enabled"),!1}redo(){if(this.history.length-1>this.index){this.index++;let e=this.history[this.index];return I.redoers[e.type].call(this,e),this.dispatchExternal("historyRedo",e.type,e.component.getComponent(),e.data),!0}else return console.warn(this.options("history")?"History Redo Error - No more history to redo":"History module not enabled"),!1}_rebindRow(e,t){this.history.forEach(function(i){if(i.component instanceof S)i.component===e&&(i.component=t);else if(i.component instanceof ne&&i.component.row===e){var s=i.component.column.getField();s&&(i.component=t.getCell(s))}})}};b(I,"moduleName","history"),b(I,"moduleExtensions",Fi),b(I,"undoers",Si),b(I,"redoers",Di);let Re=I;class st extends w{constructor(e){super(e),this.fieldIndex=[],this.hasIndex=!1}initialize(){this.tableElementCheck()}tableElementCheck(){this.table.originalElement&&this.table.originalElement.tagName==="TABLE"&&(this.table.originalElement.childNodes.length?this.parseTable():console.warn("Unable to parse data from empty table tag, Tabulator should be initialized on a div tag unless importing data from a table element."))}parseTable(){var e=this.table.originalElement,t=this.table.options,i=e.getElementsByTagName("th"),s=e.getElementsByTagName("tbody")[0],n=[];this.hasIndex=!1,this.dispatchExternal("htmlImporting"),s=s?s.getElementsByTagName("tr"):[],this._extractOptions(e,t),i.length?this._extractHeaders(i,s):this._generateBlankHeaders(i,s);for(var r=0;r{r[d.toLowerCase()]=d});for(var o in s){var a=s[o],h;a&&typeof a=="object"&&a.name&&a.name.indexOf("tabulator-")===0&&(h=a.name.replace("tabulator-",""),typeof r[h]<"u"&&(t[r[h]]=this._attribValue(a.value)))}}_attribValue(e){return e==="true"?!0:e==="false"?!1:e}_findCol(e){var t=this.table.options.columns.find(i=>i.title===e);return t||!1}_extractHeaders(e,t){for(var i=0;i(console.error("Import Error:",r||"Unable to import data"),Promise.reject(r)))}lookupImporter(e){var t;return e||(e=this.table.options.importFormat),typeof e=="string"?t=ee.importers[e]:t=e,t||console.error("Import Error - Importer not found:",e),t}importFromFile(e,t,i){var s=this.lookupImporter(e);if(s)return this.pickFile(t,i).then(this.importData.bind(this,s)).then(this.structureData.bind(this)).then(this.setData.bind(this)).catch(n=>(this.dispatch("import-error",n),this.dispatchExternal("importError",n),console.error("Import Error:",n||"Unable to import file"),Promise.reject(n)))}pickFile(e,t){return new Promise((i,s)=>{var n=document.createElement("input");n.type="file",n.accept=e,n.addEventListener("change",r=>{var o=n.files[0],a=new FileReader;switch(this.dispatch("import-importing",n.files),this.dispatchExternal("importImporting",n.files),t||this.table.options.importReader){case"buffer":a.readAsArrayBuffer(o);break;case"binary":a.readAsBinaryString(o);break;case"url":a.readAsDataURL(o);break;case"text":default:a.readAsText(o)}a.onload=h=>{i(a.result)},a.onerror=h=>{console.warn("File Load Error - Unable to read file"),s()}}),this.dispatch("import-choose"),this.dispatchExternal("importChoose"),n.click()})}importData(e,t){var i=e.call(this.table,t);return i instanceof Promise?i:i?Promise.resolve(i):Promise.reject()}structureData(e){var t=[];return Array.isArray(e)&&e.length&&Array.isArray(e[0])?(this.table.options.autoColumns?t=this.structureArrayToObject(e):t=this.structureArrayToColumns(e),t):e}structureArrayToObject(e){var t=e.shift(),i=e.map(s=>{var n={};return t.forEach((r,o)=>{n[r]=s[o]}),n});return i}structureArrayToColumns(e){var t=[],i=this.table.getColumns();return i[0]&&e[0][0]&&i[0].getDefinition().title===e[0][0]&&e.shift(),e.forEach(s=>{var n={};s.forEach((r,o)=>{var a=i[o];a&&(n[a.getField()]=r)}),t.push(n)}),t}setData(e){return this.dispatch("import-imported",e),this.dispatchExternal("importImported",e),this.table.setData(e)}};b(ee,"moduleName","import"),b(ee,"importers",Bi);let xe=ee;class nt extends w{constructor(e){super(e),this.eventMap={rowClick:"row-click",rowDblClick:"row-dblclick",rowContext:"row-contextmenu",rowMouseEnter:"row-mouseenter",rowMouseLeave:"row-mouseleave",rowMouseOver:"row-mouseover",rowMouseOut:"row-mouseout",rowMouseMove:"row-mousemove",rowMouseDown:"row-mousedown",rowMouseUp:"row-mouseup",rowTap:"row",rowDblTap:"row",rowTapHold:"row",cellClick:"cell-click",cellDblClick:"cell-dblclick",cellContext:"cell-contextmenu",cellMouseEnter:"cell-mouseenter",cellMouseLeave:"cell-mouseleave",cellMouseOver:"cell-mouseover",cellMouseOut:"cell-mouseout",cellMouseMove:"cell-mousemove",cellMouseDown:"cell-mousedown",cellMouseUp:"cell-mouseup",cellTap:"cell",cellDblTap:"cell",cellTapHold:"cell",headerClick:"column-click",headerDblClick:"column-dblclick",headerContext:"column-contextmenu",headerMouseEnter:"column-mouseenter",headerMouseLeave:"column-mouseleave",headerMouseOver:"column-mouseover",headerMouseOut:"column-mouseout",headerMouseMove:"column-mousemove",headerMouseDown:"column-mousedown",headerMouseUp:"column-mouseup",headerTap:"column",headerDblTap:"column",headerTapHold:"column",groupClick:"group-click",groupDblClick:"group-dblclick",groupContext:"group-contextmenu",groupMouseEnter:"group-mouseenter",groupMouseLeave:"group-mouseleave",groupMouseOver:"group-mouseover",groupMouseOut:"group-mouseout",groupMouseMove:"group-mousemove",groupMouseDown:"group-mousedown",groupMouseUp:"group-mouseup",groupTap:"group",groupDblTap:"group",groupTapHold:"group"},this.subscribers={},this.touchSubscribers={},this.columnSubscribers={},this.touchWatchers={row:{tap:null,tapDbl:null,tapHold:null},cell:{tap:null,tapDbl:null,tapHold:null},column:{tap:null,tapDbl:null,tapHold:null},group:{tap:null,tapDbl:null,tapHold:null}},this.registerColumnOption("headerClick"),this.registerColumnOption("headerDblClick"),this.registerColumnOption("headerContext"),this.registerColumnOption("headerMouseEnter"),this.registerColumnOption("headerMouseLeave"),this.registerColumnOption("headerMouseOver"),this.registerColumnOption("headerMouseOut"),this.registerColumnOption("headerMouseMove"),this.registerColumnOption("headerMouseDown"),this.registerColumnOption("headerMouseUp"),this.registerColumnOption("headerTap"),this.registerColumnOption("headerDblTap"),this.registerColumnOption("headerTapHold"),this.registerColumnOption("cellClick"),this.registerColumnOption("cellDblClick"),this.registerColumnOption("cellContext"),this.registerColumnOption("cellMouseEnter"),this.registerColumnOption("cellMouseLeave"),this.registerColumnOption("cellMouseOver"),this.registerColumnOption("cellMouseOut"),this.registerColumnOption("cellMouseMove"),this.registerColumnOption("cellMouseDown"),this.registerColumnOption("cellMouseUp"),this.registerColumnOption("cellTap"),this.registerColumnOption("cellDblTap"),this.registerColumnOption("cellTapHold")}initialize(){this.initializeExternalEvents(),this.subscribe("column-init",this.initializeColumn.bind(this)),this.subscribe("cell-dblclick",this.cellContentsSelectionFixer.bind(this)),this.subscribe("scroll-horizontal",this.clearTouchWatchers.bind(this)),this.subscribe("scroll-vertical",this.clearTouchWatchers.bind(this))}clearTouchWatchers(){var e=Object.values(this.touchWatchers);e.forEach(t=>{for(let i in t)t[i]=null})}cellContentsSelectionFixer(e,t){var i;if(!(this.table.modExists("edit")&&this.table.modules.edit.currentCell===t)){e.preventDefault();try{document.selection?(i=document.body.createTextRange(),i.moveToElementText(t.getElement()),i.select()):window.getSelection&&(i=document.createRange(),i.selectNode(t.getElement()),window.getSelection().removeAllRanges(),window.getSelection().addRange(i))}catch{}}}initializeExternalEvents(){for(let e in this.eventMap)this.subscriptionChangeExternal(e,this.subscriptionChanged.bind(this,e))}subscriptionChanged(e,t){t?this.subscribers[e]||(this.eventMap[e].includes("-")?(this.subscribers[e]=this.handle.bind(this,e),this.subscribe(this.eventMap[e],this.subscribers[e])):this.subscribeTouchEvents(e)):this.eventMap[e].includes("-")?this.subscribers[e]&&!this.columnSubscribers[e]&&!this.subscribedExternal(e)&&(this.unsubscribe(this.eventMap[e],this.subscribers[e]),delete this.subscribers[e]):this.unsubscribeTouchEvents(e)}subscribeTouchEvents(e){var t=this.eventMap[e];this.touchSubscribers[t+"-touchstart"]||(this.touchSubscribers[t+"-touchstart"]=this.handleTouch.bind(this,t,"start"),this.touchSubscribers[t+"-touchend"]=this.handleTouch.bind(this,t,"end"),this.subscribe(t+"-touchstart",this.touchSubscribers[t+"-touchstart"]),this.subscribe(t+"-touchend",this.touchSubscribers[t+"-touchend"])),this.subscribers[e]=!0}unsubscribeTouchEvents(e){var t=!0,i=this.eventMap[e];if(this.subscribers[e]&&!this.subscribedExternal(e)){delete this.subscribers[e];for(let s in this.eventMap)this.eventMap[s]===i&&this.subscribers[s]&&(t=!1);t&&(this.unsubscribe(i+"-touchstart",this.touchSubscribers[i+"-touchstart"]),this.unsubscribe(i+"-touchend",this.touchSubscribers[i+"-touchend"]),delete this.touchSubscribers[i+"-touchstart"],delete this.touchSubscribers[i+"-touchend"])}}initializeColumn(e){var t=e.definition;for(let i in this.eventMap)t[i]&&(this.subscriptionChanged(i,!0),this.columnSubscribers[i]||(this.columnSubscribers[i]=[]),this.columnSubscribers[i].push(e))}handle(e,t,i){this.dispatchEvent(e,t,i)}handleTouch(e,t,i,s){var n=this.touchWatchers[e];switch(e==="column"&&(e="header"),t){case"start":n.tap=!0,clearTimeout(n.tapHold),n.tapHold=setTimeout(()=>{clearTimeout(n.tapHold),n.tapHold=null,n.tap=null,clearTimeout(n.tapDbl),n.tapDbl=null,this.dispatchEvent(e+"TapHold",i,s)},1e3);break;case"end":n.tap&&(n.tap=null,this.dispatchEvent(e+"Tap",i,s)),n.tapDbl?(clearTimeout(n.tapDbl),n.tapDbl=null,this.dispatchEvent(e+"DblTap",i,s)):n.tapDbl=setTimeout(()=>{clearTimeout(n.tapDbl),n.tapDbl=null},300),clearTimeout(n.tapHold),n.tapHold=null;break}}dispatchEvent(e,t,i){var s=i.getComponent(),n;this.columnSubscribers[e]&&(i instanceof ne?n=i.column.definition[e]:i instanceof U&&(n=i.definition[e]),n&&n(t,s)),this.dispatchExternal(e,t,s)}}b(nt,"moduleName","interaction");var Vi={navPrev:"shift + 9",navNext:9,navUp:38,navDown:40,navLeft:37,navRight:39,scrollPageUp:33,scrollPageDown:34,scrollToStart:36,scrollToEnd:35},Ii={keyBlock:function(l){l.stopPropagation(),l.preventDefault()},scrollPageUp:function(l){var e=this.table.rowManager,t=e.scrollTop-e.element.clientHeight;l.preventDefault(),e.displayRowsCount&&(t>=0?e.element.scrollTop=t:e.scrollToRow(e.getDisplayRows()[0])),this.table.element.focus()},scrollPageDown:function(l){var e=this.table.rowManager,t=e.scrollTop+e.element.clientHeight,i=e.element.scrollHeight;l.preventDefault(),e.displayRowsCount&&(t<=i?e.element.scrollTop=t:e.scrollToRow(e.getDisplayRows()[e.displayRowsCount-1])),this.table.element.focus()},scrollToStart:function(l){var e=this.table.rowManager;l.preventDefault(),e.displayRowsCount&&e.scrollToRow(e.getDisplayRows()[0]),this.table.element.focus()},scrollToEnd:function(l){var e=this.table.rowManager;l.preventDefault(),e.displayRowsCount&&e.scrollToRow(e.getDisplayRows()[e.displayRowsCount-1]),this.table.element.focus()},navPrev:function(l){this.dispatch("keybinding-nav-prev",l)},navNext:function(l){this.dispatch("keybinding-nav-next",l)},navLeft:function(l){this.dispatch("keybinding-nav-left",l)},navRight:function(l){this.dispatch("keybinding-nav-right",l)},navUp:function(l){this.dispatch("keybinding-nav-up",l)},navDown:function(l){this.dispatch("keybinding-nav-down",l)}};const N=class N extends w{constructor(e){super(e),this.watchKeys=null,this.pressedKeys=null,this.keyupBinding=!1,this.keydownBinding=!1,this.registerTableOption("keybindings",{}),this.registerTableOption("tabEndNewRow",!1)}initialize(){var e=this.table.options.keybindings,t={};this.watchKeys={},this.pressedKeys=[],e!==!1&&(Object.assign(t,N.bindings),Object.assign(t,e),this.mapBindings(t),this.bindEvents()),this.subscribe("table-destroy",this.clearBindings.bind(this))}mapBindings(e){for(let t in e)N.actions[t]?e[t]&&(typeof e[t]!="object"&&(e[t]=[e[t]]),e[t].forEach(i=>{var s=Array.isArray(i)?i:[i];s.forEach(n=>{this.mapBinding(t,n)})})):console.warn("Key Binding Error - no such action:",t)}mapBinding(e,t){var i={action:N.actions[e],keys:[],ctrl:!1,shift:!1,meta:!1},s=t.toString().toLowerCase().split(" ").join("").split("+");s.forEach(n=>{switch(n){case"ctrl":i.ctrl=!0;break;case"shift":i.shift=!0;break;case"meta":i.meta=!0;break;default:n=isNaN(n)?n.toUpperCase().charCodeAt(0):parseInt(n),i.keys.push(n),this.watchKeys[n]||(this.watchKeys[n]=[]),this.watchKeys[n].push(i)}})}bindEvents(){var e=this;this.keyupBinding=function(t){var i=t.keyCode,s=e.watchKeys[i];s&&(e.pressedKeys.push(i),s.forEach(function(n){e.checkBinding(t,n)}))},this.keydownBinding=function(t){var i=t.keyCode,s=e.watchKeys[i];if(s){var n=e.pressedKeys.indexOf(i);n>-1&&e.pressedKeys.splice(n,1)}},this.table.element.addEventListener("keydown",this.keyupBinding),this.table.element.addEventListener("keyup",this.keydownBinding)}clearBindings(){this.keyupBinding&&this.table.element.removeEventListener("keydown",this.keyupBinding),this.keydownBinding&&this.table.element.removeEventListener("keyup",this.keydownBinding)}checkBinding(e,t){var i=!0;return e.ctrlKey==t.ctrl&&e.shiftKey==t.shift&&e.metaKey==t.meta?(t.keys.forEach(s=>{var n=this.pressedKeys.indexOf(s);n==-1&&(i=!1)}),i&&t.action.call(this,e),!0):!1}};b(N,"moduleName","keybindings"),b(N,"bindings",Vi),b(N,"actions",Ii);let Te=N;class rt extends w{constructor(e){super(e),this.menuContainer=null,this.nestedMenuBlock=!1,this.currentComponent=null,this.rootPopup=null,this.columnSubscribers={},this.registerTableOption("rowContextMenu",!1),this.registerTableOption("rowClickMenu",!1),this.registerTableOption("rowDblClickMenu",!1),this.registerTableOption("groupContextMenu",!1),this.registerTableOption("groupClickMenu",!1),this.registerTableOption("groupDblClickMenu",!1),this.registerColumnOption("headerContextMenu"),this.registerColumnOption("headerClickMenu"),this.registerColumnOption("headerDblClickMenu"),this.registerColumnOption("headerMenu"),this.registerColumnOption("headerMenuIcon"),this.registerColumnOption("contextMenu"),this.registerColumnOption("clickMenu"),this.registerColumnOption("dblClickMenu")}initialize(){this.deprecatedOptionsCheck(),this.initializeRowWatchers(),this.initializeGroupWatchers(),this.subscribe("column-init",this.initializeColumn.bind(this))}deprecatedOptionsCheck(){}initializeRowWatchers(){this.table.options.rowContextMenu&&(this.subscribe("row-contextmenu",this.loadMenuEvent.bind(this,this.table.options.rowContextMenu)),this.table.on("rowTapHold",this.loadMenuEvent.bind(this,this.table.options.rowContextMenu))),this.table.options.rowClickMenu&&this.subscribe("row-click",this.loadMenuEvent.bind(this,this.table.options.rowClickMenu)),this.table.options.rowDblClickMenu&&this.subscribe("row-dblclick",this.loadMenuEvent.bind(this,this.table.options.rowDblClickMenu))}initializeGroupWatchers(){this.table.options.groupContextMenu&&(this.subscribe("group-contextmenu",this.loadMenuEvent.bind(this,this.table.options.groupContextMenu)),this.table.on("groupTapHold",this.loadMenuEvent.bind(this,this.table.options.groupContextMenu))),this.table.options.groupClickMenu&&this.subscribe("group-click",this.loadMenuEvent.bind(this,this.table.options.groupClickMenu)),this.table.options.groupDblClickMenu&&this.subscribe("group-dblclick",this.loadMenuEvent.bind(this,this.table.options.groupDblClickMenu))}initializeColumn(e){var t=e.definition;t.headerContextMenu&&!this.columnSubscribers.headerContextMenu&&(this.columnSubscribers.headerContextMenu=this.loadMenuTableColumnEvent.bind(this,"headerContextMenu"),this.subscribe("column-contextmenu",this.columnSubscribers.headerContextMenu),this.table.on("headerTapHold",this.loadMenuTableColumnEvent.bind(this,"headerContextMenu"))),t.headerClickMenu&&!this.columnSubscribers.headerClickMenu&&(this.columnSubscribers.headerClickMenu=this.loadMenuTableColumnEvent.bind(this,"headerClickMenu"),this.subscribe("column-click",this.columnSubscribers.headerClickMenu)),t.headerDblClickMenu&&!this.columnSubscribers.headerDblClickMenu&&(this.columnSubscribers.headerDblClickMenu=this.loadMenuTableColumnEvent.bind(this,"headerDblClickMenu"),this.subscribe("column-dblclick",this.columnSubscribers.headerDblClickMenu)),t.headerMenu&&this.initializeColumnHeaderMenu(e),t.contextMenu&&!this.columnSubscribers.contextMenu&&(this.columnSubscribers.contextMenu=this.loadMenuTableCellEvent.bind(this,"contextMenu"),this.subscribe("cell-contextmenu",this.columnSubscribers.contextMenu),this.table.on("cellTapHold",this.loadMenuTableCellEvent.bind(this,"contextMenu"))),t.clickMenu&&!this.columnSubscribers.clickMenu&&(this.columnSubscribers.clickMenu=this.loadMenuTableCellEvent.bind(this,"clickMenu"),this.subscribe("cell-click",this.columnSubscribers.clickMenu)),t.dblClickMenu&&!this.columnSubscribers.dblClickMenu&&(this.columnSubscribers.dblClickMenu=this.loadMenuTableCellEvent.bind(this,"dblClickMenu"),this.subscribe("cell-dblclick",this.columnSubscribers.dblClickMenu))}initializeColumnHeaderMenu(e){var t=e.definition.headerMenuIcon,i;i=document.createElement("span"),i.classList.add("tabulator-header-popup-button"),t?(typeof t=="function"&&(t=t(e.getComponent())),t instanceof HTMLElement?i.appendChild(t):i.innerHTML=t):i.innerHTML="⋮",i.addEventListener("click",s=>{s.stopPropagation(),s.preventDefault(),this.loadMenuEvent(e.definition.headerMenu,s,e)}),e.titleElement.insertBefore(i,e.titleElement.firstChild)}loadMenuTableCellEvent(e,t,i){i._cell&&(i=i._cell),i.column.definition[e]&&this.loadMenuEvent(i.column.definition[e],t,i)}loadMenuTableColumnEvent(e,t,i){i._column&&(i=i._column),i.definition[e]&&this.loadMenuEvent(i.definition[e],t,i)}loadMenuEvent(e,t,i){i._group?i=i._group:i._row&&(i=i._row),e=typeof e=="function"?e.call(this.table,t,i.getComponent()):e,this.loadMenu(t,i,e)}loadMenu(e,t,i,s,n){var r=!(e instanceof MouseEvent),o=document.createElement("div"),a;if(o.classList.add("tabulator-menu"),r||e.preventDefault(),!(!i||!i.length)){if(s)a=n.child(o);else{if(this.nestedMenuBlock){if(this.rootPopup)return}else this.nestedMenuBlock=setTimeout(()=>{this.nestedMenuBlock=!1},100);this.rootPopup&&this.rootPopup.hide(),this.rootPopup=a=this.popup(o)}i.forEach(h=>{var d=document.createElement("div"),u=h.label,c=h.disabled;h.separator?d.classList.add("tabulator-menu-separator"):(d.classList.add("tabulator-menu-item"),typeof u=="function"&&(u=u.call(this.table,t.getComponent())),u instanceof Node?d.appendChild(u):d.innerHTML=u,typeof c=="function"&&(c=c.call(this.table,t.getComponent())),c?(d.classList.add("tabulator-menu-item-disabled"),d.addEventListener("click",f=>{f.stopPropagation()})):h.menu&&h.menu.length?d.addEventListener("click",f=>{f.stopPropagation(),this.loadMenu(f,t,h.menu,d,a)}):h.action&&d.addEventListener("click",f=>{h.action(f,t.getComponent())}),h.menu&&h.menu.length&&d.classList.add("tabulator-menu-item-submenu")),o.appendChild(d)}),o.addEventListener("click",h=>{this.rootPopup&&this.rootPopup.hide()}),a.show(s||e),a===this.rootPopup&&(this.rootPopup.hideOnBlur(()=>{this.rootPopup=null,this.currentComponent&&(this.dispatch("menu-closed",i,a),this.dispatchExternal("menuClosed",this.currentComponent.getComponent()),this.currentComponent=null)}),this.currentComponent=t,this.dispatch("menu-opened",i,a),this.dispatchExternal("menuOpened",t.getComponent()))}}}b(rt,"moduleName","menu");class ot extends w{constructor(e){super(e),this.placeholderElement=this.createPlaceholderElement(),this.hoverElement=!1,this.checkTimeout=!1,this.checkPeriod=250,this.moving=!1,this.toCol=!1,this.toColAfter=!1,this.startX=0,this.autoScrollMargin=40,this.autoScrollStep=5,this.autoScrollTimeout=!1,this.touchMove=!1,this.moveHover=this.moveHover.bind(this),this.endMove=this.endMove.bind(this),this.registerTableOption("movableColumns",!1)}createPlaceholderElement(){var e=document.createElement("div");return e.classList.add("tabulator-col"),e.classList.add("tabulator-col-placeholder"),e}initialize(){this.table.options.movableColumns&&(this.subscribe("column-init",this.initializeColumn.bind(this)),this.subscribe("alert-show",this.abortMove.bind(this)))}abortMove(){clearTimeout(this.checkTimeout)}initializeColumn(e){var t=this,i={},s;!e.modules.frozen&&!e.isGroup&&!e.isRowHeader&&(s=e.getElement(),i.mousemove=(function(n){e.parent===t.moving.parent&&((t.touchMove?n.touches[0].pageX:n.pageX)-x.elOffset(s).left+t.table.columnManager.contentsElement.scrollLeft>e.getWidth()/2?(t.toCol!==e||!t.toColAfter)&&(s.parentNode.insertBefore(t.placeholderElement,s.nextSibling),t.moveColumn(e,!0)):(t.toCol!==e||t.toColAfter)&&(s.parentNode.insertBefore(t.placeholderElement,s),t.moveColumn(e,!1)))}).bind(t),s.addEventListener("mousedown",function(n){t.touchMove=!1,n.which===1&&(t.checkTimeout=setTimeout(function(){t.startMove(n,e)},t.checkPeriod))}),s.addEventListener("mouseup",function(n){n.which===1&&t.checkTimeout&&clearTimeout(t.checkTimeout)}),t.bindTouchEvents(e)),e.modules.moveColumn=i}bindTouchEvents(e){var t=e.getElement(),i=!1,s,n,r,o,a,h;t.addEventListener("touchstart",d=>{this.checkTimeout=setTimeout(()=>{this.touchMove=!0,s=e.nextColumn(),r=s?s.getWidth()/2:0,n=e.prevColumn(),o=n?n.getWidth()/2:0,a=0,h=0,i=!1,this.startMove(d,e)},this.checkPeriod)},{passive:!0}),t.addEventListener("touchmove",d=>{var u,c;this.moving&&(this.moveHover(d),i||(i=d.touches[0].pageX),u=d.touches[0].pageX-i,u>0?s&&u-a>r&&(c=s,c!==e&&(i=d.touches[0].pageX,c.getElement().parentNode.insertBefore(this.placeholderElement,c.getElement().nextSibling),this.moveColumn(c,!0))):n&&-u-h>o&&(c=n,c!==e&&(i=d.touches[0].pageX,c.getElement().parentNode.insertBefore(this.placeholderElement,c.getElement()),this.moveColumn(c,!1))),c&&(s=c.nextColumn(),a=r,r=s?s.getWidth()/2:0,n=c.prevColumn(),h=o,o=n?n.getWidth()/2:0))},{passive:!0}),t.addEventListener("touchend",d=>{this.checkTimeout&&clearTimeout(this.checkTimeout),this.moving&&this.endMove(d)})}startMove(e,t){var i=t.getElement(),s=this.table.columnManager.getContentsElement(),n=this.table.columnManager.getHeadersElement();this.table.modules.selectRange&&this.table.modules.selectRange.columnSelection&&this.table.modules.selectRange.mousedown&&this.table.modules.selectRange.selecting==="column"||(this.moving=t,this.startX=(this.touchMove?e.touches[0].pageX:e.pageX)-x.elOffset(i).left,this.table.element.classList.add("tabulator-block-select"),this.placeholderElement.style.width=t.getWidth()+"px",this.placeholderElement.style.height=t.getHeight()+"px",i.parentNode.insertBefore(this.placeholderElement,i),i.parentNode.removeChild(i),this.hoverElement=i.cloneNode(!0),this.hoverElement.classList.add("tabulator-moving"),s.appendChild(this.hoverElement),this.hoverElement.style.left="0",this.hoverElement.style.bottom=s.clientHeight-n.offsetHeight+"px",this.touchMove||(this._bindMouseMove(),document.body.addEventListener("mousemove",this.moveHover),document.body.addEventListener("mouseup",this.endMove)),this.moveHover(e),this.dispatch("column-moving",e,this.moving))}_bindMouseMove(){this.table.columnManager.columnsByIndex.forEach(function(e){e.modules.moveColumn.mousemove&&e.getElement().addEventListener("mousemove",e.modules.moveColumn.mousemove)})}_unbindMouseMove(){this.table.columnManager.columnsByIndex.forEach(function(e){e.modules.moveColumn.mousemove&&e.getElement().removeEventListener("mousemove",e.modules.moveColumn.mousemove)})}moveColumn(e,t){var i=this.moving.getCells();this.toCol=e,this.toColAfter=t,t?e.getCells().forEach(function(s,n){var r=s.getElement(!0);r.parentNode&&i[n]&&r.parentNode.insertBefore(i[n].getElement(),r.nextSibling)}):e.getCells().forEach(function(s,n){var r=s.getElement(!0);r.parentNode&&i[n]&&r.parentNode.insertBefore(i[n].getElement(),r)})}endMove(e){(e.which===1||this.touchMove)&&(this._unbindMouseMove(),this.placeholderElement.parentNode.insertBefore(this.moving.getElement(),this.placeholderElement.nextSibling),this.placeholderElement.parentNode.removeChild(this.placeholderElement),this.hoverElement.parentNode.removeChild(this.hoverElement),this.table.element.classList.remove("tabulator-block-select"),this.toCol&&this.table.columnManager.moveColumnActual(this.moving,this.toCol,this.toColAfter),this.moving=!1,this.toCol=!1,this.toColAfter=!1,this.touchMove||(document.body.removeEventListener("mousemove",this.moveHover),document.body.removeEventListener("mouseup",this.endMove)))}moveHover(e){var t=this.table.columnManager.getContentsElement(),i=t.scrollLeft,s=(this.touchMove?e.touches[0].pageX:e.pageX)-x.elOffset(t).left+i,n;this.hoverElement.style.left=s-this.startX+"px",s-i{n=Math.max(0,i-5),this.table.rowManager.getElement().scrollLeft=n,this.autoScrollTimeout=!1},1))),i+t.clientWidth-s{n=Math.min(t.clientWidth,i+5),this.table.rowManager.getElement().scrollLeft=n,this.autoScrollTimeout=!1},1)))}}b(ot,"moduleName","moveColumn");var Ni={delete:function(l,e,t){l.delete()}},Wi={insert:function(l,e,t){return this.table.addRow(l.getData(),void 0,e),!0},add:function(l,e,t){return this.table.addRow(l.getData()),!0},update:function(l,e,t){return e?(e.update(l.getData()),!0):!1},replace:function(l,e,t){return e?(this.table.addRow(l.getData(),void 0,e),e.delete(),!0):!1}};const G=class G extends w{constructor(e){super(e),this.placeholderElement=this.createPlaceholderElement(),this.hoverElement=!1,this.checkTimeout=!1,this.checkPeriod=150,this.moving=!1,this.toRow=!1,this.toRowAfter=!1,this.hasHandle=!1,this.startY=0,this.startX=0,this.moveHover=this.moveHover.bind(this),this.endMove=this.endMove.bind(this),this.tableRowDropEvent=!1,this.touchMove=!1,this.connection=!1,this.connectionSelectorsTables=!1,this.connectionSelectorsElements=!1,this.connectionElements=[],this.connections=[],this.connectedTable=!1,this.connectedRow=!1,this.registerTableOption("movableRows",!1),this.registerTableOption("movableRowsConnectedTables",!1),this.registerTableOption("movableRowsConnectedElements",!1),this.registerTableOption("movableRowsSender",!1),this.registerTableOption("movableRowsReceiver","insert"),this.registerColumnOption("rowHandle")}createPlaceholderElement(){var e=document.createElement("div");return e.classList.add("tabulator-row"),e.classList.add("tabulator-row-placeholder"),e}initialize(){this.table.options.movableRows&&(this.connectionSelectorsTables=this.table.options.movableRowsConnectedTables,this.connectionSelectorsElements=this.table.options.movableRowsConnectedElements,this.connection=this.connectionSelectorsTables||this.connectionSelectorsElements,this.subscribe("cell-init",this.initializeCell.bind(this)),this.subscribe("column-init",this.initializeColumn.bind(this)),this.subscribe("row-init",this.initializeRow.bind(this)))}initializeGroupHeader(e){var t=this,i={};i.mouseup=(function(s){t.tableRowDrop(s,e)}).bind(t),i.mousemove=(function(s){var n;s.pageY-x.elOffset(e.element).top+t.table.rowManager.element.scrollTop>e.getHeight()/2?(t.toRow!==e||!t.toRowAfter)&&(n=e.getElement(),n.parentNode.insertBefore(t.placeholderElement,n.nextSibling),t.moveRow(e,!0)):(t.toRow!==e||t.toRowAfter)&&(n=e.getElement(),n.previousSibling&&(n.parentNode.insertBefore(t.placeholderElement,n),t.moveRow(e,!1)))}).bind(t),e.modules.moveRow=i}initializeRow(e){var t=this,i={},s;i.mouseup=(function(n){t.tableRowDrop(n,e)}).bind(t),i.mousemove=(function(n){var r=e.getElement();n.pageY-x.elOffset(r).top+t.table.rowManager.element.scrollTop>e.getHeight()/2?(t.toRow!==e||!t.toRowAfter)&&(r.parentNode.insertBefore(t.placeholderElement,r.nextSibling),t.moveRow(e,!0)):(t.toRow!==e||t.toRowAfter)&&(r.parentNode.insertBefore(t.placeholderElement,r),t.moveRow(e,!1))}).bind(t),this.hasHandle||(s=e.getElement(),s.addEventListener("mousedown",function(n){n.which===1&&(t.checkTimeout=setTimeout(function(){t.startMove(n,e)},t.checkPeriod))}),s.addEventListener("mouseup",function(n){n.which===1&&t.checkTimeout&&clearTimeout(t.checkTimeout)}),this.bindTouchEvents(e,e.getElement())),e.modules.moveRow=i}initializeColumn(e){e.definition.rowHandle&&this.table.options.movableRows!==!1&&(this.hasHandle=!0)}initializeCell(e){if(e.column.definition.rowHandle&&this.table.options.movableRows!==!1){var t=this,i=e.getElement(!0);i.addEventListener("mousedown",function(s){s.which===1&&(t.checkTimeout=setTimeout(function(){t.startMove(s,e.row)},t.checkPeriod))}),i.addEventListener("mouseup",function(s){s.which===1&&t.checkTimeout&&clearTimeout(t.checkTimeout)}),this.bindTouchEvents(e.row,i)}}bindTouchEvents(e,t){var i=!1,s,n,r,o,a,h;t.addEventListener("touchstart",d=>{this.checkTimeout=setTimeout(()=>{this.touchMove=!0,s=e.nextRow(),r=s?s.getHeight()/2:0,n=e.prevRow(),o=n?n.getHeight()/2:0,a=0,h=0,i=!1,this.startMove(d,e)},this.checkPeriod)},{passive:!0}),this.moving,this.toRow,this.toRowAfter,t.addEventListener("touchmove",d=>{var u,c;this.moving&&(d.preventDefault(),this.moveHover(d),i||(i=d.touches[0].pageY),u=d.touches[0].pageY-i,u>0?s&&u-a>r&&(c=s,c!==e&&(i=d.touches[0].pageY,c.getElement().parentNode.insertBefore(this.placeholderElement,c.getElement().nextSibling),this.moveRow(c,!0))):n&&-u-h>o&&(c=n,c!==e&&(i=d.touches[0].pageY,c.getElement().parentNode.insertBefore(this.placeholderElement,c.getElement()),this.moveRow(c,!1))),c&&(s=c.nextRow(),a=r,r=s?s.getHeight()/2:0,n=c.prevRow(),h=o,o=n?n.getHeight()/2:0))}),t.addEventListener("touchend",d=>{this.checkTimeout&&clearTimeout(this.checkTimeout),this.moving&&(this.endMove(d),this.touchMove=!1)})}_bindMouseMove(){this.table.rowManager.getDisplayRows().forEach(e=>{(e.type==="row"||e.type==="group")&&e.modules.moveRow&&e.modules.moveRow.mousemove&&e.getElement().addEventListener("mousemove",e.modules.moveRow.mousemove)})}_unbindMouseMove(){this.table.rowManager.getDisplayRows().forEach(e=>{(e.type==="row"||e.type==="group")&&e.modules.moveRow&&e.modules.moveRow.mousemove&&e.getElement().removeEventListener("mousemove",e.modules.moveRow.mousemove)})}startMove(e,t){var i=t.getElement();this.setStartPosition(e,t),this.moving=t,this.table.element.classList.add("tabulator-block-select"),this.placeholderElement.style.width=t.getWidth()+"px",this.placeholderElement.style.height=t.getHeight()+"px",this.connection?(this.table.element.classList.add("tabulator-movingrow-sending"),this.connectToTables(t)):(i.parentNode.insertBefore(this.placeholderElement,i),i.parentNode.removeChild(i)),this.hoverElement=i.cloneNode(!0),this.hoverElement.classList.add("tabulator-moving"),this.connection?(document.body.appendChild(this.hoverElement),this.hoverElement.style.left="0",this.hoverElement.style.top="0",this.hoverElement.style.width=this.table.element.clientWidth+"px",this.hoverElement.style.whiteSpace="nowrap",this.hoverElement.style.overflow="hidden",this.hoverElement.style.pointerEvents="none"):(this.table.rowManager.getTableElement().appendChild(this.hoverElement),this.hoverElement.style.left="0",this.hoverElement.style.top="0",this._bindMouseMove()),document.body.addEventListener("mousemove",this.moveHover),document.body.addEventListener("mouseup",this.endMove),this.dispatchExternal("rowMoving",t.getComponent()),this.moveHover(e)}setStartPosition(e,t){var i=this.touchMove?e.touches[0].pageX:e.pageX,s=this.touchMove?e.touches[0].pageY:e.pageY,n,r;n=t.getElement(),this.connection?(r=n.getBoundingClientRect(),this.startX=r.left-i+window.pageXOffset,this.startY=r.top-s+window.pageYOffset):this.startY=s-n.getBoundingClientRect().top}endMove(e){(!e||e.which===1||this.touchMove)&&(this._unbindMouseMove(),this.connection||(this.placeholderElement.parentNode.insertBefore(this.moving.getElement(),this.placeholderElement.nextSibling),this.placeholderElement.parentNode.removeChild(this.placeholderElement)),this.hoverElement.parentNode.removeChild(this.hoverElement),this.table.element.classList.remove("tabulator-block-select"),this.toRow?this.table.rowManager.moveRow(this.moving,this.toRow,this.toRowAfter):this.dispatchExternal("rowMoveCancelled",this.moving.getComponent()),this.moving=!1,this.toRow=!1,this.toRowAfter=!1,document.body.removeEventListener("mousemove",this.moveHover),document.body.removeEventListener("mouseup",this.endMove),this.connection&&(this.table.element.classList.remove("tabulator-movingrow-sending"),this.disconnectFromTables()))}moveRow(e,t){this.toRow=e,this.toRowAfter=t}moveHover(e){this.connection?this.moveHoverConnections.call(this,e):this.moveHoverTable.call(this,e)}moveHoverTable(e){var t=this.table.rowManager.getElement(),i=t.scrollTop,s=(this.touchMove?e.touches[0].pageY:e.pageY)-t.getBoundingClientRect().top+i;this.hoverElement.style.top=Math.min(s-this.startY,this.table.rowManager.element.scrollHeight-this.hoverElement.offsetHeight)+"px"}moveHoverConnections(e){this.hoverElement.style.left=this.startX+(this.touchMove?e.touches[0].pageX:e.pageX)+"px",this.hoverElement.style.top=this.startY+(this.touchMove?e.touches[0].pageY:e.pageY)+"px"}elementRowDrop(e,t,i){this.dispatchExternal("movableRowsElementDrop",e,t,i?i.getComponent():!1)}connectToTables(e){var t;this.connectionSelectorsTables&&(t=this.commsConnections(this.connectionSelectorsTables),this.dispatchExternal("movableRowsSendingStart",t),this.commsSend(this.connectionSelectorsTables,"moveRow","connect",{row:e})),this.connectionSelectorsElements&&(this.connectionElements=[],Array.isArray(this.connectionSelectorsElements)||(this.connectionSelectorsElements=[this.connectionSelectorsElements]),this.connectionSelectorsElements.forEach(i=>{typeof i=="string"?this.connectionElements=this.connectionElements.concat(Array.prototype.slice.call(document.querySelectorAll(i))):this.connectionElements.push(i)}),this.connectionElements.forEach(i=>{var s=n=>{this.elementRowDrop(n,i,this.moving)};i.addEventListener("mouseup",s),i.tabulatorElementDropEvent=s,i.classList.add("tabulator-movingrow-receiving")}))}disconnectFromTables(){var e;this.connectionSelectorsTables&&(e=this.commsConnections(this.connectionSelectorsTables),this.dispatchExternal("movableRowsSendingStop",e),this.commsSend(this.connectionSelectorsTables,"moveRow","disconnect")),this.connectionElements.forEach(t=>{t.classList.remove("tabulator-movingrow-receiving"),t.removeEventListener("mouseup",t.tabulatorElementDropEvent),delete t.tabulatorElementDropEvent})}connect(e,t){return this.connectedTable?(console.warn("Move Row Error - Table cannot accept connection, already connected to table:",this.connectedTable),!1):(this.connectedTable=e,this.connectedRow=t,this.table.element.classList.add("tabulator-movingrow-receiving"),this.table.rowManager.getDisplayRows().forEach(i=>{i.type==="row"&&i.modules.moveRow&&i.modules.moveRow.mouseup&&i.getElement().addEventListener("mouseup",i.modules.moveRow.mouseup)}),this.tableRowDropEvent=this.tableRowDrop.bind(this),this.table.element.addEventListener("mouseup",this.tableRowDropEvent),this.dispatchExternal("movableRowsReceivingStart",t,e),!0)}disconnect(e){e===this.connectedTable?(this.connectedTable=!1,this.connectedRow=!1,this.table.element.classList.remove("tabulator-movingrow-receiving"),this.table.rowManager.getDisplayRows().forEach(t=>{t.type==="row"&&t.modules.moveRow&&t.modules.moveRow.mouseup&&t.getElement().removeEventListener("mouseup",t.modules.moveRow.mouseup)}),this.table.element.removeEventListener("mouseup",this.tableRowDropEvent),this.dispatchExternal("movableRowsReceivingStop",e)):console.warn("Move Row Error - trying to disconnect from non connected table")}dropComplete(e,t,i){var s=!1;if(i){switch(typeof this.table.options.movableRowsSender){case"string":s=G.senders[this.table.options.movableRowsSender];break;case"function":s=this.table.options.movableRowsSender;break}s?s.call(this,this.moving?this.moving.getComponent():void 0,t?t.getComponent():void 0,e):this.table.options.movableRowsSender&&console.warn("Mover Row Error - no matching sender found:",this.table.options.movableRowsSender),this.dispatchExternal("movableRowsSent",this.moving.getComponent(),t?t.getComponent():void 0,e)}else this.dispatchExternal("movableRowsSentFailed",this.moving.getComponent(),t?t.getComponent():void 0,e);this.endMove()}tableRowDrop(e,t){var i=!1,s=!1;switch(e.stopImmediatePropagation(),typeof this.table.options.movableRowsReceiver){case"string":i=G.receivers[this.table.options.movableRowsReceiver];break;case"function":i=this.table.options.movableRowsReceiver;break}i?s=i.call(this,this.connectedRow.getComponent(),t?t.getComponent():void 0,this.connectedTable):console.warn("Mover Row Error - no matching receiver found:",this.table.options.movableRowsReceiver),s?this.dispatchExternal("movableRowsReceived",this.connectedRow.getComponent(),t?t.getComponent():void 0,this.connectedTable):this.dispatchExternal("movableRowsReceivedFailed",this.connectedRow.getComponent(),t?t.getComponent():void 0,this.connectedTable),this.commsSend(this.connectedTable,"moveRow","dropcomplete",{row:t,success:s})}commsReceived(e,t,i){switch(t){case"connect":return this.connect(e,i.row);case"disconnect":return this.disconnect(e);case"dropcomplete":return this.dropComplete(e,i.row,i.success)}}};b(G,"moduleName","moveRow"),b(G,"senders",Ni),b(G,"receivers",Wi);let ke=G;var Gi={};const Y=class Y extends w{constructor(e){super(e),this.allowedTypes=["","data","edit","clipboard"],this.enabled=!0,this.registerColumnOption("mutator"),this.registerColumnOption("mutatorParams"),this.registerColumnOption("mutatorData"),this.registerColumnOption("mutatorDataParams"),this.registerColumnOption("mutatorEdit"),this.registerColumnOption("mutatorEditParams"),this.registerColumnOption("mutatorClipboard"),this.registerColumnOption("mutatorClipboardParams"),this.registerColumnOption("mutateLink")}initialize(){this.subscribe("cell-value-changing",this.transformCell.bind(this)),this.subscribe("cell-value-changed",this.mutateLink.bind(this)),this.subscribe("column-layout",this.initializeColumn.bind(this)),this.subscribe("row-data-init-before",this.rowDataChanged.bind(this)),this.subscribe("row-data-changing",this.rowDataChanged.bind(this))}rowDataChanged(e,t,i){return this.transformRow(t,"data",i)}initializeColumn(e){var t=!1,i={};this.allowedTypes.forEach(s=>{var n="mutator"+(s.charAt(0).toUpperCase()+s.slice(1)),r;e.definition[n]&&(r=this.lookupMutator(e.definition[n]),r&&(t=!0,i[n]={mutator:r,params:e.definition[n+"Params"]||{}}))}),t&&(e.modules.mutate=i)}lookupMutator(e){var t=!1;switch(typeof e){case"string":Y.mutators[e]?t=Y.mutators[e]:console.warn("Mutator Error - No such mutator found, ignoring: ",e);break;case"function":t=e;break}return t}transformRow(e,t,i){var s="mutator"+(t.charAt(0).toUpperCase()+t.slice(1)),n;return this.enabled&&this.table.columnManager.traverse(r=>{var o,a,h;r.modules.mutate&&(o=r.modules.mutate[s]||r.modules.mutate.mutator||!1,o&&(n=r.getFieldValue(typeof i<"u"?i:e),(t=="data"&&!i||typeof n<"u")&&(h=r.getComponent(),a=typeof o.params=="function"?o.params(n,e,t,h):o.params,r.setFieldValue(e,o.mutator(n,e,t,a,h)))))}),e}transformCell(e,t){if(e.column.modules.mutate){var i=e.column.modules.mutate.mutatorEdit||e.column.modules.mutate.mutator||!1,s={};if(i)return s=Object.assign(s,e.row.getData()),e.column.setFieldValue(s,t),i.mutator(t,s,"edit",i.params,e.getComponent())}return t}mutateLink(e){var t=e.column.definition.mutateLink;t&&(Array.isArray(t)||(t=[t]),t.forEach(i=>{var s=e.row.getCell(i);s&&s.setValue(s.getValue(),!0,!0)}))}enable(){this.enabled=!0}disable(){this.enabled=!1}};b(Y,"moduleName","mutator"),b(Y,"mutators",Gi);let Me=Y;function ji(l,e,t,i,s){var n=document.createElement("span"),r=document.createElement("span"),o=document.createElement("span"),a=document.createElement("span"),h=document.createElement("span"),d=document.createElement("span");return this.table.modules.localize.langBind("pagination|counter|showing",u=>{r.innerHTML=u}),this.table.modules.localize.langBind("pagination|counter|of",u=>{a.innerHTML=u}),this.table.modules.localize.langBind("pagination|counter|rows",u=>{d.innerHTML=u}),i?(o.innerHTML=" "+e+"-"+Math.min(e+l-1,i)+" ",h.innerHTML=" "+i+" ",n.appendChild(r),n.appendChild(o),n.appendChild(a),n.appendChild(h),n.appendChild(d)):(o.innerHTML=" 0 ",n.appendChild(r),n.appendChild(o),n.appendChild(d)),n}function Ui(l,e,t,i,s){var n=document.createElement("span"),r=document.createElement("span"),o=document.createElement("span"),a=document.createElement("span"),h=document.createElement("span"),d=document.createElement("span");return this.table.modules.localize.langBind("pagination|counter|showing",u=>{r.innerHTML=u}),o.innerHTML=" "+t+" ",this.table.modules.localize.langBind("pagination|counter|of",u=>{a.innerHTML=u}),h.innerHTML=" "+s+" ",this.table.modules.localize.langBind("pagination|counter|pages",u=>{d.innerHTML=u}),n.appendChild(r),n.appendChild(o),n.appendChild(a),n.appendChild(h),n.appendChild(d),n}var Xi={rows:ji,pages:Ui};const te=class te extends w{constructor(e){super(e),this.mode="local",this.progressiveLoad=!1,this.element=null,this.pageCounterElement=null,this.pageCounter=null,this.size=0,this.page=1,this.count=5,this.max=1,this.remoteRowCountEstimate=null,this.initialLoad=!0,this.dataChanging=!1,this.pageSizes=[],this.registerTableOption("pagination",!1),this.registerTableOption("paginationMode","local"),this.registerTableOption("paginationSize",!1),this.registerTableOption("paginationInitialPage",1),this.registerTableOption("paginationCounter",!1),this.registerTableOption("paginationCounterElement",!1),this.registerTableOption("paginationButtonCount",5),this.registerTableOption("paginationSizeSelector",!1),this.registerTableOption("paginationElement",!1),this.registerTableOption("paginationAddRow","page"),this.registerTableOption("progressiveLoad",!1),this.registerTableOption("progressiveLoadDelay",0),this.registerTableOption("progressiveLoadScrollMargin",0),this.registerTableFunction("setMaxPage",this.setMaxPage.bind(this)),this.registerTableFunction("setPage",this.setPage.bind(this)),this.registerTableFunction("setPageToRow",this.userSetPageToRow.bind(this)),this.registerTableFunction("setPageSize",this.userSetPageSize.bind(this)),this.registerTableFunction("getPageSize",this.getPageSize.bind(this)),this.registerTableFunction("previousPage",this.previousPage.bind(this)),this.registerTableFunction("nextPage",this.nextPage.bind(this)),this.registerTableFunction("getPage",this.getPage.bind(this)),this.registerTableFunction("getPageMax",this.getPageMax.bind(this)),this.registerComponentFunction("row","pageTo",this.setPageToRow.bind(this))}initialize(){this.table.options.pagination?(this.subscribe("row-deleted",this.rowsUpdated.bind(this)),this.subscribe("row-added",this.rowsUpdated.bind(this)),this.subscribe("data-processed",this.initialLoadComplete.bind(this)),this.subscribe("table-built",this.calculatePageSizes.bind(this)),this.subscribe("footer-redraw",this.footerRedraw.bind(this)),this.table.options.paginationAddRow=="page"&&this.subscribe("row-adding-position",this.rowAddingPosition.bind(this)),this.table.options.paginationMode==="remote"&&(this.subscribe("data-params",this.remotePageParams.bind(this)),this.subscribe("data-loaded",this._parseRemoteData.bind(this))),this.table.options.progressiveLoad&&console.error("Progressive Load Error - Pagination and progressive load cannot be used at the same time"),this.registerDisplayHandler(this.restOnRenderBefore.bind(this),40),this.registerDisplayHandler(this.getRows.bind(this),50),this.createElements(),this.initializePageCounter(),this.initializePaginator()):this.table.options.progressiveLoad&&(this.subscribe("data-params",this.remotePageParams.bind(this)),this.subscribe("data-loaded",this._parseRemoteData.bind(this)),this.subscribe("table-built",this.calculatePageSizes.bind(this)),this.subscribe("data-processed",this.initialLoadComplete.bind(this)),this.initializeProgressive(this.table.options.progressiveLoad),this.table.options.progressiveLoad==="scroll"&&this.subscribe("scroll-vertical",this.scrollVertical.bind(this)))}rowAddingPosition(e,t){var i=this.table.rowManager,s=i.getDisplayRows(),n;return t?s.length?n=s[0]:i.activeRows.length&&(n=i.activeRows[i.activeRows.length-1],t=!1):s.length&&(n=s[s.length-1],t=!(s.length{}))}restOnRenderBefore(e,t){return t||this.mode==="local"&&this.reset(),e}rowsUpdated(){this.refreshData(!0,"all")}createElements(){var e;this.element=document.createElement("span"),this.element.classList.add("tabulator-paginator"),this.pagesElement=document.createElement("span"),this.pagesElement.classList.add("tabulator-pages"),e=document.createElement("button"),e.classList.add("tabulator-page"),e.setAttribute("type","button"),e.setAttribute("role","button"),e.setAttribute("aria-label",""),e.setAttribute("title",""),this.firstBut=e.cloneNode(!0),this.firstBut.setAttribute("data-page","first"),this.prevBut=e.cloneNode(!0),this.prevBut.setAttribute("data-page","prev"),this.nextBut=e.cloneNode(!0),this.nextBut.setAttribute("data-page","next"),this.lastBut=e.cloneNode(!0),this.lastBut.setAttribute("data-page","last"),this.table.options.paginationSizeSelector&&(this.pageSizeSelect=document.createElement("select"),this.pageSizeSelect.classList.add("tabulator-page-size"))}generatePageSizeSelectList(){var e=[];if(this.pageSizeSelect){if(Array.isArray(this.table.options.paginationSizeSelector))e=this.table.options.paginationSizeSelector,this.pageSizes=e,this.pageSizes.indexOf(this.size)==-1&&e.unshift(this.size);else if(this.pageSizes.indexOf(this.size)==-1){e=[];for(let t=1;t<5;t++)e.push(this.size*t);this.pageSizes=e}else e=this.pageSizes;for(;this.pageSizeSelect.firstChild;)this.pageSizeSelect.removeChild(this.pageSizeSelect.firstChild);e.forEach(t=>{var i=document.createElement("option");i.value=t,t===!0?this.langBind("pagination|all",function(s){i.innerHTML=s}):i.innerHTML=t,this.pageSizeSelect.appendChild(i)}),this.pageSizeSelect.value=this.size}}initializePageCounter(){var e=this.table.options.paginationCounter,t=null;e&&(typeof e=="function"?t=e:t=te.pageCounters[e],t?(this.pageCounter=t,this.pageCounterElement=document.createElement("span"),this.pageCounterElement.classList.add("tabulator-page-counter")):console.warn("Pagination Error - No such page counter found: ",e))}initializePaginator(e){var t,i;e||(this.langBind("pagination|first",s=>{this.firstBut.innerHTML=s}),this.langBind("pagination|first_title",s=>{this.firstBut.setAttribute("aria-label",s),this.firstBut.setAttribute("title",s)}),this.langBind("pagination|prev",s=>{this.prevBut.innerHTML=s}),this.langBind("pagination|prev_title",s=>{this.prevBut.setAttribute("aria-label",s),this.prevBut.setAttribute("title",s)}),this.langBind("pagination|next",s=>{this.nextBut.innerHTML=s}),this.langBind("pagination|next_title",s=>{this.nextBut.setAttribute("aria-label",s),this.nextBut.setAttribute("title",s)}),this.langBind("pagination|last",s=>{this.lastBut.innerHTML=s}),this.langBind("pagination|last_title",s=>{this.lastBut.setAttribute("aria-label",s),this.lastBut.setAttribute("title",s)}),this.firstBut.addEventListener("click",()=>{this.setPage(1)}),this.prevBut.addEventListener("click",()=>{this.previousPage()}),this.nextBut.addEventListener("click",()=>{this.nextPage()}),this.lastBut.addEventListener("click",()=>{this.setPage(this.max)}),this.table.options.paginationElement&&(this.element=this.table.options.paginationElement),this.pageSizeSelect&&(t=document.createElement("label"),this.langBind("pagination|page_size",s=>{this.pageSizeSelect.setAttribute("aria-label",s),this.pageSizeSelect.setAttribute("title",s),t.innerHTML=s}),this.element.appendChild(t),this.element.appendChild(this.pageSizeSelect),this.pageSizeSelect.addEventListener("change",s=>{this.setPageSize(this.pageSizeSelect.value=="true"?!0:this.pageSizeSelect.value),this.setPage(1)})),this.element.appendChild(this.firstBut),this.element.appendChild(this.prevBut),this.element.appendChild(this.pagesElement),this.element.appendChild(this.nextBut),this.element.appendChild(this.lastBut),this.table.options.paginationElement||(this.table.options.paginationCounter&&(this.table.options.paginationCounterElement?this.table.options.paginationCounterElement instanceof HTMLElement?this.table.options.paginationCounterElement.appendChild(this.pageCounterElement):typeof this.table.options.paginationCounterElement=="string"&&(i=document.querySelector(this.table.options.paginationCounterElement),i?i.appendChild(this.pageCounterElement):console.warn("Pagination Error - Unable to find element matching paginationCounterElement selector:",this.table.options.paginationCounterElement)):this.footerAppend(this.pageCounterElement)),this.footerAppend(this.element)),this.page=this.table.options.paginationInitialPage,this.count=this.table.options.paginationButtonCount),this.mode=this.table.options.paginationMode}initializeProgressive(e){this.initializePaginator(!0),this.mode="progressive_"+e,this.progressiveLoad=!0}trackChanges(){this.dispatch("page-changed")}setMaxRows(e){e?this.max=this.size===!0?1:Math.ceil(e/this.size):this.max=1,this.page>this.max&&(this.page=this.max)}reset(e){this.initialLoad||(this.mode=="local"||e)&&(this.page=1,this.trackChanges())}setMaxPage(e){e=parseInt(e),this.max=e||1,this.page>this.max&&(this.page=this.max,this.trigger())}setPage(e){switch(e){case"first":return this.setPage(1);case"prev":return this.previousPage();case"next":return this.nextPage();case"last":return this.setPage(this.max)}return e=parseInt(e),e>0&&e<=this.max||this.mode!=="local"?(this.page=e,this.trackChanges(),this.trigger()):(console.warn("Pagination Error - Requested page is out of range of 1 - "+this.max+":",e),Promise.reject())}setPageToRow(e){var t=this.displayRows(-1),i=t.indexOf(e);if(i>-1){var s=this.size===!0?1:Math.ceil((i+1)/this.size);return this.setPage(s)}else return console.warn("Pagination Error - Requested row is not visible"),Promise.reject()}setPageSize(e){e!==!0&&(e=parseInt(e)),e>0&&(this.size=e,this.dispatchExternal("pageSizeChanged",e)),this.pageSizeSelect&&this.generatePageSizeSelectList(),this.trackChanges()}_setPageCounter(e,t,i){var s;if(this.pageCounter)switch(this.mode==="remote"&&(t=this.size,i=(this.page-1)*this.size+1,e=this.remoteRowCountEstimate),s=this.pageCounter.call(this,t,i,this.page,e,this.max),typeof s){case"object":if(s instanceof Node){for(;this.pageCounterElement.firstChild;)this.pageCounterElement.removeChild(this.pageCounterElement.firstChild);this.pageCounterElement.appendChild(s)}else this.pageCounterElement.innerHTML="",s!=null&&console.warn("Page Counter Error - Page Counter has returned a type of object, the only valid page counter object return is an instance of Node, the page counter returned:",s);break;case"undefined":this.pageCounterElement.innerHTML="";break;default:this.pageCounterElement.innerHTML=s}}_setPageButtons(){let e=Math.floor((this.count-1)/2),t=Math.ceil((this.count-1)/2),i=this.max-this.page+e+10&&n<=this.max&&this.pagesElement.appendChild(this._generatePageButton(n));this.footerRedraw()}_generatePageButton(e){var t=document.createElement("button");return t.classList.add("tabulator-page"),e==this.page&&t.classList.add("active"),t.setAttribute("type","button"),t.setAttribute("role","button"),this.langBind("pagination|page_title",i=>{t.setAttribute("aria-label",i+" "+e),t.setAttribute("title",i+" "+e)}),t.setAttribute("data-page",e),t.textContent=e,t.addEventListener("click",i=>{this.setPage(e)}),t}previousPage(){return this.page>1?(this.page--,this.trackChanges(),this.trigger()):(console.warn("Pagination Error - Previous page would be less than page 1:",0),Promise.reject())}nextPage(){return this.pagea.type==="row");if(this.mode=="local"){i=[],this.setMaxRows(e.length),this.size===!0?(s=0,n=e.length):(s=this.size*(this.page-1),n=s+parseInt(this.size)),this._setPageButtons();for(let a=s;a{this.dataChanging=!1});case"progressive_load":case"progressive_scroll":return this.reloadData(null,!0);default:return console.warn("Pagination Error - no such pagination mode:",this.mode),Promise.reject()}}_parseRemoteData(e){var t;if(typeof e.last_page>"u"&&console.warn("Remote Pagination Error - Server response missing '"+(this.options("dataReceiveParams").last_page||"last_page")+"' property"),e.data)if(this.max=parseInt(e.last_page)||1,this.remoteRowCountEstimate=typeof e.last_row<"u"?e.last_row:e.last_page*this.size-(this.page==e.last_page?this.size-e.data.length:0),this.progressiveLoad){switch(this.mode){case"progressive_load":this.page==1?this.table.rowManager.setData(e.data,!1,this.page==1):this.table.rowManager.addRows(e.data),this.page{this.nextPage()},this.table.options.progressiveLoadDelay);break;case"progressive_scroll":e=this.page===1?e.data:this.table.rowManager.getData().concat(e.data),this.table.rowManager.setData(e,this.page!==1,this.page==1),t=this.table.options.progressiveLoadScrollMargin||this.table.rowManager.element.clientHeight*2,this.table.rowManager.element.scrollHeight<=this.table.rowManager.element.clientHeight+t&&this.page{this.nextPage()});break}return!1}else this.dispatchExternal("pageLoaded",this.getPage());else console.warn("Remote Pagination Error - Server response missing '"+(this.options("dataReceiveParams").data||"data")+"' property");return e.data}footerRedraw(){var e=this.table.footerManager.containerElement;Math.ceil(e.clientWidth)-e.scrollWidth<0?this.pagesElement.style.display="none":(this.pagesElement.style.display="",Math.ceil(e.clientWidth)-e.scrollWidth<0&&(this.pagesElement.style.display="none"))}};b(te,"moduleName","page"),b(te,"pageCounters",Xi);let Le=te;var Ji={local:function(l,e){var t=localStorage.getItem(l+"-"+e);return t?JSON.parse(t):!1},cookie:function(l,e){var t=document.cookie,i=l+"-"+e,s=t.indexOf(i+"="),n,r;return s>-1&&(t=t.slice(s),n=t.indexOf(";"),n>-1&&(t=t.slice(0,n)),r=t.replace(i+"=","")),r?JSON.parse(r):!1}},Ki={local:function(l,e,t){localStorage.setItem(l+"-"+e,JSON.stringify(t))},cookie:function(l,e,t){var i=new Date;i.setDate(i.getDate()+1e4),document.cookie=l+"-"+e+"="+JSON.stringify(t)+"; expires="+i.toUTCString()}};const D=class D extends w{constructor(e){super(e),this.mode="",this.id="",this.defWatcherBlock=!1,this.config={},this.readFunc=!1,this.writeFunc=!1,this.registerTableOption("persistence",!1),this.registerTableOption("persistenceID",""),this.registerTableOption("persistenceMode",!0),this.registerTableOption("persistenceReaderFunc",!1),this.registerTableOption("persistenceWriterFunc",!1)}localStorageTest(){var e="_tabulator_test";try{return window.localStorage.setItem(e,e),window.localStorage.removeItem(e),!0}catch{return!1}}initialize(){if(this.table.options.persistence){var e=this.table.options.persistenceMode,t=this.table.options.persistenceID,i;this.mode=e!==!0?e:this.localStorageTest()?"local":"cookie",this.table.options.persistenceReaderFunc?typeof this.table.options.persistenceReaderFunc=="function"?this.readFunc=this.table.options.persistenceReaderFunc:D.readers[this.table.options.persistenceReaderFunc]?this.readFunc=D.readers[this.table.options.persistenceReaderFunc]:console.warn("Persistence Read Error - invalid reader set",this.table.options.persistenceReaderFunc):D.readers[this.mode]?this.readFunc=D.readers[this.mode]:console.warn("Persistence Read Error - invalid reader set",this.mode),this.table.options.persistenceWriterFunc?typeof this.table.options.persistenceWriterFunc=="function"?this.writeFunc=this.table.options.persistenceWriterFunc:D.writers[this.table.options.persistenceWriterFunc]?this.writeFunc=D.writers[this.table.options.persistenceWriterFunc]:console.warn("Persistence Write Error - invalid reader set",this.table.options.persistenceWriterFunc):D.writers[this.mode]?this.writeFunc=D.writers[this.mode]:console.warn("Persistence Write Error - invalid writer set",this.mode),this.id="tabulator-"+(t||this.table.element.getAttribute("id")||""),this.config={sort:this.table.options.persistence===!0||this.table.options.persistence.sort,filter:this.table.options.persistence===!0||this.table.options.persistence.filter,headerFilter:this.table.options.persistence===!0||this.table.options.persistence.headerFilter,group:this.table.options.persistence===!0||this.table.options.persistence.group,page:this.table.options.persistence===!0||this.table.options.persistence.page,columns:this.table.options.persistence===!0?["title","width","visible"]:this.table.options.persistence.columns},this.config.page&&(i=this.retrieveData("page"),i&&(typeof i.paginationSize<"u"&&(this.config.page===!0||this.config.page.size)&&(this.table.options.paginationSize=i.paginationSize),typeof i.paginationInitialPage<"u"&&(this.config.page===!0||this.config.page.page)&&(this.table.options.paginationInitialPage=i.paginationInitialPage))),this.config.group&&(i=this.retrieveData("group"),i&&(typeof i.groupBy<"u"&&(this.config.group===!0||this.config.group.groupBy)&&(this.table.options.groupBy=i.groupBy),typeof i.groupStartOpen<"u"&&(this.config.group===!0||this.config.group.groupStartOpen)&&(this.table.options.groupStartOpen=i.groupStartOpen),typeof i.groupHeader<"u"&&(this.config.group===!0||this.config.group.groupHeader)&&(this.table.options.groupHeader=i.groupHeader))),this.config.columns&&(this.table.options.columns=this.load("columns",this.table.options.columns),this.subscribe("column-init",this.initializeColumn.bind(this)),this.subscribe("column-show",this.save.bind(this,"columns")),this.subscribe("column-hide",this.save.bind(this,"columns")),this.subscribe("column-moved",this.save.bind(this,"columns"))),this.subscribe("table-built",this.tableBuilt.bind(this),0),this.subscribe("table-redraw",this.tableRedraw.bind(this)),this.subscribe("filter-changed",this.eventSave.bind(this,"filter")),this.subscribe("filter-changed",this.eventSave.bind(this,"headerFilter")),this.subscribe("sort-changed",this.eventSave.bind(this,"sort")),this.subscribe("group-changed",this.eventSave.bind(this,"group")),this.subscribe("page-changed",this.eventSave.bind(this,"page")),this.subscribe("column-resized",this.eventSave.bind(this,"columns")),this.subscribe("column-width",this.eventSave.bind(this,"columns")),this.subscribe("layout-refreshed",this.eventSave.bind(this,"columns"))}this.registerTableFunction("getColumnLayout",this.getColumnLayout.bind(this)),this.registerTableFunction("setColumnLayout",this.setColumnLayout.bind(this))}eventSave(e){this.config[e]&&this.save(e)}tableBuilt(){var e,t,i;this.config.sort&&(e=this.load("sort"),e&&(this.table.options.initialSort=e)),this.config.filter&&(t=this.load("filter"),t&&(this.table.options.initialFilter=t)),this.config.headerFilter&&(i=this.load("headerFilter"),i&&(this.table.options.initialHeaderFilter=i))}tableRedraw(e){e&&this.config.columns&&this.save("columns")}getColumnLayout(){return this.parseColumns(this.table.columnManager.getColumns())}setColumnLayout(e){return this.table.columnManager.setColumns(this.mergeDefinition(this.table.options.columns,e,!0)),!0}initializeColumn(e){var t,i;this.config.columns&&(this.defWatcherBlock=!0,t=e.getDefinition(),i=this.config.columns===!0?Object.keys(t):this.config.columns,i.forEach(s=>{var n=Object.getOwnPropertyDescriptor(t,s),r=t[s];n&&Object.defineProperty(t,s,{set:o=>{r=o,this.defWatcherBlock||this.save("columns"),n.set&&n.set(o)},get:()=>(n.get&&n.get(),r)})}),this.defWatcherBlock=!1)}load(e,t){var i=this.retrieveData(e);return t&&(i=i?this.mergeDefinition(t,i):t),i}retrieveData(e){return this.readFunc?this.readFunc(this.id,e):!1}mergeDefinition(e,t,i){var s=[];return t=t||[],t.forEach((n,r)=>{var o=this._findColumn(e,n),a;o&&(i?a=Object.keys(n):this.config.columns===!0||this.config.columns==null?(a=Object.keys(o),a.push("width")):a=this.config.columns,a.forEach(h=>{h!=="columns"&&typeof n[h]<"u"&&(o[h]=n[h])}),o.columns&&(o.columns=this.mergeDefinition(o.columns,n.columns)),s.push(o))}),e.forEach((n,r)=>{var o=this._findColumn(t,n);o||(s.length>r?s.splice(r,0,n):s.push(n))}),s}_findColumn(e,t){var i=t.columns?"group":t.field?"field":"object";return e.find(function(s){switch(i){case"group":return s.title===t.title&&s.columns.length===t.columns.length;case"field":return s.field===t.field;case"object":return s===t}})}save(e){var t={};switch(e){case"columns":t=this.parseColumns(this.table.columnManager.getColumns());break;case"filter":t=this.table.modules.filter.getFilters();break;case"headerFilter":t=this.table.modules.filter.getHeaderFilters();break;case"sort":t=this.validateSorters(this.table.modules.sort.getSort());break;case"group":t=this.getGroupConfig();break;case"page":t=this.getPageConfig();break}this.writeFunc&&this.writeFunc(this.id,e,t)}validateSorters(e){return e.forEach(function(t){t.column=t.field,delete t.field}),e}getGroupConfig(){var e={};return this.config.group&&((this.config.group===!0||this.config.group.groupBy)&&(e.groupBy=this.table.options.groupBy),(this.config.group===!0||this.config.group.groupStartOpen)&&(e.groupStartOpen=this.table.options.groupStartOpen),(this.config.group===!0||this.config.group.groupHeader)&&(e.groupHeader=this.table.options.groupHeader)),e}getPageConfig(){var e={};return this.config.page&&((this.config.page===!0||this.config.page.size)&&(e.paginationSize=this.table.modules.page.getPageSize()),(this.config.page===!0||this.config.page.page)&&(e.paginationInitialPage=this.table.modules.page.getPage())),e}parseColumns(e){var t=[],i=["headerContextMenu","headerMenu","contextMenu","clickMenu"];return e.forEach(s=>{var n={},r=s.getDefinition(),o;s.isGroup?(n.title=r.title,n.columns=this.parseColumns(s.getColumns())):(n.field=s.getField(),this.config.columns===!0||this.config.columns==null?(o=Object.keys(r),o.push("width"),o.push("visible")):o=this.config.columns,o.forEach(a=>{switch(a){case"width":n.width=s.getWidth();break;case"visible":n.visible=s.visible;break;default:typeof r[a]!="function"&&i.indexOf(a)===-1&&(n[a]=r[a])}})),t.push(n)}),t}};b(D,"moduleName","persistence"),b(D,"moduleInitOrder",-10),b(D,"readers",Ji),b(D,"writers",Ki);let Se=D;class at extends w{constructor(e){super(e),this.columnSubscribers={},this.registerTableOption("rowContextPopup",!1),this.registerTableOption("rowClickPopup",!1),this.registerTableOption("rowDblClickPopup",!1),this.registerTableOption("groupContextPopup",!1),this.registerTableOption("groupClickPopup",!1),this.registerTableOption("groupDblClickPopup",!1),this.registerColumnOption("headerContextPopup"),this.registerColumnOption("headerClickPopup"),this.registerColumnOption("headerDblClickPopup"),this.registerColumnOption("headerPopup"),this.registerColumnOption("headerPopupIcon"),this.registerColumnOption("contextPopup"),this.registerColumnOption("clickPopup"),this.registerColumnOption("dblClickPopup"),this.registerComponentFunction("cell","popup",this._componentPopupCall.bind(this)),this.registerComponentFunction("column","popup",this._componentPopupCall.bind(this)),this.registerComponentFunction("row","popup",this._componentPopupCall.bind(this)),this.registerComponentFunction("group","popup",this._componentPopupCall.bind(this))}initialize(){this.initializeRowWatchers(),this.initializeGroupWatchers(),this.subscribe("column-init",this.initializeColumn.bind(this))}_componentPopupCall(e,t,i){this.loadPopupEvent(t,null,e,i)}initializeRowWatchers(){this.table.options.rowContextPopup&&(this.subscribe("row-contextmenu",this.loadPopupEvent.bind(this,this.table.options.rowContextPopup)),this.table.on("rowTapHold",this.loadPopupEvent.bind(this,this.table.options.rowContextPopup))),this.table.options.rowClickPopup&&this.subscribe("row-click",this.loadPopupEvent.bind(this,this.table.options.rowClickPopup)),this.table.options.rowDblClickPopup&&this.subscribe("row-dblclick",this.loadPopupEvent.bind(this,this.table.options.rowDblClickPopup))}initializeGroupWatchers(){this.table.options.groupContextPopup&&(this.subscribe("group-contextmenu",this.loadPopupEvent.bind(this,this.table.options.groupContextPopup)),this.table.on("groupTapHold",this.loadPopupEvent.bind(this,this.table.options.groupContextPopup))),this.table.options.groupClickPopup&&this.subscribe("group-click",this.loadPopupEvent.bind(this,this.table.options.groupClickPopup)),this.table.options.groupDblClickPopup&&this.subscribe("group-dblclick",this.loadPopupEvent.bind(this,this.table.options.groupDblClickPopup))}initializeColumn(e){var t=e.definition;t.headerContextPopup&&!this.columnSubscribers.headerContextPopup&&(this.columnSubscribers.headerContextPopup=this.loadPopupTableColumnEvent.bind(this,"headerContextPopup"),this.subscribe("column-contextmenu",this.columnSubscribers.headerContextPopup),this.table.on("headerTapHold",this.loadPopupTableColumnEvent.bind(this,"headerContextPopup"))),t.headerClickPopup&&!this.columnSubscribers.headerClickPopup&&(this.columnSubscribers.headerClickPopup=this.loadPopupTableColumnEvent.bind(this,"headerClickPopup"),this.subscribe("column-click",this.columnSubscribers.headerClickPopup)),t.headerDblClickPopup&&!this.columnSubscribers.headerDblClickPopup&&(this.columnSubscribers.headerDblClickPopup=this.loadPopupTableColumnEvent.bind(this,"headerDblClickPopup"),this.subscribe("column-dblclick",this.columnSubscribers.headerDblClickPopup)),t.headerPopup&&this.initializeColumnHeaderPopup(e),t.contextPopup&&!this.columnSubscribers.contextPopup&&(this.columnSubscribers.contextPopup=this.loadPopupTableCellEvent.bind(this,"contextPopup"),this.subscribe("cell-contextmenu",this.columnSubscribers.contextPopup),this.table.on("cellTapHold",this.loadPopupTableCellEvent.bind(this,"contextPopup"))),t.clickPopup&&!this.columnSubscribers.clickPopup&&(this.columnSubscribers.clickPopup=this.loadPopupTableCellEvent.bind(this,"clickPopup"),this.subscribe("cell-click",this.columnSubscribers.clickPopup)),t.dblClickPopup&&!this.columnSubscribers.dblClickPopup&&(this.columnSubscribers.dblClickPopup=this.loadPopupTableCellEvent.bind(this,"dblClickPopup"),this.subscribe("cell-click",this.columnSubscribers.dblClickPopup))}initializeColumnHeaderPopup(e){var t=e.definition.headerPopupIcon,i;i=document.createElement("span"),i.classList.add("tabulator-header-popup-button"),t?(typeof t=="function"&&(t=t(e.getComponent())),t instanceof HTMLElement?i.appendChild(t):i.innerHTML=t):i.innerHTML="⋮",i.addEventListener("click",s=>{s.stopPropagation(),s.preventDefault(),this.loadPopupEvent(e.definition.headerPopup,s,e)}),e.titleElement.insertBefore(i,e.titleElement.firstChild)}loadPopupTableCellEvent(e,t,i){i._cell&&(i=i._cell),i.column.definition[e]&&this.loadPopupEvent(i.column.definition[e],t,i)}loadPopupTableColumnEvent(e,t,i){i._column&&(i=i._column),i.definition[e]&&this.loadPopupEvent(i.definition[e],t,i)}loadPopupEvent(e,t,i,s){var n;function r(o){n=o}i._group?i=i._group:i._row&&(i=i._row),e=typeof e=="function"?e.call(this.table,t,i.getComponent(),r):e,this.loadPopup(t,i,e,n,s)}loadPopup(e,t,i,s,n){var r=!(e instanceof MouseEvent),o,a;i instanceof HTMLElement?o=i:(o=document.createElement("div"),o.innerHTML=i),o.classList.add("tabulator-popup"),o.addEventListener("click",h=>{h.stopPropagation()}),r||e.preventDefault(),a=this.popup(o),typeof s=="function"&&a.renderCallback(s),e?a.show(e):a.show(t.getElement(),n||"center"),a.hideOnBlur(()=>{this.dispatchExternal("popupClosed",t.getComponent())}),this.dispatchExternal("popupOpened",t.getComponent())}}b(at,"moduleName","popup");class lt extends w{constructor(e){super(e),this.element=!1,this.manualBlock=!1,this.beforeprintEventHandler=null,this.afterprintEventHandler=null,this.registerTableOption("printAsHtml",!1),this.registerTableOption("printFormatter",!1),this.registerTableOption("printHeader",!1),this.registerTableOption("printFooter",!1),this.registerTableOption("printStyled",!0),this.registerTableOption("printRowRange","visible"),this.registerTableOption("printConfig",{}),this.registerColumnOption("print"),this.registerColumnOption("titlePrint")}initialize(){this.table.options.printAsHtml&&(this.beforeprintEventHandler=this.replaceTable.bind(this),this.afterprintEventHandler=this.cleanup.bind(this),window.addEventListener("beforeprint",this.beforeprintEventHandler),window.addEventListener("afterprint",this.afterprintEventHandler),this.subscribe("table-destroy",this.destroy.bind(this))),this.registerTableFunction("print",this.printFullscreen.bind(this))}destroy(){this.table.options.printAsHtml&&(window.removeEventListener("beforeprint",this.beforeprintEventHandler),window.removeEventListener("afterprint",this.afterprintEventHandler))}replaceTable(){this.manualBlock||(this.element=document.createElement("div"),this.element.classList.add("tabulator-print-table"),this.element.appendChild(this.table.modules.export.generateTable(this.table.options.printConfig,this.table.options.printStyled,this.table.options.printRowRange,"print")),this.table.element.style.display="none",this.table.element.parentNode.insertBefore(this.element,this.table.element))}cleanup(){document.body.classList.remove("tabulator-print-fullscreen-hide"),this.element&&this.element.parentNode&&(this.element.parentNode.removeChild(this.element),this.table.element.style.display="")}printFullscreen(e,t,i){var s=window.scrollX,n=window.scrollY,r=document.createElement("div"),o=document.createElement("div"),a=this.table.modules.export.generateTable(typeof i<"u"?i:this.table.options.printConfig,typeof t<"u"?t:this.table.options.printStyled,e||this.table.options.printRowRange,"print"),h,d;this.manualBlock=!0,this.element=document.createElement("div"),this.element.classList.add("tabulator-print-fullscreen"),this.table.options.printHeader&&(r.classList.add("tabulator-print-header"),h=typeof this.table.options.printHeader=="function"?this.table.options.printHeader.call(this.table):this.table.options.printHeader,typeof h=="string"?r.innerHTML=h:r.appendChild(h),this.element.appendChild(r)),this.element.appendChild(a),this.table.options.printFooter&&(o.classList.add("tabulator-print-footer"),d=typeof this.table.options.printFooter=="function"?this.table.options.printFooter.call(this.table):this.table.options.printFooter,typeof d=="string"?o.innerHTML=d:o.appendChild(d),this.element.appendChild(o)),document.body.classList.add("tabulator-print-fullscreen-hide"),document.body.appendChild(this.element),this.table.options.printFormatter&&this.table.options.printFormatter(this.element,a),window.print(),this.cleanup(),window.scrollTo(s,n),this.manualBlock=!1}}b(lt,"moduleName","print");class ht extends w{constructor(e){super(e),this.data=!1,this.blocked=!1,this.origFuncs={},this.currentVersion=0,this.registerTableOption("reactiveData",!1)}initialize(){this.table.options.reactiveData&&(this.subscribe("cell-value-save-before",this.block.bind(this,"cellsave")),this.subscribe("cell-value-save-after",this.unblock.bind(this,"cellsave")),this.subscribe("row-data-save-before",this.block.bind(this,"rowsave")),this.subscribe("row-data-save-after",this.unblock.bind(this,"rowsave")),this.subscribe("row-data-init-after",this.watchRow.bind(this)),this.subscribe("data-processing",this.watchData.bind(this)),this.subscribe("table-destroy",this.unwatchData.bind(this)))}watchData(e){var t=this,i;this.currentVersion++,i=this.currentVersion,this.unwatchData(),this.data=e,this.origFuncs.push=e.push,Object.defineProperty(this.data,"push",{enumerable:!1,configurable:!0,value:function(){var s=Array.from(arguments),n;return!t.blocked&&i===t.currentVersion&&(t.block("data-push"),s.forEach(r=>{t.table.rowManager.addRowActual(r,!1)}),n=t.origFuncs.push.apply(e,arguments),t.unblock("data-push")),n}}),this.origFuncs.unshift=e.unshift,Object.defineProperty(this.data,"unshift",{enumerable:!1,configurable:!0,value:function(){var s=Array.from(arguments),n;return!t.blocked&&i===t.currentVersion&&(t.block("data-unshift"),s.forEach(r=>{t.table.rowManager.addRowActual(r,!0)}),n=t.origFuncs.unshift.apply(e,arguments),t.unblock("data-unshift")),n}}),this.origFuncs.shift=e.shift,Object.defineProperty(this.data,"shift",{enumerable:!1,configurable:!0,value:function(){var s,n;return!t.blocked&&i===t.currentVersion&&(t.block("data-shift"),t.data.length&&(s=t.table.rowManager.getRowFromDataObject(t.data[0]),s&&s.deleteActual()),n=t.origFuncs.shift.call(e),t.unblock("data-shift")),n}}),this.origFuncs.pop=e.pop,Object.defineProperty(this.data,"pop",{enumerable:!1,configurable:!0,value:function(){var s,n;return!t.blocked&&i===t.currentVersion&&(t.block("data-pop"),t.data.length&&(s=t.table.rowManager.getRowFromDataObject(t.data[t.data.length-1]),s&&s.deleteActual()),n=t.origFuncs.pop.call(e),t.unblock("data-pop")),n}}),this.origFuncs.splice=e.splice,Object.defineProperty(this.data,"splice",{enumerable:!1,configurable:!0,value:function(){var s=Array.from(arguments),n=s[0]<0?e.length+s[0]:s[0],r=s[1],o=s[2]?s.slice(2):!1,a,h;if(!t.blocked&&i===t.currentVersion){if(t.block("data-splice"),o&&(a=e[n]?t.table.rowManager.getRowFromDataObject(e[n]):!1,a?o.forEach(u=>{t.table.rowManager.addRowActual(u,!0,a,!0)}):(o=o.slice().reverse(),o.forEach(u=>{t.table.rowManager.addRowActual(u,!0,!1,!0)}))),r!==0){var d=e.slice(n,typeof s[1]>"u"?s[1]:n+r);d.forEach((u,c)=>{var f=t.table.rowManager.getRowFromDataObject(u);f&&f.deleteActual(c!==d.length-1)})}(o||r!==0)&&t.table.rowManager.reRenderInPosition(),h=t.origFuncs.splice.apply(e,arguments),t.unblock("data-splice")}return h}})}unwatchData(){if(this.data!==!1)for(var e in this.origFuncs)Object.defineProperty(this.data,e,{enumerable:!0,configurable:!0,writable:!0,value:this.origFuncs.key})}watchRow(e){var t=e.getData();for(var i in t)this.watchKey(e,t,i);this.table.options.dataTree&&this.watchTreeChildren(e)}watchTreeChildren(e){var t=this,i=e.getData()[this.table.options.dataTreeChildField],s={};i&&(s.push=i.push,Object.defineProperty(i,"push",{enumerable:!1,configurable:!0,value:()=>{if(!t.blocked){t.block("tree-push");var n=s.push.apply(i,arguments);this.rebuildTree(e),t.unblock("tree-push")}return n}}),s.unshift=i.unshift,Object.defineProperty(i,"unshift",{enumerable:!1,configurable:!0,value:()=>{if(!t.blocked){t.block("tree-unshift");var n=s.unshift.apply(i,arguments);this.rebuildTree(e),t.unblock("tree-unshift")}return n}}),s.shift=i.shift,Object.defineProperty(i,"shift",{enumerable:!1,configurable:!0,value:()=>{if(!t.blocked){t.block("tree-shift");var n=s.shift.call(i);this.rebuildTree(e),t.unblock("tree-shift")}return n}}),s.pop=i.pop,Object.defineProperty(i,"pop",{enumerable:!1,configurable:!0,value:()=>{if(!t.blocked){t.block("tree-pop");var n=s.pop.call(i);this.rebuildTree(e),t.unblock("tree-pop")}return n}}),s.splice=i.splice,Object.defineProperty(i,"splice",{enumerable:!1,configurable:!0,value:()=>{if(!t.blocked){t.block("tree-splice");var n=s.splice.apply(i,arguments);this.rebuildTree(e),t.unblock("tree-splice")}return n}}))}rebuildTree(e){this.table.modules.dataTree.initializeRow(e),this.table.modules.dataTree.layoutRow(e),this.table.rowManager.refreshActiveData("tree",!1,!0)}watchKey(e,t,i){var s=this,n=Object.getOwnPropertyDescriptor(t,i),r=t[i],o=this.currentVersion;Object.defineProperty(t,i,{set:a=>{if(r=a,!s.blocked&&o===s.currentVersion){s.block("key");var h={};h[i]=a,e.updateData(h),s.unblock("key")}n.set&&n.set(a)},get:()=>(n.get&&n.get(),r)})}unwatchRow(e){var t=e.getData();for(var i in t)Object.defineProperty(t,i,{value:t[i]})}block(e){this.blocked||(this.blocked=e)}unblock(e){this.blocked===e&&(this.blocked=!1)}}b(ht,"moduleName","reactiveData");class dt extends w{constructor(e){super(e),this.startColumn=!1,this.startX=!1,this.startWidth=!1,this.latestX=!1,this.handle=null,this.initialNextColumn=null,this.nextColumn=null,this.initialized=!1,this.registerColumnOption("resizable",!0),this.registerTableOption("resizableColumnFit",!1),this.registerTableOption("resizableColumnGuide",!1)}initialize(){this.subscribe("column-rendered",this.layoutColumnHeader.bind(this))}initializeEventWatchers(){this.initialized||(this.subscribe("cell-rendered",this.layoutCellHandles.bind(this)),this.subscribe("cell-delete",this.deInitializeComponent.bind(this)),this.subscribe("cell-height",this.resizeHandle.bind(this)),this.subscribe("column-moved",this.columnLayoutUpdated.bind(this)),this.subscribe("column-hide",this.deInitializeColumn.bind(this)),this.subscribe("column-show",this.columnLayoutUpdated.bind(this)),this.subscribe("column-width",this.columnWidthUpdated.bind(this)),this.subscribe("column-delete",this.deInitializeComponent.bind(this)),this.subscribe("column-height",this.resizeHandle.bind(this)),this.initialized=!0)}layoutCellHandles(e){e.row.type==="row"&&(this.deInitializeComponent(e),this.initializeColumn("cell",e,e.column,e.element))}layoutColumnHeader(e){e.definition.resizable&&(this.initializeEventWatchers(),this.deInitializeComponent(e),this.initializeColumn("header",e,e,e.element))}columnLayoutUpdated(e){var t=e.prevColumn();this.reinitializeColumn(e),t&&this.reinitializeColumn(t)}columnWidthUpdated(e){e.modules.frozen&&(this.table.modules.frozenColumns.leftColumns.includes(e)?this.table.modules.frozenColumns.leftColumns.forEach(t=>{this.reinitializeColumn(t)}):this.table.modules.frozenColumns.rightColumns.includes(e)&&this.table.modules.frozenColumns.rightColumns.forEach(t=>{this.reinitializeColumn(t)}))}frozenColumnOffset(e){var t=!1;return e.modules.frozen&&(t=e.modules.frozen.marginValue,e.modules.frozen.position==="left"?t+=e.getWidth()-3:t&&(t-=3)),t!==!1?t+"px":!1}reinitializeColumn(e){var t=this.frozenColumnOffset(e);e.cells.forEach(i=>{i.modules.resize&&i.modules.resize.handleEl&&(t&&(i.modules.resize.handleEl.style[e.modules.frozen.position]=t,i.modules.resize.handleEl.style["z-index"]=11),i.element.after(i.modules.resize.handleEl))}),e.modules.resize&&e.modules.resize.handleEl&&(t&&(e.modules.resize.handleEl.style[e.modules.frozen.position]=t),e.element.after(e.modules.resize.handleEl))}initializeColumn(e,t,i,s){var n=this,r=!1,o=i.definition.resizable,a={},h=i.getLastColumn();if(e==="header"&&(r=i.definition.formatter=="textarea"||i.definition.variableHeight,a={variableHeight:r}),(o===!0||o==e)&&this._checkResizability(h)){var d=document.createElement("span");d.className="tabulator-col-resize-handle",d.addEventListener("click",function(c){c.stopPropagation()});var u=function(c){n.startColumn=i,n.initialNextColumn=n.nextColumn=h.nextColumn(),n._mouseDown(c,h,d)};d.addEventListener("mousedown",u),d.addEventListener("touchstart",u,{passive:!0}),d.addEventListener("dblclick",c=>{var f=h.getWidth();c.stopPropagation(),h.reinitializeWidth(!0),f!==h.getWidth()&&(n.dispatch("column-resized",h),n.dispatchExternal("columnResized",h.getComponent()))}),i.modules.frozen&&(d.style.position="sticky",d.style[i.modules.frozen.position]=this.frozenColumnOffset(i)),a.handleEl=d,s.parentNode&&i.visible&&s.after(d)}t.modules.resize=a}deInitializeColumn(e){this.deInitializeComponent(e),e.cells.forEach(t=>{this.deInitializeComponent(t)})}deInitializeComponent(e){var t;e.modules.resize&&(t=e.modules.resize.handleEl,t&&t.parentElement&&t.parentElement.removeChild(t))}resizeHandle(e,t){e.modules.resize&&e.modules.resize.handleEl&&(e.modules.resize.handleEl.style.height=t)}resize(e,t){var i=typeof e.clientX>"u"?e.touches[0].clientX:e.clientX,s=i-this.startX,n=i-this.latestX,r,o;if(this.latestX=i,this.table.rtl&&(s=-s,n=-n),r=t.width==t.minWidth||t.width==t.maxWidth,t.setWidth(this.startWidth+s),o=t.width==t.minWidth||t.width==t.maxWidth,n<0&&(this.nextColumn=this.initialNextColumn),this.table.options.resizableColumnFit&&this.nextColumn&&!(r&&o)){let a=this.nextColumn.getWidth();n>0&&a<=this.nextColumn.minWidth&&(this.nextColumn=this.nextColumn.nextColumn()),this.nextColumn&&this.nextColumn.setWidth(this.nextColumn.getWidth()-n)}this.table.columnManager.rerenderColumns(!0),!this.table.browserSlow&&t.modules.resize&&t.modules.resize.variableHeight&&t.checkCellHeights()}calcGuidePosition(e,t,i){var s=typeof e.clientX>"u"?e.touches[0].clientX:e.clientX,n=i.getBoundingClientRect().x-this.table.element.getBoundingClientRect().x,r=this.table.element.getBoundingClientRect().x,o=t.element.getBoundingClientRect().left-r,a=s-this.startX,h=Math.max(n+a,o+t.minWidth);return t.maxWidth&&(h=Math.min(h,o+t.maxWidth)),h}_checkResizability(e){return e.definition.resizable}_mouseDown(e,t,i){var s=this,n;this.dispatchExternal("columnResizing",t.getComponent()),s.table.options.resizableColumnGuide&&(n=document.createElement("span"),n.classList.add("tabulator-col-resize-guide"),s.table.element.appendChild(n),setTimeout(()=>{n.style.left=s.calcGuidePosition(e,t,i)+"px"})),s.table.element.classList.add("tabulator-block-select");function r(a){s.table.options.resizableColumnGuide?n.style.left=s.calcGuidePosition(a,t,i)+"px":s.resize(a,t)}function o(a){s.table.options.resizableColumnGuide&&(s.resize(a,t),n.remove()),s.startColumn.modules.edit&&(s.startColumn.modules.edit.blocked=!1),s.table.browserSlow&&t.modules.resize&&t.modules.resize.variableHeight&&t.checkCellHeights(),document.body.removeEventListener("mouseup",o),document.body.removeEventListener("mousemove",r),i.removeEventListener("touchmove",r),i.removeEventListener("touchend",o),s.table.element.classList.remove("tabulator-block-select"),s.startWidth!==t.getWidth()&&(s.table.columnManager.verticalAlignHeaders(),s.dispatch("column-resized",t),s.dispatchExternal("columnResized",t.getComponent()))}e.stopPropagation(),s.startColumn.modules.edit&&(s.startColumn.modules.edit.blocked=!0),s.startX=typeof e.clientX>"u"?e.touches[0].clientX:e.clientX,s.latestX=s.startX,s.startWidth=t.getWidth(),document.body.addEventListener("mousemove",r),document.body.addEventListener("mouseup",o),i.addEventListener("touchmove",r,{passive:!0}),i.addEventListener("touchend",o)}}b(dt,"moduleName","resizeColumns");class ut extends w{constructor(e){super(e),this.startColumn=!1,this.startY=!1,this.startHeight=!1,this.handle=null,this.prevHandle=null,this.registerTableOption("resizableRows",!1),this.registerTableOption("resizableRowGuide",!1)}initialize(){this.table.options.resizableRows&&this.subscribe("row-layout-after",this.initializeRow.bind(this))}initializeRow(e){var t=this,i=e.getElement(),s=document.createElement("div");s.className="tabulator-row-resize-handle";var n=document.createElement("div");n.className="tabulator-row-resize-handle prev",s.addEventListener("click",function(a){a.stopPropagation()});var r=function(a){t.startRow=e,t._mouseDown(a,e,s)};s.addEventListener("mousedown",r),s.addEventListener("touchstart",r,{passive:!0}),n.addEventListener("click",function(a){a.stopPropagation()});var o=function(a){var h=t.table.rowManager.prevDisplayRow(e);h&&(t.startRow=h,t._mouseDown(a,h,n))};n.addEventListener("mousedown",o),n.addEventListener("touchstart",o,{passive:!0}),i.appendChild(s),i.appendChild(n)}resize(e,t){t.setHeight(this.startHeight+((typeof e.screenY>"u"?e.touches[0].screenY:e.screenY)-this.startY))}calcGuidePosition(e,t,i){var s=typeof e.screenY>"u"?e.touches[0].screenY:e.screenY,n=i.getBoundingClientRect().y-this.table.element.getBoundingClientRect().y,r=this.table.element.getBoundingClientRect().y,o=t.element.getBoundingClientRect().top-r,a=s-this.startY;return Math.max(n+a,o)}_mouseDown(e,t,i){var s=this,n;s.dispatchExternal("rowResizing",t.getComponent()),s.table.options.resizableRowGuide&&(n=document.createElement("span"),n.classList.add("tabulator-row-resize-guide"),s.table.element.appendChild(n),setTimeout(()=>{n.style.top=s.calcGuidePosition(e,t,i)+"px"})),s.table.element.classList.add("tabulator-block-select");function r(a){s.table.options.resizableRowGuide?n.style.top=s.calcGuidePosition(a,t,i)+"px":s.resize(a,t)}function o(a){s.table.options.resizableRowGuide&&(s.resize(a,t),n.remove()),document.body.removeEventListener("mouseup",r),document.body.removeEventListener("mousemove",r),i.removeEventListener("touchmove",r),i.removeEventListener("touchend",o),s.table.element.classList.remove("tabulator-block-select"),s.dispatchExternal("rowResized",t.getComponent())}e.stopPropagation(),s.startY=typeof e.screenY>"u"?e.touches[0].screenY:e.screenY,s.startHeight=t.getHeight(),document.body.addEventListener("mousemove",r),document.body.addEventListener("mouseup",o),i.addEventListener("touchmove",r,{passive:!0}),i.addEventListener("touchend",o)}}b(ut,"moduleName","resizeRows");class ct extends w{constructor(e){super(e),this.binding=!1,this.visibilityObserver=!1,this.resizeObserver=!1,this.containerObserver=!1,this.tableHeight=0,this.tableWidth=0,this.containerHeight=0,this.containerWidth=0,this.autoResize=!1,this.visible=!1,this.initialized=!1,this.initialRedraw=!1,this.registerTableOption("autoResize",!0)}initialize(){if(this.table.options.autoResize){var e=this.table,t;this.tableHeight=e.element.clientHeight,this.tableWidth=e.element.clientWidth,e.element.parentNode&&(this.containerHeight=e.element.parentNode.clientHeight,this.containerWidth=e.element.parentNode.clientWidth),typeof IntersectionObserver<"u"&&typeof ResizeObserver<"u"&&e.rowManager.getRenderMode()==="virtual"?(this.initializeVisibilityObserver(),this.autoResize=!0,this.resizeObserver=new ResizeObserver(i=>{if(!e.browserMobile||e.browserMobile&&(!e.modules.edit||e.modules.edit&&!e.modules.edit.currentCell)){var s=Math.floor(i[0].contentRect.height),n=Math.floor(i[0].contentRect.width);(this.tableHeight!=s||this.tableWidth!=n)&&(this.tableHeight=s,this.tableWidth=n,e.element.parentNode&&(this.containerHeight=e.element.parentNode.clientHeight,this.containerWidth=e.element.parentNode.clientWidth),this.redrawTable())}}),this.resizeObserver.observe(e.element),t=window.getComputedStyle(e.element),this.table.element.parentNode&&!this.table.rowManager.fixedHeight&&(t.getPropertyValue("max-height")||t.getPropertyValue("min-height"))&&(this.containerObserver=new ResizeObserver(i=>{if(!e.browserMobile||e.browserMobile&&(!e.modules.edit||e.modules.edit&&!e.modules.edit.currentCell)){var s=Math.floor(i[0].contentRect.height),n=Math.floor(i[0].contentRect.width);(this.containerHeight!=s||this.containerWidth!=n)&&(this.containerHeight=s,this.containerWidth=n,this.tableHeight=e.element.clientHeight,this.tableWidth=e.element.clientWidth),this.redrawTable()}}),this.containerObserver.observe(this.table.element.parentNode)),this.subscribe("table-resize",this.tableResized.bind(this))):(this.binding=function(){(!e.browserMobile||e.browserMobile&&(!e.modules.edit||e.modules.edit&&!e.modules.edit.currentCell))&&(e.columnManager.rerenderColumns(!0),e.redraw())},window.addEventListener("resize",this.binding)),this.subscribe("table-destroy",this.clearBindings.bind(this))}}initializeVisibilityObserver(){this.visibilityObserver=new IntersectionObserver(e=>{this.visible=e[0].isIntersecting,this.initialized?this.visible&&(this.redrawTable(this.initialRedraw),this.initialRedraw=!1):(this.initialized=!0,this.initialRedraw=!this.visible)}),this.visibilityObserver.observe(this.table.element)}redrawTable(e){this.initialized&&this.visible&&(this.table.columnManager.rerenderColumns(!0),this.table.redraw(e))}tableResized(){this.table.rowManager.redraw()}clearBindings(){this.binding&&window.removeEventListener("resize",this.binding),this.resizeObserver&&this.resizeObserver.unobserve(this.table.element),this.visibilityObserver&&this.visibilityObserver.unobserve(this.table.element),this.containerObserver&&this.containerObserver.unobserve(this.table.element.parentNode)}}b(ct,"moduleName","resizeTable");function qi(l,e,t){var i=document.createElement("div"),s=l.getRow()._row.modules.responsiveLayout;i.classList.add("tabulator-responsive-collapse-toggle"),i.innerHTML=` + + + + + + +`,l.getElement().classList.add("tabulator-row-handle");function n(r){var o=s.element;s.open=r,o&&(s.open?(i.classList.add("open"),o.style.display=""):(i.classList.remove("open"),o.style.display="none"))}return i.addEventListener("click",function(r){r.stopImmediatePropagation(),n(!s.open),l.getTable().rowManager.adjustTableSize()}),n(s.open),i}var Yi={format:{formatters:{responsiveCollapse:qi}}};class De extends w{constructor(e){super(e),this.columns=[],this.hiddenColumns=[],this.mode="",this.index=0,this.collapseFormatter=[],this.collapseStartOpen=!0,this.collapseHandleColumn=!1,this.registerTableOption("responsiveLayout",!1),this.registerTableOption("responsiveLayoutCollapseStartOpen",!0),this.registerTableOption("responsiveLayoutCollapseUseFormatters",!0),this.registerTableOption("responsiveLayoutCollapseFormatter",!1),this.registerColumnOption("responsive")}initialize(){this.table.options.responsiveLayout&&(this.subscribe("column-layout",this.initializeColumn.bind(this)),this.subscribe("column-show",this.updateColumnVisibility.bind(this)),this.subscribe("column-hide",this.updateColumnVisibility.bind(this)),this.subscribe("columns-loaded",this.initializeResponsivity.bind(this)),this.subscribe("column-moved",this.initializeResponsivity.bind(this)),this.subscribe("column-add",this.initializeResponsivity.bind(this)),this.subscribe("column-delete",this.initializeResponsivity.bind(this)),this.subscribe("table-redrawing",this.tableRedraw.bind(this)),this.table.options.responsiveLayout==="collapse"&&(this.subscribe("row-data-changed",this.generateCollapsedRowContent.bind(this)),this.subscribe("row-init",this.initializeRow.bind(this)),this.subscribe("row-layout",this.layoutRow.bind(this))))}tableRedraw(e){["fitColumns","fitDataStretch"].indexOf(this.layoutMode())===-1&&(e||this.update())}initializeResponsivity(){var e=[];this.mode=this.table.options.responsiveLayout,this.collapseFormatter=this.table.options.responsiveLayoutCollapseFormatter||this.formatCollapsedData,this.collapseStartOpen=this.table.options.responsiveLayoutCollapseStartOpen,this.hiddenColumns=[],this.collapseFormatter&&(this.collapseFormatter=this.collapseFormatter.bind(this.table)),this.table.columnManager.columnsByIndex.forEach((t,i)=>{t.modules.responsive&&t.modules.responsive.order&&t.modules.responsive.visible&&(t.modules.responsive.index=i,e.push(t),!t.visible&&this.mode==="collapse"&&this.hiddenColumns.push(t))}),e=e.reverse(),e=e.sort((t,i)=>{var s=i.modules.responsive.order-t.modules.responsive.order;return s||i.modules.responsive.index-t.modules.responsive.index}),this.columns=e,this.mode==="collapse"&&this.generateCollapsedContent();for(let t of this.table.columnManager.columnsByIndex)if(t.definition.formatter=="responsiveCollapse"){this.collapseHandleColumn=t;break}this.collapseHandleColumn&&(this.hiddenColumns.length?this.collapseHandleColumn.show():this.collapseHandleColumn.hide())}initializeColumn(e){var t=e.getDefinition();e.modules.responsive={order:typeof t.responsive>"u"?1:t.responsive,visible:t.visible!==!1}}initializeRow(e){var t;e.type!=="calc"&&(t=document.createElement("div"),t.classList.add("tabulator-responsive-collapse"),e.modules.responsiveLayout={element:t,open:this.collapseStartOpen},this.collapseStartOpen||(t.style.display="none"))}layoutRow(e){var t=e.getElement();e.modules.responsiveLayout&&(t.appendChild(e.modules.responsiveLayout.element),this.generateCollapsedRowContent(e))}updateColumnVisibility(e,t){!t&&e.modules.responsive&&(e.modules.responsive.visible=e.visible,this.initializeResponsivity())}hideColumn(e){var t=this.hiddenColumns.length;e.hide(!1,!0),this.mode==="collapse"&&(this.hiddenColumns.unshift(e),this.generateCollapsedContent(),this.collapseHandleColumn&&!t&&this.collapseHandleColumn.show())}showColumn(e){var t;e.show(!1,!0),e.setWidth(e.getWidth()),this.mode==="collapse"&&(t=this.hiddenColumns.indexOf(e),t>-1&&this.hiddenColumns.splice(t,1),this.generateCollapsedContent(),this.collapseHandleColumn&&!this.hiddenColumns.length&&this.collapseHandleColumn.hide())}update(){for(var e=!0;e;){let t=this.table.modules.layout.getMode()=="fitColumns"?this.table.columnManager.getFlexBaseWidth():this.table.columnManager.getWidth(),i=(this.table.options.headerVisible?this.table.columnManager.element.clientWidth:this.table.element.clientWidth)-t;if(i<0){let s=this.columns[this.index];s?(this.hideColumn(s),this.index++):e=!1}else{let s=this.columns[this.index-1];s&&i>0&&i>=s.getWidth()?(this.showColumn(s),this.index--):e=!1}this.table.rowManager.activeRowsCount||this.table.rowManager.renderEmptyScroll()}}generateCollapsedContent(){var e=this.table.rowManager.getDisplayRows();e.forEach(t=>{this.generateCollapsedRowContent(t)})}generateCollapsedRowContent(e){var t,i;if(e.modules.responsiveLayout){for(t=e.modules.responsiveLayout.element;t.firstChild;)t.removeChild(t.firstChild);i=this.collapseFormatter(this.generateCollapsedRowData(e)),i&&t.appendChild(i),e.calcHeight(!0)}}generateCollapsedRowData(e){var t=e.getData(),i=[],s;return this.hiddenColumns.forEach(n=>{var r=n.getFieldValue(t);if(n.definition.title&&n.field)if(n.modules.format&&this.table.options.responsiveLayoutCollapseUseFormatters){let o=function(a){a()};s={value:!1,data:{},getValue:function(){return r},getData:function(){return t},getType:function(){return"cell"},getElement:function(){return document.createElement("div")},getRow:function(){return e.getComponent()},getColumn:function(){return n.getComponent()},getTable:()=>this.table},i.push({field:n.field,title:n.definition.title,value:n.modules.format.formatter.call(this.table.modules.format,s,n.modules.format.params,o)})}else i.push({field:n.field,title:n.definition.title,value:r})}),i}formatCollapsedData(e){var t=document.createElement("table");return e.forEach(i=>{var s=document.createElement("tr"),n=document.createElement("td"),r=document.createElement("td"),o,a=document.createElement("strong");n.appendChild(a),this.modules.localize.bind("columns|"+i.field,function(h){a.innerHTML=h||i.title}),i.value instanceof Node?(o=document.createElement("div"),o.appendChild(i.value),r.appendChild(o)):r.innerHTML=i.value,s.appendChild(n),s.appendChild(r),t.appendChild(s)}),Object.keys(e).length?t:""}}b(De,"moduleName","responsiveLayout"),b(De,"moduleExtensions",Yi);function $i(l,e,t){var i=document.createElement("input"),s=!1;if(i.type="checkbox",i.setAttribute("aria-label","Select Row"),this.table.modExists("selectRow",!0))if(i.addEventListener("click",r=>{r.stopPropagation()}),typeof l.getRow=="function"){var n=l.getRow();n instanceof oe?(i.addEventListener("change",r=>{this.table.options.selectableRowsRangeMode==="click"&&s?s=!1:n.toggleSelect()}),this.table.options.selectableRowsRangeMode==="click"&&i.addEventListener("click",r=>{s=!0,this.table.modules.selectRow.handleComplexRowClick(n._row,r)}),i.checked=n.isSelected&&n.isSelected(),this.table.modules.selectRow.registerRowSelectCheckbox(n,i)):i=""}else i.addEventListener("change",r=>{this.table.modules.selectRow.selectedRows.length?this.table.deselectRow():this.table.selectRow(e.rowRange)}),this.table.modules.selectRow.registerHeaderSelectCheckbox(i);return i}var Qi={format:{formatters:{rowSelection:$i}}};class ze extends w{constructor(e){super(e),this.selecting=!1,this.lastClickedRow=!1,this.selectPrev=[],this.selectedRows=[],this.headerCheckboxElement=null,this.registerTableOption("selectableRows","highlight"),this.registerTableOption("selectableRowsRangeMode","drag"),this.registerTableOption("selectableRowsRollingSelection",!0),this.registerTableOption("selectableRowsPersistence",!0),this.registerTableOption("selectableRowsCheck",function(t,i){return!0}),this.registerTableFunction("selectRow",this.selectRows.bind(this)),this.registerTableFunction("deselectRow",this.deselectRows.bind(this)),this.registerTableFunction("toggleSelectRow",this.toggleRow.bind(this)),this.registerTableFunction("getSelectedRows",this.getSelectedRows.bind(this)),this.registerTableFunction("getSelectedData",this.getSelectedData.bind(this)),this.registerComponentFunction("row","select",this.selectRows.bind(this)),this.registerComponentFunction("row","deselect",this.deselectRows.bind(this)),this.registerComponentFunction("row","toggleSelect",this.toggleRow.bind(this)),this.registerComponentFunction("row","isSelected",this.isRowSelected.bind(this))}initialize(){this.deprecatedOptionsCheck(),this.table.options.selectableRows==="highlight"&&this.table.options.selectableRange&&(this.table.options.selectableRows=!1),this.table.options.selectableRows!==!1&&(this.subscribe("row-init",this.initializeRow.bind(this)),this.subscribe("row-deleting",this.rowDeleted.bind(this)),this.subscribe("rows-wipe",this.clearSelectionData.bind(this)),this.subscribe("rows-retrieve",this.rowRetrieve.bind(this)),this.table.options.selectableRows&&!this.table.options.selectableRowsPersistence&&this.subscribe("data-refreshing",this.deselectRows.bind(this)))}deprecatedOptionsCheck(){}rowRetrieve(e,t){return e==="selected"?this.selectedRows:t}rowDeleted(e){this._deselectRow(e,!0)}clearSelectionData(e){var t=this.selectedRows.length;this.selecting=!1,this.lastClickedRow=!1,this.selectPrev=[],this.selectedRows=[],t&&e!==!0&&this._rowSelectionChanged()}initializeRow(e){var t=this,i=t.checkRowSelectability(e),s=e.getElement(),n=function(){setTimeout(function(){t.selecting=!1},50),document.body.removeEventListener("mouseup",n)};e.modules.select={selected:!1},s.classList.toggle("tabulator-selectable",i),s.classList.toggle("tabulator-unselectable",!i),t.checkRowSelectability(e)&&t.table.options.selectableRows&&t.table.options.selectableRows!="highlight"&&(t.table.options.selectableRowsRangeMode==="click"?s.addEventListener("click",this.handleComplexRowClick.bind(this,e)):(s.addEventListener("click",function(r){(!t.table.modExists("edit")||!t.table.modules.edit.getCurrentCell())&&t.table._clearSelection(),t.selecting||t.toggleRow(e)}),s.addEventListener("mousedown",function(r){if(r.shiftKey)return t.table._clearSelection(),t.selecting=!0,t.selectPrev=[],document.body.addEventListener("mouseup",n),document.body.addEventListener("keyup",n),t.toggleRow(e),!1}),s.addEventListener("mouseenter",function(r){t.selecting&&(t.table._clearSelection(),t.toggleRow(e),t.selectPrev[1]==e&&t.toggleRow(t.selectPrev[0]))}),s.addEventListener("mouseout",function(r){t.selecting&&(t.table._clearSelection(),t.selectPrev.unshift(e))})))}handleComplexRowClick(e,t){if(t.shiftKey){this.table._clearSelection(),this.lastClickedRow=this.lastClickedRow||e;var i=this.table.rowManager.getDisplayRowIndex(this.lastClickedRow),s=this.table.rowManager.getDisplayRowIndex(e),n=i<=s?i:s,r=i>=s?i:s,o=this.table.rowManager.getDisplayRows().slice(0),a=o.splice(n,r-n+1);t.ctrlKey||t.metaKey?(a.forEach(h=>{h!==this.lastClickedRow&&(this.table.options.selectableRows!==!0&&!this.isRowSelected(e)?this.selectedRows.lengththis.table.options.selectableRows&&(a=a.slice(0,this.table.options.selectableRows)),this.selectRows(a)),this.table._clearSelection()}else t.ctrlKey||t.metaKey?(this.toggleRow(e),this.lastClickedRow=e):(this.deselectRows(void 0,!0),this.selectRows(e),this.lastClickedRow=e)}checkRowSelectability(e){return e&&e.type==="row"?this.table.options.selectableRowsCheck.call(this.table,e.getComponent()):!1}toggleRow(e){this.checkRowSelectability(e)&&(e.modules.select&&e.modules.select.selected?this._deselectRow(e):this._selectRow(e))}selectRows(e){var t=[],i,s;switch(typeof e){case"undefined":i=this.table.rowManager.rows;break;case"number":i=this.table.rowManager.findRow(e);break;case"string":i=this.table.rowManager.findRow(e),i||(i=this.table.rowManager.getRows(e));break;default:i=e;break}Array.isArray(i)?i.length&&(i.forEach(n=>{s=this._selectRow(n,!0,!0),s&&t.push(s)}),this._rowSelectionChanged(!1,t)):i&&this._selectRow(i,!1,!0)}_selectRow(e,t,i){if(!isNaN(this.table.options.selectableRows)&&this.table.options.selectableRows!==!0&&!i&&this.selectedRows.length>=this.table.options.selectableRows)if(this.table.options.selectableRowsRollingSelection)this._deselectRow(this.selectedRows[0]);else return!1;var s=this.table.rowManager.findRow(e);if(s){if(this.selectedRows.indexOf(s)==-1)return s.getElement().classList.add("tabulator-selected"),s.modules.select||(s.modules.select={}),s.modules.select.selected=!0,s.modules.select.checkboxEl&&(s.modules.select.checkboxEl.checked=!0),this.selectedRows.push(s),this.table.options.dataTreeSelectPropagate&&this.childRowSelection(s,!0),this.dispatchExternal("rowSelected",s.getComponent()),this._rowSelectionChanged(t,s),s}else t||console.warn("Selection Error - No such row found, ignoring selection:"+e)}isRowSelected(e){return this.selectedRows.indexOf(e)!==-1}deselectRows(e,t){var i=[],s,n;switch(typeof e){case"undefined":s=Object.assign([],this.selectedRows);break;case"number":s=this.table.rowManager.findRow(e);break;case"string":s=this.table.rowManager.findRow(e),s||(s=this.table.rowManager.getRows(e));break;default:s=e;break}Array.isArray(s)?s.length&&(s.forEach(r=>{n=this._deselectRow(r,!0,!0),n&&i.push(n)}),this._rowSelectionChanged(t,[],i)):s&&this._deselectRow(s,t,!0)}_deselectRow(e,t){var i=this,s=i.table.rowManager.findRow(e),n,r;if(s){if(n=i.selectedRows.findIndex(function(o){return o==s}),n>-1)return r=s.getElement(),r&&r.classList.remove("tabulator-selected"),s.modules.select||(s.modules.select={}),s.modules.select.selected=!1,s.modules.select.checkboxEl&&(s.modules.select.checkboxEl.checked=!1),i.selectedRows.splice(n,1),this.table.options.dataTreeSelectPropagate&&this.childRowSelection(s,!1),this.dispatchExternal("rowDeselected",s.getComponent()),i._rowSelectionChanged(t,void 0,s),s}else t||console.warn("Deselection Error - No such row found, ignoring selection:"+e)}getSelectedData(){var e=[];return this.selectedRows.forEach(function(t){e.push(t.getData())}),e}getSelectedRows(){var e=[];return this.selectedRows.forEach(function(t){e.push(t.getComponent())}),e}_rowSelectionChanged(e,t=[],i=[]){this.headerCheckboxElement&&(this.selectedRows.length===0?(this.headerCheckboxElement.checked=!1,this.headerCheckboxElement.indeterminate=!1):this.table.rowManager.rows.length===this.selectedRows.length?(this.headerCheckboxElement.checked=!0,this.headerCheckboxElement.indeterminate=!1):(this.headerCheckboxElement.indeterminate=!0,this.headerCheckboxElement.checked=!1)),e||(Array.isArray(t)||(t=[t]),t=t.map(s=>s.getComponent()),Array.isArray(i)||(i=[i]),i=i.map(s=>s.getComponent()),this.dispatchExternal("rowSelectionChanged",this.getSelectedData(),this.getSelectedRows(),t,i))}registerRowSelectCheckbox(e,t){e._row.modules.select||(e._row.modules.select={}),e._row.modules.select.checkboxEl=t}registerHeaderSelectCheckbox(e){this.headerCheckboxElement=e}childRowSelection(e,t){var i=this.table.modules.dataTree.getChildren(e,!0,!0);if(t)for(let s of i)this._selectRow(s,!0);else for(let s of i)this._deselectRow(s,!0)}}b(ze,"moduleName","selectRow"),b(ze,"moduleExtensions",Qi);class Zi{constructor(e){return this._range=e,new Proxy(this,{get:function(t,i,s){return typeof t[i]<"u"?t[i]:t._range.table.componentFunctionBinder.handle("range",t._range,i)}})}getElement(){return this._range.element}getData(){return this._range.getData()}getCells(){return this._range.getCells(!0,!0)}getStructuredCells(){return this._range.getStructuredCells()}getRows(){return this._range.getRows().map(e=>e.getComponent())}getColumns(){return this._range.getColumns().map(e=>e.getComponent())}getBounds(){return this._range.getBounds()}getTopEdge(){return this._range.top}getBottomEdge(){return this._range.bottom}getLeftEdge(){return this._range.left}getRightEdge(){return this._range.right}setBounds(e,t){this._range.destroyedGuard("setBounds")&&this._range.setBounds(e&&e._cell,t&&t._cell)}setStartBound(e){this._range.destroyedGuard("setStartBound")&&(this._range.setEndBound(e&&e._cell),this._range.rangeManager.layoutElement())}setEndBound(e){this._range.destroyedGuard("setEndBound")&&(this._range.setEndBound(e&&e._cell),this._range.rangeManager.layoutElement())}clearValues(){this._range.destroyedGuard("clearValues")&&this._range.clearValues()}remove(){this._range.destroyedGuard("remove")&&this._range.destroy(!0)}}class es extends M{constructor(e,t,i,s){super(e),this.rangeManager=t,this.element=null,this.initialized=!1,this.initializing={start:!1,end:!1},this.destroyed=!1,this.top=0,this.bottom=0,this.left=0,this.right=0,this.table=e,this.start={row:0,col:0},this.end={row:0,col:0},this.rangeManager.rowHeader&&(this.left=1,this.right=1,this.start.col=1,this.end.col=1),this.initElement(),setTimeout(()=>{this.initBounds(i,s)})}initElement(){this.element=document.createElement("div"),this.element.classList.add("tabulator-range")}initBounds(e,t){this._updateMinMax(),e&&this.setBounds(e,t||e)}setStart(e,t){(this.start.row!==e||this.start.col!==t)&&(this.start.row=e,this.start.col=t,this.initializing.start=!0,this._updateMinMax())}setEnd(e,t){(this.end.row!==e||this.end.col!==t)&&(this.end.row=e,this.end.col=t,this.initializing.end=!0,this._updateMinMax())}setBounds(e,t,i){e&&this.setStartBound(e),this.setEndBound(t||e),this.rangeManager.layoutElement(i)}setStartBound(e){var t,i;e.type==="column"?this.rangeManager.columnSelection&&this.setStart(0,e.getPosition()-1):(t=e.row.position-1,i=e.column.getPosition()-1,e.column===this.rangeManager.rowHeader?this.setStart(t,1):this.setStart(t,i))}setEndBound(e){var t=this._getTableRows().length,i,s,n;e.type==="column"?this.rangeManager.columnSelection&&(this.rangeManager.selecting==="column"?this.setEnd(t-1,e.getPosition()-1):this.rangeManager.selecting==="cell"&&this.setEnd(0,e.getPosition()-1)):(i=e.row.position-1,s=e.column.getPosition()-1,n=e.column===this.rangeManager.rowHeader,this.rangeManager.selecting==="row"?this.setEnd(i,this._getTableColumns().length-1):this.rangeManager.selecting!=="row"&&n?this.setEnd(i,0):this.rangeManager.selecting==="column"?this.setEnd(t-1,s):this.setEnd(i,s))}_updateMinMax(){this.top=Math.min(this.start.row,this.end.row),this.bottom=Math.max(this.start.row,this.end.row),this.left=Math.min(this.start.col,this.end.col),this.right=Math.max(this.start.col,this.end.col),this.initialized?this.dispatchExternal("rangeChanged",this.getComponent()):this.initializing.start&&this.initializing.end&&(this.initialized=!0,this.dispatchExternal("rangeAdded",this.getComponent()))}_getTableColumns(){return this.table.columnManager.getVisibleColumnsByIndex()}_getTableRows(){return this.table.rowManager.getDisplayRows().filter(e=>e.type==="row")}layout(){var e=this.table.rowManager.renderer.vDomTop,t=this.table.rowManager.renderer.vDomBottom,i=this.table.columnManager.renderer.leftCol,s=this.table.columnManager.renderer.rightCol,n,r,o,a,h,d,u,c,f,g;this.table.options.renderHorizontal==="virtual"&&this.rangeManager.rowHeader&&(s+=1),e==null&&(e=0),t==null&&(t=1/0),i==null&&(i=0),s==null&&(s=1/0),this.overlaps(i,e,s,t)&&(n=Math.max(this.top,e),r=Math.min(this.bottom,t),o=Math.max(this.left,i),a=Math.min(this.right,s),h=this.rangeManager.getCell(n,o),d=this.rangeManager.getCell(r,a),u=h.getElement(),c=d.getElement(),f=h.row.getElement(),g=d.row.getElement(),this.element.classList.add("tabulator-range-active"),this.table.rtl?(this.element.style.right=f.offsetWidth-u.offsetLeft-u.offsetWidth+"px",this.element.style.width=u.offsetLeft+u.offsetWidth-c.offsetLeft+"px"):(this.element.style.left=f.offsetLeft+u.offsetLeft+"px",this.element.style.width=c.offsetLeft+c.offsetWidth-u.offsetLeft+"px"),this.element.style.top=f.offsetTop+"px",this.element.style.height=g.offsetTop+g.offsetHeight-f.offsetTop+"px")}atTopLeft(e){return e.row.position-1===this.top&&e.column.getPosition()-1===this.left}atBottomRight(e){return e.row.position-1===this.bottom&&e.column.getPosition()-1===this.right}occupies(e){return this.occupiesRow(e.row)&&this.occupiesColumn(e.column)}occupiesRow(e){return this.top<=e.position-1&&e.position-1<=this.bottom}occupiesColumn(e){return this.left<=e.getPosition()-1&&e.getPosition()-1<=this.right}overlaps(e,t,i,s){return!(this.left>i||e>this.right||this.top>s||t>this.bottom)}getData(){var e=[],t=this.getRows(),i=this.getColumns();return t.forEach(s=>{var n=s.getData(),r={};i.forEach(o=>{r[o.field]=n[o.field]}),e.push(r)}),e}getCells(e,t){var i=[],s=this.getRows(),n=this.getColumns();return e?i=s.map(r=>{var o=[];return r.getCells().forEach(a=>{n.includes(a.column)&&o.push(t?a.getComponent():a)}),o}):s.forEach(r=>{r.getCells().forEach(o=>{n.includes(o.column)&&i.push(t?o.getComponent():o)})}),i}getStructuredCells(){return this.getCells(!0,!0)}getRows(){return this._getTableRows().slice(this.top,this.bottom+1)}getColumns(){return this._getTableColumns().slice(this.left,this.right+1)}clearValues(){var e=this.getCells(),t=this.table.options.selectableRangeClearCellsValue;this.table.blockRedraw(),e.forEach(i=>{i.setValue(t)}),this.table.restoreRedraw()}getBounds(e){var t=this.getCells(!1,e),i={start:null,end:null};return t.length?(i.start=t[0],i.end=t[t.length-1]):console.warn("No bounds defined on range"),i}getComponent(){return this.component||(this.component=new Zi(this)),this.component}destroy(e){this.destroyed=!0,this.element.remove(),e&&this.rangeManager.rangeRemoved(this),this.initialized&&this.dispatchExternal("rangeRemoved",this.getComponent())}destroyedGuard(e){return this.destroyed&&console.warn("You cannot call the "+e+" function on a destroyed range"),!this.destroyed}}var ts={rangeJumpUp:["ctrl + 38","meta + 38"],rangeJumpDown:["ctrl + 40","meta + 40"],rangeJumpLeft:["ctrl + 37","meta + 37"],rangeJumpRight:["ctrl + 39","meta + 39"],rangeExpandUp:"shift + 38",rangeExpandDown:"shift + 40",rangeExpandLeft:"shift + 37",rangeExpandRight:"shift + 39",rangeExpandJumpUp:["ctrl + shift + 38","meta + shift + 38"],rangeExpandJumpDown:["ctrl + shift + 40","meta + shift + 40"],rangeExpandJumpLeft:["ctrl + shift + 37","meta + shift + 37"],rangeExpandJumpRight:["ctrl + shift + 39","meta + shift + 39"]},is={rangeJumpLeft:function(l){this.dispatch("keybinding-nav-range",l,"left",!0,!1)},rangeJumpRight:function(l){this.dispatch("keybinding-nav-range",l,"right",!0,!1)},rangeJumpUp:function(l){this.dispatch("keybinding-nav-range",l,"up",!0,!1)},rangeJumpDown:function(l){this.dispatch("keybinding-nav-range",l,"down",!0,!1)},rangeExpandLeft:function(l){this.dispatch("keybinding-nav-range",l,"left",!1,!0)},rangeExpandRight:function(l){this.dispatch("keybinding-nav-range",l,"right",!1,!0)},rangeExpandUp:function(l){this.dispatch("keybinding-nav-range",l,"up",!1,!0)},rangeExpandDown:function(l){this.dispatch("keybinding-nav-range",l,"down",!1,!0)},rangeExpandJumpLeft:function(l){this.dispatch("keybinding-nav-range",l,"left",!0,!0)},rangeExpandJumpRight:function(l){this.dispatch("keybinding-nav-range",l,"right",!0,!0)},rangeExpandJumpUp:function(l){this.dispatch("keybinding-nav-range",l,"up",!0,!0)},rangeExpandJumpDown:function(l){this.dispatch("keybinding-nav-range",l,"down",!0,!0)}},ss={range:function(l){var e=[],t=this.table.modules.selectRange.activeRange,i=!1,s,n,r,o,a;return a=l.length,t&&(s=t.getBounds(),n=s.start,s.start===s.end&&(i=!0),n&&(e=this.table.rowManager.activeRows.slice(),r=e.indexOf(n.row),i?o=l.length:o=e.indexOf(s.end.row)-r+1,r>-1&&(this.table.blockRedraw(),e=e.slice(r,r+o),e.forEach((h,d)=>{h.updateData(l[d%a])}),this.table.restoreRedraw()))),e}},ns={range:function(l){var e=[],t=[],i=this.table.modules.selectRange.activeRange,s=!1,n,r,o,a,h;return i&&(n=i.getBounds(),r=n.start,n.start===n.end&&(s=!0),r&&(l=l.split(` +`),l.forEach(function(d){e.push(d.split(" "))}),e.length&&(a=this.table.columnManager.getVisibleColumnsByIndex(),h=a.indexOf(r.column),h>-1)))?(s?o=e[0].length:o=a.indexOf(n.end.column)-h+1,a=a.slice(h,h+o),e.forEach(d=>{var u={},c=d.length;a.forEach(function(f,g){u[f.field]=d[g%c]}),t.push(u)}),t):!1}},rs={range:function(){var l=this.modules.selectRange.selectedColumns();return this.columnManager.rowHeader&&l.unshift(this.columnManager.rowHeader),l}},os={range:function(){return this.modules.selectRange.selectedRows()}},as={keybindings:{bindings:ts,actions:is},clipboard:{pasteActions:ss,pasteParsers:ns},export:{columnLookups:rs,rowLookups:os}};class re extends w{constructor(e){super(e),this.selecting="cell",this.mousedown=!1,this.ranges=[],this.overlay=null,this.rowHeader=null,this.layoutChangeTimeout=null,this.columnSelection=!1,this.rowSelection=!1,this.maxRanges=0,this.activeRange=!1,this.blockKeydown=!1,this.keyDownEvent=this._handleKeyDown.bind(this),this.mouseUpEvent=this._handleMouseUp.bind(this),this.registerTableOption("selectableRange",!1),this.registerTableOption("selectableRangeColumns",!1),this.registerTableOption("selectableRangeRows",!1),this.registerTableOption("selectableRangeClearCells",!1),this.registerTableOption("selectableRangeClearCellsValue",void 0),this.registerTableFunction("getRangesData",this.getRangesData.bind(this)),this.registerTableFunction("getRanges",this.getRanges.bind(this)),this.registerTableFunction("addRange",this.addRangeFromComponent.bind(this)),this.registerComponentFunction("cell","getRanges",this.cellGetRanges.bind(this)),this.registerComponentFunction("row","getRanges",this.rowGetRanges.bind(this)),this.registerComponentFunction("column","getRanges",this.colGetRanges.bind(this))}initialize(){this.options("selectableRange")&&(this.options("selectableRows")?console.warn("SelectRange functionality cannot be used in conjunction with row selection"):(this.maxRanges=this.options("selectableRange"),this.initializeTable(),this.initializeWatchers()),this.options("columns").findIndex(e=>e.frozen)>0&&console.warn("Having frozen column in arbitrary position with selectRange option may result in unpredictable behavior."),this.options("columns").filter(e=>e.frozen)>1&&console.warn("Having multiple frozen columns with selectRange option may result in unpredictable behavior."))}initializeTable(){this.overlay=document.createElement("div"),this.overlay.classList.add("tabulator-range-overlay"),this.rangeContainer=document.createElement("div"),this.rangeContainer.classList.add("tabulator-range-container"),this.activeRangeCellElement=document.createElement("div"),this.activeRangeCellElement.classList.add("tabulator-range-cell-active"),this.overlay.appendChild(this.rangeContainer),this.overlay.appendChild(this.activeRangeCellElement),this.table.rowManager.element.addEventListener("keydown",this.keyDownEvent),this.resetRanges(),this.table.rowManager.element.appendChild(this.overlay),this.table.columnManager.element.setAttribute("tabindex",0),this.table.element.classList.add("tabulator-ranges")}initializeWatchers(){this.columnSelection=this.options("selectableRangeColumns"),this.rowSelection=this.options("selectableRangeRows"),this.subscribe("column-init",this.initializeColumn.bind(this)),this.subscribe("column-mousedown",this.handleColumnMouseDown.bind(this)),this.subscribe("column-mousemove",this.handleColumnMouseMove.bind(this)),this.subscribe("column-resized",this.handleColumnResized.bind(this)),this.subscribe("column-moving",this.handleColumnMoving.bind(this)),this.subscribe("column-moved",this.handleColumnMoved.bind(this)),this.subscribe("column-width",this.layoutChange.bind(this)),this.subscribe("column-height",this.layoutChange.bind(this)),this.subscribe("column-resized",this.layoutChange.bind(this)),this.subscribe("columns-loaded",this.updateHeaderColumn.bind(this)),this.subscribe("cell-height",this.layoutChange.bind(this)),this.subscribe("cell-rendered",this.renderCell.bind(this)),this.subscribe("cell-mousedown",this.handleCellMouseDown.bind(this)),this.subscribe("cell-mousemove",this.handleCellMouseMove.bind(this)),this.subscribe("cell-click",this.handleCellClick.bind(this)),this.subscribe("cell-editing",this.handleEditingCell.bind(this)),this.subscribe("page-changed",this.redraw.bind(this)),this.subscribe("scroll-vertical",this.layoutChange.bind(this)),this.subscribe("scroll-horizontal",this.layoutChange.bind(this)),this.subscribe("data-destroy",this.tableDestroyed.bind(this)),this.subscribe("data-processed",this.resetRanges.bind(this)),this.subscribe("table-layout",this.layoutElement.bind(this)),this.subscribe("table-redraw",this.redraw.bind(this)),this.subscribe("table-destroy",this.tableDestroyed.bind(this)),this.subscribe("edit-editor-clear",this.finishEditingCell.bind(this)),this.subscribe("edit-blur",this.restoreFocus.bind(this)),this.subscribe("keybinding-nav-prev",this.keyNavigate.bind(this,"left")),this.subscribe("keybinding-nav-next",this.keyNavigate.bind(this,"right")),this.subscribe("keybinding-nav-left",this.keyNavigate.bind(this,"left")),this.subscribe("keybinding-nav-right",this.keyNavigate.bind(this,"right")),this.subscribe("keybinding-nav-up",this.keyNavigate.bind(this,"up")),this.subscribe("keybinding-nav-down",this.keyNavigate.bind(this,"down")),this.subscribe("keybinding-nav-range",this.keyNavigateRange.bind(this))}initializeColumn(e){this.columnSelection&&e.definition.headerSort&&this.options("headerSortClickElement")!=="icon"&&console.warn("Using column headerSort with selectableRangeColumns option may result in unpredictable behavior. Consider using headerSortClickElement: 'icon'."),e.modules.edit}updateHeaderColumn(){var e;this.rowSelection&&(this.rowHeader=this.table.columnManager.getVisibleColumnsByIndex()[0],this.rowHeader&&(this.rowHeader.definition.cssClass=this.rowHeader.definition.cssClass+" tabulator-range-row-header",this.rowHeader.definition.headerSort&&console.warn("Using column headerSort with selectableRangeRows option may result in unpredictable behavior"),this.rowHeader.definition.editor&&console.warn("Using column editor with selectableRangeRows option may result in unpredictable behavior"))),this.table.modules.frozenColumns&&this.table.modules.frozenColumns.active&&(e=this.table.modules.frozenColumns.getFrozenColumns(),(e.length>1||e.length===1&&e[0]!==this.rowHeader)&&console.warn("Using frozen columns that are not the range header in combination with the selectRange option may result in unpredictable behavior"))}getRanges(){return this.ranges.map(e=>e.getComponent())}getRangesData(){return this.ranges.map(e=>e.getData())}addRangeFromComponent(e,t){return e=e?e._cell:null,t=t?t._cell:null,this.addRange(e,t)}cellGetRanges(e){var t=[];return e.column===this.rowHeader?t=this.ranges.filter(i=>i.occupiesRow(e.row)):t=this.ranges.filter(i=>i.occupies(e)),t.map(i=>i.getComponent())}rowGetRanges(e){var t=this.ranges.filter(i=>i.occupiesRow(e));return t.map(i=>i.getComponent())}colGetRanges(e){var t=this.ranges.filter(i=>i.occupiesColumn(e));return t.map(i=>i.getComponent())}_handleMouseUp(e){this.mousedown=!1,document.removeEventListener("mouseup",this.mouseUpEvent)}_handleKeyDown(e){if(!this.blockKeydown&&(!this.table.modules.edit||this.table.modules.edit&&!this.table.modules.edit.currentCell)){if(e.key==="Enter"){if(this.table.modules.edit&&this.table.modules.edit.currentCell)return;this.table.modules.edit.editCell(this.getActiveCell()),e.preventDefault()}(e.key==="Backspace"||e.key==="Delete")&&this.options("selectableRangeClearCells")&&this.activeRange&&this.activeRange.clearValues()}}initializeFocus(e){var t;this.restoreFocus();try{document.selection?(t=document.body.createTextRange(),t.moveToElementText(e.getElement()),t.select()):window.getSelection&&(t=document.createRange(),t.selectNode(e.getElement()),window.getSelection().removeAllRanges(),window.getSelection().addRange(t))}catch{}}restoreFocus(e){return this.table.rowManager.element.focus(),!0}handleColumnResized(e){var t;this.selecting!=="column"&&this.selecting!=="all"||(t=this.ranges.some(i=>i.occupiesColumn(e)),t&&this.ranges.forEach(i=>{var s=i.getColumns(!0);s.forEach(n=>{n!==e&&n.setWidth(e.width)})}))}handleColumnMoving(e,t){this.resetRanges().setBounds(t),this.overlay.style.visibility="hidden"}handleColumnMoved(e,t,i){this.activeRange.setBounds(e),this.layoutElement()}handleColumnMouseDown(e,t){e.button===2&&(this.selecting==="column"||this.selecting==="all")&&this.activeRange.occupiesColumn(t)||this.table.options.movableColumns&&this.selecting==="column"&&this.activeRange.occupiesColumn(t)||(this.mousedown=!0,document.addEventListener("mouseup",this.mouseUpEvent),this.newSelection(e,t))}handleColumnMouseMove(e,t){t===this.rowHeader||!this.mousedown||this.selecting==="all"||this.activeRange.setBounds(!1,t,!0)}renderCell(e){var t=e.getElement(),i=this.ranges.findIndex(s=>s.occupies(e));t.classList.toggle("tabulator-range-selected",i!==-1),t.classList.toggle("tabulator-range-only-cell-selected",this.ranges.length===1&&this.ranges[0].atTopLeft(e)&&this.ranges[0].atBottomRight(e)),t.dataset.range=i}handleCellMouseDown(e,t){e.button===2&&(this.activeRange.occupies(t)||(this.selecting==="row"||this.selecting==="all")&&this.activeRange.occupiesRow(t.row))||(this.mousedown=!0,document.addEventListener("mouseup",this.mouseUpEvent),this.newSelection(e,t))}handleCellMouseMove(e,t){!this.mousedown||this.selecting==="all"||this.activeRange.setBounds(!1,t,!0)}handleCellClick(e,t){this.initializeFocus(t)}handleEditingCell(e){this.activeRange&&this.activeRange.setBounds(e)}finishEditingCell(){this.blockKeydown=!0,this.table.rowManager.element.focus(),setTimeout(()=>{this.blockKeydown=!1},10)}keyNavigate(e,t){this.navigate(!1,!1,e),t.preventDefault()}keyNavigateRange(e,t,i,s){this.navigate(i,s,t),e.preventDefault()}navigate(e,t,i){var s=!1,n,r,o,a,h,d;if(this.table.modules.edit&&this.table.modules.edit.currentCell)return!1;if(this.ranges.length>1&&(this.ranges=this.ranges.filter(u=>u===this.activeRange?(u.setEnd(u.start.row,u.start.col),!0):(u.destroy(),!1))),n=this.activeRange,r=t?n.end:n.start,o=r.row,a=r.col,e)switch(i){case"left":a=this.findJumpCellLeft(n.start.row,r.col);break;case"right":a=this.findJumpCellRight(n.start.row,r.col);break;case"up":o=this.findJumpCellUp(r.row,n.start.col);break;case"down":o=this.findJumpCellDown(r.row,n.start.col);break}else{if(t&&(this.selecting==="row"&&(i==="left"||i==="right")||this.selecting==="column"&&(i==="up"||i==="down")))return;switch(i){case"left":a=Math.max(a-1,0);break;case"right":a=Math.min(a+1,this.getTableColumns().length-1);break;case"up":o=Math.max(o-1,0);break;case"down":o=Math.min(o+1,this.getTableRows().length-1);break}}if(this.rowHeader&&a===0&&(a=1),s=a!==r.col||o!==r.row,t||n.setStart(o,a),n.setEnd(o,a),t||(this.selecting="cell"),s)return h=this.getRowByRangePos(n.end.row),d=this.getColumnByRangePos(n.end.col),(i==="left"||i==="right")&&d.getElement().parentNode===null?d.getComponent().scrollTo(void 0,!1):(i==="up"||i==="down")&&h.getElement().parentNode===null?h.getComponent().scrollTo(void 0,!1):this.autoScroll(n,h.getElement(),d.getElement()),this.layoutElement(),!0}rangeRemoved(e){this.ranges=this.ranges.filter(t=>t!==e),this.activeRange===e&&(this.ranges.length?this.activeRange=this.ranges[this.ranges.length-1]:this.addRange()),this.layoutElement()}findJumpRow(e,t,i,s,n){return i&&(t=t.reverse()),this.findJumpItem(s,n,t,function(r){return r.getData()[e.getField()]})}findJumpCol(e,t,i,s,n){return i&&(t=t.reverse()),this.findJumpItem(s,n,t,function(r){return e.getData()[r.getField()]})}findJumpItem(e,t,i,s){var n;for(let r of i){let o=s(r);if(e){if(n=r,o)break}else if(t){if(n=r,o)break}else if(o)n=r;else break}return n}findJumpCellLeft(e,t){var i=this.getRowByRangePos(e),s=this.getTableColumns(),n=this.isEmpty(i.getData()[s[t].getField()]),r=s[t-1]?this.isEmpty(i.getData()[s[t-1].getField()]):!1,o=this.rowHeader?s.slice(1,t):s.slice(0,t),a=this.findJumpCol(i,o,!0,n,r);return a?a.getPosition()-1:t}findJumpCellRight(e,t){var i=this.getRowByRangePos(e),s=this.getTableColumns(),n=this.isEmpty(i.getData()[s[t].getField()]),r=s[t+1]?this.isEmpty(i.getData()[s[t+1].getField()]):!1,o=this.findJumpCol(i,s.slice(t+1,s.length),!1,n,r);return o?o.getPosition()-1:t}findJumpCellUp(e,t){var i=this.getColumnByRangePos(t),s=this.getTableRows(),n=this.isEmpty(s[e].getData()[i.getField()]),r=s[e-1]?this.isEmpty(s[e-1].getData()[i.getField()]):!1,o=this.findJumpRow(i,s.slice(0,e),!0,n,r);return o?o.position-1:e}findJumpCellDown(e,t){var i=this.getColumnByRangePos(t),s=this.getTableRows(),n=this.isEmpty(s[e].getData()[i.getField()]),r=s[e+1]?this.isEmpty(s[e+1].getData()[i.getField()]):!1,o=this.findJumpRow(i,s.slice(e+1,s.length),!1,n,r);return o?o.position-1:e}newSelection(e,t){var i;if(t.type==="column"){if(!this.columnSelection)return;if(t===this.rowHeader){i=this.resetRanges(),this.selecting="all";var s,n=this.getCell(-1,-1);this.rowHeader?s=this.getCell(0,1):s=this.getCell(0,0),i.setBounds(s,n);return}else this.selecting="column"}else t.column===this.rowHeader?this.selecting="row":this.selecting="cell";e.shiftKey?this.activeRange.setBounds(!1,t):e.ctrlKey?this.addRange().setBounds(t):this.resetRanges().setBounds(t)}autoScroll(e,t,i){var s=this.table.rowManager.element,n,r,o,a,h;typeof t>"u"&&(t=this.getRowByRangePos(e.end.row).getElement()),typeof i>"u"&&(i=this.getColumnByRangePos(e.end.col).getElement()),this.rowHeader&&(n=this.rowHeader.getElement()),r={left:i.offsetLeft,right:i.offsetLeft+i.offsetWidth,top:t.offsetTop,bottom:t.offsetTop+t.offsetHeight},o={left:s.scrollLeft,right:Math.ceil(s.scrollLeft+s.clientWidth),top:s.scrollTop,bottom:s.scrollTop+s.offsetHeight-this.table.rowManager.scrollbarWidth},n&&(o.left+=n.offsetWidth),a=o.lefto.right&&(s.scrollLeft=r.right-s.clientWidth)),h||(r.topo.bottom&&(s.scrollTop=r.bottom-s.clientHeight))}layoutChange(){this.overlay.style.visibility="hidden",clearTimeout(this.layoutChangeTimeout),this.layoutChangeTimeout=setTimeout(this.layoutRanges.bind(this),200)}redraw(e){e&&(this.selecting="cell",this.resetRanges(),this.layoutElement())}layoutElement(e){var t;e?t=this.table.rowManager.getVisibleRows(!0):t=this.table.rowManager.getRows(),t.forEach(i=>{i.type==="row"&&(this.layoutRow(i),i.cells.forEach(s=>this.renderCell(s)))}),this.getTableColumns().forEach(i=>{this.layoutColumn(i)}),this.layoutRanges()}layoutRow(e){var t=e.getElement(),i=!1,s=this.ranges.some(n=>n.occupiesRow(e));this.selecting==="row"?i=s:this.selecting==="all"&&(i=!0),t.classList.toggle("tabulator-range-selected",i),t.classList.toggle("tabulator-range-highlight",s)}layoutColumn(e){var t=e.getElement(),i=!1,s=this.ranges.some(n=>n.occupiesColumn(e));this.selecting==="column"?i=s:this.selecting==="all"&&(i=!0),t.classList.toggle("tabulator-range-selected",i),t.classList.toggle("tabulator-range-highlight",s)}layoutRanges(){var e,t,i;this.table.initialized&&(e=this.getActiveCell(),e&&(t=e.getElement(),i=e.row.getElement(),this.table.rtl?this.activeRangeCellElement.style.right=i.offsetWidth-t.offsetLeft-t.offsetWidth+"px":this.activeRangeCellElement.style.left=i.offsetLeft+t.offsetLeft+"px",this.activeRangeCellElement.style.top=i.offsetTop+"px",this.activeRangeCellElement.style.width=t.offsetWidth+"px",this.activeRangeCellElement.style.height=i.offsetHeight+"px",this.ranges.forEach(s=>s.layout()),this.overlay.style.visibility="visible"))}getCell(e,t){var i;return t<0&&(t=this.getTableColumns().length+t,t<0)?null:(e<0&&(e=this.getTableRows().length+e),i=this.table.rowManager.getRowFromPosition(e+1),i?i.getCells(!1,!0).filter(s=>s.column.visible)[t]:null)}getActiveCell(){return this.getCell(this.activeRange.start.row,this.activeRange.start.col)}getRowByRangePos(e){return this.getTableRows()[e]}getColumnByRangePos(e){return this.getTableColumns()[e]}getTableRows(){return this.table.rowManager.getDisplayRows().filter(e=>e.type==="row")}getTableColumns(){return this.table.columnManager.getVisibleColumnsByIndex()}addRange(e,t){var i;return this.maxRanges!==!0&&this.ranges.length>=this.maxRanges&&this.ranges.shift().destroy(),i=new es(this.table,this,e,t),this.activeRange=i,this.ranges.push(i),this.rangeContainer.appendChild(i.element),i}resetRanges(){var e,t,i;return this.ranges.forEach(s=>s.destroy()),this.ranges=[],e=this.addRange(),this.table.rowManager.activeRows.length&&(i=this.table.rowManager.activeRows[0].cells.filter(s=>s.column.visible),t=i[this.rowHeader?1:0],t&&(e.setBounds(t),this.initializeFocus(t))),e}tableDestroyed(){document.removeEventListener("mouseup",this.mouseUpEvent),this.table.rowManager.element.removeEventListener("keydown",this.keyDownEvent)}selectedRows(e){return e?this.activeRange.getRows().map(t=>t.getComponent()):this.activeRange.getRows()}selectedColumns(e){return e?this.activeRange.getColumns().map(t=>t.getComponent()):this.activeRange.getColumns()}isEmpty(e){return e==null||e===""}}b(re,"moduleName","selectRange"),b(re,"moduleInitOrder",1),b(re,"moduleExtensions",as);function ls(l,e,t,i,s,n,r){var o=r.alignEmptyValues,a=r.decimalSeparator,h=r.thousandSeparator,d=0;if(l=String(l),e=String(e),h&&(l=l.split(h).join(""),e=e.split(h).join("")),a&&(l=l.split(a).join("."),e=e.split(a).join(".")),l=parseFloat(l),e=parseFloat(e),isNaN(l))d=isNaN(e)?0:-1;else if(isNaN(e))d=1;else return l-e;return(o==="top"&&n==="desc"||o==="bottom"&&n==="asc")&&(d*=-1),d}function hs(l,e,t,i,s,n,r){var o=r.alignEmptyValues,a=0,h;if(!l)a=e?-1:0;else if(!e)a=1;else{switch(typeof r.locale){case"boolean":r.locale&&(h=this.langLocale());break;case"string":h=r.locale;break}return String(l).toLowerCase().localeCompare(String(e).toLowerCase(),h)}return(o==="top"&&n==="desc"||o==="bottom"&&n==="asc")&&(a*=-1),a}function Ve(l,e,t,i,s,n,r){var o=window.DateTime||luxon.DateTime,a=r.format||"dd/MM/yyyy HH:mm:ss",h=r.alignEmptyValues,d=0;if(typeof o<"u"){if(o.isDateTime(l)||(a==="iso"?l=o.fromISO(String(l)):l=o.fromFormat(String(l),a)),o.isDateTime(e)||(a==="iso"?e=o.fromISO(String(e)):e=o.fromFormat(String(e),a)),!l.isValid)d=e.isValid?-1:0;else if(!e.isValid)d=1;else return l-e;return(h==="top"&&n==="desc"||h==="bottom"&&n==="asc")&&(d*=-1),d}else console.error("Sort Error - 'datetime' sorter is dependant on luxon.js")}function ds(l,e,t,i,s,n,r){return r.format||(r.format="dd/MM/yyyy"),Ve.call(this,l,e,t,i,s,n,r)}function us(l,e,t,i,s,n,r){return r.format||(r.format="HH:mm"),Ve.call(this,l,e,t,i,s,n,r)}function cs(l,e,t,i,s,n,r){var o=l===!0||l==="true"||l==="True"||l===1?1:0,a=e===!0||e==="true"||e==="True"||e===1?1:0;return o-a}function fs(l,e,t,i,s,n,r){var o=r.type||"length",a=r.alignEmptyValues,h=0;function d(u){var c;switch(o){case"length":c=u.length;break;case"sum":c=u.reduce(function(f,g){return f+g});break;case"max":c=Math.max.apply(null,u);break;case"min":c=Math.min.apply(null,u);break;case"avg":c=u.reduce(function(f,g){return f+g})/u.length;break}return c}if(!Array.isArray(l))h=Array.isArray(e)?-1:0;else if(!Array.isArray(e))h=1;else return d(e)-d(l);return(a==="top"&&n==="desc"||a==="bottom"&&n==="asc")&&(h*=-1),h}function ps(l,e,t,i,s,n,r){var o=typeof l>"u"?0:1,a=typeof e>"u"?0:1;return o-a}function ms(l,e,t,i,s,n,r){var o,a,h,d,u=0,c,f=/(\d+)|(\D+)/g,g=/\d/,p=r.alignEmptyValues,v=0;if(!l&&l!==0)v=!e&&e!==0?0:-1;else if(!e&&e!==0)v=1;else{if(isFinite(l)&&isFinite(e))return l-e;if(o=String(l).toLowerCase(),a=String(e).toLowerCase(),o===a)return 0;if(!(g.test(o)&&g.test(a)))return o>a?1:-1;for(o=o.match(f),a=a.match(f),c=o.length>a.length?a.length:o.length;ud?1:-1;return o.length>a.length}return(p==="top"&&n==="desc"||p==="bottom"&&n==="asc")&&(v*=-1),v}var gs={number:ls,string:hs,date:ds,time:us,datetime:Ve,boolean:cs,array:fs,exists:ps,alphanum:ms};const j=class j extends w{constructor(e){super(e),this.sortList=[],this.changed=!1,this.registerTableOption("sortMode","local"),this.registerTableOption("initialSort",!1),this.registerTableOption("columnHeaderSortMulti",!0),this.registerTableOption("sortOrderReverse",!1),this.registerTableOption("headerSortElement","
"),this.registerTableOption("headerSortClickElement","header"),this.registerColumnOption("sorter"),this.registerColumnOption("sorterParams"),this.registerColumnOption("headerSort",!0),this.registerColumnOption("headerSortStartingDir"),this.registerColumnOption("headerSortTristate")}initialize(){this.subscribe("column-layout",this.initializeColumn.bind(this)),this.subscribe("table-built",this.tableBuilt.bind(this)),this.registerDataHandler(this.sort.bind(this),20),this.registerTableFunction("setSort",this.userSetSort.bind(this)),this.registerTableFunction("getSorters",this.getSort.bind(this)),this.registerTableFunction("clearSort",this.clearSort.bind(this)),this.table.options.sortMode==="remote"&&this.subscribe("data-params",this.remoteSortParams.bind(this))}tableBuilt(){this.table.options.initialSort&&this.setSort(this.table.options.initialSort)}remoteSortParams(e,t,i,s){var n=this.getSort();return n.forEach(r=>{delete r.column}),s.sort=n,s}userSetSort(e,t){this.setSort(e,t),this.refreshSort()}clearSort(){this.clear(),this.refreshSort()}initializeColumn(e){var t=!1,i,s;switch(typeof e.definition.sorter){case"string":j.sorters[e.definition.sorter]?t=j.sorters[e.definition.sorter]:console.warn("Sort Error - No such sorter found: ",e.definition.sorter);break;case"function":t=e.definition.sorter;break}if(e.modules.sort={sorter:t,dir:"none",params:e.definition.sorterParams||{},startingDir:e.definition.headerSortStartingDir||"asc",tristate:e.definition.headerSortTristate},e.definition.headerSort!==!1){switch(i=e.getElement(),i.classList.add("tabulator-sortable"),s=document.createElement("div"),s.classList.add("tabulator-col-sorter"),this.table.options.headerSortClickElement){case"icon":s.classList.add("tabulator-col-sorter-element");break;case"header":i.classList.add("tabulator-col-sorter-element");break;default:i.classList.add("tabulator-col-sorter-element");break}switch(this.table.options.headerSortElement){case"function":break;case"object":s.appendChild(this.table.options.headerSortElement);break;default:s.innerHTML=this.table.options.headerSortElement}e.titleHolderElement.appendChild(s),e.modules.sort.element=s,this.setColumnHeaderSortIcon(e,"none"),this.table.options.headerSortClickElement==="icon"&&s.addEventListener("mousedown",n=>{n.stopPropagation()}),(this.table.options.headerSortClickElement==="icon"?s:i).addEventListener("click",n=>{var r="",o=[],a=!1;if(e.modules.sort){if(e.modules.sort.tristate)e.modules.sort.dir=="none"?r=e.modules.sort.startingDir:e.modules.sort.dir==e.modules.sort.startingDir?r=e.modules.sort.dir=="asc"?"desc":"asc":r="none";else switch(e.modules.sort.dir){case"asc":r="desc";break;case"desc":r="asc";break;default:r=e.modules.sort.startingDir}this.table.options.columnHeaderSortMulti&&(n.shiftKey||n.ctrlKey)?(o=this.getSort(),a=o.findIndex(h=>h.field===e.getField()),a>-1?(o[a].dir=r,a=o.splice(a,1)[0],r!="none"&&o.push(a)):r!="none"&&o.push({column:e,dir:r}),this.setSort(o)):r=="none"?this.clear():this.setSort(e,r),this.refreshSort()}})}}refreshSort(){this.table.options.sortMode==="remote"?this.reloadData(null,!1,!1):this.refreshData(!0)}hasChanged(){var e=this.changed;return this.changed=!1,e}getSort(){var e=this,t=[];return e.sortList.forEach(function(i){i.column&&t.push({column:i.column.getComponent(),field:i.column.getField(),dir:i.dir})}),t}setSort(e,t){var i=this,s=[];Array.isArray(e)||(e=[{column:e,dir:t}]),e.forEach(function(n){var r;r=i.table.columnManager.findColumn(n.column),r?(n.column=r,s.push(n),i.changed=!0):console.warn("Sort Warning - Sort field does not exist and is being ignored: ",n.column)}),i.sortList=s,this.dispatch("sort-changed")}clear(){this.setSort([])}findSorter(e){var t=this.table.rowManager.activeRows[0],i="string",s,n;if(t&&(t=t.getData(),s=e.getField(),s))switch(n=e.getFieldValue(t),typeof n){case"undefined":i="string";break;case"boolean":i="boolean";break;default:!isNaN(n)&&n!==""?i="number":n.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)&&(i="alphanum");break}return j.sorters[i]}sort(e,t){var i=this,s=this.table.options.sortOrderReverse?i.sortList.slice().reverse():i.sortList,n=[],r=[];return this.subscribedExternal("dataSorting")&&this.dispatchExternal("dataSorting",i.getSort()),t||i.clearColumnHeaders(),this.table.options.sortMode!=="remote"?(s.forEach(function(o,a){var h;o.column&&(h=o.column.modules.sort,h&&(h.sorter||(h.sorter=i.findSorter(o.column)),o.params=typeof h.params=="function"?h.params(o.column.getComponent(),o.dir):h.params,n.push(o)),t||i.setColumnHeader(o.column,o.dir))}),n.length&&i._sortItems(e,n)):t||s.forEach(function(o,a){i.setColumnHeader(o.column,o.dir)}),this.subscribedExternal("dataSorted")&&(e.forEach(o=>{r.push(o.getComponent())}),this.dispatchExternal("dataSorted",i.getSort(),r)),e}clearColumnHeaders(){this.table.columnManager.getRealColumns().forEach(e=>{e.modules.sort&&(e.modules.sort.dir="none",e.getElement().setAttribute("aria-sort","none"),this.setColumnHeaderSortIcon(e,"none"))})}setColumnHeader(e,t){e.modules.sort.dir=t,e.getElement().setAttribute("aria-sort",t==="asc"?"ascending":"descending"),this.setColumnHeaderSortIcon(e,t)}setColumnHeaderSortIcon(e,t){var i=e.modules.sort.element,s;if(e.definition.headerSort&&typeof this.table.options.headerSortElement=="function"){for(;i.firstChild;)i.removeChild(i.firstChild);s=this.table.options.headerSortElement.call(this.table,e.getComponent(),t),typeof s=="object"?i.appendChild(s):i.innerHTML=s}}_sortItems(e,t){var i=t.length-1;e.sort((s,n)=>{for(var r,o=i;o>=0;o--){let a=t[o];if(r=this._sortRow(s,n,a.column,a.dir,a.params),r!==0)break}return r})}_sortRow(e,t,i,s,n){var r,o,a=s=="asc"?e:t,h=s=="asc"?t:e;return e=i.getFieldValue(a.getData()),t=i.getFieldValue(h.getData()),e=typeof e<"u"?e:"",t=typeof t<"u"?t:"",r=a.getComponent(),o=h.getComponent(),i.modules.sort.sorter.call(this,e,t,r,o,i.getComponent(),s,n)}};b(j,"moduleName","sort"),b(j,"sorters",gs);let He=j;class bs{constructor(e,t){this.columnCount=e,this.rowCount=t,this.columnString=[],this.columns=[],this.rows=[]}genColumns(e){var t=Math.max(this.columnCount,Math.max(...e.map(i=>i.length)));this.columnString=[],this.columns=[];for(let i=1;i<=t;i++)this.incrementChar(this.columnString.length-1),this.columns.push(this.columnString.join(""));return this.columns}genRows(e){var t=Math.max(this.rowCount,e.length);this.rows=[];for(let i=1;i<=t;i++)this.rows.push(i);return this.rows}incrementChar(e){let t=this.columnString[e];t?t!=="Z"?this.columnString[e]=String.fromCharCode(this.columnString[e].charCodeAt(0)+1):(this.columnString[e]="A",e?this.incrementChar(e-1):this.columnString.push("A")):this.columnString.push("A")}setRowCount(e){this.rowCount=e}setColumnCount(e){this.columnCount=e}}class ft{constructor(e){return this._sheet=e,new Proxy(this,{get:function(t,i,s){return typeof t[i]<"u"?t[i]:t._sheet.table.componentFunctionBinder.handle("sheet",t._sheet,i)}})}getTitle(){return this._sheet.title}getKey(){return this._sheet.key}getDefinition(){return this._sheet.getDefinition()}getData(){return this._sheet.getData()}setData(e){return this._sheet.setData(e)}clear(){return this._sheet.clear()}remove(){return this._sheet.remove()}active(){return this._sheet.active()}setTitle(e){return this._sheet.setTitle(e)}setRows(e){return this._sheet.setRows(e)}setColumns(e){return this._sheet.setColumns(e)}}class Xe extends M{constructor(e,t){super(e.table),this.spreadsheetManager=e,this.definition=t,this.title=this.definition.title||"",this.key=this.definition.key||this.definition.title,this.rowCount=this.definition.rows,this.columnCount=this.definition.columns,this.data=this.definition.data||[],this.element=null,this.isActive=!1,this.grid=new bs(this.columnCount,this.rowCount),this.defaultColumnDefinition={width:100,headerHozAlign:"center",headerSort:!1},this.columnDefinition=Object.assign(this.defaultColumnDefinition,this.options("spreadsheetColumnDefinition")),this.columnDefs=[],this.rowDefs=[],this.columnFields=[],this.columns=[],this.rows=[],this.scrollTop=null,this.scrollLeft=null,this.initialize(),this.dispatchExternal("sheetAdded",this.getComponent())}initialize(){this.initializeElement(),this.initializeColumns(),this.initializeRows()}reinitialize(){this.initializeColumns(),this.initializeRows()}initializeElement(){this.element=document.createElement("div"),this.element.classList.add("tabulator-spreadsheet-tab"),this.element.innerText=this.title,this.element.addEventListener("click",()=>{this.spreadsheetManager.loadSheet(this)})}initializeColumns(){this.grid.setColumnCount(this.columnCount),this.columnFields=this.grid.genColumns(this.data),this.columnDefs=[],this.columnFields.forEach(e=>{var t=Object.assign({},this.columnDefinition);t.field=e,t.title=e,this.columnDefs.push(t)})}initializeRows(){var e;this.grid.setRowCount(this.rowCount),e=this.grid.genRows(this.data),this.rowDefs=[],e.forEach((t,i)=>{var s={_id:t},n=this.data[i];n&&n.forEach((r,o)=>{var a=this.columnFields[o];a&&(s[a]=r)}),this.rowDefs.push(s)})}unload(){this.isActive=!1,this.scrollTop=this.table.rowManager.scrollTop,this.scrollLeft=this.table.rowManager.scrollLeft,this.data=this.getData(!0),this.element.classList.remove("tabulator-spreadsheet-tab-active")}load(){var e=!this.isActive;this.isActive=!0,this.table.blockRedraw(),this.table.setData([]),this.table.setColumns(this.columnDefs),this.table.setData(this.rowDefs),this.table.restoreRedraw(),e&&this.scrollTop!==null&&(this.table.rowManager.element.scrollLeft=this.scrollLeft,this.table.rowManager.element.scrollTop=this.scrollTop),this.element.classList.add("tabulator-spreadsheet-tab-active"),this.dispatchExternal("sheetLoaded",this.getComponent())}getComponent(){return new ft(this)}getDefinition(){return{title:this.title,key:this.key,rows:this.rowCount,columns:this.columnCount,data:this.getData()}}getData(e){var t=[],i,s,n;return this.rowDefs.forEach(r=>{var o=[];this.columnFields.forEach(a=>{o.push(r[a])}),t.push(o)}),!e&&!this.options("spreadsheetOutputFull")&&(i=t.map(r=>r.findLastIndex(o=>typeof o<"u")+1),s=Math.max(...i),n=i.findLastIndex(r=>r>0)+1,t=t.slice(0,n),t=t.map(r=>r.slice(0,s))),t}setData(e){this.data=e,this.reinitialize(),this.dispatchExternal("sheetUpdated",this.getComponent()),this.isActive&&this.load()}clear(){this.setData([])}setTitle(e){this.title=e,this.element.innerText=e,this.dispatchExternal("sheetUpdated",this.getComponent())}setRows(e){this.rowCount=e,this.initializeRows(),this.dispatchExternal("sheetUpdated",this.getComponent()),this.isActive&&this.load()}setColumns(e){this.columnCount=e,this.reinitialize(),this.dispatchExternal("sheetUpdated",this.getComponent()),this.isActive&&this.load()}remove(){this.spreadsheetManager.removeSheet(this)}destroy(){this.element.parentNode&&this.element.parentNode.removeChild(this.element),this.dispatchExternal("sheetRemoved",this.getComponent())}active(){this.spreadsheetManager.loadSheet(this)}}class pt extends w{constructor(e){super(e),this.sheets=[],this.element=null,this.registerTableOption("spreadsheet",!1),this.registerTableOption("spreadsheetRows",50),this.registerTableOption("spreadsheetColumns",50),this.registerTableOption("spreadsheetColumnDefinition",{}),this.registerTableOption("spreadsheetOutputFull",!1),this.registerTableOption("spreadsheetData",!1),this.registerTableOption("spreadsheetSheets",!1),this.registerTableOption("spreadsheetSheetTabs",!1),this.registerTableOption("spreadsheetSheetTabsElement",!1),this.registerTableFunction("setSheets",this.setSheets.bind(this)),this.registerTableFunction("addSheet",this.addSheet.bind(this)),this.registerTableFunction("getSheets",this.getSheets.bind(this)),this.registerTableFunction("getSheetDefinitions",this.getSheetDefinitions.bind(this)),this.registerTableFunction("setSheetData",this.setSheetData.bind(this)),this.registerTableFunction("getSheet",this.getSheet.bind(this)),this.registerTableFunction("getSheetData",this.getSheetData.bind(this)),this.registerTableFunction("clearSheet",this.clearSheet.bind(this)),this.registerTableFunction("removeSheet",this.removeSheetFunc.bind(this)),this.registerTableFunction("activeSheet",this.activeSheetFunc.bind(this))}initialize(){this.options("spreadsheet")&&(this.subscribe("table-initialized",this.tableInitialized.bind(this)),this.subscribe("data-loaded",this.loadRemoteData.bind(this)),this.table.options.index="_id",this.options("spreadsheetData")&&this.options("spreadsheetSheets")&&(console.warn("You cannot use spreadsheetData and spreadsheetSheets at the same time, ignoring spreadsheetData"),this.table.options.spreadsheetData=!1),this.compatibilityCheck(),this.options("spreadsheetSheetTabs")&&this.initializeTabset())}compatibilityCheck(){this.options("data")&&console.warn("Do not use the data option when working with spreadsheets, use either spreadsheetData or spreadsheetSheets to pass data into the table"),this.options("pagination")&&console.warn("The spreadsheet module is not compatible with the pagination module"),this.options("groupBy")&&console.warn("The spreadsheet module is not compatible with the row grouping module"),this.options("responsiveCollapse")&&console.warn("The spreadsheet module is not compatible with the responsive collapse module")}initializeTabset(){this.element=document.createElement("div"),this.element.classList.add("tabulator-spreadsheet-tabs");var e=this.options("spreadsheetSheetTabsElement");e&&!(e instanceof HTMLElement)&&(e=document.querySelector(e),e||console.warn("Unable to find element matching spreadsheetSheetTabsElement selector:",this.options("spreadsheetSheetTabsElement"))),e?e.appendChild(this.element):this.footerAppend(this.element)}tableInitialized(){this.sheets.length?this.loadSheet(this.sheets[0]):this.options("spreadsheetSheets")?this.loadSheets(this.options("spreadsheetSheets")):this.options("spreadsheetData")&&this.loadData(this.options("spreadsheetData"))}loadRemoteData(e,t,i){return console.log("data",e,t,i),Array.isArray(e)?(this.table.dataLoader.clearAlert(),this.dispatchExternal("dataLoaded",e),!e.length||Array.isArray(e[0])?this.loadData(e):this.loadSheets(e)):console.error(`Spreadsheet Loading Error - Unable to process remote data due to invalid data type +Expecting: array +Received: `,typeof e,` +Data: `,e),!1}loadData(e){var t={data:e};this.loadSheet(this.newSheet(t))}destroySheets(){this.sheets.forEach(e=>{e.destroy()}),this.sheets=[],this.activeSheet=null}loadSheets(e){Array.isArray(e)||(e=[]),this.destroySheets(),e.forEach(t=>{this.newSheet(t)}),this.loadSheet(this.sheets[0])}loadSheet(e){this.activeSheet!==e&&(this.activeSheet&&this.activeSheet.unload(),this.activeSheet=e,e.load())}newSheet(e={}){var t;return e.rows||(e.rows=this.options("spreadsheetRows")),e.columns||(e.columns=this.options("spreadsheetColumns")),t=new Xe(this,e),this.sheets.push(t),this.element&&this.element.appendChild(t.element),t}removeSheet(e){var t=this.sheets.indexOf(e),i;this.sheets.length>1?t>-1&&(this.sheets.splice(t,1),e.destroy(),this.activeSheet===e&&(i=this.sheets[t-1]||this.sheets[0],i?this.loadSheet(i):this.activeSheet=null)):console.warn("Unable to remove sheet, at least one sheet must be active")}lookupSheet(e){return e?e instanceof Xe?e:e instanceof ft?e._sheet:this.sheets.find(t=>t.key===e)||!1:this.activeSheet}setSheets(e){return this.loadSheets(e),this.getSheets()}addSheet(e){return this.newSheet(e).getComponent()}getSheetDefinitions(){return this.sheets.map(e=>e.getDefinition())}getSheets(){return this.sheets.map(e=>e.getComponent())}getSheet(e){var t=this.lookupSheet(e);return t?t.getComponent():!1}setSheetData(e,t){e&&!t&&(t=e,e=!1);var i=this.lookupSheet(e);return i?i.setData(t):!1}getSheetData(e){var t=this.lookupSheet(e);return t?t.getData():!1}clearSheet(e){var t=this.lookupSheet(e);return t?t.clear():!1}removeSheetFunc(e){var t=this.lookupSheet(e);t&&this.removeSheet(t)}activeSheetFunc(e){var t=this.lookupSheet(e);return t?this.loadSheet(t):!1}}b(pt,"moduleName","spreadsheet");class mt extends w{constructor(e){super(e),this.tooltipSubscriber=null,this.headerSubscriber=null,this.timeout=null,this.popupInstance=null,this.registerTableOption("tooltipDelay",300),this.registerColumnOption("tooltip"),this.registerColumnOption("headerTooltip")}initialize(){this.deprecatedOptionsCheck(),this.subscribe("column-init",this.initializeColumn.bind(this))}deprecatedOptionsCheck(){}initializeColumn(e){e.definition.headerTooltip&&!this.headerSubscriber&&(this.headerSubscriber=!0,this.subscribe("column-mousemove",this.mousemoveCheck.bind(this,"headerTooltip")),this.subscribe("column-mouseout",this.mouseoutCheck.bind(this,"headerTooltip"))),e.definition.tooltip&&!this.tooltipSubscriber&&(this.tooltipSubscriber=!0,this.subscribe("cell-mousemove",this.mousemoveCheck.bind(this,"tooltip")),this.subscribe("cell-mouseout",this.mouseoutCheck.bind(this,"tooltip")))}mousemoveCheck(e,t,i){var s=e==="tooltip"?i.column.definition.tooltip:i.definition.headerTooltip;s&&(this.clearPopup(),this.timeout=setTimeout(this.loadTooltip.bind(this,t,i,s),this.table.options.tooltipDelay))}mouseoutCheck(e,t,i){this.popupInstance||this.clearPopup()}clearPopup(e,t,i){clearTimeout(this.timeout),this.timeout=null,this.popupInstance&&this.popupInstance.hide()}loadTooltip(e,t,i){var s,n,r;function o(a){n=a}typeof i=="function"&&(i=i(e,t.getComponent(),o)),i instanceof HTMLElement?s=i:(s=document.createElement("div"),i===!0&&(t instanceof ne?i=t.value:t.definition.field?this.langBind("columns|"+t.definition.field,a=>{s.innerHTML=i=a||t.definition.title}):i=t.definition.title),s.innerHTML=i),(i||i===0||i===!1)&&(s.classList.add("tabulator-tooltip"),s.addEventListener("mousemove",a=>a.preventDefault()),this.popupInstance=this.popup(s),typeof n=="function"&&this.popupInstance.renderCallback(n),r=this.popupInstance.containerEventCoords(e),this.popupInstance.show(r.x+15,r.y+15).hideOnBlur(()=>{this.dispatchExternal("TooltipClosed",t.getComponent()),this.popupInstance=null}),this.dispatchExternal("TooltipOpened",t.getComponent()))}}b(mt,"moduleName","tooltip");var vs={integer:function(l,e,t){return e===""||e===null||typeof e>"u"?!0:(e=Number(e),!isNaN(e)&&isFinite(e)&&Math.floor(e)===e)},float:function(l,e,t){return e===""||e===null||typeof e>"u"?!0:(e=Number(e),!isNaN(e)&&isFinite(e)&&e%1!==0)},numeric:function(l,e,t){return e===""||e===null||typeof e>"u"?!0:!isNaN(e)},string:function(l,e,t){return e===""||e===null||typeof e>"u"?!0:isNaN(e)},alphanumeric:function(l,e,t){if(e===""||e===null||typeof e>"u")return!0;var i=new RegExp(/^[a-z0-9]+$/i);return i.test(e)},max:function(l,e,t){return e===""||e===null||typeof e>"u"?!0:parseFloat(e)<=t},min:function(l,e,t){return e===""||e===null||typeof e>"u"?!0:parseFloat(e)>=t},starts:function(l,e,t){return e===""||e===null||typeof e>"u"?!0:String(e).toLowerCase().startsWith(String(t).toLowerCase())},ends:function(l,e,t){return e===""||e===null||typeof e>"u"?!0:String(e).toLowerCase().endsWith(String(t).toLowerCase())},minLength:function(l,e,t){return e===""||e===null||typeof e>"u"?!0:String(e).length>=t},maxLength:function(l,e,t){return e===""||e===null||typeof e>"u"?!0:String(e).length<=t},in:function(l,e,t){return e===""||e===null||typeof e>"u"?!0:(typeof t=="string"&&(t=t.split("|")),t.indexOf(e)>-1)},regex:function(l,e,t){if(e===""||e===null||typeof e>"u")return!0;var i=new RegExp(t);return i.test(e)},unique:function(l,e,t){if(e===""||e===null||typeof e>"u")return!0;var i=!0,s=l.getData(),n=l.getColumn()._getSelf();return this.table.rowManager.rows.forEach(function(r){var o=r.getData();o!==s&&e==n.getFieldValue(o)&&(i=!1)}),i},required:function(l,e,t){return e!==""&&e!==null&&typeof e<"u"}};const ie=class ie extends w{constructor(e){super(e),this.invalidCells=[],this.registerTableOption("validationMode","blocking"),this.registerColumnOption("validator"),this.registerTableFunction("getInvalidCells",this.getInvalidCells.bind(this)),this.registerTableFunction("clearCellValidation",this.userClearCellValidation.bind(this)),this.registerTableFunction("validate",this.userValidate.bind(this)),this.registerComponentFunction("cell","isValid",this.cellIsValid.bind(this)),this.registerComponentFunction("cell","clearValidation",this.clearValidation.bind(this)),this.registerComponentFunction("cell","validate",this.cellValidate.bind(this)),this.registerComponentFunction("column","validate",this.columnValidate.bind(this)),this.registerComponentFunction("row","validate",this.rowValidate.bind(this))}initialize(){this.subscribe("cell-delete",this.clearValidation.bind(this)),this.subscribe("column-layout",this.initializeColumnCheck.bind(this)),this.subscribe("edit-success",this.editValidate.bind(this)),this.subscribe("edit-editor-clear",this.editorClear.bind(this)),this.subscribe("edit-edited-clear",this.editedClear.bind(this))}editValidate(e,t,i){var s=this.table.options.validationMode!=="manual"?this.validate(e.column.modules.validate,e,t):!0;return s!==!0&&setTimeout(()=>{e.getElement().classList.add("tabulator-validation-fail"),this.dispatchExternal("validationFailed",e.getComponent(),t,s)}),s}editorClear(e,t){t&&e.column.modules.validate&&this.cellValidate(e),e.getElement().classList.remove("tabulator-validation-fail")}editedClear(e){e.modules.validate&&(e.modules.validate.invalid=!1)}cellIsValid(e){return e.modules.validate&&e.modules.validate.invalid||!0}cellValidate(e){return this.validate(e.column.modules.validate,e,e.getValue())}columnValidate(e){var t=[];return e.cells.forEach(i=>{this.cellValidate(i)!==!0&&t.push(i.getComponent())}),t.length?t:!0}rowValidate(e){var t=[];return e.cells.forEach(i=>{this.cellValidate(i)!==!0&&t.push(i.getComponent())}),t.length?t:!0}userClearCellValidation(e){e||(e=this.getInvalidCells()),Array.isArray(e)||(e=[e]),e.forEach(t=>{this.clearValidation(t._getSelf())})}userValidate(e){var t=[];return this.table.rowManager.rows.forEach(i=>{i=i.getComponent();var s=i.validate();s!==!0&&(t=t.concat(s))}),t.length?t:!0}initializeColumnCheck(e){typeof e.definition.validator<"u"&&this.initializeColumn(e)}initializeColumn(e){var t=this,i=[],s;e.definition.validator&&(Array.isArray(e.definition.validator)?e.definition.validator.forEach(n=>{s=t._extractValidator(n),s&&i.push(s)}):(s=this._extractValidator(e.definition.validator),s&&i.push(s)),e.modules.validate=i.length?i:!1)}_extractValidator(e){var t,i,s;switch(typeof e){case"string":return s=e.indexOf(":"),s>-1?(t=e.substring(0,s),i=e.substring(s+1)):t=e,this._buildValidator(t,i);case"function":return this._buildValidator(e);case"object":return this._buildValidator(e.type,e.parameters)}}_buildValidator(e,t){var i=typeof e=="function"?e:ie.validators[e];return i?{type:typeof e=="function"?"function":e,func:i,params:t}:(console.warn("Validator Setup Error - No matching validator found:",e),!1)}validate(e,t,i){var s=this,n=[],r=this.invalidCells.indexOf(t);return e&&e.forEach(o=>{o.func.call(s,t.getComponent(),i,o.params)||n.push({type:o.type,parameters:o.params})}),t.modules.validate||(t.modules.validate={}),n.length?(t.modules.validate.invalid=n,this.table.options.validationMode!=="manual"&&t.getElement().classList.add("tabulator-validation-fail"),r==-1&&this.invalidCells.push(t)):(t.modules.validate.invalid=!1,t.getElement().classList.remove("tabulator-validation-fail"),r>-1&&this.invalidCells.splice(r,1)),n.length?n:!0}getInvalidCells(){var e=[];return this.invalidCells.forEach(t=>{e.push(t.getComponent())}),e}clearValidation(e){var t;e.modules.validate&&e.modules.validate.invalid&&(e.getElement().classList.remove("tabulator-validation-fail"),e.modules.validate.invalid=!1,t=this.invalidCells.indexOf(e),t>-1&&this.invalidCells.splice(t,1))}};b(ie,"moduleName","validate"),b(ie,"validators",vs);let Fe=ie;var ue=Object.freeze({__proto__:null,AccessorModule:ce,AjaxModule:me,ClipboardModule:ge,ColumnCalcsModule:be,DataTreeModule:Ze,DownloadModule:ve,EditModule:we,ExportModule:Ce,FilterModule:Ee,FormatModule:ye,FrozenColumnsModule:et,FrozenRowsModule:tt,GroupRowsModule:it,HistoryModule:Re,HtmlTableImportModule:st,ImportModule:xe,InteractionModule:nt,KeybindingsModule:Te,MenuModule:rt,MoveColumnsModule:ot,MoveRowsModule:ke,MutatorModule:Me,PageModule:Le,PersistenceModule:Se,PopupModule:at,PrintModule:lt,ReactiveDataModule:ht,ResizeColumnsModule:dt,ResizeRowsModule:ut,ResizeTableModule:ct,ResponsiveLayoutModule:De,SelectRangeModule:re,SelectRowModule:ze,SortModule:He,SpreadsheetModule:pt,TooltipModule:mt,ValidateModule:Fe}),ws={debugEventsExternal:!1,debugEventsInternal:!1,debugInvalidOptions:!0,debugInvalidComponentFuncs:!0,debugInitialization:!0,debugDeprecation:!0,height:!1,minHeight:!1,maxHeight:!1,columnHeaderVertAlign:"top",popupContainer:!1,columns:[],columnDefaults:{},rowHeader:!1,data:!1,autoColumns:!1,autoColumnsDefinitions:!1,nestedFieldSeparator:".",footerElement:!1,index:"id",textDirection:"auto",addRowPos:"bottom",headerVisible:!0,renderVertical:"virtual",renderHorizontal:"basic",renderVerticalBuffer:0,scrollToRowPosition:"top",scrollToRowIfVisible:!0,scrollToColumnPosition:"left",scrollToColumnIfVisible:!0,rowFormatter:!1,rowFormatterPrint:null,rowFormatterClipboard:null,rowFormatterHtmlOutput:null,rowHeight:null,placeholder:!1,dataLoader:!0,dataLoaderLoading:!1,dataLoaderError:!1,dataLoaderErrorTimeout:3e3,dataSendParams:{},dataReceiveParams:{}};class gt{constructor(e,t,i={}){this.table=e,this.msgType=t,this.registeredDefaults=Object.assign({},i)}register(e,t){this.registeredDefaults[e]=t}generate(e,t={}){var i=Object.assign({},this.registeredDefaults),s=this.table.options.debugInvalidOptions||t.debugInvalidOptions===!0;Object.assign(i,e);for(let n in t)i.hasOwnProperty(n)||(s&&console.warn("Invalid "+this.msgType+" option:",n),i[n]=t.key);for(let n in i)n in t?i[n]=t[n]:Array.isArray(i[n])?i[n]=Object.assign([],i[n]):typeof i[n]=="object"&&i[n]!==null?i[n]=Object.assign({},i[n]):typeof i[n]>"u"&&delete i[n];return i}}class le extends M{constructor(e){super(e),this.elementVertical=e.rowManager.element,this.elementHorizontal=e.columnManager.element,this.tableElement=e.rowManager.tableElement,this.verticalFillMode="fit"}initialize(){}clearRows(){}clearColumns(){}reinitializeColumnWidths(e){}renderRows(){}renderColumns(){}rerenderRows(e){e&&e()}rerenderColumns(e,t){}renderRowCells(e){}rerenderRowCells(e,t){}scrollColumns(e,t){}scrollRows(e,t){}resize(){}scrollToRow(e){}scrollToRowNearestTop(e){}visibleRows(e){return[]}rows(){return this.table.rowManager.getDisplayRows()}styleRow(e,t){var i=e.getElement();t%2?(i.classList.add("tabulator-row-even"),i.classList.remove("tabulator-row-odd")):(i.classList.add("tabulator-row-odd"),i.classList.remove("tabulator-row-even"))}clear(){this.clearRows(),this.clearColumns()}render(){this.renderRows(),this.renderColumns()}rerender(e){this.rerenderRows(),this.rerenderColumns()}scrollToRowPosition(e,t,i){var s=this.rows().indexOf(e),n=e.getElement(),r=0;return new Promise((o,a)=>{if(s>-1){if(typeof i>"u"&&(i=this.table.options.scrollToRowIfVisible),!i&&x.elVisible(n)&&(r=x.elOffset(n).top-x.elOffset(this.elementVertical).top,r>0&&r"u"&&(t=this.table.options.scrollToRowPosition),t==="nearest"&&(t=this.scrollToRowNearestTop(e)?"top":"bottom"),this.scrollToRow(e),t){case"middle":case"center":this.elementVertical.scrollHeight-this.elementVertical.scrollTop==this.elementVertical.clientHeight?this.elementVertical.scrollTop=this.elementVertical.scrollTop+(n.offsetTop-this.elementVertical.scrollTop)-(this.elementVertical.scrollHeight-n.offsetTop)/2:this.elementVertical.scrollTop=this.elementVertical.scrollTop-this.elementVertical.clientHeight/2;break;case"bottom":this.elementVertical.scrollHeight-this.elementVertical.scrollTop==this.elementVertical.clientHeight?this.elementVertical.scrollTop=this.elementVertical.scrollTop-(this.elementVertical.scrollHeight-n.offsetTop)+n.offsetHeight:this.elementVertical.scrollTop=this.elementVertical.scrollTop-this.elementVertical.clientHeight+n.offsetHeight;break;case"top":this.elementVertical.scrollTop=n.offsetTop;break}o()}else console.warn("Scroll Error - Row not visible"),a("Scroll Error - Row not visible")})}}class Cs extends le{constructor(e){super(e)}renderRowCells(e,t){const i=document.createDocumentFragment();e.cells.forEach(s=>{i.appendChild(s.getElement())}),e.element.appendChild(i),t||e.cells.forEach(s=>{s.cellRendered()})}reinitializeColumnWidths(e){e.forEach(function(t){t.reinitializeWidth()})}}class Es extends le{constructor(e){super(e),this.leftCol=0,this.rightCol=0,this.scrollLeft=0,this.vDomScrollPosLeft=0,this.vDomScrollPosRight=0,this.vDomPadLeft=0,this.vDomPadRight=0,this.fitDataColAvg=0,this.windowBuffer=200,this.visibleRows=null,this.initialized=!1,this.isFitData=!1,this.columns=[]}initialize(){this.compatibilityCheck(),this.layoutCheck(),this.vertScrollListen()}compatibilityCheck(){this.options("layout")=="fitDataTable"&&console.warn("Horizontal Virtual DOM is not compatible with fitDataTable layout mode"),this.options("responsiveLayout")&&console.warn("Horizontal Virtual DOM is not compatible with responsive columns"),this.options("rtl")&&console.warn("Horizontal Virtual DOM is not currently compatible with RTL text direction")}layoutCheck(){this.isFitData=this.options("layout").startsWith("fitData")}vertScrollListen(){this.subscribe("scroll-vertical",this.clearVisRowCache.bind(this)),this.subscribe("data-refreshed",this.clearVisRowCache.bind(this))}clearVisRowCache(){this.visibleRows=null}renderColumns(e,t){this.dataChange()}scrollColumns(e,t){this.scrollLeft!=e&&(this.scrollLeft=e,this.scroll(e-(this.vDomScrollPosLeft+this.windowBuffer)))}calcWindowBuffer(){var e=this.elementVertical.clientWidth;this.table.columnManager.columnsByIndex.forEach(t=>{if(t.visible){var i=t.getWidth();i>e&&(e=i)}}),this.windowBuffer=e*2}rerenderColumns(e,t){var i={cols:this.columns,leftCol:this.leftCol,rightCol:this.rightCol},s=0;e&&!this.initialized||(this.clear(),this.calcWindowBuffer(),this.scrollLeft=this.elementVertical.scrollLeft,this.vDomScrollPosLeft=this.scrollLeft-this.windowBuffer,this.vDomScrollPosRight=this.scrollLeft+this.elementVertical.clientWidth+this.windowBuffer,this.table.columnManager.columnsByIndex.forEach(n=>{var r={},o;n.visible&&(n.modules.frozen||(o=n.getWidth(),r.leftPos=s,r.rightPos=s+o,r.width=o,this.isFitData&&(r.fitDataCheck=n.modules.vdomHoz?n.modules.vdomHoz.fitDataCheck:!0),s+o>this.vDomScrollPosLeft&&s{t.appendChild(i.getElement())}),e.element.appendChild(t),e.cells.forEach(i=>{i.cellRendered()})}}rerenderRowCells(e,t){this.reinitializeRow(e,t)}reinitializeColumnWidths(e){for(let t=this.leftCol;t<=this.rightCol;t++)this.columns[t].reinitializeWidth()}deinitialize(){this.initialized=!1}clear(){this.columns=[],this.leftCol=-1,this.rightCol=0,this.vDomScrollPosLeft=0,this.vDomScrollPosRight=0,this.vDomPadLeft=0,this.vDomPadRight=0}dataChange(){var e=!1,t,i;if(this.isFitData){if(this.table.columnManager.columnsByIndex.forEach(s=>{!s.definition.width&&s.visible&&(e=!0)}),e&&this.table.rowManager.getDisplayRows().length&&(this.vDomScrollPosRight=this.scrollLeft+this.elementVertical.clientWidth+this.windowBuffer,t=this.chain("rows-sample",[1],[],()=>this.table.rowManager.getDisplayRows())[0],t)){i=t.getElement(),t.generateCells(),this.tableElement.appendChild(i);for(let s=0;s{i!==this.columns[s]&&(t=!1)}),!t)}reinitializeRows(){var e=this.getVisibleRows(),t=this.table.rowManager.getRows().filter(i=>!e.includes(i));e.forEach(i=>{this.reinitializeRow(i,!0)}),t.forEach(i=>{i.deinitialize()})}getVisibleRows(){return this.visibleRows||(this.visibleRows=this.table.rowManager.getVisibleRows()),this.visibleRows}scroll(e){this.vDomScrollPosLeft+=e,this.vDomScrollPosRight+=e,Math.abs(e)>this.windowBuffer/2?this.rerenderColumns():e>0?(this.addColRight(),this.removeColLeft()):(this.addColLeft(),this.removeColRight())}colPositionAdjust(e,t,i){for(let s=e;s{if(s.type!=="group"){var n=s.getCell(i);s.getElement().insertBefore(n.getElement(),s.getCell(this.columns[this.rightCol]).getElement().nextSibling),n.cellRendered()}}),this.fitDataColActualWidthCheck(i),this.rightCol++,this.getVisibleRows().forEach(s=>{s.type!=="group"&&(s.modules.vdomHoz.rightCol=this.rightCol)}),this.rightCol>=this.columns.length-1?this.vDomPadRight=0:this.vDomPadRight-=i.getWidth()):t=!1}e&&(this.tableElement.style.paddingRight=this.vDomPadRight+"px")}addColLeft(){for(var e=!1,t=!0;t;){let i=this.columns[this.leftCol-1];if(i)if(i.modules.vdomHoz.rightPos>=this.vDomScrollPosLeft){e=!0,this.getVisibleRows().forEach(n=>{if(n.type!=="group"){var r=n.getCell(i);n.getElement().insertBefore(r.getElement(),n.getCell(this.columns[this.leftCol]).getElement()),r.cellRendered()}}),this.leftCol--,this.getVisibleRows().forEach(n=>{n.type!=="group"&&(n.modules.vdomHoz.leftCol=this.leftCol)}),this.leftCol<=0?this.vDomPadLeft=0:this.vDomPadLeft-=i.getWidth();let s=this.fitDataColActualWidthCheck(i);s&&(this.scrollLeft=this.elementVertical.scrollLeft=this.elementVertical.scrollLeft+s,this.vDomPadRight-=s)}else t=!1;else t=!1}e&&(this.tableElement.style.paddingLeft=this.vDomPadLeft+"px")}removeColRight(){for(var e=!1,t=!0;t;){let i=this.columns[this.rightCol];i&&i.modules.vdomHoz.leftPos>this.vDomScrollPosRight?(e=!0,this.getVisibleRows().forEach(s=>{if(s.type!=="group"){var n=s.getCell(i);try{s.getElement().removeChild(n.getElement())}catch(r){console.warn("Could not removeColRight",r.message)}}}),this.vDomPadRight+=i.getWidth(),this.rightCol--,this.getVisibleRows().forEach(s=>{s.type!=="group"&&(s.modules.vdomHoz.rightCol=this.rightCol)})):t=!1}e&&(this.tableElement.style.paddingRight=this.vDomPadRight+"px")}removeColLeft(){for(var e=!1,t=!0;t;){let i=this.columns[this.leftCol];i&&i.modules.vdomHoz.rightPos{if(s.type!=="group"){var n=s.getCell(i);try{s.getElement().removeChild(n.getElement())}catch(r){console.warn("Could not removeColLeft",r.message)}}}),this.vDomPadLeft+=i.getWidth(),this.leftCol++,this.getVisibleRows().forEach(s=>{s.type!=="group"&&(s.modules.vdomHoz.leftCol=this.leftCol)})):t=!1}e&&(this.tableElement.style.paddingLeft=this.vDomPadLeft+"px")}fitDataColActualWidthCheck(e){var t,i;return e.modules.vdomHoz.fitDataCheck&&(e.reinitializeWidth(),t=e.getWidth(),i=t-e.modules.vdomHoz.width,i&&(e.modules.vdomHoz.rightPos+=i,e.modules.vdomHoz.width=t,this.colPositionAdjust(this.columns.indexOf(e)+1,this.columns.length,i)),e.modules.vdomHoz.fitDataCheck=!1),i}initializeRow(e){if(e.type!=="group"){e.modules.vdomHoz={leftCol:this.leftCol,rightCol:this.rightCol},this.table.modules.frozenColumns&&this.table.modules.frozenColumns.leftColumns.forEach(t=>{this.appendCell(e,t)});for(let t=this.leftCol;t<=this.rightCol;t++)this.appendCell(e,this.columns[t]);this.table.modules.frozenColumns&&this.table.modules.frozenColumns.rightColumns.forEach(t=>{this.appendCell(e,t)})}}appendCell(e,t){if(t&&t.visible){let i=e.getCell(t);e.getElement().appendChild(i.getElement()),i.cellRendered()}}reinitializeRow(e,t){if(e.type!=="group"&&(t||!e.modules.vdomHoz||e.modules.vdomHoz.leftCol!==this.leftCol||e.modules.vdomHoz.rightCol!==this.rightCol)){for(var i=e.getElement();i.firstChild;)i.removeChild(i.firstChild);this.initializeRow(e)}}}class ys extends M{constructor(e){super(e),this.blockHozScrollEvent=!1,this.headersElement=null,this.contentsElement=null,this.rowHeader=null,this.element=null,this.columns=[],this.columnsByIndex=[],this.columnsByField={},this.scrollLeft=0,this.optionsList=new gt(this.table,"column definition",Qe),this.redrawBlock=!1,this.redrawBlockUpdate=null,this.renderer=null}initialize(){this.initializeRenderer(),this.headersElement=this.createHeadersElement(),this.contentsElement=this.createHeaderContentsElement(),this.element=this.createHeaderElement(),this.contentsElement.insertBefore(this.headersElement,this.contentsElement.firstChild),this.element.insertBefore(this.contentsElement,this.element.firstChild),this.initializeScrollWheelWatcher(),this.subscribe("scroll-horizontal",this.scrollHorizontal.bind(this)),this.subscribe("scrollbar-vertical",this.padVerticalScrollbar.bind(this))}padVerticalScrollbar(e){this.table.rtl?this.headersElement.style.marginLeft=e+"px":this.headersElement.style.marginRight=e+"px"}initializeRenderer(){var e,t={virtual:Es,basic:Cs};typeof this.table.options.renderHorizontal=="string"?e=t[this.table.options.renderHorizontal]:e=this.table.options.renderHorizontal,e?(this.renderer=new e(this.table,this.element,this.tableElement),this.renderer.initialize()):console.error("Unable to find matching renderer:",this.table.options.renderHorizontal)}createHeadersElement(){var e=document.createElement("div");return e.classList.add("tabulator-headers"),e.setAttribute("role","row"),e}createHeaderContentsElement(){var e=document.createElement("div");return e.classList.add("tabulator-header-contents"),e.setAttribute("role","rowgroup"),e}createHeaderElement(){var e=document.createElement("div");return e.classList.add("tabulator-header"),e.setAttribute("role","rowgroup"),this.table.options.headerVisible||e.classList.add("tabulator-header-hidden"),e}getElement(){return this.element}getContentsElement(){return this.contentsElement}getHeadersElement(){return this.headersElement}scrollHorizontal(e){this.contentsElement.scrollLeft=e,this.scrollLeft=e,this.renderer.scrollColumns(e)}initializeScrollWheelWatcher(){this.contentsElement.addEventListener("wheel",e=>{var t;e.deltaX&&(t=this.contentsElement.scrollLeft+e.deltaX,this.table.rowManager.scrollHorizontal(t),this.table.columnManager.scrollHorizontal(t))})}generateColumnsFromRowData(e){var t=[],i={},s=this.table.options.autoColumns==="full"?e:[e[0]],n=this.table.options.autoColumnsDefinitions;if(e&&e.length){if(s.forEach(r=>{Object.keys(r).forEach((o,a)=>{let h=r[o],d;i[o]?i[o]!==!0&&typeof h<"u"&&(i[o].sorter=this.calculateSorterFromValue(h),i[o]=!0):(d={field:o,title:o,sorter:this.calculateSorterFromValue(h)},t.splice(a,0,d),i[o]=typeof h>"u"?d:!0)})}),n)switch(typeof n){case"function":this.table.options.columns=n.call(this.table,t);break;case"object":Array.isArray(n)?t.forEach(r=>{var o=n.find(a=>a.field===r.field);o&&Object.assign(r,o)}):t.forEach(r=>{n[r.field]&&Object.assign(r,n[r.field])}),this.table.options.columns=t;break}else this.table.options.columns=t;this.setColumns(this.table.options.columns)}}calculateSorterFromValue(e){var t;switch(typeof e){case"undefined":t="string";break;case"boolean":t="boolean";break;case"number":t="number";break;case"object":Array.isArray(e)?t="array":t="string";break;default:!isNaN(e)&&e!==""?t="number":e.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)?t="alphanum":t="string";break}return t}setColumns(e,t){for(;this.headersElement.firstChild;)this.headersElement.removeChild(this.headersElement.firstChild);this.columns=[],this.columnsByIndex=[],this.columnsByField={},this.dispatch("columns-loading"),this.dispatchExternal("columnsLoading"),this.table.options.rowHeader&&(this.rowHeader=new U(this.table.options.rowHeader===!0?{}:this.table.options.rowHeader,this,!0),this.columns.push(this.rowHeader),this.headersElement.appendChild(this.rowHeader.getElement()),this.rowHeader.columnRendered()),e.forEach((i,s)=>{this._addColumn(i)}),this._reIndexColumns(),this.dispatch("columns-loaded"),this.subscribedExternal("columnsLoaded")&&this.dispatchExternal("columnsLoaded",this.getComponents()),this.rerenderColumns(!1,!0),this.redraw(!0)}_addColumn(e,t,i){var s=new U(e,this),n=s.getElement(),r=i&&this.findColumnIndex(i);if(t&&this.rowHeader&&(!i||i===this.rowHeader)&&(t=!1,i=this.rowHeader,r=0),i&&r>-1){var o=i.getTopColumn(),a=this.columns.indexOf(o),h=o.getElement();t?(this.columns.splice(a,0,s),h.parentNode.insertBefore(n,h)):(this.columns.splice(a+1,0,s),h.parentNode.insertBefore(n,h.nextSibling))}else t?(this.columns.unshift(s),this.headersElement.insertBefore(s.getElement(),this.headersElement.firstChild)):(this.columns.push(s),this.headersElement.appendChild(s.getElement()));return s.columnRendered(),s}registerColumnField(e){e.definition.field&&(this.columnsByField[e.definition.field]=e)}registerColumnPosition(e){this.columnsByIndex.push(e)}_reIndexColumns(){this.columnsByIndex=[],this.columns.forEach(function(e){e.reRegisterPosition()})}verticalAlignHeaders(){var e=0;this.redrawBlock||(this.headersElement.style.height="",this.columns.forEach(t=>{t.clearVerticalAlign()}),this.columns.forEach(t=>{var i=t.getHeight();i>e&&(e=i)}),this.headersElement.style.height=e+"px",this.columns.forEach(t=>{t.verticalAlign(this.table.options.columnHeaderVertAlign,e)}),this.table.rowManager.adjustTableSize())}findColumn(e){var t;if(typeof e=="object"){if(e instanceof U)return e;if(e instanceof $e)return e._getSelf()||!1;if(typeof HTMLElement<"u"&&e instanceof HTMLElement)return t=[],this.columns.forEach(s=>{t.push(s),t=t.concat(s.getColumns(!0))}),t.find(s=>s.element===e)||!1}else return this.columnsByField[e]||!1;return!1}getColumnByField(e){return this.columnsByField[e]}getColumnsByFieldRoot(e){var t=[];return Object.keys(this.columnsByField).forEach(i=>{var s=this.table.options.nestedFieldSeparator?i.split(this.table.options.nestedFieldSeparator)[0]:i;s===e&&t.push(this.columnsByField[i])}),t}getColumnByIndex(e){return this.columnsByIndex[e]}getFirstVisibleColumn(){var e=this.columnsByIndex.findIndex(t=>t.visible);return e>-1?this.columnsByIndex[e]:!1}getVisibleColumnsByIndex(){return this.columnsByIndex.filter(e=>e.visible)}getColumns(){return this.columns}findColumnIndex(e){return this.columnsByIndex.findIndex(t=>e===t)}getRealColumns(){return this.columnsByIndex}traverse(e){this.columnsByIndex.forEach((t,i)=>{e(t,i)})}getDefinitions(e){var t=[];return this.columnsByIndex.forEach(i=>{(!e||e&&i.visible)&&t.push(i.getDefinition())}),t}getDefinitionTree(){var e=[];return this.columns.forEach(t=>{e.push(t.getDefinition(!0))}),e}getComponents(e){var t=[],i=e?this.columns:this.columnsByIndex;return i.forEach(s=>{t.push(s.getComponent())}),t}getWidth(){var e=0;return this.columnsByIndex.forEach(t=>{t.visible&&(e+=t.getWidth())}),e}moveColumn(e,t,i){t.element.parentNode.insertBefore(e.element,t.element),i&&t.element.parentNode.insertBefore(t.element,e.element),this.moveColumnActual(e,t,i),this.verticalAlignHeaders(),this.table.rowManager.reinitialize()}moveColumnActual(e,t,i){e.parent.isGroup?this._moveColumnInArray(e.parent.columns,e,t,i):this._moveColumnInArray(this.columns,e,t,i),this._moveColumnInArray(this.columnsByIndex,e,t,i,!0),this.rerenderColumns(!0),this.dispatch("column-moved",e,t,i),this.subscribedExternal("columnMoved")&&this.dispatchExternal("columnMoved",e.getComponent(),this.table.columnManager.getComponents())}_moveColumnInArray(e,t,i,s,n){var r=e.indexOf(t),o,a=[];r>-1&&(e.splice(r,1),o=e.indexOf(i),o>-1?s&&(o=o+1):o=r,e.splice(o,0,t),n&&(a=this.chain("column-moving-rows",[t,i,s],null,[])||[],a=a.concat(this.table.rowManager.rows),a.forEach(function(h){if(h.cells.length){var d=h.cells.splice(r,1)[0];h.cells.splice(o,0,d)}})))}scrollToColumn(e,t,i){var s=0,n=e.getLeftOffset(),r=0,o=e.getElement();return new Promise((a,h)=>{if(typeof t>"u"&&(t=this.table.options.scrollToColumnPosition),typeof i>"u"&&(i=this.table.options.scrollToColumnIfVisible),e.visible){switch(t){case"middle":case"center":r=-this.element.clientWidth/2;break;case"right":r=o.clientWidth-this.headersElement.clientWidth;break}if(!i&&n>0&&n+o.offsetWidth{t.push(i.generateCell(e))}),t}getFlexBaseWidth(){var e=this.table.element.clientWidth,t=0;return this.table.rowManager.element.scrollHeight>this.table.rowManager.element.clientHeight&&(e-=this.table.rowManager.element.offsetWidth-this.table.rowManager.element.clientWidth),this.columnsByIndex.forEach(function(i){var s,n,r;i.visible&&(s=i.definition.width||0,n=parseInt(i.minWidth),typeof s=="string"?s.indexOf("%")>-1?r=e/100*parseInt(s):r=parseInt(s):r=s,t+=r>n?r:n)}),t}addColumn(e,t,i){return new Promise((s,n)=>{var r=this._addColumn(e,t,i);this._reIndexColumns(),this.dispatch("column-add",e,t,i),this.layoutMode()!="fitColumns"&&r.reinitializeWidth(),this.redraw(!0),this.table.rowManager.reinitialize(),this.rerenderColumns(),s(r)})}deregisterColumn(e){var t=e.getField(),i;t&&delete this.columnsByField[t],i=this.columnsByIndex.indexOf(e),i>-1&&this.columnsByIndex.splice(i,1),i=this.columns.indexOf(e),i>-1&&this.columns.splice(i,1),this.verticalAlignHeaders(),this.redraw()}rerenderColumns(e,t){this.redrawBlock?(e===!1||e===!0&&this.redrawBlockUpdate===null)&&(this.redrawBlockUpdate=e):this.renderer.rerenderColumns(e,t)}blockRedraw(){this.redrawBlock=!0,this.redrawBlockUpdate=null}restoreRedraw(){this.redrawBlock=!1,this.verticalAlignHeaders(),this.renderer.rerenderColumns(this.redrawBlockUpdate)}redraw(e){x.elVisible(this.element)&&this.verticalAlignHeaders(),e&&(this.table.rowManager.resetScroll(),this.table.rowManager.reinitialize()),this.confirm("table-redrawing",e)||this.layoutRefresh(e),this.dispatch("table-redraw",e),this.table.footerManager.redraw()}}class Rs extends le{constructor(e){super(e),this.verticalFillMode="fill",this.scrollTop=0,this.scrollLeft=0,this.scrollTop=0,this.scrollLeft=0}clearRows(){for(var e=this.tableElement;e.firstChild;)e.removeChild(e.firstChild);e.scrollTop=0,e.scrollLeft=0,e.style.minWidth="",e.style.minHeight="",e.style.display="",e.style.visibility=""}renderRows(){var e=this.tableElement,t=!0,i=document.createDocumentFragment(),s=this.rows();s.forEach((n,r)=>{this.styleRow(n,r),n.initialize(!1,!0),n.type!=="group"&&(t=!1),i.appendChild(n.getElement())}),e.appendChild(i),s.forEach(n=>{n.rendered(),n.heightInitialized||n.calcHeight(!0)}),s.forEach(n=>{n.heightInitialized||n.setCellHeight()}),t?e.style.minWidth=this.table.columnManager.getWidth()+"px":e.style.minWidth=""}rerenderRows(e){this.clearRows(),e&&e(),this.renderRows(),this.rows().length||this.table.rowManager.tableEmpty()}scrollToRowNearestTop(e){var t=x.elOffset(e.getElement()).top;return!(Math.abs(this.elementVertical.scrollTop-t)>Math.abs(this.elementVertical.scrollTop+this.elementVertical.clientHeight-t))}scrollToRow(e){var t=e.getElement();this.elementVertical.scrollTop=x.elOffset(t).top-x.elOffset(this.elementVertical).top+this.elementVertical.scrollTop}visibleRows(e){return this.rows()}}class xs extends le{constructor(e){super(e),this.verticalFillMode="fill",this.scrollTop=0,this.scrollLeft=0,this.vDomRowHeight=20,this.vDomTop=0,this.vDomBottom=0,this.vDomScrollPosTop=0,this.vDomScrollPosBottom=0,this.vDomTopPad=0,this.vDomBottomPad=0,this.vDomMaxRenderChain=90,this.vDomWindowBuffer=0,this.vDomWindowMinTotalRows=20,this.vDomWindowMinMarginRows=5,this.vDomTopNewRows=[],this.vDomBottomNewRows=[]}clearRows(){for(var e=this.tableElement;e.firstChild;)e.removeChild(e.firstChild);e.style.paddingTop="",e.style.paddingBottom="",e.style.minHeight="",e.style.display="",e.style.visibility="",this.elementVertical.scrollTop=0,this.elementVertical.scrollLeft=0,this.scrollTop=0,this.scrollLeft=0,this.vDomTop=0,this.vDomBottom=0,this.vDomTopPad=0,this.vDomBottomPad=0,this.vDomScrollPosTop=0,this.vDomScrollPosBottom=0}renderRows(){this._virtualRenderFill()}rerenderRows(e){for(var t=this.elementVertical.scrollTop,i=!1,s=!1,n=this.table.rowManager.scrollLeft,r=this.rows(),o=this.vDomTop;o<=this.vDomBottom;o++)if(r[o]){var a=t-r[o].getElement().offsetTop;if(s===!1||Math.abs(a){h.deinitializeHeight()}),e&&e(),this.rows().length?this._virtualRenderFill(i===!1?this.rows.length-1:i,!0,s||0):(this.clear(),this.table.rowManager.tableEmpty()),this.scrollColumns(n)}scrollColumns(e){this.table.rowManager.scrollHorizontal(e)}scrollRows(e,t){var i=e-this.vDomScrollPosTop,s=e-this.vDomScrollPosBottom,n=this.vDomWindowBuffer*2,r=this.rows();if(this.scrollTop=e,-i>n||s>n){var o=this.table.rowManager.scrollLeft;this._virtualRenderFill(Math.floor(this.elementVertical.scrollTop/this.elementVertical.scrollHeight*r.length)),this.scrollColumns(o)}else t?(i<0&&this._addTopRow(r,-i),s<0&&(this.vDomScrollHeight-this.scrollTop>this.vDomWindowBuffer?this._removeBottomRow(r,-s):this.vDomScrollPosBottom=this.scrollTop)):(s>=0&&this._addBottomRow(r,s),i>=0&&(this.scrollTop>this.vDomWindowBuffer?this._removeTopRow(r,i):this.vDomScrollPosTop=this.scrollTop))}resize(){this.vDomWindowBuffer=this.table.options.renderVerticalBuffer||this.elementVertical.clientHeight}scrollToRowNearestTop(e){var t=this.rows().indexOf(e);return!(Math.abs(this.vDomTop-t)>Math.abs(this.vDomBottom-t))}scrollToRow(e){var t=this.rows().indexOf(e);t>-1&&this._virtualRenderFill(t,!0)}visibleRows(e){var t=this.elementVertical.scrollTop,i=this.elementVertical.clientHeight+t,s=!1,n=0,r=0,o=this.rows();if(e)n=this.vDomTop,r=this.vDomBottom;else for(var a=this.vDomTop;a<=this.vDomBottom;a++)if(o[a])if(s)if(i-o[a].getElement().offsetTop>=0)r=a;else break;else if(t-o[a].getElement().offsetTop>=0)n=a;else if(s=!0,i-o[a].getElement().offsetTop>=0)r=a;else break;return o.slice(n,r+1)}_virtualRenderFill(e,t,i){var s=this.tableElement,n=this.elementVertical,r=0,o=0,a=0,h=0,d=0,u=0,c=this.rows(),f=c.length,g=0,p,v,m=[],C=0,T=0,y=this.table.rowManager.fixedHeight,k=this.elementVertical.clientHeight,P=this.table.options.rowHeight,X=!0;if(e=e||0,i=i||0,!e)this.clear();else{for(;s.firstChild;)s.removeChild(s.firstChild);h=(f-e+1)*this.vDomRowHeight,h{L.rendered(),L.heightInitialized||L.calcHeight(!0)}),m.forEach(L=>{L.heightInitialized||L.setCellHeight()}),m.forEach(L=>{a=L.getHeight(),Cthis.vDomWindowBuffer&&(this.vDomWindowBuffer=a*2),C++}),X=this.table.rowManager.adjustTableSize(),k=this.elementVertical.clientHeight,X&&(y||this.table.options.maxHeight)&&(P=o/C,T=Math.max(this.vDomWindowMinTotalRows,Math.ceil(k/P+this.vDomWindowBuffer/P)))}e?(this.vDomTopPad=t?this.vDomRowHeight*this.vDomTop+i:this.scrollTop-d,this.vDomBottomPad=this.vDomBottom==f-1?0:Math.max(this.vDomScrollHeight-this.vDomTopPad-o-d,0)):(this.vDomTopPad=0,this.vDomRowHeight=Math.floor((o+d)/C),this.vDomBottomPad=this.vDomRowHeight*(f-this.vDomBottom-1),this.vDomScrollHeight=d+o+this.vDomBottomPad-k),s.style.paddingTop=this.vDomTopPad+"px",s.style.paddingBottom=this.vDomBottomPad+"px",t&&(this.scrollTop=this.vDomTopPad+d+i-(this.elementVertical.scrollWidth>this.elementVertical.clientWidth?this.elementVertical.offsetHeight-k:0)),this.scrollTop=Math.min(this.scrollTop,this.elementVertical.scrollHeight-k),this.elementVertical.scrollWidth>this.elementVertical.clientWidth&&t&&(this.scrollTop+=this.elementVertical.offsetHeight-k),this.vDomScrollPosTop=this.scrollTop,this.vDomScrollPosBottom=this.scrollTop,n.scrollTop=this.scrollTop,this.dispatch("render-virtual-fill")}}_addTopRow(e,t){for(var i=this.tableElement,s=[],n=0,r=this.vDomTop-1,o=0,a=!0;a;)if(this.vDomTop){let h=e[r],d,u;h&&o=d?(this.styleRow(h,r),i.insertBefore(h.getElement(),i.firstChild),(!h.initialized||!h.heightInitialized)&&s.push(h),h.initialize(),u||(d=h.getElement().offsetHeight,d>this.vDomWindowBuffer&&(this.vDomWindowBuffer=d*2)),t-=d,n+=d,this.vDomTop--,r--,o++):a=!1):a=!1}else a=!1;for(let h of s)h.clearCellHeight();this._quickNormalizeRowHeight(s),n&&(this.vDomTopPad-=n,this.vDomTopPad<0&&(this.vDomTopPad=r*this.vDomRowHeight),r<1&&(this.vDomTopPad=0),i.style.paddingTop=this.vDomTopPad+"px",this.vDomScrollPosTop-=n)}_removeTopRow(e,t){for(var i=[],s=0,n=0,r=!0;r;){let o=e[this.vDomTop],a;o&&n=a?(this.vDomTop++,t-=a,s+=a,i.push(o),n++):r=!1):r=!1}for(let o of i){let a=o.getElement();a.parentNode&&a.parentNode.removeChild(a)}s&&(this.vDomTopPad+=s,this.tableElement.style.paddingTop=this.vDomTopPad+"px",this.vDomScrollPosTop+=this.vDomTop?s:s+this.vDomWindowBuffer)}_addBottomRow(e,t){for(var i=this.tableElement,s=[],n=0,r=this.vDomBottom+1,o=0,a=!0;a;){let h=e[r],d,u;h&&o=d?(this.styleRow(h,r),i.appendChild(h.getElement()),(!h.initialized||!h.heightInitialized)&&s.push(h),h.initialize(),u||(d=h.getElement().offsetHeight,d>this.vDomWindowBuffer&&(this.vDomWindowBuffer=d*2)),t-=d,n+=d,this.vDomBottom++,r++,o++):a=!1):a=!1}for(let h of s)h.clearCellHeight();this._quickNormalizeRowHeight(s),n&&(this.vDomBottomPad-=n,(this.vDomBottomPad<0||r==e.length-1)&&(this.vDomBottomPad=0),i.style.paddingBottom=this.vDomBottomPad+"px",this.vDomScrollPosBottom+=n)}_removeBottomRow(e,t){for(var i=[],s=0,n=0,r=!0;r;){let o=e[this.vDomBottom],a;o&&n=a?(this.vDomBottom--,t-=a,s+=a,i.push(o),n++):r=!1):r=!1}for(let o of i){let a=o.getElement();a.parentNode&&a.parentNode.removeChild(a)}s&&(this.vDomBottomPad+=s,this.vDomBottomPad<0&&(this.vDomBottomPad=0),this.tableElement.style.paddingBottom=this.vDomBottomPad+"px",this.vDomScrollPosBottom-=s)}_quickNormalizeRowHeight(e){for(let t of e)t.calcHeight();for(let t of e)t.setCellHeight()}}class Ts extends M{constructor(e){super(e),this.element=this.createHolderElement(),this.tableElement=this.createTableElement(),this.heightFixer=this.createTableElement(),this.placeholder=null,this.placeholderContents=null,this.firstRender=!1,this.renderMode="virtual",this.fixedHeight=!1,this.rows=[],this.activeRowsPipeline=[],this.activeRows=[],this.activeRowsCount=0,this.displayRows=[],this.displayRowsCount=0,this.scrollTop=0,this.scrollLeft=0,this.redrawBlock=!1,this.redrawBlockRestoreConfig=!1,this.redrawBlockRenderInPosition=!1,this.dataPipeline=[],this.displayPipeline=[],this.scrollbarWidth=0,this.renderer=null}createHolderElement(){var e=document.createElement("div");return e.classList.add("tabulator-tableholder"),e.setAttribute("tabindex",0),e}createTableElement(){var e=document.createElement("div");return e.classList.add("tabulator-table"),e.setAttribute("role","rowgroup"),e}initializePlaceholder(){var e=this.table.options.placeholder;if(typeof e=="function"&&(e=e.call(this.table)),e=this.chain("placeholder",[e],e,e)||e,e){let t=document.createElement("div");if(t.classList.add("tabulator-placeholder"),typeof e=="string"){let i=document.createElement("div");i.classList.add("tabulator-placeholder-contents"),i.innerHTML=e,t.appendChild(i),this.placeholderContents=i}else typeof HTMLElement<"u"&&e instanceof HTMLElement?(t.appendChild(e),this.placeholderContents=e):(console.warn("Invalid placeholder provided, must be string or HTML Element",e),this.el=null);this.placeholder=t}}getElement(){return this.element}getTableElement(){return this.tableElement}initialize(){this.initializePlaceholder(),this.initializeRenderer(),this.element.appendChild(this.tableElement),this.firstRender=!0,this.element.addEventListener("scroll",()=>{var e=this.element.scrollLeft,t=this.scrollLeft>e,i=this.element.scrollTop,s=this.scrollTop>i;this.scrollLeft!=e&&(this.scrollLeft=e,this.dispatch("scroll-horizontal",e,t),this.dispatchExternal("scrollHorizontal",e,t),this._positionPlaceholder()),this.scrollTop!=i&&(this.scrollTop=i,this.renderer.scrollRows(i,s),this.dispatch("scroll-vertical",i,s),this.dispatchExternal("scrollVertical",i,s))})}findRow(e){if(typeof e=="object"){if(e instanceof S)return e;if(e instanceof oe)return e._getSelf()||!1;if(typeof HTMLElement<"u"&&e instanceof HTMLElement)return this.rows.find(i=>i.getElement()===e)||!1;if(e===null)return!1}else return typeof e>"u"?!1:this.rows.find(i=>i.data[this.table.options.index]==e)||!1;return!1}getRowFromDataObject(e){var t=this.rows.find(i=>i.data===e);return t||!1}getRowFromPosition(e){return this.getDisplayRows().find(t=>t.type==="row"&&t.getPosition()===e&&t.isDisplayed())}scrollToRow(e,t,i){return this.renderer.scrollToRowPosition(e,t,i)}setData(e,t,i){return new Promise((s,n)=>{t&&this.getDisplayRows().length?this.table.options.pagination?this._setDataActual(e,!0):this.reRenderInPosition(()=>{this._setDataActual(e)}):(this.table.options.autoColumns&&i&&this.table.initialized&&this.table.columnManager.generateColumnsFromRowData(e),this.resetScroll(),this._setDataActual(e)),s()})}_setDataActual(e,t){this.dispatchExternal("dataProcessing",e),this._wipeElements(),Array.isArray(e)?(this.dispatch("data-processing",e),e.forEach((i,s)=>{if(i&&typeof i=="object"){var n=new S(i,this);this.rows.push(n)}else console.warn("Data Loading Warning - Invalid row data detected and ignored, expecting object but received:",i)}),this.refreshActiveData(!1,!1,t),this.dispatch("data-processed",e),this.dispatchExternal("dataProcessed",e)):console.error(`Data Loading Error - Unable to process data due to invalid data type +Expecting: array +Received: `,typeof e,` +Data: `,e)}_wipeElements(){this.dispatch("rows-wipe"),this.destroy(),this.adjustTableSize(),this.dispatch("rows-wiped")}destroy(){this.rows.forEach(e=>{e.wipe()}),this.rows=[],this.activeRows=[],this.activeRowsPipeline=[],this.activeRowsCount=0,this.displayRows=[],this.displayRowsCount=0}deleteRow(e,t){var i=this.rows.indexOf(e),s=this.activeRows.indexOf(e);s>-1&&this.activeRows.splice(s,1),i>-1&&this.rows.splice(i,1),this.setActiveRows(this.activeRows),this.displayRowIterator(n=>{var r=n.indexOf(e);r>-1&&n.splice(r,1)}),t||this.reRenderInPosition(),this.regenerateRowPositions(),this.dispatchExternal("rowDeleted",e.getComponent()),this.displayRowsCount||this.tableEmpty(),this.subscribedExternal("dataChanged")&&this.dispatchExternal("dataChanged",this.getData())}addRow(e,t,i,s){var n=this.addRowActual(e,t,i,s);return n}addRows(e,t,i,s){var n=[];return new Promise((r,o)=>{t=this.findAddRowPos(t),Array.isArray(e)||(e=[e]),(typeof i>"u"&&t||typeof i<"u"&&!t)&&e.reverse(),e.forEach((a,h)=>{var d=this.addRow(a,t,i,!0);n.push(d),this.dispatch("row-added",d,a,t,i)}),this.refreshActiveData(s?"displayPipeline":!1,!1,!0),this.regenerateRowPositions(),this.displayRowsCount&&this._clearPlaceholder(),r(n)})}findAddRowPos(e){return typeof e>"u"&&(e=this.table.options.addRowPos),e==="pos"&&(e=!0),e==="bottom"&&(e=!1),e}addRowActual(e,t,i,s){var n=e instanceof S?e:new S(e||{},this),r=this.findAddRowPos(t),o=-1,a,h;return i||(h=this.chain("row-adding-position",[n,r],null,{index:i,top:r}),i=h.index,r=h.top),typeof i<"u"&&(i=this.findRow(i)),i=this.chain("row-adding-index",[n,i,r],null,i),i&&(o=this.rows.indexOf(i)),i&&o>-1?(a=this.activeRows.indexOf(i),this.displayRowIterator(function(d){var u=d.indexOf(i);u>-1&&d.splice(r?u:u+1,0,n)}),a>-1&&this.activeRows.splice(r?a:a+1,0,n),this.rows.splice(r?o:o+1,0,n)):r?(this.displayRowIterator(function(d){d.unshift(n)}),this.activeRows.unshift(n),this.rows.unshift(n)):(this.displayRowIterator(function(d){d.push(n)}),this.activeRows.push(n),this.rows.push(n)),this.setActiveRows(this.activeRows),this.dispatchExternal("rowAdded",n.getComponent()),this.subscribedExternal("dataChanged")&&this.dispatchExternal("dataChanged",this.table.rowManager.getData()),s||this.reRenderInPosition(),n}moveRow(e,t,i){this.dispatch("row-move",e,t,i),this.moveRowActual(e,t,i),this.regenerateRowPositions(),this.dispatch("row-moved",e,t,i),this.dispatchExternal("rowMoved",e.getComponent())}moveRowActual(e,t,i){this.moveRowInArray(this.rows,e,t,i),this.moveRowInArray(this.activeRows,e,t,i),this.displayRowIterator(s=>{this.moveRowInArray(s,e,t,i)}),this.dispatch("row-moving",e,t,i)}moveRowInArray(e,t,i,s){var n,r,o,a;if(t!==i&&(n=e.indexOf(t),n>-1&&(e.splice(n,1),r=e.indexOf(i),r>-1?s?e.splice(r+1,0,t):e.splice(r,0,t):e.splice(n,0,t)),e===this.getDisplayRows())){o=nn?r:n+1;for(let h=o;h<=a;h++)e[h]&&this.styleRow(e[h],h)}}clearData(){this.setData([])}getRowIndex(e){return this.findRowIndex(e,this.rows)}getDisplayRowIndex(e){var t=this.getDisplayRows().indexOf(e);return t>-1?t:!1}nextDisplayRow(e,t){var i=this.getDisplayRowIndex(e),s=!1;return i!==!1&&i-1)?i:!1}getData(e,t){var i=[],s=this.getRows(e);return s.forEach(function(n){n.type=="row"&&i.push(n.getData(t||"data"))}),i}getComponents(e){var t=[],i=this.getRows(e);return i.forEach(function(s){t.push(s.getComponent())}),t}getDataCount(e){var t=this.getRows(e);return t.length}scrollHorizontal(e){this.scrollLeft=e,this.element.scrollLeft=e,this.dispatch("scroll-horizontal",e)}registerDataPipelineHandler(e,t){typeof t<"u"?(this.dataPipeline.push({handler:e,priority:t}),this.dataPipeline.sort((i,s)=>i.priority-s.priority)):console.error("Data pipeline handlers must have a priority in order to be registered")}registerDisplayPipelineHandler(e,t){typeof t<"u"?(this.displayPipeline.push({handler:e,priority:t}),this.displayPipeline.sort((i,s)=>i.priority-s.priority)):console.error("Display pipeline handlers must have a priority in order to be registered")}refreshActiveData(e,t,i){var s=this.table,n="",r=0,o=["all","dataPipeline","display","displayPipeline","end"];if(!this.table.destroyed){if(typeof e=="function")if(r=this.dataPipeline.findIndex(a=>a.handler===e),r>-1)n="dataPipeline",t&&(r==this.dataPipeline.length-1?n="display":r++);else if(r=this.displayPipeline.findIndex(a=>a.handler===e),r>-1)n="displayPipeline",t&&(r==this.displayPipeline.length-1?n="end":r++);else{console.error("Unable to refresh data, invalid handler provided",e);return}else n=e||"all",r=0;if(this.redrawBlock){(!this.redrawBlockRestoreConfig||this.redrawBlockRestoreConfig&&(this.redrawBlockRestoreConfig.stage===n&&r{i.type==="row"&&(i.setPosition(t),t++)})}setActiveRows(e){this.activeRows=this.activeRows=Object.assign([],e),this.activeRowsCount=this.activeRows.length}resetDisplayRows(){this.displayRows=[],this.displayRows.push(this.activeRows.slice(0)),this.displayRowsCount=this.displayRows[0].length}setDisplayRows(e,t){this.displayRows[t]=e,t==this.displayRows.length-1&&(this.displayRowsCount=this.displayRows[this.displayRows.length-1].length)}getDisplayRows(e){return typeof e>"u"?this.displayRows.length?this.displayRows[this.displayRows.length-1]:[]:this.displayRows[e]||[]}getVisibleRows(e,t){var i=Object.assign([],this.renderer.visibleRows(!t));return e&&(i=this.chain("rows-visible",[t],i,i)),i}displayRowIterator(e){this.activeRowsPipeline.forEach(e),this.displayRows.forEach(e),this.displayRowsCount=this.displayRows[this.displayRows.length-1].length}getRows(e){var t=[];switch(e){case"active":t=this.activeRows;break;case"display":t=this.table.rowManager.getDisplayRows();break;case"visible":t=this.getVisibleRows(!1,!0);break;default:t=this.chain("rows-retrieve",e,null,this.rows)||this.rows}return t}reRenderInPosition(e){this.redrawBlock?e?e():this.redrawBlockRenderInPosition=!0:(this.dispatchExternal("renderStarted"),this.renderer.rerenderRows(e),this.fixedHeight||this.adjustTableSize(),this.scrollBarCheck(),this.dispatchExternal("renderComplete"))}scrollBarCheck(){var e=0;this.element.scrollHeight>this.element.clientHeight&&(e=this.element.offsetWidth-this.element.clientWidth),e!==this.scrollbarWidth&&(this.scrollbarWidth=e,this.dispatch("scrollbar-vertical",e))}initializeRenderer(){var e,t={virtual:xs,basic:Rs};typeof this.table.options.renderVertical=="string"?e=t[this.table.options.renderVertical]:e=this.table.options.renderVertical,e?(this.renderMode=this.table.options.renderVertical,this.renderer=new e(this.table,this.element,this.tableElement),this.renderer.initialize(),(this.table.element.clientHeight||this.table.options.height)&&!(this.table.options.minHeight&&this.table.options.maxHeight)?this.fixedHeight=!0:this.fixedHeight=!1):console.error("Unable to find matching renderer:",this.table.options.renderVertical)}getRenderMode(){return this.renderMode}renderTable(){this.dispatchExternal("renderStarted"),this.element.scrollTop=0,this._clearTable(),this.displayRowsCount?(this.renderer.renderRows(),this.firstRender&&(this.firstRender=!1,this.fixedHeight||this.adjustTableSize(),this.layoutRefresh(!0))):this.renderEmptyScroll(),this.fixedHeight||this.adjustTableSize(),this.dispatch("table-layout"),this.displayRowsCount||this._showPlaceholder(),this.scrollBarCheck(),this.dispatchExternal("renderComplete")}renderEmptyScroll(){this.placeholder?this.tableElement.style.display="none":this.tableElement.style.minWidth=this.table.columnManager.getWidth()+"px"}_clearTable(){this._clearPlaceholder(),this.scrollTop=0,this.scrollLeft=0,this.renderer.clearRows()}tableEmpty(){this.renderEmptyScroll(),this._showPlaceholder()}checkPlaceholder(){this.displayRowsCount?this._clearPlaceholder():this.tableEmpty()}_showPlaceholder(){this.placeholder&&(this.placeholder&&this.placeholder.parentNode&&this.placeholder.parentNode.removeChild(this.placeholder),this.initializePlaceholder(),this.placeholder.setAttribute("tabulator-render-mode",this.renderMode),this.getElement().appendChild(this.placeholder),this._positionPlaceholder(),this.adjustTableSize())}_clearPlaceholder(){this.placeholder&&this.placeholder.parentNode&&this.placeholder.parentNode.removeChild(this.placeholder),this.tableElement.style.minWidth="",this.tableElement.style.display=""}_positionPlaceholder(){this.placeholder&&this.placeholder.parentNode&&(this.placeholder.style.width=this.table.columnManager.getWidth()+"px",this.placeholderContents.style.width=this.table.rowManager.element.clientWidth+"px",this.placeholderContents.style.marginLeft=this.scrollLeft+"px")}styleRow(e,t){var i=e.getElement();t%2?(i.classList.add("tabulator-row-even"),i.classList.remove("tabulator-row-odd")):(i.classList.add("tabulator-row-odd"),i.classList.remove("tabulator-row-even"))}normalizeHeight(){this.activeRows.forEach(function(e){e.normalizeHeight()})}adjustTableSize(){let e=this.element.clientHeight,t,i=!1;if(this.renderer.verticalFillMode==="fill"){let s=Math.floor(this.table.columnManager.getElement().getBoundingClientRect().height+(this.table.footerManager&&this.table.footerManager.active&&!this.table.footerManager.external?this.table.footerManager.getElement().getBoundingClientRect().height:0));if(this.fixedHeight){t=isNaN(this.table.options.minHeight)?this.table.options.minHeight:this.table.options.minHeight+"px";const n="calc(100% - "+s+"px)";this.element.style.minHeight=t||"calc(100% - "+s+"px)",this.element.style.height=n,this.element.style.maxHeight=n}else this.element.style.height="",this.element.style.height=this.table.element.clientHeight-s+"px",this.element.scrollTop=this.scrollTop;this.renderer.resize(),!this.fixedHeight&&e!=this.element.clientHeight&&(i=!0,this.subscribed("table-resize")?this.dispatch("table-resize"):this.redraw()),this.scrollBarCheck()}return this._positionPlaceholder(),i}reinitialize(){this.rows.forEach(function(e){e.reinitialize(!0)})}blockRedraw(){this.redrawBlock=!0,this.redrawBlockRestoreConfig=!1}restoreRedraw(){this.redrawBlock=!1,this.redrawBlockRestoreConfig?(this.refreshActiveData(this.redrawBlockRestoreConfig.handler,this.redrawBlockRestoreConfig.skipStage,this.redrawBlockRestoreConfig.renderInPosition),this.redrawBlockRestoreConfig=!1):this.redrawBlockRenderInPosition&&this.reRenderInPosition(),this.redrawBlockRenderInPosition=!1}redraw(e){this.adjustTableSize(),this.table.tableWidth=this.table.element.clientWidth,e?this.renderTable():(this.reRenderInPosition(),this.scrollHorizontal(this.scrollLeft))}resetScroll(){if(this.element.scrollLeft=0,this.element.scrollTop=0,this.table.browser==="ie"){var e=document.createEvent("Event");e.initEvent("scroll",!1,!0),this.element.dispatchEvent(e)}else this.element.dispatchEvent(new Event("scroll"))}}class ks extends M{constructor(e){super(e),this.active=!1,this.element=this.createElement(),this.containerElement=this.createContainerElement(),this.external=!1}initialize(){this.initializeElement()}createElement(){var e=document.createElement("div");return e.classList.add("tabulator-footer"),e}createContainerElement(){var e=document.createElement("div");return e.classList.add("tabulator-footer-contents"),this.element.appendChild(e),e}initializeElement(){if(this.table.options.footerElement)switch(typeof this.table.options.footerElement){case"string":this.table.options.footerElement[0]==="<"?this.containerElement.innerHTML=this.table.options.footerElement:(this.external=!0,this.containerElement=document.querySelector(this.table.options.footerElement));break;default:this.element=this.table.options.footerElement;break}}getElement(){return this.element}append(e){this.activate(),this.containerElement.appendChild(e),this.table.rowManager.adjustTableSize()}prepend(e){this.activate(),this.element.insertBefore(e,this.element.firstChild),this.table.rowManager.adjustTableSize()}remove(e){e.parentNode.removeChild(e),this.deactivate()}deactivate(e){(!this.element.firstChild||e)&&(this.external||this.element.parentNode.removeChild(this.element),this.active=!1)}activate(){this.active||(this.active=!0,this.external||(this.table.element.appendChild(this.getElement()),this.table.element.style.display=""))}redraw(){this.dispatch("footer-redraw")}}class Ms extends M{constructor(e){super(e),this.el=null,this.abortClasses=["tabulator-headers","tabulator-table"],this.previousTargets={},this.listeners=["click","dblclick","contextmenu","mouseenter","mouseleave","mouseover","mouseout","mousemove","mouseup","mousedown","touchstart","touchend"],this.componentMap={"tabulator-cell":"cell","tabulator-row":"row","tabulator-group":"group","tabulator-col":"column"},this.pseudoTrackers={row:{subscriber:null,target:null},cell:{subscriber:null,target:null},group:{subscriber:null,target:null},column:{subscriber:null,target:null}},this.pseudoTracking=!1}initialize(){this.el=this.table.element,this.buildListenerMap(),this.bindSubscriptionWatchers()}buildListenerMap(){var e={};this.listeners.forEach(t=>{e[t]={handler:null,components:[]}}),this.listeners=e}bindPseudoEvents(){Object.keys(this.pseudoTrackers).forEach(e=>{this.pseudoTrackers[e].subscriber=this.pseudoMouseEnter.bind(this,e),this.subscribe(e+"-mouseover",this.pseudoTrackers[e].subscriber)}),this.pseudoTracking=!0}pseudoMouseEnter(e,t,i){this.pseudoTrackers[e].target!==i&&(this.pseudoTrackers[e].target&&this.dispatch(e+"-mouseleave",t,this.pseudoTrackers[e].target),this.pseudoMouseLeave(e,t),this.pseudoTrackers[e].target=i,this.dispatch(e+"-mouseenter",t,i))}pseudoMouseLeave(e,t){var i=Object.keys(this.pseudoTrackers),s={row:["cell"],cell:["row"]};i=i.filter(n=>{var r=s[e];return n!==e&&(!r||r&&!r.includes(n))}),i.forEach(n=>{var r=this.pseudoTrackers[n].target;this.pseudoTrackers[n].target&&(this.dispatch(n+"-mouseleave",t,r),this.pseudoTrackers[n].target=null)})}bindSubscriptionWatchers(){var e=Object.keys(this.listeners),t=Object.values(this.componentMap);for(let i of t)for(let s of e){let n=i+"-"+s;this.subscriptionChange(n,this.subscriptionChanged.bind(this,i,s))}this.subscribe("table-destroy",this.clearWatchers.bind(this))}subscriptionChanged(e,t,i){var s=this.listeners[t].components,n=s.indexOf(e),r=!1;i?n===-1&&(s.push(e),r=!0):this.subscribed(e+"-"+t)||n>-1&&(s.splice(n,1),r=!0),(t==="mouseenter"||t==="mouseleave")&&!this.pseudoTracking&&this.bindPseudoEvents(),r&&this.updateEventListeners()}updateEventListeners(){for(let e in this.listeners){let t=this.listeners[e];t.components.length?t.handler||(t.handler=this.track.bind(this,e),this.el.addEventListener(e,t.handler)):t.handler&&(this.el.removeEventListener(e,t.handler),t.handler=null)}}track(e,t){var i=t.composedPath&&t.composedPath()||t.path,s=this.findTargets(i);s=this.bindComponents(e,s),this.triggerEvents(e,t,s),this.pseudoTracking&&(e=="mouseover"||e=="mouseleave")&&!Object.keys(s).length&&this.pseudoMouseLeave("none",t)}findTargets(e){var t={};let i=Object.keys(this.componentMap);for(let s of e){let n=s.classList?[...s.classList]:[];if(n.filter(a=>this.abortClasses.includes(a)).length)break;let o=n.filter(a=>i.includes(a));for(let a of o)t[this.componentMap[a]]||(t[this.componentMap[a]]=s)}return t.group&&t.group===t.row&&delete t.row,t}bindComponents(e,t){var i=Object.keys(t).reverse(),s=this.listeners[e],n={},r={};for(let o of i){let a,h=t[o],d=this.previousTargets[o];if(d&&d.target===h)a=d.component;else switch(o){case"row":case"group":(s.components.includes("row")||s.components.includes("cell")||s.components.includes("group"))&&(a=this.table.rowManager.getVisibleRows(!0).find(c=>c.getElement()===h),t.row&&t.row.parentNode&&t.row.parentNode.closest(".tabulator-row")&&(t[o]=!1));break;case"column":s.components.includes("column")&&(a=this.table.columnManager.findColumn(h));break;case"cell":s.components.includes("cell")&&(n.row instanceof S?a=n.row.findCell(h):t.row&&console.warn("Event Target Lookup Error - The row this cell is attached to cannot be found, has the table been reinitialized without being destroyed first?"));break}a&&(n[o]=a,r[o]={target:h,component:a})}return this.previousTargets=r,n}triggerEvents(e,t,i){var s=this.listeners[e];for(let n in i)i[n]&&s.components.includes(n)&&this.dispatch(n+"-"+e,t,i[n])}clearWatchers(){for(let e in this.listeners){let t=this.listeners[e];t.handler&&(this.el.removeEventListener(e,t.handler),t.handler=null)}}}class Ls{constructor(e){this.table=e,this.bindings={}}bind(e,t,i){this.bindings[e]||(this.bindings[e]={}),this.bindings[e][t]?console.warn("Unable to bind component handler, a matching function name is already bound",e,t,i):this.bindings[e][t]=i}handle(e,t,i){if(this.bindings[e]&&this.bindings[e][i]&&typeof this.bindings[e][i].bind=="function")return this.bindings[e][i].bind(null,t);i!=="then"&&typeof i=="string"&&!i.startsWith("_")&&this.table.options.debugInvalidComponentFuncs&&console.error("The "+e+" component does not have a "+i+" function, have you checked that you have the correct Tabulator module installed?")}}class Ss extends M{constructor(e){super(e),this.requestOrder=0,this.loading=!1}initialize(){}load(e,t,i,s,n,r){var o=++this.requestOrder;if(this.table.destroyed)return Promise.resolve();if(this.dispatchExternal("dataLoading",e),e&&(e.indexOf("{")==0||e.indexOf("[")==0)&&(e=JSON.parse(e)),this.confirm("data-loading",[e,t,i,n])){this.loading=!0,n||this.alertLoader(),t=this.chain("data-params",[e,i,n],t||{},t||{}),t=this.mapParams(t,this.table.options.dataSendParams);var a=this.chain("data-load",[e,t,i,n],!1,Promise.resolve([]));return a.then(h=>{if(this.table.destroyed)console.warn("Data Load Response Blocked - Table has been destroyed");else{!Array.isArray(h)&&typeof h=="object"&&(h=this.mapParams(h,this.objectInvert(this.table.options.dataReceiveParams)));var d=this.chain("data-loaded",[h],null,h);o==this.requestOrder?(this.clearAlert(),d!==!1&&(this.dispatchExternal("dataLoaded",d),this.table.rowManager.setData(d,s,typeof r>"u"?!s:r))):console.warn("Data Load Response Blocked - An active data load request was blocked by an attempt to change table data while the request was being made")}}).catch(h=>{console.error("Data Load Error: ",h),this.dispatchExternal("dataLoadError",h),n||this.alertError(),setTimeout(()=>{this.clearAlert()},this.table.options.dataLoaderErrorTimeout)}).finally(()=>{this.loading=!1})}else return this.dispatchExternal("dataLoaded",e),e||(e=[]),this.table.rowManager.setData(e,s,typeof r>"u"?!s:r),Promise.resolve()}mapParams(e,t){var i={};for(let s in e)i[t.hasOwnProperty(s)?t[s]:s]=e[s];return i}objectInvert(e){var t={};for(let i in e)t[e[i]]=i;return t}blockActiveLoad(){this.requestOrder++}alertLoader(){var e=typeof this.table.options.dataLoader=="function"?this.table.options.dataLoader():this.table.options.dataLoader;e&&this.table.alertManager.alert(this.table.options.dataLoaderLoading||this.langText("data|loading"))}alertError(){this.table.alertManager.alert(this.table.options.dataLoaderError||this.langText("data|error"),"error")}clearAlert(){this.table.alertManager.clear()}}class Ds{constructor(e,t,i){this.table=e,this.events={},this.optionsList=t||{},this.subscriptionNotifiers={},this.dispatch=i?this._debugDispatch.bind(this):this._dispatch.bind(this),this.debug=i}subscriptionChange(e,t){this.subscriptionNotifiers[e]||(this.subscriptionNotifiers[e]=[]),this.subscriptionNotifiers[e].push(t),this.subscribed(e)&&this._notifySubscriptionChange(e,!0)}subscribe(e,t){this.events[e]||(this.events[e]=[]),this.events[e].push(t),this._notifySubscriptionChange(e,!0)}unsubscribe(e,t){var i;if(this.events[e])if(t)if(i=this.events[e].findIndex(s=>s===t),i>-1)this.events[e].splice(i,1);else{console.warn("Cannot remove event, no matching event found:",e,t);return}else delete this.events[e];else{console.warn("Cannot remove event, no events set on:",e);return}this._notifySubscriptionChange(e,!1)}subscribed(e){return this.events[e]&&this.events[e].length}_notifySubscriptionChange(e,t){var i=this.subscriptionNotifiers[e];i&&i.forEach(s=>{s(t)})}_dispatch(){var e=Array.from(arguments),t=e.shift(),i;return this.events[t]&&this.events[t].forEach((s,n)=>{let r=s.apply(this.table,e);n||(i=r)}),i}_debugDispatch(){var e=Array.from(arguments),t=e[0];return e[0]="ExternalEvent:"+e[0],(this.debug===!0||this.debug.includes(t))&&console.log(...e),this._dispatch(...arguments)}}class zs{constructor(e){this.events={},this.subscriptionNotifiers={},this.dispatch=e?this._debugDispatch.bind(this):this._dispatch.bind(this),this.chain=e?this._debugChain.bind(this):this._chain.bind(this),this.confirm=e?this._debugConfirm.bind(this):this._confirm.bind(this),this.debug=e}subscriptionChange(e,t){this.subscriptionNotifiers[e]||(this.subscriptionNotifiers[e]=[]),this.subscriptionNotifiers[e].push(t),this.subscribed(e)&&this._notifySubscriptionChange(e,!0)}subscribe(e,t,i=1e4){this.events[e]||(this.events[e]=[]),this.events[e].push({callback:t,priority:i}),this.events[e].sort((s,n)=>s.priority-n.priority),this._notifySubscriptionChange(e,!0)}unsubscribe(e,t){var i;if(this.events[e]){if(t)if(i=this.events[e].findIndex(s=>s.callback===t),i>-1)this.events[e].splice(i,1);else{console.warn("Cannot remove event, no matching event found:",e,t);return}}else{console.warn("Cannot remove event, no events set on:",e);return}this._notifySubscriptionChange(e,!1)}subscribed(e){return this.events[e]&&this.events[e].length}_chain(e,t,i,s){var n=i;return Array.isArray(t)||(t=[t]),this.subscribed(e)?(this.events[e].forEach((r,o)=>{n=r.callback.apply(this,t.concat([n]))}),n):typeof s=="function"?s():s}_confirm(e,t){var i=!1;return Array.isArray(t)||(t=[t]),this.subscribed(e)&&this.events[e].forEach((s,n)=>{s.callback.apply(this,t)&&(i=!0)}),i}_notifySubscriptionChange(e,t){var i=this.subscriptionNotifiers[e];i&&i.forEach(s=>{s(t)})}_dispatch(){var e=Array.from(arguments),t=e.shift();this.events[t]&&this.events[t].forEach(i=>{i.callback.apply(this,e)})}_debugDispatch(){var e=Array.from(arguments),t=e[0];return e[0]="InternalEvent:"+t,(this.debug===!0||this.debug.includes(t))&&console.log(...e),this._dispatch(...arguments)}_debugChain(){var e=Array.from(arguments),t=e[0];return e[0]="InternalEvent:"+t,(this.debug===!0||this.debug.includes(t))&&console.log(...e),this._chain(...arguments)}_debugConfirm(){var e=Array.from(arguments),t=e[0];return e[0]="InternalEvent:"+t,(this.debug===!0||this.debug.includes(t))&&console.log(...e),this._confirm(...arguments)}}class Hs extends M{constructor(e){super(e)}_warnUser(){this.options("debugDeprecation")&&console.warn(...arguments)}check(e,t,i){var s="";return typeof this.options(e)<"u"?(s="Deprecated Setup Option - Use of the %c"+e+"%c option is now deprecated",t?(s=s+", Please use the %c"+t+"%c option instead",this._warnUser(s,"font-weight: bold;","font-weight: normal;","font-weight: bold;","font-weight: normal;"),i&&(this.table.options[t]=this.table.options[e])):this._warnUser(s,"font-weight: bold;","font-weight: normal;"),!1):!0}checkMsg(e,t){return typeof this.options(e)<"u"?(this._warnUser("%cDeprecated Setup Option - Use of the %c"+e+" %c option is now deprecated, "+t,"font-weight: normal;","font-weight: bold;","font-weight: normal;"),!1):!0}msg(e){this._warnUser(e)}}function Fs(l,e){e&&this.table.columnManager.renderer.reinitializeColumnWidths(l),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update()}function Je(l,e){l.forEach(function(t){t.reinitializeWidth()}),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update()}function Ps(l,e){var t=0,i=this.table.rowManager.element.clientWidth,s=0,n=!1;l.forEach((r,o)=>{r.widthFixed||r.reinitializeWidth(),(this.table.options.responsiveLayout?r.modules.responsive.visible:r.visible)&&(n=r),r.visible&&(t+=r.getWidth())}),n?(s=i-t+n.getWidth(),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&(n.setWidth(0),this.table.modules.responsiveLayout.update()),s>0?n.setWidth(s):n.reinitializeWidth()):this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update()}function Os(l,e){var t=this.table.rowManager.element.getBoundingClientRect().width,i=0,s=0,n=0,r=0,o=[],a=[],h=0,d=0,u=0;function c(g){var p;return typeof g=="string"?g.indexOf("%")>-1?p=t/100*parseInt(g):p=parseInt(g):p=g,p}function f(g,p,v,m){var C=[],T=0,y=0,k=0,P=n,X=0,L=0,he=[];function Ie(E){return v*(E.column.definition.widthGrow||1)}function Ne(E){return c(E.width)-v*(E.column.definition.widthShrink||0)}return g.forEach(function(E,Ws){var We=m?Ne(E):Ie(E);E.column.minWidth>=We?C.push(E):E.column.maxWidth&&E.column.maxWidththis.table.rowManager.element.clientHeight&&(t-=this.table.rowManager.element.offsetWidth-this.table.rowManager.element.clientWidth),l.forEach(function(g){var p,v,m;g.visible&&(p=g.definition.width,v=parseInt(g.minWidth),p?(m=c(p),i+=m>v?m:v,g.definition.widthShrink&&(a.push({column:g,width:m>v?m:v}),h+=g.definition.widthShrink)):(o.push({column:g,width:0}),n+=g.definition.widthGrow||1))}),s=t-i,r=Math.floor(s/n),u=f(o,s,r,!1),o.length&&u>0&&(o[o.length-1].width+=u),o.forEach(function(g){s-=g.width}),d=Math.abs(u)+s,d>0&&h&&(u=f(a,d,Math.floor(d/h),!0)),u&&a.length&&(a[a.length-1].width-=u),o.forEach(function(g){g.column.setWidth(g.width)}),a.forEach(function(g){g.column.setWidth(g.width)})}var As={fitData:Fs,fitDataFill:Je,fitDataTable:Je,fitDataStretch:Ps,fitColumns:Os};const $=class $ extends w{constructor(e){super(e,"layout"),this.mode=null,this.registerTableOption("layout","fitData"),this.registerTableOption("layoutColumnsOnNewData",!1),this.registerColumnOption("widthGrow"),this.registerColumnOption("widthShrink")}initialize(){var e=this.table.options.layout;$.modes[e]?this.mode=e:(console.warn("Layout Error - invalid mode set, defaulting to 'fitData' : "+e),this.mode="fitData"),this.table.element.setAttribute("tabulator-layout",this.mode),this.subscribe("column-init",this.initializeColumn.bind(this))}initializeColumn(e){e.definition.widthGrow&&(e.definition.widthGrow=Number(e.definition.widthGrow)),e.definition.widthShrink&&(e.definition.widthShrink=Number(e.definition.widthShrink))}getMode(){return this.mode}layout(e){this.dispatch("layout-refreshing"),$.modes[this.mode].call(this,this.table.columnManager.columnsByIndex,e),this.dispatch("layout-refreshed")}};b($,"moduleName","layout"),b($,"modes",As);let Pe=$;var _s={default:{groups:{item:"item",items:"items"},columns:{},data:{loading:"Loading",error:"Error"},pagination:{page_size:"Page Size",page_title:"Show Page",first:"First",first_title:"First Page",last:"Last",last_title:"Last Page",prev:"Prev",prev_title:"Prev Page",next:"Next",next_title:"Next Page",all:"All",counter:{showing:"Showing",of:"of",rows:"rows",pages:"pages"}},headerFilters:{default:"filter column...",columns:{}}}};const se=class se extends w{constructor(e){super(e),this.locale="default",this.lang=!1,this.bindings={},this.langList={},this.registerTableOption("locale",!1),this.registerTableOption("langs",{})}initialize(){this.langList=x.deepClone(se.langs),this.table.options.columnDefaults.headerFilterPlaceholder!==!1&&this.setHeaderFilterPlaceholder(this.table.options.columnDefaults.headerFilterPlaceholder);for(let e in this.table.options.langs)this.installLang(e,this.table.options.langs[e]);this.setLocale(this.table.options.locale),this.registerTableFunction("setLocale",this.setLocale.bind(this)),this.registerTableFunction("getLocale",this.getLocale.bind(this)),this.registerTableFunction("getLang",this.getLang.bind(this))}setHeaderFilterPlaceholder(e){this.langList.default.headerFilters.default=e}installLang(e,t){this.langList[e]?this._setLangProp(this.langList[e],t):this.langList[e]=t}_setLangProp(e,t){for(let i in t)e[i]&&typeof e[i]=="object"?this._setLangProp(e[i],t[i]):e[i]=t[i]}setLocale(e){e=e||"default";function t(i,s){for(var n in i)typeof i[n]=="object"?(s[n]||(s[n]={}),t(i[n],s[n])):s[n]=i[n]}if(e===!0&&navigator.language&&(e=navigator.language.toLowerCase()),e&&!this.langList[e]){let i=e.split("-")[0];this.langList[i]?(console.warn("Localization Error - Exact matching locale not found, using closest match: ",e,i),e=i):(console.warn("Localization Error - Matching locale not found, using default: ",e),e="default")}this.locale=e,this.lang=x.deepClone(this.langList.default||{}),e!="default"&&t(this.langList[e],this.lang),this.dispatchExternal("localized",this.locale,this.lang),this._executeBindings()}getLocale(e){return this.locale}getLang(e){return e?this.langList[e]:this.lang}getText(e,t){var i=t?e+"|"+t:e,s=i.split("|"),n=this._getLangElement(s,this.locale);return n||""}_getLangElement(e,t){var i=this.lang;return e.forEach(function(s){var n;i&&(n=i[s],typeof n<"u"?i=n:i=!1)}),i}bind(e,t){this.bindings[e]||(this.bindings[e]=[]),this.bindings[e].push(t),t(this.getText(e),this.lang)}_executeBindings(){for(let e in this.bindings)this.bindings[e].forEach(t=>{t(this.getText(e),this.lang)})}};b(se,"moduleName","localize"),b(se,"langs",_s);let Oe=se;class bt extends w{constructor(e){super(e)}initialize(){this.registerTableFunction("tableComms",this.receive.bind(this))}getConnections(e){var t=[],i;return i=this.table.constructor.registry.lookupTable(e),i.forEach(s=>{this.table!==s&&t.push(s)}),t}send(e,t,i,s){var n=this.getConnections(e);n.forEach(r=>{r.tableComms(this.table.element,t,i,s)}),!n.length&&e&&console.warn("Table Connection Error - No tables matching selector found",e)}receive(e,t,i,s){if(this.table.modExists(t))return this.table.modules[t].commsReceived(e,i,s);console.warn("Inter-table Comms Error - no such module:",t)}}b(bt,"moduleName","comms");var Bs=Object.freeze({__proto__:null,CommsModule:bt,LayoutModule:Pe,LocalizeModule:Oe});const z=class z{static findTable(e){var t=z.registry.lookupTable(e,!0);return Array.isArray(t)&&!t.length?!1:t}};b(z,"registry",{tables:[],register(e){z.registry.tables.push(e)},deregister(e){var t=z.registry.tables.indexOf(e);t>-1&&z.registry.tables.splice(t,1)},lookupTable(e,t){var i=[],s,n;if(typeof e=="string"){if(s=document.querySelectorAll(e),s.length)for(var r=0;r{s.prototype.moduleCore=!0}),R._registerModule(i)}static _registerModule(e){Array.isArray(e)||(e=[e]),e.forEach(t=>{R._registerModuleBinding(t),R._registerModuleExtensions(t)})}static _registerModuleBinding(e){e.moduleName?R.moduleBindings[e.moduleName]=e:console.error("Unable to bind module, no moduleName defined",e.moduleName)}static _registerModuleExtensions(e){var t=e.moduleExtensions;if(e.moduleExtensions)for(let i in t){let s=t[i];if(R.moduleBindings[i])for(let n in s)R._extendModule(i,n,s[n]);else{R.moduleExtensions[i]||(R.moduleExtensions[i]={});for(let n in s)R.moduleExtensions[i][n]||(R.moduleExtensions[i][n]={}),Object.assign(R.moduleExtensions[i][n],s[n])}}R._extendModuleFromQueue(e)}static _extendModuleFromQueue(e){var t=R.moduleExtensions[e.moduleName];if(t)for(let i in t)R._extendModule(e.moduleName,i,t[i])}_bindModules(){var e=[],t=[],i=[];this.modules={};for(var s in R.moduleBindings){let n=R.moduleBindings[s],r=new n(this);this.modules[s]=r,n.prototype.moduleCore?this.modulesCore.push(r):n.moduleInitOrder?n.moduleInitOrder<0?e.push(r):t.push(r):i.push(r)}e.sort((n,r)=>n.moduleInitOrder>r.moduleInitOrder?1:-1),t.sort((n,r)=>n.moduleInitOrder>r.moduleInitOrder?1:-1),this.modulesRegular=e.concat(i.concat(t))}};b(R,"moduleBindings",{}),b(R,"moduleExtensions",{}),b(R,"modulesRegistered",!1),b(R,"defaultModules",!1);let _e=R;class Vs extends M{constructor(e){super(e),this.element=this._createAlertElement(),this.msgElement=this._createMsgElement(),this.type=null,this.element.appendChild(this.msgElement)}_createAlertElement(){var e=document.createElement("div");return e.classList.add("tabulator-alert"),e}_createMsgElement(){var e=document.createElement("div");return e.classList.add("tabulator-alert-msg"),e.setAttribute("role","alert"),e}_typeClass(){return"tabulator-alert-state-"+this.type}alert(e,t="msg"){if(e){for(this.clear(),this.dispatch("alert-show",t),this.type=t;this.msgElement.firstChild;)this.msgElement.removeChild(this.msgElement.firstChild);this.msgElement.classList.add(this._typeClass()),typeof e=="function"&&(e=e()),e instanceof HTMLElement?this.msgElement.appendChild(e):this.msgElement.innerHTML=e,this.table.element.appendChild(this.element)}}clear(){this.dispatch("alert-hide",this.type),this.element.parentNode&&this.element.parentNode.removeChild(this.element),this.msgElement.classList.remove(this._typeClass())}}const A=class A extends _e{static extendModule(){A.initializeModuleBinder(),A._extendModule(...arguments)}static registerModule(){A.initializeModuleBinder(),A._registerModule(...arguments)}constructor(e,t,i){super(),A.initializeModuleBinder(i),this.options={},this.columnManager=null,this.rowManager=null,this.footerManager=null,this.alertManager=null,this.vdomHoz=null,this.externalEvents=null,this.eventBus=null,this.interactionMonitor=!1,this.browser="",this.browserSlow=!1,this.browserMobile=!1,this.rtl=!1,this.originalElement=null,this.componentFunctionBinder=new Ls(this),this.dataLoader=!1,this.modules={},this.modulesCore=[],this.modulesRegular=[],this.deprecationAdvisor=new Hs(this),this.optionsList=new gt(this,"table constructor"),this.initialized=!1,this.destroyed=!1,this.initializeElement(e)&&(this.initializeCoreSystems(t),setTimeout(()=>{this._create()})),this.constructor.registry.register(this)}initializeElement(e){return typeof HTMLElement<"u"&&e instanceof HTMLElement?(this.element=e,!0):typeof e=="string"?(this.element=document.querySelector(e),this.element?!0:(console.error("Tabulator Creation Error - no element found matching selector: ",e),!1)):(console.error("Tabulator Creation Error - Invalid element provided:",e),!1)}initializeCoreSystems(e){this.columnManager=new ys(this),this.rowManager=new Ts(this),this.footerManager=new ks(this),this.dataLoader=new Ss(this),this.alertManager=new Vs(this),this._bindModules(),this.options=this.optionsList.generate(A.defaultOptions,e),this._clearObjectPointers(),this._mapDeprecatedFunctionality(),this.externalEvents=new Ds(this,this.options,this.options.debugEventsExternal),this.eventBus=new zs(this.options.debugEventsInternal),this.interactionMonitor=new Ms(this),this.dataLoader.initialize(),this.footerManager.initialize()}_mapDeprecatedFunctionality(){}_clearSelection(){this.element.classList.add("tabulator-block-select"),window.getSelection?window.getSelection().empty?window.getSelection().empty():window.getSelection().removeAllRanges&&window.getSelection().removeAllRanges():document.selection&&document.selection.empty(),this.element.classList.remove("tabulator-block-select")}_create(){this.externalEvents.dispatch("tableBuilding"),this.eventBus.dispatch("table-building"),this._rtlCheck(),this._buildElement(),this._initializeTable(),this.initialized=!0,this._loadInitialData().finally(()=>{this.eventBus.dispatch("table-initialized"),this.externalEvents.dispatch("tableBuilt")})}_rtlCheck(){var e=window.getComputedStyle(this.element);switch(this.options.textDirection){case"auto":if(e.direction!=="rtl")break;case"rtl":this.element.classList.add("tabulator-rtl"),this.rtl=!0;break;case"ltr":this.element.classList.add("tabulator-ltr");default:this.rtl=!1}}_clearObjectPointers(){this.options.columns=this.options.columns.slice(0),Array.isArray(this.options.data)&&!this.options.reactiveData&&(this.options.data=this.options.data.slice(0))}_buildElement(){var e=this.element,t=this.options,i;if(e.tagName==="TABLE"){this.originalElement=this.element,i=document.createElement("div");var s=e.attributes;for(var n in s)typeof s[n]=="object"&&i.setAttribute(s[n].name,s[n].value);e.parentNode.replaceChild(i,e),this.element=e=i}for(e.classList.add("tabulator"),e.setAttribute("role","grid");e.firstChild;)e.removeChild(e.firstChild);t.height&&(t.height=isNaN(t.height)?t.height:t.height+"px",e.style.height=t.height),t.minHeight!==!1&&(t.minHeight=isNaN(t.minHeight)?t.minHeight:t.minHeight+"px",e.style.minHeight=t.minHeight),t.maxHeight!==!1&&(t.maxHeight=isNaN(t.maxHeight)?t.maxHeight:t.maxHeight+"px",e.style.maxHeight=t.maxHeight)}_initializeTable(){var e=this.element,t=this.options;this.interactionMonitor.initialize(),this.columnManager.initialize(),this.rowManager.initialize(),this._detectBrowser(),this.modulesCore.forEach(i=>{i.initialize()}),e.appendChild(this.columnManager.getElement()),e.appendChild(this.rowManager.getElement()),t.footerElement&&this.footerManager.activate(),t.autoColumns&&t.data&&this.columnManager.generateColumnsFromRowData(this.options.data),this.modulesRegular.forEach(i=>{i.initialize()}),this.columnManager.setColumns(t.columns),this.eventBus.dispatch("table-built")}_loadInitialData(){return this.dataLoader.load(this.options.data).finally(()=>{this.columnManager.verticalAlignHeaders()})}destroy(){var e=this.element;for(this.destroyed=!0,this.constructor.registry.deregister(this),this.eventBus.dispatch("table-destroy"),this.rowManager.destroy();e.firstChild;)e.removeChild(e.firstChild);e.classList.remove("tabulator"),this.externalEvents.dispatch("tableDestroyed")}_detectBrowser(){var e=navigator.userAgent||navigator.vendor||window.opera;e.indexOf("Trident")>-1?(this.browser="ie",this.browserSlow=!0):e.indexOf("Edge")>-1?(this.browser="edge",this.browserSlow=!0):e.indexOf("Firefox")>-1?(this.browser="firefox",this.browserSlow=!1):e.indexOf("Mac OS")>-1?(this.browser="safari",this.browserSlow=!1):(this.browser="other",this.browserSlow=!1),this.browserMobile=/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(e)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw-(n|u)|c55\/|capi|ccwa|cdm-|cell|chtm|cldc|cmd-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc-s|devi|dica|dmob|do(c|p)o|ds(12|-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(-|_)|g1 u|g560|gene|gf-5|g-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd-(m|p|t)|hei-|hi(pt|ta)|hp( i|ip)|hs-c|ht(c(-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i-(20|go|ma)|i230|iac( |-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|-[a-w])|libw|lynx|m1-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|-([1-8]|c))|phil|pire|pl(ay|uc)|pn-2|po(ck|rt|se)|prox|psio|pt-g|qa-a|qc(07|12|21|32|60|-[2-7]|i-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h-|oo|p-)|sdk\/|se(c(-|0|1)|47|mc|nd|ri)|sgh-|shar|sie(-|m)|sk-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h-|v-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl-|tdg-|tel(i|m)|tim-|t-mo|to(pl|sh)|ts(70|m-|m3|m5)|tx-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas-|your|zeto|zte-/i.test(e.slice(0,4))}initGuard(e,t){var i,s;return this.options.debugInitialization&&!this.initialized&&(e||(i=new Error().stack.split(` +`),s=i[0]=="Error"?i[2]:i[1],s[0]==" "?e=s.trim().split(" ")[1].split(".")[1]:e=s.trim().split("@")[0]),console.warn("Table Not Initialized - Calling the "+e+" function before the table is initialized may result in inconsistent behavior, Please wait for the `tableBuilt` event before calling this function."+(t?" "+t:""))),this.initialized}blockRedraw(){this.initGuard(),this.eventBus.dispatch("redraw-blocking"),this.rowManager.blockRedraw(),this.columnManager.blockRedraw(),this.eventBus.dispatch("redraw-blocked")}restoreRedraw(){this.initGuard(),this.eventBus.dispatch("redraw-restoring"),this.rowManager.restoreRedraw(),this.columnManager.restoreRedraw(),this.eventBus.dispatch("redraw-restored")}setData(e,t,i){return this.initGuard(!1,"To set initial data please use the 'data' property in the table constructor."),this.dataLoader.load(e,t,i,!1)}clearData(){this.initGuard(),this.dataLoader.blockActiveLoad(),this.rowManager.clearData()}getData(e){return this.rowManager.getData(e)}getDataCount(e){return this.rowManager.getDataCount(e)}replaceData(e,t,i){return this.initGuard(),this.dataLoader.load(e,t,i,!0,!0)}updateData(e){var t=0;return this.initGuard(),new Promise((i,s)=>{this.dataLoader.blockActiveLoad(),typeof e=="string"&&(e=JSON.parse(e)),e&&e.length>0?e.forEach(n=>{var r=this.rowManager.findRow(n[this.options.index]);r?(t++,r.updateData(n).then(()=>{t--,t||i()}).catch(o=>{s("Update Error - Unable to update row",n,o)})):s("Update Error - Unable to find row",n)}):(console.warn("Update Error - No data provided"),s("Update Error - No data provided"))})}addData(e,t,i){return this.initGuard(),new Promise((s,n)=>{this.dataLoader.blockActiveLoad(),typeof e=="string"&&(e=JSON.parse(e)),e?this.rowManager.addRows(e,t,i).then(r=>{var o=[];r.forEach(function(a){o.push(a.getComponent())}),s(o)}):(console.warn("Update Error - No data provided"),n("Update Error - No data provided"))})}updateOrAddData(e){var t=[],i=0;return this.initGuard(),new Promise((s,n)=>{this.dataLoader.blockActiveLoad(),typeof e=="string"&&(e=JSON.parse(e)),e&&e.length>0?e.forEach(r=>{var o=this.rowManager.findRow(r[this.options.index]);i++,o?o.updateData(r).then(()=>{i--,t.push(o.getComponent()),i||s(t)}):this.rowManager.addRows(r).then(a=>{i--,t.push(a[0].getComponent()),i||s(t)})}):(console.warn("Update Error - No data provided"),n("Update Error - No data provided"))})}getRow(e){var t=this.rowManager.findRow(e);return t?t.getComponent():(console.warn("Find Error - No matching row found:",e),!1)}getRowFromPosition(e){var t=this.rowManager.getRowFromPosition(e);return t?t.getComponent():(console.warn("Find Error - No matching row found:",e),!1)}deleteRow(e){var t=[];this.initGuard(),Array.isArray(e)||(e=[e]);for(let i of e){let s=this.rowManager.findRow(i,!0);if(s)t.push(s);else return console.error("Delete Error - No matching row found:",i),Promise.reject("Delete Error - No matching row found")}return t.sort((i,s)=>this.rowManager.rows.indexOf(i)>this.rowManager.rows.indexOf(s)?1:-1),t.forEach(i=>{i.delete()}),this.rowManager.reRenderInPosition(),Promise.resolve()}addRow(e,t,i){return this.initGuard(),typeof e=="string"&&(e=JSON.parse(e)),this.rowManager.addRows(e,t,i,!0).then(s=>s[0].getComponent())}updateOrAddRow(e,t){var i=this.rowManager.findRow(e);return this.initGuard(),typeof t=="string"&&(t=JSON.parse(t)),i?i.updateData(t).then(()=>i.getComponent()):this.rowManager.addRows(t).then(s=>s[0].getComponent())}updateRow(e,t){var i=this.rowManager.findRow(e);return this.initGuard(),typeof t=="string"&&(t=JSON.parse(t)),i?i.updateData(t).then(()=>Promise.resolve(i.getComponent())):(console.warn("Update Error - No matching row found:",e),Promise.reject("Update Error - No matching row found"))}scrollToRow(e,t,i){var s=this.rowManager.findRow(e);return s?this.rowManager.scrollToRow(s,t,i):(console.warn("Scroll Error - No matching row found:",e),Promise.reject("Scroll Error - No matching row found"))}moveRow(e,t,i){var s=this.rowManager.findRow(e);this.initGuard(),s?s.moveToRow(t,i):console.warn("Move Error - No matching row found:",e)}getRows(e){return this.rowManager.getComponents(e)}getRowPosition(e){var t=this.rowManager.findRow(e);return t?t.getPosition():(console.warn("Position Error - No matching row found:",e),!1)}setColumns(e){this.initGuard(!1,"To set initial columns please use the 'columns' property in the table constructor"),this.columnManager.setColumns(e)}getColumns(e){return this.columnManager.getComponents(e)}getColumn(e){var t=this.columnManager.findColumn(e);return t?t.getComponent():(console.warn("Find Error - No matching column found:",e),!1)}getColumnDefinitions(){return this.columnManager.getDefinitionTree()}showColumn(e){var t=this.columnManager.findColumn(e);if(this.initGuard(),t)t.show();else return console.warn("Column Show Error - No matching column found:",e),!1}hideColumn(e){var t=this.columnManager.findColumn(e);if(this.initGuard(),t)t.hide();else return console.warn("Column Hide Error - No matching column found:",e),!1}toggleColumn(e){var t=this.columnManager.findColumn(e);if(this.initGuard(),t)t.visible?t.hide():t.show();else return console.warn("Column Visibility Toggle Error - No matching column found:",e),!1}addColumn(e,t,i){var s=this.columnManager.findColumn(i);return this.initGuard(),this.columnManager.addColumn(e,t,s).then(n=>n.getComponent())}deleteColumn(e){var t=this.columnManager.findColumn(e);return this.initGuard(),t?t.delete():(console.warn("Column Delete Error - No matching column found:",e),Promise.reject())}updateColumnDefinition(e,t){var i=this.columnManager.findColumn(e);return this.initGuard(),i?i.updateDefinition(t):(console.warn("Column Update Error - No matching column found:",e),Promise.reject())}moveColumn(e,t,i){var s=this.columnManager.findColumn(e),n=this.columnManager.findColumn(t);this.initGuard(),s?n?this.columnManager.moveColumn(s,n,i):console.warn("Move Error - No matching column found:",n):console.warn("Move Error - No matching column found:",e)}scrollToColumn(e,t,i){return new Promise((s,n)=>{var r=this.columnManager.findColumn(e);return r?this.columnManager.scrollToColumn(r,t,i):(console.warn("Scroll Error - No matching column found:",e),Promise.reject("Scroll Error - No matching column found"))})}redraw(e){this.initGuard(),this.columnManager.redraw(e),this.rowManager.redraw(e)}setHeight(e){this.options.height=isNaN(e)?e:e+"px",this.element.style.height=this.options.height,this.rowManager.initializeRenderer(),this.rowManager.redraw(!0)}on(e,t){this.externalEvents.subscribe(e,t)}off(e,t){this.externalEvents.unsubscribe(e,t)}dispatchEvent(){var e=Array.from(arguments);e.shift(),this.externalEvents.dispatch(...arguments)}alert(e,t){this.initGuard(),this.alertManager.alert(e,t)}clearAlert(){this.initGuard(),this.alertManager.clear()}modExists(e,t){return this.modules[e]?!0:(t&&console.error("Tabulator Module Not Installed: "+e),!1)}module(e){var t=this.modules[e];return t||console.error("Tabulator module not installed: "+e),t}};b(A,"defaultOptions",ws);let Be=A;var Q=Be;class Is extends Q{static extendModule(){Q.initializeModuleBinder(ue),Q._extendModule(...arguments)}static registerModule(){Q.initializeModuleBinder(ue),Q._registerModule(...arguments)}constructor(e,t,i){super(e,t,ue)}}var Ns=Is;const Xs=Ct({__name:"Tabulator",props:{columns:{},tableData:{}},setup(l){const e=l,t=Ge(null),i=Ge(null);je(()=>e.columns,()=>{i.value?i.value.setColumns(e.columns):s()}),je(()=>e.tableData,()=>{n()}),Et(async()=>{await yt(),s()}),Rt(()=>{i.value&&(i.value.destroy(),i.value=null)});const s=()=>{!t.value||i.value||(i.value=new Ns(t.value,{data:e.tableData??[],reactiveData:!0,columns:e.columns,height:"auto",pagination:!0,paginationSize:6,paginationSizeSelector:[3,6,8,10],movableColumns:!0,paginationCounter:"rows"}))},n=()=>{if(!i.value){s();return}i.value.replaceData(e.tableData??[])};return(r,o)=>(Tt(),xt("div",{ref_key:"table",ref:t},null,512))}});export{Xs as _}; diff --git a/src/main/resources/static/assets/YamlGenerate-7neU9daB.js b/src/main/resources/static/assets/YamlGenerate-7neU9daB.js new file mode 100644 index 00000000..2a4870bc --- /dev/null +++ b/src/main/resources/static/assets/YamlGenerate-7neU9daB.js @@ -0,0 +1 @@ +import{d as B,g as A,h as I,r as f,o as n,c as a,a as e,t as F,f as O,i as G,j as c,l as m,F as D,k as j,m as W,n as K,b as N,p as X}from"./index-DU977P1k.js";import{s as J}from"./request-jyImEBot.js";import{_ as Q}from"./_plugin-vue_export-helper-DlAUqK2U.js";const Z=P=>J.post("/manifest/v1/generator/yaml/pod",P),ee=P=>J.post("/manifest/v1/generator/yaml/service",P),te=P=>J.post("/manifest/v1/generator/yaml/hpa",P),le=P=>J.post("/manifest/v1/generator/yaml/deployments",P),oe=P=>J.post("/manifest/v1/generator/yaml/configmap",P),se={class:"modal",id:"modal-pod",tabindex:"-1"},ne={class:"modal-dialog modal-lg",role:"document"},ae={class:"modal-content"},re={class:"modal-header"},ie={class:"modal-title"},de={class:"modal-body"},ue={class:"card"},ce={class:"card-body"},me=B({__name:"podModal",props:{title:{},yamlData:{}},setup(P){const h=P,$=A(()=>h.yamlData);I($,async()=>{$.value&&await l()});const w=f(""),l=async()=>{w.value=h.yamlData};return(_,r)=>(n(),a("div",se,[e("div",ne,[e("div",ae,[e("div",re,[e("h5",ie,F(h.title),1),r[0]||(r[0]=e("button",{type:"button",class:"btn-close","data-bs-dismiss":"modal","aria-label":"Close"},null,-1))]),e("div",de,[e("div",ue,[e("div",ce,[r[1]||(r[1]=e("h4",null,"YAML",-1)),e("div",null,[e("pre",null,F(w.value),1)])])])])])])]))}}),pe={class:"tab-pane active show",id:"tabs-pod"},ve={class:"card"},be={class:"card-body"},he={class:"mb-3"},ye={class:"mb-3"},fe={class:"mb-3"},ge=["onUpdate:modelValue"],_e=["onUpdate:modelValue"],we={class:"btn-list"},ke={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-plus",style:{margin:"0 !important"}},$e=["onClick"],xe={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-minus",style:{margin:"0 !important"}},Ce={class:"card mt-4"},Ue={class:"card-body"},Me={class:"mb-3"},Ve={class:"btn-list"},Pe={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-plus",style:{margin:"0 !important"}},qe=["onClick"],Se={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-minus",style:{margin:"0 !important"}},De={class:"row",style:{width:"68% !important"}},je={class:"col mt-4"},ze=["onUpdate:modelValue"],He={class:"col mt-4"},Le=["onUpdate:modelValue"],Be={class:"mb-3"},Re=["onUpdate:modelValue"],Ne=["onUpdate:modelValue"],Fe={class:"btn-list"},Ae=["onClick"],Ee={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-plus",style:{margin:"0 !important"}},Te=["onClick"],Ye={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-minus",style:{margin:"0 !important"}},Oe={class:"mb-3"},Ge={class:"btn-list"},Ie=["onClick"],Ke={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-plus",style:{margin:"0 !important"}},Je=["onClick"],Qe={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-minus",style:{margin:"0 !important"}},We={class:"row",style:{width:"68% !important"}},Xe={class:"col mt-4"},Ze=["onUpdate:modelValue"],et={class:"col mt-4"},tt=["onUpdate:modelValue"],lt={class:"row",style:{width:"68% !important"}},ot={class:"col mt-4"},st=["onUpdate:modelValue"],nt={class:"col mt-4"},at=["onUpdate:modelValue"],rt={key:0,class:"border-bottom",style:{width:"100%","margin-top":"10px"}},it={class:"mb-3"},dt={class:"row",style:{width:"68% !important"}},ut={class:"col mt-4"},ct=["onUpdate:modelValue"],mt={class:"col mt-4"},pt=["onUpdate:modelValue"],vt={class:"row",style:{width:"68% !important"}},bt={class:"col mt-4"},ht=["onUpdate:modelValue"],yt={class:"col mt-4"},ft=["onUpdate:modelValue"],gt={key:0,class:"border-bottom",style:{width:"100%","margin-top":"10px"}},_t={class:"mb-3"},wt={class:"mt-4"},kt={class:"btn-list justify-content-end mt-4"},$t=B({__name:"podForm",setup(P){const h=O(),$=f(""),w=f({}),l=f({}),_=f([]),r=f({}),p=f([]),M=f(""),V=A(()=>{if(!l.value.name||l.value.name.trim()===""||!l.value.namespace||l.value.namespace.trim()==="")return!1;for(const i of p.value)if(!i.name||i.name.trim()===""||!i.image||i.image.trim()==="")return!1;return!0});G(async()=>{await L()});const L=()=>{$.value="Pod",l.value.name="",l.value.namespace="",_.value.push({key:"",value:""}),r.value={containers:[],restartPolicy:""},p.value.push({name:"",image:"",env:[{name:"",value:""}],ports:[{name:"",containerPort:"",hostPort:"",protocol:""}],resources:{limits:{memory:"",cpu:""},requests:{memory:"",cpu:""}}})},R=async()=>{if(!l.value.name||l.value.name.trim()===""){h.error("Please enter pod name.");const s=document.querySelector('input[v-model="metadata.name"]');s==null||s.focus();return}if(!l.value.namespace||l.value.namespace.trim()===""){h.error("Please enter namespace.");const s=document.querySelector('input[v-model="metadata.namespace"]');s==null||s.focus();return}for(let s=0;s(s[b.key]=b.value,s),{});l.value.labels=i,w.value.metadata=l.value,r.value.containers=p.value,w.value.spec=r.value;const{data:t}=await Z(w.value);M.value=t},E=()=>{_.value.push({key:"",value:""})},T=i=>{_.value.length!==1&&_.value.splice(i,1)},H=()=>{p.value.push({name:"",image:"",env:[{name:"",value:""}],ports:[{name:"",containerPort:"",hostPort:"",protocol:""}],resources:{limits:{memory:"",cpu:""},requests:{memory:"",cpu:""}}})},u=i=>{p.value.length!==1&&p.value.splice(i,1)},o=i=>{p.value[i].env.push({name:"",value:""})},U=(i,t)=>{p.value[i].env.length!==1&&p.value[i].env.splice(t,1)},x=i=>{p.value[i].ports.push({name:"",containerPort:"",hostPort:"",protocol:""})},k=(i,t)=>{p.value[i].ports.length!==1&&p.value[i].ports.splice(t,1)};return(i,t)=>(n(),a("div",pe,[e("div",ve,[t[9]||(t[9]=e("div",{class:"card-header"},[e("h3",{class:"card-title"},"Metadata Section")],-1)),e("div",be,[e("div",he,[t[4]||(t[4]=e("label",{class:"form-label required"},"- Name",-1)),c(e("input",{type:"text",class:"form-control w-33",name:"example-text-input","onUpdate:modelValue":t[0]||(t[0]=s=>l.value.name=s),placeholder:"pod-01"},null,512),[[m,l.value.name]])]),e("div",ye,[t[5]||(t[5]=e("label",{class:"form-label required"},"- Namespace",-1)),c(e("input",{type:"text",class:"form-control w-33",name:"example-text-input","onUpdate:modelValue":t[1]||(t[1]=s=>l.value.namespace=s),placeholder:"namespace"},null,512),[[m,l.value.namespace]])]),e("div",fe,[t[8]||(t[8]=e("label",{class:"form-label"},"- Labels",-1)),(n(!0),a(D,null,j(_.value,(s,b)=>(n(),a("div",{class:"generate-form",key:b},[c(e("input",{type:"text",class:"form-control w-33","onUpdate:modelValue":y=>s.key=y,placeholder:"key"},null,8,ge),[[m,s.key]]),c(e("input",{type:"text",class:"form-control w-33","onUpdate:modelValue":y=>s.value=y,placeholder:"value"},null,8,_e),[[m,s.value]]),e("div",we,[e("button",{class:"btn btn-primary",onClick:E,style:{"text-align":"center !important"}},[(n(),a("svg",ke,t[6]||(t[6]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M12 5l0 14"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))]),e("button",{class:"btn btn-primary",onClick:y=>T(b)},[(n(),a("svg",xe,t[7]||(t[7]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))],8,$e)])]))),128))])])]),e("div",Ce,[t[31]||(t[31]=e("div",{class:"card-header"},[e("h3",{class:"card-title"},"Spec Section")],-1)),e("div",Ue,[(n(!0),a(D,null,j(p.value,(s,b)=>(n(),a("div",{class:"mt-4",key:b},[e("div",Me,[e("div",Ve,[t[12]||(t[12]=e("label",{class:"form-label"},"Containers",-1)),e("button",{class:"btn btn-primary",onClick:H,style:{"text-align":"center !important"}},[(n(),a("svg",Pe,t[10]||(t[10]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M12 5l0 14"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))]),e("button",{class:"btn btn-primary",onClick:y=>u(b)},[(n(),a("svg",Se,t[11]||(t[11]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))],8,qe)]),e("div",De,[e("div",je,[t[13]||(t[13]=e("label",{class:"form-label required"},"- Name",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":y=>s.name=y},null,8,ze),[[m,s.name]])]),e("div",He,[t[14]||(t[14]=e("label",{class:"form-label required"},"- Image",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":y=>s.image=y},null,8,Le),[[m,s.image]])])])]),e("div",Be,[t[17]||(t[17]=e("label",{class:"form-label"},"- Env",-1)),(n(!0),a(D,null,j(s.env,(y,Y)=>(n(),a("div",{class:"generate-form",key:Y},[c(e("input",{type:"text",class:"form-control w-33","onUpdate:modelValue":g=>y.name=g,placeholder:"key"},null,8,Re),[[m,y.name]]),c(e("input",{type:"text",class:"form-control w-33","onUpdate:modelValue":g=>y.value=g,placeholder:"value"},null,8,Ne),[[m,y.value]]),e("div",Fe,[e("button",{class:"btn btn-primary",onClick:g=>o(b),style:{"text-align":"center !important"}},[(n(),a("svg",Ee,t[15]||(t[15]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M12 5l0 14"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))],8,Ae),e("button",{class:"btn btn-primary",onClick:g=>U(b,Y)},[(n(),a("svg",Ye,t[16]||(t[16]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))],8,Te)])]))),128))]),e("div",Oe,[(n(!0),a(D,null,j(s.ports,(y,Y)=>(n(),a("div",{class:"mt-4",key:Y},[e("div",Ge,[t[20]||(t[20]=e("label",{class:"form-label"},"Ports",-1)),e("button",{class:"btn btn-primary",onClick:g=>x(b),style:{"text-align":"center !important"}},[(n(),a("svg",Ke,t[18]||(t[18]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M12 5l0 14"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))],8,Ie),e("button",{class:"btn btn-primary",onClick:g=>k(b,Y)},[(n(),a("svg",Qe,t[19]||(t[19]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))],8,Je)]),e("div",We,[e("div",Xe,[t[21]||(t[21]=e("label",{class:"form-label"},"- Name",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":g=>y.name=g},null,8,Ze),[[m,y.name]])]),e("div",et,[t[22]||(t[22]=e("label",{class:"form-label"},"- Port",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":g=>y.containerPort=g},null,8,tt),[[m,y.containerPort]])])]),e("div",lt,[e("div",ot,[t[23]||(t[23]=e("label",{class:"form-label"},"- Protocol",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":g=>y.protocol=g},null,8,st),[[m,y.protocol]])]),e("div",nt,[t[24]||(t[24]=e("label",{class:"form-label"},"- Host Port",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":g=>y.hostPort=g},null,8,at),[[m,y.hostPort]])])]),s.ports.length>1?(n(),a("div",rt)):W("",!0)]))),128))]),e("div",it,[t[29]||(t[29]=e("div",{class:"btn-list"},[e("label",{class:"form-label"},"Resources")],-1)),e("div",dt,[e("div",ut,[t[25]||(t[25]=e("label",{class:"form-label"},"- Limits CPU",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":y=>s.resources.limits.cpu=y},null,8,ct),[[m,s.resources.limits.cpu]])]),e("div",mt,[t[26]||(t[26]=e("label",{class:"form-label"},"- Limits Memory",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":y=>s.resources.limits.memory=y},null,8,pt),[[m,s.resources.limits.memory]])])]),e("div",vt,[e("div",bt,[t[27]||(t[27]=e("label",{class:"form-label"},"- Requests CPU",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":y=>s.resources.requests.cpu=y},null,8,ht),[[m,s.resources.requests.cpu]])]),e("div",yt,[t[28]||(t[28]=e("label",{class:"form-label"},"- Requests Memory",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":y=>s.resources.requests.memory=y},null,8,ft),[[m,s.resources.requests.memory]])])])]),p.value.length>1?(n(),a("div",gt)):W("",!0)]))),128)),e("div",_t,[e("div",wt,[t[30]||(t[30]=e("label",{class:"form-label"},"- Restart Policy",-1)),c(e("input",{type:"text",class:"form-control w-33","onUpdate:modelValue":t[2]||(t[2]=s=>r.value.restartPolicy=s)},null,512),[[m,r.value.restartPolicy]])])])])]),e("div",kt,[e("a",{class:K(["btn btn-primary",{disabled:!V.value}]),onClick:t[3]||(t[3]=s=>V.value?R():null),"data-bs-toggle":"modal","data-bs-target":"#modal-pod"},"GENERATE",2)]),N(me,{"yaml-data":M.value,title:$.value},null,8,["yaml-data","title"])]))}}),xt=Q($t,[["__scopeId","data-v-89045615"]]),Ct={class:"modal",id:"modal-deploy",tabindex:"-1"},Ut={class:"modal-dialog modal-lg",role:"document"},Mt={class:"modal-content"},Vt={class:"modal-header"},Pt={class:"modal-title"},qt={class:"modal-body"},St={class:"card"},Dt={class:"card-body"},jt=B({__name:"deployModal",props:{title:{},yamlData:{}},setup(P){const h=P,$=A(()=>h.yamlData);I($,async()=>{await l()});const w=f(""),l=async()=>{w.value=h.yamlData};return(_,r)=>(n(),a("div",Ct,[e("div",Ut,[e("div",Mt,[e("div",Vt,[e("h5",Pt,F(h.title),1),r[0]||(r[0]=e("button",{type:"button",class:"btn-close","data-bs-dismiss":"modal","aria-label":"Close"},null,-1))]),e("div",qt,[e("div",St,[e("div",Dt,[r[1]||(r[1]=e("h4",null,"YAML",-1)),e("div",null,[e("pre",null,F(w.value),1)])])])])])])]))}}),zt={class:"tab-pane",id:"tabs-deployment"},Ht={class:"card"},Lt={class:"card-body"},Bt={class:"mb-3"},Rt={class:"mb-3"},Nt={class:"mb-3"},Ft=["onUpdate:modelValue"],At=["onUpdate:modelValue"],Et={class:"btn-list"},Tt={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-plus",style:{margin:"0 !important"}},Yt=["onClick"],Ot={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-minus",style:{margin:"0 !important"}},Gt={class:"card mt-4"},It={class:"card-body"},Kt={class:"mb-3"},Jt={class:"mb-3"},Qt=["onUpdate:modelValue"],Wt=["onUpdate:modelValue"],Xt={class:"btn-list"},Zt={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-plus",style:{margin:"0 !important"}},el=["onClick"],tl={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-minus",style:{margin:"0 !important"}},ll={class:"mb-3"},ol=["onUpdate:modelValue"],sl=["onUpdate:modelValue"],nl={class:"btn-list"},al={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-plus",style:{margin:"0 !important"}},rl=["onClick"],il={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-minus",style:{margin:"0 !important"}},dl={class:"mb-3"},ul={class:"btn-list"},cl={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-plus",style:{margin:"0 !important"}},ml=["onClick"],pl={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-minus",style:{margin:"0 !important"}},vl={class:"row",style:{width:"68% !important"}},bl={class:"col mt-4"},hl=["onUpdate:modelValue"],yl={class:"col mt-4"},fl=["onUpdate:modelValue"],gl={class:"mb-3"},_l=["onUpdate:modelValue"],wl={class:"btn-list"},kl=["onClick"],$l={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-plus",style:{margin:"0 !important"}},xl=["onClick"],Cl={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-minus",style:{margin:"0 !important"}},Ul={class:"mb-3"},Ml=["onUpdate:modelValue"],Vl=["onUpdate:modelValue"],Pl={class:"btn-list"},ql=["onClick"],Sl={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-plus",style:{margin:"0 !important"}},Dl=["onClick"],jl={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-minus",style:{margin:"0 !important"}},zl={class:"btn-list justify-content-end mt-4"},Hl=B({__name:"deploymentForm",setup(P){const h=O(),$=f(""),w=f({}),l=f({}),_=f([]),r=f([]),p=f([]),M=f({}),V=f([]),L=f(""),R=A(()=>{if(!l.value.name||l.value.name.trim()===""||!l.value.namespace||l.value.namespace.trim()==="")return!1;for(const g of V.value)if(!g.name||g.name.trim()===""||!g.image||g.image.trim()==="")return!1;return!0});G(async()=>{await E()});const E=()=>{$.value="Deployment",l.value.name="",l.value.namespace="",_.value.push({key:"",value:""}),r.value.push({key:"",value:""}),p.value.push({key:"",value:""}),M.value={replicas:"",selector:{matchLabels:{}},template:{metadata:{labels:{}},spec:{containers:[]}}},V.value.push({name:"",image:"",env:[{name:"",value:""}],ports:[{containerPort:""}]})},T=async()=>{if(!l.value.name||l.value.name.trim()===""){h.error("Please enter deployment name.");const v=document.querySelector('input[v-model="metadata.name"]');v==null||v.focus();return}if(!l.value.namespace||l.value.namespace.trim()===""){h.error("Please enter namespace.");const v=document.querySelector('input[v-model="metadata.namespace"]');v==null||v.focus();return}for(let v=0;v(v[q.key]=q.value,v),{}),d=r.value.reduce((v,q)=>(v[q.key]=q.value,v),{}),C=p.value.reduce((v,q)=>(v[q.key]=q.value,v),{});l.value.labels=g,w.value.metadata=l.value,M.value.selector.matchLabels=d,M.value.template.metadata.labels=C,M.value.template.spec.containers=V.value,w.value.spec=M.value,console.log("deployFormData.value : ",w.value);const{data:S}=await le(w.value);L.value=S},H=()=>{_.value.push({key:"",value:""})},u=g=>{_.value.length!==1&&_.value.splice(g,1)},o=()=>{r.value.push({key:"",value:""})},U=g=>{r.value.length!==1&&r.value.splice(g,1)},x=()=>{p.value.push({key:"",value:""})},k=g=>{p.value.length!==1&&p.value.splice(g,1)},i=()=>{V.value.push({name:"",image:"",env:[{name:"",value:""}],ports:[{containerPort:""}]})},t=g=>{V.value.length!==1&&V.value.splice(g,1)},s=g=>{V.value[g].env.push({name:"",value:""})},b=(g,d)=>{V.value[g].env.length!==1&&V.value[g].env.splice(d,1)},y=g=>{V.value[g].ports.push({containerPort:""})},Y=(g,d)=>{V.value[g].ports.length!==1&&V.value[g].ports.splice(d,1)};return(g,d)=>(n(),a("div",zt,[e("div",Ht,[d[9]||(d[9]=e("div",{class:"card-header"},[e("h3",{class:"card-title"},"Metadata Section")],-1)),e("div",Lt,[e("div",Bt,[d[4]||(d[4]=e("label",{class:"form-label required"},"- Name",-1)),c(e("input",{type:"text",class:"form-control w-33",name:"example-text-input","onUpdate:modelValue":d[0]||(d[0]=C=>l.value.name=C),placeholder:"deployment-01"},null,512),[[m,l.value.name]])]),e("div",Rt,[d[5]||(d[5]=e("label",{class:"form-label required"},"- Namespace",-1)),c(e("input",{type:"text",class:"form-control w-33",name:"example-text-input","onUpdate:modelValue":d[1]||(d[1]=C=>l.value.namespace=C),placeholder:"namespace"},null,512),[[m,l.value.namespace]])]),e("div",Nt,[d[8]||(d[8]=e("label",{class:"form-label"},"- Labels",-1)),(n(!0),a(D,null,j(_.value,(C,S)=>(n(),a("div",{class:"generate-form",key:S},[c(e("input",{type:"text",class:"form-control w-33","onUpdate:modelValue":v=>C.key=v,placeholder:"key"},null,8,Ft),[[m,C.key]]),c(e("input",{type:"text",class:"form-control w-33","onUpdate:modelValue":v=>C.value=v,placeholder:"value"},null,8,At),[[m,C.value]]),e("div",Et,[e("button",{class:"btn btn-primary",onClick:H,style:{"text-align":"center !important"}},[(n(),a("svg",Tt,d[6]||(d[6]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M12 5l0 14"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))]),e("button",{class:"btn btn-primary",onClick:v=>u(S)},[(n(),a("svg",Ot,d[7]||(d[7]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))],8,Yt)])]))),128))])])]),e("div",Gt,[d[29]||(d[29]=e("div",{class:"card-header"},[e("h3",{class:"card-title"},"Spec Section")],-1)),e("div",It,[e("div",Kt,[d[10]||(d[10]=e("label",{class:"form-label"},"- Replicas",-1)),c(e("input",{type:"text",class:"form-control w-33","onUpdate:modelValue":d[2]||(d[2]=C=>M.value.replicas=C)},null,512),[[m,M.value.replicas]])]),e("div",Jt,[d[13]||(d[13]=e("label",{class:"form-label"},"- Match Labels",-1)),(n(!0),a(D,null,j(r.value,(C,S)=>(n(),a("div",{class:"generate-form",key:S},[c(e("input",{type:"text",class:"form-control w-33","onUpdate:modelValue":v=>C.key=v,placeholder:"key"},null,8,Qt),[[m,C.key]]),c(e("input",{type:"text",class:"form-control w-33","onUpdate:modelValue":v=>C.value=v,placeholder:"value"},null,8,Wt),[[m,C.value]]),e("div",Xt,[e("button",{class:"btn btn-primary",onClick:o,style:{"text-align":"center !important"}},[(n(),a("svg",Zt,d[11]||(d[11]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M12 5l0 14"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))]),e("button",{class:"btn btn-primary",onClick:v=>U(S)},[(n(),a("svg",tl,d[12]||(d[12]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))],8,el)])]))),128))]),d[28]||(d[28]=e("div",{class:"mb-3"},[e("label",{class:"form-label"},"Template")],-1)),e("div",ll,[d[16]||(d[16]=e("div",{class:"btn-list"},[e("label",{class:"form-label"},"- Labels")],-1)),(n(!0),a(D,null,j(p.value,(C,S)=>(n(),a("div",{class:"generate-form",key:S},[c(e("input",{type:"text",class:"form-control w-33","onUpdate:modelValue":v=>C.key=v,placeholder:"key"},null,8,ol),[[m,C.key]]),c(e("input",{type:"text",class:"form-control w-33","onUpdate:modelValue":v=>C.value=v,placeholder:"value"},null,8,sl),[[m,C.value]]),e("div",nl,[e("button",{class:"btn btn-primary",onClick:x,style:{"text-align":"center !important"}},[(n(),a("svg",al,d[14]||(d[14]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M12 5l0 14"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))]),e("button",{class:"btn btn-primary",onClick:v=>k(S)},[(n(),a("svg",il,d[15]||(d[15]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))],8,rl)])]))),128))]),(n(!0),a(D,null,j(V.value,(C,S)=>(n(),a("div",{key:S},[e("div",dl,[e("div",ul,[d[19]||(d[19]=e("label",{class:"form-label"},"Containers",-1)),e("button",{class:"btn btn-primary",onClick:i,style:{"text-align":"center !important"}},[(n(),a("svg",cl,d[17]||(d[17]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M12 5l0 14"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))]),e("button",{class:"btn btn-primary",onClick:v=>t(S)},[(n(),a("svg",pl,d[18]||(d[18]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))],8,ml)]),e("div",vl,[e("div",bl,[d[20]||(d[20]=e("label",{class:"form-label required"},"- Name",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":v=>C.name=v},null,8,hl),[[m,C.name]])]),e("div",yl,[d[21]||(d[21]=e("label",{class:"form-label required"},"- Image",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":v=>C.image=v},null,8,fl),[[m,C.image]])])])]),e("div",gl,[d[24]||(d[24]=e("label",{class:"form-label"},"- Port",-1)),(n(!0),a(D,null,j(C.ports,(v,q)=>(n(),a("div",{class:"generate-form",key:q},[c(e("input",{type:"text",class:"form-control w-33","onUpdate:modelValue":z=>v.containerPort=z,placeholder:"value"},null,8,_l),[[m,v.containerPort]]),e("div",wl,[e("button",{class:"btn btn-primary",onClick:z=>y(S),style:{"text-align":"center !important"}},[(n(),a("svg",$l,d[22]||(d[22]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M12 5l0 14"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))],8,kl),e("button",{class:"btn btn-primary",onClick:z=>Y(S,q)},[(n(),a("svg",Cl,d[23]||(d[23]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))],8,xl)])]))),128))]),e("div",Ul,[d[27]||(d[27]=e("label",{class:"form-label"},"- Env",-1)),(n(!0),a(D,null,j(C.env,(v,q)=>(n(),a("div",{class:"generate-form",key:q},[c(e("input",{type:"text",class:"form-control w-33","onUpdate:modelValue":z=>v.name=z,placeholder:"key"},null,8,Ml),[[m,v.name]]),c(e("input",{type:"text",class:"form-control w-33","onUpdate:modelValue":z=>v.value=z,placeholder:"value"},null,8,Vl),[[m,v.value]]),e("div",Pl,[e("button",{class:"btn btn-primary",onClick:z=>s(S),style:{"text-align":"center !important"}},[(n(),a("svg",Sl,d[25]||(d[25]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M12 5l0 14"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))],8,ql),e("button",{class:"btn btn-primary",onClick:z=>b(S,q)},[(n(),a("svg",jl,d[26]||(d[26]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))],8,Dl)])]))),128))])]))),128))])]),e("div",zl,[e("a",{class:K(["btn btn-primary",{disabled:!R.value}]),onClick:d[3]||(d[3]=C=>R.value?T():null),"data-bs-toggle":"modal","data-bs-target":"#modal-deploy"},"GENERATE",2)]),N(jt,{"yaml-data":L.value,title:$.value},null,8,["yaml-data","title"])]))}}),Ll=Q(Hl,[["__scopeId","data-v-10151163"]]),Bl={class:"modal",id:"modal-service",tabindex:"-1"},Rl={class:"modal-dialog modal-lg",role:"document"},Nl={class:"modal-content"},Fl={class:"modal-header"},Al={class:"modal-title"},El={class:"modal-body"},Tl={class:"card"},Yl={class:"card-body"},Ol=B({__name:"servcieModal",props:{title:{},yamlData:{}},setup(P){const h=P,$=A(()=>h.yamlData);I($,async()=>{await l()});const w=f(""),l=async()=>{w.value=h.yamlData};return(_,r)=>(n(),a("div",Bl,[e("div",Rl,[e("div",Nl,[e("div",Fl,[e("h5",Al,F(h.title),1),r[0]||(r[0]=e("button",{type:"button",class:"btn-close","data-bs-dismiss":"modal","aria-label":"Close"},null,-1))]),e("div",El,[e("div",Tl,[e("div",Yl,[r[1]||(r[1]=e("h4",null,"YAML",-1)),e("div",null,[e("pre",null,F(w.value),1)])])])])])])]))}}),Gl={class:"tab-pane",id:"tabs-service"},Il={class:"card"},Kl={class:"card-body"},Jl={class:"mb-3"},Ql={class:"mb-3"},Wl={class:"mb-3"},Xl=["onUpdate:modelValue"],Zl=["onUpdate:modelValue"],eo={class:"btn-list"},to={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-plus",style:{margin:"0 !important"}},lo=["onClick"],oo={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-minus",style:{margin:"0 !important"}},so={class:"card mt-4"},no={class:"card-body"},ao={class:"mb-3"},ro=["onUpdate:modelValue"],io=["onUpdate:modelValue"],uo={class:"btn-list"},co={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-plus",style:{margin:"0 !important"}},mo=["onClick"],po={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-minus",style:{margin:"0 !important"}},vo={class:"mb-3"},bo={class:"btn-list"},ho={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-plus",style:{margin:"0 !important"}},yo=["onClick"],fo={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-minus",style:{margin:"0 !important"}},go={class:"row",style:{width:"68% !important"}},_o={class:"col mt-4"},wo=["onUpdate:modelValue"],ko={class:"col mt-4"},$o=["onUpdate:modelValue"],xo={class:"row",style:{width:"68% !important"}},Co={class:"col mt-4"},Uo=["onUpdate:modelValue"],Mo={class:"col mt-4"},Vo=["onUpdate:modelValue"],Po={key:0,class:"border-bottom",style:{width:"100%","margin-top":"10px"}},qo={class:"row",style:{width:"68% !important"}},So={class:"col mt-4"},Do={class:"btn-list justify-content-end mt-4"},jo=B({__name:"serviceForm",setup(P){const h=O(),$=f(""),w=f({}),l=f({}),_=f([]),r=f({}),p=f([]),M=f([]);f("");const V=f(""),L=A(()=>{if(!l.value.name||l.value.name.trim()===""||!l.value.namespace||l.value.namespace.trim()==="")return!1;for(const k of M.value)if(!k.port||k.port.trim()===""||!k.targetPort||k.targetPort.trim()==="")return!1;return!0});G(async()=>{await R()});const R=()=>{$.value="Service",l.value={name:"",namespace:"",labels:{}},r.value={selector:{},ports:[],type:""},_.value.push({key:"",value:""}),p.value.push({key:"",value:""}),M.value.push({protocol:"",port:"",targetPort:"",nodePort:""})},E=async()=>{if(!l.value.name||l.value.name.trim()===""){h.error("Please enter service name.");const s=document.querySelector('input[v-model="metadata.name"]');s==null||s.focus();return}if(!l.value.namespace||l.value.namespace.trim()===""){h.error("Please enter namespace.");const s=document.querySelector('input[v-model="metadata.namespace"]');s==null||s.focus();return}for(let s=0;s(s[b.key]=b.value,s),{});l.value.labels=k,w.value.metadata=l.value;const i=p.value.reduce((s,b)=>(s[b.key]=b.value,s),{});r.value.selector=i,r.value.ports=M.value,w.value.spec=r.value;const{data:t}=await ee(w.value);V.value=t},T=()=>{_.value.push({key:"",value:""})},H=k=>{_.value.length!==1&&_.value.splice(k,1)},u=()=>{p.value.push({key:"",value:""})},o=k=>{p.value.length!==1&&p.value.splice(k,1)},U=()=>{M.value.push({protocol:"",port:"",targetPort:"",nodePort:""})},x=k=>{M.value.length!==1&&M.value.splice(k,1)};return(k,i)=>(n(),a("div",Gl,[e("div",Il,[i[9]||(i[9]=e("div",{class:"card-header"},[e("h3",{class:"card-title"},"Metadata Section")],-1)),e("div",Kl,[e("div",Jl,[i[4]||(i[4]=e("label",{class:"form-label required"},"- Name",-1)),c(e("input",{type:"text",class:"form-control w-33",name:"example-text-input","onUpdate:modelValue":i[0]||(i[0]=t=>l.value.name=t),placeholder:"name-01"},null,512),[[m,l.value.name]])]),e("div",Ql,[i[5]||(i[5]=e("label",{class:"form-label required"},"- Namespace",-1)),c(e("input",{type:"text",class:"form-control w-33",name:"example-text-input","onUpdate:modelValue":i[1]||(i[1]=t=>l.value.namespace=t),placeholder:"namespace"},null,512),[[m,l.value.namespace]])]),e("div",Wl,[i[8]||(i[8]=e("label",{class:"form-label"},"- Labels",-1)),(n(!0),a(D,null,j(_.value,(t,s)=>(n(),a("div",{class:"generate-form",key:s},[c(e("input",{type:"text",class:"form-control w-33",name:"example-password-input","onUpdate:modelValue":b=>t.key=b,placeholder:"key"},null,8,Xl),[[m,t.key]]),c(e("input",{type:"text",class:"form-control w-33",name:"example-password-input","onUpdate:modelValue":b=>t.value=b,placeholder:"value"},null,8,Zl),[[m,t.value]]),e("div",eo,[e("button",{class:"btn btn-primary",onClick:T,style:{"text-align":"center !important"}},[(n(),a("svg",to,i[6]||(i[6]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M12 5l0 14"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))]),e("button",{class:"btn btn-primary",onClick:b=>H(s)},[(n(),a("svg",oo,i[7]||(i[7]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))],8,lo)])]))),128))])])]),e("div",so,[i[21]||(i[21]=e("div",{class:"card-header"},[e("h3",{class:"card-title"},"Spec Section")],-1)),e("div",no,[e("div",ao,[i[12]||(i[12]=e("label",{class:"form-label"},"- Selector",-1)),(n(!0),a(D,null,j(p.value,(t,s)=>(n(),a("div",{class:"generate-form",key:s},[c(e("input",{type:"text",class:"form-control w-33",name:"example-password-input","onUpdate:modelValue":b=>t.key=b,placeholder:"key"},null,8,ro),[[m,t.key]]),c(e("input",{type:"text",class:"form-control w-33",name:"example-password-input","onUpdate:modelValue":b=>t.value=b,placeholder:"value"},null,8,io),[[m,t.value]]),e("div",uo,[e("button",{class:"btn btn-primary",onClick:u,style:{"text-align":"center !important"}},[(n(),a("svg",co,i[10]||(i[10]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M12 5l0 14"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))]),e("button",{class:"btn btn-primary",onClick:b=>o(s)},[(n(),a("svg",po,i[11]||(i[11]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))],8,mo)])]))),128))]),e("div",vo,[(n(!0),a(D,null,j(M.value,(t,s)=>(n(),a("div",{class:"mt-4",key:s},[e("div",bo,[i[15]||(i[15]=e("label",{class:"form-label"},"Ports",-1)),e("button",{class:"btn btn-primary",onClick:U,style:{"text-align":"center !important"}},[(n(),a("svg",ho,i[13]||(i[13]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M12 5l0 14"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))]),e("button",{class:"btn btn-primary",onClick:b=>x(s)},[(n(),a("svg",fo,i[14]||(i[14]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))],8,yo)]),e("div",go,[e("div",_o,[i[16]||(i[16]=e("label",{class:"form-label required"},"- Port",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":b=>t.port=b},null,8,wo),[[m,t.port]])]),e("div",ko,[i[17]||(i[17]=e("label",{class:"form-label required"},"- Target Port",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":b=>t.targetPort=b},null,8,$o),[[m,t.targetPort]])])]),e("div",xo,[e("div",Co,[i[18]||(i[18]=e("label",{class:"form-label"},"- Protocol",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":b=>t.protocol=b},null,8,Uo),[[m,t.protocol]])]),e("div",Mo,[i[19]||(i[19]=e("label",{class:"form-label"},"- Node Port",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":b=>t.nodePort=b},null,8,Vo),[[m,t.nodePort]])])]),M.value.length>1?(n(),a("div",Po)):W("",!0)]))),128)),e("div",qo,[e("div",So,[i[20]||(i[20]=e("label",{class:"form-label"},"- Type",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":i[2]||(i[2]=t=>r.value.type=t)},null,512),[[m,r.value.type]])])])])])]),e("div",Do,[e("a",{class:K(["btn btn-primary",{disabled:!L.value}]),onClick:i[3]||(i[3]=t=>L.value?E():null),"data-bs-toggle":"modal","data-bs-target":"#modal-service"},"GENERATE",2)]),N(Ol,{"yaml-data":V.value,title:$.value},null,8,["yaml-data","title"])]))}}),zo=Q(jo,[["__scopeId","data-v-a6f75123"]]),Ho={class:"modal",id:"modal-yaml",tabindex:"-1"},Lo={class:"modal-dialog modal-lg",role:"document"},Bo={class:"modal-content"},Ro={class:"modal-header"},No={class:"modal-title"},Fo={class:"modal-body"},Ao={class:"card"},Eo={class:"card-body"},To=B({__name:"yamlModal",props:{title:{},yamlData:{}},setup(P){const h=P,$=A(()=>h.yamlData);I($,async()=>{await l()});const w=f(""),l=async()=>{w.value=h.yamlData};return(_,r)=>(n(),a("div",Ho,[e("div",Lo,[e("div",Bo,[e("div",Ro,[e("h5",No,F(h.title),1),r[0]||(r[0]=e("button",{type:"button",class:"btn-close","data-bs-dismiss":"modal","aria-label":"Close"},null,-1))]),e("div",Fo,[e("div",Ao,[e("div",Eo,[r[1]||(r[1]=e("h4",null,"YAML",-1)),e("div",null,[e("pre",null,F(w.value),1)])])])])])])]))}}),Yo={class:"tab-pane",id:"tabs-hpa"},Oo={class:"card"},Go={class:"card-body"},Io={class:"mb-3"},Ko={class:"mb-3"},Jo={class:"mb-3"},Qo=["onUpdate:modelValue"],Wo=["onUpdate:modelValue"],Xo={class:"btn-list"},Zo={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-plus",style:{margin:"0 !important"}},es=["onClick"],ts={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-minus",style:{margin:"0 !important"}},ls={class:"card mt-4"},os={class:"card-body"},ss={class:"row",style:{width:"68% !important"}},ns={class:"col"},as={class:"col"},rs={class:"row",style:{width:"68% !important"}},is={class:"col"},ds={class:"row",style:{width:"68% !important"}},us={class:"col"},cs={class:"row",style:{width:"68% !important"}},ms={class:"col"},ps={class:"row",style:{width:"68% !important"}},vs={class:"col"},bs={class:"btn-list justify-content-end mt-4"},hs=B({__name:"hpaForm",setup(P){const h=O(),$=f(""),w=f({}),l=f({}),_=f([]),r=f({}),p=f({}),M=f(""),V=A(()=>!(!l.value.name||l.value.name.trim()===""||!l.value.namespace||l.value.namespace.trim()===""||!p.value.apiVersion||p.value.apiVersion.trim()===""||!p.value.kind||p.value.kind.trim()===""||!p.value.name||p.value.name.trim()===""||!r.value.minReplicas||r.value.minReplicas.trim()===""||!r.value.maxReplicas||r.value.maxReplicas.trim()===""||!r.value.targetCPUUtilizationPercentage||r.value.targetCPUUtilizationPercentage.trim()===""));G(async()=>{await L()});const L=()=>{$.value="HPA",l.value={name:"",namespace:"",labels:{}},_.value.push({key:"",value:""}),r.value={scaleTargetRef:{},minReplicas:"",maxReplicas:"",targetCPUUtilizationPercentage:""},p.value={apiVersion:"",kind:"",name:""}},R=async()=>{if(!l.value.name||l.value.name.trim()===""){h.error("Please enter HPA name.");const o=document.querySelector('input[v-model="metadata.name"]');o==null||o.focus();return}if(!l.value.namespace||l.value.namespace.trim()===""){h.error("Please enter namespace.");const o=document.querySelector('input[v-model="metadata.namespace"]');o==null||o.focus();return}if(!p.value.apiVersion||p.value.apiVersion.trim()===""){h.error("Please enter API version.");const o=document.querySelector('input[v-model="scaleTargetRef.apiVersion"]');o==null||o.focus();return}if(!p.value.kind||p.value.kind.trim()===""){h.error("Please enter kind.");const o=document.querySelector('input[v-model="scaleTargetRef.kind"]');o==null||o.focus();return}if(!p.value.name||p.value.name.trim()===""){h.error("Please enter target name.");const o=document.querySelector('input[v-model="scaleTargetRef.name"]');o==null||o.focus();return}if(!r.value.minReplicas||r.value.minReplicas.trim()===""){h.error("Please enter min replicas.");const o=document.querySelector('input[v-model="spec.minReplicas"]');o==null||o.focus();return}if(!r.value.maxReplicas||r.value.maxReplicas.trim()===""){h.error("Please enter max replicas.");const o=document.querySelector('input[v-model="spec.maxReplicas"]');o==null||o.focus();return}if(!r.value.targetCPUUtilizationPercentage||r.value.targetCPUUtilizationPercentage.trim()===""){h.error("Please enter CPU percentage.");const o=document.querySelector('input[v-model="spec.targetCPUUtilizationPercentage"]');o==null||o.focus();return}const H=_.value.reduce((o,U)=>(o[U.key]=U.value,o),{});l.value.labels=H,r.value.scaleTargetRef=p.value,w.value.metadata=l.value,w.value.spec=r.value;const{data:u}=await te(w.value);M.value=u},E=()=>{_.value.push({key:"",value:""})},T=H=>{_.value.length!==1&&_.value.splice(H,1)};return(H,u)=>(n(),a("div",Yo,[e("div",Oo,[u[14]||(u[14]=e("div",{class:"card-header"},[e("h3",{class:"card-title"},"Metadata Section")],-1)),e("div",Go,[e("div",Io,[u[9]||(u[9]=e("label",{class:"form-label required"},"- Name",-1)),c(e("input",{type:"text",class:"form-control w-33",name:"example-text-input","onUpdate:modelValue":u[0]||(u[0]=o=>l.value.name=o),placeholder:"name"},null,512),[[m,l.value.name]])]),e("div",Ko,[u[10]||(u[10]=e("label",{class:"form-label required"},"- Namespace",-1)),c(e("input",{type:"text",class:"form-control w-33",name:"example-text-input","onUpdate:modelValue":u[1]||(u[1]=o=>l.value.namespace=o),placeholder:"namespace"},null,512),[[m,l.value.namespace]])]),e("div",Jo,[u[13]||(u[13]=e("label",{class:"form-label"},"- Labels",-1)),(n(!0),a(D,null,j(_.value,(o,U)=>(n(),a("div",{class:"generate-form",key:U},[c(e("input",{type:"text",class:"form-control w-33",name:"example-password-input","onUpdate:modelValue":x=>o.key=x,placeholder:"key"},null,8,Qo),[[m,o.key]]),c(e("input",{type:"text",class:"form-control w-33",name:"example-password-input","onUpdate:modelValue":x=>o.value=x,placeholder:"value"},null,8,Wo),[[m,o.value]]),e("div",Xo,[e("button",{class:"btn btn-primary",onClick:E,style:{"text-align":"center !important"}},[(n(),a("svg",Zo,u[11]||(u[11]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M12 5l0 14"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))]),e("button",{class:"btn btn-primary",onClick:x=>T(U)},[(n(),a("svg",ts,u[12]||(u[12]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))],8,es)])]))),128))])])]),e("div",ls,[u[22]||(u[22]=e("div",{class:"card-header"},[e("h3",{class:"card-title"},"Spec Section")],-1)),e("div",os,[u[21]||(u[21]=e("div",{class:"mb-3"},[e("label",{class:"form-label"},"Scale Target")],-1)),e("div",ss,[e("div",ns,[u[15]||(u[15]=e("label",{class:"form-label required"},"- Api Version",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":u[2]||(u[2]=o=>p.value.apiVersion=o)},null,512),[[m,p.value.apiVersion]])]),e("div",as,[u[16]||(u[16]=e("label",{class:"form-label required"},"- Kind",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":u[3]||(u[3]=o=>p.value.kind=o)},null,512),[[m,p.value.kind]])])]),e("div",rs,[e("div",is,[u[17]||(u[17]=e("label",{class:"form-label required"},"- Name",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":u[4]||(u[4]=o=>p.value.name=o)},null,512),[[m,p.value.name]])])]),e("div",ds,[e("div",us,[u[18]||(u[18]=e("label",{class:"form-label required"},"- Min Replicas",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":u[5]||(u[5]=o=>r.value.minReplicas=o)},null,512),[[m,r.value.minReplicas]])])]),e("div",cs,[e("div",ms,[u[19]||(u[19]=e("label",{class:"form-label required"},"- Max Replicas",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":u[6]||(u[6]=o=>r.value.maxReplicas=o)},null,512),[[m,r.value.maxReplicas]])])]),e("div",ps,[e("div",vs,[u[20]||(u[20]=e("label",{class:"form-label required"},"- CPU Percentage",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":u[7]||(u[7]=o=>r.value.targetCPUUtilizationPercentage=o)},null,512),[[m,r.value.targetCPUUtilizationPercentage]])])])])]),e("div",bs,[e("a",{class:K(["btn btn-primary",{disabled:!V.value}]),onClick:u[8]||(u[8]=o=>V.value?R():null),"data-bs-toggle":"modal","data-bs-target":"#modal-yaml"},"GENERATE",2)]),N(To,{"yaml-data":M.value,title:$.value},null,8,["yaml-data","title"])]))}}),ys=Q(hs,[["__scopeId","data-v-eeb9f8ea"]]),fs={class:"modal",id:"modal-config-map",tabindex:"-1"},gs={class:"modal-dialog modal-lg",role:"document"},_s={class:"modal-content"},ws={class:"modal-header"},ks={class:"modal-title"},$s={class:"modal-body"},xs={class:"card"},Cs={class:"card-body"},Us=B({__name:"configMapModal",props:{title:{},yamlData:{}},setup(P){const h=P,$=A(()=>h.yamlData);I($,async()=>{await l()});const w=f(""),l=async()=>{w.value=h.yamlData};return(_,r)=>(n(),a("div",fs,[e("div",gs,[e("div",_s,[e("div",ws,[e("h5",ks,F(h.title),1),r[0]||(r[0]=e("button",{type:"button",class:"btn-close","data-bs-dismiss":"modal","aria-label":"Close"},null,-1))]),e("div",$s,[e("div",xs,[e("div",Cs,[r[1]||(r[1]=e("h4",null,"YAML",-1)),e("div",null,[e("pre",null,F(w.value),1)])])])])])])]))}}),Ms={class:"tab-pane",id:"tabs-configMap"},Vs={class:"card"},Ps={class:"card-body"},qs={class:"mb-3"},Ss={class:"mb-3"},Ds={class:"mb-3"},js=["onUpdate:modelValue"],zs=["onUpdate:modelValue"],Hs={class:"btn-list"},Ls={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-plus",style:{margin:"0 !important"}},Bs=["onClick"],Rs={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-minus",style:{margin:"0 !important"}},Ns={class:"card mt-4"},Fs={class:"card-body"},As={class:"mb-3"},Es=["onUpdate:modelValue"],Ts=["onUpdate:modelValue"],Ys={class:"btn-list"},Os={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-plus",style:{margin:"0 !important"}},Gs=["onClick"],Is={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-minus",style:{margin:"0 !important"}},Ks={class:"btn-list justify-content-end mt-4"},Js=B({__name:"configmapForm",setup(P){const h=O(),$=f(""),w=f({}),l=f({}),_=f([]),r=f([]),p=f(""),M=A(()=>!(!l.value.name||l.value.name.trim()===""||!l.value.namespace||l.value.namespace.trim()===""));G(async()=>{await V()});const V=()=>{$.value="ConfigMap",l.value={name:"",namespace:"",labels:{}},_.value.push({key:"",value:""}),r.value.push({key:"",value:""})},L=async()=>{if(!l.value.name||l.value.name.trim()===""){h.error("Please enter ConfigMap name.");const x=document.querySelector('input[v-model="metadata.name"]');x==null||x.focus();return}if(!l.value.namespace||l.value.namespace.trim()===""){h.error("Please enter namespace.");const x=document.querySelector('input[v-model="metadata.namespace"]');x==null||x.focus();return}const u=_.value.reduce((x,k)=>(x[k.key]=k.value,x),{});l.value.labels=u;const o=r.value.reduce((x,k)=>(x[k.key]=k.value,x),{});w.value.metadata=l.value,w.value.data=o;const{data:U}=await oe(w.value);p.value=U},R=()=>{_.value.push({key:"",value:""})},E=u=>{_.value.length!==1&&_.value.splice(u,1)},T=()=>{r.value.push({key:"",value:""})},H=u=>{r.value.length!==1&&r.value.splice(u,1)};return(u,o)=>(n(),a("div",Ms,[e("div",Vs,[o[8]||(o[8]=e("div",{class:"card-header"},[e("h3",{class:"card-title"},"Metadata Section")],-1)),e("div",Ps,[e("div",qs,[o[3]||(o[3]=e("label",{class:"form-label required"},"- Name",-1)),c(e("input",{type:"text",class:"form-control w-33",name:"example-text-input","onUpdate:modelValue":o[0]||(o[0]=U=>l.value.name=U),placeholder:"configMap-01"},null,512),[[m,l.value.name]])]),e("div",Ss,[o[4]||(o[4]=e("label",{class:"form-label required"},"- Namespace",-1)),c(e("input",{type:"text",class:"form-control w-33",name:"example-text-input","onUpdate:modelValue":o[1]||(o[1]=U=>l.value.namespace=U),placeholder:"namespace"},null,512),[[m,l.value.namespace]])]),e("div",Ds,[o[7]||(o[7]=e("label",{class:"form-label"},"- Labels",-1)),(n(!0),a(D,null,j(_.value,(U,x)=>(n(),a("div",{class:"generate-form",key:x},[c(e("input",{type:"text",class:"form-control w-33",name:"example-password-input","onUpdate:modelValue":k=>U.key=k,placeholder:"key"},null,8,js),[[m,U.key]]),c(e("input",{type:"text",class:"form-control w-33",name:"example-password-input","onUpdate:modelValue":k=>U.value=k,placeholder:"value"},null,8,zs),[[m,U.value]]),e("div",Hs,[e("button",{class:"btn btn-primary",onClick:R,style:{"text-align":"center !important"}},[(n(),a("svg",Ls,o[5]||(o[5]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M12 5l0 14"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))]),e("button",{class:"btn btn-primary",onClick:k=>E(x)},[(n(),a("svg",Rs,o[6]||(o[6]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))],8,Bs)])]))),128))])])]),e("div",Ns,[o[12]||(o[12]=e("div",{class:"card-header"},[e("h3",{class:"card-title"},"Spec Section")],-1)),e("div",Fs,[e("div",As,[o[11]||(o[11]=e("label",{class:"form-label"},"- Data",-1)),(n(!0),a(D,null,j(r.value,(U,x)=>(n(),a("div",{class:"generate-form",key:x},[c(e("input",{type:"text",class:"form-control w-33",name:"example-password-input","onUpdate:modelValue":k=>U.key=k,placeholder:"key"},null,8,Es),[[m,U.key]]),c(e("input",{type:"text",class:"form-control w-33",name:"example-password-input","onUpdate:modelValue":k=>U.value=k,placeholder:"value"},null,8,Ts),[[m,U.value]]),e("div",Ys,[e("button",{class:"btn btn-primary",onClick:T,style:{"text-align":"center !important"}},[(n(),a("svg",Os,o[9]||(o[9]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M12 5l0 14"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))]),e("button",{class:"btn btn-primary",onClick:k=>H(x)},[(n(),a("svg",Is,o[10]||(o[10]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))],8,Gs)])]))),128))])])]),e("div",Ks,[e("a",{class:K(["btn btn-primary",{disabled:!M.value}]),onClick:o[2]||(o[2]=U=>M.value?L():null),"data-bs-toggle":"modal","data-bs-target":"#modal-config-map"},"GENERATE",2)]),N(Us,{"yaml-data":p.value,title:$.value},null,8,["yaml-data","title"])]))}}),Qs=Q(Js,[["__scopeId","data-v-4d96127a"]]),Ws={class:"card w-100",ref:"workflowForm"},Xs={class:"card-body"},Zs={class:"card"},en={class:"card-body"},tn={class:"tab-content"},nn=B({__name:"YamlGenerate",setup(P){return O(),G(async()=>{}),(h,$)=>(n(),a("div",Ws,[$[1]||($[1]=e("div",{class:"card-header"},[e("div",{class:"card-title"},[e("h1",null,"YAML Generator")])],-1)),e("div",Xs,[e("div",Zs,[$[0]||($[0]=X('',1)),e("div",en,[e("div",tn,[N(xt),N(Ll),N(zo),N(ys),N(Qs)])])])])],512))}});export{nn as default}; diff --git a/src/main/resources/static/assets/YamlGenerate-B7KjN9b_.js b/src/main/resources/static/assets/YamlGenerate-B7KjN9b_.js new file mode 100644 index 00000000..b84367d4 --- /dev/null +++ b/src/main/resources/static/assets/YamlGenerate-B7KjN9b_.js @@ -0,0 +1 @@ +import{d as B,g as A,h as I,r as f,o as n,c as a,a as e,t as F,f as O,i as G,j as c,l as m,F as D,k as j,m as W,n as K,b as N,p as X}from"./index-8PPGy_cS.js";import{s as J}from"./request-BD-3QCnG.js";import{_ as Q}from"./_plugin-vue_export-helper-DlAUqK2U.js";const Z=P=>J.post("/manifest/v1/generator/yaml/pod",P),ee=P=>J.post("/manifest/v1/generator/yaml/service",P),te=P=>J.post("/manifest/v1/generator/yaml/hpa",P),le=P=>J.post("/manifest/v1/generator/yaml/deployments",P),oe=P=>J.post("/manifest/v1/generator/yaml/configmap",P),se={class:"modal",id:"modal-pod",tabindex:"-1"},ne={class:"modal-dialog modal-lg",role:"document"},ae={class:"modal-content"},re={class:"modal-header"},ie={class:"modal-title"},de={class:"modal-body"},ue={class:"card"},ce={class:"card-body"},me=B({__name:"podModal",props:{title:{},yamlData:{}},setup(P){const h=P,$=A(()=>h.yamlData);I($,async()=>{$.value&&await l()});const w=f(""),l=async()=>{w.value=h.yamlData};return(_,r)=>(n(),a("div",se,[e("div",ne,[e("div",ae,[e("div",re,[e("h5",ie,F(h.title),1),r[0]||(r[0]=e("button",{type:"button",class:"btn-close","data-bs-dismiss":"modal","aria-label":"Close"},null,-1))]),e("div",de,[e("div",ue,[e("div",ce,[r[1]||(r[1]=e("h4",null,"YAML",-1)),e("div",null,[e("pre",null,F(w.value),1)])])])])])])]))}}),pe={class:"tab-pane active show",id:"tabs-pod"},ve={class:"card"},be={class:"card-body"},he={class:"mb-3"},ye={class:"mb-3"},fe={class:"mb-3"},ge=["onUpdate:modelValue"],_e=["onUpdate:modelValue"],we={class:"btn-list"},ke={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-plus",style:{margin:"0 !important"}},$e=["onClick"],xe={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-minus",style:{margin:"0 !important"}},Ce={class:"card mt-4"},Ue={class:"card-body"},Me={class:"mb-3"},Ve={class:"btn-list"},Pe={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-plus",style:{margin:"0 !important"}},qe=["onClick"],Se={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-minus",style:{margin:"0 !important"}},De={class:"row",style:{width:"68% !important"}},je={class:"col mt-4"},ze=["onUpdate:modelValue"],He={class:"col mt-4"},Le=["onUpdate:modelValue"],Be={class:"mb-3"},Re=["onUpdate:modelValue"],Ne=["onUpdate:modelValue"],Fe={class:"btn-list"},Ae=["onClick"],Ee={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-plus",style:{margin:"0 !important"}},Te=["onClick"],Ye={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-minus",style:{margin:"0 !important"}},Oe={class:"mb-3"},Ge={class:"btn-list"},Ie=["onClick"],Ke={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-plus",style:{margin:"0 !important"}},Je=["onClick"],Qe={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-minus",style:{margin:"0 !important"}},We={class:"row",style:{width:"68% !important"}},Xe={class:"col mt-4"},Ze=["onUpdate:modelValue"],et={class:"col mt-4"},tt=["onUpdate:modelValue"],lt={class:"row",style:{width:"68% !important"}},ot={class:"col mt-4"},st=["onUpdate:modelValue"],nt={class:"col mt-4"},at=["onUpdate:modelValue"],rt={key:0,class:"border-bottom",style:{width:"100%","margin-top":"10px"}},it={class:"mb-3"},dt={class:"row",style:{width:"68% !important"}},ut={class:"col mt-4"},ct=["onUpdate:modelValue"],mt={class:"col mt-4"},pt=["onUpdate:modelValue"],vt={class:"row",style:{width:"68% !important"}},bt={class:"col mt-4"},ht=["onUpdate:modelValue"],yt={class:"col mt-4"},ft=["onUpdate:modelValue"],gt={key:0,class:"border-bottom",style:{width:"100%","margin-top":"10px"}},_t={class:"mb-3"},wt={class:"mt-4"},kt={class:"btn-list justify-content-end mt-4"},$t=B({__name:"podForm",setup(P){const h=O(),$=f(""),w=f({}),l=f({}),_=f([]),r=f({}),p=f([]),M=f(""),V=A(()=>{if(!l.value.name||l.value.name.trim()===""||!l.value.namespace||l.value.namespace.trim()==="")return!1;for(const i of p.value)if(!i.name||i.name.trim()===""||!i.image||i.image.trim()==="")return!1;return!0});G(async()=>{await L()});const L=()=>{$.value="Pod",l.value.name="",l.value.namespace="",_.value.push({key:"",value:""}),r.value={containers:[],restartPolicy:""},p.value.push({name:"",image:"",env:[{name:"",value:""}],ports:[{name:"",containerPort:"",hostPort:"",protocol:""}],resources:{limits:{memory:"",cpu:""},requests:{memory:"",cpu:""}}})},R=async()=>{if(!l.value.name||l.value.name.trim()===""){h.error("Please enter pod name.");const s=document.querySelector('input[v-model="metadata.name"]');s==null||s.focus();return}if(!l.value.namespace||l.value.namespace.trim()===""){h.error("Please enter namespace.");const s=document.querySelector('input[v-model="metadata.namespace"]');s==null||s.focus();return}for(let s=0;s(s[b.key]=b.value,s),{});l.value.labels=i,w.value.metadata=l.value,r.value.containers=p.value,w.value.spec=r.value;const{data:t}=await Z(w.value);M.value=t},E=()=>{_.value.push({key:"",value:""})},T=i=>{_.value.length!==1&&_.value.splice(i,1)},H=()=>{p.value.push({name:"",image:"",env:[{name:"",value:""}],ports:[{name:"",containerPort:"",hostPort:"",protocol:""}],resources:{limits:{memory:"",cpu:""},requests:{memory:"",cpu:""}}})},u=i=>{p.value.length!==1&&p.value.splice(i,1)},o=i=>{p.value[i].env.push({name:"",value:""})},U=(i,t)=>{p.value[i].env.length!==1&&p.value[i].env.splice(t,1)},x=i=>{p.value[i].ports.push({name:"",containerPort:"",hostPort:"",protocol:""})},k=(i,t)=>{p.value[i].ports.length!==1&&p.value[i].ports.splice(t,1)};return(i,t)=>(n(),a("div",pe,[e("div",ve,[t[9]||(t[9]=e("div",{class:"card-header"},[e("h3",{class:"card-title"},"Metadata Section")],-1)),e("div",be,[e("div",he,[t[4]||(t[4]=e("label",{class:"form-label required"},"- Name",-1)),c(e("input",{type:"text",class:"form-control w-33",name:"example-text-input","onUpdate:modelValue":t[0]||(t[0]=s=>l.value.name=s),placeholder:"pod-01"},null,512),[[m,l.value.name]])]),e("div",ye,[t[5]||(t[5]=e("label",{class:"form-label required"},"- Namespace",-1)),c(e("input",{type:"text",class:"form-control w-33",name:"example-text-input","onUpdate:modelValue":t[1]||(t[1]=s=>l.value.namespace=s),placeholder:"namespace"},null,512),[[m,l.value.namespace]])]),e("div",fe,[t[8]||(t[8]=e("label",{class:"form-label"},"- Labels",-1)),(n(!0),a(D,null,j(_.value,(s,b)=>(n(),a("div",{class:"generate-form",key:b},[c(e("input",{type:"text",class:"form-control w-33","onUpdate:modelValue":y=>s.key=y,placeholder:"key"},null,8,ge),[[m,s.key]]),c(e("input",{type:"text",class:"form-control w-33","onUpdate:modelValue":y=>s.value=y,placeholder:"value"},null,8,_e),[[m,s.value]]),e("div",we,[e("button",{class:"btn btn-primary",onClick:E,style:{"text-align":"center !important"}},[(n(),a("svg",ke,t[6]||(t[6]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M12 5l0 14"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))]),e("button",{class:"btn btn-primary",onClick:y=>T(b)},[(n(),a("svg",xe,t[7]||(t[7]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))],8,$e)])]))),128))])])]),e("div",Ce,[t[31]||(t[31]=e("div",{class:"card-header"},[e("h3",{class:"card-title"},"Spec Section")],-1)),e("div",Ue,[(n(!0),a(D,null,j(p.value,(s,b)=>(n(),a("div",{class:"mt-4",key:b},[e("div",Me,[e("div",Ve,[t[12]||(t[12]=e("label",{class:"form-label"},"Containers",-1)),e("button",{class:"btn btn-primary",onClick:H,style:{"text-align":"center !important"}},[(n(),a("svg",Pe,t[10]||(t[10]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M12 5l0 14"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))]),e("button",{class:"btn btn-primary",onClick:y=>u(b)},[(n(),a("svg",Se,t[11]||(t[11]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))],8,qe)]),e("div",De,[e("div",je,[t[13]||(t[13]=e("label",{class:"form-label required"},"- Name",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":y=>s.name=y},null,8,ze),[[m,s.name]])]),e("div",He,[t[14]||(t[14]=e("label",{class:"form-label required"},"- Image",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":y=>s.image=y},null,8,Le),[[m,s.image]])])])]),e("div",Be,[t[17]||(t[17]=e("label",{class:"form-label"},"- Env",-1)),(n(!0),a(D,null,j(s.env,(y,Y)=>(n(),a("div",{class:"generate-form",key:Y},[c(e("input",{type:"text",class:"form-control w-33","onUpdate:modelValue":g=>y.name=g,placeholder:"key"},null,8,Re),[[m,y.name]]),c(e("input",{type:"text",class:"form-control w-33","onUpdate:modelValue":g=>y.value=g,placeholder:"value"},null,8,Ne),[[m,y.value]]),e("div",Fe,[e("button",{class:"btn btn-primary",onClick:g=>o(b),style:{"text-align":"center !important"}},[(n(),a("svg",Ee,t[15]||(t[15]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M12 5l0 14"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))],8,Ae),e("button",{class:"btn btn-primary",onClick:g=>U(b,Y)},[(n(),a("svg",Ye,t[16]||(t[16]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))],8,Te)])]))),128))]),e("div",Oe,[(n(!0),a(D,null,j(s.ports,(y,Y)=>(n(),a("div",{class:"mt-4",key:Y},[e("div",Ge,[t[20]||(t[20]=e("label",{class:"form-label"},"Ports",-1)),e("button",{class:"btn btn-primary",onClick:g=>x(b),style:{"text-align":"center !important"}},[(n(),a("svg",Ke,t[18]||(t[18]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M12 5l0 14"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))],8,Ie),e("button",{class:"btn btn-primary",onClick:g=>k(b,Y)},[(n(),a("svg",Qe,t[19]||(t[19]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))],8,Je)]),e("div",We,[e("div",Xe,[t[21]||(t[21]=e("label",{class:"form-label"},"- Name",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":g=>y.name=g},null,8,Ze),[[m,y.name]])]),e("div",et,[t[22]||(t[22]=e("label",{class:"form-label"},"- Port",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":g=>y.containerPort=g},null,8,tt),[[m,y.containerPort]])])]),e("div",lt,[e("div",ot,[t[23]||(t[23]=e("label",{class:"form-label"},"- Protocol",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":g=>y.protocol=g},null,8,st),[[m,y.protocol]])]),e("div",nt,[t[24]||(t[24]=e("label",{class:"form-label"},"- Host Port",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":g=>y.hostPort=g},null,8,at),[[m,y.hostPort]])])]),s.ports.length>1?(n(),a("div",rt)):W("",!0)]))),128))]),e("div",it,[t[29]||(t[29]=e("div",{class:"btn-list"},[e("label",{class:"form-label"},"Resources")],-1)),e("div",dt,[e("div",ut,[t[25]||(t[25]=e("label",{class:"form-label"},"- Limits CPU",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":y=>s.resources.limits.cpu=y},null,8,ct),[[m,s.resources.limits.cpu]])]),e("div",mt,[t[26]||(t[26]=e("label",{class:"form-label"},"- Limits Memory",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":y=>s.resources.limits.memory=y},null,8,pt),[[m,s.resources.limits.memory]])])]),e("div",vt,[e("div",bt,[t[27]||(t[27]=e("label",{class:"form-label"},"- Requests CPU",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":y=>s.resources.requests.cpu=y},null,8,ht),[[m,s.resources.requests.cpu]])]),e("div",yt,[t[28]||(t[28]=e("label",{class:"form-label"},"- Requests Memory",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":y=>s.resources.requests.memory=y},null,8,ft),[[m,s.resources.requests.memory]])])])]),p.value.length>1?(n(),a("div",gt)):W("",!0)]))),128)),e("div",_t,[e("div",wt,[t[30]||(t[30]=e("label",{class:"form-label"},"- Restart Policy",-1)),c(e("input",{type:"text",class:"form-control w-33","onUpdate:modelValue":t[2]||(t[2]=s=>r.value.restartPolicy=s)},null,512),[[m,r.value.restartPolicy]])])])])]),e("div",kt,[e("a",{class:K(["btn btn-primary",{disabled:!V.value}]),onClick:t[3]||(t[3]=s=>V.value?R():null),"data-bs-toggle":"modal","data-bs-target":"#modal-pod"},"GENERATE",2)]),N(me,{"yaml-data":M.value,title:$.value},null,8,["yaml-data","title"])]))}}),xt=Q($t,[["__scopeId","data-v-89045615"]]),Ct={class:"modal",id:"modal-deploy",tabindex:"-1"},Ut={class:"modal-dialog modal-lg",role:"document"},Mt={class:"modal-content"},Vt={class:"modal-header"},Pt={class:"modal-title"},qt={class:"modal-body"},St={class:"card"},Dt={class:"card-body"},jt=B({__name:"deployModal",props:{title:{},yamlData:{}},setup(P){const h=P,$=A(()=>h.yamlData);I($,async()=>{await l()});const w=f(""),l=async()=>{w.value=h.yamlData};return(_,r)=>(n(),a("div",Ct,[e("div",Ut,[e("div",Mt,[e("div",Vt,[e("h5",Pt,F(h.title),1),r[0]||(r[0]=e("button",{type:"button",class:"btn-close","data-bs-dismiss":"modal","aria-label":"Close"},null,-1))]),e("div",qt,[e("div",St,[e("div",Dt,[r[1]||(r[1]=e("h4",null,"YAML",-1)),e("div",null,[e("pre",null,F(w.value),1)])])])])])])]))}}),zt={class:"tab-pane",id:"tabs-deployment"},Ht={class:"card"},Lt={class:"card-body"},Bt={class:"mb-3"},Rt={class:"mb-3"},Nt={class:"mb-3"},Ft=["onUpdate:modelValue"],At=["onUpdate:modelValue"],Et={class:"btn-list"},Tt={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-plus",style:{margin:"0 !important"}},Yt=["onClick"],Ot={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-minus",style:{margin:"0 !important"}},Gt={class:"card mt-4"},It={class:"card-body"},Kt={class:"mb-3"},Jt={class:"mb-3"},Qt=["onUpdate:modelValue"],Wt=["onUpdate:modelValue"],Xt={class:"btn-list"},Zt={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-plus",style:{margin:"0 !important"}},el=["onClick"],tl={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-minus",style:{margin:"0 !important"}},ll={class:"mb-3"},ol=["onUpdate:modelValue"],sl=["onUpdate:modelValue"],nl={class:"btn-list"},al={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-plus",style:{margin:"0 !important"}},rl=["onClick"],il={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-minus",style:{margin:"0 !important"}},dl={class:"mb-3"},ul={class:"btn-list"},cl={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-plus",style:{margin:"0 !important"}},ml=["onClick"],pl={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-minus",style:{margin:"0 !important"}},vl={class:"row",style:{width:"68% !important"}},bl={class:"col mt-4"},hl=["onUpdate:modelValue"],yl={class:"col mt-4"},fl=["onUpdate:modelValue"],gl={class:"mb-3"},_l=["onUpdate:modelValue"],wl={class:"btn-list"},kl=["onClick"],$l={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-plus",style:{margin:"0 !important"}},xl=["onClick"],Cl={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-minus",style:{margin:"0 !important"}},Ul={class:"mb-3"},Ml=["onUpdate:modelValue"],Vl=["onUpdate:modelValue"],Pl={class:"btn-list"},ql=["onClick"],Sl={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-plus",style:{margin:"0 !important"}},Dl=["onClick"],jl={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-minus",style:{margin:"0 !important"}},zl={class:"btn-list justify-content-end mt-4"},Hl=B({__name:"deploymentForm",setup(P){const h=O(),$=f(""),w=f({}),l=f({}),_=f([]),r=f([]),p=f([]),M=f({}),V=f([]),L=f(""),R=A(()=>{if(!l.value.name||l.value.name.trim()===""||!l.value.namespace||l.value.namespace.trim()==="")return!1;for(const g of V.value)if(!g.name||g.name.trim()===""||!g.image||g.image.trim()==="")return!1;return!0});G(async()=>{await E()});const E=()=>{$.value="Deployment",l.value.name="",l.value.namespace="",_.value.push({key:"",value:""}),r.value.push({key:"",value:""}),p.value.push({key:"",value:""}),M.value={replicas:"",selector:{matchLabels:{}},template:{metadata:{labels:{}},spec:{containers:[]}}},V.value.push({name:"",image:"",env:[{name:"",value:""}],ports:[{containerPort:""}]})},T=async()=>{if(!l.value.name||l.value.name.trim()===""){h.error("Please enter deployment name.");const v=document.querySelector('input[v-model="metadata.name"]');v==null||v.focus();return}if(!l.value.namespace||l.value.namespace.trim()===""){h.error("Please enter namespace.");const v=document.querySelector('input[v-model="metadata.namespace"]');v==null||v.focus();return}for(let v=0;v(v[q.key]=q.value,v),{}),d=r.value.reduce((v,q)=>(v[q.key]=q.value,v),{}),C=p.value.reduce((v,q)=>(v[q.key]=q.value,v),{});l.value.labels=g,w.value.metadata=l.value,M.value.selector.matchLabels=d,M.value.template.metadata.labels=C,M.value.template.spec.containers=V.value,w.value.spec=M.value,console.log("deployFormData.value : ",w.value);const{data:S}=await le(w.value);L.value=S},H=()=>{_.value.push({key:"",value:""})},u=g=>{_.value.length!==1&&_.value.splice(g,1)},o=()=>{r.value.push({key:"",value:""})},U=g=>{r.value.length!==1&&r.value.splice(g,1)},x=()=>{p.value.push({key:"",value:""})},k=g=>{p.value.length!==1&&p.value.splice(g,1)},i=()=>{V.value.push({name:"",image:"",env:[{name:"",value:""}],ports:[{containerPort:""}]})},t=g=>{V.value.length!==1&&V.value.splice(g,1)},s=g=>{V.value[g].env.push({name:"",value:""})},b=(g,d)=>{V.value[g].env.length!==1&&V.value[g].env.splice(d,1)},y=g=>{V.value[g].ports.push({containerPort:""})},Y=(g,d)=>{V.value[g].ports.length!==1&&V.value[g].ports.splice(d,1)};return(g,d)=>(n(),a("div",zt,[e("div",Ht,[d[9]||(d[9]=e("div",{class:"card-header"},[e("h3",{class:"card-title"},"Metadata Section")],-1)),e("div",Lt,[e("div",Bt,[d[4]||(d[4]=e("label",{class:"form-label required"},"- Name",-1)),c(e("input",{type:"text",class:"form-control w-33",name:"example-text-input","onUpdate:modelValue":d[0]||(d[0]=C=>l.value.name=C),placeholder:"deployment-01"},null,512),[[m,l.value.name]])]),e("div",Rt,[d[5]||(d[5]=e("label",{class:"form-label required"},"- Namespace",-1)),c(e("input",{type:"text",class:"form-control w-33",name:"example-text-input","onUpdate:modelValue":d[1]||(d[1]=C=>l.value.namespace=C),placeholder:"namespace"},null,512),[[m,l.value.namespace]])]),e("div",Nt,[d[8]||(d[8]=e("label",{class:"form-label"},"- Labels",-1)),(n(!0),a(D,null,j(_.value,(C,S)=>(n(),a("div",{class:"generate-form",key:S},[c(e("input",{type:"text",class:"form-control w-33","onUpdate:modelValue":v=>C.key=v,placeholder:"key"},null,8,Ft),[[m,C.key]]),c(e("input",{type:"text",class:"form-control w-33","onUpdate:modelValue":v=>C.value=v,placeholder:"value"},null,8,At),[[m,C.value]]),e("div",Et,[e("button",{class:"btn btn-primary",onClick:H,style:{"text-align":"center !important"}},[(n(),a("svg",Tt,d[6]||(d[6]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M12 5l0 14"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))]),e("button",{class:"btn btn-primary",onClick:v=>u(S)},[(n(),a("svg",Ot,d[7]||(d[7]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))],8,Yt)])]))),128))])])]),e("div",Gt,[d[29]||(d[29]=e("div",{class:"card-header"},[e("h3",{class:"card-title"},"Spec Section")],-1)),e("div",It,[e("div",Kt,[d[10]||(d[10]=e("label",{class:"form-label"},"- Replicas",-1)),c(e("input",{type:"text",class:"form-control w-33","onUpdate:modelValue":d[2]||(d[2]=C=>M.value.replicas=C)},null,512),[[m,M.value.replicas]])]),e("div",Jt,[d[13]||(d[13]=e("label",{class:"form-label"},"- Match Labels",-1)),(n(!0),a(D,null,j(r.value,(C,S)=>(n(),a("div",{class:"generate-form",key:S},[c(e("input",{type:"text",class:"form-control w-33","onUpdate:modelValue":v=>C.key=v,placeholder:"key"},null,8,Qt),[[m,C.key]]),c(e("input",{type:"text",class:"form-control w-33","onUpdate:modelValue":v=>C.value=v,placeholder:"value"},null,8,Wt),[[m,C.value]]),e("div",Xt,[e("button",{class:"btn btn-primary",onClick:o,style:{"text-align":"center !important"}},[(n(),a("svg",Zt,d[11]||(d[11]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M12 5l0 14"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))]),e("button",{class:"btn btn-primary",onClick:v=>U(S)},[(n(),a("svg",tl,d[12]||(d[12]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))],8,el)])]))),128))]),d[28]||(d[28]=e("div",{class:"mb-3"},[e("label",{class:"form-label"},"Template")],-1)),e("div",ll,[d[16]||(d[16]=e("div",{class:"btn-list"},[e("label",{class:"form-label"},"- Labels")],-1)),(n(!0),a(D,null,j(p.value,(C,S)=>(n(),a("div",{class:"generate-form",key:S},[c(e("input",{type:"text",class:"form-control w-33","onUpdate:modelValue":v=>C.key=v,placeholder:"key"},null,8,ol),[[m,C.key]]),c(e("input",{type:"text",class:"form-control w-33","onUpdate:modelValue":v=>C.value=v,placeholder:"value"},null,8,sl),[[m,C.value]]),e("div",nl,[e("button",{class:"btn btn-primary",onClick:x,style:{"text-align":"center !important"}},[(n(),a("svg",al,d[14]||(d[14]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M12 5l0 14"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))]),e("button",{class:"btn btn-primary",onClick:v=>k(S)},[(n(),a("svg",il,d[15]||(d[15]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))],8,rl)])]))),128))]),(n(!0),a(D,null,j(V.value,(C,S)=>(n(),a("div",{key:S},[e("div",dl,[e("div",ul,[d[19]||(d[19]=e("label",{class:"form-label"},"Containers",-1)),e("button",{class:"btn btn-primary",onClick:i,style:{"text-align":"center !important"}},[(n(),a("svg",cl,d[17]||(d[17]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M12 5l0 14"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))]),e("button",{class:"btn btn-primary",onClick:v=>t(S)},[(n(),a("svg",pl,d[18]||(d[18]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))],8,ml)]),e("div",vl,[e("div",bl,[d[20]||(d[20]=e("label",{class:"form-label required"},"- Name",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":v=>C.name=v},null,8,hl),[[m,C.name]])]),e("div",yl,[d[21]||(d[21]=e("label",{class:"form-label required"},"- Image",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":v=>C.image=v},null,8,fl),[[m,C.image]])])])]),e("div",gl,[d[24]||(d[24]=e("label",{class:"form-label"},"- Port",-1)),(n(!0),a(D,null,j(C.ports,(v,q)=>(n(),a("div",{class:"generate-form",key:q},[c(e("input",{type:"text",class:"form-control w-33","onUpdate:modelValue":z=>v.containerPort=z,placeholder:"value"},null,8,_l),[[m,v.containerPort]]),e("div",wl,[e("button",{class:"btn btn-primary",onClick:z=>y(S),style:{"text-align":"center !important"}},[(n(),a("svg",$l,d[22]||(d[22]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M12 5l0 14"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))],8,kl),e("button",{class:"btn btn-primary",onClick:z=>Y(S,q)},[(n(),a("svg",Cl,d[23]||(d[23]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))],8,xl)])]))),128))]),e("div",Ul,[d[27]||(d[27]=e("label",{class:"form-label"},"- Env",-1)),(n(!0),a(D,null,j(C.env,(v,q)=>(n(),a("div",{class:"generate-form",key:q},[c(e("input",{type:"text",class:"form-control w-33","onUpdate:modelValue":z=>v.name=z,placeholder:"key"},null,8,Ml),[[m,v.name]]),c(e("input",{type:"text",class:"form-control w-33","onUpdate:modelValue":z=>v.value=z,placeholder:"value"},null,8,Vl),[[m,v.value]]),e("div",Pl,[e("button",{class:"btn btn-primary",onClick:z=>s(S),style:{"text-align":"center !important"}},[(n(),a("svg",Sl,d[25]||(d[25]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M12 5l0 14"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))],8,ql),e("button",{class:"btn btn-primary",onClick:z=>b(S,q)},[(n(),a("svg",jl,d[26]||(d[26]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))],8,Dl)])]))),128))])]))),128))])]),e("div",zl,[e("a",{class:K(["btn btn-primary",{disabled:!R.value}]),onClick:d[3]||(d[3]=C=>R.value?T():null),"data-bs-toggle":"modal","data-bs-target":"#modal-deploy"},"GENERATE",2)]),N(jt,{"yaml-data":L.value,title:$.value},null,8,["yaml-data","title"])]))}}),Ll=Q(Hl,[["__scopeId","data-v-10151163"]]),Bl={class:"modal",id:"modal-service",tabindex:"-1"},Rl={class:"modal-dialog modal-lg",role:"document"},Nl={class:"modal-content"},Fl={class:"modal-header"},Al={class:"modal-title"},El={class:"modal-body"},Tl={class:"card"},Yl={class:"card-body"},Ol=B({__name:"servcieModal",props:{title:{},yamlData:{}},setup(P){const h=P,$=A(()=>h.yamlData);I($,async()=>{await l()});const w=f(""),l=async()=>{w.value=h.yamlData};return(_,r)=>(n(),a("div",Bl,[e("div",Rl,[e("div",Nl,[e("div",Fl,[e("h5",Al,F(h.title),1),r[0]||(r[0]=e("button",{type:"button",class:"btn-close","data-bs-dismiss":"modal","aria-label":"Close"},null,-1))]),e("div",El,[e("div",Tl,[e("div",Yl,[r[1]||(r[1]=e("h4",null,"YAML",-1)),e("div",null,[e("pre",null,F(w.value),1)])])])])])])]))}}),Gl={class:"tab-pane",id:"tabs-service"},Il={class:"card"},Kl={class:"card-body"},Jl={class:"mb-3"},Ql={class:"mb-3"},Wl={class:"mb-3"},Xl=["onUpdate:modelValue"],Zl=["onUpdate:modelValue"],eo={class:"btn-list"},to={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-plus",style:{margin:"0 !important"}},lo=["onClick"],oo={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-minus",style:{margin:"0 !important"}},so={class:"card mt-4"},no={class:"card-body"},ao={class:"mb-3"},ro=["onUpdate:modelValue"],io=["onUpdate:modelValue"],uo={class:"btn-list"},co={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-plus",style:{margin:"0 !important"}},mo=["onClick"],po={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-minus",style:{margin:"0 !important"}},vo={class:"mb-3"},bo={class:"btn-list"},ho={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-plus",style:{margin:"0 !important"}},yo=["onClick"],fo={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-minus",style:{margin:"0 !important"}},go={class:"row",style:{width:"68% !important"}},_o={class:"col mt-4"},wo=["onUpdate:modelValue"],ko={class:"col mt-4"},$o=["onUpdate:modelValue"],xo={class:"row",style:{width:"68% !important"}},Co={class:"col mt-4"},Uo=["onUpdate:modelValue"],Mo={class:"col mt-4"},Vo=["onUpdate:modelValue"],Po={key:0,class:"border-bottom",style:{width:"100%","margin-top":"10px"}},qo={class:"row",style:{width:"68% !important"}},So={class:"col mt-4"},Do={class:"btn-list justify-content-end mt-4"},jo=B({__name:"serviceForm",setup(P){const h=O(),$=f(""),w=f({}),l=f({}),_=f([]),r=f({}),p=f([]),M=f([]);f("");const V=f(""),L=A(()=>{if(!l.value.name||l.value.name.trim()===""||!l.value.namespace||l.value.namespace.trim()==="")return!1;for(const k of M.value)if(!k.port||k.port.trim()===""||!k.targetPort||k.targetPort.trim()==="")return!1;return!0});G(async()=>{await R()});const R=()=>{$.value="Service",l.value={name:"",namespace:"",labels:{}},r.value={selector:{},ports:[],type:""},_.value.push({key:"",value:""}),p.value.push({key:"",value:""}),M.value.push({protocol:"",port:"",targetPort:"",nodePort:""})},E=async()=>{if(!l.value.name||l.value.name.trim()===""){h.error("Please enter service name.");const s=document.querySelector('input[v-model="metadata.name"]');s==null||s.focus();return}if(!l.value.namespace||l.value.namespace.trim()===""){h.error("Please enter namespace.");const s=document.querySelector('input[v-model="metadata.namespace"]');s==null||s.focus();return}for(let s=0;s(s[b.key]=b.value,s),{});l.value.labels=k,w.value.metadata=l.value;const i=p.value.reduce((s,b)=>(s[b.key]=b.value,s),{});r.value.selector=i,r.value.ports=M.value,w.value.spec=r.value;const{data:t}=await ee(w.value);V.value=t},T=()=>{_.value.push({key:"",value:""})},H=k=>{_.value.length!==1&&_.value.splice(k,1)},u=()=>{p.value.push({key:"",value:""})},o=k=>{p.value.length!==1&&p.value.splice(k,1)},U=()=>{M.value.push({protocol:"",port:"",targetPort:"",nodePort:""})},x=k=>{M.value.length!==1&&M.value.splice(k,1)};return(k,i)=>(n(),a("div",Gl,[e("div",Il,[i[9]||(i[9]=e("div",{class:"card-header"},[e("h3",{class:"card-title"},"Metadata Section")],-1)),e("div",Kl,[e("div",Jl,[i[4]||(i[4]=e("label",{class:"form-label required"},"- Name",-1)),c(e("input",{type:"text",class:"form-control w-33",name:"example-text-input","onUpdate:modelValue":i[0]||(i[0]=t=>l.value.name=t),placeholder:"name-01"},null,512),[[m,l.value.name]])]),e("div",Ql,[i[5]||(i[5]=e("label",{class:"form-label required"},"- Namespace",-1)),c(e("input",{type:"text",class:"form-control w-33",name:"example-text-input","onUpdate:modelValue":i[1]||(i[1]=t=>l.value.namespace=t),placeholder:"namespace"},null,512),[[m,l.value.namespace]])]),e("div",Wl,[i[8]||(i[8]=e("label",{class:"form-label"},"- Labels",-1)),(n(!0),a(D,null,j(_.value,(t,s)=>(n(),a("div",{class:"generate-form",key:s},[c(e("input",{type:"text",class:"form-control w-33",name:"example-password-input","onUpdate:modelValue":b=>t.key=b,placeholder:"key"},null,8,Xl),[[m,t.key]]),c(e("input",{type:"text",class:"form-control w-33",name:"example-password-input","onUpdate:modelValue":b=>t.value=b,placeholder:"value"},null,8,Zl),[[m,t.value]]),e("div",eo,[e("button",{class:"btn btn-primary",onClick:T,style:{"text-align":"center !important"}},[(n(),a("svg",to,i[6]||(i[6]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M12 5l0 14"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))]),e("button",{class:"btn btn-primary",onClick:b=>H(s)},[(n(),a("svg",oo,i[7]||(i[7]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))],8,lo)])]))),128))])])]),e("div",so,[i[21]||(i[21]=e("div",{class:"card-header"},[e("h3",{class:"card-title"},"Spec Section")],-1)),e("div",no,[e("div",ao,[i[12]||(i[12]=e("label",{class:"form-label"},"- Selector",-1)),(n(!0),a(D,null,j(p.value,(t,s)=>(n(),a("div",{class:"generate-form",key:s},[c(e("input",{type:"text",class:"form-control w-33",name:"example-password-input","onUpdate:modelValue":b=>t.key=b,placeholder:"key"},null,8,ro),[[m,t.key]]),c(e("input",{type:"text",class:"form-control w-33",name:"example-password-input","onUpdate:modelValue":b=>t.value=b,placeholder:"value"},null,8,io),[[m,t.value]]),e("div",uo,[e("button",{class:"btn btn-primary",onClick:u,style:{"text-align":"center !important"}},[(n(),a("svg",co,i[10]||(i[10]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M12 5l0 14"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))]),e("button",{class:"btn btn-primary",onClick:b=>o(s)},[(n(),a("svg",po,i[11]||(i[11]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))],8,mo)])]))),128))]),e("div",vo,[(n(!0),a(D,null,j(M.value,(t,s)=>(n(),a("div",{class:"mt-4",key:s},[e("div",bo,[i[15]||(i[15]=e("label",{class:"form-label"},"Ports",-1)),e("button",{class:"btn btn-primary",onClick:U,style:{"text-align":"center !important"}},[(n(),a("svg",ho,i[13]||(i[13]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M12 5l0 14"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))]),e("button",{class:"btn btn-primary",onClick:b=>x(s)},[(n(),a("svg",fo,i[14]||(i[14]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))],8,yo)]),e("div",go,[e("div",_o,[i[16]||(i[16]=e("label",{class:"form-label required"},"- Port",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":b=>t.port=b},null,8,wo),[[m,t.port]])]),e("div",ko,[i[17]||(i[17]=e("label",{class:"form-label required"},"- Target Port",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":b=>t.targetPort=b},null,8,$o),[[m,t.targetPort]])])]),e("div",xo,[e("div",Co,[i[18]||(i[18]=e("label",{class:"form-label"},"- Protocol",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":b=>t.protocol=b},null,8,Uo),[[m,t.protocol]])]),e("div",Mo,[i[19]||(i[19]=e("label",{class:"form-label"},"- Node Port",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":b=>t.nodePort=b},null,8,Vo),[[m,t.nodePort]])])]),M.value.length>1?(n(),a("div",Po)):W("",!0)]))),128)),e("div",qo,[e("div",So,[i[20]||(i[20]=e("label",{class:"form-label"},"- Type",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":i[2]||(i[2]=t=>r.value.type=t)},null,512),[[m,r.value.type]])])])])])]),e("div",Do,[e("a",{class:K(["btn btn-primary",{disabled:!L.value}]),onClick:i[3]||(i[3]=t=>L.value?E():null),"data-bs-toggle":"modal","data-bs-target":"#modal-service"},"GENERATE",2)]),N(Ol,{"yaml-data":V.value,title:$.value},null,8,["yaml-data","title"])]))}}),zo=Q(jo,[["__scopeId","data-v-a6f75123"]]),Ho={class:"modal",id:"modal-yaml",tabindex:"-1"},Lo={class:"modal-dialog modal-lg",role:"document"},Bo={class:"modal-content"},Ro={class:"modal-header"},No={class:"modal-title"},Fo={class:"modal-body"},Ao={class:"card"},Eo={class:"card-body"},To=B({__name:"yamlModal",props:{title:{},yamlData:{}},setup(P){const h=P,$=A(()=>h.yamlData);I($,async()=>{await l()});const w=f(""),l=async()=>{w.value=h.yamlData};return(_,r)=>(n(),a("div",Ho,[e("div",Lo,[e("div",Bo,[e("div",Ro,[e("h5",No,F(h.title),1),r[0]||(r[0]=e("button",{type:"button",class:"btn-close","data-bs-dismiss":"modal","aria-label":"Close"},null,-1))]),e("div",Fo,[e("div",Ao,[e("div",Eo,[r[1]||(r[1]=e("h4",null,"YAML",-1)),e("div",null,[e("pre",null,F(w.value),1)])])])])])])]))}}),Yo={class:"tab-pane",id:"tabs-hpa"},Oo={class:"card"},Go={class:"card-body"},Io={class:"mb-3"},Ko={class:"mb-3"},Jo={class:"mb-3"},Qo=["onUpdate:modelValue"],Wo=["onUpdate:modelValue"],Xo={class:"btn-list"},Zo={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-plus",style:{margin:"0 !important"}},es=["onClick"],ts={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-minus",style:{margin:"0 !important"}},ls={class:"card mt-4"},os={class:"card-body"},ss={class:"row",style:{width:"68% !important"}},ns={class:"col"},as={class:"col"},rs={class:"row",style:{width:"68% !important"}},is={class:"col"},ds={class:"row",style:{width:"68% !important"}},us={class:"col"},cs={class:"row",style:{width:"68% !important"}},ms={class:"col"},ps={class:"row",style:{width:"68% !important"}},vs={class:"col"},bs={class:"btn-list justify-content-end mt-4"},hs=B({__name:"hpaForm",setup(P){const h=O(),$=f(""),w=f({}),l=f({}),_=f([]),r=f({}),p=f({}),M=f(""),V=A(()=>!(!l.value.name||l.value.name.trim()===""||!l.value.namespace||l.value.namespace.trim()===""||!p.value.apiVersion||p.value.apiVersion.trim()===""||!p.value.kind||p.value.kind.trim()===""||!p.value.name||p.value.name.trim()===""||!r.value.minReplicas||r.value.minReplicas.trim()===""||!r.value.maxReplicas||r.value.maxReplicas.trim()===""||!r.value.targetCPUUtilizationPercentage||r.value.targetCPUUtilizationPercentage.trim()===""));G(async()=>{await L()});const L=()=>{$.value="HPA",l.value={name:"",namespace:"",labels:{}},_.value.push({key:"",value:""}),r.value={scaleTargetRef:{},minReplicas:"",maxReplicas:"",targetCPUUtilizationPercentage:""},p.value={apiVersion:"",kind:"",name:""}},R=async()=>{if(!l.value.name||l.value.name.trim()===""){h.error("Please enter HPA name.");const o=document.querySelector('input[v-model="metadata.name"]');o==null||o.focus();return}if(!l.value.namespace||l.value.namespace.trim()===""){h.error("Please enter namespace.");const o=document.querySelector('input[v-model="metadata.namespace"]');o==null||o.focus();return}if(!p.value.apiVersion||p.value.apiVersion.trim()===""){h.error("Please enter API version.");const o=document.querySelector('input[v-model="scaleTargetRef.apiVersion"]');o==null||o.focus();return}if(!p.value.kind||p.value.kind.trim()===""){h.error("Please enter kind.");const o=document.querySelector('input[v-model="scaleTargetRef.kind"]');o==null||o.focus();return}if(!p.value.name||p.value.name.trim()===""){h.error("Please enter target name.");const o=document.querySelector('input[v-model="scaleTargetRef.name"]');o==null||o.focus();return}if(!r.value.minReplicas||r.value.minReplicas.trim()===""){h.error("Please enter min replicas.");const o=document.querySelector('input[v-model="spec.minReplicas"]');o==null||o.focus();return}if(!r.value.maxReplicas||r.value.maxReplicas.trim()===""){h.error("Please enter max replicas.");const o=document.querySelector('input[v-model="spec.maxReplicas"]');o==null||o.focus();return}if(!r.value.targetCPUUtilizationPercentage||r.value.targetCPUUtilizationPercentage.trim()===""){h.error("Please enter CPU percentage.");const o=document.querySelector('input[v-model="spec.targetCPUUtilizationPercentage"]');o==null||o.focus();return}const H=_.value.reduce((o,U)=>(o[U.key]=U.value,o),{});l.value.labels=H,r.value.scaleTargetRef=p.value,w.value.metadata=l.value,w.value.spec=r.value;const{data:u}=await te(w.value);M.value=u},E=()=>{_.value.push({key:"",value:""})},T=H=>{_.value.length!==1&&_.value.splice(H,1)};return(H,u)=>(n(),a("div",Yo,[e("div",Oo,[u[14]||(u[14]=e("div",{class:"card-header"},[e("h3",{class:"card-title"},"Metadata Section")],-1)),e("div",Go,[e("div",Io,[u[9]||(u[9]=e("label",{class:"form-label required"},"- Name",-1)),c(e("input",{type:"text",class:"form-control w-33",name:"example-text-input","onUpdate:modelValue":u[0]||(u[0]=o=>l.value.name=o),placeholder:"name"},null,512),[[m,l.value.name]])]),e("div",Ko,[u[10]||(u[10]=e("label",{class:"form-label required"},"- Namespace",-1)),c(e("input",{type:"text",class:"form-control w-33",name:"example-text-input","onUpdate:modelValue":u[1]||(u[1]=o=>l.value.namespace=o),placeholder:"namespace"},null,512),[[m,l.value.namespace]])]),e("div",Jo,[u[13]||(u[13]=e("label",{class:"form-label"},"- Labels",-1)),(n(!0),a(D,null,j(_.value,(o,U)=>(n(),a("div",{class:"generate-form",key:U},[c(e("input",{type:"text",class:"form-control w-33",name:"example-password-input","onUpdate:modelValue":x=>o.key=x,placeholder:"key"},null,8,Qo),[[m,o.key]]),c(e("input",{type:"text",class:"form-control w-33",name:"example-password-input","onUpdate:modelValue":x=>o.value=x,placeholder:"value"},null,8,Wo),[[m,o.value]]),e("div",Xo,[e("button",{class:"btn btn-primary",onClick:E,style:{"text-align":"center !important"}},[(n(),a("svg",Zo,u[11]||(u[11]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M12 5l0 14"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))]),e("button",{class:"btn btn-primary",onClick:x=>T(U)},[(n(),a("svg",ts,u[12]||(u[12]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))],8,es)])]))),128))])])]),e("div",ls,[u[22]||(u[22]=e("div",{class:"card-header"},[e("h3",{class:"card-title"},"Spec Section")],-1)),e("div",os,[u[21]||(u[21]=e("div",{class:"mb-3"},[e("label",{class:"form-label"},"Scale Target")],-1)),e("div",ss,[e("div",ns,[u[15]||(u[15]=e("label",{class:"form-label required"},"- Api Version",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":u[2]||(u[2]=o=>p.value.apiVersion=o)},null,512),[[m,p.value.apiVersion]])]),e("div",as,[u[16]||(u[16]=e("label",{class:"form-label required"},"- Kind",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":u[3]||(u[3]=o=>p.value.kind=o)},null,512),[[m,p.value.kind]])])]),e("div",rs,[e("div",is,[u[17]||(u[17]=e("label",{class:"form-label required"},"- Name",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":u[4]||(u[4]=o=>p.value.name=o)},null,512),[[m,p.value.name]])])]),e("div",ds,[e("div",us,[u[18]||(u[18]=e("label",{class:"form-label required"},"- Min Replicas",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":u[5]||(u[5]=o=>r.value.minReplicas=o)},null,512),[[m,r.value.minReplicas]])])]),e("div",cs,[e("div",ms,[u[19]||(u[19]=e("label",{class:"form-label required"},"- Max Replicas",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":u[6]||(u[6]=o=>r.value.maxReplicas=o)},null,512),[[m,r.value.maxReplicas]])])]),e("div",ps,[e("div",vs,[u[20]||(u[20]=e("label",{class:"form-label required"},"- CPU Percentage",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":u[7]||(u[7]=o=>r.value.targetCPUUtilizationPercentage=o)},null,512),[[m,r.value.targetCPUUtilizationPercentage]])])])])]),e("div",bs,[e("a",{class:K(["btn btn-primary",{disabled:!V.value}]),onClick:u[8]||(u[8]=o=>V.value?R():null),"data-bs-toggle":"modal","data-bs-target":"#modal-yaml"},"GENERATE",2)]),N(To,{"yaml-data":M.value,title:$.value},null,8,["yaml-data","title"])]))}}),ys=Q(hs,[["__scopeId","data-v-eeb9f8ea"]]),fs={class:"modal",id:"modal-config-map",tabindex:"-1"},gs={class:"modal-dialog modal-lg",role:"document"},_s={class:"modal-content"},ws={class:"modal-header"},ks={class:"modal-title"},$s={class:"modal-body"},xs={class:"card"},Cs={class:"card-body"},Us=B({__name:"configMapModal",props:{title:{},yamlData:{}},setup(P){const h=P,$=A(()=>h.yamlData);I($,async()=>{await l()});const w=f(""),l=async()=>{w.value=h.yamlData};return(_,r)=>(n(),a("div",fs,[e("div",gs,[e("div",_s,[e("div",ws,[e("h5",ks,F(h.title),1),r[0]||(r[0]=e("button",{type:"button",class:"btn-close","data-bs-dismiss":"modal","aria-label":"Close"},null,-1))]),e("div",$s,[e("div",xs,[e("div",Cs,[r[1]||(r[1]=e("h4",null,"YAML",-1)),e("div",null,[e("pre",null,F(w.value),1)])])])])])])]))}}),Ms={class:"tab-pane",id:"tabs-configMap"},Vs={class:"card"},Ps={class:"card-body"},qs={class:"mb-3"},Ss={class:"mb-3"},Ds={class:"mb-3"},js=["onUpdate:modelValue"],zs=["onUpdate:modelValue"],Hs={class:"btn-list"},Ls={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-plus",style:{margin:"0 !important"}},Bs=["onClick"],Rs={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-minus",style:{margin:"0 !important"}},Ns={class:"card mt-4"},Fs={class:"card-body"},As={class:"mb-3"},Es=["onUpdate:modelValue"],Ts=["onUpdate:modelValue"],Ys={class:"btn-list"},Os={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-plus",style:{margin:"0 !important"}},Gs=["onClick"],Is={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-minus",style:{margin:"0 !important"}},Ks={class:"btn-list justify-content-end mt-4"},Js=B({__name:"configmapForm",setup(P){const h=O(),$=f(""),w=f({}),l=f({}),_=f([]),r=f([]),p=f(""),M=A(()=>!(!l.value.name||l.value.name.trim()===""||!l.value.namespace||l.value.namespace.trim()===""));G(async()=>{await V()});const V=()=>{$.value="ConfigMap",l.value={name:"",namespace:"",labels:{}},_.value.push({key:"",value:""}),r.value.push({key:"",value:""})},L=async()=>{if(!l.value.name||l.value.name.trim()===""){h.error("Please enter ConfigMap name.");const x=document.querySelector('input[v-model="metadata.name"]');x==null||x.focus();return}if(!l.value.namespace||l.value.namespace.trim()===""){h.error("Please enter namespace.");const x=document.querySelector('input[v-model="metadata.namespace"]');x==null||x.focus();return}const u=_.value.reduce((x,k)=>(x[k.key]=k.value,x),{});l.value.labels=u;const o=r.value.reduce((x,k)=>(x[k.key]=k.value,x),{});w.value.metadata=l.value,w.value.data=o;const{data:U}=await oe(w.value);p.value=U},R=()=>{_.value.push({key:"",value:""})},E=u=>{_.value.length!==1&&_.value.splice(u,1)},T=()=>{r.value.push({key:"",value:""})},H=u=>{r.value.length!==1&&r.value.splice(u,1)};return(u,o)=>(n(),a("div",Ms,[e("div",Vs,[o[8]||(o[8]=e("div",{class:"card-header"},[e("h3",{class:"card-title"},"Metadata Section")],-1)),e("div",Ps,[e("div",qs,[o[3]||(o[3]=e("label",{class:"form-label required"},"- Name",-1)),c(e("input",{type:"text",class:"form-control w-33",name:"example-text-input","onUpdate:modelValue":o[0]||(o[0]=U=>l.value.name=U),placeholder:"configMap-01"},null,512),[[m,l.value.name]])]),e("div",Ss,[o[4]||(o[4]=e("label",{class:"form-label required"},"- Namespace",-1)),c(e("input",{type:"text",class:"form-control w-33",name:"example-text-input","onUpdate:modelValue":o[1]||(o[1]=U=>l.value.namespace=U),placeholder:"namespace"},null,512),[[m,l.value.namespace]])]),e("div",Ds,[o[7]||(o[7]=e("label",{class:"form-label"},"- Labels",-1)),(n(!0),a(D,null,j(_.value,(U,x)=>(n(),a("div",{class:"generate-form",key:x},[c(e("input",{type:"text",class:"form-control w-33",name:"example-password-input","onUpdate:modelValue":k=>U.key=k,placeholder:"key"},null,8,js),[[m,U.key]]),c(e("input",{type:"text",class:"form-control w-33",name:"example-password-input","onUpdate:modelValue":k=>U.value=k,placeholder:"value"},null,8,zs),[[m,U.value]]),e("div",Hs,[e("button",{class:"btn btn-primary",onClick:R,style:{"text-align":"center !important"}},[(n(),a("svg",Ls,o[5]||(o[5]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M12 5l0 14"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))]),e("button",{class:"btn btn-primary",onClick:k=>E(x)},[(n(),a("svg",Rs,o[6]||(o[6]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))],8,Bs)])]))),128))])])]),e("div",Ns,[o[12]||(o[12]=e("div",{class:"card-header"},[e("h3",{class:"card-title"},"Spec Section")],-1)),e("div",Fs,[e("div",As,[o[11]||(o[11]=e("label",{class:"form-label"},"- Data",-1)),(n(!0),a(D,null,j(r.value,(U,x)=>(n(),a("div",{class:"generate-form",key:x},[c(e("input",{type:"text",class:"form-control w-33",name:"example-password-input","onUpdate:modelValue":k=>U.key=k,placeholder:"key"},null,8,Es),[[m,U.key]]),c(e("input",{type:"text",class:"form-control w-33",name:"example-password-input","onUpdate:modelValue":k=>U.value=k,placeholder:"value"},null,8,Ts),[[m,U.value]]),e("div",Ys,[e("button",{class:"btn btn-primary",onClick:T,style:{"text-align":"center !important"}},[(n(),a("svg",Os,o[9]||(o[9]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M12 5l0 14"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))]),e("button",{class:"btn btn-primary",onClick:k=>H(x)},[(n(),a("svg",Is,o[10]||(o[10]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))],8,Gs)])]))),128))])])]),e("div",Ks,[e("a",{class:K(["btn btn-primary",{disabled:!M.value}]),onClick:o[2]||(o[2]=U=>M.value?L():null),"data-bs-toggle":"modal","data-bs-target":"#modal-config-map"},"GENERATE",2)]),N(Us,{"yaml-data":p.value,title:$.value},null,8,["yaml-data","title"])]))}}),Qs=Q(Js,[["__scopeId","data-v-4d96127a"]]),Ws={class:"card w-100",ref:"workflowForm"},Xs={class:"card-body"},Zs={class:"card"},en={class:"card-body"},tn={class:"tab-content"},nn=B({__name:"YamlGenerate",setup(P){return O(),G(async()=>{}),(h,$)=>(n(),a("div",Ws,[$[1]||($[1]=e("div",{class:"card-header"},[e("div",{class:"card-title"},[e("h1",null,"YAML Generator")])],-1)),e("div",Xs,[e("div",Zs,[$[0]||($[0]=X('',1)),e("div",en,[e("div",tn,[N(xt),N(Ll),N(zo),N(ys),N(Qs)])])])])],512))}});export{nn as default}; diff --git a/src/main/resources/static/assets/YamlGenerate-DWF5D7eZ.js b/src/main/resources/static/assets/YamlGenerate-DWF5D7eZ.js new file mode 100644 index 00000000..501235ad --- /dev/null +++ b/src/main/resources/static/assets/YamlGenerate-DWF5D7eZ.js @@ -0,0 +1 @@ +import{d as B,g as A,h as I,r as f,o as n,c as a,a as e,t as F,f as O,i as G,j as c,l as m,F as D,k as j,m as W,n as K,b as N,p as X}from"./index-BKFNv1Gc.js";import{s as J}from"./request-D9joEmfF.js";import{_ as Q}from"./_plugin-vue_export-helper-DlAUqK2U.js";const Z=P=>J.post("/manifest/v1/generator/yaml/pod",P),ee=P=>J.post("/manifest/v1/generator/yaml/service",P),te=P=>J.post("/manifest/v1/generator/yaml/hpa",P),le=P=>J.post("/manifest/v1/generator/yaml/deployments",P),oe=P=>J.post("/manifest/v1/generator/yaml/configmap",P),se={class:"modal",id:"modal-pod",tabindex:"-1"},ne={class:"modal-dialog modal-lg",role:"document"},ae={class:"modal-content"},re={class:"modal-header"},ie={class:"modal-title"},de={class:"modal-body"},ue={class:"card"},ce={class:"card-body"},me=B({__name:"podModal",props:{title:{},yamlData:{}},setup(P){const h=P,$=A(()=>h.yamlData);I($,async()=>{$.value&&await l()});const w=f(""),l=async()=>{w.value=h.yamlData};return(_,r)=>(n(),a("div",se,[e("div",ne,[e("div",ae,[e("div",re,[e("h5",ie,F(h.title),1),r[0]||(r[0]=e("button",{type:"button",class:"btn-close","data-bs-dismiss":"modal","aria-label":"Close"},null,-1))]),e("div",de,[e("div",ue,[e("div",ce,[r[1]||(r[1]=e("h4",null,"YAML",-1)),e("div",null,[e("pre",null,F(w.value),1)])])])])])])]))}}),pe={class:"tab-pane active show",id:"tabs-pod"},ve={class:"card"},be={class:"card-body"},he={class:"mb-3"},ye={class:"mb-3"},fe={class:"mb-3"},ge=["onUpdate:modelValue"],_e=["onUpdate:modelValue"],we={class:"btn-list"},ke={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-plus",style:{margin:"0 !important"}},$e=["onClick"],xe={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-minus",style:{margin:"0 !important"}},Ce={class:"card mt-4"},Ue={class:"card-body"},Me={class:"mb-3"},Ve={class:"btn-list"},Pe={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-plus",style:{margin:"0 !important"}},qe=["onClick"],Se={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-minus",style:{margin:"0 !important"}},De={class:"row",style:{width:"68% !important"}},je={class:"col mt-4"},ze=["onUpdate:modelValue"],He={class:"col mt-4"},Le=["onUpdate:modelValue"],Be={class:"mb-3"},Re=["onUpdate:modelValue"],Ne=["onUpdate:modelValue"],Fe={class:"btn-list"},Ae=["onClick"],Ee={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-plus",style:{margin:"0 !important"}},Te=["onClick"],Ye={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-minus",style:{margin:"0 !important"}},Oe={class:"mb-3"},Ge={class:"btn-list"},Ie=["onClick"],Ke={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-plus",style:{margin:"0 !important"}},Je=["onClick"],Qe={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-minus",style:{margin:"0 !important"}},We={class:"row",style:{width:"68% !important"}},Xe={class:"col mt-4"},Ze=["onUpdate:modelValue"],et={class:"col mt-4"},tt=["onUpdate:modelValue"],lt={class:"row",style:{width:"68% !important"}},ot={class:"col mt-4"},st=["onUpdate:modelValue"],nt={class:"col mt-4"},at=["onUpdate:modelValue"],rt={key:0,class:"border-bottom",style:{width:"100%","margin-top":"10px"}},it={class:"mb-3"},dt={class:"row",style:{width:"68% !important"}},ut={class:"col mt-4"},ct=["onUpdate:modelValue"],mt={class:"col mt-4"},pt=["onUpdate:modelValue"],vt={class:"row",style:{width:"68% !important"}},bt={class:"col mt-4"},ht=["onUpdate:modelValue"],yt={class:"col mt-4"},ft=["onUpdate:modelValue"],gt={key:0,class:"border-bottom",style:{width:"100%","margin-top":"10px"}},_t={class:"mb-3"},wt={class:"mt-4"},kt={class:"btn-list justify-content-end mt-4"},$t=B({__name:"podForm",setup(P){const h=O(),$=f(""),w=f({}),l=f({}),_=f([]),r=f({}),p=f([]),M=f(""),V=A(()=>{if(!l.value.name||l.value.name.trim()===""||!l.value.namespace||l.value.namespace.trim()==="")return!1;for(const i of p.value)if(!i.name||i.name.trim()===""||!i.image||i.image.trim()==="")return!1;return!0});G(async()=>{await L()});const L=()=>{$.value="Pod",l.value.name="",l.value.namespace="",_.value.push({key:"",value:""}),r.value={containers:[],restartPolicy:""},p.value.push({name:"",image:"",env:[{name:"",value:""}],ports:[{name:"",containerPort:"",hostPort:"",protocol:""}],resources:{limits:{memory:"",cpu:""},requests:{memory:"",cpu:""}}})},R=async()=>{if(!l.value.name||l.value.name.trim()===""){h.error("Please enter pod name.");const s=document.querySelector('input[v-model="metadata.name"]');s==null||s.focus();return}if(!l.value.namespace||l.value.namespace.trim()===""){h.error("Please enter namespace.");const s=document.querySelector('input[v-model="metadata.namespace"]');s==null||s.focus();return}for(let s=0;s(s[b.key]=b.value,s),{});l.value.labels=i,w.value.metadata=l.value,r.value.containers=p.value,w.value.spec=r.value;const{data:t}=await Z(w.value);M.value=t},E=()=>{_.value.push({key:"",value:""})},T=i=>{_.value.length!==1&&_.value.splice(i,1)},H=()=>{p.value.push({name:"",image:"",env:[{name:"",value:""}],ports:[{name:"",containerPort:"",hostPort:"",protocol:""}],resources:{limits:{memory:"",cpu:""},requests:{memory:"",cpu:""}}})},u=i=>{p.value.length!==1&&p.value.splice(i,1)},o=i=>{p.value[i].env.push({name:"",value:""})},U=(i,t)=>{p.value[i].env.length!==1&&p.value[i].env.splice(t,1)},x=i=>{p.value[i].ports.push({name:"",containerPort:"",hostPort:"",protocol:""})},k=(i,t)=>{p.value[i].ports.length!==1&&p.value[i].ports.splice(t,1)};return(i,t)=>(n(),a("div",pe,[e("div",ve,[t[9]||(t[9]=e("div",{class:"card-header"},[e("h3",{class:"card-title"},"Metadata Section")],-1)),e("div",be,[e("div",he,[t[4]||(t[4]=e("label",{class:"form-label required"},"- Name",-1)),c(e("input",{type:"text",class:"form-control w-33",name:"example-text-input","onUpdate:modelValue":t[0]||(t[0]=s=>l.value.name=s),placeholder:"pod-01"},null,512),[[m,l.value.name]])]),e("div",ye,[t[5]||(t[5]=e("label",{class:"form-label required"},"- Namespace",-1)),c(e("input",{type:"text",class:"form-control w-33",name:"example-text-input","onUpdate:modelValue":t[1]||(t[1]=s=>l.value.namespace=s),placeholder:"namespace"},null,512),[[m,l.value.namespace]])]),e("div",fe,[t[8]||(t[8]=e("label",{class:"form-label"},"- Labels",-1)),(n(!0),a(D,null,j(_.value,(s,b)=>(n(),a("div",{class:"generate-form",key:b},[c(e("input",{type:"text",class:"form-control w-33","onUpdate:modelValue":y=>s.key=y,placeholder:"key"},null,8,ge),[[m,s.key]]),c(e("input",{type:"text",class:"form-control w-33","onUpdate:modelValue":y=>s.value=y,placeholder:"value"},null,8,_e),[[m,s.value]]),e("div",we,[e("button",{class:"btn btn-primary",onClick:E,style:{"text-align":"center !important"}},[(n(),a("svg",ke,t[6]||(t[6]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M12 5l0 14"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))]),e("button",{class:"btn btn-primary",onClick:y=>T(b)},[(n(),a("svg",xe,t[7]||(t[7]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))],8,$e)])]))),128))])])]),e("div",Ce,[t[31]||(t[31]=e("div",{class:"card-header"},[e("h3",{class:"card-title"},"Spec Section")],-1)),e("div",Ue,[(n(!0),a(D,null,j(p.value,(s,b)=>(n(),a("div",{class:"mt-4",key:b},[e("div",Me,[e("div",Ve,[t[12]||(t[12]=e("label",{class:"form-label"},"Containers",-1)),e("button",{class:"btn btn-primary",onClick:H,style:{"text-align":"center !important"}},[(n(),a("svg",Pe,t[10]||(t[10]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M12 5l0 14"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))]),e("button",{class:"btn btn-primary",onClick:y=>u(b)},[(n(),a("svg",Se,t[11]||(t[11]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))],8,qe)]),e("div",De,[e("div",je,[t[13]||(t[13]=e("label",{class:"form-label required"},"- Name",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":y=>s.name=y},null,8,ze),[[m,s.name]])]),e("div",He,[t[14]||(t[14]=e("label",{class:"form-label required"},"- Image",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":y=>s.image=y},null,8,Le),[[m,s.image]])])])]),e("div",Be,[t[17]||(t[17]=e("label",{class:"form-label"},"- Env",-1)),(n(!0),a(D,null,j(s.env,(y,Y)=>(n(),a("div",{class:"generate-form",key:Y},[c(e("input",{type:"text",class:"form-control w-33","onUpdate:modelValue":g=>y.name=g,placeholder:"key"},null,8,Re),[[m,y.name]]),c(e("input",{type:"text",class:"form-control w-33","onUpdate:modelValue":g=>y.value=g,placeholder:"value"},null,8,Ne),[[m,y.value]]),e("div",Fe,[e("button",{class:"btn btn-primary",onClick:g=>o(b),style:{"text-align":"center !important"}},[(n(),a("svg",Ee,t[15]||(t[15]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M12 5l0 14"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))],8,Ae),e("button",{class:"btn btn-primary",onClick:g=>U(b,Y)},[(n(),a("svg",Ye,t[16]||(t[16]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))],8,Te)])]))),128))]),e("div",Oe,[(n(!0),a(D,null,j(s.ports,(y,Y)=>(n(),a("div",{class:"mt-4",key:Y},[e("div",Ge,[t[20]||(t[20]=e("label",{class:"form-label"},"Ports",-1)),e("button",{class:"btn btn-primary",onClick:g=>x(b),style:{"text-align":"center !important"}},[(n(),a("svg",Ke,t[18]||(t[18]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M12 5l0 14"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))],8,Ie),e("button",{class:"btn btn-primary",onClick:g=>k(b,Y)},[(n(),a("svg",Qe,t[19]||(t[19]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))],8,Je)]),e("div",We,[e("div",Xe,[t[21]||(t[21]=e("label",{class:"form-label"},"- Name",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":g=>y.name=g},null,8,Ze),[[m,y.name]])]),e("div",et,[t[22]||(t[22]=e("label",{class:"form-label"},"- Port",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":g=>y.containerPort=g},null,8,tt),[[m,y.containerPort]])])]),e("div",lt,[e("div",ot,[t[23]||(t[23]=e("label",{class:"form-label"},"- Protocol",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":g=>y.protocol=g},null,8,st),[[m,y.protocol]])]),e("div",nt,[t[24]||(t[24]=e("label",{class:"form-label"},"- Host Port",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":g=>y.hostPort=g},null,8,at),[[m,y.hostPort]])])]),s.ports.length>1?(n(),a("div",rt)):W("",!0)]))),128))]),e("div",it,[t[29]||(t[29]=e("div",{class:"btn-list"},[e("label",{class:"form-label"},"Resources")],-1)),e("div",dt,[e("div",ut,[t[25]||(t[25]=e("label",{class:"form-label"},"- Limits CPU",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":y=>s.resources.limits.cpu=y},null,8,ct),[[m,s.resources.limits.cpu]])]),e("div",mt,[t[26]||(t[26]=e("label",{class:"form-label"},"- Limits Memory",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":y=>s.resources.limits.memory=y},null,8,pt),[[m,s.resources.limits.memory]])])]),e("div",vt,[e("div",bt,[t[27]||(t[27]=e("label",{class:"form-label"},"- Requests CPU",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":y=>s.resources.requests.cpu=y},null,8,ht),[[m,s.resources.requests.cpu]])]),e("div",yt,[t[28]||(t[28]=e("label",{class:"form-label"},"- Requests Memory",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":y=>s.resources.requests.memory=y},null,8,ft),[[m,s.resources.requests.memory]])])])]),p.value.length>1?(n(),a("div",gt)):W("",!0)]))),128)),e("div",_t,[e("div",wt,[t[30]||(t[30]=e("label",{class:"form-label"},"- Restart Policy",-1)),c(e("input",{type:"text",class:"form-control w-33","onUpdate:modelValue":t[2]||(t[2]=s=>r.value.restartPolicy=s)},null,512),[[m,r.value.restartPolicy]])])])])]),e("div",kt,[e("a",{class:K(["btn btn-primary",{disabled:!V.value}]),onClick:t[3]||(t[3]=s=>V.value?R():null),"data-bs-toggle":"modal","data-bs-target":"#modal-pod"},"GENERATE",2)]),N(me,{"yaml-data":M.value,title:$.value},null,8,["yaml-data","title"])]))}}),xt=Q($t,[["__scopeId","data-v-89045615"]]),Ct={class:"modal",id:"modal-deploy",tabindex:"-1"},Ut={class:"modal-dialog modal-lg",role:"document"},Mt={class:"modal-content"},Vt={class:"modal-header"},Pt={class:"modal-title"},qt={class:"modal-body"},St={class:"card"},Dt={class:"card-body"},jt=B({__name:"deployModal",props:{title:{},yamlData:{}},setup(P){const h=P,$=A(()=>h.yamlData);I($,async()=>{await l()});const w=f(""),l=async()=>{w.value=h.yamlData};return(_,r)=>(n(),a("div",Ct,[e("div",Ut,[e("div",Mt,[e("div",Vt,[e("h5",Pt,F(h.title),1),r[0]||(r[0]=e("button",{type:"button",class:"btn-close","data-bs-dismiss":"modal","aria-label":"Close"},null,-1))]),e("div",qt,[e("div",St,[e("div",Dt,[r[1]||(r[1]=e("h4",null,"YAML",-1)),e("div",null,[e("pre",null,F(w.value),1)])])])])])])]))}}),zt={class:"tab-pane",id:"tabs-deployment"},Ht={class:"card"},Lt={class:"card-body"},Bt={class:"mb-3"},Rt={class:"mb-3"},Nt={class:"mb-3"},Ft=["onUpdate:modelValue"],At=["onUpdate:modelValue"],Et={class:"btn-list"},Tt={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-plus",style:{margin:"0 !important"}},Yt=["onClick"],Ot={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-minus",style:{margin:"0 !important"}},Gt={class:"card mt-4"},It={class:"card-body"},Kt={class:"mb-3"},Jt={class:"mb-3"},Qt=["onUpdate:modelValue"],Wt=["onUpdate:modelValue"],Xt={class:"btn-list"},Zt={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-plus",style:{margin:"0 !important"}},el=["onClick"],tl={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-minus",style:{margin:"0 !important"}},ll={class:"mb-3"},ol=["onUpdate:modelValue"],sl=["onUpdate:modelValue"],nl={class:"btn-list"},al={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-plus",style:{margin:"0 !important"}},rl=["onClick"],il={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-minus",style:{margin:"0 !important"}},dl={class:"mb-3"},ul={class:"btn-list"},cl={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-plus",style:{margin:"0 !important"}},ml=["onClick"],pl={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-minus",style:{margin:"0 !important"}},vl={class:"row",style:{width:"68% !important"}},bl={class:"col mt-4"},hl=["onUpdate:modelValue"],yl={class:"col mt-4"},fl=["onUpdate:modelValue"],gl={class:"mb-3"},_l=["onUpdate:modelValue"],wl={class:"btn-list"},kl=["onClick"],$l={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-plus",style:{margin:"0 !important"}},xl=["onClick"],Cl={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-minus",style:{margin:"0 !important"}},Ul={class:"mb-3"},Ml=["onUpdate:modelValue"],Vl=["onUpdate:modelValue"],Pl={class:"btn-list"},ql=["onClick"],Sl={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-plus",style:{margin:"0 !important"}},Dl=["onClick"],jl={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-minus",style:{margin:"0 !important"}},zl={class:"btn-list justify-content-end mt-4"},Hl=B({__name:"deploymentForm",setup(P){const h=O(),$=f(""),w=f({}),l=f({}),_=f([]),r=f([]),p=f([]),M=f({}),V=f([]),L=f(""),R=A(()=>{if(!l.value.name||l.value.name.trim()===""||!l.value.namespace||l.value.namespace.trim()==="")return!1;for(const g of V.value)if(!g.name||g.name.trim()===""||!g.image||g.image.trim()==="")return!1;return!0});G(async()=>{await E()});const E=()=>{$.value="Deployment",l.value.name="",l.value.namespace="",_.value.push({key:"",value:""}),r.value.push({key:"",value:""}),p.value.push({key:"",value:""}),M.value={replicas:"",selector:{matchLabels:{}},template:{metadata:{labels:{}},spec:{containers:[]}}},V.value.push({name:"",image:"",env:[{name:"",value:""}],ports:[{containerPort:""}]})},T=async()=>{if(!l.value.name||l.value.name.trim()===""){h.error("Please enter deployment name.");const v=document.querySelector('input[v-model="metadata.name"]');v==null||v.focus();return}if(!l.value.namespace||l.value.namespace.trim()===""){h.error("Please enter namespace.");const v=document.querySelector('input[v-model="metadata.namespace"]');v==null||v.focus();return}for(let v=0;v(v[q.key]=q.value,v),{}),d=r.value.reduce((v,q)=>(v[q.key]=q.value,v),{}),C=p.value.reduce((v,q)=>(v[q.key]=q.value,v),{});l.value.labels=g,w.value.metadata=l.value,M.value.selector.matchLabels=d,M.value.template.metadata.labels=C,M.value.template.spec.containers=V.value,w.value.spec=M.value,console.log("deployFormData.value : ",w.value);const{data:S}=await le(w.value);L.value=S},H=()=>{_.value.push({key:"",value:""})},u=g=>{_.value.length!==1&&_.value.splice(g,1)},o=()=>{r.value.push({key:"",value:""})},U=g=>{r.value.length!==1&&r.value.splice(g,1)},x=()=>{p.value.push({key:"",value:""})},k=g=>{p.value.length!==1&&p.value.splice(g,1)},i=()=>{V.value.push({name:"",image:"",env:[{name:"",value:""}],ports:[{containerPort:""}]})},t=g=>{V.value.length!==1&&V.value.splice(g,1)},s=g=>{V.value[g].env.push({name:"",value:""})},b=(g,d)=>{V.value[g].env.length!==1&&V.value[g].env.splice(d,1)},y=g=>{V.value[g].ports.push({containerPort:""})},Y=(g,d)=>{V.value[g].ports.length!==1&&V.value[g].ports.splice(d,1)};return(g,d)=>(n(),a("div",zt,[e("div",Ht,[d[9]||(d[9]=e("div",{class:"card-header"},[e("h3",{class:"card-title"},"Metadata Section")],-1)),e("div",Lt,[e("div",Bt,[d[4]||(d[4]=e("label",{class:"form-label required"},"- Name",-1)),c(e("input",{type:"text",class:"form-control w-33",name:"example-text-input","onUpdate:modelValue":d[0]||(d[0]=C=>l.value.name=C),placeholder:"deployment-01"},null,512),[[m,l.value.name]])]),e("div",Rt,[d[5]||(d[5]=e("label",{class:"form-label required"},"- Namespace",-1)),c(e("input",{type:"text",class:"form-control w-33",name:"example-text-input","onUpdate:modelValue":d[1]||(d[1]=C=>l.value.namespace=C),placeholder:"namespace"},null,512),[[m,l.value.namespace]])]),e("div",Nt,[d[8]||(d[8]=e("label",{class:"form-label"},"- Labels",-1)),(n(!0),a(D,null,j(_.value,(C,S)=>(n(),a("div",{class:"generate-form",key:S},[c(e("input",{type:"text",class:"form-control w-33","onUpdate:modelValue":v=>C.key=v,placeholder:"key"},null,8,Ft),[[m,C.key]]),c(e("input",{type:"text",class:"form-control w-33","onUpdate:modelValue":v=>C.value=v,placeholder:"value"},null,8,At),[[m,C.value]]),e("div",Et,[e("button",{class:"btn btn-primary",onClick:H,style:{"text-align":"center !important"}},[(n(),a("svg",Tt,d[6]||(d[6]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M12 5l0 14"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))]),e("button",{class:"btn btn-primary",onClick:v=>u(S)},[(n(),a("svg",Ot,d[7]||(d[7]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))],8,Yt)])]))),128))])])]),e("div",Gt,[d[29]||(d[29]=e("div",{class:"card-header"},[e("h3",{class:"card-title"},"Spec Section")],-1)),e("div",It,[e("div",Kt,[d[10]||(d[10]=e("label",{class:"form-label"},"- Replicas",-1)),c(e("input",{type:"text",class:"form-control w-33","onUpdate:modelValue":d[2]||(d[2]=C=>M.value.replicas=C)},null,512),[[m,M.value.replicas]])]),e("div",Jt,[d[13]||(d[13]=e("label",{class:"form-label"},"- Match Labels",-1)),(n(!0),a(D,null,j(r.value,(C,S)=>(n(),a("div",{class:"generate-form",key:S},[c(e("input",{type:"text",class:"form-control w-33","onUpdate:modelValue":v=>C.key=v,placeholder:"key"},null,8,Qt),[[m,C.key]]),c(e("input",{type:"text",class:"form-control w-33","onUpdate:modelValue":v=>C.value=v,placeholder:"value"},null,8,Wt),[[m,C.value]]),e("div",Xt,[e("button",{class:"btn btn-primary",onClick:o,style:{"text-align":"center !important"}},[(n(),a("svg",Zt,d[11]||(d[11]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M12 5l0 14"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))]),e("button",{class:"btn btn-primary",onClick:v=>U(S)},[(n(),a("svg",tl,d[12]||(d[12]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))],8,el)])]))),128))]),d[28]||(d[28]=e("div",{class:"mb-3"},[e("label",{class:"form-label"},"Template")],-1)),e("div",ll,[d[16]||(d[16]=e("div",{class:"btn-list"},[e("label",{class:"form-label"},"- Labels")],-1)),(n(!0),a(D,null,j(p.value,(C,S)=>(n(),a("div",{class:"generate-form",key:S},[c(e("input",{type:"text",class:"form-control w-33","onUpdate:modelValue":v=>C.key=v,placeholder:"key"},null,8,ol),[[m,C.key]]),c(e("input",{type:"text",class:"form-control w-33","onUpdate:modelValue":v=>C.value=v,placeholder:"value"},null,8,sl),[[m,C.value]]),e("div",nl,[e("button",{class:"btn btn-primary",onClick:x,style:{"text-align":"center !important"}},[(n(),a("svg",al,d[14]||(d[14]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M12 5l0 14"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))]),e("button",{class:"btn btn-primary",onClick:v=>k(S)},[(n(),a("svg",il,d[15]||(d[15]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))],8,rl)])]))),128))]),(n(!0),a(D,null,j(V.value,(C,S)=>(n(),a("div",{key:S},[e("div",dl,[e("div",ul,[d[19]||(d[19]=e("label",{class:"form-label"},"Containers",-1)),e("button",{class:"btn btn-primary",onClick:i,style:{"text-align":"center !important"}},[(n(),a("svg",cl,d[17]||(d[17]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M12 5l0 14"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))]),e("button",{class:"btn btn-primary",onClick:v=>t(S)},[(n(),a("svg",pl,d[18]||(d[18]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))],8,ml)]),e("div",vl,[e("div",bl,[d[20]||(d[20]=e("label",{class:"form-label required"},"- Name",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":v=>C.name=v},null,8,hl),[[m,C.name]])]),e("div",yl,[d[21]||(d[21]=e("label",{class:"form-label required"},"- Image",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":v=>C.image=v},null,8,fl),[[m,C.image]])])])]),e("div",gl,[d[24]||(d[24]=e("label",{class:"form-label"},"- Port",-1)),(n(!0),a(D,null,j(C.ports,(v,q)=>(n(),a("div",{class:"generate-form",key:q},[c(e("input",{type:"text",class:"form-control w-33","onUpdate:modelValue":z=>v.containerPort=z,placeholder:"value"},null,8,_l),[[m,v.containerPort]]),e("div",wl,[e("button",{class:"btn btn-primary",onClick:z=>y(S),style:{"text-align":"center !important"}},[(n(),a("svg",$l,d[22]||(d[22]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M12 5l0 14"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))],8,kl),e("button",{class:"btn btn-primary",onClick:z=>Y(S,q)},[(n(),a("svg",Cl,d[23]||(d[23]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))],8,xl)])]))),128))]),e("div",Ul,[d[27]||(d[27]=e("label",{class:"form-label"},"- Env",-1)),(n(!0),a(D,null,j(C.env,(v,q)=>(n(),a("div",{class:"generate-form",key:q},[c(e("input",{type:"text",class:"form-control w-33","onUpdate:modelValue":z=>v.name=z,placeholder:"key"},null,8,Ml),[[m,v.name]]),c(e("input",{type:"text",class:"form-control w-33","onUpdate:modelValue":z=>v.value=z,placeholder:"value"},null,8,Vl),[[m,v.value]]),e("div",Pl,[e("button",{class:"btn btn-primary",onClick:z=>s(S),style:{"text-align":"center !important"}},[(n(),a("svg",Sl,d[25]||(d[25]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M12 5l0 14"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))],8,ql),e("button",{class:"btn btn-primary",onClick:z=>b(S,q)},[(n(),a("svg",jl,d[26]||(d[26]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))],8,Dl)])]))),128))])]))),128))])]),e("div",zl,[e("a",{class:K(["btn btn-primary",{disabled:!R.value}]),onClick:d[3]||(d[3]=C=>R.value?T():null),"data-bs-toggle":"modal","data-bs-target":"#modal-deploy"},"GENERATE",2)]),N(jt,{"yaml-data":L.value,title:$.value},null,8,["yaml-data","title"])]))}}),Ll=Q(Hl,[["__scopeId","data-v-10151163"]]),Bl={class:"modal",id:"modal-service",tabindex:"-1"},Rl={class:"modal-dialog modal-lg",role:"document"},Nl={class:"modal-content"},Fl={class:"modal-header"},Al={class:"modal-title"},El={class:"modal-body"},Tl={class:"card"},Yl={class:"card-body"},Ol=B({__name:"servcieModal",props:{title:{},yamlData:{}},setup(P){const h=P,$=A(()=>h.yamlData);I($,async()=>{await l()});const w=f(""),l=async()=>{w.value=h.yamlData};return(_,r)=>(n(),a("div",Bl,[e("div",Rl,[e("div",Nl,[e("div",Fl,[e("h5",Al,F(h.title),1),r[0]||(r[0]=e("button",{type:"button",class:"btn-close","data-bs-dismiss":"modal","aria-label":"Close"},null,-1))]),e("div",El,[e("div",Tl,[e("div",Yl,[r[1]||(r[1]=e("h4",null,"YAML",-1)),e("div",null,[e("pre",null,F(w.value),1)])])])])])])]))}}),Gl={class:"tab-pane",id:"tabs-service"},Il={class:"card"},Kl={class:"card-body"},Jl={class:"mb-3"},Ql={class:"mb-3"},Wl={class:"mb-3"},Xl=["onUpdate:modelValue"],Zl=["onUpdate:modelValue"],eo={class:"btn-list"},to={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-plus",style:{margin:"0 !important"}},lo=["onClick"],oo={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-minus",style:{margin:"0 !important"}},so={class:"card mt-4"},no={class:"card-body"},ao={class:"mb-3"},ro=["onUpdate:modelValue"],io=["onUpdate:modelValue"],uo={class:"btn-list"},co={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-plus",style:{margin:"0 !important"}},mo=["onClick"],po={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-minus",style:{margin:"0 !important"}},vo={class:"mb-3"},bo={class:"btn-list"},ho={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-plus",style:{margin:"0 !important"}},yo=["onClick"],fo={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-minus",style:{margin:"0 !important"}},go={class:"row",style:{width:"68% !important"}},_o={class:"col mt-4"},wo=["onUpdate:modelValue"],ko={class:"col mt-4"},$o=["onUpdate:modelValue"],xo={class:"row",style:{width:"68% !important"}},Co={class:"col mt-4"},Uo=["onUpdate:modelValue"],Mo={class:"col mt-4"},Vo=["onUpdate:modelValue"],Po={key:0,class:"border-bottom",style:{width:"100%","margin-top":"10px"}},qo={class:"row",style:{width:"68% !important"}},So={class:"col mt-4"},Do={class:"btn-list justify-content-end mt-4"},jo=B({__name:"serviceForm",setup(P){const h=O(),$=f(""),w=f({}),l=f({}),_=f([]),r=f({}),p=f([]),M=f([]);f("");const V=f(""),L=A(()=>{if(!l.value.name||l.value.name.trim()===""||!l.value.namespace||l.value.namespace.trim()==="")return!1;for(const k of M.value)if(!k.port||k.port.trim()===""||!k.targetPort||k.targetPort.trim()==="")return!1;return!0});G(async()=>{await R()});const R=()=>{$.value="Service",l.value={name:"",namespace:"",labels:{}},r.value={selector:{},ports:[],type:""},_.value.push({key:"",value:""}),p.value.push({key:"",value:""}),M.value.push({protocol:"",port:"",targetPort:"",nodePort:""})},E=async()=>{if(!l.value.name||l.value.name.trim()===""){h.error("Please enter service name.");const s=document.querySelector('input[v-model="metadata.name"]');s==null||s.focus();return}if(!l.value.namespace||l.value.namespace.trim()===""){h.error("Please enter namespace.");const s=document.querySelector('input[v-model="metadata.namespace"]');s==null||s.focus();return}for(let s=0;s(s[b.key]=b.value,s),{});l.value.labels=k,w.value.metadata=l.value;const i=p.value.reduce((s,b)=>(s[b.key]=b.value,s),{});r.value.selector=i,r.value.ports=M.value,w.value.spec=r.value;const{data:t}=await ee(w.value);V.value=t},T=()=>{_.value.push({key:"",value:""})},H=k=>{_.value.length!==1&&_.value.splice(k,1)},u=()=>{p.value.push({key:"",value:""})},o=k=>{p.value.length!==1&&p.value.splice(k,1)},U=()=>{M.value.push({protocol:"",port:"",targetPort:"",nodePort:""})},x=k=>{M.value.length!==1&&M.value.splice(k,1)};return(k,i)=>(n(),a("div",Gl,[e("div",Il,[i[9]||(i[9]=e("div",{class:"card-header"},[e("h3",{class:"card-title"},"Metadata Section")],-1)),e("div",Kl,[e("div",Jl,[i[4]||(i[4]=e("label",{class:"form-label required"},"- Name",-1)),c(e("input",{type:"text",class:"form-control w-33",name:"example-text-input","onUpdate:modelValue":i[0]||(i[0]=t=>l.value.name=t),placeholder:"name-01"},null,512),[[m,l.value.name]])]),e("div",Ql,[i[5]||(i[5]=e("label",{class:"form-label required"},"- Namespace",-1)),c(e("input",{type:"text",class:"form-control w-33",name:"example-text-input","onUpdate:modelValue":i[1]||(i[1]=t=>l.value.namespace=t),placeholder:"namespace"},null,512),[[m,l.value.namespace]])]),e("div",Wl,[i[8]||(i[8]=e("label",{class:"form-label"},"- Labels",-1)),(n(!0),a(D,null,j(_.value,(t,s)=>(n(),a("div",{class:"generate-form",key:s},[c(e("input",{type:"text",class:"form-control w-33",name:"example-password-input","onUpdate:modelValue":b=>t.key=b,placeholder:"key"},null,8,Xl),[[m,t.key]]),c(e("input",{type:"text",class:"form-control w-33",name:"example-password-input","onUpdate:modelValue":b=>t.value=b,placeholder:"value"},null,8,Zl),[[m,t.value]]),e("div",eo,[e("button",{class:"btn btn-primary",onClick:T,style:{"text-align":"center !important"}},[(n(),a("svg",to,i[6]||(i[6]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M12 5l0 14"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))]),e("button",{class:"btn btn-primary",onClick:b=>H(s)},[(n(),a("svg",oo,i[7]||(i[7]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))],8,lo)])]))),128))])])]),e("div",so,[i[21]||(i[21]=e("div",{class:"card-header"},[e("h3",{class:"card-title"},"Spec Section")],-1)),e("div",no,[e("div",ao,[i[12]||(i[12]=e("label",{class:"form-label"},"- Selector",-1)),(n(!0),a(D,null,j(p.value,(t,s)=>(n(),a("div",{class:"generate-form",key:s},[c(e("input",{type:"text",class:"form-control w-33",name:"example-password-input","onUpdate:modelValue":b=>t.key=b,placeholder:"key"},null,8,ro),[[m,t.key]]),c(e("input",{type:"text",class:"form-control w-33",name:"example-password-input","onUpdate:modelValue":b=>t.value=b,placeholder:"value"},null,8,io),[[m,t.value]]),e("div",uo,[e("button",{class:"btn btn-primary",onClick:u,style:{"text-align":"center !important"}},[(n(),a("svg",co,i[10]||(i[10]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M12 5l0 14"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))]),e("button",{class:"btn btn-primary",onClick:b=>o(s)},[(n(),a("svg",po,i[11]||(i[11]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))],8,mo)])]))),128))]),e("div",vo,[(n(!0),a(D,null,j(M.value,(t,s)=>(n(),a("div",{class:"mt-4",key:s},[e("div",bo,[i[15]||(i[15]=e("label",{class:"form-label"},"Ports",-1)),e("button",{class:"btn btn-primary",onClick:U,style:{"text-align":"center !important"}},[(n(),a("svg",ho,i[13]||(i[13]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M12 5l0 14"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))]),e("button",{class:"btn btn-primary",onClick:b=>x(s)},[(n(),a("svg",fo,i[14]||(i[14]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))],8,yo)]),e("div",go,[e("div",_o,[i[16]||(i[16]=e("label",{class:"form-label required"},"- Port",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":b=>t.port=b},null,8,wo),[[m,t.port]])]),e("div",ko,[i[17]||(i[17]=e("label",{class:"form-label required"},"- Target Port",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":b=>t.targetPort=b},null,8,$o),[[m,t.targetPort]])])]),e("div",xo,[e("div",Co,[i[18]||(i[18]=e("label",{class:"form-label"},"- Protocol",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":b=>t.protocol=b},null,8,Uo),[[m,t.protocol]])]),e("div",Mo,[i[19]||(i[19]=e("label",{class:"form-label"},"- Node Port",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":b=>t.nodePort=b},null,8,Vo),[[m,t.nodePort]])])]),M.value.length>1?(n(),a("div",Po)):W("",!0)]))),128)),e("div",qo,[e("div",So,[i[20]||(i[20]=e("label",{class:"form-label"},"- Type",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":i[2]||(i[2]=t=>r.value.type=t)},null,512),[[m,r.value.type]])])])])])]),e("div",Do,[e("a",{class:K(["btn btn-primary",{disabled:!L.value}]),onClick:i[3]||(i[3]=t=>L.value?E():null),"data-bs-toggle":"modal","data-bs-target":"#modal-service"},"GENERATE",2)]),N(Ol,{"yaml-data":V.value,title:$.value},null,8,["yaml-data","title"])]))}}),zo=Q(jo,[["__scopeId","data-v-a6f75123"]]),Ho={class:"modal",id:"modal-yaml",tabindex:"-1"},Lo={class:"modal-dialog modal-lg",role:"document"},Bo={class:"modal-content"},Ro={class:"modal-header"},No={class:"modal-title"},Fo={class:"modal-body"},Ao={class:"card"},Eo={class:"card-body"},To=B({__name:"yamlModal",props:{title:{},yamlData:{}},setup(P){const h=P,$=A(()=>h.yamlData);I($,async()=>{await l()});const w=f(""),l=async()=>{w.value=h.yamlData};return(_,r)=>(n(),a("div",Ho,[e("div",Lo,[e("div",Bo,[e("div",Ro,[e("h5",No,F(h.title),1),r[0]||(r[0]=e("button",{type:"button",class:"btn-close","data-bs-dismiss":"modal","aria-label":"Close"},null,-1))]),e("div",Fo,[e("div",Ao,[e("div",Eo,[r[1]||(r[1]=e("h4",null,"YAML",-1)),e("div",null,[e("pre",null,F(w.value),1)])])])])])])]))}}),Yo={class:"tab-pane",id:"tabs-hpa"},Oo={class:"card"},Go={class:"card-body"},Io={class:"mb-3"},Ko={class:"mb-3"},Jo={class:"mb-3"},Qo=["onUpdate:modelValue"],Wo=["onUpdate:modelValue"],Xo={class:"btn-list"},Zo={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-plus",style:{margin:"0 !important"}},es=["onClick"],ts={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-minus",style:{margin:"0 !important"}},ls={class:"card mt-4"},os={class:"card-body"},ss={class:"row",style:{width:"68% !important"}},ns={class:"col"},as={class:"col"},rs={class:"row",style:{width:"68% !important"}},is={class:"col"},ds={class:"row",style:{width:"68% !important"}},us={class:"col"},cs={class:"row",style:{width:"68% !important"}},ms={class:"col"},ps={class:"row",style:{width:"68% !important"}},vs={class:"col"},bs={class:"btn-list justify-content-end mt-4"},hs=B({__name:"hpaForm",setup(P){const h=O(),$=f(""),w=f({}),l=f({}),_=f([]),r=f({}),p=f({}),M=f(""),V=A(()=>!(!l.value.name||l.value.name.trim()===""||!l.value.namespace||l.value.namespace.trim()===""||!p.value.apiVersion||p.value.apiVersion.trim()===""||!p.value.kind||p.value.kind.trim()===""||!p.value.name||p.value.name.trim()===""||!r.value.minReplicas||r.value.minReplicas.trim()===""||!r.value.maxReplicas||r.value.maxReplicas.trim()===""||!r.value.targetCPUUtilizationPercentage||r.value.targetCPUUtilizationPercentage.trim()===""));G(async()=>{await L()});const L=()=>{$.value="HPA",l.value={name:"",namespace:"",labels:{}},_.value.push({key:"",value:""}),r.value={scaleTargetRef:{},minReplicas:"",maxReplicas:"",targetCPUUtilizationPercentage:""},p.value={apiVersion:"",kind:"",name:""}},R=async()=>{if(!l.value.name||l.value.name.trim()===""){h.error("Please enter HPA name.");const o=document.querySelector('input[v-model="metadata.name"]');o==null||o.focus();return}if(!l.value.namespace||l.value.namespace.trim()===""){h.error("Please enter namespace.");const o=document.querySelector('input[v-model="metadata.namespace"]');o==null||o.focus();return}if(!p.value.apiVersion||p.value.apiVersion.trim()===""){h.error("Please enter API version.");const o=document.querySelector('input[v-model="scaleTargetRef.apiVersion"]');o==null||o.focus();return}if(!p.value.kind||p.value.kind.trim()===""){h.error("Please enter kind.");const o=document.querySelector('input[v-model="scaleTargetRef.kind"]');o==null||o.focus();return}if(!p.value.name||p.value.name.trim()===""){h.error("Please enter target name.");const o=document.querySelector('input[v-model="scaleTargetRef.name"]');o==null||o.focus();return}if(!r.value.minReplicas||r.value.minReplicas.trim()===""){h.error("Please enter min replicas.");const o=document.querySelector('input[v-model="spec.minReplicas"]');o==null||o.focus();return}if(!r.value.maxReplicas||r.value.maxReplicas.trim()===""){h.error("Please enter max replicas.");const o=document.querySelector('input[v-model="spec.maxReplicas"]');o==null||o.focus();return}if(!r.value.targetCPUUtilizationPercentage||r.value.targetCPUUtilizationPercentage.trim()===""){h.error("Please enter CPU percentage.");const o=document.querySelector('input[v-model="spec.targetCPUUtilizationPercentage"]');o==null||o.focus();return}const H=_.value.reduce((o,U)=>(o[U.key]=U.value,o),{});l.value.labels=H,r.value.scaleTargetRef=p.value,w.value.metadata=l.value,w.value.spec=r.value;const{data:u}=await te(w.value);M.value=u},E=()=>{_.value.push({key:"",value:""})},T=H=>{_.value.length!==1&&_.value.splice(H,1)};return(H,u)=>(n(),a("div",Yo,[e("div",Oo,[u[14]||(u[14]=e("div",{class:"card-header"},[e("h3",{class:"card-title"},"Metadata Section")],-1)),e("div",Go,[e("div",Io,[u[9]||(u[9]=e("label",{class:"form-label required"},"- Name",-1)),c(e("input",{type:"text",class:"form-control w-33",name:"example-text-input","onUpdate:modelValue":u[0]||(u[0]=o=>l.value.name=o),placeholder:"name"},null,512),[[m,l.value.name]])]),e("div",Ko,[u[10]||(u[10]=e("label",{class:"form-label required"},"- Namespace",-1)),c(e("input",{type:"text",class:"form-control w-33",name:"example-text-input","onUpdate:modelValue":u[1]||(u[1]=o=>l.value.namespace=o),placeholder:"namespace"},null,512),[[m,l.value.namespace]])]),e("div",Jo,[u[13]||(u[13]=e("label",{class:"form-label"},"- Labels",-1)),(n(!0),a(D,null,j(_.value,(o,U)=>(n(),a("div",{class:"generate-form",key:U},[c(e("input",{type:"text",class:"form-control w-33",name:"example-password-input","onUpdate:modelValue":x=>o.key=x,placeholder:"key"},null,8,Qo),[[m,o.key]]),c(e("input",{type:"text",class:"form-control w-33",name:"example-password-input","onUpdate:modelValue":x=>o.value=x,placeholder:"value"},null,8,Wo),[[m,o.value]]),e("div",Xo,[e("button",{class:"btn btn-primary",onClick:E,style:{"text-align":"center !important"}},[(n(),a("svg",Zo,u[11]||(u[11]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M12 5l0 14"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))]),e("button",{class:"btn btn-primary",onClick:x=>T(U)},[(n(),a("svg",ts,u[12]||(u[12]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))],8,es)])]))),128))])])]),e("div",ls,[u[22]||(u[22]=e("div",{class:"card-header"},[e("h3",{class:"card-title"},"Spec Section")],-1)),e("div",os,[u[21]||(u[21]=e("div",{class:"mb-3"},[e("label",{class:"form-label"},"Scale Target")],-1)),e("div",ss,[e("div",ns,[u[15]||(u[15]=e("label",{class:"form-label required"},"- Api Version",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":u[2]||(u[2]=o=>p.value.apiVersion=o)},null,512),[[m,p.value.apiVersion]])]),e("div",as,[u[16]||(u[16]=e("label",{class:"form-label required"},"- Kind",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":u[3]||(u[3]=o=>p.value.kind=o)},null,512),[[m,p.value.kind]])])]),e("div",rs,[e("div",is,[u[17]||(u[17]=e("label",{class:"form-label required"},"- Name",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":u[4]||(u[4]=o=>p.value.name=o)},null,512),[[m,p.value.name]])])]),e("div",ds,[e("div",us,[u[18]||(u[18]=e("label",{class:"form-label required"},"- Min Replicas",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":u[5]||(u[5]=o=>r.value.minReplicas=o)},null,512),[[m,r.value.minReplicas]])])]),e("div",cs,[e("div",ms,[u[19]||(u[19]=e("label",{class:"form-label required"},"- Max Replicas",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":u[6]||(u[6]=o=>r.value.maxReplicas=o)},null,512),[[m,r.value.maxReplicas]])])]),e("div",ps,[e("div",vs,[u[20]||(u[20]=e("label",{class:"form-label required"},"- CPU Percentage",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":u[7]||(u[7]=o=>r.value.targetCPUUtilizationPercentage=o)},null,512),[[m,r.value.targetCPUUtilizationPercentage]])])])])]),e("div",bs,[e("a",{class:K(["btn btn-primary",{disabled:!V.value}]),onClick:u[8]||(u[8]=o=>V.value?R():null),"data-bs-toggle":"modal","data-bs-target":"#modal-yaml"},"GENERATE",2)]),N(To,{"yaml-data":M.value,title:$.value},null,8,["yaml-data","title"])]))}}),ys=Q(hs,[["__scopeId","data-v-eeb9f8ea"]]),fs={class:"modal",id:"modal-config-map",tabindex:"-1"},gs={class:"modal-dialog modal-lg",role:"document"},_s={class:"modal-content"},ws={class:"modal-header"},ks={class:"modal-title"},$s={class:"modal-body"},xs={class:"card"},Cs={class:"card-body"},Us=B({__name:"configMapModal",props:{title:{},yamlData:{}},setup(P){const h=P,$=A(()=>h.yamlData);I($,async()=>{await l()});const w=f(""),l=async()=>{w.value=h.yamlData};return(_,r)=>(n(),a("div",fs,[e("div",gs,[e("div",_s,[e("div",ws,[e("h5",ks,F(h.title),1),r[0]||(r[0]=e("button",{type:"button",class:"btn-close","data-bs-dismiss":"modal","aria-label":"Close"},null,-1))]),e("div",$s,[e("div",xs,[e("div",Cs,[r[1]||(r[1]=e("h4",null,"YAML",-1)),e("div",null,[e("pre",null,F(w.value),1)])])])])])])]))}}),Ms={class:"tab-pane",id:"tabs-configMap"},Vs={class:"card"},Ps={class:"card-body"},qs={class:"mb-3"},Ss={class:"mb-3"},Ds={class:"mb-3"},js=["onUpdate:modelValue"],zs=["onUpdate:modelValue"],Hs={class:"btn-list"},Ls={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-plus",style:{margin:"0 !important"}},Bs=["onClick"],Rs={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-minus",style:{margin:"0 !important"}},Ns={class:"card mt-4"},Fs={class:"card-body"},As={class:"mb-3"},Es=["onUpdate:modelValue"],Ts=["onUpdate:modelValue"],Ys={class:"btn-list"},Os={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-plus",style:{margin:"0 !important"}},Gs=["onClick"],Is={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-minus",style:{margin:"0 !important"}},Ks={class:"btn-list justify-content-end mt-4"},Js=B({__name:"configmapForm",setup(P){const h=O(),$=f(""),w=f({}),l=f({}),_=f([]),r=f([]),p=f(""),M=A(()=>!(!l.value.name||l.value.name.trim()===""||!l.value.namespace||l.value.namespace.trim()===""));G(async()=>{await V()});const V=()=>{$.value="ConfigMap",l.value={name:"",namespace:"",labels:{}},_.value.push({key:"",value:""}),r.value.push({key:"",value:""})},L=async()=>{if(!l.value.name||l.value.name.trim()===""){h.error("Please enter ConfigMap name.");const x=document.querySelector('input[v-model="metadata.name"]');x==null||x.focus();return}if(!l.value.namespace||l.value.namespace.trim()===""){h.error("Please enter namespace.");const x=document.querySelector('input[v-model="metadata.namespace"]');x==null||x.focus();return}const u=_.value.reduce((x,k)=>(x[k.key]=k.value,x),{});l.value.labels=u;const o=r.value.reduce((x,k)=>(x[k.key]=k.value,x),{});w.value.metadata=l.value,w.value.data=o;const{data:U}=await oe(w.value);p.value=U},R=()=>{_.value.push({key:"",value:""})},E=u=>{_.value.length!==1&&_.value.splice(u,1)},T=()=>{r.value.push({key:"",value:""})},H=u=>{r.value.length!==1&&r.value.splice(u,1)};return(u,o)=>(n(),a("div",Ms,[e("div",Vs,[o[8]||(o[8]=e("div",{class:"card-header"},[e("h3",{class:"card-title"},"Metadata Section")],-1)),e("div",Ps,[e("div",qs,[o[3]||(o[3]=e("label",{class:"form-label required"},"- Name",-1)),c(e("input",{type:"text",class:"form-control w-33",name:"example-text-input","onUpdate:modelValue":o[0]||(o[0]=U=>l.value.name=U),placeholder:"configMap-01"},null,512),[[m,l.value.name]])]),e("div",Ss,[o[4]||(o[4]=e("label",{class:"form-label required"},"- Namespace",-1)),c(e("input",{type:"text",class:"form-control w-33",name:"example-text-input","onUpdate:modelValue":o[1]||(o[1]=U=>l.value.namespace=U),placeholder:"namespace"},null,512),[[m,l.value.namespace]])]),e("div",Ds,[o[7]||(o[7]=e("label",{class:"form-label"},"- Labels",-1)),(n(!0),a(D,null,j(_.value,(U,x)=>(n(),a("div",{class:"generate-form",key:x},[c(e("input",{type:"text",class:"form-control w-33",name:"example-password-input","onUpdate:modelValue":k=>U.key=k,placeholder:"key"},null,8,js),[[m,U.key]]),c(e("input",{type:"text",class:"form-control w-33",name:"example-password-input","onUpdate:modelValue":k=>U.value=k,placeholder:"value"},null,8,zs),[[m,U.value]]),e("div",Hs,[e("button",{class:"btn btn-primary",onClick:R,style:{"text-align":"center !important"}},[(n(),a("svg",Ls,o[5]||(o[5]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M12 5l0 14"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))]),e("button",{class:"btn btn-primary",onClick:k=>E(x)},[(n(),a("svg",Rs,o[6]||(o[6]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))],8,Bs)])]))),128))])])]),e("div",Ns,[o[12]||(o[12]=e("div",{class:"card-header"},[e("h3",{class:"card-title"},"Spec Section")],-1)),e("div",Fs,[e("div",As,[o[11]||(o[11]=e("label",{class:"form-label"},"- Data",-1)),(n(!0),a(D,null,j(r.value,(U,x)=>(n(),a("div",{class:"generate-form",key:x},[c(e("input",{type:"text",class:"form-control w-33",name:"example-password-input","onUpdate:modelValue":k=>U.key=k,placeholder:"key"},null,8,Es),[[m,U.key]]),c(e("input",{type:"text",class:"form-control w-33",name:"example-password-input","onUpdate:modelValue":k=>U.value=k,placeholder:"value"},null,8,Ts),[[m,U.value]]),e("div",Ys,[e("button",{class:"btn btn-primary",onClick:T,style:{"text-align":"center !important"}},[(n(),a("svg",Os,o[9]||(o[9]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M12 5l0 14"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))]),e("button",{class:"btn btn-primary",onClick:k=>H(x)},[(n(),a("svg",Is,o[10]||(o[10]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))],8,Gs)])]))),128))])])]),e("div",Ks,[e("a",{class:K(["btn btn-primary",{disabled:!M.value}]),onClick:o[2]||(o[2]=U=>M.value?L():null),"data-bs-toggle":"modal","data-bs-target":"#modal-config-map"},"GENERATE",2)]),N(Us,{"yaml-data":p.value,title:$.value},null,8,["yaml-data","title"])]))}}),Qs=Q(Js,[["__scopeId","data-v-4d96127a"]]),Ws={class:"card w-100",ref:"workflowForm"},Xs={class:"card-body"},Zs={class:"card"},en={class:"card-body"},tn={class:"tab-content"},nn=B({__name:"YamlGenerate",setup(P){return O(),G(async()=>{}),(h,$)=>(n(),a("div",Ws,[$[1]||($[1]=e("div",{class:"card-header"},[e("div",{class:"card-title"},[e("h1",null,"YAML Generator")])],-1)),e("div",Xs,[e("div",Zs,[$[0]||($[0]=X('',1)),e("div",en,[e("div",tn,[N(xt),N(Ll),N(zo),N(ys),N(Qs)])])])])],512))}});export{nn as default}; diff --git a/src/main/resources/static/assets/YamlGenerate-IrhFSZLu.js b/src/main/resources/static/assets/YamlGenerate-IrhFSZLu.js new file mode 100644 index 00000000..8d4385c2 --- /dev/null +++ b/src/main/resources/static/assets/YamlGenerate-IrhFSZLu.js @@ -0,0 +1 @@ +import{d as B,g as A,h as I,r as f,o as n,c as a,a as e,t as F,f as O,i as G,j as c,l as m,F as D,k as j,m as W,n as K,b as N,p as X}from"./index-DKle5_5b.js";import{s as J}from"./request-DSShymva.js";import{_ as Q}from"./_plugin-vue_export-helper-DlAUqK2U.js";const Z=P=>J.post("/manifest/v1/generator/yaml/pod",P),ee=P=>J.post("/manifest/v1/generator/yaml/service",P),te=P=>J.post("/manifest/v1/generator/yaml/hpa",P),le=P=>J.post("/manifest/v1/generator/yaml/deployments",P),oe=P=>J.post("/manifest/v1/generator/yaml/configmap",P),se={class:"modal",id:"modal-pod",tabindex:"-1"},ne={class:"modal-dialog modal-lg",role:"document"},ae={class:"modal-content"},re={class:"modal-header"},ie={class:"modal-title"},de={class:"modal-body"},ue={class:"card"},ce={class:"card-body"},me=B({__name:"podModal",props:{title:{},yamlData:{}},setup(P){const h=P,$=A(()=>h.yamlData);I($,async()=>{$.value&&await l()});const w=f(""),l=async()=>{w.value=h.yamlData};return(_,r)=>(n(),a("div",se,[e("div",ne,[e("div",ae,[e("div",re,[e("h5",ie,F(h.title),1),r[0]||(r[0]=e("button",{type:"button",class:"btn-close","data-bs-dismiss":"modal","aria-label":"Close"},null,-1))]),e("div",de,[e("div",ue,[e("div",ce,[r[1]||(r[1]=e("h4",null,"YAML",-1)),e("div",null,[e("pre",null,F(w.value),1)])])])])])])]))}}),pe={class:"tab-pane active show",id:"tabs-pod"},ve={class:"card"},be={class:"card-body"},he={class:"mb-3"},ye={class:"mb-3"},fe={class:"mb-3"},ge=["onUpdate:modelValue"],_e=["onUpdate:modelValue"],we={class:"btn-list"},ke={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-plus",style:{margin:"0 !important"}},$e=["onClick"],xe={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-minus",style:{margin:"0 !important"}},Ce={class:"card mt-4"},Ue={class:"card-body"},Me={class:"mb-3"},Ve={class:"btn-list"},Pe={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-plus",style:{margin:"0 !important"}},qe=["onClick"],Se={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-minus",style:{margin:"0 !important"}},De={class:"row",style:{width:"68% !important"}},je={class:"col mt-4"},ze=["onUpdate:modelValue"],He={class:"col mt-4"},Le=["onUpdate:modelValue"],Be={class:"mb-3"},Re=["onUpdate:modelValue"],Ne=["onUpdate:modelValue"],Fe={class:"btn-list"},Ae=["onClick"],Ee={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-plus",style:{margin:"0 !important"}},Te=["onClick"],Ye={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-minus",style:{margin:"0 !important"}},Oe={class:"mb-3"},Ge={class:"btn-list"},Ie=["onClick"],Ke={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-plus",style:{margin:"0 !important"}},Je=["onClick"],Qe={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-minus",style:{margin:"0 !important"}},We={class:"row",style:{width:"68% !important"}},Xe={class:"col mt-4"},Ze=["onUpdate:modelValue"],et={class:"col mt-4"},tt=["onUpdate:modelValue"],lt={class:"row",style:{width:"68% !important"}},ot={class:"col mt-4"},st=["onUpdate:modelValue"],nt={class:"col mt-4"},at=["onUpdate:modelValue"],rt={key:0,class:"border-bottom",style:{width:"100%","margin-top":"10px"}},it={class:"mb-3"},dt={class:"row",style:{width:"68% !important"}},ut={class:"col mt-4"},ct=["onUpdate:modelValue"],mt={class:"col mt-4"},pt=["onUpdate:modelValue"],vt={class:"row",style:{width:"68% !important"}},bt={class:"col mt-4"},ht=["onUpdate:modelValue"],yt={class:"col mt-4"},ft=["onUpdate:modelValue"],gt={key:0,class:"border-bottom",style:{width:"100%","margin-top":"10px"}},_t={class:"mb-3"},wt={class:"mt-4"},kt={class:"btn-list justify-content-end mt-4"},$t=B({__name:"podForm",setup(P){const h=O(),$=f(""),w=f({}),l=f({}),_=f([]),r=f({}),p=f([]),M=f(""),V=A(()=>{if(!l.value.name||l.value.name.trim()===""||!l.value.namespace||l.value.namespace.trim()==="")return!1;for(const i of p.value)if(!i.name||i.name.trim()===""||!i.image||i.image.trim()==="")return!1;return!0});G(async()=>{await L()});const L=()=>{$.value="Pod",l.value.name="",l.value.namespace="",_.value.push({key:"",value:""}),r.value={containers:[],restartPolicy:""},p.value.push({name:"",image:"",env:[{name:"",value:""}],ports:[{name:"",containerPort:"",hostPort:"",protocol:""}],resources:{limits:{memory:"",cpu:""},requests:{memory:"",cpu:""}}})},R=async()=>{if(!l.value.name||l.value.name.trim()===""){h.error("Please enter pod name.");const s=document.querySelector('input[v-model="metadata.name"]');s==null||s.focus();return}if(!l.value.namespace||l.value.namespace.trim()===""){h.error("Please enter namespace.");const s=document.querySelector('input[v-model="metadata.namespace"]');s==null||s.focus();return}for(let s=0;s(s[b.key]=b.value,s),{});l.value.labels=i,w.value.metadata=l.value,r.value.containers=p.value,w.value.spec=r.value;const{data:t}=await Z(w.value);M.value=t},E=()=>{_.value.push({key:"",value:""})},T=i=>{_.value.length!==1&&_.value.splice(i,1)},H=()=>{p.value.push({name:"",image:"",env:[{name:"",value:""}],ports:[{name:"",containerPort:"",hostPort:"",protocol:""}],resources:{limits:{memory:"",cpu:""},requests:{memory:"",cpu:""}}})},u=i=>{p.value.length!==1&&p.value.splice(i,1)},o=i=>{p.value[i].env.push({name:"",value:""})},U=(i,t)=>{p.value[i].env.length!==1&&p.value[i].env.splice(t,1)},x=i=>{p.value[i].ports.push({name:"",containerPort:"",hostPort:"",protocol:""})},k=(i,t)=>{p.value[i].ports.length!==1&&p.value[i].ports.splice(t,1)};return(i,t)=>(n(),a("div",pe,[e("div",ve,[t[9]||(t[9]=e("div",{class:"card-header"},[e("h3",{class:"card-title"},"Metadata Section")],-1)),e("div",be,[e("div",he,[t[4]||(t[4]=e("label",{class:"form-label required"},"- Name",-1)),c(e("input",{type:"text",class:"form-control w-33",name:"example-text-input","onUpdate:modelValue":t[0]||(t[0]=s=>l.value.name=s),placeholder:"pod-01"},null,512),[[m,l.value.name]])]),e("div",ye,[t[5]||(t[5]=e("label",{class:"form-label required"},"- Namespace",-1)),c(e("input",{type:"text",class:"form-control w-33",name:"example-text-input","onUpdate:modelValue":t[1]||(t[1]=s=>l.value.namespace=s),placeholder:"namespace"},null,512),[[m,l.value.namespace]])]),e("div",fe,[t[8]||(t[8]=e("label",{class:"form-label"},"- Labels",-1)),(n(!0),a(D,null,j(_.value,(s,b)=>(n(),a("div",{class:"generate-form",key:b},[c(e("input",{type:"text",class:"form-control w-33","onUpdate:modelValue":y=>s.key=y,placeholder:"key"},null,8,ge),[[m,s.key]]),c(e("input",{type:"text",class:"form-control w-33","onUpdate:modelValue":y=>s.value=y,placeholder:"value"},null,8,_e),[[m,s.value]]),e("div",we,[e("button",{class:"btn btn-primary",onClick:E,style:{"text-align":"center !important"}},[(n(),a("svg",ke,t[6]||(t[6]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M12 5l0 14"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))]),e("button",{class:"btn btn-primary",onClick:y=>T(b)},[(n(),a("svg",xe,t[7]||(t[7]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))],8,$e)])]))),128))])])]),e("div",Ce,[t[31]||(t[31]=e("div",{class:"card-header"},[e("h3",{class:"card-title"},"Spec Section")],-1)),e("div",Ue,[(n(!0),a(D,null,j(p.value,(s,b)=>(n(),a("div",{class:"mt-4",key:b},[e("div",Me,[e("div",Ve,[t[12]||(t[12]=e("label",{class:"form-label"},"Containers",-1)),e("button",{class:"btn btn-primary",onClick:H,style:{"text-align":"center !important"}},[(n(),a("svg",Pe,t[10]||(t[10]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M12 5l0 14"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))]),e("button",{class:"btn btn-primary",onClick:y=>u(b)},[(n(),a("svg",Se,t[11]||(t[11]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))],8,qe)]),e("div",De,[e("div",je,[t[13]||(t[13]=e("label",{class:"form-label required"},"- Name",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":y=>s.name=y},null,8,ze),[[m,s.name]])]),e("div",He,[t[14]||(t[14]=e("label",{class:"form-label required"},"- Image",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":y=>s.image=y},null,8,Le),[[m,s.image]])])])]),e("div",Be,[t[17]||(t[17]=e("label",{class:"form-label"},"- Env",-1)),(n(!0),a(D,null,j(s.env,(y,Y)=>(n(),a("div",{class:"generate-form",key:Y},[c(e("input",{type:"text",class:"form-control w-33","onUpdate:modelValue":g=>y.name=g,placeholder:"key"},null,8,Re),[[m,y.name]]),c(e("input",{type:"text",class:"form-control w-33","onUpdate:modelValue":g=>y.value=g,placeholder:"value"},null,8,Ne),[[m,y.value]]),e("div",Fe,[e("button",{class:"btn btn-primary",onClick:g=>o(b),style:{"text-align":"center !important"}},[(n(),a("svg",Ee,t[15]||(t[15]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M12 5l0 14"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))],8,Ae),e("button",{class:"btn btn-primary",onClick:g=>U(b,Y)},[(n(),a("svg",Ye,t[16]||(t[16]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))],8,Te)])]))),128))]),e("div",Oe,[(n(!0),a(D,null,j(s.ports,(y,Y)=>(n(),a("div",{class:"mt-4",key:Y},[e("div",Ge,[t[20]||(t[20]=e("label",{class:"form-label"},"Ports",-1)),e("button",{class:"btn btn-primary",onClick:g=>x(b),style:{"text-align":"center !important"}},[(n(),a("svg",Ke,t[18]||(t[18]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M12 5l0 14"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))],8,Ie),e("button",{class:"btn btn-primary",onClick:g=>k(b,Y)},[(n(),a("svg",Qe,t[19]||(t[19]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))],8,Je)]),e("div",We,[e("div",Xe,[t[21]||(t[21]=e("label",{class:"form-label"},"- Name",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":g=>y.name=g},null,8,Ze),[[m,y.name]])]),e("div",et,[t[22]||(t[22]=e("label",{class:"form-label"},"- Port",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":g=>y.containerPort=g},null,8,tt),[[m,y.containerPort]])])]),e("div",lt,[e("div",ot,[t[23]||(t[23]=e("label",{class:"form-label"},"- Protocol",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":g=>y.protocol=g},null,8,st),[[m,y.protocol]])]),e("div",nt,[t[24]||(t[24]=e("label",{class:"form-label"},"- Host Port",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":g=>y.hostPort=g},null,8,at),[[m,y.hostPort]])])]),s.ports.length>1?(n(),a("div",rt)):W("",!0)]))),128))]),e("div",it,[t[29]||(t[29]=e("div",{class:"btn-list"},[e("label",{class:"form-label"},"Resources")],-1)),e("div",dt,[e("div",ut,[t[25]||(t[25]=e("label",{class:"form-label"},"- Limits CPU",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":y=>s.resources.limits.cpu=y},null,8,ct),[[m,s.resources.limits.cpu]])]),e("div",mt,[t[26]||(t[26]=e("label",{class:"form-label"},"- Limits Memory",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":y=>s.resources.limits.memory=y},null,8,pt),[[m,s.resources.limits.memory]])])]),e("div",vt,[e("div",bt,[t[27]||(t[27]=e("label",{class:"form-label"},"- Requests CPU",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":y=>s.resources.requests.cpu=y},null,8,ht),[[m,s.resources.requests.cpu]])]),e("div",yt,[t[28]||(t[28]=e("label",{class:"form-label"},"- Requests Memory",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":y=>s.resources.requests.memory=y},null,8,ft),[[m,s.resources.requests.memory]])])])]),p.value.length>1?(n(),a("div",gt)):W("",!0)]))),128)),e("div",_t,[e("div",wt,[t[30]||(t[30]=e("label",{class:"form-label"},"- Restart Policy",-1)),c(e("input",{type:"text",class:"form-control w-33","onUpdate:modelValue":t[2]||(t[2]=s=>r.value.restartPolicy=s)},null,512),[[m,r.value.restartPolicy]])])])])]),e("div",kt,[e("a",{class:K(["btn btn-primary",{disabled:!V.value}]),onClick:t[3]||(t[3]=s=>V.value?R():null),"data-bs-toggle":"modal","data-bs-target":"#modal-pod"},"GENERATE",2)]),N(me,{"yaml-data":M.value,title:$.value},null,8,["yaml-data","title"])]))}}),xt=Q($t,[["__scopeId","data-v-89045615"]]),Ct={class:"modal",id:"modal-deploy",tabindex:"-1"},Ut={class:"modal-dialog modal-lg",role:"document"},Mt={class:"modal-content"},Vt={class:"modal-header"},Pt={class:"modal-title"},qt={class:"modal-body"},St={class:"card"},Dt={class:"card-body"},jt=B({__name:"deployModal",props:{title:{},yamlData:{}},setup(P){const h=P,$=A(()=>h.yamlData);I($,async()=>{await l()});const w=f(""),l=async()=>{w.value=h.yamlData};return(_,r)=>(n(),a("div",Ct,[e("div",Ut,[e("div",Mt,[e("div",Vt,[e("h5",Pt,F(h.title),1),r[0]||(r[0]=e("button",{type:"button",class:"btn-close","data-bs-dismiss":"modal","aria-label":"Close"},null,-1))]),e("div",qt,[e("div",St,[e("div",Dt,[r[1]||(r[1]=e("h4",null,"YAML",-1)),e("div",null,[e("pre",null,F(w.value),1)])])])])])])]))}}),zt={class:"tab-pane",id:"tabs-deployment"},Ht={class:"card"},Lt={class:"card-body"},Bt={class:"mb-3"},Rt={class:"mb-3"},Nt={class:"mb-3"},Ft=["onUpdate:modelValue"],At=["onUpdate:modelValue"],Et={class:"btn-list"},Tt={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-plus",style:{margin:"0 !important"}},Yt=["onClick"],Ot={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-minus",style:{margin:"0 !important"}},Gt={class:"card mt-4"},It={class:"card-body"},Kt={class:"mb-3"},Jt={class:"mb-3"},Qt=["onUpdate:modelValue"],Wt=["onUpdate:modelValue"],Xt={class:"btn-list"},Zt={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-plus",style:{margin:"0 !important"}},el=["onClick"],tl={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-minus",style:{margin:"0 !important"}},ll={class:"mb-3"},ol=["onUpdate:modelValue"],sl=["onUpdate:modelValue"],nl={class:"btn-list"},al={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-plus",style:{margin:"0 !important"}},rl=["onClick"],il={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-minus",style:{margin:"0 !important"}},dl={class:"mb-3"},ul={class:"btn-list"},cl={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-plus",style:{margin:"0 !important"}},ml=["onClick"],pl={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-minus",style:{margin:"0 !important"}},vl={class:"row",style:{width:"68% !important"}},bl={class:"col mt-4"},hl=["onUpdate:modelValue"],yl={class:"col mt-4"},fl=["onUpdate:modelValue"],gl={class:"mb-3"},_l=["onUpdate:modelValue"],wl={class:"btn-list"},kl=["onClick"],$l={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-plus",style:{margin:"0 !important"}},xl=["onClick"],Cl={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-minus",style:{margin:"0 !important"}},Ul={class:"mb-3"},Ml=["onUpdate:modelValue"],Vl=["onUpdate:modelValue"],Pl={class:"btn-list"},ql=["onClick"],Sl={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-plus",style:{margin:"0 !important"}},Dl=["onClick"],jl={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-minus",style:{margin:"0 !important"}},zl={class:"btn-list justify-content-end mt-4"},Hl=B({__name:"deploymentForm",setup(P){const h=O(),$=f(""),w=f({}),l=f({}),_=f([]),r=f([]),p=f([]),M=f({}),V=f([]),L=f(""),R=A(()=>{if(!l.value.name||l.value.name.trim()===""||!l.value.namespace||l.value.namespace.trim()==="")return!1;for(const g of V.value)if(!g.name||g.name.trim()===""||!g.image||g.image.trim()==="")return!1;return!0});G(async()=>{await E()});const E=()=>{$.value="Deployment",l.value.name="",l.value.namespace="",_.value.push({key:"",value:""}),r.value.push({key:"",value:""}),p.value.push({key:"",value:""}),M.value={replicas:"",selector:{matchLabels:{}},template:{metadata:{labels:{}},spec:{containers:[]}}},V.value.push({name:"",image:"",env:[{name:"",value:""}],ports:[{containerPort:""}]})},T=async()=>{if(!l.value.name||l.value.name.trim()===""){h.error("Please enter deployment name.");const v=document.querySelector('input[v-model="metadata.name"]');v==null||v.focus();return}if(!l.value.namespace||l.value.namespace.trim()===""){h.error("Please enter namespace.");const v=document.querySelector('input[v-model="metadata.namespace"]');v==null||v.focus();return}for(let v=0;v(v[q.key]=q.value,v),{}),d=r.value.reduce((v,q)=>(v[q.key]=q.value,v),{}),C=p.value.reduce((v,q)=>(v[q.key]=q.value,v),{});l.value.labels=g,w.value.metadata=l.value,M.value.selector.matchLabels=d,M.value.template.metadata.labels=C,M.value.template.spec.containers=V.value,w.value.spec=M.value,console.log("deployFormData.value : ",w.value);const{data:S}=await le(w.value);L.value=S},H=()=>{_.value.push({key:"",value:""})},u=g=>{_.value.length!==1&&_.value.splice(g,1)},o=()=>{r.value.push({key:"",value:""})},U=g=>{r.value.length!==1&&r.value.splice(g,1)},x=()=>{p.value.push({key:"",value:""})},k=g=>{p.value.length!==1&&p.value.splice(g,1)},i=()=>{V.value.push({name:"",image:"",env:[{name:"",value:""}],ports:[{containerPort:""}]})},t=g=>{V.value.length!==1&&V.value.splice(g,1)},s=g=>{V.value[g].env.push({name:"",value:""})},b=(g,d)=>{V.value[g].env.length!==1&&V.value[g].env.splice(d,1)},y=g=>{V.value[g].ports.push({containerPort:""})},Y=(g,d)=>{V.value[g].ports.length!==1&&V.value[g].ports.splice(d,1)};return(g,d)=>(n(),a("div",zt,[e("div",Ht,[d[9]||(d[9]=e("div",{class:"card-header"},[e("h3",{class:"card-title"},"Metadata Section")],-1)),e("div",Lt,[e("div",Bt,[d[4]||(d[4]=e("label",{class:"form-label required"},"- Name",-1)),c(e("input",{type:"text",class:"form-control w-33",name:"example-text-input","onUpdate:modelValue":d[0]||(d[0]=C=>l.value.name=C),placeholder:"deployment-01"},null,512),[[m,l.value.name]])]),e("div",Rt,[d[5]||(d[5]=e("label",{class:"form-label required"},"- Namespace",-1)),c(e("input",{type:"text",class:"form-control w-33",name:"example-text-input","onUpdate:modelValue":d[1]||(d[1]=C=>l.value.namespace=C),placeholder:"namespace"},null,512),[[m,l.value.namespace]])]),e("div",Nt,[d[8]||(d[8]=e("label",{class:"form-label"},"- Labels",-1)),(n(!0),a(D,null,j(_.value,(C,S)=>(n(),a("div",{class:"generate-form",key:S},[c(e("input",{type:"text",class:"form-control w-33","onUpdate:modelValue":v=>C.key=v,placeholder:"key"},null,8,Ft),[[m,C.key]]),c(e("input",{type:"text",class:"form-control w-33","onUpdate:modelValue":v=>C.value=v,placeholder:"value"},null,8,At),[[m,C.value]]),e("div",Et,[e("button",{class:"btn btn-primary",onClick:H,style:{"text-align":"center !important"}},[(n(),a("svg",Tt,d[6]||(d[6]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M12 5l0 14"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))]),e("button",{class:"btn btn-primary",onClick:v=>u(S)},[(n(),a("svg",Ot,d[7]||(d[7]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))],8,Yt)])]))),128))])])]),e("div",Gt,[d[29]||(d[29]=e("div",{class:"card-header"},[e("h3",{class:"card-title"},"Spec Section")],-1)),e("div",It,[e("div",Kt,[d[10]||(d[10]=e("label",{class:"form-label"},"- Replicas",-1)),c(e("input",{type:"text",class:"form-control w-33","onUpdate:modelValue":d[2]||(d[2]=C=>M.value.replicas=C)},null,512),[[m,M.value.replicas]])]),e("div",Jt,[d[13]||(d[13]=e("label",{class:"form-label"},"- Match Labels",-1)),(n(!0),a(D,null,j(r.value,(C,S)=>(n(),a("div",{class:"generate-form",key:S},[c(e("input",{type:"text",class:"form-control w-33","onUpdate:modelValue":v=>C.key=v,placeholder:"key"},null,8,Qt),[[m,C.key]]),c(e("input",{type:"text",class:"form-control w-33","onUpdate:modelValue":v=>C.value=v,placeholder:"value"},null,8,Wt),[[m,C.value]]),e("div",Xt,[e("button",{class:"btn btn-primary",onClick:o,style:{"text-align":"center !important"}},[(n(),a("svg",Zt,d[11]||(d[11]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M12 5l0 14"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))]),e("button",{class:"btn btn-primary",onClick:v=>U(S)},[(n(),a("svg",tl,d[12]||(d[12]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))],8,el)])]))),128))]),d[28]||(d[28]=e("div",{class:"mb-3"},[e("label",{class:"form-label"},"Template")],-1)),e("div",ll,[d[16]||(d[16]=e("div",{class:"btn-list"},[e("label",{class:"form-label"},"- Labels")],-1)),(n(!0),a(D,null,j(p.value,(C,S)=>(n(),a("div",{class:"generate-form",key:S},[c(e("input",{type:"text",class:"form-control w-33","onUpdate:modelValue":v=>C.key=v,placeholder:"key"},null,8,ol),[[m,C.key]]),c(e("input",{type:"text",class:"form-control w-33","onUpdate:modelValue":v=>C.value=v,placeholder:"value"},null,8,sl),[[m,C.value]]),e("div",nl,[e("button",{class:"btn btn-primary",onClick:x,style:{"text-align":"center !important"}},[(n(),a("svg",al,d[14]||(d[14]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M12 5l0 14"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))]),e("button",{class:"btn btn-primary",onClick:v=>k(S)},[(n(),a("svg",il,d[15]||(d[15]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))],8,rl)])]))),128))]),(n(!0),a(D,null,j(V.value,(C,S)=>(n(),a("div",{key:S},[e("div",dl,[e("div",ul,[d[19]||(d[19]=e("label",{class:"form-label"},"Containers",-1)),e("button",{class:"btn btn-primary",onClick:i,style:{"text-align":"center !important"}},[(n(),a("svg",cl,d[17]||(d[17]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M12 5l0 14"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))]),e("button",{class:"btn btn-primary",onClick:v=>t(S)},[(n(),a("svg",pl,d[18]||(d[18]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))],8,ml)]),e("div",vl,[e("div",bl,[d[20]||(d[20]=e("label",{class:"form-label required"},"- Name",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":v=>C.name=v},null,8,hl),[[m,C.name]])]),e("div",yl,[d[21]||(d[21]=e("label",{class:"form-label required"},"- Image",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":v=>C.image=v},null,8,fl),[[m,C.image]])])])]),e("div",gl,[d[24]||(d[24]=e("label",{class:"form-label"},"- Port",-1)),(n(!0),a(D,null,j(C.ports,(v,q)=>(n(),a("div",{class:"generate-form",key:q},[c(e("input",{type:"text",class:"form-control w-33","onUpdate:modelValue":z=>v.containerPort=z,placeholder:"value"},null,8,_l),[[m,v.containerPort]]),e("div",wl,[e("button",{class:"btn btn-primary",onClick:z=>y(S),style:{"text-align":"center !important"}},[(n(),a("svg",$l,d[22]||(d[22]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M12 5l0 14"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))],8,kl),e("button",{class:"btn btn-primary",onClick:z=>Y(S,q)},[(n(),a("svg",Cl,d[23]||(d[23]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))],8,xl)])]))),128))]),e("div",Ul,[d[27]||(d[27]=e("label",{class:"form-label"},"- Env",-1)),(n(!0),a(D,null,j(C.env,(v,q)=>(n(),a("div",{class:"generate-form",key:q},[c(e("input",{type:"text",class:"form-control w-33","onUpdate:modelValue":z=>v.name=z,placeholder:"key"},null,8,Ml),[[m,v.name]]),c(e("input",{type:"text",class:"form-control w-33","onUpdate:modelValue":z=>v.value=z,placeholder:"value"},null,8,Vl),[[m,v.value]]),e("div",Pl,[e("button",{class:"btn btn-primary",onClick:z=>s(S),style:{"text-align":"center !important"}},[(n(),a("svg",Sl,d[25]||(d[25]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M12 5l0 14"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))],8,ql),e("button",{class:"btn btn-primary",onClick:z=>b(S,q)},[(n(),a("svg",jl,d[26]||(d[26]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))],8,Dl)])]))),128))])]))),128))])]),e("div",zl,[e("a",{class:K(["btn btn-primary",{disabled:!R.value}]),onClick:d[3]||(d[3]=C=>R.value?T():null),"data-bs-toggle":"modal","data-bs-target":"#modal-deploy"},"GENERATE",2)]),N(jt,{"yaml-data":L.value,title:$.value},null,8,["yaml-data","title"])]))}}),Ll=Q(Hl,[["__scopeId","data-v-10151163"]]),Bl={class:"modal",id:"modal-service",tabindex:"-1"},Rl={class:"modal-dialog modal-lg",role:"document"},Nl={class:"modal-content"},Fl={class:"modal-header"},Al={class:"modal-title"},El={class:"modal-body"},Tl={class:"card"},Yl={class:"card-body"},Ol=B({__name:"servcieModal",props:{title:{},yamlData:{}},setup(P){const h=P,$=A(()=>h.yamlData);I($,async()=>{await l()});const w=f(""),l=async()=>{w.value=h.yamlData};return(_,r)=>(n(),a("div",Bl,[e("div",Rl,[e("div",Nl,[e("div",Fl,[e("h5",Al,F(h.title),1),r[0]||(r[0]=e("button",{type:"button",class:"btn-close","data-bs-dismiss":"modal","aria-label":"Close"},null,-1))]),e("div",El,[e("div",Tl,[e("div",Yl,[r[1]||(r[1]=e("h4",null,"YAML",-1)),e("div",null,[e("pre",null,F(w.value),1)])])])])])])]))}}),Gl={class:"tab-pane",id:"tabs-service"},Il={class:"card"},Kl={class:"card-body"},Jl={class:"mb-3"},Ql={class:"mb-3"},Wl={class:"mb-3"},Xl=["onUpdate:modelValue"],Zl=["onUpdate:modelValue"],eo={class:"btn-list"},to={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-plus",style:{margin:"0 !important"}},lo=["onClick"],oo={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-minus",style:{margin:"0 !important"}},so={class:"card mt-4"},no={class:"card-body"},ao={class:"mb-3"},ro=["onUpdate:modelValue"],io=["onUpdate:modelValue"],uo={class:"btn-list"},co={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-plus",style:{margin:"0 !important"}},mo=["onClick"],po={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-minus",style:{margin:"0 !important"}},vo={class:"mb-3"},bo={class:"btn-list"},ho={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-plus",style:{margin:"0 !important"}},yo=["onClick"],fo={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-minus",style:{margin:"0 !important"}},go={class:"row",style:{width:"68% !important"}},_o={class:"col mt-4"},wo=["onUpdate:modelValue"],ko={class:"col mt-4"},$o=["onUpdate:modelValue"],xo={class:"row",style:{width:"68% !important"}},Co={class:"col mt-4"},Uo=["onUpdate:modelValue"],Mo={class:"col mt-4"},Vo=["onUpdate:modelValue"],Po={key:0,class:"border-bottom",style:{width:"100%","margin-top":"10px"}},qo={class:"row",style:{width:"68% !important"}},So={class:"col mt-4"},Do={class:"btn-list justify-content-end mt-4"},jo=B({__name:"serviceForm",setup(P){const h=O(),$=f(""),w=f({}),l=f({}),_=f([]),r=f({}),p=f([]),M=f([]);f("");const V=f(""),L=A(()=>{if(!l.value.name||l.value.name.trim()===""||!l.value.namespace||l.value.namespace.trim()==="")return!1;for(const k of M.value)if(!k.port||k.port.trim()===""||!k.targetPort||k.targetPort.trim()==="")return!1;return!0});G(async()=>{await R()});const R=()=>{$.value="Service",l.value={name:"",namespace:"",labels:{}},r.value={selector:{},ports:[],type:""},_.value.push({key:"",value:""}),p.value.push({key:"",value:""}),M.value.push({protocol:"",port:"",targetPort:"",nodePort:""})},E=async()=>{if(!l.value.name||l.value.name.trim()===""){h.error("Please enter service name.");const s=document.querySelector('input[v-model="metadata.name"]');s==null||s.focus();return}if(!l.value.namespace||l.value.namespace.trim()===""){h.error("Please enter namespace.");const s=document.querySelector('input[v-model="metadata.namespace"]');s==null||s.focus();return}for(let s=0;s(s[b.key]=b.value,s),{});l.value.labels=k,w.value.metadata=l.value;const i=p.value.reduce((s,b)=>(s[b.key]=b.value,s),{});r.value.selector=i,r.value.ports=M.value,w.value.spec=r.value;const{data:t}=await ee(w.value);V.value=t},T=()=>{_.value.push({key:"",value:""})},H=k=>{_.value.length!==1&&_.value.splice(k,1)},u=()=>{p.value.push({key:"",value:""})},o=k=>{p.value.length!==1&&p.value.splice(k,1)},U=()=>{M.value.push({protocol:"",port:"",targetPort:"",nodePort:""})},x=k=>{M.value.length!==1&&M.value.splice(k,1)};return(k,i)=>(n(),a("div",Gl,[e("div",Il,[i[9]||(i[9]=e("div",{class:"card-header"},[e("h3",{class:"card-title"},"Metadata Section")],-1)),e("div",Kl,[e("div",Jl,[i[4]||(i[4]=e("label",{class:"form-label required"},"- Name",-1)),c(e("input",{type:"text",class:"form-control w-33",name:"example-text-input","onUpdate:modelValue":i[0]||(i[0]=t=>l.value.name=t),placeholder:"name-01"},null,512),[[m,l.value.name]])]),e("div",Ql,[i[5]||(i[5]=e("label",{class:"form-label required"},"- Namespace",-1)),c(e("input",{type:"text",class:"form-control w-33",name:"example-text-input","onUpdate:modelValue":i[1]||(i[1]=t=>l.value.namespace=t),placeholder:"namespace"},null,512),[[m,l.value.namespace]])]),e("div",Wl,[i[8]||(i[8]=e("label",{class:"form-label"},"- Labels",-1)),(n(!0),a(D,null,j(_.value,(t,s)=>(n(),a("div",{class:"generate-form",key:s},[c(e("input",{type:"text",class:"form-control w-33",name:"example-password-input","onUpdate:modelValue":b=>t.key=b,placeholder:"key"},null,8,Xl),[[m,t.key]]),c(e("input",{type:"text",class:"form-control w-33",name:"example-password-input","onUpdate:modelValue":b=>t.value=b,placeholder:"value"},null,8,Zl),[[m,t.value]]),e("div",eo,[e("button",{class:"btn btn-primary",onClick:T,style:{"text-align":"center !important"}},[(n(),a("svg",to,i[6]||(i[6]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M12 5l0 14"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))]),e("button",{class:"btn btn-primary",onClick:b=>H(s)},[(n(),a("svg",oo,i[7]||(i[7]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))],8,lo)])]))),128))])])]),e("div",so,[i[21]||(i[21]=e("div",{class:"card-header"},[e("h3",{class:"card-title"},"Spec Section")],-1)),e("div",no,[e("div",ao,[i[12]||(i[12]=e("label",{class:"form-label"},"- Selector",-1)),(n(!0),a(D,null,j(p.value,(t,s)=>(n(),a("div",{class:"generate-form",key:s},[c(e("input",{type:"text",class:"form-control w-33",name:"example-password-input","onUpdate:modelValue":b=>t.key=b,placeholder:"key"},null,8,ro),[[m,t.key]]),c(e("input",{type:"text",class:"form-control w-33",name:"example-password-input","onUpdate:modelValue":b=>t.value=b,placeholder:"value"},null,8,io),[[m,t.value]]),e("div",uo,[e("button",{class:"btn btn-primary",onClick:u,style:{"text-align":"center !important"}},[(n(),a("svg",co,i[10]||(i[10]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M12 5l0 14"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))]),e("button",{class:"btn btn-primary",onClick:b=>o(s)},[(n(),a("svg",po,i[11]||(i[11]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))],8,mo)])]))),128))]),e("div",vo,[(n(!0),a(D,null,j(M.value,(t,s)=>(n(),a("div",{class:"mt-4",key:s},[e("div",bo,[i[15]||(i[15]=e("label",{class:"form-label"},"Ports",-1)),e("button",{class:"btn btn-primary",onClick:U,style:{"text-align":"center !important"}},[(n(),a("svg",ho,i[13]||(i[13]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M12 5l0 14"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))]),e("button",{class:"btn btn-primary",onClick:b=>x(s)},[(n(),a("svg",fo,i[14]||(i[14]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))],8,yo)]),e("div",go,[e("div",_o,[i[16]||(i[16]=e("label",{class:"form-label required"},"- Port",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":b=>t.port=b},null,8,wo),[[m,t.port]])]),e("div",ko,[i[17]||(i[17]=e("label",{class:"form-label required"},"- Target Port",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":b=>t.targetPort=b},null,8,$o),[[m,t.targetPort]])])]),e("div",xo,[e("div",Co,[i[18]||(i[18]=e("label",{class:"form-label"},"- Protocol",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":b=>t.protocol=b},null,8,Uo),[[m,t.protocol]])]),e("div",Mo,[i[19]||(i[19]=e("label",{class:"form-label"},"- Node Port",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":b=>t.nodePort=b},null,8,Vo),[[m,t.nodePort]])])]),M.value.length>1?(n(),a("div",Po)):W("",!0)]))),128)),e("div",qo,[e("div",So,[i[20]||(i[20]=e("label",{class:"form-label"},"- Type",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":i[2]||(i[2]=t=>r.value.type=t)},null,512),[[m,r.value.type]])])])])])]),e("div",Do,[e("a",{class:K(["btn btn-primary",{disabled:!L.value}]),onClick:i[3]||(i[3]=t=>L.value?E():null),"data-bs-toggle":"modal","data-bs-target":"#modal-service"},"GENERATE",2)]),N(Ol,{"yaml-data":V.value,title:$.value},null,8,["yaml-data","title"])]))}}),zo=Q(jo,[["__scopeId","data-v-a6f75123"]]),Ho={class:"modal",id:"modal-yaml",tabindex:"-1"},Lo={class:"modal-dialog modal-lg",role:"document"},Bo={class:"modal-content"},Ro={class:"modal-header"},No={class:"modal-title"},Fo={class:"modal-body"},Ao={class:"card"},Eo={class:"card-body"},To=B({__name:"yamlModal",props:{title:{},yamlData:{}},setup(P){const h=P,$=A(()=>h.yamlData);I($,async()=>{await l()});const w=f(""),l=async()=>{w.value=h.yamlData};return(_,r)=>(n(),a("div",Ho,[e("div",Lo,[e("div",Bo,[e("div",Ro,[e("h5",No,F(h.title),1),r[0]||(r[0]=e("button",{type:"button",class:"btn-close","data-bs-dismiss":"modal","aria-label":"Close"},null,-1))]),e("div",Fo,[e("div",Ao,[e("div",Eo,[r[1]||(r[1]=e("h4",null,"YAML",-1)),e("div",null,[e("pre",null,F(w.value),1)])])])])])])]))}}),Yo={class:"tab-pane",id:"tabs-hpa"},Oo={class:"card"},Go={class:"card-body"},Io={class:"mb-3"},Ko={class:"mb-3"},Jo={class:"mb-3"},Qo=["onUpdate:modelValue"],Wo=["onUpdate:modelValue"],Xo={class:"btn-list"},Zo={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-plus",style:{margin:"0 !important"}},es=["onClick"],ts={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-minus",style:{margin:"0 !important"}},ls={class:"card mt-4"},os={class:"card-body"},ss={class:"row",style:{width:"68% !important"}},ns={class:"col"},as={class:"col"},rs={class:"row",style:{width:"68% !important"}},is={class:"col"},ds={class:"row",style:{width:"68% !important"}},us={class:"col"},cs={class:"row",style:{width:"68% !important"}},ms={class:"col"},ps={class:"row",style:{width:"68% !important"}},vs={class:"col"},bs={class:"btn-list justify-content-end mt-4"},hs=B({__name:"hpaForm",setup(P){const h=O(),$=f(""),w=f({}),l=f({}),_=f([]),r=f({}),p=f({}),M=f(""),V=A(()=>!(!l.value.name||l.value.name.trim()===""||!l.value.namespace||l.value.namespace.trim()===""||!p.value.apiVersion||p.value.apiVersion.trim()===""||!p.value.kind||p.value.kind.trim()===""||!p.value.name||p.value.name.trim()===""||!r.value.minReplicas||r.value.minReplicas.trim()===""||!r.value.maxReplicas||r.value.maxReplicas.trim()===""||!r.value.targetCPUUtilizationPercentage||r.value.targetCPUUtilizationPercentage.trim()===""));G(async()=>{await L()});const L=()=>{$.value="HPA",l.value={name:"",namespace:"",labels:{}},_.value.push({key:"",value:""}),r.value={scaleTargetRef:{},minReplicas:"",maxReplicas:"",targetCPUUtilizationPercentage:""},p.value={apiVersion:"",kind:"",name:""}},R=async()=>{if(!l.value.name||l.value.name.trim()===""){h.error("Please enter HPA name.");const o=document.querySelector('input[v-model="metadata.name"]');o==null||o.focus();return}if(!l.value.namespace||l.value.namespace.trim()===""){h.error("Please enter namespace.");const o=document.querySelector('input[v-model="metadata.namespace"]');o==null||o.focus();return}if(!p.value.apiVersion||p.value.apiVersion.trim()===""){h.error("Please enter API version.");const o=document.querySelector('input[v-model="scaleTargetRef.apiVersion"]');o==null||o.focus();return}if(!p.value.kind||p.value.kind.trim()===""){h.error("Please enter kind.");const o=document.querySelector('input[v-model="scaleTargetRef.kind"]');o==null||o.focus();return}if(!p.value.name||p.value.name.trim()===""){h.error("Please enter target name.");const o=document.querySelector('input[v-model="scaleTargetRef.name"]');o==null||o.focus();return}if(!r.value.minReplicas||r.value.minReplicas.trim()===""){h.error("Please enter min replicas.");const o=document.querySelector('input[v-model="spec.minReplicas"]');o==null||o.focus();return}if(!r.value.maxReplicas||r.value.maxReplicas.trim()===""){h.error("Please enter max replicas.");const o=document.querySelector('input[v-model="spec.maxReplicas"]');o==null||o.focus();return}if(!r.value.targetCPUUtilizationPercentage||r.value.targetCPUUtilizationPercentage.trim()===""){h.error("Please enter CPU percentage.");const o=document.querySelector('input[v-model="spec.targetCPUUtilizationPercentage"]');o==null||o.focus();return}const H=_.value.reduce((o,U)=>(o[U.key]=U.value,o),{});l.value.labels=H,r.value.scaleTargetRef=p.value,w.value.metadata=l.value,w.value.spec=r.value;const{data:u}=await te(w.value);M.value=u},E=()=>{_.value.push({key:"",value:""})},T=H=>{_.value.length!==1&&_.value.splice(H,1)};return(H,u)=>(n(),a("div",Yo,[e("div",Oo,[u[14]||(u[14]=e("div",{class:"card-header"},[e("h3",{class:"card-title"},"Metadata Section")],-1)),e("div",Go,[e("div",Io,[u[9]||(u[9]=e("label",{class:"form-label required"},"- Name",-1)),c(e("input",{type:"text",class:"form-control w-33",name:"example-text-input","onUpdate:modelValue":u[0]||(u[0]=o=>l.value.name=o),placeholder:"name"},null,512),[[m,l.value.name]])]),e("div",Ko,[u[10]||(u[10]=e("label",{class:"form-label required"},"- Namespace",-1)),c(e("input",{type:"text",class:"form-control w-33",name:"example-text-input","onUpdate:modelValue":u[1]||(u[1]=o=>l.value.namespace=o),placeholder:"namespace"},null,512),[[m,l.value.namespace]])]),e("div",Jo,[u[13]||(u[13]=e("label",{class:"form-label"},"- Labels",-1)),(n(!0),a(D,null,j(_.value,(o,U)=>(n(),a("div",{class:"generate-form",key:U},[c(e("input",{type:"text",class:"form-control w-33",name:"example-password-input","onUpdate:modelValue":x=>o.key=x,placeholder:"key"},null,8,Qo),[[m,o.key]]),c(e("input",{type:"text",class:"form-control w-33",name:"example-password-input","onUpdate:modelValue":x=>o.value=x,placeholder:"value"},null,8,Wo),[[m,o.value]]),e("div",Xo,[e("button",{class:"btn btn-primary",onClick:E,style:{"text-align":"center !important"}},[(n(),a("svg",Zo,u[11]||(u[11]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M12 5l0 14"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))]),e("button",{class:"btn btn-primary",onClick:x=>T(U)},[(n(),a("svg",ts,u[12]||(u[12]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))],8,es)])]))),128))])])]),e("div",ls,[u[22]||(u[22]=e("div",{class:"card-header"},[e("h3",{class:"card-title"},"Spec Section")],-1)),e("div",os,[u[21]||(u[21]=e("div",{class:"mb-3"},[e("label",{class:"form-label"},"Scale Target")],-1)),e("div",ss,[e("div",ns,[u[15]||(u[15]=e("label",{class:"form-label required"},"- Api Version",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":u[2]||(u[2]=o=>p.value.apiVersion=o)},null,512),[[m,p.value.apiVersion]])]),e("div",as,[u[16]||(u[16]=e("label",{class:"form-label required"},"- Kind",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":u[3]||(u[3]=o=>p.value.kind=o)},null,512),[[m,p.value.kind]])])]),e("div",rs,[e("div",is,[u[17]||(u[17]=e("label",{class:"form-label required"},"- Name",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":u[4]||(u[4]=o=>p.value.name=o)},null,512),[[m,p.value.name]])])]),e("div",ds,[e("div",us,[u[18]||(u[18]=e("label",{class:"form-label required"},"- Min Replicas",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":u[5]||(u[5]=o=>r.value.minReplicas=o)},null,512),[[m,r.value.minReplicas]])])]),e("div",cs,[e("div",ms,[u[19]||(u[19]=e("label",{class:"form-label required"},"- Max Replicas",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":u[6]||(u[6]=o=>r.value.maxReplicas=o)},null,512),[[m,r.value.maxReplicas]])])]),e("div",ps,[e("div",vs,[u[20]||(u[20]=e("label",{class:"form-label required"},"- CPU Percentage",-1)),c(e("input",{type:"text",class:"form-control","onUpdate:modelValue":u[7]||(u[7]=o=>r.value.targetCPUUtilizationPercentage=o)},null,512),[[m,r.value.targetCPUUtilizationPercentage]])])])])]),e("div",bs,[e("a",{class:K(["btn btn-primary",{disabled:!V.value}]),onClick:u[8]||(u[8]=o=>V.value?R():null),"data-bs-toggle":"modal","data-bs-target":"#modal-yaml"},"GENERATE",2)]),N(To,{"yaml-data":M.value,title:$.value},null,8,["yaml-data","title"])]))}}),ys=Q(hs,[["__scopeId","data-v-eeb9f8ea"]]),fs={class:"modal",id:"modal-config-map",tabindex:"-1"},gs={class:"modal-dialog modal-lg",role:"document"},_s={class:"modal-content"},ws={class:"modal-header"},ks={class:"modal-title"},$s={class:"modal-body"},xs={class:"card"},Cs={class:"card-body"},Us=B({__name:"configMapModal",props:{title:{},yamlData:{}},setup(P){const h=P,$=A(()=>h.yamlData);I($,async()=>{await l()});const w=f(""),l=async()=>{w.value=h.yamlData};return(_,r)=>(n(),a("div",fs,[e("div",gs,[e("div",_s,[e("div",ws,[e("h5",ks,F(h.title),1),r[0]||(r[0]=e("button",{type:"button",class:"btn-close","data-bs-dismiss":"modal","aria-label":"Close"},null,-1))]),e("div",$s,[e("div",xs,[e("div",Cs,[r[1]||(r[1]=e("h4",null,"YAML",-1)),e("div",null,[e("pre",null,F(w.value),1)])])])])])])]))}}),Ms={class:"tab-pane",id:"tabs-configMap"},Vs={class:"card"},Ps={class:"card-body"},qs={class:"mb-3"},Ss={class:"mb-3"},Ds={class:"mb-3"},js=["onUpdate:modelValue"],zs=["onUpdate:modelValue"],Hs={class:"btn-list"},Ls={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-plus",style:{margin:"0 !important"}},Bs=["onClick"],Rs={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-minus",style:{margin:"0 !important"}},Ns={class:"card mt-4"},Fs={class:"card-body"},As={class:"mb-3"},Es=["onUpdate:modelValue"],Ts=["onUpdate:modelValue"],Ys={class:"btn-list"},Os={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-plus",style:{margin:"0 !important"}},Gs=["onClick"],Is={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-minus",style:{margin:"0 !important"}},Ks={class:"btn-list justify-content-end mt-4"},Js=B({__name:"configmapForm",setup(P){const h=O(),$=f(""),w=f({}),l=f({}),_=f([]),r=f([]),p=f(""),M=A(()=>!(!l.value.name||l.value.name.trim()===""||!l.value.namespace||l.value.namespace.trim()===""));G(async()=>{await V()});const V=()=>{$.value="ConfigMap",l.value={name:"",namespace:"",labels:{}},_.value.push({key:"",value:""}),r.value.push({key:"",value:""})},L=async()=>{if(!l.value.name||l.value.name.trim()===""){h.error("Please enter ConfigMap name.");const x=document.querySelector('input[v-model="metadata.name"]');x==null||x.focus();return}if(!l.value.namespace||l.value.namespace.trim()===""){h.error("Please enter namespace.");const x=document.querySelector('input[v-model="metadata.namespace"]');x==null||x.focus();return}const u=_.value.reduce((x,k)=>(x[k.key]=k.value,x),{});l.value.labels=u;const o=r.value.reduce((x,k)=>(x[k.key]=k.value,x),{});w.value.metadata=l.value,w.value.data=o;const{data:U}=await oe(w.value);p.value=U},R=()=>{_.value.push({key:"",value:""})},E=u=>{_.value.length!==1&&_.value.splice(u,1)},T=()=>{r.value.push({key:"",value:""})},H=u=>{r.value.length!==1&&r.value.splice(u,1)};return(u,o)=>(n(),a("div",Ms,[e("div",Vs,[o[8]||(o[8]=e("div",{class:"card-header"},[e("h3",{class:"card-title"},"Metadata Section")],-1)),e("div",Ps,[e("div",qs,[o[3]||(o[3]=e("label",{class:"form-label required"},"- Name",-1)),c(e("input",{type:"text",class:"form-control w-33",name:"example-text-input","onUpdate:modelValue":o[0]||(o[0]=U=>l.value.name=U),placeholder:"configMap-01"},null,512),[[m,l.value.name]])]),e("div",Ss,[o[4]||(o[4]=e("label",{class:"form-label required"},"- Namespace",-1)),c(e("input",{type:"text",class:"form-control w-33",name:"example-text-input","onUpdate:modelValue":o[1]||(o[1]=U=>l.value.namespace=U),placeholder:"namespace"},null,512),[[m,l.value.namespace]])]),e("div",Ds,[o[7]||(o[7]=e("label",{class:"form-label"},"- Labels",-1)),(n(!0),a(D,null,j(_.value,(U,x)=>(n(),a("div",{class:"generate-form",key:x},[c(e("input",{type:"text",class:"form-control w-33",name:"example-password-input","onUpdate:modelValue":k=>U.key=k,placeholder:"key"},null,8,js),[[m,U.key]]),c(e("input",{type:"text",class:"form-control w-33",name:"example-password-input","onUpdate:modelValue":k=>U.value=k,placeholder:"value"},null,8,zs),[[m,U.value]]),e("div",Hs,[e("button",{class:"btn btn-primary",onClick:R,style:{"text-align":"center !important"}},[(n(),a("svg",Ls,o[5]||(o[5]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M12 5l0 14"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))]),e("button",{class:"btn btn-primary",onClick:k=>E(x)},[(n(),a("svg",Rs,o[6]||(o[6]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))],8,Bs)])]))),128))])])]),e("div",Ns,[o[12]||(o[12]=e("div",{class:"card-header"},[e("h3",{class:"card-title"},"Spec Section")],-1)),e("div",Fs,[e("div",As,[o[11]||(o[11]=e("label",{class:"form-label"},"- Data",-1)),(n(!0),a(D,null,j(r.value,(U,x)=>(n(),a("div",{class:"generate-form",key:x},[c(e("input",{type:"text",class:"form-control w-33",name:"example-password-input","onUpdate:modelValue":k=>U.key=k,placeholder:"key"},null,8,Es),[[m,U.key]]),c(e("input",{type:"text",class:"form-control w-33",name:"example-password-input","onUpdate:modelValue":k=>U.value=k,placeholder:"value"},null,8,Ts),[[m,U.value]]),e("div",Ys,[e("button",{class:"btn btn-primary",onClick:T,style:{"text-align":"center !important"}},[(n(),a("svg",Os,o[9]||(o[9]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M12 5l0 14"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))]),e("button",{class:"btn btn-primary",onClick:k=>H(x)},[(n(),a("svg",Is,o[10]||(o[10]=[e("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e("path",{d:"M5 12l14 0"},null,-1)])))],8,Gs)])]))),128))])])]),e("div",Ks,[e("a",{class:K(["btn btn-primary",{disabled:!M.value}]),onClick:o[2]||(o[2]=U=>M.value?L():null),"data-bs-toggle":"modal","data-bs-target":"#modal-config-map"},"GENERATE",2)]),N(Us,{"yaml-data":p.value,title:$.value},null,8,["yaml-data","title"])]))}}),Qs=Q(Js,[["__scopeId","data-v-4d96127a"]]),Ws={class:"card w-100",ref:"workflowForm"},Xs={class:"card-body"},Zs={class:"card"},en={class:"card-body"},tn={class:"tab-content"},nn=B({__name:"YamlGenerate",setup(P){return O(),G(async()=>{}),(h,$)=>(n(),a("div",Ws,[$[1]||($[1]=e("div",{class:"card-header"},[e("div",{class:"card-title"},[e("h1",null,"YAML Generator")])],-1)),e("div",Xs,[e("div",Zs,[$[0]||($[0]=X('',1)),e("div",en,[e("div",tn,[N(xt),N(Ll),N(zo),N(ys),N(Qs)])])])])],512))}});export{nn as default}; diff --git a/src/main/resources/static/assets/applicationDetailModal-BPa-EzOB.js b/src/main/resources/static/assets/applicationDetailModal-BPa-EzOB.js new file mode 100644 index 00000000..dc7a651d --- /dev/null +++ b/src/main/resources/static/assets/applicationDetailModal-BPa-EzOB.js @@ -0,0 +1,11 @@ +import{c as nt}from"./createVueComponent-Bt7iWPgv.js";import{d as Pt,f as Dt,r as h,g as y,c as o,a as t,b as Ct,u as Ut,t as n,e as F,n as c,m as E,F as _,k as R,o as r,D as Lt}from"./index-DU977P1k.js";import{q as Mt,t as lt,v as xt,w as wt}from"./softwareCatalog-VAKfe9v1.js";import{_ as kt}from"./_plugin-vue_export-helper-DlAUqK2U.js";/** + * @license @tabler/icons-vue v3.22.0 - MIT + * + * This source code is licensed under the MIT license. + * See the LICENSE file in the root directory of this source tree. + */var Gt=nt("outline","package","IconPackage",[["path",{d:"M12 3l8 4.5l0 9l-8 4.5l-8 -4.5l0 -9l8 -4.5",key:"svg-0"}],["path",{d:"M12 12l8 -4.5",key:"svg-1"}],["path",{d:"M12 12l0 9",key:"svg-2"}],["path",{d:"M12 12l-8 -4.5",key:"svg-3"}],["path",{d:"M16 5.25l-8 4.5",key:"svg-4"}]]);/** + * @license @tabler/icons-vue v3.22.0 - MIT + * + * This source code is licensed under the MIT license. + * See the LICENSE file in the root directory of this source tree. + */var ks=nt("outline","refresh","IconRefresh",[["path",{d:"M20 11a8.1 8.1 0 0 0 -15.5 -2m-.5 -4v4h4",key:"svg-0"}],["path",{d:"M4 13a8.1 8.1 0 0 0 15.5 2m.5 4v-4h-4",key:"svg-1"}]]);const Ot={PREPARING_RUNTIME:"Initializing",PREPARING_METRICS_SERVER:"Initializing",PREPARING_INGRESS_NGINX:"Initializing",DEPLOYING:"Deploying",INSTALL:"Installing",IN_PROGRESS:"In Progress",PENDING:"Pending",START:"Starting",STARTING:"Starting",RESTART:"Restarting",RESTARTING:"Restarting",RUN:"Running",RUNNING:"Running",SUCCESS:"Running",COMPLETED:"Completed",STOP:"Stopped",STOPPED:"Stopped",UNINSTALL:"Uninstalling",UNINSTALLED:"Uninstalled",NOT_FOUND:"Not Found",UNKNOWN:"Unknown",IMAGE_PULL_ERROR:"Image Pull Error",FAILED:"Failed",ERROR:"Error"},$t=new Set(["PREPARING_RUNTIME","PREPARING_METRICS_SERVER","PREPARING_INGRESS_NGINX","DEPLOYING","IN_PROGRESS","INSTALL","START","STARTING","RESTART","RESTARTING"]),Ft=new Set(["RUN","RUNNING","SUCCESS","COMPLETED"]),Bt=new Set(["NOT_FOUND","PENDING","UNKNOWN"]),zt=new Set(["STOP","STOPPED","UNINSTALL","UNINSTALLED"]),Yt=new Set(["FAILED","ERROR","IMAGE_PULL_ERROR"]),Vt=new Set(["PREPARING_RUNTIME","PREPARING_METRICS_SERVER","PREPARING_INGRESS_NGINX","DEPLOYING","IN_PROGRESS","INSTALL","START","STARTING","RESTART","RESTARTING","UNINSTALL","UNINSTALLED","FAILED"]),Ht=new Set(["PREPARING_RUNTIME","PREPARING_METRICS_SERVER","PREPARING_INGRESS_NGINX","DEPLOYING","INSTALL","IN_PROGRESS","PENDING","START","STARTING","RESTART","RESTARTING","RUN","RUNNING","SUCCESS"]),M=g=>String(g||"").trim().toUpperCase(),Kt=g=>{const p=M(g);return p&&(Ot[p]||g)||"-"},Wt=g=>{const p=M(g);return Ft.has(p)?"badge bg-success":$t.has(p)?"badge bg-primary":Bt.has(p)?"badge bg-warning":zt.has(p)?"badge bg-secondary":Yt.has(p)?"badge bg-danger":"badge bg-secondary"},Gs=g=>Vt.has(M(g)),Xt=(g,p)=>g===!0?{label:"Healthy",className:"text-success"}:g===!1?{label:"Unhealthy",className:"text-danger"}:Ht.has(M(p))?{label:"Checking",className:"text-warning"}:{label:"Unknown",className:"text-muted"},jt=["id"],qt={class:"modal-dialog modal-xl modal-dialog-centered",role:"document"},Zt={class:"modal-content"},Jt={class:"modal-body",style:{"max-height":"80vh","overflow-y":"auto"}},Qt={key:0,class:"text-center"},te={key:1},ee={class:"mb-4"},se={class:"row"},ae={class:"col-md-2 text-center"},le=["src","alt"],ne={key:1,class:"application-detail-logo-fallback d-inline-flex align-items-center justify-content-center"},oe={class:"col-md-10"},re={class:"text-muted"},ie={class:"row"},ue={class:"col-md-3"},de={class:"col-md-3"},ce={class:"col-md-3"},me={class:"col-md-3"},ve={class:"mb-4"},ge={key:0,class:"text-muted small mb-2"},pe={class:"row"},be={class:"col-md-3"},Ne={class:"card text-center"},ye={class:"card-body"},Se={class:"card-title"},he={class:"col-md-3"},Ee={class:"card text-center"},Ae={class:"card-body"},_e={class:"card-title"},Re={class:"col-md-3"},Ie={class:"card text-center"},Te={class:"card-body"},fe={class:"card-title"},Pe={class:"col-md-3"},De={class:"card text-center"},Ce={class:"card-body"},Ue={class:"card-title"},Le={class:"mb-4"},Me={class:"d-flex justify-content-between align-items-center mb-2"},xe={class:"text-muted small"},we={class:"btn-list"},ke=["disabled"],Ge={key:0,class:"text-center text-muted py-3"},Oe={key:1,class:"border rounded p-3"},$e={key:0,class:"alert alert-light border text-muted py-2 mb-3"},Fe={class:"d-flex justify-content-between flex-wrap gap-2 mb-3"},Be={class:"badge bg-secondary"},ze={class:"badge bg-info"},Ye={class:"table-responsive mb-3"},Ve={class:"table table-sm mb-0"},He={key:1,class:"row g-2 mb-3"},Ke={class:"col-md-3"},We={class:"col-md-3"},Xe={class:"col-md-3"},je={class:"col-md-3"},qe={class:"mb-3"},Ze={class:"mb-3"},Je={key:2,class:"mb-3"},Qe={class:"policy-evidence-list mb-0"},ts={key:2,class:"text-muted border rounded p-3"},es={class:"mb-4"},ss={class:"table-responsive"},as={class:"table table-sm"},ls={key:0},ns={class:"mb-4"},os={class:"table-responsive"},rs={class:"table table-sm"},is={key:1},us={class:"mb-4"},ds={class:"mb-3"},cs={class:"table-responsive"},ms={class:"table table-sm"},vs={class:"mb-3"},gs={class:"table-responsive"},ps={class:"table table-sm"},bs={class:"mb-3"},Ns={class:"table-responsive"},ys={class:"table table-sm"},Ss={key:0,class:"mb-3"},hs={class:"table-responsive"},Es={class:"table table-sm"},As={key:1,class:"mb-3"},_s={class:"table-responsive"},Rs={class:"table table-sm"},Is={key:0,class:"mb-4"},Ts={class:"table-responsive"},fs={class:"table table-sm"},Ps={key:2,class:"text-center text-muted"},Ds=Pt({__name:"applicationDetailModal",props:{deploymentId:{},modalId:{default:"application-detail-modal"}},emits:["close"],setup(g,{expose:p,emit:ot}){const B=g,rt=ot,T=Dt(),f=h(!1),S=h(!1),l=h(null),m=h(null),A=h([]),d=h(null),P=h(!1),z=[7,30,90],N=h(0);let b=0;const it={"apache tomcat":"/catalog-icons/apache-tomcat.png",redis:"/catalog-icons/redis.svg",nginx:"/catalog-icons/nginx.svg","apache http server":"/catalog-icons/apache-http-server.svg","nexus repository":"/catalog-icons/nexus-repository.svg",mariadb:"/catalog-icons/mariadb.svg",grafana:"/catalog-icons/grafana.svg",prometheus:"/catalog-icons/prometheus.svg",elasticsearch:"/catalog-icons/elasticsearch.svg"},ut=s=>String(s||"").trim().toLowerCase(),dt=s=>it[ut(s)]||"",Y=y(()=>{const s=l.value;return s?Lt(dt(s.catalogName)||s.logoUrlLarge||s.logoUrlSmall||""):""});p({refreshData:s=>{const e=++b;N.value=s,l.value=null,m.value=null,A.value=[],d.value=null,N.value&&(ct(s,e),V(s,e))},resetData:()=>{b+=1,N.value=0,l.value=null,m.value=null,A.value=[],d.value=null,P.value=!1,f.value=!1,S.value=!1,$()}});const ct=async(s,e)=>{if(s){f.value=!0;try{P.value=!1;const{data:a}=await Mt(s);e===b&&s===N.value&&a&&(l.value=a.integratedInfo)}catch(a){if(e!==b)return;console.error("Failed to load application detail:",a),T.error("Failed to load application detail")}finally{e===b&&(f.value=!1)}}},V=async(s,e)=>{if(s){S.value=!0;try{const a=await lt(s);if(e!==b||s!==N.value)return;m.value=a.data||null;const i=await Promise.all(z.map(async v=>{try{return(await lt(s,v)).data||null}catch{return null}}));if(e!==b||s!==N.value)return;A.value=i.filter(Boolean);const u=await xt(s);if(e!==b||s!==N.value)return;d.value=u.data||null}catch(a){if(e!==b)return;console.error("Failed to load policy recommendation:",a),m.value=null,A.value=[],d.value=null}finally{e===b&&(S.value=!1)}}},I=s=>{if(!s)return null;const e=new Date(String(s).replace(" ","T"));return Number.isNaN(e.getTime())?null:e},mt=s=>{const e=s instanceof Date?s:I(s);if(!e)return"-";const a=i=>String(i).padStart(2,"0");return`${e.getFullYear()}-${a(e.getMonth()+1)}-${a(e.getDate())} ${a(e.getHours())}:${a(e.getMinutes())}:${a(e.getSeconds())}`},x=s=>String(s||"").trim().toUpperCase(),vt=new Set(["RUN","RUNNING","SUCCESS"]),gt=new Set(["UNINSTALL","UNINSTALLED","NOT_FOUND","STOP","STOPPED","FAILED","ERROR"]),w=y(()=>{var s,e,a;return x(((s=l.value)==null?void 0:s.applicationStatus)||((e=l.value)==null?void 0:e.podStatus)||((a=l.value)==null?void 0:a.status))}),H=y(()=>{var s;return Xt((s=l.value)==null?void 0:s.healthCheck,w.value)}),pt=y(()=>{var a,i;const s=I((a=l.value)==null?void 0:a.executedAt);return(Array.isArray((i=l.value)==null?void 0:i.operationHistories)?l.value.operationHistories:[]).some(u=>{if(x(u==null?void 0:u.operationType)!=="UNINSTALL")return!1;const v=I((u==null?void 0:u.executedAt)||(u==null?void 0:u.createdAt));return!s||!v?!0:v.getTime()>=s.getTime()})}),D=y(()=>pt.value||gt.has(w.value)?!1:vt.has(w.value)),k=y(()=>D.value),bt=y(()=>{var v;const s=I((v=l.value)==null?void 0:v.executedAt);if(!s)return 0;const e=new Date,a=new Date(s.getFullYear(),s.getMonth(),s.getDate()),u=new Date(e.getFullYear(),e.getMonth(),e.getDate()).getTime()-a.getTime();return Math.max(Math.floor(u/(1e3*60*60*24)),0)}),Nt=y(()=>{const s=new Map;return A.value.forEach(e=>{const a=Z(e);typeof a=="number"&&s.set(a,e)}),s}),yt=y(()=>z.map(s=>{const e=Nt.value.get(s)||null,a=bt.value>=s,i=(e==null?void 0:e.dataStatus)||(a?"PENDING_ANALYSIS":"ACCUMULATING");return{period:s,profile:e,eligible:a,dataStatus:i,dimmed:!a||["INSUFFICIENT_DATA","PENDING_ANALYSIS","ACCUMULATING"].includes(i)}})),St=y(()=>{var e,a,i;const s=[(e=d.value)==null?void 0:e.updatedAt,(a=d.value)==null?void 0:a.createdAt,(i=m.value)==null?void 0:i.createdAt,...A.value.map(u=>u==null?void 0:u.createdAt)].map(I).filter(u=>!!u).sort((u,v)=>v.getTime()-u.getTime());return s.length?mt(s[0]):"분석 이력 없음"}),ht=async()=>{if(N.value){if(!k.value){T.info("현재 실행 중인 배포만 정책 추천을 분석할 수 있습니다.");return}S.value=!0;try{await wt(N.value),await V(N.value,b),T.success("Policy recommendation analyzed")}catch(s){console.error("Failed to analyze policy recommendation:",s),T.error("Failed to analyze policy recommendation")}finally{S.value=!1}}},C=s=>Wt(s),U=s=>Kt(s),Et=s=>{switch(s==null?void 0:s.toLowerCase()){case"critical":return"badge bg-danger";case"warning":return"badge bg-warning";case"error":return"badge bg-danger";default:return"badge bg-info"}},At=s=>{switch(s==null?void 0:s.toLowerCase()){case"info":return"badge bg-info";case"warning":return"badge bg-warning";case"error":return"badge bg-danger";case"debug":return"badge bg-secondary";default:return"badge bg-primary"}},_t=s=>{switch(s){case"CPU_INTENSIVE":return"badge bg-primary";case"MEMORY_INTENSIVE":return"badge bg-purple";case"CPU_MEMORY_INTENSIVE":return"badge bg-warning";case"GENERAL_PURPOSE":return"badge bg-success";default:return"badge bg-secondary"}},G=s=>{switch(s){case"CPU_INTENSIVE":return"CPU 중심";case"MEMORY_INTENSIVE":return"Memory 중심";case"CPU_MEMORY_INTENSIVE":return"CPU/Memory 복합";case"GENERAL_PURPOSE":return"현행/범용";default:return s||"N/A"}},K=s=>{switch(x(s)){case"UNDER_PROVISIONED":return"용량 부족";case"OVER_PROVISIONED":return"사용률 낮음";case"RIGHT_SIZED":return"적정";default:return s||"N/A"}},W=s=>{switch(s){case"SUFFICIENT":return"badge bg-success";case"PARTIAL_DATA":return"badge bg-warning";case"INSUFFICIENT_DATA":case"ACCUMULATING":case"PENDING_ANALYSIS":return"badge bg-secondary";default:return"badge bg-secondary"}},X=s=>{switch(s){case"SUFFICIENT":return"충분";case"PARTIAL_DATA":return"부분 데이터";case"INSUFFICIENT_DATA":case"ACCUMULATING":return"데이터 축적 중";case"PENDING_ANALYSIS":return"분석 대기";default:return s||"N/A"}},Rt=s=>s?s.split(",").map(e=>e.trim()).filter(Boolean):["NO_ACTION"],It=s=>{switch(s){case"INCREASE_CPU":return"CPU 정책 검토";case"INCREASE_MEMORY":return"Memory 정책 검토";case"REVIEW_CPU_MEMORY_POLICY":return"CPU/Memory 복합 검토";case"CHANGE_RESOURCE_TYPE":return"운영 유형 검토";case"DOWNSIZE":return"현행/하향 검토";case"INVESTIGATE_STABILITY":return"안정성 점검";case"NO_ACTION":return"현행 유지";default:return s}},j=s=>{if(s==null)return"N/A";const e=Math.round(s*100);return e>=80?`높음 ${e}%`:e>=60?`보통 ${e}%`:e>=40?`낮음 ${e}%`:`판단 보류 ${e}%`},q=s=>{if(!s)return[];try{const e=JSON.parse(s);return Array.isArray(e)?e:[]}catch{return s.split(",").map(e=>e.trim()).filter(Boolean)}},Tt=s=>{const e=s.match(/^validDays=(\d+) is below (\d+)$/);if(e)return`유효 분석일이 ${e[1]}일로 최소 기준 ${e[2]}일에 미달합니다.`;const a=s.match(/^cpuPressureP95=([\d.]+)$/);if(a)return`CPU p95 사용률이 ${a[1]}%입니다.`;const i=s.match(/^memoryPressureP95=([\d.]+)$/);if(i)return`Memory p95 사용률이 ${i[1]}%입니다.`;const u=s.match(/^oomCount=(\d+)$/);if(u)return`OOM 이벤트가 ${u[1]}건 발생했습니다.`;const v=s.match(/^restartCount=(\d+), crashLoopCount=(\d+)$/);if(v)return`재시작 이벤트 ${v[1]}건, CrashLoop 이벤트 ${v[2]}건이 확인되었습니다.`;const L=s.match(/^networkEvidence=maxInBytes=(\d+), maxOutBytes=(\d+)$/);if(L)return`네트워크 최대 수신 ${O(Number(L[1]))}, 최대 송신 ${O(Number(L[2]))}가 확인되었습니다.`;const et=s.match(/^errorLogCount=(\d+)$/);if(et)return`ERROR 로그가 ${et[1]}건 확인되었습니다.`;const st=s.match(/^oomRelatedLogCount=(\d+)$/);if(st)return`OOM 관련 로그가 ${st[1]}건 확인되었습니다.`;const at=s.match(/^networkOrTimeoutLogCount=(\d+)$/);return at?`네트워크 또는 timeout 관련 로그가 ${at[1]}건 확인되었습니다.`:s==="cpuPressureP95 and memoryPressureP95 are below 40"?"CPU와 Memory p95 사용률이 모두 40% 미만입니다.":s==="CPU/Memory pressure is within right-sized range"?"CPU와 Memory 사용률이 적정 범위입니다.":s==="K8s percentage metrics require request/limit normalization; confidence capped at 0.60"?"K8s 백분율 지표는 request/limit 기준 정규화가 필요하여 신뢰도가 60%로 제한됩니다.":s},Z=s=>{if(!(s!=null&&s.analysisStartDate)||!(s!=null&&s.analysisEndDate))return"-";const e=new Date(s.analysisStartDate),a=new Date(s.analysisEndDate);return Math.round((a.getTime()-e.getTime())/(1e3*60*60*24))+1},ft=(s,e)=>{const a=Z(s);if(typeof a=="number")return a;const i=(s==null?void 0:s.validDays)??0,u=(s==null?void 0:s.missingDays)??0;return i+u||e||0},J=(s,e)=>{const a=(s==null?void 0:s.validDays)??0,i=ft(s,e);return i?`${a}일 확보 / ${i}일 기준`:`${a}일 확보`},Q=s=>!D.value||s===null||s===void 0?"-":`${s}%`,tt=s=>D.value?O(s):"-",O=s=>{if(s===0)return"0 Bytes";if(!s)return"N/A";const e=1024,a=["Bytes","KB","MB","GB","TB"],i=Math.floor(Math.log(s)/Math.log(e));return parseFloat((s/Math.pow(e,i)).toFixed(2))+" "+a[i]},$=()=>{const s=document.getElementById(B.modalId);if(s)try{if(window.bootstrap&&window.bootstrap.Modal){const e=window.bootstrap.Modal.getInstance(s);e?e.hide():new window.bootstrap.Modal(s).hide()}else s.style.display="none",s.classList.remove("show"),s.setAttribute("aria-hidden","true"),s.removeAttribute("aria-modal"),document.body.classList.remove("modal-open"),document.querySelectorAll(".modal-backdrop").forEach(a=>a.remove()),document.body.style.overflow="",document.body.style.paddingRight=""}catch(e){console.error("Error closing modal:",e),s.style.display="none",s.classList.remove("show"),document.body.classList.remove("modal-open"),document.querySelectorAll(".modal-backdrop").forEach(i=>i.remove())}l.value=null,m.value=null,A.value=[],d.value=null,rt("close")};return(s,e)=>(r(),o("div",{class:"modal modal-blur fade",id:B.modalId,tabindex:"-1",role:"dialog","aria-hidden":"true"},[t("div",qt,[t("div",Zt,[t("div",{class:"modal-header"},[e[1]||(e[1]=t("h5",{class:"modal-title"},"Application Detail",-1)),t("button",{type:"button",class:"btn-close","data-bs-dismiss":"modal","aria-label":"Close",onClick:$})]),t("div",Jt,[f.value?(r(),o("div",Qt,e[2]||(e[2]=[t("div",{class:"spinner-border",role:"status"},[t("span",{class:"visually-hidden"},"Loading...")],-1)]))):l.value?(r(),o("div",te,[t("div",ee,[e[7]||(e[7]=t("h6",{class:"text-primary"},"Application Overview",-1)),t("div",se,[t("div",ae,[Y.value&&!P.value?(r(),o("img",{key:0,src:Y.value,alt:l.value.catalogName,class:"img-fluid application-detail-logo",onError:e[0]||(e[0]=a=>P.value=!0)},null,40,le)):(r(),o("div",ne,[Ct(Ut(Gt),{class:"icon",size:"32","stroke-width":"1.75"})]))]),t("div",oe,[t("h5",null,n(l.value.catalogName),1),t("p",re,n(l.value.catalogDescription),1),t("div",ie,[t("div",ue,[e[3]||(e[3]=t("strong",null,"Category:",-1)),F(" "+n(l.value.catalogCategory),1)]),t("div",de,[e[4]||(e[4]=t("strong",null,"Default Port:",-1)),F(" "+n(l.value.defaultPort),1)]),t("div",ce,[e[5]||(e[5]=t("strong",{class:"me-2"},"Status:",-1)),t("span",{class:c(C(l.value.applicationStatus))},n(U(l.value.applicationStatus)),3)]),t("div",me,[e[6]||(e[6]=t("strong",{class:"me-2"},"Health Check:",-1)),t("span",{class:c(H.value.className)},n(H.value.label),3)])])])])]),t("div",ve,[e[12]||(e[12]=t("h6",{class:"text-primary"},"성능 지표",-1)),D.value?E("",!0):(r(),o("div",ge," 현재 실행 중인 상태가 아니므로 최신 성능 지표를 표시하지 않습니다. ")),t("div",pe,[t("div",be,[t("div",Ne,[t("div",ye,[t("h5",Se,n(Q(l.value.cpuUsage)),1),e[8]||(e[8]=t("p",{class:"card-text"},"CPU 사용률",-1))])])]),t("div",he,[t("div",Ee,[t("div",Ae,[t("h5",_e,n(Q(l.value.memoryUsage)),1),e[9]||(e[9]=t("p",{class:"card-text"},"Memory 사용률",-1))])])]),t("div",Re,[t("div",Ie,[t("div",Te,[t("h5",fe,n(tt(l.value.networkIn)),1),e[10]||(e[10]=t("p",{class:"card-text"},"네트워크 수신",-1))])])]),t("div",Pe,[t("div",De,[t("div",Ce,[t("h5",Ue,n(tt(l.value.networkOut)),1),e[11]||(e[11]=t("p",{class:"card-text"},"네트워크 송신",-1))])])])])]),t("div",Le,[t("div",Me,[t("div",null,[e[13]||(e[13]=t("h6",{class:"text-primary mb-0"},"정책 추천",-1)),t("div",xe,"최근 분석 시각: "+n(St.value),1)]),t("div",we,[t("button",{type:"button",class:"btn btn-outline-primary",disabled:S.value||!l.value.deploymentId||!k.value,onClick:ht},n(S.value?"Analyzing...":"Analyze"),9,ke)])]),S.value?(r(),o("div",Ge,e[14]||(e[14]=[t("div",{class:"spinner-border spinner-border-sm me-2",role:"status"},null,-1),F(" 정책 추천 정보를 불러오는 중입니다. ")]))):d.value?(r(),o("div",Oe,[k.value?E("",!0):(r(),o("div",$e," 운영 종료 또는 미확인 상태의 배포는 정책 추천 분석을 실행하지 않습니다. 아래 내용은 마지막으로 저장된 분석 결과입니다. ")),t("div",Fe,[t("div",null,[e[15]||(e[15]=t("div",{class:"text-muted small"},"현재 설정 유형",-1)),t("span",Be,n(G(d.value.selectedResourceType)),1)]),t("div",null,[e[16]||(e[16]=t("div",{class:"text-muted small"},"추천 운영 유형",-1)),t("span",{class:c(_t(d.value.recommendedResourceType))},n(G(d.value.recommendedResourceType)),3)]),t("div",null,[e[17]||(e[17]=t("div",{class:"text-muted small"},"정책 차이",-1)),t("span",{class:c(d.value.mismatch?"badge bg-warning":"badge bg-success")},n(d.value.mismatch?"검토 필요":"일치"),3)]),t("div",null,[e[18]||(e[18]=t("div",{class:"text-muted small"},"분석 신뢰도",-1)),t("span",ze,n(j(d.value.confidence)),1)])]),t("div",Ye,[t("table",Ve,[e[19]||(e[19]=t("thead",null,[t("tr",null,[t("th",null,"분석 기간"),t("th",null,"추천 유형"),t("th",null,"데이터 상태"),t("th",null,"신뢰도"),t("th",null,"분석 데이터")])],-1)),t("tbody",null,[(r(!0),o(_,null,R(yt.value,a=>(r(),o("tr",{key:a.period,class:c({"policy-period-muted":a.dimmed})},[t("td",null,n(a.period)+"d",1),t("td",null,n(a.profile?G(a.profile.recommendedResourceType):"-"),1),t("td",null,[t("span",{class:c(W(a.dataStatus))},n(X(a.dataStatus)),3)]),t("td",null,n(a.profile?j(a.profile.confidence):"-"),1),t("td",null,n(J(a.profile,a.period)),1)],2))),128))])])]),m.value?(r(),o("div",He,[t("div",Ke,[e[20]||(e[20]=t("div",{class:"text-muted small"},"데이터 상태",-1)),t("span",{class:c(W(m.value.dataStatus))},n(X(m.value.dataStatus)),3)]),t("div",We,[e[21]||(e[21]=t("div",{class:"text-muted small"},"CPU 상태",-1)),t("span",null,n(K(m.value.cpuSizingStatus)),1)]),t("div",Xe,[e[22]||(e[22]=t("div",{class:"text-muted small"},"Memory 상태",-1)),t("span",null,n(K(m.value.memorySizingStatus)),1)]),t("div",je,[e[23]||(e[23]=t("div",{class:"text-muted small"},"분석 데이터",-1)),t("span",null,n(J(m.value)),1)])])):E("",!0),t("div",qe,[e[24]||(e[24]=t("div",{class:"text-muted small"},"검토 항목",-1)),(r(!0),o(_,null,R(Rt(d.value.actions),a=>(r(),o("span",{key:a,class:"badge bg-light text-dark me-1"},n(It(a)),1))),128))]),t("p",Ze,n(d.value.message),1),m.value&&q(m.value.reasons).length?(r(),o("div",Je,[e[25]||(e[25]=t("div",{class:"text-muted small"},"분석 근거",-1)),t("ul",Qe,[(r(!0),o(_,null,R(q(m.value.reasons),a=>(r(),o("li",{key:a},n(Tt(a)),1))),128))])])):E("",!0)])):(r(),o("div",ts," 정책 추천 정보가 없습니다. "))]),t("div",es,[e[28]||(e[28]=t("h6",{class:"text-primary"},"Action History",-1)),t("div",ss,[t("table",as,[e[27]||(e[27]=t("thead",null,[t("tr",null,[t("th",null,"Action"),t("th",null,"Timestamp"),t("th",null,"User"),t("th",null,"Status"),t("th",null,"Description")])],-1)),t("tbody",null,[l.value.operationHistories.length===0?(r(),o("tr",ls,e[26]||(e[26]=[t("td",{colspan:"5",class:"text-center text-muted"},"No action history available",-1)]))):E("",!0),(r(!0),o(_,null,R(l.value.operationHistories,a=>(r(),o("tr",{key:a.id},[t("td",null,n(a.operationType),1),t("td",null,n(a.executedAt),1),t("td",null,n(a.executedBy||"system"),1),t("td",null,[t("span",{class:c(C(a.status))},n(U(a.status)),3)]),t("td",null,n(a.detailReason||a.reason),1)]))),128))])])])]),t("div",ns,[e[31]||(e[31]=t("h6",{class:"text-primary"},"Error Logs",-1)),t("div",os,[t("table",rs,[e[30]||(e[30]=t("thead",null,[t("tr",null,[t("th",null,"Timestamp"),t("th",null,"Error Code"),t("th",null,"Severity"),t("th",null,"Module"),t("th",null,"Description")])],-1)),t("tbody",null,[l.value.errorLogs.length>0?(r(!0),o(_,{key:0},R(l.value.errorLogs,a=>(r(),o("tr",{key:a.errorCode},[t("td",null,n(a.loggedAt),1),t("td",null,n(a.errorCode),1),t("td",null,[t("span",{class:c(Et(a.severity))},n(a.severity),3)]),t("td",null,n(a.module),1),t("td",null,n(a.logMessage),1)]))),128)):(r(),o("tr",is,e[29]||(e[29]=[t("td",{colspan:"5",class:"text-center text-muted"},"No error logs available",-1)])))])])])]),t("div",us,[e[42]||(e[42]=t("h6",{class:"text-primary"},"Deployment History",-1)),t("div",ds,[e[33]||(e[33]=t("h6",null,"Basic Deployment Information",-1)),t("div",cs,[t("table",ms,[e[32]||(e[32]=t("thead",null,[t("tr",null,[t("th",null,"ID"),t("th",null,"Action Type"),t("th",null,"Executed At"),t("th",null,"Executed By"),t("th",null,"Status")])],-1)),t("tbody",null,[t("tr",null,[t("td",null,n(l.value.deploymentId),1),t("td",null,n(l.value.actionType),1),t("td",null,n(l.value.executedAt),1),t("td",null,n(l.value.executedBy||"system"),1),t("td",null,[t("span",{class:c(C(l.value.status))},n(U(l.value.status)),3)])])])])])]),t("div",vs,[e[35]||(e[35]=t("h6",null,"Cloud & Cluster Information",-1)),t("div",gs,[t("table",ps,[e[34]||(e[34]=t("thead",null,[t("tr",null,[t("th",null,"Cloud Provider"),t("th",null,"Cloud Region"),t("th",null,"Cluster Name"),t("th",null,"Deployment Type"),t("th",null,"MCI ID"),t("th",null,"UID")])],-1)),t("tbody",null,[t("tr",null,[t("td",null,n(l.value.cloudProvider),1),t("td",null,n(l.value.cloudRegion),1),t("td",null,n(l.value.clusterName||"N/A"),1),t("td",null,n(l.value.deploymentType),1),t("td",null,n(l.value.mciId),1),t("td",null,n(l.value.vmId),1)])])])])]),t("div",bs,[e[37]||(e[37]=t("h6",null,"Network & Service Information",-1)),t("div",Ns,[t("table",ys,[e[36]||(e[36]=t("thead",null,[t("tr",null,[t("th",null,"Namespace"),t("th",null,"Pod Status"),t("th",null,"Public IP"),t("th",null,"Service Port"),t("th",null,"VM ID"),t("th",null,"Catalog ID")])],-1)),t("tbody",null,[t("tr",null,[t("td",null,n(l.value.namespace),1),t("td",null,[t("span",{class:c(C(l.value.podStatus||l.value.applicationStatus))},n(U(l.value.podStatus||l.value.applicationStatus)),3)]),t("td",null,n(l.value.publicIp),1),t("td",null,n(l.value.servicePort||l.value.defaultPort),1),t("td",null,n(l.value.vmId),1),t("td",null,n(l.value.catalogName),1)])])])])]),l.value.deploymentType==="K8S"?(r(),o("div",Ss,[e[39]||(e[39]=t("h6",null,"Deployment Options",-1)),t("div",hs,[t("table",Es,[e[38]||(e[38]=t("thead",null,[t("tr",null,[t("th",null,"Resource Type"),t("th",null,"HPA"),t("th",null,"Rebalancing"),t("th",null,"Min Replicas"),t("th",null,"Max Replicas"),t("th",null,"CPU Threshold"),t("th",null,"Memory Threshold")])],-1)),t("tbody",null,[t("tr",null,[t("td",null,n(l.value.resourceType||"N/A"),1),t("td",null,[t("span",{class:c(l.value.hpaEnabled?"text-success":"text-muted")},n(l.value.hpaEnabled?"Enabled":"Disabled"),3)]),t("td",null,[t("span",{class:c(l.value.workloadRebalancingEnabled?"text-success":"text-muted")},n(l.value.workloadRebalancingEnabled?"Enabled":"Disabled"),3)]),t("td",null,n(l.value.minReplicas||"N/A"),1),t("td",null,n(l.value.maxReplicas||"N/A"),1),t("td",null,n(l.value.cpuThreshold?`${l.value.cpuThreshold}%`:"N/A"),1),t("td",null,n(l.value.memoryThreshold?`${l.value.memoryThreshold}%`:"N/A"),1)])])])])])):E("",!0),l.value.ingressEnabled?(r(),o("div",As,[e[41]||(e[41]=t("h6",null,"Ingress Information",-1)),t("div",_s,[t("table",Rs,[e[40]||(e[40]=t("thead",null,[t("tr",null,[t("th",null,"Enabled"),t("th",null,"Host"),t("th",null,"Path"),t("th",null,"Class"),t("th",null,"TLS Enabled"),t("th",null,"TLS Secret")])],-1)),t("tbody",null,[t("tr",null,[t("td",null,[t("span",{class:c(l.value.ingressEnabled?"text-success":"text-danger")},n(l.value.ingressEnabled?"Yes":"No"),3)]),t("td",null,n(l.value.ingressHost||"N/A"),1),t("td",null,n(l.value.ingressPath||"N/A"),1),t("td",null,n(l.value.ingressClass||"N/A"),1),t("td",null,[t("span",{class:c(l.value.ingressTlsEnabled?"text-success":"text-danger")},n(l.value.ingressTlsEnabled?"Yes":"No"),3)]),t("td",null,n(l.value.ingressTlsSecret||"N/A"),1)])])])])])):E("",!0)]),l.value.deploymentLogs&&l.value.deploymentLogs.length>0?(r(),o("div",Is,[e[44]||(e[44]=t("h6",{class:"text-primary"},"Deployment Logs",-1)),t("div",Ts,[t("table",fs,[e[43]||(e[43]=t("thead",null,[t("tr",null,[t("th",null,"Timestamp"),t("th",null,"Type"),t("th",null,"Message")])],-1)),t("tbody",null,[(r(!0),o(_,null,R(l.value.deploymentLogs,a=>(r(),o("tr",{key:a.id},[t("td",null,n(a.loggedAt),1),t("td",null,[t("span",{class:c(["me-4 mt-2",At(a.logType)])},n(a.logType),3)]),t("td",null,n(a.logMessage),1)]))),128))])])])])):E("",!0)])):(r(),o("div",Ps," No data available "))]),t("div",{class:"modal-footer"},[t("button",{type:"button",class:"btn btn-secondary","data-bs-dismiss":"modal",onClick:$},"Close")])])])],8,jt))}}),Os=kt(Ds,[["__scopeId","data-v-fc9d6a1a"]]);export{Os as A,Gt as I,ks as a,Wt as b,Kt as g,Gs as i}; diff --git a/src/main/resources/static/assets/applicationDetailModal-BfM4XzFr.css b/src/main/resources/static/assets/applicationDetailModal-BfM4XzFr.css new file mode 100644 index 00000000..56bd7c3a --- /dev/null +++ b/src/main/resources/static/assets/applicationDetailModal-BfM4XzFr.css @@ -0,0 +1 @@ +.table th[data-v-fc9d6a1a]{font-weight:600;background-color:#f8f9fa}.table-responsive[data-v-fc9d6a1a]{border-radius:6px;border:1px solid #dee2e6}.badge[data-v-fc9d6a1a]{font-size:.75rem}h6[data-v-fc9d6a1a]{color:#495057;font-weight:600;margin-bottom:.75rem}.text-primary[data-v-fc9d6a1a]{color:#0d6efd!important}.card[data-v-fc9d6a1a]{border:1px solid #dee2e6;border-radius:8px;margin-bottom:1rem}.card-body[data-v-fc9d6a1a]{padding:1rem}.card-title[data-v-fc9d6a1a]{font-size:1.5rem;font-weight:600;margin-bottom:.5rem}.card-text[data-v-fc9d6a1a]{color:#6c757d;font-size:.875rem;margin-bottom:0}.img-fluid[data-v-fc9d6a1a]{border-radius:8px}.application-detail-logo[data-v-fc9d6a1a],.application-detail-logo-fallback[data-v-fc9d6a1a]{width:80px;height:80px}.application-detail-logo[data-v-fc9d6a1a]{object-fit:contain}.application-detail-logo-fallback[data-v-fc9d6a1a]{border:1px solid #dee2e6;border-radius:8px;color:#6c757d;background-color:#f8f9fa}.row[data-v-fc9d6a1a]{margin-bottom:1rem}.col-md-3 strong[data-v-fc9d6a1a],.col-md-10 strong[data-v-fc9d6a1a]{color:#495057}.policy-evidence-list[data-v-fc9d6a1a]{padding-left:1rem;color:#495057;font-size:.8125rem}.policy-period-muted[data-v-fc9d6a1a]{color:#6c757d;opacity:.62}.policy-period-muted .badge[data-v-fc9d6a1a]{opacity:.82} diff --git a/src/main/resources/static/assets/applicationDetailModal-CKm2tmzu.js b/src/main/resources/static/assets/applicationDetailModal-CKm2tmzu.js new file mode 100644 index 00000000..733dcd59 --- /dev/null +++ b/src/main/resources/static/assets/applicationDetailModal-CKm2tmzu.js @@ -0,0 +1,11 @@ +import{c as nt}from"./createVueComponent-DNPdC8og.js";import{d as Pt,f as Dt,r as h,g as y,c as o,a as t,b as Ct,u as Ut,t as n,e as F,n as c,m as E,F as _,k as R,o as r,D as Lt}from"./index-BKFNv1Gc.js";import{q as Mt,t as lt,v as xt,w as wt}from"./softwareCatalog-DuMGACG8.js";import{_ as kt}from"./_plugin-vue_export-helper-DlAUqK2U.js";/** + * @license @tabler/icons-vue v3.22.0 - MIT + * + * This source code is licensed under the MIT license. + * See the LICENSE file in the root directory of this source tree. + */var Gt=nt("outline","package","IconPackage",[["path",{d:"M12 3l8 4.5l0 9l-8 4.5l-8 -4.5l0 -9l8 -4.5",key:"svg-0"}],["path",{d:"M12 12l8 -4.5",key:"svg-1"}],["path",{d:"M12 12l0 9",key:"svg-2"}],["path",{d:"M12 12l-8 -4.5",key:"svg-3"}],["path",{d:"M16 5.25l-8 4.5",key:"svg-4"}]]);/** + * @license @tabler/icons-vue v3.22.0 - MIT + * + * This source code is licensed under the MIT license. + * See the LICENSE file in the root directory of this source tree. + */var ks=nt("outline","refresh","IconRefresh",[["path",{d:"M20 11a8.1 8.1 0 0 0 -15.5 -2m-.5 -4v4h4",key:"svg-0"}],["path",{d:"M4 13a8.1 8.1 0 0 0 15.5 2m.5 4v-4h-4",key:"svg-1"}]]);const Ot={PREPARING_RUNTIME:"Initializing",PREPARING_METRICS_SERVER:"Initializing",PREPARING_INGRESS_NGINX:"Initializing",DEPLOYING:"Deploying",INSTALL:"Installing",IN_PROGRESS:"In Progress",PENDING:"Pending",START:"Starting",STARTING:"Starting",RESTART:"Restarting",RESTARTING:"Restarting",RUN:"Running",RUNNING:"Running",SUCCESS:"Running",COMPLETED:"Completed",STOP:"Stopped",STOPPED:"Stopped",UNINSTALL:"Uninstalling",UNINSTALLED:"Uninstalled",NOT_FOUND:"Not Found",UNKNOWN:"Unknown",IMAGE_PULL_ERROR:"Image Pull Error",FAILED:"Failed",ERROR:"Error"},$t=new Set(["PREPARING_RUNTIME","PREPARING_METRICS_SERVER","PREPARING_INGRESS_NGINX","DEPLOYING","IN_PROGRESS","INSTALL","START","STARTING","RESTART","RESTARTING"]),Ft=new Set(["RUN","RUNNING","SUCCESS","COMPLETED"]),Bt=new Set(["NOT_FOUND","PENDING","UNKNOWN"]),zt=new Set(["STOP","STOPPED","UNINSTALL","UNINSTALLED"]),Yt=new Set(["FAILED","ERROR","IMAGE_PULL_ERROR"]),Vt=new Set(["PREPARING_RUNTIME","PREPARING_METRICS_SERVER","PREPARING_INGRESS_NGINX","DEPLOYING","IN_PROGRESS","INSTALL","START","STARTING","RESTART","RESTARTING","UNINSTALL","UNINSTALLED","FAILED"]),Ht=new Set(["PREPARING_RUNTIME","PREPARING_METRICS_SERVER","PREPARING_INGRESS_NGINX","DEPLOYING","INSTALL","IN_PROGRESS","PENDING","START","STARTING","RESTART","RESTARTING","RUN","RUNNING","SUCCESS"]),M=g=>String(g||"").trim().toUpperCase(),Kt=g=>{const p=M(g);return p&&(Ot[p]||g)||"-"},Wt=g=>{const p=M(g);return Ft.has(p)?"badge bg-success":$t.has(p)?"badge bg-primary":Bt.has(p)?"badge bg-warning":zt.has(p)?"badge bg-secondary":Yt.has(p)?"badge bg-danger":"badge bg-secondary"},Gs=g=>Vt.has(M(g)),Xt=(g,p)=>g===!0?{label:"Healthy",className:"text-success"}:g===!1?{label:"Unhealthy",className:"text-danger"}:Ht.has(M(p))?{label:"Checking",className:"text-warning"}:{label:"Unknown",className:"text-muted"},jt=["id"],qt={class:"modal-dialog modal-xl modal-dialog-centered",role:"document"},Zt={class:"modal-content"},Jt={class:"modal-body",style:{"max-height":"80vh","overflow-y":"auto"}},Qt={key:0,class:"text-center"},te={key:1},ee={class:"mb-4"},se={class:"row"},ae={class:"col-md-2 text-center"},le=["src","alt"],ne={key:1,class:"application-detail-logo-fallback d-inline-flex align-items-center justify-content-center"},oe={class:"col-md-10"},re={class:"text-muted"},ie={class:"row"},ue={class:"col-md-3"},de={class:"col-md-3"},ce={class:"col-md-3"},me={class:"col-md-3"},ve={class:"mb-4"},ge={key:0,class:"text-muted small mb-2"},pe={class:"row"},be={class:"col-md-3"},Ne={class:"card text-center"},ye={class:"card-body"},Se={class:"card-title"},he={class:"col-md-3"},Ee={class:"card text-center"},Ae={class:"card-body"},_e={class:"card-title"},Re={class:"col-md-3"},Ie={class:"card text-center"},Te={class:"card-body"},fe={class:"card-title"},Pe={class:"col-md-3"},De={class:"card text-center"},Ce={class:"card-body"},Ue={class:"card-title"},Le={class:"mb-4"},Me={class:"d-flex justify-content-between align-items-center mb-2"},xe={class:"text-muted small"},we={class:"btn-list"},ke=["disabled"],Ge={key:0,class:"text-center text-muted py-3"},Oe={key:1,class:"border rounded p-3"},$e={key:0,class:"alert alert-light border text-muted py-2 mb-3"},Fe={class:"d-flex justify-content-between flex-wrap gap-2 mb-3"},Be={class:"badge bg-secondary"},ze={class:"badge bg-info"},Ye={class:"table-responsive mb-3"},Ve={class:"table table-sm mb-0"},He={key:1,class:"row g-2 mb-3"},Ke={class:"col-md-3"},We={class:"col-md-3"},Xe={class:"col-md-3"},je={class:"col-md-3"},qe={class:"mb-3"},Ze={class:"mb-3"},Je={key:2,class:"mb-3"},Qe={class:"policy-evidence-list mb-0"},ts={key:2,class:"text-muted border rounded p-3"},es={class:"mb-4"},ss={class:"table-responsive"},as={class:"table table-sm"},ls={key:0},ns={class:"mb-4"},os={class:"table-responsive"},rs={class:"table table-sm"},is={key:1},us={class:"mb-4"},ds={class:"mb-3"},cs={class:"table-responsive"},ms={class:"table table-sm"},vs={class:"mb-3"},gs={class:"table-responsive"},ps={class:"table table-sm"},bs={class:"mb-3"},Ns={class:"table-responsive"},ys={class:"table table-sm"},Ss={key:0,class:"mb-3"},hs={class:"table-responsive"},Es={class:"table table-sm"},As={key:1,class:"mb-3"},_s={class:"table-responsive"},Rs={class:"table table-sm"},Is={key:0,class:"mb-4"},Ts={class:"table-responsive"},fs={class:"table table-sm"},Ps={key:2,class:"text-center text-muted"},Ds=Pt({__name:"applicationDetailModal",props:{deploymentId:{},modalId:{default:"application-detail-modal"}},emits:["close"],setup(g,{expose:p,emit:ot}){const B=g,rt=ot,T=Dt(),f=h(!1),S=h(!1),l=h(null),m=h(null),A=h([]),d=h(null),P=h(!1),z=[7,30,90],N=h(0);let b=0;const it={"apache tomcat":"/catalog-icons/apache-tomcat.png",redis:"/catalog-icons/redis.svg",nginx:"/catalog-icons/nginx.svg","apache http server":"/catalog-icons/apache-http-server.svg","nexus repository":"/catalog-icons/nexus-repository.svg",mariadb:"/catalog-icons/mariadb.svg",grafana:"/catalog-icons/grafana.svg",prometheus:"/catalog-icons/prometheus.svg",elasticsearch:"/catalog-icons/elasticsearch.svg"},ut=s=>String(s||"").trim().toLowerCase(),dt=s=>it[ut(s)]||"",Y=y(()=>{const s=l.value;return s?Lt(dt(s.catalogName)||s.logoUrlLarge||s.logoUrlSmall||""):""});p({refreshData:s=>{const e=++b;N.value=s,l.value=null,m.value=null,A.value=[],d.value=null,N.value&&(ct(s,e),V(s,e))},resetData:()=>{b+=1,N.value=0,l.value=null,m.value=null,A.value=[],d.value=null,P.value=!1,f.value=!1,S.value=!1,$()}});const ct=async(s,e)=>{if(s){f.value=!0;try{P.value=!1;const{data:a}=await Mt(s);e===b&&s===N.value&&a&&(l.value=a.integratedInfo)}catch(a){if(e!==b)return;console.error("Failed to load application detail:",a),T.error("Failed to load application detail")}finally{e===b&&(f.value=!1)}}},V=async(s,e)=>{if(s){S.value=!0;try{const a=await lt(s);if(e!==b||s!==N.value)return;m.value=a.data||null;const i=await Promise.all(z.map(async v=>{try{return(await lt(s,v)).data||null}catch{return null}}));if(e!==b||s!==N.value)return;A.value=i.filter(Boolean);const u=await xt(s);if(e!==b||s!==N.value)return;d.value=u.data||null}catch(a){if(e!==b)return;console.error("Failed to load policy recommendation:",a),m.value=null,A.value=[],d.value=null}finally{e===b&&(S.value=!1)}}},I=s=>{if(!s)return null;const e=new Date(String(s).replace(" ","T"));return Number.isNaN(e.getTime())?null:e},mt=s=>{const e=s instanceof Date?s:I(s);if(!e)return"-";const a=i=>String(i).padStart(2,"0");return`${e.getFullYear()}-${a(e.getMonth()+1)}-${a(e.getDate())} ${a(e.getHours())}:${a(e.getMinutes())}:${a(e.getSeconds())}`},x=s=>String(s||"").trim().toUpperCase(),vt=new Set(["RUN","RUNNING","SUCCESS"]),gt=new Set(["UNINSTALL","UNINSTALLED","NOT_FOUND","STOP","STOPPED","FAILED","ERROR"]),w=y(()=>{var s,e,a;return x(((s=l.value)==null?void 0:s.applicationStatus)||((e=l.value)==null?void 0:e.podStatus)||((a=l.value)==null?void 0:a.status))}),H=y(()=>{var s;return Xt((s=l.value)==null?void 0:s.healthCheck,w.value)}),pt=y(()=>{var a,i;const s=I((a=l.value)==null?void 0:a.executedAt);return(Array.isArray((i=l.value)==null?void 0:i.operationHistories)?l.value.operationHistories:[]).some(u=>{if(x(u==null?void 0:u.operationType)!=="UNINSTALL")return!1;const v=I((u==null?void 0:u.executedAt)||(u==null?void 0:u.createdAt));return!s||!v?!0:v.getTime()>=s.getTime()})}),D=y(()=>pt.value||gt.has(w.value)?!1:vt.has(w.value)),k=y(()=>D.value),bt=y(()=>{var v;const s=I((v=l.value)==null?void 0:v.executedAt);if(!s)return 0;const e=new Date,a=new Date(s.getFullYear(),s.getMonth(),s.getDate()),u=new Date(e.getFullYear(),e.getMonth(),e.getDate()).getTime()-a.getTime();return Math.max(Math.floor(u/(1e3*60*60*24)),0)}),Nt=y(()=>{const s=new Map;return A.value.forEach(e=>{const a=Z(e);typeof a=="number"&&s.set(a,e)}),s}),yt=y(()=>z.map(s=>{const e=Nt.value.get(s)||null,a=bt.value>=s,i=(e==null?void 0:e.dataStatus)||(a?"PENDING_ANALYSIS":"ACCUMULATING");return{period:s,profile:e,eligible:a,dataStatus:i,dimmed:!a||["INSUFFICIENT_DATA","PENDING_ANALYSIS","ACCUMULATING"].includes(i)}})),St=y(()=>{var e,a,i;const s=[(e=d.value)==null?void 0:e.updatedAt,(a=d.value)==null?void 0:a.createdAt,(i=m.value)==null?void 0:i.createdAt,...A.value.map(u=>u==null?void 0:u.createdAt)].map(I).filter(u=>!!u).sort((u,v)=>v.getTime()-u.getTime());return s.length?mt(s[0]):"분석 이력 없음"}),ht=async()=>{if(N.value){if(!k.value){T.info("현재 실행 중인 배포만 정책 추천을 분석할 수 있습니다.");return}S.value=!0;try{await wt(N.value),await V(N.value,b),T.success("Policy recommendation analyzed")}catch(s){console.error("Failed to analyze policy recommendation:",s),T.error("Failed to analyze policy recommendation")}finally{S.value=!1}}},C=s=>Wt(s),U=s=>Kt(s),Et=s=>{switch(s==null?void 0:s.toLowerCase()){case"critical":return"badge bg-danger";case"warning":return"badge bg-warning";case"error":return"badge bg-danger";default:return"badge bg-info"}},At=s=>{switch(s==null?void 0:s.toLowerCase()){case"info":return"badge bg-info";case"warning":return"badge bg-warning";case"error":return"badge bg-danger";case"debug":return"badge bg-secondary";default:return"badge bg-primary"}},_t=s=>{switch(s){case"CPU_INTENSIVE":return"badge bg-primary";case"MEMORY_INTENSIVE":return"badge bg-purple";case"CPU_MEMORY_INTENSIVE":return"badge bg-warning";case"GENERAL_PURPOSE":return"badge bg-success";default:return"badge bg-secondary"}},G=s=>{switch(s){case"CPU_INTENSIVE":return"CPU 중심";case"MEMORY_INTENSIVE":return"Memory 중심";case"CPU_MEMORY_INTENSIVE":return"CPU/Memory 복합";case"GENERAL_PURPOSE":return"현행/범용";default:return s||"N/A"}},K=s=>{switch(x(s)){case"UNDER_PROVISIONED":return"용량 부족";case"OVER_PROVISIONED":return"사용률 낮음";case"RIGHT_SIZED":return"적정";default:return s||"N/A"}},W=s=>{switch(s){case"SUFFICIENT":return"badge bg-success";case"PARTIAL_DATA":return"badge bg-warning";case"INSUFFICIENT_DATA":case"ACCUMULATING":case"PENDING_ANALYSIS":return"badge bg-secondary";default:return"badge bg-secondary"}},X=s=>{switch(s){case"SUFFICIENT":return"충분";case"PARTIAL_DATA":return"부분 데이터";case"INSUFFICIENT_DATA":case"ACCUMULATING":return"데이터 축적 중";case"PENDING_ANALYSIS":return"분석 대기";default:return s||"N/A"}},Rt=s=>s?s.split(",").map(e=>e.trim()).filter(Boolean):["NO_ACTION"],It=s=>{switch(s){case"INCREASE_CPU":return"CPU 정책 검토";case"INCREASE_MEMORY":return"Memory 정책 검토";case"REVIEW_CPU_MEMORY_POLICY":return"CPU/Memory 복합 검토";case"CHANGE_RESOURCE_TYPE":return"운영 유형 검토";case"DOWNSIZE":return"현행/하향 검토";case"INVESTIGATE_STABILITY":return"안정성 점검";case"NO_ACTION":return"현행 유지";default:return s}},j=s=>{if(s==null)return"N/A";const e=Math.round(s*100);return e>=80?`높음 ${e}%`:e>=60?`보통 ${e}%`:e>=40?`낮음 ${e}%`:`판단 보류 ${e}%`},q=s=>{if(!s)return[];try{const e=JSON.parse(s);return Array.isArray(e)?e:[]}catch{return s.split(",").map(e=>e.trim()).filter(Boolean)}},Tt=s=>{const e=s.match(/^validDays=(\d+) is below (\d+)$/);if(e)return`유효 분석일이 ${e[1]}일로 최소 기준 ${e[2]}일에 미달합니다.`;const a=s.match(/^cpuPressureP95=([\d.]+)$/);if(a)return`CPU p95 사용률이 ${a[1]}%입니다.`;const i=s.match(/^memoryPressureP95=([\d.]+)$/);if(i)return`Memory p95 사용률이 ${i[1]}%입니다.`;const u=s.match(/^oomCount=(\d+)$/);if(u)return`OOM 이벤트가 ${u[1]}건 발생했습니다.`;const v=s.match(/^restartCount=(\d+), crashLoopCount=(\d+)$/);if(v)return`재시작 이벤트 ${v[1]}건, CrashLoop 이벤트 ${v[2]}건이 확인되었습니다.`;const L=s.match(/^networkEvidence=maxInBytes=(\d+), maxOutBytes=(\d+)$/);if(L)return`네트워크 최대 수신 ${O(Number(L[1]))}, 최대 송신 ${O(Number(L[2]))}가 확인되었습니다.`;const et=s.match(/^errorLogCount=(\d+)$/);if(et)return`ERROR 로그가 ${et[1]}건 확인되었습니다.`;const st=s.match(/^oomRelatedLogCount=(\d+)$/);if(st)return`OOM 관련 로그가 ${st[1]}건 확인되었습니다.`;const at=s.match(/^networkOrTimeoutLogCount=(\d+)$/);return at?`네트워크 또는 timeout 관련 로그가 ${at[1]}건 확인되었습니다.`:s==="cpuPressureP95 and memoryPressureP95 are below 40"?"CPU와 Memory p95 사용률이 모두 40% 미만입니다.":s==="CPU/Memory pressure is within right-sized range"?"CPU와 Memory 사용률이 적정 범위입니다.":s==="K8s percentage metrics require request/limit normalization; confidence capped at 0.60"?"K8s 백분율 지표는 request/limit 기준 정규화가 필요하여 신뢰도가 60%로 제한됩니다.":s},Z=s=>{if(!(s!=null&&s.analysisStartDate)||!(s!=null&&s.analysisEndDate))return"-";const e=new Date(s.analysisStartDate),a=new Date(s.analysisEndDate);return Math.round((a.getTime()-e.getTime())/(1e3*60*60*24))+1},ft=(s,e)=>{const a=Z(s);if(typeof a=="number")return a;const i=(s==null?void 0:s.validDays)??0,u=(s==null?void 0:s.missingDays)??0;return i+u||e||0},J=(s,e)=>{const a=(s==null?void 0:s.validDays)??0,i=ft(s,e);return i?`${a}일 확보 / ${i}일 기준`:`${a}일 확보`},Q=s=>!D.value||s===null||s===void 0?"-":`${s}%`,tt=s=>D.value?O(s):"-",O=s=>{if(s===0)return"0 Bytes";if(!s)return"N/A";const e=1024,a=["Bytes","KB","MB","GB","TB"],i=Math.floor(Math.log(s)/Math.log(e));return parseFloat((s/Math.pow(e,i)).toFixed(2))+" "+a[i]},$=()=>{const s=document.getElementById(B.modalId);if(s)try{if(window.bootstrap&&window.bootstrap.Modal){const e=window.bootstrap.Modal.getInstance(s);e?e.hide():new window.bootstrap.Modal(s).hide()}else s.style.display="none",s.classList.remove("show"),s.setAttribute("aria-hidden","true"),s.removeAttribute("aria-modal"),document.body.classList.remove("modal-open"),document.querySelectorAll(".modal-backdrop").forEach(a=>a.remove()),document.body.style.overflow="",document.body.style.paddingRight=""}catch(e){console.error("Error closing modal:",e),s.style.display="none",s.classList.remove("show"),document.body.classList.remove("modal-open"),document.querySelectorAll(".modal-backdrop").forEach(i=>i.remove())}l.value=null,m.value=null,A.value=[],d.value=null,rt("close")};return(s,e)=>(r(),o("div",{class:"modal modal-blur fade",id:B.modalId,tabindex:"-1",role:"dialog","aria-hidden":"true"},[t("div",qt,[t("div",Zt,[t("div",{class:"modal-header"},[e[1]||(e[1]=t("h5",{class:"modal-title"},"Application Detail",-1)),t("button",{type:"button",class:"btn-close","data-bs-dismiss":"modal","aria-label":"Close",onClick:$})]),t("div",Jt,[f.value?(r(),o("div",Qt,e[2]||(e[2]=[t("div",{class:"spinner-border",role:"status"},[t("span",{class:"visually-hidden"},"Loading...")],-1)]))):l.value?(r(),o("div",te,[t("div",ee,[e[7]||(e[7]=t("h6",{class:"text-primary"},"Application Overview",-1)),t("div",se,[t("div",ae,[Y.value&&!P.value?(r(),o("img",{key:0,src:Y.value,alt:l.value.catalogName,class:"img-fluid application-detail-logo",onError:e[0]||(e[0]=a=>P.value=!0)},null,40,le)):(r(),o("div",ne,[Ct(Ut(Gt),{class:"icon",size:"32","stroke-width":"1.75"})]))]),t("div",oe,[t("h5",null,n(l.value.catalogName),1),t("p",re,n(l.value.catalogDescription),1),t("div",ie,[t("div",ue,[e[3]||(e[3]=t("strong",null,"Category:",-1)),F(" "+n(l.value.catalogCategory),1)]),t("div",de,[e[4]||(e[4]=t("strong",null,"Default Port:",-1)),F(" "+n(l.value.defaultPort),1)]),t("div",ce,[e[5]||(e[5]=t("strong",{class:"me-2"},"Status:",-1)),t("span",{class:c(C(l.value.applicationStatus))},n(U(l.value.applicationStatus)),3)]),t("div",me,[e[6]||(e[6]=t("strong",{class:"me-2"},"Health Check:",-1)),t("span",{class:c(H.value.className)},n(H.value.label),3)])])])])]),t("div",ve,[e[12]||(e[12]=t("h6",{class:"text-primary"},"성능 지표",-1)),D.value?E("",!0):(r(),o("div",ge," 현재 실행 중인 상태가 아니므로 최신 성능 지표를 표시하지 않습니다. ")),t("div",pe,[t("div",be,[t("div",Ne,[t("div",ye,[t("h5",Se,n(Q(l.value.cpuUsage)),1),e[8]||(e[8]=t("p",{class:"card-text"},"CPU 사용률",-1))])])]),t("div",he,[t("div",Ee,[t("div",Ae,[t("h5",_e,n(Q(l.value.memoryUsage)),1),e[9]||(e[9]=t("p",{class:"card-text"},"Memory 사용률",-1))])])]),t("div",Re,[t("div",Ie,[t("div",Te,[t("h5",fe,n(tt(l.value.networkIn)),1),e[10]||(e[10]=t("p",{class:"card-text"},"네트워크 수신",-1))])])]),t("div",Pe,[t("div",De,[t("div",Ce,[t("h5",Ue,n(tt(l.value.networkOut)),1),e[11]||(e[11]=t("p",{class:"card-text"},"네트워크 송신",-1))])])])])]),t("div",Le,[t("div",Me,[t("div",null,[e[13]||(e[13]=t("h6",{class:"text-primary mb-0"},"정책 추천",-1)),t("div",xe,"최근 분석 시각: "+n(St.value),1)]),t("div",we,[t("button",{type:"button",class:"btn btn-outline-primary",disabled:S.value||!l.value.deploymentId||!k.value,onClick:ht},n(S.value?"Analyzing...":"Analyze"),9,ke)])]),S.value?(r(),o("div",Ge,e[14]||(e[14]=[t("div",{class:"spinner-border spinner-border-sm me-2",role:"status"},null,-1),F(" 정책 추천 정보를 불러오는 중입니다. ")]))):d.value?(r(),o("div",Oe,[k.value?E("",!0):(r(),o("div",$e," 운영 종료 또는 미확인 상태의 배포는 정책 추천 분석을 실행하지 않습니다. 아래 내용은 마지막으로 저장된 분석 결과입니다. ")),t("div",Fe,[t("div",null,[e[15]||(e[15]=t("div",{class:"text-muted small"},"현재 설정 유형",-1)),t("span",Be,n(G(d.value.selectedResourceType)),1)]),t("div",null,[e[16]||(e[16]=t("div",{class:"text-muted small"},"추천 운영 유형",-1)),t("span",{class:c(_t(d.value.recommendedResourceType))},n(G(d.value.recommendedResourceType)),3)]),t("div",null,[e[17]||(e[17]=t("div",{class:"text-muted small"},"정책 차이",-1)),t("span",{class:c(d.value.mismatch?"badge bg-warning":"badge bg-success")},n(d.value.mismatch?"검토 필요":"일치"),3)]),t("div",null,[e[18]||(e[18]=t("div",{class:"text-muted small"},"분석 신뢰도",-1)),t("span",ze,n(j(d.value.confidence)),1)])]),t("div",Ye,[t("table",Ve,[e[19]||(e[19]=t("thead",null,[t("tr",null,[t("th",null,"분석 기간"),t("th",null,"추천 유형"),t("th",null,"데이터 상태"),t("th",null,"신뢰도"),t("th",null,"분석 데이터")])],-1)),t("tbody",null,[(r(!0),o(_,null,R(yt.value,a=>(r(),o("tr",{key:a.period,class:c({"policy-period-muted":a.dimmed})},[t("td",null,n(a.period)+"d",1),t("td",null,n(a.profile?G(a.profile.recommendedResourceType):"-"),1),t("td",null,[t("span",{class:c(W(a.dataStatus))},n(X(a.dataStatus)),3)]),t("td",null,n(a.profile?j(a.profile.confidence):"-"),1),t("td",null,n(J(a.profile,a.period)),1)],2))),128))])])]),m.value?(r(),o("div",He,[t("div",Ke,[e[20]||(e[20]=t("div",{class:"text-muted small"},"데이터 상태",-1)),t("span",{class:c(W(m.value.dataStatus))},n(X(m.value.dataStatus)),3)]),t("div",We,[e[21]||(e[21]=t("div",{class:"text-muted small"},"CPU 상태",-1)),t("span",null,n(K(m.value.cpuSizingStatus)),1)]),t("div",Xe,[e[22]||(e[22]=t("div",{class:"text-muted small"},"Memory 상태",-1)),t("span",null,n(K(m.value.memorySizingStatus)),1)]),t("div",je,[e[23]||(e[23]=t("div",{class:"text-muted small"},"분석 데이터",-1)),t("span",null,n(J(m.value)),1)])])):E("",!0),t("div",qe,[e[24]||(e[24]=t("div",{class:"text-muted small"},"검토 항목",-1)),(r(!0),o(_,null,R(Rt(d.value.actions),a=>(r(),o("span",{key:a,class:"badge bg-light text-dark me-1"},n(It(a)),1))),128))]),t("p",Ze,n(d.value.message),1),m.value&&q(m.value.reasons).length?(r(),o("div",Je,[e[25]||(e[25]=t("div",{class:"text-muted small"},"분석 근거",-1)),t("ul",Qe,[(r(!0),o(_,null,R(q(m.value.reasons),a=>(r(),o("li",{key:a},n(Tt(a)),1))),128))])])):E("",!0)])):(r(),o("div",ts," 정책 추천 정보가 없습니다. "))]),t("div",es,[e[28]||(e[28]=t("h6",{class:"text-primary"},"Action History",-1)),t("div",ss,[t("table",as,[e[27]||(e[27]=t("thead",null,[t("tr",null,[t("th",null,"Action"),t("th",null,"Timestamp"),t("th",null,"User"),t("th",null,"Status"),t("th",null,"Description")])],-1)),t("tbody",null,[l.value.operationHistories.length===0?(r(),o("tr",ls,e[26]||(e[26]=[t("td",{colspan:"5",class:"text-center text-muted"},"No action history available",-1)]))):E("",!0),(r(!0),o(_,null,R(l.value.operationHistories,a=>(r(),o("tr",{key:a.id},[t("td",null,n(a.operationType),1),t("td",null,n(a.executedAt),1),t("td",null,n(a.executedBy||"system"),1),t("td",null,[t("span",{class:c(C(a.status))},n(U(a.status)),3)]),t("td",null,n(a.detailReason||a.reason),1)]))),128))])])])]),t("div",ns,[e[31]||(e[31]=t("h6",{class:"text-primary"},"Error Logs",-1)),t("div",os,[t("table",rs,[e[30]||(e[30]=t("thead",null,[t("tr",null,[t("th",null,"Timestamp"),t("th",null,"Error Code"),t("th",null,"Severity"),t("th",null,"Module"),t("th",null,"Description")])],-1)),t("tbody",null,[l.value.errorLogs.length>0?(r(!0),o(_,{key:0},R(l.value.errorLogs,a=>(r(),o("tr",{key:a.errorCode},[t("td",null,n(a.loggedAt),1),t("td",null,n(a.errorCode),1),t("td",null,[t("span",{class:c(Et(a.severity))},n(a.severity),3)]),t("td",null,n(a.module),1),t("td",null,n(a.logMessage),1)]))),128)):(r(),o("tr",is,e[29]||(e[29]=[t("td",{colspan:"5",class:"text-center text-muted"},"No error logs available",-1)])))])])])]),t("div",us,[e[42]||(e[42]=t("h6",{class:"text-primary"},"Deployment History",-1)),t("div",ds,[e[33]||(e[33]=t("h6",null,"Basic Deployment Information",-1)),t("div",cs,[t("table",ms,[e[32]||(e[32]=t("thead",null,[t("tr",null,[t("th",null,"ID"),t("th",null,"Action Type"),t("th",null,"Executed At"),t("th",null,"Executed By"),t("th",null,"Status")])],-1)),t("tbody",null,[t("tr",null,[t("td",null,n(l.value.deploymentId),1),t("td",null,n(l.value.actionType),1),t("td",null,n(l.value.executedAt),1),t("td",null,n(l.value.executedBy||"system"),1),t("td",null,[t("span",{class:c(C(l.value.status))},n(U(l.value.status)),3)])])])])])]),t("div",vs,[e[35]||(e[35]=t("h6",null,"Cloud & Cluster Information",-1)),t("div",gs,[t("table",ps,[e[34]||(e[34]=t("thead",null,[t("tr",null,[t("th",null,"Cloud Provider"),t("th",null,"Cloud Region"),t("th",null,"Cluster Name"),t("th",null,"Deployment Type"),t("th",null,"MCI ID"),t("th",null,"UID")])],-1)),t("tbody",null,[t("tr",null,[t("td",null,n(l.value.cloudProvider),1),t("td",null,n(l.value.cloudRegion),1),t("td",null,n(l.value.clusterName||"N/A"),1),t("td",null,n(l.value.deploymentType),1),t("td",null,n(l.value.mciId),1),t("td",null,n(l.value.vmId),1)])])])])]),t("div",bs,[e[37]||(e[37]=t("h6",null,"Network & Service Information",-1)),t("div",Ns,[t("table",ys,[e[36]||(e[36]=t("thead",null,[t("tr",null,[t("th",null,"Namespace"),t("th",null,"Pod Status"),t("th",null,"Public IP"),t("th",null,"Service Port"),t("th",null,"VM ID"),t("th",null,"Catalog ID")])],-1)),t("tbody",null,[t("tr",null,[t("td",null,n(l.value.namespace),1),t("td",null,[t("span",{class:c(C(l.value.podStatus||l.value.applicationStatus))},n(U(l.value.podStatus||l.value.applicationStatus)),3)]),t("td",null,n(l.value.publicIp),1),t("td",null,n(l.value.servicePort||l.value.defaultPort),1),t("td",null,n(l.value.vmId),1),t("td",null,n(l.value.catalogName),1)])])])])]),l.value.deploymentType==="K8S"?(r(),o("div",Ss,[e[39]||(e[39]=t("h6",null,"Deployment Options",-1)),t("div",hs,[t("table",Es,[e[38]||(e[38]=t("thead",null,[t("tr",null,[t("th",null,"Resource Type"),t("th",null,"HPA"),t("th",null,"Rebalancing"),t("th",null,"Min Replicas"),t("th",null,"Max Replicas"),t("th",null,"CPU Threshold"),t("th",null,"Memory Threshold")])],-1)),t("tbody",null,[t("tr",null,[t("td",null,n(l.value.resourceType||"N/A"),1),t("td",null,[t("span",{class:c(l.value.hpaEnabled?"text-success":"text-muted")},n(l.value.hpaEnabled?"Enabled":"Disabled"),3)]),t("td",null,[t("span",{class:c(l.value.workloadRebalancingEnabled?"text-success":"text-muted")},n(l.value.workloadRebalancingEnabled?"Enabled":"Disabled"),3)]),t("td",null,n(l.value.minReplicas||"N/A"),1),t("td",null,n(l.value.maxReplicas||"N/A"),1),t("td",null,n(l.value.cpuThreshold?`${l.value.cpuThreshold}%`:"N/A"),1),t("td",null,n(l.value.memoryThreshold?`${l.value.memoryThreshold}%`:"N/A"),1)])])])])])):E("",!0),l.value.ingressEnabled?(r(),o("div",As,[e[41]||(e[41]=t("h6",null,"Ingress Information",-1)),t("div",_s,[t("table",Rs,[e[40]||(e[40]=t("thead",null,[t("tr",null,[t("th",null,"Enabled"),t("th",null,"Host"),t("th",null,"Path"),t("th",null,"Class"),t("th",null,"TLS Enabled"),t("th",null,"TLS Secret")])],-1)),t("tbody",null,[t("tr",null,[t("td",null,[t("span",{class:c(l.value.ingressEnabled?"text-success":"text-danger")},n(l.value.ingressEnabled?"Yes":"No"),3)]),t("td",null,n(l.value.ingressHost||"N/A"),1),t("td",null,n(l.value.ingressPath||"N/A"),1),t("td",null,n(l.value.ingressClass||"N/A"),1),t("td",null,[t("span",{class:c(l.value.ingressTlsEnabled?"text-success":"text-danger")},n(l.value.ingressTlsEnabled?"Yes":"No"),3)]),t("td",null,n(l.value.ingressTlsSecret||"N/A"),1)])])])])])):E("",!0)]),l.value.deploymentLogs&&l.value.deploymentLogs.length>0?(r(),o("div",Is,[e[44]||(e[44]=t("h6",{class:"text-primary"},"Deployment Logs",-1)),t("div",Ts,[t("table",fs,[e[43]||(e[43]=t("thead",null,[t("tr",null,[t("th",null,"Timestamp"),t("th",null,"Type"),t("th",null,"Message")])],-1)),t("tbody",null,[(r(!0),o(_,null,R(l.value.deploymentLogs,a=>(r(),o("tr",{key:a.id},[t("td",null,n(a.loggedAt),1),t("td",null,[t("span",{class:c(["me-4 mt-2",At(a.logType)])},n(a.logType),3)]),t("td",null,n(a.logMessage),1)]))),128))])])])])):E("",!0)])):(r(),o("div",Ps," No data available "))]),t("div",{class:"modal-footer"},[t("button",{type:"button",class:"btn btn-secondary","data-bs-dismiss":"modal",onClick:$},"Close")])])])],8,jt))}}),Os=kt(Ds,[["__scopeId","data-v-fc9d6a1a"]]);export{Os as A,Gt as I,ks as a,Wt as b,Kt as g,Gs as i}; diff --git a/src/main/resources/static/assets/applicationDetailModal-D8U6ml02.js b/src/main/resources/static/assets/applicationDetailModal-D8U6ml02.js new file mode 100644 index 00000000..5d1135fa --- /dev/null +++ b/src/main/resources/static/assets/applicationDetailModal-D8U6ml02.js @@ -0,0 +1,11 @@ +import{c as nt}from"./createVueComponent-l3sgX4hZ.js";import{d as Pt,f as Dt,r as h,g as y,c as o,a as t,b as Ct,u as Ut,t as n,e as F,n as c,m as E,F as _,k as R,o as r,D as Lt}from"./index-DKle5_5b.js";import{q as Mt,t as lt,v as xt,w as wt}from"./softwareCatalog-DbmZz9hR.js";import{_ as kt}from"./_plugin-vue_export-helper-DlAUqK2U.js";/** + * @license @tabler/icons-vue v3.22.0 - MIT + * + * This source code is licensed under the MIT license. + * See the LICENSE file in the root directory of this source tree. + */var Gt=nt("outline","package","IconPackage",[["path",{d:"M12 3l8 4.5l0 9l-8 4.5l-8 -4.5l0 -9l8 -4.5",key:"svg-0"}],["path",{d:"M12 12l8 -4.5",key:"svg-1"}],["path",{d:"M12 12l0 9",key:"svg-2"}],["path",{d:"M12 12l-8 -4.5",key:"svg-3"}],["path",{d:"M16 5.25l-8 4.5",key:"svg-4"}]]);/** + * @license @tabler/icons-vue v3.22.0 - MIT + * + * This source code is licensed under the MIT license. + * See the LICENSE file in the root directory of this source tree. + */var ks=nt("outline","refresh","IconRefresh",[["path",{d:"M20 11a8.1 8.1 0 0 0 -15.5 -2m-.5 -4v4h4",key:"svg-0"}],["path",{d:"M4 13a8.1 8.1 0 0 0 15.5 2m.5 4v-4h-4",key:"svg-1"}]]);const Ot={PREPARING_RUNTIME:"Initializing",PREPARING_METRICS_SERVER:"Initializing",PREPARING_INGRESS_NGINX:"Initializing",DEPLOYING:"Deploying",INSTALL:"Installing",IN_PROGRESS:"In Progress",PENDING:"Pending",START:"Starting",STARTING:"Starting",RESTART:"Restarting",RESTARTING:"Restarting",RUN:"Running",RUNNING:"Running",SUCCESS:"Running",COMPLETED:"Completed",STOP:"Stopped",STOPPED:"Stopped",UNINSTALL:"Uninstalling",UNINSTALLED:"Uninstalled",NOT_FOUND:"Not Found",UNKNOWN:"Unknown",IMAGE_PULL_ERROR:"Image Pull Error",FAILED:"Failed",ERROR:"Error"},$t=new Set(["PREPARING_RUNTIME","PREPARING_METRICS_SERVER","PREPARING_INGRESS_NGINX","DEPLOYING","IN_PROGRESS","INSTALL","START","STARTING","RESTART","RESTARTING"]),Ft=new Set(["RUN","RUNNING","SUCCESS","COMPLETED"]),Bt=new Set(["NOT_FOUND","PENDING","UNKNOWN"]),zt=new Set(["STOP","STOPPED","UNINSTALL","UNINSTALLED"]),Yt=new Set(["FAILED","ERROR","IMAGE_PULL_ERROR"]),Vt=new Set(["PREPARING_RUNTIME","PREPARING_METRICS_SERVER","PREPARING_INGRESS_NGINX","DEPLOYING","IN_PROGRESS","INSTALL","START","STARTING","RESTART","RESTARTING","UNINSTALL","UNINSTALLED","FAILED"]),Ht=new Set(["PREPARING_RUNTIME","PREPARING_METRICS_SERVER","PREPARING_INGRESS_NGINX","DEPLOYING","INSTALL","IN_PROGRESS","PENDING","START","STARTING","RESTART","RESTARTING","RUN","RUNNING","SUCCESS"]),M=g=>String(g||"").trim().toUpperCase(),Kt=g=>{const p=M(g);return p&&(Ot[p]||g)||"-"},Wt=g=>{const p=M(g);return Ft.has(p)?"badge bg-success":$t.has(p)?"badge bg-primary":Bt.has(p)?"badge bg-warning":zt.has(p)?"badge bg-secondary":Yt.has(p)?"badge bg-danger":"badge bg-secondary"},Gs=g=>Vt.has(M(g)),Xt=(g,p)=>g===!0?{label:"Healthy",className:"text-success"}:g===!1?{label:"Unhealthy",className:"text-danger"}:Ht.has(M(p))?{label:"Checking",className:"text-warning"}:{label:"Unknown",className:"text-muted"},jt=["id"],qt={class:"modal-dialog modal-xl modal-dialog-centered",role:"document"},Zt={class:"modal-content"},Jt={class:"modal-body",style:{"max-height":"80vh","overflow-y":"auto"}},Qt={key:0,class:"text-center"},te={key:1},ee={class:"mb-4"},se={class:"row"},ae={class:"col-md-2 text-center"},le=["src","alt"],ne={key:1,class:"application-detail-logo-fallback d-inline-flex align-items-center justify-content-center"},oe={class:"col-md-10"},re={class:"text-muted"},ie={class:"row"},ue={class:"col-md-3"},de={class:"col-md-3"},ce={class:"col-md-3"},me={class:"col-md-3"},ve={class:"mb-4"},ge={key:0,class:"text-muted small mb-2"},pe={class:"row"},be={class:"col-md-3"},Ne={class:"card text-center"},ye={class:"card-body"},Se={class:"card-title"},he={class:"col-md-3"},Ee={class:"card text-center"},Ae={class:"card-body"},_e={class:"card-title"},Re={class:"col-md-3"},Ie={class:"card text-center"},Te={class:"card-body"},fe={class:"card-title"},Pe={class:"col-md-3"},De={class:"card text-center"},Ce={class:"card-body"},Ue={class:"card-title"},Le={class:"mb-4"},Me={class:"d-flex justify-content-between align-items-center mb-2"},xe={class:"text-muted small"},we={class:"btn-list"},ke=["disabled"],Ge={key:0,class:"text-center text-muted py-3"},Oe={key:1,class:"border rounded p-3"},$e={key:0,class:"alert alert-light border text-muted py-2 mb-3"},Fe={class:"d-flex justify-content-between flex-wrap gap-2 mb-3"},Be={class:"badge bg-secondary"},ze={class:"badge bg-info"},Ye={class:"table-responsive mb-3"},Ve={class:"table table-sm mb-0"},He={key:1,class:"row g-2 mb-3"},Ke={class:"col-md-3"},We={class:"col-md-3"},Xe={class:"col-md-3"},je={class:"col-md-3"},qe={class:"mb-3"},Ze={class:"mb-3"},Je={key:2,class:"mb-3"},Qe={class:"policy-evidence-list mb-0"},ts={key:2,class:"text-muted border rounded p-3"},es={class:"mb-4"},ss={class:"table-responsive"},as={class:"table table-sm"},ls={key:0},ns={class:"mb-4"},os={class:"table-responsive"},rs={class:"table table-sm"},is={key:1},us={class:"mb-4"},ds={class:"mb-3"},cs={class:"table-responsive"},ms={class:"table table-sm"},vs={class:"mb-3"},gs={class:"table-responsive"},ps={class:"table table-sm"},bs={class:"mb-3"},Ns={class:"table-responsive"},ys={class:"table table-sm"},Ss={key:0,class:"mb-3"},hs={class:"table-responsive"},Es={class:"table table-sm"},As={key:1,class:"mb-3"},_s={class:"table-responsive"},Rs={class:"table table-sm"},Is={key:0,class:"mb-4"},Ts={class:"table-responsive"},fs={class:"table table-sm"},Ps={key:2,class:"text-center text-muted"},Ds=Pt({__name:"applicationDetailModal",props:{deploymentId:{},modalId:{default:"application-detail-modal"}},emits:["close"],setup(g,{expose:p,emit:ot}){const B=g,rt=ot,T=Dt(),f=h(!1),S=h(!1),l=h(null),m=h(null),A=h([]),d=h(null),P=h(!1),z=[7,30,90],N=h(0);let b=0;const it={"apache tomcat":"/catalog-icons/apache-tomcat.png",redis:"/catalog-icons/redis.svg",nginx:"/catalog-icons/nginx.svg","apache http server":"/catalog-icons/apache-http-server.svg","nexus repository":"/catalog-icons/nexus-repository.svg",mariadb:"/catalog-icons/mariadb.svg",grafana:"/catalog-icons/grafana.svg",prometheus:"/catalog-icons/prometheus.svg",elasticsearch:"/catalog-icons/elasticsearch.svg"},ut=s=>String(s||"").trim().toLowerCase(),dt=s=>it[ut(s)]||"",Y=y(()=>{const s=l.value;return s?Lt(dt(s.catalogName)||s.logoUrlLarge||s.logoUrlSmall||""):""});p({refreshData:s=>{const e=++b;N.value=s,l.value=null,m.value=null,A.value=[],d.value=null,N.value&&(ct(s,e),V(s,e))},resetData:()=>{b+=1,N.value=0,l.value=null,m.value=null,A.value=[],d.value=null,P.value=!1,f.value=!1,S.value=!1,$()}});const ct=async(s,e)=>{if(s){f.value=!0;try{P.value=!1;const{data:a}=await Mt(s);e===b&&s===N.value&&a&&(l.value=a.integratedInfo)}catch(a){if(e!==b)return;console.error("Failed to load application detail:",a),T.error("Failed to load application detail")}finally{e===b&&(f.value=!1)}}},V=async(s,e)=>{if(s){S.value=!0;try{const a=await lt(s);if(e!==b||s!==N.value)return;m.value=a.data||null;const i=await Promise.all(z.map(async v=>{try{return(await lt(s,v)).data||null}catch{return null}}));if(e!==b||s!==N.value)return;A.value=i.filter(Boolean);const u=await xt(s);if(e!==b||s!==N.value)return;d.value=u.data||null}catch(a){if(e!==b)return;console.error("Failed to load policy recommendation:",a),m.value=null,A.value=[],d.value=null}finally{e===b&&(S.value=!1)}}},I=s=>{if(!s)return null;const e=new Date(String(s).replace(" ","T"));return Number.isNaN(e.getTime())?null:e},mt=s=>{const e=s instanceof Date?s:I(s);if(!e)return"-";const a=i=>String(i).padStart(2,"0");return`${e.getFullYear()}-${a(e.getMonth()+1)}-${a(e.getDate())} ${a(e.getHours())}:${a(e.getMinutes())}:${a(e.getSeconds())}`},x=s=>String(s||"").trim().toUpperCase(),vt=new Set(["RUN","RUNNING","SUCCESS"]),gt=new Set(["UNINSTALL","UNINSTALLED","NOT_FOUND","STOP","STOPPED","FAILED","ERROR"]),w=y(()=>{var s,e,a;return x(((s=l.value)==null?void 0:s.applicationStatus)||((e=l.value)==null?void 0:e.podStatus)||((a=l.value)==null?void 0:a.status))}),H=y(()=>{var s;return Xt((s=l.value)==null?void 0:s.healthCheck,w.value)}),pt=y(()=>{var a,i;const s=I((a=l.value)==null?void 0:a.executedAt);return(Array.isArray((i=l.value)==null?void 0:i.operationHistories)?l.value.operationHistories:[]).some(u=>{if(x(u==null?void 0:u.operationType)!=="UNINSTALL")return!1;const v=I((u==null?void 0:u.executedAt)||(u==null?void 0:u.createdAt));return!s||!v?!0:v.getTime()>=s.getTime()})}),D=y(()=>pt.value||gt.has(w.value)?!1:vt.has(w.value)),k=y(()=>D.value),bt=y(()=>{var v;const s=I((v=l.value)==null?void 0:v.executedAt);if(!s)return 0;const e=new Date,a=new Date(s.getFullYear(),s.getMonth(),s.getDate()),u=new Date(e.getFullYear(),e.getMonth(),e.getDate()).getTime()-a.getTime();return Math.max(Math.floor(u/(1e3*60*60*24)),0)}),Nt=y(()=>{const s=new Map;return A.value.forEach(e=>{const a=Z(e);typeof a=="number"&&s.set(a,e)}),s}),yt=y(()=>z.map(s=>{const e=Nt.value.get(s)||null,a=bt.value>=s,i=(e==null?void 0:e.dataStatus)||(a?"PENDING_ANALYSIS":"ACCUMULATING");return{period:s,profile:e,eligible:a,dataStatus:i,dimmed:!a||["INSUFFICIENT_DATA","PENDING_ANALYSIS","ACCUMULATING"].includes(i)}})),St=y(()=>{var e,a,i;const s=[(e=d.value)==null?void 0:e.updatedAt,(a=d.value)==null?void 0:a.createdAt,(i=m.value)==null?void 0:i.createdAt,...A.value.map(u=>u==null?void 0:u.createdAt)].map(I).filter(u=>!!u).sort((u,v)=>v.getTime()-u.getTime());return s.length?mt(s[0]):"분석 이력 없음"}),ht=async()=>{if(N.value){if(!k.value){T.info("현재 실행 중인 배포만 정책 추천을 분석할 수 있습니다.");return}S.value=!0;try{await wt(N.value),await V(N.value,b),T.success("Policy recommendation analyzed")}catch(s){console.error("Failed to analyze policy recommendation:",s),T.error("Failed to analyze policy recommendation")}finally{S.value=!1}}},C=s=>Wt(s),U=s=>Kt(s),Et=s=>{switch(s==null?void 0:s.toLowerCase()){case"critical":return"badge bg-danger";case"warning":return"badge bg-warning";case"error":return"badge bg-danger";default:return"badge bg-info"}},At=s=>{switch(s==null?void 0:s.toLowerCase()){case"info":return"badge bg-info";case"warning":return"badge bg-warning";case"error":return"badge bg-danger";case"debug":return"badge bg-secondary";default:return"badge bg-primary"}},_t=s=>{switch(s){case"CPU_INTENSIVE":return"badge bg-primary";case"MEMORY_INTENSIVE":return"badge bg-purple";case"CPU_MEMORY_INTENSIVE":return"badge bg-warning";case"GENERAL_PURPOSE":return"badge bg-success";default:return"badge bg-secondary"}},G=s=>{switch(s){case"CPU_INTENSIVE":return"CPU 중심";case"MEMORY_INTENSIVE":return"Memory 중심";case"CPU_MEMORY_INTENSIVE":return"CPU/Memory 복합";case"GENERAL_PURPOSE":return"현행/범용";default:return s||"N/A"}},K=s=>{switch(x(s)){case"UNDER_PROVISIONED":return"용량 부족";case"OVER_PROVISIONED":return"사용률 낮음";case"RIGHT_SIZED":return"적정";default:return s||"N/A"}},W=s=>{switch(s){case"SUFFICIENT":return"badge bg-success";case"PARTIAL_DATA":return"badge bg-warning";case"INSUFFICIENT_DATA":case"ACCUMULATING":case"PENDING_ANALYSIS":return"badge bg-secondary";default:return"badge bg-secondary"}},X=s=>{switch(s){case"SUFFICIENT":return"충분";case"PARTIAL_DATA":return"부분 데이터";case"INSUFFICIENT_DATA":case"ACCUMULATING":return"데이터 축적 중";case"PENDING_ANALYSIS":return"분석 대기";default:return s||"N/A"}},Rt=s=>s?s.split(",").map(e=>e.trim()).filter(Boolean):["NO_ACTION"],It=s=>{switch(s){case"INCREASE_CPU":return"CPU 정책 검토";case"INCREASE_MEMORY":return"Memory 정책 검토";case"REVIEW_CPU_MEMORY_POLICY":return"CPU/Memory 복합 검토";case"CHANGE_RESOURCE_TYPE":return"운영 유형 검토";case"DOWNSIZE":return"현행/하향 검토";case"INVESTIGATE_STABILITY":return"안정성 점검";case"NO_ACTION":return"현행 유지";default:return s}},j=s=>{if(s==null)return"N/A";const e=Math.round(s*100);return e>=80?`높음 ${e}%`:e>=60?`보통 ${e}%`:e>=40?`낮음 ${e}%`:`판단 보류 ${e}%`},q=s=>{if(!s)return[];try{const e=JSON.parse(s);return Array.isArray(e)?e:[]}catch{return s.split(",").map(e=>e.trim()).filter(Boolean)}},Tt=s=>{const e=s.match(/^validDays=(\d+) is below (\d+)$/);if(e)return`유효 분석일이 ${e[1]}일로 최소 기준 ${e[2]}일에 미달합니다.`;const a=s.match(/^cpuPressureP95=([\d.]+)$/);if(a)return`CPU p95 사용률이 ${a[1]}%입니다.`;const i=s.match(/^memoryPressureP95=([\d.]+)$/);if(i)return`Memory p95 사용률이 ${i[1]}%입니다.`;const u=s.match(/^oomCount=(\d+)$/);if(u)return`OOM 이벤트가 ${u[1]}건 발생했습니다.`;const v=s.match(/^restartCount=(\d+), crashLoopCount=(\d+)$/);if(v)return`재시작 이벤트 ${v[1]}건, CrashLoop 이벤트 ${v[2]}건이 확인되었습니다.`;const L=s.match(/^networkEvidence=maxInBytes=(\d+), maxOutBytes=(\d+)$/);if(L)return`네트워크 최대 수신 ${O(Number(L[1]))}, 최대 송신 ${O(Number(L[2]))}가 확인되었습니다.`;const et=s.match(/^errorLogCount=(\d+)$/);if(et)return`ERROR 로그가 ${et[1]}건 확인되었습니다.`;const st=s.match(/^oomRelatedLogCount=(\d+)$/);if(st)return`OOM 관련 로그가 ${st[1]}건 확인되었습니다.`;const at=s.match(/^networkOrTimeoutLogCount=(\d+)$/);return at?`네트워크 또는 timeout 관련 로그가 ${at[1]}건 확인되었습니다.`:s==="cpuPressureP95 and memoryPressureP95 are below 40"?"CPU와 Memory p95 사용률이 모두 40% 미만입니다.":s==="CPU/Memory pressure is within right-sized range"?"CPU와 Memory 사용률이 적정 범위입니다.":s==="K8s percentage metrics require request/limit normalization; confidence capped at 0.60"?"K8s 백분율 지표는 request/limit 기준 정규화가 필요하여 신뢰도가 60%로 제한됩니다.":s},Z=s=>{if(!(s!=null&&s.analysisStartDate)||!(s!=null&&s.analysisEndDate))return"-";const e=new Date(s.analysisStartDate),a=new Date(s.analysisEndDate);return Math.round((a.getTime()-e.getTime())/(1e3*60*60*24))+1},ft=(s,e)=>{const a=Z(s);if(typeof a=="number")return a;const i=(s==null?void 0:s.validDays)??0,u=(s==null?void 0:s.missingDays)??0;return i+u||e||0},J=(s,e)=>{const a=(s==null?void 0:s.validDays)??0,i=ft(s,e);return i?`${a}일 확보 / ${i}일 기준`:`${a}일 확보`},Q=s=>!D.value||s===null||s===void 0?"-":`${s}%`,tt=s=>D.value?O(s):"-",O=s=>{if(s===0)return"0 Bytes";if(!s)return"N/A";const e=1024,a=["Bytes","KB","MB","GB","TB"],i=Math.floor(Math.log(s)/Math.log(e));return parseFloat((s/Math.pow(e,i)).toFixed(2))+" "+a[i]},$=()=>{const s=document.getElementById(B.modalId);if(s)try{if(window.bootstrap&&window.bootstrap.Modal){const e=window.bootstrap.Modal.getInstance(s);e?e.hide():new window.bootstrap.Modal(s).hide()}else s.style.display="none",s.classList.remove("show"),s.setAttribute("aria-hidden","true"),s.removeAttribute("aria-modal"),document.body.classList.remove("modal-open"),document.querySelectorAll(".modal-backdrop").forEach(a=>a.remove()),document.body.style.overflow="",document.body.style.paddingRight=""}catch(e){console.error("Error closing modal:",e),s.style.display="none",s.classList.remove("show"),document.body.classList.remove("modal-open"),document.querySelectorAll(".modal-backdrop").forEach(i=>i.remove())}l.value=null,m.value=null,A.value=[],d.value=null,rt("close")};return(s,e)=>(r(),o("div",{class:"modal modal-blur fade",id:B.modalId,tabindex:"-1",role:"dialog","aria-hidden":"true"},[t("div",qt,[t("div",Zt,[t("div",{class:"modal-header"},[e[1]||(e[1]=t("h5",{class:"modal-title"},"Application Detail",-1)),t("button",{type:"button",class:"btn-close","data-bs-dismiss":"modal","aria-label":"Close",onClick:$})]),t("div",Jt,[f.value?(r(),o("div",Qt,e[2]||(e[2]=[t("div",{class:"spinner-border",role:"status"},[t("span",{class:"visually-hidden"},"Loading...")],-1)]))):l.value?(r(),o("div",te,[t("div",ee,[e[7]||(e[7]=t("h6",{class:"text-primary"},"Application Overview",-1)),t("div",se,[t("div",ae,[Y.value&&!P.value?(r(),o("img",{key:0,src:Y.value,alt:l.value.catalogName,class:"img-fluid application-detail-logo",onError:e[0]||(e[0]=a=>P.value=!0)},null,40,le)):(r(),o("div",ne,[Ct(Ut(Gt),{class:"icon",size:"32","stroke-width":"1.75"})]))]),t("div",oe,[t("h5",null,n(l.value.catalogName),1),t("p",re,n(l.value.catalogDescription),1),t("div",ie,[t("div",ue,[e[3]||(e[3]=t("strong",null,"Category:",-1)),F(" "+n(l.value.catalogCategory),1)]),t("div",de,[e[4]||(e[4]=t("strong",null,"Default Port:",-1)),F(" "+n(l.value.defaultPort),1)]),t("div",ce,[e[5]||(e[5]=t("strong",{class:"me-2"},"Status:",-1)),t("span",{class:c(C(l.value.applicationStatus))},n(U(l.value.applicationStatus)),3)]),t("div",me,[e[6]||(e[6]=t("strong",{class:"me-2"},"Health Check:",-1)),t("span",{class:c(H.value.className)},n(H.value.label),3)])])])])]),t("div",ve,[e[12]||(e[12]=t("h6",{class:"text-primary"},"성능 지표",-1)),D.value?E("",!0):(r(),o("div",ge," 현재 실행 중인 상태가 아니므로 최신 성능 지표를 표시하지 않습니다. ")),t("div",pe,[t("div",be,[t("div",Ne,[t("div",ye,[t("h5",Se,n(Q(l.value.cpuUsage)),1),e[8]||(e[8]=t("p",{class:"card-text"},"CPU 사용률",-1))])])]),t("div",he,[t("div",Ee,[t("div",Ae,[t("h5",_e,n(Q(l.value.memoryUsage)),1),e[9]||(e[9]=t("p",{class:"card-text"},"Memory 사용률",-1))])])]),t("div",Re,[t("div",Ie,[t("div",Te,[t("h5",fe,n(tt(l.value.networkIn)),1),e[10]||(e[10]=t("p",{class:"card-text"},"네트워크 수신",-1))])])]),t("div",Pe,[t("div",De,[t("div",Ce,[t("h5",Ue,n(tt(l.value.networkOut)),1),e[11]||(e[11]=t("p",{class:"card-text"},"네트워크 송신",-1))])])])])]),t("div",Le,[t("div",Me,[t("div",null,[e[13]||(e[13]=t("h6",{class:"text-primary mb-0"},"정책 추천",-1)),t("div",xe,"최근 분석 시각: "+n(St.value),1)]),t("div",we,[t("button",{type:"button",class:"btn btn-outline-primary",disabled:S.value||!l.value.deploymentId||!k.value,onClick:ht},n(S.value?"Analyzing...":"Analyze"),9,ke)])]),S.value?(r(),o("div",Ge,e[14]||(e[14]=[t("div",{class:"spinner-border spinner-border-sm me-2",role:"status"},null,-1),F(" 정책 추천 정보를 불러오는 중입니다. ")]))):d.value?(r(),o("div",Oe,[k.value?E("",!0):(r(),o("div",$e," 운영 종료 또는 미확인 상태의 배포는 정책 추천 분석을 실행하지 않습니다. 아래 내용은 마지막으로 저장된 분석 결과입니다. ")),t("div",Fe,[t("div",null,[e[15]||(e[15]=t("div",{class:"text-muted small"},"현재 설정 유형",-1)),t("span",Be,n(G(d.value.selectedResourceType)),1)]),t("div",null,[e[16]||(e[16]=t("div",{class:"text-muted small"},"추천 운영 유형",-1)),t("span",{class:c(_t(d.value.recommendedResourceType))},n(G(d.value.recommendedResourceType)),3)]),t("div",null,[e[17]||(e[17]=t("div",{class:"text-muted small"},"정책 차이",-1)),t("span",{class:c(d.value.mismatch?"badge bg-warning":"badge bg-success")},n(d.value.mismatch?"검토 필요":"일치"),3)]),t("div",null,[e[18]||(e[18]=t("div",{class:"text-muted small"},"분석 신뢰도",-1)),t("span",ze,n(j(d.value.confidence)),1)])]),t("div",Ye,[t("table",Ve,[e[19]||(e[19]=t("thead",null,[t("tr",null,[t("th",null,"분석 기간"),t("th",null,"추천 유형"),t("th",null,"데이터 상태"),t("th",null,"신뢰도"),t("th",null,"분석 데이터")])],-1)),t("tbody",null,[(r(!0),o(_,null,R(yt.value,a=>(r(),o("tr",{key:a.period,class:c({"policy-period-muted":a.dimmed})},[t("td",null,n(a.period)+"d",1),t("td",null,n(a.profile?G(a.profile.recommendedResourceType):"-"),1),t("td",null,[t("span",{class:c(W(a.dataStatus))},n(X(a.dataStatus)),3)]),t("td",null,n(a.profile?j(a.profile.confidence):"-"),1),t("td",null,n(J(a.profile,a.period)),1)],2))),128))])])]),m.value?(r(),o("div",He,[t("div",Ke,[e[20]||(e[20]=t("div",{class:"text-muted small"},"데이터 상태",-1)),t("span",{class:c(W(m.value.dataStatus))},n(X(m.value.dataStatus)),3)]),t("div",We,[e[21]||(e[21]=t("div",{class:"text-muted small"},"CPU 상태",-1)),t("span",null,n(K(m.value.cpuSizingStatus)),1)]),t("div",Xe,[e[22]||(e[22]=t("div",{class:"text-muted small"},"Memory 상태",-1)),t("span",null,n(K(m.value.memorySizingStatus)),1)]),t("div",je,[e[23]||(e[23]=t("div",{class:"text-muted small"},"분석 데이터",-1)),t("span",null,n(J(m.value)),1)])])):E("",!0),t("div",qe,[e[24]||(e[24]=t("div",{class:"text-muted small"},"검토 항목",-1)),(r(!0),o(_,null,R(Rt(d.value.actions),a=>(r(),o("span",{key:a,class:"badge bg-light text-dark me-1"},n(It(a)),1))),128))]),t("p",Ze,n(d.value.message),1),m.value&&q(m.value.reasons).length?(r(),o("div",Je,[e[25]||(e[25]=t("div",{class:"text-muted small"},"분석 근거",-1)),t("ul",Qe,[(r(!0),o(_,null,R(q(m.value.reasons),a=>(r(),o("li",{key:a},n(Tt(a)),1))),128))])])):E("",!0)])):(r(),o("div",ts," 정책 추천 정보가 없습니다. "))]),t("div",es,[e[28]||(e[28]=t("h6",{class:"text-primary"},"Action History",-1)),t("div",ss,[t("table",as,[e[27]||(e[27]=t("thead",null,[t("tr",null,[t("th",null,"Action"),t("th",null,"Timestamp"),t("th",null,"User"),t("th",null,"Status"),t("th",null,"Description")])],-1)),t("tbody",null,[l.value.operationHistories.length===0?(r(),o("tr",ls,e[26]||(e[26]=[t("td",{colspan:"5",class:"text-center text-muted"},"No action history available",-1)]))):E("",!0),(r(!0),o(_,null,R(l.value.operationHistories,a=>(r(),o("tr",{key:a.id},[t("td",null,n(a.operationType),1),t("td",null,n(a.executedAt),1),t("td",null,n(a.executedBy||"system"),1),t("td",null,[t("span",{class:c(C(a.status))},n(U(a.status)),3)]),t("td",null,n(a.detailReason||a.reason),1)]))),128))])])])]),t("div",ns,[e[31]||(e[31]=t("h6",{class:"text-primary"},"Error Logs",-1)),t("div",os,[t("table",rs,[e[30]||(e[30]=t("thead",null,[t("tr",null,[t("th",null,"Timestamp"),t("th",null,"Error Code"),t("th",null,"Severity"),t("th",null,"Module"),t("th",null,"Description")])],-1)),t("tbody",null,[l.value.errorLogs.length>0?(r(!0),o(_,{key:0},R(l.value.errorLogs,a=>(r(),o("tr",{key:a.errorCode},[t("td",null,n(a.loggedAt),1),t("td",null,n(a.errorCode),1),t("td",null,[t("span",{class:c(Et(a.severity))},n(a.severity),3)]),t("td",null,n(a.module),1),t("td",null,n(a.logMessage),1)]))),128)):(r(),o("tr",is,e[29]||(e[29]=[t("td",{colspan:"5",class:"text-center text-muted"},"No error logs available",-1)])))])])])]),t("div",us,[e[42]||(e[42]=t("h6",{class:"text-primary"},"Deployment History",-1)),t("div",ds,[e[33]||(e[33]=t("h6",null,"Basic Deployment Information",-1)),t("div",cs,[t("table",ms,[e[32]||(e[32]=t("thead",null,[t("tr",null,[t("th",null,"ID"),t("th",null,"Action Type"),t("th",null,"Executed At"),t("th",null,"Executed By"),t("th",null,"Status")])],-1)),t("tbody",null,[t("tr",null,[t("td",null,n(l.value.deploymentId),1),t("td",null,n(l.value.actionType),1),t("td",null,n(l.value.executedAt),1),t("td",null,n(l.value.executedBy||"system"),1),t("td",null,[t("span",{class:c(C(l.value.status))},n(U(l.value.status)),3)])])])])])]),t("div",vs,[e[35]||(e[35]=t("h6",null,"Cloud & Cluster Information",-1)),t("div",gs,[t("table",ps,[e[34]||(e[34]=t("thead",null,[t("tr",null,[t("th",null,"Cloud Provider"),t("th",null,"Cloud Region"),t("th",null,"Cluster Name"),t("th",null,"Deployment Type"),t("th",null,"MCI ID"),t("th",null,"UID")])],-1)),t("tbody",null,[t("tr",null,[t("td",null,n(l.value.cloudProvider),1),t("td",null,n(l.value.cloudRegion),1),t("td",null,n(l.value.clusterName||"N/A"),1),t("td",null,n(l.value.deploymentType),1),t("td",null,n(l.value.mciId),1),t("td",null,n(l.value.vmId),1)])])])])]),t("div",bs,[e[37]||(e[37]=t("h6",null,"Network & Service Information",-1)),t("div",Ns,[t("table",ys,[e[36]||(e[36]=t("thead",null,[t("tr",null,[t("th",null,"Namespace"),t("th",null,"Pod Status"),t("th",null,"Public IP"),t("th",null,"Service Port"),t("th",null,"VM ID"),t("th",null,"Catalog ID")])],-1)),t("tbody",null,[t("tr",null,[t("td",null,n(l.value.namespace),1),t("td",null,[t("span",{class:c(C(l.value.podStatus||l.value.applicationStatus))},n(U(l.value.podStatus||l.value.applicationStatus)),3)]),t("td",null,n(l.value.publicIp),1),t("td",null,n(l.value.servicePort||l.value.defaultPort),1),t("td",null,n(l.value.vmId),1),t("td",null,n(l.value.catalogName),1)])])])])]),l.value.deploymentType==="K8S"?(r(),o("div",Ss,[e[39]||(e[39]=t("h6",null,"Deployment Options",-1)),t("div",hs,[t("table",Es,[e[38]||(e[38]=t("thead",null,[t("tr",null,[t("th",null,"Resource Type"),t("th",null,"HPA"),t("th",null,"Rebalancing"),t("th",null,"Min Replicas"),t("th",null,"Max Replicas"),t("th",null,"CPU Threshold"),t("th",null,"Memory Threshold")])],-1)),t("tbody",null,[t("tr",null,[t("td",null,n(l.value.resourceType||"N/A"),1),t("td",null,[t("span",{class:c(l.value.hpaEnabled?"text-success":"text-muted")},n(l.value.hpaEnabled?"Enabled":"Disabled"),3)]),t("td",null,[t("span",{class:c(l.value.workloadRebalancingEnabled?"text-success":"text-muted")},n(l.value.workloadRebalancingEnabled?"Enabled":"Disabled"),3)]),t("td",null,n(l.value.minReplicas||"N/A"),1),t("td",null,n(l.value.maxReplicas||"N/A"),1),t("td",null,n(l.value.cpuThreshold?`${l.value.cpuThreshold}%`:"N/A"),1),t("td",null,n(l.value.memoryThreshold?`${l.value.memoryThreshold}%`:"N/A"),1)])])])])])):E("",!0),l.value.ingressEnabled?(r(),o("div",As,[e[41]||(e[41]=t("h6",null,"Ingress Information",-1)),t("div",_s,[t("table",Rs,[e[40]||(e[40]=t("thead",null,[t("tr",null,[t("th",null,"Enabled"),t("th",null,"Host"),t("th",null,"Path"),t("th",null,"Class"),t("th",null,"TLS Enabled"),t("th",null,"TLS Secret")])],-1)),t("tbody",null,[t("tr",null,[t("td",null,[t("span",{class:c(l.value.ingressEnabled?"text-success":"text-danger")},n(l.value.ingressEnabled?"Yes":"No"),3)]),t("td",null,n(l.value.ingressHost||"N/A"),1),t("td",null,n(l.value.ingressPath||"N/A"),1),t("td",null,n(l.value.ingressClass||"N/A"),1),t("td",null,[t("span",{class:c(l.value.ingressTlsEnabled?"text-success":"text-danger")},n(l.value.ingressTlsEnabled?"Yes":"No"),3)]),t("td",null,n(l.value.ingressTlsSecret||"N/A"),1)])])])])])):E("",!0)]),l.value.deploymentLogs&&l.value.deploymentLogs.length>0?(r(),o("div",Is,[e[44]||(e[44]=t("h6",{class:"text-primary"},"Deployment Logs",-1)),t("div",Ts,[t("table",fs,[e[43]||(e[43]=t("thead",null,[t("tr",null,[t("th",null,"Timestamp"),t("th",null,"Type"),t("th",null,"Message")])],-1)),t("tbody",null,[(r(!0),o(_,null,R(l.value.deploymentLogs,a=>(r(),o("tr",{key:a.id},[t("td",null,n(a.loggedAt),1),t("td",null,[t("span",{class:c(["me-4 mt-2",At(a.logType)])},n(a.logType),3)]),t("td",null,n(a.logMessage),1)]))),128))])])])])):E("",!0)])):(r(),o("div",Ps," No data available "))]),t("div",{class:"modal-footer"},[t("button",{type:"button",class:"btn btn-secondary","data-bs-dismiss":"modal",onClick:$},"Close")])])])],8,jt))}}),Os=kt(Ds,[["__scopeId","data-v-fc9d6a1a"]]);export{Os as A,Gt as I,ks as a,Wt as b,Kt as g,Gs as i}; diff --git a/src/main/resources/static/assets/applicationDetailModal-DKOvpn60.js b/src/main/resources/static/assets/applicationDetailModal-DKOvpn60.js new file mode 100644 index 00000000..8b513b96 --- /dev/null +++ b/src/main/resources/static/assets/applicationDetailModal-DKOvpn60.js @@ -0,0 +1,11 @@ +import{c as nt}from"./createVueComponent-Czx6MsN9.js";import{d as Pt,f as Dt,r as h,g as y,c as o,a as t,b as Ct,u as Ut,t as n,e as F,n as c,m as E,F as _,k as R,o as r,D as Lt}from"./index-8PPGy_cS.js";import{q as Mt,t as lt,v as xt,w as wt}from"./softwareCatalog-DfwfQXi9.js";import{_ as kt}from"./_plugin-vue_export-helper-DlAUqK2U.js";/** + * @license @tabler/icons-vue v3.22.0 - MIT + * + * This source code is licensed under the MIT license. + * See the LICENSE file in the root directory of this source tree. + */var Gt=nt("outline","package","IconPackage",[["path",{d:"M12 3l8 4.5l0 9l-8 4.5l-8 -4.5l0 -9l8 -4.5",key:"svg-0"}],["path",{d:"M12 12l8 -4.5",key:"svg-1"}],["path",{d:"M12 12l0 9",key:"svg-2"}],["path",{d:"M12 12l-8 -4.5",key:"svg-3"}],["path",{d:"M16 5.25l-8 4.5",key:"svg-4"}]]);/** + * @license @tabler/icons-vue v3.22.0 - MIT + * + * This source code is licensed under the MIT license. + * See the LICENSE file in the root directory of this source tree. + */var ks=nt("outline","refresh","IconRefresh",[["path",{d:"M20 11a8.1 8.1 0 0 0 -15.5 -2m-.5 -4v4h4",key:"svg-0"}],["path",{d:"M4 13a8.1 8.1 0 0 0 15.5 2m.5 4v-4h-4",key:"svg-1"}]]);const Ot={PREPARING_RUNTIME:"Initializing",PREPARING_METRICS_SERVER:"Initializing",PREPARING_INGRESS_NGINX:"Initializing",DEPLOYING:"Deploying",INSTALL:"Installing",IN_PROGRESS:"In Progress",PENDING:"Pending",START:"Starting",STARTING:"Starting",RESTART:"Restarting",RESTARTING:"Restarting",RUN:"Running",RUNNING:"Running",SUCCESS:"Running",COMPLETED:"Completed",STOP:"Stopped",STOPPED:"Stopped",UNINSTALL:"Uninstalling",UNINSTALLED:"Uninstalled",NOT_FOUND:"Not Found",UNKNOWN:"Unknown",IMAGE_PULL_ERROR:"Image Pull Error",FAILED:"Failed",ERROR:"Error"},$t=new Set(["PREPARING_RUNTIME","PREPARING_METRICS_SERVER","PREPARING_INGRESS_NGINX","DEPLOYING","IN_PROGRESS","INSTALL","START","STARTING","RESTART","RESTARTING"]),Ft=new Set(["RUN","RUNNING","SUCCESS","COMPLETED"]),Bt=new Set(["NOT_FOUND","PENDING","UNKNOWN"]),zt=new Set(["STOP","STOPPED","UNINSTALL","UNINSTALLED"]),Yt=new Set(["FAILED","ERROR","IMAGE_PULL_ERROR"]),Vt=new Set(["PREPARING_RUNTIME","PREPARING_METRICS_SERVER","PREPARING_INGRESS_NGINX","DEPLOYING","IN_PROGRESS","INSTALL","START","STARTING","RESTART","RESTARTING","UNINSTALL","UNINSTALLED","FAILED"]),Ht=new Set(["PREPARING_RUNTIME","PREPARING_METRICS_SERVER","PREPARING_INGRESS_NGINX","DEPLOYING","INSTALL","IN_PROGRESS","PENDING","START","STARTING","RESTART","RESTARTING","RUN","RUNNING","SUCCESS"]),M=g=>String(g||"").trim().toUpperCase(),Kt=g=>{const p=M(g);return p&&(Ot[p]||g)||"-"},Wt=g=>{const p=M(g);return Ft.has(p)?"badge bg-success":$t.has(p)?"badge bg-primary":Bt.has(p)?"badge bg-warning":zt.has(p)?"badge bg-secondary":Yt.has(p)?"badge bg-danger":"badge bg-secondary"},Gs=g=>Vt.has(M(g)),Xt=(g,p)=>g===!0?{label:"Healthy",className:"text-success"}:g===!1?{label:"Unhealthy",className:"text-danger"}:Ht.has(M(p))?{label:"Checking",className:"text-warning"}:{label:"Unknown",className:"text-muted"},jt=["id"],qt={class:"modal-dialog modal-xl modal-dialog-centered",role:"document"},Zt={class:"modal-content"},Jt={class:"modal-body",style:{"max-height":"80vh","overflow-y":"auto"}},Qt={key:0,class:"text-center"},te={key:1},ee={class:"mb-4"},se={class:"row"},ae={class:"col-md-2 text-center"},le=["src","alt"],ne={key:1,class:"application-detail-logo-fallback d-inline-flex align-items-center justify-content-center"},oe={class:"col-md-10"},re={class:"text-muted"},ie={class:"row"},ue={class:"col-md-3"},de={class:"col-md-3"},ce={class:"col-md-3"},me={class:"col-md-3"},ve={class:"mb-4"},ge={key:0,class:"text-muted small mb-2"},pe={class:"row"},be={class:"col-md-3"},Ne={class:"card text-center"},ye={class:"card-body"},Se={class:"card-title"},he={class:"col-md-3"},Ee={class:"card text-center"},Ae={class:"card-body"},_e={class:"card-title"},Re={class:"col-md-3"},Ie={class:"card text-center"},Te={class:"card-body"},fe={class:"card-title"},Pe={class:"col-md-3"},De={class:"card text-center"},Ce={class:"card-body"},Ue={class:"card-title"},Le={class:"mb-4"},Me={class:"d-flex justify-content-between align-items-center mb-2"},xe={class:"text-muted small"},we={class:"btn-list"},ke=["disabled"],Ge={key:0,class:"text-center text-muted py-3"},Oe={key:1,class:"border rounded p-3"},$e={key:0,class:"alert alert-light border text-muted py-2 mb-3"},Fe={class:"d-flex justify-content-between flex-wrap gap-2 mb-3"},Be={class:"badge bg-secondary"},ze={class:"badge bg-info"},Ye={class:"table-responsive mb-3"},Ve={class:"table table-sm mb-0"},He={key:1,class:"row g-2 mb-3"},Ke={class:"col-md-3"},We={class:"col-md-3"},Xe={class:"col-md-3"},je={class:"col-md-3"},qe={class:"mb-3"},Ze={class:"mb-3"},Je={key:2,class:"mb-3"},Qe={class:"policy-evidence-list mb-0"},ts={key:2,class:"text-muted border rounded p-3"},es={class:"mb-4"},ss={class:"table-responsive"},as={class:"table table-sm"},ls={key:0},ns={class:"mb-4"},os={class:"table-responsive"},rs={class:"table table-sm"},is={key:1},us={class:"mb-4"},ds={class:"mb-3"},cs={class:"table-responsive"},ms={class:"table table-sm"},vs={class:"mb-3"},gs={class:"table-responsive"},ps={class:"table table-sm"},bs={class:"mb-3"},Ns={class:"table-responsive"},ys={class:"table table-sm"},Ss={key:0,class:"mb-3"},hs={class:"table-responsive"},Es={class:"table table-sm"},As={key:1,class:"mb-3"},_s={class:"table-responsive"},Rs={class:"table table-sm"},Is={key:0,class:"mb-4"},Ts={class:"table-responsive"},fs={class:"table table-sm"},Ps={key:2,class:"text-center text-muted"},Ds=Pt({__name:"applicationDetailModal",props:{deploymentId:{},modalId:{default:"application-detail-modal"}},emits:["close"],setup(g,{expose:p,emit:ot}){const B=g,rt=ot,T=Dt(),f=h(!1),S=h(!1),l=h(null),m=h(null),A=h([]),d=h(null),P=h(!1),z=[7,30,90],N=h(0);let b=0;const it={"apache tomcat":"/catalog-icons/apache-tomcat.png",redis:"/catalog-icons/redis.svg",nginx:"/catalog-icons/nginx.svg","apache http server":"/catalog-icons/apache-http-server.svg","nexus repository":"/catalog-icons/nexus-repository.svg",mariadb:"/catalog-icons/mariadb.svg",grafana:"/catalog-icons/grafana.svg",prometheus:"/catalog-icons/prometheus.svg",elasticsearch:"/catalog-icons/elasticsearch.svg"},ut=s=>String(s||"").trim().toLowerCase(),dt=s=>it[ut(s)]||"",Y=y(()=>{const s=l.value;return s?Lt(dt(s.catalogName)||s.logoUrlLarge||s.logoUrlSmall||""):""});p({refreshData:s=>{const e=++b;N.value=s,l.value=null,m.value=null,A.value=[],d.value=null,N.value&&(ct(s,e),V(s,e))},resetData:()=>{b+=1,N.value=0,l.value=null,m.value=null,A.value=[],d.value=null,P.value=!1,f.value=!1,S.value=!1,$()}});const ct=async(s,e)=>{if(s){f.value=!0;try{P.value=!1;const{data:a}=await Mt(s);e===b&&s===N.value&&a&&(l.value=a.integratedInfo)}catch(a){if(e!==b)return;console.error("Failed to load application detail:",a),T.error("Failed to load application detail")}finally{e===b&&(f.value=!1)}}},V=async(s,e)=>{if(s){S.value=!0;try{const a=await lt(s);if(e!==b||s!==N.value)return;m.value=a.data||null;const i=await Promise.all(z.map(async v=>{try{return(await lt(s,v)).data||null}catch{return null}}));if(e!==b||s!==N.value)return;A.value=i.filter(Boolean);const u=await xt(s);if(e!==b||s!==N.value)return;d.value=u.data||null}catch(a){if(e!==b)return;console.error("Failed to load policy recommendation:",a),m.value=null,A.value=[],d.value=null}finally{e===b&&(S.value=!1)}}},I=s=>{if(!s)return null;const e=new Date(String(s).replace(" ","T"));return Number.isNaN(e.getTime())?null:e},mt=s=>{const e=s instanceof Date?s:I(s);if(!e)return"-";const a=i=>String(i).padStart(2,"0");return`${e.getFullYear()}-${a(e.getMonth()+1)}-${a(e.getDate())} ${a(e.getHours())}:${a(e.getMinutes())}:${a(e.getSeconds())}`},x=s=>String(s||"").trim().toUpperCase(),vt=new Set(["RUN","RUNNING","SUCCESS"]),gt=new Set(["UNINSTALL","UNINSTALLED","NOT_FOUND","STOP","STOPPED","FAILED","ERROR"]),w=y(()=>{var s,e,a;return x(((s=l.value)==null?void 0:s.applicationStatus)||((e=l.value)==null?void 0:e.podStatus)||((a=l.value)==null?void 0:a.status))}),H=y(()=>{var s;return Xt((s=l.value)==null?void 0:s.healthCheck,w.value)}),pt=y(()=>{var a,i;const s=I((a=l.value)==null?void 0:a.executedAt);return(Array.isArray((i=l.value)==null?void 0:i.operationHistories)?l.value.operationHistories:[]).some(u=>{if(x(u==null?void 0:u.operationType)!=="UNINSTALL")return!1;const v=I((u==null?void 0:u.executedAt)||(u==null?void 0:u.createdAt));return!s||!v?!0:v.getTime()>=s.getTime()})}),D=y(()=>pt.value||gt.has(w.value)?!1:vt.has(w.value)),k=y(()=>D.value),bt=y(()=>{var v;const s=I((v=l.value)==null?void 0:v.executedAt);if(!s)return 0;const e=new Date,a=new Date(s.getFullYear(),s.getMonth(),s.getDate()),u=new Date(e.getFullYear(),e.getMonth(),e.getDate()).getTime()-a.getTime();return Math.max(Math.floor(u/(1e3*60*60*24)),0)}),Nt=y(()=>{const s=new Map;return A.value.forEach(e=>{const a=Z(e);typeof a=="number"&&s.set(a,e)}),s}),yt=y(()=>z.map(s=>{const e=Nt.value.get(s)||null,a=bt.value>=s,i=(e==null?void 0:e.dataStatus)||(a?"PENDING_ANALYSIS":"ACCUMULATING");return{period:s,profile:e,eligible:a,dataStatus:i,dimmed:!a||["INSUFFICIENT_DATA","PENDING_ANALYSIS","ACCUMULATING"].includes(i)}})),St=y(()=>{var e,a,i;const s=[(e=d.value)==null?void 0:e.updatedAt,(a=d.value)==null?void 0:a.createdAt,(i=m.value)==null?void 0:i.createdAt,...A.value.map(u=>u==null?void 0:u.createdAt)].map(I).filter(u=>!!u).sort((u,v)=>v.getTime()-u.getTime());return s.length?mt(s[0]):"분석 이력 없음"}),ht=async()=>{if(N.value){if(!k.value){T.info("현재 실행 중인 배포만 정책 추천을 분석할 수 있습니다.");return}S.value=!0;try{await wt(N.value),await V(N.value,b),T.success("Policy recommendation analyzed")}catch(s){console.error("Failed to analyze policy recommendation:",s),T.error("Failed to analyze policy recommendation")}finally{S.value=!1}}},C=s=>Wt(s),U=s=>Kt(s),Et=s=>{switch(s==null?void 0:s.toLowerCase()){case"critical":return"badge bg-danger";case"warning":return"badge bg-warning";case"error":return"badge bg-danger";default:return"badge bg-info"}},At=s=>{switch(s==null?void 0:s.toLowerCase()){case"info":return"badge bg-info";case"warning":return"badge bg-warning";case"error":return"badge bg-danger";case"debug":return"badge bg-secondary";default:return"badge bg-primary"}},_t=s=>{switch(s){case"CPU_INTENSIVE":return"badge bg-primary";case"MEMORY_INTENSIVE":return"badge bg-purple";case"CPU_MEMORY_INTENSIVE":return"badge bg-warning";case"GENERAL_PURPOSE":return"badge bg-success";default:return"badge bg-secondary"}},G=s=>{switch(s){case"CPU_INTENSIVE":return"CPU 중심";case"MEMORY_INTENSIVE":return"Memory 중심";case"CPU_MEMORY_INTENSIVE":return"CPU/Memory 복합";case"GENERAL_PURPOSE":return"현행/범용";default:return s||"N/A"}},K=s=>{switch(x(s)){case"UNDER_PROVISIONED":return"용량 부족";case"OVER_PROVISIONED":return"사용률 낮음";case"RIGHT_SIZED":return"적정";default:return s||"N/A"}},W=s=>{switch(s){case"SUFFICIENT":return"badge bg-success";case"PARTIAL_DATA":return"badge bg-warning";case"INSUFFICIENT_DATA":case"ACCUMULATING":case"PENDING_ANALYSIS":return"badge bg-secondary";default:return"badge bg-secondary"}},X=s=>{switch(s){case"SUFFICIENT":return"충분";case"PARTIAL_DATA":return"부분 데이터";case"INSUFFICIENT_DATA":case"ACCUMULATING":return"데이터 축적 중";case"PENDING_ANALYSIS":return"분석 대기";default:return s||"N/A"}},Rt=s=>s?s.split(",").map(e=>e.trim()).filter(Boolean):["NO_ACTION"],It=s=>{switch(s){case"INCREASE_CPU":return"CPU 정책 검토";case"INCREASE_MEMORY":return"Memory 정책 검토";case"REVIEW_CPU_MEMORY_POLICY":return"CPU/Memory 복합 검토";case"CHANGE_RESOURCE_TYPE":return"운영 유형 검토";case"DOWNSIZE":return"현행/하향 검토";case"INVESTIGATE_STABILITY":return"안정성 점검";case"NO_ACTION":return"현행 유지";default:return s}},j=s=>{if(s==null)return"N/A";const e=Math.round(s*100);return e>=80?`높음 ${e}%`:e>=60?`보통 ${e}%`:e>=40?`낮음 ${e}%`:`판단 보류 ${e}%`},q=s=>{if(!s)return[];try{const e=JSON.parse(s);return Array.isArray(e)?e:[]}catch{return s.split(",").map(e=>e.trim()).filter(Boolean)}},Tt=s=>{const e=s.match(/^validDays=(\d+) is below (\d+)$/);if(e)return`유효 분석일이 ${e[1]}일로 최소 기준 ${e[2]}일에 미달합니다.`;const a=s.match(/^cpuPressureP95=([\d.]+)$/);if(a)return`CPU p95 사용률이 ${a[1]}%입니다.`;const i=s.match(/^memoryPressureP95=([\d.]+)$/);if(i)return`Memory p95 사용률이 ${i[1]}%입니다.`;const u=s.match(/^oomCount=(\d+)$/);if(u)return`OOM 이벤트가 ${u[1]}건 발생했습니다.`;const v=s.match(/^restartCount=(\d+), crashLoopCount=(\d+)$/);if(v)return`재시작 이벤트 ${v[1]}건, CrashLoop 이벤트 ${v[2]}건이 확인되었습니다.`;const L=s.match(/^networkEvidence=maxInBytes=(\d+), maxOutBytes=(\d+)$/);if(L)return`네트워크 최대 수신 ${O(Number(L[1]))}, 최대 송신 ${O(Number(L[2]))}가 확인되었습니다.`;const et=s.match(/^errorLogCount=(\d+)$/);if(et)return`ERROR 로그가 ${et[1]}건 확인되었습니다.`;const st=s.match(/^oomRelatedLogCount=(\d+)$/);if(st)return`OOM 관련 로그가 ${st[1]}건 확인되었습니다.`;const at=s.match(/^networkOrTimeoutLogCount=(\d+)$/);return at?`네트워크 또는 timeout 관련 로그가 ${at[1]}건 확인되었습니다.`:s==="cpuPressureP95 and memoryPressureP95 are below 40"?"CPU와 Memory p95 사용률이 모두 40% 미만입니다.":s==="CPU/Memory pressure is within right-sized range"?"CPU와 Memory 사용률이 적정 범위입니다.":s==="K8s percentage metrics require request/limit normalization; confidence capped at 0.60"?"K8s 백분율 지표는 request/limit 기준 정규화가 필요하여 신뢰도가 60%로 제한됩니다.":s},Z=s=>{if(!(s!=null&&s.analysisStartDate)||!(s!=null&&s.analysisEndDate))return"-";const e=new Date(s.analysisStartDate),a=new Date(s.analysisEndDate);return Math.round((a.getTime()-e.getTime())/(1e3*60*60*24))+1},ft=(s,e)=>{const a=Z(s);if(typeof a=="number")return a;const i=(s==null?void 0:s.validDays)??0,u=(s==null?void 0:s.missingDays)??0;return i+u||e||0},J=(s,e)=>{const a=(s==null?void 0:s.validDays)??0,i=ft(s,e);return i?`${a}일 확보 / ${i}일 기준`:`${a}일 확보`},Q=s=>!D.value||s===null||s===void 0?"-":`${s}%`,tt=s=>D.value?O(s):"-",O=s=>{if(s===0)return"0 Bytes";if(!s)return"N/A";const e=1024,a=["Bytes","KB","MB","GB","TB"],i=Math.floor(Math.log(s)/Math.log(e));return parseFloat((s/Math.pow(e,i)).toFixed(2))+" "+a[i]},$=()=>{const s=document.getElementById(B.modalId);if(s)try{if(window.bootstrap&&window.bootstrap.Modal){const e=window.bootstrap.Modal.getInstance(s);e?e.hide():new window.bootstrap.Modal(s).hide()}else s.style.display="none",s.classList.remove("show"),s.setAttribute("aria-hidden","true"),s.removeAttribute("aria-modal"),document.body.classList.remove("modal-open"),document.querySelectorAll(".modal-backdrop").forEach(a=>a.remove()),document.body.style.overflow="",document.body.style.paddingRight=""}catch(e){console.error("Error closing modal:",e),s.style.display="none",s.classList.remove("show"),document.body.classList.remove("modal-open"),document.querySelectorAll(".modal-backdrop").forEach(i=>i.remove())}l.value=null,m.value=null,A.value=[],d.value=null,rt("close")};return(s,e)=>(r(),o("div",{class:"modal modal-blur fade",id:B.modalId,tabindex:"-1",role:"dialog","aria-hidden":"true"},[t("div",qt,[t("div",Zt,[t("div",{class:"modal-header"},[e[1]||(e[1]=t("h5",{class:"modal-title"},"Application Detail",-1)),t("button",{type:"button",class:"btn-close","data-bs-dismiss":"modal","aria-label":"Close",onClick:$})]),t("div",Jt,[f.value?(r(),o("div",Qt,e[2]||(e[2]=[t("div",{class:"spinner-border",role:"status"},[t("span",{class:"visually-hidden"},"Loading...")],-1)]))):l.value?(r(),o("div",te,[t("div",ee,[e[7]||(e[7]=t("h6",{class:"text-primary"},"Application Overview",-1)),t("div",se,[t("div",ae,[Y.value&&!P.value?(r(),o("img",{key:0,src:Y.value,alt:l.value.catalogName,class:"img-fluid application-detail-logo",onError:e[0]||(e[0]=a=>P.value=!0)},null,40,le)):(r(),o("div",ne,[Ct(Ut(Gt),{class:"icon",size:"32","stroke-width":"1.75"})]))]),t("div",oe,[t("h5",null,n(l.value.catalogName),1),t("p",re,n(l.value.catalogDescription),1),t("div",ie,[t("div",ue,[e[3]||(e[3]=t("strong",null,"Category:",-1)),F(" "+n(l.value.catalogCategory),1)]),t("div",de,[e[4]||(e[4]=t("strong",null,"Default Port:",-1)),F(" "+n(l.value.defaultPort),1)]),t("div",ce,[e[5]||(e[5]=t("strong",{class:"me-2"},"Status:",-1)),t("span",{class:c(C(l.value.applicationStatus))},n(U(l.value.applicationStatus)),3)]),t("div",me,[e[6]||(e[6]=t("strong",{class:"me-2"},"Health Check:",-1)),t("span",{class:c(H.value.className)},n(H.value.label),3)])])])])]),t("div",ve,[e[12]||(e[12]=t("h6",{class:"text-primary"},"성능 지표",-1)),D.value?E("",!0):(r(),o("div",ge," 현재 실행 중인 상태가 아니므로 최신 성능 지표를 표시하지 않습니다. ")),t("div",pe,[t("div",be,[t("div",Ne,[t("div",ye,[t("h5",Se,n(Q(l.value.cpuUsage)),1),e[8]||(e[8]=t("p",{class:"card-text"},"CPU 사용률",-1))])])]),t("div",he,[t("div",Ee,[t("div",Ae,[t("h5",_e,n(Q(l.value.memoryUsage)),1),e[9]||(e[9]=t("p",{class:"card-text"},"Memory 사용률",-1))])])]),t("div",Re,[t("div",Ie,[t("div",Te,[t("h5",fe,n(tt(l.value.networkIn)),1),e[10]||(e[10]=t("p",{class:"card-text"},"네트워크 수신",-1))])])]),t("div",Pe,[t("div",De,[t("div",Ce,[t("h5",Ue,n(tt(l.value.networkOut)),1),e[11]||(e[11]=t("p",{class:"card-text"},"네트워크 송신",-1))])])])])]),t("div",Le,[t("div",Me,[t("div",null,[e[13]||(e[13]=t("h6",{class:"text-primary mb-0"},"정책 추천",-1)),t("div",xe,"최근 분석 시각: "+n(St.value),1)]),t("div",we,[t("button",{type:"button",class:"btn btn-outline-primary",disabled:S.value||!l.value.deploymentId||!k.value,onClick:ht},n(S.value?"Analyzing...":"Analyze"),9,ke)])]),S.value?(r(),o("div",Ge,e[14]||(e[14]=[t("div",{class:"spinner-border spinner-border-sm me-2",role:"status"},null,-1),F(" 정책 추천 정보를 불러오는 중입니다. ")]))):d.value?(r(),o("div",Oe,[k.value?E("",!0):(r(),o("div",$e," 운영 종료 또는 미확인 상태의 배포는 정책 추천 분석을 실행하지 않습니다. 아래 내용은 마지막으로 저장된 분석 결과입니다. ")),t("div",Fe,[t("div",null,[e[15]||(e[15]=t("div",{class:"text-muted small"},"현재 설정 유형",-1)),t("span",Be,n(G(d.value.selectedResourceType)),1)]),t("div",null,[e[16]||(e[16]=t("div",{class:"text-muted small"},"추천 운영 유형",-1)),t("span",{class:c(_t(d.value.recommendedResourceType))},n(G(d.value.recommendedResourceType)),3)]),t("div",null,[e[17]||(e[17]=t("div",{class:"text-muted small"},"정책 차이",-1)),t("span",{class:c(d.value.mismatch?"badge bg-warning":"badge bg-success")},n(d.value.mismatch?"검토 필요":"일치"),3)]),t("div",null,[e[18]||(e[18]=t("div",{class:"text-muted small"},"분석 신뢰도",-1)),t("span",ze,n(j(d.value.confidence)),1)])]),t("div",Ye,[t("table",Ve,[e[19]||(e[19]=t("thead",null,[t("tr",null,[t("th",null,"분석 기간"),t("th",null,"추천 유형"),t("th",null,"데이터 상태"),t("th",null,"신뢰도"),t("th",null,"분석 데이터")])],-1)),t("tbody",null,[(r(!0),o(_,null,R(yt.value,a=>(r(),o("tr",{key:a.period,class:c({"policy-period-muted":a.dimmed})},[t("td",null,n(a.period)+"d",1),t("td",null,n(a.profile?G(a.profile.recommendedResourceType):"-"),1),t("td",null,[t("span",{class:c(W(a.dataStatus))},n(X(a.dataStatus)),3)]),t("td",null,n(a.profile?j(a.profile.confidence):"-"),1),t("td",null,n(J(a.profile,a.period)),1)],2))),128))])])]),m.value?(r(),o("div",He,[t("div",Ke,[e[20]||(e[20]=t("div",{class:"text-muted small"},"데이터 상태",-1)),t("span",{class:c(W(m.value.dataStatus))},n(X(m.value.dataStatus)),3)]),t("div",We,[e[21]||(e[21]=t("div",{class:"text-muted small"},"CPU 상태",-1)),t("span",null,n(K(m.value.cpuSizingStatus)),1)]),t("div",Xe,[e[22]||(e[22]=t("div",{class:"text-muted small"},"Memory 상태",-1)),t("span",null,n(K(m.value.memorySizingStatus)),1)]),t("div",je,[e[23]||(e[23]=t("div",{class:"text-muted small"},"분석 데이터",-1)),t("span",null,n(J(m.value)),1)])])):E("",!0),t("div",qe,[e[24]||(e[24]=t("div",{class:"text-muted small"},"검토 항목",-1)),(r(!0),o(_,null,R(Rt(d.value.actions),a=>(r(),o("span",{key:a,class:"badge bg-light text-dark me-1"},n(It(a)),1))),128))]),t("p",Ze,n(d.value.message),1),m.value&&q(m.value.reasons).length?(r(),o("div",Je,[e[25]||(e[25]=t("div",{class:"text-muted small"},"분석 근거",-1)),t("ul",Qe,[(r(!0),o(_,null,R(q(m.value.reasons),a=>(r(),o("li",{key:a},n(Tt(a)),1))),128))])])):E("",!0)])):(r(),o("div",ts," 정책 추천 정보가 없습니다. "))]),t("div",es,[e[28]||(e[28]=t("h6",{class:"text-primary"},"Action History",-1)),t("div",ss,[t("table",as,[e[27]||(e[27]=t("thead",null,[t("tr",null,[t("th",null,"Action"),t("th",null,"Timestamp"),t("th",null,"User"),t("th",null,"Status"),t("th",null,"Description")])],-1)),t("tbody",null,[l.value.operationHistories.length===0?(r(),o("tr",ls,e[26]||(e[26]=[t("td",{colspan:"5",class:"text-center text-muted"},"No action history available",-1)]))):E("",!0),(r(!0),o(_,null,R(l.value.operationHistories,a=>(r(),o("tr",{key:a.id},[t("td",null,n(a.operationType),1),t("td",null,n(a.executedAt),1),t("td",null,n(a.executedBy||"system"),1),t("td",null,[t("span",{class:c(C(a.status))},n(U(a.status)),3)]),t("td",null,n(a.detailReason||a.reason),1)]))),128))])])])]),t("div",ns,[e[31]||(e[31]=t("h6",{class:"text-primary"},"Error Logs",-1)),t("div",os,[t("table",rs,[e[30]||(e[30]=t("thead",null,[t("tr",null,[t("th",null,"Timestamp"),t("th",null,"Error Code"),t("th",null,"Severity"),t("th",null,"Module"),t("th",null,"Description")])],-1)),t("tbody",null,[l.value.errorLogs.length>0?(r(!0),o(_,{key:0},R(l.value.errorLogs,a=>(r(),o("tr",{key:a.errorCode},[t("td",null,n(a.loggedAt),1),t("td",null,n(a.errorCode),1),t("td",null,[t("span",{class:c(Et(a.severity))},n(a.severity),3)]),t("td",null,n(a.module),1),t("td",null,n(a.logMessage),1)]))),128)):(r(),o("tr",is,e[29]||(e[29]=[t("td",{colspan:"5",class:"text-center text-muted"},"No error logs available",-1)])))])])])]),t("div",us,[e[42]||(e[42]=t("h6",{class:"text-primary"},"Deployment History",-1)),t("div",ds,[e[33]||(e[33]=t("h6",null,"Basic Deployment Information",-1)),t("div",cs,[t("table",ms,[e[32]||(e[32]=t("thead",null,[t("tr",null,[t("th",null,"ID"),t("th",null,"Action Type"),t("th",null,"Executed At"),t("th",null,"Executed By"),t("th",null,"Status")])],-1)),t("tbody",null,[t("tr",null,[t("td",null,n(l.value.deploymentId),1),t("td",null,n(l.value.actionType),1),t("td",null,n(l.value.executedAt),1),t("td",null,n(l.value.executedBy||"system"),1),t("td",null,[t("span",{class:c(C(l.value.status))},n(U(l.value.status)),3)])])])])])]),t("div",vs,[e[35]||(e[35]=t("h6",null,"Cloud & Cluster Information",-1)),t("div",gs,[t("table",ps,[e[34]||(e[34]=t("thead",null,[t("tr",null,[t("th",null,"Cloud Provider"),t("th",null,"Cloud Region"),t("th",null,"Cluster Name"),t("th",null,"Deployment Type"),t("th",null,"MCI ID"),t("th",null,"UID")])],-1)),t("tbody",null,[t("tr",null,[t("td",null,n(l.value.cloudProvider),1),t("td",null,n(l.value.cloudRegion),1),t("td",null,n(l.value.clusterName||"N/A"),1),t("td",null,n(l.value.deploymentType),1),t("td",null,n(l.value.mciId),1),t("td",null,n(l.value.vmId),1)])])])])]),t("div",bs,[e[37]||(e[37]=t("h6",null,"Network & Service Information",-1)),t("div",Ns,[t("table",ys,[e[36]||(e[36]=t("thead",null,[t("tr",null,[t("th",null,"Namespace"),t("th",null,"Pod Status"),t("th",null,"Public IP"),t("th",null,"Service Port"),t("th",null,"VM ID"),t("th",null,"Catalog ID")])],-1)),t("tbody",null,[t("tr",null,[t("td",null,n(l.value.namespace),1),t("td",null,[t("span",{class:c(C(l.value.podStatus||l.value.applicationStatus))},n(U(l.value.podStatus||l.value.applicationStatus)),3)]),t("td",null,n(l.value.publicIp),1),t("td",null,n(l.value.servicePort||l.value.defaultPort),1),t("td",null,n(l.value.vmId),1),t("td",null,n(l.value.catalogName),1)])])])])]),l.value.deploymentType==="K8S"?(r(),o("div",Ss,[e[39]||(e[39]=t("h6",null,"Deployment Options",-1)),t("div",hs,[t("table",Es,[e[38]||(e[38]=t("thead",null,[t("tr",null,[t("th",null,"Resource Type"),t("th",null,"HPA"),t("th",null,"Rebalancing"),t("th",null,"Min Replicas"),t("th",null,"Max Replicas"),t("th",null,"CPU Threshold"),t("th",null,"Memory Threshold")])],-1)),t("tbody",null,[t("tr",null,[t("td",null,n(l.value.resourceType||"N/A"),1),t("td",null,[t("span",{class:c(l.value.hpaEnabled?"text-success":"text-muted")},n(l.value.hpaEnabled?"Enabled":"Disabled"),3)]),t("td",null,[t("span",{class:c(l.value.workloadRebalancingEnabled?"text-success":"text-muted")},n(l.value.workloadRebalancingEnabled?"Enabled":"Disabled"),3)]),t("td",null,n(l.value.minReplicas||"N/A"),1),t("td",null,n(l.value.maxReplicas||"N/A"),1),t("td",null,n(l.value.cpuThreshold?`${l.value.cpuThreshold}%`:"N/A"),1),t("td",null,n(l.value.memoryThreshold?`${l.value.memoryThreshold}%`:"N/A"),1)])])])])])):E("",!0),l.value.ingressEnabled?(r(),o("div",As,[e[41]||(e[41]=t("h6",null,"Ingress Information",-1)),t("div",_s,[t("table",Rs,[e[40]||(e[40]=t("thead",null,[t("tr",null,[t("th",null,"Enabled"),t("th",null,"Host"),t("th",null,"Path"),t("th",null,"Class"),t("th",null,"TLS Enabled"),t("th",null,"TLS Secret")])],-1)),t("tbody",null,[t("tr",null,[t("td",null,[t("span",{class:c(l.value.ingressEnabled?"text-success":"text-danger")},n(l.value.ingressEnabled?"Yes":"No"),3)]),t("td",null,n(l.value.ingressHost||"N/A"),1),t("td",null,n(l.value.ingressPath||"N/A"),1),t("td",null,n(l.value.ingressClass||"N/A"),1),t("td",null,[t("span",{class:c(l.value.ingressTlsEnabled?"text-success":"text-danger")},n(l.value.ingressTlsEnabled?"Yes":"No"),3)]),t("td",null,n(l.value.ingressTlsSecret||"N/A"),1)])])])])])):E("",!0)]),l.value.deploymentLogs&&l.value.deploymentLogs.length>0?(r(),o("div",Is,[e[44]||(e[44]=t("h6",{class:"text-primary"},"Deployment Logs",-1)),t("div",Ts,[t("table",fs,[e[43]||(e[43]=t("thead",null,[t("tr",null,[t("th",null,"Timestamp"),t("th",null,"Type"),t("th",null,"Message")])],-1)),t("tbody",null,[(r(!0),o(_,null,R(l.value.deploymentLogs,a=>(r(),o("tr",{key:a.id},[t("td",null,n(a.loggedAt),1),t("td",null,[t("span",{class:c(["me-4 mt-2",At(a.logType)])},n(a.logType),3)]),t("td",null,n(a.logMessage),1)]))),128))])])])])):E("",!0)])):(r(),o("div",Ps," No data available "))]),t("div",{class:"modal-footer"},[t("button",{type:"button",class:"btn btn-secondary","data-bs-dismiss":"modal",onClick:$},"Close")])])])],8,jt))}}),Os=kt(Ds,[["__scopeId","data-v-fc9d6a1a"]]);export{Os as A,Gt as I,ks as a,Wt as b,Kt as g,Gs as i}; diff --git a/src/main/resources/static/assets/applicationInstallationForm-B8kAVev5.js b/src/main/resources/static/assets/applicationInstallationForm-B8kAVev5.js new file mode 100644 index 00000000..d7ab96e5 --- /dev/null +++ b/src/main/resources/static/assets/applicationInstallationForm-B8kAVev5.js @@ -0,0 +1 @@ +import{d as vt,f as pt,q as mt,g as y,r as g,h as ne,i as ft,c as s,a as t,t as i,m,n as be,C as bt,e as re,j as c,v as z,F as T,k as R,z as Ye,l as j,A as ee,o}from"./index-8PPGy_cS.js";import{_ as le}from"./lodash-CprRz5WW.js";import{s as Je}from"./request-BD-3QCnG.js";import{m as gt,y as yt,z as It,A as kt,r as Nl,B as ht,C as St,D as Ct,E as Et,F as wt,G as Vt}from"./softwareCatalog-DfwfQXi9.js";import{_ as At}from"./_plugin-vue_export-helper-DlAUqK2U.js";const xl=["targetType","requestId","mciId","vmId","nodeGroupId","clusterId"],Tt=["namespace","namespaceId"],Ml=200,Nt=/[/?#]/,xt=v=>Nt.test(v)||Array.from(v).some(N=>{const f=N.charCodeAt(0);return f<=31||f===127}),Mt=(v,N)=>{const f=v.getAll(N);return f.length>1?{ok:!1,error:`Query parameter "${N}" must be provided only once.`}:{ok:!0,value:String(f[0]||"").trim()}},ge=(v,N,f=!1)=>N?N.length>Ml?`${v} must be ${Ml} characters or fewer.`:xt(N)?`${v} contains unsupported path characters.`:"":f?`${v} is required.`:"",qo=(v,N=()=>`am-install-${Date.now()}`)=>{const f=typeof v=="string"?new URLSearchParams(v.startsWith("?")?v.slice(1):v):v;for(const I of Tt)if(f.has(I))return{ok:!1,error:`${I} must not be supplied in the URL. Namespace comes from the selected Project context.`};for(const I of f.keys())if(!xl.includes(I))return{ok:!1,error:`Unsupported query parameter "${I}".`};const h={};for(const I of xl){const E=Mt(f,I);if(!E.ok)return E;h[I]=E.value}const d=h.targetType.toUpperCase();if(d!=="VM"&&d!=="K8S")return{ok:!1,error:"targetType must be VM or K8S."};const D=h.requestId||N(),b=[ge("requestId",D,!0),ge("mciId",h.mciId),ge("vmId",h.vmId),ge("nodeGroupId",h.nodeGroupId),ge("clusterId",h.clusterId)].filter(Boolean);if(b.length>0)return{ok:!1,error:b[0]};if(d==="VM"){const I=[ge("mciId",h.mciId,!0)].filter(Boolean);if(I.length>0)return{ok:!1,error:I[0]};if(!h.vmId&&!h.nodeGroupId)return{ok:!1,error:"vmId or nodeGroupId is required."};if(h.clusterId)return{ok:!1,error:"clusterId cannot be used with a VM target."}}if(d==="K8S"){const I=ge("clusterId",h.clusterId,!0);if(I)return{ok:!1,error:I};if(h.mciId||h.vmId)return{ok:!1,error:"mciId and vmId cannot be used with a K8S target."};if(h.nodeGroupId)return{ok:!1,error:"nodeGroupId cannot be used with a K8S target."}}return{ok:!0,target:{requestId:D,targetType:d,mciId:h.mciId,vmId:h.vmId,nodeGroupId:h.nodeGroupId,clusterId:h.clusterId}}},Rl=v=>String((v==null?void 0:v.id)||(v==null?void 0:v.name)||"").trim(),Rt=(v,N)=>{const f=String(N||"").trim().toLowerCase();return[v==null?void 0:v.id,v==null?void 0:v.name].map(h=>String(h||"").trim().toLowerCase()).filter(Boolean).includes(f)},Pt=(v,N)=>{const f=Array.isArray(v)?v:[],h=String((N==null?void 0:N.vmId)||"").trim(),d=String((N==null?void 0:N.nodeGroupId)||"").trim();if(h){const I=f.find(E=>Rt(E,h));return I?d&&String(I.subGroupId||"").trim()!==d?{ok:!1,error:`VM "${h}" does not belong to NodeGroup "${d}".`}:{ok:!0,mode:"VM",vm:I,vmId:Rl(I),nodeGroupId:d}:{ok:!1,error:`VM "${h}" was not found.`}}const D=f.filter(I=>String((I==null?void 0:I.subGroupId)||"").trim()===d);if(D.length===0)return{ok:!1,error:`NodeGroup "${d}" was not found.`};const b=Array.from(new Set(D.filter(I=>String((I==null?void 0:I.status)||"").trim().toUpperCase()==="RUNNING").map(Rl).filter(Boolean)));return b.length===0?{ok:!1,error:`NodeGroup "${d}" has no running VMs.`}:{ok:!0,mode:"NODE_GROUP",members:D,runningVmIds:b,nodeGroupId:d}},jt=()=>Je.get("/cbtumblebug/ns"),Ut=v=>Je.get(`/cbtumblebug/ns/${v}/infra`),Ot=v=>Je.get(`/cbtumblebug/ns/${v.nsId}/infra/${v.mciId}`),_t=v=>Je.get(`/cbtumblebug/ns/${v}/k8scluster`);function Lt(v){var d,D;const f=(D=String(((d=v==null?void 0:v.packageInfo)==null?void 0:d.packageName)||"").trim().toLowerCase().split("/").pop())==null?void 0:D.split(/[:@]/)[0];if(f!=="redis"&&f!=="elasticsearch")return!1;const h=String((v==null?void 0:v.name)||"").trim().toLowerCase();return new RegExp(`(^|[^a-z0-9])${f}([^a-z0-9]|$)`).test(h)&&!(f==="redis"&&h.includes("elasticsearch"))}const Dt=["id","tabindex"],Gt={class:"modal-content"},Kt={class:"modal-header"},$t={class:"modal-title"},Bt={key:0,class:"alert alert-info py-2",role:"status"},zt={key:1,class:"alert alert-warning py-2",role:"alert"},Ft={key:2,class:"alert alert-secondary py-2",role:"status"},Ht={class:"mb-3"},qt={key:0,class:"text-muted"},Yt={key:1,class:"text-muted"},Jt=["disabled"],Wt=["value"],Xt={class:"mb-3"},Zt={key:0,class:"text-muted"},Qt={key:1,class:"text-muted"},ea=["disabled"],la=["value"],ta={key:3,class:"form-select",id:"vm-namespace-empty",disabled:""},aa={class:"mb-3"},sa={key:0,class:"text-muted"},oa={key:1,class:"text-muted"},na=["disabled"],ra={key:0,value:""},ua=["value","title"],ia={key:0,class:"mb-3"},da={class:"d-flex gap-3"},ca={class:"form-check"},va={class:"form-check"},pa={key:1,class:"mb-3"},ma=["disabled"],fa=["value"],ba={key:0,class:"mt-2",style:{display:"flex",gap:"10px","flex-wrap":"wrap"}},ga=["onClick"],ya={key:2,class:"mb-3"},Ia=["disabled"],ka=["value","disabled"],ha={key:0,class:"mt-2"},Sa={class:"d-flex gap-2 flex-wrap"},Ca={key:1,class:"text-warning mt-2"},Ea={key:3,class:"mb-3"},wa={style:{display:"flex",gap:"10px"}},Va={class:"form-check"},Aa=["disabled"],Ta={key:0,class:"form-check"},Na=["disabled"],xa={key:0,class:"form-text"},Ma={key:4,class:"mb-3"},Ra={class:"mb-3"},Pa=["value"],ja={class:"mb-3"},Ua={key:5,class:"mb-3"},Oa={key:0,class:"mt-2"},_a={key:6,class:"mb-3"},La={key:7,class:"mb-3"},Da={class:"form-check mb-2"},Ga=["disabled"],Ka={key:0},$a={class:"d-flex align-items-center justify-content-between mb-2"},Ba=["disabled"],za={key:0,class:"text-muted"},Fa={key:1,class:"alert alert-danger py-2"},Ha={key:2,class:"alert alert-warning py-2"},qa={key:3,class:"border rounded p-2"},Ya=["id","value","disabled"],Ja=["for"],Wa={class:"text-muted"},Xa={class:"d-flex justify-content-between mt-2"},Za={class:"w-50 me-2"},Qa={class:"w-50 ms-2"},es={class:"mt-2"},ls={class:"text-muted mt-1 mb-0"},ts={class:"mb-0 ps-3"},as={class:"mb-3"},ss={key:0,class:"text-muted"},os={key:1,class:"text-muted"},ns=["disabled"],rs=["value"],us={key:3,class:"form-select",id:"k8s-namespace-empty",disabled:""},is={class:"mb-3"},ds={key:0,class:"text-muted"},cs={key:1,class:"text-muted"},vs=["disabled"],ps={key:0,value:""},ms=["value"],fs={class:"mb-3"},bs=["value"],gs={key:0,class:"mb-3"},ys=["disabled"],Is={key:1,class:"mb-3"},ks={key:2,class:"mb-3"},hs=["disabled"],Ss={value:"",disabled:""},Cs=["value"],Es={key:0,class:"text-danger mt-1 mb-0"},ws={key:3,class:"mb-3"},Vs={key:0,class:"form-check mt-2"},As={key:1,class:"text-muted mt-1"},Ts={key:2,class:"text-muted mt-1"},Ns={key:4,class:"mb-3"},xs={class:"mb-2"},Ms={class:"form-check"},Rs={key:0,class:"d-flex justify-content-between"},Ps={key:5,class:"mb-3"},js={class:"mb-2"},Us={class:"form-check"},Os={key:6,class:"mb-3"},_s={class:"mb-2"},Ls={class:"form-check"},Ds={key:0},Gs={class:"mb-2"},Ks={key:0,class:"text-muted mb-1"},$s={key:1,class:"text-muted mb-1"},Bs={key:2,class:"text-muted mb-1"},zs={class:"mb-2"},Fs={class:"mb-2"},Hs=["value"],qs={key:7,class:"mb-3"},Ys={class:"form-check mb-2"},Js=["disabled"],Ws={key:0},Xs={class:"d-flex align-items-center justify-content-between mb-2"},Zs=["disabled"],Qs={key:0,class:"text-muted"},eo={key:1,class:"alert alert-danger py-2"},lo={key:2,class:"alert alert-warning py-2"},to={key:3,class:"border rounded p-2"},ao=["id","value","disabled"],so=["for"],oo={class:"text-muted"},no={class:"d-flex justify-content-between mt-2"},ro={class:"w-50 me-2"},uo={class:"w-50 ms-2"},io={class:"mt-2"},co={class:"mb-0 ps-3"},vo={key:8,class:"mb-3"},po={class:"mb-2"},mo={class:"form-check"},fo=["disabled"],bo={key:0},go={class:"d-flex justify-content-between"},yo={class:"w-50 me-2"},Io=["value"],ko={class:"mt-2 mb-2"},ho=["placeholder"],So={class:"d-flex justify-content-between"},Co={class:"w-50 me-2"},Eo=["placeholder"],wo={class:"w-50 ms-2"},Vo={class:"d-flex justify-content-between mt-2"},Ao={class:"w-50 me-2"},To={class:"w-50 ms-2"},No={class:"d-flex gap-4 mt-3"},xo={class:"form-check"},Mo={class:"mb-0 ps-3"},Ro={key:0,class:"px-3","aria-live":"polite"},Po={class:"modal-footer d-flex justify-content-between"},jo=["data-bs-dismiss"],Uo=["disabled"],Oo=["disabled"],_o=["data-bs-dismiss","disabled"],Lo="object-storage",Do="storage-class",Go=vt({__name:"applicationInstallationForm",props:{nsId:{default:""},title:{default:"Application Installation"},embedded:{type:Boolean,default:!1},formId:{default:"install-form"},targetType:{default:""},targetMciId:{default:""},targetVmId:{default:""},targetNodeGroupId:{default:""},targetClusterId:{default:""}},emits:["ready","deployment-event","cancel"],setup(v,{emit:N}){const f=pt(),h=mt(),d=v,D=N,b=y(()=>d.title),I=y(()=>String(d.targetType||"").toUpperCase()),E=y(()=>d.embedded&&["VM","K8S"].includes(I.value)),ml=y(()=>E.value&&I.value==="VM"&&!!String(d.targetNodeGroupId||"").trim()&&!String(d.targetVmId||"").trim()),Pl=y(()=>{if(I.value!=="VM")return`Kubernetes cluster ${d.targetClusterId}`;if(ml.value)return`NodeGroup ${d.targetNodeGroupId} in ${d.targetMciId}`;const a=String(d.targetNodeGroupId||"").trim();return a?`VM ${d.targetVmId} in NodeGroup ${a} / ${d.targetMciId}`:`VM ${d.targetVmId} in ${d.targetMciId}`}),We=a=>(Array.isArray(a)?a:[a]).flatMap(l=>typeof l=="string"?l.split(","):[l]).map(l=>String((l==null?void 0:l.id)||(l==null?void 0:l.name)||l||"").trim()).filter(Boolean),ie=(...a)=>{for(const e of a){const l=We(e);if(l.length>0)return l[0]}return""},L=y(()=>h.projectInfo||{}),je=y(()=>h.workspaceInfo||{}),ye=y(()=>ie(L.value.ns_id,L.value.nsId)),Ue=y(()=>We(L.value.mci_ids??L.value.mciIds??L.value.mci_id??L.value.mciId)),Oe=y(()=>We(L.value.cluster_ids??L.value.clusterIds??L.value.cluster_id??L.value.clusterId)),Xe=y(()=>!!ie(L.value.id,L.value.name,ye.value)),fl=y(()=>Xe.value&&!!ye.value),bl=y(()=>{const a=ie(je.value.name,je.value.id),e=ie(L.value.name,L.value.id);return[a,e].filter(Boolean).join(" / ")||"the selected project"}),gl=y(()=>JSON.stringify([ie(je.value.id,je.value.name),ie(L.value.id,L.value.name),ye.value,Ue.value,Oe.value])),Ze=g([]),de=g([]),ue=g([]),F=g([]),H=g([]),Ie=g([]),p=g(""),k=g(""),U=g(""),G=g(""),w=g([]),P=g("VM"),O=g(""),x=g("Standalone"),V=g({}),Te=g(!1),S=g({}),n=g({}),M=g(null),Ne=g(!1),te=g([]),ce=g(!1),ke=g(!1),xe=g(!1),ve=g("GENERAL_PURPOSE"),ae=g([]),Y=g(""),he=g(!1),Se=g(!1),se=g([]),A=g(""),Z=g(""),J=g(""),pe=g("PRIVATE"),K=g(""),Qe=g(!0),W=g(!0),me=g(!1),Ce=g([]),Me=g([]);let Ee=0;const $=g(0),C=g("");let _=0;const we=a=>(a==null?void 0:a.id)||(a==null?void 0:a.name)||"",yl=a=>(a==null?void 0:a.id)||(a==null?void 0:a.name)||"",_e=a=>(a==null?void 0:a.id)||(a==null?void 0:a.name)||"",Le=a=>(a==null?void 0:a.name)||(a==null?void 0:a.id)||"",jl=a=>String((a==null?void 0:a.status)||"").trim().toUpperCase()==="RUNNING",el=y(()=>{const a=new Map;for(const e of H.value){const l=String((e==null?void 0:e.subGroupId)||"").trim();if(!l)continue;const u=a.get(l)||{id:l,totalVmCount:0,runningVmIds:[]};u.totalVmCount+=1;const r=_e(e);jl(e)&&r&&!u.runningVmIds.includes(r)&&u.runningVmIds.push(r),a.set(l,u)}return Array.from(a.values()).sort((e,l)=>e.id.localeCompare(l.id))}),ll=y(()=>{var a;return((a=el.value.find(e=>e.id===O.value))==null?void 0:a.runningVmIds)||[]}),Ve=(a,e)=>{if(e.length===0)return!0;const l=[a==null?void 0:a.id,a==null?void 0:a.name,a==null?void 0:a.uid].map(r=>String(r||"").trim().toLowerCase()).filter(Boolean),u=e.map(r=>r.toLowerCase());return l.some(r=>u.includes(r))},Il=()=>{de.value=[],ue.value=[],F.value=[],H.value=[],se.value=[],te.value=[],ke.value=!1,k.value="",U.value="",G.value="",w.value=[],O.value="",A.value="",C.value=""};ne([p,k,A,U,w,P,O,$,Y,S,K,gl,b],()=>{X()},{deep:!0,flush:"sync"}),ne(p,async a=>{le.isEmpty(k.value)||(a==="VM"?(P.value="VM",U.value="",G.value="",w.value=[],O.value="",F.value=[],H.value=[],await tl()):a==="K8S"&&(A.value="",await sl()),Z.value="",X())}),ne(n,()=>{M.value=null},{deep:!0}),ne(Y,()=>{X()}),ne(gl,async(a,e)=>{if(a===e)return;_+=1,Il(),Z.value="",$.value=0,hl();const l=document.getElementById(d.formId);(d.embedded||l!=null&&l.classList.contains("show"))&&await Re()}),ne(x,()=>{if(P.value==="NODE_GROUP"){x.value="Standalone";return}x.value==="Standalone"?(w.value=[],F.value=[...H.value]):x.value==="Clustering"&&(w.value=[],F.value=[...H.value])}),ne(P,a=>{G.value="",w.value=[],O.value=a==="NODE_GROUP"&&ml.value?String(d.targetNodeGroupId||"").trim():"",F.value=[...H.value],a==="NODE_GROUP"&&(x.value="Standalone"),X()}),ft(async()=>{if(d.embedded){try{if(await Re(),C.value){D("deployment-event",{status:"FORM_ERROR",message:C.value});return}await kl(),D("ready",{targetType:I.value,namespace:k.value})}catch{C.value=C.value||"The software catalog could not be loaded.",D("deployment-event",{status:"FORM_ERROR",message:"The installation form could not be initialized."})}return}const a=document.getElementById(d.formId);a&&a.addEventListener("show.bs.modal",async()=>{await Re(),await kl()})});const Re=async()=>{const a=++_;Il(),p.value=E.value?I.value:"VM",P.value="VM",O.value="",x.value="Standalone",V.value={hpaEnabled:!1,hpaMinReplicas:1,hpaMaxReplicas:10,hpaCpuUtilization:60,hpaMemoryUtilization:80},Te.value=!1,S.value={ingressEnabled:!1,ingressHost:"",ingressPath:"/",ingressClass:"nginx",ingressTlsEnabled:!1,ingressTlsSecret:""},n.value=He(),M.value=null,Ne.value=!1,te.value=[],ce.value=!1,ke.value=!1,ae.value=[],Y.value="",he.value=!1,Se.value=!1,ve.value="GENERAL_PURPOSE",J.value="",pe.value="PRIVATE",K.value="",Z.value="",$.value=0,Ol(),hl(),await _l(a)},Ul=a=>{let e=(a||"").trim();if(!e)return e;e=e.replace(/^[a-zA-Z][a-zA-Z0-9+.-]*:\/\//,"");const l=e.lastIndexOf("@");l>=0&&(e=e.slice(l+1));const u=e.search(/[/?#]/);u>=0&&(e=e.slice(0,u));const r=e.indexOf(":");return r>=0&&e.indexOf(":",r+1)<0&&(e=e.slice(0,r)),e.trim().toLowerCase()},kl=async()=>{await gt("").then(({data:a})=>{Ie.value=a})},Ol=()=>{if(E.value){Ze.value=[{key:I.value,value:I.value}];return}Ze.value=[{key:"VM",value:"VM"},{key:"k8s",value:"K8S"}]},hl=()=>{b.value==="Application Uninstallation"?W.value=!1:W.value=!0},_l=async(a=_)=>{try{const{data:e}=await jt();if(a!==_)return;const l=Array.isArray(e)?e:[];if(Xe.value){if(le.isEmpty(ye.value)){C.value=`Project "${bl.value}" has no namespace mapping.`;return}const u=l.find(r=>Ve(r,[ye.value]));if(!u){C.value=`Namespace "${ye.value}" assigned to this project was not found.`;return}de.value=[u],k.value=we(u)}else{de.value=l;const u=ie(d.nsId),q=(u?l.find(ct=>Ve(ct,[u])):void 0)||l[0];k.value=q?we(q):""}le.isEmpty(k.value)||(p.value==="VM"?await tl(a):p.value==="K8S"&&await sl(a))}catch{if(a!==_)return;C.value="Namespaces could not be loaded for the selected project."}},tl=async(a=_)=>{C.value="";try{const{data:e}=await Ut(k.value);if(a!==_)return;const u=(Array.isArray(e)?e:[]).filter(r=>Ve(r,Ue.value));if(E.value&&I.value==="VM"){const r=u.find(q=>Ve(q,[d.targetMciId]));if(!r){ue.value=[],U.value="",C.value=`Infra "${d.targetMciId}" was not found in the selected project namespace.`;return}ue.value=[r],U.value=yl(r),await al(a);return}ue.value=u,ue.value.length>0?(U.value=yl(ue.value[0]),await al(a)):(U.value="",C.value=Ue.value.length>0?`Infra "${Ue.value.join(", ")}" assigned to this project was not found.`:"No VM infrastructure is available in this project.")}catch{if(a!==_)return;C.value="VM infrastructure could not be loaded for the selected project."}},al=async(a=_)=>{const e={nsId:k.value,mciId:U.value};try{const{data:l}=await Ot(e);if(a!==_)return;const u=Array.isArray(l==null?void 0:l.node)?l.node:[];if(E.value&&I.value==="VM"){const r=Pt(u,{vmId:d.targetVmId,nodeGroupId:d.targetNodeGroupId});if(!r.ok){H.value=[],F.value=[],G.value="",w.value=[],O.value="",C.value=`${r.error} Infra: "${d.targetMciId}".`;return}if(r.mode==="NODE_GROUP"){H.value=r.members,F.value=[...r.members],P.value="NODE_GROUP",O.value=r.nodeGroupId,x.value="Standalone",G.value="",w.value=[];return}H.value=[r.vm],F.value=[r.vm],P.value="VM",G.value=r.vmId,w.value=[r.vmId];return}H.value=u,F.value=H.value.filter(r=>!w.value.includes(r.id)),G.value="",el.value.some(r=>r.id===O.value)||(O.value=""),F.value.length===0&&(C.value="No VM is available in the infrastructure assigned to this project.")}catch{if(a!==_)return;C.value="VMs could not be loaded for the selected project."}},sl=async(a=_)=>{C.value="";try{const{data:e}=await _t(k.value);if(a!==_)return;const u=(Array.isArray(e)?e:[]).filter(r=>Ve(r,Oe.value));if(E.value&&I.value==="K8S"){const r=u.find(q=>Ve(q,[d.targetClusterId]));if(!r){se.value=[],A.value="",C.value=`Cluster "${d.targetClusterId}" was not found in the selected project namespace.`;return}se.value=[r],A.value=Le(r)}else se.value=u,se.value.length>0?A.value=Le(se.value[0]):(A.value="",C.value=Oe.value.length>0?`Cluster "${Oe.value.join(", ")}" assigned to this project was not found.`:"No Kubernetes cluster is available in this project.");p.value==="K8S"&&B.value&&(S.value.ingressEnabled=!0,V.value.hpaEnabled=!1,V.value.hpaMinReplicas=1),n.value=He(),M.value=null,await ol()}catch{if(a!==_)return;C.value="Kubernetes clusters could not be loaded for the selected project."}},De=async()=>{if(te.value=[],ke.value=!1,!(!["VM","K8S"].includes(p.value)||!B.value||le.isEmpty(k.value))){ce.value=!0;try{const{data:a}=await It(k.value);te.value=Array.isArray(a)?a:[];const e=te.value.filter(l=>String(l.status||"").toLowerCase()==="available").map(l=>l.id);n.value.selectedStorageIds=(n.value.selectedStorageIds||[]).filter(l=>e.includes(l)),n.value.selectedStorageIds.length===0&&e.length===1&&(n.value.selectedStorageIds=[e[0]])}catch{ke.value=!0}finally{ce.value=!1}}},ol=async()=>{if(ae.value=[],Y.value="",Se.value=!1,!(p.value!=="K8S"||!ul.value||le.isEmpty(k.value)||le.isEmpty(A.value))){he.value=!0;try{const{data:a}=await yt({namespace:k.value,clusterName:A.value});ae.value=Array.isArray(a)?a:[],Y.value=Ll(ae.value)}catch{Se.value=!0,Y.value=""}finally{he.value=!1}}},Ll=a=>{var l;const e=a.find(u=>u.defaultClass);return(e==null?void 0:e.name)||((l=a[0])==null?void 0:l.name)||""},Dl=async()=>{w.value=[],await tl(_),await De(),X()},Gl=async()=>{w.value=[],O.value="",C.value="",await al(_),X()},Kl=async()=>{await sl(_),X()},X=()=>{Ee+=1,Ce.value=[],Me.value=[],b.value==="Application Installation"?W.value=!0:b.value==="Application Uninstallation"&&(W.value=!1)},$l=()=>{if(G.value!==""){if(x.value==="Standalone")w.value=[G.value];else if(x.value==="Clustering"&&!w.value.includes(G.value)){w.value.push(G.value);const a=F.value.findIndex(e=>e.id===G.value);a!==-1&&F.value.splice(a,1)}G.value="",X()}},Bl=()=>{w.value=[],x.value="Standalone",X()},zl=a=>{if(E.value)return;const e=w.value[a];if(w.value.splice(a,1),x.value==="Clustering"){const l=H.value.find(u=>u.id===e);l&&F.value.push(l)}X()},Fl=async()=>{xe.value||(D("cancel"),await Re())},Hl=()=>p.value==="VM"?P.value==="NODE_GROUP"?{targetType:"VM",namespace:k.value,mciId:U.value,nodeGroupId:O.value}:{targetType:"VM",namespace:k.value,mciId:U.value,vmId:w.value[0]||"",...E.value&&d.targetNodeGroupId?{nodeGroupId:d.targetNodeGroupId}:{}}:{targetType:"K8S",namespace:k.value,clusterId:A.value},Ge=(a,e={})=>{D("deployment-event",{status:a,target:Hl(),...e})},ql=a=>{if(!(!a||typeof a!="object"))return a.deploymentId||a.applicationId||a.id||void 0},Yl=async()=>{if(b.value==="Application Installation"&&p.value==="VM"&&x.value==="Clustering"&&!nl.value){f.error("Clustering is available only for Redis and Elasticsearch on individually selected VMs");return}if(b.value==="Application Installation"&&(W.value||me.value)){f.error("Please complete Spec Check for the current settings before deploying");return}if(C.value){f.error(C.value);return}if(p.value!=="VM"&&p.value!=="K8S"){f.error("Please Select Infra");return}if(p.value==="VM"&&b.value==="Application Installation"&&pe.value==="RESTRICTED"&&(!K.value||K.value==="0.0.0.0/0")){f.error("Enter a restricted IPv4 CIDR such as 203.0.113.10/32");return}if(p.value==="K8S"&&b.value==="Application Installation"&&S.value.ingressEnabled&&(!K.value||K.value==="0.0.0.0/0")){f.error("Enter a restricted IPv4 CIDR for external access");return}if(p.value==="K8S"&&B.value){if(!S.value.ingressEnabled||!S.value.ingressHost||!K.value||K.value==="0.0.0.0/0"){f.error("Enter an Ingress hostname and a restricted IPv4 CIDR for Jupyter");return}if(S.value.ingressPath!=="/"||S.value.ingressTlsEnabled||V.value.hpaEnabled||Te.value){f.error("Jupyter uses one replica, path / and HTTP NodePort 30880 without HPA or rebalancing");return}}if(B.value){if((n.value.selectedStorageIds||[]).length===0){f.error("Select at least one registered Object Storage resource");return}if(String(n.value.jupyterToken||"").length<12){f.error("Enter a Jupyter access token with at least 12 characters");return}if(!dl.value){f.error("Run the Object Storage check before deployment");return}}if(!(p.value==="K8S"&&!Vl())){xe.value=!0,Ge("DEPLOY_STARTED");try{let a={};if(p.value==="VM"){let e={};if(b.value=="Application Installation"){const l=P.value==="NODE_GROUP",u=!l&&x.value==="Clustering"?`${Z.value}-cluster`:`${Z.value}-standalone`,r=J.value===""?void 0:Number(J.value);e={namespace:k.value,mciId:U.value,vmIds:l?[]:w.value,vmNodeGroupId:l?O.value:E.value&&d.targetNodeGroupId?d.targetNodeGroupId:void 0,clusterName:u,catalogId:$.value,servicePort:r,openServicePort:pe.value==="RESTRICTED",servicePortCidr:pe.value==="RESTRICTED"?K.value:void 0,username:"admin",deploymentType:p.value,vmDeploymentMode:l?"STANDALONE":x.value.toUpperCase(),resourceType:ve.value,additionalConfig:nt()},a=await kt(e)}else a=await Nl(e)}else{const e=J.value===""?void 0:Number(J.value),l=rt(),u={namespace:k.value,clusterName:A.value,openServicePort:S.value.ingressEnabled&&!oe.value&&Qe.value,servicePortCidr:S.value.ingressEnabled?K.value:void 0,catalogId:$.value,servicePort:e,username:"",deploymentType:p.value,hpaEnabled:V.value.hpaEnabled,minReplicas:V.value.hpaMinReplicas,maxReplicas:V.value.hpaMaxReplicas,cpuThreshold:V.value.hpaCpuUtilization,memoryThreshold:V.value.hpaMemoryUtilization,workloadRebalancingEnabled:Te.value,resourceType:ve.value,...Sl(),additionalConfig:l};a=b.value=="Application Installation"?await ht(u):await Nl(u)}a.data?(f.success("SUCCESS"),Ge("DEPLOY_SUCCEEDED",{deploymentId:ql(a.data)})):(f.error("FAIL"),Ge("DEPLOY_FAILED",{message:"The deployment API did not return a success result."}))}catch{f.error("FAIL"),Ge("DEPLOY_FAILED",{message:"The deployment request failed."})}finally{xe.value=!1}}},Sl=()=>({ingressEnabled:S.value.ingressEnabled,ingressHost:Ul(S.value.ingressHost),ingressPath:S.value.ingressPath,ingressClass:El.value,ingressTlsEnabled:oe.value?!0:S.value.ingressTlsEnabled,ingressTlsSecret:oe.value||S.value.ingressTlsSecret===""?null:S.value.ingressTlsSecret}),Jl=async()=>{if(me.value)return;if(C.value){f.error(C.value);return}if(p.value!=="VM"&&p.value!=="K8S"){f.error("Please Select Infra");return}if(!Vl())return;const a=Ee;W.value=!0,Ce.value=[],Me.value=[],me.value=!0;try{if(p.value==="K8S"){if(!k.value||!A.value||!$.value){f.error("Please select all items");return}const{data:l}=await St({namespace:k.value,clusterName:A.value,catalogId:$.value,servicePortCidr:K.value,...Sl()});if(a!==Ee)return;if(Me.value=Array.isArray(l==null?void 0:l.warnings)?l.warnings:[],(l==null?void 0:l.valid)!==!0){Ce.value=Array.isArray(l==null?void 0:l.errors)&&l.errors.length?l.errors:["Ingress check failed. Resolve the issue and retry Spec Check."];return}}const e=await Wl();if(a!==Ee)return;if(e==null){f.error("Please select all items");return}if(e===!1){const l=p.value==="VM"?"VM":"CLUSTER";if(!confirm("Your selected "+l+" has lower specifications than recommended. Would you like to continue with the installation?"))return}if(a!==Ee)return;f.success("Please click Deploy"),W.value=!1}catch{a===Ee&&(Ce.value=["Spec Check could not be completed. Check connectivity and permissions, then retry."])}finally{me.value=!1}},Wl=async()=>{let a=!1;if(p.value==="VM"){const e=P.value==="NODE_GROUP"?ll.value:w.value;if(k.value===""||U.value===""||P.value==="NODE_GROUP"&&O.value===""||e.length===0||$.value===0)return null;{const l=P.value==="NODE_GROUP"?e:[e[0]];a=!0;for(const u of l){const r={namespace:k.value,mciName:U.value,vmName:u,catalogId:$.value},{data:q}=await Ct(r);if(!q){a=!1;break}}}}else if(p.value==="K8S"){if(k.value===""||A.value===""||$.value===0)return null;const e={namespace:k.value,clusterName:A.value,catalogId:$.value};await Et(e).then(({data:l})=>{a=l})}return a},Q=y(()=>Ie.value.find(a=>a.id===$.value)),nl=y(()=>p.value==="VM"&&P.value==="VM"&&!E.value&&Lt(Q.value));ne(nl,a=>{!a&&x.value==="Clustering"&&(x.value="Standalone")},{flush:"sync"});const Cl=y(()=>{var e;const a=se.value.find(l=>l.id===A.value||l.name===A.value);return((e=a==null?void 0:a.connectionConfig)==null?void 0:e.providerName)||(a==null?void 0:a.connectionName)||""}),oe=y(()=>/^(ibm|ibmcloud|ibm-cloud|ibm-vpc|ibmvpc)(-|$)/i.test(Cl.value)),El=y(()=>oe.value?"public-iks-k8s-nginx":"nginx"),Xl=y(()=>{var l;const a=w.value[0],e=H.value.find(u=>_e(u)===a);return((l=e==null?void 0:e.connectionConfig)==null?void 0:l.providerName)||(e==null?void 0:e.connectionName)||""}),Ke=y(()=>p.value==="VM"?Xl.value:Cl.value),$e=g([]),Be=g([]),Pe=g(!1);let ze=0;ne([p,k,A,$,oe,()=>S.value.ingressEnabled],async()=>{const a=++ze;if($e.value=[],Be.value=[],Pe.value=!1,!(!oe.value||p.value!=="K8S"||!k.value||!A.value||!S.value.ingressEnabled)){Pe.value=!0,X();try{const{data:e}=await Vt({namespace:k.value,clusterName:A.value});if(a!==ze)return;if((e==null?void 0:e.managedTls)!==!0)throw new Error("Invalid IBM HTTPS discovery response");$e.value=Array.isArray(e.customDomains)?e.customDomains:[],Be.value=Array.isArray(e.warnings)?e.warnings:[]}catch{if(a!==ze)return;Be.value=["Cannot load IBM HTTPS settings. Check cluster access and retry, or ask your administrator."]}finally{a===ze&&(Pe.value=!1)}}},{flush:"post"});const Zl=y(()=>{var a,e;return String(((e=(a=Q.value)==null?void 0:a.helmChart)==null?void 0:e.chartName)||"").toLowerCase()}),Ql=["CAPABILITY","TAG"],rl=y(()=>Zl.value==="loki"),B=y(()=>{var e,l;return String(((l=(e=Q.value)==null?void 0:e.packageInfo)==null?void 0:l.packageName)||"").toLowerCase().includes("jupyter")&&vl(Q.value)}),ul=y(()=>{var a;return p.value!=="K8S"?!1:B.value?!0:!((a=Q.value)!=null&&a.helmChart)||!rl.value?!1:wl(Q.value,Do)}),fe=y(()=>ul.value&&(rl.value||B.value)),et=y(()=>ul.value&&b.value==="Application Installation"&&(fe.value||ae.value.length>0||Se.value)),lt=y(()=>he.value||ae.value.length<=1),tt=y(()=>he.value?"Loading StorageClasses...":Se.value?"Failed to load StorageClasses":ae.value.length===0?"No StorageClass found":"Select StorageClass"),Fe=y(()=>fe.value?he.value?"StorageClass list is loading.":Se.value?"StorageClass list could not be loaded.":ae.value.length===0?"This application requires a StorageClass, but none was found.":le.isEmpty(Y.value)?"This application requires a StorageClass.":"":""),at=y(()=>cl(Ke.value)?"Optional: https://s3.ap-northeast-2.amazonaws.com":"https://object-storage.example.com"),st=y(()=>cl(Ke.value)?"ap-northeast-2":"region from object storage service"),Ae=y(()=>!Q.value||!vl(Q.value)?!1:p.value==="VM"?!!Q.value.packageInfo&&B.value:p.value==="K8S"?!!Q.value.helmChart||B.value:!1),il=y(()=>Ae.value&&n.value.enabled),dl=y(()=>{var a;return!il.value||((a=M.value)==null?void 0:a.success)===!0}),ot=y(()=>xe.value||me.value||!!C.value||W.value||!dl.value||fe.value&&!le.isEmpty(Fe.value));function He(a=Ke.value,e=qe.value){const l=cl(a);return{enabled:!!e,selectedStorageIds:[],accessMode:"READ_ONLY",backendType:"s3",endpoint:"",region:"",bucket:"",prefix:"",accessKey:"",secretKey:"",sessionToken:"",jupyterToken:"",forcePathStyle:!l}}function cl(a){return String(a||"").toLowerCase().includes("aws")}const qe=y(()=>p.value==="K8S"&&rl.value||B.value);function vl(a){return wl(a,Lo)}function wl(a,e){return(a.catalogRefs||[]).some(u=>{const r=String(u.refType||"").toUpperCase();return String(u.refValue||"").toLowerCase()===e&&Ql.includes(r)})}function pl(){if(p.value==="VM"||B.value){const a=n.value.selectedStorageIds||[];return{enabled:n.value.enabled,jupyterToken:n.value.jupyterToken,storages:a.map(e=>({objectStorageId:e,alias:e,prefix:n.value.prefix,accessMode:n.value.accessMode}))}}return{enabled:n.value.enabled,backendType:n.value.backendType,endpoint:n.value.endpoint,region:n.value.region,bucket:n.value.bucket,prefix:n.value.prefix,accessKey:n.value.accessKey,secretKey:n.value.secretKey,sessionToken:n.value.sessionToken,jupyterToken:n.value.jupyterToken,forcePathStyle:n.value.forcePathStyle,insecure:ut(n.value.endpoint)}}function nt(){if(!(!Ae.value||!n.value.enabled))return{objectStorage:pl()}}function rt(){const a={};return fe.value&&!le.isEmpty(Y.value)&&(a.storageClass=Y.value),Ae.value&&n.value.enabled&&(a.objectStorage=pl()),Object.keys(a).length>0?a:void 0}function Vl(){if(!fe.value)return!0;const a=Fe.value;return le.isEmpty(a)?!0:(f.error(a),!1)}function ut(a){return String(a||"").trim().toLowerCase().startsWith("http://")}const it=async(a=!0)=>{if(!il.value)return!0;Ne.value=!0,M.value=null;const e={targetType:p.value,namespace:k.value,clusterName:p.value==="K8S"?A.value:void 0,mciId:p.value==="VM"?U.value:void 0,vmId:p.value==="VM"?w.value[0]:void 0,catalogId:$.value,objectStorage:pl()};try{const{data:l}=await wt(e);return M.value=l,l!=null&&l.success?(a&&f.success("Object Storage check succeeded"),!0):(a&&f.error("Object Storage check failed"),!1)}catch{return a&&f.error("Object Storage check failed"),!1}finally{Ne.value=!1}},Al=y(()=>p.value==="VM"?Ie.value.filter(a=>a.packageInfo):p.value==="K8S"?Ie.value.filter(a=>{var e;return a.helmChart||String(((e=a.packageInfo)==null?void 0:e.packageName)||"").toLowerCase().includes("jupyter")&&vl(a)}):Ie.value),Tl=async()=>{b.value==="Application Installation"&&(W.value=!0);const a=Ie.value.find(e=>Z.value===e.name);a&&($.value=a.id,J.value=p.value==="K8S"&&B.value?"8888":a.defaultPort?String(a.defaultPort):"",V.value={hpaEnabled:!!a.hpaEnabled,hpaMinReplicas:a.minReplicas||1,hpaMaxReplicas:a.maxReplicas||10,hpaCpuUtilization:a.cpuThreshold||60,hpaMemoryUtilization:a.memoryThreshold||80},S.value={ingressEnabled:!!a.ingressEnabled,ingressHost:a.ingressHost||"",ingressPath:a.ingressPath||"/",ingressClass:a.ingressClass||"nginx",ingressTlsEnabled:!!a.ingressTlsEnabled,ingressTlsSecret:a.ingressTlsSecret||""},p.value==="K8S"&&B.value&&(S.value.ingressEnabled=!0,V.value.hpaEnabled=!1,V.value.hpaMinReplicas=1),n.value=He(),M.value=null),await De(),await ol()},dt=async()=>{b.value==="Application Installation"&&(W.value=!0),n.value=He(),M.value=null,await ol()};return(a,e)=>(o(),s("div",{class:be(a.embedded?"install-embedded":"modal fade"),id:a.formId,tabindex:a.embedded?void 0:-1},[t("div",{class:be(["modal-dialog modal-lg",{"install-embedded-dialog":a.embedded}]),role:"document"},[t("div",Gt,[t("div",Kt,[t("h5",$t,i(b.value),1),a.embedded?m("",!0):(o(),s("button",{key:0,type:"button",class:"btn-close","data-bs-dismiss":"modal","aria-label":"Close",onClick:Re}))]),t("div",{class:be(["modal-body",{"install-embedded-body":a.embedded}]),style:bt(a.embedded?void 0:"max-height: calc(100vh - 200px);overflow-y: auto;")},[Xe.value?(o(),s("div",Bt,[e[49]||(e[49]=re(" Deployment targets are scoped to ")),t("strong",null,i(bl.value),1),e[50]||(e[50]=re(". "))])):m("",!0),C.value?(o(),s("div",zt,i(C.value),1)):m("",!0),E.value?(o(),s("div",Ft,[e[51]||(e[51]=re(" The deployment target was fixed by the Workload screen: ")),t("strong",null,i(Pl.value),1),e[52]||(e[52]=re(". "))])):m("",!0),t("div",Ht,[e[53]||(e[53]=t("label",{class:"form-label"},"Target Infra",-1)),b.value=="Application Installation"?(o(),s("p",qt," Select the Infra what is the Infra will be installed ")):b.value=="Application Uninstallation"?(o(),s("p",Yt," Select the Infra what is the Infra will be uninstalled ")):m("",!0),c(t("select",{class:"form-select",id:"infra","onUpdate:modelValue":e[0]||(e[0]=l=>p.value=l),disabled:E.value},[(o(!0),s(T,null,R(Ze.value,l=>(o(),s("option",{value:l.value,key:l.value},i(l.value),9,Wt))),128))],8,Jt),[[z,p.value]])]),p.value=="VM"?(o(),s(T,{key:3},[t("div",Xt,[e[55]||(e[55]=t("label",{class:"form-label"},"Namespace",-1)),b.value=="Application Installation"?(o(),s("p",Zt," Select the namespace where the application will be installed")):b.value=="Application Uninstallation"?(o(),s("p",Qt," Select the namespace where the application will be uninstalled")):m("",!0),de.value.length>0?c((o(),s("select",{key:2,class:"form-select",id:"vm-namespace","onUpdate:modelValue":e[1]||(e[1]=l=>k.value=l),disabled:fl.value,onChange:Dl},[(o(!0),s(T,null,R(de.value,l=>(o(),s("option",{value:we(l),key:we(l)},i(l.name||l.id),9,la))),128))],40,ea)),[[z,k.value]]):(o(),s("select",ta,e[54]||(e[54]=[t("option",{value:""}," No namespace available ",-1)])))]),t("div",aa,[e[56]||(e[56]=t("label",{class:"form-label"},"Infra ID",-1)),b.value=="Application Installation"?(o(),s("p",sa," Select the infra ID where the application will be deployed")):b.value=="Application Uninstallation"?(o(),s("p",oa," Remove the application and associated resources from the infra")):m("",!0),c(t("select",{class:"form-select",id:"vm-mci",disabled:k.value==""||E.value,"onUpdate:modelValue":e[2]||(e[2]=l=>U.value=l),onChange:Gl},[ue.value.length===0?(o(),s("option",ra,"No infra available")):m("",!0),(o(!0),s(T,null,R(ue.value,l=>(o(),s("option",{value:l.id||l.name,key:l.id||l.name,title:l.id||l.name},i(l.id||l.name),9,ua))),128))],40,na),[[z,U.value]])]),b.value=="Application Installation"&&!E.value?(o(),s("div",ia,[e[59]||(e[59]=t("label",{class:"form-label"},"Deployment Target",-1)),e[60]||(e[60]=t("p",{class:"text-muted"},"Choose one VM or one CB-Tumblebug NodeGroup.",-1)),t("div",da,[t("div",ca,[c(t("input",{class:"form-check-input",type:"radio",id:"vm-target-single","onUpdate:modelValue":e[3]||(e[3]=l=>P.value=l),value:"VM"},null,512),[[Ye,P.value]]),e[57]||(e[57]=t("label",{class:"form-check-label",for:"vm-target-single"},"VM",-1))]),t("div",va,[c(t("input",{class:"form-check-input",type:"radio",id:"vm-target-node-group","onUpdate:modelValue":e[4]||(e[4]=l=>P.value=l),value:"NODE_GROUP"},null,512),[[Ye,P.value]]),e[58]||(e[58]=t("label",{class:"form-check-label",for:"vm-target-node-group"},"NodeGroup (Standalone)",-1))])])])):m("",!0),P.value==="VM"?(o(),s("div",pa,[e[62]||(e[62]=t("label",{class:"form-label"},"VM Name",-1)),e[63]||(e[63]=t("p",{class:"text-muted"}," Select the virtual machine (VM) within the chosen multi-cloud infrastructure where the application will be deployed",-1)),c(t("select",{class:"form-select",id:"vm-name",disabled:U.value==""||E.value,"onUpdate:modelValue":e[5]||(e[5]=l=>G.value=l),onChange:$l},[e[61]||(e[61]=t("option",{value:""},"Select VM",-1)),(o(!0),s(T,null,R(F.value,l=>(o(),s("option",{value:_e(l),key:_e(l)},i(l.name||l.id),9,fa))),128))],40,ma),[[z,G.value]]),w.value.length>0?(o(),s("div",ba,[(o(!0),s(T,null,R(w.value,(l,u)=>(o(),s("label",{key:u,class:"form-check-label",style:{border:"1px solid #000",padding:"5px","border-radius":"5px",cursor:"pointer"}},[re(i(l)+" ",1),E.value?m("",!0):(o(),s("span",{key:0,onClick:r=>zl(u),style:{"margin-left":"5px","font-weight":"bold"}},"X",8,ga))]))),128))])):m("",!0)])):(o(),s("div",ya,[e[66]||(e[66]=t("label",{class:"form-label"},"NodeGroup",-1)),e[67]||(e[67]=t("p",{class:"text-muted"}," Deploy one independent application instance to every currently running VM in the selected NodeGroup. ",-1)),c(t("select",{class:"form-select",id:"vm-node-group",disabled:U.value==""||E.value,"onUpdate:modelValue":e[6]||(e[6]=l=>O.value=l),onChange:Bl},[e[64]||(e[64]=t("option",{value:""},"Select NodeGroup",-1)),(o(!0),s(T,null,R(el.value,l=>(o(),s("option",{key:l.id,value:l.id,disabled:l.runningVmIds.length===0},i(l.id)+" ("+i(l.runningVmIds.length)+"/"+i(l.totalVmCount)+" running) ",9,ka))),128))],40,Ia),[[z,O.value]]),O.value&&ll.value.length>0?(o(),s("div",ha,[e[65]||(e[65]=t("div",{class:"text-muted small mb-1"},"Deployment targets",-1)),t("div",Sa,[(o(!0),s(T,null,R(ll.value,l=>(o(),s("span",{key:l,class:"badge bg-light text-dark"},i(l),1))),128))])])):O.value?(o(),s("div",Ca," The selected NodeGroup has no running VMs. ")):m("",!0)])),P.value==="VM"?(o(),s("div",Ea,[e[70]||(e[70]=t("label",{class:"form-label"},"Deployment Type",-1)),e[71]||(e[71]=t("p",{class:"text-muted"},"Select the deployment type",-1)),t("div",wa,[t("div",Va,[c(t("input",{class:"form-check-input",type:"radio",id:"Standalone","onUpdate:modelValue":e[7]||(e[7]=l=>x.value=l),value:"Standalone",disabled:E.value},null,8,Aa),[[Ye,x.value]]),e[68]||(e[68]=t("label",{class:"form-check-label",for:"Standalone"},"Standalone",-1))]),nl.value?(o(),s("div",Ta,[c(t("input",{class:"form-check-input",type:"radio",id:"Clustering","onUpdate:modelValue":e[8]||(e[8]=l=>x.value=l),value:"Clustering",disabled:E.value},null,8,Na),[[Ye,x.value]]),e[69]||(e[69]=t("label",{class:"form-check-label",for:"Clustering"},"Clustering",-1))])):m("",!0)]),E.value?m("",!0):(o(),s("div",xa,"Clustering is available only for Redis and Elasticsearch server catalogs."))])):(o(),s("div",Ma,e[72]||(e[72]=[t("label",{class:"form-label"},"Deployment Type",-1),t("input",{type:"text",class:"form-control",value:"Standalone",disabled:""},null,-1),t("div",{class:"form-text"},"NodeGroup deployment does not use application clustering.",-1)]))),t("div",Ra,[e[73]||(e[73]=t("label",{class:"form-label"},"Application",-1)),e[74]||(e[74]=t("p",{class:"text-muted"},"Select the application",-1)),c(t("select",{class:"form-select","onUpdate:modelValue":e[9]||(e[9]=l=>Z.value=l),onChange:Tl},[(o(!0),s(T,null,R(Al.value,(l,u)=>{var r;return o(),s("option",{key:u,value:l.name}," ["+i(l.name)+"] "+i(((r=l.packageInfo)==null?void 0:r.packageVersion)||"latest"),9,Pa)}),128))],544),[[z,Z.value]])]),t("div",ja,[e[75]||(e[75]=t("label",{class:"form-label"},"Port",-1)),e[76]||(e[76]=t("p",{class:"text-muted"},"Docker host port. Security Group access is configured separately below.",-1)),c(t("input",{type:"number",class:"form-control",placeholder:"8080","onUpdate:modelValue":e[10]||(e[10]=l=>J.value=l)},null,512),[[j,J.value]])]),b.value=="Application Installation"?(o(),s("div",Ua,[e[80]||(e[80]=t("label",{class:"form-label"},"Network Exposure",-1)),c(t("select",{class:"form-select","onUpdate:modelValue":e[11]||(e[11]=l=>pe.value=l)},e[77]||(e[77]=[t("option",{value:"PRIVATE"},"Do not change Security Group (recommended)",-1),t("option",{value:"RESTRICTED"},"Add restricted direct access",-1)]),512),[[z,pe.value]]),e[81]||(e[81]=t("p",{class:"text-muted mt-1 mb-0"}," Direct access appends one inbound TCP rule through Tumblebug. It never resaves existing rules. ",-1)),pe.value==="RESTRICTED"?(o(),s("div",Oa,[e[78]||(e[78]=t("label",{class:"form-label required"},"Allowed IPv4 CIDR",-1)),c(t("input",{type:"text",class:"form-control",placeholder:"203.0.113.10/32","onUpdate:modelValue":e[12]||(e[12]=l=>K.value=l)},null,512),[[j,K.value,void 0,{trim:!0}]]),e[79]||(e[79]=t("p",{class:"text-warning mt-1 mb-0"}," Public any (0.0.0.0/0) is rejected. Broader rules already present in the Security Group are not removed. ",-1))])):m("",!0)])):m("",!0),b.value=="Application Installation"?(o(),s("div",_a,[e[83]||(e[83]=t("label",{class:"form-label"},"Resource Type",-1)),c(t("select",{class:"form-select","onUpdate:modelValue":e[13]||(e[13]=l=>ve.value=l)},e[82]||(e[82]=[t("option",{value:"GENERAL_PURPOSE"},"General Purpose",-1),t("option",{value:"CPU_INTENSIVE"},"CPU Intensive",-1),t("option",{value:"MEMORY_INTENSIVE"},"Memory Intensive",-1)]),512),[[z,ve.value]])])):m("",!0),b.value=="Application Installation"&&Ae.value?(o(),s("div",La,[e[91]||(e[91]=t("label",{class:"form-label"},"Object Storage Configuration",-1)),e[92]||(e[92]=t("p",{class:"text-muted"}," Select Object Storage resources already registered in Tumblebug. CSP access keys are not sent to JupyterLab. ",-1)),t("div",Da,[c(t("input",{class:"form-check-input",type:"checkbox",id:"vmObjectStorageEnabled","onUpdate:modelValue":e[14]||(e[14]=l=>n.value.enabled=l),disabled:qe.value},null,8,Ga),[[ee,n.value.enabled]]),e[84]||(e[84]=t("label",{class:"form-check-label",for:"vmObjectStorageEnabled"},"Enable Object Storage",-1))]),n.value.enabled?(o(),s("div",Ka,[t("div",$a,[e[85]||(e[85]=t("label",{class:"form-label mb-0 required"},"Registered Object Storage",-1)),t("button",{type:"button",class:"btn btn-sm btn-outline-secondary",disabled:ce.value,onClick:De}," Refresh ",8,Ba)]),ce.value?(o(),s("div",za,"Loading Object Storage resources...")):ke.value?(o(),s("div",Fa," Object Storage resources could not be loaded from Tumblebug. ")):te.value.length===0?(o(),s("div",Ha," No Object Storage resource is registered in this namespace. ")):(o(),s("div",qa,[(o(!0),s(T,null,R(te.value,l=>(o(),s("div",{class:"form-check",key:l.id},[c(t("input",{class:"form-check-input",type:"checkbox",id:`vm-object-storage-${l.id}`,value:l.id,disabled:String(l.status||"").toLowerCase()!=="available","onUpdate:modelValue":e[15]||(e[15]=u=>n.value.selectedStorageIds=u)},null,8,Ya),[[ee,n.value.selectedStorageIds]]),t("label",{class:"form-check-label",for:`vm-object-storage-${l.id}`},[re(i(l.name||l.id)+" ",1),t("span",Wa," ("+i(l.provider||"unknown CSP")+i(l.region?` / ${l.region}`:"")+" / "+i(l.status||"unknown")+") ",1)],8,Ja)]))),128))])),t("div",Xa,[t("div",Za,[e[86]||(e[86]=t("label",{class:"form-label"},"Allowed Object Prefix",-1)),c(t("input",{type:"text",class:"form-control",placeholder:"Optional: data/project-a/","onUpdate:modelValue":e[16]||(e[16]=l=>n.value.prefix=l)},null,512),[[j,n.value.prefix,void 0,{trim:!0}]])]),t("div",Qa,[e[88]||(e[88]=t("label",{class:"form-label"},"Access Mode",-1)),c(t("select",{class:"form-select","onUpdate:modelValue":e[17]||(e[17]=l=>n.value.accessMode=l)},e[87]||(e[87]=[t("option",{value:"READ_ONLY"},"Read only",-1),t("option",{value:"READ_WRITE"},"Read and write",-1)]),512),[[z,n.value.accessMode]])])]),t("div",es,[e[89]||(e[89]=t("label",{class:"form-label required"},"Jupyter Access Token",-1)),c(t("input",{type:"password",class:"form-control",placeholder:"At least 12 characters","onUpdate:modelValue":e[18]||(e[18]=l=>n.value.jupyterToken=l),autocomplete:"new-password"},null,512),[[j,n.value.jupyterToken]]),t("p",ls," This is the Jupyter login token, not a CSP secret key. Use it at http://:"+i(J.value)+". ",1)]),e[90]||(e[90]=t("p",{class:"text-muted mt-2 mb-0"}," Jupyter requests short-lived presigned URLs through Application Manager. Multiple CSPs can be selected. ",-1)),M.value?(o(),s("div",{key:4,class:be(["alert mt-3",M.value.success?"alert-success":"alert-danger"])},[t("div",null,i(M.value.success?"Object Storage: SUCCESS":"Object Storage: FAILED"),1),t("ul",ts,[(o(!0),s(T,null,R(M.value.checks,l=>(o(),s("li",{key:l.name},i(l.name)+" - "+i(l.success?"OK":"FAIL"),1))),128))])],2)):m("",!0)])):m("",!0)])):m("",!0)],64)):p.value=="K8S"?(o(),s(T,{key:4},[t("div",as,[e[94]||(e[94]=t("label",{class:"form-label"},"Namespace",-1)),b.value=="Application Installation"?(o(),s("p",ss,"Select the namespace where the application will be installed")):b.value=="Application Uninstallation"?(o(),s("p",os,"Select the namespace where the application will be uninstalled")):m("",!0),de.value.length>0?c((o(),s("select",{key:2,class:"form-select",id:"k8s-namespace","onUpdate:modelValue":e[19]||(e[19]=l=>k.value=l),disabled:fl.value,onChange:Kl},[(o(!0),s(T,null,R(de.value,l=>(o(),s("option",{value:we(l),key:we(l)},i(l.name||l.id),9,rs))),128))],40,ns)),[[z,k.value]]):(o(),s("select",us,e[93]||(e[93]=[t("option",{value:""}," No namespace available ",-1)])))]),t("div",is,[e[95]||(e[95]=t("label",{class:"form-label"},"ClusterName",-1)),b.value=="Application Installation"?(o(),s("p",ds,"Select the name of the cluster where the application will be deployed")):b.value=="Application Uninstallation"?(o(),s("p",cs,"Remove the application and associated resources from the multi-cloud infrastructure")):m("",!0),c(t("select",{class:"form-select",id:"k8s-cluster",disabled:k.value==""||E.value,"onUpdate:modelValue":e[20]||(e[20]=l=>A.value=l),onChange:dt},[se.value.length===0?(o(),s("option",ps,"No cluster available")):m("",!0),(o(!0),s(T,null,R(se.value,l=>(o(),s("option",{value:Le(l),key:Le(l)},i(l.name||l.id),9,ms))),128))],40,vs),[[z,A.value]])]),t("div",fs,[e[96]||(e[96]=t("label",{class:"form-label"},"Helm chart",-1)),e[97]||(e[97]=t("p",{class:"text-muted"},"Select the application",-1)),c(t("select",{class:"form-select","onUpdate:modelValue":e[21]||(e[21]=l=>Z.value=l),onChange:Tl},[(o(!0),s(T,null,R(Al.value,(l,u)=>{var r,q;return o(),s("option",{key:u,value:l.name}," ["+i(l.name)+"] "+i(((r=l.helmChart)==null?void 0:r.chartVersion)||((q=l.packageInfo)==null?void 0:q.packageVersion)||"latest"),9,bs)}),128))],544),[[z,Z.value]])]),b.value=="Application Installation"?(o(),s("div",gs,[e[98]||(e[98]=t("label",{class:"form-label"},"Port",-1)),e[99]||(e[99]=t("p",{class:"text-muted"},"Please enter a service port for the Kubernetes service",-1)),c(t("input",{type:"number",class:"form-control",placeholder:"80","onUpdate:modelValue":e[22]||(e[22]=l=>J.value=l),disabled:B.value},null,8,ys),[[j,J.value]])])):m("",!0),b.value=="Application Installation"?(o(),s("div",Is,[e[101]||(e[101]=t("label",{class:"form-label"},"Resource Type",-1)),c(t("select",{class:"form-select","onUpdate:modelValue":e[23]||(e[23]=l=>ve.value=l)},e[100]||(e[100]=[t("option",{value:"GENERAL_PURPOSE"},"General Purpose",-1),t("option",{value:"CPU_INTENSIVE"},"CPU Intensive",-1),t("option",{value:"MEMORY_INTENSIVE"},"Memory Intensive",-1)]),512),[[z,ve.value]])])):m("",!0),b.value=="Application Installation"&&et.value?(o(),s("div",ks,[t("label",{class:be(["form-label",{required:fe.value}])},"Storage Class",2),c(t("select",{class:"form-select","onUpdate:modelValue":e[24]||(e[24]=l=>Y.value=l),disabled:lt.value},[t("option",Ss,i(tt.value),1),(o(!0),s(T,null,R(ae.value,l=>(o(),s("option",{key:l.name,value:l.name},i(l.name)+i(l.defaultClass?" (default)":""),9,Cs))),128))],8,hs),[[z,Y.value]]),fe.value&&Fe.value?(o(),s("p",Es,i(Fe.value),1)):m("",!0)])):m("",!0),b.value=="Application Installation"&&S.value.ingressEnabled?(o(),s("div",ws,[e[103]||(e[103]=t("label",{class:"form-label required"},"Allowed IPv4 CIDR",-1)),c(t("input",{class:"form-control",placeholder:"203.0.113.10/32","onUpdate:modelValue":e[25]||(e[25]=l=>K.value=l)},null,512),[[j,K.value,void 0,{trim:!0}]]),oe.value?m("",!0):(o(),s("div",Vs,[c(t("input",{class:"form-check-input",type:"checkbox",id:"k8sOpenIngress","onUpdate:modelValue":e[26]||(e[26]=l=>Qe.value=l)},null,512),[[ee,Qe.value]]),e[102]||(e[102]=t("label",{class:"form-check-label",for:"k8sOpenIngress"},"Allow this CIDR on the worker Security Group (TCP 30880)",-1))])),oe.value?(o(),s("p",As,"HTTPS via the IBM-managed load balancer. Only the allowed client IP range can access this application.")):(o(),s("p",Ts,"Access: http://"+i(S.value.ingressHost||"your-ingress-host")+":30880. For testing, map this hostname to an accessible Kubernetes node public IP in your PC hosts file. With source-IP preservation, use a node running the Ingress Controller.",1))])):m("",!0),b.value=="Application Installation"?(o(),s("div",Ns,[e[111]||(e[111]=t("label",{class:"form-label"},"HPA Configuration",-1)),t("div",xs,[t("div",Ms,[c(t("input",{class:"form-check-input",type:"checkbox",id:"hpaEnabled","onUpdate:modelValue":e[27]||(e[27]=l=>V.value.hpaEnabled=l)},null,512),[[ee,V.value.hpaEnabled]]),e[104]||(e[104]=t("label",{class:"form-check-label",for:"hpaEnabled"}," Enable HPA (Horizontal Pod Autoscaler) ",-1))])]),V.value.hpaEnabled?(o(),s("div",Rs,[t("div",null,[e[105]||(e[105]=t("label",{class:"form-label required"}," minReplicas ",-1)),c(t("input",{type:"number",class:"form-control w-90-per",placeholder:"1","onUpdate:modelValue":e[28]||(e[28]=l=>V.value.hpaMinReplicas=l)},null,512),[[j,V.value.hpaMinReplicas]])]),t("div",null,[e[106]||(e[106]=t("label",{class:"form-label required"}," maxReplicas ",-1)),c(t("input",{type:"number",class:"form-control w-90-per",placeholder:"10","onUpdate:modelValue":e[29]||(e[29]=l=>V.value.hpaMaxReplicas=l)},null,512),[[j,V.value.hpaMaxReplicas]])]),t("div",null,[e[107]||(e[107]=t("label",{class:"form-check-label mb-2"}," CPU (%) ",-1)),c(t("input",{type:"number",class:"form-control w-80-per d-inline",placeholder:"60","onUpdate:modelValue":e[30]||(e[30]=l=>V.value.hpaCpuUtilization=l)},null,512),[[j,V.value.hpaCpuUtilization]]),e[108]||(e[108]=re(" % "))]),t("div",null,[e[109]||(e[109]=t("label",{class:"form-check-label mb-2"}," MEMORY (%) ",-1)),c(t("input",{type:"number",class:"form-control w-80-per d-inline",placeholder:"80","onUpdate:modelValue":e[31]||(e[31]=l=>V.value.hpaMemoryUtilization=l)},null,512),[[j,V.value.hpaMemoryUtilization]]),e[110]||(e[110]=re(" % "))])])):m("",!0)])):m("",!0),b.value=="Application Installation"?(o(),s("div",Ps,[e[113]||(e[113]=t("label",{class:"form-label"},"Workload Rebalancing",-1)),t("div",js,[t("div",Us,[c(t("input",{class:"form-check-input",type:"checkbox",id:"workloadRebalancingEnabled","onUpdate:modelValue":e[32]||(e[32]=l=>Te.value=l)},null,512),[[ee,Te.value]]),e[112]||(e[112]=t("label",{class:"form-check-label",for:"workloadRebalancingEnabled"}," Enable Workload Rebalancing ",-1))])])])):m("",!0),b.value=="Application Installation"?(o(),s("div",Os,[e[118]||(e[118]=t("label",{class:"form-label"},"Ingress Configuration",-1)),t("div",_s,[t("div",Ls,[c(t("input",{class:"form-check-input",type:"checkbox",id:"ingressEnabled","onUpdate:modelValue":e[33]||(e[33]=l=>S.value.ingressEnabled=l)},null,512),[[ee,S.value.ingressEnabled]]),e[114]||(e[114]=t("label",{class:"form-check-label",for:"ingressEnabled"}," Enable Ingress ",-1))])]),S.value.ingressEnabled?(o(),s("div",Ds,[t("div",Gs,[e[115]||(e[115]=t("label",{class:"form-label"},"Host",-1)),c(t("input",{type:"text",class:"form-control",placeholder:"example.com","onUpdate:modelValue":e[34]||(e[34]=l=>S.value.ingressHost=l)},null,512),[[j,S.value.ingressHost]]),oe.value?(o(),s(T,{key:0},[Pe.value?(o(),s("p",Ks,"Loading managed HTTPS settings…")):(o(),s("p",$s,"Enter your hostname. Ask your administrator to register custom domains before deployment.")),$e.value.length?(o(),s("p",Bs,"Registered custom domains: "+i($e.value.join(", ")),1)):m("",!0),(o(!0),s(T,null,R(Be.value,l=>(o(),s("p",{key:l,class:"text-warning mb-1"},i(l),1))),128))],64)):m("",!0)]),t("div",zs,[e[116]||(e[116]=t("label",{class:"form-label"},"Path",-1)),c(t("input",{type:"text",class:"form-control",placeholder:"/","onUpdate:modelValue":e[35]||(e[35]=l=>S.value.ingressPath=l)},null,512),[[j,S.value.ingressPath]])]),t("div",Fs,[e[117]||(e[117]=t("label",{class:"form-label"},"Ingress Class",-1)),t("input",{type:"text",class:"form-control",placeholder:"nginx",value:El.value,disabled:""},null,8,Hs)])])):m("",!0)])):m("",!0),b.value=="Application Installation"&&Ae.value&&B.value?(o(),s("div",qs,[e[127]||(e[127]=t("label",{class:"form-label"},"Object Storage Configuration",-1)),e[128]||(e[128]=t("p",{class:"text-muted"}," Select Object Storage resources already registered in Tumblebug. CSP access keys are not sent to JupyterLab. ",-1)),t("div",Ys,[c(t("input",{class:"form-check-input",type:"checkbox",id:"k8sJupyterObjectStorageEnabled","onUpdate:modelValue":e[36]||(e[36]=l=>n.value.enabled=l),disabled:qe.value},null,8,Js),[[ee,n.value.enabled]]),e[119]||(e[119]=t("label",{class:"form-check-label",for:"k8sJupyterObjectStorageEnabled"},"Enable Object Storage",-1))]),n.value.enabled?(o(),s("div",Ws,[t("div",Xs,[e[120]||(e[120]=t("label",{class:"form-label mb-0 required"},"Registered Object Storage",-1)),t("button",{type:"button",class:"btn btn-sm btn-outline-secondary",disabled:ce.value,onClick:De}," Refresh ",8,Zs)]),ce.value?(o(),s("div",Qs,"Loading Object Storage resources...")):ke.value?(o(),s("div",eo," Object Storage resources could not be loaded from Tumblebug. ")):te.value.length===0?(o(),s("div",lo," No Object Storage resource is registered in this namespace. ")):(o(),s("div",to,[(o(!0),s(T,null,R(te.value,l=>(o(),s("div",{class:"form-check",key:l.id},[c(t("input",{class:"form-check-input",type:"checkbox",id:`vm-object-storage-${l.id}`,value:l.id,disabled:String(l.status||"").toLowerCase()!=="available","onUpdate:modelValue":e[37]||(e[37]=u=>n.value.selectedStorageIds=u)},null,8,ao),[[ee,n.value.selectedStorageIds]]),t("label",{class:"form-check-label",for:`vm-object-storage-${l.id}`},[re(i(l.name||l.id)+" ",1),t("span",oo," ("+i(l.provider||"unknown CSP")+i(l.region?` / ${l.region}`:"")+" / "+i(l.status||"unknown")+") ",1)],8,so)]))),128))])),t("div",no,[t("div",ro,[e[121]||(e[121]=t("label",{class:"form-label"},"Allowed Object Prefix",-1)),c(t("input",{type:"text",class:"form-control",placeholder:"Optional: data/project-a/","onUpdate:modelValue":e[38]||(e[38]=l=>n.value.prefix=l)},null,512),[[j,n.value.prefix,void 0,{trim:!0}]])]),t("div",uo,[e[123]||(e[123]=t("label",{class:"form-label"},"Access Mode",-1)),c(t("select",{class:"form-select","onUpdate:modelValue":e[39]||(e[39]=l=>n.value.accessMode=l)},e[122]||(e[122]=[t("option",{value:"READ_ONLY"},"Read only",-1),t("option",{value:"READ_WRITE"},"Read and write",-1)]),512),[[z,n.value.accessMode]])])]),t("div",io,[e[124]||(e[124]=t("label",{class:"form-label required"},"Jupyter Access Token",-1)),c(t("input",{type:"password",class:"form-control",placeholder:"At least 12 characters","onUpdate:modelValue":e[40]||(e[40]=l=>n.value.jupyterToken=l),autocomplete:"new-password"},null,512),[[j,n.value.jupyterToken]]),e[125]||(e[125]=t("p",{class:"text-muted mt-1 mb-0"}," This is the Jupyter login token, not a CSP secret key. Use it at the Ingress URL shown below. ",-1))]),e[126]||(e[126]=t("p",{class:"text-muted mt-2 mb-0"}," Jupyter requests short-lived presigned URLs through Application Manager. Multiple CSPs can be selected. ",-1)),M.value?(o(),s("div",{key:4,class:be(["alert mt-3",M.value.success?"alert-success":"alert-danger"])},[t("div",null,i(M.value.success?"Object Storage: SUCCESS":"Object Storage: FAILED"),1),t("ul",co,[(o(!0),s(T,null,R(M.value.checks,l=>(o(),s("li",{key:l.name},i(l.name)+" - "+i(l.success?"OK":"FAIL"),1))),128))])],2)):m("",!0)])):m("",!0)])):m("",!0),b.value=="Application Installation"&&Ae.value&&!B.value?(o(),s("div",vo,[e[138]||(e[138]=t("label",{class:"form-label"},"Object Storage Configuration",-1)),t("div",po,[t("div",mo,[c(t("input",{class:"form-check-input",type:"checkbox",id:"objectStorageEnabled","onUpdate:modelValue":e[41]||(e[41]=l=>n.value.enabled=l),disabled:qe.value},null,8,fo),[[ee,n.value.enabled]]),e[129]||(e[129]=t("label",{class:"form-check-label",for:"objectStorageEnabled"}," Enable Object Storage ",-1))])]),n.value.enabled?(o(),s("div",bo,[t("div",go,[t("div",yo,[e[130]||(e[130]=t("label",{class:"form-label"},"Target CSP",-1)),t("input",{type:"text",class:"form-control",value:Ke.value||"-",disabled:""},null,8,Io)]),e[131]||(e[131]=t("div",{class:"w-50 ms-2"},[t("label",{class:"form-label"},"Storage API"),t("input",{type:"text",class:"form-control",value:"S3-compatible",disabled:""})],-1))]),t("div",ko,[e[132]||(e[132]=t("label",{class:"form-label"},"S3-compatible Endpoint",-1)),c(t("input",{type:"text",class:"form-control",placeholder:at.value,"onUpdate:modelValue":e[42]||(e[42]=l=>n.value.endpoint=l)},null,8,ho),[[j,n.value.endpoint]])]),t("div",So,[t("div",Co,[e[133]||(e[133]=t("label",{class:"form-label"},"Region",-1)),c(t("input",{type:"text",class:"form-control",placeholder:st.value,"onUpdate:modelValue":e[43]||(e[43]=l=>n.value.region=l)},null,8,Eo),[[j,n.value.region]])]),t("div",wo,[e[134]||(e[134]=t("label",{class:"form-label"},"Bucket Name",-1)),c(t("input",{type:"text",class:"form-control",placeholder:"object-storage-bucket","onUpdate:modelValue":e[44]||(e[44]=l=>n.value.bucket=l)},null,512),[[j,n.value.bucket]])])]),t("div",Vo,[t("div",Ao,[e[135]||(e[135]=t("label",{class:"form-label"},"Access Key ID",-1)),c(t("input",{type:"password",class:"form-control",placeholder:"access key id","onUpdate:modelValue":e[45]||(e[45]=l=>n.value.accessKey=l),autocomplete:"off"},null,512),[[j,n.value.accessKey]])]),t("div",To,[e[136]||(e[136]=t("label",{class:"form-label"},"Secret Access Key",-1)),c(t("input",{type:"password",class:"form-control",placeholder:"secret access key","onUpdate:modelValue":e[46]||(e[46]=l=>n.value.secretKey=l),autocomplete:"off"},null,512),[[j,n.value.secretKey]])])]),t("div",No,[t("div",xo,[c(t("input",{class:"form-check-input",type:"checkbox",id:"forcePathStyle","onUpdate:modelValue":e[47]||(e[47]=l=>n.value.forcePathStyle=l)},null,512),[[ee,n.value.forcePathStyle]]),e[137]||(e[137]=t("label",{class:"form-check-label",for:"forcePathStyle",title:"On: endpoint/bucket/object. Off: bucket.endpoint/object."},"Use path-style URL",-1))])]),M.value?(o(),s("div",{key:0,class:be(["alert mt-3",M.value.success?"alert-success":"alert-danger"])},[t("div",null,i(M.value.success?"Object Storage: SUCCESS":"Object Storage: FAILED"),1),t("ul",Mo,[(o(!0),s(T,null,R(M.value.checks,l=>(o(),s("li",{key:l.name},i(l.name)+" - "+i(l.success?"OK":"FAIL"),1))),128))])],2)):m("",!0)])):m("",!0)])):m("",!0)],64)):m("",!0)],6),Ce.value.length||Me.value.length?(o(),s("div",Ro,[(o(!0),s(T,null,R(Ce.value,l=>(o(),s("div",{key:l,class:"alert alert-danger",role:"alert"},i(l),1))),128)),(o(!0),s(T,null,R(Me.value,l=>(o(),s("div",{key:l,class:"alert alert-warning"},i(l),1))),128))])):m("",!0),t("div",Po,[t("a",{class:"btn btn-link link-secondary","data-bs-dismiss":a.embedded?void 0:"modal",onClick:Fl}," Cancel ",8,jo),t("div",null,[b.value=="Application Installation"&&il.value?(o(),s("button",{key:0,class:"btn btn-outline-danger ms-auto me-1",onClick:e[48]||(e[48]=l=>it()),disabled:Ne.value||dl.value,title:"Writes, reads, and deletes a temporary object in the selected bucket."},i(Ne.value?"Checking...":"Storage Check"),9,Uo)):m("",!0),b.value=="Application Installation"?(o(),s("button",{key:1,class:"btn btn-danger ms-auto me-1",onClick:Jl,disabled:me.value||Pe.value||!W.value||!!C.value},i(me.value?"Checking...":"Spec Check"),9,Oo)):m("",!0),t("button",{class:"btn btn-primary ms-auto","data-bs-dismiss":a.embedded?void 0:"modal",onClick:Yl,disabled:ot.value},i(xe.value?"Deploying…":"Deploy"),9,_o)])])])],2)],10,Dt))}}),Yo=At(Go,[["__scopeId","data-v-73819227"]]);export{Yo as A,qo as p}; diff --git a/src/main/resources/static/assets/applicationInstallationForm-BhLuCKSl.css b/src/main/resources/static/assets/applicationInstallationForm-BhLuCKSl.css new file mode 100644 index 00000000..5d868c07 --- /dev/null +++ b/src/main/resources/static/assets/applicationInstallationForm-BhLuCKSl.css @@ -0,0 +1 @@ +.install-embedded[data-v-1b4eb260]{width:100%}.install-embedded-dialog[data-v-1b4eb260]{width:100%;max-width:960px;margin:0 auto}.install-embedded-body[data-v-1b4eb260]{overflow-y:visible}.w-80-per[data-v-1b4eb260]{width:80%!important}.w-90-per[data-v-1b4eb260]{width:90%!important} diff --git a/src/main/resources/static/assets/applicationInstallationForm-C-3AdtAK.css b/src/main/resources/static/assets/applicationInstallationForm-C-3AdtAK.css new file mode 100644 index 00000000..a1b5c7ba --- /dev/null +++ b/src/main/resources/static/assets/applicationInstallationForm-C-3AdtAK.css @@ -0,0 +1 @@ +.install-embedded[data-v-73819227]{width:100%}.install-embedded-dialog[data-v-73819227]{width:100%;max-width:960px;margin:0 auto}.install-embedded-body[data-v-73819227]{overflow-y:visible}.w-80-per[data-v-73819227]{width:80%!important}.w-90-per[data-v-73819227]{width:90%!important} diff --git a/src/main/resources/static/assets/applicationInstallationForm-C5Vcb2Aw.js b/src/main/resources/static/assets/applicationInstallationForm-C5Vcb2Aw.js new file mode 100644 index 00000000..864672c1 --- /dev/null +++ b/src/main/resources/static/assets/applicationInstallationForm-C5Vcb2Aw.js @@ -0,0 +1 @@ +import{d as lt,f as tt,q as at,g as f,r as p,h as oe,i as st,c as s,a as t,t as d,m as c,n as me,C as ot,e as te,j as i,v as _,F as I,k as x,z as Ge,l as V,A as W,o}from"./index-DKle5_5b.js";import{_ as Z}from"./lodash-pZBD3XEw.js";import{s as Be}from"./request-DSShymva.js";import{m as nt,y as rt,z as ut,A as it,r as Sl,B as dt,C as vt,D as ct,E as pt,F as mt}from"./softwareCatalog-DbmZz9hR.js";import{_ as ft}from"./_plugin-vue_export-helper-DlAUqK2U.js";const bt=()=>Be.get("/cbtumblebug/ns"),gt=U=>Be.get(`/cbtumblebug/ns/${U}/infra`),yt=U=>Be.get(`/cbtumblebug/ns/${U.nsId}/infra/${U.mciId}`),kt=U=>Be.get(`/cbtumblebug/ns/${U}/k8scluster`);function ht(U){var C,ae;const y=(ae=String(((C=U==null?void 0:U.packageInfo)==null?void 0:C.packageName)||"").trim().toLowerCase().split("/").pop())==null?void 0:ae.split(/[:@]/)[0];if(y!=="redis"&&y!=="elasticsearch")return!1;const we=String((U==null?void 0:U.name)||"").trim().toLowerCase();return new RegExp(`(^|[^a-z0-9])${y}([^a-z0-9]|$)`).test(we)&&!(y==="redis"&&we.includes("elasticsearch"))}const St=["id","tabindex"],Ct={class:"modal-content"},It={class:"modal-header"},wt={class:"modal-title"},Et={key:0,class:"alert alert-info py-2",role:"status"},Vt={key:1,class:"alert alert-warning py-2",role:"alert"},At={key:2,class:"alert alert-secondary py-2",role:"status"},xt={class:"mb-3"},jt={key:0,class:"text-muted"},Tt={key:1,class:"text-muted"},Mt=["disabled"],Rt=["value"],Pt={class:"mb-3"},Nt={key:0,class:"text-muted"},Ut={key:1,class:"text-muted"},Ot=["disabled"],Lt=["value"],_t={key:3,class:"form-select",id:"vm-namespace-empty",disabled:""},Dt={class:"mb-3"},Kt={key:0,class:"text-muted"},Gt={key:1,class:"text-muted"},Bt=["disabled"],zt={key:0,value:""},$t=["value","title"],Ft={key:0,class:"mb-3"},Ht={class:"d-flex gap-3"},Jt={class:"form-check"},Yt={class:"form-check"},qt={key:1,class:"mb-3"},Wt=["disabled"],Zt=["value"],Xt={key:0,class:"mt-2",style:{display:"flex",gap:"10px","flex-wrap":"wrap"}},Qt=["onClick"],ea={key:2,class:"mb-3"},la=["disabled"],ta=["value","disabled"],aa={key:0,class:"mt-2"},sa={class:"d-flex gap-2 flex-wrap"},oa={key:1,class:"text-warning mt-2"},na={key:3,class:"mb-3"},ra={style:{display:"flex",gap:"10px"}},ua={class:"form-check"},ia=["disabled"],da={key:0,class:"form-check"},va=["disabled"],ca={key:0,class:"form-text"},pa={key:4,class:"mb-3"},ma={class:"mb-3"},fa=["value"],ba={class:"mb-3"},ga={key:5,class:"mb-3"},ya={key:0,class:"mt-2"},ka={key:6,class:"mb-3"},ha={key:7,class:"mb-3"},Sa={class:"form-check mb-2"},Ca=["disabled"],Ia={key:0},wa={class:"d-flex align-items-center justify-content-between mb-2"},Ea=["disabled"],Va={key:0,class:"text-muted"},Aa={key:1,class:"alert alert-danger py-2"},xa={key:2,class:"alert alert-warning py-2"},ja={key:3,class:"border rounded p-2"},Ta=["id","value","disabled"],Ma=["for"],Ra={class:"text-muted"},Pa={class:"d-flex justify-content-between mt-2"},Na={class:"w-50 me-2"},Ua={class:"w-50 ms-2"},Oa={class:"mt-2"},La={class:"text-muted mt-1 mb-0"},_a={class:"mb-0 ps-3"},Da={class:"mb-3"},Ka={key:0,class:"text-muted"},Ga={key:1,class:"text-muted"},Ba=["disabled"],za=["value"],$a={key:3,class:"form-select",id:"k8s-namespace-empty",disabled:""},Fa={class:"mb-3"},Ha={key:0,class:"text-muted"},Ja={key:1,class:"text-muted"},Ya=["disabled"],qa={key:0,value:""},Wa=["value"],Za={class:"mb-3"},Xa=["value"],Qa={key:0,class:"mb-3"},es=["disabled"],ls={key:1,class:"mb-3"},ts={key:2,class:"mb-3"},as=["disabled"],ss={value:"",disabled:""},os=["value"],ns={key:0,class:"text-danger mt-1 mb-0"},rs={key:3,class:"mb-3"},us={class:"form-check mt-2"},is={class:"text-muted mt-1"},ds={key:4,class:"mb-3"},vs={class:"mb-2"},cs={class:"form-check"},ps={key:0,class:"d-flex justify-content-between"},ms={key:5,class:"mb-3"},fs={class:"mb-2"},bs={class:"form-check"},gs={key:6,class:"mb-3"},ys={class:"mb-2"},ks={class:"form-check"},hs={key:0},Ss={class:"mb-2"},Cs={class:"mb-2"},Is={class:"mb-2"},ws={key:7,class:"mb-3"},Es={class:"form-check mb-2"},Vs=["disabled"],As={key:0},xs={class:"d-flex align-items-center justify-content-between mb-2"},js=["disabled"],Ts={key:0,class:"text-muted"},Ms={key:1,class:"alert alert-danger py-2"},Rs={key:2,class:"alert alert-warning py-2"},Ps={key:3,class:"border rounded p-2"},Ns=["id","value","disabled"],Us=["for"],Os={class:"text-muted"},Ls={class:"d-flex justify-content-between mt-2"},_s={class:"w-50 me-2"},Ds={class:"w-50 ms-2"},Ks={class:"mt-2"},Gs={class:"mb-0 ps-3"},Bs={key:8,class:"mb-3"},zs={class:"mb-2"},$s={class:"form-check"},Fs=["disabled"],Hs={key:0},Js={class:"d-flex justify-content-between"},Ys={class:"w-50 me-2"},qs=["value"],Ws={class:"mt-2 mb-2"},Zs=["placeholder"],Xs={class:"d-flex justify-content-between"},Qs={class:"w-50 me-2"},eo=["placeholder"],lo={class:"w-50 ms-2"},to={class:"d-flex justify-content-between mt-2"},ao={class:"w-50 me-2"},so={class:"w-50 ms-2"},oo={class:"d-flex gap-4 mt-3"},no={class:"form-check"},ro={class:"mb-0 ps-3"},uo={key:0,class:"px-3","aria-live":"polite"},io={class:"modal-footer d-flex justify-content-between"},vo=["data-bs-dismiss"],co=["disabled"],po=["disabled"],mo=["data-bs-dismiss","disabled"],fo="object-storage",bo="storage-class",go=lt({__name:"applicationInstallationForm",props:{nsId:{default:""},title:{default:"Application Installation"},embedded:{type:Boolean,default:!1},formId:{default:"install-form"},targetType:{default:""},targetMciId:{default:""},targetVmId:{default:""},targetClusterId:{default:""}},emits:["ready","deployment-event","cancel"],setup(U,{emit:ul}){const y=tt(),we=at(),C=U,ae=ul,m=f(()=>C.title),X=f(()=>String(C.targetType||"").toUpperCase()),T=f(()=>C.embedded&&["VM","K8S"].includes(X.value)),Cl=f(()=>X.value==="VM"?`VM ${C.targetVmId} in ${C.targetMciId}`:`Kubernetes cluster ${C.targetClusterId}`),ze=a=>(Array.isArray(a)?a:[a]).flatMap(l=>typeof l=="string"?l.split(","):[l]).map(l=>String((l==null?void 0:l.id)||(l==null?void 0:l.name)||l||"").trim()).filter(Boolean),ne=(...a)=>{for(const e of a){const l=ze(e);if(l.length>0)return l[0]}return""},P=f(()=>we.projectInfo||{}),Me=f(()=>we.workspaceInfo||{}),fe=f(()=>ne(P.value.ns_id,P.value.nsId)),Re=f(()=>ze(P.value.mci_ids??P.value.mciIds??P.value.mci_id??P.value.mciId)),Pe=f(()=>ze(P.value.cluster_ids??P.value.clusterIds??P.value.cluster_id??P.value.clusterId)),$e=f(()=>!!ne(P.value.id,P.value.name,fe.value)),il=f(()=>$e.value&&!!fe.value),dl=f(()=>{const a=ne(Me.value.name,Me.value.id),e=ne(P.value.name,P.value.id);return[a,e].filter(Boolean).join(" / ")||"the selected project"}),vl=f(()=>JSON.stringify([ne(Me.value.id,Me.value.name),ne(P.value.id,P.value.name),fe.value,Re.value,Pe.value])),Fe=p([]),re=p([]),se=p([]),G=p([]),z=p([]),be=p([]),v=p(""),b=p(""),j=p(""),D=p(""),h=p([]),M=p("VM"),N=p(""),A=p("Standalone"),S=p({}),Ee=p(!1),g=p({}),n=p({}),w=p(null),Ve=p(!1),Q=p([]),ue=p(!1),ge=p(!1),Ae=p(!1),ie=p("GENERAL_PURPOSE"),ee=p([]),$=p(""),ye=p(!1),ke=p(!1),le=p([]),E=p(""),J=p(""),F=p(""),de=p("PRIVATE"),B=p(""),He=p(!0),H=p(!0),ve=p(!1),he=p([]),xe=p([]);let Se=0;const K=p(0),k=p("");let R=0;const Ce=a=>(a==null?void 0:a.id)||(a==null?void 0:a.name)||"",cl=a=>(a==null?void 0:a.id)||(a==null?void 0:a.name)||"",je=a=>(a==null?void 0:a.id)||(a==null?void 0:a.name)||"",Ne=a=>(a==null?void 0:a.name)||(a==null?void 0:a.id)||"",Il=a=>String((a==null?void 0:a.status)||"").trim().toUpperCase()==="RUNNING",Je=f(()=>{const a=new Map;for(const e of z.value){const l=String((e==null?void 0:e.subGroupId)||"").trim();if(!l)continue;const r=a.get(l)||{id:l,totalVmCount:0,runningVmIds:[]};r.totalVmCount+=1;const u=je(e);Il(e)&&u&&!r.runningVmIds.includes(u)&&r.runningVmIds.push(u),a.set(l,r)}return Array.from(a.values()).sort((e,l)=>e.id.localeCompare(l.id))}),Ye=f(()=>{var a;return((a=Je.value.find(e=>e.id===N.value))==null?void 0:a.runningVmIds)||[]}),ce=(a,e)=>{if(e.length===0)return!0;const l=[a==null?void 0:a.id,a==null?void 0:a.name,a==null?void 0:a.uid].map(u=>String(u||"").trim().toLowerCase()).filter(Boolean),r=e.map(u=>u.toLowerCase());return l.some(u=>r.includes(u))},pl=()=>{re.value=[],se.value=[],G.value=[],z.value=[],le.value=[],Q.value=[],ge.value=!1,b.value="",j.value="",D.value="",h.value=[],N.value="",E.value="",k.value=""};oe([v,b,E,j,h,M,N,K,$,g,vl,m],()=>{Y()},{deep:!0,flush:"sync"}),oe(v,async a=>{Z.isEmpty(b.value)||(a==="VM"?(M.value="VM",j.value="",D.value="",h.value=[],N.value="",G.value=[],z.value=[],await qe()):a==="K8S"&&(E.value="",await Ze()),J.value="",Y())}),oe(n,()=>{w.value=null},{deep:!0}),oe($,()=>{Y()}),oe(vl,async(a,e)=>{if(a===e)return;R+=1,pl(),J.value="",K.value=0,fl();const l=document.getElementById(C.formId);(C.embedded||l!=null&&l.classList.contains("show"))&&await Te()}),oe(A,()=>{if(M.value==="NODE_GROUP"){A.value="Standalone";return}A.value==="Standalone"?(h.value=[],G.value=[...z.value]):A.value==="Clustering"&&(h.value=[],G.value=[...z.value])}),oe(M,a=>{D.value="",h.value=[],N.value="",G.value=[...z.value],a==="NODE_GROUP"&&(A.value="Standalone"),Y()}),st(async()=>{if(C.embedded){try{if(await Te(),k.value){ae("deployment-event",{status:"FORM_ERROR",message:k.value});return}await ml(),ae("ready",{targetType:X.value,namespace:b.value})}catch{k.value=k.value||"The software catalog could not be loaded.",ae("deployment-event",{status:"FORM_ERROR",message:"The installation form could not be initialized."})}return}const a=document.getElementById(C.formId);a&&a.addEventListener("show.bs.modal",async()=>{await Te(),await ml()})});const Te=async()=>{const a=++R;pl(),v.value=T.value?X.value:"VM",M.value="VM",N.value="",A.value="Standalone",S.value={hpaEnabled:!1,hpaMinReplicas:1,hpaMaxReplicas:10,hpaCpuUtilization:60,hpaMemoryUtilization:80},Ee.value=!1,g.value={ingressEnabled:!1,ingressHost:"",ingressPath:"/",ingressClass:"nginx",ingressTlsEnabled:!1,ingressTlsSecret:""},n.value=De(),w.value=null,Ve.value=!1,Q.value=[],ue.value=!1,ge.value=!1,ee.value=[],$.value="",ye.value=!1,ke.value=!1,ie.value="GENERAL_PURPOSE",F.value="",de.value="PRIVATE",B.value="",J.value="",K.value=0,El(),fl(),await Vl(a)},wl=a=>{let e=(a||"").trim();if(!e)return e;e=e.replace(/^[a-zA-Z][a-zA-Z0-9+.-]*:\/\//,"");const l=e.lastIndexOf("@");l>=0&&(e=e.slice(l+1));const r=e.search(/[/?#]/);r>=0&&(e=e.slice(0,r));const u=e.indexOf(":");return u>=0&&e.indexOf(":",u+1)<0&&(e=e.slice(0,u)),e.trim().toLowerCase()},ml=async()=>{await nt("").then(({data:a})=>{be.value=a})},El=()=>{if(T.value){Fe.value=[{key:X.value,value:X.value}];return}Fe.value=[{key:"VM",value:"VM"},{key:"k8s",value:"K8S"}]},fl=()=>{m.value==="Application Uninstallation"?H.value=!1:H.value=!0},Vl=async(a=R)=>{try{const{data:e}=await bt();if(a!==R)return;const l=Array.isArray(e)?e:[];if($e.value){if(Z.isEmpty(fe.value)){k.value=`Project "${dl.value}" has no namespace mapping.`;return}const r=l.find(u=>ce(u,[fe.value]));if(!r){k.value=`Namespace "${fe.value}" assigned to this project was not found.`;return}re.value=[r],b.value=Ce(r)}else{re.value=l;const r=ne(C.nsId),L=(r?l.find(rl=>ce(rl,[r])):void 0)||l[0];b.value=L?Ce(L):""}Z.isEmpty(b.value)||(v.value==="VM"?await qe(a):v.value==="K8S"&&await Ze(a))}catch{if(a!==R)return;k.value="Namespaces could not be loaded for the selected project."}},qe=async(a=R)=>{k.value="";try{const{data:e}=await gt(b.value);if(a!==R)return;const r=(Array.isArray(e)?e:[]).filter(u=>ce(u,Re.value));if(T.value&&X.value==="VM"){const u=r.find(L=>ce(L,[C.targetMciId]));if(!u){se.value=[],j.value="",k.value=`Infra "${C.targetMciId}" was not found in the selected project namespace.`;return}se.value=[u],j.value=cl(u),await We(a);return}se.value=r,se.value.length>0?(j.value=cl(se.value[0]),await We(a)):(j.value="",k.value=Re.value.length>0?`Infra "${Re.value.join(", ")}" assigned to this project was not found.`:"No VM infrastructure is available in this project.")}catch{if(a!==R)return;k.value="VM infrastructure could not be loaded for the selected project."}},We=async(a=R)=>{const e={nsId:b.value,mciId:j.value};try{const{data:l}=await yt(e);if(a!==R)return;const r=Array.isArray(l==null?void 0:l.node)?l.node:[];if(T.value&&X.value==="VM"){const u=r.find(rl=>ce(rl,[C.targetVmId]));if(!u){z.value=[],G.value=[],D.value="",h.value=[],k.value=`VM "${C.targetVmId}" was not found in infra "${C.targetMciId}".`;return}const L=je(u);z.value=[u],G.value=[u],D.value=L,h.value=[L];return}z.value=r,G.value=z.value.filter(u=>!h.value.includes(u.id)),D.value="",Je.value.some(u=>u.id===N.value)||(N.value=""),G.value.length===0&&(k.value="No VM is available in the infrastructure assigned to this project.")}catch{if(a!==R)return;k.value="VMs could not be loaded for the selected project."}},Ze=async(a=R)=>{k.value="";try{const{data:e}=await kt(b.value);if(a!==R)return;const r=(Array.isArray(e)?e:[]).filter(u=>ce(u,Pe.value));if(T.value&&X.value==="K8S"){const u=r.find(L=>ce(L,[C.targetClusterId]));if(!u){le.value=[],E.value="",k.value=`Cluster "${C.targetClusterId}" was not found in the selected project namespace.`;return}le.value=[u],E.value=Ne(u)}else le.value=r,le.value.length>0?E.value=Ne(le.value[0]):(E.value="",k.value=Pe.value.length>0?`Cluster "${Pe.value.join(", ")}" assigned to this project was not found.`:"No Kubernetes cluster is available in this project.");v.value==="K8S"&&O.value&&(g.value.ingressEnabled=!0,S.value.hpaEnabled=!1,S.value.hpaMinReplicas=1),n.value=De(),w.value=null,await Xe()}catch{if(a!==R)return;k.value="Kubernetes clusters could not be loaded for the selected project."}},Ue=async()=>{if(Q.value=[],ge.value=!1,!(!["VM","K8S"].includes(v.value)||!O.value||Z.isEmpty(b.value))){ue.value=!0;try{const{data:a}=await ut(b.value);Q.value=Array.isArray(a)?a:[];const e=Q.value.filter(l=>String(l.status||"").toLowerCase()==="available").map(l=>l.id);n.value.selectedStorageIds=(n.value.selectedStorageIds||[]).filter(l=>e.includes(l)),n.value.selectedStorageIds.length===0&&e.length===1&&(n.value.selectedStorageIds=[e[0]])}catch{ge.value=!0}finally{ue.value=!1}}},Xe=async()=>{if(ee.value=[],$.value="",ke.value=!1,!(v.value!=="K8S"||!ll.value||Z.isEmpty(b.value)||Z.isEmpty(E.value))){ye.value=!0;try{const{data:a}=await rt({namespace:b.value,clusterName:E.value});ee.value=Array.isArray(a)?a:[],$.value=Al(ee.value)}catch{ke.value=!0,$.value=""}finally{ye.value=!1}}},Al=a=>{var l;const e=a.find(r=>r.defaultClass);return(e==null?void 0:e.name)||((l=a[0])==null?void 0:l.name)||""},xl=async()=>{h.value=[],await qe(R),await Ue(),Y()},jl=async()=>{h.value=[],N.value="",k.value="",await We(R),Y()},Tl=async()=>{await Ze(R),Y()},Y=()=>{Se+=1,he.value=[],xe.value=[],m.value==="Application Installation"?H.value=!0:m.value==="Application Uninstallation"&&(H.value=!1)},Ml=()=>{if(D.value!==""){if(A.value==="Standalone")h.value=[D.value];else if(A.value==="Clustering"&&!h.value.includes(D.value)){h.value.push(D.value);const a=G.value.findIndex(e=>e.id===D.value);a!==-1&&G.value.splice(a,1)}D.value="",Y()}},Rl=()=>{h.value=[],A.value="Standalone",Y()},Pl=a=>{if(T.value)return;const e=h.value[a];if(h.value.splice(a,1),A.value==="Clustering"){const l=z.value.find(r=>r.id===e);l&&G.value.push(l)}Y()},Nl=async()=>{Ae.value||(ae("cancel"),await Te())},Ul=()=>v.value==="VM"?M.value==="NODE_GROUP"?{targetType:"VM",namespace:b.value,mciId:j.value,nodeGroupId:N.value}:{targetType:"VM",namespace:b.value,mciId:j.value,vmId:h.value[0]||""}:{targetType:"K8S",namespace:b.value,clusterId:E.value},Oe=(a,e={})=>{ae("deployment-event",{status:a,target:Ul(),...e})},Ol=a=>{if(!(!a||typeof a!="object"))return a.deploymentId||a.applicationId||a.id||void 0},Ll=async()=>{if(m.value==="Application Installation"&&v.value==="VM"&&A.value==="Clustering"&&!Qe.value){y.error("Clustering is available only for Redis and Elasticsearch on individually selected VMs");return}if(m.value==="Application Installation"&&(H.value||ve.value)){y.error("Please complete Spec Check for the current settings before deploying");return}if(k.value){y.error(k.value);return}if(v.value!=="VM"&&v.value!=="K8S"){y.error("Please Select Infra");return}if(v.value==="VM"&&m.value==="Application Installation"&&de.value==="RESTRICTED"&&(!B.value||B.value==="0.0.0.0/0")){y.error("Enter a restricted IPv4 CIDR such as 203.0.113.10/32");return}if(v.value==="K8S"&&m.value==="Application Installation"&&g.value.ingressEnabled&&(!B.value||B.value==="0.0.0.0/0"||g.value.ingressClass!=="nginx")){y.error("Enter a restricted IPv4 CIDR and use ingress class nginx for external access");return}if(v.value==="K8S"&&O.value){if(!g.value.ingressEnabled||!g.value.ingressHost||!B.value||B.value==="0.0.0.0/0"){y.error("Enter an Ingress hostname and a restricted IPv4 CIDR for Jupyter");return}if(g.value.ingressPath!=="/"||g.value.ingressTlsEnabled||S.value.hpaEnabled||Ee.value){y.error("Jupyter uses one replica, path / and HTTP NodePort 30880 without HPA or rebalancing");return}}if(O.value){if((n.value.selectedStorageIds||[]).length===0){y.error("Select at least one registered Object Storage resource");return}if(String(n.value.jupyterToken||"").length<12){y.error("Enter a Jupyter access token with at least 12 characters");return}if(!al.value){y.error("Run the Object Storage check before deployment");return}}if(!(v.value==="K8S"&&!yl())){Ae.value=!0,Oe("DEPLOY_STARTED");try{let a={};if(v.value==="VM"){let e={};if(m.value=="Application Installation"){const l=M.value==="NODE_GROUP",r=!l&&A.value==="Clustering"?`${J.value}-cluster`:`${J.value}-standalone`,u=F.value===""?void 0:Number(F.value);e={namespace:b.value,mciId:j.value,vmIds:l?[]:h.value,vmNodeGroupId:l?N.value:void 0,clusterName:r,catalogId:K.value,servicePort:u,openServicePort:de.value==="RESTRICTED",servicePortCidr:de.value==="RESTRICTED"?B.value:void 0,username:"admin",deploymentType:v.value,vmDeploymentMode:l?"STANDALONE":A.value.toUpperCase(),resourceType:ie.value,additionalConfig:Wl()},a=await it(e)}else a=await Sl(e)}else{const e=F.value===""?void 0:Number(F.value),l=Zl(),r={namespace:b.value,clusterName:E.value,openServicePort:g.value.ingressEnabled&&He.value,servicePortCidr:g.value.ingressEnabled?B.value:void 0,catalogId:K.value,servicePort:e,username:"",deploymentType:v.value,hpaEnabled:S.value.hpaEnabled,minReplicas:S.value.hpaMinReplicas,maxReplicas:S.value.hpaMaxReplicas,cpuThreshold:S.value.hpaCpuUtilization,memoryThreshold:S.value.hpaMemoryUtilization,workloadRebalancingEnabled:Ee.value,resourceType:ie.value,...bl(),additionalConfig:l};a=m.value=="Application Installation"?await dt(r):await Sl(r)}a.data?(y.success("SUCCESS"),Oe("DEPLOY_SUCCEEDED",{deploymentId:Ol(a.data)})):(y.error("FAIL"),Oe("DEPLOY_FAILED",{message:"The deployment API did not return a success result."}))}catch{y.error("FAIL"),Oe("DEPLOY_FAILED",{message:"The deployment request failed."})}finally{Ae.value=!1}}},bl=()=>({ingressEnabled:g.value.ingressEnabled,ingressHost:wl(g.value.ingressHost),ingressPath:g.value.ingressPath,ingressClass:g.value.ingressClass,ingressTlsEnabled:g.value.ingressTlsEnabled,ingressTlsSecret:g.value.ingressTlsSecret===""?null:g.value.ingressTlsSecret}),_l=async()=>{if(ve.value)return;if(k.value){y.error(k.value);return}if(v.value!=="VM"&&v.value!=="K8S"){y.error("Please Select Infra");return}if(!yl())return;const a=Se;H.value=!0,he.value=[],xe.value=[],ve.value=!0;try{if(v.value==="K8S"){if(!b.value||!E.value||!K.value){y.error("Please select all items");return}const{data:l}=await vt({namespace:b.value,clusterName:E.value,catalogId:K.value,...bl()});if(a!==Se)return;if(xe.value=Array.isArray(l==null?void 0:l.warnings)?l.warnings:[],(l==null?void 0:l.valid)!==!0){he.value=Array.isArray(l==null?void 0:l.errors)&&l.errors.length?l.errors:["Ingress check failed. Resolve the issue and retry Spec Check."];return}}const e=await Dl();if(a!==Se)return;if(e==null){y.error("Please select all items");return}if(e===!1){const l=v.value==="VM"?"VM":"CLUSTER";if(!confirm("Your selected "+l+" has lower specifications than recommended. Would you like to continue with the installation?"))return}if(a!==Se)return;y.success("Please click Deploy"),H.value=!1}catch{a===Se&&(he.value=["Spec Check could not be completed. Check connectivity and permissions, then retry."])}finally{ve.value=!1}},Dl=async()=>{let a=!1;if(v.value==="VM"){const e=M.value==="NODE_GROUP"?Ye.value:h.value;if(b.value===""||j.value===""||M.value==="NODE_GROUP"&&N.value===""||e.length===0||K.value===0)return null;{const l=M.value==="NODE_GROUP"?e:[e[0]];a=!0;for(const r of l){const u={namespace:b.value,mciName:j.value,vmName:r,catalogId:K.value},{data:L}=await ct(u);if(!L){a=!1;break}}}}else if(v.value==="K8S"){if(b.value===""||E.value===""||K.value===0)return null;const e={namespace:b.value,clusterName:E.value,catalogId:K.value};await pt(e).then(({data:l})=>{a=l})}return a},q=f(()=>be.value.find(a=>a.id===K.value)),Qe=f(()=>v.value==="VM"&&M.value==="VM"&&!T.value&&ht(q.value));oe(Qe,a=>{!a&&A.value==="Clustering"&&(A.value="Standalone")},{flush:"sync"});const Kl=f(()=>{var e;const a=le.value.find(l=>l.id===E.value||l.name===E.value);return((e=a==null?void 0:a.connectionConfig)==null?void 0:e.providerName)||(a==null?void 0:a.connectionName)||""}),Gl=f(()=>{var l;const a=h.value[0],e=z.value.find(r=>je(r)===a);return((l=e==null?void 0:e.connectionConfig)==null?void 0:l.providerName)||(e==null?void 0:e.connectionName)||""}),Le=f(()=>v.value==="VM"?Gl.value:Kl.value),Bl=f(()=>{var a,e;return String(((e=(a=q.value)==null?void 0:a.helmChart)==null?void 0:e.chartName)||"").toLowerCase()}),zl=["CAPABILITY","TAG"],el=f(()=>Bl.value==="loki"),O=f(()=>{var e,l;return String(((l=(e=q.value)==null?void 0:e.packageInfo)==null?void 0:l.packageName)||"").toLowerCase().includes("jupyter")&&ol(q.value)}),ll=f(()=>{var a;return v.value!=="K8S"?!1:O.value?!0:!((a=q.value)!=null&&a.helmChart)||!el.value?!1:gl(q.value,bo)}),pe=f(()=>ll.value&&(el.value||O.value)),$l=f(()=>ll.value&&m.value==="Application Installation"&&(pe.value||ee.value.length>0||ke.value)),Fl=f(()=>ye.value||ee.value.length<=1),Hl=f(()=>ye.value?"Loading StorageClasses...":ke.value?"Failed to load StorageClasses":ee.value.length===0?"No StorageClass found":"Select StorageClass"),_e=f(()=>pe.value?ye.value?"StorageClass list is loading.":ke.value?"StorageClass list could not be loaded.":ee.value.length===0?"This application requires a StorageClass, but none was found.":Z.isEmpty($.value)?"This application requires a StorageClass.":"":""),Jl=f(()=>sl(Le.value)?"Optional: https://s3.ap-northeast-2.amazonaws.com":"https://object-storage.example.com"),Yl=f(()=>sl(Le.value)?"ap-northeast-2":"region from object storage service"),Ie=f(()=>!q.value||!ol(q.value)?!1:v.value==="VM"?!!q.value.packageInfo&&O.value:v.value==="K8S"?!!q.value.helmChart||O.value:!1),tl=f(()=>Ie.value&&n.value.enabled),al=f(()=>{var a;return!tl.value||((a=w.value)==null?void 0:a.success)===!0}),ql=f(()=>Ae.value||ve.value||!!k.value||H.value||!al.value||pe.value&&!Z.isEmpty(_e.value));function De(a=Le.value,e=Ke.value){const l=sl(a);return{enabled:!!e,selectedStorageIds:[],accessMode:"READ_ONLY",backendType:"s3",endpoint:"",region:"",bucket:"",prefix:"",accessKey:"",secretKey:"",sessionToken:"",jupyterToken:"",forcePathStyle:!l}}function sl(a){return String(a||"").toLowerCase().includes("aws")}const Ke=f(()=>v.value==="K8S"&&el.value||O.value);function ol(a){return gl(a,fo)}function gl(a,e){return(a.catalogRefs||[]).some(r=>{const u=String(r.refType||"").toUpperCase();return String(r.refValue||"").toLowerCase()===e&&zl.includes(u)})}function nl(){if(v.value==="VM"||O.value){const a=n.value.selectedStorageIds||[];return{enabled:n.value.enabled,jupyterToken:n.value.jupyterToken,storages:a.map(e=>({objectStorageId:e,alias:e,prefix:n.value.prefix,accessMode:n.value.accessMode}))}}return{enabled:n.value.enabled,backendType:n.value.backendType,endpoint:n.value.endpoint,region:n.value.region,bucket:n.value.bucket,prefix:n.value.prefix,accessKey:n.value.accessKey,secretKey:n.value.secretKey,sessionToken:n.value.sessionToken,jupyterToken:n.value.jupyterToken,forcePathStyle:n.value.forcePathStyle,insecure:Xl(n.value.endpoint)}}function Wl(){if(!(!Ie.value||!n.value.enabled))return{objectStorage:nl()}}function Zl(){const a={};return pe.value&&!Z.isEmpty($.value)&&(a.storageClass=$.value),Ie.value&&n.value.enabled&&(a.objectStorage=nl()),Object.keys(a).length>0?a:void 0}function yl(){if(!pe.value)return!0;const a=_e.value;return Z.isEmpty(a)?!0:(y.error(a),!1)}function Xl(a){return String(a||"").trim().toLowerCase().startsWith("http://")}const Ql=async(a=!0)=>{if(!tl.value)return!0;Ve.value=!0,w.value=null;const e={targetType:v.value,namespace:b.value,clusterName:v.value==="K8S"?E.value:void 0,mciId:v.value==="VM"?j.value:void 0,vmId:v.value==="VM"?h.value[0]:void 0,catalogId:K.value,objectStorage:nl()};try{const{data:l}=await mt(e);return w.value=l,l!=null&&l.success?(a&&y.success("Object Storage check succeeded"),!0):(a&&y.error("Object Storage check failed"),!1)}catch{return a&&y.error("Object Storage check failed"),!1}finally{Ve.value=!1}},kl=f(()=>v.value==="VM"?be.value.filter(a=>a.packageInfo):v.value==="K8S"?be.value.filter(a=>{var e;return a.helmChart||String(((e=a.packageInfo)==null?void 0:e.packageName)||"").toLowerCase().includes("jupyter")&&ol(a)}):be.value),hl=async()=>{m.value==="Application Installation"&&(H.value=!0);const a=be.value.find(e=>J.value===e.name);a&&(K.value=a.id,F.value=v.value==="K8S"&&O.value?"8888":a.defaultPort?String(a.defaultPort):"",S.value={hpaEnabled:!!a.hpaEnabled,hpaMinReplicas:a.minReplicas||1,hpaMaxReplicas:a.maxReplicas||10,hpaCpuUtilization:a.cpuThreshold||60,hpaMemoryUtilization:a.memoryThreshold||80},g.value={ingressEnabled:!!a.ingressEnabled,ingressHost:a.ingressHost||"",ingressPath:a.ingressPath||"/",ingressClass:a.ingressClass||"nginx",ingressTlsEnabled:!!a.ingressTlsEnabled,ingressTlsSecret:a.ingressTlsSecret||""},v.value==="K8S"&&O.value&&(g.value.ingressEnabled=!0,S.value.hpaEnabled=!1,S.value.hpaMinReplicas=1),n.value=De(),w.value=null),await Ue(),await Xe()},et=async()=>{m.value==="Application Installation"&&(H.value=!0),n.value=De(),w.value=null,await Xe()};return(a,e)=>(o(),s("div",{class:me(a.embedded?"install-embedded":"modal fade"),id:a.formId,tabindex:a.embedded?void 0:-1},[t("div",{class:me(["modal-dialog modal-lg",{"install-embedded-dialog":a.embedded}]),role:"document"},[t("div",Ct,[t("div",It,[t("h5",wt,d(m.value),1),a.embedded?c("",!0):(o(),s("button",{key:0,type:"button",class:"btn-close","data-bs-dismiss":"modal","aria-label":"Close",onClick:Te}))]),t("div",{class:me(["modal-body",{"install-embedded-body":a.embedded}]),style:ot(a.embedded?void 0:"max-height: calc(100vh - 200px);overflow-y: auto;")},[$e.value?(o(),s("div",Et,[e[50]||(e[50]=te(" Deployment targets are scoped to ")),t("strong",null,d(dl.value),1),e[51]||(e[51]=te(". "))])):c("",!0),k.value?(o(),s("div",Vt,d(k.value),1)):c("",!0),T.value?(o(),s("div",At,[e[52]||(e[52]=te(" The deployment target was fixed by the Workload screen: ")),t("strong",null,d(Cl.value),1),e[53]||(e[53]=te(". "))])):c("",!0),t("div",xt,[e[54]||(e[54]=t("label",{class:"form-label"},"Target Infra",-1)),m.value=="Application Installation"?(o(),s("p",jt," Select the Infra what is the Infra will be installed ")):m.value=="Application Uninstallation"?(o(),s("p",Tt," Select the Infra what is the Infra will be uninstalled ")):c("",!0),i(t("select",{class:"form-select",id:"infra","onUpdate:modelValue":e[0]||(e[0]=l=>v.value=l),disabled:T.value},[(o(!0),s(I,null,x(Fe.value,l=>(o(),s("option",{value:l.value,key:l.value},d(l.value),9,Rt))),128))],8,Mt),[[_,v.value]])]),v.value=="VM"?(o(),s(I,{key:3},[t("div",Pt,[e[56]||(e[56]=t("label",{class:"form-label"},"Namespace",-1)),m.value=="Application Installation"?(o(),s("p",Nt," Select the namespace where the application will be installed")):m.value=="Application Uninstallation"?(o(),s("p",Ut," Select the namespace where the application will be uninstalled")):c("",!0),re.value.length>0?i((o(),s("select",{key:2,class:"form-select",id:"vm-namespace","onUpdate:modelValue":e[1]||(e[1]=l=>b.value=l),disabled:il.value,onChange:xl},[(o(!0),s(I,null,x(re.value,l=>(o(),s("option",{value:Ce(l),key:Ce(l)},d(l.name||l.id),9,Lt))),128))],40,Ot)),[[_,b.value]]):(o(),s("select",_t,e[55]||(e[55]=[t("option",{value:""}," No namespace available ",-1)])))]),t("div",Dt,[e[57]||(e[57]=t("label",{class:"form-label"},"Infra ID",-1)),m.value=="Application Installation"?(o(),s("p",Kt," Select the infra ID where the application will be deployed")):m.value=="Application Uninstallation"?(o(),s("p",Gt," Remove the application and associated resources from the infra")):c("",!0),i(t("select",{class:"form-select",id:"vm-mci",disabled:b.value==""||T.value,"onUpdate:modelValue":e[2]||(e[2]=l=>j.value=l),onChange:jl},[se.value.length===0?(o(),s("option",zt,"No infra available")):c("",!0),(o(!0),s(I,null,x(se.value,l=>(o(),s("option",{value:l.id||l.name,key:l.id||l.name,title:l.id||l.name},d(l.id||l.name),9,$t))),128))],40,Bt),[[_,j.value]])]),m.value=="Application Installation"&&!T.value?(o(),s("div",Ft,[e[60]||(e[60]=t("label",{class:"form-label"},"Deployment Target",-1)),e[61]||(e[61]=t("p",{class:"text-muted"},"Choose one VM or one CB-Tumblebug NodeGroup.",-1)),t("div",Ht,[t("div",Jt,[i(t("input",{class:"form-check-input",type:"radio",id:"vm-target-single","onUpdate:modelValue":e[3]||(e[3]=l=>M.value=l),value:"VM"},null,512),[[Ge,M.value]]),e[58]||(e[58]=t("label",{class:"form-check-label",for:"vm-target-single"},"VM",-1))]),t("div",Yt,[i(t("input",{class:"form-check-input",type:"radio",id:"vm-target-node-group","onUpdate:modelValue":e[4]||(e[4]=l=>M.value=l),value:"NODE_GROUP"},null,512),[[Ge,M.value]]),e[59]||(e[59]=t("label",{class:"form-check-label",for:"vm-target-node-group"},"NodeGroup (Standalone)",-1))])])])):c("",!0),M.value==="VM"?(o(),s("div",qt,[e[63]||(e[63]=t("label",{class:"form-label"},"VM Name",-1)),e[64]||(e[64]=t("p",{class:"text-muted"}," Select the virtual machine (VM) within the chosen multi-cloud infrastructure where the application will be deployed",-1)),i(t("select",{class:"form-select",id:"vm-name",disabled:j.value==""||T.value,"onUpdate:modelValue":e[5]||(e[5]=l=>D.value=l),onChange:Ml},[e[62]||(e[62]=t("option",{value:""},"Select VM",-1)),(o(!0),s(I,null,x(G.value,l=>(o(),s("option",{value:je(l),key:je(l)},d(l.name||l.id),9,Zt))),128))],40,Wt),[[_,D.value]]),h.value.length>0?(o(),s("div",Xt,[(o(!0),s(I,null,x(h.value,(l,r)=>(o(),s("label",{key:r,class:"form-check-label",style:{border:"1px solid #000",padding:"5px","border-radius":"5px",cursor:"pointer"}},[te(d(l)+" ",1),T.value?c("",!0):(o(),s("span",{key:0,onClick:u=>Pl(r),style:{"margin-left":"5px","font-weight":"bold"}},"X",8,Qt))]))),128))])):c("",!0)])):(o(),s("div",ea,[e[67]||(e[67]=t("label",{class:"form-label"},"NodeGroup",-1)),e[68]||(e[68]=t("p",{class:"text-muted"}," Deploy one independent application instance to every currently running VM in the selected NodeGroup. ",-1)),i(t("select",{class:"form-select",id:"vm-node-group",disabled:j.value=="","onUpdate:modelValue":e[6]||(e[6]=l=>N.value=l),onChange:Rl},[e[65]||(e[65]=t("option",{value:""},"Select NodeGroup",-1)),(o(!0),s(I,null,x(Je.value,l=>(o(),s("option",{key:l.id,value:l.id,disabled:l.runningVmIds.length===0},d(l.id)+" ("+d(l.runningVmIds.length)+"/"+d(l.totalVmCount)+" running) ",9,ta))),128))],40,la),[[_,N.value]]),N.value&&Ye.value.length>0?(o(),s("div",aa,[e[66]||(e[66]=t("div",{class:"text-muted small mb-1"},"Deployment targets",-1)),t("div",sa,[(o(!0),s(I,null,x(Ye.value,l=>(o(),s("span",{key:l,class:"badge bg-light text-dark"},d(l),1))),128))])])):N.value?(o(),s("div",oa," The selected NodeGroup has no running VMs. ")):c("",!0)])),M.value==="VM"?(o(),s("div",na,[e[71]||(e[71]=t("label",{class:"form-label"},"Deployment Type",-1)),e[72]||(e[72]=t("p",{class:"text-muted"},"Select the deployment type",-1)),t("div",ra,[t("div",ua,[i(t("input",{class:"form-check-input",type:"radio",id:"Standalone","onUpdate:modelValue":e[7]||(e[7]=l=>A.value=l),value:"Standalone",disabled:T.value},null,8,ia),[[Ge,A.value]]),e[69]||(e[69]=t("label",{class:"form-check-label",for:"Standalone"},"Standalone",-1))]),Qe.value?(o(),s("div",da,[i(t("input",{class:"form-check-input",type:"radio",id:"Clustering","onUpdate:modelValue":e[8]||(e[8]=l=>A.value=l),value:"Clustering",disabled:T.value},null,8,va),[[Ge,A.value]]),e[70]||(e[70]=t("label",{class:"form-check-label",for:"Clustering"},"Clustering",-1))])):c("",!0)]),T.value?c("",!0):(o(),s("div",ca,"Clustering is available only for Redis and Elasticsearch server catalogs."))])):(o(),s("div",pa,e[73]||(e[73]=[t("label",{class:"form-label"},"Deployment Type",-1),t("input",{type:"text",class:"form-control",value:"Standalone",disabled:""},null,-1),t("div",{class:"form-text"},"NodeGroup deployment does not use application clustering.",-1)]))),t("div",ma,[e[74]||(e[74]=t("label",{class:"form-label"},"Application",-1)),e[75]||(e[75]=t("p",{class:"text-muted"},"Select the application",-1)),i(t("select",{class:"form-select","onUpdate:modelValue":e[9]||(e[9]=l=>J.value=l),onChange:hl},[(o(!0),s(I,null,x(kl.value,(l,r)=>{var u;return o(),s("option",{key:r,value:l.name}," ["+d(l.name)+"] "+d(((u=l.packageInfo)==null?void 0:u.packageVersion)||"latest"),9,fa)}),128))],544),[[_,J.value]])]),t("div",ba,[e[76]||(e[76]=t("label",{class:"form-label"},"Port",-1)),e[77]||(e[77]=t("p",{class:"text-muted"},"Docker host port. Security Group access is configured separately below.",-1)),i(t("input",{type:"number",class:"form-control",placeholder:"8080","onUpdate:modelValue":e[10]||(e[10]=l=>F.value=l)},null,512),[[V,F.value]])]),m.value=="Application Installation"?(o(),s("div",ga,[e[81]||(e[81]=t("label",{class:"form-label"},"Network Exposure",-1)),i(t("select",{class:"form-select","onUpdate:modelValue":e[11]||(e[11]=l=>de.value=l)},e[78]||(e[78]=[t("option",{value:"PRIVATE"},"Do not change Security Group (recommended)",-1),t("option",{value:"RESTRICTED"},"Add restricted direct access",-1)]),512),[[_,de.value]]),e[82]||(e[82]=t("p",{class:"text-muted mt-1 mb-0"}," Direct access appends one inbound TCP rule through Tumblebug. It never resaves existing rules. ",-1)),de.value==="RESTRICTED"?(o(),s("div",ya,[e[79]||(e[79]=t("label",{class:"form-label required"},"Allowed IPv4 CIDR",-1)),i(t("input",{type:"text",class:"form-control",placeholder:"203.0.113.10/32","onUpdate:modelValue":e[12]||(e[12]=l=>B.value=l)},null,512),[[V,B.value,void 0,{trim:!0}]]),e[80]||(e[80]=t("p",{class:"text-warning mt-1 mb-0"}," Public any (0.0.0.0/0) is rejected. Broader rules already present in the Security Group are not removed. ",-1))])):c("",!0)])):c("",!0),m.value=="Application Installation"?(o(),s("div",ka,[e[84]||(e[84]=t("label",{class:"form-label"},"Resource Type",-1)),i(t("select",{class:"form-select","onUpdate:modelValue":e[13]||(e[13]=l=>ie.value=l)},e[83]||(e[83]=[t("option",{value:"GENERAL_PURPOSE"},"General Purpose",-1),t("option",{value:"CPU_INTENSIVE"},"CPU Intensive",-1),t("option",{value:"MEMORY_INTENSIVE"},"Memory Intensive",-1)]),512),[[_,ie.value]])])):c("",!0),m.value=="Application Installation"&&Ie.value?(o(),s("div",ha,[e[92]||(e[92]=t("label",{class:"form-label"},"Object Storage Configuration",-1)),e[93]||(e[93]=t("p",{class:"text-muted"}," Select Object Storage resources already registered in Tumblebug. CSP access keys are not sent to JupyterLab. ",-1)),t("div",Sa,[i(t("input",{class:"form-check-input",type:"checkbox",id:"vmObjectStorageEnabled","onUpdate:modelValue":e[14]||(e[14]=l=>n.value.enabled=l),disabled:Ke.value},null,8,Ca),[[W,n.value.enabled]]),e[85]||(e[85]=t("label",{class:"form-check-label",for:"vmObjectStorageEnabled"},"Enable Object Storage",-1))]),n.value.enabled?(o(),s("div",Ia,[t("div",wa,[e[86]||(e[86]=t("label",{class:"form-label mb-0 required"},"Registered Object Storage",-1)),t("button",{type:"button",class:"btn btn-sm btn-outline-secondary",disabled:ue.value,onClick:Ue}," Refresh ",8,Ea)]),ue.value?(o(),s("div",Va,"Loading Object Storage resources...")):ge.value?(o(),s("div",Aa," Object Storage resources could not be loaded from Tumblebug. ")):Q.value.length===0?(o(),s("div",xa," No Object Storage resource is registered in this namespace. ")):(o(),s("div",ja,[(o(!0),s(I,null,x(Q.value,l=>(o(),s("div",{class:"form-check",key:l.id},[i(t("input",{class:"form-check-input",type:"checkbox",id:`vm-object-storage-${l.id}`,value:l.id,disabled:String(l.status||"").toLowerCase()!=="available","onUpdate:modelValue":e[15]||(e[15]=r=>n.value.selectedStorageIds=r)},null,8,Ta),[[W,n.value.selectedStorageIds]]),t("label",{class:"form-check-label",for:`vm-object-storage-${l.id}`},[te(d(l.name||l.id)+" ",1),t("span",Ra," ("+d(l.provider||"unknown CSP")+d(l.region?` / ${l.region}`:"")+" / "+d(l.status||"unknown")+") ",1)],8,Ma)]))),128))])),t("div",Pa,[t("div",Na,[e[87]||(e[87]=t("label",{class:"form-label"},"Allowed Object Prefix",-1)),i(t("input",{type:"text",class:"form-control",placeholder:"Optional: data/project-a/","onUpdate:modelValue":e[16]||(e[16]=l=>n.value.prefix=l)},null,512),[[V,n.value.prefix,void 0,{trim:!0}]])]),t("div",Ua,[e[89]||(e[89]=t("label",{class:"form-label"},"Access Mode",-1)),i(t("select",{class:"form-select","onUpdate:modelValue":e[17]||(e[17]=l=>n.value.accessMode=l)},e[88]||(e[88]=[t("option",{value:"READ_ONLY"},"Read only",-1),t("option",{value:"READ_WRITE"},"Read and write",-1)]),512),[[_,n.value.accessMode]])])]),t("div",Oa,[e[90]||(e[90]=t("label",{class:"form-label required"},"Jupyter Access Token",-1)),i(t("input",{type:"password",class:"form-control",placeholder:"At least 12 characters","onUpdate:modelValue":e[18]||(e[18]=l=>n.value.jupyterToken=l),autocomplete:"new-password"},null,512),[[V,n.value.jupyterToken]]),t("p",La," This is the Jupyter login token, not a CSP secret key. Use it at http://:"+d(F.value)+". ",1)]),e[91]||(e[91]=t("p",{class:"text-muted mt-2 mb-0"}," Jupyter requests short-lived presigned URLs through Application Manager. Multiple CSPs can be selected. ",-1)),w.value?(o(),s("div",{key:4,class:me(["alert mt-3",w.value.success?"alert-success":"alert-danger"])},[t("div",null,d(w.value.success?"Object Storage: SUCCESS":"Object Storage: FAILED"),1),t("ul",_a,[(o(!0),s(I,null,x(w.value.checks,l=>(o(),s("li",{key:l.name},d(l.name)+" - "+d(l.success?"OK":"FAIL"),1))),128))])],2)):c("",!0)])):c("",!0)])):c("",!0)],64)):v.value=="K8S"?(o(),s(I,{key:4},[t("div",Da,[e[95]||(e[95]=t("label",{class:"form-label"},"Namespace",-1)),m.value=="Application Installation"?(o(),s("p",Ka,"Select the namespace where the application will be installed")):m.value=="Application Uninstallation"?(o(),s("p",Ga,"Select the namespace where the application will be uninstalled")):c("",!0),re.value.length>0?i((o(),s("select",{key:2,class:"form-select",id:"k8s-namespace","onUpdate:modelValue":e[19]||(e[19]=l=>b.value=l),disabled:il.value,onChange:Tl},[(o(!0),s(I,null,x(re.value,l=>(o(),s("option",{value:Ce(l),key:Ce(l)},d(l.name||l.id),9,za))),128))],40,Ba)),[[_,b.value]]):(o(),s("select",$a,e[94]||(e[94]=[t("option",{value:""}," No namespace available ",-1)])))]),t("div",Fa,[e[96]||(e[96]=t("label",{class:"form-label"},"ClusterName",-1)),m.value=="Application Installation"?(o(),s("p",Ha,"Select the name of the cluster where the application will be deployed")):m.value=="Application Uninstallation"?(o(),s("p",Ja,"Remove the application and associated resources from the multi-cloud infrastructure")):c("",!0),i(t("select",{class:"form-select",id:"k8s-cluster",disabled:b.value==""||T.value,"onUpdate:modelValue":e[20]||(e[20]=l=>E.value=l),onChange:et},[le.value.length===0?(o(),s("option",qa,"No cluster available")):c("",!0),(o(!0),s(I,null,x(le.value,l=>(o(),s("option",{value:Ne(l),key:Ne(l)},d(l.name||l.id),9,Wa))),128))],40,Ya),[[_,E.value]])]),t("div",Za,[e[97]||(e[97]=t("label",{class:"form-label"},"Helm chart",-1)),e[98]||(e[98]=t("p",{class:"text-muted"},"Select the application",-1)),i(t("select",{class:"form-select","onUpdate:modelValue":e[21]||(e[21]=l=>J.value=l),onChange:hl},[(o(!0),s(I,null,x(kl.value,(l,r)=>{var u,L;return o(),s("option",{key:r,value:l.name}," ["+d(l.name)+"] "+d(((u=l.helmChart)==null?void 0:u.chartVersion)||((L=l.packageInfo)==null?void 0:L.packageVersion)||"latest"),9,Xa)}),128))],544),[[_,J.value]])]),m.value=="Application Installation"?(o(),s("div",Qa,[e[99]||(e[99]=t("label",{class:"form-label"},"Port",-1)),e[100]||(e[100]=t("p",{class:"text-muted"},"Please enter a service port for the Kubernetes service",-1)),i(t("input",{type:"number",class:"form-control",placeholder:"80","onUpdate:modelValue":e[22]||(e[22]=l=>F.value=l),disabled:O.value},null,8,es),[[V,F.value]])])):c("",!0),m.value=="Application Installation"?(o(),s("div",ls,[e[102]||(e[102]=t("label",{class:"form-label"},"Resource Type",-1)),i(t("select",{class:"form-select","onUpdate:modelValue":e[23]||(e[23]=l=>ie.value=l)},e[101]||(e[101]=[t("option",{value:"GENERAL_PURPOSE"},"General Purpose",-1),t("option",{value:"CPU_INTENSIVE"},"CPU Intensive",-1),t("option",{value:"MEMORY_INTENSIVE"},"Memory Intensive",-1)]),512),[[_,ie.value]])])):c("",!0),m.value=="Application Installation"&&$l.value?(o(),s("div",ts,[t("label",{class:me(["form-label",{required:pe.value}])},"Storage Class",2),i(t("select",{class:"form-select","onUpdate:modelValue":e[24]||(e[24]=l=>$.value=l),disabled:Fl.value},[t("option",ss,d(Hl.value),1),(o(!0),s(I,null,x(ee.value,l=>(o(),s("option",{key:l.name,value:l.name},d(l.name)+d(l.defaultClass?" (default)":""),9,os))),128))],8,as),[[_,$.value]]),pe.value&&_e.value?(o(),s("p",ns,d(_e.value),1)):c("",!0)])):c("",!0),m.value=="Application Installation"&&g.value.ingressEnabled?(o(),s("div",rs,[e[104]||(e[104]=t("label",{class:"form-label required"},"Allowed IPv4 CIDR",-1)),i(t("input",{class:"form-control",placeholder:"203.0.113.10/32","onUpdate:modelValue":e[25]||(e[25]=l=>B.value=l)},null,512),[[V,B.value,void 0,{trim:!0}]]),t("div",us,[i(t("input",{class:"form-check-input",type:"checkbox",id:"k8sOpenIngress","onUpdate:modelValue":e[26]||(e[26]=l=>He.value=l)},null,512),[[W,He.value]]),e[103]||(e[103]=t("label",{class:"form-check-label",for:"k8sOpenIngress"},"Allow this CIDR on the worker Security Group (TCP 30880)",-1))]),t("p",is,"Access: http://"+d(g.value.ingressHost||"your-ingress-host")+":30880. For testing, map this hostname to an accessible Kubernetes node public IP in your PC hosts file. With source-IP preservation, use a node running the Ingress Controller.",1)])):c("",!0),m.value=="Application Installation"?(o(),s("div",ds,[e[112]||(e[112]=t("label",{class:"form-label"},"HPA Configuration",-1)),t("div",vs,[t("div",cs,[i(t("input",{class:"form-check-input",type:"checkbox",id:"hpaEnabled","onUpdate:modelValue":e[27]||(e[27]=l=>S.value.hpaEnabled=l)},null,512),[[W,S.value.hpaEnabled]]),e[105]||(e[105]=t("label",{class:"form-check-label",for:"hpaEnabled"}," Enable HPA (Horizontal Pod Autoscaler) ",-1))])]),S.value.hpaEnabled?(o(),s("div",ps,[t("div",null,[e[106]||(e[106]=t("label",{class:"form-label required"}," minReplicas ",-1)),i(t("input",{type:"number",class:"form-control w-90-per",placeholder:"1","onUpdate:modelValue":e[28]||(e[28]=l=>S.value.hpaMinReplicas=l)},null,512),[[V,S.value.hpaMinReplicas]])]),t("div",null,[e[107]||(e[107]=t("label",{class:"form-label required"}," maxReplicas ",-1)),i(t("input",{type:"number",class:"form-control w-90-per",placeholder:"10","onUpdate:modelValue":e[29]||(e[29]=l=>S.value.hpaMaxReplicas=l)},null,512),[[V,S.value.hpaMaxReplicas]])]),t("div",null,[e[108]||(e[108]=t("label",{class:"form-check-label mb-2"}," CPU (%) ",-1)),i(t("input",{type:"number",class:"form-control w-80-per d-inline",placeholder:"60","onUpdate:modelValue":e[30]||(e[30]=l=>S.value.hpaCpuUtilization=l)},null,512),[[V,S.value.hpaCpuUtilization]]),e[109]||(e[109]=te(" % "))]),t("div",null,[e[110]||(e[110]=t("label",{class:"form-check-label mb-2"}," MEMORY (%) ",-1)),i(t("input",{type:"number",class:"form-control w-80-per d-inline",placeholder:"80","onUpdate:modelValue":e[31]||(e[31]=l=>S.value.hpaMemoryUtilization=l)},null,512),[[V,S.value.hpaMemoryUtilization]]),e[111]||(e[111]=te(" % "))])])):c("",!0)])):c("",!0),m.value=="Application Installation"?(o(),s("div",ms,[e[114]||(e[114]=t("label",{class:"form-label"},"Workload Rebalancing",-1)),t("div",fs,[t("div",bs,[i(t("input",{class:"form-check-input",type:"checkbox",id:"workloadRebalancingEnabled","onUpdate:modelValue":e[32]||(e[32]=l=>Ee.value=l)},null,512),[[W,Ee.value]]),e[113]||(e[113]=t("label",{class:"form-check-label",for:"workloadRebalancingEnabled"}," Enable Workload Rebalancing ",-1))])])])):c("",!0),m.value=="Application Installation"?(o(),s("div",gs,[e[119]||(e[119]=t("label",{class:"form-label"},"Ingress Configuration",-1)),t("div",ys,[t("div",ks,[i(t("input",{class:"form-check-input",type:"checkbox",id:"ingressEnabled","onUpdate:modelValue":e[33]||(e[33]=l=>g.value.ingressEnabled=l)},null,512),[[W,g.value.ingressEnabled]]),e[115]||(e[115]=t("label",{class:"form-check-label",for:"ingressEnabled"}," Enable Ingress ",-1))])]),g.value.ingressEnabled?(o(),s("div",hs,[t("div",Ss,[e[116]||(e[116]=t("label",{class:"form-label"},"Host",-1)),i(t("input",{type:"text",class:"form-control",placeholder:"example.com","onUpdate:modelValue":e[34]||(e[34]=l=>g.value.ingressHost=l)},null,512),[[V,g.value.ingressHost]])]),t("div",Cs,[e[117]||(e[117]=t("label",{class:"form-label"},"Path",-1)),i(t("input",{type:"text",class:"form-control",placeholder:"/","onUpdate:modelValue":e[35]||(e[35]=l=>g.value.ingressPath=l)},null,512),[[V,g.value.ingressPath]])]),t("div",Is,[e[118]||(e[118]=t("label",{class:"form-label"},"Ingress Class",-1)),i(t("input",{type:"text",class:"form-control",placeholder:"nginx","onUpdate:modelValue":e[36]||(e[36]=l=>g.value.ingressClass=l),disabled:""},null,512),[[V,g.value.ingressClass]])])])):c("",!0)])):c("",!0),m.value=="Application Installation"&&Ie.value&&O.value?(o(),s("div",ws,[e[128]||(e[128]=t("label",{class:"form-label"},"Object Storage Configuration",-1)),e[129]||(e[129]=t("p",{class:"text-muted"}," Select Object Storage resources already registered in Tumblebug. CSP access keys are not sent to JupyterLab. ",-1)),t("div",Es,[i(t("input",{class:"form-check-input",type:"checkbox",id:"k8sJupyterObjectStorageEnabled","onUpdate:modelValue":e[37]||(e[37]=l=>n.value.enabled=l),disabled:Ke.value},null,8,Vs),[[W,n.value.enabled]]),e[120]||(e[120]=t("label",{class:"form-check-label",for:"k8sJupyterObjectStorageEnabled"},"Enable Object Storage",-1))]),n.value.enabled?(o(),s("div",As,[t("div",xs,[e[121]||(e[121]=t("label",{class:"form-label mb-0 required"},"Registered Object Storage",-1)),t("button",{type:"button",class:"btn btn-sm btn-outline-secondary",disabled:ue.value,onClick:Ue}," Refresh ",8,js)]),ue.value?(o(),s("div",Ts,"Loading Object Storage resources...")):ge.value?(o(),s("div",Ms," Object Storage resources could not be loaded from Tumblebug. ")):Q.value.length===0?(o(),s("div",Rs," No Object Storage resource is registered in this namespace. ")):(o(),s("div",Ps,[(o(!0),s(I,null,x(Q.value,l=>(o(),s("div",{class:"form-check",key:l.id},[i(t("input",{class:"form-check-input",type:"checkbox",id:`vm-object-storage-${l.id}`,value:l.id,disabled:String(l.status||"").toLowerCase()!=="available","onUpdate:modelValue":e[38]||(e[38]=r=>n.value.selectedStorageIds=r)},null,8,Ns),[[W,n.value.selectedStorageIds]]),t("label",{class:"form-check-label",for:`vm-object-storage-${l.id}`},[te(d(l.name||l.id)+" ",1),t("span",Os," ("+d(l.provider||"unknown CSP")+d(l.region?` / ${l.region}`:"")+" / "+d(l.status||"unknown")+") ",1)],8,Us)]))),128))])),t("div",Ls,[t("div",_s,[e[122]||(e[122]=t("label",{class:"form-label"},"Allowed Object Prefix",-1)),i(t("input",{type:"text",class:"form-control",placeholder:"Optional: data/project-a/","onUpdate:modelValue":e[39]||(e[39]=l=>n.value.prefix=l)},null,512),[[V,n.value.prefix,void 0,{trim:!0}]])]),t("div",Ds,[e[124]||(e[124]=t("label",{class:"form-label"},"Access Mode",-1)),i(t("select",{class:"form-select","onUpdate:modelValue":e[40]||(e[40]=l=>n.value.accessMode=l)},e[123]||(e[123]=[t("option",{value:"READ_ONLY"},"Read only",-1),t("option",{value:"READ_WRITE"},"Read and write",-1)]),512),[[_,n.value.accessMode]])])]),t("div",Ks,[e[125]||(e[125]=t("label",{class:"form-label required"},"Jupyter Access Token",-1)),i(t("input",{type:"password",class:"form-control",placeholder:"At least 12 characters","onUpdate:modelValue":e[41]||(e[41]=l=>n.value.jupyterToken=l),autocomplete:"new-password"},null,512),[[V,n.value.jupyterToken]]),e[126]||(e[126]=t("p",{class:"text-muted mt-1 mb-0"}," This is the Jupyter login token, not a CSP secret key. Use it at the Ingress URL shown below. ",-1))]),e[127]||(e[127]=t("p",{class:"text-muted mt-2 mb-0"}," Jupyter requests short-lived presigned URLs through Application Manager. Multiple CSPs can be selected. ",-1)),w.value?(o(),s("div",{key:4,class:me(["alert mt-3",w.value.success?"alert-success":"alert-danger"])},[t("div",null,d(w.value.success?"Object Storage: SUCCESS":"Object Storage: FAILED"),1),t("ul",Gs,[(o(!0),s(I,null,x(w.value.checks,l=>(o(),s("li",{key:l.name},d(l.name)+" - "+d(l.success?"OK":"FAIL"),1))),128))])],2)):c("",!0)])):c("",!0)])):c("",!0),m.value=="Application Installation"&&Ie.value&&!O.value?(o(),s("div",Bs,[e[139]||(e[139]=t("label",{class:"form-label"},"Object Storage Configuration",-1)),t("div",zs,[t("div",$s,[i(t("input",{class:"form-check-input",type:"checkbox",id:"objectStorageEnabled","onUpdate:modelValue":e[42]||(e[42]=l=>n.value.enabled=l),disabled:Ke.value},null,8,Fs),[[W,n.value.enabled]]),e[130]||(e[130]=t("label",{class:"form-check-label",for:"objectStorageEnabled"}," Enable Object Storage ",-1))])]),n.value.enabled?(o(),s("div",Hs,[t("div",Js,[t("div",Ys,[e[131]||(e[131]=t("label",{class:"form-label"},"Target CSP",-1)),t("input",{type:"text",class:"form-control",value:Le.value||"-",disabled:""},null,8,qs)]),e[132]||(e[132]=t("div",{class:"w-50 ms-2"},[t("label",{class:"form-label"},"Storage API"),t("input",{type:"text",class:"form-control",value:"S3-compatible",disabled:""})],-1))]),t("div",Ws,[e[133]||(e[133]=t("label",{class:"form-label"},"S3-compatible Endpoint",-1)),i(t("input",{type:"text",class:"form-control",placeholder:Jl.value,"onUpdate:modelValue":e[43]||(e[43]=l=>n.value.endpoint=l)},null,8,Zs),[[V,n.value.endpoint]])]),t("div",Xs,[t("div",Qs,[e[134]||(e[134]=t("label",{class:"form-label"},"Region",-1)),i(t("input",{type:"text",class:"form-control",placeholder:Yl.value,"onUpdate:modelValue":e[44]||(e[44]=l=>n.value.region=l)},null,8,eo),[[V,n.value.region]])]),t("div",lo,[e[135]||(e[135]=t("label",{class:"form-label"},"Bucket Name",-1)),i(t("input",{type:"text",class:"form-control",placeholder:"object-storage-bucket","onUpdate:modelValue":e[45]||(e[45]=l=>n.value.bucket=l)},null,512),[[V,n.value.bucket]])])]),t("div",to,[t("div",ao,[e[136]||(e[136]=t("label",{class:"form-label"},"Access Key ID",-1)),i(t("input",{type:"password",class:"form-control",placeholder:"access key id","onUpdate:modelValue":e[46]||(e[46]=l=>n.value.accessKey=l),autocomplete:"off"},null,512),[[V,n.value.accessKey]])]),t("div",so,[e[137]||(e[137]=t("label",{class:"form-label"},"Secret Access Key",-1)),i(t("input",{type:"password",class:"form-control",placeholder:"secret access key","onUpdate:modelValue":e[47]||(e[47]=l=>n.value.secretKey=l),autocomplete:"off"},null,512),[[V,n.value.secretKey]])])]),t("div",oo,[t("div",no,[i(t("input",{class:"form-check-input",type:"checkbox",id:"forcePathStyle","onUpdate:modelValue":e[48]||(e[48]=l=>n.value.forcePathStyle=l)},null,512),[[W,n.value.forcePathStyle]]),e[138]||(e[138]=t("label",{class:"form-check-label",for:"forcePathStyle",title:"On: endpoint/bucket/object. Off: bucket.endpoint/object."},"Use path-style URL",-1))])]),w.value?(o(),s("div",{key:0,class:me(["alert mt-3",w.value.success?"alert-success":"alert-danger"])},[t("div",null,d(w.value.success?"Object Storage: SUCCESS":"Object Storage: FAILED"),1),t("ul",ro,[(o(!0),s(I,null,x(w.value.checks,l=>(o(),s("li",{key:l.name},d(l.name)+" - "+d(l.success?"OK":"FAIL"),1))),128))])],2)):c("",!0)])):c("",!0)])):c("",!0)],64)):c("",!0)],6),he.value.length||xe.value.length?(o(),s("div",uo,[(o(!0),s(I,null,x(he.value,l=>(o(),s("div",{key:l,class:"alert alert-danger",role:"alert"},d(l),1))),128)),(o(!0),s(I,null,x(xe.value,l=>(o(),s("div",{key:l,class:"alert alert-warning"},d(l),1))),128))])):c("",!0),t("div",io,[t("a",{class:"btn btn-link link-secondary","data-bs-dismiss":a.embedded?void 0:"modal",onClick:Nl}," Cancel ",8,vo),t("div",null,[m.value=="Application Installation"&&tl.value?(o(),s("button",{key:0,class:"btn btn-outline-danger ms-auto me-1",onClick:e[49]||(e[49]=l=>Ql()),disabled:Ve.value||al.value,title:"Writes, reads, and deletes a temporary object in the selected bucket."},d(Ve.value?"Checking...":"Storage Check"),9,co)):c("",!0),m.value=="Application Installation"?(o(),s("button",{key:1,class:"btn btn-danger ms-auto me-1",onClick:_l,disabled:ve.value||!H.value||!!k.value},d(ve.value?"Checking...":"Spec Check"),9,po)):c("",!0),t("button",{class:"btn btn-primary ms-auto","data-bs-dismiss":a.embedded?void 0:"modal",onClick:Ll,disabled:ql.value},d(Ae.value?"Deploying…":"Deploy"),9,mo)])])])],2)],10,St))}}),Io=ft(go,[["__scopeId","data-v-e19c277a"]]);export{Io as A}; diff --git a/src/main/resources/static/assets/applicationInstallationForm-CIrFSkx4.css b/src/main/resources/static/assets/applicationInstallationForm-CIrFSkx4.css new file mode 100644 index 00000000..49b34c36 --- /dev/null +++ b/src/main/resources/static/assets/applicationInstallationForm-CIrFSkx4.css @@ -0,0 +1 @@ +.install-embedded[data-v-e19c277a]{width:100%}.install-embedded-dialog[data-v-e19c277a]{width:100%;max-width:960px;margin:0 auto}.install-embedded-body[data-v-e19c277a]{overflow-y:visible}.w-80-per[data-v-e19c277a]{width:80%!important}.w-90-per[data-v-e19c277a]{width:90%!important} diff --git a/src/main/resources/static/assets/applicationInstallationForm-CJ8rrk5z.js b/src/main/resources/static/assets/applicationInstallationForm-CJ8rrk5z.js new file mode 100644 index 00000000..7fcbb4e4 --- /dev/null +++ b/src/main/resources/static/assets/applicationInstallationForm-CJ8rrk5z.js @@ -0,0 +1 @@ +import{d as gl,f as yl,q as Il,J as hl,g as y,r as g,x as kl,h as me,i as Sl,c as s,a as l,t as v,m as f,n as Se,C as Cl,j as c,y as wl,e as de,F as N,k as U,v as F,z as We,l as O,A as se,o}from"./index-BKFNv1Gc.js";import{M as El}from"./bootstrap.esm-Ceob_0pG.js";import{_ as oe}from"./lodash-DPUzVvBK.js";import{s as Qe}from"./request-D9joEmfF.js";import{m as Vl,y as Al,z as Tl,A as Nl,r as jt,B as Ml,C as Pl,D as xl,E as Rl,F as jl,G as Ul,H as Ol}from"./softwareCatalog-DuMGACG8.js";import{_ as _l}from"./_plugin-vue_export-helper-DlAUqK2U.js";const Ut=["targetType","requestId","mciId","vmId","nodeGroupId","clusterId"],Ll=["namespace","namespaceId"],Ot=200,Dl=/[/?#]/,Gl=i=>Dl.test(i)||Array.from(i).some(C=>{const p=C.charCodeAt(0);return p<=31||p===127}),Kl=(i,C)=>{const p=i.getAll(C);return p.length>1?{ok:!1,error:`Query parameter "${C}" must be provided only once.`}:{ok:!0,value:String(p[0]||"").trim()}},Ce=(i,C,p=!1)=>C?C.length>Ot?`${i} must be ${Ot} characters or fewer.`:Gl(C)?`${i} contains unsupported path characters.`:"":p?`${i} is required.`:"",on=(i,C=()=>`am-install-${Date.now()}`)=>{const p=typeof i=="string"?new URLSearchParams(i.startsWith("?")?i.slice(1):i):i;for(const n of Ll)if(p.has(n))return{ok:!1,error:`${n} must not be supplied in the URL. Namespace comes from the selected Project context.`};for(const n of p.keys())if(!Ut.includes(n))return{ok:!1,error:`Unsupported query parameter "${n}".`};const I={};for(const n of Ut){const M=Kl(p,n);if(!M.ok)return M;I[n]=M.value}const A=I.targetType.toUpperCase();if(A!=="VM"&&A!=="K8S")return{ok:!1,error:"targetType must be VM or K8S."};const m=I.requestId||C(),z=[Ce("requestId",m,!0),Ce("mciId",I.mciId),Ce("vmId",I.vmId),Ce("nodeGroupId",I.nodeGroupId),Ce("clusterId",I.clusterId)].filter(Boolean);if(z.length>0)return{ok:!1,error:z[0]};if(A==="VM"){const n=[Ce("mciId",I.mciId,!0)].filter(Boolean);if(n.length>0)return{ok:!1,error:n[0]};if(!I.vmId&&!I.nodeGroupId)return{ok:!1,error:"vmId or nodeGroupId is required."};if(I.clusterId)return{ok:!1,error:"clusterId cannot be used with a VM target."}}if(A==="K8S"){const n=Ce("clusterId",I.clusterId,!0);if(n)return{ok:!1,error:n};if(I.mciId||I.vmId)return{ok:!1,error:"mciId and vmId cannot be used with a K8S target."};if(I.nodeGroupId)return{ok:!1,error:"nodeGroupId cannot be used with a K8S target."}}return{ok:!0,target:{requestId:m,targetType:A,mciId:I.mciId,vmId:I.vmId,nodeGroupId:I.nodeGroupId,clusterId:I.clusterId}}},_t=i=>String((i==null?void 0:i.id)||(i==null?void 0:i.name)||"").trim(),$l=(i,C)=>{const p=String(C||"").trim().toLowerCase();return[i==null?void 0:i.id,i==null?void 0:i.name].map(I=>String(I||"").trim().toLowerCase()).filter(Boolean).includes(p)},Bl=(i,C)=>{const p=Array.isArray(i)?i:[],I=String((C==null?void 0:C.vmId)||"").trim(),A=String((C==null?void 0:C.nodeGroupId)||"").trim();if(I){const n=p.find(M=>$l(M,I));return n?A&&String(n.subGroupId||"").trim()!==A?{ok:!1,error:`VM "${I}" does not belong to NodeGroup "${A}".`}:{ok:!0,mode:"VM",vm:n,vmId:_t(n),nodeGroupId:A}:{ok:!1,error:`VM "${I}" was not found.`}}const m=p.filter(n=>String((n==null?void 0:n.subGroupId)||"").trim()===A);if(m.length===0)return{ok:!1,error:`NodeGroup "${A}" was not found.`};const z=Array.from(new Set(m.filter(n=>String((n==null?void 0:n.status)||"").trim().toUpperCase()==="RUNNING").map(_t).filter(Boolean)));return z.length===0?{ok:!1,error:`NodeGroup "${A}" has no running VMs.`}:{ok:!0,mode:"NODE_GROUP",members:m,runningVmIds:z,nodeGroupId:A}},Fl=()=>Qe.get("/cbtumblebug/ns"),zl=i=>Qe.get(`/cbtumblebug/ns/${i}/infra`),Hl=i=>Qe.get(`/cbtumblebug/ns/${i.nsId}/infra/${i.mciId}`),ql=i=>Qe.get(`/cbtumblebug/ns/${i}/k8scluster`);function Yl(i){var A,m;const p=(m=String(((A=i==null?void 0:i.packageInfo)==null?void 0:A.packageName)||"").trim().toLowerCase().split("/").pop())==null?void 0:m.split(/[:@]/)[0];if(p!=="redis"&&p!=="elasticsearch")return!1;const I=String((i==null?void 0:i.name)||"").trim().toLowerCase();return new RegExp(`(^|[^a-z0-9])${p}([^a-z0-9]|$)`).test(I)&&!(p==="redis"&&I.includes("elasticsearch"))}async function Jl(i,C,p,I,A,m=()=>new Promise(n=>setTimeout(n,3e3)),z=3e3){let n=i;const M=i==null?void 0:i.id;for(let w=0;w<=z;w++){if(!A())throw new Error("The form or Project changed. Preparation may continue, but no application will be deployed from this request.");if(!M||(n==null?void 0:n.id)!==M||n.namespace!==C.namespace||n.clusterName!==C.clusterName)throw new Error("Ingress preparation returned a different target. Deployment stopped.");if(I(n.message||"Preparing IBM Ingress and HTTPS…"),n.state==="READY")return;if(n.state==="FAILED")throw new Error(n.message||"Ingress preparation failed.");if(!["QUEUED","RUNNING"].includes(n.state))throw new Error("Unknown Ingress preparation state.");if(w===z)break;if(await m(),!A())throw new Error("The form or Project changed. Check the existing preparation before retrying Deploy.");n=await p(M)}throw new Error("Ingress preparation is taking longer than expected. Check cluster status before retrying; no application was deployed.")}const Wl=["id","tabindex"],Ql={class:"modal-content"},Xl={class:"modal-header"},Zl={class:"modal-title"},ea={key:0,class:"alert alert-success mb-0",role:"status"},ta=["disabled"],la={key:0,class:"alert alert-info py-2",role:"status"},aa={key:1,class:"alert alert-warning py-2",role:"alert"},sa={key:2,class:"alert alert-secondary py-2",role:"status"},oa={class:"mb-3"},na={key:0,class:"text-muted"},ra={key:1,class:"text-muted"},ua=["disabled"],ia=["value"],da={class:"mb-3"},ca={key:0,class:"text-muted"},va={key:1,class:"text-muted"},pa=["disabled"],ma=["value"],fa={key:3,class:"form-select",id:"vm-namespace-empty",disabled:""},ba={class:"mb-3"},ga={key:0,class:"text-muted"},ya={key:1,class:"text-muted"},Ia=["disabled"],ha={key:0,value:""},ka=["value","title"],Sa={key:0,class:"mb-3"},Ca={class:"d-flex gap-3"},wa={class:"form-check"},Ea={class:"form-check"},Va={key:1,class:"mb-3"},Aa=["disabled"],Ta=["value"],Na={key:0,class:"mt-2",style:{display:"flex",gap:"10px","flex-wrap":"wrap"}},Ma=["onClick"],Pa={key:2,class:"mb-3"},xa=["disabled"],Ra=["value","disabled"],ja={key:0,class:"mt-2"},Ua={class:"d-flex gap-2 flex-wrap"},Oa={key:1,class:"text-warning mt-2"},_a={key:3,class:"mb-3"},La={style:{display:"flex",gap:"10px"}},Da={class:"form-check"},Ga=["disabled"],Ka={key:0,class:"form-check"},$a=["disabled"],Ba={key:0,class:"form-text"},Fa={key:4,class:"mb-3"},za={class:"mb-3"},Ha=["value"],qa={class:"mb-3"},Ya={key:5,class:"mb-3"},Ja={key:0,class:"mt-2"},Wa={key:6,class:"mb-3"},Qa={key:7,class:"mb-3"},Xa={class:"form-check mb-2"},Za=["disabled"],es={key:0},ts={class:"d-flex align-items-center justify-content-between mb-2"},ls=["disabled"],as={key:0,class:"text-muted"},ss={key:1,class:"alert alert-danger py-2"},os={key:2,class:"alert alert-warning py-2"},ns={key:3,class:"border rounded p-2"},rs=["id","value","disabled"],us=["for"],is={class:"text-muted"},ds={class:"d-flex justify-content-between mt-2"},cs={class:"w-50 me-2"},vs={class:"w-50 ms-2"},ps={class:"mt-2"},ms={class:"text-muted mt-1 mb-0"},fs={class:"mb-0 ps-3"},bs={class:"mb-3"},gs={key:0,class:"text-muted"},ys={key:1,class:"text-muted"},Is=["disabled"],hs=["value"],ks={key:3,class:"form-select",id:"k8s-namespace-empty",disabled:""},Ss={class:"mb-3"},Cs={key:0,class:"text-muted"},ws={key:1,class:"text-muted"},Es=["disabled"],Vs={key:0,value:""},As=["value"],Ts={class:"mb-3"},Ns=["value"],Ms={key:0,class:"mb-3"},Ps=["disabled"],xs={key:1,class:"mb-3"},Rs={key:2,class:"mb-3"},js=["disabled"],Us={value:"",disabled:""},Os=["value"],_s={key:0,class:"text-danger mt-1 mb-0"},Ls={key:3,class:"mb-3"},Ds={key:0,class:"form-check mt-2"},Gs={key:1,class:"text-muted mt-1"},Ks={key:2,class:"text-muted mt-1"},$s={key:4,class:"mb-3"},Bs={class:"mb-2"},Fs={class:"form-check"},zs={key:0,class:"d-flex justify-content-between"},Hs={key:5,class:"mb-3"},qs={class:"mb-2"},Ys={class:"form-check"},Js={key:6,class:"mb-3"},Ws={class:"mb-2"},Qs={class:"form-check"},Xs={key:0},Zs={class:"mb-2"},eo={key:0,class:"text-muted mb-1"},to={class:"mb-2"},lo={class:"mb-2"},ao=["value"],so={key:7,class:"mb-3"},oo={class:"form-check mb-2"},no=["disabled"],ro={key:0},uo={class:"d-flex align-items-center justify-content-between mb-2"},io=["disabled"],co={key:0,class:"text-muted"},vo={key:1,class:"alert alert-danger py-2"},po={key:2,class:"alert alert-warning py-2"},mo={key:3,class:"border rounded p-2"},fo=["id","value","disabled"],bo=["for"],go={class:"text-muted"},yo={class:"d-flex justify-content-between mt-2"},Io={class:"w-50 me-2"},ho={class:"w-50 ms-2"},ko={class:"mt-2"},So={class:"mb-0 ps-3"},Co={key:8,class:"mb-3"},wo={class:"mb-2"},Eo={class:"form-check"},Vo=["disabled"],Ao={key:0},To={class:"d-flex justify-content-between"},No={class:"w-50 me-2"},Mo=["value"],Po={class:"mt-2 mb-2"},xo=["placeholder"],Ro={class:"d-flex justify-content-between"},jo={class:"w-50 me-2"},Uo=["placeholder"],Oo={class:"w-50 ms-2"},_o={class:"d-flex justify-content-between mt-2"},Lo={class:"w-50 me-2"},Do={class:"w-50 ms-2"},Go={class:"d-flex gap-4 mt-3"},Ko={class:"form-check"},$o={class:"mb-0 ps-3"},Bo={key:0,class:"px-3","aria-live":"polite"},Fo={class:"modal-footer d-flex justify-content-between"},zo=["data-bs-dismiss"],Ho={key:1},qo=["disabled"],Yo=["disabled"],Jo=["disabled"],Wo="object-storage",Qo="storage-class",Xo=gl({__name:"applicationInstallationForm",props:{nsId:{default:""},title:{default:"Application Installation"},embedded:{type:Boolean,default:!1},formId:{default:"install-form"},targetType:{default:""},targetMciId:{default:""},targetVmId:{default:""},targetNodeGroupId:{default:""},targetClusterId:{default:""}},emits:["ready","deployment-event","cancel"],setup(i,{emit:C}){const p=yl(),I=Il(),A=hl(),m=i,z=C,n=y(()=>m.title),M=y(()=>String(m.targetType||"").toUpperCase()),w=y(()=>m.embedded&&["VM","K8S"].includes(M.value)),yt=y(()=>w.value&&M.value==="VM"&&!!String(m.targetNodeGroupId||"").trim()&&!String(m.targetVmId||"").trim()),Lt=y(()=>{if(M.value!=="VM")return`Kubernetes cluster ${m.targetClusterId}`;if(yt.value)return`NodeGroup ${m.targetNodeGroupId} in ${m.targetMciId}`;const a=String(m.targetNodeGroupId||"").trim();return a?`VM ${m.targetVmId} in NodeGroup ${a} / ${m.targetMciId}`:`VM ${m.targetVmId} in ${m.targetMciId}`}),Xe=a=>(Array.isArray(a)?a:[a]).flatMap(t=>typeof t=="string"?t.split(","):[t]).map(t=>String((t==null?void 0:t.id)||(t==null?void 0:t.name)||t||"").trim()).filter(Boolean),fe=(...a)=>{for(const e of a){const t=Xe(e);if(t.length>0)return t[0]}return""},G=y(()=>I.projectInfo||{}),_e=y(()=>I.workspaceInfo||{}),we=y(()=>fe(G.value.ns_id,G.value.nsId)),Le=y(()=>Xe(G.value.mci_ids??G.value.mciIds??G.value.mci_id??G.value.mciId)),De=y(()=>Xe(G.value.cluster_ids??G.value.clusterIds??G.value.cluster_id??G.value.clusterId)),Ze=y(()=>!!fe(G.value.id,G.value.name,we.value)),It=y(()=>Ze.value&&!!we.value),ht=y(()=>{const a=fe(_e.value.name,_e.value.id),e=fe(G.value.name,G.value.id);return[a,e].filter(Boolean).join(" / ")||"the selected project"}),Ge=y(()=>JSON.stringify([fe(_e.value.id,_e.value.name),fe(G.value.id,G.value.name),we.value,Le.value,De.value])),et=g([]),be=g([]),ce=g([]),H=g([]),Y=g([]),Ee=g([]),b=g(""),h=g(""),_=g(""),K=g(""),E=g([]),j=g("VM"),L=g(""),P=g("Standalone"),V=g({}),Re=g(!1),S=g({}),r=g({}),x=g(null),je=g(!1),ne=g([]),ge=g(!1),Ve=g(!1),re=g(!1),J=g(!1);let Ue=0,kt=!0;const St=()=>{Ue++};kl(()=>{var a;kt=!1,(a=document.getElementById(m.formId))==null||a.removeEventListener("hide.bs.modal",St)});const ye=g("GENERAL_PURPOSE"),ue=g([]),W=g(""),Ae=g(!1),Te=g(!1),ie=g([]),R=g(""),ee=g(""),Q=g(""),Ie=g("PRIVATE"),$=g(""),tt=g(!0),X=g(!0),he=g(!1),Ne=g([]),Oe=g([]);let ve=0;const q=g(0),k=g("");let D=0;const Me=a=>(a==null?void 0:a.id)||(a==null?void 0:a.name)||"",Ct=a=>(a==null?void 0:a.id)||(a==null?void 0:a.name)||"",Ke=a=>(a==null?void 0:a.id)||(a==null?void 0:a.name)||"",$e=a=>(a==null?void 0:a.name)||(a==null?void 0:a.id)||"",Dt=a=>String((a==null?void 0:a.status)||"").trim().toUpperCase()==="RUNNING",lt=y(()=>{const a=new Map;for(const e of Y.value){const t=String((e==null?void 0:e.subGroupId)||"").trim();if(!t)continue;const d=a.get(t)||{id:t,totalVmCount:0,runningVmIds:[]};d.totalVmCount+=1;const u=Ke(e);Dt(e)&&u&&!d.runningVmIds.includes(u)&&d.runningVmIds.push(u),a.set(t,d)}return Array.from(a.values()).sort((e,t)=>e.id.localeCompare(t.id))}),at=y(()=>{var a;return((a=lt.value.find(e=>e.id===L.value))==null?void 0:a.runningVmIds)||[]}),Pe=(a,e)=>{if(e.length===0)return!0;const t=[a==null?void 0:a.id,a==null?void 0:a.name,a==null?void 0:a.uid].map(u=>String(u||"").trim().toLowerCase()).filter(Boolean),d=e.map(u=>u.toLowerCase());return t.some(u=>d.includes(u))},wt=()=>{be.value=[],ce.value=[],H.value=[],Y.value=[],ie.value=[],ne.value=[],Ve.value=!1,h.value="",_.value="",K.value="",E.value=[],L.value="",R.value="",k.value=""};me([b,h,R,_,E,j,L,q,W,S,$,Ge,n],()=>{te()},{deep:!0,flush:"sync"}),me(b,async a=>{oe.isEmpty(h.value)||(a==="VM"?(j.value="VM",_.value="",K.value="",E.value=[],L.value="",H.value=[],Y.value=[],await st()):a==="K8S"&&(R.value="",await nt()),ee.value="",te())}),me(r,()=>{x.value=null},{deep:!0}),me(W,()=>{te()}),me(Ge,async(a,e)=>{if(a===e)return;D+=1,wt(),ee.value="",q.value=0,Vt();const t=document.getElementById(m.formId);(m.embedded||t!=null&&t.classList.contains("show"))&&await Be()}),me(P,()=>{if(j.value==="NODE_GROUP"){P.value="Standalone";return}P.value==="Standalone"?(E.value=[],H.value=[...Y.value]):P.value==="Clustering"&&(E.value=[],H.value=[...Y.value])}),me(j,a=>{K.value="",E.value=[],L.value=a==="NODE_GROUP"&&yt.value?String(m.targetNodeGroupId||"").trim():"",H.value=[...Y.value],a==="NODE_GROUP"&&(P.value="Standalone"),te()}),Sl(async()=>{var e;if((e=document.getElementById(m.formId))==null||e.addEventListener("hide.bs.modal",St),m.embedded){try{if(await Be(),k.value){z("deployment-event",{status:"FORM_ERROR",message:k.value});return}await Et(),z("ready",{targetType:M.value,namespace:h.value})}catch{k.value=k.value||"The software catalog could not be loaded.",z("deployment-event",{status:"FORM_ERROR",message:"The installation form could not be initialized."})}return}const a=document.getElementById(m.formId);a&&a.addEventListener("show.bs.modal",async()=>{await Be(),await Et()})});const Be=async()=>{Ue++,J.value=!1;const a=++D;wt(),b.value=w.value?M.value:"VM",j.value="VM",L.value="",P.value="Standalone",V.value={hpaEnabled:!1,hpaMinReplicas:1,hpaMaxReplicas:10,hpaCpuUtilization:60,hpaMemoryUtilization:80},Re.value=!1,S.value={ingressEnabled:!1,ingressHost:"",ingressPath:"/",ingressClass:"nginx",ingressTlsEnabled:!1,ingressTlsSecret:""},r.value=Ye(),x.value=null,je.value=!1,ne.value=[],ge.value=!1,Ve.value=!1,ue.value=[],W.value="",Ae.value=!1,Te.value=!1,ye.value="GENERAL_PURPOSE",Q.value="",Ie.value="PRIVATE",$.value="",ee.value="",q.value=0,Kt(),Vt(),await $t(a)},Gt=a=>{let e=(a||"").trim();if(!e)return e;e=e.replace(/^[a-zA-Z][a-zA-Z0-9+.-]*:\/\//,"");const t=e.lastIndexOf("@");t>=0&&(e=e.slice(t+1));const d=e.search(/[/?#]/);d>=0&&(e=e.slice(0,d));const u=e.indexOf(":");return u>=0&&e.indexOf(":",u+1)<0&&(e=e.slice(0,u)),e.trim().toLowerCase()},Et=async()=>{await Vl("").then(({data:a})=>{Ee.value=a})},Kt=()=>{if(w.value){et.value=[{key:M.value,value:M.value}];return}et.value=[{key:"VM",value:"VM"},{key:"k8s",value:"K8S"}]},Vt=()=>{n.value==="Application Uninstallation"?X.value=!1:X.value=!0},$t=async(a=D)=>{try{const{data:e}=await Fl();if(a!==D)return;const t=Array.isArray(e)?e:[];if(Ze.value){if(oe.isEmpty(we.value)){k.value=`Project "${ht.value}" has no namespace mapping.`;return}const d=t.find(u=>Pe(u,[we.value]));if(!d){k.value=`Namespace "${we.value}" assigned to this project was not found.`;return}be.value=[d],h.value=Me(d)}else{be.value=t;const d=fe(m.nsId),T=(d?t.find(pe=>Pe(pe,[d])):void 0)||t[0];h.value=T?Me(T):""}oe.isEmpty(h.value)||(b.value==="VM"?await st(a):b.value==="K8S"&&await nt(a))}catch{if(a!==D)return;k.value="Namespaces could not be loaded for the selected project."}},st=async(a=D)=>{k.value="";try{const{data:e}=await zl(h.value);if(a!==D)return;const d=(Array.isArray(e)?e:[]).filter(u=>Pe(u,Le.value));if(w.value&&M.value==="VM"){const u=d.find(T=>Pe(T,[m.targetMciId]));if(!u){ce.value=[],_.value="",k.value=`Infra "${m.targetMciId}" was not found in the selected project namespace.`;return}ce.value=[u],_.value=Ct(u),await ot(a);return}ce.value=d,ce.value.length>0?(_.value=Ct(ce.value[0]),await ot(a)):(_.value="",k.value=Le.value.length>0?`Infra "${Le.value.join(", ")}" assigned to this project was not found.`:"No VM infrastructure is available in this project.")}catch{if(a!==D)return;k.value="VM infrastructure could not be loaded for the selected project."}},ot=async(a=D)=>{const e={nsId:h.value,mciId:_.value};try{const{data:t}=await Hl(e);if(a!==D)return;const d=Array.isArray(t==null?void 0:t.node)?t.node:[];if(w.value&&M.value==="VM"){const u=Bl(d,{vmId:m.targetVmId,nodeGroupId:m.targetNodeGroupId});if(!u.ok){Y.value=[],H.value=[],K.value="",E.value=[],L.value="",k.value=`${u.error} Infra: "${m.targetMciId}".`;return}if(u.mode==="NODE_GROUP"){Y.value=u.members,H.value=[...u.members],j.value="NODE_GROUP",L.value=u.nodeGroupId,P.value="Standalone",K.value="",E.value=[];return}Y.value=[u.vm],H.value=[u.vm],j.value="VM",K.value=u.vmId,E.value=[u.vmId];return}Y.value=d,H.value=Y.value.filter(u=>!E.value.includes(u.id)),K.value="",lt.value.some(u=>u.id===L.value)||(L.value=""),H.value.length===0&&(k.value="No VM is available in the infrastructure assigned to this project.")}catch{if(a!==D)return;k.value="VMs could not be loaded for the selected project."}},nt=async(a=D)=>{k.value="";try{const{data:e}=await ql(h.value);if(a!==D)return;const d=(Array.isArray(e)?e:[]).filter(u=>Pe(u,De.value));if(w.value&&M.value==="K8S"){const u=d.find(T=>Pe(T,[m.targetClusterId]));if(!u){ie.value=[],R.value="",k.value=`Cluster "${m.targetClusterId}" was not found in the selected project namespace.`;return}ie.value=[u],R.value=$e(u)}else ie.value=d,ie.value.length>0?R.value=$e(ie.value[0]):(R.value="",k.value=De.value.length>0?`Cluster "${De.value.join(", ")}" assigned to this project was not found.`:"No Kubernetes cluster is available in this project.");b.value==="K8S"&&B.value&&(S.value.ingressEnabled=!0,V.value.hpaEnabled=!1,V.value.hpaMinReplicas=1),r.value=Ye(),x.value=null,await rt()}catch{if(a!==D)return;k.value="Kubernetes clusters could not be loaded for the selected project."}},Fe=async()=>{if(ne.value=[],Ve.value=!1,!(!["VM","K8S"].includes(b.value)||!B.value||oe.isEmpty(h.value))){ge.value=!0;try{const{data:a}=await Tl(h.value);ne.value=Array.isArray(a)?a:[];const e=ne.value.filter(t=>String(t.status||"").toLowerCase()==="available").map(t=>t.id);r.value.selectedStorageIds=(r.value.selectedStorageIds||[]).filter(t=>e.includes(t)),r.value.selectedStorageIds.length===0&&e.length===1&&(r.value.selectedStorageIds=[e[0]])}catch{Ve.value=!0}finally{ge.value=!1}}},rt=async()=>{if(ue.value=[],W.value="",Te.value=!1,!(b.value!=="K8S"||!ct.value||oe.isEmpty(h.value)||oe.isEmpty(R.value))){Ae.value=!0;try{const{data:a}=await Al({namespace:h.value,clusterName:R.value});ue.value=Array.isArray(a)?a:[],W.value=Bt(ue.value)}catch{Te.value=!0,W.value=""}finally{Ae.value=!1}}},Bt=a=>{var t;const e=a.find(d=>d.defaultClass);return(e==null?void 0:e.name)||((t=a[0])==null?void 0:t.name)||""},Ft=async()=>{E.value=[],await st(D),await Fe(),te()},zt=async()=>{E.value=[],L.value="",k.value="",await ot(D),te()},Ht=async()=>{await nt(D),te()},te=()=>{ve+=1,Ne.value=[],Oe.value=[],n.value==="Application Installation"?X.value=!0:n.value==="Application Uninstallation"&&(X.value=!1)},qt=()=>{if(K.value!==""){if(P.value==="Standalone")E.value=[K.value];else if(P.value==="Clustering"&&!E.value.includes(K.value)){E.value.push(K.value);const a=H.value.findIndex(e=>e.id===K.value);a!==-1&&H.value.splice(a,1)}K.value="",te()}},Yt=()=>{E.value=[],P.value="Standalone",te()},Jt=a=>{if(w.value)return;const e=E.value[a];if(E.value.splice(a,1),P.value==="Clustering"){const t=Y.value.find(d=>d.id===e);t&&H.value.push(t)}te()},At=async()=>{Ue++,z("cancel"),!re.value&&(J.value||await Be())},Wt=async()=>{const a=document.getElementById(m.formId),e=a&&!m.embedded?El.getInstance(a):null;e&&(a!=null&&a.classList.contains("show"))&&await new Promise(t=>{a.addEventListener("hidden.bs.modal",()=>t(),{once:!0}),e.hide()}),await A.push({name:"applicationStatus"})},Qt=()=>b.value==="VM"?j.value==="NODE_GROUP"?{targetType:"VM",namespace:h.value,mciId:_.value,nodeGroupId:L.value}:{targetType:"VM",namespace:h.value,mciId:_.value,vmId:E.value[0]||"",...w.value&&m.targetNodeGroupId?{nodeGroupId:m.targetNodeGroupId}:{}}:{targetType:"K8S",namespace:h.value,clusterId:R.value},ze=(a,e={})=>{z("deployment-event",{status:a,target:Qt(),...e})},Xt=a=>{if(!(!a||typeof a!="object"))return a.deploymentId||a.applicationId||a.id||void 0},Zt=async()=>{if(re.value||J.value)return;if(n.value==="Application Installation"&&b.value==="VM"&&P.value==="Clustering"&&!it.value){p.error("Clustering is available only for Redis and Elasticsearch on individually selected VMs");return}if(n.value==="Application Installation"&&(X.value||he.value)){p.error("Please complete Spec Check for the current settings before deploying");return}if(k.value){p.error(k.value);return}if(b.value!=="VM"&&b.value!=="K8S"){p.error("Please Select Infra");return}if(b.value==="VM"&&n.value==="Application Installation"&&Ie.value==="RESTRICTED"&&(!$.value||$.value==="0.0.0.0/0")){p.error("Enter a restricted IPv4 CIDR such as 203.0.113.10/32");return}if(b.value==="K8S"&&n.value==="Application Installation"&&S.value.ingressEnabled&&(!$.value||$.value==="0.0.0.0/0")){p.error("Enter a restricted IPv4 CIDR for external access");return}if(b.value==="K8S"&&B.value){if(!S.value.ingressEnabled||!S.value.ingressHost||!$.value||$.value==="0.0.0.0/0"){p.error("Enter an Ingress hostname and a restricted IPv4 CIDR for Jupyter");return}if(S.value.ingressPath!=="/"||!ae.value&&S.value.ingressTlsEnabled||V.value.hpaEnabled||Re.value){p.error(ae.value?"Jupyter uses one replica and path / without HPA or rebalancing":"Jupyter uses one replica, path / and HTTP NodePort 30880 without HPA or rebalancing");return}}if(B.value){if((r.value.selectedStorageIds||[]).length===0){p.error("Select at least one registered Object Storage resource");return}if(String(r.value.jupyterToken||"").length<12){p.error("Enter a Jupyter access token with at least 12 characters");return}if(!pt.value){p.error("Run the Object Storage check before deployment");return}}if(b.value==="K8S"&&!Pt())return;re.value=!0;const a=Ge.value,e=ve,t=Ue,d=()=>kt&&Ue===t&&Ge.value===a&&ve===e;ze("DEPLOY_STARTED");try{let u={};if(b.value==="VM"){let T={};if(n.value=="Application Installation"){const pe=j.value==="NODE_GROUP",Z=!pe&&P.value==="Clustering"?`${ee.value}-cluster`:`${ee.value}-standalone`,gt=Q.value===""?void 0:Number(Q.value);T={namespace:h.value,mciId:_.value,vmIds:pe?[]:E.value,vmNodeGroupId:pe?L.value:w.value&&m.targetNodeGroupId?m.targetNodeGroupId:void 0,clusterName:Z,catalogId:q.value,servicePort:gt,openServicePort:Ie.value==="RESTRICTED",servicePortCidr:Ie.value==="RESTRICTED"?$.value:void 0,username:"admin",deploymentType:b.value,vmDeploymentMode:pe?"STANDALONE":P.value.toUpperCase(),resourceType:ye.value,additionalConfig:cl()},u=await Nl(T)}else u=await jt(T)}else{const T=Q.value===""?void 0:Number(Q.value),pe=vl(),Z={namespace:h.value,clusterName:R.value,openServicePort:S.value.ingressEnabled&&!ae.value&&tt.value,servicePortCidr:S.value.ingressEnabled?$.value:void 0,catalogId:q.value,servicePort:T,username:"",deploymentType:b.value,hpaEnabled:V.value.hpaEnabled,minReplicas:V.value.hpaMinReplicas,maxReplicas:V.value.hpaMaxReplicas,cpuThreshold:V.value.hpaCpuUtilization,memoryThreshold:V.value.hpaMemoryUtilization,workloadRebalancingEnabled:Re.value,resourceType:ye.value,...ut(),additionalConfig:pe};if(n.value==="Application Installation"&&ae.value&&Z.ingressEnabled){const{data:gt}=await Ml({namespace:Z.namespace,clusterName:Z.clusterName,catalogId:Z.catalogId,servicePortCidr:Z.servicePortCidr,...ut()});await Jl(gt,Z,async bl=>(await Pl(Z.namespace,bl)).data,()=>{},d)}u=n.value=="Application Installation"?await xl(Z):await jt(Z)}if(!d())return;u.data?(J.value=!0,p.success("SUCCESS"),ze("DEPLOY_SUCCEEDED",{deploymentId:Xt(u.data)})):(p.error("FAIL"),ze("DEPLOY_FAILED",{message:"The deployment API did not return a success result."}))}catch(u){if(!d())return;const T=u instanceof Error?u.message:"The deployment request failed.";p.error(T),ze("DEPLOY_FAILED",{message:T})}finally{re.value=!1}},ut=()=>({ingressEnabled:S.value.ingressEnabled,ingressHost:Gt(S.value.ingressHost),ingressPath:S.value.ingressPath,ingressClass:Nt.value,ingressTlsEnabled:ae.value?!1:S.value.ingressTlsEnabled,ingressTlsSecret:ae.value||S.value.ingressTlsSecret===""?null:S.value.ingressTlsSecret}),el=async()=>{if(he.value)return;if(k.value){p.error(k.value);return}if(b.value!=="VM"&&b.value!=="K8S"){p.error("Please Select Infra");return}if(!Pt())return;const a=ve;X.value=!0,Ne.value=[],Oe.value=[],he.value=!0;try{if(b.value==="K8S"){if(!h.value||!R.value||!q.value){p.error("Please select all items");return}const{data:t}=await Rl({namespace:h.value,clusterName:R.value,catalogId:q.value,servicePortCidr:$.value,...ut()});if(a!==ve)return;if(Oe.value=Array.isArray(t==null?void 0:t.warnings)?t.warnings:[],(t==null?void 0:t.valid)!==!0){Ne.value=Array.isArray(t==null?void 0:t.errors)&&t.errors.length?t.errors:["Ingress check failed. Resolve the issue and retry Spec Check."];return}}const e=await tl();if(a!==ve)return;if(e==null){p.error("Please select all items");return}if(e===!1){const t=b.value==="VM"?"VM":"CLUSTER";if(!confirm("Your selected "+t+" has lower specifications than recommended. Would you like to continue with the installation?"))return}if(a!==ve)return;p.success("Please click Deploy"),X.value=!1}catch{a===ve&&(Ne.value=["Spec Check could not be completed. Check connectivity and permissions, then retry."])}finally{he.value=!1}},tl=async()=>{let a=!1;if(b.value==="VM"){const e=j.value==="NODE_GROUP"?at.value:E.value;if(h.value===""||_.value===""||j.value==="NODE_GROUP"&&L.value===""||e.length===0||q.value===0)return null;{const t=j.value==="NODE_GROUP"?e:[e[0]];a=!0;for(const d of t){const u={namespace:h.value,mciName:_.value,vmName:d,catalogId:q.value},{data:T}=await jl(u);if(!T){a=!1;break}}}}else if(b.value==="K8S"){if(h.value===""||R.value===""||q.value===0)return null;const e={namespace:h.value,clusterName:R.value,catalogId:q.value};await Ul(e).then(({data:t})=>{a=t})}return a},le=y(()=>Ee.value.find(a=>a.id===q.value)),it=y(()=>b.value==="VM"&&j.value==="VM"&&!w.value&&Yl(le.value));me(it,a=>{!a&&P.value==="Clustering"&&(P.value="Standalone")},{flush:"sync"});const Tt=y(()=>{var e;const a=ie.value.find(t=>t.id===R.value||t.name===R.value);return((e=a==null?void 0:a.connectionConfig)==null?void 0:e.providerName)||(a==null?void 0:a.connectionName)||""}),ae=y(()=>/^(ibm|ibmcloud|ibm-cloud|ibm-vpc|ibmvpc)(-|$)/i.test(Tt.value)),Nt=y(()=>ae.value?"public-iks-k8s-nginx":"nginx"),ll=y(()=>{var t;const a=E.value[0],e=Y.value.find(d=>Ke(d)===a);return((t=e==null?void 0:e.connectionConfig)==null?void 0:t.providerName)||(e==null?void 0:e.connectionName)||""}),He=y(()=>b.value==="VM"?ll.value:Tt.value),al=y(()=>{var a,e;return String(((e=(a=le.value)==null?void 0:a.helmChart)==null?void 0:e.chartName)||"").toLowerCase()}),sl=["CAPABILITY","TAG"],dt=y(()=>al.value==="loki"),B=y(()=>{var e,t;return String(((t=(e=le.value)==null?void 0:e.packageInfo)==null?void 0:t.packageName)||"").toLowerCase().includes("jupyter")&&ft(le.value)}),ct=y(()=>{var a;return b.value!=="K8S"?!1:B.value?!0:!((a=le.value)!=null&&a.helmChart)||!dt.value?!1:Mt(le.value,Qo)}),ke=y(()=>ct.value&&(dt.value||B.value)),ol=y(()=>ct.value&&n.value==="Application Installation"&&(ke.value||ue.value.length>0||Te.value)),nl=y(()=>Ae.value||ue.value.length<=1),rl=y(()=>Ae.value?"Loading StorageClasses...":Te.value?"Failed to load StorageClasses":ue.value.length===0?"No StorageClass found":"Select StorageClass"),qe=y(()=>ke.value?Ae.value?"StorageClass list is loading.":Te.value?"StorageClass list could not be loaded.":ue.value.length===0?"This application requires a StorageClass, but none was found.":oe.isEmpty(W.value)?"This application requires a StorageClass.":"":""),ul=y(()=>mt(He.value)?"Optional: https://s3.ap-northeast-2.amazonaws.com":"https://object-storage.example.com"),il=y(()=>mt(He.value)?"ap-northeast-2":"region from object storage service"),xe=y(()=>!le.value||!ft(le.value)?!1:b.value==="VM"?!!le.value.packageInfo&&B.value:b.value==="K8S"?!!le.value.helmChart||B.value:!1),vt=y(()=>xe.value&&r.value.enabled),pt=y(()=>{var a;return!vt.value||((a=x.value)==null?void 0:a.success)===!0}),dl=y(()=>re.value||J.value||he.value||!!k.value||X.value||!pt.value||ke.value&&!oe.isEmpty(qe.value));function Ye(a=He.value,e=Je.value){const t=mt(a);return{enabled:!!e,selectedStorageIds:[],accessMode:"READ_ONLY",backendType:"s3",endpoint:"",region:"",bucket:"",prefix:"",accessKey:"",secretKey:"",sessionToken:"",jupyterToken:"",forcePathStyle:!t}}function mt(a){return String(a||"").toLowerCase().includes("aws")}const Je=y(()=>b.value==="K8S"&&dt.value||B.value);function ft(a){return Mt(a,Wo)}function Mt(a,e){return(a.catalogRefs||[]).some(d=>{const u=String(d.refType||"").toUpperCase();return String(d.refValue||"").toLowerCase()===e&&sl.includes(u)})}function bt(){if(b.value==="VM"||B.value){const a=r.value.selectedStorageIds||[];return{enabled:r.value.enabled,jupyterToken:r.value.jupyterToken,storages:a.map(e=>({objectStorageId:e,alias:e,prefix:r.value.prefix,accessMode:r.value.accessMode}))}}return{enabled:r.value.enabled,backendType:r.value.backendType,endpoint:r.value.endpoint,region:r.value.region,bucket:r.value.bucket,prefix:r.value.prefix,accessKey:r.value.accessKey,secretKey:r.value.secretKey,sessionToken:r.value.sessionToken,jupyterToken:r.value.jupyterToken,forcePathStyle:r.value.forcePathStyle,insecure:pl(r.value.endpoint)}}function cl(){if(!(!xe.value||!r.value.enabled))return{objectStorage:bt()}}function vl(){const a={};return ke.value&&!oe.isEmpty(W.value)&&(a.storageClass=W.value),xe.value&&r.value.enabled&&(a.objectStorage=bt()),Object.keys(a).length>0?a:void 0}function Pt(){if(!ke.value)return!0;const a=qe.value;return oe.isEmpty(a)?!0:(p.error(a),!1)}function pl(a){return String(a||"").trim().toLowerCase().startsWith("http://")}const ml=async(a=!0)=>{if(!vt.value)return!0;je.value=!0,x.value=null;const e={targetType:b.value,namespace:h.value,clusterName:b.value==="K8S"?R.value:void 0,mciId:b.value==="VM"?_.value:void 0,vmId:b.value==="VM"?E.value[0]:void 0,catalogId:q.value,objectStorage:bt()};try{const{data:t}=await Ol(e);return x.value=t,t!=null&&t.success?(a&&p.success("Object Storage check succeeded"),!0):(a&&p.error("Object Storage check failed"),!1)}catch{return a&&p.error("Object Storage check failed"),!1}finally{je.value=!1}},xt=y(()=>b.value==="VM"?Ee.value.filter(a=>a.packageInfo):b.value==="K8S"?Ee.value.filter(a=>{var e;return a.helmChart||String(((e=a.packageInfo)==null?void 0:e.packageName)||"").toLowerCase().includes("jupyter")&&ft(a)}):Ee.value),Rt=async()=>{n.value==="Application Installation"&&(X.value=!0);const a=Ee.value.find(e=>ee.value===e.name);a&&(q.value=a.id,Q.value=b.value==="K8S"&&B.value?"8888":a.defaultPort?String(a.defaultPort):"",V.value={hpaEnabled:!!a.hpaEnabled,hpaMinReplicas:a.minReplicas||1,hpaMaxReplicas:a.maxReplicas||10,hpaCpuUtilization:a.cpuThreshold||60,hpaMemoryUtilization:a.memoryThreshold||80},S.value={ingressEnabled:!!a.ingressEnabled,ingressHost:a.ingressHost||"",ingressPath:a.ingressPath||"/",ingressClass:a.ingressClass||"nginx",ingressTlsEnabled:!!a.ingressTlsEnabled,ingressTlsSecret:a.ingressTlsSecret||""},b.value==="K8S"&&B.value&&(S.value.ingressEnabled=!0,V.value.hpaEnabled=!1,V.value.hpaMinReplicas=1),r.value=Ye(),x.value=null),await Fe(),await rt()},fl=async()=>{n.value==="Application Installation"&&(X.value=!0),r.value=Ye(),x.value=null,await rt()};return(a,e)=>(o(),s("div",{class:Se(a.embedded?"install-embedded":"modal fade"),id:a.formId,tabindex:a.embedded?void 0:-1},[l("div",{class:Se(["modal-dialog modal-lg",{"install-embedded-dialog":a.embedded}]),role:"document"},[l("div",Ql,[l("div",Xl,[l("h5",Zl,v(n.value),1),a.embedded?f("",!0):(o(),s("button",{key:0,type:"button",class:"btn-close","data-bs-dismiss":"modal","aria-label":"Close",onClick:At}))]),l("div",{class:Se(["modal-body",{"install-embedded-body":a.embedded}]),style:Cl(a.embedded?void 0:"max-height: calc(100vh - 200px);overflow-y: auto;")},[J.value?(o(),s("div",ea,e[49]||(e[49]=[l("strong",null,"Deployment completed.",-1),l("p",{class:"mb-0"},"Check the application's running status in Apps Status.",-1)]))):f("",!0),c(l("fieldset",{disabled:re.value||J.value,class:"border-0 p-0 m-0"},[Ze.value?(o(),s("div",la,[e[50]||(e[50]=de(" Deployment targets are scoped to ")),l("strong",null,v(ht.value),1),e[51]||(e[51]=de(". "))])):f("",!0),k.value?(o(),s("div",aa,v(k.value),1)):f("",!0),w.value?(o(),s("div",sa,[e[52]||(e[52]=de(" The deployment target was fixed by the Workload screen: ")),l("strong",null,v(Lt.value),1),e[53]||(e[53]=de(". "))])):f("",!0),l("div",oa,[e[54]||(e[54]=l("label",{class:"form-label"},"Target Infra",-1)),n.value=="Application Installation"?(o(),s("p",na," Select the Infra what is the Infra will be installed ")):n.value=="Application Uninstallation"?(o(),s("p",ra," Select the Infra what is the Infra will be uninstalled ")):f("",!0),c(l("select",{class:"form-select",id:"infra","onUpdate:modelValue":e[0]||(e[0]=t=>b.value=t),disabled:w.value},[(o(!0),s(N,null,U(et.value,t=>(o(),s("option",{value:t.value,key:t.value},v(t.value),9,ia))),128))],8,ua),[[F,b.value]])]),b.value=="VM"?(o(),s(N,{key:3},[l("div",da,[e[56]||(e[56]=l("label",{class:"form-label"},"Namespace",-1)),n.value=="Application Installation"?(o(),s("p",ca," Select the namespace where the application will be installed")):n.value=="Application Uninstallation"?(o(),s("p",va," Select the namespace where the application will be uninstalled")):f("",!0),be.value.length>0?c((o(),s("select",{key:2,class:"form-select",id:"vm-namespace","onUpdate:modelValue":e[1]||(e[1]=t=>h.value=t),disabled:It.value,onChange:Ft},[(o(!0),s(N,null,U(be.value,t=>(o(),s("option",{value:Me(t),key:Me(t)},v(t.name||t.id),9,ma))),128))],40,pa)),[[F,h.value]]):(o(),s("select",fa,e[55]||(e[55]=[l("option",{value:""}," No namespace available ",-1)])))]),l("div",ba,[e[57]||(e[57]=l("label",{class:"form-label"},"Infra ID",-1)),n.value=="Application Installation"?(o(),s("p",ga," Select the infra ID where the application will be deployed")):n.value=="Application Uninstallation"?(o(),s("p",ya," Remove the application and associated resources from the infra")):f("",!0),c(l("select",{class:"form-select",id:"vm-mci",disabled:h.value==""||w.value,"onUpdate:modelValue":e[2]||(e[2]=t=>_.value=t),onChange:zt},[ce.value.length===0?(o(),s("option",ha,"No infra available")):f("",!0),(o(!0),s(N,null,U(ce.value,t=>(o(),s("option",{value:t.id||t.name,key:t.id||t.name,title:t.id||t.name},v(t.id||t.name),9,ka))),128))],40,Ia),[[F,_.value]])]),n.value=="Application Installation"&&!w.value?(o(),s("div",Sa,[e[60]||(e[60]=l("label",{class:"form-label"},"Deployment Target",-1)),e[61]||(e[61]=l("p",{class:"text-muted"},"Choose one VM or one CB-Tumblebug NodeGroup.",-1)),l("div",Ca,[l("div",wa,[c(l("input",{class:"form-check-input",type:"radio",id:"vm-target-single","onUpdate:modelValue":e[3]||(e[3]=t=>j.value=t),value:"VM"},null,512),[[We,j.value]]),e[58]||(e[58]=l("label",{class:"form-check-label",for:"vm-target-single"},"VM",-1))]),l("div",Ea,[c(l("input",{class:"form-check-input",type:"radio",id:"vm-target-node-group","onUpdate:modelValue":e[4]||(e[4]=t=>j.value=t),value:"NODE_GROUP"},null,512),[[We,j.value]]),e[59]||(e[59]=l("label",{class:"form-check-label",for:"vm-target-node-group"},"NodeGroup (Standalone)",-1))])])])):f("",!0),j.value==="VM"?(o(),s("div",Va,[e[63]||(e[63]=l("label",{class:"form-label"},"VM Name",-1)),e[64]||(e[64]=l("p",{class:"text-muted"}," Select the virtual machine (VM) within the chosen multi-cloud infrastructure where the application will be deployed",-1)),c(l("select",{class:"form-select",id:"vm-name",disabled:_.value==""||w.value,"onUpdate:modelValue":e[5]||(e[5]=t=>K.value=t),onChange:qt},[e[62]||(e[62]=l("option",{value:""},"Select VM",-1)),(o(!0),s(N,null,U(H.value,t=>(o(),s("option",{value:Ke(t),key:Ke(t)},v(t.name||t.id),9,Ta))),128))],40,Aa),[[F,K.value]]),E.value.length>0?(o(),s("div",Na,[(o(!0),s(N,null,U(E.value,(t,d)=>(o(),s("label",{key:d,class:"form-check-label",style:{border:"1px solid #000",padding:"5px","border-radius":"5px",cursor:"pointer"}},[de(v(t)+" ",1),w.value?f("",!0):(o(),s("span",{key:0,onClick:u=>Jt(d),style:{"margin-left":"5px","font-weight":"bold"}},"X",8,Ma))]))),128))])):f("",!0)])):(o(),s("div",Pa,[e[67]||(e[67]=l("label",{class:"form-label"},"NodeGroup",-1)),e[68]||(e[68]=l("p",{class:"text-muted"}," Deploy one independent application instance to every currently running VM in the selected NodeGroup. ",-1)),c(l("select",{class:"form-select",id:"vm-node-group",disabled:_.value==""||w.value,"onUpdate:modelValue":e[6]||(e[6]=t=>L.value=t),onChange:Yt},[e[65]||(e[65]=l("option",{value:""},"Select NodeGroup",-1)),(o(!0),s(N,null,U(lt.value,t=>(o(),s("option",{key:t.id,value:t.id,disabled:t.runningVmIds.length===0},v(t.id)+" ("+v(t.runningVmIds.length)+"/"+v(t.totalVmCount)+" running) ",9,Ra))),128))],40,xa),[[F,L.value]]),L.value&&at.value.length>0?(o(),s("div",ja,[e[66]||(e[66]=l("div",{class:"text-muted small mb-1"},"Deployment targets",-1)),l("div",Ua,[(o(!0),s(N,null,U(at.value,t=>(o(),s("span",{key:t,class:"badge bg-light text-dark"},v(t),1))),128))])])):L.value?(o(),s("div",Oa," The selected NodeGroup has no running VMs. ")):f("",!0)])),j.value==="VM"?(o(),s("div",_a,[e[71]||(e[71]=l("label",{class:"form-label"},"Deployment Type",-1)),e[72]||(e[72]=l("p",{class:"text-muted"},"Select the deployment type",-1)),l("div",La,[l("div",Da,[c(l("input",{class:"form-check-input",type:"radio",id:"Standalone","onUpdate:modelValue":e[7]||(e[7]=t=>P.value=t),value:"Standalone",disabled:w.value},null,8,Ga),[[We,P.value]]),e[69]||(e[69]=l("label",{class:"form-check-label",for:"Standalone"},"Standalone",-1))]),it.value?(o(),s("div",Ka,[c(l("input",{class:"form-check-input",type:"radio",id:"Clustering","onUpdate:modelValue":e[8]||(e[8]=t=>P.value=t),value:"Clustering",disabled:w.value},null,8,$a),[[We,P.value]]),e[70]||(e[70]=l("label",{class:"form-check-label",for:"Clustering"},"Clustering",-1))])):f("",!0)]),w.value?f("",!0):(o(),s("div",Ba,"Clustering is available only for Redis and Elasticsearch server catalogs."))])):(o(),s("div",Fa,e[73]||(e[73]=[l("label",{class:"form-label"},"Deployment Type",-1),l("input",{type:"text",class:"form-control",value:"Standalone",disabled:""},null,-1),l("div",{class:"form-text"},"NodeGroup deployment does not use application clustering.",-1)]))),l("div",za,[e[74]||(e[74]=l("label",{class:"form-label"},"Application",-1)),e[75]||(e[75]=l("p",{class:"text-muted"},"Select the application",-1)),c(l("select",{class:"form-select","onUpdate:modelValue":e[9]||(e[9]=t=>ee.value=t),onChange:Rt},[(o(!0),s(N,null,U(xt.value,(t,d)=>{var u;return o(),s("option",{key:d,value:t.name}," ["+v(t.name)+"] "+v(((u=t.packageInfo)==null?void 0:u.packageVersion)||"latest"),9,Ha)}),128))],544),[[F,ee.value]])]),l("div",qa,[e[76]||(e[76]=l("label",{class:"form-label"},"Port",-1)),e[77]||(e[77]=l("p",{class:"text-muted"},"Docker host port. Security Group access is configured separately below.",-1)),c(l("input",{type:"number",class:"form-control",placeholder:"8080","onUpdate:modelValue":e[10]||(e[10]=t=>Q.value=t)},null,512),[[O,Q.value]])]),n.value=="Application Installation"?(o(),s("div",Ya,[e[81]||(e[81]=l("label",{class:"form-label"},"Network Exposure",-1)),c(l("select",{class:"form-select","onUpdate:modelValue":e[11]||(e[11]=t=>Ie.value=t)},e[78]||(e[78]=[l("option",{value:"PRIVATE"},"Do not change Security Group (recommended)",-1),l("option",{value:"RESTRICTED"},"Add restricted direct access",-1)]),512),[[F,Ie.value]]),e[82]||(e[82]=l("p",{class:"text-muted mt-1 mb-0"}," Direct access appends one inbound TCP rule through Tumblebug. It never resaves existing rules. ",-1)),Ie.value==="RESTRICTED"?(o(),s("div",Ja,[e[79]||(e[79]=l("label",{class:"form-label required"},"Allowed IPv4 CIDR",-1)),c(l("input",{type:"text",class:"form-control",placeholder:"203.0.113.10/32","onUpdate:modelValue":e[12]||(e[12]=t=>$.value=t)},null,512),[[O,$.value,void 0,{trim:!0}]]),e[80]||(e[80]=l("p",{class:"text-warning mt-1 mb-0"}," Public any (0.0.0.0/0) is rejected. Broader rules already present in the Security Group are not removed. ",-1))])):f("",!0)])):f("",!0),n.value=="Application Installation"?(o(),s("div",Wa,[e[84]||(e[84]=l("label",{class:"form-label"},"Resource Type",-1)),c(l("select",{class:"form-select","onUpdate:modelValue":e[13]||(e[13]=t=>ye.value=t)},e[83]||(e[83]=[l("option",{value:"GENERAL_PURPOSE"},"General Purpose",-1),l("option",{value:"CPU_INTENSIVE"},"CPU Intensive",-1),l("option",{value:"MEMORY_INTENSIVE"},"Memory Intensive",-1)]),512),[[F,ye.value]])])):f("",!0),n.value=="Application Installation"&&xe.value?(o(),s("div",Qa,[e[92]||(e[92]=l("label",{class:"form-label"},"Object Storage Configuration",-1)),e[93]||(e[93]=l("p",{class:"text-muted"}," Select Object Storage resources already registered in Tumblebug. CSP access keys are not sent to JupyterLab. ",-1)),l("div",Xa,[c(l("input",{class:"form-check-input",type:"checkbox",id:"vmObjectStorageEnabled","onUpdate:modelValue":e[14]||(e[14]=t=>r.value.enabled=t),disabled:Je.value},null,8,Za),[[se,r.value.enabled]]),e[85]||(e[85]=l("label",{class:"form-check-label",for:"vmObjectStorageEnabled"},"Enable Object Storage",-1))]),r.value.enabled?(o(),s("div",es,[l("div",ts,[e[86]||(e[86]=l("label",{class:"form-label mb-0 required"},"Registered Object Storage",-1)),l("button",{type:"button",class:"btn btn-sm btn-outline-secondary",disabled:ge.value,onClick:Fe}," Refresh ",8,ls)]),ge.value?(o(),s("div",as,"Loading Object Storage resources...")):Ve.value?(o(),s("div",ss," Object Storage resources could not be loaded from Tumblebug. ")):ne.value.length===0?(o(),s("div",os," No Object Storage resource is registered in this namespace. ")):(o(),s("div",ns,[(o(!0),s(N,null,U(ne.value,t=>(o(),s("div",{class:"form-check",key:t.id},[c(l("input",{class:"form-check-input",type:"checkbox",id:`vm-object-storage-${t.id}`,value:t.id,disabled:String(t.status||"").toLowerCase()!=="available","onUpdate:modelValue":e[15]||(e[15]=d=>r.value.selectedStorageIds=d)},null,8,rs),[[se,r.value.selectedStorageIds]]),l("label",{class:"form-check-label",for:`vm-object-storage-${t.id}`},[de(v(t.name||t.id)+" ",1),l("span",is," ("+v(t.provider||"unknown CSP")+v(t.region?` / ${t.region}`:"")+" / "+v(t.status||"unknown")+") ",1)],8,us)]))),128))])),l("div",ds,[l("div",cs,[e[87]||(e[87]=l("label",{class:"form-label"},"Allowed Object Prefix",-1)),c(l("input",{type:"text",class:"form-control",placeholder:"Optional: data/project-a/","onUpdate:modelValue":e[16]||(e[16]=t=>r.value.prefix=t)},null,512),[[O,r.value.prefix,void 0,{trim:!0}]])]),l("div",vs,[e[89]||(e[89]=l("label",{class:"form-label"},"Access Mode",-1)),c(l("select",{class:"form-select","onUpdate:modelValue":e[17]||(e[17]=t=>r.value.accessMode=t)},e[88]||(e[88]=[l("option",{value:"READ_ONLY"},"Read only",-1),l("option",{value:"READ_WRITE"},"Read and write",-1)]),512),[[F,r.value.accessMode]])])]),l("div",ps,[e[90]||(e[90]=l("label",{class:"form-label required"},"Jupyter Access Token",-1)),c(l("input",{type:"password",class:"form-control",placeholder:"At least 12 characters","onUpdate:modelValue":e[18]||(e[18]=t=>r.value.jupyterToken=t),autocomplete:"new-password"},null,512),[[O,r.value.jupyterToken]]),l("p",ms," This is the Jupyter login token, not a CSP secret key. Use it at http://:"+v(Q.value)+". ",1)]),e[91]||(e[91]=l("p",{class:"text-muted mt-2 mb-0"}," Jupyter requests short-lived presigned URLs through Application Manager. Multiple CSPs can be selected. ",-1)),x.value?(o(),s("div",{key:4,class:Se(["alert mt-3",x.value.success?"alert-success":"alert-danger"])},[l("div",null,v(x.value.success?"Object Storage: SUCCESS":"Object Storage: FAILED"),1),l("ul",fs,[(o(!0),s(N,null,U(x.value.checks,t=>(o(),s("li",{key:t.name},v(t.name)+" - "+v(t.success?"OK":"FAIL"),1))),128))])],2)):f("",!0)])):f("",!0)])):f("",!0)],64)):b.value=="K8S"?(o(),s(N,{key:4},[l("div",bs,[e[95]||(e[95]=l("label",{class:"form-label"},"Namespace",-1)),n.value=="Application Installation"?(o(),s("p",gs,"Select the namespace where the application will be installed")):n.value=="Application Uninstallation"?(o(),s("p",ys,"Select the namespace where the application will be uninstalled")):f("",!0),be.value.length>0?c((o(),s("select",{key:2,class:"form-select",id:"k8s-namespace","onUpdate:modelValue":e[19]||(e[19]=t=>h.value=t),disabled:It.value,onChange:Ht},[(o(!0),s(N,null,U(be.value,t=>(o(),s("option",{value:Me(t),key:Me(t)},v(t.name||t.id),9,hs))),128))],40,Is)),[[F,h.value]]):(o(),s("select",ks,e[94]||(e[94]=[l("option",{value:""}," No namespace available ",-1)])))]),l("div",Ss,[e[96]||(e[96]=l("label",{class:"form-label"},"ClusterName",-1)),n.value=="Application Installation"?(o(),s("p",Cs,"Select the name of the cluster where the application will be deployed")):n.value=="Application Uninstallation"?(o(),s("p",ws,"Remove the application and associated resources from the multi-cloud infrastructure")):f("",!0),c(l("select",{class:"form-select",id:"k8s-cluster",disabled:h.value==""||w.value,"onUpdate:modelValue":e[20]||(e[20]=t=>R.value=t),onChange:fl},[ie.value.length===0?(o(),s("option",Vs,"No cluster available")):f("",!0),(o(!0),s(N,null,U(ie.value,t=>(o(),s("option",{value:$e(t),key:$e(t)},v(t.name||t.id),9,As))),128))],40,Es),[[F,R.value]])]),l("div",Ts,[e[97]||(e[97]=l("label",{class:"form-label"},"Helm chart",-1)),e[98]||(e[98]=l("p",{class:"text-muted"},"Select the application",-1)),c(l("select",{class:"form-select","onUpdate:modelValue":e[21]||(e[21]=t=>ee.value=t),onChange:Rt},[(o(!0),s(N,null,U(xt.value,(t,d)=>{var u,T;return o(),s("option",{key:d,value:t.name}," ["+v(t.name)+"] "+v(((u=t.helmChart)==null?void 0:u.chartVersion)||((T=t.packageInfo)==null?void 0:T.packageVersion)||"latest"),9,Ns)}),128))],544),[[F,ee.value]])]),n.value=="Application Installation"?(o(),s("div",Ms,[e[99]||(e[99]=l("label",{class:"form-label"},"Port",-1)),e[100]||(e[100]=l("p",{class:"text-muted"},"Please enter a service port for the Kubernetes service",-1)),c(l("input",{type:"number",class:"form-control",placeholder:"80","onUpdate:modelValue":e[22]||(e[22]=t=>Q.value=t),disabled:B.value},null,8,Ps),[[O,Q.value]])])):f("",!0),n.value=="Application Installation"?(o(),s("div",xs,[e[102]||(e[102]=l("label",{class:"form-label"},"Resource Type",-1)),c(l("select",{class:"form-select","onUpdate:modelValue":e[23]||(e[23]=t=>ye.value=t)},e[101]||(e[101]=[l("option",{value:"GENERAL_PURPOSE"},"General Purpose",-1),l("option",{value:"CPU_INTENSIVE"},"CPU Intensive",-1),l("option",{value:"MEMORY_INTENSIVE"},"Memory Intensive",-1)]),512),[[F,ye.value]])])):f("",!0),n.value=="Application Installation"&&ol.value?(o(),s("div",Rs,[l("label",{class:Se(["form-label",{required:ke.value}])},"Storage Class",2),c(l("select",{class:"form-select","onUpdate:modelValue":e[24]||(e[24]=t=>W.value=t),disabled:nl.value},[l("option",Us,v(rl.value),1),(o(!0),s(N,null,U(ue.value,t=>(o(),s("option",{key:t.name,value:t.name},v(t.name)+v(t.defaultClass?" (default)":""),9,Os))),128))],8,js),[[F,W.value]]),ke.value&&qe.value?(o(),s("p",_s,v(qe.value),1)):f("",!0)])):f("",!0),n.value=="Application Installation"&&S.value.ingressEnabled?(o(),s("div",Ls,[e[104]||(e[104]=l("label",{class:"form-label required"},"Allowed IPv4 CIDR",-1)),c(l("input",{class:"form-control",placeholder:"203.0.113.10/32","onUpdate:modelValue":e[25]||(e[25]=t=>$.value=t)},null,512),[[O,$.value,void 0,{trim:!0}]]),ae.value?f("",!0):(o(),s("div",Ds,[c(l("input",{class:"form-check-input",type:"checkbox",id:"k8sOpenIngress","onUpdate:modelValue":e[26]||(e[26]=t=>tt.value=t)},null,512),[[se,tt.value]]),e[103]||(e[103]=l("label",{class:"form-check-label",for:"k8sOpenIngress"},"Allow this CIDR on the worker Security Group (TCP 30880)",-1))])),ae.value?(o(),s("p",Gs,"HTTP via the IBM-managed load balancer. Only the allowed client IP range can access this application.")):(o(),s("p",Ks,"Access: http://"+v(S.value.ingressHost||"your-ingress-host")+":30880. For testing, map this hostname to an accessible Kubernetes node public IP in your PC hosts file. With source-IP preservation, use a node running the Ingress Controller.",1))])):f("",!0),n.value=="Application Installation"?(o(),s("div",$s,[e[112]||(e[112]=l("label",{class:"form-label"},"HPA Configuration",-1)),l("div",Bs,[l("div",Fs,[c(l("input",{class:"form-check-input",type:"checkbox",id:"hpaEnabled","onUpdate:modelValue":e[27]||(e[27]=t=>V.value.hpaEnabled=t)},null,512),[[se,V.value.hpaEnabled]]),e[105]||(e[105]=l("label",{class:"form-check-label",for:"hpaEnabled"}," Enable HPA (Horizontal Pod Autoscaler) ",-1))])]),V.value.hpaEnabled?(o(),s("div",zs,[l("div",null,[e[106]||(e[106]=l("label",{class:"form-label required"}," minReplicas ",-1)),c(l("input",{type:"number",class:"form-control w-90-per",placeholder:"1","onUpdate:modelValue":e[28]||(e[28]=t=>V.value.hpaMinReplicas=t)},null,512),[[O,V.value.hpaMinReplicas]])]),l("div",null,[e[107]||(e[107]=l("label",{class:"form-label required"}," maxReplicas ",-1)),c(l("input",{type:"number",class:"form-control w-90-per",placeholder:"10","onUpdate:modelValue":e[29]||(e[29]=t=>V.value.hpaMaxReplicas=t)},null,512),[[O,V.value.hpaMaxReplicas]])]),l("div",null,[e[108]||(e[108]=l("label",{class:"form-check-label mb-2"}," CPU (%) ",-1)),c(l("input",{type:"number",class:"form-control w-80-per d-inline",placeholder:"60","onUpdate:modelValue":e[30]||(e[30]=t=>V.value.hpaCpuUtilization=t)},null,512),[[O,V.value.hpaCpuUtilization]]),e[109]||(e[109]=de(" % "))]),l("div",null,[e[110]||(e[110]=l("label",{class:"form-check-label mb-2"}," MEMORY (%) ",-1)),c(l("input",{type:"number",class:"form-control w-80-per d-inline",placeholder:"80","onUpdate:modelValue":e[31]||(e[31]=t=>V.value.hpaMemoryUtilization=t)},null,512),[[O,V.value.hpaMemoryUtilization]]),e[111]||(e[111]=de(" % "))])])):f("",!0)])):f("",!0),n.value=="Application Installation"?(o(),s("div",Hs,[e[114]||(e[114]=l("label",{class:"form-label"},"Workload Rebalancing",-1)),l("div",qs,[l("div",Ys,[c(l("input",{class:"form-check-input",type:"checkbox",id:"workloadRebalancingEnabled","onUpdate:modelValue":e[32]||(e[32]=t=>Re.value=t)},null,512),[[se,Re.value]]),e[113]||(e[113]=l("label",{class:"form-check-label",for:"workloadRebalancingEnabled"}," Enable Workload Rebalancing ",-1))])])])):f("",!0),n.value=="Application Installation"?(o(),s("div",Js,[e[119]||(e[119]=l("label",{class:"form-label"},"Ingress Configuration",-1)),l("div",Ws,[l("div",Qs,[c(l("input",{class:"form-check-input",type:"checkbox",id:"ingressEnabled","onUpdate:modelValue":e[33]||(e[33]=t=>S.value.ingressEnabled=t)},null,512),[[se,S.value.ingressEnabled]]),e[115]||(e[115]=l("label",{class:"form-check-label",for:"ingressEnabled"}," Enable Ingress ",-1))])]),S.value.ingressEnabled?(o(),s("div",Xs,[l("div",Zs,[e[116]||(e[116]=l("label",{class:"form-label"},"Host",-1)),c(l("input",{type:"text",class:"form-control",placeholder:"example.com","onUpdate:modelValue":e[34]||(e[34]=t=>S.value.ingressHost=t)},null,512),[[O,S.value.ingressHost]]),ae.value?(o(),s("p",eo,"For local testing, map this hostname to the IBM load balancer IP in your hosts file. HTTP does not require a certificate and is not encrypted.")):f("",!0)]),l("div",to,[e[117]||(e[117]=l("label",{class:"form-label"},"Path",-1)),c(l("input",{type:"text",class:"form-control",placeholder:"/","onUpdate:modelValue":e[35]||(e[35]=t=>S.value.ingressPath=t)},null,512),[[O,S.value.ingressPath]])]),l("div",lo,[e[118]||(e[118]=l("label",{class:"form-label"},"Ingress Class",-1)),l("input",{type:"text",class:"form-control",placeholder:"nginx",value:Nt.value,disabled:""},null,8,ao)])])):f("",!0)])):f("",!0),n.value=="Application Installation"&&xe.value&&B.value?(o(),s("div",so,[e[128]||(e[128]=l("label",{class:"form-label"},"Object Storage Configuration",-1)),e[129]||(e[129]=l("p",{class:"text-muted"}," Select Object Storage resources already registered in Tumblebug. CSP access keys are not sent to JupyterLab. ",-1)),l("div",oo,[c(l("input",{class:"form-check-input",type:"checkbox",id:"k8sJupyterObjectStorageEnabled","onUpdate:modelValue":e[36]||(e[36]=t=>r.value.enabled=t),disabled:Je.value},null,8,no),[[se,r.value.enabled]]),e[120]||(e[120]=l("label",{class:"form-check-label",for:"k8sJupyterObjectStorageEnabled"},"Enable Object Storage",-1))]),r.value.enabled?(o(),s("div",ro,[l("div",uo,[e[121]||(e[121]=l("label",{class:"form-label mb-0 required"},"Registered Object Storage",-1)),l("button",{type:"button",class:"btn btn-sm btn-outline-secondary",disabled:ge.value,onClick:Fe}," Refresh ",8,io)]),ge.value?(o(),s("div",co,"Loading Object Storage resources...")):Ve.value?(o(),s("div",vo," Object Storage resources could not be loaded from Tumblebug. ")):ne.value.length===0?(o(),s("div",po," No Object Storage resource is registered in this namespace. ")):(o(),s("div",mo,[(o(!0),s(N,null,U(ne.value,t=>(o(),s("div",{class:"form-check",key:t.id},[c(l("input",{class:"form-check-input",type:"checkbox",id:`vm-object-storage-${t.id}`,value:t.id,disabled:String(t.status||"").toLowerCase()!=="available","onUpdate:modelValue":e[37]||(e[37]=d=>r.value.selectedStorageIds=d)},null,8,fo),[[se,r.value.selectedStorageIds]]),l("label",{class:"form-check-label",for:`vm-object-storage-${t.id}`},[de(v(t.name||t.id)+" ",1),l("span",go," ("+v(t.provider||"unknown CSP")+v(t.region?` / ${t.region}`:"")+" / "+v(t.status||"unknown")+") ",1)],8,bo)]))),128))])),l("div",yo,[l("div",Io,[e[122]||(e[122]=l("label",{class:"form-label"},"Allowed Object Prefix",-1)),c(l("input",{type:"text",class:"form-control",placeholder:"Optional: data/project-a/","onUpdate:modelValue":e[38]||(e[38]=t=>r.value.prefix=t)},null,512),[[O,r.value.prefix,void 0,{trim:!0}]])]),l("div",ho,[e[124]||(e[124]=l("label",{class:"form-label"},"Access Mode",-1)),c(l("select",{class:"form-select","onUpdate:modelValue":e[39]||(e[39]=t=>r.value.accessMode=t)},e[123]||(e[123]=[l("option",{value:"READ_ONLY"},"Read only",-1),l("option",{value:"READ_WRITE"},"Read and write",-1)]),512),[[F,r.value.accessMode]])])]),l("div",ko,[e[125]||(e[125]=l("label",{class:"form-label required"},"Jupyter Access Token",-1)),c(l("input",{type:"password",class:"form-control",placeholder:"At least 12 characters","onUpdate:modelValue":e[40]||(e[40]=t=>r.value.jupyterToken=t),autocomplete:"new-password"},null,512),[[O,r.value.jupyterToken]]),e[126]||(e[126]=l("p",{class:"text-muted mt-1 mb-0"}," This is the Jupyter login token, not a CSP secret key. Use it at the Ingress URL shown below. ",-1))]),e[127]||(e[127]=l("p",{class:"text-muted mt-2 mb-0"}," Jupyter requests short-lived presigned URLs through Application Manager. Multiple CSPs can be selected. ",-1)),x.value?(o(),s("div",{key:4,class:Se(["alert mt-3",x.value.success?"alert-success":"alert-danger"])},[l("div",null,v(x.value.success?"Object Storage: SUCCESS":"Object Storage: FAILED"),1),l("ul",So,[(o(!0),s(N,null,U(x.value.checks,t=>(o(),s("li",{key:t.name},v(t.name)+" - "+v(t.success?"OK":"FAIL"),1))),128))])],2)):f("",!0)])):f("",!0)])):f("",!0),n.value=="Application Installation"&&xe.value&&!B.value?(o(),s("div",Co,[e[139]||(e[139]=l("label",{class:"form-label"},"Object Storage Configuration",-1)),l("div",wo,[l("div",Eo,[c(l("input",{class:"form-check-input",type:"checkbox",id:"objectStorageEnabled","onUpdate:modelValue":e[41]||(e[41]=t=>r.value.enabled=t),disabled:Je.value},null,8,Vo),[[se,r.value.enabled]]),e[130]||(e[130]=l("label",{class:"form-check-label",for:"objectStorageEnabled"}," Enable Object Storage ",-1))])]),r.value.enabled?(o(),s("div",Ao,[l("div",To,[l("div",No,[e[131]||(e[131]=l("label",{class:"form-label"},"Target CSP",-1)),l("input",{type:"text",class:"form-control",value:He.value||"-",disabled:""},null,8,Mo)]),e[132]||(e[132]=l("div",{class:"w-50 ms-2"},[l("label",{class:"form-label"},"Storage API"),l("input",{type:"text",class:"form-control",value:"S3-compatible",disabled:""})],-1))]),l("div",Po,[e[133]||(e[133]=l("label",{class:"form-label"},"S3-compatible Endpoint",-1)),c(l("input",{type:"text",class:"form-control",placeholder:ul.value,"onUpdate:modelValue":e[42]||(e[42]=t=>r.value.endpoint=t)},null,8,xo),[[O,r.value.endpoint]])]),l("div",Ro,[l("div",jo,[e[134]||(e[134]=l("label",{class:"form-label"},"Region",-1)),c(l("input",{type:"text",class:"form-control",placeholder:il.value,"onUpdate:modelValue":e[43]||(e[43]=t=>r.value.region=t)},null,8,Uo),[[O,r.value.region]])]),l("div",Oo,[e[135]||(e[135]=l("label",{class:"form-label"},"Bucket Name",-1)),c(l("input",{type:"text",class:"form-control",placeholder:"object-storage-bucket","onUpdate:modelValue":e[44]||(e[44]=t=>r.value.bucket=t)},null,512),[[O,r.value.bucket]])])]),l("div",_o,[l("div",Lo,[e[136]||(e[136]=l("label",{class:"form-label"},"Access Key ID",-1)),c(l("input",{type:"password",class:"form-control",placeholder:"access key id","onUpdate:modelValue":e[45]||(e[45]=t=>r.value.accessKey=t),autocomplete:"off"},null,512),[[O,r.value.accessKey]])]),l("div",Do,[e[137]||(e[137]=l("label",{class:"form-label"},"Secret Access Key",-1)),c(l("input",{type:"password",class:"form-control",placeholder:"secret access key","onUpdate:modelValue":e[46]||(e[46]=t=>r.value.secretKey=t),autocomplete:"off"},null,512),[[O,r.value.secretKey]])])]),l("div",Go,[l("div",Ko,[c(l("input",{class:"form-check-input",type:"checkbox",id:"forcePathStyle","onUpdate:modelValue":e[47]||(e[47]=t=>r.value.forcePathStyle=t)},null,512),[[se,r.value.forcePathStyle]]),e[138]||(e[138]=l("label",{class:"form-check-label",for:"forcePathStyle",title:"On: endpoint/bucket/object. Off: bucket.endpoint/object."},"Use path-style URL",-1))])]),x.value?(o(),s("div",{key:0,class:Se(["alert mt-3",x.value.success?"alert-success":"alert-danger"])},[l("div",null,v(x.value.success?"Object Storage: SUCCESS":"Object Storage: FAILED"),1),l("ul",$o,[(o(!0),s(N,null,U(x.value.checks,t=>(o(),s("li",{key:t.name},v(t.name)+" - "+v(t.success?"OK":"FAIL"),1))),128))])],2)):f("",!0)])):f("",!0)])):f("",!0)],64)):f("",!0)],8,ta),[[wl,!J.value]])],6),!J.value&&(Ne.value.length||Oe.value.length)?(o(),s("div",Bo,[(o(!0),s(N,null,U(Ne.value,t=>(o(),s("div",{key:t,class:"alert alert-danger",role:"alert"},v(t),1))),128)),(o(!0),s(N,null,U(Oe.value,t=>(o(),s("div",{key:t,class:"alert alert-warning"},v(t),1))),128))])):f("",!0),l("div",Fo,[l("a",{class:"btn btn-link link-secondary","data-bs-dismiss":a.embedded?void 0:"modal",onClick:At},v(J.value?"Close":"Cancel"),9,zo),J.value?(o(),s("button",{key:0,type:"button",class:"btn btn-primary",onClick:Wt}," View Apps Status ")):(o(),s("div",Ho,[n.value=="Application Installation"&&vt.value?(o(),s("button",{key:0,class:"btn btn-outline-danger ms-auto me-1",onClick:e[48]||(e[48]=t=>ml()),disabled:re.value||je.value||pt.value,title:"Writes, reads, and deletes a temporary object in the selected bucket."},v(je.value?"Checking...":"Storage Check"),9,qo)):f("",!0),n.value=="Application Installation"?(o(),s("button",{key:1,class:"btn btn-danger ms-auto me-1",onClick:el,disabled:re.value||he.value||!X.value||!!k.value},v(he.value?"Checking...":"Spec Check"),9,Yo)):f("",!0),l("button",{class:"btn btn-primary ms-auto",onClick:Zt,disabled:dl.value},v(re.value?"Deploying…":"Deploy"),9,Jo)]))])])],2)],10,Wl))}}),nn=_l(Xo,[["__scopeId","data-v-3cfc7d74"]]);export{nn as A,on as p}; diff --git a/src/main/resources/static/assets/applicationInstallationForm-DA09_p5G.js b/src/main/resources/static/assets/applicationInstallationForm-DA09_p5G.js new file mode 100644 index 00000000..c29d0292 --- /dev/null +++ b/src/main/resources/static/assets/applicationInstallationForm-DA09_p5G.js @@ -0,0 +1 @@ +import{d as nt,f as rt,q as ut,g as I,r as g,h as re,i as it,c as s,a as t,t as v,m as b,n as fe,C as dt,e as oe,j as i,v as $,F as T,k as P,z as Be,l as x,A as ee,o}from"./index-DU977P1k.js";import{_ as le}from"./lodash-BpiFzpk2.js";import{s as ze}from"./request-jyImEBot.js";import{m as ct,y as vt,z as pt,A as mt,r as Sl,B as ft,C as bt,D as gt,E as yt,F as It}from"./softwareCatalog-VAKfe9v1.js";import{_ as kt}from"./_plugin-vue_export-helper-DlAUqK2U.js";const Cl=["targetType","requestId","mciId","vmId","nodeGroupId","clusterId"],ht=["namespace","namespaceId"],El=200,St=/[/?#]/,Ct=c=>St.test(c)||Array.from(c).some(A=>{const p=A.charCodeAt(0);return p<=31||p===127}),Et=(c,A)=>{const p=c.getAll(A);return p.length>1?{ok:!1,error:`Query parameter "${A}" must be provided only once.`}:{ok:!0,value:String(p[0]||"").trim()}},be=(c,A,p=!1)=>A?A.length>El?`${c} must be ${El} characters or fewer.`:Ct(A)?`${c} contains unsupported path characters.`:"":p?`${c} is required.`:"",Po=(c,A=()=>`am-install-${Date.now()}`)=>{const p=typeof c=="string"?new URLSearchParams(c.startsWith("?")?c.slice(1):c):c;for(const y of ht)if(p.has(y))return{ok:!1,error:`${y} must not be supplied in the URL. Namespace comes from the selected Project context.`};for(const y of p.keys())if(!Cl.includes(y))return{ok:!1,error:`Unsupported query parameter "${y}".`};const k={};for(const y of Cl){const E=Et(p,y);if(!E.ok)return E;k[y]=E.value}const d=k.targetType.toUpperCase();if(d!=="VM"&&d!=="K8S")return{ok:!1,error:"targetType must be VM or K8S."};const G=k.requestId||A(),m=[be("requestId",G,!0),be("mciId",k.mciId),be("vmId",k.vmId),be("nodeGroupId",k.nodeGroupId),be("clusterId",k.clusterId)].filter(Boolean);if(m.length>0)return{ok:!1,error:m[0]};if(d==="VM"){const y=[be("mciId",k.mciId,!0)].filter(Boolean);if(y.length>0)return{ok:!1,error:y[0]};if(!k.vmId&&!k.nodeGroupId)return{ok:!1,error:"vmId or nodeGroupId is required."};if(k.clusterId)return{ok:!1,error:"clusterId cannot be used with a VM target."}}if(d==="K8S"){const y=be("clusterId",k.clusterId,!0);if(y)return{ok:!1,error:y};if(k.mciId||k.vmId)return{ok:!1,error:"mciId and vmId cannot be used with a K8S target."};if(k.nodeGroupId)return{ok:!1,error:"nodeGroupId cannot be used with a K8S target."}}return{ok:!0,target:{requestId:G,targetType:d,mciId:k.mciId,vmId:k.vmId,nodeGroupId:k.nodeGroupId,clusterId:k.clusterId}}},Vl=c=>String((c==null?void 0:c.id)||(c==null?void 0:c.name)||"").trim(),Vt=(c,A)=>{const p=String(A||"").trim().toLowerCase();return[c==null?void 0:c.id,c==null?void 0:c.name].map(k=>String(k||"").trim().toLowerCase()).filter(Boolean).includes(p)},wt=(c,A)=>{const p=Array.isArray(c)?c:[],k=String((A==null?void 0:A.vmId)||"").trim(),d=String((A==null?void 0:A.nodeGroupId)||"").trim();if(k){const y=p.find(E=>Vt(E,k));return y?d&&String(y.subGroupId||"").trim()!==d?{ok:!1,error:`VM "${k}" does not belong to NodeGroup "${d}".`}:{ok:!0,mode:"VM",vm:y,vmId:Vl(y),nodeGroupId:d}:{ok:!1,error:`VM "${k}" was not found.`}}const G=p.filter(y=>String((y==null?void 0:y.subGroupId)||"").trim()===d);if(G.length===0)return{ok:!1,error:`NodeGroup "${d}" was not found.`};const m=Array.from(new Set(G.filter(y=>String((y==null?void 0:y.status)||"").trim().toUpperCase()==="RUNNING").map(Vl).filter(Boolean)));return m.length===0?{ok:!1,error:`NodeGroup "${d}" has no running VMs.`}:{ok:!0,mode:"NODE_GROUP",members:G,runningVmIds:m,nodeGroupId:d}},At=()=>ze.get("/cbtumblebug/ns"),Tt=c=>ze.get(`/cbtumblebug/ns/${c}/infra`),Nt=c=>ze.get(`/cbtumblebug/ns/${c.nsId}/infra/${c.mciId}`),Rt=c=>ze.get(`/cbtumblebug/ns/${c}/k8scluster`);function Mt(c){var d,G;const p=(G=String(((d=c==null?void 0:c.packageInfo)==null?void 0:d.packageName)||"").trim().toLowerCase().split("/").pop())==null?void 0:G.split(/[:@]/)[0];if(p!=="redis"&&p!=="elasticsearch")return!1;const k=String((c==null?void 0:c.name)||"").trim().toLowerCase();return new RegExp(`(^|[^a-z0-9])${p}([^a-z0-9]|$)`).test(k)&&!(p==="redis"&&k.includes("elasticsearch"))}const xt=["id","tabindex"],jt={class:"modal-content"},Pt={class:"modal-header"},Ut={class:"modal-title"},Ot={key:0,class:"alert alert-info py-2",role:"status"},_t={key:1,class:"alert alert-warning py-2",role:"alert"},Lt={key:2,class:"alert alert-secondary py-2",role:"status"},Gt={class:"mb-3"},Dt={key:0,class:"text-muted"},Kt={key:1,class:"text-muted"},$t=["disabled"],Bt=["value"],zt={class:"mb-3"},Ft={key:0,class:"text-muted"},Ht={key:1,class:"text-muted"},qt=["disabled"],Yt=["value"],Jt={key:3,class:"form-select",id:"vm-namespace-empty",disabled:""},Wt={class:"mb-3"},Xt={key:0,class:"text-muted"},Zt={key:1,class:"text-muted"},Qt=["disabled"],ea={key:0,value:""},la=["value","title"],ta={key:0,class:"mb-3"},aa={class:"d-flex gap-3"},sa={class:"form-check"},oa={class:"form-check"},na={key:1,class:"mb-3"},ra=["disabled"],ua=["value"],ia={key:0,class:"mt-2",style:{display:"flex",gap:"10px","flex-wrap":"wrap"}},da=["onClick"],ca={key:2,class:"mb-3"},va=["disabled"],pa=["value","disabled"],ma={key:0,class:"mt-2"},fa={class:"d-flex gap-2 flex-wrap"},ba={key:1,class:"text-warning mt-2"},ga={key:3,class:"mb-3"},ya={style:{display:"flex",gap:"10px"}},Ia={class:"form-check"},ka=["disabled"],ha={key:0,class:"form-check"},Sa=["disabled"],Ca={key:0,class:"form-text"},Ea={key:4,class:"mb-3"},Va={class:"mb-3"},wa=["value"],Aa={class:"mb-3"},Ta={key:5,class:"mb-3"},Na={key:0,class:"mt-2"},Ra={key:6,class:"mb-3"},Ma={key:7,class:"mb-3"},xa={class:"form-check mb-2"},ja=["disabled"],Pa={key:0},Ua={class:"d-flex align-items-center justify-content-between mb-2"},Oa=["disabled"],_a={key:0,class:"text-muted"},La={key:1,class:"alert alert-danger py-2"},Ga={key:2,class:"alert alert-warning py-2"},Da={key:3,class:"border rounded p-2"},Ka=["id","value","disabled"],$a=["for"],Ba={class:"text-muted"},za={class:"d-flex justify-content-between mt-2"},Fa={class:"w-50 me-2"},Ha={class:"w-50 ms-2"},qa={class:"mt-2"},Ya={class:"text-muted mt-1 mb-0"},Ja={class:"mb-0 ps-3"},Wa={class:"mb-3"},Xa={key:0,class:"text-muted"},Za={key:1,class:"text-muted"},Qa=["disabled"],es=["value"],ls={key:3,class:"form-select",id:"k8s-namespace-empty",disabled:""},ts={class:"mb-3"},as={key:0,class:"text-muted"},ss={key:1,class:"text-muted"},os=["disabled"],ns={key:0,value:""},rs=["value"],us={class:"mb-3"},is=["value"],ds={key:0,class:"mb-3"},cs=["disabled"],vs={key:1,class:"mb-3"},ps={key:2,class:"mb-3"},ms=["disabled"],fs={value:"",disabled:""},bs=["value"],gs={key:0,class:"text-danger mt-1 mb-0"},ys={key:3,class:"mb-3"},Is={class:"form-check mt-2"},ks={class:"text-muted mt-1"},hs={key:4,class:"mb-3"},Ss={class:"mb-2"},Cs={class:"form-check"},Es={key:0,class:"d-flex justify-content-between"},Vs={key:5,class:"mb-3"},ws={class:"mb-2"},As={class:"form-check"},Ts={key:6,class:"mb-3"},Ns={class:"mb-2"},Rs={class:"form-check"},Ms={key:0},xs={class:"mb-2"},js={class:"mb-2"},Ps={class:"mb-2"},Us={key:7,class:"mb-3"},Os={class:"form-check mb-2"},_s=["disabled"],Ls={key:0},Gs={class:"d-flex align-items-center justify-content-between mb-2"},Ds=["disabled"],Ks={key:0,class:"text-muted"},$s={key:1,class:"alert alert-danger py-2"},Bs={key:2,class:"alert alert-warning py-2"},zs={key:3,class:"border rounded p-2"},Fs=["id","value","disabled"],Hs=["for"],qs={class:"text-muted"},Ys={class:"d-flex justify-content-between mt-2"},Js={class:"w-50 me-2"},Ws={class:"w-50 ms-2"},Xs={class:"mt-2"},Zs={class:"mb-0 ps-3"},Qs={key:8,class:"mb-3"},eo={class:"mb-2"},lo={class:"form-check"},to=["disabled"],ao={key:0},so={class:"d-flex justify-content-between"},oo={class:"w-50 me-2"},no=["value"],ro={class:"mt-2 mb-2"},uo=["placeholder"],io={class:"d-flex justify-content-between"},co={class:"w-50 me-2"},vo=["placeholder"],po={class:"w-50 ms-2"},mo={class:"d-flex justify-content-between mt-2"},fo={class:"w-50 me-2"},bo={class:"w-50 ms-2"},go={class:"d-flex gap-4 mt-3"},yo={class:"form-check"},Io={class:"mb-0 ps-3"},ko={key:0,class:"px-3","aria-live":"polite"},ho={class:"modal-footer d-flex justify-content-between"},So=["data-bs-dismiss"],Co=["disabled"],Eo=["disabled"],Vo=["data-bs-dismiss","disabled"],wo="object-storage",Ao="storage-class",To=nt({__name:"applicationInstallationForm",props:{nsId:{default:""},title:{default:"Application Installation"},embedded:{type:Boolean,default:!1},formId:{default:"install-form"},targetType:{default:""},targetMciId:{default:""},targetVmId:{default:""},targetNodeGroupId:{default:""},targetClusterId:{default:""}},emits:["ready","deployment-event","cancel"],setup(c,{emit:A}){const p=rt(),k=ut(),d=c,G=A,m=I(()=>d.title),y=I(()=>String(d.targetType||"").toUpperCase()),E=I(()=>d.embedded&&["VM","K8S"].includes(y.value)),il=I(()=>E.value&&y.value==="VM"&&!!String(d.targetNodeGroupId||"").trim()&&!String(d.targetVmId||"").trim()),wl=I(()=>{if(y.value!=="VM")return`Kubernetes cluster ${d.targetClusterId}`;if(il.value)return`NodeGroup ${d.targetNodeGroupId} in ${d.targetMciId}`;const a=String(d.targetNodeGroupId||"").trim();return a?`VM ${d.targetVmId} in NodeGroup ${a} / ${d.targetMciId}`:`VM ${d.targetVmId} in ${d.targetMciId}`}),Fe=a=>(Array.isArray(a)?a:[a]).flatMap(l=>typeof l=="string"?l.split(","):[l]).map(l=>String((l==null?void 0:l.id)||(l==null?void 0:l.name)||l||"").trim()).filter(Boolean),ue=(...a)=>{for(const e of a){const l=Fe(e);if(l.length>0)return l[0]}return""},L=I(()=>k.projectInfo||{}),xe=I(()=>k.workspaceInfo||{}),ge=I(()=>ue(L.value.ns_id,L.value.nsId)),je=I(()=>Fe(L.value.mci_ids??L.value.mciIds??L.value.mci_id??L.value.mciId)),Pe=I(()=>Fe(L.value.cluster_ids??L.value.clusterIds??L.value.cluster_id??L.value.clusterId)),He=I(()=>!!ue(L.value.id,L.value.name,ge.value)),dl=I(()=>He.value&&!!ge.value),cl=I(()=>{const a=ue(xe.value.name,xe.value.id),e=ue(L.value.name,L.value.id);return[a,e].filter(Boolean).join(" / ")||"the selected project"}),vl=I(()=>JSON.stringify([ue(xe.value.id,xe.value.name),ue(L.value.id,L.value.name),ge.value,je.value,Pe.value])),qe=g([]),ie=g([]),ne=g([]),B=g([]),F=g([]),ye=g([]),f=g(""),h=g(""),U=g(""),D=g(""),V=g([]),j=g("VM"),O=g(""),N=g("Standalone"),w=g({}),Ae=g(!1),S=g({}),n=g({}),R=g(null),Te=g(!1),te=g([]),de=g(!1),Ie=g(!1),Ne=g(!1),ce=g("GENERAL_PURPOSE"),ae=g([]),Y=g(""),ke=g(!1),he=g(!1),se=g([]),M=g(""),X=g(""),J=g(""),ve=g("PRIVATE"),H=g(""),Ye=g(!0),W=g(!0),pe=g(!1),Se=g([]),Re=g([]);let Ce=0;const z=g(0),C=g("");let _=0;const Ee=a=>(a==null?void 0:a.id)||(a==null?void 0:a.name)||"",pl=a=>(a==null?void 0:a.id)||(a==null?void 0:a.name)||"",Ue=a=>(a==null?void 0:a.id)||(a==null?void 0:a.name)||"",Oe=a=>(a==null?void 0:a.name)||(a==null?void 0:a.id)||"",Al=a=>String((a==null?void 0:a.status)||"").trim().toUpperCase()==="RUNNING",Je=I(()=>{const a=new Map;for(const e of F.value){const l=String((e==null?void 0:e.subGroupId)||"").trim();if(!l)continue;const u=a.get(l)||{id:l,totalVmCount:0,runningVmIds:[]};u.totalVmCount+=1;const r=Ue(e);Al(e)&&r&&!u.runningVmIds.includes(r)&&u.runningVmIds.push(r),a.set(l,u)}return Array.from(a.values()).sort((e,l)=>e.id.localeCompare(l.id))}),We=I(()=>{var a;return((a=Je.value.find(e=>e.id===O.value))==null?void 0:a.runningVmIds)||[]}),Ve=(a,e)=>{if(e.length===0)return!0;const l=[a==null?void 0:a.id,a==null?void 0:a.name,a==null?void 0:a.uid].map(r=>String(r||"").trim().toLowerCase()).filter(Boolean),u=e.map(r=>r.toLowerCase());return l.some(r=>u.includes(r))},ml=()=>{ie.value=[],ne.value=[],B.value=[],F.value=[],se.value=[],te.value=[],Ie.value=!1,h.value="",U.value="",D.value="",V.value=[],O.value="",M.value="",C.value=""};re([f,h,M,U,V,j,O,z,Y,S,vl,m],()=>{Z()},{deep:!0,flush:"sync"}),re(f,async a=>{le.isEmpty(h.value)||(a==="VM"?(j.value="VM",U.value="",D.value="",V.value=[],O.value="",B.value=[],F.value=[],await Xe()):a==="K8S"&&(M.value="",await Qe()),X.value="",Z())}),re(n,()=>{R.value=null},{deep:!0}),re(Y,()=>{Z()}),re(vl,async(a,e)=>{if(a===e)return;_+=1,ml(),X.value="",z.value=0,bl();const l=document.getElementById(d.formId);(d.embedded||l!=null&&l.classList.contains("show"))&&await Me()}),re(N,()=>{if(j.value==="NODE_GROUP"){N.value="Standalone";return}N.value==="Standalone"?(V.value=[],B.value=[...F.value]):N.value==="Clustering"&&(V.value=[],B.value=[...F.value])}),re(j,a=>{D.value="",V.value=[],O.value=a==="NODE_GROUP"&&il.value?String(d.targetNodeGroupId||"").trim():"",B.value=[...F.value],a==="NODE_GROUP"&&(N.value="Standalone"),Z()}),it(async()=>{if(d.embedded){try{if(await Me(),C.value){G("deployment-event",{status:"FORM_ERROR",message:C.value});return}await fl(),G("ready",{targetType:y.value,namespace:h.value})}catch{C.value=C.value||"The software catalog could not be loaded.",G("deployment-event",{status:"FORM_ERROR",message:"The installation form could not be initialized."})}return}const a=document.getElementById(d.formId);a&&a.addEventListener("show.bs.modal",async()=>{await Me(),await fl()})});const Me=async()=>{const a=++_;ml(),f.value=E.value?y.value:"VM",j.value="VM",O.value="",N.value="Standalone",w.value={hpaEnabled:!1,hpaMinReplicas:1,hpaMaxReplicas:10,hpaCpuUtilization:60,hpaMemoryUtilization:80},Ae.value=!1,S.value={ingressEnabled:!1,ingressHost:"",ingressPath:"/",ingressClass:"nginx",ingressTlsEnabled:!1,ingressTlsSecret:""},n.value=Ke(),R.value=null,Te.value=!1,te.value=[],de.value=!1,Ie.value=!1,ae.value=[],Y.value="",ke.value=!1,he.value=!1,ce.value="GENERAL_PURPOSE",J.value="",ve.value="PRIVATE",H.value="",X.value="",z.value=0,Nl(),bl(),await Rl(a)},Tl=a=>{let e=(a||"").trim();if(!e)return e;e=e.replace(/^[a-zA-Z][a-zA-Z0-9+.-]*:\/\//,"");const l=e.lastIndexOf("@");l>=0&&(e=e.slice(l+1));const u=e.search(/[/?#]/);u>=0&&(e=e.slice(0,u));const r=e.indexOf(":");return r>=0&&e.indexOf(":",r+1)<0&&(e=e.slice(0,r)),e.trim().toLowerCase()},fl=async()=>{await ct("").then(({data:a})=>{ye.value=a})},Nl=()=>{if(E.value){qe.value=[{key:y.value,value:y.value}];return}qe.value=[{key:"VM",value:"VM"},{key:"k8s",value:"K8S"}]},bl=()=>{m.value==="Application Uninstallation"?W.value=!1:W.value=!0},Rl=async(a=_)=>{try{const{data:e}=await At();if(a!==_)return;const l=Array.isArray(e)?e:[];if(He.value){if(le.isEmpty(ge.value)){C.value=`Project "${cl.value}" has no namespace mapping.`;return}const u=l.find(r=>Ve(r,[ge.value]));if(!u){C.value=`Namespace "${ge.value}" assigned to this project was not found.`;return}ie.value=[u],h.value=Ee(u)}else{ie.value=l;const u=ue(d.nsId),q=(u?l.find(ot=>Ve(ot,[u])):void 0)||l[0];h.value=q?Ee(q):""}le.isEmpty(h.value)||(f.value==="VM"?await Xe(a):f.value==="K8S"&&await Qe(a))}catch{if(a!==_)return;C.value="Namespaces could not be loaded for the selected project."}},Xe=async(a=_)=>{C.value="";try{const{data:e}=await Tt(h.value);if(a!==_)return;const u=(Array.isArray(e)?e:[]).filter(r=>Ve(r,je.value));if(E.value&&y.value==="VM"){const r=u.find(q=>Ve(q,[d.targetMciId]));if(!r){ne.value=[],U.value="",C.value=`Infra "${d.targetMciId}" was not found in the selected project namespace.`;return}ne.value=[r],U.value=pl(r),await Ze(a);return}ne.value=u,ne.value.length>0?(U.value=pl(ne.value[0]),await Ze(a)):(U.value="",C.value=je.value.length>0?`Infra "${je.value.join(", ")}" assigned to this project was not found.`:"No VM infrastructure is available in this project.")}catch{if(a!==_)return;C.value="VM infrastructure could not be loaded for the selected project."}},Ze=async(a=_)=>{const e={nsId:h.value,mciId:U.value};try{const{data:l}=await Nt(e);if(a!==_)return;const u=Array.isArray(l==null?void 0:l.node)?l.node:[];if(E.value&&y.value==="VM"){const r=wt(u,{vmId:d.targetVmId,nodeGroupId:d.targetNodeGroupId});if(!r.ok){F.value=[],B.value=[],D.value="",V.value=[],O.value="",C.value=`${r.error} Infra: "${d.targetMciId}".`;return}if(r.mode==="NODE_GROUP"){F.value=r.members,B.value=[...r.members],j.value="NODE_GROUP",O.value=r.nodeGroupId,N.value="Standalone",D.value="",V.value=[];return}F.value=[r.vm],B.value=[r.vm],j.value="VM",D.value=r.vmId,V.value=[r.vmId];return}F.value=u,B.value=F.value.filter(r=>!V.value.includes(r.id)),D.value="",Je.value.some(r=>r.id===O.value)||(O.value=""),B.value.length===0&&(C.value="No VM is available in the infrastructure assigned to this project.")}catch{if(a!==_)return;C.value="VMs could not be loaded for the selected project."}},Qe=async(a=_)=>{C.value="";try{const{data:e}=await Rt(h.value);if(a!==_)return;const u=(Array.isArray(e)?e:[]).filter(r=>Ve(r,Pe.value));if(E.value&&y.value==="K8S"){const r=u.find(q=>Ve(q,[d.targetClusterId]));if(!r){se.value=[],M.value="",C.value=`Cluster "${d.targetClusterId}" was not found in the selected project namespace.`;return}se.value=[r],M.value=Oe(r)}else se.value=u,se.value.length>0?M.value=Oe(se.value[0]):(M.value="",C.value=Pe.value.length>0?`Cluster "${Pe.value.join(", ")}" assigned to this project was not found.`:"No Kubernetes cluster is available in this project.");f.value==="K8S"&&K.value&&(S.value.ingressEnabled=!0,w.value.hpaEnabled=!1,w.value.hpaMinReplicas=1),n.value=Ke(),R.value=null,await el()}catch{if(a!==_)return;C.value="Kubernetes clusters could not be loaded for the selected project."}},_e=async()=>{if(te.value=[],Ie.value=!1,!(!["VM","K8S"].includes(f.value)||!K.value||le.isEmpty(h.value))){de.value=!0;try{const{data:a}=await pt(h.value);te.value=Array.isArray(a)?a:[];const e=te.value.filter(l=>String(l.status||"").toLowerCase()==="available").map(l=>l.id);n.value.selectedStorageIds=(n.value.selectedStorageIds||[]).filter(l=>e.includes(l)),n.value.selectedStorageIds.length===0&&e.length===1&&(n.value.selectedStorageIds=[e[0]])}catch{Ie.value=!0}finally{de.value=!1}}},el=async()=>{if(ae.value=[],Y.value="",he.value=!1,!(f.value!=="K8S"||!al.value||le.isEmpty(h.value)||le.isEmpty(M.value))){ke.value=!0;try{const{data:a}=await vt({namespace:h.value,clusterName:M.value});ae.value=Array.isArray(a)?a:[],Y.value=Ml(ae.value)}catch{he.value=!0,Y.value=""}finally{ke.value=!1}}},Ml=a=>{var l;const e=a.find(u=>u.defaultClass);return(e==null?void 0:e.name)||((l=a[0])==null?void 0:l.name)||""},xl=async()=>{V.value=[],await Xe(_),await _e(),Z()},jl=async()=>{V.value=[],O.value="",C.value="",await Ze(_),Z()},Pl=async()=>{await Qe(_),Z()},Z=()=>{Ce+=1,Se.value=[],Re.value=[],m.value==="Application Installation"?W.value=!0:m.value==="Application Uninstallation"&&(W.value=!1)},Ul=()=>{if(D.value!==""){if(N.value==="Standalone")V.value=[D.value];else if(N.value==="Clustering"&&!V.value.includes(D.value)){V.value.push(D.value);const a=B.value.findIndex(e=>e.id===D.value);a!==-1&&B.value.splice(a,1)}D.value="",Z()}},Ol=()=>{V.value=[],N.value="Standalone",Z()},_l=a=>{if(E.value)return;const e=V.value[a];if(V.value.splice(a,1),N.value==="Clustering"){const l=F.value.find(u=>u.id===e);l&&B.value.push(l)}Z()},Ll=async()=>{Ne.value||(G("cancel"),await Me())},Gl=()=>f.value==="VM"?j.value==="NODE_GROUP"?{targetType:"VM",namespace:h.value,mciId:U.value,nodeGroupId:O.value}:{targetType:"VM",namespace:h.value,mciId:U.value,vmId:V.value[0]||"",...E.value&&d.targetNodeGroupId?{nodeGroupId:d.targetNodeGroupId}:{}}:{targetType:"K8S",namespace:h.value,clusterId:M.value},Le=(a,e={})=>{G("deployment-event",{status:a,target:Gl(),...e})},Dl=a=>{if(!(!a||typeof a!="object"))return a.deploymentId||a.applicationId||a.id||void 0},Kl=async()=>{if(m.value==="Application Installation"&&f.value==="VM"&&N.value==="Clustering"&&!ll.value){p.error("Clustering is available only for Redis and Elasticsearch on individually selected VMs");return}if(m.value==="Application Installation"&&(W.value||pe.value)){p.error("Please complete Spec Check for the current settings before deploying");return}if(C.value){p.error(C.value);return}if(f.value!=="VM"&&f.value!=="K8S"){p.error("Please Select Infra");return}if(f.value==="VM"&&m.value==="Application Installation"&&ve.value==="RESTRICTED"&&(!H.value||H.value==="0.0.0.0/0")){p.error("Enter a restricted IPv4 CIDR such as 203.0.113.10/32");return}if(f.value==="K8S"&&m.value==="Application Installation"&&S.value.ingressEnabled&&(!H.value||H.value==="0.0.0.0/0"||S.value.ingressClass!=="nginx")){p.error("Enter a restricted IPv4 CIDR and use ingress class nginx for external access");return}if(f.value==="K8S"&&K.value){if(!S.value.ingressEnabled||!S.value.ingressHost||!H.value||H.value==="0.0.0.0/0"){p.error("Enter an Ingress hostname and a restricted IPv4 CIDR for Jupyter");return}if(S.value.ingressPath!=="/"||S.value.ingressTlsEnabled||w.value.hpaEnabled||Ae.value){p.error("Jupyter uses one replica, path / and HTTP NodePort 30880 without HPA or rebalancing");return}}if(K.value){if((n.value.selectedStorageIds||[]).length===0){p.error("Select at least one registered Object Storage resource");return}if(String(n.value.jupyterToken||"").length<12){p.error("Enter a Jupyter access token with at least 12 characters");return}if(!ol.value){p.error("Run the Object Storage check before deployment");return}}if(!(f.value==="K8S"&&!Il())){Ne.value=!0,Le("DEPLOY_STARTED");try{let a={};if(f.value==="VM"){let e={};if(m.value=="Application Installation"){const l=j.value==="NODE_GROUP",u=!l&&N.value==="Clustering"?`${X.value}-cluster`:`${X.value}-standalone`,r=J.value===""?void 0:Number(J.value);e={namespace:h.value,mciId:U.value,vmIds:l?[]:V.value,vmNodeGroupId:l?O.value:E.value&&d.targetNodeGroupId?d.targetNodeGroupId:void 0,clusterName:u,catalogId:z.value,servicePort:r,openServicePort:ve.value==="RESTRICTED",servicePortCidr:ve.value==="RESTRICTED"?H.value:void 0,username:"admin",deploymentType:f.value,vmDeploymentMode:l?"STANDALONE":N.value.toUpperCase(),resourceType:ce.value,additionalConfig:et()},a=await mt(e)}else a=await Sl(e)}else{const e=J.value===""?void 0:Number(J.value),l=lt(),u={namespace:h.value,clusterName:M.value,openServicePort:S.value.ingressEnabled&&Ye.value,servicePortCidr:S.value.ingressEnabled?H.value:void 0,catalogId:z.value,servicePort:e,username:"",deploymentType:f.value,hpaEnabled:w.value.hpaEnabled,minReplicas:w.value.hpaMinReplicas,maxReplicas:w.value.hpaMaxReplicas,cpuThreshold:w.value.hpaCpuUtilization,memoryThreshold:w.value.hpaMemoryUtilization,workloadRebalancingEnabled:Ae.value,resourceType:ce.value,...gl(),additionalConfig:l};a=m.value=="Application Installation"?await ft(u):await Sl(u)}a.data?(p.success("SUCCESS"),Le("DEPLOY_SUCCEEDED",{deploymentId:Dl(a.data)})):(p.error("FAIL"),Le("DEPLOY_FAILED",{message:"The deployment API did not return a success result."}))}catch{p.error("FAIL"),Le("DEPLOY_FAILED",{message:"The deployment request failed."})}finally{Ne.value=!1}}},gl=()=>({ingressEnabled:S.value.ingressEnabled,ingressHost:Tl(S.value.ingressHost),ingressPath:S.value.ingressPath,ingressClass:S.value.ingressClass,ingressTlsEnabled:S.value.ingressTlsEnabled,ingressTlsSecret:S.value.ingressTlsSecret===""?null:S.value.ingressTlsSecret}),$l=async()=>{if(pe.value)return;if(C.value){p.error(C.value);return}if(f.value!=="VM"&&f.value!=="K8S"){p.error("Please Select Infra");return}if(!Il())return;const a=Ce;W.value=!0,Se.value=[],Re.value=[],pe.value=!0;try{if(f.value==="K8S"){if(!h.value||!M.value||!z.value){p.error("Please select all items");return}const{data:l}=await bt({namespace:h.value,clusterName:M.value,catalogId:z.value,...gl()});if(a!==Ce)return;if(Re.value=Array.isArray(l==null?void 0:l.warnings)?l.warnings:[],(l==null?void 0:l.valid)!==!0){Se.value=Array.isArray(l==null?void 0:l.errors)&&l.errors.length?l.errors:["Ingress check failed. Resolve the issue and retry Spec Check."];return}}const e=await Bl();if(a!==Ce)return;if(e==null){p.error("Please select all items");return}if(e===!1){const l=f.value==="VM"?"VM":"CLUSTER";if(!confirm("Your selected "+l+" has lower specifications than recommended. Would you like to continue with the installation?"))return}if(a!==Ce)return;p.success("Please click Deploy"),W.value=!1}catch{a===Ce&&(Se.value=["Spec Check could not be completed. Check connectivity and permissions, then retry."])}finally{pe.value=!1}},Bl=async()=>{let a=!1;if(f.value==="VM"){const e=j.value==="NODE_GROUP"?We.value:V.value;if(h.value===""||U.value===""||j.value==="NODE_GROUP"&&O.value===""||e.length===0||z.value===0)return null;{const l=j.value==="NODE_GROUP"?e:[e[0]];a=!0;for(const u of l){const r={namespace:h.value,mciName:U.value,vmName:u,catalogId:z.value},{data:q}=await gt(r);if(!q){a=!1;break}}}}else if(f.value==="K8S"){if(h.value===""||M.value===""||z.value===0)return null;const e={namespace:h.value,clusterName:M.value,catalogId:z.value};await yt(e).then(({data:l})=>{a=l})}return a},Q=I(()=>ye.value.find(a=>a.id===z.value)),ll=I(()=>f.value==="VM"&&j.value==="VM"&&!E.value&&Mt(Q.value));re(ll,a=>{!a&&N.value==="Clustering"&&(N.value="Standalone")},{flush:"sync"});const zl=I(()=>{var e;const a=se.value.find(l=>l.id===M.value||l.name===M.value);return((e=a==null?void 0:a.connectionConfig)==null?void 0:e.providerName)||(a==null?void 0:a.connectionName)||""}),Fl=I(()=>{var l;const a=V.value[0],e=F.value.find(u=>Ue(u)===a);return((l=e==null?void 0:e.connectionConfig)==null?void 0:l.providerName)||(e==null?void 0:e.connectionName)||""}),Ge=I(()=>f.value==="VM"?Fl.value:zl.value),Hl=I(()=>{var a,e;return String(((e=(a=Q.value)==null?void 0:a.helmChart)==null?void 0:e.chartName)||"").toLowerCase()}),ql=["CAPABILITY","TAG"],tl=I(()=>Hl.value==="loki"),K=I(()=>{var e,l;return String(((l=(e=Q.value)==null?void 0:e.packageInfo)==null?void 0:l.packageName)||"").toLowerCase().includes("jupyter")&&rl(Q.value)}),al=I(()=>{var a;return f.value!=="K8S"?!1:K.value?!0:!((a=Q.value)!=null&&a.helmChart)||!tl.value?!1:yl(Q.value,Ao)}),me=I(()=>al.value&&(tl.value||K.value)),Yl=I(()=>al.value&&m.value==="Application Installation"&&(me.value||ae.value.length>0||he.value)),Jl=I(()=>ke.value||ae.value.length<=1),Wl=I(()=>ke.value?"Loading StorageClasses...":he.value?"Failed to load StorageClasses":ae.value.length===0?"No StorageClass found":"Select StorageClass"),De=I(()=>me.value?ke.value?"StorageClass list is loading.":he.value?"StorageClass list could not be loaded.":ae.value.length===0?"This application requires a StorageClass, but none was found.":le.isEmpty(Y.value)?"This application requires a StorageClass.":"":""),Xl=I(()=>nl(Ge.value)?"Optional: https://s3.ap-northeast-2.amazonaws.com":"https://object-storage.example.com"),Zl=I(()=>nl(Ge.value)?"ap-northeast-2":"region from object storage service"),we=I(()=>!Q.value||!rl(Q.value)?!1:f.value==="VM"?!!Q.value.packageInfo&&K.value:f.value==="K8S"?!!Q.value.helmChart||K.value:!1),sl=I(()=>we.value&&n.value.enabled),ol=I(()=>{var a;return!sl.value||((a=R.value)==null?void 0:a.success)===!0}),Ql=I(()=>Ne.value||pe.value||!!C.value||W.value||!ol.value||me.value&&!le.isEmpty(De.value));function Ke(a=Ge.value,e=$e.value){const l=nl(a);return{enabled:!!e,selectedStorageIds:[],accessMode:"READ_ONLY",backendType:"s3",endpoint:"",region:"",bucket:"",prefix:"",accessKey:"",secretKey:"",sessionToken:"",jupyterToken:"",forcePathStyle:!l}}function nl(a){return String(a||"").toLowerCase().includes("aws")}const $e=I(()=>f.value==="K8S"&&tl.value||K.value);function rl(a){return yl(a,wo)}function yl(a,e){return(a.catalogRefs||[]).some(u=>{const r=String(u.refType||"").toUpperCase();return String(u.refValue||"").toLowerCase()===e&&ql.includes(r)})}function ul(){if(f.value==="VM"||K.value){const a=n.value.selectedStorageIds||[];return{enabled:n.value.enabled,jupyterToken:n.value.jupyterToken,storages:a.map(e=>({objectStorageId:e,alias:e,prefix:n.value.prefix,accessMode:n.value.accessMode}))}}return{enabled:n.value.enabled,backendType:n.value.backendType,endpoint:n.value.endpoint,region:n.value.region,bucket:n.value.bucket,prefix:n.value.prefix,accessKey:n.value.accessKey,secretKey:n.value.secretKey,sessionToken:n.value.sessionToken,jupyterToken:n.value.jupyterToken,forcePathStyle:n.value.forcePathStyle,insecure:tt(n.value.endpoint)}}function et(){if(!(!we.value||!n.value.enabled))return{objectStorage:ul()}}function lt(){const a={};return me.value&&!le.isEmpty(Y.value)&&(a.storageClass=Y.value),we.value&&n.value.enabled&&(a.objectStorage=ul()),Object.keys(a).length>0?a:void 0}function Il(){if(!me.value)return!0;const a=De.value;return le.isEmpty(a)?!0:(p.error(a),!1)}function tt(a){return String(a||"").trim().toLowerCase().startsWith("http://")}const at=async(a=!0)=>{if(!sl.value)return!0;Te.value=!0,R.value=null;const e={targetType:f.value,namespace:h.value,clusterName:f.value==="K8S"?M.value:void 0,mciId:f.value==="VM"?U.value:void 0,vmId:f.value==="VM"?V.value[0]:void 0,catalogId:z.value,objectStorage:ul()};try{const{data:l}=await It(e);return R.value=l,l!=null&&l.success?(a&&p.success("Object Storage check succeeded"),!0):(a&&p.error("Object Storage check failed"),!1)}catch{return a&&p.error("Object Storage check failed"),!1}finally{Te.value=!1}},kl=I(()=>f.value==="VM"?ye.value.filter(a=>a.packageInfo):f.value==="K8S"?ye.value.filter(a=>{var e;return a.helmChart||String(((e=a.packageInfo)==null?void 0:e.packageName)||"").toLowerCase().includes("jupyter")&&rl(a)}):ye.value),hl=async()=>{m.value==="Application Installation"&&(W.value=!0);const a=ye.value.find(e=>X.value===e.name);a&&(z.value=a.id,J.value=f.value==="K8S"&&K.value?"8888":a.defaultPort?String(a.defaultPort):"",w.value={hpaEnabled:!!a.hpaEnabled,hpaMinReplicas:a.minReplicas||1,hpaMaxReplicas:a.maxReplicas||10,hpaCpuUtilization:a.cpuThreshold||60,hpaMemoryUtilization:a.memoryThreshold||80},S.value={ingressEnabled:!!a.ingressEnabled,ingressHost:a.ingressHost||"",ingressPath:a.ingressPath||"/",ingressClass:a.ingressClass||"nginx",ingressTlsEnabled:!!a.ingressTlsEnabled,ingressTlsSecret:a.ingressTlsSecret||""},f.value==="K8S"&&K.value&&(S.value.ingressEnabled=!0,w.value.hpaEnabled=!1,w.value.hpaMinReplicas=1),n.value=Ke(),R.value=null),await _e(),await el()},st=async()=>{m.value==="Application Installation"&&(W.value=!0),n.value=Ke(),R.value=null,await el()};return(a,e)=>(o(),s("div",{class:fe(a.embedded?"install-embedded":"modal fade"),id:a.formId,tabindex:a.embedded?void 0:-1},[t("div",{class:fe(["modal-dialog modal-lg",{"install-embedded-dialog":a.embedded}]),role:"document"},[t("div",jt,[t("div",Pt,[t("h5",Ut,v(m.value),1),a.embedded?b("",!0):(o(),s("button",{key:0,type:"button",class:"btn-close","data-bs-dismiss":"modal","aria-label":"Close",onClick:Me}))]),t("div",{class:fe(["modal-body",{"install-embedded-body":a.embedded}]),style:dt(a.embedded?void 0:"max-height: calc(100vh - 200px);overflow-y: auto;")},[He.value?(o(),s("div",Ot,[e[50]||(e[50]=oe(" Deployment targets are scoped to ")),t("strong",null,v(cl.value),1),e[51]||(e[51]=oe(". "))])):b("",!0),C.value?(o(),s("div",_t,v(C.value),1)):b("",!0),E.value?(o(),s("div",Lt,[e[52]||(e[52]=oe(" The deployment target was fixed by the Workload screen: ")),t("strong",null,v(wl.value),1),e[53]||(e[53]=oe(". "))])):b("",!0),t("div",Gt,[e[54]||(e[54]=t("label",{class:"form-label"},"Target Infra",-1)),m.value=="Application Installation"?(o(),s("p",Dt," Select the Infra what is the Infra will be installed ")):m.value=="Application Uninstallation"?(o(),s("p",Kt," Select the Infra what is the Infra will be uninstalled ")):b("",!0),i(t("select",{class:"form-select",id:"infra","onUpdate:modelValue":e[0]||(e[0]=l=>f.value=l),disabled:E.value},[(o(!0),s(T,null,P(qe.value,l=>(o(),s("option",{value:l.value,key:l.value},v(l.value),9,Bt))),128))],8,$t),[[$,f.value]])]),f.value=="VM"?(o(),s(T,{key:3},[t("div",zt,[e[56]||(e[56]=t("label",{class:"form-label"},"Namespace",-1)),m.value=="Application Installation"?(o(),s("p",Ft," Select the namespace where the application will be installed")):m.value=="Application Uninstallation"?(o(),s("p",Ht," Select the namespace where the application will be uninstalled")):b("",!0),ie.value.length>0?i((o(),s("select",{key:2,class:"form-select",id:"vm-namespace","onUpdate:modelValue":e[1]||(e[1]=l=>h.value=l),disabled:dl.value,onChange:xl},[(o(!0),s(T,null,P(ie.value,l=>(o(),s("option",{value:Ee(l),key:Ee(l)},v(l.name||l.id),9,Yt))),128))],40,qt)),[[$,h.value]]):(o(),s("select",Jt,e[55]||(e[55]=[t("option",{value:""}," No namespace available ",-1)])))]),t("div",Wt,[e[57]||(e[57]=t("label",{class:"form-label"},"Infra ID",-1)),m.value=="Application Installation"?(o(),s("p",Xt," Select the infra ID where the application will be deployed")):m.value=="Application Uninstallation"?(o(),s("p",Zt," Remove the application and associated resources from the infra")):b("",!0),i(t("select",{class:"form-select",id:"vm-mci",disabled:h.value==""||E.value,"onUpdate:modelValue":e[2]||(e[2]=l=>U.value=l),onChange:jl},[ne.value.length===0?(o(),s("option",ea,"No infra available")):b("",!0),(o(!0),s(T,null,P(ne.value,l=>(o(),s("option",{value:l.id||l.name,key:l.id||l.name,title:l.id||l.name},v(l.id||l.name),9,la))),128))],40,Qt),[[$,U.value]])]),m.value=="Application Installation"&&!E.value?(o(),s("div",ta,[e[60]||(e[60]=t("label",{class:"form-label"},"Deployment Target",-1)),e[61]||(e[61]=t("p",{class:"text-muted"},"Choose one VM or one CB-Tumblebug NodeGroup.",-1)),t("div",aa,[t("div",sa,[i(t("input",{class:"form-check-input",type:"radio",id:"vm-target-single","onUpdate:modelValue":e[3]||(e[3]=l=>j.value=l),value:"VM"},null,512),[[Be,j.value]]),e[58]||(e[58]=t("label",{class:"form-check-label",for:"vm-target-single"},"VM",-1))]),t("div",oa,[i(t("input",{class:"form-check-input",type:"radio",id:"vm-target-node-group","onUpdate:modelValue":e[4]||(e[4]=l=>j.value=l),value:"NODE_GROUP"},null,512),[[Be,j.value]]),e[59]||(e[59]=t("label",{class:"form-check-label",for:"vm-target-node-group"},"NodeGroup (Standalone)",-1))])])])):b("",!0),j.value==="VM"?(o(),s("div",na,[e[63]||(e[63]=t("label",{class:"form-label"},"VM Name",-1)),e[64]||(e[64]=t("p",{class:"text-muted"}," Select the virtual machine (VM) within the chosen multi-cloud infrastructure where the application will be deployed",-1)),i(t("select",{class:"form-select",id:"vm-name",disabled:U.value==""||E.value,"onUpdate:modelValue":e[5]||(e[5]=l=>D.value=l),onChange:Ul},[e[62]||(e[62]=t("option",{value:""},"Select VM",-1)),(o(!0),s(T,null,P(B.value,l=>(o(),s("option",{value:Ue(l),key:Ue(l)},v(l.name||l.id),9,ua))),128))],40,ra),[[$,D.value]]),V.value.length>0?(o(),s("div",ia,[(o(!0),s(T,null,P(V.value,(l,u)=>(o(),s("label",{key:u,class:"form-check-label",style:{border:"1px solid #000",padding:"5px","border-radius":"5px",cursor:"pointer"}},[oe(v(l)+" ",1),E.value?b("",!0):(o(),s("span",{key:0,onClick:r=>_l(u),style:{"margin-left":"5px","font-weight":"bold"}},"X",8,da))]))),128))])):b("",!0)])):(o(),s("div",ca,[e[67]||(e[67]=t("label",{class:"form-label"},"NodeGroup",-1)),e[68]||(e[68]=t("p",{class:"text-muted"}," Deploy one independent application instance to every currently running VM in the selected NodeGroup. ",-1)),i(t("select",{class:"form-select",id:"vm-node-group",disabled:U.value==""||E.value,"onUpdate:modelValue":e[6]||(e[6]=l=>O.value=l),onChange:Ol},[e[65]||(e[65]=t("option",{value:""},"Select NodeGroup",-1)),(o(!0),s(T,null,P(Je.value,l=>(o(),s("option",{key:l.id,value:l.id,disabled:l.runningVmIds.length===0},v(l.id)+" ("+v(l.runningVmIds.length)+"/"+v(l.totalVmCount)+" running) ",9,pa))),128))],40,va),[[$,O.value]]),O.value&&We.value.length>0?(o(),s("div",ma,[e[66]||(e[66]=t("div",{class:"text-muted small mb-1"},"Deployment targets",-1)),t("div",fa,[(o(!0),s(T,null,P(We.value,l=>(o(),s("span",{key:l,class:"badge bg-light text-dark"},v(l),1))),128))])])):O.value?(o(),s("div",ba," The selected NodeGroup has no running VMs. ")):b("",!0)])),j.value==="VM"?(o(),s("div",ga,[e[71]||(e[71]=t("label",{class:"form-label"},"Deployment Type",-1)),e[72]||(e[72]=t("p",{class:"text-muted"},"Select the deployment type",-1)),t("div",ya,[t("div",Ia,[i(t("input",{class:"form-check-input",type:"radio",id:"Standalone","onUpdate:modelValue":e[7]||(e[7]=l=>N.value=l),value:"Standalone",disabled:E.value},null,8,ka),[[Be,N.value]]),e[69]||(e[69]=t("label",{class:"form-check-label",for:"Standalone"},"Standalone",-1))]),ll.value?(o(),s("div",ha,[i(t("input",{class:"form-check-input",type:"radio",id:"Clustering","onUpdate:modelValue":e[8]||(e[8]=l=>N.value=l),value:"Clustering",disabled:E.value},null,8,Sa),[[Be,N.value]]),e[70]||(e[70]=t("label",{class:"form-check-label",for:"Clustering"},"Clustering",-1))])):b("",!0)]),E.value?b("",!0):(o(),s("div",Ca,"Clustering is available only for Redis and Elasticsearch server catalogs."))])):(o(),s("div",Ea,e[73]||(e[73]=[t("label",{class:"form-label"},"Deployment Type",-1),t("input",{type:"text",class:"form-control",value:"Standalone",disabled:""},null,-1),t("div",{class:"form-text"},"NodeGroup deployment does not use application clustering.",-1)]))),t("div",Va,[e[74]||(e[74]=t("label",{class:"form-label"},"Application",-1)),e[75]||(e[75]=t("p",{class:"text-muted"},"Select the application",-1)),i(t("select",{class:"form-select","onUpdate:modelValue":e[9]||(e[9]=l=>X.value=l),onChange:hl},[(o(!0),s(T,null,P(kl.value,(l,u)=>{var r;return o(),s("option",{key:u,value:l.name}," ["+v(l.name)+"] "+v(((r=l.packageInfo)==null?void 0:r.packageVersion)||"latest"),9,wa)}),128))],544),[[$,X.value]])]),t("div",Aa,[e[76]||(e[76]=t("label",{class:"form-label"},"Port",-1)),e[77]||(e[77]=t("p",{class:"text-muted"},"Docker host port. Security Group access is configured separately below.",-1)),i(t("input",{type:"number",class:"form-control",placeholder:"8080","onUpdate:modelValue":e[10]||(e[10]=l=>J.value=l)},null,512),[[x,J.value]])]),m.value=="Application Installation"?(o(),s("div",Ta,[e[81]||(e[81]=t("label",{class:"form-label"},"Network Exposure",-1)),i(t("select",{class:"form-select","onUpdate:modelValue":e[11]||(e[11]=l=>ve.value=l)},e[78]||(e[78]=[t("option",{value:"PRIVATE"},"Do not change Security Group (recommended)",-1),t("option",{value:"RESTRICTED"},"Add restricted direct access",-1)]),512),[[$,ve.value]]),e[82]||(e[82]=t("p",{class:"text-muted mt-1 mb-0"}," Direct access appends one inbound TCP rule through Tumblebug. It never resaves existing rules. ",-1)),ve.value==="RESTRICTED"?(o(),s("div",Na,[e[79]||(e[79]=t("label",{class:"form-label required"},"Allowed IPv4 CIDR",-1)),i(t("input",{type:"text",class:"form-control",placeholder:"203.0.113.10/32","onUpdate:modelValue":e[12]||(e[12]=l=>H.value=l)},null,512),[[x,H.value,void 0,{trim:!0}]]),e[80]||(e[80]=t("p",{class:"text-warning mt-1 mb-0"}," Public any (0.0.0.0/0) is rejected. Broader rules already present in the Security Group are not removed. ",-1))])):b("",!0)])):b("",!0),m.value=="Application Installation"?(o(),s("div",Ra,[e[84]||(e[84]=t("label",{class:"form-label"},"Resource Type",-1)),i(t("select",{class:"form-select","onUpdate:modelValue":e[13]||(e[13]=l=>ce.value=l)},e[83]||(e[83]=[t("option",{value:"GENERAL_PURPOSE"},"General Purpose",-1),t("option",{value:"CPU_INTENSIVE"},"CPU Intensive",-1),t("option",{value:"MEMORY_INTENSIVE"},"Memory Intensive",-1)]),512),[[$,ce.value]])])):b("",!0),m.value=="Application Installation"&&we.value?(o(),s("div",Ma,[e[92]||(e[92]=t("label",{class:"form-label"},"Object Storage Configuration",-1)),e[93]||(e[93]=t("p",{class:"text-muted"}," Select Object Storage resources already registered in Tumblebug. CSP access keys are not sent to JupyterLab. ",-1)),t("div",xa,[i(t("input",{class:"form-check-input",type:"checkbox",id:"vmObjectStorageEnabled","onUpdate:modelValue":e[14]||(e[14]=l=>n.value.enabled=l),disabled:$e.value},null,8,ja),[[ee,n.value.enabled]]),e[85]||(e[85]=t("label",{class:"form-check-label",for:"vmObjectStorageEnabled"},"Enable Object Storage",-1))]),n.value.enabled?(o(),s("div",Pa,[t("div",Ua,[e[86]||(e[86]=t("label",{class:"form-label mb-0 required"},"Registered Object Storage",-1)),t("button",{type:"button",class:"btn btn-sm btn-outline-secondary",disabled:de.value,onClick:_e}," Refresh ",8,Oa)]),de.value?(o(),s("div",_a,"Loading Object Storage resources...")):Ie.value?(o(),s("div",La," Object Storage resources could not be loaded from Tumblebug. ")):te.value.length===0?(o(),s("div",Ga," No Object Storage resource is registered in this namespace. ")):(o(),s("div",Da,[(o(!0),s(T,null,P(te.value,l=>(o(),s("div",{class:"form-check",key:l.id},[i(t("input",{class:"form-check-input",type:"checkbox",id:`vm-object-storage-${l.id}`,value:l.id,disabled:String(l.status||"").toLowerCase()!=="available","onUpdate:modelValue":e[15]||(e[15]=u=>n.value.selectedStorageIds=u)},null,8,Ka),[[ee,n.value.selectedStorageIds]]),t("label",{class:"form-check-label",for:`vm-object-storage-${l.id}`},[oe(v(l.name||l.id)+" ",1),t("span",Ba," ("+v(l.provider||"unknown CSP")+v(l.region?` / ${l.region}`:"")+" / "+v(l.status||"unknown")+") ",1)],8,$a)]))),128))])),t("div",za,[t("div",Fa,[e[87]||(e[87]=t("label",{class:"form-label"},"Allowed Object Prefix",-1)),i(t("input",{type:"text",class:"form-control",placeholder:"Optional: data/project-a/","onUpdate:modelValue":e[16]||(e[16]=l=>n.value.prefix=l)},null,512),[[x,n.value.prefix,void 0,{trim:!0}]])]),t("div",Ha,[e[89]||(e[89]=t("label",{class:"form-label"},"Access Mode",-1)),i(t("select",{class:"form-select","onUpdate:modelValue":e[17]||(e[17]=l=>n.value.accessMode=l)},e[88]||(e[88]=[t("option",{value:"READ_ONLY"},"Read only",-1),t("option",{value:"READ_WRITE"},"Read and write",-1)]),512),[[$,n.value.accessMode]])])]),t("div",qa,[e[90]||(e[90]=t("label",{class:"form-label required"},"Jupyter Access Token",-1)),i(t("input",{type:"password",class:"form-control",placeholder:"At least 12 characters","onUpdate:modelValue":e[18]||(e[18]=l=>n.value.jupyterToken=l),autocomplete:"new-password"},null,512),[[x,n.value.jupyterToken]]),t("p",Ya," This is the Jupyter login token, not a CSP secret key. Use it at http://:"+v(J.value)+". ",1)]),e[91]||(e[91]=t("p",{class:"text-muted mt-2 mb-0"}," Jupyter requests short-lived presigned URLs through Application Manager. Multiple CSPs can be selected. ",-1)),R.value?(o(),s("div",{key:4,class:fe(["alert mt-3",R.value.success?"alert-success":"alert-danger"])},[t("div",null,v(R.value.success?"Object Storage: SUCCESS":"Object Storage: FAILED"),1),t("ul",Ja,[(o(!0),s(T,null,P(R.value.checks,l=>(o(),s("li",{key:l.name},v(l.name)+" - "+v(l.success?"OK":"FAIL"),1))),128))])],2)):b("",!0)])):b("",!0)])):b("",!0)],64)):f.value=="K8S"?(o(),s(T,{key:4},[t("div",Wa,[e[95]||(e[95]=t("label",{class:"form-label"},"Namespace",-1)),m.value=="Application Installation"?(o(),s("p",Xa,"Select the namespace where the application will be installed")):m.value=="Application Uninstallation"?(o(),s("p",Za,"Select the namespace where the application will be uninstalled")):b("",!0),ie.value.length>0?i((o(),s("select",{key:2,class:"form-select",id:"k8s-namespace","onUpdate:modelValue":e[19]||(e[19]=l=>h.value=l),disabled:dl.value,onChange:Pl},[(o(!0),s(T,null,P(ie.value,l=>(o(),s("option",{value:Ee(l),key:Ee(l)},v(l.name||l.id),9,es))),128))],40,Qa)),[[$,h.value]]):(o(),s("select",ls,e[94]||(e[94]=[t("option",{value:""}," No namespace available ",-1)])))]),t("div",ts,[e[96]||(e[96]=t("label",{class:"form-label"},"ClusterName",-1)),m.value=="Application Installation"?(o(),s("p",as,"Select the name of the cluster where the application will be deployed")):m.value=="Application Uninstallation"?(o(),s("p",ss,"Remove the application and associated resources from the multi-cloud infrastructure")):b("",!0),i(t("select",{class:"form-select",id:"k8s-cluster",disabled:h.value==""||E.value,"onUpdate:modelValue":e[20]||(e[20]=l=>M.value=l),onChange:st},[se.value.length===0?(o(),s("option",ns,"No cluster available")):b("",!0),(o(!0),s(T,null,P(se.value,l=>(o(),s("option",{value:Oe(l),key:Oe(l)},v(l.name||l.id),9,rs))),128))],40,os),[[$,M.value]])]),t("div",us,[e[97]||(e[97]=t("label",{class:"form-label"},"Helm chart",-1)),e[98]||(e[98]=t("p",{class:"text-muted"},"Select the application",-1)),i(t("select",{class:"form-select","onUpdate:modelValue":e[21]||(e[21]=l=>X.value=l),onChange:hl},[(o(!0),s(T,null,P(kl.value,(l,u)=>{var r,q;return o(),s("option",{key:u,value:l.name}," ["+v(l.name)+"] "+v(((r=l.helmChart)==null?void 0:r.chartVersion)||((q=l.packageInfo)==null?void 0:q.packageVersion)||"latest"),9,is)}),128))],544),[[$,X.value]])]),m.value=="Application Installation"?(o(),s("div",ds,[e[99]||(e[99]=t("label",{class:"form-label"},"Port",-1)),e[100]||(e[100]=t("p",{class:"text-muted"},"Please enter a service port for the Kubernetes service",-1)),i(t("input",{type:"number",class:"form-control",placeholder:"80","onUpdate:modelValue":e[22]||(e[22]=l=>J.value=l),disabled:K.value},null,8,cs),[[x,J.value]])])):b("",!0),m.value=="Application Installation"?(o(),s("div",vs,[e[102]||(e[102]=t("label",{class:"form-label"},"Resource Type",-1)),i(t("select",{class:"form-select","onUpdate:modelValue":e[23]||(e[23]=l=>ce.value=l)},e[101]||(e[101]=[t("option",{value:"GENERAL_PURPOSE"},"General Purpose",-1),t("option",{value:"CPU_INTENSIVE"},"CPU Intensive",-1),t("option",{value:"MEMORY_INTENSIVE"},"Memory Intensive",-1)]),512),[[$,ce.value]])])):b("",!0),m.value=="Application Installation"&&Yl.value?(o(),s("div",ps,[t("label",{class:fe(["form-label",{required:me.value}])},"Storage Class",2),i(t("select",{class:"form-select","onUpdate:modelValue":e[24]||(e[24]=l=>Y.value=l),disabled:Jl.value},[t("option",fs,v(Wl.value),1),(o(!0),s(T,null,P(ae.value,l=>(o(),s("option",{key:l.name,value:l.name},v(l.name)+v(l.defaultClass?" (default)":""),9,bs))),128))],8,ms),[[$,Y.value]]),me.value&&De.value?(o(),s("p",gs,v(De.value),1)):b("",!0)])):b("",!0),m.value=="Application Installation"&&S.value.ingressEnabled?(o(),s("div",ys,[e[104]||(e[104]=t("label",{class:"form-label required"},"Allowed IPv4 CIDR",-1)),i(t("input",{class:"form-control",placeholder:"203.0.113.10/32","onUpdate:modelValue":e[25]||(e[25]=l=>H.value=l)},null,512),[[x,H.value,void 0,{trim:!0}]]),t("div",Is,[i(t("input",{class:"form-check-input",type:"checkbox",id:"k8sOpenIngress","onUpdate:modelValue":e[26]||(e[26]=l=>Ye.value=l)},null,512),[[ee,Ye.value]]),e[103]||(e[103]=t("label",{class:"form-check-label",for:"k8sOpenIngress"},"Allow this CIDR on the worker Security Group (TCP 30880)",-1))]),t("p",ks,"Access: http://"+v(S.value.ingressHost||"your-ingress-host")+":30880. For testing, map this hostname to an accessible Kubernetes node public IP in your PC hosts file. With source-IP preservation, use a node running the Ingress Controller.",1)])):b("",!0),m.value=="Application Installation"?(o(),s("div",hs,[e[112]||(e[112]=t("label",{class:"form-label"},"HPA Configuration",-1)),t("div",Ss,[t("div",Cs,[i(t("input",{class:"form-check-input",type:"checkbox",id:"hpaEnabled","onUpdate:modelValue":e[27]||(e[27]=l=>w.value.hpaEnabled=l)},null,512),[[ee,w.value.hpaEnabled]]),e[105]||(e[105]=t("label",{class:"form-check-label",for:"hpaEnabled"}," Enable HPA (Horizontal Pod Autoscaler) ",-1))])]),w.value.hpaEnabled?(o(),s("div",Es,[t("div",null,[e[106]||(e[106]=t("label",{class:"form-label required"}," minReplicas ",-1)),i(t("input",{type:"number",class:"form-control w-90-per",placeholder:"1","onUpdate:modelValue":e[28]||(e[28]=l=>w.value.hpaMinReplicas=l)},null,512),[[x,w.value.hpaMinReplicas]])]),t("div",null,[e[107]||(e[107]=t("label",{class:"form-label required"}," maxReplicas ",-1)),i(t("input",{type:"number",class:"form-control w-90-per",placeholder:"10","onUpdate:modelValue":e[29]||(e[29]=l=>w.value.hpaMaxReplicas=l)},null,512),[[x,w.value.hpaMaxReplicas]])]),t("div",null,[e[108]||(e[108]=t("label",{class:"form-check-label mb-2"}," CPU (%) ",-1)),i(t("input",{type:"number",class:"form-control w-80-per d-inline",placeholder:"60","onUpdate:modelValue":e[30]||(e[30]=l=>w.value.hpaCpuUtilization=l)},null,512),[[x,w.value.hpaCpuUtilization]]),e[109]||(e[109]=oe(" % "))]),t("div",null,[e[110]||(e[110]=t("label",{class:"form-check-label mb-2"}," MEMORY (%) ",-1)),i(t("input",{type:"number",class:"form-control w-80-per d-inline",placeholder:"80","onUpdate:modelValue":e[31]||(e[31]=l=>w.value.hpaMemoryUtilization=l)},null,512),[[x,w.value.hpaMemoryUtilization]]),e[111]||(e[111]=oe(" % "))])])):b("",!0)])):b("",!0),m.value=="Application Installation"?(o(),s("div",Vs,[e[114]||(e[114]=t("label",{class:"form-label"},"Workload Rebalancing",-1)),t("div",ws,[t("div",As,[i(t("input",{class:"form-check-input",type:"checkbox",id:"workloadRebalancingEnabled","onUpdate:modelValue":e[32]||(e[32]=l=>Ae.value=l)},null,512),[[ee,Ae.value]]),e[113]||(e[113]=t("label",{class:"form-check-label",for:"workloadRebalancingEnabled"}," Enable Workload Rebalancing ",-1))])])])):b("",!0),m.value=="Application Installation"?(o(),s("div",Ts,[e[119]||(e[119]=t("label",{class:"form-label"},"Ingress Configuration",-1)),t("div",Ns,[t("div",Rs,[i(t("input",{class:"form-check-input",type:"checkbox",id:"ingressEnabled","onUpdate:modelValue":e[33]||(e[33]=l=>S.value.ingressEnabled=l)},null,512),[[ee,S.value.ingressEnabled]]),e[115]||(e[115]=t("label",{class:"form-check-label",for:"ingressEnabled"}," Enable Ingress ",-1))])]),S.value.ingressEnabled?(o(),s("div",Ms,[t("div",xs,[e[116]||(e[116]=t("label",{class:"form-label"},"Host",-1)),i(t("input",{type:"text",class:"form-control",placeholder:"example.com","onUpdate:modelValue":e[34]||(e[34]=l=>S.value.ingressHost=l)},null,512),[[x,S.value.ingressHost]])]),t("div",js,[e[117]||(e[117]=t("label",{class:"form-label"},"Path",-1)),i(t("input",{type:"text",class:"form-control",placeholder:"/","onUpdate:modelValue":e[35]||(e[35]=l=>S.value.ingressPath=l)},null,512),[[x,S.value.ingressPath]])]),t("div",Ps,[e[118]||(e[118]=t("label",{class:"form-label"},"Ingress Class",-1)),i(t("input",{type:"text",class:"form-control",placeholder:"nginx","onUpdate:modelValue":e[36]||(e[36]=l=>S.value.ingressClass=l),disabled:""},null,512),[[x,S.value.ingressClass]])])])):b("",!0)])):b("",!0),m.value=="Application Installation"&&we.value&&K.value?(o(),s("div",Us,[e[128]||(e[128]=t("label",{class:"form-label"},"Object Storage Configuration",-1)),e[129]||(e[129]=t("p",{class:"text-muted"}," Select Object Storage resources already registered in Tumblebug. CSP access keys are not sent to JupyterLab. ",-1)),t("div",Os,[i(t("input",{class:"form-check-input",type:"checkbox",id:"k8sJupyterObjectStorageEnabled","onUpdate:modelValue":e[37]||(e[37]=l=>n.value.enabled=l),disabled:$e.value},null,8,_s),[[ee,n.value.enabled]]),e[120]||(e[120]=t("label",{class:"form-check-label",for:"k8sJupyterObjectStorageEnabled"},"Enable Object Storage",-1))]),n.value.enabled?(o(),s("div",Ls,[t("div",Gs,[e[121]||(e[121]=t("label",{class:"form-label mb-0 required"},"Registered Object Storage",-1)),t("button",{type:"button",class:"btn btn-sm btn-outline-secondary",disabled:de.value,onClick:_e}," Refresh ",8,Ds)]),de.value?(o(),s("div",Ks,"Loading Object Storage resources...")):Ie.value?(o(),s("div",$s," Object Storage resources could not be loaded from Tumblebug. ")):te.value.length===0?(o(),s("div",Bs," No Object Storage resource is registered in this namespace. ")):(o(),s("div",zs,[(o(!0),s(T,null,P(te.value,l=>(o(),s("div",{class:"form-check",key:l.id},[i(t("input",{class:"form-check-input",type:"checkbox",id:`vm-object-storage-${l.id}`,value:l.id,disabled:String(l.status||"").toLowerCase()!=="available","onUpdate:modelValue":e[38]||(e[38]=u=>n.value.selectedStorageIds=u)},null,8,Fs),[[ee,n.value.selectedStorageIds]]),t("label",{class:"form-check-label",for:`vm-object-storage-${l.id}`},[oe(v(l.name||l.id)+" ",1),t("span",qs," ("+v(l.provider||"unknown CSP")+v(l.region?` / ${l.region}`:"")+" / "+v(l.status||"unknown")+") ",1)],8,Hs)]))),128))])),t("div",Ys,[t("div",Js,[e[122]||(e[122]=t("label",{class:"form-label"},"Allowed Object Prefix",-1)),i(t("input",{type:"text",class:"form-control",placeholder:"Optional: data/project-a/","onUpdate:modelValue":e[39]||(e[39]=l=>n.value.prefix=l)},null,512),[[x,n.value.prefix,void 0,{trim:!0}]])]),t("div",Ws,[e[124]||(e[124]=t("label",{class:"form-label"},"Access Mode",-1)),i(t("select",{class:"form-select","onUpdate:modelValue":e[40]||(e[40]=l=>n.value.accessMode=l)},e[123]||(e[123]=[t("option",{value:"READ_ONLY"},"Read only",-1),t("option",{value:"READ_WRITE"},"Read and write",-1)]),512),[[$,n.value.accessMode]])])]),t("div",Xs,[e[125]||(e[125]=t("label",{class:"form-label required"},"Jupyter Access Token",-1)),i(t("input",{type:"password",class:"form-control",placeholder:"At least 12 characters","onUpdate:modelValue":e[41]||(e[41]=l=>n.value.jupyterToken=l),autocomplete:"new-password"},null,512),[[x,n.value.jupyterToken]]),e[126]||(e[126]=t("p",{class:"text-muted mt-1 mb-0"}," This is the Jupyter login token, not a CSP secret key. Use it at the Ingress URL shown below. ",-1))]),e[127]||(e[127]=t("p",{class:"text-muted mt-2 mb-0"}," Jupyter requests short-lived presigned URLs through Application Manager. Multiple CSPs can be selected. ",-1)),R.value?(o(),s("div",{key:4,class:fe(["alert mt-3",R.value.success?"alert-success":"alert-danger"])},[t("div",null,v(R.value.success?"Object Storage: SUCCESS":"Object Storage: FAILED"),1),t("ul",Zs,[(o(!0),s(T,null,P(R.value.checks,l=>(o(),s("li",{key:l.name},v(l.name)+" - "+v(l.success?"OK":"FAIL"),1))),128))])],2)):b("",!0)])):b("",!0)])):b("",!0),m.value=="Application Installation"&&we.value&&!K.value?(o(),s("div",Qs,[e[139]||(e[139]=t("label",{class:"form-label"},"Object Storage Configuration",-1)),t("div",eo,[t("div",lo,[i(t("input",{class:"form-check-input",type:"checkbox",id:"objectStorageEnabled","onUpdate:modelValue":e[42]||(e[42]=l=>n.value.enabled=l),disabled:$e.value},null,8,to),[[ee,n.value.enabled]]),e[130]||(e[130]=t("label",{class:"form-check-label",for:"objectStorageEnabled"}," Enable Object Storage ",-1))])]),n.value.enabled?(o(),s("div",ao,[t("div",so,[t("div",oo,[e[131]||(e[131]=t("label",{class:"form-label"},"Target CSP",-1)),t("input",{type:"text",class:"form-control",value:Ge.value||"-",disabled:""},null,8,no)]),e[132]||(e[132]=t("div",{class:"w-50 ms-2"},[t("label",{class:"form-label"},"Storage API"),t("input",{type:"text",class:"form-control",value:"S3-compatible",disabled:""})],-1))]),t("div",ro,[e[133]||(e[133]=t("label",{class:"form-label"},"S3-compatible Endpoint",-1)),i(t("input",{type:"text",class:"form-control",placeholder:Xl.value,"onUpdate:modelValue":e[43]||(e[43]=l=>n.value.endpoint=l)},null,8,uo),[[x,n.value.endpoint]])]),t("div",io,[t("div",co,[e[134]||(e[134]=t("label",{class:"form-label"},"Region",-1)),i(t("input",{type:"text",class:"form-control",placeholder:Zl.value,"onUpdate:modelValue":e[44]||(e[44]=l=>n.value.region=l)},null,8,vo),[[x,n.value.region]])]),t("div",po,[e[135]||(e[135]=t("label",{class:"form-label"},"Bucket Name",-1)),i(t("input",{type:"text",class:"form-control",placeholder:"object-storage-bucket","onUpdate:modelValue":e[45]||(e[45]=l=>n.value.bucket=l)},null,512),[[x,n.value.bucket]])])]),t("div",mo,[t("div",fo,[e[136]||(e[136]=t("label",{class:"form-label"},"Access Key ID",-1)),i(t("input",{type:"password",class:"form-control",placeholder:"access key id","onUpdate:modelValue":e[46]||(e[46]=l=>n.value.accessKey=l),autocomplete:"off"},null,512),[[x,n.value.accessKey]])]),t("div",bo,[e[137]||(e[137]=t("label",{class:"form-label"},"Secret Access Key",-1)),i(t("input",{type:"password",class:"form-control",placeholder:"secret access key","onUpdate:modelValue":e[47]||(e[47]=l=>n.value.secretKey=l),autocomplete:"off"},null,512),[[x,n.value.secretKey]])])]),t("div",go,[t("div",yo,[i(t("input",{class:"form-check-input",type:"checkbox",id:"forcePathStyle","onUpdate:modelValue":e[48]||(e[48]=l=>n.value.forcePathStyle=l)},null,512),[[ee,n.value.forcePathStyle]]),e[138]||(e[138]=t("label",{class:"form-check-label",for:"forcePathStyle",title:"On: endpoint/bucket/object. Off: bucket.endpoint/object."},"Use path-style URL",-1))])]),R.value?(o(),s("div",{key:0,class:fe(["alert mt-3",R.value.success?"alert-success":"alert-danger"])},[t("div",null,v(R.value.success?"Object Storage: SUCCESS":"Object Storage: FAILED"),1),t("ul",Io,[(o(!0),s(T,null,P(R.value.checks,l=>(o(),s("li",{key:l.name},v(l.name)+" - "+v(l.success?"OK":"FAIL"),1))),128))])],2)):b("",!0)])):b("",!0)])):b("",!0)],64)):b("",!0)],6),Se.value.length||Re.value.length?(o(),s("div",ko,[(o(!0),s(T,null,P(Se.value,l=>(o(),s("div",{key:l,class:"alert alert-danger",role:"alert"},v(l),1))),128)),(o(!0),s(T,null,P(Re.value,l=>(o(),s("div",{key:l,class:"alert alert-warning"},v(l),1))),128))])):b("",!0),t("div",ho,[t("a",{class:"btn btn-link link-secondary","data-bs-dismiss":a.embedded?void 0:"modal",onClick:Ll}," Cancel ",8,So),t("div",null,[m.value=="Application Installation"&&sl.value?(o(),s("button",{key:0,class:"btn btn-outline-danger ms-auto me-1",onClick:e[49]||(e[49]=l=>at()),disabled:Te.value||ol.value,title:"Writes, reads, and deletes a temporary object in the selected bucket."},v(Te.value?"Checking...":"Storage Check"),9,Co)):b("",!0),m.value=="Application Installation"?(o(),s("button",{key:1,class:"btn btn-danger ms-auto me-1",onClick:$l,disabled:pe.value||!W.value||!!C.value},v(pe.value?"Checking...":"Spec Check"),9,Eo)):b("",!0),t("button",{class:"btn btn-primary ms-auto","data-bs-dismiss":a.embedded?void 0:"modal",onClick:Kl,disabled:Ql.value},v(Ne.value?"Deploying…":"Deploy"),9,Vo)])])])],2)],10,xt))}}),Uo=kt(To,[["__scopeId","data-v-1b4eb260"]]);export{Uo as A,Po as p}; diff --git a/src/main/resources/static/assets/applicationInstallationForm-F2A4Doyb.css b/src/main/resources/static/assets/applicationInstallationForm-F2A4Doyb.css new file mode 100644 index 00000000..fb6d4fc7 --- /dev/null +++ b/src/main/resources/static/assets/applicationInstallationForm-F2A4Doyb.css @@ -0,0 +1 @@ +.install-embedded[data-v-3cfc7d74]{width:100%}.install-embedded-dialog[data-v-3cfc7d74]{width:100%;max-width:960px;margin:0 auto}.install-embedded-body[data-v-3cfc7d74]{overflow-y:visible}.w-80-per[data-v-3cfc7d74]{width:80%!important}.w-90-per[data-v-3cfc7d74]{width:90%!important} diff --git a/src/main/resources/static/assets/bootstrap.esm-Ceob_0pG.js b/src/main/resources/static/assets/bootstrap.esm-Ceob_0pG.js new file mode 100644 index 00000000..82c3fb8e --- /dev/null +++ b/src/main/resources/static/assets/bootstrap.esm-Ceob_0pG.js @@ -0,0 +1,5 @@ +var L="top",x="bottom",R="right",I="left",fe="auto",It=[L,x,R,I],pt="start",Ot="end",ss="clippingParents",ze="viewport",At="popper",is="reference",We=It.reduce(function(n,t){return n.concat([t+"-"+pt,t+"-"+Ot])},[]),Ge=[].concat(It,[fe]).reduce(function(n,t){return n.concat([t,t+"-"+pt,t+"-"+Ot])},[]),rs="beforeRead",os="read",as="afterRead",cs="beforeMain",ls="main",us="afterMain",hs="beforeWrite",ds="write",fs="afterWrite",ps=[rs,os,as,cs,ls,us,hs,ds,fs];function z(n){return n?(n.nodeName||"").toLowerCase():null}function k(n){if(n==null)return window;if(n.toString()!=="[object Window]"){var t=n.ownerDocument;return t&&t.defaultView||window}return n}function _t(n){var t=k(n).Element;return n instanceof t||n instanceof Element}function V(n){var t=k(n).HTMLElement;return n instanceof t||n instanceof HTMLElement}function qe(n){if(typeof ShadowRoot>"u")return!1;var t=k(n).ShadowRoot;return n instanceof t||n instanceof ShadowRoot}function li(n){var t=n.state;Object.keys(t.elements).forEach(function(e){var s=t.styles[e]||{},i=t.attributes[e]||{},r=t.elements[e];!V(r)||!z(r)||(Object.assign(r.style,s),Object.keys(i).forEach(function(o){var a=i[o];a===!1?r.removeAttribute(o):r.setAttribute(o,a===!0?"":a)}))})}function ui(n){var t=n.state,e={popper:{position:t.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(t.elements.popper.style,e.popper),t.styles=e,t.elements.arrow&&Object.assign(t.elements.arrow.style,e.arrow),function(){Object.keys(t.elements).forEach(function(s){var i=t.elements[s],r=t.attributes[s]||{},o=Object.keys(t.styles.hasOwnProperty(s)?t.styles[s]:e[s]),a=o.reduce(function(l,h){return l[h]="",l},{});!V(i)||!z(i)||(Object.assign(i.style,a),Object.keys(r).forEach(function(l){i.removeAttribute(l)}))})}}const Xe={name:"applyStyles",enabled:!0,phase:"write",fn:li,effect:ui,requires:["computeStyles"]};function Y(n){return n.split("-")[0]}var ft=Math.max,le=Math.min,Ct=Math.round;function Be(){var n=navigator.userAgentData;return n!=null&&n.brands&&Array.isArray(n.brands)?n.brands.map(function(t){return t.brand+"/"+t.version}).join(" "):navigator.userAgent}function _s(){return!/^((?!chrome|android).)*safari/i.test(Be())}function Nt(n,t,e){t===void 0&&(t=!1),e===void 0&&(e=!1);var s=n.getBoundingClientRect(),i=1,r=1;t&&V(n)&&(i=n.offsetWidth>0&&Ct(s.width)/n.offsetWidth||1,r=n.offsetHeight>0&&Ct(s.height)/n.offsetHeight||1);var o=_t(n)?k(n):window,a=o.visualViewport,l=!_s()&&e,h=(s.left+(l&&a?a.offsetLeft:0))/i,u=(s.top+(l&&a?a.offsetTop:0))/r,p=s.width/i,_=s.height/r;return{width:p,height:_,top:u,right:h+p,bottom:u+_,left:h,x:h,y:u}}function Qe(n){var t=Nt(n),e=n.offsetWidth,s=n.offsetHeight;return Math.abs(t.width-e)<=1&&(e=t.width),Math.abs(t.height-s)<=1&&(s=t.height),{x:n.offsetLeft,y:n.offsetTop,width:e,height:s}}function ms(n,t){var e=t.getRootNode&&t.getRootNode();if(n.contains(t))return!0;if(e&&qe(e)){var s=t;do{if(s&&n.isSameNode(s))return!0;s=s.parentNode||s.host}while(s)}return!1}function X(n){return k(n).getComputedStyle(n)}function hi(n){return["table","td","th"].indexOf(z(n))>=0}function st(n){return((_t(n)?n.ownerDocument:n.document)||window.document).documentElement}function pe(n){return z(n)==="html"?n:n.assignedSlot||n.parentNode||(qe(n)?n.host:null)||st(n)}function An(n){return!V(n)||X(n).position==="fixed"?null:n.offsetParent}function di(n){var t=/firefox/i.test(Be()),e=/Trident/i.test(Be());if(e&&V(n)){var s=X(n);if(s.position==="fixed")return null}var i=pe(n);for(qe(i)&&(i=i.host);V(i)&&["html","body"].indexOf(z(i))<0;){var r=X(i);if(r.transform!=="none"||r.perspective!=="none"||r.contain==="paint"||["transform","perspective"].indexOf(r.willChange)!==-1||t&&r.willChange==="filter"||t&&r.filter&&r.filter!=="none")return i;i=i.parentNode}return null}function Ft(n){for(var t=k(n),e=An(n);e&&hi(e)&&X(e).position==="static";)e=An(e);return e&&(z(e)==="html"||z(e)==="body"&&X(e).position==="static")?t:e||di(n)||t}function Ze(n){return["top","bottom"].indexOf(n)>=0?"x":"y"}function Wt(n,t,e){return ft(n,le(t,e))}function fi(n,t,e){var s=Wt(n,t,e);return s>e?e:s}function gs(){return{top:0,right:0,bottom:0,left:0}}function Es(n){return Object.assign({},gs(),n)}function vs(n,t){return t.reduce(function(e,s){return e[s]=n,e},{})}var pi=function(t,e){return t=typeof t=="function"?t(Object.assign({},e.rects,{placement:e.placement})):t,Es(typeof t!="number"?t:vs(t,It))};function _i(n){var t,e=n.state,s=n.name,i=n.options,r=e.elements.arrow,o=e.modifiersData.popperOffsets,a=Y(e.placement),l=Ze(a),h=[I,R].indexOf(a)>=0,u=h?"height":"width";if(!(!r||!o)){var p=pi(i.padding,e),_=Qe(r),f=l==="y"?L:I,A=l==="y"?x:R,m=e.rects.reference[u]+e.rects.reference[l]-o[l]-e.rects.popper[u],E=o[l]-e.rects.reference[l],T=Ft(r),w=T?l==="y"?T.clientHeight||0:T.clientWidth||0:0,O=m/2-E/2,g=p[f],v=w-_[u]-p[A],b=w/2-_[u]/2+O,y=Wt(g,b,v),S=l;e.modifiersData[s]=(t={},t[S]=y,t.centerOffset=y-b,t)}}function mi(n){var t=n.state,e=n.options,s=e.element,i=s===void 0?"[data-popper-arrow]":s;i!=null&&(typeof i=="string"&&(i=t.elements.popper.querySelector(i),!i)||ms(t.elements.popper,i)&&(t.elements.arrow=i))}const bs={name:"arrow",enabled:!0,phase:"main",fn:_i,effect:mi,requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function St(n){return n.split("-")[1]}var gi={top:"auto",right:"auto",bottom:"auto",left:"auto"};function Ei(n,t){var e=n.x,s=n.y,i=t.devicePixelRatio||1;return{x:Ct(e*i)/i||0,y:Ct(s*i)/i||0}}function Tn(n){var t,e=n.popper,s=n.popperRect,i=n.placement,r=n.variation,o=n.offsets,a=n.position,l=n.gpuAcceleration,h=n.adaptive,u=n.roundOffsets,p=n.isFixed,_=o.x,f=_===void 0?0:_,A=o.y,m=A===void 0?0:A,E=typeof u=="function"?u({x:f,y:m}):{x:f,y:m};f=E.x,m=E.y;var T=o.hasOwnProperty("x"),w=o.hasOwnProperty("y"),O=I,g=L,v=window;if(h){var b=Ft(e),y="clientHeight",S="clientWidth";if(b===k(e)&&(b=st(e),X(b).position!=="static"&&a==="absolute"&&(y="scrollHeight",S="scrollWidth")),b=b,i===L||(i===I||i===R)&&r===Ot){g=x;var N=p&&b===v&&v.visualViewport?v.visualViewport.height:b[y];m-=N-s.height,m*=l?1:-1}if(i===I||(i===L||i===x)&&r===Ot){O=R;var C=p&&b===v&&v.visualViewport?v.visualViewport.width:b[S];f-=C-s.width,f*=l?1:-1}}var D=Object.assign({position:a},h&&gi),j=u===!0?Ei({x:f,y:m},k(e)):{x:f,y:m};if(f=j.x,m=j.y,l){var $;return Object.assign({},D,($={},$[g]=w?"0":"",$[O]=T?"0":"",$.transform=(v.devicePixelRatio||1)<=1?"translate("+f+"px, "+m+"px)":"translate3d("+f+"px, "+m+"px, 0)",$))}return Object.assign({},D,(t={},t[g]=w?m+"px":"",t[O]=T?f+"px":"",t.transform="",t))}function vi(n){var t=n.state,e=n.options,s=e.gpuAcceleration,i=s===void 0?!0:s,r=e.adaptive,o=r===void 0?!0:r,a=e.roundOffsets,l=a===void 0?!0:a,h={placement:Y(t.placement),variation:St(t.placement),popper:t.elements.popper,popperRect:t.rects.popper,gpuAcceleration:i,isFixed:t.options.strategy==="fixed"};t.modifiersData.popperOffsets!=null&&(t.styles.popper=Object.assign({},t.styles.popper,Tn(Object.assign({},h,{offsets:t.modifiersData.popperOffsets,position:t.options.strategy,adaptive:o,roundOffsets:l})))),t.modifiersData.arrow!=null&&(t.styles.arrow=Object.assign({},t.styles.arrow,Tn(Object.assign({},h,{offsets:t.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:l})))),t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-placement":t.placement})}const Je={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:vi,data:{}};var Jt={passive:!0};function bi(n){var t=n.state,e=n.instance,s=n.options,i=s.scroll,r=i===void 0?!0:i,o=s.resize,a=o===void 0?!0:o,l=k(t.elements.popper),h=[].concat(t.scrollParents.reference,t.scrollParents.popper);return r&&h.forEach(function(u){u.addEventListener("scroll",e.update,Jt)}),a&&l.addEventListener("resize",e.update,Jt),function(){r&&h.forEach(function(u){u.removeEventListener("scroll",e.update,Jt)}),a&&l.removeEventListener("resize",e.update,Jt)}}const tn={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:bi,data:{}};var Ai={left:"right",right:"left",bottom:"top",top:"bottom"};function oe(n){return n.replace(/left|right|bottom|top/g,function(t){return Ai[t]})}var Ti={start:"end",end:"start"};function yn(n){return n.replace(/start|end/g,function(t){return Ti[t]})}function en(n){var t=k(n),e=t.pageXOffset,s=t.pageYOffset;return{scrollLeft:e,scrollTop:s}}function nn(n){return Nt(st(n)).left+en(n).scrollLeft}function yi(n,t){var e=k(n),s=st(n),i=e.visualViewport,r=s.clientWidth,o=s.clientHeight,a=0,l=0;if(i){r=i.width,o=i.height;var h=_s();(h||!h&&t==="fixed")&&(a=i.offsetLeft,l=i.offsetTop)}return{width:r,height:o,x:a+nn(n),y:l}}function wi(n){var t,e=st(n),s=en(n),i=(t=n.ownerDocument)==null?void 0:t.body,r=ft(e.scrollWidth,e.clientWidth,i?i.scrollWidth:0,i?i.clientWidth:0),o=ft(e.scrollHeight,e.clientHeight,i?i.scrollHeight:0,i?i.clientHeight:0),a=-s.scrollLeft+nn(n),l=-s.scrollTop;return X(i||e).direction==="rtl"&&(a+=ft(e.clientWidth,i?i.clientWidth:0)-r),{width:r,height:o,x:a,y:l}}function sn(n){var t=X(n),e=t.overflow,s=t.overflowX,i=t.overflowY;return/auto|scroll|overlay|hidden/.test(e+i+s)}function As(n){return["html","body","#document"].indexOf(z(n))>=0?n.ownerDocument.body:V(n)&&sn(n)?n:As(pe(n))}function Bt(n,t){var e;t===void 0&&(t=[]);var s=As(n),i=s===((e=n.ownerDocument)==null?void 0:e.body),r=k(s),o=i?[r].concat(r.visualViewport||[],sn(s)?s:[]):s,a=t.concat(o);return i?a:a.concat(Bt(pe(o)))}function je(n){return Object.assign({},n,{left:n.x,top:n.y,right:n.x+n.width,bottom:n.y+n.height})}function Oi(n,t){var e=Nt(n,!1,t==="fixed");return e.top=e.top+n.clientTop,e.left=e.left+n.clientLeft,e.bottom=e.top+n.clientHeight,e.right=e.left+n.clientWidth,e.width=n.clientWidth,e.height=n.clientHeight,e.x=e.left,e.y=e.top,e}function wn(n,t,e){return t===ze?je(yi(n,e)):_t(t)?Oi(t,e):je(wi(st(n)))}function Ci(n){var t=Bt(pe(n)),e=["absolute","fixed"].indexOf(X(n).position)>=0,s=e&&V(n)?Ft(n):n;return _t(s)?t.filter(function(i){return _t(i)&&ms(i,s)&&z(i)!=="body"}):[]}function Ni(n,t,e,s){var i=t==="clippingParents"?Ci(n):[].concat(t),r=[].concat(i,[e]),o=r[0],a=r.reduce(function(l,h){var u=wn(n,h,s);return l.top=ft(u.top,l.top),l.right=le(u.right,l.right),l.bottom=le(u.bottom,l.bottom),l.left=ft(u.left,l.left),l},wn(n,o,s));return a.width=a.right-a.left,a.height=a.bottom-a.top,a.x=a.left,a.y=a.top,a}function Ts(n){var t=n.reference,e=n.element,s=n.placement,i=s?Y(s):null,r=s?St(s):null,o=t.x+t.width/2-e.width/2,a=t.y+t.height/2-e.height/2,l;switch(i){case L:l={x:o,y:t.y-e.height};break;case x:l={x:o,y:t.y+t.height};break;case R:l={x:t.x+t.width,y:a};break;case I:l={x:t.x-e.width,y:a};break;default:l={x:t.x,y:t.y}}var h=i?Ze(i):null;if(h!=null){var u=h==="y"?"height":"width";switch(r){case pt:l[h]=l[h]-(t[u]/2-e[u]/2);break;case Ot:l[h]=l[h]+(t[u]/2-e[u]/2);break}}return l}function Dt(n,t){t===void 0&&(t={});var e=t,s=e.placement,i=s===void 0?n.placement:s,r=e.strategy,o=r===void 0?n.strategy:r,a=e.boundary,l=a===void 0?ss:a,h=e.rootBoundary,u=h===void 0?ze:h,p=e.elementContext,_=p===void 0?At:p,f=e.altBoundary,A=f===void 0?!1:f,m=e.padding,E=m===void 0?0:m,T=Es(typeof E!="number"?E:vs(E,It)),w=_===At?is:At,O=n.rects.popper,g=n.elements[A?w:_],v=Ni(_t(g)?g:g.contextElement||st(n.elements.popper),l,u,o),b=Nt(n.elements.reference),y=Ts({reference:b,element:O,strategy:"absolute",placement:i}),S=je(Object.assign({},O,y)),N=_===At?S:b,C={top:v.top-N.top+T.top,bottom:N.bottom-v.bottom+T.bottom,left:v.left-N.left+T.left,right:N.right-v.right+T.right},D=n.modifiersData.offset;if(_===At&&D){var j=D[i];Object.keys(C).forEach(function($){var ot=[R,x].indexOf($)>=0?1:-1,at=[L,x].indexOf($)>=0?"y":"x";C[$]+=j[at]*ot})}return C}function Si(n,t){t===void 0&&(t={});var e=t,s=e.placement,i=e.boundary,r=e.rootBoundary,o=e.padding,a=e.flipVariations,l=e.allowedAutoPlacements,h=l===void 0?Ge:l,u=St(s),p=u?a?We:We.filter(function(A){return St(A)===u}):It,_=p.filter(function(A){return h.indexOf(A)>=0});_.length===0&&(_=p);var f=_.reduce(function(A,m){return A[m]=Dt(n,{placement:m,boundary:i,rootBoundary:r,padding:o})[Y(m)],A},{});return Object.keys(f).sort(function(A,m){return f[A]-f[m]})}function Di(n){if(Y(n)===fe)return[];var t=oe(n);return[yn(n),t,yn(t)]}function $i(n){var t=n.state,e=n.options,s=n.name;if(!t.modifiersData[s]._skip){for(var i=e.mainAxis,r=i===void 0?!0:i,o=e.altAxis,a=o===void 0?!0:o,l=e.fallbackPlacements,h=e.padding,u=e.boundary,p=e.rootBoundary,_=e.altBoundary,f=e.flipVariations,A=f===void 0?!0:f,m=e.allowedAutoPlacements,E=t.options.placement,T=Y(E),w=T===E,O=l||(w||!A?[oe(E)]:Di(E)),g=[E].concat(O).reduce(function(Et,Z){return Et.concat(Y(Z)===fe?Si(t,{placement:Z,boundary:u,rootBoundary:p,padding:h,flipVariations:A,allowedAutoPlacements:m}):Z)},[]),v=t.rects.reference,b=t.rects.popper,y=new Map,S=!0,N=g[0],C=0;C=0,at=ot?"width":"height",M=Dt(t,{placement:D,boundary:u,rootBoundary:p,altBoundary:_,padding:h}),F=ot?$?R:I:$?x:L;v[at]>b[at]&&(F=oe(F));var Gt=oe(F),ct=[];if(r&&ct.push(M[j]<=0),a&&ct.push(M[F]<=0,M[Gt]<=0),ct.every(function(Et){return Et})){N=D,S=!1;break}y.set(D,ct)}if(S)for(var qt=A?3:1,Ae=function(Z){var kt=g.find(function(Qt){var lt=y.get(Qt);if(lt)return lt.slice(0,Z).every(function(Te){return Te})});if(kt)return N=kt,"break"},Rt=qt;Rt>0;Rt--){var Xt=Ae(Rt);if(Xt==="break")break}t.placement!==N&&(t.modifiersData[s]._skip=!0,t.placement=N,t.reset=!0)}}const ys={name:"flip",enabled:!0,phase:"main",fn:$i,requiresIfExists:["offset"],data:{_skip:!1}};function On(n,t,e){return e===void 0&&(e={x:0,y:0}),{top:n.top-t.height-e.y,right:n.right-t.width+e.x,bottom:n.bottom-t.height+e.y,left:n.left-t.width-e.x}}function Cn(n){return[L,R,x,I].some(function(t){return n[t]>=0})}function Li(n){var t=n.state,e=n.name,s=t.rects.reference,i=t.rects.popper,r=t.modifiersData.preventOverflow,o=Dt(t,{elementContext:"reference"}),a=Dt(t,{altBoundary:!0}),l=On(o,s),h=On(a,i,r),u=Cn(l),p=Cn(h);t.modifiersData[e]={referenceClippingOffsets:l,popperEscapeOffsets:h,isReferenceHidden:u,hasPopperEscaped:p},t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-reference-hidden":u,"data-popper-escaped":p})}const ws={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:Li};function Ii(n,t,e){var s=Y(n),i=[I,L].indexOf(s)>=0?-1:1,r=typeof e=="function"?e(Object.assign({},t,{placement:n})):e,o=r[0],a=r[1];return o=o||0,a=(a||0)*i,[I,R].indexOf(s)>=0?{x:a,y:o}:{x:o,y:a}}function Pi(n){var t=n.state,e=n.options,s=n.name,i=e.offset,r=i===void 0?[0,0]:i,o=Ge.reduce(function(u,p){return u[p]=Ii(p,t.rects,r),u},{}),a=o[t.placement],l=a.x,h=a.y;t.modifiersData.popperOffsets!=null&&(t.modifiersData.popperOffsets.x+=l,t.modifiersData.popperOffsets.y+=h),t.modifiersData[s]=o}const Os={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:Pi};function Mi(n){var t=n.state,e=n.name;t.modifiersData[e]=Ts({reference:t.rects.reference,element:t.rects.popper,strategy:"absolute",placement:t.placement})}const rn={name:"popperOffsets",enabled:!0,phase:"read",fn:Mi,data:{}};function xi(n){return n==="x"?"y":"x"}function Ri(n){var t=n.state,e=n.options,s=n.name,i=e.mainAxis,r=i===void 0?!0:i,o=e.altAxis,a=o===void 0?!1:o,l=e.boundary,h=e.rootBoundary,u=e.altBoundary,p=e.padding,_=e.tether,f=_===void 0?!0:_,A=e.tetherOffset,m=A===void 0?0:A,E=Dt(t,{boundary:l,rootBoundary:h,padding:p,altBoundary:u}),T=Y(t.placement),w=St(t.placement),O=!w,g=Ze(T),v=xi(g),b=t.modifiersData.popperOffsets,y=t.rects.reference,S=t.rects.popper,N=typeof m=="function"?m(Object.assign({},t.rects,{placement:t.placement})):m,C=typeof N=="number"?{mainAxis:N,altAxis:N}:Object.assign({mainAxis:0,altAxis:0},N),D=t.modifiersData.offset?t.modifiersData.offset[t.placement]:null,j={x:0,y:0};if(b){if(r){var $,ot=g==="y"?L:I,at=g==="y"?x:R,M=g==="y"?"height":"width",F=b[g],Gt=F+E[ot],ct=F-E[at],qt=f?-S[M]/2:0,Ae=w===pt?y[M]:S[M],Rt=w===pt?-S[M]:-y[M],Xt=t.elements.arrow,Et=f&&Xt?Qe(Xt):{width:0,height:0},Z=t.modifiersData["arrow#persistent"]?t.modifiersData["arrow#persistent"].padding:gs(),kt=Z[ot],Qt=Z[at],lt=Wt(0,y[M],Et[M]),Te=O?y[M]/2-qt-lt-kt-C.mainAxis:Ae-lt-kt-C.mainAxis,si=O?-y[M]/2+qt+lt+Qt+C.mainAxis:Rt+lt+Qt+C.mainAxis,ye=t.elements.arrow&&Ft(t.elements.arrow),ii=ye?g==="y"?ye.clientTop||0:ye.clientLeft||0:0,dn=($=D==null?void 0:D[g])!=null?$:0,ri=F+Te-dn-ii,oi=F+si-dn,fn=Wt(f?le(Gt,ri):Gt,F,f?ft(ct,oi):ct);b[g]=fn,j[g]=fn-F}if(a){var pn,ai=g==="x"?L:I,ci=g==="x"?x:R,ut=b[v],Zt=v==="y"?"height":"width",_n=ut+E[ai],mn=ut-E[ci],we=[L,I].indexOf(T)!==-1,gn=(pn=D==null?void 0:D[v])!=null?pn:0,En=we?_n:ut-y[Zt]-S[Zt]-gn+C.altAxis,vn=we?ut+y[Zt]+S[Zt]-gn-C.altAxis:mn,bn=f&&we?fi(En,ut,vn):Wt(f?En:_n,ut,f?vn:mn);b[v]=bn,j[v]=bn-ut}t.modifiersData[s]=j}}const Cs={name:"preventOverflow",enabled:!0,phase:"main",fn:Ri,requiresIfExists:["offset"]};function ki(n){return{scrollLeft:n.scrollLeft,scrollTop:n.scrollTop}}function Vi(n){return n===k(n)||!V(n)?en(n):ki(n)}function Hi(n){var t=n.getBoundingClientRect(),e=Ct(t.width)/n.offsetWidth||1,s=Ct(t.height)/n.offsetHeight||1;return e!==1||s!==1}function Wi(n,t,e){e===void 0&&(e=!1);var s=V(t),i=V(t)&&Hi(t),r=st(t),o=Nt(n,i,e),a={scrollLeft:0,scrollTop:0},l={x:0,y:0};return(s||!s&&!e)&&((z(t)!=="body"||sn(r))&&(a=Vi(t)),V(t)?(l=Nt(t,!0),l.x+=t.clientLeft,l.y+=t.clientTop):r&&(l.x=nn(r))),{x:o.left+a.scrollLeft-l.x,y:o.top+a.scrollTop-l.y,width:o.width,height:o.height}}function Bi(n){var t=new Map,e=new Set,s=[];n.forEach(function(r){t.set(r.name,r)});function i(r){e.add(r.name);var o=[].concat(r.requires||[],r.requiresIfExists||[]);o.forEach(function(a){if(!e.has(a)){var l=t.get(a);l&&i(l)}}),s.push(r)}return n.forEach(function(r){e.has(r.name)||i(r)}),s}function ji(n){var t=Bi(n);return ps.reduce(function(e,s){return e.concat(t.filter(function(i){return i.phase===s}))},[])}function Fi(n){var t;return function(){return t||(t=new Promise(function(e){Promise.resolve().then(function(){t=void 0,e(n())})})),t}}function Ki(n){var t=n.reduce(function(e,s){var i=e[s.name];return e[s.name]=i?Object.assign({},i,s,{options:Object.assign({},i.options,s.options),data:Object.assign({},i.data,s.data)}):s,e},{});return Object.keys(t).map(function(e){return t[e]})}var Nn={placement:"bottom",modifiers:[],strategy:"absolute"};function Sn(){for(var n=arguments.length,t=new Array(n),e=0;e(n&&window.CSS&&window.CSS.escape&&(n=n.replace(/#([^\s"#']+)/g,(t,e)=>`#${CSS.escape(e)}`)),n),Qi=n=>n==null?`${n}`:Object.prototype.toString.call(n).match(/\s([a-z]+)/i)[1].toLowerCase(),Zi=n=>{do n+=Math.floor(Math.random()*qi);while(document.getElementById(n));return n},Ji=n=>{if(!n)return 0;let{transitionDuration:t,transitionDelay:e}=window.getComputedStyle(n);const s=Number.parseFloat(t),i=Number.parseFloat(e);return!s&&!i?0:(t=t.split(",")[0],e=e.split(",")[0],(Number.parseFloat(t)+Number.parseFloat(e))*Xi)},Ds=n=>{n.dispatchEvent(new Event(Fe))},G=n=>!n||typeof n!="object"?!1:(typeof n.jquery<"u"&&(n=n[0]),typeof n.nodeType<"u"),tt=n=>G(n)?n.jquery?n[0]:n:typeof n=="string"&&n.length>0?document.querySelector(Ss(n)):null,Pt=n=>{if(!G(n)||n.getClientRects().length===0)return!1;const t=getComputedStyle(n).getPropertyValue("visibility")==="visible",e=n.closest("details:not([open])");if(!e)return t;if(e!==n){const s=n.closest("summary");if(s&&s.parentNode!==e||s===null)return!1}return t},et=n=>!n||n.nodeType!==Node.ELEMENT_NODE||n.classList.contains("disabled")?!0:typeof n.disabled<"u"?n.disabled:n.hasAttribute("disabled")&&n.getAttribute("disabled")!=="false",$s=n=>{if(!document.documentElement.attachShadow)return null;if(typeof n.getRootNode=="function"){const t=n.getRootNode();return t instanceof ShadowRoot?t:null}return n instanceof ShadowRoot?n:n.parentNode?$s(n.parentNode):null},ue=()=>{},Kt=n=>{n.offsetHeight},Ls=()=>window.jQuery&&!document.body.hasAttribute("data-bs-no-jquery")?window.jQuery:null,Ce=[],tr=n=>{document.readyState==="loading"?(Ce.length||document.addEventListener("DOMContentLoaded",()=>{for(const t of Ce)t()}),Ce.push(n)):n()},H=()=>document.documentElement.dir==="rtl",B=n=>{tr(()=>{const t=Ls();if(t){const e=n.NAME,s=t.fn[e];t.fn[e]=n.jQueryInterface,t.fn[e].Constructor=n,t.fn[e].noConflict=()=>(t.fn[e]=s,n.jQueryInterface)}})},P=(n,t=[],e=n)=>typeof n=="function"?n(...t):e,Is=(n,t,e=!0)=>{if(!e){P(n);return}const i=Ji(t)+5;let r=!1;const o=({target:a})=>{a===t&&(r=!0,t.removeEventListener(Fe,o),P(n))};t.addEventListener(Fe,o),setTimeout(()=>{r||Ds(t)},i)},an=(n,t,e,s)=>{const i=n.length;let r=n.indexOf(t);return r===-1?!e&&s?n[i-1]:n[0]:(r+=e?1:-1,s&&(r=(r+i)%i),n[Math.max(0,Math.min(r,i-1))])},er=/[^.]*(?=\..*)\.|.*/,nr=/\..*/,sr=/::\d+$/,Ne={};let Dn=1;const Ps={mouseenter:"mouseover",mouseleave:"mouseout"},ir=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function Ms(n,t){return t&&`${t}::${Dn++}`||n.uidEvent||Dn++}function xs(n){const t=Ms(n);return n.uidEvent=t,Ne[t]=Ne[t]||{},Ne[t]}function rr(n,t){return function e(s){return cn(s,{delegateTarget:n}),e.oneOff&&c.off(n,s.type,t),t.apply(n,[s])}}function or(n,t,e){return function s(i){const r=n.querySelectorAll(t);for(let{target:o}=i;o&&o!==this;o=o.parentNode)for(const a of r)if(a===o)return cn(i,{delegateTarget:o}),s.oneOff&&c.off(n,i.type,t,e),e.apply(o,[i])}}function Rs(n,t,e=null){return Object.values(n).find(s=>s.callable===t&&s.delegationSelector===e)}function ks(n,t,e){const s=typeof t=="string",i=s?e:t||e;let r=Vs(n);return ir.has(r)||(r=n),[s,i,r]}function $n(n,t,e,s,i){if(typeof t!="string"||!n)return;let[r,o,a]=ks(t,e,s);t in Ps&&(o=(A=>function(m){if(!m.relatedTarget||m.relatedTarget!==m.delegateTarget&&!m.delegateTarget.contains(m.relatedTarget))return A.call(this,m)})(o));const l=xs(n),h=l[a]||(l[a]={}),u=Rs(h,o,r?e:null);if(u){u.oneOff=u.oneOff&&i;return}const p=Ms(o,t.replace(er,"")),_=r?or(n,e,o):rr(n,o);_.delegationSelector=r?e:null,_.callable=o,_.oneOff=i,_.uidEvent=p,h[p]=_,n.addEventListener(a,_,r)}function Ke(n,t,e,s,i){const r=Rs(t[e],s,i);r&&(n.removeEventListener(e,r,!!i),delete t[e][r.uidEvent])}function ar(n,t,e,s){const i=t[e]||{};for(const[r,o]of Object.entries(i))r.includes(s)&&Ke(n,t,e,o.callable,o.delegationSelector)}function Vs(n){return n=n.replace(nr,""),Ps[n]||n}const c={on(n,t,e,s){$n(n,t,e,s,!1)},one(n,t,e,s){$n(n,t,e,s,!0)},off(n,t,e,s){if(typeof t!="string"||!n)return;const[i,r,o]=ks(t,e,s),a=o!==t,l=xs(n),h=l[o]||{},u=t.startsWith(".");if(typeof r<"u"){if(!Object.keys(h).length)return;Ke(n,l,o,r,i?e:null);return}if(u)for(const p of Object.keys(l))ar(n,l,p,t.slice(1));for(const[p,_]of Object.entries(h)){const f=p.replace(sr,"");(!a||t.includes(f))&&Ke(n,l,o,_.callable,_.delegationSelector)}},trigger(n,t,e){if(typeof t!="string"||!n)return null;const s=Ls(),i=Vs(t),r=t!==i;let o=null,a=!0,l=!0,h=!1;r&&s&&(o=s.Event(t,e),s(n).trigger(o),a=!o.isPropagationStopped(),l=!o.isImmediatePropagationStopped(),h=o.isDefaultPrevented());const u=cn(new Event(t,{bubbles:a,cancelable:!0}),e);return h&&u.preventDefault(),l&&n.dispatchEvent(u),u.defaultPrevented&&o&&o.preventDefault(),u}};function cn(n,t={}){for(const[e,s]of Object.entries(t))try{n[e]=s}catch{Object.defineProperty(n,e,{configurable:!0,get(){return s}})}return n}function Ln(n){if(n==="true")return!0;if(n==="false")return!1;if(n===Number(n).toString())return Number(n);if(n===""||n==="null")return null;if(typeof n!="string")return n;try{return JSON.parse(decodeURIComponent(n))}catch{return n}}function Se(n){return n.replace(/[A-Z]/g,t=>`-${t.toLowerCase()}`)}const q={setDataAttribute(n,t,e){n.setAttribute(`data-bs-${Se(t)}`,e)},removeDataAttribute(n,t){n.removeAttribute(`data-bs-${Se(t)}`)},getDataAttributes(n){if(!n)return{};const t={},e=Object.keys(n.dataset).filter(s=>s.startsWith("bs")&&!s.startsWith("bsConfig"));for(const s of e){let i=s.replace(/^bs/,"");i=i.charAt(0).toLowerCase()+i.slice(1,i.length),t[i]=Ln(n.dataset[s])}return t},getDataAttribute(n,t){return Ln(n.getAttribute(`data-bs-${Se(t)}`))}};class Yt{static get Default(){return{}}static get DefaultType(){return{}}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}_getConfig(t){return t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t}_mergeConfigObj(t,e){const s=G(e)?q.getDataAttribute(e,"config"):{};return{...this.constructor.Default,...typeof s=="object"?s:{},...G(e)?q.getDataAttributes(e):{},...typeof t=="object"?t:{}}}_typeCheckConfig(t,e=this.constructor.DefaultType){for(const[s,i]of Object.entries(e)){const r=t[s],o=G(r)?"element":Qi(r);if(!new RegExp(i).test(o))throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${s}" provided type "${o}" but expected type "${i}".`)}}}const cr="5.3.3";class K extends Yt{constructor(t,e){super(),t=tt(t),t&&(this._element=t,this._config=this._getConfig(e),Oe.set(this._element,this.constructor.DATA_KEY,this))}dispose(){Oe.remove(this._element,this.constructor.DATA_KEY),c.off(this._element,this.constructor.EVENT_KEY);for(const t of Object.getOwnPropertyNames(this))this[t]=null}_queueCallback(t,e,s=!0){Is(t,e,s)}_getConfig(t){return t=this._mergeConfigObj(t,this._element),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}static getInstance(t){return Oe.get(tt(t),this.DATA_KEY)}static getOrCreateInstance(t,e={}){return this.getInstance(t)||new this(t,typeof e=="object"?e:null)}static get VERSION(){return cr}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}static eventName(t){return`${t}${this.EVENT_KEY}`}}const De=n=>{let t=n.getAttribute("data-bs-target");if(!t||t==="#"){let e=n.getAttribute("href");if(!e||!e.includes("#")&&!e.startsWith("."))return null;e.includes("#")&&!e.startsWith("#")&&(e=`#${e.split("#")[1]}`),t=e&&e!=="#"?e.trim():null}return t?t.split(",").map(e=>Ss(e)).join(","):null},d={find(n,t=document.documentElement){return[].concat(...Element.prototype.querySelectorAll.call(t,n))},findOne(n,t=document.documentElement){return Element.prototype.querySelector.call(t,n)},children(n,t){return[].concat(...n.children).filter(e=>e.matches(t))},parents(n,t){const e=[];let s=n.parentNode.closest(t);for(;s;)e.push(s),s=s.parentNode.closest(t);return e},prev(n,t){let e=n.previousElementSibling;for(;e;){if(e.matches(t))return[e];e=e.previousElementSibling}return[]},next(n,t){let e=n.nextElementSibling;for(;e;){if(e.matches(t))return[e];e=e.nextElementSibling}return[]},focusableChildren(n){const t=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map(e=>`${e}:not([tabindex^="-"])`).join(",");return this.find(t,n).filter(e=>!et(e)&&Pt(e))},getSelectorFromElement(n){const t=De(n);return t&&d.findOne(t)?t:null},getElementFromSelector(n){const t=De(n);return t?d.findOne(t):null},getMultipleElementsFromSelector(n){const t=De(n);return t?d.find(t):[]}},me=(n,t="hide")=>{const e=`click.dismiss${n.EVENT_KEY}`,s=n.NAME;c.on(document,e,`[data-bs-dismiss="${s}"]`,function(i){if(["A","AREA"].includes(this.tagName)&&i.preventDefault(),et(this))return;const r=d.getElementFromSelector(this)||this.closest(`.${s}`);n.getOrCreateInstance(r)[t]()})},lr="alert",ur="bs.alert",Hs=`.${ur}`,hr=`close${Hs}`,dr=`closed${Hs}`,fr="fade",pr="show";class ge extends K{static get NAME(){return lr}close(){if(c.trigger(this._element,hr).defaultPrevented)return;this._element.classList.remove(pr);const e=this._element.classList.contains(fr);this._queueCallback(()=>this._destroyElement(),this._element,e)}_destroyElement(){this._element.remove(),c.trigger(this._element,dr),this.dispose()}static jQueryInterface(t){return this.each(function(){const e=ge.getOrCreateInstance(this);if(typeof t=="string"){if(e[t]===void 0||t.startsWith("_")||t==="constructor")throw new TypeError(`No method named "${t}"`);e[t](this)}})}}me(ge,"close");B(ge);const _r="button",mr="bs.button",gr=`.${mr}`,Er=".data-api",vr="active",In='[data-bs-toggle="button"]',br=`click${gr}${Er}`;class Ee extends K{static get NAME(){return _r}toggle(){this._element.setAttribute("aria-pressed",this._element.classList.toggle(vr))}static jQueryInterface(t){return this.each(function(){const e=Ee.getOrCreateInstance(this);t==="toggle"&&e[t]()})}}c.on(document,br,In,n=>{n.preventDefault();const t=n.target.closest(In);Ee.getOrCreateInstance(t).toggle()});B(Ee);const Ar="swipe",Mt=".bs.swipe",Tr=`touchstart${Mt}`,yr=`touchmove${Mt}`,wr=`touchend${Mt}`,Or=`pointerdown${Mt}`,Cr=`pointerup${Mt}`,Nr="touch",Sr="pen",Dr="pointer-event",$r=40,Lr={endCallback:null,leftCallback:null,rightCallback:null},Ir={endCallback:"(function|null)",leftCallback:"(function|null)",rightCallback:"(function|null)"};class he extends Yt{constructor(t,e){super(),this._element=t,!(!t||!he.isSupported())&&(this._config=this._getConfig(e),this._deltaX=0,this._supportPointerEvents=!!window.PointerEvent,this._initEvents())}static get Default(){return Lr}static get DefaultType(){return Ir}static get NAME(){return Ar}dispose(){c.off(this._element,Mt)}_start(t){if(!this._supportPointerEvents){this._deltaX=t.touches[0].clientX;return}this._eventIsPointerPenTouch(t)&&(this._deltaX=t.clientX)}_end(t){this._eventIsPointerPenTouch(t)&&(this._deltaX=t.clientX-this._deltaX),this._handleSwipe(),P(this._config.endCallback)}_move(t){this._deltaX=t.touches&&t.touches.length>1?0:t.touches[0].clientX-this._deltaX}_handleSwipe(){const t=Math.abs(this._deltaX);if(t<=$r)return;const e=t/this._deltaX;this._deltaX=0,e&&P(e>0?this._config.rightCallback:this._config.leftCallback)}_initEvents(){this._supportPointerEvents?(c.on(this._element,Or,t=>this._start(t)),c.on(this._element,Cr,t=>this._end(t)),this._element.classList.add(Dr)):(c.on(this._element,Tr,t=>this._start(t)),c.on(this._element,yr,t=>this._move(t)),c.on(this._element,wr,t=>this._end(t)))}_eventIsPointerPenTouch(t){return this._supportPointerEvents&&(t.pointerType===Sr||t.pointerType===Nr)}static isSupported(){return"ontouchstart"in document.documentElement||navigator.maxTouchPoints>0}}const Pr="carousel",Mr="bs.carousel",it=`.${Mr}`,Ws=".data-api",xr="ArrowLeft",Rr="ArrowRight",kr=500,Vt="next",vt="prev",Tt="left",ae="right",Vr=`slide${it}`,$e=`slid${it}`,Hr=`keydown${it}`,Wr=`mouseenter${it}`,Br=`mouseleave${it}`,jr=`dragstart${it}`,Fr=`load${it}${Ws}`,Kr=`click${it}${Ws}`,Bs="carousel",te="active",Yr="slide",Ur="carousel-item-end",zr="carousel-item-start",Gr="carousel-item-next",qr="carousel-item-prev",js=".active",Fs=".carousel-item",Xr=js+Fs,Qr=".carousel-item img",Zr=".carousel-indicators",Jr="[data-bs-slide], [data-bs-slide-to]",to='[data-bs-ride="carousel"]',eo={[xr]:ae,[Rr]:Tt},no={interval:5e3,keyboard:!0,pause:"hover",ride:!1,touch:!0,wrap:!0},so={interval:"(number|boolean)",keyboard:"boolean",pause:"(string|boolean)",ride:"(boolean|string)",touch:"boolean",wrap:"boolean"};class Ut extends K{constructor(t,e){super(t,e),this._interval=null,this._activeElement=null,this._isSliding=!1,this.touchTimeout=null,this._swipeHelper=null,this._indicatorsElement=d.findOne(Zr,this._element),this._addEventListeners(),this._config.ride===Bs&&this.cycle()}static get Default(){return no}static get DefaultType(){return so}static get NAME(){return Pr}next(){this._slide(Vt)}nextWhenVisible(){!document.hidden&&Pt(this._element)&&this.next()}prev(){this._slide(vt)}pause(){this._isSliding&&Ds(this._element),this._clearInterval()}cycle(){this._clearInterval(),this._updateInterval(),this._interval=setInterval(()=>this.nextWhenVisible(),this._config.interval)}_maybeEnableCycle(){if(this._config.ride){if(this._isSliding){c.one(this._element,$e,()=>this.cycle());return}this.cycle()}}to(t){const e=this._getItems();if(t>e.length-1||t<0)return;if(this._isSliding){c.one(this._element,$e,()=>this.to(t));return}const s=this._getItemIndex(this._getActive());if(s===t)return;const i=t>s?Vt:vt;this._slide(i,e[t])}dispose(){this._swipeHelper&&this._swipeHelper.dispose(),super.dispose()}_configAfterMerge(t){return t.defaultInterval=t.interval,t}_addEventListeners(){this._config.keyboard&&c.on(this._element,Hr,t=>this._keydown(t)),this._config.pause==="hover"&&(c.on(this._element,Wr,()=>this.pause()),c.on(this._element,Br,()=>this._maybeEnableCycle())),this._config.touch&&he.isSupported()&&this._addTouchEventListeners()}_addTouchEventListeners(){for(const s of d.find(Qr,this._element))c.on(s,jr,i=>i.preventDefault());const e={leftCallback:()=>this._slide(this._directionToOrder(Tt)),rightCallback:()=>this._slide(this._directionToOrder(ae)),endCallback:()=>{this._config.pause==="hover"&&(this.pause(),this.touchTimeout&&clearTimeout(this.touchTimeout),this.touchTimeout=setTimeout(()=>this._maybeEnableCycle(),kr+this._config.interval))}};this._swipeHelper=new he(this._element,e)}_keydown(t){if(/input|textarea/i.test(t.target.tagName))return;const e=eo[t.key];e&&(t.preventDefault(),this._slide(this._directionToOrder(e)))}_getItemIndex(t){return this._getItems().indexOf(t)}_setActiveIndicatorElement(t){if(!this._indicatorsElement)return;const e=d.findOne(js,this._indicatorsElement);e.classList.remove(te),e.removeAttribute("aria-current");const s=d.findOne(`[data-bs-slide-to="${t}"]`,this._indicatorsElement);s&&(s.classList.add(te),s.setAttribute("aria-current","true"))}_updateInterval(){const t=this._activeElement||this._getActive();if(!t)return;const e=Number.parseInt(t.getAttribute("data-bs-interval"),10);this._config.interval=e||this._config.defaultInterval}_slide(t,e=null){if(this._isSliding)return;const s=this._getActive(),i=t===Vt,r=e||an(this._getItems(),s,i,this._config.wrap);if(r===s)return;const o=this._getItemIndex(r),a=f=>c.trigger(this._element,f,{relatedTarget:r,direction:this._orderToDirection(t),from:this._getItemIndex(s),to:o});if(a(Vr).defaultPrevented||!s||!r)return;const h=!!this._interval;this.pause(),this._isSliding=!0,this._setActiveIndicatorElement(o),this._activeElement=r;const u=i?zr:Ur,p=i?Gr:qr;r.classList.add(p),Kt(r),s.classList.add(u),r.classList.add(u);const _=()=>{r.classList.remove(u,p),r.classList.add(te),s.classList.remove(te,p,u),this._isSliding=!1,a($e)};this._queueCallback(_,s,this._isAnimated()),h&&this.cycle()}_isAnimated(){return this._element.classList.contains(Yr)}_getActive(){return d.findOne(Xr,this._element)}_getItems(){return d.find(Fs,this._element)}_clearInterval(){this._interval&&(clearInterval(this._interval),this._interval=null)}_directionToOrder(t){return H()?t===Tt?vt:Vt:t===Tt?Vt:vt}_orderToDirection(t){return H()?t===vt?Tt:ae:t===vt?ae:Tt}static jQueryInterface(t){return this.each(function(){const e=Ut.getOrCreateInstance(this,t);if(typeof t=="number"){e.to(t);return}if(typeof t=="string"){if(e[t]===void 0||t.startsWith("_")||t==="constructor")throw new TypeError(`No method named "${t}"`);e[t]()}})}}c.on(document,Kr,Jr,function(n){const t=d.getElementFromSelector(this);if(!t||!t.classList.contains(Bs))return;n.preventDefault();const e=Ut.getOrCreateInstance(t),s=this.getAttribute("data-bs-slide-to");if(s){e.to(s),e._maybeEnableCycle();return}if(q.getDataAttribute(this,"slide")==="next"){e.next(),e._maybeEnableCycle();return}e.prev(),e._maybeEnableCycle()});c.on(window,Fr,()=>{const n=d.find(to);for(const t of n)Ut.getOrCreateInstance(t)});B(Ut);const io="collapse",ro="bs.collapse",zt=`.${ro}`,oo=".data-api",ao=`show${zt}`,co=`shown${zt}`,lo=`hide${zt}`,uo=`hidden${zt}`,ho=`click${zt}${oo}`,Le="show",wt="collapse",ee="collapsing",fo="collapsed",po=`:scope .${wt} .${wt}`,_o="collapse-horizontal",mo="width",go="height",Eo=".collapse.show, .collapse.collapsing",Ye='[data-bs-toggle="collapse"]',vo={parent:null,toggle:!0},bo={parent:"(null|element)",toggle:"boolean"};class jt extends K{constructor(t,e){super(t,e),this._isTransitioning=!1,this._triggerArray=[];const s=d.find(Ye);for(const i of s){const r=d.getSelectorFromElement(i),o=d.find(r).filter(a=>a===this._element);r!==null&&o.length&&this._triggerArray.push(i)}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return vo}static get DefaultType(){return bo}static get NAME(){return io}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let t=[];if(this._config.parent&&(t=this._getFirstLevelChildren(Eo).filter(a=>a!==this._element).map(a=>jt.getOrCreateInstance(a,{toggle:!1}))),t.length&&t[0]._isTransitioning||c.trigger(this._element,ao).defaultPrevented)return;for(const a of t)a.hide();const s=this._getDimension();this._element.classList.remove(wt),this._element.classList.add(ee),this._element.style[s]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;const i=()=>{this._isTransitioning=!1,this._element.classList.remove(ee),this._element.classList.add(wt,Le),this._element.style[s]="",c.trigger(this._element,co)},o=`scroll${s[0].toUpperCase()+s.slice(1)}`;this._queueCallback(i,this._element,!0),this._element.style[s]=`${this._element[o]}px`}hide(){if(this._isTransitioning||!this._isShown()||c.trigger(this._element,lo).defaultPrevented)return;const e=this._getDimension();this._element.style[e]=`${this._element.getBoundingClientRect()[e]}px`,Kt(this._element),this._element.classList.add(ee),this._element.classList.remove(wt,Le);for(const i of this._triggerArray){const r=d.getElementFromSelector(i);r&&!this._isShown(r)&&this._addAriaAndCollapsedClass([i],!1)}this._isTransitioning=!0;const s=()=>{this._isTransitioning=!1,this._element.classList.remove(ee),this._element.classList.add(wt),c.trigger(this._element,uo)};this._element.style[e]="",this._queueCallback(s,this._element,!0)}_isShown(t=this._element){return t.classList.contains(Le)}_configAfterMerge(t){return t.toggle=!!t.toggle,t.parent=tt(t.parent),t}_getDimension(){return this._element.classList.contains(_o)?mo:go}_initializeChildren(){if(!this._config.parent)return;const t=this._getFirstLevelChildren(Ye);for(const e of t){const s=d.getElementFromSelector(e);s&&this._addAriaAndCollapsedClass([e],this._isShown(s))}}_getFirstLevelChildren(t){const e=d.find(po,this._config.parent);return d.find(t,this._config.parent).filter(s=>!e.includes(s))}_addAriaAndCollapsedClass(t,e){if(t.length)for(const s of t)s.classList.toggle(fo,!e),s.setAttribute("aria-expanded",e)}static jQueryInterface(t){const e={};return typeof t=="string"&&/show|hide/.test(t)&&(e.toggle=!1),this.each(function(){const s=jt.getOrCreateInstance(this,e);if(typeof t=="string"){if(typeof s[t]>"u")throw new TypeError(`No method named "${t}"`);s[t]()}})}}c.on(document,ho,Ye,function(n){(n.target.tagName==="A"||n.delegateTarget&&n.delegateTarget.tagName==="A")&&n.preventDefault();for(const t of d.getMultipleElementsFromSelector(this))jt.getOrCreateInstance(t,{toggle:!1}).toggle()});B(jt);const Pn="dropdown",Ao="bs.dropdown",mt=`.${Ao}`,ln=".data-api",To="Escape",Mn="Tab",yo="ArrowUp",xn="ArrowDown",wo=2,Oo=`hide${mt}`,Co=`hidden${mt}`,No=`show${mt}`,So=`shown${mt}`,Ks=`click${mt}${ln}`,Ys=`keydown${mt}${ln}`,Do=`keyup${mt}${ln}`,yt="show",$o="dropup",Lo="dropend",Io="dropstart",Po="dropup-center",Mo="dropdown-center",ht='[data-bs-toggle="dropdown"]:not(.disabled):not(:disabled)',xo=`${ht}.${yt}`,ce=".dropdown-menu",Ro=".navbar",ko=".navbar-nav",Vo=".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",Ho=H()?"top-end":"top-start",Wo=H()?"top-start":"top-end",Bo=H()?"bottom-end":"bottom-start",jo=H()?"bottom-start":"bottom-end",Fo=H()?"left-start":"right-start",Ko=H()?"right-start":"left-start",Yo="top",Uo="bottom",zo={autoClose:!0,boundary:"clippingParents",display:"dynamic",offset:[0,2],popperConfig:null,reference:"toggle"},Go={autoClose:"(boolean|string)",boundary:"(string|element)",display:"string",offset:"(array|string|function)",popperConfig:"(null|object|function)",reference:"(string|element|object)"};class U extends K{constructor(t,e){super(t,e),this._popper=null,this._parent=this._element.parentNode,this._menu=d.next(this._element,ce)[0]||d.prev(this._element,ce)[0]||d.findOne(ce,this._parent),this._inNavbar=this._detectNavbar()}static get Default(){return zo}static get DefaultType(){return Go}static get NAME(){return Pn}toggle(){return this._isShown()?this.hide():this.show()}show(){if(et(this._element)||this._isShown())return;const t={relatedTarget:this._element};if(!c.trigger(this._element,No,t).defaultPrevented){if(this._createPopper(),"ontouchstart"in document.documentElement&&!this._parent.closest(ko))for(const s of[].concat(...document.body.children))c.on(s,"mouseover",ue);this._element.focus(),this._element.setAttribute("aria-expanded",!0),this._menu.classList.add(yt),this._element.classList.add(yt),c.trigger(this._element,So,t)}}hide(){if(et(this._element)||!this._isShown())return;const t={relatedTarget:this._element};this._completeHide(t)}dispose(){this._popper&&this._popper.destroy(),super.dispose()}update(){this._inNavbar=this._detectNavbar(),this._popper&&this._popper.update()}_completeHide(t){if(!c.trigger(this._element,Oo,t).defaultPrevented){if("ontouchstart"in document.documentElement)for(const s of[].concat(...document.body.children))c.off(s,"mouseover",ue);this._popper&&this._popper.destroy(),this._menu.classList.remove(yt),this._element.classList.remove(yt),this._element.setAttribute("aria-expanded","false"),q.removeDataAttribute(this._menu,"popper"),c.trigger(this._element,Co,t)}}_getConfig(t){if(t=super._getConfig(t),typeof t.reference=="object"&&!G(t.reference)&&typeof t.reference.getBoundingClientRect!="function")throw new TypeError(`${Pn.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`);return t}_createPopper(){if(typeof Ns>"u")throw new TypeError("Bootstrap's dropdowns require Popper (https://popper.js.org)");let t=this._element;this._config.reference==="parent"?t=this._parent:G(this._config.reference)?t=tt(this._config.reference):typeof this._config.reference=="object"&&(t=this._config.reference);const e=this._getPopperConfig();this._popper=on(t,this._menu,e)}_isShown(){return this._menu.classList.contains(yt)}_getPlacement(){const t=this._parent;if(t.classList.contains(Lo))return Fo;if(t.classList.contains(Io))return Ko;if(t.classList.contains(Po))return Yo;if(t.classList.contains(Mo))return Uo;const e=getComputedStyle(this._menu).getPropertyValue("--bs-position").trim()==="end";return t.classList.contains($o)?e?Wo:Ho:e?jo:Bo}_detectNavbar(){return this._element.closest(Ro)!==null}_getOffset(){const{offset:t}=this._config;return typeof t=="string"?t.split(",").map(e=>Number.parseInt(e,10)):typeof t=="function"?e=>t(e,this._element):t}_getPopperConfig(){const t={placement:this._getPlacement(),modifiers:[{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"offset",options:{offset:this._getOffset()}}]};return(this._inNavbar||this._config.display==="static")&&(q.setDataAttribute(this._menu,"popper","static"),t.modifiers=[{name:"applyStyles",enabled:!1}]),{...t,...P(this._config.popperConfig,[t])}}_selectMenuItem({key:t,target:e}){const s=d.find(Vo,this._menu).filter(i=>Pt(i));s.length&&an(s,e,t===xn,!s.includes(e)).focus()}static jQueryInterface(t){return this.each(function(){const e=U.getOrCreateInstance(this,t);if(typeof t=="string"){if(typeof e[t]>"u")throw new TypeError(`No method named "${t}"`);e[t]()}})}static clearMenus(t){if(t.button===wo||t.type==="keyup"&&t.key!==Mn)return;const e=d.find(xo);for(const s of e){const i=U.getInstance(s);if(!i||i._config.autoClose===!1)continue;const r=t.composedPath(),o=r.includes(i._menu);if(r.includes(i._element)||i._config.autoClose==="inside"&&!o||i._config.autoClose==="outside"&&o||i._menu.contains(t.target)&&(t.type==="keyup"&&t.key===Mn||/input|select|option|textarea|form/i.test(t.target.tagName)))continue;const a={relatedTarget:i._element};t.type==="click"&&(a.clickEvent=t),i._completeHide(a)}}static dataApiKeydownHandler(t){const e=/input|textarea/i.test(t.target.tagName),s=t.key===To,i=[yo,xn].includes(t.key);if(!i&&!s||e&&!s)return;t.preventDefault();const r=this.matches(ht)?this:d.prev(this,ht)[0]||d.next(this,ht)[0]||d.findOne(ht,t.delegateTarget.parentNode),o=U.getOrCreateInstance(r);if(i){t.stopPropagation(),o.show(),o._selectMenuItem(t);return}o._isShown()&&(t.stopPropagation(),o.hide(),r.focus())}}c.on(document,Ys,ht,U.dataApiKeydownHandler);c.on(document,Ys,ce,U.dataApiKeydownHandler);c.on(document,Ks,U.clearMenus);c.on(document,Do,U.clearMenus);c.on(document,Ks,ht,function(n){n.preventDefault(),U.getOrCreateInstance(this).toggle()});B(U);const Us="backdrop",qo="fade",Rn="show",kn=`mousedown.bs.${Us}`,Xo={className:"modal-backdrop",clickCallback:null,isAnimated:!1,isVisible:!0,rootElement:"body"},Qo={className:"string",clickCallback:"(function|null)",isAnimated:"boolean",isVisible:"boolean",rootElement:"(element|string)"};class zs extends Yt{constructor(t){super(),this._config=this._getConfig(t),this._isAppended=!1,this._element=null}static get Default(){return Xo}static get DefaultType(){return Qo}static get NAME(){return Us}show(t){if(!this._config.isVisible){P(t);return}this._append();const e=this._getElement();this._config.isAnimated&&Kt(e),e.classList.add(Rn),this._emulateAnimation(()=>{P(t)})}hide(t){if(!this._config.isVisible){P(t);return}this._getElement().classList.remove(Rn),this._emulateAnimation(()=>{this.dispose(),P(t)})}dispose(){this._isAppended&&(c.off(this._element,kn),this._element.remove(),this._isAppended=!1)}_getElement(){if(!this._element){const t=document.createElement("div");t.className=this._config.className,this._config.isAnimated&&t.classList.add(qo),this._element=t}return this._element}_configAfterMerge(t){return t.rootElement=tt(t.rootElement),t}_append(){if(this._isAppended)return;const t=this._getElement();this._config.rootElement.append(t),c.on(t,kn,()=>{P(this._config.clickCallback)}),this._isAppended=!0}_emulateAnimation(t){Is(t,this._getElement(),this._config.isAnimated)}}const Zo="focustrap",Jo="bs.focustrap",de=`.${Jo}`,ta=`focusin${de}`,ea=`keydown.tab${de}`,na="Tab",sa="forward",Vn="backward",ia={autofocus:!0,trapElement:null},ra={autofocus:"boolean",trapElement:"element"};class Gs extends Yt{constructor(t){super(),this._config=this._getConfig(t),this._isActive=!1,this._lastTabNavDirection=null}static get Default(){return ia}static get DefaultType(){return ra}static get NAME(){return Zo}activate(){this._isActive||(this._config.autofocus&&this._config.trapElement.focus(),c.off(document,de),c.on(document,ta,t=>this._handleFocusin(t)),c.on(document,ea,t=>this._handleKeydown(t)),this._isActive=!0)}deactivate(){this._isActive&&(this._isActive=!1,c.off(document,de))}_handleFocusin(t){const{trapElement:e}=this._config;if(t.target===document||t.target===e||e.contains(t.target))return;const s=d.focusableChildren(e);s.length===0?e.focus():this._lastTabNavDirection===Vn?s[s.length-1].focus():s[0].focus()}_handleKeydown(t){t.key===na&&(this._lastTabNavDirection=t.shiftKey?Vn:sa)}}const Hn=".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",Wn=".sticky-top",ne="padding-right",Bn="margin-right";class Ue{constructor(){this._element=document.body}getWidth(){const t=document.documentElement.clientWidth;return Math.abs(window.innerWidth-t)}hide(){const t=this.getWidth();this._disableOverFlow(),this._setElementAttributes(this._element,ne,e=>e+t),this._setElementAttributes(Hn,ne,e=>e+t),this._setElementAttributes(Wn,Bn,e=>e-t)}reset(){this._resetElementAttributes(this._element,"overflow"),this._resetElementAttributes(this._element,ne),this._resetElementAttributes(Hn,ne),this._resetElementAttributes(Wn,Bn)}isOverflowing(){return this.getWidth()>0}_disableOverFlow(){this._saveInitialAttribute(this._element,"overflow"),this._element.style.overflow="hidden"}_setElementAttributes(t,e,s){const i=this.getWidth(),r=o=>{if(o!==this._element&&window.innerWidth>o.clientWidth+i)return;this._saveInitialAttribute(o,e);const a=window.getComputedStyle(o).getPropertyValue(e);o.style.setProperty(e,`${s(Number.parseFloat(a))}px`)};this._applyManipulationCallback(t,r)}_saveInitialAttribute(t,e){const s=t.style.getPropertyValue(e);s&&q.setDataAttribute(t,e,s)}_resetElementAttributes(t,e){const s=i=>{const r=q.getDataAttribute(i,e);if(r===null){i.style.removeProperty(e);return}q.removeDataAttribute(i,e),i.style.setProperty(e,r)};this._applyManipulationCallback(t,s)}_applyManipulationCallback(t,e){if(G(t)){e(t);return}for(const s of d.find(t,this._element))e(s)}}const oa="modal",aa="bs.modal",W=`.${aa}`,ca=".data-api",la="Escape",ua=`hide${W}`,ha=`hidePrevented${W}`,qs=`hidden${W}`,Xs=`show${W}`,da=`shown${W}`,fa=`resize${W}`,pa=`click.dismiss${W}`,_a=`mousedown.dismiss${W}`,ma=`keydown.dismiss${W}`,ga=`click${W}${ca}`,jn="modal-open",Ea="fade",Fn="show",Ie="modal-static",va=".modal.show",ba=".modal-dialog",Aa=".modal-body",Ta='[data-bs-toggle="modal"]',ya={backdrop:!0,focus:!0,keyboard:!0},wa={backdrop:"(boolean|string)",focus:"boolean",keyboard:"boolean"};class $t extends K{constructor(t,e){super(t,e),this._dialog=d.findOne(ba,this._element),this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._isShown=!1,this._isTransitioning=!1,this._scrollBar=new Ue,this._addEventListeners()}static get Default(){return ya}static get DefaultType(){return wa}static get NAME(){return oa}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||this._isTransitioning||c.trigger(this._element,Xs,{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._isTransitioning=!0,this._scrollBar.hide(),document.body.classList.add(jn),this._adjustDialog(),this._backdrop.show(()=>this._showElement(t)))}hide(){!this._isShown||this._isTransitioning||c.trigger(this._element,ua).defaultPrevented||(this._isShown=!1,this._isTransitioning=!0,this._focustrap.deactivate(),this._element.classList.remove(Fn),this._queueCallback(()=>this._hideModal(),this._element,this._isAnimated()))}dispose(){c.off(window,W),c.off(this._dialog,W),this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}handleUpdate(){this._adjustDialog()}_initializeBackDrop(){return new zs({isVisible:!!this._config.backdrop,isAnimated:this._isAnimated()})}_initializeFocusTrap(){return new Gs({trapElement:this._element})}_showElement(t){document.body.contains(this._element)||document.body.append(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.scrollTop=0;const e=d.findOne(Aa,this._dialog);e&&(e.scrollTop=0),Kt(this._element),this._element.classList.add(Fn);const s=()=>{this._config.focus&&this._focustrap.activate(),this._isTransitioning=!1,c.trigger(this._element,da,{relatedTarget:t})};this._queueCallback(s,this._dialog,this._isAnimated())}_addEventListeners(){c.on(this._element,ma,t=>{if(t.key===la){if(this._config.keyboard){this.hide();return}this._triggerBackdropTransition()}}),c.on(window,fa,()=>{this._isShown&&!this._isTransitioning&&this._adjustDialog()}),c.on(this._element,_a,t=>{c.one(this._element,pa,e=>{if(!(this._element!==t.target||this._element!==e.target)){if(this._config.backdrop==="static"){this._triggerBackdropTransition();return}this._config.backdrop&&this.hide()}})})}_hideModal(){this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._isTransitioning=!1,this._backdrop.hide(()=>{document.body.classList.remove(jn),this._resetAdjustments(),this._scrollBar.reset(),c.trigger(this._element,qs)})}_isAnimated(){return this._element.classList.contains(Ea)}_triggerBackdropTransition(){if(c.trigger(this._element,ha).defaultPrevented)return;const e=this._element.scrollHeight>document.documentElement.clientHeight,s=this._element.style.overflowY;s==="hidden"||this._element.classList.contains(Ie)||(e||(this._element.style.overflowY="hidden"),this._element.classList.add(Ie),this._queueCallback(()=>{this._element.classList.remove(Ie),this._queueCallback(()=>{this._element.style.overflowY=s},this._dialog)},this._dialog),this._element.focus())}_adjustDialog(){const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._scrollBar.getWidth(),s=e>0;if(s&&!t){const i=H()?"paddingLeft":"paddingRight";this._element.style[i]=`${e}px`}if(!s&&t){const i=H()?"paddingRight":"paddingLeft";this._element.style[i]=`${e}px`}}_resetAdjustments(){this._element.style.paddingLeft="",this._element.style.paddingRight=""}static jQueryInterface(t,e){return this.each(function(){const s=$t.getOrCreateInstance(this,t);if(typeof t=="string"){if(typeof s[t]>"u")throw new TypeError(`No method named "${t}"`);s[t](e)}})}}c.on(document,ga,Ta,function(n){const t=d.getElementFromSelector(this);["A","AREA"].includes(this.tagName)&&n.preventDefault(),c.one(t,Xs,i=>{i.defaultPrevented||c.one(t,qs,()=>{Pt(this)&&this.focus()})});const e=d.findOne(va);e&&$t.getInstance(e).hide(),$t.getOrCreateInstance(t).toggle(this)});me($t);B($t);const Oa="offcanvas",Ca="bs.offcanvas",Q=`.${Ca}`,Qs=".data-api",Na=`load${Q}${Qs}`,Sa="Escape",Kn="show",Yn="showing",Un="hiding",Da="offcanvas-backdrop",Zs=".offcanvas.show",$a=`show${Q}`,La=`shown${Q}`,Ia=`hide${Q}`,zn=`hidePrevented${Q}`,Js=`hidden${Q}`,Pa=`resize${Q}`,Ma=`click${Q}${Qs}`,xa=`keydown.dismiss${Q}`,Ra='[data-bs-toggle="offcanvas"]',ka={backdrop:!0,keyboard:!0,scroll:!1},Va={backdrop:"(boolean|string)",keyboard:"boolean",scroll:"boolean"};class nt extends K{constructor(t,e){super(t,e),this._isShown=!1,this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._addEventListeners()}static get Default(){return ka}static get DefaultType(){return Va}static get NAME(){return Oa}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){if(this._isShown||c.trigger(this._element,$a,{relatedTarget:t}).defaultPrevented)return;this._isShown=!0,this._backdrop.show(),this._config.scroll||new Ue().hide(),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.classList.add(Yn);const s=()=>{(!this._config.scroll||this._config.backdrop)&&this._focustrap.activate(),this._element.classList.add(Kn),this._element.classList.remove(Yn),c.trigger(this._element,La,{relatedTarget:t})};this._queueCallback(s,this._element,!0)}hide(){if(!this._isShown||c.trigger(this._element,Ia).defaultPrevented)return;this._focustrap.deactivate(),this._element.blur(),this._isShown=!1,this._element.classList.add(Un),this._backdrop.hide();const e=()=>{this._element.classList.remove(Kn,Un),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._config.scroll||new Ue().reset(),c.trigger(this._element,Js)};this._queueCallback(e,this._element,!0)}dispose(){this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}_initializeBackDrop(){const t=()=>{if(this._config.backdrop==="static"){c.trigger(this._element,zn);return}this.hide()},e=!!this._config.backdrop;return new zs({className:Da,isVisible:e,isAnimated:!0,rootElement:this._element.parentNode,clickCallback:e?t:null})}_initializeFocusTrap(){return new Gs({trapElement:this._element})}_addEventListeners(){c.on(this._element,xa,t=>{if(t.key===Sa){if(this._config.keyboard){this.hide();return}c.trigger(this._element,zn)}})}static jQueryInterface(t){return this.each(function(){const e=nt.getOrCreateInstance(this,t);if(typeof t=="string"){if(e[t]===void 0||t.startsWith("_")||t==="constructor")throw new TypeError(`No method named "${t}"`);e[t](this)}})}}c.on(document,Ma,Ra,function(n){const t=d.getElementFromSelector(this);if(["A","AREA"].includes(this.tagName)&&n.preventDefault(),et(this))return;c.one(t,Js,()=>{Pt(this)&&this.focus()});const e=d.findOne(Zs);e&&e!==t&&nt.getInstance(e).hide(),nt.getOrCreateInstance(t).toggle(this)});c.on(window,Na,()=>{for(const n of d.find(Zs))nt.getOrCreateInstance(n).show()});c.on(window,Pa,()=>{for(const n of d.find("[aria-modal][class*=show][class*=offcanvas-]"))getComputedStyle(n).position!=="fixed"&&nt.getOrCreateInstance(n).hide()});me(nt);B(nt);const Ha=/^aria-[\w-]*$/i,ti={"*":["class","dir","id","lang","role",Ha],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],dd:[],div:[],dl:[],dt:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","srcset","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},Wa=new Set(["background","cite","href","itemtype","longdesc","poster","src","xlink:href"]),Ba=/^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i,ja=(n,t)=>{const e=n.nodeName.toLowerCase();return t.includes(e)?Wa.has(e)?!!Ba.test(n.nodeValue):!0:t.filter(s=>s instanceof RegExp).some(s=>s.test(e))};function Fa(n,t,e){if(!n.length)return n;if(e&&typeof e=="function")return e(n);const i=new window.DOMParser().parseFromString(n,"text/html"),r=[].concat(...i.body.querySelectorAll("*"));for(const o of r){const a=o.nodeName.toLowerCase();if(!Object.keys(t).includes(a)){o.remove();continue}const l=[].concat(...o.attributes),h=[].concat(t["*"]||[],t[a]||[]);for(const u of l)ja(u,h)||o.removeAttribute(u.nodeName)}return i.body.innerHTML}const Ka="TemplateFactory",Ya={allowList:ti,content:{},extraClass:"",html:!1,sanitize:!0,sanitizeFn:null,template:"
"},Ua={allowList:"object",content:"object",extraClass:"(string|function)",html:"boolean",sanitize:"boolean",sanitizeFn:"(null|function)",template:"string"},za={entry:"(string|element|function|null)",selector:"(string|element)"};class Ga extends Yt{constructor(t){super(),this._config=this._getConfig(t)}static get Default(){return Ya}static get DefaultType(){return Ua}static get NAME(){return Ka}getContent(){return Object.values(this._config.content).map(t=>this._resolvePossibleFunction(t)).filter(Boolean)}hasContent(){return this.getContent().length>0}changeContent(t){return this._checkContent(t),this._config.content={...this._config.content,...t},this}toHtml(){const t=document.createElement("div");t.innerHTML=this._maybeSanitize(this._config.template);for(const[i,r]of Object.entries(this._config.content))this._setContent(t,r,i);const e=t.children[0],s=this._resolvePossibleFunction(this._config.extraClass);return s&&e.classList.add(...s.split(" ")),e}_typeCheckConfig(t){super._typeCheckConfig(t),this._checkContent(t.content)}_checkContent(t){for(const[e,s]of Object.entries(t))super._typeCheckConfig({selector:e,entry:s},za)}_setContent(t,e,s){const i=d.findOne(s,t);if(i){if(e=this._resolvePossibleFunction(e),!e){i.remove();return}if(G(e)){this._putElementInTemplate(tt(e),i);return}if(this._config.html){i.innerHTML=this._maybeSanitize(e);return}i.textContent=e}}_maybeSanitize(t){return this._config.sanitize?Fa(t,this._config.allowList,this._config.sanitizeFn):t}_resolvePossibleFunction(t){return P(t,[this])}_putElementInTemplate(t,e){if(this._config.html){e.innerHTML="",e.append(t);return}e.textContent=t.textContent}}const qa="tooltip",Xa=new Set(["sanitize","allowList","sanitizeFn"]),Pe="fade",Qa="modal",se="show",Za=".tooltip-inner",Gn=`.${Qa}`,qn="hide.bs.modal",Ht="hover",Me="focus",Ja="click",tc="manual",ec="hide",nc="hidden",sc="show",ic="shown",rc="inserted",oc="click",ac="focusin",cc="focusout",lc="mouseenter",uc="mouseleave",hc={AUTO:"auto",TOP:"top",RIGHT:H()?"left":"right",BOTTOM:"bottom",LEFT:H()?"right":"left"},dc={allowList:ti,animation:!0,boundary:"clippingParents",container:!1,customClass:"",delay:0,fallbackPlacements:["top","right","bottom","left"],html:!1,offset:[0,6],placement:"top",popperConfig:null,sanitize:!0,sanitizeFn:null,selector:!1,template:'',title:"",trigger:"hover focus"},fc={allowList:"object",animation:"boolean",boundary:"(string|element)",container:"(string|element|boolean)",customClass:"(string|function)",delay:"(number|object)",fallbackPlacements:"array",html:"boolean",offset:"(array|string|function)",placement:"(string|function)",popperConfig:"(null|object|function)",sanitize:"boolean",sanitizeFn:"(null|function)",selector:"(string|boolean)",template:"string",title:"(string|element|function)",trigger:"string"};class xt extends K{constructor(t,e){if(typeof Ns>"u")throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)");super(t,e),this._isEnabled=!0,this._timeout=0,this._isHovered=null,this._activeTrigger={},this._popper=null,this._templateFactory=null,this._newContent=null,this.tip=null,this._setListeners(),this._config.selector||this._fixTitle()}static get Default(){return dc}static get DefaultType(){return fc}static get NAME(){return qa}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(){if(this._isEnabled){if(this._activeTrigger.click=!this._activeTrigger.click,this._isShown()){this._leave();return}this._enter()}}dispose(){clearTimeout(this._timeout),c.off(this._element.closest(Gn),qn,this._hideModalHandler),this._element.getAttribute("data-bs-original-title")&&this._element.setAttribute("title",this._element.getAttribute("data-bs-original-title")),this._disposePopper(),super.dispose()}show(){if(this._element.style.display==="none")throw new Error("Please use show on visible elements");if(!(this._isWithContent()&&this._isEnabled))return;const t=c.trigger(this._element,this.constructor.eventName(sc)),s=($s(this._element)||this._element.ownerDocument.documentElement).contains(this._element);if(t.defaultPrevented||!s)return;this._disposePopper();const i=this._getTipElement();this._element.setAttribute("aria-describedby",i.getAttribute("id"));const{container:r}=this._config;if(this._element.ownerDocument.documentElement.contains(this.tip)||(r.append(i),c.trigger(this._element,this.constructor.eventName(rc))),this._popper=this._createPopper(i),i.classList.add(se),"ontouchstart"in document.documentElement)for(const a of[].concat(...document.body.children))c.on(a,"mouseover",ue);const o=()=>{c.trigger(this._element,this.constructor.eventName(ic)),this._isHovered===!1&&this._leave(),this._isHovered=!1};this._queueCallback(o,this.tip,this._isAnimated())}hide(){if(!this._isShown()||c.trigger(this._element,this.constructor.eventName(ec)).defaultPrevented)return;if(this._getTipElement().classList.remove(se),"ontouchstart"in document.documentElement)for(const i of[].concat(...document.body.children))c.off(i,"mouseover",ue);this._activeTrigger[Ja]=!1,this._activeTrigger[Me]=!1,this._activeTrigger[Ht]=!1,this._isHovered=null;const s=()=>{this._isWithActiveTrigger()||(this._isHovered||this._disposePopper(),this._element.removeAttribute("aria-describedby"),c.trigger(this._element,this.constructor.eventName(nc)))};this._queueCallback(s,this.tip,this._isAnimated())}update(){this._popper&&this._popper.update()}_isWithContent(){return!!this._getTitle()}_getTipElement(){return this.tip||(this.tip=this._createTipElement(this._newContent||this._getContentForTemplate())),this.tip}_createTipElement(t){const e=this._getTemplateFactory(t).toHtml();if(!e)return null;e.classList.remove(Pe,se),e.classList.add(`bs-${this.constructor.NAME}-auto`);const s=Zi(this.constructor.NAME).toString();return e.setAttribute("id",s),this._isAnimated()&&e.classList.add(Pe),e}setContent(t){this._newContent=t,this._isShown()&&(this._disposePopper(),this.show())}_getTemplateFactory(t){return this._templateFactory?this._templateFactory.changeContent(t):this._templateFactory=new Ga({...this._config,content:t,extraClass:this._resolvePossibleFunction(this._config.customClass)}),this._templateFactory}_getContentForTemplate(){return{[Za]:this._getTitle()}}_getTitle(){return this._resolvePossibleFunction(this._config.title)||this._element.getAttribute("data-bs-original-title")}_initializeOnDelegatedTarget(t){return this.constructor.getOrCreateInstance(t.delegateTarget,this._getDelegateConfig())}_isAnimated(){return this._config.animation||this.tip&&this.tip.classList.contains(Pe)}_isShown(){return this.tip&&this.tip.classList.contains(se)}_createPopper(t){const e=P(this._config.placement,[this,t,this._element]),s=hc[e.toUpperCase()];return on(this._element,t,this._getPopperConfig(s))}_getOffset(){const{offset:t}=this._config;return typeof t=="string"?t.split(",").map(e=>Number.parseInt(e,10)):typeof t=="function"?e=>t(e,this._element):t}_resolvePossibleFunction(t){return P(t,[this._element])}_getPopperConfig(t){const e={placement:t,modifiers:[{name:"flip",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:"offset",options:{offset:this._getOffset()}},{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"arrow",options:{element:`.${this.constructor.NAME}-arrow`}},{name:"preSetPlacement",enabled:!0,phase:"beforeMain",fn:s=>{this._getTipElement().setAttribute("data-popper-placement",s.state.placement)}}]};return{...e,...P(this._config.popperConfig,[e])}}_setListeners(){const t=this._config.trigger.split(" ");for(const e of t)if(e==="click")c.on(this._element,this.constructor.eventName(oc),this._config.selector,s=>{this._initializeOnDelegatedTarget(s).toggle()});else if(e!==tc){const s=e===Ht?this.constructor.eventName(lc):this.constructor.eventName(ac),i=e===Ht?this.constructor.eventName(uc):this.constructor.eventName(cc);c.on(this._element,s,this._config.selector,r=>{const o=this._initializeOnDelegatedTarget(r);o._activeTrigger[r.type==="focusin"?Me:Ht]=!0,o._enter()}),c.on(this._element,i,this._config.selector,r=>{const o=this._initializeOnDelegatedTarget(r);o._activeTrigger[r.type==="focusout"?Me:Ht]=o._element.contains(r.relatedTarget),o._leave()})}this._hideModalHandler=()=>{this._element&&this.hide()},c.on(this._element.closest(Gn),qn,this._hideModalHandler)}_fixTitle(){const t=this._element.getAttribute("title");t&&(!this._element.getAttribute("aria-label")&&!this._element.textContent.trim()&&this._element.setAttribute("aria-label",t),this._element.setAttribute("data-bs-original-title",t),this._element.removeAttribute("title"))}_enter(){if(this._isShown()||this._isHovered){this._isHovered=!0;return}this._isHovered=!0,this._setTimeout(()=>{this._isHovered&&this.show()},this._config.delay.show)}_leave(){this._isWithActiveTrigger()||(this._isHovered=!1,this._setTimeout(()=>{this._isHovered||this.hide()},this._config.delay.hide))}_setTimeout(t,e){clearTimeout(this._timeout),this._timeout=setTimeout(t,e)}_isWithActiveTrigger(){return Object.values(this._activeTrigger).includes(!0)}_getConfig(t){const e=q.getDataAttributes(this._element);for(const s of Object.keys(e))Xa.has(s)&&delete e[s];return t={...e,...typeof t=="object"&&t?t:{}},t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t.container=t.container===!1?document.body:tt(t.container),typeof t.delay=="number"&&(t.delay={show:t.delay,hide:t.delay}),typeof t.title=="number"&&(t.title=t.title.toString()),typeof t.content=="number"&&(t.content=t.content.toString()),t}_getDelegateConfig(){const t={};for(const[e,s]of Object.entries(this._config))this.constructor.Default[e]!==s&&(t[e]=s);return t.selector=!1,t.trigger="manual",t}_disposePopper(){this._popper&&(this._popper.destroy(),this._popper=null),this.tip&&(this.tip.remove(),this.tip=null)}static jQueryInterface(t){return this.each(function(){const e=xt.getOrCreateInstance(this,t);if(typeof t=="string"){if(typeof e[t]>"u")throw new TypeError(`No method named "${t}"`);e[t]()}})}}B(xt);const pc="popover",_c=".popover-header",mc=".popover-body",gc={...xt.Default,content:"",offset:[0,8],placement:"right",template:'',trigger:"click"},Ec={...xt.DefaultType,content:"(null|string|element|function)"};class un extends xt{static get Default(){return gc}static get DefaultType(){return Ec}static get NAME(){return pc}_isWithContent(){return this._getTitle()||this._getContent()}_getContentForTemplate(){return{[_c]:this._getTitle(),[mc]:this._getContent()}}_getContent(){return this._resolvePossibleFunction(this._config.content)}static jQueryInterface(t){return this.each(function(){const e=un.getOrCreateInstance(this,t);if(typeof t=="string"){if(typeof e[t]>"u")throw new TypeError(`No method named "${t}"`);e[t]()}})}}B(un);const vc="scrollspy",bc="bs.scrollspy",hn=`.${bc}`,Ac=".data-api",Tc=`activate${hn}`,Xn=`click${hn}`,yc=`load${hn}${Ac}`,wc="dropdown-item",bt="active",Oc='[data-bs-spy="scroll"]',xe="[href]",Cc=".nav, .list-group",Qn=".nav-link",Nc=".nav-item",Sc=".list-group-item",Dc=`${Qn}, ${Nc} > ${Qn}, ${Sc}`,$c=".dropdown",Lc=".dropdown-toggle",Ic={offset:null,rootMargin:"0px 0px -25%",smoothScroll:!1,target:null,threshold:[.1,.5,1]},Pc={offset:"(number|null)",rootMargin:"string",smoothScroll:"boolean",target:"element",threshold:"array"};class ve extends K{constructor(t,e){super(t,e),this._targetLinks=new Map,this._observableSections=new Map,this._rootElement=getComputedStyle(this._element).overflowY==="visible"?null:this._element,this._activeTarget=null,this._observer=null,this._previousScrollData={visibleEntryTop:0,parentScrollTop:0},this.refresh()}static get Default(){return Ic}static get DefaultType(){return Pc}static get NAME(){return vc}refresh(){this._initializeTargetsAndObservables(),this._maybeEnableSmoothScroll(),this._observer?this._observer.disconnect():this._observer=this._getNewObserver();for(const t of this._observableSections.values())this._observer.observe(t)}dispose(){this._observer.disconnect(),super.dispose()}_configAfterMerge(t){return t.target=tt(t.target)||document.body,t.rootMargin=t.offset?`${t.offset}px 0px -30%`:t.rootMargin,typeof t.threshold=="string"&&(t.threshold=t.threshold.split(",").map(e=>Number.parseFloat(e))),t}_maybeEnableSmoothScroll(){this._config.smoothScroll&&(c.off(this._config.target,Xn),c.on(this._config.target,Xn,xe,t=>{const e=this._observableSections.get(t.target.hash);if(e){t.preventDefault();const s=this._rootElement||window,i=e.offsetTop-this._element.offsetTop;if(s.scrollTo){s.scrollTo({top:i,behavior:"smooth"});return}s.scrollTop=i}}))}_getNewObserver(){const t={root:this._rootElement,threshold:this._config.threshold,rootMargin:this._config.rootMargin};return new IntersectionObserver(e=>this._observerCallback(e),t)}_observerCallback(t){const e=o=>this._targetLinks.get(`#${o.target.id}`),s=o=>{this._previousScrollData.visibleEntryTop=o.target.offsetTop,this._process(e(o))},i=(this._rootElement||document.documentElement).scrollTop,r=i>=this._previousScrollData.parentScrollTop;this._previousScrollData.parentScrollTop=i;for(const o of t){if(!o.isIntersecting){this._activeTarget=null,this._clearActiveClass(e(o));continue}const a=o.target.offsetTop>=this._previousScrollData.visibleEntryTop;if(r&&a){if(s(o),!i)return;continue}!r&&!a&&s(o)}}_initializeTargetsAndObservables(){this._targetLinks=new Map,this._observableSections=new Map;const t=d.find(xe,this._config.target);for(const e of t){if(!e.hash||et(e))continue;const s=d.findOne(decodeURI(e.hash),this._element);Pt(s)&&(this._targetLinks.set(decodeURI(e.hash),e),this._observableSections.set(e.hash,s))}}_process(t){this._activeTarget!==t&&(this._clearActiveClass(this._config.target),this._activeTarget=t,t.classList.add(bt),this._activateParents(t),c.trigger(this._element,Tc,{relatedTarget:t}))}_activateParents(t){if(t.classList.contains(wc)){d.findOne(Lc,t.closest($c)).classList.add(bt);return}for(const e of d.parents(t,Cc))for(const s of d.prev(e,Dc))s.classList.add(bt)}_clearActiveClass(t){t.classList.remove(bt);const e=d.find(`${xe}.${bt}`,t);for(const s of e)s.classList.remove(bt)}static jQueryInterface(t){return this.each(function(){const e=ve.getOrCreateInstance(this,t);if(typeof t=="string"){if(e[t]===void 0||t.startsWith("_")||t==="constructor")throw new TypeError(`No method named "${t}"`);e[t]()}})}}c.on(window,yc,()=>{for(const n of d.find(Oc))ve.getOrCreateInstance(n)});B(ve);const Mc="tab",xc="bs.tab",gt=`.${xc}`,Rc=`hide${gt}`,kc=`hidden${gt}`,Vc=`show${gt}`,Hc=`shown${gt}`,Wc=`click${gt}`,Bc=`keydown${gt}`,jc=`load${gt}`,Fc="ArrowLeft",Zn="ArrowRight",Kc="ArrowUp",Jn="ArrowDown",Re="Home",ts="End",dt="active",es="fade",ke="show",Yc="dropdown",ei=".dropdown-toggle",Uc=".dropdown-menu",Ve=`:not(${ei})`,zc='.list-group, .nav, [role="tablist"]',Gc=".nav-item, .list-group-item",qc=`.nav-link${Ve}, .list-group-item${Ve}, [role="tab"]${Ve}`,ni='[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]',He=`${qc}, ${ni}`,Xc=`.${dt}[data-bs-toggle="tab"], .${dt}[data-bs-toggle="pill"], .${dt}[data-bs-toggle="list"]`;class Lt extends K{constructor(t){super(t),this._parent=this._element.closest(zc),this._parent&&(this._setInitialAttributes(this._parent,this._getChildren()),c.on(this._element,Bc,e=>this._keydown(e)))}static get NAME(){return Mc}show(){const t=this._element;if(this._elemIsActive(t))return;const e=this._getActiveElem(),s=e?c.trigger(e,Rc,{relatedTarget:t}):null;c.trigger(t,Vc,{relatedTarget:e}).defaultPrevented||s&&s.defaultPrevented||(this._deactivate(e,t),this._activate(t,e))}_activate(t,e){if(!t)return;t.classList.add(dt),this._activate(d.getElementFromSelector(t));const s=()=>{if(t.getAttribute("role")!=="tab"){t.classList.add(ke);return}t.removeAttribute("tabindex"),t.setAttribute("aria-selected",!0),this._toggleDropDown(t,!0),c.trigger(t,Hc,{relatedTarget:e})};this._queueCallback(s,t,t.classList.contains(es))}_deactivate(t,e){if(!t)return;t.classList.remove(dt),t.blur(),this._deactivate(d.getElementFromSelector(t));const s=()=>{if(t.getAttribute("role")!=="tab"){t.classList.remove(ke);return}t.setAttribute("aria-selected",!1),t.setAttribute("tabindex","-1"),this._toggleDropDown(t,!1),c.trigger(t,kc,{relatedTarget:e})};this._queueCallback(s,t,t.classList.contains(es))}_keydown(t){if(![Fc,Zn,Kc,Jn,Re,ts].includes(t.key))return;t.stopPropagation(),t.preventDefault();const e=this._getChildren().filter(i=>!et(i));let s;if([Re,ts].includes(t.key))s=e[t.key===Re?0:e.length-1];else{const i=[Zn,Jn].includes(t.key);s=an(e,t.target,i,!0)}s&&(s.focus({preventScroll:!0}),Lt.getOrCreateInstance(s).show())}_getChildren(){return d.find(He,this._parent)}_getActiveElem(){return this._getChildren().find(t=>this._elemIsActive(t))||null}_setInitialAttributes(t,e){this._setAttributeIfNotExists(t,"role","tablist");for(const s of e)this._setInitialAttributesOnChild(s)}_setInitialAttributesOnChild(t){t=this._getInnerElement(t);const e=this._elemIsActive(t),s=this._getOuterElement(t);t.setAttribute("aria-selected",e),s!==t&&this._setAttributeIfNotExists(s,"role","presentation"),e||t.setAttribute("tabindex","-1"),this._setAttributeIfNotExists(t,"role","tab"),this._setInitialAttributesOnTargetPanel(t)}_setInitialAttributesOnTargetPanel(t){const e=d.getElementFromSelector(t);e&&(this._setAttributeIfNotExists(e,"role","tabpanel"),t.id&&this._setAttributeIfNotExists(e,"aria-labelledby",`${t.id}`))}_toggleDropDown(t,e){const s=this._getOuterElement(t);if(!s.classList.contains(Yc))return;const i=(r,o)=>{const a=d.findOne(r,s);a&&a.classList.toggle(o,e)};i(ei,dt),i(Uc,ke),s.setAttribute("aria-expanded",e)}_setAttributeIfNotExists(t,e,s){t.hasAttribute(e)||t.setAttribute(e,s)}_elemIsActive(t){return t.classList.contains(dt)}_getInnerElement(t){return t.matches(He)?t:d.findOne(He,t)}_getOuterElement(t){return t.closest(Gc)||t}static jQueryInterface(t){return this.each(function(){const e=Lt.getOrCreateInstance(this);if(typeof t=="string"){if(e[t]===void 0||t.startsWith("_")||t==="constructor")throw new TypeError(`No method named "${t}"`);e[t]()}})}}c.on(document,Wc,ni,function(n){["A","AREA"].includes(this.tagName)&&n.preventDefault(),!et(this)&&Lt.getOrCreateInstance(this).show()});c.on(window,jc,()=>{for(const n of d.find(Xc))Lt.getOrCreateInstance(n)});B(Lt);const Qc="toast",Zc="bs.toast",rt=`.${Zc}`,Jc=`mouseover${rt}`,tl=`mouseout${rt}`,el=`focusin${rt}`,nl=`focusout${rt}`,sl=`hide${rt}`,il=`hidden${rt}`,rl=`show${rt}`,ol=`shown${rt}`,al="fade",ns="hide",ie="show",re="showing",cl={animation:"boolean",autohide:"boolean",delay:"number"},ll={animation:!0,autohide:!0,delay:5e3};class be extends K{constructor(t,e){super(t,e),this._timeout=null,this._hasMouseInteraction=!1,this._hasKeyboardInteraction=!1,this._setListeners()}static get Default(){return ll}static get DefaultType(){return cl}static get NAME(){return Qc}show(){if(c.trigger(this._element,rl).defaultPrevented)return;this._clearTimeout(),this._config.animation&&this._element.classList.add(al);const e=()=>{this._element.classList.remove(re),c.trigger(this._element,ol),this._maybeScheduleHide()};this._element.classList.remove(ns),Kt(this._element),this._element.classList.add(ie,re),this._queueCallback(e,this._element,this._config.animation)}hide(){if(!this.isShown()||c.trigger(this._element,sl).defaultPrevented)return;const e=()=>{this._element.classList.add(ns),this._element.classList.remove(re,ie),c.trigger(this._element,il)};this._element.classList.add(re),this._queueCallback(e,this._element,this._config.animation)}dispose(){this._clearTimeout(),this.isShown()&&this._element.classList.remove(ie),super.dispose()}isShown(){return this._element.classList.contains(ie)}_maybeScheduleHide(){this._config.autohide&&(this._hasMouseInteraction||this._hasKeyboardInteraction||(this._timeout=setTimeout(()=>{this.hide()},this._config.delay)))}_onInteraction(t,e){switch(t.type){case"mouseover":case"mouseout":{this._hasMouseInteraction=e;break}case"focusin":case"focusout":{this._hasKeyboardInteraction=e;break}}if(e){this._clearTimeout();return}const s=t.relatedTarget;this._element===s||this._element.contains(s)||this._maybeScheduleHide()}_setListeners(){c.on(this._element,Jc,t=>this._onInteraction(t,!0)),c.on(this._element,tl,t=>this._onInteraction(t,!1)),c.on(this._element,el,t=>this._onInteraction(t,!0)),c.on(this._element,nl,t=>this._onInteraction(t,!1))}_clearTimeout(){clearTimeout(this._timeout),this._timeout=null}static jQueryInterface(t){return this.each(function(){const e=be.getOrCreateInstance(this,t);if(typeof t=="string"){if(typeof e[t]>"u")throw new TypeError(`No method named "${t}"`);e[t](this)}})}}me(be);B(be);export{$t as M}; diff --git a/src/main/resources/static/assets/createVueComponent-Bt7iWPgv.js b/src/main/resources/static/assets/createVueComponent-Bt7iWPgv.js new file mode 100644 index 00000000..aba2425a --- /dev/null +++ b/src/main/resources/static/assets/createVueComponent-Bt7iWPgv.js @@ -0,0 +1,11 @@ +import{M as r}from"./index-DU977P1k.js";/** + * @license @tabler/icons-vue v3.22.0 - MIT + * + * This source code is licensed under the MIT license. + * See the LICENSE file in the root directory of this source tree. + */var s={outline:{xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":2,"stroke-linecap":"round","stroke-linejoin":"round"},filled:{xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"currentColor",stroke:"none"}};/** + * @license @tabler/icons-vue v3.22.0 - MIT + * + * This source code is licensed under the MIT license. + * See the LICENSE file in the root directory of this source tree. + */const m=(t,a,f,h)=>({color:o="currentColor",size:l=24,stroke:w=2,title:i,class:g,...c},{attrs:d,slots:n})=>{let e=[...h.map(u=>r(...u)),...n.default?[n.default()]:[]];return i&&(e=[r("title",i),...e]),r("svg",{...s[t],width:l,height:l,...d,class:["tabler-icon",`tabler-icon-${a}`],...t==="filled"?{fill:o}:{"stroke-width":w??s[t]["stroke-width"],stroke:o},...c},e)};export{m as c}; diff --git a/src/main/resources/static/assets/createVueComponent-Czx6MsN9.js b/src/main/resources/static/assets/createVueComponent-Czx6MsN9.js new file mode 100644 index 00000000..f9e7570b --- /dev/null +++ b/src/main/resources/static/assets/createVueComponent-Czx6MsN9.js @@ -0,0 +1,11 @@ +import{M as r}from"./index-8PPGy_cS.js";/** + * @license @tabler/icons-vue v3.22.0 - MIT + * + * This source code is licensed under the MIT license. + * See the LICENSE file in the root directory of this source tree. + */var s={outline:{xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":2,"stroke-linecap":"round","stroke-linejoin":"round"},filled:{xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"currentColor",stroke:"none"}};/** + * @license @tabler/icons-vue v3.22.0 - MIT + * + * This source code is licensed under the MIT license. + * See the LICENSE file in the root directory of this source tree. + */const m=(t,a,f,h)=>({color:o="currentColor",size:l=24,stroke:w=2,title:i,class:g,...c},{attrs:d,slots:n})=>{let e=[...h.map(u=>r(...u)),...n.default?[n.default()]:[]];return i&&(e=[r("title",i),...e]),r("svg",{...s[t],width:l,height:l,...d,class:["tabler-icon",`tabler-icon-${a}`],...t==="filled"?{fill:o}:{"stroke-width":w??s[t]["stroke-width"],stroke:o},...c},e)};export{m as c}; diff --git a/src/main/resources/static/assets/createVueComponent-DNPdC8og.js b/src/main/resources/static/assets/createVueComponent-DNPdC8og.js new file mode 100644 index 00000000..9c998e44 --- /dev/null +++ b/src/main/resources/static/assets/createVueComponent-DNPdC8og.js @@ -0,0 +1,11 @@ +import{M as r}from"./index-BKFNv1Gc.js";/** + * @license @tabler/icons-vue v3.22.0 - MIT + * + * This source code is licensed under the MIT license. + * See the LICENSE file in the root directory of this source tree. + */var s={outline:{xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":2,"stroke-linecap":"round","stroke-linejoin":"round"},filled:{xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"currentColor",stroke:"none"}};/** + * @license @tabler/icons-vue v3.22.0 - MIT + * + * This source code is licensed under the MIT license. + * See the LICENSE file in the root directory of this source tree. + */const m=(t,a,f,h)=>({color:o="currentColor",size:l=24,stroke:w=2,title:i,class:g,...c},{attrs:d,slots:n})=>{let e=[...h.map(u=>r(...u)),...n.default?[n.default()]:[]];return i&&(e=[r("title",i),...e]),r("svg",{...s[t],width:l,height:l,...d,class:["tabler-icon",`tabler-icon-${a}`],...t==="filled"?{fill:o}:{"stroke-width":w??s[t]["stroke-width"],stroke:o},...c},e)};export{m as c}; diff --git a/src/main/resources/static/assets/createVueComponent-l3sgX4hZ.js b/src/main/resources/static/assets/createVueComponent-l3sgX4hZ.js new file mode 100644 index 00000000..c9a7de3f --- /dev/null +++ b/src/main/resources/static/assets/createVueComponent-l3sgX4hZ.js @@ -0,0 +1,11 @@ +import{M as r}from"./index-DKle5_5b.js";/** + * @license @tabler/icons-vue v3.22.0 - MIT + * + * This source code is licensed under the MIT license. + * See the LICENSE file in the root directory of this source tree. + */var s={outline:{xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":2,"stroke-linecap":"round","stroke-linejoin":"round"},filled:{xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"currentColor",stroke:"none"}};/** + * @license @tabler/icons-vue v3.22.0 - MIT + * + * This source code is licensed under the MIT license. + * See the LICENSE file in the root directory of this source tree. + */const m=(t,a,f,h)=>({color:o="currentColor",size:l=24,stroke:w=2,title:i,class:g,...c},{attrs:d,slots:n})=>{let e=[...h.map(u=>r(...u)),...n.default?[n.default()]:[]];return i&&(e=[r("title",i),...e]),r("svg",{...s[t],width:l,height:l,...d,class:["tabler-icon",`tabler-icon-${a}`],...t==="filled"?{fill:o}:{"stroke-width":w??s[t]["stroke-width"],stroke:o},...c},e)};export{m as c}; diff --git a/src/main/resources/static/assets/index-8PPGy_cS.js b/src/main/resources/static/assets/index-8PPGy_cS.js new file mode 100644 index 00000000..ba88c783 --- /dev/null +++ b/src/main/resources/static/assets/index-8PPGy_cS.js @@ -0,0 +1,42 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/OssList-D2HNfA-X.js","assets/IconPlus-CyRAtLeE.js","assets/createVueComponent-Czx6MsN9.js","assets/Tabulator.vue_vue_type_style_index_0_lang-pkMkfUCQ.js","assets/Tabulator-C0-hRjAn.css","assets/request-BD-3QCnG.js","assets/bootstrap.esm-Ceob_0pG.js","assets/YamlGenerate-B7KjN9b_.js","assets/_plugin-vue_export-helper-DlAUqK2U.js","assets/YamlGenerate-DSiHz0eV.css","assets/InstallSoftwareIframe-Bp8k8UuV.js","assets/applicationInstallationForm-B8kAVev5.js","assets/lodash-CprRz5WW.js","assets/softwareCatalog-DfwfQXi9.js","assets/applicationInstallationForm-C-3AdtAK.css","assets/InstallSoftwareIframe-DPwVg-cJ.css","assets/SoftwareCatalog-Bu30dAP1.js","assets/applicationDetailModal-DKOvpn60.js","assets/applicationDetailModal-BfM4XzFr.css","assets/SoftwareCatalog-CwQ6RJcF.css","assets/ApplicationStatus-NBEpiqVW.js","assets/ApplicationStatus-DPixrIJt.css","assets/ApplicationRepository-BtCrZbPI.js","assets/RepositoryList-CehXBmRT.js","assets/repository-CNj60vu0.js","assets/RepositoryDetail-CdOFQayq.js","assets/SoftwareCatalogListTest-D3DG0o_p.js","assets/SoftwareCatalogListTest-DfiSBOQi.css"])))=>i.map(i=>d[i]); +(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const i of document.querySelectorAll('link[rel="modulepreload"]'))s(i);new MutationObserver(i=>{for(const o of i)if(o.type==="childList")for(const a of o.addedNodes)a.tagName==="LINK"&&a.rel==="modulepreload"&&s(a)}).observe(document,{childList:!0,subtree:!0});function n(i){const o={};return i.integrity&&(o.integrity=i.integrity),i.referrerPolicy&&(o.referrerPolicy=i.referrerPolicy),i.crossOrigin==="use-credentials"?o.credentials="include":i.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function s(i){if(i.ep)return;i.ep=!0;const o=n(i);fetch(i.href,o)}})();/** +* @vue/shared v3.5.3 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**//*! #__NO_SIDE_EFFECTS__ */function Ca(e,t){const n=new Set(e.split(","));return s=>n.has(s)}const Me={},$s=[],cn=()=>{},Lm=()=>!1,Ii=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),Sa=e=>e.startsWith("onUpdate:"),Ge=Object.assign,Ta=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},Dm=Object.prototype.hasOwnProperty,Ie=(e,t)=>Dm.call(e,t),ee=Array.isArray,Fs=e=>Ar(e)==="[object Map]",Ws=e=>Ar(e)==="[object Set]",Rc=e=>Ar(e)==="[object Date]",fe=e=>typeof e=="function",qe=e=>typeof e=="string",fn=e=>typeof e=="symbol",$e=e=>e!==null&&typeof e=="object",nf=e=>($e(e)||fe(e))&&fe(e.then)&&fe(e.catch),sf=Object.prototype.toString,Ar=e=>sf.call(e),Nm=e=>Ar(e).slice(8,-1),rf=e=>Ar(e)==="[object Object]",Aa=e=>qe(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,ar=Ca(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Li=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},km=/-(\w)/g,Gt=Li(e=>e.replace(km,(t,n)=>n?n.toUpperCase():"")),Mm=/\B([A-Z])/g,gs=Li(e=>e.replace(Mm,"-$1").toLowerCase()),Di=Li(e=>e.charAt(0).toUpperCase()+e.slice(1)),ui=Li(e=>e?`on${Di(e)}`:""),Bn=(e,t)=>!Object.is(e,t),fi=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:s,value:n})},yi=e=>{const t=parseFloat(e);return isNaN(t)?e:t},$m=e=>{const t=qe(e)?Number(e):NaN;return isNaN(t)?e:t};let Pc;const af=()=>Pc||(Pc=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function Or(e){if(ee(e)){const t={};for(let n=0;n{if(n){const s=n.split(jm);s.length>1&&(t[s[0].trim()]=s[1].trim())}}),t}function Hn(e){let t="";if(qe(e))t=e;else if(ee(e))for(let n=0;nds(n,t))}const cf=e=>!!(e&&e.__v_isRef===!0),xa=e=>qe(e)?e:e==null?"":ee(e)||$e(e)&&(e.toString===sf||!fe(e.toString))?cf(e)?xa(e.value):JSON.stringify(e,uf,2):String(e),uf=(e,t)=>cf(t)?uf(e,t.value):Fs(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[s,i],o)=>(n[Do(s,o)+" =>"]=i,n),{})}:Ws(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>Do(n))}:fn(t)?Do(t):$e(t)&&!ee(t)&&!rf(t)?String(t):t,Do=(e,t="")=>{var n;return fn(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};/** +* @vue/reactivity v3.5.3 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/let mt;class ff{constructor(t=!1){this.detached=t,this._active=!0,this.effects=[],this.cleanups=[],this._isPaused=!1,this.parent=mt,!t&&mt&&(this.index=(mt.scopes||(mt.scopes=[])).push(this)-1)}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,n;if(this.scopes)for(t=0,n=this.scopes.length;t0)return;let e;for(;lr;){let t=lr;for(lr=void 0;t;){const n=t.nextEffect;if(t.nextEffect=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(s){e||(e=s)}t=n}}if(e)throw e}function gf(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function _f(e){let t,n=e.depsTail;for(let s=n;s;s=s.prevDep)s.version===-1?(s===n&&(n=s.prevDep),Ia(s),zm(s)):t=s,s.dep.activeLink=s.prevActiveLink,s.prevActiveLink=void 0;e.deps=t,e.depsTail=n}function Zo(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&bf(t.dep.computed)===!1||t.dep.version!==t.version)return!0;return!!e._dirty}function bf(e){if(e.flags&2)return!1;if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===gr))return;e.globalVersion=gr;const t=e.dep;if(e.flags|=2,t.version>0&&!e.isSSR&&!Zo(e)){e.flags&=-3;return}const n=ke,s=zt;ke=e,zt=!0;try{gf(e);const i=e.fn(e._value);(t.version===0||Bn(i,e._value))&&(e._value=i,t.version++)}catch(i){throw t.version++,i}finally{ke=n,zt=s,_f(e),e.flags&=-3}}function Ia(e){const{dep:t,prevSub:n,nextSub:s}=e;if(n&&(n.nextSub=s,e.prevSub=void 0),s&&(s.prevSub=n,e.nextSub=void 0),t.subs===e&&(t.subs=n),!t.subs&&t.computed){t.computed.flags&=-5;for(let i=t.computed.deps;i;i=i.nextDep)Ia(i)}}function zm(e){const{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}let zt=!0;const yf=[];function Vn(){yf.push(zt),zt=!1}function qn(){const e=yf.pop();zt=e===void 0?!0:e}function Ic(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const n=ke;ke=void 0;try{t()}finally{ke=n}}}let gr=0;class La{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0}track(t){if(!ke||!zt||ke===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==ke)n=this.activeLink={dep:this,sub:ke,version:this.version,nextDep:void 0,prevDep:void 0,nextSub:void 0,prevSub:void 0,prevActiveLink:void 0},ke.deps?(n.prevDep=ke.depsTail,ke.depsTail.nextDep=n,ke.depsTail=n):ke.deps=ke.depsTail=n,ke.flags&4&&vf(n);else if(n.version===-1&&(n.version=this.version,n.nextDep)){const s=n.nextDep;s.prevDep=n.prevDep,n.prevDep&&(n.prevDep.nextDep=s),n.prevDep=ke.depsTail,n.nextDep=void 0,ke.depsTail.nextDep=n,ke.depsTail=n,ke.deps===n&&(ke.deps=s)}return n}trigger(t){this.version++,gr++,this.notify(t)}notify(t){Ra();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()}finally{Pa()}}}function vf(e){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let s=t.deps;s;s=s.nextDep)vf(s)}const n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}const vi=new WeakMap,cs=Symbol(""),ea=Symbol(""),_r=Symbol("");function ot(e,t,n){if(zt&&ke){let s=vi.get(e);s||vi.set(e,s=new Map);let i=s.get(n);i||s.set(n,i=new La),i.track()}}function En(e,t,n,s,i,o){const a=vi.get(e);if(!a){gr++;return}let c=[];if(t==="clear")c=[...a.values()];else{const f=ee(e),p=f&&Aa(n);if(f&&n==="length"){const d=Number(s);a.forEach((m,b)=>{(b==="length"||b===_r||!fn(b)&&b>=d)&&c.push(m)})}else{const d=m=>m&&c.push(m);switch(n!==void 0&&d(a.get(n)),p&&d(a.get(_r)),t){case"add":f?p&&d(a.get("length")):(d(a.get(cs)),Fs(e)&&d(a.get(ea)));break;case"delete":f||(d(a.get(cs)),Fs(e)&&d(a.get(ea)));break;case"set":Fs(e)&&d(a.get(cs));break}}}Ra();for(const f of c)f.trigger();Pa()}function Km(e,t){var n;return(n=vi.get(e))==null?void 0:n.get(t)}function Is(e){const t=Ee(e);return t===e?t:(ot(t,"iterate",_r),Kt(e)?t:t.map(it))}function Ni(e){return ot(e=Ee(e),"iterate",_r),e}const Gm={__proto__:null,[Symbol.iterator](){return ko(this,Symbol.iterator,it)},concat(...e){return Is(this).concat(...e.map(t=>ee(t)?Is(t):t))},entries(){return ko(this,"entries",e=>(e[1]=it(e[1]),e))},every(e,t){return gn(this,"every",e,t,void 0,arguments)},filter(e,t){return gn(this,"filter",e,t,n=>n.map(it),arguments)},find(e,t){return gn(this,"find",e,t,it,arguments)},findIndex(e,t){return gn(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return gn(this,"findLast",e,t,it,arguments)},findLastIndex(e,t){return gn(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return gn(this,"forEach",e,t,void 0,arguments)},includes(...e){return Mo(this,"includes",e)},indexOf(...e){return Mo(this,"indexOf",e)},join(e){return Is(this).join(e)},lastIndexOf(...e){return Mo(this,"lastIndexOf",e)},map(e,t){return gn(this,"map",e,t,void 0,arguments)},pop(){return tr(this,"pop")},push(...e){return tr(this,"push",e)},reduce(e,...t){return Lc(this,"reduce",e,t)},reduceRight(e,...t){return Lc(this,"reduceRight",e,t)},shift(){return tr(this,"shift")},some(e,t){return gn(this,"some",e,t,void 0,arguments)},splice(...e){return tr(this,"splice",e)},toReversed(){return Is(this).toReversed()},toSorted(e){return Is(this).toSorted(e)},toSpliced(...e){return Is(this).toSpliced(...e)},unshift(...e){return tr(this,"unshift",e)},values(){return ko(this,"values",it)}};function ko(e,t,n){const s=Ni(e),i=s[t]();return s!==e&&!Kt(e)&&(i._next=i.next,i.next=()=>{const o=i._next();return o.value&&(o.value=n(o.value)),o}),i}const Jm=Array.prototype;function gn(e,t,n,s,i,o){const a=Ni(e),c=a!==e&&!Kt(e),f=a[t];if(f!==Jm[t]){const m=f.apply(e,o);return c?it(m):m}let p=n;a!==e&&(c?p=function(m,b){return n.call(this,it(m),b,e)}:n.length>2&&(p=function(m,b){return n.call(this,m,b,e)}));const d=f.call(a,p,s);return c&&i?i(d):d}function Lc(e,t,n,s){const i=Ni(e);let o=n;return i!==e&&(Kt(e)?n.length>3&&(o=function(a,c,f){return n.call(this,a,c,f,e)}):o=function(a,c,f){return n.call(this,a,it(c),f,e)}),i[t](o,...s)}function Mo(e,t,n){const s=Ee(e);ot(s,"iterate",_r);const i=s[t](...n);return(i===-1||i===!1)&&Ma(n[0])?(n[0]=Ee(n[0]),s[t](...n)):i}function tr(e,t,n=[]){Vn(),Ra();const s=Ee(e)[t].apply(e,n);return Pa(),qn(),s}const Xm=Ca("__proto__,__v_isRef,__isVue"),wf=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(fn));function Qm(e){fn(e)||(e=String(e));const t=Ee(this);return ot(t,"has",e),t.hasOwnProperty(e)}class Ef{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,s){const i=this._isReadonly,o=this._isShallow;if(n==="__v_isReactive")return!i;if(n==="__v_isReadonly")return i;if(n==="__v_isShallow")return o;if(n==="__v_raw")return s===(i?o?ug:Af:o?Tf:Sf).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(s)?t:void 0;const a=ee(t);if(!i){let f;if(a&&(f=Gm[n]))return f;if(n==="hasOwnProperty")return Qm}const c=Reflect.get(t,n,ze(t)?t:s);return(fn(n)?wf.has(n):Xm(n))||(i||ot(t,"get",n),o)?c:ze(c)?a&&Aa(n)?c:c.value:$e(c)?i?xf(c):xr(c):c}}class Cf extends Ef{constructor(t=!1){super(!1,t)}set(t,n,s,i){let o=t[n];if(!this._isShallow){const f=hs(o);if(!Kt(s)&&!hs(s)&&(o=Ee(o),s=Ee(s)),!ee(t)&&ze(o)&&!ze(s))return f?!1:(o.value=s,!0)}const a=ee(t)&&Aa(n)?Number(n)e,ki=e=>Reflect.getPrototypeOf(e);function si(e,t,n=!1,s=!1){e=e.__v_raw;const i=Ee(e),o=Ee(t);n||(Bn(t,o)&&ot(i,"get",t),ot(i,"get",o));const{has:a}=ki(i),c=s?Da:n?Fa:it;if(a.call(i,t))return c(e.get(t));if(a.call(i,o))return c(e.get(o));e!==i&&e.get(t)}function ri(e,t=!1){const n=this.__v_raw,s=Ee(n),i=Ee(e);return t||(Bn(e,i)&&ot(s,"has",e),ot(s,"has",i)),e===i?n.has(e):n.has(e)||n.has(i)}function ii(e,t=!1){return e=e.__v_raw,!t&&ot(Ee(e),"iterate",cs),Reflect.get(e,"size",e)}function Dc(e,t=!1){!t&&!Kt(e)&&!hs(e)&&(e=Ee(e));const n=Ee(this);return ki(n).has.call(n,e)||(n.add(e),En(n,"add",e,e)),this}function Nc(e,t,n=!1){!n&&!Kt(t)&&!hs(t)&&(t=Ee(t));const s=Ee(this),{has:i,get:o}=ki(s);let a=i.call(s,e);a||(e=Ee(e),a=i.call(s,e));const c=o.call(s,e);return s.set(e,t),a?Bn(t,c)&&En(s,"set",e,t):En(s,"add",e,t),this}function kc(e){const t=Ee(this),{has:n,get:s}=ki(t);let i=n.call(t,e);i||(e=Ee(e),i=n.call(t,e)),s&&s.call(t,e);const o=t.delete(e);return i&&En(t,"delete",e,void 0),o}function Mc(){const e=Ee(this),t=e.size!==0,n=e.clear();return t&&En(e,"clear",void 0,void 0),n}function oi(e,t){return function(s,i){const o=this,a=o.__v_raw,c=Ee(a),f=t?Da:e?Fa:it;return!e&&ot(c,"iterate",cs),a.forEach((p,d)=>s.call(i,f(p),f(d),o))}}function ai(e,t,n){return function(...s){const i=this.__v_raw,o=Ee(i),a=Fs(o),c=e==="entries"||e===Symbol.iterator&&a,f=e==="keys"&&a,p=i[e](...s),d=n?Da:t?Fa:it;return!t&&ot(o,"iterate",f?ea:cs),{next(){const{value:m,done:b}=p.next();return b?{value:m,done:b}:{value:c?[d(m[0]),d(m[1])]:d(m),done:b}},[Symbol.iterator](){return this}}}}function Rn(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function ng(){const e={get(o){return si(this,o)},get size(){return ii(this)},has:ri,add:Dc,set:Nc,delete:kc,clear:Mc,forEach:oi(!1,!1)},t={get(o){return si(this,o,!1,!0)},get size(){return ii(this)},has:ri,add(o){return Dc.call(this,o,!0)},set(o,a){return Nc.call(this,o,a,!0)},delete:kc,clear:Mc,forEach:oi(!1,!0)},n={get(o){return si(this,o,!0)},get size(){return ii(this,!0)},has(o){return ri.call(this,o,!0)},add:Rn("add"),set:Rn("set"),delete:Rn("delete"),clear:Rn("clear"),forEach:oi(!0,!1)},s={get(o){return si(this,o,!0,!0)},get size(){return ii(this,!0)},has(o){return ri.call(this,o,!0)},add:Rn("add"),set:Rn("set"),delete:Rn("delete"),clear:Rn("clear"),forEach:oi(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(o=>{e[o]=ai(o,!1,!1),n[o]=ai(o,!0,!1),t[o]=ai(o,!1,!0),s[o]=ai(o,!0,!0)}),[e,n,t,s]}const[sg,rg,ig,og]=ng();function Na(e,t){const n=t?e?og:ig:e?rg:sg;return(s,i,o)=>i==="__v_isReactive"?!e:i==="__v_isReadonly"?e:i==="__v_raw"?s:Reflect.get(Ie(n,i)&&i in s?n:s,i,o)}const ag={get:Na(!1,!1)},lg={get:Na(!1,!0)},cg={get:Na(!0,!1)};const Sf=new WeakMap,Tf=new WeakMap,Af=new WeakMap,ug=new WeakMap;function fg(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function dg(e){return e.__v_skip||!Object.isExtensible(e)?0:fg(Nm(e))}function xr(e){return hs(e)?e:ka(e,!1,Zm,ag,Sf)}function Of(e){return ka(e,!1,tg,lg,Tf)}function xf(e){return ka(e,!0,eg,cg,Af)}function ka(e,t,n,s,i){if(!$e(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const o=i.get(e);if(o)return o;const a=dg(e);if(a===0)return e;const c=new Proxy(e,a===2?s:n);return i.set(e,c),c}function Fn(e){return hs(e)?Fn(e.__v_raw):!!(e&&e.__v_isReactive)}function hs(e){return!!(e&&e.__v_isReadonly)}function Kt(e){return!!(e&&e.__v_isShallow)}function Ma(e){return e?!!e.__v_raw:!1}function Ee(e){const t=e&&e.__v_raw;return t?Ee(t):e}function $a(e){return Object.isExtensible(e)&&of(e,"__v_skip",!0),e}const it=e=>$e(e)?xr(e):e,Fa=e=>$e(e)?xf(e):e;function ze(e){return e?e.__v_isRef===!0:!1}function ja(e){return Rf(e,!1)}function hg(e){return Rf(e,!0)}function Rf(e,t){return ze(e)?e:new pg(e,t)}class pg{constructor(t,n){this.dep=new La,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=n?t:Ee(t),this._value=n?t:it(t),this.__v_isShallow=n}get value(){return this.dep.track(),this._value}set value(t){const n=this._rawValue,s=this.__v_isShallow||Kt(t)||hs(t);t=s?t:Ee(t),Bn(t,n)&&(this._rawValue=t,this._value=s?t:it(t),this.dep.trigger())}}function jn(e){return ze(e)?e.value:e}const mg={get:(e,t,n)=>t==="__v_raw"?e:jn(Reflect.get(e,t,n)),set:(e,t,n,s)=>{const i=e[t];return ze(i)&&!ze(n)?(i.value=n,!0):Reflect.set(e,t,n,s)}};function Pf(e){return Fn(e)?e:new Proxy(e,mg)}function gg(e){const t=ee(e)?new Array(e.length):{};for(const n in e)t[n]=bg(e,n);return t}class _g{constructor(t,n,s){this._object=t,this._key=n,this._defaultValue=s,this.__v_isRef=!0,this._value=void 0}get value(){const t=this._object[this._key];return this._value=t===void 0?this._defaultValue:t}set value(t){this._object[this._key]=t}get dep(){return Km(Ee(this._object),this._key)}}function bg(e,t,n){const s=e[t];return ze(s)?s:new _g(e,t,n)}class yg{constructor(t,n,s){this.fn=t,this.setter=n,this._value=void 0,this.dep=new La(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=gr-1,this.effect=this,this.__v_isReadonly=!n,this.isSSR=s}notify(){ke!==this&&(this.flags|=16,this.dep.notify())}get value(){const t=this.dep.track();return bf(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function vg(e,t,n=!1){let s,i;return fe(e)?s=e:(s=e.get,i=e.set),new yg(s,i,n)}const li={},wi=new WeakMap;let os;function wg(e,t=!1,n=os){if(n){let s=wi.get(n);s||wi.set(n,s=[]),s.push(e)}}function Eg(e,t,n=Me){const{immediate:s,deep:i,once:o,scheduler:a,augmentJob:c,call:f}=n,p=H=>i?H:Kt(H)||i===!1||i===0?vn(H,1):vn(H);let d,m,b,w,C=!1,P=!1;if(ze(e)?(m=()=>e.value,C=Kt(e)):Fn(e)?(m=()=>p(e),C=!0):ee(e)?(P=!0,C=e.some(H=>Fn(H)||Kt(H)),m=()=>e.map(H=>{if(ze(H))return H.value;if(Fn(H))return p(H);if(fe(H))return f?f(H,2):H()})):fe(e)?t?m=f?()=>f(e,2):e:m=()=>{if(b){Vn();try{b()}finally{qn()}}const H=os;os=d;try{return f?f(e,3,[w]):e(w)}finally{os=H}}:m=cn,t&&i){const H=m,Y=i===!0?1/0:i;m=()=>vn(H(),Y)}const R=hf(),$=()=>{d.stop(),R&&Ta(R.effects,d)};if(o)if(t){const H=t;t=(...Y)=>{H(...Y),$()}}else{const H=m;m=()=>{H(),$()}}let N=P?new Array(e.length).fill(li):li;const B=H=>{if(!(!(d.flags&1)||!d.dirty&&!H))if(t){const Y=d.run();if(i||C||(P?Y.some((ge,le)=>Bn(ge,N[le])):Bn(Y,N))){b&&b();const ge=os;os=d;try{const le=[Y,N===li?void 0:P&&N[0]===li?[]:N,w];f?f(t,3,le):t(...le),N=Y}finally{os=ge}}}else d.run()};return c&&c(B),d=new pf(m),d.scheduler=a?()=>a(B,!1):B,w=H=>wg(H,!1,d),b=d.onStop=()=>{const H=wi.get(d);if(H){if(f)f(H,4);else for(const Y of H)Y();wi.delete(d)}},t?s?B(!0):N=d.run():a?a(B.bind(null,!0),!0):d.run(),$.pause=d.pause.bind(d),$.resume=d.resume.bind(d),$.stop=$,$}function vn(e,t=1/0,n){if(t<=0||!$e(e)||e.__v_skip||(n=n||new Set,n.has(e)))return e;if(n.add(e),t--,ze(e))vn(e.value,t,n);else if(ee(e))for(let s=0;s{vn(s,t,n)});else if(rf(e)){for(const s in e)vn(e[s],t,n);for(const s of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,s)&&vn(e[s],t,n)}return e}/** +* @vue/runtime-core v3.5.3 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/function Rr(e,t,n,s){try{return s?e(...s):e()}catch(i){Mi(i,t,n)}}function Jt(e,t,n,s){if(fe(e)){const i=Rr(e,t,n,s);return i&&nf(i)&&i.catch(o=>{Mi(o,t,n)}),i}if(ee(e)){const i=[];for(let o=0;o>>1,i=gt[s],o=yr(i);o=yr(n)?gt.push(e):gt.splice(Sg(t),0,e),e.flags|=1,Lf()}}function Lf(){!br&&!ta&&(ta=!0,Ba=If.then(Nf))}function Tg(e){ee(e)?js.push(...e):kn&&e.id===-1?kn.splice(Ns+1,0,e):e.flags&1||(js.push(e),e.flags|=1),Lf()}function $c(e,t,n=br?an+1:0){for(;nyr(n)-yr(s));if(js.length=0,kn){kn.push(...t);return}for(kn=t,Ns=0;Nse.id==null?e.flags&2?-1:1/0:e.id;function Nf(e){ta=!1,br=!0;try{for(an=0;an{s._d&&Kc(-1);const o=Ei(t);let a;try{a=e(...i)}finally{Ei(o),s._d&&Kc(1)}return a};return s._n=!0,s._c=!0,s._d=!0,s}function n0(e,t){if(Je===null)return e;const n=Vi(Je),s=e.dirs||(e.dirs=[]);for(let i=0;ie.__isTeleport,Ls=Symbol("_leaveCb"),ci=Symbol("_enterCb");function xg(){const e={isMounted:!1,isLeaving:!1,isUnmounting:!1,leavingVNodes:new Map};return Bf(()=>{e.isMounted=!0}),Uf(()=>{e.isUnmounting=!0}),e}const $t=[Function,Array],Rg={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:$t,onEnter:$t,onAfterEnter:$t,onEnterCancelled:$t,onBeforeLeave:$t,onLeave:$t,onAfterLeave:$t,onLeaveCancelled:$t,onBeforeAppear:$t,onAppear:$t,onAfterAppear:$t,onAppearCancelled:$t};function Pg(e,t){const{leavingVNodes:n}=e;let s=n.get(t.type);return s||(s=Object.create(null),n.set(t.type,s)),s}function na(e,t,n,s,i){const{appear:o,mode:a,persisted:c=!1,onBeforeEnter:f,onEnter:p,onAfterEnter:d,onEnterCancelled:m,onBeforeLeave:b,onLeave:w,onAfterLeave:C,onLeaveCancelled:P,onBeforeAppear:R,onAppear:$,onAfterAppear:N,onAppearCancelled:B}=t,H=String(e.key),Y=Pg(n,e),ge=(q,oe)=>{q&&Jt(q,s,9,oe)},le=(q,oe)=>{const ve=oe[1];ge(q,oe),ee(q)?q.every(G=>G.length<=1)&&ve():q.length<=1&&ve()},te={mode:a,persisted:c,beforeEnter(q){let oe=f;if(!n.isMounted)if(o)oe=R||f;else return;q[Ls]&&q[Ls](!0);const ve=Y[H];ve&&ks(e,ve)&&ve.el[Ls]&&ve.el[Ls](),ge(oe,[q])},enter(q){let oe=p,ve=d,G=m;if(!n.isMounted)if(o)oe=$||p,ve=N||d,G=B||m;else return;let be=!1;const He=q[ci]=st=>{be||(be=!0,st?ge(G,[q]):ge(ve,[q]),te.delayedLeave&&te.delayedLeave(),q[ci]=void 0)};oe?le(oe,[q,He]):He()},leave(q,oe){const ve=String(e.key);if(q[ci]&&q[ci](!0),n.isUnmounting)return oe();ge(b,[q]);let G=!1;const be=q[Ls]=He=>{G||(G=!0,oe(),He?ge(P,[q]):ge(C,[q]),q[Ls]=void 0,Y[ve]===e&&delete Y[ve])};Y[ve]=e,w?le(w,[q,be]):be()},clone(q){return na(q,t,n,s)}};return te}function vr(e,t){e.shapeFlag&6&&e.component?(e.transition=t,vr(e.component.subTree,t)):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function Mf(e,t=!1,n){let s=[],i=0;for(let o=0;o1)for(let o=0;osa(C,t&&(ee(t)?t[P]:t),n,s,i));return}if(Bs(s)&&!i)return;const o=s.shapeFlag&4?Vi(s.component):s.el,a=i?null:o,{i:c,r:f}=e,p=t&&t.r,d=c.refs===Me?c.refs={}:c.refs,m=c.setupState,b=Ee(m),w=m===Me?()=>!1:C=>Ie(b,C);if(p!=null&&p!==f&&(qe(p)?(d[p]=null,w(p)&&(m[p]=null)):ze(p)&&(p.value=null)),fe(f))Rr(f,c,12,[a,d]);else{const C=qe(f),P=ze(f);if(C||P){const R=()=>{if(e.f){const $=C?w(f)?m[f]:d[f]:f.value;i?ee($)&&Ta($,o):ee($)?$.includes(o)||$.push(o):C?(d[f]=[o],w(f)&&(m[f]=d[f])):(f.value=[o],e.k&&(d[e.k]=f.value))}else C?(d[f]=a,w(f)&&(m[f]=a)):P&&(f.value=a,e.k&&(d[e.k]=a))};a?(R.id=-1,St(R,n)):R()}}}const Bs=e=>!!e.type.__asyncLoader,Ff=e=>e.type.__isKeepAlive;function Ig(e,t){jf(e,"a",t)}function Lg(e,t){jf(e,"da",t)}function jf(e,t,n=Ze){const s=e.__wdc||(e.__wdc=()=>{let i=n;for(;i;){if(i.isDeactivated)return;i=i.parent}return e()});if($i(t,s,n),n){let i=n.parent;for(;i&&i.parent;)Ff(i.parent.vnode)&&Dg(s,t,n,i),i=i.parent}}function Dg(e,t,n,s){const i=$i(t,e,s,!0);Vf(()=>{Ta(s[t],i)},n)}function $i(e,t,n=Ze,s=!1){if(n){const i=n[e]||(n[e]=[]),o=t.__weh||(t.__weh=(...a)=>{Vn();const c=Lr(n),f=Jt(t,n,e,a);return c(),qn(),f});return s?i.unshift(o):i.push(o),o}}const Tn=e=>(t,n=Ze)=>{(!Ui||e==="sp")&&$i(e,(...s)=>t(...s),n)},Ng=Tn("bm"),Bf=Tn("m"),kg=Tn("bu"),Hf=Tn("u"),Uf=Tn("bum"),Vf=Tn("um"),Mg=Tn("sp"),$g=Tn("rtg"),Fg=Tn("rtc");function jg(e,t=Ze){$i("ec",e,t)}const qf="components";function cr(e,t){return zf(qf,e,!0,t)||e}const Wf=Symbol.for("v-ndc");function Ua(e){return qe(e)?zf(qf,e,!1)||e:e||Wf}function zf(e,t,n=!0,s=!1){const i=Je||Ze;if(i){const o=i.type;{const c=O_(o,!1);if(c&&(c===t||c===Gt(t)||c===Di(Gt(t))))return o}const a=Fc(i[e]||o[e],t)||Fc(i.appContext[e],t);return!a&&s?o:a}}function Fc(e,t){return e&&(e[t]||e[Gt(t)]||e[Di(Gt(t))])}function jc(e,t,n,s){let i;const o=n,a=ee(e);if(a||qe(e)){const c=a&&Fn(e);c&&(e=Ni(e)),i=new Array(e.length);for(let f=0,p=e.length;ft(c,f,void 0,o));else{const c=Object.keys(e);i=new Array(c.length);for(let f=0,p=c.length;fSi(t)?!(t.type===Sn||t.type===tt&&!Kf(t.children)):!0)?e:null}function Hg(e,t){const n={};for(const s in e)n[ui(s)]=e[s];return n}const ra=e=>e?pd(e)?Vi(e):ra(e.parent):null,ur=Ge(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>ra(e.parent),$root:e=>ra(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>Va(e),$forceUpdate:e=>e.f||(e.f=()=>{Ha(e.update)}),$nextTick:e=>e.n||(e.n=Pr.bind(e.proxy)),$watch:e=>c_.bind(e)}),$o=(e,t)=>e!==Me&&!e.__isScriptSetup&&Ie(e,t),Ug={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:s,data:i,props:o,accessCache:a,type:c,appContext:f}=e;let p;if(t[0]!=="$"){const w=a[t];if(w!==void 0)switch(w){case 1:return s[t];case 2:return i[t];case 4:return n[t];case 3:return o[t]}else{if($o(s,t))return a[t]=1,s[t];if(i!==Me&&Ie(i,t))return a[t]=2,i[t];if((p=e.propsOptions[0])&&Ie(p,t))return a[t]=3,o[t];if(n!==Me&&Ie(n,t))return a[t]=4,n[t];ia&&(a[t]=0)}}const d=ur[t];let m,b;if(d)return t==="$attrs"&&ot(e.attrs,"get",""),d(e);if((m=c.__cssModules)&&(m=m[t]))return m;if(n!==Me&&Ie(n,t))return a[t]=4,n[t];if(b=f.config.globalProperties,Ie(b,t))return b[t]},set({_:e},t,n){const{data:s,setupState:i,ctx:o}=e;return $o(i,t)?(i[t]=n,!0):s!==Me&&Ie(s,t)?(s[t]=n,!0):Ie(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(o[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:s,appContext:i,propsOptions:o}},a){let c;return!!n[a]||e!==Me&&Ie(e,a)||$o(t,a)||(c=o[0])&&Ie(c,a)||Ie(s,a)||Ie(ur,a)||Ie(i.config.globalProperties,a)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:Ie(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function Bc(e){return ee(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let ia=!0;function Vg(e){const t=Va(e),n=e.proxy,s=e.ctx;ia=!1,t.beforeCreate&&Hc(t.beforeCreate,e,"bc");const{data:i,computed:o,methods:a,watch:c,provide:f,inject:p,created:d,beforeMount:m,mounted:b,beforeUpdate:w,updated:C,activated:P,deactivated:R,beforeDestroy:$,beforeUnmount:N,destroyed:B,unmounted:H,render:Y,renderTracked:ge,renderTriggered:le,errorCaptured:te,serverPrefetch:q,expose:oe,inheritAttrs:ve,components:G,directives:be,filters:He}=t;if(p&&qg(p,s,null),a)for(const ae in a){const Se=a[ae];fe(Se)&&(s[ae]=Se.bind(n))}if(i){const ae=i.call(n,n);$e(ae)&&(e.data=xr(ae))}if(ia=!0,o)for(const ae in o){const Se=o[ae],Pt=fe(Se)?Se.bind(n,n):fe(Se.get)?Se.get.bind(n,n):cn,I=!fe(Se)&&fe(Se.set)?Se.set.bind(n):cn,_t=Ft({get:Pt,set:I});Object.defineProperty(s,ae,{enumerable:!0,configurable:!0,get:()=>_t.value,set:et=>_t.value=et})}if(c)for(const ae in c)Gf(c[ae],s,n,ae);if(f){const ae=fe(f)?f.call(n):f;Reflect.ownKeys(ae).forEach(Se=>{di(Se,ae[Se])})}d&&Hc(d,e,"c");function Oe(ae,Se){ee(Se)?Se.forEach(Pt=>ae(Pt.bind(n))):Se&&ae(Se.bind(n))}if(Oe(Ng,m),Oe(Bf,b),Oe(kg,w),Oe(Hf,C),Oe(Ig,P),Oe(Lg,R),Oe(jg,te),Oe(Fg,ge),Oe($g,le),Oe(Uf,N),Oe(Vf,H),Oe(Mg,q),ee(oe))if(oe.length){const ae=e.exposed||(e.exposed={});oe.forEach(Se=>{Object.defineProperty(ae,Se,{get:()=>n[Se],set:Pt=>n[Se]=Pt})})}else e.exposed||(e.exposed={});Y&&e.render===cn&&(e.render=Y),ve!=null&&(e.inheritAttrs=ve),G&&(e.components=G),be&&(e.directives=be),q&&$f(e)}function qg(e,t,n=cn){ee(e)&&(e=oa(e));for(const s in e){const i=e[s];let o;$e(i)?"default"in i?o=xt(i.from||s,i.default,!0):o=xt(i.from||s):o=xt(i),ze(o)?Object.defineProperty(t,s,{enumerable:!0,configurable:!0,get:()=>o.value,set:a=>o.value=a}):t[s]=o}}function Hc(e,t,n){Jt(ee(e)?e.map(s=>s.bind(t.proxy)):e.bind(t.proxy),t,n)}function Gf(e,t,n,s){let i=s.includes(".")?ld(n,s):()=>n[s];if(qe(e)){const o=t[e];fe(o)&&fr(i,o)}else if(fe(e))fr(i,e.bind(n));else if($e(e))if(ee(e))e.forEach(o=>Gf(o,t,n,s));else{const o=fe(e.handler)?e.handler.bind(n):t[e.handler];fe(o)&&fr(i,o,e)}}function Va(e){const t=e.type,{mixins:n,extends:s}=t,{mixins:i,optionsCache:o,config:{optionMergeStrategies:a}}=e.appContext,c=o.get(t);let f;return c?f=c:!i.length&&!n&&!s?f=t:(f={},i.length&&i.forEach(p=>Ci(f,p,a,!0)),Ci(f,t,a)),$e(t)&&o.set(t,f),f}function Ci(e,t,n,s=!1){const{mixins:i,extends:o}=t;o&&Ci(e,o,n,!0),i&&i.forEach(a=>Ci(e,a,n,!0));for(const a in t)if(!(s&&a==="expose")){const c=Wg[a]||n&&n[a];e[a]=c?c(e[a],t[a]):t[a]}return e}const Wg={data:Uc,props:Vc,emits:Vc,methods:or,computed:or,beforeCreate:pt,created:pt,beforeMount:pt,mounted:pt,beforeUpdate:pt,updated:pt,beforeDestroy:pt,beforeUnmount:pt,destroyed:pt,unmounted:pt,activated:pt,deactivated:pt,errorCaptured:pt,serverPrefetch:pt,components:or,directives:or,watch:Kg,provide:Uc,inject:zg};function Uc(e,t){return t?e?function(){return Ge(fe(e)?e.call(this,this):e,fe(t)?t.call(this,this):t)}:t:e}function zg(e,t){return or(oa(e),oa(t))}function oa(e){if(ee(e)){const t={};for(let n=0;n1)return n&&fe(t)?t.call(s&&s.proxy):t}}function Xg(){return!!(Ze||Je||us)}const Xf={},Qf=()=>Object.create(Xf),Yf=e=>Object.getPrototypeOf(e)===Xf;function Qg(e,t,n,s=!1){const i={},o=Qf();e.propsDefaults=Object.create(null),Zf(e,t,i,o);for(const a in e.propsOptions[0])a in i||(i[a]=void 0);n?e.props=s?i:Of(i):e.type.props?e.props=i:e.props=o,e.attrs=o}function Yg(e,t,n,s){const{props:i,attrs:o,vnode:{patchFlag:a}}=e,c=Ee(i),[f]=e.propsOptions;let p=!1;if((s||a>0)&&!(a&16)){if(a&8){const d=e.vnode.dynamicProps;for(let m=0;m{f=!0;const[b,w]=ed(m,t,!0);Ge(a,b),w&&c.push(...w)};!n&&t.mixins.length&&t.mixins.forEach(d),e.extends&&d(e.extends),e.mixins&&e.mixins.forEach(d)}if(!o&&!f)return $e(e)&&s.set(e,$s),$s;if(ee(o))for(let d=0;de[0]==="_"||e==="$stable",qa=e=>ee(e)?e.map(ln):[ln(e)],e_=(e,t,n)=>{if(t._n)return t;const s=Ir((...i)=>qa(t(...i)),n);return s._c=!1,s},nd=(e,t,n)=>{const s=e._ctx;for(const i in e){if(td(i))continue;const o=e[i];if(fe(o))t[i]=e_(i,o,s);else if(o!=null){const a=qa(o);t[i]=()=>a}}},sd=(e,t)=>{const n=qa(t);e.slots.default=()=>n},rd=(e,t,n)=>{for(const s in t)(n||s!=="_")&&(e[s]=t[s])},t_=(e,t,n)=>{const s=e.slots=Qf();if(e.vnode.shapeFlag&32){const i=t._;i?(rd(s,t,n),n&&of(s,"_",i,!0)):nd(t,s)}else t&&sd(e,t)},n_=(e,t,n)=>{const{vnode:s,slots:i}=e;let o=!0,a=Me;if(s.shapeFlag&32){const c=t._;c?n&&c===1?o=!1:rd(i,t,n):(o=!t.$stable,nd(t,i)),a=t}else t&&(sd(e,t),a={default:1});if(o)for(const c in i)!td(c)&&a[c]==null&&delete i[c]},St=g_;function s_(e){return r_(e)}function r_(e,t){const n=af();n.__VUE__=!0;const{insert:s,remove:i,patchProp:o,createElement:a,createText:c,createComment:f,setText:p,setElementText:d,parentNode:m,nextSibling:b,setScopeId:w=cn,insertStaticContent:C}=e,P=(g,_,E,D=null,O=null,k=null,W=void 0,U=null,F=!!_.dynamicChildren)=>{if(g===_)return;g&&!ks(g,_)&&(D=x(g),et(g,O,k,!0),g=null),_.patchFlag===-2&&(F=!1,_.dynamicChildren=null);const{type:M,ref:ne,shapeFlag:z}=_;switch(M){case ji:R(g,_,E,D);break;case Sn:$(g,_,E,D);break;case hi:g==null&&N(_,E,D,W);break;case tt:G(g,_,E,D,O,k,W,U,F);break;default:z&1?Y(g,_,E,D,O,k,W,U,F):z&6?be(g,_,E,D,O,k,W,U,F):(z&64||z&128)&&M.process(g,_,E,D,O,k,W,U,F,Z)}ne!=null&&O&&sa(ne,g&&g.ref,k,_||g,!_)},R=(g,_,E,D)=>{if(g==null)s(_.el=c(_.children),E,D);else{const O=_.el=g.el;_.children!==g.children&&p(O,_.children)}},$=(g,_,E,D)=>{g==null?s(_.el=f(_.children||""),E,D):_.el=g.el},N=(g,_,E,D)=>{[g.el,g.anchor]=C(g.children,_,E,D,g.el,g.anchor)},B=({el:g,anchor:_},E,D)=>{let O;for(;g&&g!==_;)O=b(g),s(g,E,D),g=O;s(_,E,D)},H=({el:g,anchor:_})=>{let E;for(;g&&g!==_;)E=b(g),i(g),g=E;i(_)},Y=(g,_,E,D,O,k,W,U,F)=>{_.type==="svg"?W="svg":_.type==="math"&&(W="mathml"),g==null?ge(_,E,D,O,k,W,U,F):q(g,_,O,k,W,U,F)},ge=(g,_,E,D,O,k,W,U)=>{let F,M;const{props:ne,shapeFlag:z,transition:Q,dirs:re}=g;if(F=g.el=a(g.type,k,ne&&ne.is,ne),z&8?d(F,g.children):z&16&&te(g.children,F,null,D,O,Fo(g,k),W,U),re&&ss(g,null,D,"created"),le(F,g,g.scopeId,W,D),ne){for(const Ce in ne)Ce!=="value"&&!ar(Ce)&&o(F,Ce,null,ne[Ce],k,D);"value"in ne&&o(F,"value",null,ne.value,k),(M=ne.onVnodeBeforeMount)&&rn(M,D,g)}re&&ss(g,null,D,"beforeMount");const pe=i_(O,Q);pe&&Q.beforeEnter(F),s(F,_,E),((M=ne&&ne.onVnodeMounted)||pe||re)&&St(()=>{M&&rn(M,D,g),pe&&Q.enter(F),re&&ss(g,null,D,"mounted")},O)},le=(g,_,E,D,O)=>{if(E&&w(g,E),D)for(let k=0;k{for(let M=F;M{const U=_.el=g.el;let{patchFlag:F,dynamicChildren:M,dirs:ne}=_;F|=g.patchFlag&16;const z=g.props||Me,Q=_.props||Me;let re;if(E&&rs(E,!1),(re=Q.onVnodeBeforeUpdate)&&rn(re,E,_,g),ne&&ss(_,g,E,"beforeUpdate"),E&&rs(E,!0),(z.innerHTML&&Q.innerHTML==null||z.textContent&&Q.textContent==null)&&d(U,""),M?oe(g.dynamicChildren,M,U,E,D,Fo(_,O),k):W||Se(g,_,U,null,E,D,Fo(_,O),k,!1),F>0){if(F&16)ve(U,z,Q,E,O);else if(F&2&&z.class!==Q.class&&o(U,"class",null,Q.class,O),F&4&&o(U,"style",z.style,Q.style,O),F&8){const pe=_.dynamicProps;for(let Ce=0;Ce{re&&rn(re,E,_,g),ne&&ss(_,g,E,"updated")},D)},oe=(g,_,E,D,O,k,W)=>{for(let U=0;U<_.length;U++){const F=g[U],M=_[U],ne=F.el&&(F.type===tt||!ks(F,M)||F.shapeFlag&70)?m(F.el):E;P(F,M,ne,null,D,O,k,W,!0)}},ve=(g,_,E,D,O)=>{if(_!==E){if(_!==Me)for(const k in _)!ar(k)&&!(k in E)&&o(g,k,_[k],null,O,D);for(const k in E){if(ar(k))continue;const W=E[k],U=_[k];W!==U&&k!=="value"&&o(g,k,U,W,O,D)}"value"in E&&o(g,"value",_.value,E.value,O)}},G=(g,_,E,D,O,k,W,U,F)=>{const M=_.el=g?g.el:c(""),ne=_.anchor=g?g.anchor:c("");let{patchFlag:z,dynamicChildren:Q,slotScopeIds:re}=_;re&&(U=U?U.concat(re):re),g==null?(s(M,E,D),s(ne,E,D),te(_.children||[],E,ne,O,k,W,U,F)):z>0&&z&64&&Q&&g.dynamicChildren?(oe(g.dynamicChildren,Q,E,O,k,W,U),(_.key!=null||O&&_===O.subTree)&&id(g,_,!0)):Se(g,_,E,ne,O,k,W,U,F)},be=(g,_,E,D,O,k,W,U,F)=>{_.slotScopeIds=U,g==null?_.shapeFlag&512?O.ctx.activate(_,E,D,W,F):He(_,E,D,O,k,W,F):st(g,_,F)},He=(g,_,E,D,O,k,W)=>{const U=g.component=E_(g,D,O);if(Ff(g)&&(U.ctx.renderer=Z),C_(U,!1,W),U.asyncDep){if(O&&O.registerDep(U,Oe,W),!g.el){const F=U.subTree=nt(Sn);$(null,F,_,E)}}else Oe(U,g,_,E,O,k,W)},st=(g,_,E)=>{const D=_.component=g.component;if(p_(g,_,E))if(D.asyncDep&&!D.asyncResolved){ae(D,_,E);return}else D.next=_,D.update();else _.el=g.el,D.vnode=_},Oe=(g,_,E,D,O,k,W)=>{const U=()=>{if(g.isMounted){let{next:z,bu:Q,u:re,parent:pe,vnode:Ce}=g;{const lt=od(g);if(lt){z&&(z.el=Ce.el,ae(g,z,W)),lt.asyncDep.then(()=>{g.isUnmounted||U()});return}}let ye=z,Xe;rs(g,!1),z?(z.el=Ce.el,ae(g,z,W)):z=Ce,Q&&fi(Q),(Xe=z.props&&z.props.onVnodeBeforeUpdate)&&rn(Xe,pe,z,Ce),rs(g,!0);const Qe=jo(g),at=g.subTree;g.subTree=Qe,P(at,Qe,m(at.el),x(at),g,O,k),z.el=Qe.el,ye===null&&m_(g,Qe.el),re&&St(re,O),(Xe=z.props&&z.props.onVnodeUpdated)&&St(()=>rn(Xe,pe,z,Ce),O)}else{let z;const{el:Q,props:re}=_,{bm:pe,m:Ce,parent:ye,root:Xe,type:Qe}=g,at=Bs(_);if(rs(g,!1),pe&&fi(pe),!at&&(z=re&&re.onVnodeBeforeMount)&&rn(z,ye,_),rs(g,!0),Q&&je){const lt=()=>{g.subTree=jo(g),je(Q,g.subTree,g,O,null)};at&&Qe.__asyncHydrate?Qe.__asyncHydrate(Q,g,lt):lt()}else{Xe.ce&&Xe.ce._injectChildStyle(Qe);const lt=g.subTree=jo(g);P(null,lt,E,D,g,O,k),_.el=lt.el}if(Ce&&St(Ce,O),!at&&(z=re&&re.onVnodeMounted)){const lt=_;St(()=>rn(z,ye,lt),O)}(_.shapeFlag&256||ye&&Bs(ye.vnode)&&ye.vnode.shapeFlag&256)&&g.a&&St(g.a,O),g.isMounted=!0,_=E=D=null}};g.scope.on();const F=g.effect=new pf(U);g.scope.off();const M=g.update=F.run.bind(F),ne=g.job=F.runIfDirty.bind(F);ne.i=g,ne.id=g.uid,F.scheduler=()=>Ha(ne),rs(g,!0),M()},ae=(g,_,E)=>{_.component=g;const D=g.vnode.props;g.vnode=_,g.next=null,Yg(g,_.props,D,E),n_(g,_.children,E),Vn(),$c(g),qn()},Se=(g,_,E,D,O,k,W,U,F=!1)=>{const M=g&&g.children,ne=g?g.shapeFlag:0,z=_.children,{patchFlag:Q,shapeFlag:re}=_;if(Q>0){if(Q&128){I(M,z,E,D,O,k,W,U,F);return}else if(Q&256){Pt(M,z,E,D,O,k,W,U,F);return}}re&8?(ne&16&&Be(M,O,k),z!==M&&d(E,z)):ne&16?re&16?I(M,z,E,D,O,k,W,U,F):Be(M,O,k,!0):(ne&8&&d(E,""),re&16&&te(z,E,D,O,k,W,U,F))},Pt=(g,_,E,D,O,k,W,U,F)=>{g=g||$s,_=_||$s;const M=g.length,ne=_.length,z=Math.min(M,ne);let Q;for(Q=0;Qne?Be(g,O,k,!0,!1,z):te(_,E,D,O,k,W,U,F,z)},I=(g,_,E,D,O,k,W,U,F)=>{let M=0;const ne=_.length;let z=g.length-1,Q=ne-1;for(;M<=z&&M<=Q;){const re=g[M],pe=_[M]=F?Mn(_[M]):ln(_[M]);if(ks(re,pe))P(re,pe,E,null,O,k,W,U,F);else break;M++}for(;M<=z&&M<=Q;){const re=g[z],pe=_[Q]=F?Mn(_[Q]):ln(_[Q]);if(ks(re,pe))P(re,pe,E,null,O,k,W,U,F);else break;z--,Q--}if(M>z){if(M<=Q){const re=Q+1,pe=reQ)for(;M<=z;)et(g[M],O,k,!0),M++;else{const re=M,pe=M,Ce=new Map;for(M=pe;M<=Q;M++){const ct=_[M]=F?Mn(_[M]):ln(_[M]);ct.key!=null&&Ce.set(ct.key,M)}let ye,Xe=0;const Qe=Q-pe+1;let at=!1,lt=0;const Wn=new Array(Qe);for(M=0;M=Qe){et(ct,O,k,!0);continue}let It;if(ct.key!=null)It=Ce.get(ct.key);else for(ye=pe;ye<=Q;ye++)if(Wn[ye-pe]===0&&ks(ct,_[ye])){It=ye;break}It===void 0?et(ct,O,k,!0):(Wn[It-pe]=M+1,It>=lt?lt=It:at=!0,P(ct,_[It],E,null,O,k,W,U,F),Xe++)}const $r=at?o_(Wn):$s;for(ye=$r.length-1,M=Qe-1;M>=0;M--){const ct=pe+M,It=_[ct],Fr=ct+1{const{el:k,type:W,transition:U,children:F,shapeFlag:M}=g;if(M&6){_t(g.component.subTree,_,E,D);return}if(M&128){g.suspense.move(_,E,D);return}if(M&64){W.move(g,_,E,Z);return}if(W===tt){s(k,_,E);for(let z=0;zU.enter(k),O);else{const{leave:z,delayLeave:Q,afterLeave:re}=U,pe=()=>s(k,_,E),Ce=()=>{z(k,()=>{pe(),re&&re()})};Q?Q(k,pe,Ce):Ce()}else s(k,_,E)},et=(g,_,E,D=!1,O=!1)=>{const{type:k,props:W,ref:U,children:F,dynamicChildren:M,shapeFlag:ne,patchFlag:z,dirs:Q,cacheIndex:re}=g;if(z===-2&&(O=!1),U!=null&&sa(U,null,E,g,!0),re!=null&&(_.renderCache[re]=void 0),ne&256){_.ctx.deactivate(g);return}const pe=ne&1&&Q,Ce=!Bs(g);let ye;if(Ce&&(ye=W&&W.onVnodeBeforeUnmount)&&rn(ye,_,g),ne&6)Zt(g.component,E,D);else{if(ne&128){g.suspense.unmount(E,D);return}pe&&ss(g,null,_,"beforeUnmount"),ne&64?g.type.remove(g,_,E,Z,D):M&&!M.hasOnce&&(k!==tt||z>0&&z&64)?Be(M,_,E,!1,!0):(k===tt&&z&384||!O&&ne&16)&&Be(F,_,E),D&&Yt(g)}(Ce&&(ye=W&&W.onVnodeUnmounted)||pe)&&St(()=>{ye&&rn(ye,_,g),pe&&ss(g,null,_,"unmounted")},E)},Yt=g=>{const{type:_,el:E,anchor:D,transition:O}=g;if(_===tt){rt(E,D);return}if(_===hi){H(g);return}const k=()=>{i(E),O&&!O.persisted&&O.afterLeave&&O.afterLeave()};if(g.shapeFlag&1&&O&&!O.persisted){const{leave:W,delayLeave:U}=O,F=()=>W(E,k);U?U(g.el,k,F):F()}else k()},rt=(g,_)=>{let E;for(;g!==_;)E=b(g),i(g),g=E;i(_)},Zt=(g,_,E)=>{const{bum:D,scope:O,job:k,subTree:W,um:U,m:F,a:M}=g;Wc(F),Wc(M),D&&fi(D),O.stop(),k&&(k.flags|=8,et(W,g,_,E)),U&&St(U,_),St(()=>{g.isUnmounted=!0},_),_&&_.pendingBranch&&!_.isUnmounted&&g.asyncDep&&!g.asyncResolved&&g.suspenseId===_.pendingId&&(_.deps--,_.deps===0&&_.resolve())},Be=(g,_,E,D=!1,O=!1,k=0)=>{for(let W=k;W{if(g.shapeFlag&6)return x(g.component.subTree);if(g.shapeFlag&128)return g.suspense.next();const _=b(g.anchor||g.el),E=_&&_[Ag];return E?b(E):_};let A=!1;const V=(g,_,E)=>{g==null?_._vnode&&et(_._vnode,null,null,!0):P(_._vnode||null,g,_,null,null,null,E),_._vnode=g,A||(A=!0,$c(),Df(),A=!1)},Z={p:P,um:et,m:_t,r:Yt,mt:He,mc:te,pc:Se,pbc:oe,n:x,o:e};let Te,je;return{render:V,hydrate:Te,createApp:Jg(V,Te)}}function Fo({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function rs({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function i_(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function id(e,t,n=!1){const s=e.children,i=t.children;if(ee(s)&&ee(i))for(let o=0;o>1,e[n[c]]0&&(t[s]=n[o-1]),n[o]=s)}}for(o=n.length,a=n[o-1];o-- >0;)n[o]=a,a=t[a];return n}function od(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:od(t)}function Wc(e){if(e)for(let t=0;txt(a_);function fr(e,t,n){return ad(e,t,n)}function ad(e,t,n=Me){const{immediate:s,deep:i,flush:o,once:a}=n,c=Ge({},n);let f;if(Ui)if(o==="sync"){const b=l_();f=b.__watcherHandles||(b.__watcherHandles=[])}else if(!t||s)c.once=!0;else return{stop:cn,resume:cn,pause:cn};const p=Ze;c.call=(b,w,C)=>Jt(b,p,w,C);let d=!1;o==="post"?c.scheduler=b=>{St(b,p&&p.suspense)}:o!=="sync"&&(d=!0,c.scheduler=(b,w)=>{w?b():Ha(b)}),c.augmentJob=b=>{t&&(b.flags|=4),d&&(b.flags|=2,p&&(b.id=p.uid,b.i=p))};const m=Eg(e,t,c);return f&&f.push(m),m}function c_(e,t,n){const s=this.proxy,i=qe(e)?e.includes(".")?ld(s,e):()=>s[e]:e.bind(s,s);let o;fe(t)?o=t:(o=t.handler,n=t);const a=Lr(this),c=ad(i,o.bind(s),n);return a(),c}function ld(e,t){const n=t.split(".");return()=>{let s=e;for(let i=0;it==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${Gt(t)}Modifiers`]||e[`${gs(t)}Modifiers`];function f_(e,t,...n){if(e.isUnmounted)return;const s=e.vnode.props||Me;let i=n;const o=t.startsWith("update:"),a=o&&u_(s,t.slice(7));a&&(a.trim&&(i=n.map(d=>qe(d)?d.trim():d)),a.number&&(i=n.map(yi)));let c,f=s[c=ui(t)]||s[c=ui(Gt(t))];!f&&o&&(f=s[c=ui(gs(t))]),f&&Jt(f,e,6,i);const p=s[c+"Once"];if(p){if(!e.emitted)e.emitted={};else if(e.emitted[c])return;e.emitted[c]=!0,Jt(p,e,6,i)}}function cd(e,t,n=!1){const s=t.emitsCache,i=s.get(e);if(i!==void 0)return i;const o=e.emits;let a={},c=!1;if(!fe(e)){const f=p=>{const d=cd(p,t,!0);d&&(c=!0,Ge(a,d))};!n&&t.mixins.length&&t.mixins.forEach(f),e.extends&&f(e.extends),e.mixins&&e.mixins.forEach(f)}return!o&&!c?($e(e)&&s.set(e,null),null):(ee(o)?o.forEach(f=>a[f]=null):Ge(a,o),$e(e)&&s.set(e,a),a)}function Fi(e,t){return!e||!Ii(t)?!1:(t=t.slice(2).replace(/Once$/,""),Ie(e,t[0].toLowerCase()+t.slice(1))||Ie(e,gs(t))||Ie(e,t))}function jo(e){const{type:t,vnode:n,proxy:s,withProxy:i,propsOptions:[o],slots:a,attrs:c,emit:f,render:p,renderCache:d,props:m,data:b,setupState:w,ctx:C,inheritAttrs:P}=e,R=Ei(e);let $,N;try{if(n.shapeFlag&4){const H=i||s,Y=H;$=ln(p.call(Y,H,d,m,w,b,C)),N=c}else{const H=t;$=ln(H.length>1?H(m,{attrs:c,slots:a,emit:f}):H(m,null)),N=t.props?c:d_(c)}}catch(H){dr.length=0,Mi(H,e,1),$=nt(Sn)}let B=$;if(N&&P!==!1){const H=Object.keys(N),{shapeFlag:Y}=B;H.length&&Y&7&&(o&&H.some(Sa)&&(N=h_(N,o)),B=ps(B,N,!1,!0))}return n.dirs&&(B=ps(B,null,!1,!0),B.dirs=B.dirs?B.dirs.concat(n.dirs):n.dirs),n.transition&&vr(B,n.transition),$=B,Ei(R),$}const d_=e=>{let t;for(const n in e)(n==="class"||n==="style"||Ii(n))&&((t||(t={}))[n]=e[n]);return t},h_=(e,t)=>{const n={};for(const s in e)(!Sa(s)||!(s.slice(9)in t))&&(n[s]=e[s]);return n};function p_(e,t,n){const{props:s,children:i,component:o}=e,{props:a,children:c,patchFlag:f}=t,p=o.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&f>=0){if(f&1024)return!0;if(f&16)return s?zc(s,a,p):!!a;if(f&8){const d=t.dynamicProps;for(let m=0;me.__isSuspense;function g_(e,t){t&&t.pendingBranch?ee(e)?t.effects.push(...e):t.effects.push(e):Tg(e)}const tt=Symbol.for("v-fgt"),ji=Symbol.for("v-txt"),Sn=Symbol.for("v-cmt"),hi=Symbol.for("v-stc"),dr=[];let Ot=null;function Ue(e=!1){dr.push(Ot=e?null:[])}function __(){dr.pop(),Ot=dr[dr.length-1]||null}let wr=1;function Kc(e){wr+=e,e<0&&Ot&&(Ot.hasOnce=!0)}function fd(e){return e.dynamicChildren=wr>0?Ot||$s:null,__(),wr>0&&Ot&&Ot.push(e),e}function qt(e,t,n,s,i,o){return fd(_s(e,t,n,s,i,o,!0))}function jt(e,t,n,s,i){return fd(nt(e,t,n,s,i,!0))}function Si(e){return e?e.__v_isVNode===!0:!1}function ks(e,t){return e.type===t.type&&e.key===t.key}const dd=({key:e})=>e??null,pi=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?qe(e)||ze(e)||fe(e)?{i:Je,r:e,k:t,f:!!n}:e:null);function _s(e,t=null,n=null,s=0,i=null,o=e===tt?0:1,a=!1,c=!1){const f={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&dd(t),ref:t&&pi(t),scopeId:kf,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:o,patchFlag:s,dynamicProps:i,dynamicChildren:null,appContext:null,ctx:Je};return c?(Wa(f,n),o&128&&e.normalize(f)):n&&(f.shapeFlag|=qe(n)?8:16),wr>0&&!a&&Ot&&(f.patchFlag>0||o&6)&&f.patchFlag!==32&&Ot.push(f),f}const nt=b_;function b_(e,t=null,n=null,s=0,i=null,o=!1){if((!e||e===Wf)&&(e=Sn),Si(e)){const c=ps(e,t,!0);return n&&Wa(c,n),wr>0&&!o&&Ot&&(c.shapeFlag&6?Ot[Ot.indexOf(e)]=c:Ot.push(c)),c.patchFlag=-2,c}if(x_(e)&&(e=e.__vccOpts),t){t=y_(t);let{class:c,style:f}=t;c&&!qe(c)&&(t.class=Hn(c)),$e(f)&&(Ma(f)&&!ee(f)&&(f=Ge({},f)),t.style=Or(f))}const a=qe(e)?1:ud(e)?128:Og(e)?64:$e(e)?4:fe(e)?2:0;return _s(e,t,n,s,i,a,o,!0)}function y_(e){return e?Ma(e)||Yf(e)?Ge({},e):e:null}function ps(e,t,n=!1,s=!1){const{props:i,ref:o,patchFlag:a,children:c,transition:f}=e,p=t?Hi(i||{},t):i,d={__v_isVNode:!0,__v_skip:!0,type:e.type,props:p,key:p&&dd(p),ref:t&&t.ref?n&&o?ee(o)?o.concat(pi(t)):[o,pi(t)]:pi(t):o,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:c,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==tt?a===-1?16:a|16:a,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:f,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&ps(e.ssContent),ssFallback:e.ssFallback&&ps(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return f&&s&&vr(d,f.clone(d)),d}function Bi(e=" ",t=0){return nt(ji,null,e,t)}function s0(e,t){const n=nt(hi,null,e);return n.staticCount=t,n}function Bo(e="",t=!1){return t?(Ue(),jt(Sn,null,e)):nt(Sn,null,e)}function ln(e){return e==null||typeof e=="boolean"?nt(Sn):ee(e)?nt(tt,null,e.slice()):typeof e=="object"?Mn(e):nt(ji,null,String(e))}function Mn(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:ps(e)}function Wa(e,t){let n=0;const{shapeFlag:s}=e;if(t==null)t=null;else if(ee(t))n=16;else if(typeof t=="object")if(s&65){const i=t.default;i&&(i._c&&(i._d=!1),Wa(e,i()),i._c&&(i._d=!0));return}else{n=32;const i=t._;!i&&!Yf(t)?t._ctx=Je:i===3&&Je&&(Je.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else fe(t)?(t={default:t,_ctx:Je},n=32):(t=String(t),s&64?(n=16,t=[Bi(t)]):n=8);e.children=t,e.shapeFlag|=n}function Hi(...e){const t={};for(let n=0;nZe||Je;let Ti,la;{const e=af(),t=(n,s)=>{let i;return(i=e[n])||(i=e[n]=[]),i.push(s),o=>{i.length>1?i.forEach(a=>a(o)):i[0](o)}};Ti=t("__VUE_INSTANCE_SETTERS__",n=>Ze=n),la=t("__VUE_SSR_SETTERS__",n=>Ui=n)}const Lr=e=>{const t=Ze;return Ti(e),e.scope.on(),()=>{e.scope.off(),Ti(t)}},Gc=()=>{Ze&&Ze.scope.off(),Ti(null)};function pd(e){return e.vnode.shapeFlag&4}let Ui=!1;function C_(e,t=!1,n=!1){t&&la(t);const{props:s,children:i}=e.vnode,o=pd(e);Qg(e,s,o,t),t_(e,i,n);const a=o?S_(e,t):void 0;return t&&la(!1),a}function S_(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,Ug);const{setup:s}=n;if(s){const i=e.setupContext=s.length>1?A_(e):null,o=Lr(e);Vn();const a=Rr(s,e,0,[e.props,i]);if(qn(),o(),nf(a)){if(Bs(e)||$f(e),a.then(Gc,Gc),t)return a.then(c=>{Jc(e,c,t)}).catch(c=>{Mi(c,e,0)});e.asyncDep=a}else Jc(e,a,t)}else md(e,t)}function Jc(e,t,n){fe(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:$e(t)&&(e.setupState=Pf(t)),md(e,n)}let Xc;function md(e,t,n){const s=e.type;if(!e.render){if(!t&&Xc&&!s.render){const i=s.template||Va(e).template;if(i){const{isCustomElement:o,compilerOptions:a}=e.appContext.config,{delimiters:c,compilerOptions:f}=s,p=Ge(Ge({isCustomElement:o,delimiters:c},a),f);s.render=Xc(i,p)}}e.render=s.render||cn}{const i=Lr(e);Vn();try{Vg(e)}finally{qn(),i()}}}const T_={get(e,t){return ot(e,"get",""),e[t]}};function A_(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,T_),slots:e.slots,emit:e.emit,expose:t}}function Vi(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(Pf($a(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in ur)return ur[n](e)},has(t,n){return n in t||n in ur}})):e.proxy}function O_(e,t=!0){return fe(e)?e.displayName||e.name:e.name||t&&e.__name}function x_(e){return fe(e)&&"__vccOpts"in e}const Ft=(e,t)=>vg(e,t,Ui);function gd(e,t,n){const s=arguments.length;return s===2?$e(t)&&!ee(t)?Si(t)?nt(e,null,[t]):nt(e,t):nt(e,null,t):(s>3?n=Array.prototype.slice.call(arguments,2):s===3&&Si(n)&&(n=[n]),nt(e,t,n))}const R_="3.5.3";/** +* @vue/runtime-dom v3.5.3 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/let ca;const Qc=typeof window<"u"&&window.trustedTypes;if(Qc)try{ca=Qc.createPolicy("vue",{createHTML:e=>e})}catch{}const _d=ca?e=>ca.createHTML(e):e=>e,P_="http://www.w3.org/2000/svg",I_="http://www.w3.org/1998/Math/MathML",yn=typeof document<"u"?document:null,Yc=yn&&yn.createElement("template"),L_={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,s)=>{const i=t==="svg"?yn.createElementNS(P_,e):t==="mathml"?yn.createElementNS(I_,e):n?yn.createElement(e,{is:n}):yn.createElement(e);return e==="select"&&s&&s.multiple!=null&&i.setAttribute("multiple",s.multiple),i},createText:e=>yn.createTextNode(e),createComment:e=>yn.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>yn.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,s,i,o){const a=n?n.previousSibling:t.lastChild;if(i&&(i===o||i.nextSibling))for(;t.insertBefore(i.cloneNode(!0),n),!(i===o||!(i=i.nextSibling)););else{Yc.innerHTML=_d(s==="svg"?`${e}`:s==="mathml"?`${e}`:e);const c=Yc.content;if(s==="svg"||s==="mathml"){const f=c.firstChild;for(;f.firstChild;)c.appendChild(f.firstChild);c.removeChild(f)}t.insertBefore(c,n)}return[a?a.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},Pn="transition",nr="animation",Hs=Symbol("_vtc"),bd={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},D_=Ge({},Rg,bd),is=(e,t=[])=>{ee(e)?e.forEach(n=>n(...t)):e&&e(...t)},Zc=e=>e?ee(e)?e.some(t=>t.length>1):e.length>1:!1;function N_(e){const t={};for(const G in e)G in bd||(t[G]=e[G]);if(e.css===!1)return t;const{name:n="v",type:s,duration:i,enterFromClass:o=`${n}-enter-from`,enterActiveClass:a=`${n}-enter-active`,enterToClass:c=`${n}-enter-to`,appearFromClass:f=o,appearActiveClass:p=a,appearToClass:d=c,leaveFromClass:m=`${n}-leave-from`,leaveActiveClass:b=`${n}-leave-active`,leaveToClass:w=`${n}-leave-to`}=e,C=k_(i),P=C&&C[0],R=C&&C[1],{onBeforeEnter:$,onEnter:N,onEnterCancelled:B,onLeave:H,onLeaveCancelled:Y,onBeforeAppear:ge=$,onAppear:le=N,onAppearCancelled:te=B}=t,q=(G,be,He)=>{Dn(G,be?d:c),Dn(G,be?p:a),He&&He()},oe=(G,be)=>{G._isLeaving=!1,Dn(G,m),Dn(G,w),Dn(G,b),be&&be()},ve=G=>(be,He)=>{const st=G?le:N,Oe=()=>q(be,G,He);is(st,[be,Oe]),eu(()=>{Dn(be,G?f:o),bn(be,G?d:c),Zc(st)||tu(be,s,P,Oe)})};return Ge(t,{onBeforeEnter(G){is($,[G]),bn(G,o),bn(G,a)},onBeforeAppear(G){is(ge,[G]),bn(G,f),bn(G,p)},onEnter:ve(!1),onAppear:ve(!0),onLeave(G,be){G._isLeaving=!0;const He=()=>oe(G,be);bn(G,m),bn(G,b),vd(),eu(()=>{G._isLeaving&&(Dn(G,m),bn(G,w),Zc(H)||tu(G,s,R,He))}),is(H,[G,He])},onEnterCancelled(G){q(G,!1),is(B,[G])},onAppearCancelled(G){q(G,!0),is(te,[G])},onLeaveCancelled(G){oe(G),is(Y,[G])}})}function k_(e){if(e==null)return null;if($e(e))return[Ho(e.enter),Ho(e.leave)];{const t=Ho(e);return[t,t]}}function Ho(e){return $m(e)}function bn(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[Hs]||(e[Hs]=new Set)).add(t)}function Dn(e,t){t.split(/\s+/).forEach(s=>s&&e.classList.remove(s));const n=e[Hs];n&&(n.delete(t),n.size||(e[Hs]=void 0))}function eu(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let M_=0;function tu(e,t,n,s){const i=e._endId=++M_,o=()=>{i===e._endId&&s()};if(n)return setTimeout(o,n);const{type:a,timeout:c,propCount:f}=yd(e,t);if(!a)return s();const p=a+"end";let d=0;const m=()=>{e.removeEventListener(p,b),o()},b=w=>{w.target===e&&++d>=f&&m()};setTimeout(()=>{d(n[C]||"").split(", "),i=s(`${Pn}Delay`),o=s(`${Pn}Duration`),a=nu(i,o),c=s(`${nr}Delay`),f=s(`${nr}Duration`),p=nu(c,f);let d=null,m=0,b=0;t===Pn?a>0&&(d=Pn,m=a,b=o.length):t===nr?p>0&&(d=nr,m=p,b=f.length):(m=Math.max(a,p),d=m>0?a>p?Pn:nr:null,b=d?d===Pn?o.length:f.length:0);const w=d===Pn&&/\b(transform|all)(,|$)/.test(s(`${Pn}Property`).toString());return{type:d,timeout:m,propCount:b,hasTransform:w}}function nu(e,t){for(;e.lengthsu(n)+su(e[s])))}function su(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function vd(){return document.body.offsetHeight}function $_(e,t,n){const s=e[Hs];s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const Ai=Symbol("_vod"),wd=Symbol("_vsh"),r0={beforeMount(e,{value:t},{transition:n}){e[Ai]=e.style.display==="none"?"":e.style.display,n&&t?n.beforeEnter(e):sr(e,t)},mounted(e,{value:t},{transition:n}){n&&t&&n.enter(e)},updated(e,{value:t,oldValue:n},{transition:s}){!t!=!n&&(s?t?(s.beforeEnter(e),sr(e,!0),s.enter(e)):s.leave(e,()=>{sr(e,!1)}):sr(e,t))},beforeUnmount(e,{value:t}){sr(e,t)}};function sr(e,t){e.style.display=t?e[Ai]:"none",e[wd]=!t}const F_=Symbol(""),j_=/(^|;)\s*display\s*:/;function B_(e,t,n){const s=e.style,i=qe(n);let o=!1;if(n&&!i){if(t)if(qe(t))for(const a of t.split(";")){const c=a.slice(0,a.indexOf(":")).trim();n[c]==null&&mi(s,c,"")}else for(const a in t)n[a]==null&&mi(s,a,"");for(const a in n)a==="display"&&(o=!0),mi(s,a,n[a])}else if(i){if(t!==n){const a=s[F_];a&&(n+=";"+a),s.cssText=n,o=j_.test(n)}}else t&&e.removeAttribute("style");Ai in e&&(e[Ai]=o?s.display:"",e[wd]&&(s.display="none"))}const ru=/\s*!important$/;function mi(e,t,n){if(ee(n))n.forEach(s=>mi(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const s=H_(e,t);ru.test(n)?e.setProperty(gs(s),n.replace(ru,""),"important"):e[s]=n}}const iu=["Webkit","Moz","ms"],Uo={};function H_(e,t){const n=Uo[t];if(n)return n;let s=Gt(t);if(s!=="filter"&&s in e)return Uo[t]=s;s=Di(s);for(let i=0;iVo||(z_.then(()=>Vo=0),Vo=Date.now());function G_(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;Jt(J_(s,n.value),t,5,[s])};return n.value=e,n.attached=K_(),n}function J_(e,t){if(ee(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(s=>i=>!i._stopped&&s&&s(i))}else return t}const uu=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,X_=(e,t,n,s,i,o)=>{const a=i==="svg";t==="class"?$_(e,s,a):t==="style"?B_(e,n,s):Ii(t)?Sa(t)||q_(e,t,n,s,o):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Q_(e,t,s,a))?(U_(e,t,s),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&au(e,t,s,a,o,t!=="value")):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),au(e,t,s,a))};function Q_(e,t,n,s){if(s)return!!(t==="innerHTML"||t==="textContent"||t in e&&uu(t)&&fe(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const i=e.tagName;if(i==="IMG"||i==="VIDEO"||i==="CANVAS"||i==="SOURCE")return!1}return uu(t)&&qe(n)?!1:!!(t in e||e._isVueCE&&(/[A-Z]/.test(t)||!qe(n)))}const Ed=new WeakMap,Cd=new WeakMap,Oi=Symbol("_moveCb"),fu=Symbol("_enterCb"),Y_=e=>(delete e.props.mode,e),Z_=Y_({name:"TransitionGroup",props:Ge({},D_,{tag:String,moveClass:String}),setup(e,{slots:t}){const n=hd(),s=xg();let i,o;return Hf(()=>{if(!i.length)return;const a=e.moveClass||`${e.name||"v"}-move`;if(!rb(i[0].el,n.vnode.el,a))return;i.forEach(tb),i.forEach(nb);const c=i.filter(sb);vd(),c.forEach(f=>{const p=f.el,d=p.style;bn(p,a),d.transform=d.webkitTransform=d.transitionDuration="";const m=p[Oi]=b=>{b&&b.target!==p||(!b||/transform$/.test(b.propertyName))&&(p.removeEventListener("transitionend",m),p[Oi]=null,Dn(p,a))};p.addEventListener("transitionend",m)})}),()=>{const a=Ee(e),c=N_(a);let f=a.tag||tt;if(i=[],o)for(let p=0;p{c.split(/\s+/).forEach(f=>f&&s.classList.remove(f))}),n.split(/\s+/).forEach(c=>c&&s.classList.add(c)),s.style.display="none";const o=t.nodeType===1?t:t.parentNode;o.appendChild(s);const{hasTransform:a}=yd(s);return o.removeChild(s),a}const Un=e=>{const t=e.props["onUpdate:modelValue"]||!1;return ee(t)?n=>fi(t,n):t};function ib(e){e.target.composing=!0}function du(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const Bt=Symbol("_assign"),i0={created(e,{modifiers:{lazy:t,trim:n,number:s}},i){e[Bt]=Un(i);const o=s||i.props&&i.props.type==="number";wn(e,t?"change":"input",a=>{if(a.target.composing)return;let c=e.value;n&&(c=c.trim()),o&&(c=yi(c)),e[Bt](c)}),n&&wn(e,"change",()=>{e.value=e.value.trim()}),t||(wn(e,"compositionstart",ib),wn(e,"compositionend",du),wn(e,"change",du))},mounted(e,{value:t}){e.value=t??""},beforeUpdate(e,{value:t,oldValue:n,modifiers:{lazy:s,trim:i,number:o}},a){if(e[Bt]=Un(a),e.composing)return;const c=(o||e.type==="number")&&!/^0\d/.test(e.value)?yi(e.value):e.value,f=t??"";c!==f&&(document.activeElement===e&&e.type!=="range"&&(s&&t===n||i&&e.value.trim()===f)||(e.value=f))}},o0={deep:!0,created(e,t,n){e[Bt]=Un(n),wn(e,"change",()=>{const s=e._modelValue,i=Us(e),o=e.checked,a=e[Bt];if(ee(s)){const c=Oa(s,i),f=c!==-1;if(o&&!f)a(s.concat(i));else if(!o&&f){const p=[...s];p.splice(c,1),a(p)}}else if(Ws(s)){const c=new Set(s);o?c.add(i):c.delete(i),a(c)}else a(Sd(e,o))})},mounted:hu,beforeUpdate(e,t,n){e[Bt]=Un(n),hu(e,t,n)}};function hu(e,{value:t,oldValue:n},s){e._modelValue=t;let i;ee(t)?i=Oa(t,s.props.value)>-1:Ws(t)?i=t.has(s.props.value):i=ds(t,Sd(e,!0)),e.checked!==i&&(e.checked=i)}const a0={created(e,{value:t},n){e.checked=ds(t,n.props.value),e[Bt]=Un(n),wn(e,"change",()=>{e[Bt](Us(e))})},beforeUpdate(e,{value:t,oldValue:n},s){e[Bt]=Un(s),t!==n&&(e.checked=ds(t,s.props.value))}},l0={deep:!0,created(e,{value:t,modifiers:{number:n}},s){const i=Ws(t);wn(e,"change",()=>{const o=Array.prototype.filter.call(e.options,a=>a.selected).map(a=>n?yi(Us(a)):Us(a));e[Bt](e.multiple?i?new Set(o):o:o[0]),e._assigning=!0,Pr(()=>{e._assigning=!1})}),e[Bt]=Un(s)},mounted(e,{value:t,modifiers:{number:n}}){pu(e,t)},beforeUpdate(e,t,n){e[Bt]=Un(n)},updated(e,{value:t,modifiers:{number:n}}){e._assigning||pu(e,t)}};function pu(e,t,n){const s=e.multiple,i=ee(t);if(!(s&&!i&&!Ws(t))){for(let o=0,a=e.options.length;oString(d)===String(f)):c.selected=Oa(t,f)>-1}else c.selected=t.has(f);else if(ds(Us(c),t)){e.selectedIndex!==o&&(e.selectedIndex=o);return}}!s&&e.selectedIndex!==-1&&(e.selectedIndex=-1)}}function Us(e){return"_value"in e?e._value:e.value}function Sd(e,t){const n=t?"_trueValue":"_falseValue";return n in e?e[n]:t}const ob=["ctrl","shift","alt","meta"],ab={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>ob.some(n=>e[`${n}Key`]&&!t.includes(n))},lb=(e,t)=>{const n=e._withMods||(e._withMods={}),s=t.join(".");return n[s]||(n[s]=(i,...o)=>{for(let a=0;a{const t=ub().createApp(...e),{mount:n}=t;return t.mount=s=>{const i=db(s);if(!i)return;const o=t._component;!fe(o)&&!o.render&&!o.template&&(o.template=i.innerHTML),i.nodeType===1&&(i.textContent="");const a=n(i,!1,fb(i));return i instanceof Element&&(i.removeAttribute("v-cloak"),i.setAttribute("data-v-app","")),a},t};function fb(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function db(e){return qe(e)?document.querySelector(e):e}var hb=!1;/*! + * pinia v2.2.2 + * (c) 2024 Eduardo San Martin Morote + * @license MIT + */let Ad;const qi=e=>Ad=e,Od=Symbol();function ua(e){return e&&typeof e=="object"&&Object.prototype.toString.call(e)==="[object Object]"&&typeof e.toJSON!="function"}var hr;(function(e){e.direct="direct",e.patchObject="patch object",e.patchFunction="patch function"})(hr||(hr={}));function pb(){const e=df(!0),t=e.run(()=>ja({}));let n=[],s=[];const i=$a({install(o){qi(i),i._a=o,o.provide(Od,i),o.config.globalProperties.$pinia=i,s.forEach(a=>n.push(a)),s=[]},use(o){return!this._a&&!hb?s.push(o):n.push(o),this},_p:n,_a:null,_e:e,_s:new Map,state:t});return i}const xd=()=>{};function gu(e,t,n,s=xd){e.push(t);const i=()=>{const o=e.indexOf(t);o>-1&&(e.splice(o,1),s())};return!n&&hf()&&Wm(i),i}function Ds(e,...t){e.slice().forEach(n=>{n(...t)})}const mb=e=>e(),_u=Symbol(),qo=Symbol();function fa(e,t){e instanceof Map&&t instanceof Map?t.forEach((n,s)=>e.set(s,n)):e instanceof Set&&t instanceof Set&&t.forEach(e.add,e);for(const n in t){if(!t.hasOwnProperty(n))continue;const s=t[n],i=e[n];ua(i)&&ua(s)&&e.hasOwnProperty(n)&&!ze(s)&&!Fn(s)?e[n]=fa(i,s):e[n]=s}return e}const gb=Symbol();function _b(e){return!ua(e)||!e.hasOwnProperty(gb)}const{assign:Nn}=Object;function bb(e){return!!(ze(e)&&e.effect)}function yb(e,t,n,s){const{state:i,actions:o,getters:a}=t,c=n.state.value[e];let f;function p(){c||(n.state.value[e]=i?i():{});const d=gg(n.state.value[e]);return Nn(d,o,Object.keys(a||{}).reduce((m,b)=>(m[b]=$a(Ft(()=>{qi(n);const w=n._s.get(e);return a[b].call(w,w)})),m),{}))}return f=Rd(e,p,t,n,s,!0),f}function Rd(e,t,n={},s,i,o){let a;const c=Nn({actions:{}},n),f={deep:!0};let p,d,m=[],b=[],w;const C=s.state.value[e];!o&&!C&&(s.state.value[e]={}),ja({});let P;function R(te){let q;p=d=!1,typeof te=="function"?(te(s.state.value[e]),q={type:hr.patchFunction,storeId:e,events:w}):(fa(s.state.value[e],te),q={type:hr.patchObject,payload:te,storeId:e,events:w});const oe=P=Symbol();Pr().then(()=>{P===oe&&(p=!0)}),d=!0,Ds(m,q,s.state.value[e])}const $=o?function(){const{state:q}=n,oe=q?q():{};this.$patch(ve=>{Nn(ve,oe)})}:xd;function N(){a.stop(),m=[],b=[],s._s.delete(e)}const B=(te,q="")=>{if(_u in te)return te[qo]=q,te;const oe=function(){qi(s);const ve=Array.from(arguments),G=[],be=[];function He(ae){G.push(ae)}function st(ae){be.push(ae)}Ds(b,{args:ve,name:oe[qo],store:Y,after:He,onError:st});let Oe;try{Oe=te.apply(this&&this.$id===e?this:Y,ve)}catch(ae){throw Ds(be,ae),ae}return Oe instanceof Promise?Oe.then(ae=>(Ds(G,ae),ae)).catch(ae=>(Ds(be,ae),Promise.reject(ae))):(Ds(G,Oe),Oe)};return oe[_u]=!0,oe[qo]=q,oe},H={_p:s,$id:e,$onAction:gu.bind(null,b),$patch:R,$reset:$,$subscribe(te,q={}){const oe=gu(m,te,q.detached,()=>ve()),ve=a.run(()=>fr(()=>s.state.value[e],G=>{(q.flush==="sync"?d:p)&&te({storeId:e,type:hr.direct,events:w},G)},Nn({},f,q)));return oe},$dispose:N},Y=xr(H);s._s.set(e,Y);const le=(s._a&&s._a.runWithContext||mb)(()=>s._e.run(()=>(a=df()).run(()=>t({action:B}))));for(const te in le){const q=le[te];if(ze(q)&&!bb(q)||Fn(q))o||(C&&_b(q)&&(ze(q)?q.value=C[te]:fa(q,C[te])),s.state.value[e][te]=q);else if(typeof q=="function"){const oe=B(q,te);le[te]=oe,c.actions[te]=q}}return Nn(Y,le),Nn(Ee(Y),le),Object.defineProperty(Y,"$state",{get:()=>s.state.value[e],set:te=>{R(q=>{Nn(q,te)})}}),s._p.forEach(te=>{Nn(Y,a.run(()=>te({store:Y,app:s._a,pinia:s,options:c})))}),C&&o&&n.hydrate&&n.hydrate(Y.$state,C),p=!0,d=!0,Y}function vb(e,t,n){let s,i;const o=typeof t=="function";s=e,i=o?n:t;function a(c,f){const p=Xg();return c=c||(p?xt(Od,null):null),c&&qi(c),c=Ad,c._s.has(s)||(o?Rd(s,t,i,c):yb(s,i,c)),c._s.get(s)}return a.$id=s,a}/*! + * vue-router v4.4.3 + * (c) 2024 Eduardo San Martin Morote + * @license MIT + */const Ms=typeof document<"u";function wb(e){return e.__esModule||e[Symbol.toStringTag]==="Module"}const Pe=Object.assign;function Wo(e,t){const n={};for(const s in t){const i=t[s];n[s]=Xt(i)?i.map(e):e(i)}return n}const pr=()=>{},Xt=Array.isArray,Pd=/#/g,Eb=/&/g,Cb=/\//g,Sb=/=/g,Tb=/\?/g,Id=/\+/g,Ab=/%5B/g,Ob=/%5D/g,Ld=/%5E/g,xb=/%60/g,Dd=/%7B/g,Rb=/%7C/g,Nd=/%7D/g,Pb=/%20/g;function za(e){return encodeURI(""+e).replace(Rb,"|").replace(Ab,"[").replace(Ob,"]")}function Ib(e){return za(e).replace(Dd,"{").replace(Nd,"}").replace(Ld,"^")}function da(e){return za(e).replace(Id,"%2B").replace(Pb,"+").replace(Pd,"%23").replace(Eb,"%26").replace(xb,"`").replace(Dd,"{").replace(Nd,"}").replace(Ld,"^")}function Lb(e){return da(e).replace(Sb,"%3D")}function Db(e){return za(e).replace(Pd,"%23").replace(Tb,"%3F")}function Nb(e){return e==null?"":Db(e).replace(Cb,"%2F")}function Er(e){try{return decodeURIComponent(""+e)}catch{}return""+e}const kb=/\/$/,Mb=e=>e.replace(kb,"");function zo(e,t,n="/"){let s,i={},o="",a="";const c=t.indexOf("#");let f=t.indexOf("?");return c=0&&(f=-1),f>-1&&(s=t.slice(0,f),o=t.slice(f+1,c>-1?c:t.length),i=e(o)),c>-1&&(s=s||t.slice(0,c),a=t.slice(c,t.length)),s=Bb(s??t,n),{fullPath:s+(o&&"?")+o+a,path:s,query:i,hash:Er(a)}}function $b(e,t){const n=t.query?e(t.query):"";return t.path+(n&&"?")+n+(t.hash||"")}function bu(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function Fb(e,t,n){const s=t.matched.length-1,i=n.matched.length-1;return s>-1&&s===i&&Vs(t.matched[s],n.matched[i])&&kd(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function Vs(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function kd(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(const n in e)if(!jb(e[n],t[n]))return!1;return!0}function jb(e,t){return Xt(e)?yu(e,t):Xt(t)?yu(t,e):e===t}function yu(e,t){return Xt(t)?e.length===t.length&&e.every((n,s)=>n===t[s]):e.length===1&&e[0]===t}function Bb(e,t){if(e.startsWith("/"))return e;if(!e)return t;const n=t.split("/"),s=e.split("/"),i=s[s.length-1];(i===".."||i===".")&&s.push("");let o=n.length-1,a,c;for(a=0;a1&&o--;else break;return n.slice(0,o).join("/")+"/"+s.slice(a).join("/")}const In={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0};var Cr;(function(e){e.pop="pop",e.push="push"})(Cr||(Cr={}));var mr;(function(e){e.back="back",e.forward="forward",e.unknown=""})(mr||(mr={}));function Hb(e){if(!e)if(Ms){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),Mb(e)}const Ub=/^[^#]+#/;function Vb(e,t){return e.replace(Ub,"#")+t}function qb(e,t){const n=document.documentElement.getBoundingClientRect(),s=e.getBoundingClientRect();return{behavior:t.behavior,left:s.left-n.left-(t.left||0),top:s.top-n.top-(t.top||0)}}const Wi=()=>({left:window.scrollX,top:window.scrollY});function Wb(e){let t;if("el"in e){const n=e.el,s=typeof n=="string"&&n.startsWith("#"),i=typeof n=="string"?s?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!i)return;t=qb(i,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.scrollX,t.top!=null?t.top:window.scrollY)}function vu(e,t){return(history.state?history.state.position-t:-1)+e}const ha=new Map;function zb(e,t){ha.set(e,t)}function Kb(e){const t=ha.get(e);return ha.delete(e),t}let Gb=()=>location.protocol+"//"+location.host;function Md(e,t){const{pathname:n,search:s,hash:i}=t,o=e.indexOf("#");if(o>-1){let c=i.includes(e.slice(o))?e.slice(o).length:1,f=i.slice(c);return f[0]!=="/"&&(f="/"+f),bu(f,"")}return bu(n,e)+s+i}function Jb(e,t,n,s){let i=[],o=[],a=null;const c=({state:b})=>{const w=Md(e,location),C=n.value,P=t.value;let R=0;if(b){if(n.value=w,t.value=b,a&&a===C){a=null;return}R=P?b.position-P.position:0}else s(w);i.forEach($=>{$(n.value,C,{delta:R,type:Cr.pop,direction:R?R>0?mr.forward:mr.back:mr.unknown})})};function f(){a=n.value}function p(b){i.push(b);const w=()=>{const C=i.indexOf(b);C>-1&&i.splice(C,1)};return o.push(w),w}function d(){const{history:b}=window;b.state&&b.replaceState(Pe({},b.state,{scroll:Wi()}),"")}function m(){for(const b of o)b();o=[],window.removeEventListener("popstate",c),window.removeEventListener("beforeunload",d)}return window.addEventListener("popstate",c),window.addEventListener("beforeunload",d,{passive:!0}),{pauseListeners:f,listen:p,destroy:m}}function wu(e,t,n,s=!1,i=!1){return{back:e,current:t,forward:n,replaced:s,position:window.history.length,scroll:i?Wi():null}}function Xb(e){const{history:t,location:n}=window,s={value:Md(e,n)},i={value:t.state};i.value||o(s.value,{back:null,current:s.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function o(f,p,d){const m=e.indexOf("#"),b=m>-1?(n.host&&document.querySelector("base")?e:e.slice(m))+f:Gb()+e+f;try{t[d?"replaceState":"pushState"](p,"",b),i.value=p}catch(w){console.error(w),n[d?"replace":"assign"](b)}}function a(f,p){const d=Pe({},t.state,wu(i.value.back,f,i.value.forward,!0),p,{position:i.value.position});o(f,d,!0),s.value=f}function c(f,p){const d=Pe({},i.value,t.state,{forward:f,scroll:Wi()});o(d.current,d,!0);const m=Pe({},wu(s.value,f,null),{position:d.position+1},p);o(f,m,!1),s.value=f}return{location:s,state:i,push:c,replace:a}}function Qb(e){e=Hb(e);const t=Xb(e),n=Jb(e,t.state,t.location,t.replace);function s(o,a=!0){a||n.pauseListeners(),history.go(o)}const i=Pe({location:"",base:e,go:s,createHref:Vb.bind(null,e)},t,n);return Object.defineProperty(i,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(i,"state",{enumerable:!0,get:()=>t.state.value}),i}function Yb(e){return typeof e=="string"||e&&typeof e=="object"}function $d(e){return typeof e=="string"||typeof e=="symbol"}const Fd=Symbol("");var Eu;(function(e){e[e.aborted=4]="aborted",e[e.cancelled=8]="cancelled",e[e.duplicated=16]="duplicated"})(Eu||(Eu={}));function qs(e,t){return Pe(new Error,{type:e,[Fd]:!0},t)}function _n(e,t){return e instanceof Error&&Fd in e&&(t==null||!!(e.type&t))}const Cu="[^/]+?",Zb={sensitive:!1,strict:!1,start:!0,end:!0},ey=/[.+*?^${}()[\]/\\]/g;function ty(e,t){const n=Pe({},Zb,t),s=[];let i=n.start?"^":"";const o=[];for(const p of e){const d=p.length?[]:[90];n.strict&&!p.length&&(i+="/");for(let m=0;mt.length?t.length===1&&t[0]===80?1:-1:0}function jd(e,t){let n=0;const s=e.score,i=t.score;for(;n0&&t[t.length-1]<0}const sy={type:0,value:""},ry=/[a-zA-Z0-9_]/;function iy(e){if(!e)return[[]];if(e==="/")return[[sy]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(w){throw new Error(`ERR (${n})/"${p}": ${w}`)}let n=0,s=n;const i=[];let o;function a(){o&&i.push(o),o=[]}let c=0,f,p="",d="";function m(){p&&(n===0?o.push({type:0,value:p}):n===1||n===2||n===3?(o.length>1&&(f==="*"||f==="+")&&t(`A repeatable param (${p}) must be alone in its segment. eg: '/:ids+.`),o.push({type:1,value:p,regexp:d,repeatable:f==="*"||f==="+",optional:f==="*"||f==="?"})):t("Invalid state to consume buffer"),p="")}function b(){p+=f}for(;c{a(B)}:pr}function a(m){if($d(m)){const b=s.get(m);b&&(s.delete(m),n.splice(n.indexOf(b),1),b.children.forEach(a),b.alias.forEach(a))}else{const b=n.indexOf(m);b>-1&&(n.splice(b,1),m.record.name&&s.delete(m.record.name),m.children.forEach(a),m.alias.forEach(a))}}function c(){return n}function f(m){const b=fy(m,n);n.splice(b,0,m),m.record.name&&!Au(m)&&s.set(m.record.name,m)}function p(m,b){let w,C={},P,R;if("name"in m&&m.name){if(w=s.get(m.name),!w)throw qs(1,{location:m});R=w.record.name,C=Pe(Tu(b.params,w.keys.filter(B=>!B.optional).concat(w.parent?w.parent.keys.filter(B=>B.optional):[]).map(B=>B.name)),m.params&&Tu(m.params,w.keys.map(B=>B.name))),P=w.stringify(C)}else if(m.path!=null)P=m.path,w=n.find(B=>B.re.test(P)),w&&(C=w.parse(P),R=w.record.name);else{if(w=b.name?s.get(b.name):n.find(B=>B.re.test(b.path)),!w)throw qs(1,{location:m,currentLocation:b});R=w.record.name,C=Pe({},b.params,m.params),P=w.stringify(C)}const $=[];let N=w;for(;N;)$.unshift(N.record),N=N.parent;return{name:R,path:P,params:C,matched:$,meta:uy($)}}e.forEach(m=>o(m));function d(){n.length=0,s.clear()}return{addRoute:o,resolve:p,removeRoute:a,clearRoutes:d,getRoutes:c,getRecordMatcher:i}}function Tu(e,t){const n={};for(const s of t)s in e&&(n[s]=e[s]);return n}function ly(e){return{path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:void 0,beforeEnter:e.beforeEnter,props:cy(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}}}function cy(e){const t={},n=e.props||!1;if("component"in e)t.default=n;else for(const s in e.components)t[s]=typeof n=="object"?n[s]:n;return t}function Au(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function uy(e){return e.reduce((t,n)=>Pe(t,n.meta),{})}function Ou(e,t){const n={};for(const s in e)n[s]=s in t?t[s]:e[s];return n}function fy(e,t){let n=0,s=t.length;for(;n!==s;){const o=n+s>>1;jd(e,t[o])<0?s=o:n=o+1}const i=dy(e);return i&&(s=t.lastIndexOf(i,s-1)),s}function dy(e){let t=e;for(;t=t.parent;)if(Bd(t)&&jd(e,t)===0)return t}function Bd({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function hy(e){const t={};if(e===""||e==="?")return t;const s=(e[0]==="?"?e.slice(1):e).split("&");for(let i=0;io&&da(o)):[s&&da(s)]).forEach(o=>{o!==void 0&&(t+=(t.length?"&":"")+n,o!=null&&(t+="="+o))})}return t}function py(e){const t={};for(const n in e){const s=e[n];s!==void 0&&(t[n]=Xt(s)?s.map(i=>i==null?null:""+i):s==null?s:""+s)}return t}const my=Symbol(""),Ru=Symbol(""),zi=Symbol(""),Ka=Symbol(""),pa=Symbol("");function rr(){let e=[];function t(s){return e.push(s),()=>{const i=e.indexOf(s);i>-1&&e.splice(i,1)}}function n(){e=[]}return{add:t,list:()=>e.slice(),reset:n}}function $n(e,t,n,s,i,o=a=>a()){const a=s&&(s.enterCallbacks[i]=s.enterCallbacks[i]||[]);return()=>new Promise((c,f)=>{const p=b=>{b===!1?f(qs(4,{from:n,to:t})):b instanceof Error?f(b):Yb(b)?f(qs(2,{from:t,to:b})):(a&&s.enterCallbacks[i]===a&&typeof b=="function"&&a.push(b),c())},d=o(()=>e.call(s&&s.instances[i],t,n,p));let m=Promise.resolve(d);e.length<3&&(m=m.then(p)),m.catch(b=>f(b))})}function Ko(e,t,n,s,i=o=>o()){const o=[];for(const a of e)for(const c in a.components){let f=a.components[c];if(!(t!=="beforeRouteEnter"&&!a.instances[c]))if(gy(f)){const d=(f.__vccOpts||f)[t];d&&o.push($n(d,n,s,a,c,i))}else{let p=f();o.push(()=>p.then(d=>{if(!d)return Promise.reject(new Error(`Couldn't resolve component "${c}" at "${a.path}"`));const m=wb(d)?d.default:d;a.components[c]=m;const w=(m.__vccOpts||m)[t];return w&&$n(w,n,s,a,c,i)()}))}}return o}function gy(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function Pu(e){const t=xt(zi),n=xt(Ka),s=Ft(()=>{const f=jn(e.to);return t.resolve(f)}),i=Ft(()=>{const{matched:f}=s.value,{length:p}=f,d=f[p-1],m=n.matched;if(!d||!m.length)return-1;const b=m.findIndex(Vs.bind(null,d));if(b>-1)return b;const w=Iu(f[p-2]);return p>1&&Iu(d)===w&&m[m.length-1].path!==w?m.findIndex(Vs.bind(null,f[p-2])):b}),o=Ft(()=>i.value>-1&&vy(n.params,s.value.params)),a=Ft(()=>i.value>-1&&i.value===n.matched.length-1&&kd(n.params,s.value.params));function c(f={}){return yy(f)?t[jn(e.replace)?"replace":"push"](jn(e.to)).catch(pr):Promise.resolve()}return{route:s,href:Ft(()=>s.value.href),isActive:o,isExactActive:a,navigate:c}}const _y=dn({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"}},useLink:Pu,setup(e,{slots:t}){const n=xr(Pu(e)),{options:s}=xt(zi),i=Ft(()=>({[Lu(e.activeClass,s.linkActiveClass,"router-link-active")]:n.isActive,[Lu(e.exactActiveClass,s.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive}));return()=>{const o=t.default&&t.default(n);return e.custom?o:gd("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:i.value},o)}}}),by=_y;function yy(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function vy(e,t){for(const n in t){const s=t[n],i=e[n];if(typeof s=="string"){if(s!==i)return!1}else if(!Xt(i)||i.length!==s.length||s.some((o,a)=>o!==i[a]))return!1}return!0}function Iu(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const Lu=(e,t,n)=>e??t??n,wy=dn({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){const s=xt(pa),i=Ft(()=>e.route||s.value),o=xt(Ru,0),a=Ft(()=>{let p=jn(o);const{matched:d}=i.value;let m;for(;(m=d[p])&&!m.components;)p++;return p}),c=Ft(()=>i.value.matched[a.value]);di(Ru,Ft(()=>a.value+1)),di(my,c),di(pa,i);const f=ja();return fr(()=>[f.value,c.value,e.name],([p,d,m],[b,w,C])=>{d&&(d.instances[m]=p,w&&w!==d&&p&&p===b&&(d.leaveGuards.size||(d.leaveGuards=w.leaveGuards),d.updateGuards.size||(d.updateGuards=w.updateGuards))),p&&d&&(!w||!Vs(d,w)||!b)&&(d.enterCallbacks[m]||[]).forEach(P=>P(p))},{flush:"post"}),()=>{const p=i.value,d=e.name,m=c.value,b=m&&m.components[d];if(!b)return Du(n.default,{Component:b,route:p});const w=m.props[d],C=w?w===!0?p.params:typeof w=="function"?w(p):w:null,R=gd(b,Pe({},C,t,{onVnodeUnmounted:$=>{$.component.isUnmounted&&(m.instances[d]=null)},ref:f}));return Du(n.default,{Component:R,route:p})||R}}});function Du(e,t){if(!e)return null;const n=e(t);return n.length===1?n[0]:n}const Hd=wy;function Ey(e){const t=ay(e.routes,e),n=e.parseQuery||hy,s=e.stringifyQuery||xu,i=e.history,o=rr(),a=rr(),c=rr(),f=hg(In);let p=In;Ms&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const d=Wo.bind(null,x=>""+x),m=Wo.bind(null,Nb),b=Wo.bind(null,Er);function w(x,A){let V,Z;return $d(x)?(V=t.getRecordMatcher(x),Z=A):Z=x,t.addRoute(Z,V)}function C(x){const A=t.getRecordMatcher(x);A&&t.removeRoute(A)}function P(){return t.getRoutes().map(x=>x.record)}function R(x){return!!t.getRecordMatcher(x)}function $(x,A){if(A=Pe({},A||f.value),typeof x=="string"){const _=zo(n,x,A.path),E=t.resolve({path:_.path},A),D=i.createHref(_.fullPath);return Pe(_,E,{params:b(E.params),hash:Er(_.hash),redirectedFrom:void 0,href:D})}let V;if(x.path!=null)V=Pe({},x,{path:zo(n,x.path,A.path).path});else{const _=Pe({},x.params);for(const E in _)_[E]==null&&delete _[E];V=Pe({},x,{params:m(_)}),A.params=m(A.params)}const Z=t.resolve(V,A),Te=x.hash||"";Z.params=d(b(Z.params));const je=$b(s,Pe({},x,{hash:Ib(Te),path:Z.path})),g=i.createHref(je);return Pe({fullPath:je,hash:Te,query:s===xu?py(x.query):x.query||{}},Z,{redirectedFrom:void 0,href:g})}function N(x){return typeof x=="string"?zo(n,x,f.value.path):Pe({},x)}function B(x,A){if(p!==x)return qs(8,{from:A,to:x})}function H(x){return le(x)}function Y(x){return H(Pe(N(x),{replace:!0}))}function ge(x){const A=x.matched[x.matched.length-1];if(A&&A.redirect){const{redirect:V}=A;let Z=typeof V=="function"?V(x):V;return typeof Z=="string"&&(Z=Z.includes("?")||Z.includes("#")?Z=N(Z):{path:Z},Z.params={}),Pe({query:x.query,hash:x.hash,params:Z.path!=null?{}:x.params},Z)}}function le(x,A){const V=p=$(x),Z=f.value,Te=x.state,je=x.force,g=x.replace===!0,_=ge(V);if(_)return le(Pe(N(_),{state:typeof _=="object"?Pe({},Te,_.state):Te,force:je,replace:g}),A||V);const E=V;E.redirectedFrom=A;let D;return!je&&Fb(s,Z,V)&&(D=qs(16,{to:E,from:Z}),_t(Z,Z,!0,!1)),(D?Promise.resolve(D):oe(E,Z)).catch(O=>_n(O)?_n(O,2)?O:I(O):Se(O,E,Z)).then(O=>{if(O){if(_n(O,2))return le(Pe({replace:g},N(O.to),{state:typeof O.to=="object"?Pe({},Te,O.to.state):Te,force:je}),A||E)}else O=G(E,Z,!0,g,Te);return ve(E,Z,O),O})}function te(x,A){const V=B(x,A);return V?Promise.reject(V):Promise.resolve()}function q(x){const A=rt.values().next().value;return A&&typeof A.runWithContext=="function"?A.runWithContext(x):x()}function oe(x,A){let V;const[Z,Te,je]=Cy(x,A);V=Ko(Z.reverse(),"beforeRouteLeave",x,A);for(const _ of Z)_.leaveGuards.forEach(E=>{V.push($n(E,x,A))});const g=te.bind(null,x,A);return V.push(g),Be(V).then(()=>{V=[];for(const _ of o.list())V.push($n(_,x,A));return V.push(g),Be(V)}).then(()=>{V=Ko(Te,"beforeRouteUpdate",x,A);for(const _ of Te)_.updateGuards.forEach(E=>{V.push($n(E,x,A))});return V.push(g),Be(V)}).then(()=>{V=[];for(const _ of je)if(_.beforeEnter)if(Xt(_.beforeEnter))for(const E of _.beforeEnter)V.push($n(E,x,A));else V.push($n(_.beforeEnter,x,A));return V.push(g),Be(V)}).then(()=>(x.matched.forEach(_=>_.enterCallbacks={}),V=Ko(je,"beforeRouteEnter",x,A,q),V.push(g),Be(V))).then(()=>{V=[];for(const _ of a.list())V.push($n(_,x,A));return V.push(g),Be(V)}).catch(_=>_n(_,8)?_:Promise.reject(_))}function ve(x,A,V){c.list().forEach(Z=>q(()=>Z(x,A,V)))}function G(x,A,V,Z,Te){const je=B(x,A);if(je)return je;const g=A===In,_=Ms?history.state:{};V&&(Z||g?i.replace(x.fullPath,Pe({scroll:g&&_&&_.scroll},Te)):i.push(x.fullPath,Te)),f.value=x,_t(x,A,V,g),I()}let be;function He(){be||(be=i.listen((x,A,V)=>{if(!Zt.listening)return;const Z=$(x),Te=ge(Z);if(Te){le(Pe(Te,{replace:!0}),Z).catch(pr);return}p=Z;const je=f.value;Ms&&zb(vu(je.fullPath,V.delta),Wi()),oe(Z,je).catch(g=>_n(g,12)?g:_n(g,2)?(le(g.to,Z).then(_=>{_n(_,20)&&!V.delta&&V.type===Cr.pop&&i.go(-1,!1)}).catch(pr),Promise.reject()):(V.delta&&i.go(-V.delta,!1),Se(g,Z,je))).then(g=>{g=g||G(Z,je,!1),g&&(V.delta&&!_n(g,8)?i.go(-V.delta,!1):V.type===Cr.pop&&_n(g,20)&&i.go(-1,!1)),ve(Z,je,g)}).catch(pr)}))}let st=rr(),Oe=rr(),ae;function Se(x,A,V){I(x);const Z=Oe.list();return Z.length?Z.forEach(Te=>Te(x,A,V)):console.error(x),Promise.reject(x)}function Pt(){return ae&&f.value!==In?Promise.resolve():new Promise((x,A)=>{st.add([x,A])})}function I(x){return ae||(ae=!x,He(),st.list().forEach(([A,V])=>x?V(x):A()),st.reset()),x}function _t(x,A,V,Z){const{scrollBehavior:Te}=e;if(!Ms||!Te)return Promise.resolve();const je=!V&&Kb(vu(x.fullPath,0))||(Z||!V)&&history.state&&history.state.scroll||null;return Pr().then(()=>Te(x,A,je)).then(g=>g&&Wb(g)).catch(g=>Se(g,x,A))}const et=x=>i.go(x);let Yt;const rt=new Set,Zt={currentRoute:f,listening:!0,addRoute:w,removeRoute:C,clearRoutes:t.clearRoutes,hasRoute:R,getRoutes:P,resolve:$,options:e,push:H,replace:Y,go:et,back:()=>et(-1),forward:()=>et(1),beforeEach:o.add,beforeResolve:a.add,afterEach:c.add,onError:Oe.add,isReady:Pt,install(x){const A=this;x.component("RouterLink",by),x.component("RouterView",Hd),x.config.globalProperties.$router=A,Object.defineProperty(x.config.globalProperties,"$route",{enumerable:!0,get:()=>jn(f)}),Ms&&!Yt&&f.value===In&&(Yt=!0,H(i.location).catch(Te=>{}));const V={};for(const Te in In)Object.defineProperty(V,Te,{get:()=>f.value[Te],enumerable:!0});x.provide(zi,A),x.provide(Ka,Of(V)),x.provide(pa,f);const Z=x.unmount;rt.add(x),x.unmount=function(){rt.delete(x),rt.size<1&&(p=In,be&&be(),be=null,f.value=In,Yt=!1,ae=!1),Z()}}};function Be(x){return x.reduce((A,V)=>A.then(()=>q(V)),Promise.resolve())}return Zt}function Cy(e,t){const n=[],s=[],i=[],o=Math.max(t.matched.length,e.matched.length);for(let a=0;aVs(p,c))?s.push(c):n.push(c));const f=e.matched[a];f&&(t.matched.find(p=>Vs(p,f))||i.push(f))}return[n,s,i]}function c0(){return xt(zi)}function u0(e){return xt(Ka)}const Sy=dn({__name:"App",setup(e){return(t,n)=>(Ue(),jt(jn(Hd)))}});function Ud(e,t){return function(){return e.apply(t,arguments)}}const{toString:Ty}=Object.prototype,{getPrototypeOf:Ga}=Object,Ki=(e=>t=>{const n=Ty.call(t);return e[n]||(e[n]=n.slice(8,-1).toLowerCase())})(Object.create(null)),Qt=e=>(e=e.toLowerCase(),t=>Ki(t)===e),Gi=e=>t=>typeof t===e,{isArray:zs}=Array,Sr=Gi("undefined");function Ay(e){return e!==null&&!Sr(e)&&e.constructor!==null&&!Sr(e.constructor)&&Rt(e.constructor.isBuffer)&&e.constructor.isBuffer(e)}const Vd=Qt("ArrayBuffer");function Oy(e){let t;return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?t=ArrayBuffer.isView(e):t=e&&e.buffer&&Vd(e.buffer),t}const xy=Gi("string"),Rt=Gi("function"),qd=Gi("number"),Ji=e=>e!==null&&typeof e=="object",Ry=e=>e===!0||e===!1,gi=e=>{if(Ki(e)!=="object")return!1;const t=Ga(e);return(t===null||t===Object.prototype||Object.getPrototypeOf(t)===null)&&!(Symbol.toStringTag in e)&&!(Symbol.iterator in e)},Py=Qt("Date"),Iy=Qt("File"),Ly=Qt("Blob"),Dy=Qt("FileList"),Ny=e=>Ji(e)&&Rt(e.pipe),ky=e=>{let t;return e&&(typeof FormData=="function"&&e instanceof FormData||Rt(e.append)&&((t=Ki(e))==="formdata"||t==="object"&&Rt(e.toString)&&e.toString()==="[object FormData]"))},My=Qt("URLSearchParams"),[$y,Fy,jy,By]=["ReadableStream","Request","Response","Headers"].map(Qt),Hy=e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");function Dr(e,t,{allOwnKeys:n=!1}={}){if(e===null||typeof e>"u")return;let s,i;if(typeof e!="object"&&(e=[e]),zs(e))for(s=0,i=e.length;s0;)if(i=n[s],t===i.toLowerCase())return i;return null}const as=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:global,zd=e=>!Sr(e)&&e!==as;function ma(){const{caseless:e}=zd(this)&&this||{},t={},n=(s,i)=>{const o=e&&Wd(t,i)||i;gi(t[o])&&gi(s)?t[o]=ma(t[o],s):gi(s)?t[o]=ma({},s):zs(s)?t[o]=s.slice():t[o]=s};for(let s=0,i=arguments.length;s(Dr(t,(i,o)=>{n&&Rt(i)?e[o]=Ud(i,n):e[o]=i},{allOwnKeys:s}),e),Vy=e=>(e.charCodeAt(0)===65279&&(e=e.slice(1)),e),qy=(e,t,n,s)=>{e.prototype=Object.create(t.prototype,s),e.prototype.constructor=e,Object.defineProperty(e,"super",{value:t.prototype}),n&&Object.assign(e.prototype,n)},Wy=(e,t,n,s)=>{let i,o,a;const c={};if(t=t||{},e==null)return t;do{for(i=Object.getOwnPropertyNames(e),o=i.length;o-- >0;)a=i[o],(!s||s(a,e,t))&&!c[a]&&(t[a]=e[a],c[a]=!0);e=n!==!1&&Ga(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},zy=(e,t,n)=>{e=String(e),(n===void 0||n>e.length)&&(n=e.length),n-=t.length;const s=e.indexOf(t,n);return s!==-1&&s===n},Ky=e=>{if(!e)return null;if(zs(e))return e;let t=e.length;if(!qd(t))return null;const n=new Array(t);for(;t-- >0;)n[t]=e[t];return n},Gy=(e=>t=>e&&t instanceof e)(typeof Uint8Array<"u"&&Ga(Uint8Array)),Jy=(e,t)=>{const s=(e&&e[Symbol.iterator]).call(e);let i;for(;(i=s.next())&&!i.done;){const o=i.value;t.call(e,o[0],o[1])}},Xy=(e,t)=>{let n;const s=[];for(;(n=e.exec(t))!==null;)s.push(n);return s},Qy=Qt("HTMLFormElement"),Yy=e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(n,s,i){return s.toUpperCase()+i}),Nu=(({hasOwnProperty:e})=>(t,n)=>e.call(t,n))(Object.prototype),Zy=Qt("RegExp"),Kd=(e,t)=>{const n=Object.getOwnPropertyDescriptors(e),s={};Dr(n,(i,o)=>{let a;(a=t(i,o,e))!==!1&&(s[o]=a||i)}),Object.defineProperties(e,s)},ev=e=>{Kd(e,(t,n)=>{if(Rt(e)&&["arguments","caller","callee"].indexOf(n)!==-1)return!1;const s=e[n];if(Rt(s)){if(t.enumerable=!1,"writable"in t){t.writable=!1;return}t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+n+"'")})}})},tv=(e,t)=>{const n={},s=i=>{i.forEach(o=>{n[o]=!0})};return zs(e)?s(e):s(String(e).split(t)),n},nv=()=>{},sv=(e,t)=>e!=null&&Number.isFinite(e=+e)?e:t,Go="abcdefghijklmnopqrstuvwxyz",ku="0123456789",Gd={DIGIT:ku,ALPHA:Go,ALPHA_DIGIT:Go+Go.toUpperCase()+ku},rv=(e=16,t=Gd.ALPHA_DIGIT)=>{let n="";const{length:s}=t;for(;e--;)n+=t[Math.random()*s|0];return n};function iv(e){return!!(e&&Rt(e.append)&&e[Symbol.toStringTag]==="FormData"&&e[Symbol.iterator])}const ov=e=>{const t=new Array(10),n=(s,i)=>{if(Ji(s)){if(t.indexOf(s)>=0)return;if(!("toJSON"in s)){t[i]=s;const o=zs(s)?[]:{};return Dr(s,(a,c)=>{const f=n(a,i+1);!Sr(f)&&(o[c]=f)}),t[i]=void 0,o}}return s};return n(e,0)},av=Qt("AsyncFunction"),lv=e=>e&&(Ji(e)||Rt(e))&&Rt(e.then)&&Rt(e.catch),Jd=((e,t)=>e?setImmediate:t?((n,s)=>(as.addEventListener("message",({source:i,data:o})=>{i===as&&o===n&&s.length&&s.shift()()},!1),i=>{s.push(i),as.postMessage(n,"*")}))(`axios@${Math.random()}`,[]):n=>setTimeout(n))(typeof setImmediate=="function",Rt(as.postMessage)),cv=typeof queueMicrotask<"u"?queueMicrotask.bind(as):typeof process<"u"&&process.nextTick||Jd,T={isArray:zs,isArrayBuffer:Vd,isBuffer:Ay,isFormData:ky,isArrayBufferView:Oy,isString:xy,isNumber:qd,isBoolean:Ry,isObject:Ji,isPlainObject:gi,isReadableStream:$y,isRequest:Fy,isResponse:jy,isHeaders:By,isUndefined:Sr,isDate:Py,isFile:Iy,isBlob:Ly,isRegExp:Zy,isFunction:Rt,isStream:Ny,isURLSearchParams:My,isTypedArray:Gy,isFileList:Dy,forEach:Dr,merge:ma,extend:Uy,trim:Hy,stripBOM:Vy,inherits:qy,toFlatObject:Wy,kindOf:Ki,kindOfTest:Qt,endsWith:zy,toArray:Ky,forEachEntry:Jy,matchAll:Xy,isHTMLForm:Qy,hasOwnProperty:Nu,hasOwnProp:Nu,reduceDescriptors:Kd,freezeMethods:ev,toObjectSet:tv,toCamelCase:Yy,noop:nv,toFiniteNumber:sv,findKey:Wd,global:as,isContextDefined:zd,ALPHABET:Gd,generateString:rv,isSpecCompliantForm:iv,toJSONObject:ov,isAsyncFn:av,isThenable:lv,setImmediate:Jd,asap:cv};function de(e,t,n,s,i){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack,this.message=e,this.name="AxiosError",t&&(this.code=t),n&&(this.config=n),s&&(this.request=s),i&&(this.response=i,this.status=i.status?i.status:null)}T.inherits(de,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:T.toJSONObject(this.config),code:this.code,status:this.status}}});const Xd=de.prototype,Qd={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach(e=>{Qd[e]={value:e}});Object.defineProperties(de,Qd);Object.defineProperty(Xd,"isAxiosError",{value:!0});de.from=(e,t,n,s,i,o)=>{const a=Object.create(Xd);return T.toFlatObject(e,a,function(f){return f!==Error.prototype},c=>c!=="isAxiosError"),de.call(a,e.message,t,n,s,i),a.cause=e,a.name=e.name,o&&Object.assign(a,o),a};const uv=null;function ga(e){return T.isPlainObject(e)||T.isArray(e)}function Yd(e){return T.endsWith(e,"[]")?e.slice(0,-2):e}function Mu(e,t,n){return e?e.concat(t).map(function(i,o){return i=Yd(i),!n&&o?"["+i+"]":i}).join(n?".":""):t}function fv(e){return T.isArray(e)&&!e.some(ga)}const dv=T.toFlatObject(T,{},null,function(t){return/^is[A-Z]/.test(t)});function Xi(e,t,n){if(!T.isObject(e))throw new TypeError("target must be an object");t=t||new FormData,n=T.toFlatObject(n,{metaTokens:!0,dots:!1,indexes:!1},!1,function(P,R){return!T.isUndefined(R[P])});const s=n.metaTokens,i=n.visitor||d,o=n.dots,a=n.indexes,f=(n.Blob||typeof Blob<"u"&&Blob)&&T.isSpecCompliantForm(t);if(!T.isFunction(i))throw new TypeError("visitor must be a function");function p(C){if(C===null)return"";if(T.isDate(C))return C.toISOString();if(!f&&T.isBlob(C))throw new de("Blob is not supported. Use a Buffer instead.");return T.isArrayBuffer(C)||T.isTypedArray(C)?f&&typeof Blob=="function"?new Blob([C]):Buffer.from(C):C}function d(C,P,R){let $=C;if(C&&!R&&typeof C=="object"){if(T.endsWith(P,"{}"))P=s?P:P.slice(0,-2),C=JSON.stringify(C);else if(T.isArray(C)&&fv(C)||(T.isFileList(C)||T.endsWith(P,"[]"))&&($=T.toArray(C)))return P=Yd(P),$.forEach(function(B,H){!(T.isUndefined(B)||B===null)&&t.append(a===!0?Mu([P],H,o):a===null?P:P+"[]",p(B))}),!1}return ga(C)?!0:(t.append(Mu(R,P,o),p(C)),!1)}const m=[],b=Object.assign(dv,{defaultVisitor:d,convertValue:p,isVisitable:ga});function w(C,P){if(!T.isUndefined(C)){if(m.indexOf(C)!==-1)throw Error("Circular reference detected in "+P.join("."));m.push(C),T.forEach(C,function($,N){(!(T.isUndefined($)||$===null)&&i.call(t,$,T.isString(N)?N.trim():N,P,b))===!0&&w($,P?P.concat(N):[N])}),m.pop()}}if(!T.isObject(e))throw new TypeError("data must be an object");return w(e),t}function $u(e){const t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,function(s){return t[s]})}function Ja(e,t){this._pairs=[],e&&Xi(e,this,t)}const Zd=Ja.prototype;Zd.append=function(t,n){this._pairs.push([t,n])};Zd.toString=function(t){const n=t?function(s){return t.call(this,s,$u)}:$u;return this._pairs.map(function(i){return n(i[0])+"="+n(i[1])},"").join("&")};function hv(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function eh(e,t,n){if(!t)return e;const s=n&&n.encode||hv,i=n&&n.serialize;let o;if(i?o=i(t,n):o=T.isURLSearchParams(t)?t.toString():new Ja(t,n).toString(s),o){const a=e.indexOf("#");a!==-1&&(e=e.slice(0,a)),e+=(e.indexOf("?")===-1?"?":"&")+o}return e}class Fu{constructor(){this.handlers=[]}use(t,n,s){return this.handlers.push({fulfilled:t,rejected:n,synchronous:s?s.synchronous:!1,runWhen:s?s.runWhen:null}),this.handlers.length-1}eject(t){this.handlers[t]&&(this.handlers[t]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(t){T.forEach(this.handlers,function(s){s!==null&&t(s)})}}const th={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},pv=typeof URLSearchParams<"u"?URLSearchParams:Ja,mv=typeof FormData<"u"?FormData:null,gv=typeof Blob<"u"?Blob:null,_v={isBrowser:!0,classes:{URLSearchParams:pv,FormData:mv,Blob:gv},protocols:["http","https","file","blob","url","data"]},Xa=typeof window<"u"&&typeof document<"u",_a=typeof navigator=="object"&&navigator||void 0,bv=Xa&&(!_a||["ReactNative","NativeScript","NS"].indexOf(_a.product)<0),yv=typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&typeof self.importScripts=="function",vv=Xa&&window.location.href||"http://localhost",wv=Object.freeze(Object.defineProperty({__proto__:null,hasBrowserEnv:Xa,hasStandardBrowserEnv:bv,hasStandardBrowserWebWorkerEnv:yv,navigator:_a,origin:vv},Symbol.toStringTag,{value:"Module"})),bt={...wv,..._v};function Ev(e,t){return Xi(e,new bt.classes.URLSearchParams,Object.assign({visitor:function(n,s,i,o){return bt.isNode&&T.isBuffer(n)?(this.append(s,n.toString("base64")),!1):o.defaultVisitor.apply(this,arguments)}},t))}function Cv(e){return T.matchAll(/\w+|\[(\w*)]/g,e).map(t=>t[0]==="[]"?"":t[1]||t[0])}function Sv(e){const t={},n=Object.keys(e);let s;const i=n.length;let o;for(s=0;s=n.length;return a=!a&&T.isArray(i)?i.length:a,f?(T.hasOwnProp(i,a)?i[a]=[i[a],s]:i[a]=s,!c):((!i[a]||!T.isObject(i[a]))&&(i[a]=[]),t(n,s,i[a],o)&&T.isArray(i[a])&&(i[a]=Sv(i[a])),!c)}if(T.isFormData(e)&&T.isFunction(e.entries)){const n={};return T.forEachEntry(e,(s,i)=>{t(Cv(s),i,n,0)}),n}return null}function Tv(e,t,n){if(T.isString(e))try{return(t||JSON.parse)(e),T.trim(e)}catch(s){if(s.name!=="SyntaxError")throw s}return(n||JSON.stringify)(e)}const Nr={transitional:th,adapter:["xhr","http","fetch"],transformRequest:[function(t,n){const s=n.getContentType()||"",i=s.indexOf("application/json")>-1,o=T.isObject(t);if(o&&T.isHTMLForm(t)&&(t=new FormData(t)),T.isFormData(t))return i?JSON.stringify(nh(t)):t;if(T.isArrayBuffer(t)||T.isBuffer(t)||T.isStream(t)||T.isFile(t)||T.isBlob(t)||T.isReadableStream(t))return t;if(T.isArrayBufferView(t))return t.buffer;if(T.isURLSearchParams(t))return n.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),t.toString();let c;if(o){if(s.indexOf("application/x-www-form-urlencoded")>-1)return Ev(t,this.formSerializer).toString();if((c=T.isFileList(t))||s.indexOf("multipart/form-data")>-1){const f=this.env&&this.env.FormData;return Xi(c?{"files[]":t}:t,f&&new f,this.formSerializer)}}return o||i?(n.setContentType("application/json",!1),Tv(t)):t}],transformResponse:[function(t){const n=this.transitional||Nr.transitional,s=n&&n.forcedJSONParsing,i=this.responseType==="json";if(T.isResponse(t)||T.isReadableStream(t))return t;if(t&&T.isString(t)&&(s&&!this.responseType||i)){const a=!(n&&n.silentJSONParsing)&&i;try{return JSON.parse(t)}catch(c){if(a)throw c.name==="SyntaxError"?de.from(c,de.ERR_BAD_RESPONSE,this,null,this.response):c}}return t}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:bt.classes.FormData,Blob:bt.classes.Blob},validateStatus:function(t){return t>=200&&t<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};T.forEach(["delete","get","head","post","put","patch"],e=>{Nr.headers[e]={}});const Av=T.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),Ov=e=>{const t={};let n,s,i;return e&&e.split(` +`).forEach(function(a){i=a.indexOf(":"),n=a.substring(0,i).trim().toLowerCase(),s=a.substring(i+1).trim(),!(!n||t[n]&&Av[n])&&(n==="set-cookie"?t[n]?t[n].push(s):t[n]=[s]:t[n]=t[n]?t[n]+", "+s:s)}),t},ju=Symbol("internals");function ir(e){return e&&String(e).trim().toLowerCase()}function _i(e){return e===!1||e==null?e:T.isArray(e)?e.map(_i):String(e)}function xv(e){const t=Object.create(null),n=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let s;for(;s=n.exec(e);)t[s[1]]=s[2];return t}const Rv=e=>/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim());function Jo(e,t,n,s,i){if(T.isFunction(s))return s.call(this,t,n);if(i&&(t=n),!!T.isString(t)){if(T.isString(s))return t.indexOf(s)!==-1;if(T.isRegExp(s))return s.test(t)}}function Pv(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(t,n,s)=>n.toUpperCase()+s)}function Iv(e,t){const n=T.toCamelCase(" "+t);["get","set","has"].forEach(s=>{Object.defineProperty(e,s+n,{value:function(i,o,a){return this[s].call(this,t,i,o,a)},configurable:!0})})}class yt{constructor(t){t&&this.set(t)}set(t,n,s){const i=this;function o(c,f,p){const d=ir(f);if(!d)throw new Error("header name must be a non-empty string");const m=T.findKey(i,d);(!m||i[m]===void 0||p===!0||p===void 0&&i[m]!==!1)&&(i[m||f]=_i(c))}const a=(c,f)=>T.forEach(c,(p,d)=>o(p,d,f));if(T.isPlainObject(t)||t instanceof this.constructor)a(t,n);else if(T.isString(t)&&(t=t.trim())&&!Rv(t))a(Ov(t),n);else if(T.isHeaders(t))for(const[c,f]of t.entries())o(f,c,s);else t!=null&&o(n,t,s);return this}get(t,n){if(t=ir(t),t){const s=T.findKey(this,t);if(s){const i=this[s];if(!n)return i;if(n===!0)return xv(i);if(T.isFunction(n))return n.call(this,i,s);if(T.isRegExp(n))return n.exec(i);throw new TypeError("parser must be boolean|regexp|function")}}}has(t,n){if(t=ir(t),t){const s=T.findKey(this,t);return!!(s&&this[s]!==void 0&&(!n||Jo(this,this[s],s,n)))}return!1}delete(t,n){const s=this;let i=!1;function o(a){if(a=ir(a),a){const c=T.findKey(s,a);c&&(!n||Jo(s,s[c],c,n))&&(delete s[c],i=!0)}}return T.isArray(t)?t.forEach(o):o(t),i}clear(t){const n=Object.keys(this);let s=n.length,i=!1;for(;s--;){const o=n[s];(!t||Jo(this,this[o],o,t,!0))&&(delete this[o],i=!0)}return i}normalize(t){const n=this,s={};return T.forEach(this,(i,o)=>{const a=T.findKey(s,o);if(a){n[a]=_i(i),delete n[o];return}const c=t?Pv(o):String(o).trim();c!==o&&delete n[o],n[c]=_i(i),s[c]=!0}),this}concat(...t){return this.constructor.concat(this,...t)}toJSON(t){const n=Object.create(null);return T.forEach(this,(s,i)=>{s!=null&&s!==!1&&(n[i]=t&&T.isArray(s)?s.join(", "):s)}),n}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([t,n])=>t+": "+n).join(` +`)}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(t){return t instanceof this?t:new this(t)}static concat(t,...n){const s=new this(t);return n.forEach(i=>s.set(i)),s}static accessor(t){const s=(this[ju]=this[ju]={accessors:{}}).accessors,i=this.prototype;function o(a){const c=ir(a);s[c]||(Iv(i,a),s[c]=!0)}return T.isArray(t)?t.forEach(o):o(t),this}}yt.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]);T.reduceDescriptors(yt.prototype,({value:e},t)=>{let n=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(s){this[n]=s}}});T.freezeMethods(yt);function Xo(e,t){const n=this||Nr,s=t||n,i=yt.from(s.headers);let o=s.data;return T.forEach(e,function(c){o=c.call(n,o,i.normalize(),t?t.status:void 0)}),i.normalize(),o}function sh(e){return!!(e&&e.__CANCEL__)}function Ks(e,t,n){de.call(this,e??"canceled",de.ERR_CANCELED,t,n),this.name="CanceledError"}T.inherits(Ks,de,{__CANCEL__:!0});function rh(e,t,n){const s=n.config.validateStatus;!n.status||!s||s(n.status)?e(n):t(new de("Request failed with status code "+n.status,[de.ERR_BAD_REQUEST,de.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n))}function Lv(e){const t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}function Dv(e,t){e=e||10;const n=new Array(e),s=new Array(e);let i=0,o=0,a;return t=t!==void 0?t:1e3,function(f){const p=Date.now(),d=s[o];a||(a=p),n[i]=f,s[i]=p;let m=o,b=0;for(;m!==i;)b+=n[m++],m=m%e;if(i=(i+1)%e,i===o&&(o=(o+1)%e),p-a{n=d,i=null,o&&(clearTimeout(o),o=null),e.apply(null,p)};return[(...p)=>{const d=Date.now(),m=d-n;m>=s?a(p,d):(i=p,o||(o=setTimeout(()=>{o=null,a(i)},s-m)))},()=>i&&a(i)]}const xi=(e,t,n=3)=>{let s=0;const i=Dv(50,250);return Nv(o=>{const a=o.loaded,c=o.lengthComputable?o.total:void 0,f=a-s,p=i(f),d=a<=c;s=a;const m={loaded:a,total:c,progress:c?a/c:void 0,bytes:f,rate:p||void 0,estimated:p&&c&&d?(c-a)/p:void 0,event:o,lengthComputable:c!=null,[t?"download":"upload"]:!0};e(m)},n)},Bu=(e,t)=>{const n=e!=null;return[s=>t[0]({lengthComputable:n,total:e,loaded:s}),t[1]]},Hu=e=>(...t)=>T.asap(()=>e(...t)),kv=bt.hasStandardBrowserEnv?function(){const t=bt.navigator&&/(msie|trident)/i.test(bt.navigator.userAgent),n=document.createElement("a");let s;function i(o){let a=o;return t&&(n.setAttribute("href",a),a=n.href),n.setAttribute("href",a),{href:n.href,protocol:n.protocol?n.protocol.replace(/:$/,""):"",host:n.host,search:n.search?n.search.replace(/^\?/,""):"",hash:n.hash?n.hash.replace(/^#/,""):"",hostname:n.hostname,port:n.port,pathname:n.pathname.charAt(0)==="/"?n.pathname:"/"+n.pathname}}return s=i(window.location.href),function(a){const c=T.isString(a)?i(a):a;return c.protocol===s.protocol&&c.host===s.host}}():function(){return function(){return!0}}(),Mv=bt.hasStandardBrowserEnv?{write(e,t,n,s,i,o){const a=[e+"="+encodeURIComponent(t)];T.isNumber(n)&&a.push("expires="+new Date(n).toGMTString()),T.isString(s)&&a.push("path="+s),T.isString(i)&&a.push("domain="+i),o===!0&&a.push("secure"),document.cookie=a.join("; ")},read(e){const t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove(e){this.write(e,"",Date.now()-864e5)}}:{write(){},read(){return null},remove(){}};function $v(e){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(e)}function Fv(e,t){return t?e.replace(/\/?\/$/,"")+"/"+t.replace(/^\/+/,""):e}function ih(e,t){return e&&!$v(t)?Fv(e,t):t}const Uu=e=>e instanceof yt?{...e}:e;function ms(e,t){t=t||{};const n={};function s(p,d,m){return T.isPlainObject(p)&&T.isPlainObject(d)?T.merge.call({caseless:m},p,d):T.isPlainObject(d)?T.merge({},d):T.isArray(d)?d.slice():d}function i(p,d,m){if(T.isUndefined(d)){if(!T.isUndefined(p))return s(void 0,p,m)}else return s(p,d,m)}function o(p,d){if(!T.isUndefined(d))return s(void 0,d)}function a(p,d){if(T.isUndefined(d)){if(!T.isUndefined(p))return s(void 0,p)}else return s(void 0,d)}function c(p,d,m){if(m in t)return s(p,d);if(m in e)return s(void 0,p)}const f={url:o,method:o,data:o,baseURL:a,transformRequest:a,transformResponse:a,paramsSerializer:a,timeout:a,timeoutMessage:a,withCredentials:a,withXSRFToken:a,adapter:a,responseType:a,xsrfCookieName:a,xsrfHeaderName:a,onUploadProgress:a,onDownloadProgress:a,decompress:a,maxContentLength:a,maxBodyLength:a,beforeRedirect:a,transport:a,httpAgent:a,httpsAgent:a,cancelToken:a,socketPath:a,responseEncoding:a,validateStatus:c,headers:(p,d)=>i(Uu(p),Uu(d),!0)};return T.forEach(Object.keys(Object.assign({},e,t)),function(d){const m=f[d]||i,b=m(e[d],t[d],d);T.isUndefined(b)&&m!==c||(n[d]=b)}),n}const oh=e=>{const t=ms({},e);let{data:n,withXSRFToken:s,xsrfHeaderName:i,xsrfCookieName:o,headers:a,auth:c}=t;t.headers=a=yt.from(a),t.url=eh(ih(t.baseURL,t.url),e.params,e.paramsSerializer),c&&a.set("Authorization","Basic "+btoa((c.username||"")+":"+(c.password?unescape(encodeURIComponent(c.password)):"")));let f;if(T.isFormData(n)){if(bt.hasStandardBrowserEnv||bt.hasStandardBrowserWebWorkerEnv)a.setContentType(void 0);else if((f=a.getContentType())!==!1){const[p,...d]=f?f.split(";").map(m=>m.trim()).filter(Boolean):[];a.setContentType([p||"multipart/form-data",...d].join("; "))}}if(bt.hasStandardBrowserEnv&&(s&&T.isFunction(s)&&(s=s(t)),s||s!==!1&&kv(t.url))){const p=i&&o&&Mv.read(o);p&&a.set(i,p)}return t},jv=typeof XMLHttpRequest<"u",Bv=jv&&function(e){return new Promise(function(n,s){const i=oh(e);let o=i.data;const a=yt.from(i.headers).normalize();let{responseType:c,onUploadProgress:f,onDownloadProgress:p}=i,d,m,b,w,C;function P(){w&&w(),C&&C(),i.cancelToken&&i.cancelToken.unsubscribe(d),i.signal&&i.signal.removeEventListener("abort",d)}let R=new XMLHttpRequest;R.open(i.method.toUpperCase(),i.url,!0),R.timeout=i.timeout;function $(){if(!R)return;const B=yt.from("getAllResponseHeaders"in R&&R.getAllResponseHeaders()),Y={data:!c||c==="text"||c==="json"?R.responseText:R.response,status:R.status,statusText:R.statusText,headers:B,config:e,request:R};rh(function(le){n(le),P()},function(le){s(le),P()},Y),R=null}"onloadend"in R?R.onloadend=$:R.onreadystatechange=function(){!R||R.readyState!==4||R.status===0&&!(R.responseURL&&R.responseURL.indexOf("file:")===0)||setTimeout($)},R.onabort=function(){R&&(s(new de("Request aborted",de.ECONNABORTED,e,R)),R=null)},R.onerror=function(){s(new de("Network Error",de.ERR_NETWORK,e,R)),R=null},R.ontimeout=function(){let H=i.timeout?"timeout of "+i.timeout+"ms exceeded":"timeout exceeded";const Y=i.transitional||th;i.timeoutErrorMessage&&(H=i.timeoutErrorMessage),s(new de(H,Y.clarifyTimeoutError?de.ETIMEDOUT:de.ECONNABORTED,e,R)),R=null},o===void 0&&a.setContentType(null),"setRequestHeader"in R&&T.forEach(a.toJSON(),function(H,Y){R.setRequestHeader(Y,H)}),T.isUndefined(i.withCredentials)||(R.withCredentials=!!i.withCredentials),c&&c!=="json"&&(R.responseType=i.responseType),p&&([b,C]=xi(p,!0),R.addEventListener("progress",b)),f&&R.upload&&([m,w]=xi(f),R.upload.addEventListener("progress",m),R.upload.addEventListener("loadend",w)),(i.cancelToken||i.signal)&&(d=B=>{R&&(s(!B||B.type?new Ks(null,e,R):B),R.abort(),R=null)},i.cancelToken&&i.cancelToken.subscribe(d),i.signal&&(i.signal.aborted?d():i.signal.addEventListener("abort",d)));const N=Lv(i.url);if(N&&bt.protocols.indexOf(N)===-1){s(new de("Unsupported protocol "+N+":",de.ERR_BAD_REQUEST,e));return}R.send(o||null)})},Hv=(e,t)=>{const{length:n}=e=e?e.filter(Boolean):[];if(t||n){let s=new AbortController,i;const o=function(p){if(!i){i=!0,c();const d=p instanceof Error?p:this.reason;s.abort(d instanceof de?d:new Ks(d instanceof Error?d.message:d))}};let a=t&&setTimeout(()=>{a=null,o(new de(`timeout ${t} of ms exceeded`,de.ETIMEDOUT))},t);const c=()=>{e&&(a&&clearTimeout(a),a=null,e.forEach(p=>{p.unsubscribe?p.unsubscribe(o):p.removeEventListener("abort",o)}),e=null)};e.forEach(p=>p.addEventListener("abort",o));const{signal:f}=s;return f.unsubscribe=()=>T.asap(c),f}},Uv=function*(e,t){let n=e.byteLength;if(!t||n{const i=Vv(e,t);let o=0,a,c=f=>{a||(a=!0,s&&s(f))};return new ReadableStream({async pull(f){try{const{done:p,value:d}=await i.next();if(p){c(),f.close();return}let m=d.byteLength;if(n){let b=o+=m;n(b)}f.enqueue(new Uint8Array(d))}catch(p){throw c(p),p}},cancel(f){return c(f),i.return()}},{highWaterMark:2})},Qi=typeof fetch=="function"&&typeof Request=="function"&&typeof Response=="function",ah=Qi&&typeof ReadableStream=="function",Wv=Qi&&(typeof TextEncoder=="function"?(e=>t=>e.encode(t))(new TextEncoder):async e=>new Uint8Array(await new Response(e).arrayBuffer())),lh=(e,...t)=>{try{return!!e(...t)}catch{return!1}},zv=ah&&lh(()=>{let e=!1;const t=new Request(bt.origin,{body:new ReadableStream,method:"POST",get duplex(){return e=!0,"half"}}).headers.has("Content-Type");return e&&!t}),qu=64*1024,ba=ah&&lh(()=>T.isReadableStream(new Response("").body)),Ri={stream:ba&&(e=>e.body)};Qi&&(e=>{["text","arrayBuffer","blob","formData","stream"].forEach(t=>{!Ri[t]&&(Ri[t]=T.isFunction(e[t])?n=>n[t]():(n,s)=>{throw new de(`Response type '${t}' is not supported`,de.ERR_NOT_SUPPORT,s)})})})(new Response);const Kv=async e=>{if(e==null)return 0;if(T.isBlob(e))return e.size;if(T.isSpecCompliantForm(e))return(await new Request(bt.origin,{method:"POST",body:e}).arrayBuffer()).byteLength;if(T.isArrayBufferView(e)||T.isArrayBuffer(e))return e.byteLength;if(T.isURLSearchParams(e)&&(e=e+""),T.isString(e))return(await Wv(e)).byteLength},Gv=async(e,t)=>{const n=T.toFiniteNumber(e.getContentLength());return n??Kv(t)},Jv=Qi&&(async e=>{let{url:t,method:n,data:s,signal:i,cancelToken:o,timeout:a,onDownloadProgress:c,onUploadProgress:f,responseType:p,headers:d,withCredentials:m="same-origin",fetchOptions:b}=oh(e);p=p?(p+"").toLowerCase():"text";let w=Hv([i,o&&o.toAbortSignal()],a),C;const P=w&&w.unsubscribe&&(()=>{w.unsubscribe()});let R;try{if(f&&zv&&n!=="get"&&n!=="head"&&(R=await Gv(d,s))!==0){let Y=new Request(t,{method:"POST",body:s,duplex:"half"}),ge;if(T.isFormData(s)&&(ge=Y.headers.get("content-type"))&&d.setContentType(ge),Y.body){const[le,te]=Bu(R,xi(Hu(f)));s=Vu(Y.body,qu,le,te)}}T.isString(m)||(m=m?"include":"omit");const $="credentials"in Request.prototype;C=new Request(t,{...b,signal:w,method:n.toUpperCase(),headers:d.normalize().toJSON(),body:s,duplex:"half",credentials:$?m:void 0});let N=await fetch(C);const B=ba&&(p==="stream"||p==="response");if(ba&&(c||B&&P)){const Y={};["status","statusText","headers"].forEach(q=>{Y[q]=N[q]});const ge=T.toFiniteNumber(N.headers.get("content-length")),[le,te]=c&&Bu(ge,xi(Hu(c),!0))||[];N=new Response(Vu(N.body,qu,le,()=>{te&&te(),P&&P()}),Y)}p=p||"text";let H=await Ri[T.findKey(Ri,p)||"text"](N,e);return!B&&P&&P(),await new Promise((Y,ge)=>{rh(Y,ge,{data:H,headers:yt.from(N.headers),status:N.status,statusText:N.statusText,config:e,request:C})})}catch($){throw P&&P(),$&&$.name==="TypeError"&&/fetch/i.test($.message)?Object.assign(new de("Network Error",de.ERR_NETWORK,e,C),{cause:$.cause||$}):de.from($,$&&$.code,e,C)}}),ya={http:uv,xhr:Bv,fetch:Jv};T.forEach(ya,(e,t)=>{if(e){try{Object.defineProperty(e,"name",{value:t})}catch{}Object.defineProperty(e,"adapterName",{value:t})}});const Wu=e=>`- ${e}`,Xv=e=>T.isFunction(e)||e===null||e===!1,ch={getAdapter:e=>{e=T.isArray(e)?e:[e];const{length:t}=e;let n,s;const i={};for(let o=0;o`adapter ${c} `+(f===!1?"is not supported by the environment":"is not available in the build"));let a=t?o.length>1?`since : +`+o.map(Wu).join(` +`):" "+Wu(o[0]):"as no adapter specified";throw new de("There is no suitable adapter to dispatch the request "+a,"ERR_NOT_SUPPORT")}return s},adapters:ya};function Qo(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new Ks(null,e)}function zu(e){return Qo(e),e.headers=yt.from(e.headers),e.data=Xo.call(e,e.transformRequest),["post","put","patch"].indexOf(e.method)!==-1&&e.headers.setContentType("application/x-www-form-urlencoded",!1),ch.getAdapter(e.adapter||Nr.adapter)(e).then(function(s){return Qo(e),s.data=Xo.call(e,e.transformResponse,s),s.headers=yt.from(s.headers),s},function(s){return sh(s)||(Qo(e),s&&s.response&&(s.response.data=Xo.call(e,e.transformResponse,s.response),s.response.headers=yt.from(s.response.headers))),Promise.reject(s)})}const uh="1.7.7",Qa={};["object","boolean","number","function","string","symbol"].forEach((e,t)=>{Qa[e]=function(s){return typeof s===e||"a"+(t<1?"n ":" ")+e}});const Ku={};Qa.transitional=function(t,n,s){function i(o,a){return"[Axios v"+uh+"] Transitional option '"+o+"'"+a+(s?". "+s:"")}return(o,a,c)=>{if(t===!1)throw new de(i(a," has been removed"+(n?" in "+n:"")),de.ERR_DEPRECATED);return n&&!Ku[a]&&(Ku[a]=!0,console.warn(i(a," has been deprecated since v"+n+" and will be removed in the near future"))),t?t(o,a,c):!0}};function Qv(e,t,n){if(typeof e!="object")throw new de("options must be an object",de.ERR_BAD_OPTION_VALUE);const s=Object.keys(e);let i=s.length;for(;i-- >0;){const o=s[i],a=t[o];if(a){const c=e[o],f=c===void 0||a(c,o,e);if(f!==!0)throw new de("option "+o+" must be "+f,de.ERR_BAD_OPTION_VALUE);continue}if(n!==!0)throw new de("Unknown option "+o,de.ERR_BAD_OPTION)}}const va={assertOptions:Qv,validators:Qa},Ln=va.validators;class fs{constructor(t){this.defaults=t,this.interceptors={request:new Fu,response:new Fu}}async request(t,n){try{return await this._request(t,n)}catch(s){if(s instanceof Error){let i;Error.captureStackTrace?Error.captureStackTrace(i={}):i=new Error;const o=i.stack?i.stack.replace(/^.+\n/,""):"";try{s.stack?o&&!String(s.stack).endsWith(o.replace(/^.+\n.+\n/,""))&&(s.stack+=` +`+o):s.stack=o}catch{}}throw s}}_request(t,n){typeof t=="string"?(n=n||{},n.url=t):n=t||{},n=ms(this.defaults,n);const{transitional:s,paramsSerializer:i,headers:o}=n;s!==void 0&&va.assertOptions(s,{silentJSONParsing:Ln.transitional(Ln.boolean),forcedJSONParsing:Ln.transitional(Ln.boolean),clarifyTimeoutError:Ln.transitional(Ln.boolean)},!1),i!=null&&(T.isFunction(i)?n.paramsSerializer={serialize:i}:va.assertOptions(i,{encode:Ln.function,serialize:Ln.function},!0)),n.method=(n.method||this.defaults.method||"get").toLowerCase();let a=o&&T.merge(o.common,o[n.method]);o&&T.forEach(["delete","get","head","post","put","patch","common"],C=>{delete o[C]}),n.headers=yt.concat(a,o);const c=[];let f=!0;this.interceptors.request.forEach(function(P){typeof P.runWhen=="function"&&P.runWhen(n)===!1||(f=f&&P.synchronous,c.unshift(P.fulfilled,P.rejected))});const p=[];this.interceptors.response.forEach(function(P){p.push(P.fulfilled,P.rejected)});let d,m=0,b;if(!f){const C=[zu.bind(this),void 0];for(C.unshift.apply(C,c),C.push.apply(C,p),b=C.length,d=Promise.resolve(n);m{if(!s._listeners)return;let o=s._listeners.length;for(;o-- >0;)s._listeners[o](i);s._listeners=null}),this.promise.then=i=>{let o;const a=new Promise(c=>{s.subscribe(c),o=c}).then(i);return a.cancel=function(){s.unsubscribe(o)},a},t(function(o,a,c){s.reason||(s.reason=new Ks(o,a,c),n(s.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(t){if(this.reason){t(this.reason);return}this._listeners?this._listeners.push(t):this._listeners=[t]}unsubscribe(t){if(!this._listeners)return;const n=this._listeners.indexOf(t);n!==-1&&this._listeners.splice(n,1)}toAbortSignal(){const t=new AbortController,n=s=>{t.abort(s)};return this.subscribe(n),t.signal.unsubscribe=()=>this.unsubscribe(n),t.signal}static source(){let t;return{token:new Ya(function(i){t=i}),cancel:t}}}function Yv(e){return function(n){return e.apply(null,n)}}function Zv(e){return T.isObject(e)&&e.isAxiosError===!0}const wa={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(wa).forEach(([e,t])=>{wa[t]=e});function fh(e){const t=new fs(e),n=Ud(fs.prototype.request,t);return T.extend(n,fs.prototype,t,{allOwnKeys:!0}),T.extend(n,t,null,{allOwnKeys:!0}),n.create=function(i){return fh(ms(e,i))},n}const Ke=fh(Nr);Ke.Axios=fs;Ke.CanceledError=Ks;Ke.CancelToken=Ya;Ke.isCancel=sh;Ke.VERSION=uh;Ke.toFormData=Xi;Ke.AxiosError=de;Ke.Cancel=Ke.CanceledError;Ke.all=function(t){return Promise.all(t)};Ke.spread=Yv;Ke.isAxiosError=Zv;Ke.mergeConfig=ms;Ke.AxiosHeaders=yt;Ke.formToJSON=e=>nh(T.isHTMLForm(e)?new FormData(e):e);Ke.getAdapter=ch.getAdapter;Ke.HttpStatusCode=wa;Ke.default=Ke;const ew="modulepreload",tw=function(e){return"/"+e},Gu={},on=function(t,n,s){let i=Promise.resolve();if(n&&n.length>0){document.getElementsByTagName("link");const o=document.querySelector("meta[property=csp-nonce]"),a=(o==null?void 0:o.nonce)||(o==null?void 0:o.getAttribute("nonce"));i=Promise.all(n.map(c=>{if(c=tw(c),c in Gu)return;Gu[c]=!0;const f=c.endsWith(".css"),p=f?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${c}"]${p}`))return;const d=document.createElement("link");if(d.rel=f?"stylesheet":ew,f||(d.as="script"),d.crossOrigin="",d.href=c,a&&d.setAttribute("nonce",a),document.head.appendChild(d),f)return new Promise((m,b)=>{d.addEventListener("load",m),d.addEventListener("error",()=>b(new Error(`Unable to preload CSS for ${c}`)))})}))}return i.then(()=>t()).catch(o=>{const a=new Event("vite:preloadError",{cancelable:!0});if(a.payload=o,window.dispatchEvent(a),!a.defaultPrevented)throw o})},dh=Ey({history:Qb(),routes:[{path:"/",name:"home",redirect:"/web/applications/swcatalog"},{path:"/web",name:"rootOssList",component:()=>on(()=>import("./OssList-D2HNfA-X.js"),__vite__mapDeps([0,1,2,3,4,5,6]))},{path:"/web/oss/list",name:"ossList",component:()=>on(()=>import("./OssList-D2HNfA-X.js"),__vite__mapDeps([0,1,2,3,4,5,6]))},{path:"/web/generate/yaml",name:"yamlGenerate",component:()=>on(()=>import("./YamlGenerate-B7KjN9b_.js"),__vite__mapDeps([7,5,8,9]))},{path:"/web/repository/list",redirect:e=>({name:"repositoryList",query:e.query,hash:e.hash})},{path:"/web/repository/detail/:repositoryName",redirect:e=>({name:"repositoryDetail",params:{repositoryName:e.params.repositoryName},query:e.query,hash:e.hash})},{path:"/web/softwareCatalog/install",name:"softwareCatalogInstall",component:()=>on(()=>import("./InstallSoftwareIframe-Bp8k8UuV.js"),__vite__mapDeps([10,11,12,5,13,8,14,15]))},{path:"/web/softwareCatalog",redirect:e=>({name:"softwareCatalog",query:e.query,hash:e.hash})},{path:"/web/applications/swcatalog",name:"softwareCatalog",component:()=>on(()=>import("./SoftwareCatalog-Bu30dAP1.js"),__vite__mapDeps([16,11,12,5,13,8,14,2,17,18,6,19]))},{path:"/web/applications/status",name:"applicationStatus",component:()=>on(()=>import("./ApplicationStatus-NBEpiqVW.js"),__vite__mapDeps([20,17,2,13,5,8,18,3,4,21]))},{path:"/web/applications/repository",component:()=>on(()=>import("./ApplicationRepository-BtCrZbPI.js"),__vite__mapDeps([22,1,2])),children:[{path:"",name:"repositoryList",component:()=>on(()=>import("./RepositoryList-CehXBmRT.js"),__vite__mapDeps([23,3,4,24,5,6]))},{path:":repositoryName",name:"repositoryDetail",component:()=>on(()=>import("./RepositoryDetail-CdOFQayq.js"),__vite__mapDeps([25,24,5,12,3,4]))}]},{path:"/web/softwareCatalog/list/test",name:"softwareCatalogListTest",component:()=>on(()=>import("./SoftwareCatalogListTest-D3DG0o_p.js"),__vite__mapDeps([26,1,2,13,5,8,12,11,14,27]))}]}),nw=vb("user",{state:()=>({accessToken:"",workspaceInfo:{id:"",name:"",description:"",created_at:"",updated_at:""},projectInfo:{id:"",ns_id:"",mci_id:"",cluster_id:"",name:"",description:"",created_at:"",updated_at:""},operationId:""}),actions:{setUser(e){this.accessToken=e.accessToken,this.workspaceInfo=e.workspaceInfo,this.projectInfo=e.projectInfo,this.operationId=e.operationId},getNsId(){var e,t,n,s;return((e=this.projectInfo)==null?void 0:e.ns_id)||((t=this.projectInfo)==null?void 0:t.nsid)||((n=this.projectInfo)==null?void 0:n.nsId)||((s=this.projectInfo)==null?void 0:s.NsId)||null},clearUser(){this.accessToken=null,this.workspaceInfo=null,this.projectInfo=null,this.operationId=null}}});let Ju=!1;dh.beforeEach(async(e,t,n)=>{Ju||(window.addEventListener("message",function(s){var f,p,d,m;const i=s.data;if(!i||typeof i!="object")return;const o=String(i.accessToken??"").trim(),a=((f=i.workspaceInfo)==null?void 0:f.id)??((p=i.workspaceInfo)==null?void 0:p.Id),c=((d=i.projectInfo)==null?void 0:d.id)??((m=i.projectInfo)==null?void 0:m.Id);if(!(!o||["undefined","null"].includes(o.toLowerCase())||!a||!c))try{nw().setUser(i)}catch{console.error("Unable to apply Web Console project context.")}}),Ju=!0),n()});const sw=e=>window.location.origin,f0=e=>e?/^(?:[a-z][a-z\d+\-.]*:)?\/\//i.test(e)||e.startsWith("data:")?e:`${window.location.origin}${e.startsWith("/")?"":"/"}${e}`:"";var rw=Object.defineProperty,Xu=Object.getOwnPropertySymbols,iw=Object.prototype.hasOwnProperty,ow=Object.prototype.propertyIsEnumerable,Qu=(e,t,n)=>t in e?rw(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,hh=(e,t)=>{for(var n in t||(t={}))iw.call(t,n)&&Qu(e,n,t[n]);if(Xu)for(var n of Xu(t))ow.call(t,n)&&Qu(e,n,t[n]);return e},Yi=e=>typeof e=="function",Zi=e=>typeof e=="string",ph=e=>Zi(e)&&e.trim().length>0,aw=e=>typeof e=="number",ls=e=>typeof e>"u",Tr=e=>typeof e=="object"&&e!==null,lw=e=>un(e,"tag")&&ph(e.tag),mh=e=>window.TouchEvent&&e instanceof TouchEvent,gh=e=>un(e,"component")&&_h(e.component),cw=e=>Yi(e)||Tr(e),_h=e=>!ls(e)&&(Zi(e)||cw(e)||gh(e)),Yu=e=>Tr(e)&&["height","width","right","left","top","bottom"].every(t=>aw(e[t])),un=(e,t)=>(Tr(e)||Yi(e))&&t in e,uw=(e=>()=>e++)(0);function Yo(e){return mh(e)?e.targetTouches[0].clientX:e.clientX}function Zu(e){return mh(e)?e.targetTouches[0].clientY:e.clientY}var fw=e=>{ls(e.remove)?e.parentNode&&e.parentNode.removeChild(e):e.remove()},kr=e=>gh(e)?kr(e.component):lw(e)?dn({render(){return e}}):typeof e=="string"?e:Ee(jn(e)),dw=e=>{if(typeof e=="string")return e;const t=un(e,"props")&&Tr(e.props)?e.props:{},n=un(e,"listeners")&&Tr(e.listeners)?e.listeners:{};return{component:kr(e),props:t,listeners:n}},hw=()=>typeof window<"u",Za=class{constructor(){this.allHandlers={}}getHandlers(e){return this.allHandlers[e]||[]}on(e,t){const n=this.getHandlers(e);n.push(t),this.allHandlers[e]=n}off(e,t){const n=this.getHandlers(e);n.splice(n.indexOf(t)>>>0,1)}emit(e,t){this.getHandlers(e).forEach(s=>s(t))}},pw=e=>["on","off","emit"].every(t=>un(e,t)&&Yi(e[t])),Tt;(function(e){e.SUCCESS="success",e.ERROR="error",e.WARNING="warning",e.INFO="info",e.DEFAULT="default"})(Tt||(Tt={}));var Pi;(function(e){e.TOP_LEFT="top-left",e.TOP_CENTER="top-center",e.TOP_RIGHT="top-right",e.BOTTOM_LEFT="bottom-left",e.BOTTOM_CENTER="bottom-center",e.BOTTOM_RIGHT="bottom-right"})(Pi||(Pi={}));var At;(function(e){e.ADD="add",e.DISMISS="dismiss",e.UPDATE="update",e.CLEAR="clear",e.UPDATE_DEFAULTS="update_defaults"})(At||(At={}));var Wt="Vue-Toastification",Vt={type:{type:String,default:Tt.DEFAULT},classNames:{type:[String,Array],default:()=>[]},trueBoolean:{type:Boolean,default:!0}},bh={type:Vt.type,customIcon:{type:[String,Boolean,Object,Function],default:!0}},bi={component:{type:[String,Object,Function,Boolean],default:"button"},classNames:Vt.classNames,showOnHover:{type:Boolean,default:!1},ariaLabel:{type:String,default:"close"}},Ea={timeout:{type:[Number,Boolean],default:5e3},hideProgressBar:{type:Boolean,default:!1},isRunning:{type:Boolean,default:!1}},yh={transition:{type:[Object,String],default:`${Wt}__bounce`}},mw={position:{type:String,default:Pi.TOP_RIGHT},draggable:Vt.trueBoolean,draggablePercent:{type:Number,default:.6},pauseOnFocusLoss:Vt.trueBoolean,pauseOnHover:Vt.trueBoolean,closeOnClick:Vt.trueBoolean,timeout:Ea.timeout,hideProgressBar:Ea.hideProgressBar,toastClassName:Vt.classNames,bodyClassName:Vt.classNames,icon:bh.customIcon,closeButton:bi.component,closeButtonClassName:bi.classNames,showCloseButtonOnHover:bi.showOnHover,accessibility:{type:Object,default:()=>({toastRole:"alert",closeButtonLabel:"close"})},rtl:{type:Boolean,default:!1},eventBus:{type:Object,required:!1,default:()=>new Za}},gw={id:{type:[String,Number],required:!0,default:0},type:Vt.type,content:{type:[String,Object,Function],required:!0,default:""},onClick:{type:Function,default:void 0},onClose:{type:Function,default:void 0}},_w={container:{type:[Object,Function],default:()=>document.body},newestOnTop:Vt.trueBoolean,maxToasts:{type:Number,default:20},transition:yh.transition,toastDefaults:Object,filterBeforeCreate:{type:Function,default:e=>e},filterToasts:{type:Function,default:e=>e},containerClassName:Vt.classNames,onMounted:Function,shareAppContext:[Boolean,Object]},Cn={CORE_TOAST:mw,TOAST:gw,CONTAINER:_w,PROGRESS_BAR:Ea,ICON:bh,TRANSITION:yh,CLOSE_BUTTON:bi},vh=dn({name:"VtProgressBar",props:Cn.PROGRESS_BAR,data(){return{hasClass:!0}},computed:{style(){return{animationDuration:`${this.timeout}ms`,animationPlayState:this.isRunning?"running":"paused",opacity:this.hideProgressBar?0:1}},cpClass(){return this.hasClass?`${Wt}__progress-bar`:""}},watch:{timeout(){this.hasClass=!1,this.$nextTick(()=>this.hasClass=!0)}},mounted(){this.$el.addEventListener("animationend",this.animationEnded)},beforeUnmount(){this.$el.removeEventListener("animationend",this.animationEnded)},methods:{animationEnded(){this.$emit("close-toast")}}});function bw(e,t){return Ue(),qt("div",{style:Or(e.style),class:Hn(e.cpClass)},null,6)}vh.render=bw;var yw=vh,wh=dn({name:"VtCloseButton",props:Cn.CLOSE_BUTTON,computed:{buttonComponent(){return this.component!==!1?kr(this.component):"button"},classes(){const e=[`${Wt}__close-button`];return this.showOnHover&&e.push("show-on-hover"),e.concat(this.classNames)}}}),vw=Bi(" × ");function ww(e,t){return Ue(),jt(Ua(e.buttonComponent),Hi({"aria-label":e.ariaLabel,class:e.classes},e.$attrs),{default:Ir(()=>[vw]),_:1},16,["aria-label","class"])}wh.render=ww;var Ew=wh,Eh={},Cw={"aria-hidden":"true",focusable:"false","data-prefix":"fas","data-icon":"check-circle",class:"svg-inline--fa fa-check-circle fa-w-16",role:"img",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 512 512"},Sw=_s("path",{fill:"currentColor",d:"M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zM227.314 387.314l184-184c6.248-6.248 6.248-16.379 0-22.627l-22.627-22.627c-6.248-6.249-16.379-6.249-22.628 0L216 308.118l-70.059-70.059c-6.248-6.248-16.379-6.248-22.628 0l-22.627 22.627c-6.248 6.248-6.248 16.379 0 22.627l104 104c6.249 6.249 16.379 6.249 22.628.001z"},null,-1),Tw=[Sw];function Aw(e,t){return Ue(),qt("svg",Cw,Tw)}Eh.render=Aw;var Ow=Eh,Ch={},xw={"aria-hidden":"true",focusable:"false","data-prefix":"fas","data-icon":"info-circle",class:"svg-inline--fa fa-info-circle fa-w-16",role:"img",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 512 512"},Rw=_s("path",{fill:"currentColor",d:"M256 8C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8zm0 110c23.196 0 42 18.804 42 42s-18.804 42-42 42-42-18.804-42-42 18.804-42 42-42zm56 254c0 6.627-5.373 12-12 12h-88c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h12v-64h-12c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h64c6.627 0 12 5.373 12 12v100h12c6.627 0 12 5.373 12 12v24z"},null,-1),Pw=[Rw];function Iw(e,t){return Ue(),qt("svg",xw,Pw)}Ch.render=Iw;var ef=Ch,Sh={},Lw={"aria-hidden":"true",focusable:"false","data-prefix":"fas","data-icon":"exclamation-circle",class:"svg-inline--fa fa-exclamation-circle fa-w-16",role:"img",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 512 512"},Dw=_s("path",{fill:"currentColor",d:"M504 256c0 136.997-111.043 248-248 248S8 392.997 8 256C8 119.083 119.043 8 256 8s248 111.083 248 248zm-248 50c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z"},null,-1),Nw=[Dw];function kw(e,t){return Ue(),qt("svg",Lw,Nw)}Sh.render=kw;var Mw=Sh,Th={},$w={"aria-hidden":"true",focusable:"false","data-prefix":"fas","data-icon":"exclamation-triangle",class:"svg-inline--fa fa-exclamation-triangle fa-w-18",role:"img",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 576 512"},Fw=_s("path",{fill:"currentColor",d:"M569.517 440.013C587.975 472.007 564.806 512 527.94 512H48.054c-36.937 0-59.999-40.055-41.577-71.987L246.423 23.985c18.467-32.009 64.72-31.951 83.154 0l239.94 416.028zM288 354c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z"},null,-1),jw=[Fw];function Bw(e,t){return Ue(),qt("svg",$w,jw)}Th.render=Bw;var Hw=Th,Ah=dn({name:"VtIcon",props:Cn.ICON,computed:{customIconChildren(){return un(this.customIcon,"iconChildren")?this.trimValue(this.customIcon.iconChildren):""},customIconClass(){return Zi(this.customIcon)?this.trimValue(this.customIcon):un(this.customIcon,"iconClass")?this.trimValue(this.customIcon.iconClass):""},customIconTag(){return un(this.customIcon,"iconTag")?this.trimValue(this.customIcon.iconTag,"i"):"i"},hasCustomIcon(){return this.customIconClass.length>0},component(){return this.hasCustomIcon?this.customIconTag:_h(this.customIcon)?kr(this.customIcon):this.iconTypeComponent},iconTypeComponent(){return{[Tt.DEFAULT]:ef,[Tt.INFO]:ef,[Tt.SUCCESS]:Ow,[Tt.ERROR]:Hw,[Tt.WARNING]:Mw}[this.type]},iconClasses(){const e=[`${Wt}__icon`];return this.hasCustomIcon?e.concat(this.customIconClass):e}},methods:{trimValue(e,t=""){return ph(e)?e.trim():t}}});function Uw(e,t){return Ue(),jt(Ua(e.component),{class:Hn(e.iconClasses)},{default:Ir(()=>[Bi(xa(e.customIconChildren),1)]),_:1},8,["class"])}Ah.render=Uw;var Vw=Ah,Oh=dn({name:"VtToast",components:{ProgressBar:yw,CloseButton:Ew,Icon:Vw},inheritAttrs:!1,props:Object.assign({},Cn.CORE_TOAST,Cn.TOAST),data(){return{isRunning:!0,disableTransitions:!1,beingDragged:!1,dragStart:0,dragPos:{x:0,y:0},dragRect:{}}},computed:{classes(){const e=[`${Wt}__toast`,`${Wt}__toast--${this.type}`,`${this.position}`].concat(this.toastClassName);return this.disableTransitions&&e.push("disable-transition"),this.rtl&&e.push(`${Wt}__toast--rtl`),e},bodyClasses(){return[`${Wt}__toast-${Zi(this.content)?"body":"component-body"}`].concat(this.bodyClassName)},draggableStyle(){return this.dragStart===this.dragPos.x?{}:this.beingDragged?{transform:`translateX(${this.dragDelta}px)`,opacity:1-Math.abs(this.dragDelta/this.removalDistance)}:{transition:"transform 0.2s, opacity 0.2s",transform:"translateX(0)",opacity:1}},dragDelta(){return this.beingDragged?this.dragPos.x-this.dragStart:0},removalDistance(){return Yu(this.dragRect)?(this.dragRect.right-this.dragRect.left)*this.draggablePercent:0}},mounted(){this.draggable&&this.draggableSetup(),this.pauseOnFocusLoss&&this.focusSetup()},beforeUnmount(){this.draggable&&this.draggableCleanup(),this.pauseOnFocusLoss&&this.focusCleanup()},methods:{hasProp:un,getVueComponentFromObj:kr,closeToast(){this.eventBus.emit(At.DISMISS,this.id)},clickHandler(){this.onClick&&this.onClick(this.closeToast),this.closeOnClick&&(!this.beingDragged||this.dragStart===this.dragPos.x)&&this.closeToast()},timeoutHandler(){this.closeToast()},hoverPause(){this.pauseOnHover&&(this.isRunning=!1)},hoverPlay(){this.pauseOnHover&&(this.isRunning=!0)},focusPause(){this.isRunning=!1},focusPlay(){this.isRunning=!0},focusSetup(){addEventListener("blur",this.focusPause),addEventListener("focus",this.focusPlay)},focusCleanup(){removeEventListener("blur",this.focusPause),removeEventListener("focus",this.focusPlay)},draggableSetup(){const e=this.$el;e.addEventListener("touchstart",this.onDragStart,{passive:!0}),e.addEventListener("mousedown",this.onDragStart),addEventListener("touchmove",this.onDragMove,{passive:!1}),addEventListener("mousemove",this.onDragMove),addEventListener("touchend",this.onDragEnd),addEventListener("mouseup",this.onDragEnd)},draggableCleanup(){const e=this.$el;e.removeEventListener("touchstart",this.onDragStart),e.removeEventListener("mousedown",this.onDragStart),removeEventListener("touchmove",this.onDragMove),removeEventListener("mousemove",this.onDragMove),removeEventListener("touchend",this.onDragEnd),removeEventListener("mouseup",this.onDragEnd)},onDragStart(e){this.beingDragged=!0,this.dragPos={x:Yo(e),y:Zu(e)},this.dragStart=Yo(e),this.dragRect=this.$el.getBoundingClientRect()},onDragMove(e){this.beingDragged&&(e.preventDefault(),this.isRunning&&(this.isRunning=!1),this.dragPos={x:Yo(e),y:Zu(e)})},onDragEnd(){this.beingDragged&&(Math.abs(this.dragDelta)>=this.removalDistance?(this.disableTransitions=!0,this.$nextTick(()=>this.closeToast())):setTimeout(()=>{this.beingDragged=!1,Yu(this.dragRect)&&this.pauseOnHover&&this.dragRect.bottom>=this.dragPos.y&&this.dragPos.y>=this.dragRect.top&&this.dragRect.left<=this.dragPos.x&&this.dragPos.x<=this.dragRect.right?this.isRunning=!1:this.isRunning=!0}))}}}),qw=["role"];function Ww(e,t){const n=cr("Icon"),s=cr("CloseButton"),i=cr("ProgressBar");return Ue(),qt("div",{class:Hn(e.classes),style:Or(e.draggableStyle),onClick:t[0]||(t[0]=(...o)=>e.clickHandler&&e.clickHandler(...o)),onMouseenter:t[1]||(t[1]=(...o)=>e.hoverPause&&e.hoverPause(...o)),onMouseleave:t[2]||(t[2]=(...o)=>e.hoverPlay&&e.hoverPlay(...o))},[e.icon?(Ue(),jt(n,{key:0,"custom-icon":e.icon,type:e.type},null,8,["custom-icon","type"])):Bo("v-if",!0),_s("div",{role:e.accessibility.toastRole||"alert",class:Hn(e.bodyClasses)},[typeof e.content=="string"?(Ue(),qt(tt,{key:0},[Bi(xa(e.content),1)],2112)):(Ue(),jt(Ua(e.getVueComponentFromObj(e.content)),Hi({key:1,"toast-id":e.id},e.hasProp(e.content,"props")?e.content.props:{},Hg(e.hasProp(e.content,"listeners")?e.content.listeners:{}),{onCloseToast:e.closeToast}),null,16,["toast-id","onCloseToast"]))],10,qw),e.closeButton?(Ue(),jt(s,{key:1,component:e.closeButton,"class-names":e.closeButtonClassName,"show-on-hover":e.showCloseButtonOnHover,"aria-label":e.accessibility.closeButtonLabel,onClick:lb(e.closeToast,["stop"])},null,8,["component","class-names","show-on-hover","aria-label","onClick"])):Bo("v-if",!0),e.timeout?(Ue(),jt(i,{key:2,"is-running":e.isRunning,"hide-progress-bar":e.hideProgressBar,timeout:e.timeout,onCloseToast:e.timeoutHandler},null,8,["is-running","hide-progress-bar","timeout","onCloseToast"])):Bo("v-if",!0)],38)}Oh.render=Ww;var zw=Oh,xh=dn({name:"VtTransition",props:Cn.TRANSITION,emits:["leave"],methods:{hasProp:un,leave(e){e instanceof HTMLElement&&(e.style.left=e.offsetLeft+"px",e.style.top=e.offsetTop+"px",e.style.width=getComputedStyle(e).width,e.style.position="absolute")}}});function Kw(e,t){return Ue(),jt(eb,{tag:"div","enter-active-class":e.transition.enter?e.transition.enter:`${e.transition}-enter-active`,"move-class":e.transition.move?e.transition.move:`${e.transition}-move`,"leave-active-class":e.transition.leave?e.transition.leave:`${e.transition}-leave-active`,onLeave:e.leave},{default:Ir(()=>[Bg(e.$slots,"default")]),_:3},8,["enter-active-class","move-class","leave-active-class","onLeave"])}xh.render=Kw;var Gw=xh,Rh=dn({name:"VueToastification",devtools:{hide:!0},components:{Toast:zw,VtTransition:Gw},props:Object.assign({},Cn.CORE_TOAST,Cn.CONTAINER,Cn.TRANSITION),data(){return{count:0,positions:Object.values(Pi),toasts:{},defaults:{}}},computed:{toastArray(){return Object.values(this.toasts)},filteredToasts(){return this.defaults.filterToasts(this.toastArray)}},beforeMount(){const e=this.eventBus;e.on(At.ADD,this.addToast),e.on(At.CLEAR,this.clearToasts),e.on(At.DISMISS,this.dismissToast),e.on(At.UPDATE,this.updateToast),e.on(At.UPDATE_DEFAULTS,this.updateDefaults),this.defaults=this.$props},mounted(){this.setup(this.container)},methods:{async setup(e){Yi(e)&&(e=await e()),fw(this.$el),e.appendChild(this.$el)},setToast(e){ls(e.id)||(this.toasts[e.id]=e)},addToast(e){e.content=dw(e.content);const t=Object.assign({},this.defaults,e.type&&this.defaults.toastDefaults&&this.defaults.toastDefaults[e.type],e),n=this.defaults.filterBeforeCreate(t,this.toastArray);n&&this.setToast(n)},dismissToast(e){const t=this.toasts[e];!ls(t)&&!ls(t.onClose)&&t.onClose(),delete this.toasts[e]},clearToasts(){Object.keys(this.toasts).forEach(e=>{this.dismissToast(e)})},getPositionToasts(e){const t=this.filteredToasts.filter(n=>n.position===e).slice(0,this.defaults.maxToasts);return this.defaults.newestOnTop?t.reverse():t},updateDefaults(e){ls(e.container)||this.setup(e.container),this.defaults=Object.assign({},this.defaults,e)},updateToast({id:e,options:t,create:n}){this.toasts[e]?(t.timeout&&t.timeout===this.toasts[e].timeout&&t.timeout++,this.setToast(Object.assign({},this.toasts[e],t))):n&&this.addToast(Object.assign({},{id:e},t))},getClasses(e){return[`${Wt}__container`,e].concat(this.defaults.containerClassName)}}});function Jw(e,t){const n=cr("Toast"),s=cr("VtTransition");return Ue(),qt("div",null,[(Ue(!0),qt(tt,null,jc(e.positions,i=>(Ue(),qt("div",{key:i},[nt(s,{transition:e.defaults.transition,class:Hn(e.getClasses(i))},{default:Ir(()=>[(Ue(!0),qt(tt,null,jc(e.getPositionToasts(i),o=>(Ue(),jt(n,Hi({key:o.id},o),null,16))),128))]),_:2},1032,["transition","class"])]))),128))])}Rh.render=Jw;var Xw=Rh,tf=(e={},t=!0)=>{const n=e.eventBus=e.eventBus||new Za;t&&Pr(()=>{const o=Td(Xw,hh({},e)),a=o.mount(document.createElement("div")),c=e.onMounted;if(ls(c)||c(a,o),e.shareAppContext){const f=e.shareAppContext;f===!0?console.warn(`[${Wt}] App to share context with was not provided.`):(o._context.components=f._context.components,o._context.directives=f._context.directives,o._context.mixins=f._context.mixins,o._context.provides=f._context.provides,o.config.globalProperties=f.config.globalProperties)}});const s=(o,a)=>{const c=Object.assign({},{id:uw(),type:Tt.DEFAULT},a,{content:o});return n.emit(At.ADD,c),c.id};s.clear=()=>n.emit(At.CLEAR,void 0),s.updateDefaults=o=>{n.emit(At.UPDATE_DEFAULTS,o)},s.dismiss=o=>{n.emit(At.DISMISS,o)};function i(o,{content:a,options:c},f=!1){const p=Object.assign({},c,{content:a});n.emit(At.UPDATE,{id:o,options:p,create:f})}return s.update=i,s.success=(o,a)=>s(o,Object.assign({},a,{type:Tt.SUCCESS})),s.info=(o,a)=>s(o,Object.assign({},a,{type:Tt.INFO})),s.error=(o,a)=>s(o,Object.assign({},a,{type:Tt.ERROR})),s.warning=(o,a)=>s(o,Object.assign({},a,{type:Tt.WARNING})),s},Qw=()=>{const e=()=>console.warn(`[${Wt}] This plugin does not support SSR!`);return new Proxy(e,{get(){return e}})};function Ph(e){return hw()?pw(e)?tf({eventBus:e},!1):tf(e,!0):Qw()}var Ih=Symbol("VueToastification"),Lh=new Za,Yw=(e,t)=>{(t==null?void 0:t.shareAppContext)===!0&&(t.shareAppContext=e);const n=Ph(hh({eventBus:Lh},t));e.provide(Ih,n)},d0=e=>{const t=hd()?xt(Ih,void 0):void 0;return t||Ph(Lh)},Zw=Yw,e0=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function h0(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var t0={exports:{}};/*! + * Bootstrap v5.3.3 (https://getbootstrap.com/) + * Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */(function(e,t){(function(n,s){e.exports=s()})(e0,function(){const n=new Map,s={set(u,r,l){n.has(u)||n.set(u,new Map);const h=n.get(u);h.has(r)||h.size===0?h.set(r,l):console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(h.keys())[0]}.`)},get:(u,r)=>n.has(u)&&n.get(u).get(r)||null,remove(u,r){if(!n.has(u))return;const l=n.get(u);l.delete(r),l.size===0&&n.delete(u)}},i="transitionend",o=u=>(u&&window.CSS&&window.CSS.escape&&(u=u.replace(/#([^\s"#']+)/g,(r,l)=>`#${CSS.escape(l)}`)),u),a=u=>{u.dispatchEvent(new Event(i))},c=u=>!(!u||typeof u!="object")&&(u.jquery!==void 0&&(u=u[0]),u.nodeType!==void 0),f=u=>c(u)?u.jquery?u[0]:u:typeof u=="string"&&u.length>0?document.querySelector(o(u)):null,p=u=>{if(!c(u)||u.getClientRects().length===0)return!1;const r=getComputedStyle(u).getPropertyValue("visibility")==="visible",l=u.closest("details:not([open])");if(!l)return r;if(l!==u){const h=u.closest("summary");if(h&&h.parentNode!==l||h===null)return!1}return r},d=u=>!u||u.nodeType!==Node.ELEMENT_NODE||!!u.classList.contains("disabled")||(u.disabled!==void 0?u.disabled:u.hasAttribute("disabled")&&u.getAttribute("disabled")!=="false"),m=u=>{if(!document.documentElement.attachShadow)return null;if(typeof u.getRootNode=="function"){const r=u.getRootNode();return r instanceof ShadowRoot?r:null}return u instanceof ShadowRoot?u:u.parentNode?m(u.parentNode):null},b=()=>{},w=u=>{u.offsetHeight},C=()=>window.jQuery&&!document.body.hasAttribute("data-bs-no-jquery")?window.jQuery:null,P=[],R=()=>document.documentElement.dir==="rtl",$=u=>{var r;r=()=>{const l=C();if(l){const h=u.NAME,y=l.fn[h];l.fn[h]=u.jQueryInterface,l.fn[h].Constructor=u,l.fn[h].noConflict=()=>(l.fn[h]=y,u.jQueryInterface)}},document.readyState==="loading"?(P.length||document.addEventListener("DOMContentLoaded",()=>{for(const l of P)l()}),P.push(r)):r()},N=(u,r=[],l=u)=>typeof u=="function"?u(...r):l,B=(u,r,l=!0)=>{if(!l)return void N(u);const h=(S=>{if(!S)return 0;let{transitionDuration:L,transitionDelay:j}=window.getComputedStyle(S);const J=Number.parseFloat(L),X=Number.parseFloat(j);return J||X?(L=L.split(",")[0],j=j.split(",")[0],1e3*(Number.parseFloat(L)+Number.parseFloat(j))):0})(r)+5;let y=!1;const v=({target:S})=>{S===r&&(y=!0,r.removeEventListener(i,v),N(u))};r.addEventListener(i,v),setTimeout(()=>{y||a(r)},h)},H=(u,r,l,h)=>{const y=u.length;let v=u.indexOf(r);return v===-1?!l&&h?u[y-1]:u[0]:(v+=l?1:-1,h&&(v=(v+y)%y),u[Math.max(0,Math.min(v,y-1))])},Y=/[^.]*(?=\..*)\.|.*/,ge=/\..*/,le=/::\d+$/,te={};let q=1;const oe={mouseenter:"mouseover",mouseleave:"mouseout"},ve=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function G(u,r){return r&&`${r}::${q++}`||u.uidEvent||q++}function be(u){const r=G(u);return u.uidEvent=r,te[r]=te[r]||{},te[r]}function He(u,r,l=null){return Object.values(u).find(h=>h.callable===r&&h.delegationSelector===l)}function st(u,r,l){const h=typeof r=="string",y=h?l:r||l;let v=Pt(u);return ve.has(v)||(v=u),[h,y,v]}function Oe(u,r,l,h,y){if(typeof r!="string"||!u)return;let[v,S,L]=st(r,l,h);r in oe&&(S=(ce=>function(ie){if(!ie.relatedTarget||ie.relatedTarget!==ie.delegateTarget&&!ie.delegateTarget.contains(ie.relatedTarget))return ce.call(this,ie)})(S));const j=be(u),J=j[L]||(j[L]={}),X=He(J,S,v?l:null);if(X)return void(X.oneOff=X.oneOff&&y);const K=G(S,r.replace(Y,"")),he=v?function(se,ce,ie){return function ue(Le){const Fe=se.querySelectorAll(ce);for(let{target:_e}=Le;_e&&_e!==this;_e=_e.parentNode)for(const Ae of Fe)if(Ae===_e)return _t(Le,{delegateTarget:_e}),ue.oneOff&&I.off(se,Le.type,ce,ie),ie.apply(_e,[Le])}}(u,l,S):function(se,ce){return function ie(ue){return _t(ue,{delegateTarget:se}),ie.oneOff&&I.off(se,ue.type,ce),ce.apply(se,[ue])}}(u,S);he.delegationSelector=v?l:null,he.callable=S,he.oneOff=y,he.uidEvent=K,J[K]=he,u.addEventListener(L,he,v)}function ae(u,r,l,h,y){const v=He(r[l],h,y);v&&(u.removeEventListener(l,v,!!y),delete r[l][v.uidEvent])}function Se(u,r,l,h){const y=r[l]||{};for(const[v,S]of Object.entries(y))v.includes(h)&&ae(u,r,l,S.callable,S.delegationSelector)}function Pt(u){return u=u.replace(ge,""),oe[u]||u}const I={on(u,r,l,h){Oe(u,r,l,h,!1)},one(u,r,l,h){Oe(u,r,l,h,!0)},off(u,r,l,h){if(typeof r!="string"||!u)return;const[y,v,S]=st(r,l,h),L=S!==r,j=be(u),J=j[S]||{},X=r.startsWith(".");if(v===void 0){if(X)for(const K of Object.keys(j))Se(u,j,K,r.slice(1));for(const[K,he]of Object.entries(J)){const se=K.replace(le,"");L&&!r.includes(se)||ae(u,j,S,he.callable,he.delegationSelector)}}else{if(!Object.keys(J).length)return;ae(u,j,S,v,y?l:null)}},trigger(u,r,l){if(typeof r!="string"||!u)return null;const h=C();let y=null,v=!0,S=!0,L=!1;r!==Pt(r)&&h&&(y=h.Event(r,l),h(u).trigger(y),v=!y.isPropagationStopped(),S=!y.isImmediatePropagationStopped(),L=y.isDefaultPrevented());const j=_t(new Event(r,{bubbles:v,cancelable:!0}),l);return L&&j.preventDefault(),S&&u.dispatchEvent(j),j.defaultPrevented&&y&&y.preventDefault(),j}};function _t(u,r={}){for(const[l,h]of Object.entries(r))try{u[l]=h}catch{Object.defineProperty(u,l,{configurable:!0,get:()=>h})}return u}function et(u){if(u==="true")return!0;if(u==="false")return!1;if(u===Number(u).toString())return Number(u);if(u===""||u==="null")return null;if(typeof u!="string")return u;try{return JSON.parse(decodeURIComponent(u))}catch{return u}}function Yt(u){return u.replace(/[A-Z]/g,r=>`-${r.toLowerCase()}`)}const rt={setDataAttribute(u,r,l){u.setAttribute(`data-bs-${Yt(r)}`,l)},removeDataAttribute(u,r){u.removeAttribute(`data-bs-${Yt(r)}`)},getDataAttributes(u){if(!u)return{};const r={},l=Object.keys(u.dataset).filter(h=>h.startsWith("bs")&&!h.startsWith("bsConfig"));for(const h of l){let y=h.replace(/^bs/,"");y=y.charAt(0).toLowerCase()+y.slice(1,y.length),r[y]=et(u.dataset[h])}return r},getDataAttribute:(u,r)=>et(u.getAttribute(`data-bs-${Yt(r)}`))};class Zt{static get Default(){return{}}static get DefaultType(){return{}}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}_getConfig(r){return r=this._mergeConfigObj(r),r=this._configAfterMerge(r),this._typeCheckConfig(r),r}_configAfterMerge(r){return r}_mergeConfigObj(r,l){const h=c(l)?rt.getDataAttribute(l,"config"):{};return{...this.constructor.Default,...typeof h=="object"?h:{},...c(l)?rt.getDataAttributes(l):{},...typeof r=="object"?r:{}}}_typeCheckConfig(r,l=this.constructor.DefaultType){for(const[y,v]of Object.entries(l)){const S=r[y],L=c(S)?"element":(h=S)==null?`${h}`:Object.prototype.toString.call(h).match(/\s([a-z]+)/i)[1].toLowerCase();if(!new RegExp(v).test(L))throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${y}" provided type "${L}" but expected type "${v}".`)}var h}}class Be extends Zt{constructor(r,l){super(),(r=f(r))&&(this._element=r,this._config=this._getConfig(l),s.set(this._element,this.constructor.DATA_KEY,this))}dispose(){s.remove(this._element,this.constructor.DATA_KEY),I.off(this._element,this.constructor.EVENT_KEY);for(const r of Object.getOwnPropertyNames(this))this[r]=null}_queueCallback(r,l,h=!0){B(r,l,h)}_getConfig(r){return r=this._mergeConfigObj(r,this._element),r=this._configAfterMerge(r),this._typeCheckConfig(r),r}static getInstance(r){return s.get(f(r),this.DATA_KEY)}static getOrCreateInstance(r,l={}){return this.getInstance(r)||new this(r,typeof l=="object"?l:null)}static get VERSION(){return"5.3.3"}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}static eventName(r){return`${r}${this.EVENT_KEY}`}}const x=u=>{let r=u.getAttribute("data-bs-target");if(!r||r==="#"){let l=u.getAttribute("href");if(!l||!l.includes("#")&&!l.startsWith("."))return null;l.includes("#")&&!l.startsWith("#")&&(l=`#${l.split("#")[1]}`),r=l&&l!=="#"?l.trim():null}return r?r.split(",").map(l=>o(l)).join(","):null},A={find:(u,r=document.documentElement)=>[].concat(...Element.prototype.querySelectorAll.call(r,u)),findOne:(u,r=document.documentElement)=>Element.prototype.querySelector.call(r,u),children:(u,r)=>[].concat(...u.children).filter(l=>l.matches(r)),parents(u,r){const l=[];let h=u.parentNode.closest(r);for(;h;)l.push(h),h=h.parentNode.closest(r);return l},prev(u,r){let l=u.previousElementSibling;for(;l;){if(l.matches(r))return[l];l=l.previousElementSibling}return[]},next(u,r){let l=u.nextElementSibling;for(;l;){if(l.matches(r))return[l];l=l.nextElementSibling}return[]},focusableChildren(u){const r=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map(l=>`${l}:not([tabindex^="-"])`).join(",");return this.find(r,u).filter(l=>!d(l)&&p(l))},getSelectorFromElement(u){const r=x(u);return r&&A.findOne(r)?r:null},getElementFromSelector(u){const r=x(u);return r?A.findOne(r):null},getMultipleElementsFromSelector(u){const r=x(u);return r?A.find(r):[]}},V=(u,r="hide")=>{const l=`click.dismiss${u.EVENT_KEY}`,h=u.NAME;I.on(document,l,`[data-bs-dismiss="${h}"]`,function(y){if(["A","AREA"].includes(this.tagName)&&y.preventDefault(),d(this))return;const v=A.getElementFromSelector(this)||this.closest(`.${h}`);u.getOrCreateInstance(v)[r]()})},Z=".bs.alert",Te=`close${Z}`,je=`closed${Z}`;class g extends Be{static get NAME(){return"alert"}close(){if(I.trigger(this._element,Te).defaultPrevented)return;this._element.classList.remove("show");const r=this._element.classList.contains("fade");this._queueCallback(()=>this._destroyElement(),this._element,r)}_destroyElement(){this._element.remove(),I.trigger(this._element,je),this.dispose()}static jQueryInterface(r){return this.each(function(){const l=g.getOrCreateInstance(this);if(typeof r=="string"){if(l[r]===void 0||r.startsWith("_")||r==="constructor")throw new TypeError(`No method named "${r}"`);l[r](this)}})}}V(g,"close"),$(g);const _='[data-bs-toggle="button"]';class E extends Be{static get NAME(){return"button"}toggle(){this._element.setAttribute("aria-pressed",this._element.classList.toggle("active"))}static jQueryInterface(r){return this.each(function(){const l=E.getOrCreateInstance(this);r==="toggle"&&l[r]()})}}I.on(document,"click.bs.button.data-api",_,u=>{u.preventDefault();const r=u.target.closest(_);E.getOrCreateInstance(r).toggle()}),$(E);const D=".bs.swipe",O=`touchstart${D}`,k=`touchmove${D}`,W=`touchend${D}`,U=`pointerdown${D}`,F=`pointerup${D}`,M={endCallback:null,leftCallback:null,rightCallback:null},ne={endCallback:"(function|null)",leftCallback:"(function|null)",rightCallback:"(function|null)"};class z extends Zt{constructor(r,l){super(),this._element=r,r&&z.isSupported()&&(this._config=this._getConfig(l),this._deltaX=0,this._supportPointerEvents=!!window.PointerEvent,this._initEvents())}static get Default(){return M}static get DefaultType(){return ne}static get NAME(){return"swipe"}dispose(){I.off(this._element,D)}_start(r){this._supportPointerEvents?this._eventIsPointerPenTouch(r)&&(this._deltaX=r.clientX):this._deltaX=r.touches[0].clientX}_end(r){this._eventIsPointerPenTouch(r)&&(this._deltaX=r.clientX-this._deltaX),this._handleSwipe(),N(this._config.endCallback)}_move(r){this._deltaX=r.touches&&r.touches.length>1?0:r.touches[0].clientX-this._deltaX}_handleSwipe(){const r=Math.abs(this._deltaX);if(r<=40)return;const l=r/this._deltaX;this._deltaX=0,l&&N(l>0?this._config.rightCallback:this._config.leftCallback)}_initEvents(){this._supportPointerEvents?(I.on(this._element,U,r=>this._start(r)),I.on(this._element,F,r=>this._end(r)),this._element.classList.add("pointer-event")):(I.on(this._element,O,r=>this._start(r)),I.on(this._element,k,r=>this._move(r)),I.on(this._element,W,r=>this._end(r)))}_eventIsPointerPenTouch(r){return this._supportPointerEvents&&(r.pointerType==="pen"||r.pointerType==="touch")}static isSupported(){return"ontouchstart"in document.documentElement||navigator.maxTouchPoints>0}}const Q=".bs.carousel",re=".data-api",pe="next",Ce="prev",ye="left",Xe="right",Qe=`slide${Q}`,at=`slid${Q}`,lt=`keydown${Q}`,Wn=`mouseenter${Q}`,$r=`mouseleave${Q}`,ct=`dragstart${Q}`,It=`load${Q}${re}`,Fr=`click${Q}${re}`,el="carousel",jr="active",tl=".active",nl=".carousel-item",Dh=tl+nl,Nh={ArrowLeft:Xe,ArrowRight:ye},kh={interval:5e3,keyboard:!0,pause:"hover",ride:!1,touch:!0,wrap:!0},Mh={interval:"(number|boolean)",keyboard:"boolean",pause:"(string|boolean)",ride:"(boolean|string)",touch:"boolean",wrap:"boolean"};class bs extends Be{constructor(r,l){super(r,l),this._interval=null,this._activeElement=null,this._isSliding=!1,this.touchTimeout=null,this._swipeHelper=null,this._indicatorsElement=A.findOne(".carousel-indicators",this._element),this._addEventListeners(),this._config.ride===el&&this.cycle()}static get Default(){return kh}static get DefaultType(){return Mh}static get NAME(){return"carousel"}next(){this._slide(pe)}nextWhenVisible(){!document.hidden&&p(this._element)&&this.next()}prev(){this._slide(Ce)}pause(){this._isSliding&&a(this._element),this._clearInterval()}cycle(){this._clearInterval(),this._updateInterval(),this._interval=setInterval(()=>this.nextWhenVisible(),this._config.interval)}_maybeEnableCycle(){this._config.ride&&(this._isSliding?I.one(this._element,at,()=>this.cycle()):this.cycle())}to(r){const l=this._getItems();if(r>l.length-1||r<0)return;if(this._isSliding)return void I.one(this._element,at,()=>this.to(r));const h=this._getItemIndex(this._getActive());if(h===r)return;const y=r>h?pe:Ce;this._slide(y,l[r])}dispose(){this._swipeHelper&&this._swipeHelper.dispose(),super.dispose()}_configAfterMerge(r){return r.defaultInterval=r.interval,r}_addEventListeners(){this._config.keyboard&&I.on(this._element,lt,r=>this._keydown(r)),this._config.pause==="hover"&&(I.on(this._element,Wn,()=>this.pause()),I.on(this._element,$r,()=>this._maybeEnableCycle())),this._config.touch&&z.isSupported()&&this._addTouchEventListeners()}_addTouchEventListeners(){for(const l of A.find(".carousel-item img",this._element))I.on(l,ct,h=>h.preventDefault());const r={leftCallback:()=>this._slide(this._directionToOrder(ye)),rightCallback:()=>this._slide(this._directionToOrder(Xe)),endCallback:()=>{this._config.pause==="hover"&&(this.pause(),this.touchTimeout&&clearTimeout(this.touchTimeout),this.touchTimeout=setTimeout(()=>this._maybeEnableCycle(),500+this._config.interval))}};this._swipeHelper=new z(this._element,r)}_keydown(r){if(/input|textarea/i.test(r.target.tagName))return;const l=Nh[r.key];l&&(r.preventDefault(),this._slide(this._directionToOrder(l)))}_getItemIndex(r){return this._getItems().indexOf(r)}_setActiveIndicatorElement(r){if(!this._indicatorsElement)return;const l=A.findOne(tl,this._indicatorsElement);l.classList.remove(jr),l.removeAttribute("aria-current");const h=A.findOne(`[data-bs-slide-to="${r}"]`,this._indicatorsElement);h&&(h.classList.add(jr),h.setAttribute("aria-current","true"))}_updateInterval(){const r=this._activeElement||this._getActive();if(!r)return;const l=Number.parseInt(r.getAttribute("data-bs-interval"),10);this._config.interval=l||this._config.defaultInterval}_slide(r,l=null){if(this._isSliding)return;const h=this._getActive(),y=r===pe,v=l||H(this._getItems(),h,y,this._config.wrap);if(v===h)return;const S=this._getItemIndex(v),L=K=>I.trigger(this._element,K,{relatedTarget:v,direction:this._orderToDirection(r),from:this._getItemIndex(h),to:S});if(L(Qe).defaultPrevented||!h||!v)return;const j=!!this._interval;this.pause(),this._isSliding=!0,this._setActiveIndicatorElement(S),this._activeElement=v;const J=y?"carousel-item-start":"carousel-item-end",X=y?"carousel-item-next":"carousel-item-prev";v.classList.add(X),w(v),h.classList.add(J),v.classList.add(J),this._queueCallback(()=>{v.classList.remove(J,X),v.classList.add(jr),h.classList.remove(jr,X,J),this._isSliding=!1,L(at)},h,this._isAnimated()),j&&this.cycle()}_isAnimated(){return this._element.classList.contains("slide")}_getActive(){return A.findOne(Dh,this._element)}_getItems(){return A.find(nl,this._element)}_clearInterval(){this._interval&&(clearInterval(this._interval),this._interval=null)}_directionToOrder(r){return R()?r===ye?Ce:pe:r===ye?pe:Ce}_orderToDirection(r){return R()?r===Ce?ye:Xe:r===Ce?Xe:ye}static jQueryInterface(r){return this.each(function(){const l=bs.getOrCreateInstance(this,r);if(typeof r!="number"){if(typeof r=="string"){if(l[r]===void 0||r.startsWith("_")||r==="constructor")throw new TypeError(`No method named "${r}"`);l[r]()}}else l.to(r)})}}I.on(document,Fr,"[data-bs-slide], [data-bs-slide-to]",function(u){const r=A.getElementFromSelector(this);if(!r||!r.classList.contains(el))return;u.preventDefault();const l=bs.getOrCreateInstance(r),h=this.getAttribute("data-bs-slide-to");return h?(l.to(h),void l._maybeEnableCycle()):rt.getDataAttribute(this,"slide")==="next"?(l.next(),void l._maybeEnableCycle()):(l.prev(),void l._maybeEnableCycle())}),I.on(window,It,()=>{const u=A.find('[data-bs-ride="carousel"]');for(const r of u)bs.getOrCreateInstance(r)}),$(bs);const Gs=".bs.collapse",$h=`show${Gs}`,Fh=`shown${Gs}`,jh=`hide${Gs}`,Bh=`hidden${Gs}`,Hh=`click${Gs}.data-api`,eo="show",ys="collapse",Br="collapsing",Uh=`:scope .${ys} .${ys}`,to='[data-bs-toggle="collapse"]',Vh={parent:null,toggle:!0},qh={parent:"(null|element)",toggle:"boolean"};class vs extends Be{constructor(r,l){super(r,l),this._isTransitioning=!1,this._triggerArray=[];const h=A.find(to);for(const y of h){const v=A.getSelectorFromElement(y),S=A.find(v).filter(L=>L===this._element);v!==null&&S.length&&this._triggerArray.push(y)}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return Vh}static get DefaultType(){return qh}static get NAME(){return"collapse"}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let r=[];if(this._config.parent&&(r=this._getFirstLevelChildren(".collapse.show, .collapse.collapsing").filter(y=>y!==this._element).map(y=>vs.getOrCreateInstance(y,{toggle:!1}))),r.length&&r[0]._isTransitioning||I.trigger(this._element,$h).defaultPrevented)return;for(const y of r)y.hide();const l=this._getDimension();this._element.classList.remove(ys),this._element.classList.add(Br),this._element.style[l]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;const h=`scroll${l[0].toUpperCase()+l.slice(1)}`;this._queueCallback(()=>{this._isTransitioning=!1,this._element.classList.remove(Br),this._element.classList.add(ys,eo),this._element.style[l]="",I.trigger(this._element,Fh)},this._element,!0),this._element.style[l]=`${this._element[h]}px`}hide(){if(this._isTransitioning||!this._isShown()||I.trigger(this._element,jh).defaultPrevented)return;const r=this._getDimension();this._element.style[r]=`${this._element.getBoundingClientRect()[r]}px`,w(this._element),this._element.classList.add(Br),this._element.classList.remove(ys,eo);for(const l of this._triggerArray){const h=A.getElementFromSelector(l);h&&!this._isShown(h)&&this._addAriaAndCollapsedClass([l],!1)}this._isTransitioning=!0,this._element.style[r]="",this._queueCallback(()=>{this._isTransitioning=!1,this._element.classList.remove(Br),this._element.classList.add(ys),I.trigger(this._element,Bh)},this._element,!0)}_isShown(r=this._element){return r.classList.contains(eo)}_configAfterMerge(r){return r.toggle=!!r.toggle,r.parent=f(r.parent),r}_getDimension(){return this._element.classList.contains("collapse-horizontal")?"width":"height"}_initializeChildren(){if(!this._config.parent)return;const r=this._getFirstLevelChildren(to);for(const l of r){const h=A.getElementFromSelector(l);h&&this._addAriaAndCollapsedClass([l],this._isShown(h))}}_getFirstLevelChildren(r){const l=A.find(Uh,this._config.parent);return A.find(r,this._config.parent).filter(h=>!l.includes(h))}_addAriaAndCollapsedClass(r,l){if(r.length)for(const h of r)h.classList.toggle("collapsed",!l),h.setAttribute("aria-expanded",l)}static jQueryInterface(r){const l={};return typeof r=="string"&&/show|hide/.test(r)&&(l.toggle=!1),this.each(function(){const h=vs.getOrCreateInstance(this,l);if(typeof r=="string"){if(h[r]===void 0)throw new TypeError(`No method named "${r}"`);h[r]()}})}}I.on(document,Hh,to,function(u){(u.target.tagName==="A"||u.delegateTarget&&u.delegateTarget.tagName==="A")&&u.preventDefault();for(const r of A.getMultipleElementsFromSelector(this))vs.getOrCreateInstance(r,{toggle:!1}).toggle()}),$(vs);var ut="top",vt="bottom",wt="right",ft="left",Hr="auto",ws=[ut,vt,wt,ft],zn="start",Es="end",sl="clippingParents",no="viewport",Cs="popper",rl="reference",so=ws.reduce(function(u,r){return u.concat([r+"-"+zn,r+"-"+Es])},[]),ro=[].concat(ws,[Hr]).reduce(function(u,r){return u.concat([r,r+"-"+zn,r+"-"+Es])},[]),il="beforeRead",ol="read",al="afterRead",ll="beforeMain",cl="main",ul="afterMain",fl="beforeWrite",dl="write",hl="afterWrite",pl=[il,ol,al,ll,cl,ul,fl,dl,hl];function en(u){return u?(u.nodeName||"").toLowerCase():null}function Et(u){if(u==null)return window;if(u.toString()!=="[object Window]"){var r=u.ownerDocument;return r&&r.defaultView||window}return u}function Kn(u){return u instanceof Et(u).Element||u instanceof Element}function Lt(u){return u instanceof Et(u).HTMLElement||u instanceof HTMLElement}function io(u){return typeof ShadowRoot<"u"&&(u instanceof Et(u).ShadowRoot||u instanceof ShadowRoot)}const oo={name:"applyStyles",enabled:!0,phase:"write",fn:function(u){var r=u.state;Object.keys(r.elements).forEach(function(l){var h=r.styles[l]||{},y=r.attributes[l]||{},v=r.elements[l];Lt(v)&&en(v)&&(Object.assign(v.style,h),Object.keys(y).forEach(function(S){var L=y[S];L===!1?v.removeAttribute(S):v.setAttribute(S,L===!0?"":L)}))})},effect:function(u){var r=u.state,l={popper:{position:r.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(r.elements.popper.style,l.popper),r.styles=l,r.elements.arrow&&Object.assign(r.elements.arrow.style,l.arrow),function(){Object.keys(r.elements).forEach(function(h){var y=r.elements[h],v=r.attributes[h]||{},S=Object.keys(r.styles.hasOwnProperty(h)?r.styles[h]:l[h]).reduce(function(L,j){return L[j]="",L},{});Lt(y)&&en(y)&&(Object.assign(y.style,S),Object.keys(v).forEach(function(L){y.removeAttribute(L)}))})}},requires:["computeStyles"]};function tn(u){return u.split("-")[0]}var Gn=Math.max,Ur=Math.min,Ss=Math.round;function ao(){var u=navigator.userAgentData;return u!=null&&u.brands&&Array.isArray(u.brands)?u.brands.map(function(r){return r.brand+"/"+r.version}).join(" "):navigator.userAgent}function ml(){return!/^((?!chrome|android).)*safari/i.test(ao())}function Ts(u,r,l){r===void 0&&(r=!1),l===void 0&&(l=!1);var h=u.getBoundingClientRect(),y=1,v=1;r&&Lt(u)&&(y=u.offsetWidth>0&&Ss(h.width)/u.offsetWidth||1,v=u.offsetHeight>0&&Ss(h.height)/u.offsetHeight||1);var S=(Kn(u)?Et(u):window).visualViewport,L=!ml()&&l,j=(h.left+(L&&S?S.offsetLeft:0))/y,J=(h.top+(L&&S?S.offsetTop:0))/v,X=h.width/y,K=h.height/v;return{width:X,height:K,top:J,right:j+X,bottom:J+K,left:j,x:j,y:J}}function lo(u){var r=Ts(u),l=u.offsetWidth,h=u.offsetHeight;return Math.abs(r.width-l)<=1&&(l=r.width),Math.abs(r.height-h)<=1&&(h=r.height),{x:u.offsetLeft,y:u.offsetTop,width:l,height:h}}function gl(u,r){var l=r.getRootNode&&r.getRootNode();if(u.contains(r))return!0;if(l&&io(l)){var h=r;do{if(h&&u.isSameNode(h))return!0;h=h.parentNode||h.host}while(h)}return!1}function hn(u){return Et(u).getComputedStyle(u)}function Wh(u){return["table","td","th"].indexOf(en(u))>=0}function An(u){return((Kn(u)?u.ownerDocument:u.document)||window.document).documentElement}function Vr(u){return en(u)==="html"?u:u.assignedSlot||u.parentNode||(io(u)?u.host:null)||An(u)}function _l(u){return Lt(u)&&hn(u).position!=="fixed"?u.offsetParent:null}function Js(u){for(var r=Et(u),l=_l(u);l&&Wh(l)&&hn(l).position==="static";)l=_l(l);return l&&(en(l)==="html"||en(l)==="body"&&hn(l).position==="static")?r:l||function(h){var y=/firefox/i.test(ao());if(/Trident/i.test(ao())&&Lt(h)&&hn(h).position==="fixed")return null;var v=Vr(h);for(io(v)&&(v=v.host);Lt(v)&&["html","body"].indexOf(en(v))<0;){var S=hn(v);if(S.transform!=="none"||S.perspective!=="none"||S.contain==="paint"||["transform","perspective"].indexOf(S.willChange)!==-1||y&&S.willChange==="filter"||y&&S.filter&&S.filter!=="none")return v;v=v.parentNode}return null}(u)||r}function co(u){return["top","bottom"].indexOf(u)>=0?"x":"y"}function Xs(u,r,l){return Gn(u,Ur(r,l))}function bl(u){return Object.assign({},{top:0,right:0,bottom:0,left:0},u)}function yl(u,r){return r.reduce(function(l,h){return l[h]=u,l},{})}const vl={name:"arrow",enabled:!0,phase:"main",fn:function(u){var r,l=u.state,h=u.name,y=u.options,v=l.elements.arrow,S=l.modifiersData.popperOffsets,L=tn(l.placement),j=co(L),J=[ft,wt].indexOf(L)>=0?"height":"width";if(v&&S){var X=function(De,Re){return bl(typeof(De=typeof De=="function"?De(Object.assign({},Re.rects,{placement:Re.placement})):De)!="number"?De:yl(De,ws))}(y.padding,l),K=lo(v),he=j==="y"?ut:ft,se=j==="y"?vt:wt,ce=l.rects.reference[J]+l.rects.reference[j]-S[j]-l.rects.popper[J],ie=S[j]-l.rects.reference[j],ue=Js(v),Le=ue?j==="y"?ue.clientHeight||0:ue.clientWidth||0:0,Fe=ce/2-ie/2,_e=X[he],Ae=Le-K[J]-X[se],me=Le/2-K[J]/2+Fe,we=Xs(_e,me,Ae),xe=j;l.modifiersData[h]=((r={})[xe]=we,r.centerOffset=we-me,r)}},effect:function(u){var r=u.state,l=u.options.element,h=l===void 0?"[data-popper-arrow]":l;h!=null&&(typeof h!="string"||(h=r.elements.popper.querySelector(h)))&&gl(r.elements.popper,h)&&(r.elements.arrow=h)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function As(u){return u.split("-")[1]}var zh={top:"auto",right:"auto",bottom:"auto",left:"auto"};function wl(u){var r,l=u.popper,h=u.popperRect,y=u.placement,v=u.variation,S=u.offsets,L=u.position,j=u.gpuAcceleration,J=u.adaptive,X=u.roundOffsets,K=u.isFixed,he=S.x,se=he===void 0?0:he,ce=S.y,ie=ce===void 0?0:ce,ue=typeof X=="function"?X({x:se,y:ie}):{x:se,y:ie};se=ue.x,ie=ue.y;var Le=S.hasOwnProperty("x"),Fe=S.hasOwnProperty("y"),_e=ft,Ae=ut,me=window;if(J){var we=Js(l),xe="clientHeight",De="clientWidth";we===Et(l)&&hn(we=An(l)).position!=="static"&&L==="absolute"&&(xe="scrollHeight",De="scrollWidth"),(y===ut||(y===ft||y===wt)&&v===Es)&&(Ae=vt,ie-=(K&&we===me&&me.visualViewport?me.visualViewport.height:we[xe])-h.height,ie*=j?1:-1),y!==ft&&(y!==ut&&y!==vt||v!==Es)||(_e=wt,se-=(K&&we===me&&me.visualViewport?me.visualViewport.width:we[De])-h.width,se*=j?1:-1)}var Re,We=Object.assign({position:L},J&&zh),Ct=X===!0?function(Ut,dt){var Nt=Ut.x,kt=Ut.y,Ve=dt.devicePixelRatio||1;return{x:Ss(Nt*Ve)/Ve||0,y:Ss(kt*Ve)/Ve||0}}({x:se,y:ie},Et(l)):{x:se,y:ie};return se=Ct.x,ie=Ct.y,j?Object.assign({},We,((Re={})[Ae]=Fe?"0":"",Re[_e]=Le?"0":"",Re.transform=(me.devicePixelRatio||1)<=1?"translate("+se+"px, "+ie+"px)":"translate3d("+se+"px, "+ie+"px, 0)",Re)):Object.assign({},We,((r={})[Ae]=Fe?ie+"px":"",r[_e]=Le?se+"px":"",r.transform="",r))}const uo={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(u){var r=u.state,l=u.options,h=l.gpuAcceleration,y=h===void 0||h,v=l.adaptive,S=v===void 0||v,L=l.roundOffsets,j=L===void 0||L,J={placement:tn(r.placement),variation:As(r.placement),popper:r.elements.popper,popperRect:r.rects.popper,gpuAcceleration:y,isFixed:r.options.strategy==="fixed"};r.modifiersData.popperOffsets!=null&&(r.styles.popper=Object.assign({},r.styles.popper,wl(Object.assign({},J,{offsets:r.modifiersData.popperOffsets,position:r.options.strategy,adaptive:S,roundOffsets:j})))),r.modifiersData.arrow!=null&&(r.styles.arrow=Object.assign({},r.styles.arrow,wl(Object.assign({},J,{offsets:r.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:j})))),r.attributes.popper=Object.assign({},r.attributes.popper,{"data-popper-placement":r.placement})},data:{}};var qr={passive:!0};const fo={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(u){var r=u.state,l=u.instance,h=u.options,y=h.scroll,v=y===void 0||y,S=h.resize,L=S===void 0||S,j=Et(r.elements.popper),J=[].concat(r.scrollParents.reference,r.scrollParents.popper);return v&&J.forEach(function(X){X.addEventListener("scroll",l.update,qr)}),L&&j.addEventListener("resize",l.update,qr),function(){v&&J.forEach(function(X){X.removeEventListener("scroll",l.update,qr)}),L&&j.removeEventListener("resize",l.update,qr)}},data:{}};var Kh={left:"right",right:"left",bottom:"top",top:"bottom"};function Wr(u){return u.replace(/left|right|bottom|top/g,function(r){return Kh[r]})}var Gh={start:"end",end:"start"};function El(u){return u.replace(/start|end/g,function(r){return Gh[r]})}function ho(u){var r=Et(u);return{scrollLeft:r.pageXOffset,scrollTop:r.pageYOffset}}function po(u){return Ts(An(u)).left+ho(u).scrollLeft}function mo(u){var r=hn(u),l=r.overflow,h=r.overflowX,y=r.overflowY;return/auto|scroll|overlay|hidden/.test(l+y+h)}function Cl(u){return["html","body","#document"].indexOf(en(u))>=0?u.ownerDocument.body:Lt(u)&&mo(u)?u:Cl(Vr(u))}function Qs(u,r){var l;r===void 0&&(r=[]);var h=Cl(u),y=h===((l=u.ownerDocument)==null?void 0:l.body),v=Et(h),S=y?[v].concat(v.visualViewport||[],mo(h)?h:[]):h,L=r.concat(S);return y?L:L.concat(Qs(Vr(S)))}function go(u){return Object.assign({},u,{left:u.x,top:u.y,right:u.x+u.width,bottom:u.y+u.height})}function Sl(u,r,l){return r===no?go(function(h,y){var v=Et(h),S=An(h),L=v.visualViewport,j=S.clientWidth,J=S.clientHeight,X=0,K=0;if(L){j=L.width,J=L.height;var he=ml();(he||!he&&y==="fixed")&&(X=L.offsetLeft,K=L.offsetTop)}return{width:j,height:J,x:X+po(h),y:K}}(u,l)):Kn(r)?function(h,y){var v=Ts(h,!1,y==="fixed");return v.top=v.top+h.clientTop,v.left=v.left+h.clientLeft,v.bottom=v.top+h.clientHeight,v.right=v.left+h.clientWidth,v.width=h.clientWidth,v.height=h.clientHeight,v.x=v.left,v.y=v.top,v}(r,l):go(function(h){var y,v=An(h),S=ho(h),L=(y=h.ownerDocument)==null?void 0:y.body,j=Gn(v.scrollWidth,v.clientWidth,L?L.scrollWidth:0,L?L.clientWidth:0),J=Gn(v.scrollHeight,v.clientHeight,L?L.scrollHeight:0,L?L.clientHeight:0),X=-S.scrollLeft+po(h),K=-S.scrollTop;return hn(L||v).direction==="rtl"&&(X+=Gn(v.clientWidth,L?L.clientWidth:0)-j),{width:j,height:J,x:X,y:K}}(An(u)))}function Tl(u){var r,l=u.reference,h=u.element,y=u.placement,v=y?tn(y):null,S=y?As(y):null,L=l.x+l.width/2-h.width/2,j=l.y+l.height/2-h.height/2;switch(v){case ut:r={x:L,y:l.y-h.height};break;case vt:r={x:L,y:l.y+l.height};break;case wt:r={x:l.x+l.width,y:j};break;case ft:r={x:l.x-h.width,y:j};break;default:r={x:l.x,y:l.y}}var J=v?co(v):null;if(J!=null){var X=J==="y"?"height":"width";switch(S){case zn:r[J]=r[J]-(l[X]/2-h[X]/2);break;case Es:r[J]=r[J]+(l[X]/2-h[X]/2)}}return r}function Os(u,r){r===void 0&&(r={});var l=r,h=l.placement,y=h===void 0?u.placement:h,v=l.strategy,S=v===void 0?u.strategy:v,L=l.boundary,j=L===void 0?sl:L,J=l.rootBoundary,X=J===void 0?no:J,K=l.elementContext,he=K===void 0?Cs:K,se=l.altBoundary,ce=se!==void 0&&se,ie=l.padding,ue=ie===void 0?0:ie,Le=bl(typeof ue!="number"?ue:yl(ue,ws)),Fe=he===Cs?rl:Cs,_e=u.rects.popper,Ae=u.elements[ce?Fe:he],me=function(dt,Nt,kt,Ve){var nn=Nt==="clippingParents"?function(Ne){var ht=Qs(Vr(Ne)),Mt=["absolute","fixed"].indexOf(hn(Ne).position)>=0&&Lt(Ne)?Js(Ne):Ne;return Kn(Mt)?ht.filter(function(xn){return Kn(xn)&&gl(xn,Mt)&&en(xn)!=="body"}):[]}(dt):[].concat(Nt),sn=[].concat(nn,[kt]),Ps=sn[0],Ye=sn.reduce(function(Ne,ht){var Mt=Sl(dt,ht,Ve);return Ne.top=Gn(Mt.top,Ne.top),Ne.right=Ur(Mt.right,Ne.right),Ne.bottom=Ur(Mt.bottom,Ne.bottom),Ne.left=Gn(Mt.left,Ne.left),Ne},Sl(dt,Ps,Ve));return Ye.width=Ye.right-Ye.left,Ye.height=Ye.bottom-Ye.top,Ye.x=Ye.left,Ye.y=Ye.top,Ye}(Kn(Ae)?Ae:Ae.contextElement||An(u.elements.popper),j,X,S),we=Ts(u.elements.reference),xe=Tl({reference:we,element:_e,strategy:"absolute",placement:y}),De=go(Object.assign({},_e,xe)),Re=he===Cs?De:we,We={top:me.top-Re.top+Le.top,bottom:Re.bottom-me.bottom+Le.bottom,left:me.left-Re.left+Le.left,right:Re.right-me.right+Le.right},Ct=u.modifiersData.offset;if(he===Cs&&Ct){var Ut=Ct[y];Object.keys(We).forEach(function(dt){var Nt=[wt,vt].indexOf(dt)>=0?1:-1,kt=[ut,vt].indexOf(dt)>=0?"y":"x";We[dt]+=Ut[kt]*Nt})}return We}function Jh(u,r){r===void 0&&(r={});var l=r,h=l.placement,y=l.boundary,v=l.rootBoundary,S=l.padding,L=l.flipVariations,j=l.allowedAutoPlacements,J=j===void 0?ro:j,X=As(h),K=X?L?so:so.filter(function(ce){return As(ce)===X}):ws,he=K.filter(function(ce){return J.indexOf(ce)>=0});he.length===0&&(he=K);var se=he.reduce(function(ce,ie){return ce[ie]=Os(u,{placement:ie,boundary:y,rootBoundary:v,padding:S})[tn(ie)],ce},{});return Object.keys(se).sort(function(ce,ie){return se[ce]-se[ie]})}const Al={name:"flip",enabled:!0,phase:"main",fn:function(u){var r=u.state,l=u.options,h=u.name;if(!r.modifiersData[h]._skip){for(var y=l.mainAxis,v=y===void 0||y,S=l.altAxis,L=S===void 0||S,j=l.fallbackPlacements,J=l.padding,X=l.boundary,K=l.rootBoundary,he=l.altBoundary,se=l.flipVariations,ce=se===void 0||se,ie=l.allowedAutoPlacements,ue=r.options.placement,Le=tn(ue),Fe=j||(Le!==ue&&ce?function(Ne){if(tn(Ne)===Hr)return[];var ht=Wr(Ne);return[El(Ne),ht,El(ht)]}(ue):[Wr(ue)]),_e=[ue].concat(Fe).reduce(function(Ne,ht){return Ne.concat(tn(ht)===Hr?Jh(r,{placement:ht,boundary:X,rootBoundary:K,padding:J,flipVariations:ce,allowedAutoPlacements:ie}):ht)},[]),Ae=r.rects.reference,me=r.rects.popper,we=new Map,xe=!0,De=_e[0],Re=0;Re<_e.length;Re++){var We=_e[Re],Ct=tn(We),Ut=As(We)===zn,dt=[ut,vt].indexOf(Ct)>=0,Nt=dt?"width":"height",kt=Os(r,{placement:We,boundary:X,rootBoundary:K,altBoundary:he,padding:J}),Ve=dt?Ut?wt:ft:Ut?vt:ut;Ae[Nt]>me[Nt]&&(Ve=Wr(Ve));var nn=Wr(Ve),sn=[];if(v&&sn.push(kt[Ct]<=0),L&&sn.push(kt[Ve]<=0,kt[nn]<=0),sn.every(function(Ne){return Ne})){De=We,xe=!1;break}we.set(We,sn)}if(xe)for(var Ps=function(Ne){var ht=_e.find(function(Mt){var xn=we.get(Mt);if(xn)return xn.slice(0,Ne).every(function(ei){return ei})});if(ht)return De=ht,"break"},Ye=ce?3:1;Ye>0&&Ps(Ye)!=="break";Ye--);r.placement!==De&&(r.modifiersData[h]._skip=!0,r.placement=De,r.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function Ol(u,r,l){return l===void 0&&(l={x:0,y:0}),{top:u.top-r.height-l.y,right:u.right-r.width+l.x,bottom:u.bottom-r.height+l.y,left:u.left-r.width-l.x}}function xl(u){return[ut,wt,vt,ft].some(function(r){return u[r]>=0})}const Rl={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(u){var r=u.state,l=u.name,h=r.rects.reference,y=r.rects.popper,v=r.modifiersData.preventOverflow,S=Os(r,{elementContext:"reference"}),L=Os(r,{altBoundary:!0}),j=Ol(S,h),J=Ol(L,y,v),X=xl(j),K=xl(J);r.modifiersData[l]={referenceClippingOffsets:j,popperEscapeOffsets:J,isReferenceHidden:X,hasPopperEscaped:K},r.attributes.popper=Object.assign({},r.attributes.popper,{"data-popper-reference-hidden":X,"data-popper-escaped":K})}},Pl={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(u){var r=u.state,l=u.options,h=u.name,y=l.offset,v=y===void 0?[0,0]:y,S=ro.reduce(function(X,K){return X[K]=function(he,se,ce){var ie=tn(he),ue=[ft,ut].indexOf(ie)>=0?-1:1,Le=typeof ce=="function"?ce(Object.assign({},se,{placement:he})):ce,Fe=Le[0],_e=Le[1];return Fe=Fe||0,_e=(_e||0)*ue,[ft,wt].indexOf(ie)>=0?{x:_e,y:Fe}:{x:Fe,y:_e}}(K,r.rects,v),X},{}),L=S[r.placement],j=L.x,J=L.y;r.modifiersData.popperOffsets!=null&&(r.modifiersData.popperOffsets.x+=j,r.modifiersData.popperOffsets.y+=J),r.modifiersData[h]=S}},_o={name:"popperOffsets",enabled:!0,phase:"read",fn:function(u){var r=u.state,l=u.name;r.modifiersData[l]=Tl({reference:r.rects.reference,element:r.rects.popper,strategy:"absolute",placement:r.placement})},data:{}},Il={name:"preventOverflow",enabled:!0,phase:"main",fn:function(u){var r=u.state,l=u.options,h=u.name,y=l.mainAxis,v=y===void 0||y,S=l.altAxis,L=S!==void 0&&S,j=l.boundary,J=l.rootBoundary,X=l.altBoundary,K=l.padding,he=l.tether,se=he===void 0||he,ce=l.tetherOffset,ie=ce===void 0?0:ce,ue=Os(r,{boundary:j,rootBoundary:J,padding:K,altBoundary:X}),Le=tn(r.placement),Fe=As(r.placement),_e=!Fe,Ae=co(Le),me=Ae==="x"?"y":"x",we=r.modifiersData.popperOffsets,xe=r.rects.reference,De=r.rects.popper,Re=typeof ie=="function"?ie(Object.assign({},r.rects,{placement:r.placement})):ie,We=typeof Re=="number"?{mainAxis:Re,altAxis:Re}:Object.assign({mainAxis:0,altAxis:0},Re),Ct=r.modifiersData.offset?r.modifiersData.offset[r.placement]:null,Ut={x:0,y:0};if(we){if(v){var dt,Nt=Ae==="y"?ut:ft,kt=Ae==="y"?vt:wt,Ve=Ae==="y"?"height":"width",nn=we[Ae],sn=nn+ue[Nt],Ps=nn-ue[kt],Ye=se?-De[Ve]/2:0,Ne=Fe===zn?xe[Ve]:De[Ve],ht=Fe===zn?-De[Ve]:-xe[Ve],Mt=r.elements.arrow,xn=se&&Mt?lo(Mt):{width:0,height:0},ei=r.modifiersData["arrow#persistent"]?r.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},_c=ei[Nt],bc=ei[kt],ti=Xs(0,xe[Ve],xn[Ve]),Sm=_e?xe[Ve]/2-Ye-ti-_c-We.mainAxis:Ne-ti-_c-We.mainAxis,Tm=_e?-xe[Ve]/2+Ye+ti+bc+We.mainAxis:ht+ti+bc+We.mainAxis,Po=r.elements.arrow&&Js(r.elements.arrow),Am=Po?Ae==="y"?Po.clientTop||0:Po.clientLeft||0:0,yc=(dt=Ct==null?void 0:Ct[Ae])!=null?dt:0,Om=nn+Tm-yc,vc=Xs(se?Ur(sn,nn+Sm-yc-Am):sn,nn,se?Gn(Ps,Om):Ps);we[Ae]=vc,Ut[Ae]=vc-nn}if(L){var wc,xm=Ae==="x"?ut:ft,Rm=Ae==="x"?vt:wt,ns=we[me],ni=me==="y"?"height":"width",Ec=ns+ue[xm],Cc=ns-ue[Rm],Io=[ut,ft].indexOf(Le)!==-1,Sc=(wc=Ct==null?void 0:Ct[me])!=null?wc:0,Tc=Io?Ec:ns-xe[ni]-De[ni]-Sc+We.altAxis,Ac=Io?ns+xe[ni]+De[ni]-Sc-We.altAxis:Cc,Oc=se&&Io?function(Pm,Im,Lo){var xc=Xs(Pm,Im,Lo);return xc>Lo?Lo:xc}(Tc,ns,Ac):Xs(se?Tc:Ec,ns,se?Ac:Cc);we[me]=Oc,Ut[me]=Oc-ns}r.modifiersData[h]=Ut}},requiresIfExists:["offset"]};function Xh(u,r,l){l===void 0&&(l=!1);var h,y,v=Lt(r),S=Lt(r)&&function(K){var he=K.getBoundingClientRect(),se=Ss(he.width)/K.offsetWidth||1,ce=Ss(he.height)/K.offsetHeight||1;return se!==1||ce!==1}(r),L=An(r),j=Ts(u,S,l),J={scrollLeft:0,scrollTop:0},X={x:0,y:0};return(v||!v&&!l)&&((en(r)!=="body"||mo(L))&&(J=(h=r)!==Et(h)&&Lt(h)?{scrollLeft:(y=h).scrollLeft,scrollTop:y.scrollTop}:ho(h)),Lt(r)?((X=Ts(r,!0)).x+=r.clientLeft,X.y+=r.clientTop):L&&(X.x=po(L))),{x:j.left+J.scrollLeft-X.x,y:j.top+J.scrollTop-X.y,width:j.width,height:j.height}}function Qh(u){var r=new Map,l=new Set,h=[];function y(v){l.add(v.name),[].concat(v.requires||[],v.requiresIfExists||[]).forEach(function(S){if(!l.has(S)){var L=r.get(S);L&&y(L)}}),h.push(v)}return u.forEach(function(v){r.set(v.name,v)}),u.forEach(function(v){l.has(v.name)||y(v)}),h}var Ll={placement:"bottom",modifiers:[],strategy:"absolute"};function Dl(){for(var u=arguments.length,r=new Array(u),l=0;lNumber.parseInt(l,10)):typeof r=="function"?l=>r(l,this._element):r}_getPopperConfig(){const r={placement:this._getPlacement(),modifiers:[{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"offset",options:{offset:this._getOffset()}}]};return(this._inNavbar||this._config.display==="static")&&(rt.setDataAttribute(this._menu,"popper","static"),r.modifiers=[{name:"applyStyles",enabled:!1}]),{...r,...N(this._config.popperConfig,[r])}}_selectMenuItem({key:r,target:l}){const h=A.find(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",this._menu).filter(y=>p(y));h.length&&H(h,l,r===Ml,!h.includes(l)).focus()}static jQueryInterface(r){return this.each(function(){const l=Ht.getOrCreateInstance(this,r);if(typeof r=="string"){if(l[r]===void 0)throw new TypeError(`No method named "${r}"`);l[r]()}})}static clearMenus(r){if(r.button===2||r.type==="keyup"&&r.key!=="Tab")return;const l=A.find(op);for(const h of l){const y=Ht.getInstance(h);if(!y||y._config.autoClose===!1)continue;const v=r.composedPath(),S=v.includes(y._menu);if(v.includes(y._element)||y._config.autoClose==="inside"&&!S||y._config.autoClose==="outside"&&S||y._menu.contains(r.target)&&(r.type==="keyup"&&r.key==="Tab"||/input|select|option|textarea|form/i.test(r.target.tagName)))continue;const L={relatedTarget:y._element};r.type==="click"&&(L.clickEvent=r),y._completeHide(L)}}static dataApiKeydownHandler(r){const l=/input|textarea/i.test(r.target.tagName),h=r.key==="Escape",y=[ep,Ml].includes(r.key);if(!y&&!h||l&&!h)return;r.preventDefault();const v=this.matches(Xn)?this:A.prev(this,Xn)[0]||A.next(this,Xn)[0]||A.findOne(Xn,r.delegateTarget.parentNode),S=Ht.getOrCreateInstance(v);if(y)return r.stopPropagation(),S.show(),void S._selectMenuItem(r);S._isShown()&&(r.stopPropagation(),S.hide(),v.focus())}}I.on(document,Fl,Xn,Ht.dataApiKeydownHandler),I.on(document,Fl,Kr,Ht.dataApiKeydownHandler),I.on(document,$l,Ht.clearMenus),I.on(document,ip,Ht.clearMenus),I.on(document,$l,Xn,function(u){u.preventDefault(),Ht.getOrCreateInstance(this).toggle()}),$(Ht);const jl="backdrop",Bl="show",Hl=`mousedown.bs.${jl}`,mp={className:"modal-backdrop",clickCallback:null,isAnimated:!1,isVisible:!0,rootElement:"body"},gp={className:"string",clickCallback:"(function|null)",isAnimated:"boolean",isVisible:"boolean",rootElement:"(element|string)"};class Ul extends Zt{constructor(r){super(),this._config=this._getConfig(r),this._isAppended=!1,this._element=null}static get Default(){return mp}static get DefaultType(){return gp}static get NAME(){return jl}show(r){if(!this._config.isVisible)return void N(r);this._append();const l=this._getElement();this._config.isAnimated&&w(l),l.classList.add(Bl),this._emulateAnimation(()=>{N(r)})}hide(r){this._config.isVisible?(this._getElement().classList.remove(Bl),this._emulateAnimation(()=>{this.dispose(),N(r)})):N(r)}dispose(){this._isAppended&&(I.off(this._element,Hl),this._element.remove(),this._isAppended=!1)}_getElement(){if(!this._element){const r=document.createElement("div");r.className=this._config.className,this._config.isAnimated&&r.classList.add("fade"),this._element=r}return this._element}_configAfterMerge(r){return r.rootElement=f(r.rootElement),r}_append(){if(this._isAppended)return;const r=this._getElement();this._config.rootElement.append(r),I.on(r,Hl,()=>{N(this._config.clickCallback)}),this._isAppended=!0}_emulateAnimation(r){B(r,this._getElement(),this._config.isAnimated)}}const Gr=".bs.focustrap",_p=`focusin${Gr}`,bp=`keydown.tab${Gr}`,Vl="backward",yp={autofocus:!0,trapElement:null},vp={autofocus:"boolean",trapElement:"element"};class ql extends Zt{constructor(r){super(),this._config=this._getConfig(r),this._isActive=!1,this._lastTabNavDirection=null}static get Default(){return yp}static get DefaultType(){return vp}static get NAME(){return"focustrap"}activate(){this._isActive||(this._config.autofocus&&this._config.trapElement.focus(),I.off(document,Gr),I.on(document,_p,r=>this._handleFocusin(r)),I.on(document,bp,r=>this._handleKeydown(r)),this._isActive=!0)}deactivate(){this._isActive&&(this._isActive=!1,I.off(document,Gr))}_handleFocusin(r){const{trapElement:l}=this._config;if(r.target===document||r.target===l||l.contains(r.target))return;const h=A.focusableChildren(l);h.length===0?l.focus():this._lastTabNavDirection===Vl?h[h.length-1].focus():h[0].focus()}_handleKeydown(r){r.key==="Tab"&&(this._lastTabNavDirection=r.shiftKey?Vl:"forward")}}const Wl=".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",zl=".sticky-top",Jr="padding-right",Kl="margin-right";class vo{constructor(){this._element=document.body}getWidth(){const r=document.documentElement.clientWidth;return Math.abs(window.innerWidth-r)}hide(){const r=this.getWidth();this._disableOverFlow(),this._setElementAttributes(this._element,Jr,l=>l+r),this._setElementAttributes(Wl,Jr,l=>l+r),this._setElementAttributes(zl,Kl,l=>l-r)}reset(){this._resetElementAttributes(this._element,"overflow"),this._resetElementAttributes(this._element,Jr),this._resetElementAttributes(Wl,Jr),this._resetElementAttributes(zl,Kl)}isOverflowing(){return this.getWidth()>0}_disableOverFlow(){this._saveInitialAttribute(this._element,"overflow"),this._element.style.overflow="hidden"}_setElementAttributes(r,l,h){const y=this.getWidth();this._applyManipulationCallback(r,v=>{if(v!==this._element&&window.innerWidth>v.clientWidth+y)return;this._saveInitialAttribute(v,l);const S=window.getComputedStyle(v).getPropertyValue(l);v.style.setProperty(l,`${h(Number.parseFloat(S))}px`)})}_saveInitialAttribute(r,l){const h=r.style.getPropertyValue(l);h&&rt.setDataAttribute(r,l,h)}_resetElementAttributes(r,l){this._applyManipulationCallback(r,h=>{const y=rt.getDataAttribute(h,l);y!==null?(rt.removeDataAttribute(h,l),h.style.setProperty(l,y)):h.style.removeProperty(l)})}_applyManipulationCallback(r,l){if(c(r))l(r);else for(const h of A.find(r,this._element))l(h)}}const Dt=".bs.modal",wp=`hide${Dt}`,Ep=`hidePrevented${Dt}`,Gl=`hidden${Dt}`,Jl=`show${Dt}`,Cp=`shown${Dt}`,Sp=`resize${Dt}`,Tp=`click.dismiss${Dt}`,Ap=`mousedown.dismiss${Dt}`,Op=`keydown.dismiss${Dt}`,xp=`click${Dt}.data-api`,Xl="modal-open",Ql="show",wo="modal-static",Rp={backdrop:!0,focus:!0,keyboard:!0},Pp={backdrop:"(boolean|string)",focus:"boolean",keyboard:"boolean"};class Qn extends Be{constructor(r,l){super(r,l),this._dialog=A.findOne(".modal-dialog",this._element),this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._isShown=!1,this._isTransitioning=!1,this._scrollBar=new vo,this._addEventListeners()}static get Default(){return Rp}static get DefaultType(){return Pp}static get NAME(){return"modal"}toggle(r){return this._isShown?this.hide():this.show(r)}show(r){this._isShown||this._isTransitioning||I.trigger(this._element,Jl,{relatedTarget:r}).defaultPrevented||(this._isShown=!0,this._isTransitioning=!0,this._scrollBar.hide(),document.body.classList.add(Xl),this._adjustDialog(),this._backdrop.show(()=>this._showElement(r)))}hide(){this._isShown&&!this._isTransitioning&&(I.trigger(this._element,wp).defaultPrevented||(this._isShown=!1,this._isTransitioning=!0,this._focustrap.deactivate(),this._element.classList.remove(Ql),this._queueCallback(()=>this._hideModal(),this._element,this._isAnimated())))}dispose(){I.off(window,Dt),I.off(this._dialog,Dt),this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}handleUpdate(){this._adjustDialog()}_initializeBackDrop(){return new Ul({isVisible:!!this._config.backdrop,isAnimated:this._isAnimated()})}_initializeFocusTrap(){return new ql({trapElement:this._element})}_showElement(r){document.body.contains(this._element)||document.body.append(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.scrollTop=0;const l=A.findOne(".modal-body",this._dialog);l&&(l.scrollTop=0),w(this._element),this._element.classList.add(Ql),this._queueCallback(()=>{this._config.focus&&this._focustrap.activate(),this._isTransitioning=!1,I.trigger(this._element,Cp,{relatedTarget:r})},this._dialog,this._isAnimated())}_addEventListeners(){I.on(this._element,Op,r=>{r.key==="Escape"&&(this._config.keyboard?this.hide():this._triggerBackdropTransition())}),I.on(window,Sp,()=>{this._isShown&&!this._isTransitioning&&this._adjustDialog()}),I.on(this._element,Ap,r=>{I.one(this._element,Tp,l=>{this._element===r.target&&this._element===l.target&&(this._config.backdrop!=="static"?this._config.backdrop&&this.hide():this._triggerBackdropTransition())})})}_hideModal(){this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._isTransitioning=!1,this._backdrop.hide(()=>{document.body.classList.remove(Xl),this._resetAdjustments(),this._scrollBar.reset(),I.trigger(this._element,Gl)})}_isAnimated(){return this._element.classList.contains("fade")}_triggerBackdropTransition(){if(I.trigger(this._element,Ep).defaultPrevented)return;const r=this._element.scrollHeight>document.documentElement.clientHeight,l=this._element.style.overflowY;l==="hidden"||this._element.classList.contains(wo)||(r||(this._element.style.overflowY="hidden"),this._element.classList.add(wo),this._queueCallback(()=>{this._element.classList.remove(wo),this._queueCallback(()=>{this._element.style.overflowY=l},this._dialog)},this._dialog),this._element.focus())}_adjustDialog(){const r=this._element.scrollHeight>document.documentElement.clientHeight,l=this._scrollBar.getWidth(),h=l>0;if(h&&!r){const y=R()?"paddingLeft":"paddingRight";this._element.style[y]=`${l}px`}if(!h&&r){const y=R()?"paddingRight":"paddingLeft";this._element.style[y]=`${l}px`}}_resetAdjustments(){this._element.style.paddingLeft="",this._element.style.paddingRight=""}static jQueryInterface(r,l){return this.each(function(){const h=Qn.getOrCreateInstance(this,r);if(typeof r=="string"){if(h[r]===void 0)throw new TypeError(`No method named "${r}"`);h[r](l)}})}}I.on(document,xp,'[data-bs-toggle="modal"]',function(u){const r=A.getElementFromSelector(this);["A","AREA"].includes(this.tagName)&&u.preventDefault(),I.one(r,Jl,h=>{h.defaultPrevented||I.one(r,Gl,()=>{p(this)&&this.focus()})});const l=A.findOne(".modal.show");l&&Qn.getInstance(l).hide(),Qn.getOrCreateInstance(r).toggle(this)}),V(Qn),$(Qn);const pn=".bs.offcanvas",Yl=".data-api",Ip=`load${pn}${Yl}`,Zl="show",ec="showing",tc="hiding",nc=".offcanvas.show",Lp=`show${pn}`,Dp=`shown${pn}`,Np=`hide${pn}`,sc=`hidePrevented${pn}`,rc=`hidden${pn}`,kp=`resize${pn}`,Mp=`click${pn}${Yl}`,$p=`keydown.dismiss${pn}`,Fp={backdrop:!0,keyboard:!0,scroll:!1},jp={backdrop:"(boolean|string)",keyboard:"boolean",scroll:"boolean"};class mn extends Be{constructor(r,l){super(r,l),this._isShown=!1,this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._addEventListeners()}static get Default(){return Fp}static get DefaultType(){return jp}static get NAME(){return"offcanvas"}toggle(r){return this._isShown?this.hide():this.show(r)}show(r){this._isShown||I.trigger(this._element,Lp,{relatedTarget:r}).defaultPrevented||(this._isShown=!0,this._backdrop.show(),this._config.scroll||new vo().hide(),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.classList.add(ec),this._queueCallback(()=>{this._config.scroll&&!this._config.backdrop||this._focustrap.activate(),this._element.classList.add(Zl),this._element.classList.remove(ec),I.trigger(this._element,Dp,{relatedTarget:r})},this._element,!0))}hide(){this._isShown&&(I.trigger(this._element,Np).defaultPrevented||(this._focustrap.deactivate(),this._element.blur(),this._isShown=!1,this._element.classList.add(tc),this._backdrop.hide(),this._queueCallback(()=>{this._element.classList.remove(Zl,tc),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._config.scroll||new vo().reset(),I.trigger(this._element,rc)},this._element,!0)))}dispose(){this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}_initializeBackDrop(){const r=!!this._config.backdrop;return new Ul({className:"offcanvas-backdrop",isVisible:r,isAnimated:!0,rootElement:this._element.parentNode,clickCallback:r?()=>{this._config.backdrop!=="static"?this.hide():I.trigger(this._element,sc)}:null})}_initializeFocusTrap(){return new ql({trapElement:this._element})}_addEventListeners(){I.on(this._element,$p,r=>{r.key==="Escape"&&(this._config.keyboard?this.hide():I.trigger(this._element,sc))})}static jQueryInterface(r){return this.each(function(){const l=mn.getOrCreateInstance(this,r);if(typeof r=="string"){if(l[r]===void 0||r.startsWith("_")||r==="constructor")throw new TypeError(`No method named "${r}"`);l[r](this)}})}}I.on(document,Mp,'[data-bs-toggle="offcanvas"]',function(u){const r=A.getElementFromSelector(this);if(["A","AREA"].includes(this.tagName)&&u.preventDefault(),d(this))return;I.one(r,rc,()=>{p(this)&&this.focus()});const l=A.findOne(nc);l&&l!==r&&mn.getInstance(l).hide(),mn.getOrCreateInstance(r).toggle(this)}),I.on(window,Ip,()=>{for(const u of A.find(nc))mn.getOrCreateInstance(u).show()}),I.on(window,kp,()=>{for(const u of A.find("[aria-modal][class*=show][class*=offcanvas-]"))getComputedStyle(u).position!=="fixed"&&mn.getOrCreateInstance(u).hide()}),V(mn),$(mn);const ic={"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],dd:[],div:[],dl:[],dt:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","srcset","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},Bp=new Set(["background","cite","href","itemtype","longdesc","poster","src","xlink:href"]),Hp=/^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i,Up=(u,r)=>{const l=u.nodeName.toLowerCase();return r.includes(l)?!Bp.has(l)||!!Hp.test(u.nodeValue):r.filter(h=>h instanceof RegExp).some(h=>h.test(l))},Vp={allowList:ic,content:{},extraClass:"",html:!1,sanitize:!0,sanitizeFn:null,template:"
"},qp={allowList:"object",content:"object",extraClass:"(string|function)",html:"boolean",sanitize:"boolean",sanitizeFn:"(null|function)",template:"string"},Wp={entry:"(string|element|function|null)",selector:"(string|element)"};class zp extends Zt{constructor(r){super(),this._config=this._getConfig(r)}static get Default(){return Vp}static get DefaultType(){return qp}static get NAME(){return"TemplateFactory"}getContent(){return Object.values(this._config.content).map(r=>this._resolvePossibleFunction(r)).filter(Boolean)}hasContent(){return this.getContent().length>0}changeContent(r){return this._checkContent(r),this._config.content={...this._config.content,...r},this}toHtml(){const r=document.createElement("div");r.innerHTML=this._maybeSanitize(this._config.template);for(const[y,v]of Object.entries(this._config.content))this._setContent(r,v,y);const l=r.children[0],h=this._resolvePossibleFunction(this._config.extraClass);return h&&l.classList.add(...h.split(" ")),l}_typeCheckConfig(r){super._typeCheckConfig(r),this._checkContent(r.content)}_checkContent(r){for(const[l,h]of Object.entries(r))super._typeCheckConfig({selector:l,entry:h},Wp)}_setContent(r,l,h){const y=A.findOne(h,r);y&&((l=this._resolvePossibleFunction(l))?c(l)?this._putElementInTemplate(f(l),y):this._config.html?y.innerHTML=this._maybeSanitize(l):y.textContent=l:y.remove())}_maybeSanitize(r){return this._config.sanitize?function(l,h,y){if(!l.length)return l;if(y&&typeof y=="function")return y(l);const v=new window.DOMParser().parseFromString(l,"text/html"),S=[].concat(...v.body.querySelectorAll("*"));for(const L of S){const j=L.nodeName.toLowerCase();if(!Object.keys(h).includes(j)){L.remove();continue}const J=[].concat(...L.attributes),X=[].concat(h["*"]||[],h[j]||[]);for(const K of J)Up(K,X)||L.removeAttribute(K.nodeName)}return v.body.innerHTML}(r,this._config.allowList,this._config.sanitizeFn):r}_resolvePossibleFunction(r){return N(r,[this])}_putElementInTemplate(r,l){if(this._config.html)return l.innerHTML="",void l.append(r);l.textContent=r.textContent}}const Kp=new Set(["sanitize","allowList","sanitizeFn"]),Eo="fade",Xr="show",oc=".modal",ac="hide.bs.modal",Ys="hover",Co="focus",Gp={AUTO:"auto",TOP:"top",RIGHT:R()?"left":"right",BOTTOM:"bottom",LEFT:R()?"right":"left"},Jp={allowList:ic,animation:!0,boundary:"clippingParents",container:!1,customClass:"",delay:0,fallbackPlacements:["top","right","bottom","left"],html:!1,offset:[0,6],placement:"top",popperConfig:null,sanitize:!0,sanitizeFn:null,selector:!1,template:'',title:"",trigger:"hover focus"},Xp={allowList:"object",animation:"boolean",boundary:"(string|element)",container:"(string|element|boolean)",customClass:"(string|function)",delay:"(number|object)",fallbackPlacements:"array",html:"boolean",offset:"(array|string|function)",placement:"(string|function)",popperConfig:"(null|object|function)",sanitize:"boolean",sanitizeFn:"(null|function)",selector:"(string|boolean)",template:"string",title:"(string|element|function)",trigger:"string"};class Yn extends Be{constructor(r,l){if(Nl===void 0)throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)");super(r,l),this._isEnabled=!0,this._timeout=0,this._isHovered=null,this._activeTrigger={},this._popper=null,this._templateFactory=null,this._newContent=null,this.tip=null,this._setListeners(),this._config.selector||this._fixTitle()}static get Default(){return Jp}static get DefaultType(){return Xp}static get NAME(){return"tooltip"}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(){this._isEnabled&&(this._activeTrigger.click=!this._activeTrigger.click,this._isShown()?this._leave():this._enter())}dispose(){clearTimeout(this._timeout),I.off(this._element.closest(oc),ac,this._hideModalHandler),this._element.getAttribute("data-bs-original-title")&&this._element.setAttribute("title",this._element.getAttribute("data-bs-original-title")),this._disposePopper(),super.dispose()}show(){if(this._element.style.display==="none")throw new Error("Please use show on visible elements");if(!this._isWithContent()||!this._isEnabled)return;const r=I.trigger(this._element,this.constructor.eventName("show")),l=(m(this._element)||this._element.ownerDocument.documentElement).contains(this._element);if(r.defaultPrevented||!l)return;this._disposePopper();const h=this._getTipElement();this._element.setAttribute("aria-describedby",h.getAttribute("id"));const{container:y}=this._config;if(this._element.ownerDocument.documentElement.contains(this.tip)||(y.append(h),I.trigger(this._element,this.constructor.eventName("inserted"))),this._popper=this._createPopper(h),h.classList.add(Xr),"ontouchstart"in document.documentElement)for(const v of[].concat(...document.body.children))I.on(v,"mouseover",b);this._queueCallback(()=>{I.trigger(this._element,this.constructor.eventName("shown")),this._isHovered===!1&&this._leave(),this._isHovered=!1},this.tip,this._isAnimated())}hide(){if(this._isShown()&&!I.trigger(this._element,this.constructor.eventName("hide")).defaultPrevented){if(this._getTipElement().classList.remove(Xr),"ontouchstart"in document.documentElement)for(const r of[].concat(...document.body.children))I.off(r,"mouseover",b);this._activeTrigger.click=!1,this._activeTrigger[Co]=!1,this._activeTrigger[Ys]=!1,this._isHovered=null,this._queueCallback(()=>{this._isWithActiveTrigger()||(this._isHovered||this._disposePopper(),this._element.removeAttribute("aria-describedby"),I.trigger(this._element,this.constructor.eventName("hidden")))},this.tip,this._isAnimated())}}update(){this._popper&&this._popper.update()}_isWithContent(){return!!this._getTitle()}_getTipElement(){return this.tip||(this.tip=this._createTipElement(this._newContent||this._getContentForTemplate())),this.tip}_createTipElement(r){const l=this._getTemplateFactory(r).toHtml();if(!l)return null;l.classList.remove(Eo,Xr),l.classList.add(`bs-${this.constructor.NAME}-auto`);const h=(y=>{do y+=Math.floor(1e6*Math.random());while(document.getElementById(y));return y})(this.constructor.NAME).toString();return l.setAttribute("id",h),this._isAnimated()&&l.classList.add(Eo),l}setContent(r){this._newContent=r,this._isShown()&&(this._disposePopper(),this.show())}_getTemplateFactory(r){return this._templateFactory?this._templateFactory.changeContent(r):this._templateFactory=new zp({...this._config,content:r,extraClass:this._resolvePossibleFunction(this._config.customClass)}),this._templateFactory}_getContentForTemplate(){return{".tooltip-inner":this._getTitle()}}_getTitle(){return this._resolvePossibleFunction(this._config.title)||this._element.getAttribute("data-bs-original-title")}_initializeOnDelegatedTarget(r){return this.constructor.getOrCreateInstance(r.delegateTarget,this._getDelegateConfig())}_isAnimated(){return this._config.animation||this.tip&&this.tip.classList.contains(Eo)}_isShown(){return this.tip&&this.tip.classList.contains(Xr)}_createPopper(r){const l=N(this._config.placement,[this,r,this._element]),h=Gp[l.toUpperCase()];return bo(this._element,r,this._getPopperConfig(h))}_getOffset(){const{offset:r}=this._config;return typeof r=="string"?r.split(",").map(l=>Number.parseInt(l,10)):typeof r=="function"?l=>r(l,this._element):r}_resolvePossibleFunction(r){return N(r,[this._element])}_getPopperConfig(r){const l={placement:r,modifiers:[{name:"flip",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:"offset",options:{offset:this._getOffset()}},{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"arrow",options:{element:`.${this.constructor.NAME}-arrow`}},{name:"preSetPlacement",enabled:!0,phase:"beforeMain",fn:h=>{this._getTipElement().setAttribute("data-popper-placement",h.state.placement)}}]};return{...l,...N(this._config.popperConfig,[l])}}_setListeners(){const r=this._config.trigger.split(" ");for(const l of r)if(l==="click")I.on(this._element,this.constructor.eventName("click"),this._config.selector,h=>{this._initializeOnDelegatedTarget(h).toggle()});else if(l!=="manual"){const h=l===Ys?this.constructor.eventName("mouseenter"):this.constructor.eventName("focusin"),y=l===Ys?this.constructor.eventName("mouseleave"):this.constructor.eventName("focusout");I.on(this._element,h,this._config.selector,v=>{const S=this._initializeOnDelegatedTarget(v);S._activeTrigger[v.type==="focusin"?Co:Ys]=!0,S._enter()}),I.on(this._element,y,this._config.selector,v=>{const S=this._initializeOnDelegatedTarget(v);S._activeTrigger[v.type==="focusout"?Co:Ys]=S._element.contains(v.relatedTarget),S._leave()})}this._hideModalHandler=()=>{this._element&&this.hide()},I.on(this._element.closest(oc),ac,this._hideModalHandler)}_fixTitle(){const r=this._element.getAttribute("title");r&&(this._element.getAttribute("aria-label")||this._element.textContent.trim()||this._element.setAttribute("aria-label",r),this._element.setAttribute("data-bs-original-title",r),this._element.removeAttribute("title"))}_enter(){this._isShown()||this._isHovered?this._isHovered=!0:(this._isHovered=!0,this._setTimeout(()=>{this._isHovered&&this.show()},this._config.delay.show))}_leave(){this._isWithActiveTrigger()||(this._isHovered=!1,this._setTimeout(()=>{this._isHovered||this.hide()},this._config.delay.hide))}_setTimeout(r,l){clearTimeout(this._timeout),this._timeout=setTimeout(r,l)}_isWithActiveTrigger(){return Object.values(this._activeTrigger).includes(!0)}_getConfig(r){const l=rt.getDataAttributes(this._element);for(const h of Object.keys(l))Kp.has(h)&&delete l[h];return r={...l,...typeof r=="object"&&r?r:{}},r=this._mergeConfigObj(r),r=this._configAfterMerge(r),this._typeCheckConfig(r),r}_configAfterMerge(r){return r.container=r.container===!1?document.body:f(r.container),typeof r.delay=="number"&&(r.delay={show:r.delay,hide:r.delay}),typeof r.title=="number"&&(r.title=r.title.toString()),typeof r.content=="number"&&(r.content=r.content.toString()),r}_getDelegateConfig(){const r={};for(const[l,h]of Object.entries(this._config))this.constructor.Default[l]!==h&&(r[l]=h);return r.selector=!1,r.trigger="manual",r}_disposePopper(){this._popper&&(this._popper.destroy(),this._popper=null),this.tip&&(this.tip.remove(),this.tip=null)}static jQueryInterface(r){return this.each(function(){const l=Yn.getOrCreateInstance(this,r);if(typeof r=="string"){if(l[r]===void 0)throw new TypeError(`No method named "${r}"`);l[r]()}})}}$(Yn);const Qp={...Yn.Default,content:"",offset:[0,8],placement:"right",template:'',trigger:"click"},Yp={...Yn.DefaultType,content:"(null|string|element|function)"};class Qr extends Yn{static get Default(){return Qp}static get DefaultType(){return Yp}static get NAME(){return"popover"}_isWithContent(){return this._getTitle()||this._getContent()}_getContentForTemplate(){return{".popover-header":this._getTitle(),".popover-body":this._getContent()}}_getContent(){return this._resolvePossibleFunction(this._config.content)}static jQueryInterface(r){return this.each(function(){const l=Qr.getOrCreateInstance(this,r);if(typeof r=="string"){if(l[r]===void 0)throw new TypeError(`No method named "${r}"`);l[r]()}})}}$(Qr);const So=".bs.scrollspy",Zp=`activate${So}`,lc=`click${So}`,em=`load${So}.data-api`,Rs="active",To="[href]",cc=".nav-link",tm=`${cc}, .nav-item > ${cc}, .list-group-item`,nm={offset:null,rootMargin:"0px 0px -25%",smoothScroll:!1,target:null,threshold:[.1,.5,1]},sm={offset:"(number|null)",rootMargin:"string",smoothScroll:"boolean",target:"element",threshold:"array"};class Zs extends Be{constructor(r,l){super(r,l),this._targetLinks=new Map,this._observableSections=new Map,this._rootElement=getComputedStyle(this._element).overflowY==="visible"?null:this._element,this._activeTarget=null,this._observer=null,this._previousScrollData={visibleEntryTop:0,parentScrollTop:0},this.refresh()}static get Default(){return nm}static get DefaultType(){return sm}static get NAME(){return"scrollspy"}refresh(){this._initializeTargetsAndObservables(),this._maybeEnableSmoothScroll(),this._observer?this._observer.disconnect():this._observer=this._getNewObserver();for(const r of this._observableSections.values())this._observer.observe(r)}dispose(){this._observer.disconnect(),super.dispose()}_configAfterMerge(r){return r.target=f(r.target)||document.body,r.rootMargin=r.offset?`${r.offset}px 0px -30%`:r.rootMargin,typeof r.threshold=="string"&&(r.threshold=r.threshold.split(",").map(l=>Number.parseFloat(l))),r}_maybeEnableSmoothScroll(){this._config.smoothScroll&&(I.off(this._config.target,lc),I.on(this._config.target,lc,To,r=>{const l=this._observableSections.get(r.target.hash);if(l){r.preventDefault();const h=this._rootElement||window,y=l.offsetTop-this._element.offsetTop;if(h.scrollTo)return void h.scrollTo({top:y,behavior:"smooth"});h.scrollTop=y}}))}_getNewObserver(){const r={root:this._rootElement,threshold:this._config.threshold,rootMargin:this._config.rootMargin};return new IntersectionObserver(l=>this._observerCallback(l),r)}_observerCallback(r){const l=S=>this._targetLinks.get(`#${S.target.id}`),h=S=>{this._previousScrollData.visibleEntryTop=S.target.offsetTop,this._process(l(S))},y=(this._rootElement||document.documentElement).scrollTop,v=y>=this._previousScrollData.parentScrollTop;this._previousScrollData.parentScrollTop=y;for(const S of r){if(!S.isIntersecting){this._activeTarget=null,this._clearActiveClass(l(S));continue}const L=S.target.offsetTop>=this._previousScrollData.visibleEntryTop;if(v&&L){if(h(S),!y)return}else v||L||h(S)}}_initializeTargetsAndObservables(){this._targetLinks=new Map,this._observableSections=new Map;const r=A.find(To,this._config.target);for(const l of r){if(!l.hash||d(l))continue;const h=A.findOne(decodeURI(l.hash),this._element);p(h)&&(this._targetLinks.set(decodeURI(l.hash),l),this._observableSections.set(l.hash,h))}}_process(r){this._activeTarget!==r&&(this._clearActiveClass(this._config.target),this._activeTarget=r,r.classList.add(Rs),this._activateParents(r),I.trigger(this._element,Zp,{relatedTarget:r}))}_activateParents(r){if(r.classList.contains("dropdown-item"))A.findOne(".dropdown-toggle",r.closest(".dropdown")).classList.add(Rs);else for(const l of A.parents(r,".nav, .list-group"))for(const h of A.prev(l,tm))h.classList.add(Rs)}_clearActiveClass(r){r.classList.remove(Rs);const l=A.find(`${To}.${Rs}`,r);for(const h of l)h.classList.remove(Rs)}static jQueryInterface(r){return this.each(function(){const l=Zs.getOrCreateInstance(this,r);if(typeof r=="string"){if(l[r]===void 0||r.startsWith("_")||r==="constructor")throw new TypeError(`No method named "${r}"`);l[r]()}})}}I.on(window,em,()=>{for(const u of A.find('[data-bs-spy="scroll"]'))Zs.getOrCreateInstance(u)}),$(Zs);const Zn=".bs.tab",rm=`hide${Zn}`,im=`hidden${Zn}`,om=`show${Zn}`,am=`shown${Zn}`,lm=`click${Zn}`,cm=`keydown${Zn}`,um=`load${Zn}`,fm="ArrowLeft",uc="ArrowRight",dm="ArrowUp",fc="ArrowDown",Ao="Home",dc="End",es="active",hc="fade",Oo="show",pc=".dropdown-toggle",xo=`:not(${pc})`,mc='[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]',Ro=`.nav-link${xo}, .list-group-item${xo}, [role="tab"]${xo}, ${mc}`,hm=`.${es}[data-bs-toggle="tab"], .${es}[data-bs-toggle="pill"], .${es}[data-bs-toggle="list"]`;class ts extends Be{constructor(r){super(r),this._parent=this._element.closest('.list-group, .nav, [role="tablist"]'),this._parent&&(this._setInitialAttributes(this._parent,this._getChildren()),I.on(this._element,cm,l=>this._keydown(l)))}static get NAME(){return"tab"}show(){const r=this._element;if(this._elemIsActive(r))return;const l=this._getActiveElem(),h=l?I.trigger(l,rm,{relatedTarget:r}):null;I.trigger(r,om,{relatedTarget:l}).defaultPrevented||h&&h.defaultPrevented||(this._deactivate(l,r),this._activate(r,l))}_activate(r,l){r&&(r.classList.add(es),this._activate(A.getElementFromSelector(r)),this._queueCallback(()=>{r.getAttribute("role")==="tab"?(r.removeAttribute("tabindex"),r.setAttribute("aria-selected",!0),this._toggleDropDown(r,!0),I.trigger(r,am,{relatedTarget:l})):r.classList.add(Oo)},r,r.classList.contains(hc)))}_deactivate(r,l){r&&(r.classList.remove(es),r.blur(),this._deactivate(A.getElementFromSelector(r)),this._queueCallback(()=>{r.getAttribute("role")==="tab"?(r.setAttribute("aria-selected",!1),r.setAttribute("tabindex","-1"),this._toggleDropDown(r,!1),I.trigger(r,im,{relatedTarget:l})):r.classList.remove(Oo)},r,r.classList.contains(hc)))}_keydown(r){if(![fm,uc,dm,fc,Ao,dc].includes(r.key))return;r.stopPropagation(),r.preventDefault();const l=this._getChildren().filter(y=>!d(y));let h;if([Ao,dc].includes(r.key))h=l[r.key===Ao?0:l.length-1];else{const y=[uc,fc].includes(r.key);h=H(l,r.target,y,!0)}h&&(h.focus({preventScroll:!0}),ts.getOrCreateInstance(h).show())}_getChildren(){return A.find(Ro,this._parent)}_getActiveElem(){return this._getChildren().find(r=>this._elemIsActive(r))||null}_setInitialAttributes(r,l){this._setAttributeIfNotExists(r,"role","tablist");for(const h of l)this._setInitialAttributesOnChild(h)}_setInitialAttributesOnChild(r){r=this._getInnerElement(r);const l=this._elemIsActive(r),h=this._getOuterElement(r);r.setAttribute("aria-selected",l),h!==r&&this._setAttributeIfNotExists(h,"role","presentation"),l||r.setAttribute("tabindex","-1"),this._setAttributeIfNotExists(r,"role","tab"),this._setInitialAttributesOnTargetPanel(r)}_setInitialAttributesOnTargetPanel(r){const l=A.getElementFromSelector(r);l&&(this._setAttributeIfNotExists(l,"role","tabpanel"),r.id&&this._setAttributeIfNotExists(l,"aria-labelledby",`${r.id}`))}_toggleDropDown(r,l){const h=this._getOuterElement(r);if(!h.classList.contains("dropdown"))return;const y=(v,S)=>{const L=A.findOne(v,h);L&&L.classList.toggle(S,l)};y(pc,es),y(".dropdown-menu",Oo),h.setAttribute("aria-expanded",l)}_setAttributeIfNotExists(r,l,h){r.hasAttribute(l)||r.setAttribute(l,h)}_elemIsActive(r){return r.classList.contains(es)}_getInnerElement(r){return r.matches(Ro)?r:A.findOne(Ro,r)}_getOuterElement(r){return r.closest(".nav-item, .list-group-item")||r}static jQueryInterface(r){return this.each(function(){const l=ts.getOrCreateInstance(this);if(typeof r=="string"){if(l[r]===void 0||r.startsWith("_")||r==="constructor")throw new TypeError(`No method named "${r}"`);l[r]()}})}}I.on(document,lm,mc,function(u){["A","AREA"].includes(this.tagName)&&u.preventDefault(),d(this)||ts.getOrCreateInstance(this).show()}),I.on(window,um,()=>{for(const u of A.find(hm))ts.getOrCreateInstance(u)}),$(ts);const On=".bs.toast",pm=`mouseover${On}`,mm=`mouseout${On}`,gm=`focusin${On}`,_m=`focusout${On}`,bm=`hide${On}`,ym=`hidden${On}`,vm=`show${On}`,wm=`shown${On}`,gc="hide",Yr="show",Zr="showing",Em={animation:"boolean",autohide:"boolean",delay:"number"},Cm={animation:!0,autohide:!0,delay:5e3};class er extends Be{constructor(r,l){super(r,l),this._timeout=null,this._hasMouseInteraction=!1,this._hasKeyboardInteraction=!1,this._setListeners()}static get Default(){return Cm}static get DefaultType(){return Em}static get NAME(){return"toast"}show(){I.trigger(this._element,vm).defaultPrevented||(this._clearTimeout(),this._config.animation&&this._element.classList.add("fade"),this._element.classList.remove(gc),w(this._element),this._element.classList.add(Yr,Zr),this._queueCallback(()=>{this._element.classList.remove(Zr),I.trigger(this._element,wm),this._maybeScheduleHide()},this._element,this._config.animation))}hide(){this.isShown()&&(I.trigger(this._element,bm).defaultPrevented||(this._element.classList.add(Zr),this._queueCallback(()=>{this._element.classList.add(gc),this._element.classList.remove(Zr,Yr),I.trigger(this._element,ym)},this._element,this._config.animation)))}dispose(){this._clearTimeout(),this.isShown()&&this._element.classList.remove(Yr),super.dispose()}isShown(){return this._element.classList.contains(Yr)}_maybeScheduleHide(){this._config.autohide&&(this._hasMouseInteraction||this._hasKeyboardInteraction||(this._timeout=setTimeout(()=>{this.hide()},this._config.delay)))}_onInteraction(r,l){switch(r.type){case"mouseover":case"mouseout":this._hasMouseInteraction=l;break;case"focusin":case"focusout":this._hasKeyboardInteraction=l}if(l)return void this._clearTimeout();const h=r.relatedTarget;this._element===h||this._element.contains(h)||this._maybeScheduleHide()}_setListeners(){I.on(this._element,pm,r=>this._onInteraction(r,!0)),I.on(this._element,mm,r=>this._onInteraction(r,!1)),I.on(this._element,gm,r=>this._onInteraction(r,!0)),I.on(this._element,_m,r=>this._onInteraction(r,!1))}_clearTimeout(){clearTimeout(this._timeout),this._timeout=null}static jQueryInterface(r){return this.each(function(){const l=er.getOrCreateInstance(this,r);if(typeof r=="string"){if(l[r]===void 0)throw new TypeError(`No method named "${r}"`);l[r](this)}})}}return V(er),$(er),{Alert:g,Button:E,Carousel:bs,Collapse:vs,Dropdown:Ht,Modal:Qn,Offcanvas:mn,Popover:Qr,ScrollSpy:Zs,Tab:ts,Toast:er,Tooltip:Yn}})})(t0);/*! +* Tabler v1.0.0-beta19 (https://tabler.io) +* @version 1.0.0-beta19 +* @link https://tabler.io +* Copyright 2018-2023 The Tabler Authors +* Copyright 2018-2023 codecalm.net Paweł Kuna +* Licensed under MIT (https://github.com/tabler/tabler/blob/master/LICENSE) +*/(function(e){typeof define=="function"&&define.amd?define(e):e()})(function(){var e,t="tablerTheme",n=new Proxy(new URLSearchParams(window.location.search),{get:function(i,o){return i.get(o)}});if(n.theme)localStorage.setItem(t,n.theme),e=n.theme;else{var s=localStorage.getItem(t);e=s||"light"}e==="dark"?document.body.setAttribute("data-bs-theme",e):document.body.removeAttribute("data-bs-theme")});const Mr=Td(Sy);Ke.defaults.baseURL=sw();Mr.config.globalProperties.axios=Ke;Mr.use(pb());Mr.use(dh);Mr.use(Zw,{});Mr.mount("#app");export{o0 as A,Pr as B,Or as C,f0 as D,u0 as E,tt as F,Ir as G,Ua as H,dh as I,c0 as J,sw as K,Ke as L,gd as M,e0 as N,h0 as O,Hd as R,_s as a,nt as b,qt as c,dn as d,Bi as e,d0 as f,Ft as g,fr as h,Bf as i,n0 as j,jc as k,i0 as l,Bo as m,Hn as n,Ue as o,s0 as p,nw as q,ja as r,jt as s,xa as t,jn as u,l0 as v,lb as w,Uf as x,r0 as y,a0 as z}; diff --git a/src/main/resources/static/assets/index-BKFNv1Gc.js b/src/main/resources/static/assets/index-BKFNv1Gc.js new file mode 100644 index 00000000..bde85c74 --- /dev/null +++ b/src/main/resources/static/assets/index-BKFNv1Gc.js @@ -0,0 +1,42 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/OssList-Dkob1ogV.js","assets/IconPlus-B06YAus6.js","assets/createVueComponent-DNPdC8og.js","assets/Tabulator.vue_vue_type_style_index_0_lang-DYWrT5tk.js","assets/Tabulator-C0-hRjAn.css","assets/request-D9joEmfF.js","assets/bootstrap.esm-Ceob_0pG.js","assets/YamlGenerate-DWF5D7eZ.js","assets/_plugin-vue_export-helper-DlAUqK2U.js","assets/YamlGenerate-DSiHz0eV.css","assets/InstallSoftwareIframe-DwIe7gkh.js","assets/applicationInstallationForm-CJ8rrk5z.js","assets/lodash-DPUzVvBK.js","assets/softwareCatalog-DuMGACG8.js","assets/applicationInstallationForm-F2A4Doyb.css","assets/InstallSoftwareIframe-DPwVg-cJ.css","assets/SoftwareCatalog-BdpHKttf.js","assets/applicationDetailModal-CKm2tmzu.js","assets/applicationDetailModal-BfM4XzFr.css","assets/SoftwareCatalog-CwQ6RJcF.css","assets/ApplicationStatus-B3ZUl1H1.js","assets/ApplicationStatus-DPixrIJt.css","assets/ApplicationRepository-BFYuzGXK.js","assets/RepositoryList-CH7YVo74.js","assets/repository-DkJ-R22y.js","assets/RepositoryDetail-DP0dnufb.js","assets/SoftwareCatalogListTest-D5JiQFYZ.js","assets/SoftwareCatalogListTest-DfiSBOQi.css"])))=>i.map(i=>d[i]); +(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const i of document.querySelectorAll('link[rel="modulepreload"]'))s(i);new MutationObserver(i=>{for(const o of i)if(o.type==="childList")for(const a of o.addedNodes)a.tagName==="LINK"&&a.rel==="modulepreload"&&s(a)}).observe(document,{childList:!0,subtree:!0});function n(i){const o={};return i.integrity&&(o.integrity=i.integrity),i.referrerPolicy&&(o.referrerPolicy=i.referrerPolicy),i.crossOrigin==="use-credentials"?o.credentials="include":i.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function s(i){if(i.ep)return;i.ep=!0;const o=n(i);fetch(i.href,o)}})();/** +* @vue/shared v3.5.3 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**//*! #__NO_SIDE_EFFECTS__ */function Ca(e,t){const n=new Set(e.split(","));return s=>n.has(s)}const Me={},$s=[],cn=()=>{},Lm=()=>!1,Ii=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),Sa=e=>e.startsWith("onUpdate:"),Ge=Object.assign,Ta=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},Dm=Object.prototype.hasOwnProperty,Ie=(e,t)=>Dm.call(e,t),ee=Array.isArray,Fs=e=>Ar(e)==="[object Map]",Ws=e=>Ar(e)==="[object Set]",Rc=e=>Ar(e)==="[object Date]",fe=e=>typeof e=="function",qe=e=>typeof e=="string",fn=e=>typeof e=="symbol",$e=e=>e!==null&&typeof e=="object",nf=e=>($e(e)||fe(e))&&fe(e.then)&&fe(e.catch),sf=Object.prototype.toString,Ar=e=>sf.call(e),Nm=e=>Ar(e).slice(8,-1),rf=e=>Ar(e)==="[object Object]",Aa=e=>qe(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,ar=Ca(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Li=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},km=/-(\w)/g,Gt=Li(e=>e.replace(km,(t,n)=>n?n.toUpperCase():"")),Mm=/\B([A-Z])/g,gs=Li(e=>e.replace(Mm,"-$1").toLowerCase()),Di=Li(e=>e.charAt(0).toUpperCase()+e.slice(1)),ui=Li(e=>e?`on${Di(e)}`:""),Bn=(e,t)=>!Object.is(e,t),fi=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:s,value:n})},yi=e=>{const t=parseFloat(e);return isNaN(t)?e:t},$m=e=>{const t=qe(e)?Number(e):NaN;return isNaN(t)?e:t};let Pc;const af=()=>Pc||(Pc=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function Or(e){if(ee(e)){const t={};for(let n=0;n{if(n){const s=n.split(jm);s.length>1&&(t[s[0].trim()]=s[1].trim())}}),t}function Hn(e){let t="";if(qe(e))t=e;else if(ee(e))for(let n=0;nds(n,t))}const cf=e=>!!(e&&e.__v_isRef===!0),xa=e=>qe(e)?e:e==null?"":ee(e)||$e(e)&&(e.toString===sf||!fe(e.toString))?cf(e)?xa(e.value):JSON.stringify(e,uf,2):String(e),uf=(e,t)=>cf(t)?uf(e,t.value):Fs(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[s,i],o)=>(n[Do(s,o)+" =>"]=i,n),{})}:Ws(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>Do(n))}:fn(t)?Do(t):$e(t)&&!ee(t)&&!rf(t)?String(t):t,Do=(e,t="")=>{var n;return fn(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};/** +* @vue/reactivity v3.5.3 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/let mt;class ff{constructor(t=!1){this.detached=t,this._active=!0,this.effects=[],this.cleanups=[],this._isPaused=!1,this.parent=mt,!t&&mt&&(this.index=(mt.scopes||(mt.scopes=[])).push(this)-1)}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,n;if(this.scopes)for(t=0,n=this.scopes.length;t0)return;let e;for(;lr;){let t=lr;for(lr=void 0;t;){const n=t.nextEffect;if(t.nextEffect=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(s){e||(e=s)}t=n}}if(e)throw e}function gf(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function _f(e){let t,n=e.depsTail;for(let s=n;s;s=s.prevDep)s.version===-1?(s===n&&(n=s.prevDep),Ia(s),zm(s)):t=s,s.dep.activeLink=s.prevActiveLink,s.prevActiveLink=void 0;e.deps=t,e.depsTail=n}function Zo(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&bf(t.dep.computed)===!1||t.dep.version!==t.version)return!0;return!!e._dirty}function bf(e){if(e.flags&2)return!1;if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===gr))return;e.globalVersion=gr;const t=e.dep;if(e.flags|=2,t.version>0&&!e.isSSR&&!Zo(e)){e.flags&=-3;return}const n=ke,s=zt;ke=e,zt=!0;try{gf(e);const i=e.fn(e._value);(t.version===0||Bn(i,e._value))&&(e._value=i,t.version++)}catch(i){throw t.version++,i}finally{ke=n,zt=s,_f(e),e.flags&=-3}}function Ia(e){const{dep:t,prevSub:n,nextSub:s}=e;if(n&&(n.nextSub=s,e.prevSub=void 0),s&&(s.prevSub=n,e.nextSub=void 0),t.subs===e&&(t.subs=n),!t.subs&&t.computed){t.computed.flags&=-5;for(let i=t.computed.deps;i;i=i.nextDep)Ia(i)}}function zm(e){const{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}let zt=!0;const yf=[];function Vn(){yf.push(zt),zt=!1}function qn(){const e=yf.pop();zt=e===void 0?!0:e}function Ic(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const n=ke;ke=void 0;try{t()}finally{ke=n}}}let gr=0;class La{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0}track(t){if(!ke||!zt||ke===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==ke)n=this.activeLink={dep:this,sub:ke,version:this.version,nextDep:void 0,prevDep:void 0,nextSub:void 0,prevSub:void 0,prevActiveLink:void 0},ke.deps?(n.prevDep=ke.depsTail,ke.depsTail.nextDep=n,ke.depsTail=n):ke.deps=ke.depsTail=n,ke.flags&4&&vf(n);else if(n.version===-1&&(n.version=this.version,n.nextDep)){const s=n.nextDep;s.prevDep=n.prevDep,n.prevDep&&(n.prevDep.nextDep=s),n.prevDep=ke.depsTail,n.nextDep=void 0,ke.depsTail.nextDep=n,ke.depsTail=n,ke.deps===n&&(ke.deps=s)}return n}trigger(t){this.version++,gr++,this.notify(t)}notify(t){Ra();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()}finally{Pa()}}}function vf(e){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let s=t.deps;s;s=s.nextDep)vf(s)}const n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}const vi=new WeakMap,cs=Symbol(""),ea=Symbol(""),_r=Symbol("");function ot(e,t,n){if(zt&&ke){let s=vi.get(e);s||vi.set(e,s=new Map);let i=s.get(n);i||s.set(n,i=new La),i.track()}}function En(e,t,n,s,i,o){const a=vi.get(e);if(!a){gr++;return}let c=[];if(t==="clear")c=[...a.values()];else{const f=ee(e),p=f&&Aa(n);if(f&&n==="length"){const d=Number(s);a.forEach((m,b)=>{(b==="length"||b===_r||!fn(b)&&b>=d)&&c.push(m)})}else{const d=m=>m&&c.push(m);switch(n!==void 0&&d(a.get(n)),p&&d(a.get(_r)),t){case"add":f?p&&d(a.get("length")):(d(a.get(cs)),Fs(e)&&d(a.get(ea)));break;case"delete":f||(d(a.get(cs)),Fs(e)&&d(a.get(ea)));break;case"set":Fs(e)&&d(a.get(cs));break}}}Ra();for(const f of c)f.trigger();Pa()}function Km(e,t){var n;return(n=vi.get(e))==null?void 0:n.get(t)}function Is(e){const t=Ee(e);return t===e?t:(ot(t,"iterate",_r),Kt(e)?t:t.map(it))}function Ni(e){return ot(e=Ee(e),"iterate",_r),e}const Gm={__proto__:null,[Symbol.iterator](){return ko(this,Symbol.iterator,it)},concat(...e){return Is(this).concat(...e.map(t=>ee(t)?Is(t):t))},entries(){return ko(this,"entries",e=>(e[1]=it(e[1]),e))},every(e,t){return gn(this,"every",e,t,void 0,arguments)},filter(e,t){return gn(this,"filter",e,t,n=>n.map(it),arguments)},find(e,t){return gn(this,"find",e,t,it,arguments)},findIndex(e,t){return gn(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return gn(this,"findLast",e,t,it,arguments)},findLastIndex(e,t){return gn(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return gn(this,"forEach",e,t,void 0,arguments)},includes(...e){return Mo(this,"includes",e)},indexOf(...e){return Mo(this,"indexOf",e)},join(e){return Is(this).join(e)},lastIndexOf(...e){return Mo(this,"lastIndexOf",e)},map(e,t){return gn(this,"map",e,t,void 0,arguments)},pop(){return tr(this,"pop")},push(...e){return tr(this,"push",e)},reduce(e,...t){return Lc(this,"reduce",e,t)},reduceRight(e,...t){return Lc(this,"reduceRight",e,t)},shift(){return tr(this,"shift")},some(e,t){return gn(this,"some",e,t,void 0,arguments)},splice(...e){return tr(this,"splice",e)},toReversed(){return Is(this).toReversed()},toSorted(e){return Is(this).toSorted(e)},toSpliced(...e){return Is(this).toSpliced(...e)},unshift(...e){return tr(this,"unshift",e)},values(){return ko(this,"values",it)}};function ko(e,t,n){const s=Ni(e),i=s[t]();return s!==e&&!Kt(e)&&(i._next=i.next,i.next=()=>{const o=i._next();return o.value&&(o.value=n(o.value)),o}),i}const Jm=Array.prototype;function gn(e,t,n,s,i,o){const a=Ni(e),c=a!==e&&!Kt(e),f=a[t];if(f!==Jm[t]){const m=f.apply(e,o);return c?it(m):m}let p=n;a!==e&&(c?p=function(m,b){return n.call(this,it(m),b,e)}:n.length>2&&(p=function(m,b){return n.call(this,m,b,e)}));const d=f.call(a,p,s);return c&&i?i(d):d}function Lc(e,t,n,s){const i=Ni(e);let o=n;return i!==e&&(Kt(e)?n.length>3&&(o=function(a,c,f){return n.call(this,a,c,f,e)}):o=function(a,c,f){return n.call(this,a,it(c),f,e)}),i[t](o,...s)}function Mo(e,t,n){const s=Ee(e);ot(s,"iterate",_r);const i=s[t](...n);return(i===-1||i===!1)&&Ma(n[0])?(n[0]=Ee(n[0]),s[t](...n)):i}function tr(e,t,n=[]){Vn(),Ra();const s=Ee(e)[t].apply(e,n);return Pa(),qn(),s}const Xm=Ca("__proto__,__v_isRef,__isVue"),wf=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(fn));function Qm(e){fn(e)||(e=String(e));const t=Ee(this);return ot(t,"has",e),t.hasOwnProperty(e)}class Ef{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,s){const i=this._isReadonly,o=this._isShallow;if(n==="__v_isReactive")return!i;if(n==="__v_isReadonly")return i;if(n==="__v_isShallow")return o;if(n==="__v_raw")return s===(i?o?ug:Af:o?Tf:Sf).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(s)?t:void 0;const a=ee(t);if(!i){let f;if(a&&(f=Gm[n]))return f;if(n==="hasOwnProperty")return Qm}const c=Reflect.get(t,n,ze(t)?t:s);return(fn(n)?wf.has(n):Xm(n))||(i||ot(t,"get",n),o)?c:ze(c)?a&&Aa(n)?c:c.value:$e(c)?i?xf(c):xr(c):c}}class Cf extends Ef{constructor(t=!1){super(!1,t)}set(t,n,s,i){let o=t[n];if(!this._isShallow){const f=hs(o);if(!Kt(s)&&!hs(s)&&(o=Ee(o),s=Ee(s)),!ee(t)&&ze(o)&&!ze(s))return f?!1:(o.value=s,!0)}const a=ee(t)&&Aa(n)?Number(n)e,ki=e=>Reflect.getPrototypeOf(e);function si(e,t,n=!1,s=!1){e=e.__v_raw;const i=Ee(e),o=Ee(t);n||(Bn(t,o)&&ot(i,"get",t),ot(i,"get",o));const{has:a}=ki(i),c=s?Da:n?Fa:it;if(a.call(i,t))return c(e.get(t));if(a.call(i,o))return c(e.get(o));e!==i&&e.get(t)}function ri(e,t=!1){const n=this.__v_raw,s=Ee(n),i=Ee(e);return t||(Bn(e,i)&&ot(s,"has",e),ot(s,"has",i)),e===i?n.has(e):n.has(e)||n.has(i)}function ii(e,t=!1){return e=e.__v_raw,!t&&ot(Ee(e),"iterate",cs),Reflect.get(e,"size",e)}function Dc(e,t=!1){!t&&!Kt(e)&&!hs(e)&&(e=Ee(e));const n=Ee(this);return ki(n).has.call(n,e)||(n.add(e),En(n,"add",e,e)),this}function Nc(e,t,n=!1){!n&&!Kt(t)&&!hs(t)&&(t=Ee(t));const s=Ee(this),{has:i,get:o}=ki(s);let a=i.call(s,e);a||(e=Ee(e),a=i.call(s,e));const c=o.call(s,e);return s.set(e,t),a?Bn(t,c)&&En(s,"set",e,t):En(s,"add",e,t),this}function kc(e){const t=Ee(this),{has:n,get:s}=ki(t);let i=n.call(t,e);i||(e=Ee(e),i=n.call(t,e)),s&&s.call(t,e);const o=t.delete(e);return i&&En(t,"delete",e,void 0),o}function Mc(){const e=Ee(this),t=e.size!==0,n=e.clear();return t&&En(e,"clear",void 0,void 0),n}function oi(e,t){return function(s,i){const o=this,a=o.__v_raw,c=Ee(a),f=t?Da:e?Fa:it;return!e&&ot(c,"iterate",cs),a.forEach((p,d)=>s.call(i,f(p),f(d),o))}}function ai(e,t,n){return function(...s){const i=this.__v_raw,o=Ee(i),a=Fs(o),c=e==="entries"||e===Symbol.iterator&&a,f=e==="keys"&&a,p=i[e](...s),d=n?Da:t?Fa:it;return!t&&ot(o,"iterate",f?ea:cs),{next(){const{value:m,done:b}=p.next();return b?{value:m,done:b}:{value:c?[d(m[0]),d(m[1])]:d(m),done:b}},[Symbol.iterator](){return this}}}}function Rn(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function ng(){const e={get(o){return si(this,o)},get size(){return ii(this)},has:ri,add:Dc,set:Nc,delete:kc,clear:Mc,forEach:oi(!1,!1)},t={get(o){return si(this,o,!1,!0)},get size(){return ii(this)},has:ri,add(o){return Dc.call(this,o,!0)},set(o,a){return Nc.call(this,o,a,!0)},delete:kc,clear:Mc,forEach:oi(!1,!0)},n={get(o){return si(this,o,!0)},get size(){return ii(this,!0)},has(o){return ri.call(this,o,!0)},add:Rn("add"),set:Rn("set"),delete:Rn("delete"),clear:Rn("clear"),forEach:oi(!0,!1)},s={get(o){return si(this,o,!0,!0)},get size(){return ii(this,!0)},has(o){return ri.call(this,o,!0)},add:Rn("add"),set:Rn("set"),delete:Rn("delete"),clear:Rn("clear"),forEach:oi(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(o=>{e[o]=ai(o,!1,!1),n[o]=ai(o,!0,!1),t[o]=ai(o,!1,!0),s[o]=ai(o,!0,!0)}),[e,n,t,s]}const[sg,rg,ig,og]=ng();function Na(e,t){const n=t?e?og:ig:e?rg:sg;return(s,i,o)=>i==="__v_isReactive"?!e:i==="__v_isReadonly"?e:i==="__v_raw"?s:Reflect.get(Ie(n,i)&&i in s?n:s,i,o)}const ag={get:Na(!1,!1)},lg={get:Na(!1,!0)},cg={get:Na(!0,!1)};const Sf=new WeakMap,Tf=new WeakMap,Af=new WeakMap,ug=new WeakMap;function fg(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function dg(e){return e.__v_skip||!Object.isExtensible(e)?0:fg(Nm(e))}function xr(e){return hs(e)?e:ka(e,!1,Zm,ag,Sf)}function Of(e){return ka(e,!1,tg,lg,Tf)}function xf(e){return ka(e,!0,eg,cg,Af)}function ka(e,t,n,s,i){if(!$e(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const o=i.get(e);if(o)return o;const a=dg(e);if(a===0)return e;const c=new Proxy(e,a===2?s:n);return i.set(e,c),c}function Fn(e){return hs(e)?Fn(e.__v_raw):!!(e&&e.__v_isReactive)}function hs(e){return!!(e&&e.__v_isReadonly)}function Kt(e){return!!(e&&e.__v_isShallow)}function Ma(e){return e?!!e.__v_raw:!1}function Ee(e){const t=e&&e.__v_raw;return t?Ee(t):e}function $a(e){return Object.isExtensible(e)&&of(e,"__v_skip",!0),e}const it=e=>$e(e)?xr(e):e,Fa=e=>$e(e)?xf(e):e;function ze(e){return e?e.__v_isRef===!0:!1}function ja(e){return Rf(e,!1)}function hg(e){return Rf(e,!0)}function Rf(e,t){return ze(e)?e:new pg(e,t)}class pg{constructor(t,n){this.dep=new La,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=n?t:Ee(t),this._value=n?t:it(t),this.__v_isShallow=n}get value(){return this.dep.track(),this._value}set value(t){const n=this._rawValue,s=this.__v_isShallow||Kt(t)||hs(t);t=s?t:Ee(t),Bn(t,n)&&(this._rawValue=t,this._value=s?t:it(t),this.dep.trigger())}}function jn(e){return ze(e)?e.value:e}const mg={get:(e,t,n)=>t==="__v_raw"?e:jn(Reflect.get(e,t,n)),set:(e,t,n,s)=>{const i=e[t];return ze(i)&&!ze(n)?(i.value=n,!0):Reflect.set(e,t,n,s)}};function Pf(e){return Fn(e)?e:new Proxy(e,mg)}function gg(e){const t=ee(e)?new Array(e.length):{};for(const n in e)t[n]=bg(e,n);return t}class _g{constructor(t,n,s){this._object=t,this._key=n,this._defaultValue=s,this.__v_isRef=!0,this._value=void 0}get value(){const t=this._object[this._key];return this._value=t===void 0?this._defaultValue:t}set value(t){this._object[this._key]=t}get dep(){return Km(Ee(this._object),this._key)}}function bg(e,t,n){const s=e[t];return ze(s)?s:new _g(e,t,n)}class yg{constructor(t,n,s){this.fn=t,this.setter=n,this._value=void 0,this.dep=new La(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=gr-1,this.effect=this,this.__v_isReadonly=!n,this.isSSR=s}notify(){ke!==this&&(this.flags|=16,this.dep.notify())}get value(){const t=this.dep.track();return bf(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function vg(e,t,n=!1){let s,i;return fe(e)?s=e:(s=e.get,i=e.set),new yg(s,i,n)}const li={},wi=new WeakMap;let os;function wg(e,t=!1,n=os){if(n){let s=wi.get(n);s||wi.set(n,s=[]),s.push(e)}}function Eg(e,t,n=Me){const{immediate:s,deep:i,once:o,scheduler:a,augmentJob:c,call:f}=n,p=H=>i?H:Kt(H)||i===!1||i===0?vn(H,1):vn(H);let d,m,b,w,C=!1,P=!1;if(ze(e)?(m=()=>e.value,C=Kt(e)):Fn(e)?(m=()=>p(e),C=!0):ee(e)?(P=!0,C=e.some(H=>Fn(H)||Kt(H)),m=()=>e.map(H=>{if(ze(H))return H.value;if(Fn(H))return p(H);if(fe(H))return f?f(H,2):H()})):fe(e)?t?m=f?()=>f(e,2):e:m=()=>{if(b){Vn();try{b()}finally{qn()}}const H=os;os=d;try{return f?f(e,3,[w]):e(w)}finally{os=H}}:m=cn,t&&i){const H=m,Y=i===!0?1/0:i;m=()=>vn(H(),Y)}const R=hf(),$=()=>{d.stop(),R&&Ta(R.effects,d)};if(o)if(t){const H=t;t=(...Y)=>{H(...Y),$()}}else{const H=m;m=()=>{H(),$()}}let N=P?new Array(e.length).fill(li):li;const B=H=>{if(!(!(d.flags&1)||!d.dirty&&!H))if(t){const Y=d.run();if(i||C||(P?Y.some((ge,le)=>Bn(ge,N[le])):Bn(Y,N))){b&&b();const ge=os;os=d;try{const le=[Y,N===li?void 0:P&&N[0]===li?[]:N,w];f?f(t,3,le):t(...le),N=Y}finally{os=ge}}}else d.run()};return c&&c(B),d=new pf(m),d.scheduler=a?()=>a(B,!1):B,w=H=>wg(H,!1,d),b=d.onStop=()=>{const H=wi.get(d);if(H){if(f)f(H,4);else for(const Y of H)Y();wi.delete(d)}},t?s?B(!0):N=d.run():a?a(B.bind(null,!0),!0):d.run(),$.pause=d.pause.bind(d),$.resume=d.resume.bind(d),$.stop=$,$}function vn(e,t=1/0,n){if(t<=0||!$e(e)||e.__v_skip||(n=n||new Set,n.has(e)))return e;if(n.add(e),t--,ze(e))vn(e.value,t,n);else if(ee(e))for(let s=0;s{vn(s,t,n)});else if(rf(e)){for(const s in e)vn(e[s],t,n);for(const s of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,s)&&vn(e[s],t,n)}return e}/** +* @vue/runtime-core v3.5.3 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/function Rr(e,t,n,s){try{return s?e(...s):e()}catch(i){Mi(i,t,n)}}function Jt(e,t,n,s){if(fe(e)){const i=Rr(e,t,n,s);return i&&nf(i)&&i.catch(o=>{Mi(o,t,n)}),i}if(ee(e)){const i=[];for(let o=0;o>>1,i=gt[s],o=yr(i);o=yr(n)?gt.push(e):gt.splice(Sg(t),0,e),e.flags|=1,Lf()}}function Lf(){!br&&!ta&&(ta=!0,Ba=If.then(Nf))}function Tg(e){ee(e)?js.push(...e):kn&&e.id===-1?kn.splice(Ns+1,0,e):e.flags&1||(js.push(e),e.flags|=1),Lf()}function $c(e,t,n=br?an+1:0){for(;nyr(n)-yr(s));if(js.length=0,kn){kn.push(...t);return}for(kn=t,Ns=0;Nse.id==null?e.flags&2?-1:1/0:e.id;function Nf(e){ta=!1,br=!0;try{for(an=0;an{s._d&&Kc(-1);const o=Ei(t);let a;try{a=e(...i)}finally{Ei(o),s._d&&Kc(1)}return a};return s._n=!0,s._c=!0,s._d=!0,s}function n0(e,t){if(Je===null)return e;const n=Vi(Je),s=e.dirs||(e.dirs=[]);for(let i=0;ie.__isTeleport,Ls=Symbol("_leaveCb"),ci=Symbol("_enterCb");function xg(){const e={isMounted:!1,isLeaving:!1,isUnmounting:!1,leavingVNodes:new Map};return Bf(()=>{e.isMounted=!0}),Uf(()=>{e.isUnmounting=!0}),e}const $t=[Function,Array],Rg={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:$t,onEnter:$t,onAfterEnter:$t,onEnterCancelled:$t,onBeforeLeave:$t,onLeave:$t,onAfterLeave:$t,onLeaveCancelled:$t,onBeforeAppear:$t,onAppear:$t,onAfterAppear:$t,onAppearCancelled:$t};function Pg(e,t){const{leavingVNodes:n}=e;let s=n.get(t.type);return s||(s=Object.create(null),n.set(t.type,s)),s}function na(e,t,n,s,i){const{appear:o,mode:a,persisted:c=!1,onBeforeEnter:f,onEnter:p,onAfterEnter:d,onEnterCancelled:m,onBeforeLeave:b,onLeave:w,onAfterLeave:C,onLeaveCancelled:P,onBeforeAppear:R,onAppear:$,onAfterAppear:N,onAppearCancelled:B}=t,H=String(e.key),Y=Pg(n,e),ge=(q,oe)=>{q&&Jt(q,s,9,oe)},le=(q,oe)=>{const ve=oe[1];ge(q,oe),ee(q)?q.every(G=>G.length<=1)&&ve():q.length<=1&&ve()},te={mode:a,persisted:c,beforeEnter(q){let oe=f;if(!n.isMounted)if(o)oe=R||f;else return;q[Ls]&&q[Ls](!0);const ve=Y[H];ve&&ks(e,ve)&&ve.el[Ls]&&ve.el[Ls](),ge(oe,[q])},enter(q){let oe=p,ve=d,G=m;if(!n.isMounted)if(o)oe=$||p,ve=N||d,G=B||m;else return;let be=!1;const He=q[ci]=st=>{be||(be=!0,st?ge(G,[q]):ge(ve,[q]),te.delayedLeave&&te.delayedLeave(),q[ci]=void 0)};oe?le(oe,[q,He]):He()},leave(q,oe){const ve=String(e.key);if(q[ci]&&q[ci](!0),n.isUnmounting)return oe();ge(b,[q]);let G=!1;const be=q[Ls]=He=>{G||(G=!0,oe(),He?ge(P,[q]):ge(C,[q]),q[Ls]=void 0,Y[ve]===e&&delete Y[ve])};Y[ve]=e,w?le(w,[q,be]):be()},clone(q){return na(q,t,n,s)}};return te}function vr(e,t){e.shapeFlag&6&&e.component?(e.transition=t,vr(e.component.subTree,t)):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function Mf(e,t=!1,n){let s=[],i=0;for(let o=0;o1)for(let o=0;osa(C,t&&(ee(t)?t[P]:t),n,s,i));return}if(Bs(s)&&!i)return;const o=s.shapeFlag&4?Vi(s.component):s.el,a=i?null:o,{i:c,r:f}=e,p=t&&t.r,d=c.refs===Me?c.refs={}:c.refs,m=c.setupState,b=Ee(m),w=m===Me?()=>!1:C=>Ie(b,C);if(p!=null&&p!==f&&(qe(p)?(d[p]=null,w(p)&&(m[p]=null)):ze(p)&&(p.value=null)),fe(f))Rr(f,c,12,[a,d]);else{const C=qe(f),P=ze(f);if(C||P){const R=()=>{if(e.f){const $=C?w(f)?m[f]:d[f]:f.value;i?ee($)&&Ta($,o):ee($)?$.includes(o)||$.push(o):C?(d[f]=[o],w(f)&&(m[f]=d[f])):(f.value=[o],e.k&&(d[e.k]=f.value))}else C?(d[f]=a,w(f)&&(m[f]=a)):P&&(f.value=a,e.k&&(d[e.k]=a))};a?(R.id=-1,St(R,n)):R()}}}const Bs=e=>!!e.type.__asyncLoader,Ff=e=>e.type.__isKeepAlive;function Ig(e,t){jf(e,"a",t)}function Lg(e,t){jf(e,"da",t)}function jf(e,t,n=Ze){const s=e.__wdc||(e.__wdc=()=>{let i=n;for(;i;){if(i.isDeactivated)return;i=i.parent}return e()});if($i(t,s,n),n){let i=n.parent;for(;i&&i.parent;)Ff(i.parent.vnode)&&Dg(s,t,n,i),i=i.parent}}function Dg(e,t,n,s){const i=$i(t,e,s,!0);Vf(()=>{Ta(s[t],i)},n)}function $i(e,t,n=Ze,s=!1){if(n){const i=n[e]||(n[e]=[]),o=t.__weh||(t.__weh=(...a)=>{Vn();const c=Lr(n),f=Jt(t,n,e,a);return c(),qn(),f});return s?i.unshift(o):i.push(o),o}}const Tn=e=>(t,n=Ze)=>{(!Ui||e==="sp")&&$i(e,(...s)=>t(...s),n)},Ng=Tn("bm"),Bf=Tn("m"),kg=Tn("bu"),Hf=Tn("u"),Uf=Tn("bum"),Vf=Tn("um"),Mg=Tn("sp"),$g=Tn("rtg"),Fg=Tn("rtc");function jg(e,t=Ze){$i("ec",e,t)}const qf="components";function cr(e,t){return zf(qf,e,!0,t)||e}const Wf=Symbol.for("v-ndc");function Ua(e){return qe(e)?zf(qf,e,!1)||e:e||Wf}function zf(e,t,n=!0,s=!1){const i=Je||Ze;if(i){const o=i.type;{const c=O_(o,!1);if(c&&(c===t||c===Gt(t)||c===Di(Gt(t))))return o}const a=Fc(i[e]||o[e],t)||Fc(i.appContext[e],t);return!a&&s?o:a}}function Fc(e,t){return e&&(e[t]||e[Gt(t)]||e[Di(Gt(t))])}function jc(e,t,n,s){let i;const o=n,a=ee(e);if(a||qe(e)){const c=a&&Fn(e);c&&(e=Ni(e)),i=new Array(e.length);for(let f=0,p=e.length;ft(c,f,void 0,o));else{const c=Object.keys(e);i=new Array(c.length);for(let f=0,p=c.length;fSi(t)?!(t.type===Sn||t.type===tt&&!Kf(t.children)):!0)?e:null}function Hg(e,t){const n={};for(const s in e)n[ui(s)]=e[s];return n}const ra=e=>e?pd(e)?Vi(e):ra(e.parent):null,ur=Ge(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>ra(e.parent),$root:e=>ra(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>Va(e),$forceUpdate:e=>e.f||(e.f=()=>{Ha(e.update)}),$nextTick:e=>e.n||(e.n=Pr.bind(e.proxy)),$watch:e=>c_.bind(e)}),$o=(e,t)=>e!==Me&&!e.__isScriptSetup&&Ie(e,t),Ug={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:s,data:i,props:o,accessCache:a,type:c,appContext:f}=e;let p;if(t[0]!=="$"){const w=a[t];if(w!==void 0)switch(w){case 1:return s[t];case 2:return i[t];case 4:return n[t];case 3:return o[t]}else{if($o(s,t))return a[t]=1,s[t];if(i!==Me&&Ie(i,t))return a[t]=2,i[t];if((p=e.propsOptions[0])&&Ie(p,t))return a[t]=3,o[t];if(n!==Me&&Ie(n,t))return a[t]=4,n[t];ia&&(a[t]=0)}}const d=ur[t];let m,b;if(d)return t==="$attrs"&&ot(e.attrs,"get",""),d(e);if((m=c.__cssModules)&&(m=m[t]))return m;if(n!==Me&&Ie(n,t))return a[t]=4,n[t];if(b=f.config.globalProperties,Ie(b,t))return b[t]},set({_:e},t,n){const{data:s,setupState:i,ctx:o}=e;return $o(i,t)?(i[t]=n,!0):s!==Me&&Ie(s,t)?(s[t]=n,!0):Ie(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(o[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:s,appContext:i,propsOptions:o}},a){let c;return!!n[a]||e!==Me&&Ie(e,a)||$o(t,a)||(c=o[0])&&Ie(c,a)||Ie(s,a)||Ie(ur,a)||Ie(i.config.globalProperties,a)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:Ie(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function Bc(e){return ee(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let ia=!0;function Vg(e){const t=Va(e),n=e.proxy,s=e.ctx;ia=!1,t.beforeCreate&&Hc(t.beforeCreate,e,"bc");const{data:i,computed:o,methods:a,watch:c,provide:f,inject:p,created:d,beforeMount:m,mounted:b,beforeUpdate:w,updated:C,activated:P,deactivated:R,beforeDestroy:$,beforeUnmount:N,destroyed:B,unmounted:H,render:Y,renderTracked:ge,renderTriggered:le,errorCaptured:te,serverPrefetch:q,expose:oe,inheritAttrs:ve,components:G,directives:be,filters:He}=t;if(p&&qg(p,s,null),a)for(const ae in a){const Se=a[ae];fe(Se)&&(s[ae]=Se.bind(n))}if(i){const ae=i.call(n,n);$e(ae)&&(e.data=xr(ae))}if(ia=!0,o)for(const ae in o){const Se=o[ae],Pt=fe(Se)?Se.bind(n,n):fe(Se.get)?Se.get.bind(n,n):cn,I=!fe(Se)&&fe(Se.set)?Se.set.bind(n):cn,_t=Ft({get:Pt,set:I});Object.defineProperty(s,ae,{enumerable:!0,configurable:!0,get:()=>_t.value,set:et=>_t.value=et})}if(c)for(const ae in c)Gf(c[ae],s,n,ae);if(f){const ae=fe(f)?f.call(n):f;Reflect.ownKeys(ae).forEach(Se=>{di(Se,ae[Se])})}d&&Hc(d,e,"c");function Oe(ae,Se){ee(Se)?Se.forEach(Pt=>ae(Pt.bind(n))):Se&&ae(Se.bind(n))}if(Oe(Ng,m),Oe(Bf,b),Oe(kg,w),Oe(Hf,C),Oe(Ig,P),Oe(Lg,R),Oe(jg,te),Oe(Fg,ge),Oe($g,le),Oe(Uf,N),Oe(Vf,H),Oe(Mg,q),ee(oe))if(oe.length){const ae=e.exposed||(e.exposed={});oe.forEach(Se=>{Object.defineProperty(ae,Se,{get:()=>n[Se],set:Pt=>n[Se]=Pt})})}else e.exposed||(e.exposed={});Y&&e.render===cn&&(e.render=Y),ve!=null&&(e.inheritAttrs=ve),G&&(e.components=G),be&&(e.directives=be),q&&$f(e)}function qg(e,t,n=cn){ee(e)&&(e=oa(e));for(const s in e){const i=e[s];let o;$e(i)?"default"in i?o=xt(i.from||s,i.default,!0):o=xt(i.from||s):o=xt(i),ze(o)?Object.defineProperty(t,s,{enumerable:!0,configurable:!0,get:()=>o.value,set:a=>o.value=a}):t[s]=o}}function Hc(e,t,n){Jt(ee(e)?e.map(s=>s.bind(t.proxy)):e.bind(t.proxy),t,n)}function Gf(e,t,n,s){let i=s.includes(".")?ld(n,s):()=>n[s];if(qe(e)){const o=t[e];fe(o)&&fr(i,o)}else if(fe(e))fr(i,e.bind(n));else if($e(e))if(ee(e))e.forEach(o=>Gf(o,t,n,s));else{const o=fe(e.handler)?e.handler.bind(n):t[e.handler];fe(o)&&fr(i,o,e)}}function Va(e){const t=e.type,{mixins:n,extends:s}=t,{mixins:i,optionsCache:o,config:{optionMergeStrategies:a}}=e.appContext,c=o.get(t);let f;return c?f=c:!i.length&&!n&&!s?f=t:(f={},i.length&&i.forEach(p=>Ci(f,p,a,!0)),Ci(f,t,a)),$e(t)&&o.set(t,f),f}function Ci(e,t,n,s=!1){const{mixins:i,extends:o}=t;o&&Ci(e,o,n,!0),i&&i.forEach(a=>Ci(e,a,n,!0));for(const a in t)if(!(s&&a==="expose")){const c=Wg[a]||n&&n[a];e[a]=c?c(e[a],t[a]):t[a]}return e}const Wg={data:Uc,props:Vc,emits:Vc,methods:or,computed:or,beforeCreate:pt,created:pt,beforeMount:pt,mounted:pt,beforeUpdate:pt,updated:pt,beforeDestroy:pt,beforeUnmount:pt,destroyed:pt,unmounted:pt,activated:pt,deactivated:pt,errorCaptured:pt,serverPrefetch:pt,components:or,directives:or,watch:Kg,provide:Uc,inject:zg};function Uc(e,t){return t?e?function(){return Ge(fe(e)?e.call(this,this):e,fe(t)?t.call(this,this):t)}:t:e}function zg(e,t){return or(oa(e),oa(t))}function oa(e){if(ee(e)){const t={};for(let n=0;n1)return n&&fe(t)?t.call(s&&s.proxy):t}}function Xg(){return!!(Ze||Je||us)}const Xf={},Qf=()=>Object.create(Xf),Yf=e=>Object.getPrototypeOf(e)===Xf;function Qg(e,t,n,s=!1){const i={},o=Qf();e.propsDefaults=Object.create(null),Zf(e,t,i,o);for(const a in e.propsOptions[0])a in i||(i[a]=void 0);n?e.props=s?i:Of(i):e.type.props?e.props=i:e.props=o,e.attrs=o}function Yg(e,t,n,s){const{props:i,attrs:o,vnode:{patchFlag:a}}=e,c=Ee(i),[f]=e.propsOptions;let p=!1;if((s||a>0)&&!(a&16)){if(a&8){const d=e.vnode.dynamicProps;for(let m=0;m{f=!0;const[b,w]=ed(m,t,!0);Ge(a,b),w&&c.push(...w)};!n&&t.mixins.length&&t.mixins.forEach(d),e.extends&&d(e.extends),e.mixins&&e.mixins.forEach(d)}if(!o&&!f)return $e(e)&&s.set(e,$s),$s;if(ee(o))for(let d=0;de[0]==="_"||e==="$stable",qa=e=>ee(e)?e.map(ln):[ln(e)],e_=(e,t,n)=>{if(t._n)return t;const s=Ir((...i)=>qa(t(...i)),n);return s._c=!1,s},nd=(e,t,n)=>{const s=e._ctx;for(const i in e){if(td(i))continue;const o=e[i];if(fe(o))t[i]=e_(i,o,s);else if(o!=null){const a=qa(o);t[i]=()=>a}}},sd=(e,t)=>{const n=qa(t);e.slots.default=()=>n},rd=(e,t,n)=>{for(const s in t)(n||s!=="_")&&(e[s]=t[s])},t_=(e,t,n)=>{const s=e.slots=Qf();if(e.vnode.shapeFlag&32){const i=t._;i?(rd(s,t,n),n&&of(s,"_",i,!0)):nd(t,s)}else t&&sd(e,t)},n_=(e,t,n)=>{const{vnode:s,slots:i}=e;let o=!0,a=Me;if(s.shapeFlag&32){const c=t._;c?n&&c===1?o=!1:rd(i,t,n):(o=!t.$stable,nd(t,i)),a=t}else t&&(sd(e,t),a={default:1});if(o)for(const c in i)!td(c)&&a[c]==null&&delete i[c]},St=g_;function s_(e){return r_(e)}function r_(e,t){const n=af();n.__VUE__=!0;const{insert:s,remove:i,patchProp:o,createElement:a,createText:c,createComment:f,setText:p,setElementText:d,parentNode:m,nextSibling:b,setScopeId:w=cn,insertStaticContent:C}=e,P=(g,_,E,D=null,O=null,k=null,W=void 0,U=null,F=!!_.dynamicChildren)=>{if(g===_)return;g&&!ks(g,_)&&(D=x(g),et(g,O,k,!0),g=null),_.patchFlag===-2&&(F=!1,_.dynamicChildren=null);const{type:M,ref:ne,shapeFlag:z}=_;switch(M){case ji:R(g,_,E,D);break;case Sn:$(g,_,E,D);break;case hi:g==null&&N(_,E,D,W);break;case tt:G(g,_,E,D,O,k,W,U,F);break;default:z&1?Y(g,_,E,D,O,k,W,U,F):z&6?be(g,_,E,D,O,k,W,U,F):(z&64||z&128)&&M.process(g,_,E,D,O,k,W,U,F,Z)}ne!=null&&O&&sa(ne,g&&g.ref,k,_||g,!_)},R=(g,_,E,D)=>{if(g==null)s(_.el=c(_.children),E,D);else{const O=_.el=g.el;_.children!==g.children&&p(O,_.children)}},$=(g,_,E,D)=>{g==null?s(_.el=f(_.children||""),E,D):_.el=g.el},N=(g,_,E,D)=>{[g.el,g.anchor]=C(g.children,_,E,D,g.el,g.anchor)},B=({el:g,anchor:_},E,D)=>{let O;for(;g&&g!==_;)O=b(g),s(g,E,D),g=O;s(_,E,D)},H=({el:g,anchor:_})=>{let E;for(;g&&g!==_;)E=b(g),i(g),g=E;i(_)},Y=(g,_,E,D,O,k,W,U,F)=>{_.type==="svg"?W="svg":_.type==="math"&&(W="mathml"),g==null?ge(_,E,D,O,k,W,U,F):q(g,_,O,k,W,U,F)},ge=(g,_,E,D,O,k,W,U)=>{let F,M;const{props:ne,shapeFlag:z,transition:Q,dirs:re}=g;if(F=g.el=a(g.type,k,ne&&ne.is,ne),z&8?d(F,g.children):z&16&&te(g.children,F,null,D,O,Fo(g,k),W,U),re&&ss(g,null,D,"created"),le(F,g,g.scopeId,W,D),ne){for(const Ce in ne)Ce!=="value"&&!ar(Ce)&&o(F,Ce,null,ne[Ce],k,D);"value"in ne&&o(F,"value",null,ne.value,k),(M=ne.onVnodeBeforeMount)&&rn(M,D,g)}re&&ss(g,null,D,"beforeMount");const pe=i_(O,Q);pe&&Q.beforeEnter(F),s(F,_,E),((M=ne&&ne.onVnodeMounted)||pe||re)&&St(()=>{M&&rn(M,D,g),pe&&Q.enter(F),re&&ss(g,null,D,"mounted")},O)},le=(g,_,E,D,O)=>{if(E&&w(g,E),D)for(let k=0;k{for(let M=F;M{const U=_.el=g.el;let{patchFlag:F,dynamicChildren:M,dirs:ne}=_;F|=g.patchFlag&16;const z=g.props||Me,Q=_.props||Me;let re;if(E&&rs(E,!1),(re=Q.onVnodeBeforeUpdate)&&rn(re,E,_,g),ne&&ss(_,g,E,"beforeUpdate"),E&&rs(E,!0),(z.innerHTML&&Q.innerHTML==null||z.textContent&&Q.textContent==null)&&d(U,""),M?oe(g.dynamicChildren,M,U,E,D,Fo(_,O),k):W||Se(g,_,U,null,E,D,Fo(_,O),k,!1),F>0){if(F&16)ve(U,z,Q,E,O);else if(F&2&&z.class!==Q.class&&o(U,"class",null,Q.class,O),F&4&&o(U,"style",z.style,Q.style,O),F&8){const pe=_.dynamicProps;for(let Ce=0;Ce{re&&rn(re,E,_,g),ne&&ss(_,g,E,"updated")},D)},oe=(g,_,E,D,O,k,W)=>{for(let U=0;U<_.length;U++){const F=g[U],M=_[U],ne=F.el&&(F.type===tt||!ks(F,M)||F.shapeFlag&70)?m(F.el):E;P(F,M,ne,null,D,O,k,W,!0)}},ve=(g,_,E,D,O)=>{if(_!==E){if(_!==Me)for(const k in _)!ar(k)&&!(k in E)&&o(g,k,_[k],null,O,D);for(const k in E){if(ar(k))continue;const W=E[k],U=_[k];W!==U&&k!=="value"&&o(g,k,U,W,O,D)}"value"in E&&o(g,"value",_.value,E.value,O)}},G=(g,_,E,D,O,k,W,U,F)=>{const M=_.el=g?g.el:c(""),ne=_.anchor=g?g.anchor:c("");let{patchFlag:z,dynamicChildren:Q,slotScopeIds:re}=_;re&&(U=U?U.concat(re):re),g==null?(s(M,E,D),s(ne,E,D),te(_.children||[],E,ne,O,k,W,U,F)):z>0&&z&64&&Q&&g.dynamicChildren?(oe(g.dynamicChildren,Q,E,O,k,W,U),(_.key!=null||O&&_===O.subTree)&&id(g,_,!0)):Se(g,_,E,ne,O,k,W,U,F)},be=(g,_,E,D,O,k,W,U,F)=>{_.slotScopeIds=U,g==null?_.shapeFlag&512?O.ctx.activate(_,E,D,W,F):He(_,E,D,O,k,W,F):st(g,_,F)},He=(g,_,E,D,O,k,W)=>{const U=g.component=E_(g,D,O);if(Ff(g)&&(U.ctx.renderer=Z),C_(U,!1,W),U.asyncDep){if(O&&O.registerDep(U,Oe,W),!g.el){const F=U.subTree=nt(Sn);$(null,F,_,E)}}else Oe(U,g,_,E,O,k,W)},st=(g,_,E)=>{const D=_.component=g.component;if(p_(g,_,E))if(D.asyncDep&&!D.asyncResolved){ae(D,_,E);return}else D.next=_,D.update();else _.el=g.el,D.vnode=_},Oe=(g,_,E,D,O,k,W)=>{const U=()=>{if(g.isMounted){let{next:z,bu:Q,u:re,parent:pe,vnode:Ce}=g;{const lt=od(g);if(lt){z&&(z.el=Ce.el,ae(g,z,W)),lt.asyncDep.then(()=>{g.isUnmounted||U()});return}}let ye=z,Xe;rs(g,!1),z?(z.el=Ce.el,ae(g,z,W)):z=Ce,Q&&fi(Q),(Xe=z.props&&z.props.onVnodeBeforeUpdate)&&rn(Xe,pe,z,Ce),rs(g,!0);const Qe=jo(g),at=g.subTree;g.subTree=Qe,P(at,Qe,m(at.el),x(at),g,O,k),z.el=Qe.el,ye===null&&m_(g,Qe.el),re&&St(re,O),(Xe=z.props&&z.props.onVnodeUpdated)&&St(()=>rn(Xe,pe,z,Ce),O)}else{let z;const{el:Q,props:re}=_,{bm:pe,m:Ce,parent:ye,root:Xe,type:Qe}=g,at=Bs(_);if(rs(g,!1),pe&&fi(pe),!at&&(z=re&&re.onVnodeBeforeMount)&&rn(z,ye,_),rs(g,!0),Q&&je){const lt=()=>{g.subTree=jo(g),je(Q,g.subTree,g,O,null)};at&&Qe.__asyncHydrate?Qe.__asyncHydrate(Q,g,lt):lt()}else{Xe.ce&&Xe.ce._injectChildStyle(Qe);const lt=g.subTree=jo(g);P(null,lt,E,D,g,O,k),_.el=lt.el}if(Ce&&St(Ce,O),!at&&(z=re&&re.onVnodeMounted)){const lt=_;St(()=>rn(z,ye,lt),O)}(_.shapeFlag&256||ye&&Bs(ye.vnode)&&ye.vnode.shapeFlag&256)&&g.a&&St(g.a,O),g.isMounted=!0,_=E=D=null}};g.scope.on();const F=g.effect=new pf(U);g.scope.off();const M=g.update=F.run.bind(F),ne=g.job=F.runIfDirty.bind(F);ne.i=g,ne.id=g.uid,F.scheduler=()=>Ha(ne),rs(g,!0),M()},ae=(g,_,E)=>{_.component=g;const D=g.vnode.props;g.vnode=_,g.next=null,Yg(g,_.props,D,E),n_(g,_.children,E),Vn(),$c(g),qn()},Se=(g,_,E,D,O,k,W,U,F=!1)=>{const M=g&&g.children,ne=g?g.shapeFlag:0,z=_.children,{patchFlag:Q,shapeFlag:re}=_;if(Q>0){if(Q&128){I(M,z,E,D,O,k,W,U,F);return}else if(Q&256){Pt(M,z,E,D,O,k,W,U,F);return}}re&8?(ne&16&&Be(M,O,k),z!==M&&d(E,z)):ne&16?re&16?I(M,z,E,D,O,k,W,U,F):Be(M,O,k,!0):(ne&8&&d(E,""),re&16&&te(z,E,D,O,k,W,U,F))},Pt=(g,_,E,D,O,k,W,U,F)=>{g=g||$s,_=_||$s;const M=g.length,ne=_.length,z=Math.min(M,ne);let Q;for(Q=0;Qne?Be(g,O,k,!0,!1,z):te(_,E,D,O,k,W,U,F,z)},I=(g,_,E,D,O,k,W,U,F)=>{let M=0;const ne=_.length;let z=g.length-1,Q=ne-1;for(;M<=z&&M<=Q;){const re=g[M],pe=_[M]=F?Mn(_[M]):ln(_[M]);if(ks(re,pe))P(re,pe,E,null,O,k,W,U,F);else break;M++}for(;M<=z&&M<=Q;){const re=g[z],pe=_[Q]=F?Mn(_[Q]):ln(_[Q]);if(ks(re,pe))P(re,pe,E,null,O,k,W,U,F);else break;z--,Q--}if(M>z){if(M<=Q){const re=Q+1,pe=reQ)for(;M<=z;)et(g[M],O,k,!0),M++;else{const re=M,pe=M,Ce=new Map;for(M=pe;M<=Q;M++){const ct=_[M]=F?Mn(_[M]):ln(_[M]);ct.key!=null&&Ce.set(ct.key,M)}let ye,Xe=0;const Qe=Q-pe+1;let at=!1,lt=0;const Wn=new Array(Qe);for(M=0;M=Qe){et(ct,O,k,!0);continue}let It;if(ct.key!=null)It=Ce.get(ct.key);else for(ye=pe;ye<=Q;ye++)if(Wn[ye-pe]===0&&ks(ct,_[ye])){It=ye;break}It===void 0?et(ct,O,k,!0):(Wn[It-pe]=M+1,It>=lt?lt=It:at=!0,P(ct,_[It],E,null,O,k,W,U,F),Xe++)}const $r=at?o_(Wn):$s;for(ye=$r.length-1,M=Qe-1;M>=0;M--){const ct=pe+M,It=_[ct],Fr=ct+1{const{el:k,type:W,transition:U,children:F,shapeFlag:M}=g;if(M&6){_t(g.component.subTree,_,E,D);return}if(M&128){g.suspense.move(_,E,D);return}if(M&64){W.move(g,_,E,Z);return}if(W===tt){s(k,_,E);for(let z=0;zU.enter(k),O);else{const{leave:z,delayLeave:Q,afterLeave:re}=U,pe=()=>s(k,_,E),Ce=()=>{z(k,()=>{pe(),re&&re()})};Q?Q(k,pe,Ce):Ce()}else s(k,_,E)},et=(g,_,E,D=!1,O=!1)=>{const{type:k,props:W,ref:U,children:F,dynamicChildren:M,shapeFlag:ne,patchFlag:z,dirs:Q,cacheIndex:re}=g;if(z===-2&&(O=!1),U!=null&&sa(U,null,E,g,!0),re!=null&&(_.renderCache[re]=void 0),ne&256){_.ctx.deactivate(g);return}const pe=ne&1&&Q,Ce=!Bs(g);let ye;if(Ce&&(ye=W&&W.onVnodeBeforeUnmount)&&rn(ye,_,g),ne&6)Zt(g.component,E,D);else{if(ne&128){g.suspense.unmount(E,D);return}pe&&ss(g,null,_,"beforeUnmount"),ne&64?g.type.remove(g,_,E,Z,D):M&&!M.hasOnce&&(k!==tt||z>0&&z&64)?Be(M,_,E,!1,!0):(k===tt&&z&384||!O&&ne&16)&&Be(F,_,E),D&&Yt(g)}(Ce&&(ye=W&&W.onVnodeUnmounted)||pe)&&St(()=>{ye&&rn(ye,_,g),pe&&ss(g,null,_,"unmounted")},E)},Yt=g=>{const{type:_,el:E,anchor:D,transition:O}=g;if(_===tt){rt(E,D);return}if(_===hi){H(g);return}const k=()=>{i(E),O&&!O.persisted&&O.afterLeave&&O.afterLeave()};if(g.shapeFlag&1&&O&&!O.persisted){const{leave:W,delayLeave:U}=O,F=()=>W(E,k);U?U(g.el,k,F):F()}else k()},rt=(g,_)=>{let E;for(;g!==_;)E=b(g),i(g),g=E;i(_)},Zt=(g,_,E)=>{const{bum:D,scope:O,job:k,subTree:W,um:U,m:F,a:M}=g;Wc(F),Wc(M),D&&fi(D),O.stop(),k&&(k.flags|=8,et(W,g,_,E)),U&&St(U,_),St(()=>{g.isUnmounted=!0},_),_&&_.pendingBranch&&!_.isUnmounted&&g.asyncDep&&!g.asyncResolved&&g.suspenseId===_.pendingId&&(_.deps--,_.deps===0&&_.resolve())},Be=(g,_,E,D=!1,O=!1,k=0)=>{for(let W=k;W{if(g.shapeFlag&6)return x(g.component.subTree);if(g.shapeFlag&128)return g.suspense.next();const _=b(g.anchor||g.el),E=_&&_[Ag];return E?b(E):_};let A=!1;const V=(g,_,E)=>{g==null?_._vnode&&et(_._vnode,null,null,!0):P(_._vnode||null,g,_,null,null,null,E),_._vnode=g,A||(A=!0,$c(),Df(),A=!1)},Z={p:P,um:et,m:_t,r:Yt,mt:He,mc:te,pc:Se,pbc:oe,n:x,o:e};let Te,je;return{render:V,hydrate:Te,createApp:Jg(V,Te)}}function Fo({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function rs({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function i_(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function id(e,t,n=!1){const s=e.children,i=t.children;if(ee(s)&&ee(i))for(let o=0;o>1,e[n[c]]0&&(t[s]=n[o-1]),n[o]=s)}}for(o=n.length,a=n[o-1];o-- >0;)n[o]=a,a=t[a];return n}function od(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:od(t)}function Wc(e){if(e)for(let t=0;txt(a_);function fr(e,t,n){return ad(e,t,n)}function ad(e,t,n=Me){const{immediate:s,deep:i,flush:o,once:a}=n,c=Ge({},n);let f;if(Ui)if(o==="sync"){const b=l_();f=b.__watcherHandles||(b.__watcherHandles=[])}else if(!t||s)c.once=!0;else return{stop:cn,resume:cn,pause:cn};const p=Ze;c.call=(b,w,C)=>Jt(b,p,w,C);let d=!1;o==="post"?c.scheduler=b=>{St(b,p&&p.suspense)}:o!=="sync"&&(d=!0,c.scheduler=(b,w)=>{w?b():Ha(b)}),c.augmentJob=b=>{t&&(b.flags|=4),d&&(b.flags|=2,p&&(b.id=p.uid,b.i=p))};const m=Eg(e,t,c);return f&&f.push(m),m}function c_(e,t,n){const s=this.proxy,i=qe(e)?e.includes(".")?ld(s,e):()=>s[e]:e.bind(s,s);let o;fe(t)?o=t:(o=t.handler,n=t);const a=Lr(this),c=ad(i,o.bind(s),n);return a(),c}function ld(e,t){const n=t.split(".");return()=>{let s=e;for(let i=0;it==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${Gt(t)}Modifiers`]||e[`${gs(t)}Modifiers`];function f_(e,t,...n){if(e.isUnmounted)return;const s=e.vnode.props||Me;let i=n;const o=t.startsWith("update:"),a=o&&u_(s,t.slice(7));a&&(a.trim&&(i=n.map(d=>qe(d)?d.trim():d)),a.number&&(i=n.map(yi)));let c,f=s[c=ui(t)]||s[c=ui(Gt(t))];!f&&o&&(f=s[c=ui(gs(t))]),f&&Jt(f,e,6,i);const p=s[c+"Once"];if(p){if(!e.emitted)e.emitted={};else if(e.emitted[c])return;e.emitted[c]=!0,Jt(p,e,6,i)}}function cd(e,t,n=!1){const s=t.emitsCache,i=s.get(e);if(i!==void 0)return i;const o=e.emits;let a={},c=!1;if(!fe(e)){const f=p=>{const d=cd(p,t,!0);d&&(c=!0,Ge(a,d))};!n&&t.mixins.length&&t.mixins.forEach(f),e.extends&&f(e.extends),e.mixins&&e.mixins.forEach(f)}return!o&&!c?($e(e)&&s.set(e,null),null):(ee(o)?o.forEach(f=>a[f]=null):Ge(a,o),$e(e)&&s.set(e,a),a)}function Fi(e,t){return!e||!Ii(t)?!1:(t=t.slice(2).replace(/Once$/,""),Ie(e,t[0].toLowerCase()+t.slice(1))||Ie(e,gs(t))||Ie(e,t))}function jo(e){const{type:t,vnode:n,proxy:s,withProxy:i,propsOptions:[o],slots:a,attrs:c,emit:f,render:p,renderCache:d,props:m,data:b,setupState:w,ctx:C,inheritAttrs:P}=e,R=Ei(e);let $,N;try{if(n.shapeFlag&4){const H=i||s,Y=H;$=ln(p.call(Y,H,d,m,w,b,C)),N=c}else{const H=t;$=ln(H.length>1?H(m,{attrs:c,slots:a,emit:f}):H(m,null)),N=t.props?c:d_(c)}}catch(H){dr.length=0,Mi(H,e,1),$=nt(Sn)}let B=$;if(N&&P!==!1){const H=Object.keys(N),{shapeFlag:Y}=B;H.length&&Y&7&&(o&&H.some(Sa)&&(N=h_(N,o)),B=ps(B,N,!1,!0))}return n.dirs&&(B=ps(B,null,!1,!0),B.dirs=B.dirs?B.dirs.concat(n.dirs):n.dirs),n.transition&&vr(B,n.transition),$=B,Ei(R),$}const d_=e=>{let t;for(const n in e)(n==="class"||n==="style"||Ii(n))&&((t||(t={}))[n]=e[n]);return t},h_=(e,t)=>{const n={};for(const s in e)(!Sa(s)||!(s.slice(9)in t))&&(n[s]=e[s]);return n};function p_(e,t,n){const{props:s,children:i,component:o}=e,{props:a,children:c,patchFlag:f}=t,p=o.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&f>=0){if(f&1024)return!0;if(f&16)return s?zc(s,a,p):!!a;if(f&8){const d=t.dynamicProps;for(let m=0;me.__isSuspense;function g_(e,t){t&&t.pendingBranch?ee(e)?t.effects.push(...e):t.effects.push(e):Tg(e)}const tt=Symbol.for("v-fgt"),ji=Symbol.for("v-txt"),Sn=Symbol.for("v-cmt"),hi=Symbol.for("v-stc"),dr=[];let Ot=null;function Ue(e=!1){dr.push(Ot=e?null:[])}function __(){dr.pop(),Ot=dr[dr.length-1]||null}let wr=1;function Kc(e){wr+=e,e<0&&Ot&&(Ot.hasOnce=!0)}function fd(e){return e.dynamicChildren=wr>0?Ot||$s:null,__(),wr>0&&Ot&&Ot.push(e),e}function qt(e,t,n,s,i,o){return fd(_s(e,t,n,s,i,o,!0))}function jt(e,t,n,s,i){return fd(nt(e,t,n,s,i,!0))}function Si(e){return e?e.__v_isVNode===!0:!1}function ks(e,t){return e.type===t.type&&e.key===t.key}const dd=({key:e})=>e??null,pi=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?qe(e)||ze(e)||fe(e)?{i:Je,r:e,k:t,f:!!n}:e:null);function _s(e,t=null,n=null,s=0,i=null,o=e===tt?0:1,a=!1,c=!1){const f={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&dd(t),ref:t&&pi(t),scopeId:kf,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:o,patchFlag:s,dynamicProps:i,dynamicChildren:null,appContext:null,ctx:Je};return c?(Wa(f,n),o&128&&e.normalize(f)):n&&(f.shapeFlag|=qe(n)?8:16),wr>0&&!a&&Ot&&(f.patchFlag>0||o&6)&&f.patchFlag!==32&&Ot.push(f),f}const nt=b_;function b_(e,t=null,n=null,s=0,i=null,o=!1){if((!e||e===Wf)&&(e=Sn),Si(e)){const c=ps(e,t,!0);return n&&Wa(c,n),wr>0&&!o&&Ot&&(c.shapeFlag&6?Ot[Ot.indexOf(e)]=c:Ot.push(c)),c.patchFlag=-2,c}if(x_(e)&&(e=e.__vccOpts),t){t=y_(t);let{class:c,style:f}=t;c&&!qe(c)&&(t.class=Hn(c)),$e(f)&&(Ma(f)&&!ee(f)&&(f=Ge({},f)),t.style=Or(f))}const a=qe(e)?1:ud(e)?128:Og(e)?64:$e(e)?4:fe(e)?2:0;return _s(e,t,n,s,i,a,o,!0)}function y_(e){return e?Ma(e)||Yf(e)?Ge({},e):e:null}function ps(e,t,n=!1,s=!1){const{props:i,ref:o,patchFlag:a,children:c,transition:f}=e,p=t?Hi(i||{},t):i,d={__v_isVNode:!0,__v_skip:!0,type:e.type,props:p,key:p&&dd(p),ref:t&&t.ref?n&&o?ee(o)?o.concat(pi(t)):[o,pi(t)]:pi(t):o,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:c,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==tt?a===-1?16:a|16:a,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:f,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&ps(e.ssContent),ssFallback:e.ssFallback&&ps(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return f&&s&&vr(d,f.clone(d)),d}function Bi(e=" ",t=0){return nt(ji,null,e,t)}function s0(e,t){const n=nt(hi,null,e);return n.staticCount=t,n}function Bo(e="",t=!1){return t?(Ue(),jt(Sn,null,e)):nt(Sn,null,e)}function ln(e){return e==null||typeof e=="boolean"?nt(Sn):ee(e)?nt(tt,null,e.slice()):typeof e=="object"?Mn(e):nt(ji,null,String(e))}function Mn(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:ps(e)}function Wa(e,t){let n=0;const{shapeFlag:s}=e;if(t==null)t=null;else if(ee(t))n=16;else if(typeof t=="object")if(s&65){const i=t.default;i&&(i._c&&(i._d=!1),Wa(e,i()),i._c&&(i._d=!0));return}else{n=32;const i=t._;!i&&!Yf(t)?t._ctx=Je:i===3&&Je&&(Je.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else fe(t)?(t={default:t,_ctx:Je},n=32):(t=String(t),s&64?(n=16,t=[Bi(t)]):n=8);e.children=t,e.shapeFlag|=n}function Hi(...e){const t={};for(let n=0;nZe||Je;let Ti,la;{const e=af(),t=(n,s)=>{let i;return(i=e[n])||(i=e[n]=[]),i.push(s),o=>{i.length>1?i.forEach(a=>a(o)):i[0](o)}};Ti=t("__VUE_INSTANCE_SETTERS__",n=>Ze=n),la=t("__VUE_SSR_SETTERS__",n=>Ui=n)}const Lr=e=>{const t=Ze;return Ti(e),e.scope.on(),()=>{e.scope.off(),Ti(t)}},Gc=()=>{Ze&&Ze.scope.off(),Ti(null)};function pd(e){return e.vnode.shapeFlag&4}let Ui=!1;function C_(e,t=!1,n=!1){t&&la(t);const{props:s,children:i}=e.vnode,o=pd(e);Qg(e,s,o,t),t_(e,i,n);const a=o?S_(e,t):void 0;return t&&la(!1),a}function S_(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,Ug);const{setup:s}=n;if(s){const i=e.setupContext=s.length>1?A_(e):null,o=Lr(e);Vn();const a=Rr(s,e,0,[e.props,i]);if(qn(),o(),nf(a)){if(Bs(e)||$f(e),a.then(Gc,Gc),t)return a.then(c=>{Jc(e,c,t)}).catch(c=>{Mi(c,e,0)});e.asyncDep=a}else Jc(e,a,t)}else md(e,t)}function Jc(e,t,n){fe(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:$e(t)&&(e.setupState=Pf(t)),md(e,n)}let Xc;function md(e,t,n){const s=e.type;if(!e.render){if(!t&&Xc&&!s.render){const i=s.template||Va(e).template;if(i){const{isCustomElement:o,compilerOptions:a}=e.appContext.config,{delimiters:c,compilerOptions:f}=s,p=Ge(Ge({isCustomElement:o,delimiters:c},a),f);s.render=Xc(i,p)}}e.render=s.render||cn}{const i=Lr(e);Vn();try{Vg(e)}finally{qn(),i()}}}const T_={get(e,t){return ot(e,"get",""),e[t]}};function A_(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,T_),slots:e.slots,emit:e.emit,expose:t}}function Vi(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(Pf($a(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in ur)return ur[n](e)},has(t,n){return n in t||n in ur}})):e.proxy}function O_(e,t=!0){return fe(e)?e.displayName||e.name:e.name||t&&e.__name}function x_(e){return fe(e)&&"__vccOpts"in e}const Ft=(e,t)=>vg(e,t,Ui);function gd(e,t,n){const s=arguments.length;return s===2?$e(t)&&!ee(t)?Si(t)?nt(e,null,[t]):nt(e,t):nt(e,null,t):(s>3?n=Array.prototype.slice.call(arguments,2):s===3&&Si(n)&&(n=[n]),nt(e,t,n))}const R_="3.5.3";/** +* @vue/runtime-dom v3.5.3 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/let ca;const Qc=typeof window<"u"&&window.trustedTypes;if(Qc)try{ca=Qc.createPolicy("vue",{createHTML:e=>e})}catch{}const _d=ca?e=>ca.createHTML(e):e=>e,P_="http://www.w3.org/2000/svg",I_="http://www.w3.org/1998/Math/MathML",yn=typeof document<"u"?document:null,Yc=yn&&yn.createElement("template"),L_={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,s)=>{const i=t==="svg"?yn.createElementNS(P_,e):t==="mathml"?yn.createElementNS(I_,e):n?yn.createElement(e,{is:n}):yn.createElement(e);return e==="select"&&s&&s.multiple!=null&&i.setAttribute("multiple",s.multiple),i},createText:e=>yn.createTextNode(e),createComment:e=>yn.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>yn.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,s,i,o){const a=n?n.previousSibling:t.lastChild;if(i&&(i===o||i.nextSibling))for(;t.insertBefore(i.cloneNode(!0),n),!(i===o||!(i=i.nextSibling)););else{Yc.innerHTML=_d(s==="svg"?`${e}`:s==="mathml"?`${e}`:e);const c=Yc.content;if(s==="svg"||s==="mathml"){const f=c.firstChild;for(;f.firstChild;)c.appendChild(f.firstChild);c.removeChild(f)}t.insertBefore(c,n)}return[a?a.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},Pn="transition",nr="animation",Hs=Symbol("_vtc"),bd={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},D_=Ge({},Rg,bd),is=(e,t=[])=>{ee(e)?e.forEach(n=>n(...t)):e&&e(...t)},Zc=e=>e?ee(e)?e.some(t=>t.length>1):e.length>1:!1;function N_(e){const t={};for(const G in e)G in bd||(t[G]=e[G]);if(e.css===!1)return t;const{name:n="v",type:s,duration:i,enterFromClass:o=`${n}-enter-from`,enterActiveClass:a=`${n}-enter-active`,enterToClass:c=`${n}-enter-to`,appearFromClass:f=o,appearActiveClass:p=a,appearToClass:d=c,leaveFromClass:m=`${n}-leave-from`,leaveActiveClass:b=`${n}-leave-active`,leaveToClass:w=`${n}-leave-to`}=e,C=k_(i),P=C&&C[0],R=C&&C[1],{onBeforeEnter:$,onEnter:N,onEnterCancelled:B,onLeave:H,onLeaveCancelled:Y,onBeforeAppear:ge=$,onAppear:le=N,onAppearCancelled:te=B}=t,q=(G,be,He)=>{Dn(G,be?d:c),Dn(G,be?p:a),He&&He()},oe=(G,be)=>{G._isLeaving=!1,Dn(G,m),Dn(G,w),Dn(G,b),be&&be()},ve=G=>(be,He)=>{const st=G?le:N,Oe=()=>q(be,G,He);is(st,[be,Oe]),eu(()=>{Dn(be,G?f:o),bn(be,G?d:c),Zc(st)||tu(be,s,P,Oe)})};return Ge(t,{onBeforeEnter(G){is($,[G]),bn(G,o),bn(G,a)},onBeforeAppear(G){is(ge,[G]),bn(G,f),bn(G,p)},onEnter:ve(!1),onAppear:ve(!0),onLeave(G,be){G._isLeaving=!0;const He=()=>oe(G,be);bn(G,m),bn(G,b),vd(),eu(()=>{G._isLeaving&&(Dn(G,m),bn(G,w),Zc(H)||tu(G,s,R,He))}),is(H,[G,He])},onEnterCancelled(G){q(G,!1),is(B,[G])},onAppearCancelled(G){q(G,!0),is(te,[G])},onLeaveCancelled(G){oe(G),is(Y,[G])}})}function k_(e){if(e==null)return null;if($e(e))return[Ho(e.enter),Ho(e.leave)];{const t=Ho(e);return[t,t]}}function Ho(e){return $m(e)}function bn(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[Hs]||(e[Hs]=new Set)).add(t)}function Dn(e,t){t.split(/\s+/).forEach(s=>s&&e.classList.remove(s));const n=e[Hs];n&&(n.delete(t),n.size||(e[Hs]=void 0))}function eu(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let M_=0;function tu(e,t,n,s){const i=e._endId=++M_,o=()=>{i===e._endId&&s()};if(n)return setTimeout(o,n);const{type:a,timeout:c,propCount:f}=yd(e,t);if(!a)return s();const p=a+"end";let d=0;const m=()=>{e.removeEventListener(p,b),o()},b=w=>{w.target===e&&++d>=f&&m()};setTimeout(()=>{d(n[C]||"").split(", "),i=s(`${Pn}Delay`),o=s(`${Pn}Duration`),a=nu(i,o),c=s(`${nr}Delay`),f=s(`${nr}Duration`),p=nu(c,f);let d=null,m=0,b=0;t===Pn?a>0&&(d=Pn,m=a,b=o.length):t===nr?p>0&&(d=nr,m=p,b=f.length):(m=Math.max(a,p),d=m>0?a>p?Pn:nr:null,b=d?d===Pn?o.length:f.length:0);const w=d===Pn&&/\b(transform|all)(,|$)/.test(s(`${Pn}Property`).toString());return{type:d,timeout:m,propCount:b,hasTransform:w}}function nu(e,t){for(;e.lengthsu(n)+su(e[s])))}function su(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function vd(){return document.body.offsetHeight}function $_(e,t,n){const s=e[Hs];s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const Ai=Symbol("_vod"),wd=Symbol("_vsh"),r0={beforeMount(e,{value:t},{transition:n}){e[Ai]=e.style.display==="none"?"":e.style.display,n&&t?n.beforeEnter(e):sr(e,t)},mounted(e,{value:t},{transition:n}){n&&t&&n.enter(e)},updated(e,{value:t,oldValue:n},{transition:s}){!t!=!n&&(s?t?(s.beforeEnter(e),sr(e,!0),s.enter(e)):s.leave(e,()=>{sr(e,!1)}):sr(e,t))},beforeUnmount(e,{value:t}){sr(e,t)}};function sr(e,t){e.style.display=t?e[Ai]:"none",e[wd]=!t}const F_=Symbol(""),j_=/(^|;)\s*display\s*:/;function B_(e,t,n){const s=e.style,i=qe(n);let o=!1;if(n&&!i){if(t)if(qe(t))for(const a of t.split(";")){const c=a.slice(0,a.indexOf(":")).trim();n[c]==null&&mi(s,c,"")}else for(const a in t)n[a]==null&&mi(s,a,"");for(const a in n)a==="display"&&(o=!0),mi(s,a,n[a])}else if(i){if(t!==n){const a=s[F_];a&&(n+=";"+a),s.cssText=n,o=j_.test(n)}}else t&&e.removeAttribute("style");Ai in e&&(e[Ai]=o?s.display:"",e[wd]&&(s.display="none"))}const ru=/\s*!important$/;function mi(e,t,n){if(ee(n))n.forEach(s=>mi(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const s=H_(e,t);ru.test(n)?e.setProperty(gs(s),n.replace(ru,""),"important"):e[s]=n}}const iu=["Webkit","Moz","ms"],Uo={};function H_(e,t){const n=Uo[t];if(n)return n;let s=Gt(t);if(s!=="filter"&&s in e)return Uo[t]=s;s=Di(s);for(let i=0;iVo||(z_.then(()=>Vo=0),Vo=Date.now());function G_(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;Jt(J_(s,n.value),t,5,[s])};return n.value=e,n.attached=K_(),n}function J_(e,t){if(ee(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(s=>i=>!i._stopped&&s&&s(i))}else return t}const uu=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,X_=(e,t,n,s,i,o)=>{const a=i==="svg";t==="class"?$_(e,s,a):t==="style"?B_(e,n,s):Ii(t)?Sa(t)||q_(e,t,n,s,o):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Q_(e,t,s,a))?(U_(e,t,s),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&au(e,t,s,a,o,t!=="value")):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),au(e,t,s,a))};function Q_(e,t,n,s){if(s)return!!(t==="innerHTML"||t==="textContent"||t in e&&uu(t)&&fe(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const i=e.tagName;if(i==="IMG"||i==="VIDEO"||i==="CANVAS"||i==="SOURCE")return!1}return uu(t)&&qe(n)?!1:!!(t in e||e._isVueCE&&(/[A-Z]/.test(t)||!qe(n)))}const Ed=new WeakMap,Cd=new WeakMap,Oi=Symbol("_moveCb"),fu=Symbol("_enterCb"),Y_=e=>(delete e.props.mode,e),Z_=Y_({name:"TransitionGroup",props:Ge({},D_,{tag:String,moveClass:String}),setup(e,{slots:t}){const n=hd(),s=xg();let i,o;return Hf(()=>{if(!i.length)return;const a=e.moveClass||`${e.name||"v"}-move`;if(!rb(i[0].el,n.vnode.el,a))return;i.forEach(tb),i.forEach(nb);const c=i.filter(sb);vd(),c.forEach(f=>{const p=f.el,d=p.style;bn(p,a),d.transform=d.webkitTransform=d.transitionDuration="";const m=p[Oi]=b=>{b&&b.target!==p||(!b||/transform$/.test(b.propertyName))&&(p.removeEventListener("transitionend",m),p[Oi]=null,Dn(p,a))};p.addEventListener("transitionend",m)})}),()=>{const a=Ee(e),c=N_(a);let f=a.tag||tt;if(i=[],o)for(let p=0;p{c.split(/\s+/).forEach(f=>f&&s.classList.remove(f))}),n.split(/\s+/).forEach(c=>c&&s.classList.add(c)),s.style.display="none";const o=t.nodeType===1?t:t.parentNode;o.appendChild(s);const{hasTransform:a}=yd(s);return o.removeChild(s),a}const Un=e=>{const t=e.props["onUpdate:modelValue"]||!1;return ee(t)?n=>fi(t,n):t};function ib(e){e.target.composing=!0}function du(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const Bt=Symbol("_assign"),i0={created(e,{modifiers:{lazy:t,trim:n,number:s}},i){e[Bt]=Un(i);const o=s||i.props&&i.props.type==="number";wn(e,t?"change":"input",a=>{if(a.target.composing)return;let c=e.value;n&&(c=c.trim()),o&&(c=yi(c)),e[Bt](c)}),n&&wn(e,"change",()=>{e.value=e.value.trim()}),t||(wn(e,"compositionstart",ib),wn(e,"compositionend",du),wn(e,"change",du))},mounted(e,{value:t}){e.value=t??""},beforeUpdate(e,{value:t,oldValue:n,modifiers:{lazy:s,trim:i,number:o}},a){if(e[Bt]=Un(a),e.composing)return;const c=(o||e.type==="number")&&!/^0\d/.test(e.value)?yi(e.value):e.value,f=t??"";c!==f&&(document.activeElement===e&&e.type!=="range"&&(s&&t===n||i&&e.value.trim()===f)||(e.value=f))}},o0={deep:!0,created(e,t,n){e[Bt]=Un(n),wn(e,"change",()=>{const s=e._modelValue,i=Us(e),o=e.checked,a=e[Bt];if(ee(s)){const c=Oa(s,i),f=c!==-1;if(o&&!f)a(s.concat(i));else if(!o&&f){const p=[...s];p.splice(c,1),a(p)}}else if(Ws(s)){const c=new Set(s);o?c.add(i):c.delete(i),a(c)}else a(Sd(e,o))})},mounted:hu,beforeUpdate(e,t,n){e[Bt]=Un(n),hu(e,t,n)}};function hu(e,{value:t,oldValue:n},s){e._modelValue=t;let i;ee(t)?i=Oa(t,s.props.value)>-1:Ws(t)?i=t.has(s.props.value):i=ds(t,Sd(e,!0)),e.checked!==i&&(e.checked=i)}const a0={created(e,{value:t},n){e.checked=ds(t,n.props.value),e[Bt]=Un(n),wn(e,"change",()=>{e[Bt](Us(e))})},beforeUpdate(e,{value:t,oldValue:n},s){e[Bt]=Un(s),t!==n&&(e.checked=ds(t,s.props.value))}},l0={deep:!0,created(e,{value:t,modifiers:{number:n}},s){const i=Ws(t);wn(e,"change",()=>{const o=Array.prototype.filter.call(e.options,a=>a.selected).map(a=>n?yi(Us(a)):Us(a));e[Bt](e.multiple?i?new Set(o):o:o[0]),e._assigning=!0,Pr(()=>{e._assigning=!1})}),e[Bt]=Un(s)},mounted(e,{value:t,modifiers:{number:n}}){pu(e,t)},beforeUpdate(e,t,n){e[Bt]=Un(n)},updated(e,{value:t,modifiers:{number:n}}){e._assigning||pu(e,t)}};function pu(e,t,n){const s=e.multiple,i=ee(t);if(!(s&&!i&&!Ws(t))){for(let o=0,a=e.options.length;oString(d)===String(f)):c.selected=Oa(t,f)>-1}else c.selected=t.has(f);else if(ds(Us(c),t)){e.selectedIndex!==o&&(e.selectedIndex=o);return}}!s&&e.selectedIndex!==-1&&(e.selectedIndex=-1)}}function Us(e){return"_value"in e?e._value:e.value}function Sd(e,t){const n=t?"_trueValue":"_falseValue";return n in e?e[n]:t}const ob=["ctrl","shift","alt","meta"],ab={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>ob.some(n=>e[`${n}Key`]&&!t.includes(n))},lb=(e,t)=>{const n=e._withMods||(e._withMods={}),s=t.join(".");return n[s]||(n[s]=(i,...o)=>{for(let a=0;a{const t=ub().createApp(...e),{mount:n}=t;return t.mount=s=>{const i=db(s);if(!i)return;const o=t._component;!fe(o)&&!o.render&&!o.template&&(o.template=i.innerHTML),i.nodeType===1&&(i.textContent="");const a=n(i,!1,fb(i));return i instanceof Element&&(i.removeAttribute("v-cloak"),i.setAttribute("data-v-app","")),a},t};function fb(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function db(e){return qe(e)?document.querySelector(e):e}var hb=!1;/*! + * pinia v2.2.2 + * (c) 2024 Eduardo San Martin Morote + * @license MIT + */let Ad;const qi=e=>Ad=e,Od=Symbol();function ua(e){return e&&typeof e=="object"&&Object.prototype.toString.call(e)==="[object Object]"&&typeof e.toJSON!="function"}var hr;(function(e){e.direct="direct",e.patchObject="patch object",e.patchFunction="patch function"})(hr||(hr={}));function pb(){const e=df(!0),t=e.run(()=>ja({}));let n=[],s=[];const i=$a({install(o){qi(i),i._a=o,o.provide(Od,i),o.config.globalProperties.$pinia=i,s.forEach(a=>n.push(a)),s=[]},use(o){return!this._a&&!hb?s.push(o):n.push(o),this},_p:n,_a:null,_e:e,_s:new Map,state:t});return i}const xd=()=>{};function gu(e,t,n,s=xd){e.push(t);const i=()=>{const o=e.indexOf(t);o>-1&&(e.splice(o,1),s())};return!n&&hf()&&Wm(i),i}function Ds(e,...t){e.slice().forEach(n=>{n(...t)})}const mb=e=>e(),_u=Symbol(),qo=Symbol();function fa(e,t){e instanceof Map&&t instanceof Map?t.forEach((n,s)=>e.set(s,n)):e instanceof Set&&t instanceof Set&&t.forEach(e.add,e);for(const n in t){if(!t.hasOwnProperty(n))continue;const s=t[n],i=e[n];ua(i)&&ua(s)&&e.hasOwnProperty(n)&&!ze(s)&&!Fn(s)?e[n]=fa(i,s):e[n]=s}return e}const gb=Symbol();function _b(e){return!ua(e)||!e.hasOwnProperty(gb)}const{assign:Nn}=Object;function bb(e){return!!(ze(e)&&e.effect)}function yb(e,t,n,s){const{state:i,actions:o,getters:a}=t,c=n.state.value[e];let f;function p(){c||(n.state.value[e]=i?i():{});const d=gg(n.state.value[e]);return Nn(d,o,Object.keys(a||{}).reduce((m,b)=>(m[b]=$a(Ft(()=>{qi(n);const w=n._s.get(e);return a[b].call(w,w)})),m),{}))}return f=Rd(e,p,t,n,s,!0),f}function Rd(e,t,n={},s,i,o){let a;const c=Nn({actions:{}},n),f={deep:!0};let p,d,m=[],b=[],w;const C=s.state.value[e];!o&&!C&&(s.state.value[e]={}),ja({});let P;function R(te){let q;p=d=!1,typeof te=="function"?(te(s.state.value[e]),q={type:hr.patchFunction,storeId:e,events:w}):(fa(s.state.value[e],te),q={type:hr.patchObject,payload:te,storeId:e,events:w});const oe=P=Symbol();Pr().then(()=>{P===oe&&(p=!0)}),d=!0,Ds(m,q,s.state.value[e])}const $=o?function(){const{state:q}=n,oe=q?q():{};this.$patch(ve=>{Nn(ve,oe)})}:xd;function N(){a.stop(),m=[],b=[],s._s.delete(e)}const B=(te,q="")=>{if(_u in te)return te[qo]=q,te;const oe=function(){qi(s);const ve=Array.from(arguments),G=[],be=[];function He(ae){G.push(ae)}function st(ae){be.push(ae)}Ds(b,{args:ve,name:oe[qo],store:Y,after:He,onError:st});let Oe;try{Oe=te.apply(this&&this.$id===e?this:Y,ve)}catch(ae){throw Ds(be,ae),ae}return Oe instanceof Promise?Oe.then(ae=>(Ds(G,ae),ae)).catch(ae=>(Ds(be,ae),Promise.reject(ae))):(Ds(G,Oe),Oe)};return oe[_u]=!0,oe[qo]=q,oe},H={_p:s,$id:e,$onAction:gu.bind(null,b),$patch:R,$reset:$,$subscribe(te,q={}){const oe=gu(m,te,q.detached,()=>ve()),ve=a.run(()=>fr(()=>s.state.value[e],G=>{(q.flush==="sync"?d:p)&&te({storeId:e,type:hr.direct,events:w},G)},Nn({},f,q)));return oe},$dispose:N},Y=xr(H);s._s.set(e,Y);const le=(s._a&&s._a.runWithContext||mb)(()=>s._e.run(()=>(a=df()).run(()=>t({action:B}))));for(const te in le){const q=le[te];if(ze(q)&&!bb(q)||Fn(q))o||(C&&_b(q)&&(ze(q)?q.value=C[te]:fa(q,C[te])),s.state.value[e][te]=q);else if(typeof q=="function"){const oe=B(q,te);le[te]=oe,c.actions[te]=q}}return Nn(Y,le),Nn(Ee(Y),le),Object.defineProperty(Y,"$state",{get:()=>s.state.value[e],set:te=>{R(q=>{Nn(q,te)})}}),s._p.forEach(te=>{Nn(Y,a.run(()=>te({store:Y,app:s._a,pinia:s,options:c})))}),C&&o&&n.hydrate&&n.hydrate(Y.$state,C),p=!0,d=!0,Y}function vb(e,t,n){let s,i;const o=typeof t=="function";s=e,i=o?n:t;function a(c,f){const p=Xg();return c=c||(p?xt(Od,null):null),c&&qi(c),c=Ad,c._s.has(s)||(o?Rd(s,t,i,c):yb(s,i,c)),c._s.get(s)}return a.$id=s,a}/*! + * vue-router v4.4.3 + * (c) 2024 Eduardo San Martin Morote + * @license MIT + */const Ms=typeof document<"u";function wb(e){return e.__esModule||e[Symbol.toStringTag]==="Module"}const Pe=Object.assign;function Wo(e,t){const n={};for(const s in t){const i=t[s];n[s]=Xt(i)?i.map(e):e(i)}return n}const pr=()=>{},Xt=Array.isArray,Pd=/#/g,Eb=/&/g,Cb=/\//g,Sb=/=/g,Tb=/\?/g,Id=/\+/g,Ab=/%5B/g,Ob=/%5D/g,Ld=/%5E/g,xb=/%60/g,Dd=/%7B/g,Rb=/%7C/g,Nd=/%7D/g,Pb=/%20/g;function za(e){return encodeURI(""+e).replace(Rb,"|").replace(Ab,"[").replace(Ob,"]")}function Ib(e){return za(e).replace(Dd,"{").replace(Nd,"}").replace(Ld,"^")}function da(e){return za(e).replace(Id,"%2B").replace(Pb,"+").replace(Pd,"%23").replace(Eb,"%26").replace(xb,"`").replace(Dd,"{").replace(Nd,"}").replace(Ld,"^")}function Lb(e){return da(e).replace(Sb,"%3D")}function Db(e){return za(e).replace(Pd,"%23").replace(Tb,"%3F")}function Nb(e){return e==null?"":Db(e).replace(Cb,"%2F")}function Er(e){try{return decodeURIComponent(""+e)}catch{}return""+e}const kb=/\/$/,Mb=e=>e.replace(kb,"");function zo(e,t,n="/"){let s,i={},o="",a="";const c=t.indexOf("#");let f=t.indexOf("?");return c=0&&(f=-1),f>-1&&(s=t.slice(0,f),o=t.slice(f+1,c>-1?c:t.length),i=e(o)),c>-1&&(s=s||t.slice(0,c),a=t.slice(c,t.length)),s=Bb(s??t,n),{fullPath:s+(o&&"?")+o+a,path:s,query:i,hash:Er(a)}}function $b(e,t){const n=t.query?e(t.query):"";return t.path+(n&&"?")+n+(t.hash||"")}function bu(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function Fb(e,t,n){const s=t.matched.length-1,i=n.matched.length-1;return s>-1&&s===i&&Vs(t.matched[s],n.matched[i])&&kd(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function Vs(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function kd(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(const n in e)if(!jb(e[n],t[n]))return!1;return!0}function jb(e,t){return Xt(e)?yu(e,t):Xt(t)?yu(t,e):e===t}function yu(e,t){return Xt(t)?e.length===t.length&&e.every((n,s)=>n===t[s]):e.length===1&&e[0]===t}function Bb(e,t){if(e.startsWith("/"))return e;if(!e)return t;const n=t.split("/"),s=e.split("/"),i=s[s.length-1];(i===".."||i===".")&&s.push("");let o=n.length-1,a,c;for(a=0;a1&&o--;else break;return n.slice(0,o).join("/")+"/"+s.slice(a).join("/")}const In={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0};var Cr;(function(e){e.pop="pop",e.push="push"})(Cr||(Cr={}));var mr;(function(e){e.back="back",e.forward="forward",e.unknown=""})(mr||(mr={}));function Hb(e){if(!e)if(Ms){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),Mb(e)}const Ub=/^[^#]+#/;function Vb(e,t){return e.replace(Ub,"#")+t}function qb(e,t){const n=document.documentElement.getBoundingClientRect(),s=e.getBoundingClientRect();return{behavior:t.behavior,left:s.left-n.left-(t.left||0),top:s.top-n.top-(t.top||0)}}const Wi=()=>({left:window.scrollX,top:window.scrollY});function Wb(e){let t;if("el"in e){const n=e.el,s=typeof n=="string"&&n.startsWith("#"),i=typeof n=="string"?s?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!i)return;t=qb(i,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.scrollX,t.top!=null?t.top:window.scrollY)}function vu(e,t){return(history.state?history.state.position-t:-1)+e}const ha=new Map;function zb(e,t){ha.set(e,t)}function Kb(e){const t=ha.get(e);return ha.delete(e),t}let Gb=()=>location.protocol+"//"+location.host;function Md(e,t){const{pathname:n,search:s,hash:i}=t,o=e.indexOf("#");if(o>-1){let c=i.includes(e.slice(o))?e.slice(o).length:1,f=i.slice(c);return f[0]!=="/"&&(f="/"+f),bu(f,"")}return bu(n,e)+s+i}function Jb(e,t,n,s){let i=[],o=[],a=null;const c=({state:b})=>{const w=Md(e,location),C=n.value,P=t.value;let R=0;if(b){if(n.value=w,t.value=b,a&&a===C){a=null;return}R=P?b.position-P.position:0}else s(w);i.forEach($=>{$(n.value,C,{delta:R,type:Cr.pop,direction:R?R>0?mr.forward:mr.back:mr.unknown})})};function f(){a=n.value}function p(b){i.push(b);const w=()=>{const C=i.indexOf(b);C>-1&&i.splice(C,1)};return o.push(w),w}function d(){const{history:b}=window;b.state&&b.replaceState(Pe({},b.state,{scroll:Wi()}),"")}function m(){for(const b of o)b();o=[],window.removeEventListener("popstate",c),window.removeEventListener("beforeunload",d)}return window.addEventListener("popstate",c),window.addEventListener("beforeunload",d,{passive:!0}),{pauseListeners:f,listen:p,destroy:m}}function wu(e,t,n,s=!1,i=!1){return{back:e,current:t,forward:n,replaced:s,position:window.history.length,scroll:i?Wi():null}}function Xb(e){const{history:t,location:n}=window,s={value:Md(e,n)},i={value:t.state};i.value||o(s.value,{back:null,current:s.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function o(f,p,d){const m=e.indexOf("#"),b=m>-1?(n.host&&document.querySelector("base")?e:e.slice(m))+f:Gb()+e+f;try{t[d?"replaceState":"pushState"](p,"",b),i.value=p}catch(w){console.error(w),n[d?"replace":"assign"](b)}}function a(f,p){const d=Pe({},t.state,wu(i.value.back,f,i.value.forward,!0),p,{position:i.value.position});o(f,d,!0),s.value=f}function c(f,p){const d=Pe({},i.value,t.state,{forward:f,scroll:Wi()});o(d.current,d,!0);const m=Pe({},wu(s.value,f,null),{position:d.position+1},p);o(f,m,!1),s.value=f}return{location:s,state:i,push:c,replace:a}}function Qb(e){e=Hb(e);const t=Xb(e),n=Jb(e,t.state,t.location,t.replace);function s(o,a=!0){a||n.pauseListeners(),history.go(o)}const i=Pe({location:"",base:e,go:s,createHref:Vb.bind(null,e)},t,n);return Object.defineProperty(i,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(i,"state",{enumerable:!0,get:()=>t.state.value}),i}function Yb(e){return typeof e=="string"||e&&typeof e=="object"}function $d(e){return typeof e=="string"||typeof e=="symbol"}const Fd=Symbol("");var Eu;(function(e){e[e.aborted=4]="aborted",e[e.cancelled=8]="cancelled",e[e.duplicated=16]="duplicated"})(Eu||(Eu={}));function qs(e,t){return Pe(new Error,{type:e,[Fd]:!0},t)}function _n(e,t){return e instanceof Error&&Fd in e&&(t==null||!!(e.type&t))}const Cu="[^/]+?",Zb={sensitive:!1,strict:!1,start:!0,end:!0},ey=/[.+*?^${}()[\]/\\]/g;function ty(e,t){const n=Pe({},Zb,t),s=[];let i=n.start?"^":"";const o=[];for(const p of e){const d=p.length?[]:[90];n.strict&&!p.length&&(i+="/");for(let m=0;mt.length?t.length===1&&t[0]===80?1:-1:0}function jd(e,t){let n=0;const s=e.score,i=t.score;for(;n0&&t[t.length-1]<0}const sy={type:0,value:""},ry=/[a-zA-Z0-9_]/;function iy(e){if(!e)return[[]];if(e==="/")return[[sy]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(w){throw new Error(`ERR (${n})/"${p}": ${w}`)}let n=0,s=n;const i=[];let o;function a(){o&&i.push(o),o=[]}let c=0,f,p="",d="";function m(){p&&(n===0?o.push({type:0,value:p}):n===1||n===2||n===3?(o.length>1&&(f==="*"||f==="+")&&t(`A repeatable param (${p}) must be alone in its segment. eg: '/:ids+.`),o.push({type:1,value:p,regexp:d,repeatable:f==="*"||f==="+",optional:f==="*"||f==="?"})):t("Invalid state to consume buffer"),p="")}function b(){p+=f}for(;c{a(B)}:pr}function a(m){if($d(m)){const b=s.get(m);b&&(s.delete(m),n.splice(n.indexOf(b),1),b.children.forEach(a),b.alias.forEach(a))}else{const b=n.indexOf(m);b>-1&&(n.splice(b,1),m.record.name&&s.delete(m.record.name),m.children.forEach(a),m.alias.forEach(a))}}function c(){return n}function f(m){const b=fy(m,n);n.splice(b,0,m),m.record.name&&!Au(m)&&s.set(m.record.name,m)}function p(m,b){let w,C={},P,R;if("name"in m&&m.name){if(w=s.get(m.name),!w)throw qs(1,{location:m});R=w.record.name,C=Pe(Tu(b.params,w.keys.filter(B=>!B.optional).concat(w.parent?w.parent.keys.filter(B=>B.optional):[]).map(B=>B.name)),m.params&&Tu(m.params,w.keys.map(B=>B.name))),P=w.stringify(C)}else if(m.path!=null)P=m.path,w=n.find(B=>B.re.test(P)),w&&(C=w.parse(P),R=w.record.name);else{if(w=b.name?s.get(b.name):n.find(B=>B.re.test(b.path)),!w)throw qs(1,{location:m,currentLocation:b});R=w.record.name,C=Pe({},b.params,m.params),P=w.stringify(C)}const $=[];let N=w;for(;N;)$.unshift(N.record),N=N.parent;return{name:R,path:P,params:C,matched:$,meta:uy($)}}e.forEach(m=>o(m));function d(){n.length=0,s.clear()}return{addRoute:o,resolve:p,removeRoute:a,clearRoutes:d,getRoutes:c,getRecordMatcher:i}}function Tu(e,t){const n={};for(const s of t)s in e&&(n[s]=e[s]);return n}function ly(e){return{path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:void 0,beforeEnter:e.beforeEnter,props:cy(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}}}function cy(e){const t={},n=e.props||!1;if("component"in e)t.default=n;else for(const s in e.components)t[s]=typeof n=="object"?n[s]:n;return t}function Au(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function uy(e){return e.reduce((t,n)=>Pe(t,n.meta),{})}function Ou(e,t){const n={};for(const s in e)n[s]=s in t?t[s]:e[s];return n}function fy(e,t){let n=0,s=t.length;for(;n!==s;){const o=n+s>>1;jd(e,t[o])<0?s=o:n=o+1}const i=dy(e);return i&&(s=t.lastIndexOf(i,s-1)),s}function dy(e){let t=e;for(;t=t.parent;)if(Bd(t)&&jd(e,t)===0)return t}function Bd({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function hy(e){const t={};if(e===""||e==="?")return t;const s=(e[0]==="?"?e.slice(1):e).split("&");for(let i=0;io&&da(o)):[s&&da(s)]).forEach(o=>{o!==void 0&&(t+=(t.length?"&":"")+n,o!=null&&(t+="="+o))})}return t}function py(e){const t={};for(const n in e){const s=e[n];s!==void 0&&(t[n]=Xt(s)?s.map(i=>i==null?null:""+i):s==null?s:""+s)}return t}const my=Symbol(""),Ru=Symbol(""),zi=Symbol(""),Ka=Symbol(""),pa=Symbol("");function rr(){let e=[];function t(s){return e.push(s),()=>{const i=e.indexOf(s);i>-1&&e.splice(i,1)}}function n(){e=[]}return{add:t,list:()=>e.slice(),reset:n}}function $n(e,t,n,s,i,o=a=>a()){const a=s&&(s.enterCallbacks[i]=s.enterCallbacks[i]||[]);return()=>new Promise((c,f)=>{const p=b=>{b===!1?f(qs(4,{from:n,to:t})):b instanceof Error?f(b):Yb(b)?f(qs(2,{from:t,to:b})):(a&&s.enterCallbacks[i]===a&&typeof b=="function"&&a.push(b),c())},d=o(()=>e.call(s&&s.instances[i],t,n,p));let m=Promise.resolve(d);e.length<3&&(m=m.then(p)),m.catch(b=>f(b))})}function Ko(e,t,n,s,i=o=>o()){const o=[];for(const a of e)for(const c in a.components){let f=a.components[c];if(!(t!=="beforeRouteEnter"&&!a.instances[c]))if(gy(f)){const d=(f.__vccOpts||f)[t];d&&o.push($n(d,n,s,a,c,i))}else{let p=f();o.push(()=>p.then(d=>{if(!d)return Promise.reject(new Error(`Couldn't resolve component "${c}" at "${a.path}"`));const m=wb(d)?d.default:d;a.components[c]=m;const w=(m.__vccOpts||m)[t];return w&&$n(w,n,s,a,c,i)()}))}}return o}function gy(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function Pu(e){const t=xt(zi),n=xt(Ka),s=Ft(()=>{const f=jn(e.to);return t.resolve(f)}),i=Ft(()=>{const{matched:f}=s.value,{length:p}=f,d=f[p-1],m=n.matched;if(!d||!m.length)return-1;const b=m.findIndex(Vs.bind(null,d));if(b>-1)return b;const w=Iu(f[p-2]);return p>1&&Iu(d)===w&&m[m.length-1].path!==w?m.findIndex(Vs.bind(null,f[p-2])):b}),o=Ft(()=>i.value>-1&&vy(n.params,s.value.params)),a=Ft(()=>i.value>-1&&i.value===n.matched.length-1&&kd(n.params,s.value.params));function c(f={}){return yy(f)?t[jn(e.replace)?"replace":"push"](jn(e.to)).catch(pr):Promise.resolve()}return{route:s,href:Ft(()=>s.value.href),isActive:o,isExactActive:a,navigate:c}}const _y=dn({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"}},useLink:Pu,setup(e,{slots:t}){const n=xr(Pu(e)),{options:s}=xt(zi),i=Ft(()=>({[Lu(e.activeClass,s.linkActiveClass,"router-link-active")]:n.isActive,[Lu(e.exactActiveClass,s.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive}));return()=>{const o=t.default&&t.default(n);return e.custom?o:gd("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:i.value},o)}}}),by=_y;function yy(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function vy(e,t){for(const n in t){const s=t[n],i=e[n];if(typeof s=="string"){if(s!==i)return!1}else if(!Xt(i)||i.length!==s.length||s.some((o,a)=>o!==i[a]))return!1}return!0}function Iu(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const Lu=(e,t,n)=>e??t??n,wy=dn({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){const s=xt(pa),i=Ft(()=>e.route||s.value),o=xt(Ru,0),a=Ft(()=>{let p=jn(o);const{matched:d}=i.value;let m;for(;(m=d[p])&&!m.components;)p++;return p}),c=Ft(()=>i.value.matched[a.value]);di(Ru,Ft(()=>a.value+1)),di(my,c),di(pa,i);const f=ja();return fr(()=>[f.value,c.value,e.name],([p,d,m],[b,w,C])=>{d&&(d.instances[m]=p,w&&w!==d&&p&&p===b&&(d.leaveGuards.size||(d.leaveGuards=w.leaveGuards),d.updateGuards.size||(d.updateGuards=w.updateGuards))),p&&d&&(!w||!Vs(d,w)||!b)&&(d.enterCallbacks[m]||[]).forEach(P=>P(p))},{flush:"post"}),()=>{const p=i.value,d=e.name,m=c.value,b=m&&m.components[d];if(!b)return Du(n.default,{Component:b,route:p});const w=m.props[d],C=w?w===!0?p.params:typeof w=="function"?w(p):w:null,R=gd(b,Pe({},C,t,{onVnodeUnmounted:$=>{$.component.isUnmounted&&(m.instances[d]=null)},ref:f}));return Du(n.default,{Component:R,route:p})||R}}});function Du(e,t){if(!e)return null;const n=e(t);return n.length===1?n[0]:n}const Hd=wy;function Ey(e){const t=ay(e.routes,e),n=e.parseQuery||hy,s=e.stringifyQuery||xu,i=e.history,o=rr(),a=rr(),c=rr(),f=hg(In);let p=In;Ms&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const d=Wo.bind(null,x=>""+x),m=Wo.bind(null,Nb),b=Wo.bind(null,Er);function w(x,A){let V,Z;return $d(x)?(V=t.getRecordMatcher(x),Z=A):Z=x,t.addRoute(Z,V)}function C(x){const A=t.getRecordMatcher(x);A&&t.removeRoute(A)}function P(){return t.getRoutes().map(x=>x.record)}function R(x){return!!t.getRecordMatcher(x)}function $(x,A){if(A=Pe({},A||f.value),typeof x=="string"){const _=zo(n,x,A.path),E=t.resolve({path:_.path},A),D=i.createHref(_.fullPath);return Pe(_,E,{params:b(E.params),hash:Er(_.hash),redirectedFrom:void 0,href:D})}let V;if(x.path!=null)V=Pe({},x,{path:zo(n,x.path,A.path).path});else{const _=Pe({},x.params);for(const E in _)_[E]==null&&delete _[E];V=Pe({},x,{params:m(_)}),A.params=m(A.params)}const Z=t.resolve(V,A),Te=x.hash||"";Z.params=d(b(Z.params));const je=$b(s,Pe({},x,{hash:Ib(Te),path:Z.path})),g=i.createHref(je);return Pe({fullPath:je,hash:Te,query:s===xu?py(x.query):x.query||{}},Z,{redirectedFrom:void 0,href:g})}function N(x){return typeof x=="string"?zo(n,x,f.value.path):Pe({},x)}function B(x,A){if(p!==x)return qs(8,{from:A,to:x})}function H(x){return le(x)}function Y(x){return H(Pe(N(x),{replace:!0}))}function ge(x){const A=x.matched[x.matched.length-1];if(A&&A.redirect){const{redirect:V}=A;let Z=typeof V=="function"?V(x):V;return typeof Z=="string"&&(Z=Z.includes("?")||Z.includes("#")?Z=N(Z):{path:Z},Z.params={}),Pe({query:x.query,hash:x.hash,params:Z.path!=null?{}:x.params},Z)}}function le(x,A){const V=p=$(x),Z=f.value,Te=x.state,je=x.force,g=x.replace===!0,_=ge(V);if(_)return le(Pe(N(_),{state:typeof _=="object"?Pe({},Te,_.state):Te,force:je,replace:g}),A||V);const E=V;E.redirectedFrom=A;let D;return!je&&Fb(s,Z,V)&&(D=qs(16,{to:E,from:Z}),_t(Z,Z,!0,!1)),(D?Promise.resolve(D):oe(E,Z)).catch(O=>_n(O)?_n(O,2)?O:I(O):Se(O,E,Z)).then(O=>{if(O){if(_n(O,2))return le(Pe({replace:g},N(O.to),{state:typeof O.to=="object"?Pe({},Te,O.to.state):Te,force:je}),A||E)}else O=G(E,Z,!0,g,Te);return ve(E,Z,O),O})}function te(x,A){const V=B(x,A);return V?Promise.reject(V):Promise.resolve()}function q(x){const A=rt.values().next().value;return A&&typeof A.runWithContext=="function"?A.runWithContext(x):x()}function oe(x,A){let V;const[Z,Te,je]=Cy(x,A);V=Ko(Z.reverse(),"beforeRouteLeave",x,A);for(const _ of Z)_.leaveGuards.forEach(E=>{V.push($n(E,x,A))});const g=te.bind(null,x,A);return V.push(g),Be(V).then(()=>{V=[];for(const _ of o.list())V.push($n(_,x,A));return V.push(g),Be(V)}).then(()=>{V=Ko(Te,"beforeRouteUpdate",x,A);for(const _ of Te)_.updateGuards.forEach(E=>{V.push($n(E,x,A))});return V.push(g),Be(V)}).then(()=>{V=[];for(const _ of je)if(_.beforeEnter)if(Xt(_.beforeEnter))for(const E of _.beforeEnter)V.push($n(E,x,A));else V.push($n(_.beforeEnter,x,A));return V.push(g),Be(V)}).then(()=>(x.matched.forEach(_=>_.enterCallbacks={}),V=Ko(je,"beforeRouteEnter",x,A,q),V.push(g),Be(V))).then(()=>{V=[];for(const _ of a.list())V.push($n(_,x,A));return V.push(g),Be(V)}).catch(_=>_n(_,8)?_:Promise.reject(_))}function ve(x,A,V){c.list().forEach(Z=>q(()=>Z(x,A,V)))}function G(x,A,V,Z,Te){const je=B(x,A);if(je)return je;const g=A===In,_=Ms?history.state:{};V&&(Z||g?i.replace(x.fullPath,Pe({scroll:g&&_&&_.scroll},Te)):i.push(x.fullPath,Te)),f.value=x,_t(x,A,V,g),I()}let be;function He(){be||(be=i.listen((x,A,V)=>{if(!Zt.listening)return;const Z=$(x),Te=ge(Z);if(Te){le(Pe(Te,{replace:!0}),Z).catch(pr);return}p=Z;const je=f.value;Ms&&zb(vu(je.fullPath,V.delta),Wi()),oe(Z,je).catch(g=>_n(g,12)?g:_n(g,2)?(le(g.to,Z).then(_=>{_n(_,20)&&!V.delta&&V.type===Cr.pop&&i.go(-1,!1)}).catch(pr),Promise.reject()):(V.delta&&i.go(-V.delta,!1),Se(g,Z,je))).then(g=>{g=g||G(Z,je,!1),g&&(V.delta&&!_n(g,8)?i.go(-V.delta,!1):V.type===Cr.pop&&_n(g,20)&&i.go(-1,!1)),ve(Z,je,g)}).catch(pr)}))}let st=rr(),Oe=rr(),ae;function Se(x,A,V){I(x);const Z=Oe.list();return Z.length?Z.forEach(Te=>Te(x,A,V)):console.error(x),Promise.reject(x)}function Pt(){return ae&&f.value!==In?Promise.resolve():new Promise((x,A)=>{st.add([x,A])})}function I(x){return ae||(ae=!x,He(),st.list().forEach(([A,V])=>x?V(x):A()),st.reset()),x}function _t(x,A,V,Z){const{scrollBehavior:Te}=e;if(!Ms||!Te)return Promise.resolve();const je=!V&&Kb(vu(x.fullPath,0))||(Z||!V)&&history.state&&history.state.scroll||null;return Pr().then(()=>Te(x,A,je)).then(g=>g&&Wb(g)).catch(g=>Se(g,x,A))}const et=x=>i.go(x);let Yt;const rt=new Set,Zt={currentRoute:f,listening:!0,addRoute:w,removeRoute:C,clearRoutes:t.clearRoutes,hasRoute:R,getRoutes:P,resolve:$,options:e,push:H,replace:Y,go:et,back:()=>et(-1),forward:()=>et(1),beforeEach:o.add,beforeResolve:a.add,afterEach:c.add,onError:Oe.add,isReady:Pt,install(x){const A=this;x.component("RouterLink",by),x.component("RouterView",Hd),x.config.globalProperties.$router=A,Object.defineProperty(x.config.globalProperties,"$route",{enumerable:!0,get:()=>jn(f)}),Ms&&!Yt&&f.value===In&&(Yt=!0,H(i.location).catch(Te=>{}));const V={};for(const Te in In)Object.defineProperty(V,Te,{get:()=>f.value[Te],enumerable:!0});x.provide(zi,A),x.provide(Ka,Of(V)),x.provide(pa,f);const Z=x.unmount;rt.add(x),x.unmount=function(){rt.delete(x),rt.size<1&&(p=In,be&&be(),be=null,f.value=In,Yt=!1,ae=!1),Z()}}};function Be(x){return x.reduce((A,V)=>A.then(()=>q(V)),Promise.resolve())}return Zt}function Cy(e,t){const n=[],s=[],i=[],o=Math.max(t.matched.length,e.matched.length);for(let a=0;aVs(p,c))?s.push(c):n.push(c));const f=e.matched[a];f&&(t.matched.find(p=>Vs(p,f))||i.push(f))}return[n,s,i]}function c0(){return xt(zi)}function u0(e){return xt(Ka)}const Sy=dn({__name:"App",setup(e){return(t,n)=>(Ue(),jt(jn(Hd)))}});function Ud(e,t){return function(){return e.apply(t,arguments)}}const{toString:Ty}=Object.prototype,{getPrototypeOf:Ga}=Object,Ki=(e=>t=>{const n=Ty.call(t);return e[n]||(e[n]=n.slice(8,-1).toLowerCase())})(Object.create(null)),Qt=e=>(e=e.toLowerCase(),t=>Ki(t)===e),Gi=e=>t=>typeof t===e,{isArray:zs}=Array,Sr=Gi("undefined");function Ay(e){return e!==null&&!Sr(e)&&e.constructor!==null&&!Sr(e.constructor)&&Rt(e.constructor.isBuffer)&&e.constructor.isBuffer(e)}const Vd=Qt("ArrayBuffer");function Oy(e){let t;return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?t=ArrayBuffer.isView(e):t=e&&e.buffer&&Vd(e.buffer),t}const xy=Gi("string"),Rt=Gi("function"),qd=Gi("number"),Ji=e=>e!==null&&typeof e=="object",Ry=e=>e===!0||e===!1,gi=e=>{if(Ki(e)!=="object")return!1;const t=Ga(e);return(t===null||t===Object.prototype||Object.getPrototypeOf(t)===null)&&!(Symbol.toStringTag in e)&&!(Symbol.iterator in e)},Py=Qt("Date"),Iy=Qt("File"),Ly=Qt("Blob"),Dy=Qt("FileList"),Ny=e=>Ji(e)&&Rt(e.pipe),ky=e=>{let t;return e&&(typeof FormData=="function"&&e instanceof FormData||Rt(e.append)&&((t=Ki(e))==="formdata"||t==="object"&&Rt(e.toString)&&e.toString()==="[object FormData]"))},My=Qt("URLSearchParams"),[$y,Fy,jy,By]=["ReadableStream","Request","Response","Headers"].map(Qt),Hy=e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");function Dr(e,t,{allOwnKeys:n=!1}={}){if(e===null||typeof e>"u")return;let s,i;if(typeof e!="object"&&(e=[e]),zs(e))for(s=0,i=e.length;s0;)if(i=n[s],t===i.toLowerCase())return i;return null}const as=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:global,zd=e=>!Sr(e)&&e!==as;function ma(){const{caseless:e}=zd(this)&&this||{},t={},n=(s,i)=>{const o=e&&Wd(t,i)||i;gi(t[o])&&gi(s)?t[o]=ma(t[o],s):gi(s)?t[o]=ma({},s):zs(s)?t[o]=s.slice():t[o]=s};for(let s=0,i=arguments.length;s(Dr(t,(i,o)=>{n&&Rt(i)?e[o]=Ud(i,n):e[o]=i},{allOwnKeys:s}),e),Vy=e=>(e.charCodeAt(0)===65279&&(e=e.slice(1)),e),qy=(e,t,n,s)=>{e.prototype=Object.create(t.prototype,s),e.prototype.constructor=e,Object.defineProperty(e,"super",{value:t.prototype}),n&&Object.assign(e.prototype,n)},Wy=(e,t,n,s)=>{let i,o,a;const c={};if(t=t||{},e==null)return t;do{for(i=Object.getOwnPropertyNames(e),o=i.length;o-- >0;)a=i[o],(!s||s(a,e,t))&&!c[a]&&(t[a]=e[a],c[a]=!0);e=n!==!1&&Ga(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},zy=(e,t,n)=>{e=String(e),(n===void 0||n>e.length)&&(n=e.length),n-=t.length;const s=e.indexOf(t,n);return s!==-1&&s===n},Ky=e=>{if(!e)return null;if(zs(e))return e;let t=e.length;if(!qd(t))return null;const n=new Array(t);for(;t-- >0;)n[t]=e[t];return n},Gy=(e=>t=>e&&t instanceof e)(typeof Uint8Array<"u"&&Ga(Uint8Array)),Jy=(e,t)=>{const s=(e&&e[Symbol.iterator]).call(e);let i;for(;(i=s.next())&&!i.done;){const o=i.value;t.call(e,o[0],o[1])}},Xy=(e,t)=>{let n;const s=[];for(;(n=e.exec(t))!==null;)s.push(n);return s},Qy=Qt("HTMLFormElement"),Yy=e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(n,s,i){return s.toUpperCase()+i}),Nu=(({hasOwnProperty:e})=>(t,n)=>e.call(t,n))(Object.prototype),Zy=Qt("RegExp"),Kd=(e,t)=>{const n=Object.getOwnPropertyDescriptors(e),s={};Dr(n,(i,o)=>{let a;(a=t(i,o,e))!==!1&&(s[o]=a||i)}),Object.defineProperties(e,s)},ev=e=>{Kd(e,(t,n)=>{if(Rt(e)&&["arguments","caller","callee"].indexOf(n)!==-1)return!1;const s=e[n];if(Rt(s)){if(t.enumerable=!1,"writable"in t){t.writable=!1;return}t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+n+"'")})}})},tv=(e,t)=>{const n={},s=i=>{i.forEach(o=>{n[o]=!0})};return zs(e)?s(e):s(String(e).split(t)),n},nv=()=>{},sv=(e,t)=>e!=null&&Number.isFinite(e=+e)?e:t,Go="abcdefghijklmnopqrstuvwxyz",ku="0123456789",Gd={DIGIT:ku,ALPHA:Go,ALPHA_DIGIT:Go+Go.toUpperCase()+ku},rv=(e=16,t=Gd.ALPHA_DIGIT)=>{let n="";const{length:s}=t;for(;e--;)n+=t[Math.random()*s|0];return n};function iv(e){return!!(e&&Rt(e.append)&&e[Symbol.toStringTag]==="FormData"&&e[Symbol.iterator])}const ov=e=>{const t=new Array(10),n=(s,i)=>{if(Ji(s)){if(t.indexOf(s)>=0)return;if(!("toJSON"in s)){t[i]=s;const o=zs(s)?[]:{};return Dr(s,(a,c)=>{const f=n(a,i+1);!Sr(f)&&(o[c]=f)}),t[i]=void 0,o}}return s};return n(e,0)},av=Qt("AsyncFunction"),lv=e=>e&&(Ji(e)||Rt(e))&&Rt(e.then)&&Rt(e.catch),Jd=((e,t)=>e?setImmediate:t?((n,s)=>(as.addEventListener("message",({source:i,data:o})=>{i===as&&o===n&&s.length&&s.shift()()},!1),i=>{s.push(i),as.postMessage(n,"*")}))(`axios@${Math.random()}`,[]):n=>setTimeout(n))(typeof setImmediate=="function",Rt(as.postMessage)),cv=typeof queueMicrotask<"u"?queueMicrotask.bind(as):typeof process<"u"&&process.nextTick||Jd,T={isArray:zs,isArrayBuffer:Vd,isBuffer:Ay,isFormData:ky,isArrayBufferView:Oy,isString:xy,isNumber:qd,isBoolean:Ry,isObject:Ji,isPlainObject:gi,isReadableStream:$y,isRequest:Fy,isResponse:jy,isHeaders:By,isUndefined:Sr,isDate:Py,isFile:Iy,isBlob:Ly,isRegExp:Zy,isFunction:Rt,isStream:Ny,isURLSearchParams:My,isTypedArray:Gy,isFileList:Dy,forEach:Dr,merge:ma,extend:Uy,trim:Hy,stripBOM:Vy,inherits:qy,toFlatObject:Wy,kindOf:Ki,kindOfTest:Qt,endsWith:zy,toArray:Ky,forEachEntry:Jy,matchAll:Xy,isHTMLForm:Qy,hasOwnProperty:Nu,hasOwnProp:Nu,reduceDescriptors:Kd,freezeMethods:ev,toObjectSet:tv,toCamelCase:Yy,noop:nv,toFiniteNumber:sv,findKey:Wd,global:as,isContextDefined:zd,ALPHABET:Gd,generateString:rv,isSpecCompliantForm:iv,toJSONObject:ov,isAsyncFn:av,isThenable:lv,setImmediate:Jd,asap:cv};function de(e,t,n,s,i){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack,this.message=e,this.name="AxiosError",t&&(this.code=t),n&&(this.config=n),s&&(this.request=s),i&&(this.response=i,this.status=i.status?i.status:null)}T.inherits(de,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:T.toJSONObject(this.config),code:this.code,status:this.status}}});const Xd=de.prototype,Qd={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach(e=>{Qd[e]={value:e}});Object.defineProperties(de,Qd);Object.defineProperty(Xd,"isAxiosError",{value:!0});de.from=(e,t,n,s,i,o)=>{const a=Object.create(Xd);return T.toFlatObject(e,a,function(f){return f!==Error.prototype},c=>c!=="isAxiosError"),de.call(a,e.message,t,n,s,i),a.cause=e,a.name=e.name,o&&Object.assign(a,o),a};const uv=null;function ga(e){return T.isPlainObject(e)||T.isArray(e)}function Yd(e){return T.endsWith(e,"[]")?e.slice(0,-2):e}function Mu(e,t,n){return e?e.concat(t).map(function(i,o){return i=Yd(i),!n&&o?"["+i+"]":i}).join(n?".":""):t}function fv(e){return T.isArray(e)&&!e.some(ga)}const dv=T.toFlatObject(T,{},null,function(t){return/^is[A-Z]/.test(t)});function Xi(e,t,n){if(!T.isObject(e))throw new TypeError("target must be an object");t=t||new FormData,n=T.toFlatObject(n,{metaTokens:!0,dots:!1,indexes:!1},!1,function(P,R){return!T.isUndefined(R[P])});const s=n.metaTokens,i=n.visitor||d,o=n.dots,a=n.indexes,f=(n.Blob||typeof Blob<"u"&&Blob)&&T.isSpecCompliantForm(t);if(!T.isFunction(i))throw new TypeError("visitor must be a function");function p(C){if(C===null)return"";if(T.isDate(C))return C.toISOString();if(!f&&T.isBlob(C))throw new de("Blob is not supported. Use a Buffer instead.");return T.isArrayBuffer(C)||T.isTypedArray(C)?f&&typeof Blob=="function"?new Blob([C]):Buffer.from(C):C}function d(C,P,R){let $=C;if(C&&!R&&typeof C=="object"){if(T.endsWith(P,"{}"))P=s?P:P.slice(0,-2),C=JSON.stringify(C);else if(T.isArray(C)&&fv(C)||(T.isFileList(C)||T.endsWith(P,"[]"))&&($=T.toArray(C)))return P=Yd(P),$.forEach(function(B,H){!(T.isUndefined(B)||B===null)&&t.append(a===!0?Mu([P],H,o):a===null?P:P+"[]",p(B))}),!1}return ga(C)?!0:(t.append(Mu(R,P,o),p(C)),!1)}const m=[],b=Object.assign(dv,{defaultVisitor:d,convertValue:p,isVisitable:ga});function w(C,P){if(!T.isUndefined(C)){if(m.indexOf(C)!==-1)throw Error("Circular reference detected in "+P.join("."));m.push(C),T.forEach(C,function($,N){(!(T.isUndefined($)||$===null)&&i.call(t,$,T.isString(N)?N.trim():N,P,b))===!0&&w($,P?P.concat(N):[N])}),m.pop()}}if(!T.isObject(e))throw new TypeError("data must be an object");return w(e),t}function $u(e){const t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,function(s){return t[s]})}function Ja(e,t){this._pairs=[],e&&Xi(e,this,t)}const Zd=Ja.prototype;Zd.append=function(t,n){this._pairs.push([t,n])};Zd.toString=function(t){const n=t?function(s){return t.call(this,s,$u)}:$u;return this._pairs.map(function(i){return n(i[0])+"="+n(i[1])},"").join("&")};function hv(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function eh(e,t,n){if(!t)return e;const s=n&&n.encode||hv,i=n&&n.serialize;let o;if(i?o=i(t,n):o=T.isURLSearchParams(t)?t.toString():new Ja(t,n).toString(s),o){const a=e.indexOf("#");a!==-1&&(e=e.slice(0,a)),e+=(e.indexOf("?")===-1?"?":"&")+o}return e}class Fu{constructor(){this.handlers=[]}use(t,n,s){return this.handlers.push({fulfilled:t,rejected:n,synchronous:s?s.synchronous:!1,runWhen:s?s.runWhen:null}),this.handlers.length-1}eject(t){this.handlers[t]&&(this.handlers[t]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(t){T.forEach(this.handlers,function(s){s!==null&&t(s)})}}const th={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},pv=typeof URLSearchParams<"u"?URLSearchParams:Ja,mv=typeof FormData<"u"?FormData:null,gv=typeof Blob<"u"?Blob:null,_v={isBrowser:!0,classes:{URLSearchParams:pv,FormData:mv,Blob:gv},protocols:["http","https","file","blob","url","data"]},Xa=typeof window<"u"&&typeof document<"u",_a=typeof navigator=="object"&&navigator||void 0,bv=Xa&&(!_a||["ReactNative","NativeScript","NS"].indexOf(_a.product)<0),yv=typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&typeof self.importScripts=="function",vv=Xa&&window.location.href||"http://localhost",wv=Object.freeze(Object.defineProperty({__proto__:null,hasBrowserEnv:Xa,hasStandardBrowserEnv:bv,hasStandardBrowserWebWorkerEnv:yv,navigator:_a,origin:vv},Symbol.toStringTag,{value:"Module"})),bt={...wv,..._v};function Ev(e,t){return Xi(e,new bt.classes.URLSearchParams,Object.assign({visitor:function(n,s,i,o){return bt.isNode&&T.isBuffer(n)?(this.append(s,n.toString("base64")),!1):o.defaultVisitor.apply(this,arguments)}},t))}function Cv(e){return T.matchAll(/\w+|\[(\w*)]/g,e).map(t=>t[0]==="[]"?"":t[1]||t[0])}function Sv(e){const t={},n=Object.keys(e);let s;const i=n.length;let o;for(s=0;s=n.length;return a=!a&&T.isArray(i)?i.length:a,f?(T.hasOwnProp(i,a)?i[a]=[i[a],s]:i[a]=s,!c):((!i[a]||!T.isObject(i[a]))&&(i[a]=[]),t(n,s,i[a],o)&&T.isArray(i[a])&&(i[a]=Sv(i[a])),!c)}if(T.isFormData(e)&&T.isFunction(e.entries)){const n={};return T.forEachEntry(e,(s,i)=>{t(Cv(s),i,n,0)}),n}return null}function Tv(e,t,n){if(T.isString(e))try{return(t||JSON.parse)(e),T.trim(e)}catch(s){if(s.name!=="SyntaxError")throw s}return(n||JSON.stringify)(e)}const Nr={transitional:th,adapter:["xhr","http","fetch"],transformRequest:[function(t,n){const s=n.getContentType()||"",i=s.indexOf("application/json")>-1,o=T.isObject(t);if(o&&T.isHTMLForm(t)&&(t=new FormData(t)),T.isFormData(t))return i?JSON.stringify(nh(t)):t;if(T.isArrayBuffer(t)||T.isBuffer(t)||T.isStream(t)||T.isFile(t)||T.isBlob(t)||T.isReadableStream(t))return t;if(T.isArrayBufferView(t))return t.buffer;if(T.isURLSearchParams(t))return n.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),t.toString();let c;if(o){if(s.indexOf("application/x-www-form-urlencoded")>-1)return Ev(t,this.formSerializer).toString();if((c=T.isFileList(t))||s.indexOf("multipart/form-data")>-1){const f=this.env&&this.env.FormData;return Xi(c?{"files[]":t}:t,f&&new f,this.formSerializer)}}return o||i?(n.setContentType("application/json",!1),Tv(t)):t}],transformResponse:[function(t){const n=this.transitional||Nr.transitional,s=n&&n.forcedJSONParsing,i=this.responseType==="json";if(T.isResponse(t)||T.isReadableStream(t))return t;if(t&&T.isString(t)&&(s&&!this.responseType||i)){const a=!(n&&n.silentJSONParsing)&&i;try{return JSON.parse(t)}catch(c){if(a)throw c.name==="SyntaxError"?de.from(c,de.ERR_BAD_RESPONSE,this,null,this.response):c}}return t}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:bt.classes.FormData,Blob:bt.classes.Blob},validateStatus:function(t){return t>=200&&t<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};T.forEach(["delete","get","head","post","put","patch"],e=>{Nr.headers[e]={}});const Av=T.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),Ov=e=>{const t={};let n,s,i;return e&&e.split(` +`).forEach(function(a){i=a.indexOf(":"),n=a.substring(0,i).trim().toLowerCase(),s=a.substring(i+1).trim(),!(!n||t[n]&&Av[n])&&(n==="set-cookie"?t[n]?t[n].push(s):t[n]=[s]:t[n]=t[n]?t[n]+", "+s:s)}),t},ju=Symbol("internals");function ir(e){return e&&String(e).trim().toLowerCase()}function _i(e){return e===!1||e==null?e:T.isArray(e)?e.map(_i):String(e)}function xv(e){const t=Object.create(null),n=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let s;for(;s=n.exec(e);)t[s[1]]=s[2];return t}const Rv=e=>/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim());function Jo(e,t,n,s,i){if(T.isFunction(s))return s.call(this,t,n);if(i&&(t=n),!!T.isString(t)){if(T.isString(s))return t.indexOf(s)!==-1;if(T.isRegExp(s))return s.test(t)}}function Pv(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(t,n,s)=>n.toUpperCase()+s)}function Iv(e,t){const n=T.toCamelCase(" "+t);["get","set","has"].forEach(s=>{Object.defineProperty(e,s+n,{value:function(i,o,a){return this[s].call(this,t,i,o,a)},configurable:!0})})}class yt{constructor(t){t&&this.set(t)}set(t,n,s){const i=this;function o(c,f,p){const d=ir(f);if(!d)throw new Error("header name must be a non-empty string");const m=T.findKey(i,d);(!m||i[m]===void 0||p===!0||p===void 0&&i[m]!==!1)&&(i[m||f]=_i(c))}const a=(c,f)=>T.forEach(c,(p,d)=>o(p,d,f));if(T.isPlainObject(t)||t instanceof this.constructor)a(t,n);else if(T.isString(t)&&(t=t.trim())&&!Rv(t))a(Ov(t),n);else if(T.isHeaders(t))for(const[c,f]of t.entries())o(f,c,s);else t!=null&&o(n,t,s);return this}get(t,n){if(t=ir(t),t){const s=T.findKey(this,t);if(s){const i=this[s];if(!n)return i;if(n===!0)return xv(i);if(T.isFunction(n))return n.call(this,i,s);if(T.isRegExp(n))return n.exec(i);throw new TypeError("parser must be boolean|regexp|function")}}}has(t,n){if(t=ir(t),t){const s=T.findKey(this,t);return!!(s&&this[s]!==void 0&&(!n||Jo(this,this[s],s,n)))}return!1}delete(t,n){const s=this;let i=!1;function o(a){if(a=ir(a),a){const c=T.findKey(s,a);c&&(!n||Jo(s,s[c],c,n))&&(delete s[c],i=!0)}}return T.isArray(t)?t.forEach(o):o(t),i}clear(t){const n=Object.keys(this);let s=n.length,i=!1;for(;s--;){const o=n[s];(!t||Jo(this,this[o],o,t,!0))&&(delete this[o],i=!0)}return i}normalize(t){const n=this,s={};return T.forEach(this,(i,o)=>{const a=T.findKey(s,o);if(a){n[a]=_i(i),delete n[o];return}const c=t?Pv(o):String(o).trim();c!==o&&delete n[o],n[c]=_i(i),s[c]=!0}),this}concat(...t){return this.constructor.concat(this,...t)}toJSON(t){const n=Object.create(null);return T.forEach(this,(s,i)=>{s!=null&&s!==!1&&(n[i]=t&&T.isArray(s)?s.join(", "):s)}),n}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([t,n])=>t+": "+n).join(` +`)}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(t){return t instanceof this?t:new this(t)}static concat(t,...n){const s=new this(t);return n.forEach(i=>s.set(i)),s}static accessor(t){const s=(this[ju]=this[ju]={accessors:{}}).accessors,i=this.prototype;function o(a){const c=ir(a);s[c]||(Iv(i,a),s[c]=!0)}return T.isArray(t)?t.forEach(o):o(t),this}}yt.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]);T.reduceDescriptors(yt.prototype,({value:e},t)=>{let n=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(s){this[n]=s}}});T.freezeMethods(yt);function Xo(e,t){const n=this||Nr,s=t||n,i=yt.from(s.headers);let o=s.data;return T.forEach(e,function(c){o=c.call(n,o,i.normalize(),t?t.status:void 0)}),i.normalize(),o}function sh(e){return!!(e&&e.__CANCEL__)}function Ks(e,t,n){de.call(this,e??"canceled",de.ERR_CANCELED,t,n),this.name="CanceledError"}T.inherits(Ks,de,{__CANCEL__:!0});function rh(e,t,n){const s=n.config.validateStatus;!n.status||!s||s(n.status)?e(n):t(new de("Request failed with status code "+n.status,[de.ERR_BAD_REQUEST,de.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n))}function Lv(e){const t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}function Dv(e,t){e=e||10;const n=new Array(e),s=new Array(e);let i=0,o=0,a;return t=t!==void 0?t:1e3,function(f){const p=Date.now(),d=s[o];a||(a=p),n[i]=f,s[i]=p;let m=o,b=0;for(;m!==i;)b+=n[m++],m=m%e;if(i=(i+1)%e,i===o&&(o=(o+1)%e),p-a{n=d,i=null,o&&(clearTimeout(o),o=null),e.apply(null,p)};return[(...p)=>{const d=Date.now(),m=d-n;m>=s?a(p,d):(i=p,o||(o=setTimeout(()=>{o=null,a(i)},s-m)))},()=>i&&a(i)]}const xi=(e,t,n=3)=>{let s=0;const i=Dv(50,250);return Nv(o=>{const a=o.loaded,c=o.lengthComputable?o.total:void 0,f=a-s,p=i(f),d=a<=c;s=a;const m={loaded:a,total:c,progress:c?a/c:void 0,bytes:f,rate:p||void 0,estimated:p&&c&&d?(c-a)/p:void 0,event:o,lengthComputable:c!=null,[t?"download":"upload"]:!0};e(m)},n)},Bu=(e,t)=>{const n=e!=null;return[s=>t[0]({lengthComputable:n,total:e,loaded:s}),t[1]]},Hu=e=>(...t)=>T.asap(()=>e(...t)),kv=bt.hasStandardBrowserEnv?function(){const t=bt.navigator&&/(msie|trident)/i.test(bt.navigator.userAgent),n=document.createElement("a");let s;function i(o){let a=o;return t&&(n.setAttribute("href",a),a=n.href),n.setAttribute("href",a),{href:n.href,protocol:n.protocol?n.protocol.replace(/:$/,""):"",host:n.host,search:n.search?n.search.replace(/^\?/,""):"",hash:n.hash?n.hash.replace(/^#/,""):"",hostname:n.hostname,port:n.port,pathname:n.pathname.charAt(0)==="/"?n.pathname:"/"+n.pathname}}return s=i(window.location.href),function(a){const c=T.isString(a)?i(a):a;return c.protocol===s.protocol&&c.host===s.host}}():function(){return function(){return!0}}(),Mv=bt.hasStandardBrowserEnv?{write(e,t,n,s,i,o){const a=[e+"="+encodeURIComponent(t)];T.isNumber(n)&&a.push("expires="+new Date(n).toGMTString()),T.isString(s)&&a.push("path="+s),T.isString(i)&&a.push("domain="+i),o===!0&&a.push("secure"),document.cookie=a.join("; ")},read(e){const t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove(e){this.write(e,"",Date.now()-864e5)}}:{write(){},read(){return null},remove(){}};function $v(e){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(e)}function Fv(e,t){return t?e.replace(/\/?\/$/,"")+"/"+t.replace(/^\/+/,""):e}function ih(e,t){return e&&!$v(t)?Fv(e,t):t}const Uu=e=>e instanceof yt?{...e}:e;function ms(e,t){t=t||{};const n={};function s(p,d,m){return T.isPlainObject(p)&&T.isPlainObject(d)?T.merge.call({caseless:m},p,d):T.isPlainObject(d)?T.merge({},d):T.isArray(d)?d.slice():d}function i(p,d,m){if(T.isUndefined(d)){if(!T.isUndefined(p))return s(void 0,p,m)}else return s(p,d,m)}function o(p,d){if(!T.isUndefined(d))return s(void 0,d)}function a(p,d){if(T.isUndefined(d)){if(!T.isUndefined(p))return s(void 0,p)}else return s(void 0,d)}function c(p,d,m){if(m in t)return s(p,d);if(m in e)return s(void 0,p)}const f={url:o,method:o,data:o,baseURL:a,transformRequest:a,transformResponse:a,paramsSerializer:a,timeout:a,timeoutMessage:a,withCredentials:a,withXSRFToken:a,adapter:a,responseType:a,xsrfCookieName:a,xsrfHeaderName:a,onUploadProgress:a,onDownloadProgress:a,decompress:a,maxContentLength:a,maxBodyLength:a,beforeRedirect:a,transport:a,httpAgent:a,httpsAgent:a,cancelToken:a,socketPath:a,responseEncoding:a,validateStatus:c,headers:(p,d)=>i(Uu(p),Uu(d),!0)};return T.forEach(Object.keys(Object.assign({},e,t)),function(d){const m=f[d]||i,b=m(e[d],t[d],d);T.isUndefined(b)&&m!==c||(n[d]=b)}),n}const oh=e=>{const t=ms({},e);let{data:n,withXSRFToken:s,xsrfHeaderName:i,xsrfCookieName:o,headers:a,auth:c}=t;t.headers=a=yt.from(a),t.url=eh(ih(t.baseURL,t.url),e.params,e.paramsSerializer),c&&a.set("Authorization","Basic "+btoa((c.username||"")+":"+(c.password?unescape(encodeURIComponent(c.password)):"")));let f;if(T.isFormData(n)){if(bt.hasStandardBrowserEnv||bt.hasStandardBrowserWebWorkerEnv)a.setContentType(void 0);else if((f=a.getContentType())!==!1){const[p,...d]=f?f.split(";").map(m=>m.trim()).filter(Boolean):[];a.setContentType([p||"multipart/form-data",...d].join("; "))}}if(bt.hasStandardBrowserEnv&&(s&&T.isFunction(s)&&(s=s(t)),s||s!==!1&&kv(t.url))){const p=i&&o&&Mv.read(o);p&&a.set(i,p)}return t},jv=typeof XMLHttpRequest<"u",Bv=jv&&function(e){return new Promise(function(n,s){const i=oh(e);let o=i.data;const a=yt.from(i.headers).normalize();let{responseType:c,onUploadProgress:f,onDownloadProgress:p}=i,d,m,b,w,C;function P(){w&&w(),C&&C(),i.cancelToken&&i.cancelToken.unsubscribe(d),i.signal&&i.signal.removeEventListener("abort",d)}let R=new XMLHttpRequest;R.open(i.method.toUpperCase(),i.url,!0),R.timeout=i.timeout;function $(){if(!R)return;const B=yt.from("getAllResponseHeaders"in R&&R.getAllResponseHeaders()),Y={data:!c||c==="text"||c==="json"?R.responseText:R.response,status:R.status,statusText:R.statusText,headers:B,config:e,request:R};rh(function(le){n(le),P()},function(le){s(le),P()},Y),R=null}"onloadend"in R?R.onloadend=$:R.onreadystatechange=function(){!R||R.readyState!==4||R.status===0&&!(R.responseURL&&R.responseURL.indexOf("file:")===0)||setTimeout($)},R.onabort=function(){R&&(s(new de("Request aborted",de.ECONNABORTED,e,R)),R=null)},R.onerror=function(){s(new de("Network Error",de.ERR_NETWORK,e,R)),R=null},R.ontimeout=function(){let H=i.timeout?"timeout of "+i.timeout+"ms exceeded":"timeout exceeded";const Y=i.transitional||th;i.timeoutErrorMessage&&(H=i.timeoutErrorMessage),s(new de(H,Y.clarifyTimeoutError?de.ETIMEDOUT:de.ECONNABORTED,e,R)),R=null},o===void 0&&a.setContentType(null),"setRequestHeader"in R&&T.forEach(a.toJSON(),function(H,Y){R.setRequestHeader(Y,H)}),T.isUndefined(i.withCredentials)||(R.withCredentials=!!i.withCredentials),c&&c!=="json"&&(R.responseType=i.responseType),p&&([b,C]=xi(p,!0),R.addEventListener("progress",b)),f&&R.upload&&([m,w]=xi(f),R.upload.addEventListener("progress",m),R.upload.addEventListener("loadend",w)),(i.cancelToken||i.signal)&&(d=B=>{R&&(s(!B||B.type?new Ks(null,e,R):B),R.abort(),R=null)},i.cancelToken&&i.cancelToken.subscribe(d),i.signal&&(i.signal.aborted?d():i.signal.addEventListener("abort",d)));const N=Lv(i.url);if(N&&bt.protocols.indexOf(N)===-1){s(new de("Unsupported protocol "+N+":",de.ERR_BAD_REQUEST,e));return}R.send(o||null)})},Hv=(e,t)=>{const{length:n}=e=e?e.filter(Boolean):[];if(t||n){let s=new AbortController,i;const o=function(p){if(!i){i=!0,c();const d=p instanceof Error?p:this.reason;s.abort(d instanceof de?d:new Ks(d instanceof Error?d.message:d))}};let a=t&&setTimeout(()=>{a=null,o(new de(`timeout ${t} of ms exceeded`,de.ETIMEDOUT))},t);const c=()=>{e&&(a&&clearTimeout(a),a=null,e.forEach(p=>{p.unsubscribe?p.unsubscribe(o):p.removeEventListener("abort",o)}),e=null)};e.forEach(p=>p.addEventListener("abort",o));const{signal:f}=s;return f.unsubscribe=()=>T.asap(c),f}},Uv=function*(e,t){let n=e.byteLength;if(!t||n{const i=Vv(e,t);let o=0,a,c=f=>{a||(a=!0,s&&s(f))};return new ReadableStream({async pull(f){try{const{done:p,value:d}=await i.next();if(p){c(),f.close();return}let m=d.byteLength;if(n){let b=o+=m;n(b)}f.enqueue(new Uint8Array(d))}catch(p){throw c(p),p}},cancel(f){return c(f),i.return()}},{highWaterMark:2})},Qi=typeof fetch=="function"&&typeof Request=="function"&&typeof Response=="function",ah=Qi&&typeof ReadableStream=="function",Wv=Qi&&(typeof TextEncoder=="function"?(e=>t=>e.encode(t))(new TextEncoder):async e=>new Uint8Array(await new Response(e).arrayBuffer())),lh=(e,...t)=>{try{return!!e(...t)}catch{return!1}},zv=ah&&lh(()=>{let e=!1;const t=new Request(bt.origin,{body:new ReadableStream,method:"POST",get duplex(){return e=!0,"half"}}).headers.has("Content-Type");return e&&!t}),qu=64*1024,ba=ah&&lh(()=>T.isReadableStream(new Response("").body)),Ri={stream:ba&&(e=>e.body)};Qi&&(e=>{["text","arrayBuffer","blob","formData","stream"].forEach(t=>{!Ri[t]&&(Ri[t]=T.isFunction(e[t])?n=>n[t]():(n,s)=>{throw new de(`Response type '${t}' is not supported`,de.ERR_NOT_SUPPORT,s)})})})(new Response);const Kv=async e=>{if(e==null)return 0;if(T.isBlob(e))return e.size;if(T.isSpecCompliantForm(e))return(await new Request(bt.origin,{method:"POST",body:e}).arrayBuffer()).byteLength;if(T.isArrayBufferView(e)||T.isArrayBuffer(e))return e.byteLength;if(T.isURLSearchParams(e)&&(e=e+""),T.isString(e))return(await Wv(e)).byteLength},Gv=async(e,t)=>{const n=T.toFiniteNumber(e.getContentLength());return n??Kv(t)},Jv=Qi&&(async e=>{let{url:t,method:n,data:s,signal:i,cancelToken:o,timeout:a,onDownloadProgress:c,onUploadProgress:f,responseType:p,headers:d,withCredentials:m="same-origin",fetchOptions:b}=oh(e);p=p?(p+"").toLowerCase():"text";let w=Hv([i,o&&o.toAbortSignal()],a),C;const P=w&&w.unsubscribe&&(()=>{w.unsubscribe()});let R;try{if(f&&zv&&n!=="get"&&n!=="head"&&(R=await Gv(d,s))!==0){let Y=new Request(t,{method:"POST",body:s,duplex:"half"}),ge;if(T.isFormData(s)&&(ge=Y.headers.get("content-type"))&&d.setContentType(ge),Y.body){const[le,te]=Bu(R,xi(Hu(f)));s=Vu(Y.body,qu,le,te)}}T.isString(m)||(m=m?"include":"omit");const $="credentials"in Request.prototype;C=new Request(t,{...b,signal:w,method:n.toUpperCase(),headers:d.normalize().toJSON(),body:s,duplex:"half",credentials:$?m:void 0});let N=await fetch(C);const B=ba&&(p==="stream"||p==="response");if(ba&&(c||B&&P)){const Y={};["status","statusText","headers"].forEach(q=>{Y[q]=N[q]});const ge=T.toFiniteNumber(N.headers.get("content-length")),[le,te]=c&&Bu(ge,xi(Hu(c),!0))||[];N=new Response(Vu(N.body,qu,le,()=>{te&&te(),P&&P()}),Y)}p=p||"text";let H=await Ri[T.findKey(Ri,p)||"text"](N,e);return!B&&P&&P(),await new Promise((Y,ge)=>{rh(Y,ge,{data:H,headers:yt.from(N.headers),status:N.status,statusText:N.statusText,config:e,request:C})})}catch($){throw P&&P(),$&&$.name==="TypeError"&&/fetch/i.test($.message)?Object.assign(new de("Network Error",de.ERR_NETWORK,e,C),{cause:$.cause||$}):de.from($,$&&$.code,e,C)}}),ya={http:uv,xhr:Bv,fetch:Jv};T.forEach(ya,(e,t)=>{if(e){try{Object.defineProperty(e,"name",{value:t})}catch{}Object.defineProperty(e,"adapterName",{value:t})}});const Wu=e=>`- ${e}`,Xv=e=>T.isFunction(e)||e===null||e===!1,ch={getAdapter:e=>{e=T.isArray(e)?e:[e];const{length:t}=e;let n,s;const i={};for(let o=0;o`adapter ${c} `+(f===!1?"is not supported by the environment":"is not available in the build"));let a=t?o.length>1?`since : +`+o.map(Wu).join(` +`):" "+Wu(o[0]):"as no adapter specified";throw new de("There is no suitable adapter to dispatch the request "+a,"ERR_NOT_SUPPORT")}return s},adapters:ya};function Qo(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new Ks(null,e)}function zu(e){return Qo(e),e.headers=yt.from(e.headers),e.data=Xo.call(e,e.transformRequest),["post","put","patch"].indexOf(e.method)!==-1&&e.headers.setContentType("application/x-www-form-urlencoded",!1),ch.getAdapter(e.adapter||Nr.adapter)(e).then(function(s){return Qo(e),s.data=Xo.call(e,e.transformResponse,s),s.headers=yt.from(s.headers),s},function(s){return sh(s)||(Qo(e),s&&s.response&&(s.response.data=Xo.call(e,e.transformResponse,s.response),s.response.headers=yt.from(s.response.headers))),Promise.reject(s)})}const uh="1.7.7",Qa={};["object","boolean","number","function","string","symbol"].forEach((e,t)=>{Qa[e]=function(s){return typeof s===e||"a"+(t<1?"n ":" ")+e}});const Ku={};Qa.transitional=function(t,n,s){function i(o,a){return"[Axios v"+uh+"] Transitional option '"+o+"'"+a+(s?". "+s:"")}return(o,a,c)=>{if(t===!1)throw new de(i(a," has been removed"+(n?" in "+n:"")),de.ERR_DEPRECATED);return n&&!Ku[a]&&(Ku[a]=!0,console.warn(i(a," has been deprecated since v"+n+" and will be removed in the near future"))),t?t(o,a,c):!0}};function Qv(e,t,n){if(typeof e!="object")throw new de("options must be an object",de.ERR_BAD_OPTION_VALUE);const s=Object.keys(e);let i=s.length;for(;i-- >0;){const o=s[i],a=t[o];if(a){const c=e[o],f=c===void 0||a(c,o,e);if(f!==!0)throw new de("option "+o+" must be "+f,de.ERR_BAD_OPTION_VALUE);continue}if(n!==!0)throw new de("Unknown option "+o,de.ERR_BAD_OPTION)}}const va={assertOptions:Qv,validators:Qa},Ln=va.validators;class fs{constructor(t){this.defaults=t,this.interceptors={request:new Fu,response:new Fu}}async request(t,n){try{return await this._request(t,n)}catch(s){if(s instanceof Error){let i;Error.captureStackTrace?Error.captureStackTrace(i={}):i=new Error;const o=i.stack?i.stack.replace(/^.+\n/,""):"";try{s.stack?o&&!String(s.stack).endsWith(o.replace(/^.+\n.+\n/,""))&&(s.stack+=` +`+o):s.stack=o}catch{}}throw s}}_request(t,n){typeof t=="string"?(n=n||{},n.url=t):n=t||{},n=ms(this.defaults,n);const{transitional:s,paramsSerializer:i,headers:o}=n;s!==void 0&&va.assertOptions(s,{silentJSONParsing:Ln.transitional(Ln.boolean),forcedJSONParsing:Ln.transitional(Ln.boolean),clarifyTimeoutError:Ln.transitional(Ln.boolean)},!1),i!=null&&(T.isFunction(i)?n.paramsSerializer={serialize:i}:va.assertOptions(i,{encode:Ln.function,serialize:Ln.function},!0)),n.method=(n.method||this.defaults.method||"get").toLowerCase();let a=o&&T.merge(o.common,o[n.method]);o&&T.forEach(["delete","get","head","post","put","patch","common"],C=>{delete o[C]}),n.headers=yt.concat(a,o);const c=[];let f=!0;this.interceptors.request.forEach(function(P){typeof P.runWhen=="function"&&P.runWhen(n)===!1||(f=f&&P.synchronous,c.unshift(P.fulfilled,P.rejected))});const p=[];this.interceptors.response.forEach(function(P){p.push(P.fulfilled,P.rejected)});let d,m=0,b;if(!f){const C=[zu.bind(this),void 0];for(C.unshift.apply(C,c),C.push.apply(C,p),b=C.length,d=Promise.resolve(n);m{if(!s._listeners)return;let o=s._listeners.length;for(;o-- >0;)s._listeners[o](i);s._listeners=null}),this.promise.then=i=>{let o;const a=new Promise(c=>{s.subscribe(c),o=c}).then(i);return a.cancel=function(){s.unsubscribe(o)},a},t(function(o,a,c){s.reason||(s.reason=new Ks(o,a,c),n(s.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(t){if(this.reason){t(this.reason);return}this._listeners?this._listeners.push(t):this._listeners=[t]}unsubscribe(t){if(!this._listeners)return;const n=this._listeners.indexOf(t);n!==-1&&this._listeners.splice(n,1)}toAbortSignal(){const t=new AbortController,n=s=>{t.abort(s)};return this.subscribe(n),t.signal.unsubscribe=()=>this.unsubscribe(n),t.signal}static source(){let t;return{token:new Ya(function(i){t=i}),cancel:t}}}function Yv(e){return function(n){return e.apply(null,n)}}function Zv(e){return T.isObject(e)&&e.isAxiosError===!0}const wa={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(wa).forEach(([e,t])=>{wa[t]=e});function fh(e){const t=new fs(e),n=Ud(fs.prototype.request,t);return T.extend(n,fs.prototype,t,{allOwnKeys:!0}),T.extend(n,t,null,{allOwnKeys:!0}),n.create=function(i){return fh(ms(e,i))},n}const Ke=fh(Nr);Ke.Axios=fs;Ke.CanceledError=Ks;Ke.CancelToken=Ya;Ke.isCancel=sh;Ke.VERSION=uh;Ke.toFormData=Xi;Ke.AxiosError=de;Ke.Cancel=Ke.CanceledError;Ke.all=function(t){return Promise.all(t)};Ke.spread=Yv;Ke.isAxiosError=Zv;Ke.mergeConfig=ms;Ke.AxiosHeaders=yt;Ke.formToJSON=e=>nh(T.isHTMLForm(e)?new FormData(e):e);Ke.getAdapter=ch.getAdapter;Ke.HttpStatusCode=wa;Ke.default=Ke;const ew="modulepreload",tw=function(e){return"/"+e},Gu={},on=function(t,n,s){let i=Promise.resolve();if(n&&n.length>0){document.getElementsByTagName("link");const o=document.querySelector("meta[property=csp-nonce]"),a=(o==null?void 0:o.nonce)||(o==null?void 0:o.getAttribute("nonce"));i=Promise.all(n.map(c=>{if(c=tw(c),c in Gu)return;Gu[c]=!0;const f=c.endsWith(".css"),p=f?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${c}"]${p}`))return;const d=document.createElement("link");if(d.rel=f?"stylesheet":ew,f||(d.as="script"),d.crossOrigin="",d.href=c,a&&d.setAttribute("nonce",a),document.head.appendChild(d),f)return new Promise((m,b)=>{d.addEventListener("load",m),d.addEventListener("error",()=>b(new Error(`Unable to preload CSS for ${c}`)))})}))}return i.then(()=>t()).catch(o=>{const a=new Event("vite:preloadError",{cancelable:!0});if(a.payload=o,window.dispatchEvent(a),!a.defaultPrevented)throw o})},dh=Ey({history:Qb(),routes:[{path:"/",name:"home",redirect:"/web/applications/swcatalog"},{path:"/web",name:"rootOssList",component:()=>on(()=>import("./OssList-Dkob1ogV.js"),__vite__mapDeps([0,1,2,3,4,5,6]))},{path:"/web/oss/list",name:"ossList",component:()=>on(()=>import("./OssList-Dkob1ogV.js"),__vite__mapDeps([0,1,2,3,4,5,6]))},{path:"/web/generate/yaml",name:"yamlGenerate",component:()=>on(()=>import("./YamlGenerate-DWF5D7eZ.js"),__vite__mapDeps([7,5,8,9]))},{path:"/web/repository/list",redirect:e=>({name:"repositoryList",query:e.query,hash:e.hash})},{path:"/web/repository/detail/:repositoryName",redirect:e=>({name:"repositoryDetail",params:{repositoryName:e.params.repositoryName},query:e.query,hash:e.hash})},{path:"/web/softwareCatalog/install",name:"softwareCatalogInstall",component:()=>on(()=>import("./InstallSoftwareIframe-DwIe7gkh.js"),__vite__mapDeps([10,11,6,12,5,13,8,14,15]))},{path:"/web/softwareCatalog",redirect:e=>({name:"softwareCatalog",query:e.query,hash:e.hash})},{path:"/web/applications/swcatalog",name:"softwareCatalog",component:()=>on(()=>import("./SoftwareCatalog-BdpHKttf.js"),__vite__mapDeps([16,11,6,12,5,13,8,14,2,17,18,19]))},{path:"/web/applications/status",name:"applicationStatus",component:()=>on(()=>import("./ApplicationStatus-B3ZUl1H1.js"),__vite__mapDeps([20,17,2,13,5,8,18,3,4,21]))},{path:"/web/applications/repository",component:()=>on(()=>import("./ApplicationRepository-BFYuzGXK.js"),__vite__mapDeps([22,1,2])),children:[{path:"",name:"repositoryList",component:()=>on(()=>import("./RepositoryList-CH7YVo74.js"),__vite__mapDeps([23,3,4,24,5,6]))},{path:":repositoryName",name:"repositoryDetail",component:()=>on(()=>import("./RepositoryDetail-DP0dnufb.js"),__vite__mapDeps([25,24,5,12,3,4]))}]},{path:"/web/softwareCatalog/list/test",name:"softwareCatalogListTest",component:()=>on(()=>import("./SoftwareCatalogListTest-D5JiQFYZ.js"),__vite__mapDeps([26,1,2,13,5,8,12,11,6,14,27]))}]}),nw=vb("user",{state:()=>({accessToken:"",workspaceInfo:{id:"",name:"",description:"",created_at:"",updated_at:""},projectInfo:{id:"",ns_id:"",mci_id:"",cluster_id:"",name:"",description:"",created_at:"",updated_at:""},operationId:""}),actions:{setUser(e){this.accessToken=e.accessToken,this.workspaceInfo=e.workspaceInfo,this.projectInfo=e.projectInfo,this.operationId=e.operationId},getNsId(){var e,t,n,s;return((e=this.projectInfo)==null?void 0:e.ns_id)||((t=this.projectInfo)==null?void 0:t.nsid)||((n=this.projectInfo)==null?void 0:n.nsId)||((s=this.projectInfo)==null?void 0:s.NsId)||null},clearUser(){this.accessToken=null,this.workspaceInfo=null,this.projectInfo=null,this.operationId=null}}});let Ju=!1;dh.beforeEach(async(e,t,n)=>{Ju||(window.addEventListener("message",function(s){var f,p,d,m;const i=s.data;if(!i||typeof i!="object")return;const o=String(i.accessToken??"").trim(),a=((f=i.workspaceInfo)==null?void 0:f.id)??((p=i.workspaceInfo)==null?void 0:p.Id),c=((d=i.projectInfo)==null?void 0:d.id)??((m=i.projectInfo)==null?void 0:m.Id);if(!(!o||["undefined","null"].includes(o.toLowerCase())||!a||!c))try{nw().setUser(i)}catch{console.error("Unable to apply Web Console project context.")}}),Ju=!0),n()});const sw=e=>window.location.origin,f0=e=>e?/^(?:[a-z][a-z\d+\-.]*:)?\/\//i.test(e)||e.startsWith("data:")?e:`${window.location.origin}${e.startsWith("/")?"":"/"}${e}`:"";var rw=Object.defineProperty,Xu=Object.getOwnPropertySymbols,iw=Object.prototype.hasOwnProperty,ow=Object.prototype.propertyIsEnumerable,Qu=(e,t,n)=>t in e?rw(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,hh=(e,t)=>{for(var n in t||(t={}))iw.call(t,n)&&Qu(e,n,t[n]);if(Xu)for(var n of Xu(t))ow.call(t,n)&&Qu(e,n,t[n]);return e},Yi=e=>typeof e=="function",Zi=e=>typeof e=="string",ph=e=>Zi(e)&&e.trim().length>0,aw=e=>typeof e=="number",ls=e=>typeof e>"u",Tr=e=>typeof e=="object"&&e!==null,lw=e=>un(e,"tag")&&ph(e.tag),mh=e=>window.TouchEvent&&e instanceof TouchEvent,gh=e=>un(e,"component")&&_h(e.component),cw=e=>Yi(e)||Tr(e),_h=e=>!ls(e)&&(Zi(e)||cw(e)||gh(e)),Yu=e=>Tr(e)&&["height","width","right","left","top","bottom"].every(t=>aw(e[t])),un=(e,t)=>(Tr(e)||Yi(e))&&t in e,uw=(e=>()=>e++)(0);function Yo(e){return mh(e)?e.targetTouches[0].clientX:e.clientX}function Zu(e){return mh(e)?e.targetTouches[0].clientY:e.clientY}var fw=e=>{ls(e.remove)?e.parentNode&&e.parentNode.removeChild(e):e.remove()},kr=e=>gh(e)?kr(e.component):lw(e)?dn({render(){return e}}):typeof e=="string"?e:Ee(jn(e)),dw=e=>{if(typeof e=="string")return e;const t=un(e,"props")&&Tr(e.props)?e.props:{},n=un(e,"listeners")&&Tr(e.listeners)?e.listeners:{};return{component:kr(e),props:t,listeners:n}},hw=()=>typeof window<"u",Za=class{constructor(){this.allHandlers={}}getHandlers(e){return this.allHandlers[e]||[]}on(e,t){const n=this.getHandlers(e);n.push(t),this.allHandlers[e]=n}off(e,t){const n=this.getHandlers(e);n.splice(n.indexOf(t)>>>0,1)}emit(e,t){this.getHandlers(e).forEach(s=>s(t))}},pw=e=>["on","off","emit"].every(t=>un(e,t)&&Yi(e[t])),Tt;(function(e){e.SUCCESS="success",e.ERROR="error",e.WARNING="warning",e.INFO="info",e.DEFAULT="default"})(Tt||(Tt={}));var Pi;(function(e){e.TOP_LEFT="top-left",e.TOP_CENTER="top-center",e.TOP_RIGHT="top-right",e.BOTTOM_LEFT="bottom-left",e.BOTTOM_CENTER="bottom-center",e.BOTTOM_RIGHT="bottom-right"})(Pi||(Pi={}));var At;(function(e){e.ADD="add",e.DISMISS="dismiss",e.UPDATE="update",e.CLEAR="clear",e.UPDATE_DEFAULTS="update_defaults"})(At||(At={}));var Wt="Vue-Toastification",Vt={type:{type:String,default:Tt.DEFAULT},classNames:{type:[String,Array],default:()=>[]},trueBoolean:{type:Boolean,default:!0}},bh={type:Vt.type,customIcon:{type:[String,Boolean,Object,Function],default:!0}},bi={component:{type:[String,Object,Function,Boolean],default:"button"},classNames:Vt.classNames,showOnHover:{type:Boolean,default:!1},ariaLabel:{type:String,default:"close"}},Ea={timeout:{type:[Number,Boolean],default:5e3},hideProgressBar:{type:Boolean,default:!1},isRunning:{type:Boolean,default:!1}},yh={transition:{type:[Object,String],default:`${Wt}__bounce`}},mw={position:{type:String,default:Pi.TOP_RIGHT},draggable:Vt.trueBoolean,draggablePercent:{type:Number,default:.6},pauseOnFocusLoss:Vt.trueBoolean,pauseOnHover:Vt.trueBoolean,closeOnClick:Vt.trueBoolean,timeout:Ea.timeout,hideProgressBar:Ea.hideProgressBar,toastClassName:Vt.classNames,bodyClassName:Vt.classNames,icon:bh.customIcon,closeButton:bi.component,closeButtonClassName:bi.classNames,showCloseButtonOnHover:bi.showOnHover,accessibility:{type:Object,default:()=>({toastRole:"alert",closeButtonLabel:"close"})},rtl:{type:Boolean,default:!1},eventBus:{type:Object,required:!1,default:()=>new Za}},gw={id:{type:[String,Number],required:!0,default:0},type:Vt.type,content:{type:[String,Object,Function],required:!0,default:""},onClick:{type:Function,default:void 0},onClose:{type:Function,default:void 0}},_w={container:{type:[Object,Function],default:()=>document.body},newestOnTop:Vt.trueBoolean,maxToasts:{type:Number,default:20},transition:yh.transition,toastDefaults:Object,filterBeforeCreate:{type:Function,default:e=>e},filterToasts:{type:Function,default:e=>e},containerClassName:Vt.classNames,onMounted:Function,shareAppContext:[Boolean,Object]},Cn={CORE_TOAST:mw,TOAST:gw,CONTAINER:_w,PROGRESS_BAR:Ea,ICON:bh,TRANSITION:yh,CLOSE_BUTTON:bi},vh=dn({name:"VtProgressBar",props:Cn.PROGRESS_BAR,data(){return{hasClass:!0}},computed:{style(){return{animationDuration:`${this.timeout}ms`,animationPlayState:this.isRunning?"running":"paused",opacity:this.hideProgressBar?0:1}},cpClass(){return this.hasClass?`${Wt}__progress-bar`:""}},watch:{timeout(){this.hasClass=!1,this.$nextTick(()=>this.hasClass=!0)}},mounted(){this.$el.addEventListener("animationend",this.animationEnded)},beforeUnmount(){this.$el.removeEventListener("animationend",this.animationEnded)},methods:{animationEnded(){this.$emit("close-toast")}}});function bw(e,t){return Ue(),qt("div",{style:Or(e.style),class:Hn(e.cpClass)},null,6)}vh.render=bw;var yw=vh,wh=dn({name:"VtCloseButton",props:Cn.CLOSE_BUTTON,computed:{buttonComponent(){return this.component!==!1?kr(this.component):"button"},classes(){const e=[`${Wt}__close-button`];return this.showOnHover&&e.push("show-on-hover"),e.concat(this.classNames)}}}),vw=Bi(" × ");function ww(e,t){return Ue(),jt(Ua(e.buttonComponent),Hi({"aria-label":e.ariaLabel,class:e.classes},e.$attrs),{default:Ir(()=>[vw]),_:1},16,["aria-label","class"])}wh.render=ww;var Ew=wh,Eh={},Cw={"aria-hidden":"true",focusable:"false","data-prefix":"fas","data-icon":"check-circle",class:"svg-inline--fa fa-check-circle fa-w-16",role:"img",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 512 512"},Sw=_s("path",{fill:"currentColor",d:"M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zM227.314 387.314l184-184c6.248-6.248 6.248-16.379 0-22.627l-22.627-22.627c-6.248-6.249-16.379-6.249-22.628 0L216 308.118l-70.059-70.059c-6.248-6.248-16.379-6.248-22.628 0l-22.627 22.627c-6.248 6.248-6.248 16.379 0 22.627l104 104c6.249 6.249 16.379 6.249 22.628.001z"},null,-1),Tw=[Sw];function Aw(e,t){return Ue(),qt("svg",Cw,Tw)}Eh.render=Aw;var Ow=Eh,Ch={},xw={"aria-hidden":"true",focusable:"false","data-prefix":"fas","data-icon":"info-circle",class:"svg-inline--fa fa-info-circle fa-w-16",role:"img",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 512 512"},Rw=_s("path",{fill:"currentColor",d:"M256 8C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8zm0 110c23.196 0 42 18.804 42 42s-18.804 42-42 42-42-18.804-42-42 18.804-42 42-42zm56 254c0 6.627-5.373 12-12 12h-88c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h12v-64h-12c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h64c6.627 0 12 5.373 12 12v100h12c6.627 0 12 5.373 12 12v24z"},null,-1),Pw=[Rw];function Iw(e,t){return Ue(),qt("svg",xw,Pw)}Ch.render=Iw;var ef=Ch,Sh={},Lw={"aria-hidden":"true",focusable:"false","data-prefix":"fas","data-icon":"exclamation-circle",class:"svg-inline--fa fa-exclamation-circle fa-w-16",role:"img",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 512 512"},Dw=_s("path",{fill:"currentColor",d:"M504 256c0 136.997-111.043 248-248 248S8 392.997 8 256C8 119.083 119.043 8 256 8s248 111.083 248 248zm-248 50c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z"},null,-1),Nw=[Dw];function kw(e,t){return Ue(),qt("svg",Lw,Nw)}Sh.render=kw;var Mw=Sh,Th={},$w={"aria-hidden":"true",focusable:"false","data-prefix":"fas","data-icon":"exclamation-triangle",class:"svg-inline--fa fa-exclamation-triangle fa-w-18",role:"img",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 576 512"},Fw=_s("path",{fill:"currentColor",d:"M569.517 440.013C587.975 472.007 564.806 512 527.94 512H48.054c-36.937 0-59.999-40.055-41.577-71.987L246.423 23.985c18.467-32.009 64.72-31.951 83.154 0l239.94 416.028zM288 354c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z"},null,-1),jw=[Fw];function Bw(e,t){return Ue(),qt("svg",$w,jw)}Th.render=Bw;var Hw=Th,Ah=dn({name:"VtIcon",props:Cn.ICON,computed:{customIconChildren(){return un(this.customIcon,"iconChildren")?this.trimValue(this.customIcon.iconChildren):""},customIconClass(){return Zi(this.customIcon)?this.trimValue(this.customIcon):un(this.customIcon,"iconClass")?this.trimValue(this.customIcon.iconClass):""},customIconTag(){return un(this.customIcon,"iconTag")?this.trimValue(this.customIcon.iconTag,"i"):"i"},hasCustomIcon(){return this.customIconClass.length>0},component(){return this.hasCustomIcon?this.customIconTag:_h(this.customIcon)?kr(this.customIcon):this.iconTypeComponent},iconTypeComponent(){return{[Tt.DEFAULT]:ef,[Tt.INFO]:ef,[Tt.SUCCESS]:Ow,[Tt.ERROR]:Hw,[Tt.WARNING]:Mw}[this.type]},iconClasses(){const e=[`${Wt}__icon`];return this.hasCustomIcon?e.concat(this.customIconClass):e}},methods:{trimValue(e,t=""){return ph(e)?e.trim():t}}});function Uw(e,t){return Ue(),jt(Ua(e.component),{class:Hn(e.iconClasses)},{default:Ir(()=>[Bi(xa(e.customIconChildren),1)]),_:1},8,["class"])}Ah.render=Uw;var Vw=Ah,Oh=dn({name:"VtToast",components:{ProgressBar:yw,CloseButton:Ew,Icon:Vw},inheritAttrs:!1,props:Object.assign({},Cn.CORE_TOAST,Cn.TOAST),data(){return{isRunning:!0,disableTransitions:!1,beingDragged:!1,dragStart:0,dragPos:{x:0,y:0},dragRect:{}}},computed:{classes(){const e=[`${Wt}__toast`,`${Wt}__toast--${this.type}`,`${this.position}`].concat(this.toastClassName);return this.disableTransitions&&e.push("disable-transition"),this.rtl&&e.push(`${Wt}__toast--rtl`),e},bodyClasses(){return[`${Wt}__toast-${Zi(this.content)?"body":"component-body"}`].concat(this.bodyClassName)},draggableStyle(){return this.dragStart===this.dragPos.x?{}:this.beingDragged?{transform:`translateX(${this.dragDelta}px)`,opacity:1-Math.abs(this.dragDelta/this.removalDistance)}:{transition:"transform 0.2s, opacity 0.2s",transform:"translateX(0)",opacity:1}},dragDelta(){return this.beingDragged?this.dragPos.x-this.dragStart:0},removalDistance(){return Yu(this.dragRect)?(this.dragRect.right-this.dragRect.left)*this.draggablePercent:0}},mounted(){this.draggable&&this.draggableSetup(),this.pauseOnFocusLoss&&this.focusSetup()},beforeUnmount(){this.draggable&&this.draggableCleanup(),this.pauseOnFocusLoss&&this.focusCleanup()},methods:{hasProp:un,getVueComponentFromObj:kr,closeToast(){this.eventBus.emit(At.DISMISS,this.id)},clickHandler(){this.onClick&&this.onClick(this.closeToast),this.closeOnClick&&(!this.beingDragged||this.dragStart===this.dragPos.x)&&this.closeToast()},timeoutHandler(){this.closeToast()},hoverPause(){this.pauseOnHover&&(this.isRunning=!1)},hoverPlay(){this.pauseOnHover&&(this.isRunning=!0)},focusPause(){this.isRunning=!1},focusPlay(){this.isRunning=!0},focusSetup(){addEventListener("blur",this.focusPause),addEventListener("focus",this.focusPlay)},focusCleanup(){removeEventListener("blur",this.focusPause),removeEventListener("focus",this.focusPlay)},draggableSetup(){const e=this.$el;e.addEventListener("touchstart",this.onDragStart,{passive:!0}),e.addEventListener("mousedown",this.onDragStart),addEventListener("touchmove",this.onDragMove,{passive:!1}),addEventListener("mousemove",this.onDragMove),addEventListener("touchend",this.onDragEnd),addEventListener("mouseup",this.onDragEnd)},draggableCleanup(){const e=this.$el;e.removeEventListener("touchstart",this.onDragStart),e.removeEventListener("mousedown",this.onDragStart),removeEventListener("touchmove",this.onDragMove),removeEventListener("mousemove",this.onDragMove),removeEventListener("touchend",this.onDragEnd),removeEventListener("mouseup",this.onDragEnd)},onDragStart(e){this.beingDragged=!0,this.dragPos={x:Yo(e),y:Zu(e)},this.dragStart=Yo(e),this.dragRect=this.$el.getBoundingClientRect()},onDragMove(e){this.beingDragged&&(e.preventDefault(),this.isRunning&&(this.isRunning=!1),this.dragPos={x:Yo(e),y:Zu(e)})},onDragEnd(){this.beingDragged&&(Math.abs(this.dragDelta)>=this.removalDistance?(this.disableTransitions=!0,this.$nextTick(()=>this.closeToast())):setTimeout(()=>{this.beingDragged=!1,Yu(this.dragRect)&&this.pauseOnHover&&this.dragRect.bottom>=this.dragPos.y&&this.dragPos.y>=this.dragRect.top&&this.dragRect.left<=this.dragPos.x&&this.dragPos.x<=this.dragRect.right?this.isRunning=!1:this.isRunning=!0}))}}}),qw=["role"];function Ww(e,t){const n=cr("Icon"),s=cr("CloseButton"),i=cr("ProgressBar");return Ue(),qt("div",{class:Hn(e.classes),style:Or(e.draggableStyle),onClick:t[0]||(t[0]=(...o)=>e.clickHandler&&e.clickHandler(...o)),onMouseenter:t[1]||(t[1]=(...o)=>e.hoverPause&&e.hoverPause(...o)),onMouseleave:t[2]||(t[2]=(...o)=>e.hoverPlay&&e.hoverPlay(...o))},[e.icon?(Ue(),jt(n,{key:0,"custom-icon":e.icon,type:e.type},null,8,["custom-icon","type"])):Bo("v-if",!0),_s("div",{role:e.accessibility.toastRole||"alert",class:Hn(e.bodyClasses)},[typeof e.content=="string"?(Ue(),qt(tt,{key:0},[Bi(xa(e.content),1)],2112)):(Ue(),jt(Ua(e.getVueComponentFromObj(e.content)),Hi({key:1,"toast-id":e.id},e.hasProp(e.content,"props")?e.content.props:{},Hg(e.hasProp(e.content,"listeners")?e.content.listeners:{}),{onCloseToast:e.closeToast}),null,16,["toast-id","onCloseToast"]))],10,qw),e.closeButton?(Ue(),jt(s,{key:1,component:e.closeButton,"class-names":e.closeButtonClassName,"show-on-hover":e.showCloseButtonOnHover,"aria-label":e.accessibility.closeButtonLabel,onClick:lb(e.closeToast,["stop"])},null,8,["component","class-names","show-on-hover","aria-label","onClick"])):Bo("v-if",!0),e.timeout?(Ue(),jt(i,{key:2,"is-running":e.isRunning,"hide-progress-bar":e.hideProgressBar,timeout:e.timeout,onCloseToast:e.timeoutHandler},null,8,["is-running","hide-progress-bar","timeout","onCloseToast"])):Bo("v-if",!0)],38)}Oh.render=Ww;var zw=Oh,xh=dn({name:"VtTransition",props:Cn.TRANSITION,emits:["leave"],methods:{hasProp:un,leave(e){e instanceof HTMLElement&&(e.style.left=e.offsetLeft+"px",e.style.top=e.offsetTop+"px",e.style.width=getComputedStyle(e).width,e.style.position="absolute")}}});function Kw(e,t){return Ue(),jt(eb,{tag:"div","enter-active-class":e.transition.enter?e.transition.enter:`${e.transition}-enter-active`,"move-class":e.transition.move?e.transition.move:`${e.transition}-move`,"leave-active-class":e.transition.leave?e.transition.leave:`${e.transition}-leave-active`,onLeave:e.leave},{default:Ir(()=>[Bg(e.$slots,"default")]),_:3},8,["enter-active-class","move-class","leave-active-class","onLeave"])}xh.render=Kw;var Gw=xh,Rh=dn({name:"VueToastification",devtools:{hide:!0},components:{Toast:zw,VtTransition:Gw},props:Object.assign({},Cn.CORE_TOAST,Cn.CONTAINER,Cn.TRANSITION),data(){return{count:0,positions:Object.values(Pi),toasts:{},defaults:{}}},computed:{toastArray(){return Object.values(this.toasts)},filteredToasts(){return this.defaults.filterToasts(this.toastArray)}},beforeMount(){const e=this.eventBus;e.on(At.ADD,this.addToast),e.on(At.CLEAR,this.clearToasts),e.on(At.DISMISS,this.dismissToast),e.on(At.UPDATE,this.updateToast),e.on(At.UPDATE_DEFAULTS,this.updateDefaults),this.defaults=this.$props},mounted(){this.setup(this.container)},methods:{async setup(e){Yi(e)&&(e=await e()),fw(this.$el),e.appendChild(this.$el)},setToast(e){ls(e.id)||(this.toasts[e.id]=e)},addToast(e){e.content=dw(e.content);const t=Object.assign({},this.defaults,e.type&&this.defaults.toastDefaults&&this.defaults.toastDefaults[e.type],e),n=this.defaults.filterBeforeCreate(t,this.toastArray);n&&this.setToast(n)},dismissToast(e){const t=this.toasts[e];!ls(t)&&!ls(t.onClose)&&t.onClose(),delete this.toasts[e]},clearToasts(){Object.keys(this.toasts).forEach(e=>{this.dismissToast(e)})},getPositionToasts(e){const t=this.filteredToasts.filter(n=>n.position===e).slice(0,this.defaults.maxToasts);return this.defaults.newestOnTop?t.reverse():t},updateDefaults(e){ls(e.container)||this.setup(e.container),this.defaults=Object.assign({},this.defaults,e)},updateToast({id:e,options:t,create:n}){this.toasts[e]?(t.timeout&&t.timeout===this.toasts[e].timeout&&t.timeout++,this.setToast(Object.assign({},this.toasts[e],t))):n&&this.addToast(Object.assign({},{id:e},t))},getClasses(e){return[`${Wt}__container`,e].concat(this.defaults.containerClassName)}}});function Jw(e,t){const n=cr("Toast"),s=cr("VtTransition");return Ue(),qt("div",null,[(Ue(!0),qt(tt,null,jc(e.positions,i=>(Ue(),qt("div",{key:i},[nt(s,{transition:e.defaults.transition,class:Hn(e.getClasses(i))},{default:Ir(()=>[(Ue(!0),qt(tt,null,jc(e.getPositionToasts(i),o=>(Ue(),jt(n,Hi({key:o.id},o),null,16))),128))]),_:2},1032,["transition","class"])]))),128))])}Rh.render=Jw;var Xw=Rh,tf=(e={},t=!0)=>{const n=e.eventBus=e.eventBus||new Za;t&&Pr(()=>{const o=Td(Xw,hh({},e)),a=o.mount(document.createElement("div")),c=e.onMounted;if(ls(c)||c(a,o),e.shareAppContext){const f=e.shareAppContext;f===!0?console.warn(`[${Wt}] App to share context with was not provided.`):(o._context.components=f._context.components,o._context.directives=f._context.directives,o._context.mixins=f._context.mixins,o._context.provides=f._context.provides,o.config.globalProperties=f.config.globalProperties)}});const s=(o,a)=>{const c=Object.assign({},{id:uw(),type:Tt.DEFAULT},a,{content:o});return n.emit(At.ADD,c),c.id};s.clear=()=>n.emit(At.CLEAR,void 0),s.updateDefaults=o=>{n.emit(At.UPDATE_DEFAULTS,o)},s.dismiss=o=>{n.emit(At.DISMISS,o)};function i(o,{content:a,options:c},f=!1){const p=Object.assign({},c,{content:a});n.emit(At.UPDATE,{id:o,options:p,create:f})}return s.update=i,s.success=(o,a)=>s(o,Object.assign({},a,{type:Tt.SUCCESS})),s.info=(o,a)=>s(o,Object.assign({},a,{type:Tt.INFO})),s.error=(o,a)=>s(o,Object.assign({},a,{type:Tt.ERROR})),s.warning=(o,a)=>s(o,Object.assign({},a,{type:Tt.WARNING})),s},Qw=()=>{const e=()=>console.warn(`[${Wt}] This plugin does not support SSR!`);return new Proxy(e,{get(){return e}})};function Ph(e){return hw()?pw(e)?tf({eventBus:e},!1):tf(e,!0):Qw()}var Ih=Symbol("VueToastification"),Lh=new Za,Yw=(e,t)=>{(t==null?void 0:t.shareAppContext)===!0&&(t.shareAppContext=e);const n=Ph(hh({eventBus:Lh},t));e.provide(Ih,n)},d0=e=>{const t=hd()?xt(Ih,void 0):void 0;return t||Ph(Lh)},Zw=Yw,e0=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function h0(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var t0={exports:{}};/*! + * Bootstrap v5.3.3 (https://getbootstrap.com/) + * Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */(function(e,t){(function(n,s){e.exports=s()})(e0,function(){const n=new Map,s={set(u,r,l){n.has(u)||n.set(u,new Map);const h=n.get(u);h.has(r)||h.size===0?h.set(r,l):console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(h.keys())[0]}.`)},get:(u,r)=>n.has(u)&&n.get(u).get(r)||null,remove(u,r){if(!n.has(u))return;const l=n.get(u);l.delete(r),l.size===0&&n.delete(u)}},i="transitionend",o=u=>(u&&window.CSS&&window.CSS.escape&&(u=u.replace(/#([^\s"#']+)/g,(r,l)=>`#${CSS.escape(l)}`)),u),a=u=>{u.dispatchEvent(new Event(i))},c=u=>!(!u||typeof u!="object")&&(u.jquery!==void 0&&(u=u[0]),u.nodeType!==void 0),f=u=>c(u)?u.jquery?u[0]:u:typeof u=="string"&&u.length>0?document.querySelector(o(u)):null,p=u=>{if(!c(u)||u.getClientRects().length===0)return!1;const r=getComputedStyle(u).getPropertyValue("visibility")==="visible",l=u.closest("details:not([open])");if(!l)return r;if(l!==u){const h=u.closest("summary");if(h&&h.parentNode!==l||h===null)return!1}return r},d=u=>!u||u.nodeType!==Node.ELEMENT_NODE||!!u.classList.contains("disabled")||(u.disabled!==void 0?u.disabled:u.hasAttribute("disabled")&&u.getAttribute("disabled")!=="false"),m=u=>{if(!document.documentElement.attachShadow)return null;if(typeof u.getRootNode=="function"){const r=u.getRootNode();return r instanceof ShadowRoot?r:null}return u instanceof ShadowRoot?u:u.parentNode?m(u.parentNode):null},b=()=>{},w=u=>{u.offsetHeight},C=()=>window.jQuery&&!document.body.hasAttribute("data-bs-no-jquery")?window.jQuery:null,P=[],R=()=>document.documentElement.dir==="rtl",$=u=>{var r;r=()=>{const l=C();if(l){const h=u.NAME,y=l.fn[h];l.fn[h]=u.jQueryInterface,l.fn[h].Constructor=u,l.fn[h].noConflict=()=>(l.fn[h]=y,u.jQueryInterface)}},document.readyState==="loading"?(P.length||document.addEventListener("DOMContentLoaded",()=>{for(const l of P)l()}),P.push(r)):r()},N=(u,r=[],l=u)=>typeof u=="function"?u(...r):l,B=(u,r,l=!0)=>{if(!l)return void N(u);const h=(S=>{if(!S)return 0;let{transitionDuration:L,transitionDelay:j}=window.getComputedStyle(S);const J=Number.parseFloat(L),X=Number.parseFloat(j);return J||X?(L=L.split(",")[0],j=j.split(",")[0],1e3*(Number.parseFloat(L)+Number.parseFloat(j))):0})(r)+5;let y=!1;const v=({target:S})=>{S===r&&(y=!0,r.removeEventListener(i,v),N(u))};r.addEventListener(i,v),setTimeout(()=>{y||a(r)},h)},H=(u,r,l,h)=>{const y=u.length;let v=u.indexOf(r);return v===-1?!l&&h?u[y-1]:u[0]:(v+=l?1:-1,h&&(v=(v+y)%y),u[Math.max(0,Math.min(v,y-1))])},Y=/[^.]*(?=\..*)\.|.*/,ge=/\..*/,le=/::\d+$/,te={};let q=1;const oe={mouseenter:"mouseover",mouseleave:"mouseout"},ve=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function G(u,r){return r&&`${r}::${q++}`||u.uidEvent||q++}function be(u){const r=G(u);return u.uidEvent=r,te[r]=te[r]||{},te[r]}function He(u,r,l=null){return Object.values(u).find(h=>h.callable===r&&h.delegationSelector===l)}function st(u,r,l){const h=typeof r=="string",y=h?l:r||l;let v=Pt(u);return ve.has(v)||(v=u),[h,y,v]}function Oe(u,r,l,h,y){if(typeof r!="string"||!u)return;let[v,S,L]=st(r,l,h);r in oe&&(S=(ce=>function(ie){if(!ie.relatedTarget||ie.relatedTarget!==ie.delegateTarget&&!ie.delegateTarget.contains(ie.relatedTarget))return ce.call(this,ie)})(S));const j=be(u),J=j[L]||(j[L]={}),X=He(J,S,v?l:null);if(X)return void(X.oneOff=X.oneOff&&y);const K=G(S,r.replace(Y,"")),he=v?function(se,ce,ie){return function ue(Le){const Fe=se.querySelectorAll(ce);for(let{target:_e}=Le;_e&&_e!==this;_e=_e.parentNode)for(const Ae of Fe)if(Ae===_e)return _t(Le,{delegateTarget:_e}),ue.oneOff&&I.off(se,Le.type,ce,ie),ie.apply(_e,[Le])}}(u,l,S):function(se,ce){return function ie(ue){return _t(ue,{delegateTarget:se}),ie.oneOff&&I.off(se,ue.type,ce),ce.apply(se,[ue])}}(u,S);he.delegationSelector=v?l:null,he.callable=S,he.oneOff=y,he.uidEvent=K,J[K]=he,u.addEventListener(L,he,v)}function ae(u,r,l,h,y){const v=He(r[l],h,y);v&&(u.removeEventListener(l,v,!!y),delete r[l][v.uidEvent])}function Se(u,r,l,h){const y=r[l]||{};for(const[v,S]of Object.entries(y))v.includes(h)&&ae(u,r,l,S.callable,S.delegationSelector)}function Pt(u){return u=u.replace(ge,""),oe[u]||u}const I={on(u,r,l,h){Oe(u,r,l,h,!1)},one(u,r,l,h){Oe(u,r,l,h,!0)},off(u,r,l,h){if(typeof r!="string"||!u)return;const[y,v,S]=st(r,l,h),L=S!==r,j=be(u),J=j[S]||{},X=r.startsWith(".");if(v===void 0){if(X)for(const K of Object.keys(j))Se(u,j,K,r.slice(1));for(const[K,he]of Object.entries(J)){const se=K.replace(le,"");L&&!r.includes(se)||ae(u,j,S,he.callable,he.delegationSelector)}}else{if(!Object.keys(J).length)return;ae(u,j,S,v,y?l:null)}},trigger(u,r,l){if(typeof r!="string"||!u)return null;const h=C();let y=null,v=!0,S=!0,L=!1;r!==Pt(r)&&h&&(y=h.Event(r,l),h(u).trigger(y),v=!y.isPropagationStopped(),S=!y.isImmediatePropagationStopped(),L=y.isDefaultPrevented());const j=_t(new Event(r,{bubbles:v,cancelable:!0}),l);return L&&j.preventDefault(),S&&u.dispatchEvent(j),j.defaultPrevented&&y&&y.preventDefault(),j}};function _t(u,r={}){for(const[l,h]of Object.entries(r))try{u[l]=h}catch{Object.defineProperty(u,l,{configurable:!0,get:()=>h})}return u}function et(u){if(u==="true")return!0;if(u==="false")return!1;if(u===Number(u).toString())return Number(u);if(u===""||u==="null")return null;if(typeof u!="string")return u;try{return JSON.parse(decodeURIComponent(u))}catch{return u}}function Yt(u){return u.replace(/[A-Z]/g,r=>`-${r.toLowerCase()}`)}const rt={setDataAttribute(u,r,l){u.setAttribute(`data-bs-${Yt(r)}`,l)},removeDataAttribute(u,r){u.removeAttribute(`data-bs-${Yt(r)}`)},getDataAttributes(u){if(!u)return{};const r={},l=Object.keys(u.dataset).filter(h=>h.startsWith("bs")&&!h.startsWith("bsConfig"));for(const h of l){let y=h.replace(/^bs/,"");y=y.charAt(0).toLowerCase()+y.slice(1,y.length),r[y]=et(u.dataset[h])}return r},getDataAttribute:(u,r)=>et(u.getAttribute(`data-bs-${Yt(r)}`))};class Zt{static get Default(){return{}}static get DefaultType(){return{}}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}_getConfig(r){return r=this._mergeConfigObj(r),r=this._configAfterMerge(r),this._typeCheckConfig(r),r}_configAfterMerge(r){return r}_mergeConfigObj(r,l){const h=c(l)?rt.getDataAttribute(l,"config"):{};return{...this.constructor.Default,...typeof h=="object"?h:{},...c(l)?rt.getDataAttributes(l):{},...typeof r=="object"?r:{}}}_typeCheckConfig(r,l=this.constructor.DefaultType){for(const[y,v]of Object.entries(l)){const S=r[y],L=c(S)?"element":(h=S)==null?`${h}`:Object.prototype.toString.call(h).match(/\s([a-z]+)/i)[1].toLowerCase();if(!new RegExp(v).test(L))throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${y}" provided type "${L}" but expected type "${v}".`)}var h}}class Be extends Zt{constructor(r,l){super(),(r=f(r))&&(this._element=r,this._config=this._getConfig(l),s.set(this._element,this.constructor.DATA_KEY,this))}dispose(){s.remove(this._element,this.constructor.DATA_KEY),I.off(this._element,this.constructor.EVENT_KEY);for(const r of Object.getOwnPropertyNames(this))this[r]=null}_queueCallback(r,l,h=!0){B(r,l,h)}_getConfig(r){return r=this._mergeConfigObj(r,this._element),r=this._configAfterMerge(r),this._typeCheckConfig(r),r}static getInstance(r){return s.get(f(r),this.DATA_KEY)}static getOrCreateInstance(r,l={}){return this.getInstance(r)||new this(r,typeof l=="object"?l:null)}static get VERSION(){return"5.3.3"}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}static eventName(r){return`${r}${this.EVENT_KEY}`}}const x=u=>{let r=u.getAttribute("data-bs-target");if(!r||r==="#"){let l=u.getAttribute("href");if(!l||!l.includes("#")&&!l.startsWith("."))return null;l.includes("#")&&!l.startsWith("#")&&(l=`#${l.split("#")[1]}`),r=l&&l!=="#"?l.trim():null}return r?r.split(",").map(l=>o(l)).join(","):null},A={find:(u,r=document.documentElement)=>[].concat(...Element.prototype.querySelectorAll.call(r,u)),findOne:(u,r=document.documentElement)=>Element.prototype.querySelector.call(r,u),children:(u,r)=>[].concat(...u.children).filter(l=>l.matches(r)),parents(u,r){const l=[];let h=u.parentNode.closest(r);for(;h;)l.push(h),h=h.parentNode.closest(r);return l},prev(u,r){let l=u.previousElementSibling;for(;l;){if(l.matches(r))return[l];l=l.previousElementSibling}return[]},next(u,r){let l=u.nextElementSibling;for(;l;){if(l.matches(r))return[l];l=l.nextElementSibling}return[]},focusableChildren(u){const r=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map(l=>`${l}:not([tabindex^="-"])`).join(",");return this.find(r,u).filter(l=>!d(l)&&p(l))},getSelectorFromElement(u){const r=x(u);return r&&A.findOne(r)?r:null},getElementFromSelector(u){const r=x(u);return r?A.findOne(r):null},getMultipleElementsFromSelector(u){const r=x(u);return r?A.find(r):[]}},V=(u,r="hide")=>{const l=`click.dismiss${u.EVENT_KEY}`,h=u.NAME;I.on(document,l,`[data-bs-dismiss="${h}"]`,function(y){if(["A","AREA"].includes(this.tagName)&&y.preventDefault(),d(this))return;const v=A.getElementFromSelector(this)||this.closest(`.${h}`);u.getOrCreateInstance(v)[r]()})},Z=".bs.alert",Te=`close${Z}`,je=`closed${Z}`;class g extends Be{static get NAME(){return"alert"}close(){if(I.trigger(this._element,Te).defaultPrevented)return;this._element.classList.remove("show");const r=this._element.classList.contains("fade");this._queueCallback(()=>this._destroyElement(),this._element,r)}_destroyElement(){this._element.remove(),I.trigger(this._element,je),this.dispose()}static jQueryInterface(r){return this.each(function(){const l=g.getOrCreateInstance(this);if(typeof r=="string"){if(l[r]===void 0||r.startsWith("_")||r==="constructor")throw new TypeError(`No method named "${r}"`);l[r](this)}})}}V(g,"close"),$(g);const _='[data-bs-toggle="button"]';class E extends Be{static get NAME(){return"button"}toggle(){this._element.setAttribute("aria-pressed",this._element.classList.toggle("active"))}static jQueryInterface(r){return this.each(function(){const l=E.getOrCreateInstance(this);r==="toggle"&&l[r]()})}}I.on(document,"click.bs.button.data-api",_,u=>{u.preventDefault();const r=u.target.closest(_);E.getOrCreateInstance(r).toggle()}),$(E);const D=".bs.swipe",O=`touchstart${D}`,k=`touchmove${D}`,W=`touchend${D}`,U=`pointerdown${D}`,F=`pointerup${D}`,M={endCallback:null,leftCallback:null,rightCallback:null},ne={endCallback:"(function|null)",leftCallback:"(function|null)",rightCallback:"(function|null)"};class z extends Zt{constructor(r,l){super(),this._element=r,r&&z.isSupported()&&(this._config=this._getConfig(l),this._deltaX=0,this._supportPointerEvents=!!window.PointerEvent,this._initEvents())}static get Default(){return M}static get DefaultType(){return ne}static get NAME(){return"swipe"}dispose(){I.off(this._element,D)}_start(r){this._supportPointerEvents?this._eventIsPointerPenTouch(r)&&(this._deltaX=r.clientX):this._deltaX=r.touches[0].clientX}_end(r){this._eventIsPointerPenTouch(r)&&(this._deltaX=r.clientX-this._deltaX),this._handleSwipe(),N(this._config.endCallback)}_move(r){this._deltaX=r.touches&&r.touches.length>1?0:r.touches[0].clientX-this._deltaX}_handleSwipe(){const r=Math.abs(this._deltaX);if(r<=40)return;const l=r/this._deltaX;this._deltaX=0,l&&N(l>0?this._config.rightCallback:this._config.leftCallback)}_initEvents(){this._supportPointerEvents?(I.on(this._element,U,r=>this._start(r)),I.on(this._element,F,r=>this._end(r)),this._element.classList.add("pointer-event")):(I.on(this._element,O,r=>this._start(r)),I.on(this._element,k,r=>this._move(r)),I.on(this._element,W,r=>this._end(r)))}_eventIsPointerPenTouch(r){return this._supportPointerEvents&&(r.pointerType==="pen"||r.pointerType==="touch")}static isSupported(){return"ontouchstart"in document.documentElement||navigator.maxTouchPoints>0}}const Q=".bs.carousel",re=".data-api",pe="next",Ce="prev",ye="left",Xe="right",Qe=`slide${Q}`,at=`slid${Q}`,lt=`keydown${Q}`,Wn=`mouseenter${Q}`,$r=`mouseleave${Q}`,ct=`dragstart${Q}`,It=`load${Q}${re}`,Fr=`click${Q}${re}`,el="carousel",jr="active",tl=".active",nl=".carousel-item",Dh=tl+nl,Nh={ArrowLeft:Xe,ArrowRight:ye},kh={interval:5e3,keyboard:!0,pause:"hover",ride:!1,touch:!0,wrap:!0},Mh={interval:"(number|boolean)",keyboard:"boolean",pause:"(string|boolean)",ride:"(boolean|string)",touch:"boolean",wrap:"boolean"};class bs extends Be{constructor(r,l){super(r,l),this._interval=null,this._activeElement=null,this._isSliding=!1,this.touchTimeout=null,this._swipeHelper=null,this._indicatorsElement=A.findOne(".carousel-indicators",this._element),this._addEventListeners(),this._config.ride===el&&this.cycle()}static get Default(){return kh}static get DefaultType(){return Mh}static get NAME(){return"carousel"}next(){this._slide(pe)}nextWhenVisible(){!document.hidden&&p(this._element)&&this.next()}prev(){this._slide(Ce)}pause(){this._isSliding&&a(this._element),this._clearInterval()}cycle(){this._clearInterval(),this._updateInterval(),this._interval=setInterval(()=>this.nextWhenVisible(),this._config.interval)}_maybeEnableCycle(){this._config.ride&&(this._isSliding?I.one(this._element,at,()=>this.cycle()):this.cycle())}to(r){const l=this._getItems();if(r>l.length-1||r<0)return;if(this._isSliding)return void I.one(this._element,at,()=>this.to(r));const h=this._getItemIndex(this._getActive());if(h===r)return;const y=r>h?pe:Ce;this._slide(y,l[r])}dispose(){this._swipeHelper&&this._swipeHelper.dispose(),super.dispose()}_configAfterMerge(r){return r.defaultInterval=r.interval,r}_addEventListeners(){this._config.keyboard&&I.on(this._element,lt,r=>this._keydown(r)),this._config.pause==="hover"&&(I.on(this._element,Wn,()=>this.pause()),I.on(this._element,$r,()=>this._maybeEnableCycle())),this._config.touch&&z.isSupported()&&this._addTouchEventListeners()}_addTouchEventListeners(){for(const l of A.find(".carousel-item img",this._element))I.on(l,ct,h=>h.preventDefault());const r={leftCallback:()=>this._slide(this._directionToOrder(ye)),rightCallback:()=>this._slide(this._directionToOrder(Xe)),endCallback:()=>{this._config.pause==="hover"&&(this.pause(),this.touchTimeout&&clearTimeout(this.touchTimeout),this.touchTimeout=setTimeout(()=>this._maybeEnableCycle(),500+this._config.interval))}};this._swipeHelper=new z(this._element,r)}_keydown(r){if(/input|textarea/i.test(r.target.tagName))return;const l=Nh[r.key];l&&(r.preventDefault(),this._slide(this._directionToOrder(l)))}_getItemIndex(r){return this._getItems().indexOf(r)}_setActiveIndicatorElement(r){if(!this._indicatorsElement)return;const l=A.findOne(tl,this._indicatorsElement);l.classList.remove(jr),l.removeAttribute("aria-current");const h=A.findOne(`[data-bs-slide-to="${r}"]`,this._indicatorsElement);h&&(h.classList.add(jr),h.setAttribute("aria-current","true"))}_updateInterval(){const r=this._activeElement||this._getActive();if(!r)return;const l=Number.parseInt(r.getAttribute("data-bs-interval"),10);this._config.interval=l||this._config.defaultInterval}_slide(r,l=null){if(this._isSliding)return;const h=this._getActive(),y=r===pe,v=l||H(this._getItems(),h,y,this._config.wrap);if(v===h)return;const S=this._getItemIndex(v),L=K=>I.trigger(this._element,K,{relatedTarget:v,direction:this._orderToDirection(r),from:this._getItemIndex(h),to:S});if(L(Qe).defaultPrevented||!h||!v)return;const j=!!this._interval;this.pause(),this._isSliding=!0,this._setActiveIndicatorElement(S),this._activeElement=v;const J=y?"carousel-item-start":"carousel-item-end",X=y?"carousel-item-next":"carousel-item-prev";v.classList.add(X),w(v),h.classList.add(J),v.classList.add(J),this._queueCallback(()=>{v.classList.remove(J,X),v.classList.add(jr),h.classList.remove(jr,X,J),this._isSliding=!1,L(at)},h,this._isAnimated()),j&&this.cycle()}_isAnimated(){return this._element.classList.contains("slide")}_getActive(){return A.findOne(Dh,this._element)}_getItems(){return A.find(nl,this._element)}_clearInterval(){this._interval&&(clearInterval(this._interval),this._interval=null)}_directionToOrder(r){return R()?r===ye?Ce:pe:r===ye?pe:Ce}_orderToDirection(r){return R()?r===Ce?ye:Xe:r===Ce?Xe:ye}static jQueryInterface(r){return this.each(function(){const l=bs.getOrCreateInstance(this,r);if(typeof r!="number"){if(typeof r=="string"){if(l[r]===void 0||r.startsWith("_")||r==="constructor")throw new TypeError(`No method named "${r}"`);l[r]()}}else l.to(r)})}}I.on(document,Fr,"[data-bs-slide], [data-bs-slide-to]",function(u){const r=A.getElementFromSelector(this);if(!r||!r.classList.contains(el))return;u.preventDefault();const l=bs.getOrCreateInstance(r),h=this.getAttribute("data-bs-slide-to");return h?(l.to(h),void l._maybeEnableCycle()):rt.getDataAttribute(this,"slide")==="next"?(l.next(),void l._maybeEnableCycle()):(l.prev(),void l._maybeEnableCycle())}),I.on(window,It,()=>{const u=A.find('[data-bs-ride="carousel"]');for(const r of u)bs.getOrCreateInstance(r)}),$(bs);const Gs=".bs.collapse",$h=`show${Gs}`,Fh=`shown${Gs}`,jh=`hide${Gs}`,Bh=`hidden${Gs}`,Hh=`click${Gs}.data-api`,eo="show",ys="collapse",Br="collapsing",Uh=`:scope .${ys} .${ys}`,to='[data-bs-toggle="collapse"]',Vh={parent:null,toggle:!0},qh={parent:"(null|element)",toggle:"boolean"};class vs extends Be{constructor(r,l){super(r,l),this._isTransitioning=!1,this._triggerArray=[];const h=A.find(to);for(const y of h){const v=A.getSelectorFromElement(y),S=A.find(v).filter(L=>L===this._element);v!==null&&S.length&&this._triggerArray.push(y)}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return Vh}static get DefaultType(){return qh}static get NAME(){return"collapse"}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let r=[];if(this._config.parent&&(r=this._getFirstLevelChildren(".collapse.show, .collapse.collapsing").filter(y=>y!==this._element).map(y=>vs.getOrCreateInstance(y,{toggle:!1}))),r.length&&r[0]._isTransitioning||I.trigger(this._element,$h).defaultPrevented)return;for(const y of r)y.hide();const l=this._getDimension();this._element.classList.remove(ys),this._element.classList.add(Br),this._element.style[l]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;const h=`scroll${l[0].toUpperCase()+l.slice(1)}`;this._queueCallback(()=>{this._isTransitioning=!1,this._element.classList.remove(Br),this._element.classList.add(ys,eo),this._element.style[l]="",I.trigger(this._element,Fh)},this._element,!0),this._element.style[l]=`${this._element[h]}px`}hide(){if(this._isTransitioning||!this._isShown()||I.trigger(this._element,jh).defaultPrevented)return;const r=this._getDimension();this._element.style[r]=`${this._element.getBoundingClientRect()[r]}px`,w(this._element),this._element.classList.add(Br),this._element.classList.remove(ys,eo);for(const l of this._triggerArray){const h=A.getElementFromSelector(l);h&&!this._isShown(h)&&this._addAriaAndCollapsedClass([l],!1)}this._isTransitioning=!0,this._element.style[r]="",this._queueCallback(()=>{this._isTransitioning=!1,this._element.classList.remove(Br),this._element.classList.add(ys),I.trigger(this._element,Bh)},this._element,!0)}_isShown(r=this._element){return r.classList.contains(eo)}_configAfterMerge(r){return r.toggle=!!r.toggle,r.parent=f(r.parent),r}_getDimension(){return this._element.classList.contains("collapse-horizontal")?"width":"height"}_initializeChildren(){if(!this._config.parent)return;const r=this._getFirstLevelChildren(to);for(const l of r){const h=A.getElementFromSelector(l);h&&this._addAriaAndCollapsedClass([l],this._isShown(h))}}_getFirstLevelChildren(r){const l=A.find(Uh,this._config.parent);return A.find(r,this._config.parent).filter(h=>!l.includes(h))}_addAriaAndCollapsedClass(r,l){if(r.length)for(const h of r)h.classList.toggle("collapsed",!l),h.setAttribute("aria-expanded",l)}static jQueryInterface(r){const l={};return typeof r=="string"&&/show|hide/.test(r)&&(l.toggle=!1),this.each(function(){const h=vs.getOrCreateInstance(this,l);if(typeof r=="string"){if(h[r]===void 0)throw new TypeError(`No method named "${r}"`);h[r]()}})}}I.on(document,Hh,to,function(u){(u.target.tagName==="A"||u.delegateTarget&&u.delegateTarget.tagName==="A")&&u.preventDefault();for(const r of A.getMultipleElementsFromSelector(this))vs.getOrCreateInstance(r,{toggle:!1}).toggle()}),$(vs);var ut="top",vt="bottom",wt="right",ft="left",Hr="auto",ws=[ut,vt,wt,ft],zn="start",Es="end",sl="clippingParents",no="viewport",Cs="popper",rl="reference",so=ws.reduce(function(u,r){return u.concat([r+"-"+zn,r+"-"+Es])},[]),ro=[].concat(ws,[Hr]).reduce(function(u,r){return u.concat([r,r+"-"+zn,r+"-"+Es])},[]),il="beforeRead",ol="read",al="afterRead",ll="beforeMain",cl="main",ul="afterMain",fl="beforeWrite",dl="write",hl="afterWrite",pl=[il,ol,al,ll,cl,ul,fl,dl,hl];function en(u){return u?(u.nodeName||"").toLowerCase():null}function Et(u){if(u==null)return window;if(u.toString()!=="[object Window]"){var r=u.ownerDocument;return r&&r.defaultView||window}return u}function Kn(u){return u instanceof Et(u).Element||u instanceof Element}function Lt(u){return u instanceof Et(u).HTMLElement||u instanceof HTMLElement}function io(u){return typeof ShadowRoot<"u"&&(u instanceof Et(u).ShadowRoot||u instanceof ShadowRoot)}const oo={name:"applyStyles",enabled:!0,phase:"write",fn:function(u){var r=u.state;Object.keys(r.elements).forEach(function(l){var h=r.styles[l]||{},y=r.attributes[l]||{},v=r.elements[l];Lt(v)&&en(v)&&(Object.assign(v.style,h),Object.keys(y).forEach(function(S){var L=y[S];L===!1?v.removeAttribute(S):v.setAttribute(S,L===!0?"":L)}))})},effect:function(u){var r=u.state,l={popper:{position:r.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(r.elements.popper.style,l.popper),r.styles=l,r.elements.arrow&&Object.assign(r.elements.arrow.style,l.arrow),function(){Object.keys(r.elements).forEach(function(h){var y=r.elements[h],v=r.attributes[h]||{},S=Object.keys(r.styles.hasOwnProperty(h)?r.styles[h]:l[h]).reduce(function(L,j){return L[j]="",L},{});Lt(y)&&en(y)&&(Object.assign(y.style,S),Object.keys(v).forEach(function(L){y.removeAttribute(L)}))})}},requires:["computeStyles"]};function tn(u){return u.split("-")[0]}var Gn=Math.max,Ur=Math.min,Ss=Math.round;function ao(){var u=navigator.userAgentData;return u!=null&&u.brands&&Array.isArray(u.brands)?u.brands.map(function(r){return r.brand+"/"+r.version}).join(" "):navigator.userAgent}function ml(){return!/^((?!chrome|android).)*safari/i.test(ao())}function Ts(u,r,l){r===void 0&&(r=!1),l===void 0&&(l=!1);var h=u.getBoundingClientRect(),y=1,v=1;r&&Lt(u)&&(y=u.offsetWidth>0&&Ss(h.width)/u.offsetWidth||1,v=u.offsetHeight>0&&Ss(h.height)/u.offsetHeight||1);var S=(Kn(u)?Et(u):window).visualViewport,L=!ml()&&l,j=(h.left+(L&&S?S.offsetLeft:0))/y,J=(h.top+(L&&S?S.offsetTop:0))/v,X=h.width/y,K=h.height/v;return{width:X,height:K,top:J,right:j+X,bottom:J+K,left:j,x:j,y:J}}function lo(u){var r=Ts(u),l=u.offsetWidth,h=u.offsetHeight;return Math.abs(r.width-l)<=1&&(l=r.width),Math.abs(r.height-h)<=1&&(h=r.height),{x:u.offsetLeft,y:u.offsetTop,width:l,height:h}}function gl(u,r){var l=r.getRootNode&&r.getRootNode();if(u.contains(r))return!0;if(l&&io(l)){var h=r;do{if(h&&u.isSameNode(h))return!0;h=h.parentNode||h.host}while(h)}return!1}function hn(u){return Et(u).getComputedStyle(u)}function Wh(u){return["table","td","th"].indexOf(en(u))>=0}function An(u){return((Kn(u)?u.ownerDocument:u.document)||window.document).documentElement}function Vr(u){return en(u)==="html"?u:u.assignedSlot||u.parentNode||(io(u)?u.host:null)||An(u)}function _l(u){return Lt(u)&&hn(u).position!=="fixed"?u.offsetParent:null}function Js(u){for(var r=Et(u),l=_l(u);l&&Wh(l)&&hn(l).position==="static";)l=_l(l);return l&&(en(l)==="html"||en(l)==="body"&&hn(l).position==="static")?r:l||function(h){var y=/firefox/i.test(ao());if(/Trident/i.test(ao())&&Lt(h)&&hn(h).position==="fixed")return null;var v=Vr(h);for(io(v)&&(v=v.host);Lt(v)&&["html","body"].indexOf(en(v))<0;){var S=hn(v);if(S.transform!=="none"||S.perspective!=="none"||S.contain==="paint"||["transform","perspective"].indexOf(S.willChange)!==-1||y&&S.willChange==="filter"||y&&S.filter&&S.filter!=="none")return v;v=v.parentNode}return null}(u)||r}function co(u){return["top","bottom"].indexOf(u)>=0?"x":"y"}function Xs(u,r,l){return Gn(u,Ur(r,l))}function bl(u){return Object.assign({},{top:0,right:0,bottom:0,left:0},u)}function yl(u,r){return r.reduce(function(l,h){return l[h]=u,l},{})}const vl={name:"arrow",enabled:!0,phase:"main",fn:function(u){var r,l=u.state,h=u.name,y=u.options,v=l.elements.arrow,S=l.modifiersData.popperOffsets,L=tn(l.placement),j=co(L),J=[ft,wt].indexOf(L)>=0?"height":"width";if(v&&S){var X=function(De,Re){return bl(typeof(De=typeof De=="function"?De(Object.assign({},Re.rects,{placement:Re.placement})):De)!="number"?De:yl(De,ws))}(y.padding,l),K=lo(v),he=j==="y"?ut:ft,se=j==="y"?vt:wt,ce=l.rects.reference[J]+l.rects.reference[j]-S[j]-l.rects.popper[J],ie=S[j]-l.rects.reference[j],ue=Js(v),Le=ue?j==="y"?ue.clientHeight||0:ue.clientWidth||0:0,Fe=ce/2-ie/2,_e=X[he],Ae=Le-K[J]-X[se],me=Le/2-K[J]/2+Fe,we=Xs(_e,me,Ae),xe=j;l.modifiersData[h]=((r={})[xe]=we,r.centerOffset=we-me,r)}},effect:function(u){var r=u.state,l=u.options.element,h=l===void 0?"[data-popper-arrow]":l;h!=null&&(typeof h!="string"||(h=r.elements.popper.querySelector(h)))&&gl(r.elements.popper,h)&&(r.elements.arrow=h)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function As(u){return u.split("-")[1]}var zh={top:"auto",right:"auto",bottom:"auto",left:"auto"};function wl(u){var r,l=u.popper,h=u.popperRect,y=u.placement,v=u.variation,S=u.offsets,L=u.position,j=u.gpuAcceleration,J=u.adaptive,X=u.roundOffsets,K=u.isFixed,he=S.x,se=he===void 0?0:he,ce=S.y,ie=ce===void 0?0:ce,ue=typeof X=="function"?X({x:se,y:ie}):{x:se,y:ie};se=ue.x,ie=ue.y;var Le=S.hasOwnProperty("x"),Fe=S.hasOwnProperty("y"),_e=ft,Ae=ut,me=window;if(J){var we=Js(l),xe="clientHeight",De="clientWidth";we===Et(l)&&hn(we=An(l)).position!=="static"&&L==="absolute"&&(xe="scrollHeight",De="scrollWidth"),(y===ut||(y===ft||y===wt)&&v===Es)&&(Ae=vt,ie-=(K&&we===me&&me.visualViewport?me.visualViewport.height:we[xe])-h.height,ie*=j?1:-1),y!==ft&&(y!==ut&&y!==vt||v!==Es)||(_e=wt,se-=(K&&we===me&&me.visualViewport?me.visualViewport.width:we[De])-h.width,se*=j?1:-1)}var Re,We=Object.assign({position:L},J&&zh),Ct=X===!0?function(Ut,dt){var Nt=Ut.x,kt=Ut.y,Ve=dt.devicePixelRatio||1;return{x:Ss(Nt*Ve)/Ve||0,y:Ss(kt*Ve)/Ve||0}}({x:se,y:ie},Et(l)):{x:se,y:ie};return se=Ct.x,ie=Ct.y,j?Object.assign({},We,((Re={})[Ae]=Fe?"0":"",Re[_e]=Le?"0":"",Re.transform=(me.devicePixelRatio||1)<=1?"translate("+se+"px, "+ie+"px)":"translate3d("+se+"px, "+ie+"px, 0)",Re)):Object.assign({},We,((r={})[Ae]=Fe?ie+"px":"",r[_e]=Le?se+"px":"",r.transform="",r))}const uo={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(u){var r=u.state,l=u.options,h=l.gpuAcceleration,y=h===void 0||h,v=l.adaptive,S=v===void 0||v,L=l.roundOffsets,j=L===void 0||L,J={placement:tn(r.placement),variation:As(r.placement),popper:r.elements.popper,popperRect:r.rects.popper,gpuAcceleration:y,isFixed:r.options.strategy==="fixed"};r.modifiersData.popperOffsets!=null&&(r.styles.popper=Object.assign({},r.styles.popper,wl(Object.assign({},J,{offsets:r.modifiersData.popperOffsets,position:r.options.strategy,adaptive:S,roundOffsets:j})))),r.modifiersData.arrow!=null&&(r.styles.arrow=Object.assign({},r.styles.arrow,wl(Object.assign({},J,{offsets:r.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:j})))),r.attributes.popper=Object.assign({},r.attributes.popper,{"data-popper-placement":r.placement})},data:{}};var qr={passive:!0};const fo={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(u){var r=u.state,l=u.instance,h=u.options,y=h.scroll,v=y===void 0||y,S=h.resize,L=S===void 0||S,j=Et(r.elements.popper),J=[].concat(r.scrollParents.reference,r.scrollParents.popper);return v&&J.forEach(function(X){X.addEventListener("scroll",l.update,qr)}),L&&j.addEventListener("resize",l.update,qr),function(){v&&J.forEach(function(X){X.removeEventListener("scroll",l.update,qr)}),L&&j.removeEventListener("resize",l.update,qr)}},data:{}};var Kh={left:"right",right:"left",bottom:"top",top:"bottom"};function Wr(u){return u.replace(/left|right|bottom|top/g,function(r){return Kh[r]})}var Gh={start:"end",end:"start"};function El(u){return u.replace(/start|end/g,function(r){return Gh[r]})}function ho(u){var r=Et(u);return{scrollLeft:r.pageXOffset,scrollTop:r.pageYOffset}}function po(u){return Ts(An(u)).left+ho(u).scrollLeft}function mo(u){var r=hn(u),l=r.overflow,h=r.overflowX,y=r.overflowY;return/auto|scroll|overlay|hidden/.test(l+y+h)}function Cl(u){return["html","body","#document"].indexOf(en(u))>=0?u.ownerDocument.body:Lt(u)&&mo(u)?u:Cl(Vr(u))}function Qs(u,r){var l;r===void 0&&(r=[]);var h=Cl(u),y=h===((l=u.ownerDocument)==null?void 0:l.body),v=Et(h),S=y?[v].concat(v.visualViewport||[],mo(h)?h:[]):h,L=r.concat(S);return y?L:L.concat(Qs(Vr(S)))}function go(u){return Object.assign({},u,{left:u.x,top:u.y,right:u.x+u.width,bottom:u.y+u.height})}function Sl(u,r,l){return r===no?go(function(h,y){var v=Et(h),S=An(h),L=v.visualViewport,j=S.clientWidth,J=S.clientHeight,X=0,K=0;if(L){j=L.width,J=L.height;var he=ml();(he||!he&&y==="fixed")&&(X=L.offsetLeft,K=L.offsetTop)}return{width:j,height:J,x:X+po(h),y:K}}(u,l)):Kn(r)?function(h,y){var v=Ts(h,!1,y==="fixed");return v.top=v.top+h.clientTop,v.left=v.left+h.clientLeft,v.bottom=v.top+h.clientHeight,v.right=v.left+h.clientWidth,v.width=h.clientWidth,v.height=h.clientHeight,v.x=v.left,v.y=v.top,v}(r,l):go(function(h){var y,v=An(h),S=ho(h),L=(y=h.ownerDocument)==null?void 0:y.body,j=Gn(v.scrollWidth,v.clientWidth,L?L.scrollWidth:0,L?L.clientWidth:0),J=Gn(v.scrollHeight,v.clientHeight,L?L.scrollHeight:0,L?L.clientHeight:0),X=-S.scrollLeft+po(h),K=-S.scrollTop;return hn(L||v).direction==="rtl"&&(X+=Gn(v.clientWidth,L?L.clientWidth:0)-j),{width:j,height:J,x:X,y:K}}(An(u)))}function Tl(u){var r,l=u.reference,h=u.element,y=u.placement,v=y?tn(y):null,S=y?As(y):null,L=l.x+l.width/2-h.width/2,j=l.y+l.height/2-h.height/2;switch(v){case ut:r={x:L,y:l.y-h.height};break;case vt:r={x:L,y:l.y+l.height};break;case wt:r={x:l.x+l.width,y:j};break;case ft:r={x:l.x-h.width,y:j};break;default:r={x:l.x,y:l.y}}var J=v?co(v):null;if(J!=null){var X=J==="y"?"height":"width";switch(S){case zn:r[J]=r[J]-(l[X]/2-h[X]/2);break;case Es:r[J]=r[J]+(l[X]/2-h[X]/2)}}return r}function Os(u,r){r===void 0&&(r={});var l=r,h=l.placement,y=h===void 0?u.placement:h,v=l.strategy,S=v===void 0?u.strategy:v,L=l.boundary,j=L===void 0?sl:L,J=l.rootBoundary,X=J===void 0?no:J,K=l.elementContext,he=K===void 0?Cs:K,se=l.altBoundary,ce=se!==void 0&&se,ie=l.padding,ue=ie===void 0?0:ie,Le=bl(typeof ue!="number"?ue:yl(ue,ws)),Fe=he===Cs?rl:Cs,_e=u.rects.popper,Ae=u.elements[ce?Fe:he],me=function(dt,Nt,kt,Ve){var nn=Nt==="clippingParents"?function(Ne){var ht=Qs(Vr(Ne)),Mt=["absolute","fixed"].indexOf(hn(Ne).position)>=0&&Lt(Ne)?Js(Ne):Ne;return Kn(Mt)?ht.filter(function(xn){return Kn(xn)&&gl(xn,Mt)&&en(xn)!=="body"}):[]}(dt):[].concat(Nt),sn=[].concat(nn,[kt]),Ps=sn[0],Ye=sn.reduce(function(Ne,ht){var Mt=Sl(dt,ht,Ve);return Ne.top=Gn(Mt.top,Ne.top),Ne.right=Ur(Mt.right,Ne.right),Ne.bottom=Ur(Mt.bottom,Ne.bottom),Ne.left=Gn(Mt.left,Ne.left),Ne},Sl(dt,Ps,Ve));return Ye.width=Ye.right-Ye.left,Ye.height=Ye.bottom-Ye.top,Ye.x=Ye.left,Ye.y=Ye.top,Ye}(Kn(Ae)?Ae:Ae.contextElement||An(u.elements.popper),j,X,S),we=Ts(u.elements.reference),xe=Tl({reference:we,element:_e,strategy:"absolute",placement:y}),De=go(Object.assign({},_e,xe)),Re=he===Cs?De:we,We={top:me.top-Re.top+Le.top,bottom:Re.bottom-me.bottom+Le.bottom,left:me.left-Re.left+Le.left,right:Re.right-me.right+Le.right},Ct=u.modifiersData.offset;if(he===Cs&&Ct){var Ut=Ct[y];Object.keys(We).forEach(function(dt){var Nt=[wt,vt].indexOf(dt)>=0?1:-1,kt=[ut,vt].indexOf(dt)>=0?"y":"x";We[dt]+=Ut[kt]*Nt})}return We}function Jh(u,r){r===void 0&&(r={});var l=r,h=l.placement,y=l.boundary,v=l.rootBoundary,S=l.padding,L=l.flipVariations,j=l.allowedAutoPlacements,J=j===void 0?ro:j,X=As(h),K=X?L?so:so.filter(function(ce){return As(ce)===X}):ws,he=K.filter(function(ce){return J.indexOf(ce)>=0});he.length===0&&(he=K);var se=he.reduce(function(ce,ie){return ce[ie]=Os(u,{placement:ie,boundary:y,rootBoundary:v,padding:S})[tn(ie)],ce},{});return Object.keys(se).sort(function(ce,ie){return se[ce]-se[ie]})}const Al={name:"flip",enabled:!0,phase:"main",fn:function(u){var r=u.state,l=u.options,h=u.name;if(!r.modifiersData[h]._skip){for(var y=l.mainAxis,v=y===void 0||y,S=l.altAxis,L=S===void 0||S,j=l.fallbackPlacements,J=l.padding,X=l.boundary,K=l.rootBoundary,he=l.altBoundary,se=l.flipVariations,ce=se===void 0||se,ie=l.allowedAutoPlacements,ue=r.options.placement,Le=tn(ue),Fe=j||(Le!==ue&&ce?function(Ne){if(tn(Ne)===Hr)return[];var ht=Wr(Ne);return[El(Ne),ht,El(ht)]}(ue):[Wr(ue)]),_e=[ue].concat(Fe).reduce(function(Ne,ht){return Ne.concat(tn(ht)===Hr?Jh(r,{placement:ht,boundary:X,rootBoundary:K,padding:J,flipVariations:ce,allowedAutoPlacements:ie}):ht)},[]),Ae=r.rects.reference,me=r.rects.popper,we=new Map,xe=!0,De=_e[0],Re=0;Re<_e.length;Re++){var We=_e[Re],Ct=tn(We),Ut=As(We)===zn,dt=[ut,vt].indexOf(Ct)>=0,Nt=dt?"width":"height",kt=Os(r,{placement:We,boundary:X,rootBoundary:K,altBoundary:he,padding:J}),Ve=dt?Ut?wt:ft:Ut?vt:ut;Ae[Nt]>me[Nt]&&(Ve=Wr(Ve));var nn=Wr(Ve),sn=[];if(v&&sn.push(kt[Ct]<=0),L&&sn.push(kt[Ve]<=0,kt[nn]<=0),sn.every(function(Ne){return Ne})){De=We,xe=!1;break}we.set(We,sn)}if(xe)for(var Ps=function(Ne){var ht=_e.find(function(Mt){var xn=we.get(Mt);if(xn)return xn.slice(0,Ne).every(function(ei){return ei})});if(ht)return De=ht,"break"},Ye=ce?3:1;Ye>0&&Ps(Ye)!=="break";Ye--);r.placement!==De&&(r.modifiersData[h]._skip=!0,r.placement=De,r.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function Ol(u,r,l){return l===void 0&&(l={x:0,y:0}),{top:u.top-r.height-l.y,right:u.right-r.width+l.x,bottom:u.bottom-r.height+l.y,left:u.left-r.width-l.x}}function xl(u){return[ut,wt,vt,ft].some(function(r){return u[r]>=0})}const Rl={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(u){var r=u.state,l=u.name,h=r.rects.reference,y=r.rects.popper,v=r.modifiersData.preventOverflow,S=Os(r,{elementContext:"reference"}),L=Os(r,{altBoundary:!0}),j=Ol(S,h),J=Ol(L,y,v),X=xl(j),K=xl(J);r.modifiersData[l]={referenceClippingOffsets:j,popperEscapeOffsets:J,isReferenceHidden:X,hasPopperEscaped:K},r.attributes.popper=Object.assign({},r.attributes.popper,{"data-popper-reference-hidden":X,"data-popper-escaped":K})}},Pl={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(u){var r=u.state,l=u.options,h=u.name,y=l.offset,v=y===void 0?[0,0]:y,S=ro.reduce(function(X,K){return X[K]=function(he,se,ce){var ie=tn(he),ue=[ft,ut].indexOf(ie)>=0?-1:1,Le=typeof ce=="function"?ce(Object.assign({},se,{placement:he})):ce,Fe=Le[0],_e=Le[1];return Fe=Fe||0,_e=(_e||0)*ue,[ft,wt].indexOf(ie)>=0?{x:_e,y:Fe}:{x:Fe,y:_e}}(K,r.rects,v),X},{}),L=S[r.placement],j=L.x,J=L.y;r.modifiersData.popperOffsets!=null&&(r.modifiersData.popperOffsets.x+=j,r.modifiersData.popperOffsets.y+=J),r.modifiersData[h]=S}},_o={name:"popperOffsets",enabled:!0,phase:"read",fn:function(u){var r=u.state,l=u.name;r.modifiersData[l]=Tl({reference:r.rects.reference,element:r.rects.popper,strategy:"absolute",placement:r.placement})},data:{}},Il={name:"preventOverflow",enabled:!0,phase:"main",fn:function(u){var r=u.state,l=u.options,h=u.name,y=l.mainAxis,v=y===void 0||y,S=l.altAxis,L=S!==void 0&&S,j=l.boundary,J=l.rootBoundary,X=l.altBoundary,K=l.padding,he=l.tether,se=he===void 0||he,ce=l.tetherOffset,ie=ce===void 0?0:ce,ue=Os(r,{boundary:j,rootBoundary:J,padding:K,altBoundary:X}),Le=tn(r.placement),Fe=As(r.placement),_e=!Fe,Ae=co(Le),me=Ae==="x"?"y":"x",we=r.modifiersData.popperOffsets,xe=r.rects.reference,De=r.rects.popper,Re=typeof ie=="function"?ie(Object.assign({},r.rects,{placement:r.placement})):ie,We=typeof Re=="number"?{mainAxis:Re,altAxis:Re}:Object.assign({mainAxis:0,altAxis:0},Re),Ct=r.modifiersData.offset?r.modifiersData.offset[r.placement]:null,Ut={x:0,y:0};if(we){if(v){var dt,Nt=Ae==="y"?ut:ft,kt=Ae==="y"?vt:wt,Ve=Ae==="y"?"height":"width",nn=we[Ae],sn=nn+ue[Nt],Ps=nn-ue[kt],Ye=se?-De[Ve]/2:0,Ne=Fe===zn?xe[Ve]:De[Ve],ht=Fe===zn?-De[Ve]:-xe[Ve],Mt=r.elements.arrow,xn=se&&Mt?lo(Mt):{width:0,height:0},ei=r.modifiersData["arrow#persistent"]?r.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},_c=ei[Nt],bc=ei[kt],ti=Xs(0,xe[Ve],xn[Ve]),Sm=_e?xe[Ve]/2-Ye-ti-_c-We.mainAxis:Ne-ti-_c-We.mainAxis,Tm=_e?-xe[Ve]/2+Ye+ti+bc+We.mainAxis:ht+ti+bc+We.mainAxis,Po=r.elements.arrow&&Js(r.elements.arrow),Am=Po?Ae==="y"?Po.clientTop||0:Po.clientLeft||0:0,yc=(dt=Ct==null?void 0:Ct[Ae])!=null?dt:0,Om=nn+Tm-yc,vc=Xs(se?Ur(sn,nn+Sm-yc-Am):sn,nn,se?Gn(Ps,Om):Ps);we[Ae]=vc,Ut[Ae]=vc-nn}if(L){var wc,xm=Ae==="x"?ut:ft,Rm=Ae==="x"?vt:wt,ns=we[me],ni=me==="y"?"height":"width",Ec=ns+ue[xm],Cc=ns-ue[Rm],Io=[ut,ft].indexOf(Le)!==-1,Sc=(wc=Ct==null?void 0:Ct[me])!=null?wc:0,Tc=Io?Ec:ns-xe[ni]-De[ni]-Sc+We.altAxis,Ac=Io?ns+xe[ni]+De[ni]-Sc-We.altAxis:Cc,Oc=se&&Io?function(Pm,Im,Lo){var xc=Xs(Pm,Im,Lo);return xc>Lo?Lo:xc}(Tc,ns,Ac):Xs(se?Tc:Ec,ns,se?Ac:Cc);we[me]=Oc,Ut[me]=Oc-ns}r.modifiersData[h]=Ut}},requiresIfExists:["offset"]};function Xh(u,r,l){l===void 0&&(l=!1);var h,y,v=Lt(r),S=Lt(r)&&function(K){var he=K.getBoundingClientRect(),se=Ss(he.width)/K.offsetWidth||1,ce=Ss(he.height)/K.offsetHeight||1;return se!==1||ce!==1}(r),L=An(r),j=Ts(u,S,l),J={scrollLeft:0,scrollTop:0},X={x:0,y:0};return(v||!v&&!l)&&((en(r)!=="body"||mo(L))&&(J=(h=r)!==Et(h)&&Lt(h)?{scrollLeft:(y=h).scrollLeft,scrollTop:y.scrollTop}:ho(h)),Lt(r)?((X=Ts(r,!0)).x+=r.clientLeft,X.y+=r.clientTop):L&&(X.x=po(L))),{x:j.left+J.scrollLeft-X.x,y:j.top+J.scrollTop-X.y,width:j.width,height:j.height}}function Qh(u){var r=new Map,l=new Set,h=[];function y(v){l.add(v.name),[].concat(v.requires||[],v.requiresIfExists||[]).forEach(function(S){if(!l.has(S)){var L=r.get(S);L&&y(L)}}),h.push(v)}return u.forEach(function(v){r.set(v.name,v)}),u.forEach(function(v){l.has(v.name)||y(v)}),h}var Ll={placement:"bottom",modifiers:[],strategy:"absolute"};function Dl(){for(var u=arguments.length,r=new Array(u),l=0;lNumber.parseInt(l,10)):typeof r=="function"?l=>r(l,this._element):r}_getPopperConfig(){const r={placement:this._getPlacement(),modifiers:[{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"offset",options:{offset:this._getOffset()}}]};return(this._inNavbar||this._config.display==="static")&&(rt.setDataAttribute(this._menu,"popper","static"),r.modifiers=[{name:"applyStyles",enabled:!1}]),{...r,...N(this._config.popperConfig,[r])}}_selectMenuItem({key:r,target:l}){const h=A.find(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",this._menu).filter(y=>p(y));h.length&&H(h,l,r===Ml,!h.includes(l)).focus()}static jQueryInterface(r){return this.each(function(){const l=Ht.getOrCreateInstance(this,r);if(typeof r=="string"){if(l[r]===void 0)throw new TypeError(`No method named "${r}"`);l[r]()}})}static clearMenus(r){if(r.button===2||r.type==="keyup"&&r.key!=="Tab")return;const l=A.find(op);for(const h of l){const y=Ht.getInstance(h);if(!y||y._config.autoClose===!1)continue;const v=r.composedPath(),S=v.includes(y._menu);if(v.includes(y._element)||y._config.autoClose==="inside"&&!S||y._config.autoClose==="outside"&&S||y._menu.contains(r.target)&&(r.type==="keyup"&&r.key==="Tab"||/input|select|option|textarea|form/i.test(r.target.tagName)))continue;const L={relatedTarget:y._element};r.type==="click"&&(L.clickEvent=r),y._completeHide(L)}}static dataApiKeydownHandler(r){const l=/input|textarea/i.test(r.target.tagName),h=r.key==="Escape",y=[ep,Ml].includes(r.key);if(!y&&!h||l&&!h)return;r.preventDefault();const v=this.matches(Xn)?this:A.prev(this,Xn)[0]||A.next(this,Xn)[0]||A.findOne(Xn,r.delegateTarget.parentNode),S=Ht.getOrCreateInstance(v);if(y)return r.stopPropagation(),S.show(),void S._selectMenuItem(r);S._isShown()&&(r.stopPropagation(),S.hide(),v.focus())}}I.on(document,Fl,Xn,Ht.dataApiKeydownHandler),I.on(document,Fl,Kr,Ht.dataApiKeydownHandler),I.on(document,$l,Ht.clearMenus),I.on(document,ip,Ht.clearMenus),I.on(document,$l,Xn,function(u){u.preventDefault(),Ht.getOrCreateInstance(this).toggle()}),$(Ht);const jl="backdrop",Bl="show",Hl=`mousedown.bs.${jl}`,mp={className:"modal-backdrop",clickCallback:null,isAnimated:!1,isVisible:!0,rootElement:"body"},gp={className:"string",clickCallback:"(function|null)",isAnimated:"boolean",isVisible:"boolean",rootElement:"(element|string)"};class Ul extends Zt{constructor(r){super(),this._config=this._getConfig(r),this._isAppended=!1,this._element=null}static get Default(){return mp}static get DefaultType(){return gp}static get NAME(){return jl}show(r){if(!this._config.isVisible)return void N(r);this._append();const l=this._getElement();this._config.isAnimated&&w(l),l.classList.add(Bl),this._emulateAnimation(()=>{N(r)})}hide(r){this._config.isVisible?(this._getElement().classList.remove(Bl),this._emulateAnimation(()=>{this.dispose(),N(r)})):N(r)}dispose(){this._isAppended&&(I.off(this._element,Hl),this._element.remove(),this._isAppended=!1)}_getElement(){if(!this._element){const r=document.createElement("div");r.className=this._config.className,this._config.isAnimated&&r.classList.add("fade"),this._element=r}return this._element}_configAfterMerge(r){return r.rootElement=f(r.rootElement),r}_append(){if(this._isAppended)return;const r=this._getElement();this._config.rootElement.append(r),I.on(r,Hl,()=>{N(this._config.clickCallback)}),this._isAppended=!0}_emulateAnimation(r){B(r,this._getElement(),this._config.isAnimated)}}const Gr=".bs.focustrap",_p=`focusin${Gr}`,bp=`keydown.tab${Gr}`,Vl="backward",yp={autofocus:!0,trapElement:null},vp={autofocus:"boolean",trapElement:"element"};class ql extends Zt{constructor(r){super(),this._config=this._getConfig(r),this._isActive=!1,this._lastTabNavDirection=null}static get Default(){return yp}static get DefaultType(){return vp}static get NAME(){return"focustrap"}activate(){this._isActive||(this._config.autofocus&&this._config.trapElement.focus(),I.off(document,Gr),I.on(document,_p,r=>this._handleFocusin(r)),I.on(document,bp,r=>this._handleKeydown(r)),this._isActive=!0)}deactivate(){this._isActive&&(this._isActive=!1,I.off(document,Gr))}_handleFocusin(r){const{trapElement:l}=this._config;if(r.target===document||r.target===l||l.contains(r.target))return;const h=A.focusableChildren(l);h.length===0?l.focus():this._lastTabNavDirection===Vl?h[h.length-1].focus():h[0].focus()}_handleKeydown(r){r.key==="Tab"&&(this._lastTabNavDirection=r.shiftKey?Vl:"forward")}}const Wl=".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",zl=".sticky-top",Jr="padding-right",Kl="margin-right";class vo{constructor(){this._element=document.body}getWidth(){const r=document.documentElement.clientWidth;return Math.abs(window.innerWidth-r)}hide(){const r=this.getWidth();this._disableOverFlow(),this._setElementAttributes(this._element,Jr,l=>l+r),this._setElementAttributes(Wl,Jr,l=>l+r),this._setElementAttributes(zl,Kl,l=>l-r)}reset(){this._resetElementAttributes(this._element,"overflow"),this._resetElementAttributes(this._element,Jr),this._resetElementAttributes(Wl,Jr),this._resetElementAttributes(zl,Kl)}isOverflowing(){return this.getWidth()>0}_disableOverFlow(){this._saveInitialAttribute(this._element,"overflow"),this._element.style.overflow="hidden"}_setElementAttributes(r,l,h){const y=this.getWidth();this._applyManipulationCallback(r,v=>{if(v!==this._element&&window.innerWidth>v.clientWidth+y)return;this._saveInitialAttribute(v,l);const S=window.getComputedStyle(v).getPropertyValue(l);v.style.setProperty(l,`${h(Number.parseFloat(S))}px`)})}_saveInitialAttribute(r,l){const h=r.style.getPropertyValue(l);h&&rt.setDataAttribute(r,l,h)}_resetElementAttributes(r,l){this._applyManipulationCallback(r,h=>{const y=rt.getDataAttribute(h,l);y!==null?(rt.removeDataAttribute(h,l),h.style.setProperty(l,y)):h.style.removeProperty(l)})}_applyManipulationCallback(r,l){if(c(r))l(r);else for(const h of A.find(r,this._element))l(h)}}const Dt=".bs.modal",wp=`hide${Dt}`,Ep=`hidePrevented${Dt}`,Gl=`hidden${Dt}`,Jl=`show${Dt}`,Cp=`shown${Dt}`,Sp=`resize${Dt}`,Tp=`click.dismiss${Dt}`,Ap=`mousedown.dismiss${Dt}`,Op=`keydown.dismiss${Dt}`,xp=`click${Dt}.data-api`,Xl="modal-open",Ql="show",wo="modal-static",Rp={backdrop:!0,focus:!0,keyboard:!0},Pp={backdrop:"(boolean|string)",focus:"boolean",keyboard:"boolean"};class Qn extends Be{constructor(r,l){super(r,l),this._dialog=A.findOne(".modal-dialog",this._element),this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._isShown=!1,this._isTransitioning=!1,this._scrollBar=new vo,this._addEventListeners()}static get Default(){return Rp}static get DefaultType(){return Pp}static get NAME(){return"modal"}toggle(r){return this._isShown?this.hide():this.show(r)}show(r){this._isShown||this._isTransitioning||I.trigger(this._element,Jl,{relatedTarget:r}).defaultPrevented||(this._isShown=!0,this._isTransitioning=!0,this._scrollBar.hide(),document.body.classList.add(Xl),this._adjustDialog(),this._backdrop.show(()=>this._showElement(r)))}hide(){this._isShown&&!this._isTransitioning&&(I.trigger(this._element,wp).defaultPrevented||(this._isShown=!1,this._isTransitioning=!0,this._focustrap.deactivate(),this._element.classList.remove(Ql),this._queueCallback(()=>this._hideModal(),this._element,this._isAnimated())))}dispose(){I.off(window,Dt),I.off(this._dialog,Dt),this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}handleUpdate(){this._adjustDialog()}_initializeBackDrop(){return new Ul({isVisible:!!this._config.backdrop,isAnimated:this._isAnimated()})}_initializeFocusTrap(){return new ql({trapElement:this._element})}_showElement(r){document.body.contains(this._element)||document.body.append(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.scrollTop=0;const l=A.findOne(".modal-body",this._dialog);l&&(l.scrollTop=0),w(this._element),this._element.classList.add(Ql),this._queueCallback(()=>{this._config.focus&&this._focustrap.activate(),this._isTransitioning=!1,I.trigger(this._element,Cp,{relatedTarget:r})},this._dialog,this._isAnimated())}_addEventListeners(){I.on(this._element,Op,r=>{r.key==="Escape"&&(this._config.keyboard?this.hide():this._triggerBackdropTransition())}),I.on(window,Sp,()=>{this._isShown&&!this._isTransitioning&&this._adjustDialog()}),I.on(this._element,Ap,r=>{I.one(this._element,Tp,l=>{this._element===r.target&&this._element===l.target&&(this._config.backdrop!=="static"?this._config.backdrop&&this.hide():this._triggerBackdropTransition())})})}_hideModal(){this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._isTransitioning=!1,this._backdrop.hide(()=>{document.body.classList.remove(Xl),this._resetAdjustments(),this._scrollBar.reset(),I.trigger(this._element,Gl)})}_isAnimated(){return this._element.classList.contains("fade")}_triggerBackdropTransition(){if(I.trigger(this._element,Ep).defaultPrevented)return;const r=this._element.scrollHeight>document.documentElement.clientHeight,l=this._element.style.overflowY;l==="hidden"||this._element.classList.contains(wo)||(r||(this._element.style.overflowY="hidden"),this._element.classList.add(wo),this._queueCallback(()=>{this._element.classList.remove(wo),this._queueCallback(()=>{this._element.style.overflowY=l},this._dialog)},this._dialog),this._element.focus())}_adjustDialog(){const r=this._element.scrollHeight>document.documentElement.clientHeight,l=this._scrollBar.getWidth(),h=l>0;if(h&&!r){const y=R()?"paddingLeft":"paddingRight";this._element.style[y]=`${l}px`}if(!h&&r){const y=R()?"paddingRight":"paddingLeft";this._element.style[y]=`${l}px`}}_resetAdjustments(){this._element.style.paddingLeft="",this._element.style.paddingRight=""}static jQueryInterface(r,l){return this.each(function(){const h=Qn.getOrCreateInstance(this,r);if(typeof r=="string"){if(h[r]===void 0)throw new TypeError(`No method named "${r}"`);h[r](l)}})}}I.on(document,xp,'[data-bs-toggle="modal"]',function(u){const r=A.getElementFromSelector(this);["A","AREA"].includes(this.tagName)&&u.preventDefault(),I.one(r,Jl,h=>{h.defaultPrevented||I.one(r,Gl,()=>{p(this)&&this.focus()})});const l=A.findOne(".modal.show");l&&Qn.getInstance(l).hide(),Qn.getOrCreateInstance(r).toggle(this)}),V(Qn),$(Qn);const pn=".bs.offcanvas",Yl=".data-api",Ip=`load${pn}${Yl}`,Zl="show",ec="showing",tc="hiding",nc=".offcanvas.show",Lp=`show${pn}`,Dp=`shown${pn}`,Np=`hide${pn}`,sc=`hidePrevented${pn}`,rc=`hidden${pn}`,kp=`resize${pn}`,Mp=`click${pn}${Yl}`,$p=`keydown.dismiss${pn}`,Fp={backdrop:!0,keyboard:!0,scroll:!1},jp={backdrop:"(boolean|string)",keyboard:"boolean",scroll:"boolean"};class mn extends Be{constructor(r,l){super(r,l),this._isShown=!1,this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._addEventListeners()}static get Default(){return Fp}static get DefaultType(){return jp}static get NAME(){return"offcanvas"}toggle(r){return this._isShown?this.hide():this.show(r)}show(r){this._isShown||I.trigger(this._element,Lp,{relatedTarget:r}).defaultPrevented||(this._isShown=!0,this._backdrop.show(),this._config.scroll||new vo().hide(),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.classList.add(ec),this._queueCallback(()=>{this._config.scroll&&!this._config.backdrop||this._focustrap.activate(),this._element.classList.add(Zl),this._element.classList.remove(ec),I.trigger(this._element,Dp,{relatedTarget:r})},this._element,!0))}hide(){this._isShown&&(I.trigger(this._element,Np).defaultPrevented||(this._focustrap.deactivate(),this._element.blur(),this._isShown=!1,this._element.classList.add(tc),this._backdrop.hide(),this._queueCallback(()=>{this._element.classList.remove(Zl,tc),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._config.scroll||new vo().reset(),I.trigger(this._element,rc)},this._element,!0)))}dispose(){this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}_initializeBackDrop(){const r=!!this._config.backdrop;return new Ul({className:"offcanvas-backdrop",isVisible:r,isAnimated:!0,rootElement:this._element.parentNode,clickCallback:r?()=>{this._config.backdrop!=="static"?this.hide():I.trigger(this._element,sc)}:null})}_initializeFocusTrap(){return new ql({trapElement:this._element})}_addEventListeners(){I.on(this._element,$p,r=>{r.key==="Escape"&&(this._config.keyboard?this.hide():I.trigger(this._element,sc))})}static jQueryInterface(r){return this.each(function(){const l=mn.getOrCreateInstance(this,r);if(typeof r=="string"){if(l[r]===void 0||r.startsWith("_")||r==="constructor")throw new TypeError(`No method named "${r}"`);l[r](this)}})}}I.on(document,Mp,'[data-bs-toggle="offcanvas"]',function(u){const r=A.getElementFromSelector(this);if(["A","AREA"].includes(this.tagName)&&u.preventDefault(),d(this))return;I.one(r,rc,()=>{p(this)&&this.focus()});const l=A.findOne(nc);l&&l!==r&&mn.getInstance(l).hide(),mn.getOrCreateInstance(r).toggle(this)}),I.on(window,Ip,()=>{for(const u of A.find(nc))mn.getOrCreateInstance(u).show()}),I.on(window,kp,()=>{for(const u of A.find("[aria-modal][class*=show][class*=offcanvas-]"))getComputedStyle(u).position!=="fixed"&&mn.getOrCreateInstance(u).hide()}),V(mn),$(mn);const ic={"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],dd:[],div:[],dl:[],dt:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","srcset","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},Bp=new Set(["background","cite","href","itemtype","longdesc","poster","src","xlink:href"]),Hp=/^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i,Up=(u,r)=>{const l=u.nodeName.toLowerCase();return r.includes(l)?!Bp.has(l)||!!Hp.test(u.nodeValue):r.filter(h=>h instanceof RegExp).some(h=>h.test(l))},Vp={allowList:ic,content:{},extraClass:"",html:!1,sanitize:!0,sanitizeFn:null,template:"
"},qp={allowList:"object",content:"object",extraClass:"(string|function)",html:"boolean",sanitize:"boolean",sanitizeFn:"(null|function)",template:"string"},Wp={entry:"(string|element|function|null)",selector:"(string|element)"};class zp extends Zt{constructor(r){super(),this._config=this._getConfig(r)}static get Default(){return Vp}static get DefaultType(){return qp}static get NAME(){return"TemplateFactory"}getContent(){return Object.values(this._config.content).map(r=>this._resolvePossibleFunction(r)).filter(Boolean)}hasContent(){return this.getContent().length>0}changeContent(r){return this._checkContent(r),this._config.content={...this._config.content,...r},this}toHtml(){const r=document.createElement("div");r.innerHTML=this._maybeSanitize(this._config.template);for(const[y,v]of Object.entries(this._config.content))this._setContent(r,v,y);const l=r.children[0],h=this._resolvePossibleFunction(this._config.extraClass);return h&&l.classList.add(...h.split(" ")),l}_typeCheckConfig(r){super._typeCheckConfig(r),this._checkContent(r.content)}_checkContent(r){for(const[l,h]of Object.entries(r))super._typeCheckConfig({selector:l,entry:h},Wp)}_setContent(r,l,h){const y=A.findOne(h,r);y&&((l=this._resolvePossibleFunction(l))?c(l)?this._putElementInTemplate(f(l),y):this._config.html?y.innerHTML=this._maybeSanitize(l):y.textContent=l:y.remove())}_maybeSanitize(r){return this._config.sanitize?function(l,h,y){if(!l.length)return l;if(y&&typeof y=="function")return y(l);const v=new window.DOMParser().parseFromString(l,"text/html"),S=[].concat(...v.body.querySelectorAll("*"));for(const L of S){const j=L.nodeName.toLowerCase();if(!Object.keys(h).includes(j)){L.remove();continue}const J=[].concat(...L.attributes),X=[].concat(h["*"]||[],h[j]||[]);for(const K of J)Up(K,X)||L.removeAttribute(K.nodeName)}return v.body.innerHTML}(r,this._config.allowList,this._config.sanitizeFn):r}_resolvePossibleFunction(r){return N(r,[this])}_putElementInTemplate(r,l){if(this._config.html)return l.innerHTML="",void l.append(r);l.textContent=r.textContent}}const Kp=new Set(["sanitize","allowList","sanitizeFn"]),Eo="fade",Xr="show",oc=".modal",ac="hide.bs.modal",Ys="hover",Co="focus",Gp={AUTO:"auto",TOP:"top",RIGHT:R()?"left":"right",BOTTOM:"bottom",LEFT:R()?"right":"left"},Jp={allowList:ic,animation:!0,boundary:"clippingParents",container:!1,customClass:"",delay:0,fallbackPlacements:["top","right","bottom","left"],html:!1,offset:[0,6],placement:"top",popperConfig:null,sanitize:!0,sanitizeFn:null,selector:!1,template:'',title:"",trigger:"hover focus"},Xp={allowList:"object",animation:"boolean",boundary:"(string|element)",container:"(string|element|boolean)",customClass:"(string|function)",delay:"(number|object)",fallbackPlacements:"array",html:"boolean",offset:"(array|string|function)",placement:"(string|function)",popperConfig:"(null|object|function)",sanitize:"boolean",sanitizeFn:"(null|function)",selector:"(string|boolean)",template:"string",title:"(string|element|function)",trigger:"string"};class Yn extends Be{constructor(r,l){if(Nl===void 0)throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)");super(r,l),this._isEnabled=!0,this._timeout=0,this._isHovered=null,this._activeTrigger={},this._popper=null,this._templateFactory=null,this._newContent=null,this.tip=null,this._setListeners(),this._config.selector||this._fixTitle()}static get Default(){return Jp}static get DefaultType(){return Xp}static get NAME(){return"tooltip"}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(){this._isEnabled&&(this._activeTrigger.click=!this._activeTrigger.click,this._isShown()?this._leave():this._enter())}dispose(){clearTimeout(this._timeout),I.off(this._element.closest(oc),ac,this._hideModalHandler),this._element.getAttribute("data-bs-original-title")&&this._element.setAttribute("title",this._element.getAttribute("data-bs-original-title")),this._disposePopper(),super.dispose()}show(){if(this._element.style.display==="none")throw new Error("Please use show on visible elements");if(!this._isWithContent()||!this._isEnabled)return;const r=I.trigger(this._element,this.constructor.eventName("show")),l=(m(this._element)||this._element.ownerDocument.documentElement).contains(this._element);if(r.defaultPrevented||!l)return;this._disposePopper();const h=this._getTipElement();this._element.setAttribute("aria-describedby",h.getAttribute("id"));const{container:y}=this._config;if(this._element.ownerDocument.documentElement.contains(this.tip)||(y.append(h),I.trigger(this._element,this.constructor.eventName("inserted"))),this._popper=this._createPopper(h),h.classList.add(Xr),"ontouchstart"in document.documentElement)for(const v of[].concat(...document.body.children))I.on(v,"mouseover",b);this._queueCallback(()=>{I.trigger(this._element,this.constructor.eventName("shown")),this._isHovered===!1&&this._leave(),this._isHovered=!1},this.tip,this._isAnimated())}hide(){if(this._isShown()&&!I.trigger(this._element,this.constructor.eventName("hide")).defaultPrevented){if(this._getTipElement().classList.remove(Xr),"ontouchstart"in document.documentElement)for(const r of[].concat(...document.body.children))I.off(r,"mouseover",b);this._activeTrigger.click=!1,this._activeTrigger[Co]=!1,this._activeTrigger[Ys]=!1,this._isHovered=null,this._queueCallback(()=>{this._isWithActiveTrigger()||(this._isHovered||this._disposePopper(),this._element.removeAttribute("aria-describedby"),I.trigger(this._element,this.constructor.eventName("hidden")))},this.tip,this._isAnimated())}}update(){this._popper&&this._popper.update()}_isWithContent(){return!!this._getTitle()}_getTipElement(){return this.tip||(this.tip=this._createTipElement(this._newContent||this._getContentForTemplate())),this.tip}_createTipElement(r){const l=this._getTemplateFactory(r).toHtml();if(!l)return null;l.classList.remove(Eo,Xr),l.classList.add(`bs-${this.constructor.NAME}-auto`);const h=(y=>{do y+=Math.floor(1e6*Math.random());while(document.getElementById(y));return y})(this.constructor.NAME).toString();return l.setAttribute("id",h),this._isAnimated()&&l.classList.add(Eo),l}setContent(r){this._newContent=r,this._isShown()&&(this._disposePopper(),this.show())}_getTemplateFactory(r){return this._templateFactory?this._templateFactory.changeContent(r):this._templateFactory=new zp({...this._config,content:r,extraClass:this._resolvePossibleFunction(this._config.customClass)}),this._templateFactory}_getContentForTemplate(){return{".tooltip-inner":this._getTitle()}}_getTitle(){return this._resolvePossibleFunction(this._config.title)||this._element.getAttribute("data-bs-original-title")}_initializeOnDelegatedTarget(r){return this.constructor.getOrCreateInstance(r.delegateTarget,this._getDelegateConfig())}_isAnimated(){return this._config.animation||this.tip&&this.tip.classList.contains(Eo)}_isShown(){return this.tip&&this.tip.classList.contains(Xr)}_createPopper(r){const l=N(this._config.placement,[this,r,this._element]),h=Gp[l.toUpperCase()];return bo(this._element,r,this._getPopperConfig(h))}_getOffset(){const{offset:r}=this._config;return typeof r=="string"?r.split(",").map(l=>Number.parseInt(l,10)):typeof r=="function"?l=>r(l,this._element):r}_resolvePossibleFunction(r){return N(r,[this._element])}_getPopperConfig(r){const l={placement:r,modifiers:[{name:"flip",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:"offset",options:{offset:this._getOffset()}},{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"arrow",options:{element:`.${this.constructor.NAME}-arrow`}},{name:"preSetPlacement",enabled:!0,phase:"beforeMain",fn:h=>{this._getTipElement().setAttribute("data-popper-placement",h.state.placement)}}]};return{...l,...N(this._config.popperConfig,[l])}}_setListeners(){const r=this._config.trigger.split(" ");for(const l of r)if(l==="click")I.on(this._element,this.constructor.eventName("click"),this._config.selector,h=>{this._initializeOnDelegatedTarget(h).toggle()});else if(l!=="manual"){const h=l===Ys?this.constructor.eventName("mouseenter"):this.constructor.eventName("focusin"),y=l===Ys?this.constructor.eventName("mouseleave"):this.constructor.eventName("focusout");I.on(this._element,h,this._config.selector,v=>{const S=this._initializeOnDelegatedTarget(v);S._activeTrigger[v.type==="focusin"?Co:Ys]=!0,S._enter()}),I.on(this._element,y,this._config.selector,v=>{const S=this._initializeOnDelegatedTarget(v);S._activeTrigger[v.type==="focusout"?Co:Ys]=S._element.contains(v.relatedTarget),S._leave()})}this._hideModalHandler=()=>{this._element&&this.hide()},I.on(this._element.closest(oc),ac,this._hideModalHandler)}_fixTitle(){const r=this._element.getAttribute("title");r&&(this._element.getAttribute("aria-label")||this._element.textContent.trim()||this._element.setAttribute("aria-label",r),this._element.setAttribute("data-bs-original-title",r),this._element.removeAttribute("title"))}_enter(){this._isShown()||this._isHovered?this._isHovered=!0:(this._isHovered=!0,this._setTimeout(()=>{this._isHovered&&this.show()},this._config.delay.show))}_leave(){this._isWithActiveTrigger()||(this._isHovered=!1,this._setTimeout(()=>{this._isHovered||this.hide()},this._config.delay.hide))}_setTimeout(r,l){clearTimeout(this._timeout),this._timeout=setTimeout(r,l)}_isWithActiveTrigger(){return Object.values(this._activeTrigger).includes(!0)}_getConfig(r){const l=rt.getDataAttributes(this._element);for(const h of Object.keys(l))Kp.has(h)&&delete l[h];return r={...l,...typeof r=="object"&&r?r:{}},r=this._mergeConfigObj(r),r=this._configAfterMerge(r),this._typeCheckConfig(r),r}_configAfterMerge(r){return r.container=r.container===!1?document.body:f(r.container),typeof r.delay=="number"&&(r.delay={show:r.delay,hide:r.delay}),typeof r.title=="number"&&(r.title=r.title.toString()),typeof r.content=="number"&&(r.content=r.content.toString()),r}_getDelegateConfig(){const r={};for(const[l,h]of Object.entries(this._config))this.constructor.Default[l]!==h&&(r[l]=h);return r.selector=!1,r.trigger="manual",r}_disposePopper(){this._popper&&(this._popper.destroy(),this._popper=null),this.tip&&(this.tip.remove(),this.tip=null)}static jQueryInterface(r){return this.each(function(){const l=Yn.getOrCreateInstance(this,r);if(typeof r=="string"){if(l[r]===void 0)throw new TypeError(`No method named "${r}"`);l[r]()}})}}$(Yn);const Qp={...Yn.Default,content:"",offset:[0,8],placement:"right",template:'',trigger:"click"},Yp={...Yn.DefaultType,content:"(null|string|element|function)"};class Qr extends Yn{static get Default(){return Qp}static get DefaultType(){return Yp}static get NAME(){return"popover"}_isWithContent(){return this._getTitle()||this._getContent()}_getContentForTemplate(){return{".popover-header":this._getTitle(),".popover-body":this._getContent()}}_getContent(){return this._resolvePossibleFunction(this._config.content)}static jQueryInterface(r){return this.each(function(){const l=Qr.getOrCreateInstance(this,r);if(typeof r=="string"){if(l[r]===void 0)throw new TypeError(`No method named "${r}"`);l[r]()}})}}$(Qr);const So=".bs.scrollspy",Zp=`activate${So}`,lc=`click${So}`,em=`load${So}.data-api`,Rs="active",To="[href]",cc=".nav-link",tm=`${cc}, .nav-item > ${cc}, .list-group-item`,nm={offset:null,rootMargin:"0px 0px -25%",smoothScroll:!1,target:null,threshold:[.1,.5,1]},sm={offset:"(number|null)",rootMargin:"string",smoothScroll:"boolean",target:"element",threshold:"array"};class Zs extends Be{constructor(r,l){super(r,l),this._targetLinks=new Map,this._observableSections=new Map,this._rootElement=getComputedStyle(this._element).overflowY==="visible"?null:this._element,this._activeTarget=null,this._observer=null,this._previousScrollData={visibleEntryTop:0,parentScrollTop:0},this.refresh()}static get Default(){return nm}static get DefaultType(){return sm}static get NAME(){return"scrollspy"}refresh(){this._initializeTargetsAndObservables(),this._maybeEnableSmoothScroll(),this._observer?this._observer.disconnect():this._observer=this._getNewObserver();for(const r of this._observableSections.values())this._observer.observe(r)}dispose(){this._observer.disconnect(),super.dispose()}_configAfterMerge(r){return r.target=f(r.target)||document.body,r.rootMargin=r.offset?`${r.offset}px 0px -30%`:r.rootMargin,typeof r.threshold=="string"&&(r.threshold=r.threshold.split(",").map(l=>Number.parseFloat(l))),r}_maybeEnableSmoothScroll(){this._config.smoothScroll&&(I.off(this._config.target,lc),I.on(this._config.target,lc,To,r=>{const l=this._observableSections.get(r.target.hash);if(l){r.preventDefault();const h=this._rootElement||window,y=l.offsetTop-this._element.offsetTop;if(h.scrollTo)return void h.scrollTo({top:y,behavior:"smooth"});h.scrollTop=y}}))}_getNewObserver(){const r={root:this._rootElement,threshold:this._config.threshold,rootMargin:this._config.rootMargin};return new IntersectionObserver(l=>this._observerCallback(l),r)}_observerCallback(r){const l=S=>this._targetLinks.get(`#${S.target.id}`),h=S=>{this._previousScrollData.visibleEntryTop=S.target.offsetTop,this._process(l(S))},y=(this._rootElement||document.documentElement).scrollTop,v=y>=this._previousScrollData.parentScrollTop;this._previousScrollData.parentScrollTop=y;for(const S of r){if(!S.isIntersecting){this._activeTarget=null,this._clearActiveClass(l(S));continue}const L=S.target.offsetTop>=this._previousScrollData.visibleEntryTop;if(v&&L){if(h(S),!y)return}else v||L||h(S)}}_initializeTargetsAndObservables(){this._targetLinks=new Map,this._observableSections=new Map;const r=A.find(To,this._config.target);for(const l of r){if(!l.hash||d(l))continue;const h=A.findOne(decodeURI(l.hash),this._element);p(h)&&(this._targetLinks.set(decodeURI(l.hash),l),this._observableSections.set(l.hash,h))}}_process(r){this._activeTarget!==r&&(this._clearActiveClass(this._config.target),this._activeTarget=r,r.classList.add(Rs),this._activateParents(r),I.trigger(this._element,Zp,{relatedTarget:r}))}_activateParents(r){if(r.classList.contains("dropdown-item"))A.findOne(".dropdown-toggle",r.closest(".dropdown")).classList.add(Rs);else for(const l of A.parents(r,".nav, .list-group"))for(const h of A.prev(l,tm))h.classList.add(Rs)}_clearActiveClass(r){r.classList.remove(Rs);const l=A.find(`${To}.${Rs}`,r);for(const h of l)h.classList.remove(Rs)}static jQueryInterface(r){return this.each(function(){const l=Zs.getOrCreateInstance(this,r);if(typeof r=="string"){if(l[r]===void 0||r.startsWith("_")||r==="constructor")throw new TypeError(`No method named "${r}"`);l[r]()}})}}I.on(window,em,()=>{for(const u of A.find('[data-bs-spy="scroll"]'))Zs.getOrCreateInstance(u)}),$(Zs);const Zn=".bs.tab",rm=`hide${Zn}`,im=`hidden${Zn}`,om=`show${Zn}`,am=`shown${Zn}`,lm=`click${Zn}`,cm=`keydown${Zn}`,um=`load${Zn}`,fm="ArrowLeft",uc="ArrowRight",dm="ArrowUp",fc="ArrowDown",Ao="Home",dc="End",es="active",hc="fade",Oo="show",pc=".dropdown-toggle",xo=`:not(${pc})`,mc='[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]',Ro=`.nav-link${xo}, .list-group-item${xo}, [role="tab"]${xo}, ${mc}`,hm=`.${es}[data-bs-toggle="tab"], .${es}[data-bs-toggle="pill"], .${es}[data-bs-toggle="list"]`;class ts extends Be{constructor(r){super(r),this._parent=this._element.closest('.list-group, .nav, [role="tablist"]'),this._parent&&(this._setInitialAttributes(this._parent,this._getChildren()),I.on(this._element,cm,l=>this._keydown(l)))}static get NAME(){return"tab"}show(){const r=this._element;if(this._elemIsActive(r))return;const l=this._getActiveElem(),h=l?I.trigger(l,rm,{relatedTarget:r}):null;I.trigger(r,om,{relatedTarget:l}).defaultPrevented||h&&h.defaultPrevented||(this._deactivate(l,r),this._activate(r,l))}_activate(r,l){r&&(r.classList.add(es),this._activate(A.getElementFromSelector(r)),this._queueCallback(()=>{r.getAttribute("role")==="tab"?(r.removeAttribute("tabindex"),r.setAttribute("aria-selected",!0),this._toggleDropDown(r,!0),I.trigger(r,am,{relatedTarget:l})):r.classList.add(Oo)},r,r.classList.contains(hc)))}_deactivate(r,l){r&&(r.classList.remove(es),r.blur(),this._deactivate(A.getElementFromSelector(r)),this._queueCallback(()=>{r.getAttribute("role")==="tab"?(r.setAttribute("aria-selected",!1),r.setAttribute("tabindex","-1"),this._toggleDropDown(r,!1),I.trigger(r,im,{relatedTarget:l})):r.classList.remove(Oo)},r,r.classList.contains(hc)))}_keydown(r){if(![fm,uc,dm,fc,Ao,dc].includes(r.key))return;r.stopPropagation(),r.preventDefault();const l=this._getChildren().filter(y=>!d(y));let h;if([Ao,dc].includes(r.key))h=l[r.key===Ao?0:l.length-1];else{const y=[uc,fc].includes(r.key);h=H(l,r.target,y,!0)}h&&(h.focus({preventScroll:!0}),ts.getOrCreateInstance(h).show())}_getChildren(){return A.find(Ro,this._parent)}_getActiveElem(){return this._getChildren().find(r=>this._elemIsActive(r))||null}_setInitialAttributes(r,l){this._setAttributeIfNotExists(r,"role","tablist");for(const h of l)this._setInitialAttributesOnChild(h)}_setInitialAttributesOnChild(r){r=this._getInnerElement(r);const l=this._elemIsActive(r),h=this._getOuterElement(r);r.setAttribute("aria-selected",l),h!==r&&this._setAttributeIfNotExists(h,"role","presentation"),l||r.setAttribute("tabindex","-1"),this._setAttributeIfNotExists(r,"role","tab"),this._setInitialAttributesOnTargetPanel(r)}_setInitialAttributesOnTargetPanel(r){const l=A.getElementFromSelector(r);l&&(this._setAttributeIfNotExists(l,"role","tabpanel"),r.id&&this._setAttributeIfNotExists(l,"aria-labelledby",`${r.id}`))}_toggleDropDown(r,l){const h=this._getOuterElement(r);if(!h.classList.contains("dropdown"))return;const y=(v,S)=>{const L=A.findOne(v,h);L&&L.classList.toggle(S,l)};y(pc,es),y(".dropdown-menu",Oo),h.setAttribute("aria-expanded",l)}_setAttributeIfNotExists(r,l,h){r.hasAttribute(l)||r.setAttribute(l,h)}_elemIsActive(r){return r.classList.contains(es)}_getInnerElement(r){return r.matches(Ro)?r:A.findOne(Ro,r)}_getOuterElement(r){return r.closest(".nav-item, .list-group-item")||r}static jQueryInterface(r){return this.each(function(){const l=ts.getOrCreateInstance(this);if(typeof r=="string"){if(l[r]===void 0||r.startsWith("_")||r==="constructor")throw new TypeError(`No method named "${r}"`);l[r]()}})}}I.on(document,lm,mc,function(u){["A","AREA"].includes(this.tagName)&&u.preventDefault(),d(this)||ts.getOrCreateInstance(this).show()}),I.on(window,um,()=>{for(const u of A.find(hm))ts.getOrCreateInstance(u)}),$(ts);const On=".bs.toast",pm=`mouseover${On}`,mm=`mouseout${On}`,gm=`focusin${On}`,_m=`focusout${On}`,bm=`hide${On}`,ym=`hidden${On}`,vm=`show${On}`,wm=`shown${On}`,gc="hide",Yr="show",Zr="showing",Em={animation:"boolean",autohide:"boolean",delay:"number"},Cm={animation:!0,autohide:!0,delay:5e3};class er extends Be{constructor(r,l){super(r,l),this._timeout=null,this._hasMouseInteraction=!1,this._hasKeyboardInteraction=!1,this._setListeners()}static get Default(){return Cm}static get DefaultType(){return Em}static get NAME(){return"toast"}show(){I.trigger(this._element,vm).defaultPrevented||(this._clearTimeout(),this._config.animation&&this._element.classList.add("fade"),this._element.classList.remove(gc),w(this._element),this._element.classList.add(Yr,Zr),this._queueCallback(()=>{this._element.classList.remove(Zr),I.trigger(this._element,wm),this._maybeScheduleHide()},this._element,this._config.animation))}hide(){this.isShown()&&(I.trigger(this._element,bm).defaultPrevented||(this._element.classList.add(Zr),this._queueCallback(()=>{this._element.classList.add(gc),this._element.classList.remove(Zr,Yr),I.trigger(this._element,ym)},this._element,this._config.animation)))}dispose(){this._clearTimeout(),this.isShown()&&this._element.classList.remove(Yr),super.dispose()}isShown(){return this._element.classList.contains(Yr)}_maybeScheduleHide(){this._config.autohide&&(this._hasMouseInteraction||this._hasKeyboardInteraction||(this._timeout=setTimeout(()=>{this.hide()},this._config.delay)))}_onInteraction(r,l){switch(r.type){case"mouseover":case"mouseout":this._hasMouseInteraction=l;break;case"focusin":case"focusout":this._hasKeyboardInteraction=l}if(l)return void this._clearTimeout();const h=r.relatedTarget;this._element===h||this._element.contains(h)||this._maybeScheduleHide()}_setListeners(){I.on(this._element,pm,r=>this._onInteraction(r,!0)),I.on(this._element,mm,r=>this._onInteraction(r,!1)),I.on(this._element,gm,r=>this._onInteraction(r,!0)),I.on(this._element,_m,r=>this._onInteraction(r,!1))}_clearTimeout(){clearTimeout(this._timeout),this._timeout=null}static jQueryInterface(r){return this.each(function(){const l=er.getOrCreateInstance(this,r);if(typeof r=="string"){if(l[r]===void 0)throw new TypeError(`No method named "${r}"`);l[r](this)}})}}return V(er),$(er),{Alert:g,Button:E,Carousel:bs,Collapse:vs,Dropdown:Ht,Modal:Qn,Offcanvas:mn,Popover:Qr,ScrollSpy:Zs,Tab:ts,Toast:er,Tooltip:Yn}})})(t0);/*! +* Tabler v1.0.0-beta19 (https://tabler.io) +* @version 1.0.0-beta19 +* @link https://tabler.io +* Copyright 2018-2023 The Tabler Authors +* Copyright 2018-2023 codecalm.net Paweł Kuna +* Licensed under MIT (https://github.com/tabler/tabler/blob/master/LICENSE) +*/(function(e){typeof define=="function"&&define.amd?define(e):e()})(function(){var e,t="tablerTheme",n=new Proxy(new URLSearchParams(window.location.search),{get:function(i,o){return i.get(o)}});if(n.theme)localStorage.setItem(t,n.theme),e=n.theme;else{var s=localStorage.getItem(t);e=s||"light"}e==="dark"?document.body.setAttribute("data-bs-theme",e):document.body.removeAttribute("data-bs-theme")});const Mr=Td(Sy);Ke.defaults.baseURL=sw();Mr.config.globalProperties.axios=Ke;Mr.use(pb());Mr.use(dh);Mr.use(Zw,{});Mr.mount("#app");export{o0 as A,Pr as B,Or as C,f0 as D,u0 as E,tt as F,Ir as G,Ua as H,dh as I,c0 as J,sw as K,Ke as L,gd as M,e0 as N,h0 as O,Hd as R,_s as a,nt as b,qt as c,dn as d,Bi as e,d0 as f,Ft as g,fr as h,Bf as i,n0 as j,jc as k,i0 as l,Bo as m,Hn as n,Ue as o,s0 as p,nw as q,ja as r,jt as s,xa as t,jn as u,l0 as v,lb as w,Uf as x,r0 as y,a0 as z}; diff --git a/src/main/resources/static/assets/index-CISynB0Y.css b/src/main/resources/static/assets/index-CISynB0Y.css new file mode 100644 index 00000000..a447e981 --- /dev/null +++ b/src/main/resources/static/assets/index-CISynB0Y.css @@ -0,0 +1,30 @@ +@charset "UTF-8";/*! +* Tabler v1.0.0-beta21 (https://tabler.io) +* @version 1.0.0-beta21 +* @link https://tabler.io +* Copyright 2018-2024 The Tabler Authors +* Copyright 2018-2024 codecalm.net Paweł Kuna +* Licensed under MIT (https://github.com/tabler/tabler/blob/master/LICENSE) +*/:root,[data-bs-theme=light]{--tblr-black:#000000;--tblr-white:#ffffff;--tblr-gray:#49566c;--tblr-gray-dark:#182433;--tblr-gray-100:#eef3f6;--tblr-gray-200:#dce1e7;--tblr-gray-300:#b8c4d4;--tblr-gray-400:#8a97ab;--tblr-gray-500:#6c7a91;--tblr-gray-600:#49566c;--tblr-gray-700:#3a4859;--tblr-gray-800:#182433;--tblr-gray-900:#040a11;--tblr-primary:#066fd1;--tblr-secondary:#6c7a91;--tblr-success:#2fb344;--tblr-info:#4299e1;--tblr-warning:#f76707;--tblr-danger:#d63939;--tblr-light:#f6f8fb;--tblr-dark:#182433;--tblr-muted:#6c7a91;--tblr-blue:#066fd1;--tblr-azure:#4299e1;--tblr-indigo:#4263eb;--tblr-purple:#ae3ec9;--tblr-pink:#d6336c;--tblr-red:#d63939;--tblr-orange:#f76707;--tblr-yellow:#f59f00;--tblr-lime:#74b816;--tblr-green:#2fb344;--tblr-teal:#0ca678;--tblr-cyan:#17a2b8;--tblr-x:#000000;--tblr-facebook:#1877f2;--tblr-twitter:#1da1f2;--tblr-linkedin:#0a66c2;--tblr-google:#dc4e41;--tblr-youtube:#ff0000;--tblr-vimeo:#1ab7ea;--tblr-dribbble:#ea4c89;--tblr-github:#181717;--tblr-instagram:#e4405f;--tblr-pinterest:#bd081c;--tblr-vk:#6383a8;--tblr-rss:#ffa500;--tblr-flickr:#0063dc;--tblr-bitbucket:#0052cc;--tblr-tabler:#066fd1;--tblr-primary-rgb:6,111,209;--tblr-secondary-rgb:108,122,145;--tblr-success-rgb:47,179,68;--tblr-info-rgb:66,153,225;--tblr-warning-rgb:247,103,7;--tblr-danger-rgb:214,57,57;--tblr-light-rgb:246,248,251;--tblr-dark-rgb:24,36,51;--tblr-muted-rgb:108,122,145;--tblr-blue-rgb:6,111,209;--tblr-azure-rgb:66,153,225;--tblr-indigo-rgb:66,99,235;--tblr-purple-rgb:174,62,201;--tblr-pink-rgb:214,51,108;--tblr-red-rgb:214,57,57;--tblr-orange-rgb:247,103,7;--tblr-yellow-rgb:245,159,0;--tblr-lime-rgb:116,184,22;--tblr-green-rgb:47,179,68;--tblr-teal-rgb:12,166,120;--tblr-cyan-rgb:23,162,184;--tblr-x-rgb:0,0,0;--tblr-facebook-rgb:24,119,242;--tblr-twitter-rgb:29,161,242;--tblr-linkedin-rgb:10,102,194;--tblr-google-rgb:220,78,65;--tblr-youtube-rgb:255,0,0;--tblr-vimeo-rgb:26,183,234;--tblr-dribbble-rgb:234,76,137;--tblr-github-rgb:24,23,23;--tblr-instagram-rgb:228,64,95;--tblr-pinterest-rgb:189,8,28;--tblr-vk-rgb:99,131,168;--tblr-rss-rgb:255,165,0;--tblr-flickr-rgb:0,99,220;--tblr-bitbucket-rgb:0,82,204;--tblr-tabler-rgb:6,111,209;--tblr-primary-text-emphasis:#022c54;--tblr-secondary-text-emphasis:#2b313a;--tblr-success-text-emphasis:#13481b;--tblr-info-text-emphasis:#1a3d5a;--tblr-warning-text-emphasis:#632903;--tblr-danger-text-emphasis:#561717;--tblr-light-text-emphasis:#3a4859;--tblr-dark-text-emphasis:#3a4859;--tblr-primary-bg-subtle:#cde2f6;--tblr-secondary-bg-subtle:#e2e4e9;--tblr-success-bg-subtle:#d5f0da;--tblr-info-bg-subtle:#d9ebf9;--tblr-warning-bg-subtle:#fde1cd;--tblr-danger-bg-subtle:#f7d7d7;--tblr-light-bg-subtle:#f7f9fb;--tblr-dark-bg-subtle:#8a97ab;--tblr-primary-border-subtle:#9bc5ed;--tblr-secondary-border-subtle:#c4cad3;--tblr-success-border-subtle:#ace1b4;--tblr-info-border-subtle:#b3d6f3;--tblr-warning-border-subtle:#fcc29c;--tblr-danger-border-subtle:#efb0b0;--tblr-light-border-subtle:#dce1e7;--tblr-dark-border-subtle:#6c7a91;--tblr-white-rgb:255,255,255;--tblr-black-rgb:0,0,0;--tblr-font-sans-serif:-apple-system,BlinkMacSystemFont,San Francisco,Segoe UI,Roboto,Helvetica Neue,sans-serif;--tblr-font-monospace:Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;--tblr-gradient:linear-gradient(180deg, rgba(255, 255, 255, .15), rgba(255, 255, 255, 0));--tblr-body-font-family:var(--tblr-font-sans-serif);--tblr-body-font-size:.875rem;--tblr-body-font-weight:400;--tblr-body-line-height:1.4285714286;--tblr-body-color:#182433;--tblr-body-color-rgb:24,36,51;--tblr-body-bg:#f6f8fb;--tblr-body-bg-rgb:246,248,251;--tblr-emphasis-color:#3a4859;--tblr-emphasis-color-rgb:58,72,89;--tblr-secondary-color:rgba(24, 36, 51, .75);--tblr-secondary-color-rgb:24,36,51;--tblr-secondary-bg:#dce1e7;--tblr-secondary-bg-rgb:220,225,231;--tblr-tertiary-color:rgba(24, 36, 51, .5);--tblr-tertiary-color-rgb:24,36,51;--tblr-tertiary-bg:#eef3f6;--tblr-tertiary-bg-rgb:238,243,246;--tblr-heading-color:inherit;--tblr-link-color:#066fd1;--tblr-link-color-rgb:6,111,209;--tblr-link-decoration:none;--tblr-link-hover-color:#0559a7;--tblr-link-hover-color-rgb:5,89,167;--tblr-link-hover-decoration:underline;--tblr-code-color:var(--tblr-gray-600);--tblr-highlight-color:#182433;--tblr-highlight-bg:#fdeccc;--tblr-border-width:1px;--tblr-border-style:solid;--tblr-border-color:#dce1e7;--tblr-border-color-translucent:rgba(4, 32, 69, .1);--tblr-border-radius:4px;--tblr-border-radius-sm:2px;--tblr-border-radius-lg:8px;--tblr-border-radius-xl:1rem;--tblr-border-radius-xxl:2rem;--tblr-border-radius-2xl:var(--tblr-border-radius-xxl);--tblr-border-radius-pill:100rem;--tblr-box-shadow:rgba(var(--tblr-body-color-rgb), .04) 0 2px 4px 0;--tblr-box-shadow-sm:0 .125rem .25rem rgba(0, 0, 0, .075);--tblr-box-shadow-lg:0 1rem 3rem rgba(0, 0, 0, .175);--tblr-box-shadow-inset:0 0 transparent;--tblr-focus-ring-width:.25rem;--tblr-focus-ring-opacity:.25;--tblr-focus-ring-color:rgba(var(--tblr-primary-rgb), .25);--tblr-form-valid-color:#2fb344;--tblr-form-valid-border-color:#2fb344;--tblr-form-invalid-color:#d63939;--tblr-form-invalid-border-color:#d63939}[data-bs-theme=dark],body[data-bs-theme=dark] [data-bs-theme=light]{color-scheme:dark;--tblr-body-color:#dce1e7;--tblr-body-color-rgb:220,225,231;--tblr-body-bg:#040a11;--tblr-body-bg-rgb:4,10,17;--tblr-emphasis-color:#ffffff;--tblr-emphasis-color-rgb:255,255,255;--tblr-secondary-color:rgba(220, 225, 231, .75);--tblr-secondary-color-rgb:220,225,231;--tblr-secondary-bg:#182433;--tblr-secondary-bg-rgb:24,36,51;--tblr-tertiary-color:rgba(220, 225, 231, .5);--tblr-tertiary-color-rgb:220,225,231;--tblr-tertiary-bg:#0e1722;--tblr-tertiary-bg-rgb:14,23,34;--tblr-primary-text-emphasis:#6aa9e3;--tblr-secondary-text-emphasis:#a7afbd;--tblr-success-text-emphasis:#82d18f;--tblr-info-text-emphasis:#8ec2ed;--tblr-warning-text-emphasis:#faa46a;--tblr-danger-text-emphasis:#e68888;--tblr-light-text-emphasis:#eef3f6;--tblr-dark-text-emphasis:#b8c4d4;--tblr-primary-bg-subtle:#01162a;--tblr-secondary-bg-subtle:#16181d;--tblr-success-bg-subtle:#09240e;--tblr-info-bg-subtle:#0d1f2d;--tblr-warning-bg-subtle:#311501;--tblr-danger-bg-subtle:#2b0b0b;--tblr-light-bg-subtle:#182433;--tblr-dark-bg-subtle:#0c121a;--tblr-primary-border-subtle:#04437d;--tblr-secondary-border-subtle:#414957;--tblr-success-border-subtle:#1c6b29;--tblr-info-border-subtle:#285c87;--tblr-warning-border-subtle:#943e04;--tblr-danger-border-subtle:#802222;--tblr-light-border-subtle:#3a4859;--tblr-dark-border-subtle:#182433;--tblr-heading-color:inherit;--tblr-link-color:#6aa9e3;--tblr-link-hover-color:#88bae9;--tblr-link-color-rgb:106,169,227;--tblr-link-hover-color-rgb:136,186,233;--tblr-code-color:var(--tblr-gray-300);--tblr-highlight-color:#dce1e7;--tblr-highlight-bg:#624000;--tblr-border-color:#25384f;--tblr-border-color-translucent:rgba(72, 110, 149, .14);--tblr-form-valid-color:#82d18f;--tblr-form-valid-border-color:#82d18f;--tblr-form-invalid-color:#e68888;--tblr-form-invalid-border-color:#e68888}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:var(--tblr-spacer);font-weight:var(--tblr-font-weight-bold);line-height:1.2;color:var(--tblr-heading-color)}.mark,mark{padding:.1875em;color:var(--tblr-highlight-color);background-color:var(--tblr-highlight-bg)}.blockquote-footer{margin-top:-1rem;margin-bottom:1rem;font-size:85.714285%;color:#49566c}@media (min-width:576px){.col-sm{flex:1 0 0%}.row-cols-sm-auto>*{flex:0 0 auto;width:auto}.row-cols-sm-1>*{flex:0 0 auto;width:100%}.row-cols-sm-2>*{flex:0 0 auto;width:50%}.row-cols-sm-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-sm-4>*{flex:0 0 auto;width:25%}.row-cols-sm-5>*{flex:0 0 auto;width:20%}.row-cols-sm-6>*{flex:0 0 auto;width:16.66666667%}.col-sm-auto{flex:0 0 auto;width:auto}.col-sm-1{flex:0 0 auto;width:8.33333333%}.col-sm-2{flex:0 0 auto;width:16.66666667%}.col-sm-3{flex:0 0 auto;width:25%}.col-sm-4{flex:0 0 auto;width:33.33333333%}.col-sm-5{flex:0 0 auto;width:41.66666667%}.col-sm-6{flex:0 0 auto;width:50%}.col-sm-7{flex:0 0 auto;width:58.33333333%}.col-sm-8{flex:0 0 auto;width:66.66666667%}.col-sm-9{flex:0 0 auto;width:75%}.col-sm-10{flex:0 0 auto;width:83.33333333%}.col-sm-11{flex:0 0 auto;width:91.66666667%}.col-sm-12{flex:0 0 auto;width:100%}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333333%}.offset-sm-2{margin-left:16.66666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333333%}.offset-sm-5{margin-left:41.66666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333333%}.offset-sm-8{margin-left:66.66666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333333%}.offset-sm-11{margin-left:91.66666667%}.g-sm-0,.gx-sm-0{--tblr-gutter-x:0}.g-sm-0,.gy-sm-0{--tblr-gutter-y:0}.g-sm-1,.gx-sm-1{--tblr-gutter-x:.25rem}.g-sm-1,.gy-sm-1{--tblr-gutter-y:.25rem}.g-sm-2,.gx-sm-2{--tblr-gutter-x:.5rem}.g-sm-2,.gy-sm-2{--tblr-gutter-y:.5rem}.g-sm-3,.gx-sm-3{--tblr-gutter-x:1rem}.g-sm-3,.gy-sm-3{--tblr-gutter-y:1rem}.g-sm-4,.gx-sm-4{--tblr-gutter-x:1.5rem}.g-sm-4,.gy-sm-4{--tblr-gutter-y:1.5rem}.g-sm-5,.gx-sm-5{--tblr-gutter-x:2rem}.g-sm-5,.gy-sm-5{--tblr-gutter-y:2rem}.g-sm-6,.gx-sm-6{--tblr-gutter-x:3rem}.g-sm-6,.gy-sm-6{--tblr-gutter-y:3rem}.g-sm-7,.gx-sm-7{--tblr-gutter-x:5rem}.g-sm-7,.gy-sm-7{--tblr-gutter-y:5rem}.g-sm-8,.gx-sm-8{--tblr-gutter-x:8rem}.g-sm-8,.gy-sm-8{--tblr-gutter-y:8rem}}@media (min-width:768px){.col-md{flex:1 0 0%}.row-cols-md-auto>*{flex:0 0 auto;width:auto}.row-cols-md-1>*{flex:0 0 auto;width:100%}.row-cols-md-2>*{flex:0 0 auto;width:50%}.row-cols-md-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-md-4>*{flex:0 0 auto;width:25%}.row-cols-md-5>*{flex:0 0 auto;width:20%}.row-cols-md-6>*{flex:0 0 auto;width:16.66666667%}.col-md-auto{flex:0 0 auto;width:auto}.col-md-1{flex:0 0 auto;width:8.33333333%}.col-md-2{flex:0 0 auto;width:16.66666667%}.col-md-3{flex:0 0 auto;width:25%}.col-md-4{flex:0 0 auto;width:33.33333333%}.col-md-5{flex:0 0 auto;width:41.66666667%}.col-md-6{flex:0 0 auto;width:50%}.col-md-7{flex:0 0 auto;width:58.33333333%}.col-md-8{flex:0 0 auto;width:66.66666667%}.col-md-9{flex:0 0 auto;width:75%}.col-md-10{flex:0 0 auto;width:83.33333333%}.col-md-11{flex:0 0 auto;width:91.66666667%}.col-md-12{flex:0 0 auto;width:100%}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333333%}.offset-md-2{margin-left:16.66666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333333%}.offset-md-5{margin-left:41.66666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333333%}.offset-md-8{margin-left:66.66666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333333%}.offset-md-11{margin-left:91.66666667%}.g-md-0,.gx-md-0{--tblr-gutter-x:0}.g-md-0,.gy-md-0{--tblr-gutter-y:0}.g-md-1,.gx-md-1{--tblr-gutter-x:.25rem}.g-md-1,.gy-md-1{--tblr-gutter-y:.25rem}.g-md-2,.gx-md-2{--tblr-gutter-x:.5rem}.g-md-2,.gy-md-2{--tblr-gutter-y:.5rem}.g-md-3,.gx-md-3{--tblr-gutter-x:1rem}.g-md-3,.gy-md-3{--tblr-gutter-y:1rem}.g-md-4,.gx-md-4{--tblr-gutter-x:1.5rem}.g-md-4,.gy-md-4{--tblr-gutter-y:1.5rem}.g-md-5,.gx-md-5{--tblr-gutter-x:2rem}.g-md-5,.gy-md-5{--tblr-gutter-y:2rem}.g-md-6,.gx-md-6{--tblr-gutter-x:3rem}.g-md-6,.gy-md-6{--tblr-gutter-y:3rem}.g-md-7,.gx-md-7{--tblr-gutter-x:5rem}.g-md-7,.gy-md-7{--tblr-gutter-y:5rem}.g-md-8,.gx-md-8{--tblr-gutter-x:8rem}.g-md-8,.gy-md-8{--tblr-gutter-y:8rem}}@media (min-width:992px){.col-lg{flex:1 0 0%}.row-cols-lg-auto>*{flex:0 0 auto;width:auto}.row-cols-lg-1>*{flex:0 0 auto;width:100%}.row-cols-lg-2>*{flex:0 0 auto;width:50%}.row-cols-lg-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-lg-4>*{flex:0 0 auto;width:25%}.row-cols-lg-5>*{flex:0 0 auto;width:20%}.row-cols-lg-6>*{flex:0 0 auto;width:16.66666667%}.col-lg-auto{flex:0 0 auto;width:auto}.col-lg-1{flex:0 0 auto;width:8.33333333%}.col-lg-2{flex:0 0 auto;width:16.66666667%}.col-lg-3{flex:0 0 auto;width:25%}.col-lg-4{flex:0 0 auto;width:33.33333333%}.col-lg-5{flex:0 0 auto;width:41.66666667%}.col-lg-6{flex:0 0 auto;width:50%}.col-lg-7{flex:0 0 auto;width:58.33333333%}.col-lg-8{flex:0 0 auto;width:66.66666667%}.col-lg-9{flex:0 0 auto;width:75%}.col-lg-10{flex:0 0 auto;width:83.33333333%}.col-lg-11{flex:0 0 auto;width:91.66666667%}.col-lg-12{flex:0 0 auto;width:100%}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333333%}.offset-lg-2{margin-left:16.66666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333333%}.offset-lg-5{margin-left:41.66666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333333%}.offset-lg-8{margin-left:66.66666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333333%}.offset-lg-11{margin-left:91.66666667%}.g-lg-0,.gx-lg-0{--tblr-gutter-x:0}.g-lg-0,.gy-lg-0{--tblr-gutter-y:0}.g-lg-1,.gx-lg-1{--tblr-gutter-x:.25rem}.g-lg-1,.gy-lg-1{--tblr-gutter-y:.25rem}.g-lg-2,.gx-lg-2{--tblr-gutter-x:.5rem}.g-lg-2,.gy-lg-2{--tblr-gutter-y:.5rem}.g-lg-3,.gx-lg-3{--tblr-gutter-x:1rem}.g-lg-3,.gy-lg-3{--tblr-gutter-y:1rem}.g-lg-4,.gx-lg-4{--tblr-gutter-x:1.5rem}.g-lg-4,.gy-lg-4{--tblr-gutter-y:1.5rem}.g-lg-5,.gx-lg-5{--tblr-gutter-x:2rem}.g-lg-5,.gy-lg-5{--tblr-gutter-y:2rem}.g-lg-6,.gx-lg-6{--tblr-gutter-x:3rem}.g-lg-6,.gy-lg-6{--tblr-gutter-y:3rem}.g-lg-7,.gx-lg-7{--tblr-gutter-x:5rem}.g-lg-7,.gy-lg-7{--tblr-gutter-y:5rem}.g-lg-8,.gx-lg-8{--tblr-gutter-x:8rem}.g-lg-8,.gy-lg-8{--tblr-gutter-y:8rem}}@media (min-width:1200px){.col-xl{flex:1 0 0%}.row-cols-xl-auto>*{flex:0 0 auto;width:auto}.row-cols-xl-1>*{flex:0 0 auto;width:100%}.row-cols-xl-2>*{flex:0 0 auto;width:50%}.row-cols-xl-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-xl-4>*{flex:0 0 auto;width:25%}.row-cols-xl-5>*{flex:0 0 auto;width:20%}.row-cols-xl-6>*{flex:0 0 auto;width:16.66666667%}.col-xl-auto{flex:0 0 auto;width:auto}.col-xl-1{flex:0 0 auto;width:8.33333333%}.col-xl-2{flex:0 0 auto;width:16.66666667%}.col-xl-3{flex:0 0 auto;width:25%}.col-xl-4{flex:0 0 auto;width:33.33333333%}.col-xl-5{flex:0 0 auto;width:41.66666667%}.col-xl-6{flex:0 0 auto;width:50%}.col-xl-7{flex:0 0 auto;width:58.33333333%}.col-xl-8{flex:0 0 auto;width:66.66666667%}.col-xl-9{flex:0 0 auto;width:75%}.col-xl-10{flex:0 0 auto;width:83.33333333%}.col-xl-11{flex:0 0 auto;width:91.66666667%}.col-xl-12{flex:0 0 auto;width:100%}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333333%}.offset-xl-2{margin-left:16.66666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333333%}.offset-xl-5{margin-left:41.66666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333333%}.offset-xl-8{margin-left:66.66666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333333%}.offset-xl-11{margin-left:91.66666667%}.g-xl-0,.gx-xl-0{--tblr-gutter-x:0}.g-xl-0,.gy-xl-0{--tblr-gutter-y:0}.g-xl-1,.gx-xl-1{--tblr-gutter-x:.25rem}.g-xl-1,.gy-xl-1{--tblr-gutter-y:.25rem}.g-xl-2,.gx-xl-2{--tblr-gutter-x:.5rem}.g-xl-2,.gy-xl-2{--tblr-gutter-y:.5rem}.g-xl-3,.gx-xl-3{--tblr-gutter-x:1rem}.g-xl-3,.gy-xl-3{--tblr-gutter-y:1rem}.g-xl-4,.gx-xl-4{--tblr-gutter-x:1.5rem}.g-xl-4,.gy-xl-4{--tblr-gutter-y:1.5rem}.g-xl-5,.gx-xl-5{--tblr-gutter-x:2rem}.g-xl-5,.gy-xl-5{--tblr-gutter-y:2rem}.g-xl-6,.gx-xl-6{--tblr-gutter-x:3rem}.g-xl-6,.gy-xl-6{--tblr-gutter-y:3rem}.g-xl-7,.gx-xl-7{--tblr-gutter-x:5rem}.g-xl-7,.gy-xl-7{--tblr-gutter-y:5rem}.g-xl-8,.gx-xl-8{--tblr-gutter-x:8rem}.g-xl-8,.gy-xl-8{--tblr-gutter-y:8rem}}@media (min-width:1400px){.col-xxl{flex:1 0 0%}.row-cols-xxl-auto>*{flex:0 0 auto;width:auto}.row-cols-xxl-1>*{flex:0 0 auto;width:100%}.row-cols-xxl-2>*{flex:0 0 auto;width:50%}.row-cols-xxl-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-xxl-4>*{flex:0 0 auto;width:25%}.row-cols-xxl-5>*{flex:0 0 auto;width:20%}.row-cols-xxl-6>*{flex:0 0 auto;width:16.66666667%}.col-xxl-auto{flex:0 0 auto;width:auto}.col-xxl-1{flex:0 0 auto;width:8.33333333%}.col-xxl-2{flex:0 0 auto;width:16.66666667%}.col-xxl-3{flex:0 0 auto;width:25%}.col-xxl-4{flex:0 0 auto;width:33.33333333%}.col-xxl-5{flex:0 0 auto;width:41.66666667%}.col-xxl-6{flex:0 0 auto;width:50%}.col-xxl-7{flex:0 0 auto;width:58.33333333%}.col-xxl-8{flex:0 0 auto;width:66.66666667%}.col-xxl-9{flex:0 0 auto;width:75%}.col-xxl-10{flex:0 0 auto;width:83.33333333%}.col-xxl-11{flex:0 0 auto;width:91.66666667%}.col-xxl-12{flex:0 0 auto;width:100%}.offset-xxl-0{margin-left:0}.offset-xxl-1{margin-left:8.33333333%}.offset-xxl-2{margin-left:16.66666667%}.offset-xxl-3{margin-left:25%}.offset-xxl-4{margin-left:33.33333333%}.offset-xxl-5{margin-left:41.66666667%}.offset-xxl-6{margin-left:50%}.offset-xxl-7{margin-left:58.33333333%}.offset-xxl-8{margin-left:66.66666667%}.offset-xxl-9{margin-left:75%}.offset-xxl-10{margin-left:83.33333333%}.offset-xxl-11{margin-left:91.66666667%}.g-xxl-0,.gx-xxl-0{--tblr-gutter-x:0}.g-xxl-0,.gy-xxl-0{--tblr-gutter-y:0}.g-xxl-1,.gx-xxl-1{--tblr-gutter-x:.25rem}.g-xxl-1,.gy-xxl-1{--tblr-gutter-y:.25rem}.g-xxl-2,.gx-xxl-2{--tblr-gutter-x:.5rem}.g-xxl-2,.gy-xxl-2{--tblr-gutter-y:.5rem}.g-xxl-3,.gx-xxl-3{--tblr-gutter-x:1rem}.g-xxl-3,.gy-xxl-3{--tblr-gutter-y:1rem}.g-xxl-4,.gx-xxl-4{--tblr-gutter-x:1.5rem}.g-xxl-4,.gy-xxl-4{--tblr-gutter-y:1.5rem}.g-xxl-5,.gx-xxl-5{--tblr-gutter-x:2rem}.g-xxl-5,.gy-xxl-5{--tblr-gutter-y:2rem}.g-xxl-6,.gx-xxl-6{--tblr-gutter-x:3rem}.g-xxl-6,.gy-xxl-6{--tblr-gutter-y:3rem}.g-xxl-7,.gx-xxl-7{--tblr-gutter-x:5rem}.g-xxl-7,.gy-xxl-7{--tblr-gutter-y:5rem}.g-xxl-8,.gx-xxl-8{--tblr-gutter-x:8rem}.g-xxl-8,.gy-xxl-8{--tblr-gutter-y:8rem}}.markdown>table,.table{--tblr-table-color-type:initial;--tblr-table-bg-type:initial;--tblr-table-color-state:initial;--tblr-table-bg-state:initial;--tblr-table-color:inherit;--tblr-table-bg:transparent;--tblr-table-border-color:var(--tblr-border-color-translucent);--tblr-table-accent-bg:transparent;--tblr-table-striped-color:inherit;--tblr-table-striped-bg:var(--tblr-bg-surface-tertiary);--tblr-table-active-color:inherit;--tblr-table-active-bg:rgba(var(--tblr-emphasis-color-rgb), .1);--tblr-table-hover-color:inherit;--tblr-table-hover-bg:rgba(var(--tblr-emphasis-color-rgb), .075);width:100%;margin-bottom:1rem;vertical-align:top;border-color:var(--tblr-table-border-color)}.markdown>table>:not(caption)>*>*,.table>:not(caption)>*>*{padding:.75rem;color:var(--tblr-table-color-state,var(--tblr-table-color-type,var(--tblr-table-color)));background-color:var(--tblr-table-bg);border-bottom-width:var(--tblr-border-width);box-shadow:inset 0 0 0 9999px var(--tblr-table-bg-state,var(--tblr-table-bg-type,var(--tblr-table-accent-bg)))}.table-striped>tbody>tr:nth-of-type(2n)>*{--tblr-table-color-type:var(--tblr-table-striped-color);--tblr-table-bg-type:var(--tblr-table-striped-bg)}.table-striped-columns>:not(caption)>tr>:nth-child(2n){--tblr-table-color-type:var(--tblr-table-striped-color);--tblr-table-bg-type:var(--tblr-table-striped-bg)}.table-active{--tblr-table-color-state:var(--tblr-table-active-color);--tblr-table-bg-state:var(--tblr-table-active-bg)}.table-hover>tbody>tr:hover>*{--tblr-table-color-state:var(--tblr-table-hover-color);--tblr-table-bg-state:var(--tblr-table-hover-bg)}.table-primary{--tblr-table-color:#182433;--tblr-table-bg:#cde2f6;--tblr-table-border-color:#a9bccf;--tblr-table-striped-bg:#c4d9ec;--tblr-table-striped-color:#182433;--tblr-table-active-bg:#bbcfe3;--tblr-table-active-color:#f6f8fb;--tblr-table-hover-bg:#bfd4e7;--tblr-table-hover-color:#182433;color:var(--tblr-table-color);border-color:var(--tblr-table-border-color)}.table-secondary{--tblr-table-color:#182433;--tblr-table-bg:#e2e4e9;--tblr-table-border-color:#babec5;--tblr-table-striped-bg:#d8dae0;--tblr-table-striped-color:#182433;--tblr-table-active-bg:#ced1d7;--tblr-table-active-color:#182433;--tblr-table-hover-bg:#d3d6db;--tblr-table-hover-color:#182433;color:var(--tblr-table-color);border-color:var(--tblr-table-border-color)}.table-success{--tblr-table-color:#182433;--tblr-table-bg:#d5f0da;--tblr-table-border-color:#afc7b9;--tblr-table-striped-bg:#cce6d2;--tblr-table-striped-color:#182433;--tblr-table-active-bg:#c2dcc9;--tblr-table-active-color:#182433;--tblr-table-hover-bg:#c7e1cd;--tblr-table-hover-color:#182433;color:var(--tblr-table-color);border-color:var(--tblr-table-border-color)}.table-info{--tblr-table-color:#182433;--tblr-table-bg:#d9ebf9;--tblr-table-border-color:#b2c3d1;--tblr-table-striped-bg:#cfe1ef;--tblr-table-striped-color:#182433;--tblr-table-active-bg:#c6d7e5;--tblr-table-active-color:#182433;--tblr-table-hover-bg:#cbdcea;--tblr-table-hover-color:#182433;color:var(--tblr-table-color);border-color:var(--tblr-table-border-color)}.table-warning{--tblr-table-color:#182433;--tblr-table-bg:#fde1cd;--tblr-table-border-color:#cfbbae;--tblr-table-striped-bg:#f2d8c5;--tblr-table-striped-color:#182433;--tblr-table-active-bg:#e6cebe;--tblr-table-active-color:#182433;--tblr-table-hover-bg:#ecd3c1;--tblr-table-hover-color:#182433;color:var(--tblr-table-color);border-color:var(--tblr-table-border-color)}.table-danger{--tblr-table-color:#182433;--tblr-table-bg:#f7d7d7;--tblr-table-border-color:#cab3b6;--tblr-table-striped-bg:#eccecf;--tblr-table-striped-color:#182433;--tblr-table-active-bg:#e1c5c7;--tblr-table-active-color:#f6f8fb;--tblr-table-hover-bg:#e6cacb;--tblr-table-hover-color:#182433;color:var(--tblr-table-color);border-color:var(--tblr-table-border-color)}.table-light{--tblr-table-color:#182433;--tblr-table-bg:#f6f8fb;--tblr-table-border-color:#caced3;--tblr-table-striped-bg:#ebedf1;--tblr-table-striped-color:#182433;--tblr-table-active-bg:#e0e3e7;--tblr-table-active-color:#182433;--tblr-table-hover-bg:#e5e8ec;--tblr-table-hover-color:#182433;color:var(--tblr-table-color);border-color:var(--tblr-table-border-color)}.table-dark{--tblr-table-color:#f6f8fb;--tblr-table-bg:#182433;--tblr-table-border-color:#444e5b;--tblr-table-striped-bg:#232f3d;--tblr-table-striped-color:#f6f8fb;--tblr-table-active-bg:#2e3947;--tblr-table-active-color:#f6f8fb;--tblr-table-hover-bg:#293442;--tblr-table-hover-color:#f6f8fb;color:var(--tblr-table-color);border-color:var(--tblr-table-border-color)}.form-control:focus{color:var(--tblr-body-color);background-color:var(--tblr-bg-forms);border-color:#83b7e8;outline:0;box-shadow:var(--tblr-box-shadow-input),0 0 0 .25rem rgba(var(--tblr-primary-rgb),.25)}.form-control::-webkit-input-placeholder{color:#8a97ab;opacity:1}.form-control:-ms-input-placeholder{color:#8a97ab;opacity:1}.form-control::-ms-input-placeholder{color:#8a97ab;opacity:1}.form-control::placeholder{color:#8a97ab;opacity:1}.form-select{--tblr-form-select-bg-img:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%238a97ab' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e");display:block;width:100%;padding:.5625rem 2.25rem .5625rem .75rem;font-family:var(--tblr-font-sans-serif);font-size:.875rem;font-weight:400;line-height:1.4285714286;color:var(--tblr-body-color);-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--tblr-bg-forms);background-image:var(--tblr-form-select-bg-img),var(--tblr-form-select-bg-icon,none);background-repeat:no-repeat;background-position:right .75rem center;background-size:16px 12px;border:var(--tblr-border-width) solid var(--tblr-border-color);border-radius:var(--tblr-border-radius);box-shadow:var(--tblr-box-shadow-input);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-select:focus{border-color:#83b7e8;outline:0;box-shadow:var(--tblr-box-shadow-input),0 0 0 .25rem rgba(var(--tblr-primary-rgb),.25)}[data-bs-theme=dark] .form-select,body[data-bs-theme=dark] [data-bs-theme=light] .form-select{--tblr-form-select-bg-img:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23dce1e7' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e")}.form-check-input{--tblr-form-check-bg:var(--tblr-bg-forms);flex-shrink:0;width:1.25rem;height:1.25rem;margin-top:.0892857143rem;vertical-align:top;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--tblr-form-check-bg);background-image:var(--tblr-form-check-bg-image);background-repeat:no-repeat;background-position:center;background-size:contain;border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent);-webkit-print-color-adjust:exact;color-adjust:exact;print-color-adjust:exact}.form-check-input:focus{border-color:#83b7e8;outline:0;box-shadow:0 0 0 .25rem rgba(var(--tblr-primary-rgb),.25)}.form-check-input:checked[type=checkbox]{--tblr-form-check-bg-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' width='16' height='16'%3e%3cpath fill='none' stroke='%23ffffff' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8.5l2.5 2.5l5.5 -5.5'/%3e%3c/svg%3e")}.form-check-input:checked[type=radio]{--tblr-form-check-bg-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3ccircle r='3' fill='%23ffffff' cx='8' cy='8' /%3e%3c/svg%3e")}.form-check-input[type=checkbox]:indeterminate{background-color:var(--tblr-primary);border-color:var(--tblr-primary);--tblr-form-check-bg-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23ffffff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e")}.form-switch .form-check-input{--tblr-form-switch-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23dce1e7'/%3e%3c/svg%3e");width:2rem;margin-left:-2.5rem;background-image:var(--tblr-form-switch-bg);background-position:left center;border-radius:2rem;transition:background-position .15s ease-in-out}.form-switch .form-check-input:focus{--tblr-form-switch-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2383b7e8'/%3e%3c/svg%3e")}.form-switch .form-check-input:checked{background-position:right center;--tblr-form-switch-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23ffffff'/%3e%3c/svg%3e")}[data-bs-theme=dark] .form-switch .form-check-input:not(:checked):not(:focus){--tblr-form-switch-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%28255, 255, 255, 0.25%29'/%3e%3c/svg%3e")}.form-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.375rem;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--tblr-primary);border:2px var(--tblr-border-style) #fff;border-radius:1rem;box-shadow:0 .1rem .25rem #0000001a;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-range::-webkit-slider-thumb:active{background-color:#b4d4f1}.form-range::-webkit-slider-runnable-track{width:100%;height:.25rem;color:transparent;cursor:pointer;background-color:var(--tblr-border-color);border-color:transparent;border-radius:1rem;box-shadow:var(--tblr-box-shadow-inset)}.form-range::-moz-range-thumb{width:1rem;height:1rem;-moz-appearance:none;-webkit-appearance:none;appearance:none;background-color:var(--tblr-primary);border:2px var(--tblr-border-style) #fff;border-radius:1rem;box-shadow:0 .1rem .25rem #0000001a;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-range::-moz-range-thumb:active{background-color:#b4d4f1}.form-range::-moz-range-track{width:100%;height:.25rem;color:transparent;cursor:pointer;background-color:var(--tblr-border-color);border-color:transparent;border-radius:1rem;box-shadow:var(--tblr-box-shadow-inset)}.form-floating>.form-control:disabled~label,.form-floating>:disabled~label{color:#49566c}.form-floating>.form-control:disabled~label:after,.form-floating>:disabled~label:after{background-color:var(--tblr-bg-surface-secondary)}.input-group-text{display:flex;align-items:center;padding:.5625rem .75rem;font-size:.875rem;font-weight:400;line-height:1.4285714286;color:var(--tblr-gray-500);text-align:center;white-space:nowrap;background-color:var(--tblr-bg-surface-secondary);border:var(--tblr-border-width) solid var(--tblr-border-color);border-radius:var(--tblr-border-radius)}.form-control.is-valid,.was-validated .form-control:valid{border-color:var(--tblr-form-valid-border-color);padding-right:calc(1.4285714286em + 1.125rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%232fb344' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3e%3cpolyline points='20 6 9 17 4 12'%3e%3c/polyline%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.3571428572em + .28125rem) center;background-size:calc(.7142857143em + .5625rem) calc(.7142857143em + .5625rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:var(--tblr-form-valid-border-color);box-shadow:var(--tblr-box-shadow-input),0 0 0 .25rem rgba(var(--tblr-success-rgb),.25)}.form-select.is-valid:not([multiple]):not([size]),.form-select.is-valid:not([multiple])[size="1"],.was-validated .form-select:valid:not([multiple]):not([size]),.was-validated .form-select:valid:not([multiple])[size="1"]{--tblr-form-select-bg-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%232fb344' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3e%3cpolyline points='20 6 9 17 4 12'%3e%3c/polyline%3e%3c/svg%3e");padding-right:4.125rem;background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.7142857143em + .5625rem) calc(.7142857143em + .5625rem)}.form-select.is-valid:focus,.was-validated .form-select:valid:focus{border-color:var(--tblr-form-valid-border-color);box-shadow:var(--tblr-box-shadow-input),0 0 0 .25rem rgba(var(--tblr-success-rgb),.25)}.form-control-color.is-valid,.was-validated .form-control-color:valid{width:calc(3rem + calc(1.4285714286em + 1.125rem))}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:var(--tblr-form-invalid-border-color);padding-right:calc(1.4285714286em + 1.125rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23d63939' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3e%3cline x1='18' y1='6' x2='6' y2='18'%3e%3c/line%3e%3cline x1='6' y1='6' x2='18' y2='18'%3e%3c/line%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.3571428572em + .28125rem) center;background-size:calc(.7142857143em + .5625rem) calc(.7142857143em + .5625rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:var(--tblr-form-invalid-border-color);box-shadow:var(--tblr-box-shadow-input),0 0 0 .25rem rgba(var(--tblr-danger-rgb),.25)}.form-select.is-invalid:not([multiple]):not([size]),.form-select.is-invalid:not([multiple])[size="1"],.was-validated .form-select:invalid:not([multiple]):not([size]),.was-validated .form-select:invalid:not([multiple])[size="1"]{--tblr-form-select-bg-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23d63939' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3e%3cline x1='18' y1='6' x2='6' y2='18'%3e%3c/line%3e%3cline x1='6' y1='6' x2='18' y2='18'%3e%3c/line%3e%3c/svg%3e");padding-right:4.125rem;background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.7142857143em + .5625rem) calc(.7142857143em + .5625rem)}.form-select.is-invalid:focus,.was-validated .form-select:invalid:focus{border-color:var(--tblr-form-invalid-border-color);box-shadow:var(--tblr-box-shadow-input),0 0 0 .25rem rgba(var(--tblr-danger-rgb),.25)}.form-control-color.is-invalid,.was-validated .form-control-color:invalid{width:calc(3rem + calc(1.4285714286em + 1.125rem))}.btn{--tblr-btn-padding-x:1rem;--tblr-btn-padding-y:.5625rem;--tblr-btn-font-family:var(--tblr-font-sans-serif);--tblr-btn-font-size:.875rem;--tblr-btn-font-weight:var(--tblr-font-weight-medium);--tblr-btn-line-height:1.4285714286;--tblr-btn-color:var(--tblr-body-color);--tblr-btn-bg:transparent;--tblr-btn-border-width:var(--tblr-border-width);--tblr-btn-border-color:transparent;--tblr-btn-border-radius:var(--tblr-border-radius);--tblr-btn-hover-border-color:transparent;--tblr-btn-box-shadow:var(--tblr-box-shadow-input);--tblr-btn-disabled-opacity:.4;--tblr-btn-focus-box-shadow:0 0 0 .25rem rgba(var(--tblr-btn-focus-shadow-rgb), .5);display:inline-block;padding:var(--tblr-btn-padding-y) var(--tblr-btn-padding-x);font-family:var(--tblr-btn-font-family);font-size:var(--tblr-btn-font-size);font-weight:var(--tblr-btn-font-weight);line-height:var(--tblr-btn-line-height);color:var(--tblr-btn-color);text-align:center;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:var(--tblr-btn-border-width) solid var(--tblr-btn-border-color);border-radius:var(--tblr-btn-border-radius);background-color:var(--tblr-btn-bg);box-shadow:var(--tblr-btn-box-shadow);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}.btn-check:checked:focus-visible+.btn{box-shadow:var(--tblr-btn-active-shadow),var(--tblr-btn-focus-box-shadow)}.btn-link{--tblr-btn-font-weight:400;--tblr-btn-color:var(--tblr-link-color);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-link-hover-color);--tblr-btn-hover-border-color:transparent;--tblr-btn-active-color:var(--tblr-link-hover-color);--tblr-btn-active-border-color:transparent;--tblr-btn-disabled-color:#49566c;--tblr-btn-disabled-border-color:transparent;--tblr-btn-box-shadow:0 0 0 #000;--tblr-btn-focus-shadow-rgb:42,132,215;text-decoration:none}.dropdown-menu{--tblr-dropdown-zindex:1000;--tblr-dropdown-min-width:11rem;--tblr-dropdown-padding-x:0;--tblr-dropdown-padding-y:.25rem;--tblr-dropdown-spacer:1px;--tblr-dropdown-font-size:.875rem;--tblr-dropdown-color:var(--tblr-body-color);--tblr-dropdown-bg:var(--tblr-bg-surface);--tblr-dropdown-border-color:var(--tblr-border-color-translucent);--tblr-dropdown-border-radius:var(--tblr-border-radius);--tblr-dropdown-border-width:var(--tblr-border-width);--tblr-dropdown-inner-border-radius:calc(var(--tblr-border-radius) - var(--tblr-border-width));--tblr-dropdown-divider-bg:var(--tblr-border-color-translucent);--tblr-dropdown-divider-margin-y:var(--tblr-spacer-2);--tblr-dropdown-box-shadow:var(--tblr-box-shadow-dropdown);--tblr-dropdown-link-color:inherit;--tblr-dropdown-link-hover-color:inherit;--tblr-dropdown-link-hover-bg:rgba(var(--tblr-secondary-rgb), .08);--tblr-dropdown-link-active-color:var(--tblr-primary);--tblr-dropdown-link-active-bg:var(--tblr-active-bg);--tblr-dropdown-link-disabled-color:var(--tblr-tertiary-color);--tblr-dropdown-item-padding-x:.75rem;--tblr-dropdown-item-padding-y:.5rem;--tblr-dropdown-header-color:#49566c;--tblr-dropdown-header-padding-x:.75rem;--tblr-dropdown-header-padding-y:.25rem;position:absolute;z-index:var(--tblr-dropdown-zindex);display:none;min-width:var(--tblr-dropdown-min-width);padding:var(--tblr-dropdown-padding-y) var(--tblr-dropdown-padding-x);margin:0;font-size:var(--tblr-dropdown-font-size);color:var(--tblr-dropdown-color);text-align:left;list-style:none;background-color:var(--tblr-dropdown-bg);background-clip:padding-box;border:var(--tblr-dropdown-border-width) solid var(--tblr-dropdown-border-color);border-radius:var(--tblr-dropdown-border-radius);box-shadow:var(--tblr-dropdown-box-shadow)}.dropdown-menu-dark{--tblr-dropdown-color:#b8c4d4;--tblr-dropdown-bg:#182433;--tblr-dropdown-border-color:var(--tblr-border-color-translucent);--tblr-dropdown-link-color:#b8c4d4;--tblr-dropdown-link-hover-color:#ffffff;--tblr-dropdown-divider-bg:var(--tblr-border-color-translucent);--tblr-dropdown-link-hover-bg:rgba(255, 255, 255, .15);--tblr-dropdown-link-active-color:var(--tblr-primary);--tblr-dropdown-link-active-bg:var(--tblr-active-bg);--tblr-dropdown-link-disabled-color:#6c7a91;--tblr-dropdown-header-color:#6c7a91}.nav{--tblr-nav-link-padding-x:.75rem;--tblr-nav-link-padding-y:.5rem;--tblr-nav-link-color:var(--tblr-gray-500);--tblr-nav-link-hover-color:var(--tblr-link-hover-color);--tblr-nav-link-disabled-color:var(--tblr-disabled-color);display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.navbar{--tblr-navbar-padding-x:0;--tblr-navbar-padding-y:.25rem;--tblr-navbar-color:var(--tblr-body-color);--tblr-navbar-hover-color:rgba(var(--tblr-emphasis-color-rgb), .8);--tblr-navbar-disabled-color:var(--tblr-disabled-color);--tblr-navbar-active-color:var(--tblr-body-color) color;--tblr-navbar-brand-padding-y:.5rem;--tblr-navbar-brand-margin-end:1rem;--tblr-navbar-brand-font-size:1.25rem;--tblr-navbar-brand-color:var(--tblr-body-color);--tblr-navbar-brand-hover-color:var(--tblr-body-color) color;--tblr-navbar-nav-link-padding-x:.75rem;--tblr-navbar-toggler-padding-y:0;--tblr-navbar-toggler-padding-x:0;--tblr-navbar-toggler-font-size:1rem;--tblr-navbar-toggler-icon-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%2824, 36, 51, 0.75%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e");--tblr-navbar-toggler-border-color:rgba(var(--tblr-emphasis-color-rgb), .15);--tblr-navbar-toggler-border-radius:var(--tblr-border-radius);--tblr-navbar-toggler-focus-width:0;--tblr-navbar-toggler-transition:box-shadow .15s ease-in-out;position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding:var(--tblr-navbar-padding-y) var(--tblr-navbar-padding-x)}.navbar-dark,.navbar[data-bs-theme=dark],body[data-bs-theme=dark] .navbar[data-bs-theme=light]{--tblr-navbar-color:rgba(255, 255, 255, .7);--tblr-navbar-hover-color:rgba(255, 255, 255, .75);--tblr-navbar-disabled-color:var(--tblr-disabled-color);--tblr-navbar-active-color:#ffffff;--tblr-navbar-brand-color:#ffffff;--tblr-navbar-brand-hover-color:#ffffff;--tblr-navbar-toggler-border-color:rgba(255, 255, 255, .1);--tblr-navbar-toggler-icon-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.7%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}[data-bs-theme=dark] .navbar-toggler-icon,body[data-bs-theme=dark] [data-bs-theme=light] .navbar-toggler-icon{--tblr-navbar-toggler-icon-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.7%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.card{--tblr-card-spacer-y:1rem;--tblr-card-spacer-x:1.25rem;--tblr-card-title-spacer-y:1.25rem;--tblr-card-border-width:var(--tblr-border-width);--tblr-card-border-color:var(--tblr-border-color-translucent);--tblr-card-border-radius:var(--tblr-border-radius);--tblr-card-box-shadow:var(--tblr-shadow-card);--tblr-card-inner-border-radius:calc(var(--tblr-border-radius) - (var(--tblr-border-width)));--tblr-card-cap-padding-y:1rem;--tblr-card-cap-padding-x:1.25rem;--tblr-card-cap-bg:var(--tblr-bg-surface-tertiary);--tblr-card-cap-color:inherit;--tblr-card-color:inherit;--tblr-card-bg:var(--tblr-bg-surface);--tblr-card-img-overlay-padding:1rem;--tblr-card-group-margin:1.5rem;position:relative;display:flex;flex-direction:column;min-width:0;height:var(--tblr-card-height);color:var(--tblr-body-color);word-wrap:break-word;background-color:var(--tblr-card-bg);background-clip:border-box;border:var(--tblr-card-border-width) solid var(--tblr-card-border-color);border-radius:var(--tblr-card-border-radius);box-shadow:var(--tblr-card-box-shadow)}.accordion{--tblr-accordion-color:var(--tblr-body-color);--tblr-accordion-bg:transparent;--tblr-accordion-transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,border-radius .15s ease;--tblr-accordion-border-color:var(--tblr-border-color-translucent);--tblr-accordion-border-width:var(--tblr-border-width);--tblr-accordion-border-radius:var(--tblr-border-radius);--tblr-accordion-inner-border-radius:calc(var(--tblr-border-radius) - (var(--tblr-border-width)));--tblr-accordion-btn-padding-x:1.25rem;--tblr-accordion-btn-padding-y:1rem;--tblr-accordion-btn-color:var(--tblr-body-color);--tblr-accordion-btn-bg:transparent;--tblr-accordion-btn-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23182433' stroke-linecap='round' stroke-linejoin='round'%3e%3cpath d='M2 5L8 11L14 5'/%3e%3c/svg%3e");--tblr-accordion-btn-icon-width:1rem;--tblr-accordion-btn-icon-transform:rotate(-180deg);--tblr-accordion-btn-icon-transition:transform .2s ease-in-out;--tblr-accordion-btn-active-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23022c54' stroke-linecap='round' stroke-linejoin='round'%3e%3cpath d='M2 5L8 11L14 5'/%3e%3c/svg%3e");--tblr-accordion-btn-focus-box-shadow:0 0 0 .25rem rgba(var(--tblr-primary-rgb), .25);--tblr-accordion-body-padding-x:1.25rem;--tblr-accordion-body-padding-y:1rem;--tblr-accordion-active-color:inherit;--tblr-accordion-active-bg:transparent}.accordion-button:focus{z-index:3;outline:0;box-shadow:var(--tblr-accordion-btn-focus-box-shadow)}.accordion-item:first-of-type>.accordion-header .accordion-button{border-top-left-radius:var(--tblr-accordion-inner-border-radius);border-top-right-radius:var(--tblr-accordion-inner-border-radius)}.accordion-item:last-of-type>.accordion-header .accordion-button.collapsed{border-bottom-right-radius:var(--tblr-accordion-inner-border-radius);border-bottom-left-radius:var(--tblr-accordion-inner-border-radius)}.accordion-item:last-of-type>.accordion-collapse{border-bottom-right-radius:var(--tblr-accordion-border-radius);border-bottom-left-radius:var(--tblr-accordion-border-radius)}[data-bs-theme=dark] .accordion-button:after{--tblr-accordion-btn-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236aa9e3'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");--tblr-accordion-btn-active-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236aa9e3'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e")}.breadcrumb{--tblr-breadcrumb-padding-x:0;--tblr-breadcrumb-padding-y:0;--tblr-breadcrumb-margin-bottom:1rem;--tblr-breadcrumb-divider-color:var(--tblr-gray-500);--tblr-breadcrumb-item-padding-x:.5rem;--tblr-breadcrumb-item-active-color:inherit;display:flex;flex-wrap:wrap;padding:var(--tblr-breadcrumb-padding-y) var(--tblr-breadcrumb-padding-x);margin-bottom:var(--tblr-breadcrumb-margin-bottom);font-size:var(--tblr-breadcrumb-font-size);list-style:none;background-color:var(--tblr-breadcrumb-bg);border-radius:var(--tblr-breadcrumb-border-radius)}.pagination{--tblr-pagination-padding-x:.25rem;--tblr-pagination-padding-y:.25rem;--tblr-pagination-font-size:.875rem;--tblr-pagination-color:var(--tblr-gray-500);--tblr-pagination-bg:transparent;--tblr-pagination-border-width:0;--tblr-pagination-border-color:var(--tblr-border-color);--tblr-pagination-border-radius:var(--tblr-border-radius);--tblr-pagination-hover-color:var(--tblr-link-hover-color);--tblr-pagination-hover-bg:var(--tblr-tertiary-bg);--tblr-pagination-hover-border-color:var(--tblr-border-color);--tblr-pagination-focus-color:var(--tblr-link-hover-color);--tblr-pagination-focus-bg:var(--tblr-secondary-bg);--tblr-pagination-focus-box-shadow:0 0 0 .25rem rgba(var(--tblr-primary-rgb), .25);--tblr-pagination-active-color:#ffffff;--tblr-pagination-active-bg:var(--tblr-primary);--tblr-pagination-active-border-color:var(--tblr-primary);--tblr-pagination-disabled-color:var(--tblr-disabled-color);--tblr-pagination-disabled-bg:transparent;--tblr-pagination-disabled-border-color:var(--tblr-border-color);display:flex;padding-left:0;list-style:none}.badge{--tblr-badge-padding-x:.5em;--tblr-badge-padding-y:.25em;--tblr-badge-font-size:85.714285%;--tblr-badge-font-weight:var(--tblr-font-weight-medium);--tblr-badge-color:var(--tblr-gray-500);--tblr-badge-border-radius:var(--tblr-border-radius);display:inline-block;padding:var(--tblr-badge-padding-y) var(--tblr-badge-padding-x);font-size:var(--tblr-badge-font-size);font-weight:var(--tblr-badge-font-weight);line-height:1;color:var(--tblr-badge-color);text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:var(--tblr-badge-border-radius)}.alert{--tblr-alert-bg:transparent;--tblr-alert-padding-x:1rem;--tblr-alert-padding-y:.75rem;--tblr-alert-margin-bottom:1rem;--tblr-alert-color:inherit;--tblr-alert-border-color:transparent;--tblr-alert-border:var(--tblr-border-width) solid var(--tblr-alert-border-color);--tblr-alert-border-radius:var(--tblr-border-radius);--tblr-alert-link-color:inherit;position:relative;padding:var(--tblr-alert-padding-y) var(--tblr-alert-padding-x);margin-bottom:var(--tblr-alert-margin-bottom);color:var(--tblr-alert-color);background-color:var(--tblr-alert-bg);border:var(--tblr-alert-border);border-radius:var(--tblr-alert-border-radius)}.alert-x{--tblr-alert-color:var(--tblr-x-text-emphasis);--tblr-alert-bg:var(--tblr-x-bg-subtle);--tblr-alert-border-color:var(--tblr-x-border-subtle);--tblr-alert-link-color:var(--tblr-x-text-emphasis)}.list-group{--tblr-list-group-color:var(--tblr-body-color);--tblr-list-group-bg:inherit;--tblr-list-group-border-color:var(--tblr-border-color);--tblr-list-group-border-width:var(--tblr-border-width);--tblr-list-group-border-radius:var(--tblr-border-radius);--tblr-list-group-item-padding-x:1.25rem;--tblr-list-group-item-padding-y:1rem;--tblr-list-group-action-color:inherit;--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:rgba(var(--tblr-secondary-rgb), .08);--tblr-list-group-action-active-color:var(--tblr-body-color);--tblr-list-group-action-active-bg:var(--tblr-secondary-bg);--tblr-list-group-disabled-color:var(--tblr-secondary-color);--tblr-list-group-disabled-bg:inherit;--tblr-list-group-active-color:inherit;--tblr-list-group-active-bg:var(--tblr-active-bg);--tblr-list-group-active-border-color:var(--tblr-border-color);display:flex;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:var(--tblr-list-group-border-radius)}.list-group-item-x{--tblr-list-group-color:var(--tblr-x-text-emphasis);--tblr-list-group-bg:var(--tblr-x-bg-subtle);--tblr-list-group-border-color:var(--tblr-x-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-x-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-x-border-subtle);--tblr-list-group-active-color:var(--tblr-x-bg-subtle);--tblr-list-group-active-bg:var(--tblr-x-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-x-text-emphasis)}.btn-close{--tblr-btn-close-color:#182433;--tblr-btn-close-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23182433'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/%3e%3c/svg%3e");--tblr-btn-close-opacity:.4;--tblr-btn-close-hover-opacity:.75;--tblr-btn-close-focus-shadow:0 0 0 .25rem rgba(var(--tblr-primary-rgb), .25);--tblr-btn-close-focus-opacity:1;--tblr-btn-close-disabled-opacity:.25;--tblr-btn-close-white-filter:invert(1) grayscale(100%) brightness(200%);box-sizing:content-box;width:1em;height:1em;padding:.25em;color:var(--tblr-btn-close-color);background:transparent var(--tblr-btn-close-bg) center/1em auto no-repeat;border:0;border-radius:4px;opacity:var(--tblr-btn-close-opacity)}.toast{--tblr-toast-zindex:1090;--tblr-toast-padding-x:.75rem;--tblr-toast-padding-y:.5rem;--tblr-toast-spacing:calc(var(--tblr-page-padding) * 2);--tblr-toast-max-width:350px;--tblr-toast-font-size:.875rem;--tblr-toast-bg:rgba(var(--tblr-body-bg-rgb), .85);--tblr-toast-border-width:var(--tblr-border-width);--tblr-toast-border-color:var(--tblr-border-color);--tblr-toast-border-radius:var(--tblr-border-radius);--tblr-toast-box-shadow:var(--tblr-box-shadow);--tblr-toast-header-color:var(--tblr-gray-500);--tblr-toast-header-bg:rgba(var(--tblr-body-bg-rgb), .85);--tblr-toast-header-border-color:var(--tblr-border-color);width:var(--tblr-toast-max-width);max-width:100%;font-size:var(--tblr-toast-font-size);color:var(--tblr-toast-color);pointer-events:auto;background-color:var(--tblr-toast-bg);background-clip:padding-box;border:var(--tblr-toast-border-width) solid var(--tblr-toast-border-color);box-shadow:var(--tblr-toast-box-shadow);border-radius:var(--tblr-toast-border-radius)}.modal{--tblr-modal-zindex:1055;--tblr-modal-width:540px;--tblr-modal-padding:1.5rem;--tblr-modal-margin:.5rem;--tblr-modal-bg:var(--tblr-bg-surface);--tblr-modal-border-color:transparent;--tblr-modal-border-width:var(--tblr-border-width);--tblr-modal-border-radius:var(--tblr-border-radius-lg);--tblr-modal-box-shadow:var(--tblr-box-shadow-sm);--tblr-modal-inner-border-radius:calc(var(--tblr-modal-border-radius) - 1px);--tblr-modal-header-padding-x:1.5rem;--tblr-modal-header-padding-y:1.5rem;--tblr-modal-header-padding:1.5rem;--tblr-modal-header-border-color:var(--tblr-border-color);--tblr-modal-header-border-width:var(--tblr-border-width);--tblr-modal-title-line-height:1.4285714286;--tblr-modal-footer-gap:.75rem;--tblr-modal-footer-bg:var(--tblr-bg-surface-tertiary);--tblr-modal-footer-border-color:var(--tblr-border-color);--tblr-modal-footer-border-width:var(--tblr-border-width);position:fixed;top:0;left:0;z-index:var(--tblr-modal-zindex);display:none;width:100%;height:100%;overflow-x:hidden;overflow-y:auto;outline:0}.modal-header{display:flex;flex-shrink:0;align-items:center;padding:var(--tblr-modal-header-padding);border-bottom:var(--tblr-modal-header-border-width) solid var(--tblr-modal-header-border-color);border-top-left-radius:var(--tblr-modal-inner-border-radius);border-top-right-radius:var(--tblr-modal-inner-border-radius)}@media (min-width:576px){.modal{--tblr-modal-margin:1.75rem;--tblr-modal-box-shadow:var(--tblr-box-shadow)}.modal-dialog{max-width:var(--tblr-modal-width);margin-right:auto;margin-left:auto}.modal-sm{--tblr-modal-width:380px}}.popover{--tblr-popover-zindex:1070;--tblr-popover-max-width:276px;--tblr-popover-font-size:.765625rem;--tblr-popover-bg:var(--tblr-bg-surface);--tblr-popover-border-width:var(--tblr-border-width);--tblr-popover-border-color:var(--tblr-border-color);--tblr-popover-border-radius:var(--tblr-border-radius-lg);--tblr-popover-inner-border-radius:calc(var(--tblr-border-radius-lg) - var(--tblr-border-width));--tblr-popover-box-shadow:var(--tblr-box-shadow);--tblr-popover-header-padding-x:1rem;--tblr-popover-header-padding-y:.5rem;--tblr-popover-header-font-size:.875rem;--tblr-popover-header-color:inherit;--tblr-popover-header-bg:transparent;--tblr-popover-body-padding-x:1rem;--tblr-popover-body-padding-y:1rem;--tblr-popover-body-color:inherit;--tblr-popover-arrow-width:1rem;--tblr-popover-arrow-height:.5rem;--tblr-popover-arrow-border:var(--tblr-popover-border-color);z-index:var(--tblr-popover-zindex);display:block;max-width:var(--tblr-popover-max-width);font-family:var(--tblr-font-sans-serif);font-style:normal;font-weight:400;line-height:1.4285714286;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;white-space:normal;word-spacing:normal;line-break:auto;font-size:var(--tblr-popover-font-size);word-wrap:break-word;background-color:var(--tblr-popover-bg);background-clip:padding-box;border:var(--tblr-popover-border-width) solid var(--tblr-popover-border-color);border-radius:var(--tblr-popover-border-radius);box-shadow:var(--tblr-popover-box-shadow)}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23ffffff' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3e%3cpolyline points='15 18 9 12 15 6'%3e%3c/polyline%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23ffffff' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3e%3cpolyline points='9 18 15 12 9 6'%3e%3c/polyline%3e%3c/svg%3e")}.offcanvas,.offcanvas-lg,.offcanvas-md,.offcanvas-sm,.offcanvas-xl,.offcanvas-xxl{--tblr-offcanvas-zindex:1045;--tblr-offcanvas-width:400px;--tblr-offcanvas-height:30vh;--tblr-offcanvas-padding-x:1.5rem;--tblr-offcanvas-padding-y:1.5rem;--tblr-offcanvas-color:var(--tblr-body-color);--tblr-offcanvas-bg:var(--tblr-bg-surface);--tblr-offcanvas-border-width:var(--tblr-border-width);--tblr-offcanvas-border-color:var(--tblr-border-color);--tblr-offcanvas-box-shadow:var(--tblr-box-shadow-sm);--tblr-offcanvas-transition:transform .3s ease-in-out;--tblr-offcanvas-title-line-height:1.4285714286}.offcanvas-header{display:flex;align-items:center;padding:var(--tblr-offcanvas-padding-y) var(--tblr-offcanvas-padding-x)}.offcanvas-header .btn-close{padding:calc(var(--tblr-offcanvas-padding-y) * .5) calc(var(--tblr-offcanvas-padding-x) * .5);margin:calc(-.5 * var(--tblr-offcanvas-padding-y)) calc(-.5 * var(--tblr-offcanvas-padding-x)) calc(-.5 * var(--tblr-offcanvas-padding-y)) auto}.text-bg-primary{color:#f6f8fb!important;background-color:RGBA(var(--tblr-primary-rgb),var(--tblr-bg-opacity,1))!important}.text-bg-secondary{color:#f6f8fb!important;background-color:RGBA(var(--tblr-secondary-rgb),var(--tblr-bg-opacity,1))!important}.text-bg-success{color:#f6f8fb!important;background-color:RGBA(var(--tblr-success-rgb),var(--tblr-bg-opacity,1))!important}.text-bg-info{color:#f6f8fb!important;background-color:RGBA(var(--tblr-info-rgb),var(--tblr-bg-opacity,1))!important}.text-bg-warning{color:#f6f8fb!important;background-color:RGBA(var(--tblr-warning-rgb),var(--tblr-bg-opacity,1))!important}.text-bg-danger{color:#f6f8fb!important;background-color:RGBA(var(--tblr-danger-rgb),var(--tblr-bg-opacity,1))!important}.text-bg-light{color:#182433!important;background-color:RGBA(var(--tblr-light-rgb),var(--tblr-bg-opacity,1))!important}.text-bg-dark{color:#f6f8fb!important;background-color:RGBA(var(--tblr-dark-rgb),var(--tblr-bg-opacity,1))!important}.text-bg-muted{color:#f6f8fb!important;background-color:RGBA(var(--tblr-muted-rgb),var(--tblr-bg-opacity,1))!important}.text-bg-blue{color:#f6f8fb!important;background-color:RGBA(var(--tblr-blue-rgb),var(--tblr-bg-opacity,1))!important}.text-bg-azure{color:#f6f8fb!important;background-color:RGBA(var(--tblr-azure-rgb),var(--tblr-bg-opacity,1))!important}.text-bg-indigo{color:#f6f8fb!important;background-color:RGBA(var(--tblr-indigo-rgb),var(--tblr-bg-opacity,1))!important}.text-bg-purple{color:#f6f8fb!important;background-color:RGBA(var(--tblr-purple-rgb),var(--tblr-bg-opacity,1))!important}.text-bg-pink{color:#f6f8fb!important;background-color:RGBA(var(--tblr-pink-rgb),var(--tblr-bg-opacity,1))!important}.text-bg-red{color:#f6f8fb!important;background-color:RGBA(var(--tblr-red-rgb),var(--tblr-bg-opacity,1))!important}.text-bg-orange{color:#f6f8fb!important;background-color:RGBA(var(--tblr-orange-rgb),var(--tblr-bg-opacity,1))!important}.text-bg-yellow{color:#f6f8fb!important;background-color:RGBA(var(--tblr-yellow-rgb),var(--tblr-bg-opacity,1))!important}.text-bg-lime{color:#f6f8fb!important;background-color:RGBA(var(--tblr-lime-rgb),var(--tblr-bg-opacity,1))!important}.text-bg-green{color:#f6f8fb!important;background-color:RGBA(var(--tblr-green-rgb),var(--tblr-bg-opacity,1))!important}.text-bg-teal{color:#f6f8fb!important;background-color:RGBA(var(--tblr-teal-rgb),var(--tblr-bg-opacity,1))!important}.text-bg-cyan{color:#f6f8fb!important;background-color:RGBA(var(--tblr-cyan-rgb),var(--tblr-bg-opacity,1))!important}.text-bg-x{color:#f6f8fb!important;background-color:RGBA(var(--tblr-x-rgb),var(--tblr-bg-opacity,1))!important}.text-bg-facebook{color:#f6f8fb!important;background-color:RGBA(var(--tblr-facebook-rgb),var(--tblr-bg-opacity,1))!important}.text-bg-twitter{color:#f6f8fb!important;background-color:RGBA(var(--tblr-twitter-rgb),var(--tblr-bg-opacity,1))!important}.text-bg-linkedin{color:#f6f8fb!important;background-color:RGBA(var(--tblr-linkedin-rgb),var(--tblr-bg-opacity,1))!important}.text-bg-google{color:#f6f8fb!important;background-color:RGBA(var(--tblr-google-rgb),var(--tblr-bg-opacity,1))!important}.text-bg-youtube{color:#f6f8fb!important;background-color:RGBA(var(--tblr-youtube-rgb),var(--tblr-bg-opacity,1))!important}.text-bg-vimeo{color:#f6f8fb!important;background-color:RGBA(var(--tblr-vimeo-rgb),var(--tblr-bg-opacity,1))!important}.text-bg-dribbble{color:#f6f8fb!important;background-color:RGBA(var(--tblr-dribbble-rgb),var(--tblr-bg-opacity,1))!important}.text-bg-github{color:#f6f8fb!important;background-color:RGBA(var(--tblr-github-rgb),var(--tblr-bg-opacity,1))!important}.text-bg-instagram{color:#f6f8fb!important;background-color:RGBA(var(--tblr-instagram-rgb),var(--tblr-bg-opacity,1))!important}.text-bg-pinterest{color:#f6f8fb!important;background-color:RGBA(var(--tblr-pinterest-rgb),var(--tblr-bg-opacity,1))!important}.text-bg-vk{color:#f6f8fb!important;background-color:RGBA(var(--tblr-vk-rgb),var(--tblr-bg-opacity,1))!important}.text-bg-rss{color:#f6f8fb!important;background-color:RGBA(var(--tblr-rss-rgb),var(--tblr-bg-opacity,1))!important}.text-bg-flickr{color:#f6f8fb!important;background-color:RGBA(var(--tblr-flickr-rgb),var(--tblr-bg-opacity,1))!important}.text-bg-bitbucket{color:#f6f8fb!important;background-color:RGBA(var(--tblr-bitbucket-rgb),var(--tblr-bg-opacity,1))!important}.text-bg-tabler{color:#f6f8fb!important;background-color:RGBA(var(--tblr-tabler-rgb),var(--tblr-bg-opacity,1))!important}.link-primary{color:RGBA(var(--tblr-primary-rgb),var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-primary-rgb),var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-primary-rgb),var(--tblr-link-underline-opacity,1))!important}.link-primary:focus,.link-primary:hover{color:RGBA(5,89,167,var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(5,89,167,var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(5,89,167,var(--tblr-link-underline-opacity,1))!important}.link-secondary{color:RGBA(var(--tblr-secondary-rgb),var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-secondary-rgb),var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-secondary-rgb),var(--tblr-link-underline-opacity,1))!important}.link-secondary:focus,.link-secondary:hover{color:RGBA(86,98,116,var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(86,98,116,var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(86,98,116,var(--tblr-link-underline-opacity,1))!important}.link-success{color:RGBA(var(--tblr-success-rgb),var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-success-rgb),var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-success-rgb),var(--tblr-link-underline-opacity,1))!important}.link-success:focus,.link-success:hover{color:RGBA(38,143,54,var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(38,143,54,var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(38,143,54,var(--tblr-link-underline-opacity,1))!important}.link-info{color:RGBA(var(--tblr-info-rgb),var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-info-rgb),var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-info-rgb),var(--tblr-link-underline-opacity,1))!important}.link-info:focus,.link-info:hover{color:RGBA(53,122,180,var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(53,122,180,var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(53,122,180,var(--tblr-link-underline-opacity,1))!important}.link-warning{color:RGBA(var(--tblr-warning-rgb),var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-warning-rgb),var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-warning-rgb),var(--tblr-link-underline-opacity,1))!important}.link-warning:focus,.link-warning:hover{color:RGBA(198,82,6,var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(198,82,6,var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(198,82,6,var(--tblr-link-underline-opacity,1))!important}.link-danger{color:RGBA(var(--tblr-danger-rgb),var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-danger-rgb),var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-danger-rgb),var(--tblr-link-underline-opacity,1))!important}.link-danger:focus,.link-danger:hover{color:RGBA(171,46,46,var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(171,46,46,var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(171,46,46,var(--tblr-link-underline-opacity,1))!important}.link-light{color:RGBA(var(--tblr-light-rgb),var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-light-rgb),var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-light-rgb),var(--tblr-link-underline-opacity,1))!important}.link-light:focus,.link-light:hover{color:RGBA(248,249,252,var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(248,249,252,var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(248,249,252,var(--tblr-link-underline-opacity,1))!important}.link-dark{color:RGBA(var(--tblr-dark-rgb),var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-dark-rgb),var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-dark-rgb),var(--tblr-link-underline-opacity,1))!important}.link-dark:focus,.link-dark:hover{color:RGBA(19,29,41,var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(19,29,41,var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(19,29,41,var(--tblr-link-underline-opacity,1))!important}.link-muted{color:RGBA(var(--tblr-muted-rgb),var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-muted-rgb),var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-muted-rgb),var(--tblr-link-underline-opacity,1))!important}.link-muted:focus,.link-muted:hover{color:RGBA(86,98,116,var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(86,98,116,var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(86,98,116,var(--tblr-link-underline-opacity,1))!important}.link-blue{color:RGBA(var(--tblr-blue-rgb),var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-blue-rgb),var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-blue-rgb),var(--tblr-link-underline-opacity,1))!important}.link-blue:focus,.link-blue:hover{color:RGBA(5,89,167,var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(5,89,167,var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(5,89,167,var(--tblr-link-underline-opacity,1))!important}.link-azure{color:RGBA(var(--tblr-azure-rgb),var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-azure-rgb),var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-azure-rgb),var(--tblr-link-underline-opacity,1))!important}.link-azure:focus,.link-azure:hover{color:RGBA(53,122,180,var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(53,122,180,var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(53,122,180,var(--tblr-link-underline-opacity,1))!important}.link-indigo{color:RGBA(var(--tblr-indigo-rgb),var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-indigo-rgb),var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-indigo-rgb),var(--tblr-link-underline-opacity,1))!important}.link-indigo:focus,.link-indigo:hover{color:RGBA(53,79,188,var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(53,79,188,var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(53,79,188,var(--tblr-link-underline-opacity,1))!important}.link-purple{color:RGBA(var(--tblr-purple-rgb),var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-purple-rgb),var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-purple-rgb),var(--tblr-link-underline-opacity,1))!important}.link-purple:focus,.link-purple:hover{color:RGBA(139,50,161,var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(139,50,161,var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(139,50,161,var(--tblr-link-underline-opacity,1))!important}.link-pink{color:RGBA(var(--tblr-pink-rgb),var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-pink-rgb),var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-pink-rgb),var(--tblr-link-underline-opacity,1))!important}.link-pink:focus,.link-pink:hover{color:RGBA(171,41,86,var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(171,41,86,var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(171,41,86,var(--tblr-link-underline-opacity,1))!important}.link-red{color:RGBA(var(--tblr-red-rgb),var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-red-rgb),var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-red-rgb),var(--tblr-link-underline-opacity,1))!important}.link-red:focus,.link-red:hover{color:RGBA(171,46,46,var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(171,46,46,var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(171,46,46,var(--tblr-link-underline-opacity,1))!important}.link-orange{color:RGBA(var(--tblr-orange-rgb),var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-orange-rgb),var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-orange-rgb),var(--tblr-link-underline-opacity,1))!important}.link-orange:focus,.link-orange:hover{color:RGBA(198,82,6,var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(198,82,6,var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(198,82,6,var(--tblr-link-underline-opacity,1))!important}.link-yellow{color:RGBA(var(--tblr-yellow-rgb),var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-yellow-rgb),var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-yellow-rgb),var(--tblr-link-underline-opacity,1))!important}.link-yellow:focus,.link-yellow:hover{color:RGBA(196,127,0,var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(196,127,0,var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(196,127,0,var(--tblr-link-underline-opacity,1))!important}.link-lime{color:RGBA(var(--tblr-lime-rgb),var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-lime-rgb),var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-lime-rgb),var(--tblr-link-underline-opacity,1))!important}.link-lime:focus,.link-lime:hover{color:RGBA(93,147,18,var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(93,147,18,var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(93,147,18,var(--tblr-link-underline-opacity,1))!important}.link-green{color:RGBA(var(--tblr-green-rgb),var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-green-rgb),var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-green-rgb),var(--tblr-link-underline-opacity,1))!important}.link-green:focus,.link-green:hover{color:RGBA(38,143,54,var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(38,143,54,var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(38,143,54,var(--tblr-link-underline-opacity,1))!important}.link-teal{color:RGBA(var(--tblr-teal-rgb),var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-teal-rgb),var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-teal-rgb),var(--tblr-link-underline-opacity,1))!important}.link-teal:focus,.link-teal:hover{color:RGBA(10,133,96,var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(10,133,96,var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(10,133,96,var(--tblr-link-underline-opacity,1))!important}.link-cyan{color:RGBA(var(--tblr-cyan-rgb),var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-cyan-rgb),var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-cyan-rgb),var(--tblr-link-underline-opacity,1))!important}.link-cyan:focus,.link-cyan:hover{color:RGBA(18,130,147,var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(18,130,147,var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(18,130,147,var(--tblr-link-underline-opacity,1))!important}.link-x{color:RGBA(var(--tblr-x-rgb),var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-x-rgb),var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-x-rgb),var(--tblr-link-underline-opacity,1))!important}.link-x:focus,.link-x:hover{color:RGBA(0,0,0,var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(0,0,0,var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(0,0,0,var(--tblr-link-underline-opacity,1))!important}.link-facebook{color:RGBA(var(--tblr-facebook-rgb),var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-facebook-rgb),var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-facebook-rgb),var(--tblr-link-underline-opacity,1))!important}.link-facebook:focus,.link-facebook:hover{color:RGBA(19,95,194,var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(19,95,194,var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(19,95,194,var(--tblr-link-underline-opacity,1))!important}.link-twitter{color:RGBA(var(--tblr-twitter-rgb),var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-twitter-rgb),var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-twitter-rgb),var(--tblr-link-underline-opacity,1))!important}.link-twitter:focus,.link-twitter:hover{color:RGBA(23,129,194,var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(23,129,194,var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(23,129,194,var(--tblr-link-underline-opacity,1))!important}.link-linkedin{color:RGBA(var(--tblr-linkedin-rgb),var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-linkedin-rgb),var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-linkedin-rgb),var(--tblr-link-underline-opacity,1))!important}.link-linkedin:focus,.link-linkedin:hover{color:RGBA(8,82,155,var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(8,82,155,var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(8,82,155,var(--tblr-link-underline-opacity,1))!important}.link-google{color:RGBA(var(--tblr-google-rgb),var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-google-rgb),var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-google-rgb),var(--tblr-link-underline-opacity,1))!important}.link-google:focus,.link-google:hover{color:RGBA(176,62,52,var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(176,62,52,var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(176,62,52,var(--tblr-link-underline-opacity,1))!important}.link-youtube{color:RGBA(var(--tblr-youtube-rgb),var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-youtube-rgb),var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-youtube-rgb),var(--tblr-link-underline-opacity,1))!important}.link-youtube:focus,.link-youtube:hover{color:RGBA(204,0,0,var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(204,0,0,var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(204,0,0,var(--tblr-link-underline-opacity,1))!important}.link-vimeo{color:RGBA(var(--tblr-vimeo-rgb),var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-vimeo-rgb),var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-vimeo-rgb),var(--tblr-link-underline-opacity,1))!important}.link-vimeo:focus,.link-vimeo:hover{color:RGBA(21,146,187,var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(21,146,187,var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(21,146,187,var(--tblr-link-underline-opacity,1))!important}.link-dribbble{color:RGBA(var(--tblr-dribbble-rgb),var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-dribbble-rgb),var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-dribbble-rgb),var(--tblr-link-underline-opacity,1))!important}.link-dribbble:focus,.link-dribbble:hover{color:RGBA(187,61,110,var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(187,61,110,var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(187,61,110,var(--tblr-link-underline-opacity,1))!important}.link-github{color:RGBA(var(--tblr-github-rgb),var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-github-rgb),var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-github-rgb),var(--tblr-link-underline-opacity,1))!important}.link-github:focus,.link-github:hover{color:RGBA(19,18,18,var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(19,18,18,var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(19,18,18,var(--tblr-link-underline-opacity,1))!important}.link-instagram{color:RGBA(var(--tblr-instagram-rgb),var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-instagram-rgb),var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-instagram-rgb),var(--tblr-link-underline-opacity,1))!important}.link-instagram:focus,.link-instagram:hover{color:RGBA(182,51,76,var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(182,51,76,var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(182,51,76,var(--tblr-link-underline-opacity,1))!important}.link-pinterest{color:RGBA(var(--tblr-pinterest-rgb),var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-pinterest-rgb),var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-pinterest-rgb),var(--tblr-link-underline-opacity,1))!important}.link-pinterest:focus,.link-pinterest:hover{color:RGBA(151,6,22,var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(151,6,22,var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(151,6,22,var(--tblr-link-underline-opacity,1))!important}.link-vk{color:RGBA(var(--tblr-vk-rgb),var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-vk-rgb),var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-vk-rgb),var(--tblr-link-underline-opacity,1))!important}.link-vk:focus,.link-vk:hover{color:RGBA(79,105,134,var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(79,105,134,var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(79,105,134,var(--tblr-link-underline-opacity,1))!important}.link-rss{color:RGBA(var(--tblr-rss-rgb),var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-rss-rgb),var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-rss-rgb),var(--tblr-link-underline-opacity,1))!important}.link-rss:focus,.link-rss:hover{color:RGBA(204,132,0,var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(204,132,0,var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(204,132,0,var(--tblr-link-underline-opacity,1))!important}.link-flickr{color:RGBA(var(--tblr-flickr-rgb),var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-flickr-rgb),var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-flickr-rgb),var(--tblr-link-underline-opacity,1))!important}.link-flickr:focus,.link-flickr:hover{color:RGBA(0,79,176,var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(0,79,176,var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(0,79,176,var(--tblr-link-underline-opacity,1))!important}.link-bitbucket{color:RGBA(var(--tblr-bitbucket-rgb),var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-bitbucket-rgb),var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-bitbucket-rgb),var(--tblr-link-underline-opacity,1))!important}.link-bitbucket:focus,.link-bitbucket:hover{color:RGBA(0,66,163,var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(0,66,163,var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(0,66,163,var(--tblr-link-underline-opacity,1))!important}.link-tabler{color:RGBA(var(--tblr-tabler-rgb),var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-tabler-rgb),var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-tabler-rgb),var(--tblr-link-underline-opacity,1))!important}.link-tabler:focus,.link-tabler:hover{color:RGBA(5,89,167,var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(5,89,167,var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(5,89,167,var(--tblr-link-underline-opacity,1))!important}.link-body-emphasis{color:RGBA(var(--tblr-emphasis-color-rgb),var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-emphasis-color-rgb),var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-emphasis-color-rgb),var(--tblr-link-underline-opacity,1))!important}.link-body-emphasis:focus,.link-body-emphasis:hover{color:RGBA(var(--tblr-emphasis-color-rgb),var(--tblr-link-opacity,.75))!important;-webkit-text-decoration-color:RGBA(var(--tblr-emphasis-color-rgb),var(--tblr-link-underline-opacity,.75))!important;text-decoration-color:RGBA(var(--tblr-emphasis-color-rgb),var(--tblr-link-underline-opacity,.75))!important}.shadow{box-shadow:var(--tblr-box-shadow)!important}.shadow-sm{box-shadow:var(--tblr-box-shadow-sm)!important}.shadow-lg{box-shadow:var(--tblr-box-shadow-lg)!important}.focus-ring-x{--tblr-focus-ring-color:rgba(var(--tblr-x-rgb), var(--tblr-focus-ring-opacity))}.border{border:var(--tblr-border-width) var(--tblr-border-style) rgba(4,32,69,.1)!important}.border-wide{border:2px var(--tblr-border-style) rgba(4,32,69,.1)!important}.border-top{border-top:var(--tblr-border-width) var(--tblr-border-style) rgba(4,32,69,.1)!important}.border-top-wide{border-top:2px var(--tblr-border-style) rgba(4,32,69,.1)!important}.border-end{border-right:var(--tblr-border-width) var(--tblr-border-style) rgba(4,32,69,.1)!important}.border-end-wide{border-right:2px var(--tblr-border-style) rgba(4,32,69,.1)!important}.border-bottom{border-bottom:var(--tblr-border-width) var(--tblr-border-style) rgba(4,32,69,.1)!important}.border-bottom-wide{border-bottom:2px var(--tblr-border-style) rgba(4,32,69,.1)!important}.border-start{border-left:var(--tblr-border-width) var(--tblr-border-style) rgba(4,32,69,.1)!important}.border-start-wide{border-left:2px var(--tblr-border-style) rgba(4,32,69,.1)!important}.border-x{--tblr-border-opacity:1;border-color:rgba(var(--tblr-x-rgb),var(--tblr-border-opacity))!important}.link-underline-x{--tblr-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--tblr-x-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-x-rgb),var(--tblr-link-underline-opacity))!important}.border-x{border-left:var(--tblr-border-width) var(--tblr-border-style) rgba(4,32,69,.1)!important;border-right:var(--tblr-border-width) var(--tblr-border-style) rgba(4,32,69,.1)!important}.border-x-wide{border-left:2px var(--tblr-border-style) rgba(4,32,69,.1)!important;border-right:2px var(--tblr-border-style) rgba(4,32,69,.1)!important}.border-y{border-top:var(--tblr-border-width) var(--tblr-border-style) rgba(4,32,69,.1)!important;border-bottom:var(--tblr-border-width) var(--tblr-border-style) rgba(4,32,69,.1)!important}.border-y-wide{border-top:2px var(--tblr-border-style) rgba(4,32,69,.1)!important;border-bottom:2px var(--tblr-border-style) rgba(4,32,69,.1)!important}:host,:root{font-size:16px;height:100%}:host,:root,[data-bs-theme=light]{--tblr-primary:#066fd1;--tblr-primary-rgb:6,111,209;--tblr-primary-fg:var(--tblr-light);--tblr-primary-darken:#0564bc;--tblr-primary-lt:#e6f1fa;--tblr-primary-lt-rgb:230,241,250;--tblr-secondary:#6c7a91;--tblr-secondary-rgb:108,122,145;--tblr-secondary-fg:var(--tblr-light);--tblr-secondary-darken:#616e83;--tblr-secondary-lt:#f0f2f4;--tblr-secondary-lt-rgb:240,242,244;--tblr-success:#2fb344;--tblr-success-rgb:47,179,68;--tblr-success-fg:var(--tblr-light);--tblr-success-darken:#2aa13d;--tblr-success-lt:#eaf7ec;--tblr-success-lt-rgb:234,247,236;--tblr-info:#4299e1;--tblr-info-rgb:66,153,225;--tblr-info-fg:var(--tblr-light);--tblr-info-darken:#3b8acb;--tblr-info-lt:#ecf5fc;--tblr-info-lt-rgb:236,245,252;--tblr-warning:#f76707;--tblr-warning-rgb:247,103,7;--tblr-warning-fg:var(--tblr-light);--tblr-warning-darken:#de5d06;--tblr-warning-lt:#fef0e6;--tblr-warning-lt-rgb:254,240,230;--tblr-danger:#d63939;--tblr-danger-rgb:214,57,57;--tblr-danger-fg:var(--tblr-light);--tblr-danger-darken:#c13333;--tblr-danger-lt:#fbebeb;--tblr-danger-lt-rgb:251,235,235;--tblr-light:#f6f8fb;--tblr-light-rgb:246,248,251;--tblr-light-fg:var(--tblr-dark);--tblr-light-darken:#dddfe2;--tblr-light-lt:#fefeff;--tblr-light-lt-rgb:254,254,255;--tblr-dark:#182433;--tblr-dark-rgb:24,36,51;--tblr-dark-fg:var(--tblr-light);--tblr-dark-darken:#16202e;--tblr-dark-lt:#e8e9eb;--tblr-dark-lt-rgb:232,233,235;--tblr-muted:#6c7a91;--tblr-muted-rgb:108,122,145;--tblr-muted-fg:var(--tblr-light);--tblr-muted-darken:#616e83;--tblr-muted-lt:#f0f2f4;--tblr-muted-lt-rgb:240,242,244;--tblr-blue:#066fd1;--tblr-blue-rgb:6,111,209;--tblr-blue-fg:var(--tblr-light);--tblr-blue-darken:#0564bc;--tblr-blue-lt:#e6f1fa;--tblr-blue-lt-rgb:230,241,250;--tblr-azure:#4299e1;--tblr-azure-rgb:66,153,225;--tblr-azure-fg:var(--tblr-light);--tblr-azure-darken:#3b8acb;--tblr-azure-lt:#ecf5fc;--tblr-azure-lt-rgb:236,245,252;--tblr-indigo:#4263eb;--tblr-indigo-rgb:66,99,235;--tblr-indigo-fg:var(--tblr-light);--tblr-indigo-darken:#3b59d4;--tblr-indigo-lt:#eceffd;--tblr-indigo-lt-rgb:236,239,253;--tblr-purple:#ae3ec9;--tblr-purple-rgb:174,62,201;--tblr-purple-fg:var(--tblr-light);--tblr-purple-darken:#9d38b5;--tblr-purple-lt:#f7ecfa;--tblr-purple-lt-rgb:247,236,250;--tblr-pink:#d6336c;--tblr-pink-rgb:214,51,108;--tblr-pink-fg:var(--tblr-light);--tblr-pink-darken:#c12e61;--tblr-pink-lt:#fbebf0;--tblr-pink-lt-rgb:251,235,240;--tblr-red:#d63939;--tblr-red-rgb:214,57,57;--tblr-red-fg:var(--tblr-light);--tblr-red-darken:#c13333;--tblr-red-lt:#fbebeb;--tblr-red-lt-rgb:251,235,235;--tblr-orange:#f76707;--tblr-orange-rgb:247,103,7;--tblr-orange-fg:var(--tblr-light);--tblr-orange-darken:#de5d06;--tblr-orange-lt:#fef0e6;--tblr-orange-lt-rgb:254,240,230;--tblr-yellow:#f59f00;--tblr-yellow-rgb:245,159,0;--tblr-yellow-fg:var(--tblr-light);--tblr-yellow-darken:#dd8f00;--tblr-yellow-lt:#fef5e6;--tblr-yellow-lt-rgb:254,245,230;--tblr-lime:#74b816;--tblr-lime-rgb:116,184,22;--tblr-lime-fg:var(--tblr-light);--tblr-lime-darken:#68a614;--tblr-lime-lt:#f1f8e8;--tblr-lime-lt-rgb:241,248,232;--tblr-green:#2fb344;--tblr-green-rgb:47,179,68;--tblr-green-fg:var(--tblr-light);--tblr-green-darken:#2aa13d;--tblr-green-lt:#eaf7ec;--tblr-green-lt-rgb:234,247,236;--tblr-teal:#0ca678;--tblr-teal-rgb:12,166,120;--tblr-teal-fg:var(--tblr-light);--tblr-teal-darken:#0b956c;--tblr-teal-lt:#e7f6f2;--tblr-teal-lt-rgb:231,246,242;--tblr-cyan:#17a2b8;--tblr-cyan-rgb:23,162,184;--tblr-cyan-fg:var(--tblr-light);--tblr-cyan-darken:#1592a6;--tblr-cyan-lt:#e8f6f8;--tblr-cyan-lt-rgb:232,246,248;--tblr-x:#000000;--tblr-x-rgb:0,0,0;--tblr-x-fg:var(--tblr-light);--tblr-x-darken:black;--tblr-x-lt:#e6e6e6;--tblr-x-lt-rgb:230,230,230;--tblr-facebook:#1877f2;--tblr-facebook-rgb:24,119,242;--tblr-facebook-fg:var(--tblr-light);--tblr-facebook-darken:#166bda;--tblr-facebook-lt:#e8f1fe;--tblr-facebook-lt-rgb:232,241,254;--tblr-twitter:#1da1f2;--tblr-twitter-rgb:29,161,242;--tblr-twitter-fg:var(--tblr-light);--tblr-twitter-darken:#1a91da;--tblr-twitter-lt:#e8f6fe;--tblr-twitter-lt-rgb:232,246,254;--tblr-linkedin:#0a66c2;--tblr-linkedin-rgb:10,102,194;--tblr-linkedin-fg:var(--tblr-light);--tblr-linkedin-darken:#095caf;--tblr-linkedin-lt:#e7f0f9;--tblr-linkedin-lt-rgb:231,240,249;--tblr-google:#dc4e41;--tblr-google-rgb:220,78,65;--tblr-google-fg:var(--tblr-light);--tblr-google-darken:#c6463b;--tblr-google-lt:#fcedec;--tblr-google-lt-rgb:252,237,236;--tblr-youtube:#ff0000;--tblr-youtube-rgb:255,0,0;--tblr-youtube-fg:var(--tblr-light);--tblr-youtube-darken:#e60000;--tblr-youtube-lt:#ffe6e6;--tblr-youtube-lt-rgb:255,230,230;--tblr-vimeo:#1ab7ea;--tblr-vimeo-rgb:26,183,234;--tblr-vimeo-fg:var(--tblr-light);--tblr-vimeo-darken:#17a5d3;--tblr-vimeo-lt:#e8f8fd;--tblr-vimeo-lt-rgb:232,248,253;--tblr-dribbble:#ea4c89;--tblr-dribbble-rgb:234,76,137;--tblr-dribbble-fg:var(--tblr-light);--tblr-dribbble-darken:#d3447b;--tblr-dribbble-lt:#fdedf3;--tblr-dribbble-lt-rgb:253,237,243;--tblr-github:#181717;--tblr-github-rgb:24,23,23;--tblr-github-fg:var(--tblr-light);--tblr-github-darken:#161515;--tblr-github-lt:#e8e8e8;--tblr-github-lt-rgb:232,232,232;--tblr-instagram:#e4405f;--tblr-instagram-rgb:228,64,95;--tblr-instagram-fg:var(--tblr-light);--tblr-instagram-darken:#cd3a56;--tblr-instagram-lt:#fcecef;--tblr-instagram-lt-rgb:252,236,239;--tblr-pinterest:#bd081c;--tblr-pinterest-rgb:189,8,28;--tblr-pinterest-fg:var(--tblr-light);--tblr-pinterest-darken:#aa0719;--tblr-pinterest-lt:#f8e6e8;--tblr-pinterest-lt-rgb:248,230,232;--tblr-vk:#6383a8;--tblr-vk-rgb:99,131,168;--tblr-vk-fg:var(--tblr-light);--tblr-vk-darken:#597697;--tblr-vk-lt:#eff3f6;--tblr-vk-lt-rgb:239,243,246;--tblr-rss:#ffa500;--tblr-rss-rgb:255,165,0;--tblr-rss-fg:var(--tblr-light);--tblr-rss-darken:#e69500;--tblr-rss-lt:#fff6e6;--tblr-rss-lt-rgb:255,246,230;--tblr-flickr:#0063dc;--tblr-flickr-rgb:0,99,220;--tblr-flickr-fg:var(--tblr-light);--tblr-flickr-darken:#0059c6;--tblr-flickr-lt:#e6effc;--tblr-flickr-lt-rgb:230,239,252;--tblr-bitbucket:#0052cc;--tblr-bitbucket-rgb:0,82,204;--tblr-bitbucket-fg:var(--tblr-light);--tblr-bitbucket-darken:#004ab8;--tblr-bitbucket-lt:#e6eefa;--tblr-bitbucket-lt-rgb:230,238,250;--tblr-tabler:#066fd1;--tblr-tabler-rgb:6,111,209;--tblr-tabler-fg:var(--tblr-light);--tblr-tabler-darken:#0564bc;--tblr-tabler-lt:#e6f1fa;--tblr-tabler-lt-rgb:230,241,250;--tblr-gray-50:#f6f8fb;--tblr-gray-50-rgb:246,248,251;--tblr-gray-50-fg:var(--tblr-dark);--tblr-gray-50-darken:#dddfe2;--tblr-gray-50-lt:#fefeff;--tblr-gray-50-lt-rgb:254,254,255;--tblr-gray-100:#eef3f6;--tblr-gray-100-rgb:238,243,246;--tblr-gray-100-fg:var(--tblr-dark);--tblr-gray-100-darken:#d6dbdd;--tblr-gray-100-lt:#fdfefe;--tblr-gray-100-lt-rgb:253,254,254;--tblr-gray-200:#dce1e7;--tblr-gray-200-rgb:220,225,231;--tblr-gray-200-fg:var(--tblr-dark);--tblr-gray-200-darken:#c6cbd0;--tblr-gray-200-lt:#fcfcfd;--tblr-gray-200-lt-rgb:252,252,253;--tblr-gray-300:#b8c4d4;--tblr-gray-300-rgb:184,196,212;--tblr-gray-300-fg:var(--tblr-light);--tblr-gray-300-darken:#a6b0bf;--tblr-gray-300-lt:#f8f9fb;--tblr-gray-300-lt-rgb:248,249,251;--tblr-gray-400:#8a97ab;--tblr-gray-400-rgb:138,151,171;--tblr-gray-400-fg:var(--tblr-light);--tblr-gray-400-darken:#7c889a;--tblr-gray-400-lt:#f3f5f7;--tblr-gray-400-lt-rgb:243,245,247;--tblr-gray-500:#6c7a91;--tblr-gray-500-rgb:108,122,145;--tblr-gray-500-fg:var(--tblr-light);--tblr-gray-500-darken:#616e83;--tblr-gray-500-lt:#f0f2f4;--tblr-gray-500-lt-rgb:240,242,244;--tblr-gray-600:#49566c;--tblr-gray-600-rgb:73,86,108;--tblr-gray-600-fg:var(--tblr-light);--tblr-gray-600-darken:#424d61;--tblr-gray-600-lt:#edeef0;--tblr-gray-600-lt-rgb:237,238,240;--tblr-gray-700:#3a4859;--tblr-gray-700-rgb:58,72,89;--tblr-gray-700-fg:var(--tblr-light);--tblr-gray-700-darken:#344150;--tblr-gray-700-lt:#ebedee;--tblr-gray-700-lt-rgb:235,237,238;--tblr-gray-800:#182433;--tblr-gray-800-rgb:24,36,51;--tblr-gray-800-fg:var(--tblr-light);--tblr-gray-800-darken:#16202e;--tblr-gray-800-lt:#e8e9eb;--tblr-gray-800-lt-rgb:232,233,235;--tblr-gray-900:#040a11;--tblr-gray-900-rgb:4,10,17;--tblr-gray-900-fg:var(--tblr-light);--tblr-gray-900-darken:#04090f;--tblr-gray-900-lt:#e6e7e7;--tblr-gray-900-lt-rgb:230,231,231;--tblr-spacer-0:0;--tblr-spacer-1:.25rem;--tblr-spacer-2:.5rem;--tblr-spacer-3:1rem;--tblr-spacer-4:1.5rem;--tblr-spacer-5:2rem;--tblr-spacer-6:3rem;--tblr-spacer-7:5rem;--tblr-spacer-8:8rem;--tblr-spacer:1rem;--tblr-bg-surface:var(--tblr-white);--tblr-bg-surface-secondary:var(--tblr-gray-100);--tblr-bg-surface-tertiary:var(--tblr-gray-50);--tblr-bg-surface-dark:var(--tblr-dark);--tblr-bg-forms:var(--tblr-bg-surface);--tblr-border-color:#dce1e7;--tblr-border-color-translucent:rgba(4, 32, 69, .1);--tblr-border-dark-color:#8a97ab;--tblr-border-dark-color-translucent:rgba(4, 32, 69, .27);--tblr-border-active-color:#aab2bf;--tblr-icon-color:var(--tblr-gray-400);--tblr-active-bg:rgba(var(--tblr-primary-rgb), .04);--tblr-disabled-bg:var(--tblr-bg-surface-secondary);--tblr-disabled-color:var(--tblr-gray-300);--tblr-code-color:var(--tblr-gray-600);--tblr-code-bg:var(--tblr-bg-surface-secondary);--tblr-dark-mode-border-color:#25384f;--tblr-dark-mode-border-color-translucent:rgba(72, 110, 149, .14);--tblr-dark-mode-border-active-color:#2c415d;--tblr-dark-mode-border-dark-color:#1f2e41;--tblr-page-padding:var(--tblr-spacer-3);--tblr-page-padding-y:var(--tblr-spacer-4);--tblr-font-weight-light:300;--tblr-font-weight-normal:400;--tblr-font-weight-medium:500;--tblr-font-weight-bold:600;--tblr-font-weight-headings:var(--tblr-font-weight-bold);--tblr-font-size-h1:1.5rem;--tblr-font-size-h2:1.25rem;--tblr-font-size-h3:1rem;--tblr-font-size-h4:.875rem;--tblr-font-size-h5:.75rem;--tblr-font-size-h6:.625rem;--tblr-line-height-h1:2rem;--tblr-line-height-h2:1.75rem;--tblr-line-height-h3:1.5rem;--tblr-line-height-h4:1.25rem;--tblr-line-height-h5:1rem;--tblr-line-height-h6:1rem;--tblr-box-shadow:rgba(var(--tblr-body-color-rgb), .04) 0 2px 4px 0;--tblr-box-shadow-border:inset 0 0 0 1px var(--tblr-border-color-translucent);--tblr-box-shadow-transparent:0 0 0 0 transparent;--tblr-box-shadow-input:0 1px 1px rgba(var(--tblr-body-color-rgb), .06);--tblr-box-shadow-card:0 0 4px rgba(var(--tblr-body-color-rgb), .04);--tblr-box-shadow-card-hover:rgba(var(--tblr-body-color-rgb), .16) 0 2px 16px 0;--tblr-box-shadow-dropdown:0 16px 24px 2px rgba(0, 0, 0, .07),0 6px 30px 5px rgba(0, 0, 0, .06),0 8px 10px -5px rgba(0, 0, 0, .1)}@media (max-width:991.98px){:host,:root,[data-bs-theme=light]{--tblr-page-padding:var(--tblr-spacer-2)}}*{scrollbar-color:rgba(var(--tblr-scrollbar-color,var(--tblr-body-color-rgb)),.16)}@media (max-width:575.98px){.navbar-expand-sm .navbar-collapse{flex-direction:column}.navbar-expand-sm .navbar-collapse [class^=container]{flex-direction:column;align-items:stretch;padding:0}.navbar-expand-sm .navbar-collapse .navbar-nav{margin-left:0;margin-right:0}.navbar-expand-sm .navbar-collapse .navbar-nav .nav-link{padding:.5rem calc(calc(var(--tblr-page-padding) * 2)/ 2);justify-content:flex-start}.navbar-expand-sm .navbar-collapse .dropdown-menu-columns{flex-direction:column}.navbar-expand-sm .navbar-collapse .dropdown-menu{padding:0;background:0 0;position:static;color:inherit;box-shadow:none;border:none;min-width:0;margin:0}.navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-item{min-width:0;display:flex;width:auto;padding-left:calc(calc(calc(var(--tblr-page-padding) * 2)/ 2) + 1.75rem);color:inherit}.navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-item.disabled{color:var(--tblr-gray-300);pointer-events:none;background-color:transparent}.navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-item.active,.navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-item:active{background:var(--tblr-navbar-active-bg)}.navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(calc(calc(var(--tblr-page-padding) * 2)/ 2) + 3.25rem)}.navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(calc(calc(var(--tblr-page-padding) * 2)/ 2) + 4.75rem)}.navbar-expand-sm .navbar-collapse .dropdown-toggle:after{margin-left:auto}.navbar-expand-sm .navbar-collapse .nav-item.active:after{border-bottom-width:0;border-left-width:3px;right:auto;top:0;bottom:0}}@media (max-width:767.98px){.navbar-expand-md .navbar-collapse{flex-direction:column}.navbar-expand-md .navbar-collapse [class^=container]{flex-direction:column;align-items:stretch;padding:0}.navbar-expand-md .navbar-collapse .navbar-nav{margin-left:0;margin-right:0}.navbar-expand-md .navbar-collapse .navbar-nav .nav-link{padding:.5rem calc(calc(var(--tblr-page-padding) * 2)/ 2);justify-content:flex-start}.navbar-expand-md .navbar-collapse .dropdown-menu-columns{flex-direction:column}.navbar-expand-md .navbar-collapse .dropdown-menu{padding:0;background:0 0;position:static;color:inherit;box-shadow:none;border:none;min-width:0;margin:0}.navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-item{min-width:0;display:flex;width:auto;padding-left:calc(calc(calc(var(--tblr-page-padding) * 2)/ 2) + 1.75rem);color:inherit}.navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-item.disabled{color:var(--tblr-gray-300);pointer-events:none;background-color:transparent}.navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-item.active,.navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-item:active{background:var(--tblr-navbar-active-bg)}.navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(calc(calc(var(--tblr-page-padding) * 2)/ 2) + 3.25rem)}.navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(calc(calc(var(--tblr-page-padding) * 2)/ 2) + 4.75rem)}.navbar-expand-md .navbar-collapse .dropdown-toggle:after{margin-left:auto}.navbar-expand-md .navbar-collapse .nav-item.active:after{border-bottom-width:0;border-left-width:3px;right:auto;top:0;bottom:0}}@media (max-width:991.98px){.navbar-expand-lg .navbar-collapse{flex-direction:column}.navbar-expand-lg .navbar-collapse [class^=container]{flex-direction:column;align-items:stretch;padding:0}.navbar-expand-lg .navbar-collapse .navbar-nav{margin-left:0;margin-right:0}.navbar-expand-lg .navbar-collapse .navbar-nav .nav-link{padding:.5rem calc(calc(var(--tblr-page-padding) * 2)/ 2);justify-content:flex-start}.navbar-expand-lg .navbar-collapse .dropdown-menu-columns{flex-direction:column}.navbar-expand-lg .navbar-collapse .dropdown-menu{padding:0;background:0 0;position:static;color:inherit;box-shadow:none;border:none;min-width:0;margin:0}.navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-item{min-width:0;display:flex;width:auto;padding-left:calc(calc(calc(var(--tblr-page-padding) * 2)/ 2) + 1.75rem);color:inherit}.navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-item.disabled{color:var(--tblr-gray-300);pointer-events:none;background-color:transparent}.navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-item.active,.navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-item:active{background:var(--tblr-navbar-active-bg)}.navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(calc(calc(var(--tblr-page-padding) * 2)/ 2) + 3.25rem)}.navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(calc(calc(var(--tblr-page-padding) * 2)/ 2) + 4.75rem)}.navbar-expand-lg .navbar-collapse .dropdown-toggle:after{margin-left:auto}.navbar-expand-lg .navbar-collapse .nav-item.active:after{border-bottom-width:0;border-left-width:3px;right:auto;top:0;bottom:0}}@media (max-width:1199.98px){.navbar-expand-xl .navbar-collapse{flex-direction:column}.navbar-expand-xl .navbar-collapse [class^=container]{flex-direction:column;align-items:stretch;padding:0}.navbar-expand-xl .navbar-collapse .navbar-nav{margin-left:0;margin-right:0}.navbar-expand-xl .navbar-collapse .navbar-nav .nav-link{padding:.5rem calc(calc(var(--tblr-page-padding) * 2)/ 2);justify-content:flex-start}.navbar-expand-xl .navbar-collapse .dropdown-menu-columns{flex-direction:column}.navbar-expand-xl .navbar-collapse .dropdown-menu{padding:0;background:0 0;position:static;color:inherit;box-shadow:none;border:none;min-width:0;margin:0}.navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-item{min-width:0;display:flex;width:auto;padding-left:calc(calc(calc(var(--tblr-page-padding) * 2)/ 2) + 1.75rem);color:inherit}.navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-item.disabled{color:var(--tblr-gray-300);pointer-events:none;background-color:transparent}.navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-item.active,.navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-item:active{background:var(--tblr-navbar-active-bg)}.navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(calc(calc(var(--tblr-page-padding) * 2)/ 2) + 3.25rem)}.navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(calc(calc(var(--tblr-page-padding) * 2)/ 2) + 4.75rem)}.navbar-expand-xl .navbar-collapse .dropdown-toggle:after{margin-left:auto}.navbar-expand-xl .navbar-collapse .nav-item.active:after{border-bottom-width:0;border-left-width:3px;right:auto;top:0;bottom:0}}@media (max-width:1399.98px){.navbar-expand-xxl .navbar-collapse{flex-direction:column}.navbar-expand-xxl .navbar-collapse [class^=container]{flex-direction:column;align-items:stretch;padding:0}.navbar-expand-xxl .navbar-collapse .navbar-nav{margin-left:0;margin-right:0}.navbar-expand-xxl .navbar-collapse .navbar-nav .nav-link{padding:.5rem calc(calc(var(--tblr-page-padding) * 2)/ 2);justify-content:flex-start}.navbar-expand-xxl .navbar-collapse .dropdown-menu-columns{flex-direction:column}.navbar-expand-xxl .navbar-collapse .dropdown-menu{padding:0;background:0 0;position:static;color:inherit;box-shadow:none;border:none;min-width:0;margin:0}.navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-item{min-width:0;display:flex;width:auto;padding-left:calc(calc(calc(var(--tblr-page-padding) * 2)/ 2) + 1.75rem);color:inherit}.navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-item.disabled{color:var(--tblr-gray-300);pointer-events:none;background-color:transparent}.navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-item.active,.navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-item:active{background:var(--tblr-navbar-active-bg)}.navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(calc(calc(var(--tblr-page-padding) * 2)/ 2) + 3.25rem)}.navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(calc(calc(var(--tblr-page-padding) * 2)/ 2) + 4.75rem)}.navbar-expand-xxl .navbar-collapse .dropdown-toggle:after{margin-left:auto}.navbar-expand-xxl .navbar-collapse .nav-item.active:after{border-bottom-width:0;border-left-width:3px;right:auto;top:0;bottom:0}}.navbar-expand .navbar-collapse .dropdown-menu .dropdown-item.disabled{color:var(--tblr-gray-300);pointer-events:none;background-color:transparent}@media (min-width:576px){.navbar-vertical.navbar-expand-sm.navbar-right{left:auto;right:0}.navbar-vertical.navbar-expand-sm .navbar-brand{padding:.75rem 0;justify-content:center}.navbar-vertical.navbar-expand-sm .navbar-collapse{align-items:stretch}.navbar-vertical.navbar-expand-sm .navbar-nav{flex-direction:column;flex-grow:1;min-height:auto}.navbar-vertical.navbar-expand-sm .navbar-nav .nav-link{padding-top:.5rem;padding-bottom:.5rem}.navbar-vertical.navbar-expand-sm>[class^=container]{flex-direction:column;align-items:stretch;min-height:100%;justify-content:flex-start;padding:0}.navbar-vertical.navbar-expand-sm~.page{padding-left:15rem}.navbar-vertical.navbar-expand-sm~.page [class^=container]{padding-left:1.5rem;padding-right:1.5rem}.navbar-vertical.navbar-expand-sm.navbar-right~.page{padding-left:0;padding-right:15rem}.navbar-vertical.navbar-expand-sm .navbar-collapse{flex-direction:column}.navbar-vertical.navbar-expand-sm .navbar-collapse [class^=container]{flex-direction:column;align-items:stretch;padding:0}.navbar-vertical.navbar-expand-sm .navbar-collapse .navbar-nav{margin-left:0;margin-right:0}.navbar-vertical.navbar-expand-sm .navbar-collapse .navbar-nav .nav-link{padding:.5rem calc(calc(var(--tblr-page-padding) * 2)/ 2);justify-content:flex-start}.navbar-vertical.navbar-expand-sm .navbar-collapse .dropdown-menu-columns{flex-direction:column}.navbar-vertical.navbar-expand-sm .navbar-collapse .dropdown-menu{padding:0;background:0 0;position:static;color:inherit;box-shadow:none;border:none;min-width:0;margin:0}.navbar-vertical.navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-item{min-width:0;display:flex;width:auto;padding-left:calc(calc(calc(var(--tblr-page-padding) * 2)/ 2) + 1.75rem);color:inherit}.navbar-vertical.navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-item.disabled{color:var(--tblr-gray-300);pointer-events:none;background-color:transparent}.navbar-vertical.navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-item.active,.navbar-vertical.navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-item:active{background:var(--tblr-navbar-active-bg)}.navbar-vertical.navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(calc(calc(var(--tblr-page-padding) * 2)/ 2) + 3.25rem)}.navbar-vertical.navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(calc(calc(var(--tblr-page-padding) * 2)/ 2) + 4.75rem)}.navbar-vertical.navbar-expand-sm .navbar-collapse .dropdown-toggle:after{margin-left:auto}.navbar-vertical.navbar-expand-sm .navbar-collapse .nav-item.active:after{border-bottom-width:0;border-left-width:3px;right:auto;top:0;bottom:0}}@media (min-width:768px){.navbar-vertical.navbar-expand-md.navbar-right{left:auto;right:0}.navbar-vertical.navbar-expand-md .navbar-brand{padding:.75rem 0;justify-content:center}.navbar-vertical.navbar-expand-md .navbar-collapse{align-items:stretch}.navbar-vertical.navbar-expand-md .navbar-nav{flex-direction:column;flex-grow:1;min-height:auto}.navbar-vertical.navbar-expand-md .navbar-nav .nav-link{padding-top:.5rem;padding-bottom:.5rem}.navbar-vertical.navbar-expand-md>[class^=container]{flex-direction:column;align-items:stretch;min-height:100%;justify-content:flex-start;padding:0}.navbar-vertical.navbar-expand-md~.page{padding-left:15rem}.navbar-vertical.navbar-expand-md~.page [class^=container]{padding-left:1.5rem;padding-right:1.5rem}.navbar-vertical.navbar-expand-md.navbar-right~.page{padding-left:0;padding-right:15rem}.navbar-vertical.navbar-expand-md .navbar-collapse{flex-direction:column}.navbar-vertical.navbar-expand-md .navbar-collapse [class^=container]{flex-direction:column;align-items:stretch;padding:0}.navbar-vertical.navbar-expand-md .navbar-collapse .navbar-nav{margin-left:0;margin-right:0}.navbar-vertical.navbar-expand-md .navbar-collapse .navbar-nav .nav-link{padding:.5rem calc(calc(var(--tblr-page-padding) * 2)/ 2);justify-content:flex-start}.navbar-vertical.navbar-expand-md .navbar-collapse .dropdown-menu-columns{flex-direction:column}.navbar-vertical.navbar-expand-md .navbar-collapse .dropdown-menu{padding:0;background:0 0;position:static;color:inherit;box-shadow:none;border:none;min-width:0;margin:0}.navbar-vertical.navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-item{min-width:0;display:flex;width:auto;padding-left:calc(calc(calc(var(--tblr-page-padding) * 2)/ 2) + 1.75rem);color:inherit}.navbar-vertical.navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-item.disabled{color:var(--tblr-gray-300);pointer-events:none;background-color:transparent}.navbar-vertical.navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-item.active,.navbar-vertical.navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-item:active{background:var(--tblr-navbar-active-bg)}.navbar-vertical.navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(calc(calc(var(--tblr-page-padding) * 2)/ 2) + 3.25rem)}.navbar-vertical.navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(calc(calc(var(--tblr-page-padding) * 2)/ 2) + 4.75rem)}.navbar-vertical.navbar-expand-md .navbar-collapse .dropdown-toggle:after{margin-left:auto}.navbar-vertical.navbar-expand-md .navbar-collapse .nav-item.active:after{border-bottom-width:0;border-left-width:3px;right:auto;top:0;bottom:0}}@media (min-width:992px){.navbar-vertical.navbar-expand-lg.navbar-right{left:auto;right:0}.navbar-vertical.navbar-expand-lg .navbar-brand{padding:.75rem 0;justify-content:center}.navbar-vertical.navbar-expand-lg .navbar-collapse{align-items:stretch}.navbar-vertical.navbar-expand-lg .navbar-nav{flex-direction:column;flex-grow:1;min-height:auto}.navbar-vertical.navbar-expand-lg .navbar-nav .nav-link{padding-top:.5rem;padding-bottom:.5rem}.navbar-vertical.navbar-expand-lg>[class^=container]{flex-direction:column;align-items:stretch;min-height:100%;justify-content:flex-start;padding:0}.navbar-vertical.navbar-expand-lg~.page{padding-left:15rem}.navbar-vertical.navbar-expand-lg~.page [class^=container]{padding-left:1.5rem;padding-right:1.5rem}.navbar-vertical.navbar-expand-lg.navbar-right~.page{padding-left:0;padding-right:15rem}.navbar-vertical.navbar-expand-lg .navbar-collapse{flex-direction:column}.navbar-vertical.navbar-expand-lg .navbar-collapse [class^=container]{flex-direction:column;align-items:stretch;padding:0}.navbar-vertical.navbar-expand-lg .navbar-collapse .navbar-nav{margin-left:0;margin-right:0}.navbar-vertical.navbar-expand-lg .navbar-collapse .navbar-nav .nav-link{padding:.5rem calc(calc(var(--tblr-page-padding) * 2)/ 2);justify-content:flex-start}.navbar-vertical.navbar-expand-lg .navbar-collapse .dropdown-menu-columns{flex-direction:column}.navbar-vertical.navbar-expand-lg .navbar-collapse .dropdown-menu{padding:0;background:0 0;position:static;color:inherit;box-shadow:none;border:none;min-width:0;margin:0}.navbar-vertical.navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-item{min-width:0;display:flex;width:auto;padding-left:calc(calc(calc(var(--tblr-page-padding) * 2)/ 2) + 1.75rem);color:inherit}.navbar-vertical.navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-item.disabled{color:var(--tblr-gray-300);pointer-events:none;background-color:transparent}.navbar-vertical.navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-item.active,.navbar-vertical.navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-item:active{background:var(--tblr-navbar-active-bg)}.navbar-vertical.navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(calc(calc(var(--tblr-page-padding) * 2)/ 2) + 3.25rem)}.navbar-vertical.navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(calc(calc(var(--tblr-page-padding) * 2)/ 2) + 4.75rem)}.navbar-vertical.navbar-expand-lg .navbar-collapse .dropdown-toggle:after{margin-left:auto}.navbar-vertical.navbar-expand-lg .navbar-collapse .nav-item.active:after{border-bottom-width:0;border-left-width:3px;right:auto;top:0;bottom:0}}@media (min-width:1200px){.navbar-vertical.navbar-expand-xl.navbar-right{left:auto;right:0}.navbar-vertical.navbar-expand-xl .navbar-brand{padding:.75rem 0;justify-content:center}.navbar-vertical.navbar-expand-xl .navbar-collapse{align-items:stretch}.navbar-vertical.navbar-expand-xl .navbar-nav{flex-direction:column;flex-grow:1;min-height:auto}.navbar-vertical.navbar-expand-xl .navbar-nav .nav-link{padding-top:.5rem;padding-bottom:.5rem}.navbar-vertical.navbar-expand-xl>[class^=container]{flex-direction:column;align-items:stretch;min-height:100%;justify-content:flex-start;padding:0}.navbar-vertical.navbar-expand-xl~.page{padding-left:15rem}.navbar-vertical.navbar-expand-xl~.page [class^=container]{padding-left:1.5rem;padding-right:1.5rem}.navbar-vertical.navbar-expand-xl.navbar-right~.page{padding-left:0;padding-right:15rem}.navbar-vertical.navbar-expand-xl .navbar-collapse{flex-direction:column}.navbar-vertical.navbar-expand-xl .navbar-collapse [class^=container]{flex-direction:column;align-items:stretch;padding:0}.navbar-vertical.navbar-expand-xl .navbar-collapse .navbar-nav{margin-left:0;margin-right:0}.navbar-vertical.navbar-expand-xl .navbar-collapse .navbar-nav .nav-link{padding:.5rem calc(calc(var(--tblr-page-padding) * 2)/ 2);justify-content:flex-start}.navbar-vertical.navbar-expand-xl .navbar-collapse .dropdown-menu-columns{flex-direction:column}.navbar-vertical.navbar-expand-xl .navbar-collapse .dropdown-menu{padding:0;background:0 0;position:static;color:inherit;box-shadow:none;border:none;min-width:0;margin:0}.navbar-vertical.navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-item{min-width:0;display:flex;width:auto;padding-left:calc(calc(calc(var(--tblr-page-padding) * 2)/ 2) + 1.75rem);color:inherit}.navbar-vertical.navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-item.disabled{color:var(--tblr-gray-300);pointer-events:none;background-color:transparent}.navbar-vertical.navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-item.active,.navbar-vertical.navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-item:active{background:var(--tblr-navbar-active-bg)}.navbar-vertical.navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(calc(calc(var(--tblr-page-padding) * 2)/ 2) + 3.25rem)}.navbar-vertical.navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(calc(calc(var(--tblr-page-padding) * 2)/ 2) + 4.75rem)}.navbar-vertical.navbar-expand-xl .navbar-collapse .dropdown-toggle:after{margin-left:auto}.navbar-vertical.navbar-expand-xl .navbar-collapse .nav-item.active:after{border-bottom-width:0;border-left-width:3px;right:auto;top:0;bottom:0}}@media (min-width:1400px){.navbar-vertical.navbar-expand-xxl.navbar-right{left:auto;right:0}.navbar-vertical.navbar-expand-xxl .navbar-brand{padding:.75rem 0;justify-content:center}.navbar-vertical.navbar-expand-xxl .navbar-collapse{align-items:stretch}.navbar-vertical.navbar-expand-xxl .navbar-nav{flex-direction:column;flex-grow:1;min-height:auto}.navbar-vertical.navbar-expand-xxl .navbar-nav .nav-link{padding-top:.5rem;padding-bottom:.5rem}.navbar-vertical.navbar-expand-xxl>[class^=container]{flex-direction:column;align-items:stretch;min-height:100%;justify-content:flex-start;padding:0}.navbar-vertical.navbar-expand-xxl~.page{padding-left:15rem}.navbar-vertical.navbar-expand-xxl~.page [class^=container]{padding-left:1.5rem;padding-right:1.5rem}.navbar-vertical.navbar-expand-xxl.navbar-right~.page{padding-left:0;padding-right:15rem}.navbar-vertical.navbar-expand-xxl .navbar-collapse{flex-direction:column}.navbar-vertical.navbar-expand-xxl .navbar-collapse [class^=container]{flex-direction:column;align-items:stretch;padding:0}.navbar-vertical.navbar-expand-xxl .navbar-collapse .navbar-nav{margin-left:0;margin-right:0}.navbar-vertical.navbar-expand-xxl .navbar-collapse .navbar-nav .nav-link{padding:.5rem calc(calc(var(--tblr-page-padding) * 2)/ 2);justify-content:flex-start}.navbar-vertical.navbar-expand-xxl .navbar-collapse .dropdown-menu-columns{flex-direction:column}.navbar-vertical.navbar-expand-xxl .navbar-collapse .dropdown-menu{padding:0;background:0 0;position:static;color:inherit;box-shadow:none;border:none;min-width:0;margin:0}.navbar-vertical.navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-item{min-width:0;display:flex;width:auto;padding-left:calc(calc(calc(var(--tblr-page-padding) * 2)/ 2) + 1.75rem);color:inherit}.navbar-vertical.navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-item.disabled{color:var(--tblr-gray-300);pointer-events:none;background-color:transparent}.navbar-vertical.navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-item.active,.navbar-vertical.navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-item:active{background:var(--tblr-navbar-active-bg)}.navbar-vertical.navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(calc(calc(var(--tblr-page-padding) * 2)/ 2) + 3.25rem)}.navbar-vertical.navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(calc(calc(var(--tblr-page-padding) * 2)/ 2) + 4.75rem)}.navbar-vertical.navbar-expand-xxl .navbar-collapse .dropdown-toggle:after{margin-left:auto}.navbar-vertical.navbar-expand-xxl .navbar-collapse .nav-item.active:after{border-bottom-width:0;border-left-width:3px;right:auto;top:0;bottom:0}}.navbar-vertical.navbar-expand .navbar-collapse .dropdown-menu .dropdown-item.disabled{color:var(--tblr-gray-300);pointer-events:none;background-color:transparent}.page-center{justify-content:center}.page-body{margin-top:var(--tblr-page-padding-y);margin-bottom:var(--tblr-page-padding-y);display:flex;flex-direction:column;flex:1}.page-pretitle{font-size:.625rem;font-weight:var(--tblr-font-weight-bold);text-transform:uppercase;letter-spacing:.04em;line-height:1rem;color:var(--tblr-secondary)}.page-title{margin:0;font-size:var(--tblr-font-size-h2);line-height:var(--tblr-line-height-h2);font-weight:var(--tblr-font-weight-headings);color:inherit;display:flex;align-items:center}.footer{border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);background-color:#fff;padding:2rem 0;color:var(--tblr-gray-500);margin-top:auto}body:not(.theme-dark):not([data-bs-theme=dark]) .img-dark{display:none!important}body.theme-dark .hide-theme-dark,body[data-bs-theme=dark] .hide-theme-dark,body.theme-dark .img-light,body[data-bs-theme=dark] .img-light{display:none!important}[data-bs-theme=dark],body[data-bs-theme=dark] [data-bs-theme=light]{--tblr-body-color:#dce1e7;--tblr-body-color-rgb:220,225,231;--tblr-muted:#49566c;--tblr-body-bg:#151f2c;--tblr-body-bg-rgb:21,31,44;--tblr-emphasis-color:#ffffff;--tblr-emphasis-color-rgb:255,255,255;--tblr-bg-forms:#151f2c;--tblr-bg-surface:#182433;--tblr-bg-surface-dark:#151f2c;--tblr-bg-surface-secondary:#1b293a;--tblr-bg-surface-tertiary:#151f2c;--tblr-link-color:#0884f8;--tblr-link-hover-color:#066fd1;--tblr-active-bg:#1b293a;--tblr-disabled-color:var(--tblr-gray-700);--tblr-border-color:var(--tblr-dark-mode-border-color);--tblr-border-color-translucent:var( --tblr-dark-mode-border-color-translucent );--tblr-border-dark-color:var(--tblr-dark-mode-border-dark-color);--tblr-border-active-color:var( --tblr-dark-mode-border-active-color );--tblr-btn-color:#151f2c;--tblr-code-color:var(--tblr-body-color);--tblr-code-bg:#1f2e41;--tblr-primary-lt:#162c43;--tblr-primary-lt-rgb:22,44,67;--tblr-secondary-lt:#202d3c;--tblr-secondary-lt-rgb:32,45,60;--tblr-success-lt:#1a3235;--tblr-success-lt-rgb:26,50,53;--tblr-info-lt:#1c3044;--tblr-info-lt-rgb:28,48,68;--tblr-warning-lt:#2e2b2f;--tblr-warning-lt-rgb:46,43,47;--tblr-danger-lt:#2b2634;--tblr-danger-lt-rgb:43,38,52;--tblr-light-lt:#2e3947;--tblr-light-lt-rgb:46,57,71;--tblr-dark-lt:#182433;--tblr-dark-lt-rgb:24,36,51;--tblr-muted-lt:#202d3c;--tblr-muted-lt-rgb:32,45,60;--tblr-blue-lt:#162c43;--tblr-blue-lt-rgb:22,44,67;--tblr-azure-lt:#1c3044;--tblr-azure-lt-rgb:28,48,68;--tblr-indigo-lt:#1c2a45;--tblr-indigo-lt-rgb:28,42,69;--tblr-purple-lt:#272742;--tblr-purple-lt-rgb:39,39,66;--tblr-pink-lt:#2b2639;--tblr-pink-lt-rgb:43,38,57;--tblr-red-lt:#2b2634;--tblr-red-lt-rgb:43,38,52;--tblr-orange-lt:#2e2b2f;--tblr-orange-lt-rgb:46,43,47;--tblr-yellow-lt:#2e302e;--tblr-yellow-lt-rgb:46,48,46;--tblr-lime-lt:#213330;--tblr-lime-lt-rgb:33,51,48;--tblr-green-lt:#1a3235;--tblr-green-lt-rgb:26,50,53;--tblr-teal-lt:#17313a;--tblr-teal-lt-rgb:23,49,58;--tblr-cyan-lt:#183140;--tblr-cyan-lt-rgb:24,49,64;--tblr-x-lt:#16202e;--tblr-x-lt-rgb:22,32,46;--tblr-facebook-lt:#182c46;--tblr-facebook-lt-rgb:24,44,70;--tblr-twitter-lt:#193146;--tblr-twitter-lt-rgb:25,49,70;--tblr-linkedin-lt:#172b41;--tblr-linkedin-lt-rgb:23,43,65;--tblr-google-lt:#2c2834;--tblr-google-lt-rgb:44,40,52;--tblr-youtube-lt:#2f202e;--tblr-youtube-lt-rgb:47,32,46;--tblr-vimeo-lt:#183345;--tblr-vimeo-lt-rgb:24,51,69;--tblr-dribbble-lt:#2d283c;--tblr-dribbble-lt-rgb:45,40,60;--tblr-github-lt:#182330;--tblr-github-lt-rgb:24,35,48;--tblr-instagram-lt:#2c2737;--tblr-instagram-lt-rgb:44,39,55;--tblr-pinterest-lt:#292131;--tblr-pinterest-lt-rgb:41,33,49;--tblr-vk-lt:#202e3f;--tblr-vk-lt-rgb:32,46,63;--tblr-rss-lt:#2f312e;--tblr-rss-lt-rgb:47,49,46;--tblr-flickr-lt:#162a44;--tblr-flickr-lt-rgb:22,42,68;--tblr-bitbucket-lt:#162942;--tblr-bitbucket-lt-rgb:22,41,66;--tblr-tabler-lt:#162c43;--tblr-tabler-lt-rgb:22,44,67}.alert{--tblr-alert-color:var(--tblr-secondary);--tblr-alert-bg:var(--tblr-bg-surface);border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent);border-left:.25rem var(--tblr-border-style) var(--tblr-alert-color);box-shadow:#1824330a 0 2px 4px}.alert-x{--tblr-alert-color:var(--tblr-x)}.avatar{--tblr-avatar-size:2.5rem;--tblr-avatar-status-size:.75rem;--tblr-avatar-bg:var(--tblr-bg-surface-secondary);--tblr-avatar-box-shadow:var(--tblr-box-shadow-border);--tblr-avatar-font-size:1rem;--tblr-avatar-icon-size:1.5rem;position:relative;width:var(--tblr-avatar-size);height:var(--tblr-avatar-size);font-size:var(--tblr-avatar-font-size);font-weight:var(--tblr-font-weight-medium);line-height:1;display:inline-flex;align-items:center;justify-content:center;color:var(--tblr-secondary);text-align:center;text-transform:uppercase;vertical-align:bottom;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background:var(--tblr-avatar-bg) no-repeat center/cover;border-radius:var(--tblr-border-radius);box-shadow:var(--tblr-avatar-box-shadow)}.avatar .badge{position:absolute;right:0;bottom:0;border-radius:100rem;box-shadow:0 0 0 calc(var(--tblr-avatar-status-size)/ 4) var(--tblr-bg-surface)}.avatar-xxs{--tblr-avatar-size:1rem;--tblr-avatar-status-size:.25rem;--tblr-avatar-font-size:.5rem;--tblr-avatar-icon-size:.75rem}.avatar-xs{--tblr-avatar-size:1.25rem;--tblr-avatar-status-size:.375rem;--tblr-avatar-font-size:.625rem;--tblr-avatar-icon-size:1rem}.avatar-sm{--tblr-avatar-size:2rem;--tblr-avatar-status-size:.5rem;--tblr-avatar-font-size:.75rem;--tblr-avatar-icon-size:1.25rem}.avatar-md{--tblr-avatar-size:2.5rem;--tblr-avatar-status-size:.75rem;--tblr-avatar-font-size:.875rem;--tblr-avatar-icon-size:1.5rem}.avatar-lg{--tblr-avatar-size:3rem;--tblr-avatar-status-size:.75rem;--tblr-avatar-font-size:1.25rem;--tblr-avatar-icon-size:2rem}.avatar-xl{--tblr-avatar-size:5rem;--tblr-avatar-status-size:1rem;--tblr-avatar-font-size:2rem;--tblr-avatar-icon-size:3rem}.avatar-2xl{--tblr-avatar-size:7rem;--tblr-avatar-status-size:1rem;--tblr-avatar-font-size:3rem;--tblr-avatar-icon-size:5rem}.avatar-list-stacked .avatar{margin-right:calc(-.5 * var(--tblr-avatar-size))!important;box-shadow:var(--tblr-avatar-box-shadow),0 0 0 2px var(--tblr-card-cap-bg,var(--tblr-card-bg,var(--tblr-bg-surface)))}.badge-empty,.badge:empty{display:inline-block;width:.5rem;height:.5rem;min-width:0;min-height:auto;padding:0;border-radius:100rem;vertical-align:baseline}.breadcrumb-muted{--tblr-breadcrumb-link-color:var(--tblr-secondary)}.btn{--tblr-btn-icon-size:1.25rem;--tblr-btn-bg:var(--tblr-bg-surface);--tblr-btn-color:var(--tblr-body-color);--tblr-btn-border-color:var(--tblr-border-color);--tblr-btn-hover-bg:var(--tblr-btn-bg);--tblr-btn-hover-border-color:var(--tblr-border-active-color);--tblr-btn-box-shadow:var(--tblr-box-shadow-input);--tblr-btn-active-color:var(--tblr-primary);--tblr-btn-active-bg:rgba(var(--tblr-primary-rgb), .04);--tblr-btn-active-border-color:var(--tblr-primary);display:inline-flex;align-items:center;justify-content:center;white-space:nowrap;box-shadow:var(--tblr-btn-box-shadow)}.btn-link{color:#077cea;background-color:transparent;border-color:transparent;box-shadow:none}.btn-link:hover{color:#0559a7;border-color:transparent}.btn-primary{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-primary-fg);--tblr-btn-bg:var(--tblr-primary);--tblr-btn-hover-color:var(--tblr-primary-fg);--tblr-btn-hover-bg:rgba(var(--tblr-primary-rgb), .8);--tblr-btn-active-color:var(--tblr-primary-fg);--tblr-btn-active-bg:rgba(var(--tblr-primary-rgb), .8);--tblr-btn-disabled-bg:var(--tblr-primary);--tblr-btn-disabled-color:var(--tblr-primary-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-secondary{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-secondary-fg);--tblr-btn-bg:var(--tblr-secondary);--tblr-btn-hover-color:var(--tblr-secondary-fg);--tblr-btn-hover-bg:rgba(var(--tblr-secondary-rgb), .8);--tblr-btn-active-color:var(--tblr-secondary-fg);--tblr-btn-active-bg:rgba(var(--tblr-secondary-rgb), .8);--tblr-btn-disabled-bg:var(--tblr-secondary);--tblr-btn-disabled-color:var(--tblr-secondary-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-success{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-success-fg);--tblr-btn-bg:var(--tblr-success);--tblr-btn-hover-color:var(--tblr-success-fg);--tblr-btn-hover-bg:rgba(var(--tblr-success-rgb), .8);--tblr-btn-active-color:var(--tblr-success-fg);--tblr-btn-active-bg:rgba(var(--tblr-success-rgb), .8);--tblr-btn-disabled-bg:var(--tblr-success);--tblr-btn-disabled-color:var(--tblr-success-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-info{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-info-fg);--tblr-btn-bg:var(--tblr-info);--tblr-btn-hover-color:var(--tblr-info-fg);--tblr-btn-hover-bg:rgba(var(--tblr-info-rgb), .8);--tblr-btn-active-color:var(--tblr-info-fg);--tblr-btn-active-bg:rgba(var(--tblr-info-rgb), .8);--tblr-btn-disabled-bg:var(--tblr-info);--tblr-btn-disabled-color:var(--tblr-info-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-warning{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-warning-fg);--tblr-btn-bg:var(--tblr-warning);--tblr-btn-hover-color:var(--tblr-warning-fg);--tblr-btn-hover-bg:rgba(var(--tblr-warning-rgb), .8);--tblr-btn-active-color:var(--tblr-warning-fg);--tblr-btn-active-bg:rgba(var(--tblr-warning-rgb), .8);--tblr-btn-disabled-bg:var(--tblr-warning);--tblr-btn-disabled-color:var(--tblr-warning-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-danger{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-danger-fg);--tblr-btn-bg:var(--tblr-danger);--tblr-btn-hover-color:var(--tblr-danger-fg);--tblr-btn-hover-bg:rgba(var(--tblr-danger-rgb), .8);--tblr-btn-active-color:var(--tblr-danger-fg);--tblr-btn-active-bg:rgba(var(--tblr-danger-rgb), .8);--tblr-btn-disabled-bg:var(--tblr-danger);--tblr-btn-disabled-color:var(--tblr-danger-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-light{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-light-fg);--tblr-btn-bg:var(--tblr-light);--tblr-btn-hover-color:var(--tblr-light-fg);--tblr-btn-hover-bg:rgba(var(--tblr-light-rgb), .8);--tblr-btn-active-color:var(--tblr-light-fg);--tblr-btn-active-bg:rgba(var(--tblr-light-rgb), .8);--tblr-btn-disabled-bg:var(--tblr-light);--tblr-btn-disabled-color:var(--tblr-light-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-dark{--tblr-btn-border-color:var(--tblr-dark-mode-border-color);--tblr-btn-hover-border-color:var(--tblr-dark-mode-border-active-color);--tblr-btn-active-border-color:var(--tblr-dark-mode-border-active-color);--tblr-btn-color:var(--tblr-dark-fg);--tblr-btn-bg:var(--tblr-dark);--tblr-btn-hover-color:var(--tblr-dark-fg);--tblr-btn-hover-bg:rgba(var(--tblr-dark-rgb), .8);--tblr-btn-active-color:var(--tblr-dark-fg);--tblr-btn-active-bg:rgba(var(--tblr-dark-rgb), .8);--tblr-btn-disabled-bg:var(--tblr-dark);--tblr-btn-disabled-color:var(--tblr-dark-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-muted{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-muted-fg);--tblr-btn-bg:var(--tblr-muted);--tblr-btn-hover-color:var(--tblr-muted-fg);--tblr-btn-hover-bg:rgba(var(--tblr-muted-rgb), .8);--tblr-btn-active-color:var(--tblr-muted-fg);--tblr-btn-active-bg:rgba(var(--tblr-muted-rgb), .8);--tblr-btn-disabled-bg:var(--tblr-muted);--tblr-btn-disabled-color:var(--tblr-muted-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-blue{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-blue-fg);--tblr-btn-bg:var(--tblr-blue);--tblr-btn-hover-color:var(--tblr-blue-fg);--tblr-btn-hover-bg:rgba(var(--tblr-blue-rgb), .8);--tblr-btn-active-color:var(--tblr-blue-fg);--tblr-btn-active-bg:rgba(var(--tblr-blue-rgb), .8);--tblr-btn-disabled-bg:var(--tblr-blue);--tblr-btn-disabled-color:var(--tblr-blue-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-azure{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-azure-fg);--tblr-btn-bg:var(--tblr-azure);--tblr-btn-hover-color:var(--tblr-azure-fg);--tblr-btn-hover-bg:rgba(var(--tblr-azure-rgb), .8);--tblr-btn-active-color:var(--tblr-azure-fg);--tblr-btn-active-bg:rgba(var(--tblr-azure-rgb), .8);--tblr-btn-disabled-bg:var(--tblr-azure);--tblr-btn-disabled-color:var(--tblr-azure-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-indigo{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-indigo-fg);--tblr-btn-bg:var(--tblr-indigo);--tblr-btn-hover-color:var(--tblr-indigo-fg);--tblr-btn-hover-bg:rgba(var(--tblr-indigo-rgb), .8);--tblr-btn-active-color:var(--tblr-indigo-fg);--tblr-btn-active-bg:rgba(var(--tblr-indigo-rgb), .8);--tblr-btn-disabled-bg:var(--tblr-indigo);--tblr-btn-disabled-color:var(--tblr-indigo-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-purple{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-purple-fg);--tblr-btn-bg:var(--tblr-purple);--tblr-btn-hover-color:var(--tblr-purple-fg);--tblr-btn-hover-bg:rgba(var(--tblr-purple-rgb), .8);--tblr-btn-active-color:var(--tblr-purple-fg);--tblr-btn-active-bg:rgba(var(--tblr-purple-rgb), .8);--tblr-btn-disabled-bg:var(--tblr-purple);--tblr-btn-disabled-color:var(--tblr-purple-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-pink{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-pink-fg);--tblr-btn-bg:var(--tblr-pink);--tblr-btn-hover-color:var(--tblr-pink-fg);--tblr-btn-hover-bg:rgba(var(--tblr-pink-rgb), .8);--tblr-btn-active-color:var(--tblr-pink-fg);--tblr-btn-active-bg:rgba(var(--tblr-pink-rgb), .8);--tblr-btn-disabled-bg:var(--tblr-pink);--tblr-btn-disabled-color:var(--tblr-pink-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-red{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-red-fg);--tblr-btn-bg:var(--tblr-red);--tblr-btn-hover-color:var(--tblr-red-fg);--tblr-btn-hover-bg:rgba(var(--tblr-red-rgb), .8);--tblr-btn-active-color:var(--tblr-red-fg);--tblr-btn-active-bg:rgba(var(--tblr-red-rgb), .8);--tblr-btn-disabled-bg:var(--tblr-red);--tblr-btn-disabled-color:var(--tblr-red-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-orange{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-orange-fg);--tblr-btn-bg:var(--tblr-orange);--tblr-btn-hover-color:var(--tblr-orange-fg);--tblr-btn-hover-bg:rgba(var(--tblr-orange-rgb), .8);--tblr-btn-active-color:var(--tblr-orange-fg);--tblr-btn-active-bg:rgba(var(--tblr-orange-rgb), .8);--tblr-btn-disabled-bg:var(--tblr-orange);--tblr-btn-disabled-color:var(--tblr-orange-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-yellow{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-yellow-fg);--tblr-btn-bg:var(--tblr-yellow);--tblr-btn-hover-color:var(--tblr-yellow-fg);--tblr-btn-hover-bg:rgba(var(--tblr-yellow-rgb), .8);--tblr-btn-active-color:var(--tblr-yellow-fg);--tblr-btn-active-bg:rgba(var(--tblr-yellow-rgb), .8);--tblr-btn-disabled-bg:var(--tblr-yellow);--tblr-btn-disabled-color:var(--tblr-yellow-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-lime{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-lime-fg);--tblr-btn-bg:var(--tblr-lime);--tblr-btn-hover-color:var(--tblr-lime-fg);--tblr-btn-hover-bg:rgba(var(--tblr-lime-rgb), .8);--tblr-btn-active-color:var(--tblr-lime-fg);--tblr-btn-active-bg:rgba(var(--tblr-lime-rgb), .8);--tblr-btn-disabled-bg:var(--tblr-lime);--tblr-btn-disabled-color:var(--tblr-lime-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-green{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-green-fg);--tblr-btn-bg:var(--tblr-green);--tblr-btn-hover-color:var(--tblr-green-fg);--tblr-btn-hover-bg:rgba(var(--tblr-green-rgb), .8);--tblr-btn-active-color:var(--tblr-green-fg);--tblr-btn-active-bg:rgba(var(--tblr-green-rgb), .8);--tblr-btn-disabled-bg:var(--tblr-green);--tblr-btn-disabled-color:var(--tblr-green-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-teal{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-teal-fg);--tblr-btn-bg:var(--tblr-teal);--tblr-btn-hover-color:var(--tblr-teal-fg);--tblr-btn-hover-bg:rgba(var(--tblr-teal-rgb), .8);--tblr-btn-active-color:var(--tblr-teal-fg);--tblr-btn-active-bg:rgba(var(--tblr-teal-rgb), .8);--tblr-btn-disabled-bg:var(--tblr-teal);--tblr-btn-disabled-color:var(--tblr-teal-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-cyan{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-cyan-fg);--tblr-btn-bg:var(--tblr-cyan);--tblr-btn-hover-color:var(--tblr-cyan-fg);--tblr-btn-hover-bg:rgba(var(--tblr-cyan-rgb), .8);--tblr-btn-active-color:var(--tblr-cyan-fg);--tblr-btn-active-bg:rgba(var(--tblr-cyan-rgb), .8);--tblr-btn-disabled-bg:var(--tblr-cyan);--tblr-btn-disabled-color:var(--tblr-cyan-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-x{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-x-fg);--tblr-btn-bg:var(--tblr-x);--tblr-btn-hover-color:var(--tblr-x-fg);--tblr-btn-hover-bg:rgba(var(--tblr-x-rgb), .8);--tblr-btn-active-color:var(--tblr-x-fg);--tblr-btn-active-bg:rgba(var(--tblr-x-rgb), .8);--tblr-btn-disabled-bg:var(--tblr-x);--tblr-btn-disabled-color:var(--tblr-x-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-outline-x{--tblr-btn-color:var(--tblr-x);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-x);--tblr-btn-hover-color:var(--tblr-x-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-x);--tblr-btn-active-color:var(--tblr-x-fg);--tblr-btn-active-bg:var(--tblr-x);--tblr-btn-disabled-color:var(--tblr-x);--tblr-btn-disabled-border-color:var(--tblr-x)}.btn-facebook{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-facebook-fg);--tblr-btn-bg:var(--tblr-facebook);--tblr-btn-hover-color:var(--tblr-facebook-fg);--tblr-btn-hover-bg:rgba(var(--tblr-facebook-rgb), .8);--tblr-btn-active-color:var(--tblr-facebook-fg);--tblr-btn-active-bg:rgba(var(--tblr-facebook-rgb), .8);--tblr-btn-disabled-bg:var(--tblr-facebook);--tblr-btn-disabled-color:var(--tblr-facebook-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-twitter{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-twitter-fg);--tblr-btn-bg:var(--tblr-twitter);--tblr-btn-hover-color:var(--tblr-twitter-fg);--tblr-btn-hover-bg:rgba(var(--tblr-twitter-rgb), .8);--tblr-btn-active-color:var(--tblr-twitter-fg);--tblr-btn-active-bg:rgba(var(--tblr-twitter-rgb), .8);--tblr-btn-disabled-bg:var(--tblr-twitter);--tblr-btn-disabled-color:var(--tblr-twitter-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-linkedin{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-linkedin-fg);--tblr-btn-bg:var(--tblr-linkedin);--tblr-btn-hover-color:var(--tblr-linkedin-fg);--tblr-btn-hover-bg:rgba(var(--tblr-linkedin-rgb), .8);--tblr-btn-active-color:var(--tblr-linkedin-fg);--tblr-btn-active-bg:rgba(var(--tblr-linkedin-rgb), .8);--tblr-btn-disabled-bg:var(--tblr-linkedin);--tblr-btn-disabled-color:var(--tblr-linkedin-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-google{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-google-fg);--tblr-btn-bg:var(--tblr-google);--tblr-btn-hover-color:var(--tblr-google-fg);--tblr-btn-hover-bg:rgba(var(--tblr-google-rgb), .8);--tblr-btn-active-color:var(--tblr-google-fg);--tblr-btn-active-bg:rgba(var(--tblr-google-rgb), .8);--tblr-btn-disabled-bg:var(--tblr-google);--tblr-btn-disabled-color:var(--tblr-google-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-youtube{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-youtube-fg);--tblr-btn-bg:var(--tblr-youtube);--tblr-btn-hover-color:var(--tblr-youtube-fg);--tblr-btn-hover-bg:rgba(var(--tblr-youtube-rgb), .8);--tblr-btn-active-color:var(--tblr-youtube-fg);--tblr-btn-active-bg:rgba(var(--tblr-youtube-rgb), .8);--tblr-btn-disabled-bg:var(--tblr-youtube);--tblr-btn-disabled-color:var(--tblr-youtube-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-vimeo{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-vimeo-fg);--tblr-btn-bg:var(--tblr-vimeo);--tblr-btn-hover-color:var(--tblr-vimeo-fg);--tblr-btn-hover-bg:rgba(var(--tblr-vimeo-rgb), .8);--tblr-btn-active-color:var(--tblr-vimeo-fg);--tblr-btn-active-bg:rgba(var(--tblr-vimeo-rgb), .8);--tblr-btn-disabled-bg:var(--tblr-vimeo);--tblr-btn-disabled-color:var(--tblr-vimeo-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-dribbble{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-dribbble-fg);--tblr-btn-bg:var(--tblr-dribbble);--tblr-btn-hover-color:var(--tblr-dribbble-fg);--tblr-btn-hover-bg:rgba(var(--tblr-dribbble-rgb), .8);--tblr-btn-active-color:var(--tblr-dribbble-fg);--tblr-btn-active-bg:rgba(var(--tblr-dribbble-rgb), .8);--tblr-btn-disabled-bg:var(--tblr-dribbble);--tblr-btn-disabled-color:var(--tblr-dribbble-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-github{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-github-fg);--tblr-btn-bg:var(--tblr-github);--tblr-btn-hover-color:var(--tblr-github-fg);--tblr-btn-hover-bg:rgba(var(--tblr-github-rgb), .8);--tblr-btn-active-color:var(--tblr-github-fg);--tblr-btn-active-bg:rgba(var(--tblr-github-rgb), .8);--tblr-btn-disabled-bg:var(--tblr-github);--tblr-btn-disabled-color:var(--tblr-github-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-instagram{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-instagram-fg);--tblr-btn-bg:var(--tblr-instagram);--tblr-btn-hover-color:var(--tblr-instagram-fg);--tblr-btn-hover-bg:rgba(var(--tblr-instagram-rgb), .8);--tblr-btn-active-color:var(--tblr-instagram-fg);--tblr-btn-active-bg:rgba(var(--tblr-instagram-rgb), .8);--tblr-btn-disabled-bg:var(--tblr-instagram);--tblr-btn-disabled-color:var(--tblr-instagram-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-pinterest{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-pinterest-fg);--tblr-btn-bg:var(--tblr-pinterest);--tblr-btn-hover-color:var(--tblr-pinterest-fg);--tblr-btn-hover-bg:rgba(var(--tblr-pinterest-rgb), .8);--tblr-btn-active-color:var(--tblr-pinterest-fg);--tblr-btn-active-bg:rgba(var(--tblr-pinterest-rgb), .8);--tblr-btn-disabled-bg:var(--tblr-pinterest);--tblr-btn-disabled-color:var(--tblr-pinterest-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-vk{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-vk-fg);--tblr-btn-bg:var(--tblr-vk);--tblr-btn-hover-color:var(--tblr-vk-fg);--tblr-btn-hover-bg:rgba(var(--tblr-vk-rgb), .8);--tblr-btn-active-color:var(--tblr-vk-fg);--tblr-btn-active-bg:rgba(var(--tblr-vk-rgb), .8);--tblr-btn-disabled-bg:var(--tblr-vk);--tblr-btn-disabled-color:var(--tblr-vk-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-rss{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-rss-fg);--tblr-btn-bg:var(--tblr-rss);--tblr-btn-hover-color:var(--tblr-rss-fg);--tblr-btn-hover-bg:rgba(var(--tblr-rss-rgb), .8);--tblr-btn-active-color:var(--tblr-rss-fg);--tblr-btn-active-bg:rgba(var(--tblr-rss-rgb), .8);--tblr-btn-disabled-bg:var(--tblr-rss);--tblr-btn-disabled-color:var(--tblr-rss-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-flickr{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-flickr-fg);--tblr-btn-bg:var(--tblr-flickr);--tblr-btn-hover-color:var(--tblr-flickr-fg);--tblr-btn-hover-bg:rgba(var(--tblr-flickr-rgb), .8);--tblr-btn-active-color:var(--tblr-flickr-fg);--tblr-btn-active-bg:rgba(var(--tblr-flickr-rgb), .8);--tblr-btn-disabled-bg:var(--tblr-flickr);--tblr-btn-disabled-color:var(--tblr-flickr-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-bitbucket{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-bitbucket-fg);--tblr-btn-bg:var(--tblr-bitbucket);--tblr-btn-hover-color:var(--tblr-bitbucket-fg);--tblr-btn-hover-bg:rgba(var(--tblr-bitbucket-rgb), .8);--tblr-btn-active-color:var(--tblr-bitbucket-fg);--tblr-btn-active-bg:rgba(var(--tblr-bitbucket-rgb), .8);--tblr-btn-disabled-bg:var(--tblr-bitbucket);--tblr-btn-disabled-color:var(--tblr-bitbucket-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-tabler{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-tabler-fg);--tblr-btn-bg:var(--tblr-tabler);--tblr-btn-hover-color:var(--tblr-tabler-fg);--tblr-btn-hover-bg:rgba(var(--tblr-tabler-rgb), .8);--tblr-btn-active-color:var(--tblr-tabler-fg);--tblr-btn-active-bg:rgba(var(--tblr-tabler-rgb), .8);--tblr-btn-disabled-bg:var(--tblr-tabler);--tblr-btn-disabled-color:var(--tblr-tabler-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-ghost-x{--tblr-btn-color:var(--tblr-x);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-x-fg);--tblr-btn-hover-bg:var(--tblr-x);--tblr-btn-hover-border-color:var(--tblr-x);--tblr-btn-active-color:var(--tblr-x-fg);--tblr-btn-active-bg:var(--tblr-x);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, .125);--tblr-btn-disabled-color:var(--tblr-x);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-action{padding:0;border:0;color:var(--tblr-secondary);display:inline-flex;width:2rem;height:2rem;align-items:center;justify-content:center;border-radius:var(--tblr-border-radius);background:0 0}.card-stamp-icon{background:var(--tblr-secondary);color:var(--tblr-card-bg,var(--tblr-bg-surface));display:flex;align-items:center;justify-content:center;border-radius:100rem;width:calc(var(--tblr-stamp-size) * 1);height:calc(var(--tblr-stamp-size) * 1);position:relative;top:calc(var(--tblr-stamp-size) * -.25);right:calc(var(--tblr-stamp-size) * -.25);font-size:calc(var(--tblr-stamp-size) * .75);transform:rotate(10deg)}.card-btn{display:flex;align-items:center;justify-content:center;padding:1rem 1.25rem;text-align:center;transition:background .3s;border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);flex:1;color:inherit;font-weight:var(--tblr-font-weight-medium)}.card-cover{position:relative;padding:1rem 1.25rem;background:#666 no-repeat center/cover}.card-tabs .nav-tabs .nav-link.active{color:inherit;background:var(--tblr-card-bg,var(--tblr-bg-surface));border-bottom-color:transparent}.card-note{--tblr-card-bg:#fff7dd;--tblr-card-border-color:#fff1c9}.dropdown-menu{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-clip:border-box}.datagrid-title{font-size:.625rem;font-weight:var(--tblr-font-weight-bold);text-transform:uppercase;letter-spacing:.04em;line-height:1rem;color:var(--tblr-secondary);margin-bottom:.25rem}.form-label-description{float:right;font-weight:var(--tblr-font-weight-normal);color:var(--tblr-gray-500)}.form-hint{display:block;color:var(--tblr-gray-500)}.form-control+.form-hint,.form-select+.form-hint,.input-group+.form-hint{margin-top:.5rem;color:var(--tblr-gray-500)}.form-control.disabled,.form-control:disabled{color:var(--tblr-gray-500);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.form-help{display:inline-flex;font-weight:var(--tblr-font-weight-bold);align-items:center;justify-content:center;width:1.125rem;height:1.125rem;font-size:.75rem;color:var(--tblr-gray-500);text-align:center;text-decoration:none;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background:var(--tblr-gray-100);border-radius:100rem;transition:background-color .3s,color .3s}.input-group .btn,.input-group .form-control{box-shadow:none}.input-group-flat:focus-within .form-control,.input-group-flat:focus-within .input-group-text{border-color:#83b7e8!important}.form-colorinput-color:before{position:absolute;top:0;left:0;width:100%;height:100%;content:"";background:no-repeat center center/1.25rem;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' width='16' height='16'%3e%3cpath fill='none' stroke='%23ffffff' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8.5l2.5 2.5l5.5 -5.5'/%3e%3c/svg%3e");opacity:0;transition:opacity .3s}.form-colorinput-light .form-colorinput-color:before{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' width='16' height='16'%3e%3cpath fill='none' stroke='%23182433' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8.5l2.5 2.5l5.5 -5.5'/%3e%3c/svg%3e")}.form-imagecheck-input:checked~.form-imagecheck-figure:before{background-color:var(--tblr-primary);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' width='16' height='16'%3e%3cpath fill='none' stroke='%23ffffff' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8.5l2.5 2.5l5.5 -5.5'/%3e%3c/svg%3e");background-repeat:repeat;background-position:center;background-size:1.25rem;border-color:var(--tblr-border-color-translucent)}.form-imagecheck-input[type=radio]:checked~.form-imagecheck-figure:before{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3ccircle r='3' fill='%23ffffff' cx='8' cy='8' /%3e%3c/svg%3e")}.form-selectgroup-input[type=checkbox]:checked+.form-selectgroup-label .form-selectgroup-check{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' width='16' height='16'%3e%3cpath fill='none' stroke='%23ffffff' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8.5l2.5 2.5l5.5 -5.5'/%3e%3c/svg%3e")}.form-selectgroup-input[type=radio]:checked+.form-selectgroup-label .form-selectgroup-check{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3ccircle r='3' fill='%23ffffff' cx='8' cy='8' /%3e%3c/svg%3e")}.form-selectgroup-boxes .form-selectgroup-label{text-align:left;padding:1.25rem 1rem;color:inherit}.form-check-input{background-size:1.25rem;margin-top:0;box-shadow:var(--tblr-box-shadow-input)}.form-switch .form-check-input{height:1.25rem;margin-top:0}.legend{--tblr-legend-size:.75em;display:inline-block;background:var(--tblr-border-color);width:var(--tblr-legend-size);height:var(--tblr-legend-size);border-radius:var(--tblr-border-radius-sm);border:1px solid var(--tblr-border-color-translucent)}.list-group-header{background:var(--tblr-bg-surface-tertiary);padding:.5rem 1.25rem;font-size:.75rem;font-weight:var(--tblr-font-weight-medium);line-height:1;text-transform:uppercase;color:var(--tblr-gray-500);border-bottom:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color)}.list-group-item.active{background-color:rgba(var(--tblr-secondary-rgb),.08);border-left-color:#066fd1;border-left-width:2px}.list-group-item:active,.list-group-item:focus,.list-group-item:hover{background-color:rgba(var(--tblr-secondary-rgb),.08)}.list-group-item.disabled,.list-group-item:disabled{color:#6c7a91;background-color:rgba(var(--tblr-secondary-rgb),.08)}.list-group-transparent{--tblr-list-group-border-radius:0;margin:0 -1.25rem}.loader{position:relative;display:block;width:2.5rem;height:2.5rem;color:#066fd1;vertical-align:middle}.modal-content>.btn-close,.modal-header>.btn-close{position:absolute;top:0;right:0;width:3.5rem;height:3.5rem;margin:0;padding:0;z-index:10}.modal-body{scrollbar-color:rgba(var(--tblr-scrollbar-color,var(--tblr-body-color-rgb)),.16)}.stars{display:inline-flex;color:#8a97ab;font-size:.75rem}.page-link:hover .page-item-title{color:#066fd1}.ribbon-start{right:auto;left:calc(-1 * var(--tblr-ribbon-margin));border-radius:0 var(--tblr-ribbon-border-radius) var(--tblr-ribbon-border-radius) var(--tblr-ribbon-border-radius)}.status{--tblr-status-height:1.5rem;--tblr-status-color:#6c7a91;--tblr-status-color-rgb:108,122,145;display:inline-flex;align-items:center;height:var(--tblr-status-height);padding:.25rem .75rem;gap:.5rem;color:var(--tblr-status-color);background:rgba(var(--tblr-status-color-rgb),.1);font-size:.875rem;text-transform:none;letter-spacing:normal;border-radius:100rem;font-weight:var(--tblr-font-weight-medium);line-height:1;margin:0}.status-primary{--tblr-status-color:#066fd1;--tblr-status-color-rgb:6,111,209}.status-secondary{--tblr-status-color:#6c7a91;--tblr-status-color-rgb:108,122,145}.status-light{--tblr-status-color:#f6f8fb;--tblr-status-color-rgb:246,248,251}.status-muted{--tblr-status-color:#6c7a91;--tblr-status-color-rgb:108,122,145}.status-blue{--tblr-status-color:#066fd1;--tblr-status-color-rgb:6,111,209}.status-x{--tblr-status-color:#000000;--tblr-status-color-rgb:0,0,0}.status-tabler{--tblr-status-color:#066fd1;--tblr-status-color-rgb:6,111,209}.status-dot{--tblr-status-dot-color:var(--tblr-status-color, #6c7a91);--tblr-status-size:.5rem;position:relative;display:inline-block;width:var(--tblr-status-size);height:var(--tblr-status-size);background:var(--tblr-status-dot-color);border-radius:100rem}.status-indicator{--tblr-status-indicator-size:2.5rem;--tblr-status-indicator-color:var(--tblr-status-color, #6c7a91);display:block;position:relative;width:var(--tblr-status-indicator-size);height:var(--tblr-status-indicator-size)}.markdown>table thead th,.table thead th{color:var(--tblr-gray-500);background:var(--tblr-bg-surface-tertiary);font-size:.625rem;font-weight:var(--tblr-font-weight-bold);text-transform:uppercase;letter-spacing:.04em;line-height:1rem;color:var(--tblr-secondary);padding-top:.5rem;padding-bottom:.5rem;white-space:nowrap}@media (max-width:575.98px){.table-mobile-sm{display:block}.table-mobile-sm thead{display:none}.table-mobile-sm tbody,.table-mobile-sm tr{display:flex;flex-direction:column}.table-mobile-sm td{display:block;padding:.75rem!important;border:none;color:var(--tblr-body-color)!important}.table-mobile-sm td[data-label]:before{font-size:.625rem;font-weight:var(--tblr-font-weight-bold);text-transform:uppercase;letter-spacing:.04em;line-height:1rem;color:var(--tblr-secondary);content:attr(data-label);display:block}.table-mobile-sm tr{border-bottom:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)}.table-mobile-sm .btn{display:block}}@media (max-width:767.98px){.table-mobile-md{display:block}.table-mobile-md thead{display:none}.table-mobile-md tbody,.table-mobile-md tr{display:flex;flex-direction:column}.table-mobile-md td{display:block;padding:.75rem!important;border:none;color:var(--tblr-body-color)!important}.table-mobile-md td[data-label]:before{font-size:.625rem;font-weight:var(--tblr-font-weight-bold);text-transform:uppercase;letter-spacing:.04em;line-height:1rem;color:var(--tblr-secondary);content:attr(data-label);display:block}.table-mobile-md tr{border-bottom:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)}.table-mobile-md .btn{display:block}}@media (max-width:991.98px){.table-mobile-lg{display:block}.table-mobile-lg thead{display:none}.table-mobile-lg tbody,.table-mobile-lg tr{display:flex;flex-direction:column}.table-mobile-lg td{display:block;padding:.75rem!important;border:none;color:var(--tblr-body-color)!important}.table-mobile-lg td[data-label]:before{font-size:.625rem;font-weight:var(--tblr-font-weight-bold);text-transform:uppercase;letter-spacing:.04em;line-height:1rem;color:var(--tblr-secondary);content:attr(data-label);display:block}.table-mobile-lg tr{border-bottom:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)}.table-mobile-lg .btn{display:block}}@media (max-width:1199.98px){.table-mobile-xl{display:block}.table-mobile-xl thead{display:none}.table-mobile-xl tbody,.table-mobile-xl tr{display:flex;flex-direction:column}.table-mobile-xl td{display:block;padding:.75rem!important;border:none;color:var(--tblr-body-color)!important}.table-mobile-xl td[data-label]:before{font-size:.625rem;font-weight:var(--tblr-font-weight-bold);text-transform:uppercase;letter-spacing:.04em;line-height:1rem;color:var(--tblr-secondary);content:attr(data-label);display:block}.table-mobile-xl tr{border-bottom:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)}.table-mobile-xl .btn{display:block}}@media (max-width:1399.98px){.table-mobile-xxl{display:block}.table-mobile-xxl thead{display:none}.table-mobile-xxl tbody,.table-mobile-xxl tr{display:flex;flex-direction:column}.table-mobile-xxl td{display:block;padding:.75rem!important;border:none;color:var(--tblr-body-color)!important}.table-mobile-xxl td[data-label]:before{font-size:.625rem;font-weight:var(--tblr-font-weight-bold);text-transform:uppercase;letter-spacing:.04em;line-height:1rem;color:var(--tblr-secondary);content:attr(data-label);display:block}.table-mobile-xxl tr{border-bottom:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)}.table-mobile-xxl .btn{display:block}}.table-sort:after{content:"";display:inline-flex;width:1rem;height:1rem;vertical-align:bottom;-webkit-mask-image:url("data:image/svg+xml,");mask-image:url("data:image/svg+xml,");background:currentColor;margin-left:.25rem}.table-sort.asc:after{-webkit-mask-image:url("data:image/svg+xml,");mask-image:url("data:image/svg+xml,")}.table-sort.desc:after{-webkit-mask-image:url("data:image/svg+xml,");mask-image:url("data:image/svg+xml,")}.tag{--tblr-tag-height:1.5rem;border:1px solid var(--tblr-border-color);display:inline-flex;align-items:center;height:var(--tblr-tag-height);border-radius:var(--tblr-border-radius);padding:0 .5rem;background:var(--tblr-bg-surface);box-shadow:var(--tblr-box-shadow-input);gap:.5rem}.tag-badge{--tblr-badge-font-size:.625rem;--tblr-badge-padding-x:.25rem;--tblr-badge-padding-y:.125rem;margin-right:-.25rem}.tag-avatar,.tag-check,.tag-flag,.tag-icon,.tag-payment{margin-left:-.25rem}.tags-list{--tblr-list-gap:.5rem;display:flex;flex-wrap:wrap;gap:var(--tblr-list-gap)}.toast{border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent);box-shadow:#1824330a 0 2px 4px}.toast-primary{--tblr-toast-color:#066fd1}.toast-secondary{--tblr-toast-color:#6c7a91}.toast-light{--tblr-toast-color:#f6f8fb}.toast-muted{--tblr-toast-color:#6c7a91}.toast-blue{--tblr-toast-color:#066fd1}.toast-x{--tblr-toast-color:#000000}.toast-tabler{--tblr-toast-color:#066fd1}.timeline-event-icon{position:absolute;display:flex;align-items:center;justify-content:center;width:var(--tblr-timeline-icon-size,2.5rem);height:var(--tblr-timeline-icon-size,2.5rem);background:var(--tblr-gray-200);color:var(--tblr-secondary);border-radius:var(--tblr-border-radius);z-index:5}.hr-text>:first-child{padding-right:.5rem;padding-left:0;color:var(--tblr-secondary)}img,svg{max-width:100%;height:auto}[class*=" link-"].disabled,[class^=link-].disabled{color:var(--tblr-disabled-color)!important;pointer-events:none}.offcanvas-header{border-bottom:var(--tblr-border-width) var(--tblr-border-style) rgba(4,32,69,.1)}.chat-bubble-body>:last-child{margin-bottom:0}.bg-white-overlay{color:#fff;background-color:#f6f8fb3d}.border-primary{border-color:#066fd1!important}.border-secondary{border-color:#6c7a91!important}.border-light{border-color:#f6f8fb!important}.border-muted{border-color:#6c7a91!important}.border-blue{border-color:#066fd1!important}.bg-x{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-x-rgb),var(--tblr-bg-opacity))!important}.bg-x-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;color:rgba(var(--tblr-x-rgb),var(--tblr-text-opacity))!important;background-color:rgba(var(--tblr-x-lt-rgb),var(--tblr-bg-opacity))!important}.border-x{border-color:#000!important}.border-tabler{border-color:#066fd1!important}.text-x{--tblr-text-opacity:1;color:rgba(var(--tblr-x-rgb),var(--tblr-text-opacity))!important}.text-x-fg{color:var(--tblr-x-fg)!important}.text-gray-300-fg{color:#f6f8fb!important}.text-gray-400-fg{color:#f6f8fb!important}.text-gray-500-fg{color:#f6f8fb!important}.text-gray-600-fg{color:#f6f8fb!important}.text-gray-700-fg{color:#f6f8fb!important}.text-gray-800-fg{color:#f6f8fb!important}.text-gray-900-fg{color:#f6f8fb!important}.tabulator{border:1px solid #dee2e6;font-size:16px;overflow:hidden;position:relative;text-align:left;-webkit-transform:translateZ(0);-moz-transform:translateZ(0);-ms-transform:translateZ(0);-o-transform:translateZ(0);transform:translateZ(0)}.tabulator[tabulator-layout=fitDataFill] .tabulator-tableholder .tabulator-table{min-width:100%}.tabulator[tabulator-layout=fitDataTable]{display:inline-block}.tabulator.tabulator-block-select,.tabulator.tabulator-ranges .tabulator-cell:not(.tabulator-editing){-webkit-user-select:none;user-select:none}.tabulator .tabulator-header{background-color:#fff;border-bottom:1px solid #dee2e6;box-sizing:border-box;color:#555;font-weight:700;outline:none;overflow:hidden;position:relative;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none;white-space:nowrap;width:100%}.tabulator .tabulator-header.tabulator-header-hidden{display:none}.tabulator .tabulator-header .tabulator-header-contents{overflow:hidden;position:relative}.tabulator .tabulator-header .tabulator-header-contents .tabulator-headers{display:inline-block}.tabulator .tabulator-header .tabulator-col{background:#fff;border-right:1px solid #aaa;box-sizing:border-box;display:inline-flex;flex-direction:column;justify-content:flex-start;overflow:hidden;position:relative;text-align:left;vertical-align:bottom}.tabulator .tabulator-header .tabulator-col.tabulator-moving{background:#e6e6e6;border:1px solid #dee2e6;pointer-events:none;position:absolute}.tabulator .tabulator-header .tabulator-col.tabulator-range-highlight{background-color:#d6d6d6;color:#000}.tabulator .tabulator-header .tabulator-col.tabulator-range-selected{background-color:#3876ca;color:#fff}.tabulator .tabulator-header .tabulator-col .tabulator-col-content{box-sizing:border-box;padding:4px;position:relative}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button{padding:0 8px}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button:hover{cursor:pointer;opacity:.6}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title-holder{position:relative}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title{box-sizing:border-box;overflow:hidden;text-overflow:ellipsis;vertical-align:bottom;white-space:nowrap;width:100%}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title.tabulator-col-title-wrap{text-overflow:clip;white-space:normal}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor{background:#fff;border:1px solid #999;box-sizing:border-box;padding:1px;width:100%}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-header-popup-button+.tabulator-title-editor{width:calc(100% - 22px)}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter{align-items:center;bottom:0;display:flex;position:absolute;right:4px;top:0}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter .tabulator-arrow{border-bottom:6px solid #bbb;border-left:6px solid transparent;border-right:6px solid transparent;height:0;width:0}.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols{border-top:1px solid #aaa;display:flex;margin-right:-1px;overflow:hidden;position:relative}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter{box-sizing:border-box;margin-top:2px;position:relative;text-align:center;width:100%}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea{height:auto!important}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg{margin-top:3px}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter input::-ms-clear{height:0;width:0}.tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title{padding-right:25px}@media (hover:hover) and (pointer:fine){.tabulator .tabulator-header .tabulator-col.tabulator-sortable.tabulator-col-sorter-element:hover{background-color:#e6e6e6;cursor:pointer}}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=none] .tabulator-col-content .tabulator-col-sorter{color:#bbb}@media (hover:hover) and (pointer:fine){.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=none] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover{border-bottom:6px solid #555;cursor:pointer}}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=none] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow{border-bottom:6px solid #bbb;border-top:none}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=ascending] .tabulator-col-content .tabulator-col-sorter{color:#666}@media (hover:hover) and (pointer:fine){.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=ascending] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover{border-bottom:6px solid #555;cursor:pointer}}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=ascending] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow{border-bottom:6px solid #666;border-top:none}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=descending] .tabulator-col-content .tabulator-col-sorter{color:#666}@media (hover:hover) and (pointer:fine){.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=descending] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover{border-top:6px solid #555;cursor:pointer}}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=descending] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow{border-bottom:none;border-top:6px solid #666;color:#666}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical .tabulator-col-content .tabulator-col-title{align-items:center;display:flex;justify-content:center;text-orientation:mixed;writing-mode:vertical-rl}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-col-vertical-flip .tabulator-col-title{transform:rotate(180deg)}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-title{padding-right:0;padding-top:20px}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable.tabulator-col-vertical-flip .tabulator-col-title{padding-bottom:20px;padding-right:0}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-sorter{bottom:auto;justify-content:center;left:0;right:0;top:4px}.tabulator .tabulator-header .tabulator-frozen{left:0;position:sticky;z-index:11}.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left{border-right:2px solid #dee2e6}.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right{border-left:2px solid #dee2e6}.tabulator .tabulator-header .tabulator-calcs-holder{background:#fff!important;border-bottom:1px solid #aaa;border-top:1px solid #dee2e6;box-sizing:border-box;display:inline-block}.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row{background:#fff!important}.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle{display:none}.tabulator .tabulator-header .tabulator-frozen-rows-holder{display:inline-block}.tabulator .tabulator-header .tabulator-frozen-rows-holder:empty{display:none}.tabulator .tabulator-tableholder{-webkit-overflow-scrolling:touch;overflow:auto;position:relative;white-space:nowrap;width:100%}.tabulator .tabulator-tableholder:focus{outline:none}.tabulator .tabulator-tableholder .tabulator-placeholder{align-items:center;box-sizing:border-box;display:flex;justify-content:center;min-width:100%;width:100%}.tabulator .tabulator-tableholder .tabulator-placeholder[tabulator-render-mode=virtual]{min-height:100%}.tabulator .tabulator-tableholder .tabulator-placeholder .tabulator-placeholder-contents{color:#ccc;display:inline-block;font-size:20px;font-weight:700;padding:10px;text-align:center;white-space:normal}.tabulator .tabulator-tableholder .tabulator-table{background-color:#fff;color:#333;display:inline-block;overflow:visible;position:relative;white-space:nowrap}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs{background:#ececec!important;font-weight:700}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top{border-bottom:2px solid #dee2e6}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom{border-top:2px solid #dee2e6}.tabulator .tabulator-tableholder .tabulator-range-overlay{top:0;right:0;bottom:0;left:0;pointer-events:none;position:absolute;z-index:10}.tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range{border:1px solid #2975dd;box-sizing:border-box;position:absolute}.tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range.tabulator-range-active:after{background-color:#2975dd;border-radius:999px;bottom:-3px;content:"";height:6px;position:absolute;right:-3px;width:6px}.tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range-cell-active{border:2px solid #2975dd;box-sizing:border-box;position:absolute}.tabulator .tabulator-footer{background-color:#e6e6e6;border-top:1px solid #dee2e6;color:#555;font-weight:700;user-select:none;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none;white-space:nowrap}.tabulator .tabulator-footer .tabulator-footer-contents{align-items:center;display:flex;flex-direction:row;justify-content:space-between;padding:5px 10px}.tabulator .tabulator-footer .tabulator-footer-contents:empty{display:none}.tabulator .tabulator-footer .tabulator-spreadsheet-tabs{margin-top:-5px;overflow-x:auto}.tabulator .tabulator-footer .tabulator-spreadsheet-tabs .tabulator-spreadsheet-tab{border:1px solid #dee2e6;border-bottom-left-radius:5px;border-bottom-right-radius:5px;border-top:none;display:inline-block;font-size:.9em;padding:5px}.tabulator .tabulator-footer .tabulator-spreadsheet-tabs .tabulator-spreadsheet-tab:hover{cursor:pointer;opacity:.7}.tabulator .tabulator-footer .tabulator-spreadsheet-tabs .tabulator-spreadsheet-tab.tabulator-spreadsheet-tab-active{background:#fff}.tabulator .tabulator-footer .tabulator-calcs-holder{background:#f3f3f3!important;border-bottom:1px solid #dee2e6;border-top:1px solid #dee2e6;box-sizing:border-box;overflow:hidden;text-align:left;width:100%}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row{background:#f3f3f3!important;display:inline-block}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle{display:none}.tabulator .tabulator-footer .tabulator-calcs-holder:only-child{border-bottom:none;margin-bottom:-5px}.tabulator .tabulator-footer>*+.tabulator-page-counter{margin-left:10px}.tabulator .tabulator-footer .tabulator-page-counter{font-weight:400}.tabulator .tabulator-footer .tabulator-paginator{color:#555;flex:1;font-family:inherit;font-size:inherit;font-weight:inherit;text-align:right}.tabulator .tabulator-footer .tabulator-page-size{border:1px solid #dee2e6;border-radius:3px;display:inline-block;margin:0 5px;padding:2px 5px}.tabulator .tabulator-footer .tabulator-pages{margin:0 7px}.tabulator .tabulator-footer .tabulator-page{background:#fff3;border:1px solid #dee2e6;border-radius:3px;display:inline-block;margin:0 2px;padding:2px 5px}.tabulator .tabulator-footer .tabulator-page:disabled{opacity:.5}@media (hover:hover) and (pointer:fine){.tabulator .tabulator-footer .tabulator-page:not(disabled):hover{background:#0003;color:#fff;cursor:pointer}}.tabulator .tabulator-col-resize-handle{display:inline-block;margin-left:-3px;margin-right:-3px;position:relative;vertical-align:middle;width:6px;z-index:11}@media (hover:hover) and (pointer:fine){.tabulator .tabulator-col-resize-handle:hover{cursor:ew-resize}}.tabulator .tabulator-col-resize-handle:last-of-type{margin-right:0;width:3px}.tabulator .tabulator-col-resize-guide{background-color:#999;height:100%;margin-left:-.5px;opacity:.5;position:absolute;top:0;width:4px}.tabulator .tabulator-row-resize-guide{background-color:#999;height:4px;left:0;margin-top:-.5px;opacity:.5;position:absolute;width:100%}.tabulator .tabulator-alert{align-items:center;background:#0006;display:flex;height:100%;left:0;position:absolute;text-align:center;top:0;width:100%;z-index:100}.tabulator .tabulator-alert .tabulator-alert-msg{background:#fff;border-radius:10px;display:inline-block;font-size:16px;font-weight:700;margin:0 auto;padding:10px 20px}.tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-msg{border:4px solid #333;color:#000}.tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-error{border:4px solid #d00;color:#590000}.tabulator-row{background-color:#fff;box-sizing:border-box;min-height:24px;position:relative}.tabulator-row.tabulator-row-even{background-color:#f9f9f9}@media (hover:hover) and (pointer:fine){.tabulator-row.tabulator-selectable:hover{background-color:#f5f5f5;cursor:pointer}}.tabulator-row.tabulator-selected{background-color:#9abcea}@media (hover:hover) and (pointer:fine){.tabulator-row.tabulator-selected:hover{background-color:#769bcc;cursor:pointer}}.tabulator-row.tabulator-row-moving{background:#fff;border:1px solid #000}.tabulator-row.tabulator-moving{border-bottom:1px solid #dee2e6;border-top:1px solid #dee2e6;pointer-events:none;position:absolute;z-index:15}.tabulator-row.tabulator-range-highlight .tabulator-cell.tabulator-range-row-header{background-color:#d6d6d6;color:#000}.tabulator-row.tabulator-range-highlight.tabulator-range-selected .tabulator-cell.tabulator-range-row-header,.tabulator-row.tabulator-range-selected .tabulator-cell.tabulator-range-row-header{background-color:#3876ca;color:#fff}.tabulator-row .tabulator-row-resize-handle{bottom:0;height:5px;left:0;position:absolute;right:0}.tabulator-row .tabulator-row-resize-handle.prev{bottom:auto;top:0}@media (hover:hover) and (pointer:fine){.tabulator-row .tabulator-row-resize-handle:hover{cursor:ns-resize}}.tabulator-row .tabulator-responsive-collapse{border-bottom:1px solid #dee2e6;border-top:1px solid #dee2e6;box-sizing:border-box;padding:5px}.tabulator-row .tabulator-responsive-collapse:empty{display:none}.tabulator-row .tabulator-responsive-collapse table{font-size:16px}.tabulator-row .tabulator-responsive-collapse table tr td{position:relative}.tabulator-row .tabulator-responsive-collapse table tr td:first-of-type{padding-right:10px}.tabulator-row .tabulator-cell{border-right:1px solid #dee2e6;box-sizing:border-box;display:inline-block;outline:none;overflow:hidden;padding:4px;position:relative;text-overflow:ellipsis;vertical-align:middle;white-space:nowrap}.tabulator-row .tabulator-cell.tabulator-row-header{border-bottom:1px solid #dee2e6}.tabulator-row .tabulator-cell.tabulator-frozen{background-color:inherit;display:inline-block;left:0;position:sticky;z-index:11}.tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left{border-right:2px solid #dee2e6}.tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right{border-left:2px solid #dee2e6}.tabulator-row .tabulator-cell.tabulator-editing{border:1px solid #1d68cd;outline:none;padding:0}.tabulator-row .tabulator-cell.tabulator-editing input,.tabulator-row .tabulator-cell.tabulator-editing select{background:transparent;border:1px;outline:none}.tabulator-row .tabulator-cell.tabulator-validation-fail{border:1px solid #d00}.tabulator-row .tabulator-cell.tabulator-validation-fail input,.tabulator-row .tabulator-cell.tabulator-validation-fail select{background:transparent;border:1px;color:#d00}.tabulator-row .tabulator-cell.tabulator-row-handle{align-items:center;display:inline-flex;justify-content:center;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none}.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box{width:80%}.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar{background:#666;height:3px;margin-top:2px;width:100%}.tabulator-row .tabulator-cell.tabulator-range-selected:not(.tabulator-range-only-cell-selected):not(.tabulator-range-row-header){background-color:#9abcea}.tabulator-row .tabulator-cell .tabulator-data-tree-branch-empty{display:inline-block;width:7px}.tabulator-row .tabulator-cell .tabulator-data-tree-branch{border-bottom:2px solid #dee2e6;border-bottom-left-radius:1px;border-left:2px solid #dee2e6;display:inline-block;height:9px;margin-right:5px;margin-top:-9px;vertical-align:middle;width:7px}.tabulator-row .tabulator-cell .tabulator-data-tree-control{align-items:center;background:#0000001a;border:1px solid #333;border-radius:2px;display:inline-flex;height:11px;justify-content:center;margin-right:5px;overflow:hidden;vertical-align:middle;width:11px}@media (hover:hover) and (pointer:fine){.tabulator-row .tabulator-cell .tabulator-data-tree-control:hover{background:#0003;cursor:pointer}}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse{background:transparent;display:inline-block;height:7px;position:relative;width:1px}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after{background:#333;content:"";height:1px;left:-3px;position:absolute;top:3px;width:7px}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand{background:#333;display:inline-block;height:7px;position:relative;width:1px}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after{background:#333;content:"";height:1px;left:-3px;position:absolute;top:3px;width:7px}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle{align-items:center;background:#666;border-radius:20px;color:#fff;display:inline-flex;font-size:1.1em;font-weight:700;height:15px;justify-content:center;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none;width:15px}@media (hover:hover) and (pointer:fine){.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle:hover{cursor:pointer;opacity:.7}}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-close{display:initial}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-open{display:none}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle svg{stroke:#fff}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle .tabulator-responsive-collapse-toggle-close{display:none}.tabulator-row .tabulator-cell .tabulator-traffic-light{border-radius:14px;display:inline-block;height:14px;width:14px}.tabulator-row.tabulator-group{background:#ccc;border-bottom:1px solid #999;border-right:1px solid #dee2e6;border-top:1px solid #999;box-sizing:border-box;font-weight:700;min-width:100%;padding:5px 5px 5px 10px}@media (hover:hover) and (pointer:fine){.tabulator-row.tabulator-group:hover{background-color:#0000001a;cursor:pointer}}.tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow{border-bottom:0;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #666;margin-right:10px}.tabulator-row.tabulator-group.tabulator-group-level-1{padding-left:30px}.tabulator-row.tabulator-group.tabulator-group-level-2{padding-left:50px}.tabulator-row.tabulator-group.tabulator-group-level-3{padding-left:70px}.tabulator-row.tabulator-group.tabulator-group-level-4{padding-left:90px}.tabulator-row.tabulator-group.tabulator-group-level-5{padding-left:110px}.tabulator-row.tabulator-group .tabulator-group-toggle{display:inline-block}.tabulator-row.tabulator-group .tabulator-arrow{border-bottom:6px solid transparent;border-left:6px solid #666;border-right:0;border-top:6px solid transparent;display:inline-block;height:0;margin-right:16px;vertical-align:middle;width:0}.tabulator-row.tabulator-group span{color:#d00;margin-left:10px}.tabulator-toggle{background:#dcdcdc;border:1px solid #ccc;box-sizing:border-box;display:flex;flex-direction:row}.tabulator-toggle.tabulator-toggle-on{background:#1c6cc2}.tabulator-toggle .tabulator-toggle-switch{background:#fff;border:1px solid #ccc;box-sizing:border-box}.tabulator-popup-container{-webkit-overflow-scrolling:touch;background:#fff;border:1px solid #dee2e6;box-shadow:0 0 5px #0003;box-sizing:border-box;display:inline-block;font-size:16px;overflow-y:auto;position:absolute;z-index:10000}.tabulator-popup{border-radius:3px;padding:5px}.tabulator-tooltip{border-radius:2px;box-shadow:none;font-size:12px;max-width:Min(500px,100%);padding:3px 5px;pointer-events:none}.tabulator-menu .tabulator-menu-item{box-sizing:border-box;padding:5px 10px;position:relative;-webkit-user-select:none;user-select:none}.tabulator-menu .tabulator-menu-item.tabulator-menu-item-disabled{opacity:.5}@media (hover:hover) and (pointer:fine){.tabulator-menu .tabulator-menu-item:not(.tabulator-menu-item-disabled):hover{background:#f9f9f9;cursor:pointer}}.tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu{padding-right:25px}.tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu:after{border-color:#dee2e6;border-style:solid;border-width:1px 1px 0 0;content:"";display:inline-block;height:7px;position:absolute;right:10px;top:calc(5px + .4em);transform:rotate(45deg);vertical-align:top;width:7px}.tabulator-menu .tabulator-menu-separator{border-top:1px solid #dee2e6}.tabulator-edit-list{-webkit-overflow-scrolling:touch;font-size:16px;max-height:200px;overflow-y:auto}.tabulator-edit-list .tabulator-edit-list-item{color:#333;outline:none;padding:4px}.tabulator-edit-list .tabulator-edit-list-item.active{background:#1d68cd;color:#fff}.tabulator-edit-list .tabulator-edit-list-item.active.focused{outline:1px solid hsla(0,0%,100%,.5)}.tabulator-edit-list .tabulator-edit-list-item.focused{outline:1px solid #1d68cd}@media (hover:hover) and (pointer:fine){.tabulator-edit-list .tabulator-edit-list-item:hover{background:#1d68cd;color:#fff;cursor:pointer}}.tabulator-edit-list .tabulator-edit-list-placeholder{color:#333;padding:4px;text-align:center}.tabulator-edit-list .tabulator-edit-list-group{border-bottom:1px solid #dee2e6;color:#333;font-weight:700;padding:6px 4px 4px}.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-2,.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-2{padding-left:12px}.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-3,.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-3{padding-left:20px}.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-4,.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-4{padding-left:28px}.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-5,.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-5{padding-left:36px}.tabulator.tabulator-ltr{direction:ltr}.tabulator.tabulator-rtl{direction:rtl;text-align:initial}.tabulator.tabulator-rtl .tabulator-header .tabulator-col{border-left:1px solid #aaa;border-right:initial}.tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols{margin-left:-1px;margin-right:0}.tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title{padding-left:25px;padding-right:0}.tabulator.tabulator-rtl .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter{left:8px;right:auto}.tabulator.tabulator-rtl .tabulator-tableholder .tabulator-range-overlay .tabulator-range.tabulator-range-active:after{background-color:#2975dd;border-radius:999px;bottom:-3px;content:"";height:6px;left:-3px;position:absolute;right:auto;width:6px}.tabulator.tabulator-rtl .tabulator-row .tabulator-cell{border-left:1px solid #dee2e6;border-right:initial}.tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-branch{border-bottom-left-radius:0;border-bottom-right-radius:1px;border-left:initial;border-right:2px solid #dee2e6;margin-left:5px;margin-right:0}.tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-control{margin-left:5px;margin-right:0}.tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left{border-left:2px solid #dee2e6}.tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right{border-right:2px solid #dee2e6}.tabulator.tabulator-rtl .tabulator-row .tabulator-col-resize-handle:last-of-type{margin-left:0;margin-right:-3px;width:3px}.tabulator.tabulator-rtl .tabulator-footer .tabulator-calcs-holder{text-align:initial}.tabulator-print-fullscreen{bottom:0;left:0;position:absolute;right:0;top:0;z-index:10000}body.tabulator-print-fullscreen-hide>:not(.tabulator-print-fullscreen){display:none!important}.tabulator-print-table{border-collapse:collapse}.tabulator-print-table .tabulator-data-tree-branch{border-bottom:2px solid #dee2e6;border-bottom-left-radius:1px;border-left:2px solid #dee2e6;display:inline-block;height:9px;margin-right:5px;margin-top:-9px;vertical-align:middle;width:7px}.tabulator-print-table .tabulator-print-table-group{background:#ccc;border-bottom:1px solid #999;border-right:1px solid #dee2e6;border-top:1px solid #999;box-sizing:border-box;font-weight:700;min-width:100%;padding:5px 5px 5px 10px}@media (hover:hover) and (pointer:fine){.tabulator-print-table .tabulator-print-table-group:hover{background-color:#0000001a;cursor:pointer}}.tabulator-print-table .tabulator-print-table-group.tabulator-group-visible .tabulator-arrow{border-bottom:0;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #666;margin-right:10px}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-1 td{padding-left:30px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-2 td{padding-left:50px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-3 td{padding-left:70px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-4 td{padding-left:90px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-5 td{padding-left:110px!important}.tabulator-print-table .tabulator-print-table-group .tabulator-group-toggle{display:inline-block}.tabulator-print-table .tabulator-print-table-group .tabulator-arrow{border-bottom:6px solid transparent;border-left:6px solid #666;border-right:0;border-top:6px solid transparent;display:inline-block;height:0;margin-right:16px;vertical-align:middle;width:0}.tabulator-print-table .tabulator-print-table-group span{color:#d00;margin-left:10px}.tabulator-print-table .tabulator-data-tree-control{align-items:center;background:#0000001a;border:1px solid #333;border-radius:2px;display:inline-flex;height:11px;justify-content:center;margin-right:5px;overflow:hidden;vertical-align:middle;width:11px}@media (hover:hover) and (pointer:fine){.tabulator-print-table .tabulator-data-tree-control:hover{background:#0003;cursor:pointer}}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse{background:transparent;display:inline-block;height:7px;position:relative;width:1px}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after{background:#333;content:"";height:1px;left:-3px;position:absolute;top:3px;width:7px}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand{background:#333;display:inline-block;height:7px;position:relative;width:1px}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand:after{background:#333;content:"";height:1px;left:-3px;position:absolute;top:3px;width:7px}.tabulator{background-color:#fff;border:none}.tabulator .tabulator-header{border-bottom:2px solid #dee2e6;border-top:1px solid #dee2e6;color:inherit}.tabulator .tabulator-header .tabulator-col{background-color:#fff;border-right:none}.tabulator .tabulator-header .tabulator-col .tabulator-col-content{padding:12px}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter{right:0}.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols{border-top:1px solid #dee2e6}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter input{background-clip:padding-box;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem;color:#495057;font-size:1rem;line-height:1.5;padding:.375rem .75rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter input:focus{background-color:#fff;border:1px solid #1d68cd;color:#495057;outline:0}.tabulator .tabulator-header .tabulator-calcs-holder{border-bottom:1px solid #dee2e6;width:100%}.tabulator .tabulator-tableholder .tabulator-placeholder span{color:#000}.tabulator .tabulator-footer,.tabulator .tabulator-tableholder .tabulator-table{color:inherit}.tabulator .tabulator-footer .tabulator-spreadsheet-tabs .tabulator-spreadsheet-tab{background-color:#fff;font-weight:400}.tabulator .tabulator-footer .tabulator-spreadsheet-tabs .tabulator-spreadsheet-tab.tabulator-spreadsheet-tab-active{background-color:#007bff;color:#fff}.tabulator .tabulator-footer .tabulator-paginator{color:inherit}.tabulator .tabulator-footer .tabulator-pages{margin:0}.tabulator .tabulator-footer .tabulator-page{margin:5px 0 0;padding:8px 12px}.tabulator .tabulator-footer .tabulator-page[data-page=first]{border-bottom-left-radius:4px;border-top-left-radius:4px}.tabulator .tabulator-footer .tabulator-page[data-page=last]{border:1px solid #dee2e6;border-bottom-right-radius:4px;border-top-right-radius:4px}.tabulator .tabulator-footer .tabulator-page.active{background-color:#007bff;border-color:#007bff;color:#fff}.tabulator .tabulator-footer .tabulator-page:disabled{background:#fff;border-color:#dee2e6;color:#6c757d}@media (hover:hover) and (pointer:fine){.tabulator .tabulator-footer .tabulator-page:not(.disabled):hover{background:#e9ecef;border-color:#dee2e6;color:#0056b3}}.tabulator.thead-dark .tabulator-header,.tabulator.thead-dark .tabulator-header .tabulator-col{background-color:#212529;border-color:#32383e;color:#fff}.tabulator.table-dark{background-color:#212529}.tabulator.table-dark:not(.thead-light) .tabulator-header,.tabulator.table-dark:not(.thead-light) .tabulator-header .tabulator-col{background-color:#212529;border-color:#32383e;color:#fff}.tabulator.table-dark .tabulator-tableholder{color:#fff}.tabulator.table-dark .tabulator-row{background-color:#212529;border-color:#32383e;color:#fff}@media (hover:hover) and (pointer:fine){.tabulator.table-dark .tabulator-row:hover{background-color:#32383e}.tabulator.table-dark .tabulator-row:hover .tabulator-cell{background-color:#ffffff13}}.tabulator.table-dark .tabulator-row.tabulator-selected{background-color:#9abcea}.tabulator.table-dark .tabulator-footer{border-color:#32383e!important}.tabulator.table-dark .tabulator-footer .tabulator-calcs-holder{background:#212529!important;border-color:#32383e!important}.tabulator.table-dark .tabulator-footer .tabulator-calcs-holder .tabulator-row{background-color:#212529!important;border-color:#32383e!important;color:#fff!important}.tabulator.table-striped:not(.table-dark) .tabulator-row.tabulator-row-even{background-color:#f9f9f9}.tabulator.table-striped:not(.table-dark) .tabulator-row.tabulator-row-even.tabulator-selected{background-color:#9abcea}@media (hover:hover) and (pointer:fine){.tabulator.table-striped:not(.table-dark) .tabulator-row.tabulator-row-even.tabulator-selectable:hover{background-color:#f5f5f5;cursor:pointer}.tabulator.table-striped:not(.table-dark) .tabulator-row.tabulator-row-even.tabulator-selected:hover{background-color:#769bcc;cursor:pointer}}.tabulator.table-striped.table-dark .tabulator-row:nth-child(2n) .tabulator-cell{background-color:#ffffff0d}.tabulator.table-bordered{border:1px solid #dee2e6}.tabulator.table-bordered .tabulator-header .tabulator-col,.tabulator.table-bordered .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell{border-right:1px solid #dee2e6}.tabulator.table-borderless .tabulator-header,.tabulator.table-borderless .tabulator-row{border:none}.tabulator.table-sm .tabulator-header .tabulator-col .tabulator-col-content{padding:5px!important}.tabulator.table-sm .tabulator-tableholder .tabulator-table .tabulator-row{min-height:26px}.tabulator.table-sm .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell{padding:5px!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.table-primary{background:#b8daff!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.table-secondary{background:#d6d8db!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.table-success{background:#c3e6cb!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.table-info{background:#bee5eb!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.table-warning{background:#ffeeba!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.table-danger{background:#f5c6cb!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.table-light{background:#fdfdfe!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.table-dark{background:#c6c8ca!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.table-active{background:#f5f5f5!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.bg-primary{background:#007bff!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.bg-secondary{background:#6c757d!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.bg-success{background:#28a745!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.bg-info{background:#17a2b8!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.bg-warning{background:#ffc107!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.bg-danger{background:#dc3545!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.bg-light{background:#f8f9fa!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.bg-dark{background:#343a40!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.bg-active{background:#f5f5f5!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.table-primary{background:#b8daff!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.table-secondary{background:#d6d8db!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.table-success{background:#c3e6cb!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.table-info{background:#bee5eb!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.table-warning{background:#ffeeba!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.table-danger{background:#f5c6cb!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.table-light{background:#fdfdfe!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.table-dark{background:#c6c8ca!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.table-active{background:#f5f5f5!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.bg-primary{background:#007bff!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.bg-secondary{background:#6c757d!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.bg-success{background:#28a745!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.bg-info{background:#17a2b8!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.bg-warning{background:#ffc107!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.bg-danger{background:#dc3545!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.bg-light{background:#f8f9fa!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.bg-dark{background:#343a40!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.bg-active{background:#f5f5f5!important}.tabulator-row{border-bottom:1px solid #dee2e6;min-height:40px}.tabulator-row .tabulator-cell{border-right:none;padding:12px}.tabulator-row .tabulator-cell:last-of-type{border-right:none}.tabulator-row .tabulator-cell.tabulator-row-header{background:#fff;border-bottom:none;border-right:1px solid #dee2e6}.tabulator-row .tabulator-cell .tabulator-data-tree-control{border:1px solid #ccc}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after,.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand,.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after{background:#ccc}.tabulator-row.tabulator-group{background:#fafafa}.tabulator-row.tabulator-group span{color:#666}.tabulator-edit-select-list{background:#fff}.tabulator-edit-select-list .tabulator-edit-select-list-item.active{color:#fff}.tabulator-edit-select-list .tabulator-edit-select-list-item.active.focused{outline:1px solid hsla(0,0%,100%,.5)}@media (hover:hover) and (pointer:fine){.tabulator-edit-select-list .tabulator-edit-select-list-item:hover{color:#fff}}.tabulator-edit-select-list .tabulator-edit-select-list-group,.tabulator-edit-select-list .tabulator-edit-select-list-notice{color:inherit}.tabulator.tabulator-rtl .tabulator-header .tabulator-col{border-left:initial;text-align:initial}.tabulator-print-table .tabulator-print-table-group{background:#fafafa}.tabulator-print-table .tabulator-print-table-group span{color:#666}.tabulator-print-table .tabulator-data-tree-control{color:inherit}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after,.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand,.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand:after{background:#ccc}Global design overrides html,body{background-color:#f8fafc;padding:20px}.btn{border-radius:6px;font-weight:500;line-height:1.2;padding:.45rem .8rem}.btn,.btn.btn-sm,.table .btn,.tabulator .btn{min-height:36px}.page-header-action-btn{align-items:center;display:inline-flex;justify-content:center;white-space:nowrap;width:10rem}@media (max-width: 575.98px){.page-header-action-btn{width:auto}}.btn-primary{background-color:#007bff;border-color:#007bff}.btn-primary:hover,.btn-primary:focus{background-color:#0069d9;border-color:#0062cc}.btn-success{background-color:#28a745;border-color:#28a745}.btn-success:hover,.btn-success:focus{background-color:#218838;border-color:#1e7e34}.btn-danger{background-color:#dc3545;border-color:#dc3545}.btn-danger:hover,.btn-danger:focus{background-color:#c82333;border-color:#bd2130}.btn-secondary{background-color:#6c757d;border-color:#6c757d;color:#fff}.btn-secondary:hover,.btn-secondary:focus{background-color:#5a6268;border-color:#545b62;color:#fff}.btn-info{background-color:#17a2b8;border-color:#17a2b8;color:#fff}.btn-info:hover,.btn-info:focus{background-color:#138496;border-color:#117a8b;color:#fff}.table .btn,.tabulator .btn{padding:.35rem .65rem;font-weight:500}.pagination{--bs-pagination-padding-x: .6rem;--bs-pagination-padding-y: .35rem;--bs-pagination-border-radius: 6px}.page-link{color:#64748b}.page-link:hover{color:#334155;background-color:#f1f5f9}.page-item.active .page-link{background-color:#4f8cff;border-color:#4f8cff}.tabulator .tabulator-footer{background-color:#fff;border-top:1px solid #e5e7eb}.tabulator .tabulator-footer .tabulator-paginator label,.tabulator .tabulator-footer .tabulator-page-size{color:#64748b}.tabulator .tabulator-footer .tabulator-pages .tabulator-page,.tabulator .tabulator-footer .tabulator-pages .tabulator-page.active{border-radius:6px;padding:.35rem .6rem}.tabulator .tabulator-footer .tabulator-pages .tabulator-page.active{background:#4f8cff;color:#fff}.table-hover>tbody>tr:hover{--bs-table-accent-bg: #f8fafc}.card.card-flush{background-color:#fff;border:1px solid #e5e7eb;border-radius:10px}.tabulator{border:1px solid #e5e7eb;border-radius:10px;overflow:hidden;background:#fff;box-shadow:0 1px 3px #0f172a0f}.tabulator .tabulator-header{background:#fff;border-bottom:1px solid #e5e7eb}.tabulator .tabulator-header .tabulator-col{background:#fff;color:#475569;font-weight:600;border-right:1px solid #eef2f7;padding:10px 12px}.tabulator .tabulator-header .tabulator-col:last-child{border-right:none}.tabulator .tabulator-tableholder{background:#fff}.tabulator .tabulator-row{background:#fff;min-height:44px}.tabulator .tabulator-row .tabulator-cell{border-right:none;border-bottom:1px solid #eef2f7;color:#334155;padding:10px 12px}.tabulator .tabulator-row:hover{background:#f8fafc}.tabulator .tabulator-row.tabulator-selected{background:#dbeafe!important}.tabulator .tabulator-row.tabulator-selected .tabulator-cell{background:transparent!important}.tabulator .tabulator-table .tabulator-row:last-child .tabulator-cell{border-bottom:none}.tabulator .tabulator-footer{padding:8px 12px;margin-right:10px!important}.tabulator .tabulator-row .tabulator-cell input[type=checkbox]{width:16px;height:16px}.tabulator-page{margin-right:10px!important}/*! +* Tabler v1.0.0-beta20 (https://tabler.io) +* @version 1.0.0-beta20 +* @link https://tabler.io +* Copyright 2018-2023 The Tabler Authors +* Copyright 2018-2023 codecalm.net Paweł Kuna +* Licensed under MIT (https://github.com/tabler/tabler/blob/master/LICENSE) +*/:root,[data-bs-theme=light]{--tblr-black: #000000;--tblr-white: #ffffff;--tblr-gray: #667382;--tblr-gray-dark: #182433;--tblr-gray-100: #f6f8fb;--tblr-gray-200: #eef1f4;--tblr-gray-300: #dadfe5;--tblr-gray-400: #bbc3cd;--tblr-gray-500: #929dab;--tblr-gray-600: #667382;--tblr-gray-700: #3a4859;--tblr-gray-800: #182433;--tblr-gray-900: #040a11;--tblr-primary: #0054a6;--tblr-secondary: #667382;--tblr-success: #2fb344;--tblr-info: #4299e1;--tblr-warning: #f76707;--tblr-danger: #d63939;--tblr-light: #fcfdfe;--tblr-dark: #182433;--tblr-muted: #667382;--tblr-blue: #0054a6;--tblr-azure: #4299e1;--tblr-indigo: #4263eb;--tblr-purple: #ae3ec9;--tblr-pink: #d6336c;--tblr-red: #d63939;--tblr-orange: #f76707;--tblr-yellow: #f59f00;--tblr-lime: #74b816;--tblr-green: #2fb344;--tblr-teal: #0ca678;--tblr-cyan: #17a2b8;--tblr-facebook: #1877f2;--tblr-twitter: #1da1f2;--tblr-linkedin: #0a66c2;--tblr-google: #dc4e41;--tblr-youtube: #ff0000;--tblr-vimeo: #1ab7ea;--tblr-dribbble: #ea4c89;--tblr-github: #181717;--tblr-instagram: #e4405f;--tblr-pinterest: #bd081c;--tblr-vk: #6383a8;--tblr-rss: #ffa500;--tblr-flickr: #0063dc;--tblr-bitbucket: #0052cc;--tblr-tabler: #0054a6;--tblr-primary-rgb: 0, 84, 166;--tblr-secondary-rgb: 102, 115, 130;--tblr-success-rgb: 47, 179, 68;--tblr-info-rgb: 66, 153, 225;--tblr-warning-rgb: 247, 103, 7;--tblr-danger-rgb: 214, 57, 57;--tblr-light-rgb: 252, 253, 254;--tblr-dark-rgb: 24, 36, 51;--tblr-muted-rgb: 102, 115, 130;--tblr-blue-rgb: 0, 84, 166;--tblr-azure-rgb: 66, 153, 225;--tblr-indigo-rgb: 66, 99, 235;--tblr-purple-rgb: 174, 62, 201;--tblr-pink-rgb: 214, 51, 108;--tblr-red-rgb: 214, 57, 57;--tblr-orange-rgb: 247, 103, 7;--tblr-yellow-rgb: 245, 159, 0;--tblr-lime-rgb: 116, 184, 22;--tblr-green-rgb: 47, 179, 68;--tblr-teal-rgb: 12, 166, 120;--tblr-cyan-rgb: 23, 162, 184;--tblr-facebook-rgb: 24, 119, 242;--tblr-twitter-rgb: 29, 161, 242;--tblr-linkedin-rgb: 10, 102, 194;--tblr-google-rgb: 220, 78, 65;--tblr-youtube-rgb: 255, 0, 0;--tblr-vimeo-rgb: 26, 183, 234;--tblr-dribbble-rgb: 234, 76, 137;--tblr-github-rgb: 24, 23, 23;--tblr-instagram-rgb: 228, 64, 95;--tblr-pinterest-rgb: 189, 8, 28;--tblr-vk-rgb: 99, 131, 168;--tblr-rss-rgb: 255, 165, 0;--tblr-flickr-rgb: 0, 99, 220;--tblr-bitbucket-rgb: 0, 82, 204;--tblr-tabler-rgb: 0, 84, 166;--tblr-primary-text-emphasis: #002242;--tblr-secondary-text-emphasis: #292e34;--tblr-success-text-emphasis: #13481b;--tblr-info-text-emphasis: #1a3d5a;--tblr-warning-text-emphasis: #632903;--tblr-danger-text-emphasis: #561717;--tblr-light-text-emphasis: #3a4859;--tblr-dark-text-emphasis: #3a4859;--tblr-primary-bg-subtle: #ccdded;--tblr-secondary-bg-subtle: #e0e3e6;--tblr-success-bg-subtle: #d5f0da;--tblr-info-bg-subtle: #d9ebf9;--tblr-warning-bg-subtle: #fde1cd;--tblr-danger-bg-subtle: #f7d7d7;--tblr-light-bg-subtle: #fbfcfd;--tblr-dark-bg-subtle: #bbc3cd;--tblr-primary-border-subtle: #99bbdb;--tblr-secondary-border-subtle: #c2c7cd;--tblr-success-border-subtle: #ace1b4;--tblr-info-border-subtle: #b3d6f3;--tblr-warning-border-subtle: #fcc29c;--tblr-danger-border-subtle: #efb0b0;--tblr-light-border-subtle: #eef1f4;--tblr-dark-border-subtle: #929dab;--tblr-white-rgb: 255, 255, 255;--tblr-black-rgb: 0, 0, 0;--tblr-font-sans-serif: -apple-system, BlinkMacSystemFont, San Francisco, Segoe UI, Roboto, Helvetica Neue, sans-serif;--tblr-font-monospace: Menlo, Monaco, Consolas, Liberation Mono, Courier New, monospace;--tblr-gradient: linear-gradient(180deg, rgba(255, 255, 255, .15), rgba(255, 255, 255, 0));--tblr-body-font-family: var(--tblr-font-sans-serif);--tblr-body-font-size: .875rem;--tblr-body-font-weight: 400;--tblr-body-line-height: 1.4285714286;--tblr-body-color: #182433;--tblr-body-color-rgb: 24, 36, 51;--tblr-body-bg: #f6f8fb;--tblr-body-bg-rgb: 246, 248, 251;--tblr-emphasis-color: #182433;--tblr-emphasis-color-rgb: 24, 36, 51;--tblr-secondary-color: rgba(24, 36, 51, .75);--tblr-secondary-color-rgb: 24, 36, 51;--tblr-secondary-bg: #eef1f4;--tblr-secondary-bg-rgb: 238, 241, 244;--tblr-tertiary-color: rgba(24, 36, 51, .5);--tblr-tertiary-color-rgb: 24, 36, 51;--tblr-tertiary-bg: #f6f8fb;--tblr-tertiary-bg-rgb: 246, 248, 251;--tblr-heading-color: inherit;--tblr-link-color: #0054a6;--tblr-link-color-rgb: 0, 84, 166;--tblr-link-decoration: none;--tblr-link-hover-color: #004385;--tblr-link-hover-color-rgb: 0, 67, 133;--tblr-link-hover-decoration: underline;--tblr-code-color: var(--tblr-gray-600);--tblr-highlight-bg: #fdeccc;--tblr-border-width: 1px;--tblr-border-style: solid;--tblr-border-color: #dadfe5;--tblr-border-color-translucent: rgba(4, 32, 69, .14);--tblr-border-radius: 4px;--tblr-border-radius-sm: 2px;--tblr-border-radius-lg: 8px;--tblr-border-radius-xl: 1rem;--tblr-border-radius-xxl: 2rem;--tblr-border-radius-2xl: var(--tblr-border-radius-xxl);--tblr-border-radius-pill: 100rem;--tblr-box-shadow: rgba(var(--tblr-body-color-rgb), .04) 0 2px 4px 0;--tblr-box-shadow-sm: 0 .125rem .25rem rgba(0, 0, 0, .075);--tblr-box-shadow-lg: 0 1rem 3rem rgba(0, 0, 0, .175);--tblr-box-shadow-inset: 0 0 transparent;--tblr-focus-ring-width: .25rem;--tblr-focus-ring-opacity: .25;--tblr-focus-ring-color: rgba(var(--tblr-primary-rgb), .25);--tblr-form-valid-color: #2fb344;--tblr-form-valid-border-color: #2fb344;--tblr-form-invalid-color: #d63939;--tblr-form-invalid-border-color: #d63939}[data-bs-theme=dark],body[data-bs-theme=dark] [data-bs-theme=light]{color-scheme:dark;--tblr-body-color: #fcfdfe;--tblr-body-color-rgb: 252, 253, 254;--tblr-body-bg: #040a11;--tblr-body-bg-rgb: 4, 10, 17;--tblr-emphasis-color: #ffffff;--tblr-emphasis-color-rgb: 255, 255, 255;--tblr-secondary-color: rgba(252, 253, 254, .75);--tblr-secondary-color-rgb: 252, 253, 254;--tblr-secondary-bg: #182433;--tblr-secondary-bg-rgb: 24, 36, 51;--tblr-tertiary-color: rgba(252, 253, 254, .5);--tblr-tertiary-color-rgb: 252, 253, 254;--tblr-tertiary-bg: #0e1722;--tblr-tertiary-bg-rgb: 14, 23, 34;--tblr-primary-text-emphasis: #6698ca;--tblr-secondary-text-emphasis: #a3abb4;--tblr-success-text-emphasis: #82d18f;--tblr-info-text-emphasis: #8ec2ed;--tblr-warning-text-emphasis: #faa46a;--tblr-danger-text-emphasis: #e68888;--tblr-light-text-emphasis: #f6f8fb;--tblr-dark-text-emphasis: #dadfe5;--tblr-primary-bg-subtle: #001121;--tblr-secondary-bg-subtle: #14171a;--tblr-success-bg-subtle: #09240e;--tblr-info-bg-subtle: #0d1f2d;--tblr-warning-bg-subtle: #311501;--tblr-danger-bg-subtle: #2b0b0b;--tblr-light-bg-subtle: #182433;--tblr-dark-bg-subtle: #0c121a;--tblr-primary-border-subtle: #003264;--tblr-secondary-border-subtle: #3d454e;--tblr-success-border-subtle: #1c6b29;--tblr-info-border-subtle: #285c87;--tblr-warning-border-subtle: #943e04;--tblr-danger-border-subtle: #802222;--tblr-light-border-subtle: #3a4859;--tblr-dark-border-subtle: #182433;--tblr-heading-color: inherit;--tblr-link-color: #6698ca;--tblr-link-hover-color: #85add5;--tblr-link-color-rgb: 102, 152, 202;--tblr-link-hover-color-rgb: 133, 173, 213;--tblr-code-color: var(--tblr-gray-300);--tblr-border-color: #1f2e41;--tblr-border-color-translucent: rgba(72, 110, 149, .14);--tblr-form-valid-color: #82d18f;--tblr-form-valid-border-color: #82d18f;--tblr-form-invalid-color: #e68888;--tblr-form-invalid-border-color: #e68888}*,*:before,*:after{box-sizing:border-box}@media (prefers-reduced-motion: no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:var(--tblr-body-font-family);font-size:var(--tblr-body-font-size);font-weight:var(--tblr-body-font-weight);line-height:var(--tblr-body-line-height);color:var(--tblr-body-color);text-align:var(--tblr-body-text-align);background-color:var(--tblr-body-bg);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}hr,.hr{margin:2rem 0;color:inherit;border:0;border-top:var(--tblr-border-width) solid;opacity:.16}h6,.h6,h5,.h5,h4,.h4,h3,.h3,h2,.h2,h1,.h1{margin-top:0;margin-bottom:var(--tblr-spacer);font-weight:var(--tblr-font-weight-bold);line-height:1.2;color:var(--tblr-heading-color)}h1,.h1{font-size:1.5rem}h2,.h2{font-size:1.25rem}h3,.h3{font-size:1rem}h4,.h4{font-size:.875rem}h5,.h5{font-size:.75rem}h6,.h6{font-size:.625rem}ol,ul,dl{margin-top:0;margin-bottom:1rem}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}small,.small{font-size:85.714285%}mark,.mark{padding:.1875em;background-color:var(--tblr-highlight-bg)}a{color:rgba(var(--tblr-link-color-rgb),var(--tblr-link-opacity, 1));text-decoration:none}a:hover{--tblr-link-color-rgb: var(--tblr-link-hover-color-rgb);text-decoration:underline}pre,code,kbd,samp{font-family:var(--tblr-font-monospace);font-size:1em}kbd{padding:.25rem .5rem;font-size:var(--tblr-font-size-h5);color:var(--tblr-text-secondary-dark);background-color:var(--tblr-code-bg);border-radius:2px}thead,tbody,tfoot,tr,td,th{border-color:inherit;border-style:solid;border-width:0}input,button,select,optgroup,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}button:not(:disabled),[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled){cursor:pointer}::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-text,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-year-field{padding:0}.container,.container-fluid,.container-xxl,.container-xl,.container-lg,.container-md,.container-sm{--tblr-gutter-x: calc(var(--tblr-page-padding) * 2);--tblr-gutter-y: 0;width:100%;padding-right:calc(var(--tblr-gutter-x) * .5);padding-left:calc(var(--tblr-gutter-x) * .5);margin-right:auto;margin-left:auto}@media (min-width: 576px){.container-sm,.container{max-width:540px}}@media (min-width: 768px){.container-md,.container-sm,.container{max-width:720px}}@media (min-width: 992px){.container-lg,.container-md,.container-sm,.container{max-width:960px}}@media (min-width: 1200px){.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1140px}}@media (min-width: 1400px){.container-xxl,.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1320px}}:root{--tblr-breakpoint-xs: 0;--tblr-breakpoint-sm: 576px;--tblr-breakpoint-md: 768px;--tblr-breakpoint-lg: 992px;--tblr-breakpoint-xl: 1200px;--tblr-breakpoint-xxl: 1400px}.row{--tblr-gutter-x: var(--tblr-page-padding);--tblr-gutter-y: 0;display:flex;flex-wrap:wrap;margin-top:calc(-1 * var(--tblr-gutter-y));margin-right:calc(-.5 * var(--tblr-gutter-x));margin-left:calc(-.5 * var(--tblr-gutter-x))}.grid{display:grid;grid-template-rows:repeat(var(--tblr-rows, 1),1fr);grid-template-columns:repeat(var(--tblr-columns, 12),1fr);gap:var(--tblr-gap, var(--tblr-page-padding))}@media (min-width: 576px){.grid .g-col-sm-1{grid-column:auto/span 1}.grid .g-col-sm-2{grid-column:auto/span 2}.grid .g-col-sm-3{grid-column:auto/span 3}.grid .g-col-sm-4{grid-column:auto/span 4}.grid .g-col-sm-5{grid-column:auto/span 5}.grid .g-col-sm-6{grid-column:auto/span 6}.grid .g-col-sm-7{grid-column:auto/span 7}.grid .g-col-sm-8{grid-column:auto/span 8}.grid .g-col-sm-9{grid-column:auto/span 9}.grid .g-col-sm-10{grid-column:auto/span 10}.grid .g-col-sm-11{grid-column:auto/span 11}.grid .g-col-sm-12{grid-column:auto/span 12}.grid .g-start-sm-1{grid-column-start:1}.grid .g-start-sm-2{grid-column-start:2}.grid .g-start-sm-3{grid-column-start:3}.grid .g-start-sm-4{grid-column-start:4}.grid .g-start-sm-5{grid-column-start:5}.grid .g-start-sm-6{grid-column-start:6}.grid .g-start-sm-7{grid-column-start:7}.grid .g-start-sm-8{grid-column-start:8}.grid .g-start-sm-9{grid-column-start:9}.grid .g-start-sm-10{grid-column-start:10}.grid .g-start-sm-11{grid-column-start:11}}@media (min-width: 768px){.grid .g-col-md-1{grid-column:auto/span 1}.grid .g-col-md-2{grid-column:auto/span 2}.grid .g-col-md-3{grid-column:auto/span 3}.grid .g-col-md-4{grid-column:auto/span 4}.grid .g-col-md-5{grid-column:auto/span 5}.grid .g-col-md-6{grid-column:auto/span 6}.grid .g-col-md-7{grid-column:auto/span 7}.grid .g-col-md-8{grid-column:auto/span 8}.grid .g-col-md-9{grid-column:auto/span 9}.grid .g-col-md-10{grid-column:auto/span 10}.grid .g-col-md-11{grid-column:auto/span 11}.grid .g-col-md-12{grid-column:auto/span 12}.grid .g-start-md-1{grid-column-start:1}.grid .g-start-md-2{grid-column-start:2}.grid .g-start-md-3{grid-column-start:3}.grid .g-start-md-4{grid-column-start:4}.grid .g-start-md-5{grid-column-start:5}.grid .g-start-md-6{grid-column-start:6}.grid .g-start-md-7{grid-column-start:7}.grid .g-start-md-8{grid-column-start:8}.grid .g-start-md-9{grid-column-start:9}.grid .g-start-md-10{grid-column-start:10}.grid .g-start-md-11{grid-column-start:11}}@media (min-width: 992px){.grid .g-col-lg-1{grid-column:auto/span 1}.grid .g-col-lg-2{grid-column:auto/span 2}.grid .g-col-lg-3{grid-column:auto/span 3}.grid .g-col-lg-4{grid-column:auto/span 4}.grid .g-col-lg-5{grid-column:auto/span 5}.grid .g-col-lg-6{grid-column:auto/span 6}.grid .g-col-lg-7{grid-column:auto/span 7}.grid .g-col-lg-8{grid-column:auto/span 8}.grid .g-col-lg-9{grid-column:auto/span 9}.grid .g-col-lg-10{grid-column:auto/span 10}.grid .g-col-lg-11{grid-column:auto/span 11}.grid .g-col-lg-12{grid-column:auto/span 12}.grid .g-start-lg-1{grid-column-start:1}.grid .g-start-lg-2{grid-column-start:2}.grid .g-start-lg-3{grid-column-start:3}.grid .g-start-lg-4{grid-column-start:4}.grid .g-start-lg-5{grid-column-start:5}.grid .g-start-lg-6{grid-column-start:6}.grid .g-start-lg-7{grid-column-start:7}.grid .g-start-lg-8{grid-column-start:8}.grid .g-start-lg-9{grid-column-start:9}.grid .g-start-lg-10{grid-column-start:10}.grid .g-start-lg-11{grid-column-start:11}}@media (min-width: 1200px){.grid .g-col-xl-1{grid-column:auto/span 1}.grid .g-col-xl-2{grid-column:auto/span 2}.grid .g-col-xl-3{grid-column:auto/span 3}.grid .g-col-xl-4{grid-column:auto/span 4}.grid .g-col-xl-5{grid-column:auto/span 5}.grid .g-col-xl-6{grid-column:auto/span 6}.grid .g-col-xl-7{grid-column:auto/span 7}.grid .g-col-xl-8{grid-column:auto/span 8}.grid .g-col-xl-9{grid-column:auto/span 9}.grid .g-col-xl-10{grid-column:auto/span 10}.grid .g-col-xl-11{grid-column:auto/span 11}.grid .g-col-xl-12{grid-column:auto/span 12}.grid .g-start-xl-1{grid-column-start:1}.grid .g-start-xl-2{grid-column-start:2}.grid .g-start-xl-3{grid-column-start:3}.grid .g-start-xl-4{grid-column-start:4}.grid .g-start-xl-5{grid-column-start:5}.grid .g-start-xl-6{grid-column-start:6}.grid .g-start-xl-7{grid-column-start:7}.grid .g-start-xl-8{grid-column-start:8}.grid .g-start-xl-9{grid-column-start:9}.grid .g-start-xl-10{grid-column-start:10}.grid .g-start-xl-11{grid-column-start:11}}@media (min-width: 1400px){.grid .g-col-xxl-1{grid-column:auto/span 1}.grid .g-col-xxl-2{grid-column:auto/span 2}.grid .g-col-xxl-3{grid-column:auto/span 3}.grid .g-col-xxl-4{grid-column:auto/span 4}.grid .g-col-xxl-5{grid-column:auto/span 5}.grid .g-col-xxl-6{grid-column:auto/span 6}.grid .g-col-xxl-7{grid-column:auto/span 7}.grid .g-col-xxl-8{grid-column:auto/span 8}.grid .g-col-xxl-9{grid-column:auto/span 9}.grid .g-col-xxl-10{grid-column:auto/span 10}.grid .g-col-xxl-11{grid-column:auto/span 11}.grid .g-col-xxl-12{grid-column:auto/span 12}.grid .g-start-xxl-1{grid-column-start:1}.grid .g-start-xxl-2{grid-column-start:2}.grid .g-start-xxl-3{grid-column-start:3}.grid .g-start-xxl-4{grid-column-start:4}.grid .g-start-xxl-5{grid-column-start:5}.grid .g-start-xxl-6{grid-column-start:6}.grid .g-start-xxl-7{grid-column-start:7}.grid .g-start-xxl-8{grid-column-start:8}.grid .g-start-xxl-9{grid-column-start:9}.grid .g-start-xxl-10{grid-column-start:10}.grid .g-start-xxl-11{grid-column-start:11}}.g-0,.gx-0{--tblr-gutter-x: 0}.g-0,.gy-0{--tblr-gutter-y: 0}.g-1,.gx-1{--tblr-gutter-x: .25rem}.g-1,.gy-1{--tblr-gutter-y: .25rem}.g-2,.gx-2{--tblr-gutter-x: .5rem}.g-2,.gy-2{--tblr-gutter-y: .5rem}.g-3,.gx-3{--tblr-gutter-x: 1rem}.g-3,.gy-3{--tblr-gutter-y: 1rem}.g-4,.gx-4{--tblr-gutter-x: 1.5rem}.g-4,.gy-4{--tblr-gutter-y: 1.5rem}.g-5,.gx-5{--tblr-gutter-x: 2rem}.g-5,.gy-5{--tblr-gutter-y: 2rem}.g-6,.gx-6{--tblr-gutter-x: 3rem}.g-6,.gy-6{--tblr-gutter-y: 3rem}.g-7,.gx-7{--tblr-gutter-x: 5rem}.g-7,.gy-7{--tblr-gutter-y: 5rem}.g-8,.gx-8{--tblr-gutter-x: 8rem}.g-8,.gy-8{--tblr-gutter-y: 8rem}@media (min-width: 576px){.col-sm{flex:1 0 0%}.row-cols-sm-auto>*{flex:0 0 auto;width:auto}.row-cols-sm-1>*{flex:0 0 auto;width:100%}.row-cols-sm-2>*{flex:0 0 auto;width:50%}.row-cols-sm-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-sm-4>*{flex:0 0 auto;width:25%}.row-cols-sm-5>*{flex:0 0 auto;width:20%}.row-cols-sm-6>*{flex:0 0 auto;width:16.6666666667%}.col-sm-auto{flex:0 0 auto;width:auto}.col-sm-1{flex:0 0 auto;width:8.33333333%}.col-sm-2{flex:0 0 auto;width:16.66666667%}.col-sm-3{flex:0 0 auto;width:25%}.col-sm-4{flex:0 0 auto;width:33.33333333%}.col-sm-5{flex:0 0 auto;width:41.66666667%}.col-sm-6{flex:0 0 auto;width:50%}.col-sm-7{flex:0 0 auto;width:58.33333333%}.col-sm-8{flex:0 0 auto;width:66.66666667%}.col-sm-9{flex:0 0 auto;width:75%}.col-sm-10{flex:0 0 auto;width:83.33333333%}.col-sm-11{flex:0 0 auto;width:91.66666667%}.col-sm-12{flex:0 0 auto;width:100%}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333333%}.offset-sm-2{margin-left:16.66666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333333%}.offset-sm-5{margin-left:41.66666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333333%}.offset-sm-8{margin-left:66.66666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333333%}.offset-sm-11{margin-left:91.66666667%}.g-sm-0,.gx-sm-0{--tblr-gutter-x: 0}.g-sm-0,.gy-sm-0{--tblr-gutter-y: 0}.g-sm-1,.gx-sm-1{--tblr-gutter-x: .25rem}.g-sm-1,.gy-sm-1{--tblr-gutter-y: .25rem}.g-sm-2,.gx-sm-2{--tblr-gutter-x: .5rem}.g-sm-2,.gy-sm-2{--tblr-gutter-y: .5rem}.g-sm-3,.gx-sm-3{--tblr-gutter-x: 1rem}.g-sm-3,.gy-sm-3{--tblr-gutter-y: 1rem}.g-sm-4,.gx-sm-4{--tblr-gutter-x: 1.5rem}.g-sm-4,.gy-sm-4{--tblr-gutter-y: 1.5rem}.g-sm-5,.gx-sm-5{--tblr-gutter-x: 2rem}.g-sm-5,.gy-sm-5{--tblr-gutter-y: 2rem}.g-sm-6,.gx-sm-6{--tblr-gutter-x: 3rem}.g-sm-6,.gy-sm-6{--tblr-gutter-y: 3rem}.g-sm-7,.gx-sm-7{--tblr-gutter-x: 5rem}.g-sm-7,.gy-sm-7{--tblr-gutter-y: 5rem}.g-sm-8,.gx-sm-8{--tblr-gutter-x: 8rem}.g-sm-8,.gy-sm-8{--tblr-gutter-y: 8rem}}@media (min-width: 768px){.col-md{flex:1 0 0%}.row-cols-md-auto>*{flex:0 0 auto;width:auto}.row-cols-md-1>*{flex:0 0 auto;width:100%}.row-cols-md-2>*{flex:0 0 auto;width:50%}.row-cols-md-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-md-4>*{flex:0 0 auto;width:25%}.row-cols-md-5>*{flex:0 0 auto;width:20%}.row-cols-md-6>*{flex:0 0 auto;width:16.6666666667%}.col-md-auto{flex:0 0 auto;width:auto}.col-md-1{flex:0 0 auto;width:8.33333333%}.col-md-2{flex:0 0 auto;width:16.66666667%}.col-md-3{flex:0 0 auto;width:25%}.col-md-4{flex:0 0 auto;width:33.33333333%}.col-md-5{flex:0 0 auto;width:41.66666667%}.col-md-6{flex:0 0 auto;width:50%}.col-md-7{flex:0 0 auto;width:58.33333333%}.col-md-8{flex:0 0 auto;width:66.66666667%}.col-md-9{flex:0 0 auto;width:75%}.col-md-10{flex:0 0 auto;width:83.33333333%}.col-md-11{flex:0 0 auto;width:91.66666667%}.col-md-12{flex:0 0 auto;width:100%}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333333%}.offset-md-2{margin-left:16.66666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333333%}.offset-md-5{margin-left:41.66666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333333%}.offset-md-8{margin-left:66.66666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333333%}.offset-md-11{margin-left:91.66666667%}.g-md-0,.gx-md-0{--tblr-gutter-x: 0}.g-md-0,.gy-md-0{--tblr-gutter-y: 0}.g-md-1,.gx-md-1{--tblr-gutter-x: .25rem}.g-md-1,.gy-md-1{--tblr-gutter-y: .25rem}.g-md-2,.gx-md-2{--tblr-gutter-x: .5rem}.g-md-2,.gy-md-2{--tblr-gutter-y: .5rem}.g-md-3,.gx-md-3{--tblr-gutter-x: 1rem}.g-md-3,.gy-md-3{--tblr-gutter-y: 1rem}.g-md-4,.gx-md-4{--tblr-gutter-x: 1.5rem}.g-md-4,.gy-md-4{--tblr-gutter-y: 1.5rem}.g-md-5,.gx-md-5{--tblr-gutter-x: 2rem}.g-md-5,.gy-md-5{--tblr-gutter-y: 2rem}.g-md-6,.gx-md-6{--tblr-gutter-x: 3rem}.g-md-6,.gy-md-6{--tblr-gutter-y: 3rem}.g-md-7,.gx-md-7{--tblr-gutter-x: 5rem}.g-md-7,.gy-md-7{--tblr-gutter-y: 5rem}.g-md-8,.gx-md-8{--tblr-gutter-x: 8rem}.g-md-8,.gy-md-8{--tblr-gutter-y: 8rem}}@media (min-width: 992px){.col-lg{flex:1 0 0%}.row-cols-lg-auto>*{flex:0 0 auto;width:auto}.row-cols-lg-1>*{flex:0 0 auto;width:100%}.row-cols-lg-2>*{flex:0 0 auto;width:50%}.row-cols-lg-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-lg-4>*{flex:0 0 auto;width:25%}.row-cols-lg-5>*{flex:0 0 auto;width:20%}.row-cols-lg-6>*{flex:0 0 auto;width:16.6666666667%}.col-lg-auto{flex:0 0 auto;width:auto}.col-lg-1{flex:0 0 auto;width:8.33333333%}.col-lg-2{flex:0 0 auto;width:16.66666667%}.col-lg-3{flex:0 0 auto;width:25%}.col-lg-4{flex:0 0 auto;width:33.33333333%}.col-lg-5{flex:0 0 auto;width:41.66666667%}.col-lg-6{flex:0 0 auto;width:50%}.col-lg-7{flex:0 0 auto;width:58.33333333%}.col-lg-8{flex:0 0 auto;width:66.66666667%}.col-lg-9{flex:0 0 auto;width:75%}.col-lg-10{flex:0 0 auto;width:83.33333333%}.col-lg-11{flex:0 0 auto;width:91.66666667%}.col-lg-12{flex:0 0 auto;width:100%}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333333%}.offset-lg-2{margin-left:16.66666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333333%}.offset-lg-5{margin-left:41.66666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333333%}.offset-lg-8{margin-left:66.66666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333333%}.offset-lg-11{margin-left:91.66666667%}.g-lg-0,.gx-lg-0{--tblr-gutter-x: 0}.g-lg-0,.gy-lg-0{--tblr-gutter-y: 0}.g-lg-1,.gx-lg-1{--tblr-gutter-x: .25rem}.g-lg-1,.gy-lg-1{--tblr-gutter-y: .25rem}.g-lg-2,.gx-lg-2{--tblr-gutter-x: .5rem}.g-lg-2,.gy-lg-2{--tblr-gutter-y: .5rem}.g-lg-3,.gx-lg-3{--tblr-gutter-x: 1rem}.g-lg-3,.gy-lg-3{--tblr-gutter-y: 1rem}.g-lg-4,.gx-lg-4{--tblr-gutter-x: 1.5rem}.g-lg-4,.gy-lg-4{--tblr-gutter-y: 1.5rem}.g-lg-5,.gx-lg-5{--tblr-gutter-x: 2rem}.g-lg-5,.gy-lg-5{--tblr-gutter-y: 2rem}.g-lg-6,.gx-lg-6{--tblr-gutter-x: 3rem}.g-lg-6,.gy-lg-6{--tblr-gutter-y: 3rem}.g-lg-7,.gx-lg-7{--tblr-gutter-x: 5rem}.g-lg-7,.gy-lg-7{--tblr-gutter-y: 5rem}.g-lg-8,.gx-lg-8{--tblr-gutter-x: 8rem}.g-lg-8,.gy-lg-8{--tblr-gutter-y: 8rem}}@media (min-width: 1200px){.col-xl{flex:1 0 0%}.row-cols-xl-auto>*{flex:0 0 auto;width:auto}.row-cols-xl-1>*{flex:0 0 auto;width:100%}.row-cols-xl-2>*{flex:0 0 auto;width:50%}.row-cols-xl-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-xl-4>*{flex:0 0 auto;width:25%}.row-cols-xl-5>*{flex:0 0 auto;width:20%}.row-cols-xl-6>*{flex:0 0 auto;width:16.6666666667%}.col-xl-auto{flex:0 0 auto;width:auto}.col-xl-1{flex:0 0 auto;width:8.33333333%}.col-xl-2{flex:0 0 auto;width:16.66666667%}.col-xl-3{flex:0 0 auto;width:25%}.col-xl-4{flex:0 0 auto;width:33.33333333%}.col-xl-5{flex:0 0 auto;width:41.66666667%}.col-xl-6{flex:0 0 auto;width:50%}.col-xl-7{flex:0 0 auto;width:58.33333333%}.col-xl-8{flex:0 0 auto;width:66.66666667%}.col-xl-9{flex:0 0 auto;width:75%}.col-xl-10{flex:0 0 auto;width:83.33333333%}.col-xl-11{flex:0 0 auto;width:91.66666667%}.col-xl-12{flex:0 0 auto;width:100%}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333333%}.offset-xl-2{margin-left:16.66666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333333%}.offset-xl-5{margin-left:41.66666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333333%}.offset-xl-8{margin-left:66.66666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333333%}.offset-xl-11{margin-left:91.66666667%}.g-xl-0,.gx-xl-0{--tblr-gutter-x: 0}.g-xl-0,.gy-xl-0{--tblr-gutter-y: 0}.g-xl-1,.gx-xl-1{--tblr-gutter-x: .25rem}.g-xl-1,.gy-xl-1{--tblr-gutter-y: .25rem}.g-xl-2,.gx-xl-2{--tblr-gutter-x: .5rem}.g-xl-2,.gy-xl-2{--tblr-gutter-y: .5rem}.g-xl-3,.gx-xl-3{--tblr-gutter-x: 1rem}.g-xl-3,.gy-xl-3{--tblr-gutter-y: 1rem}.g-xl-4,.gx-xl-4{--tblr-gutter-x: 1.5rem}.g-xl-4,.gy-xl-4{--tblr-gutter-y: 1.5rem}.g-xl-5,.gx-xl-5{--tblr-gutter-x: 2rem}.g-xl-5,.gy-xl-5{--tblr-gutter-y: 2rem}.g-xl-6,.gx-xl-6{--tblr-gutter-x: 3rem}.g-xl-6,.gy-xl-6{--tblr-gutter-y: 3rem}.g-xl-7,.gx-xl-7{--tblr-gutter-x: 5rem}.g-xl-7,.gy-xl-7{--tblr-gutter-y: 5rem}.g-xl-8,.gx-xl-8{--tblr-gutter-x: 8rem}.g-xl-8,.gy-xl-8{--tblr-gutter-y: 8rem}}@media (min-width: 1400px){.col-xxl{flex:1 0 0%}.row-cols-xxl-auto>*{flex:0 0 auto;width:auto}.row-cols-xxl-1>*{flex:0 0 auto;width:100%}.row-cols-xxl-2>*{flex:0 0 auto;width:50%}.row-cols-xxl-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-xxl-4>*{flex:0 0 auto;width:25%}.row-cols-xxl-5>*{flex:0 0 auto;width:20%}.row-cols-xxl-6>*{flex:0 0 auto;width:16.6666666667%}.col-xxl-auto{flex:0 0 auto;width:auto}.col-xxl-1{flex:0 0 auto;width:8.33333333%}.col-xxl-2{flex:0 0 auto;width:16.66666667%}.col-xxl-3{flex:0 0 auto;width:25%}.col-xxl-4{flex:0 0 auto;width:33.33333333%}.col-xxl-5{flex:0 0 auto;width:41.66666667%}.col-xxl-6{flex:0 0 auto;width:50%}.col-xxl-7{flex:0 0 auto;width:58.33333333%}.col-xxl-8{flex:0 0 auto;width:66.66666667%}.col-xxl-9{flex:0 0 auto;width:75%}.col-xxl-10{flex:0 0 auto;width:83.33333333%}.col-xxl-11{flex:0 0 auto;width:91.66666667%}.col-xxl-12{flex:0 0 auto;width:100%}.offset-xxl-0{margin-left:0}.offset-xxl-1{margin-left:8.33333333%}.offset-xxl-2{margin-left:16.66666667%}.offset-xxl-3{margin-left:25%}.offset-xxl-4{margin-left:33.33333333%}.offset-xxl-5{margin-left:41.66666667%}.offset-xxl-6{margin-left:50%}.offset-xxl-7{margin-left:58.33333333%}.offset-xxl-8{margin-left:66.66666667%}.offset-xxl-9{margin-left:75%}.offset-xxl-10{margin-left:83.33333333%}.offset-xxl-11{margin-left:91.66666667%}.g-xxl-0,.gx-xxl-0{--tblr-gutter-x: 0}.g-xxl-0,.gy-xxl-0{--tblr-gutter-y: 0}.g-xxl-1,.gx-xxl-1{--tblr-gutter-x: .25rem}.g-xxl-1,.gy-xxl-1{--tblr-gutter-y: .25rem}.g-xxl-2,.gx-xxl-2{--tblr-gutter-x: .5rem}.g-xxl-2,.gy-xxl-2{--tblr-gutter-y: .5rem}.g-xxl-3,.gx-xxl-3{--tblr-gutter-x: 1rem}.g-xxl-3,.gy-xxl-3{--tblr-gutter-y: 1rem}.g-xxl-4,.gx-xxl-4{--tblr-gutter-x: 1.5rem}.g-xxl-4,.gy-xxl-4{--tblr-gutter-y: 1.5rem}.g-xxl-5,.gx-xxl-5{--tblr-gutter-x: 2rem}.g-xxl-5,.gy-xxl-5{--tblr-gutter-y: 2rem}.g-xxl-6,.gx-xxl-6{--tblr-gutter-x: 3rem}.g-xxl-6,.gy-xxl-6{--tblr-gutter-y: 3rem}.g-xxl-7,.gx-xxl-7{--tblr-gutter-x: 5rem}.g-xxl-7,.gy-xxl-7{--tblr-gutter-y: 5rem}.g-xxl-8,.gx-xxl-8{--tblr-gutter-x: 8rem}.g-xxl-8,.gy-xxl-8{--tblr-gutter-y: 8rem}}.table,.markdown>table{--tblr-table-color-type: initial;--tblr-table-bg-type: initial;--tblr-table-color-state: initial;--tblr-table-bg-state: initial;--tblr-table-color: inherit;--tblr-table-bg: transparent;--tblr-table-border-color: var(--tblr-border-color-translucent);--tblr-table-accent-bg: transparent;--tblr-table-striped-color: inherit;--tblr-table-striped-bg: var(--tblr-bg-surface-tertiary);--tblr-table-active-color: inherit;--tblr-table-active-bg: rgba(0, 0, 0, .1);--tblr-table-hover-color: inherit;--tblr-table-hover-bg: rgba(0, 0, 0, .075);width:100%;margin-bottom:1rem;vertical-align:top;border-color:var(--tblr-table-border-color)}.table>:not(caption)>*>*,.markdown>table>:not(caption)>*>*{padding:.75rem;color:var( --tblr-table-color-state, var(--tblr-table-color-type, var(--tblr-table-color)) );background-color:var(--tblr-table-bg);border-bottom-width:var(--tblr-border-width);box-shadow:inset 0 0 0 9999px var( --tblr-table-bg-state, var(--tblr-table-bg-type, var(--tblr-table-accent-bg)) )}.table>tbody,.markdown>table>tbody{vertical-align:inherit}.table>thead,.markdown>table>thead{vertical-align:bottom}.table-bordered>:not(caption)>*,.markdown>table>:not(caption)>*{border-width:var(--tblr-border-width) 0}.table-bordered>:not(caption)>*>*,.markdown>table>:not(caption)>*>*{border-width:0 var(--tblr-border-width)}.table-striped>tbody>tr:nth-of-type(2n)>*{--tblr-table-color-type: var(--tblr-table-striped-color);--tblr-table-bg-type: var(--tblr-table-striped-bg)}.table-striped-columns>:not(caption)>tr>:nth-child(2n){--tblr-table-color-type: var(--tblr-table-striped-color);--tblr-table-bg-type: var(--tblr-table-striped-bg)}.table-active{--tblr-table-color-state: var(--tblr-table-active-color);--tblr-table-bg-state: var(--tblr-table-active-bg)}.table-hover>tbody>tr:hover>*{--tblr-table-color-state: var(--tblr-table-hover-color);--tblr-table-bg-state: var(--tblr-table-hover-bg)}.table-primary{--tblr-table-color: #182433;--tblr-table-bg: #ccdded;--tblr-table-border-color: #bacbda;--tblr-table-striped-bg: #c3d4e4;--tblr-table-striped-color: #182433;--tblr-table-active-bg: #bacbda;--tblr-table-active-color: #fcfdfe;--tblr-table-hover-bg: #bfcfdf;--tblr-table-hover-color: #fcfdfe;color:var(--tblr-table-color);border-color:var(--tblr-table-border-color)}.table-secondary{--tblr-table-color: #182433;--tblr-table-bg: #e0e3e6;--tblr-table-border-color: #ccd0d4;--tblr-table-striped-bg: #d6d9dd;--tblr-table-striped-color: #182433;--tblr-table-active-bg: #ccd0d4;--tblr-table-active-color: #fcfdfe;--tblr-table-hover-bg: #d1d5d9;--tblr-table-hover-color: #182433;color:var(--tblr-table-color);border-color:var(--tblr-table-border-color)}.table-success{--tblr-table-color: #182433;--tblr-table-bg: #d5f0da;--tblr-table-border-color: #c2dcc9;--tblr-table-striped-bg: #cce6d2;--tblr-table-striped-color: #182433;--tblr-table-active-bg: #c2dcc9;--tblr-table-active-color: #182433;--tblr-table-hover-bg: #c7e1cd;--tblr-table-hover-color: #182433;color:var(--tblr-table-color);border-color:var(--tblr-table-border-color)}.table-info{--tblr-table-color: #182433;--tblr-table-bg: #d9ebf9;--tblr-table-border-color: #c6d7e5;--tblr-table-striped-bg: #cfe1ef;--tblr-table-striped-color: #182433;--tblr-table-active-bg: #c6d7e5;--tblr-table-active-color: #182433;--tblr-table-hover-bg: #cbdcea;--tblr-table-hover-color: #182433;color:var(--tblr-table-color);border-color:var(--tblr-table-border-color)}.table-warning{--tblr-table-color: #182433;--tblr-table-bg: #fde1cd;--tblr-table-border-color: #e6cebe;--tblr-table-striped-bg: #f2d8c5;--tblr-table-striped-color: #182433;--tblr-table-active-bg: #e6cebe;--tblr-table-active-color: #182433;--tblr-table-hover-bg: #ecd3c1;--tblr-table-hover-color: #182433;color:var(--tblr-table-color);border-color:var(--tblr-table-border-color)}.table-danger{--tblr-table-color: #182433;--tblr-table-bg: #f7d7d7;--tblr-table-border-color: #e1c5c7;--tblr-table-striped-bg: #eccecf;--tblr-table-striped-color: #182433;--tblr-table-active-bg: #e1c5c7;--tblr-table-active-color: #fcfdfe;--tblr-table-hover-bg: #e6cacb;--tblr-table-hover-color: #fcfdfe;color:var(--tblr-table-color);border-color:var(--tblr-table-border-color)}.table-light{--tblr-table-color: #182433;--tblr-table-bg: #fcfdfe;--tblr-table-border-color: #e5e7ea;--tblr-table-striped-bg: #f1f2f4;--tblr-table-striped-color: #182433;--tblr-table-active-bg: #e5e7ea;--tblr-table-active-color: #182433;--tblr-table-hover-bg: #ebedef;--tblr-table-hover-color: #182433;color:var(--tblr-table-color);border-color:var(--tblr-table-border-color)}.table-dark{--tblr-table-color: #fcfdfe;--tblr-table-bg: #182433;--tblr-table-border-color: #2f3a47;--tblr-table-striped-bg: #232f3d;--tblr-table-striped-color: #fcfdfe;--tblr-table-active-bg: #2f3a47;--tblr-table-active-color: #fcfdfe;--tblr-table-hover-bg: #293442;--tblr-table-hover-color: #fcfdfe;color:var(--tblr-table-color);border-color:var(--tblr-table-border-color)}@media (max-width: 575.98px){.table-responsive-sm{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width: 767.98px){.table-responsive-md{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width: 991.98px){.table-responsive-lg{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width: 1199.98px){.table-responsive-xl{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width: 1399.98px){.table-responsive-xxl{overflow-x:auto;-webkit-overflow-scrolling:touch}}.col-form-label{padding-top:calc(.5625rem + var(--tblr-border-width));padding-bottom:calc(.5625rem + var(--tblr-border-width));margin-bottom:0;font-size:inherit;font-weight:var(--tblr-font-weight-medium);line-height:1.4285714286}.form-control{display:block;width:100%;padding:.5625rem .75rem;font-family:var(--tblr-font-sans-serif);font-size:.875rem;font-weight:400;line-height:1.4285714286;color:var(--tblr-body-color);-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--tblr-bg-forms);background-clip:padding-box;border:var(--tblr-border-width) solid var(--tblr-border-color);border-radius:var(--tblr-border-radius);box-shadow:var(--tblr-box-shadow-input);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion: reduce){.form-control{transition:none}}.form-control:focus{color:var(--tblr-body-color);background-color:var(--tblr-bg-forms);border-color:#80aad3;outline:0;box-shadow:var(--tblr-box-shadow-input),0 0 0 .25rem rgba(var(--tblr-primary-rgb),.25)}.form-control::-webkit-file-upload-button{padding:.5625rem .75rem;margin:-.5625rem -.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:var(--tblr-body-color);background-color:var(--tblr-tertiary-bg);pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:var(--tblr-border-width);border-radius:0;-webkit-transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-control::file-selector-button{padding:.5625rem .75rem;margin:-.5625rem -.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:var(--tblr-body-color);background-color:var(--tblr-tertiary-bg);pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:var(--tblr-border-width);border-radius:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion: reduce){.form-control::-webkit-file-upload-button{-webkit-transition:none;transition:none}.form-control::file-selector-button{transition:none}}.form-control-plaintext{display:block;width:100%;padding:.5625rem 0;margin-bottom:0;line-height:1.4285714286;color:var(--tblr-body-color);background-color:transparent;border:solid transparent;border-width:var(--tblr-border-width) 0}.form-control-plaintext.form-control-sm,.form-control-plaintext.form-control-lg{padding-right:0;padding-left:0}textarea.form-control{min-height:calc(1.4285714286em + 1.125rem + calc(var(--tblr-border-width) * 2))}.form-control-color{width:3rem;height:calc(1.4285714286em + 1.125rem + calc(var(--tblr-border-width) * 2));padding:.5625rem}.form-select{--tblr-form-select-bg-img: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23929dab' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e");display:block;width:100%;padding:.5625rem 2.25rem .5625rem .75rem;font-family:var(--tblr-font-sans-serif);font-size:.875rem;font-weight:400;line-height:1.4285714286;color:var(--tblr-body-color);-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--tblr-bg-forms);background-image:var(--tblr-form-select-bg-img),var(--tblr-form-select-bg-icon, none);background-repeat:no-repeat;background-position:right .75rem center;background-size:16px 12px;border:var(--tblr-border-width) solid var(--tblr-border-color);border-radius:var(--tblr-border-radius);box-shadow:var(--tblr-box-shadow-input);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion: reduce){.form-select{transition:none}}.form-select:focus{border-color:#80aad3;outline:0;box-shadow:var(--tblr-box-shadow-input),0 0 0 .25rem rgba(var(--tblr-primary-rgb),.25)}.form-select:-moz-focusring{color:transparent;text-shadow:0 0 0 var(--tblr-body-color)}[data-bs-theme=dark] .form-select,body[data-bs-theme=dark] [data-bs-theme=light] .form-select{--tblr-form-select-bg-img: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23fcfdfe' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e")}.form-check{display:block;min-height:1.25rem;padding-left:2rem;margin-bottom:.75rem}.form-check .form-check-input{float:left;margin-left:-2rem}.form-check-reverse{padding-right:2rem;padding-left:0;text-align:right}.form-check-reverse .form-check-input{float:right;margin-right:-2rem;margin-left:0}.form-check-input{--tblr-form-check-bg: var(--tblr-bg-forms);width:1.25rem;height:1.25rem;margin-top:.0892857143rem;vertical-align:top;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--tblr-form-check-bg);background-image:var(--tblr-form-check-bg-image);background-repeat:no-repeat;background-position:center;background-size:contain;border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent);-webkit-print-color-adjust:exact;color-adjust:exact;print-color-adjust:exact}.form-check-input:focus{border-color:#80aad3;outline:0;box-shadow:0 0 0 .25rem rgba(var(--tblr-primary-rgb),.25)}.form-check-input:checked[type=checkbox]{--tblr-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' width='16' height='16'%3e%3cpath fill='none' stroke='%23ffffff' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8.5l2.5 2.5l5.5 -5.5'/%3e%3c/svg%3e")}.form-check-input:checked[type=radio]{--tblr-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3ccircle r='3' fill='%23ffffff' cx='8' cy='8' /%3e%3c/svg%3e")}.form-check-input[type=checkbox]:indeterminate{background-color:var(--tblr-primary);border-color:var(--tblr-primary);--tblr-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23ffffff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e")}.form-check-input[disabled]~.form-check-label,.form-check-input:disabled~.form-check-label{cursor:default;opacity:.7}.form-switch .form-check-input{--tblr-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23dadfe5'/%3e%3c/svg%3e");width:2rem;margin-left:-2.5rem;background-image:var(--tblr-form-switch-bg);background-position:left center;border-radius:2rem;transition:background-position .15s ease-in-out}.form-switch .form-check-input:focus{--tblr-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2380aad3'/%3e%3c/svg%3e")}.form-switch .form-check-input:checked{background-position:right center;--tblr-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23ffffff'/%3e%3c/svg%3e")}.btn-check[disabled]+.btn,.btn-check:disabled+.btn{pointer-events:none;filter:none;opacity:.4}[data-bs-theme=dark] .form-switch .form-check-input:not(:checked):not(:focus){--tblr-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%28255, 255, 255, 0.25%29'/%3e%3c/svg%3e")}.form-range{width:100%;height:1.25rem;padding:0;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent}.form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #f6f8fb,0 0 0 .25rem rgba(var(--tblr-primary-rgb),.25)}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #f6f8fb,0 0 0 .25rem rgba(var(--tblr-primary-rgb),.25)}.form-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.375rem;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--tblr-primary);border:2px var(--tblr-border-style) #ffffff;border-radius:1rem;box-shadow:0 .1rem .25rem #0000001a;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion: reduce){.form-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.form-range::-webkit-slider-thumb:active{background-color:#b3cce4}.form-range::-moz-range-thumb{width:1rem;height:1rem;-moz-appearance:none;-webkit-appearance:none;appearance:none;background-color:var(--tblr-primary);border:2px var(--tblr-border-style) #ffffff;border-radius:1rem;box-shadow:0 .1rem .25rem #0000001a;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion: reduce){.form-range::-moz-range-thumb{-moz-transition:none;transition:none}}.form-range::-moz-range-thumb:active{background-color:#b3cce4}.form-floating>.form-control,.form-floating>.form-control-plaintext,.form-floating>.form-select{height:calc(3.5rem + calc(var(--tblr-border-width) * 2));min-height:calc(3.5rem + calc(var(--tblr-border-width) * 2));line-height:1.25}@media (prefers-reduced-motion: reduce){.form-floating>label{transition:none}}.form-floating>.form-control::-webkit-input-placeholder,.form-floating>.form-control-plaintext::-webkit-input-placeholder{color:transparent}.form-floating>.form-control:-ms-input-placeholder,.form-floating>.form-control-plaintext:-ms-input-placeholder{color:transparent}.form-floating>.form-control::-ms-input-placeholder,.form-floating>.form-control-plaintext::-ms-input-placeholder{color:transparent}.form-floating>.form-control::placeholder,.form-floating>.form-control-plaintext::placeholder{color:transparent}.form-floating>.form-control:not(:-ms-input-placeholder),.form-floating>.form-control-plaintext:not(:-ms-input-placeholder){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:focus,.form-floating>.form-control:not(:placeholder-shown),.form-floating>.form-control-plaintext:focus,.form-floating>.form-control-plaintext:not(:placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:-webkit-autofill,.form-floating>.form-control-plaintext:-webkit-autofill{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:focus~label,.form-floating>.form-control:not(:placeholder-shown)~label,.form-floating>.form-control-plaintext~label,.form-floating>.form-select~label{color:rgba(var(--tblr-body-color-rgb),.65);transform:scale(.85) translateY(-.5rem) translate(.15rem)}.form-floating>.form-control:focus~label:after,.form-floating>.form-control:not(:placeholder-shown)~label:after,.form-floating>.form-control-plaintext~label:after,.form-floating>.form-select~label:after{position:absolute;top:1rem;right:.375rem;bottom:1rem;left:.375rem;z-index:-1;height:1.5em;content:"";background-color:var(--tblr-bg-forms);border-radius:var(--tblr-border-radius)}.form-floating>:disabled~label,.form-floating>.form-control:disabled~label{color:#667382}.form-floating>:disabled~label:after,.form-floating>.form-control:disabled~label:after{background-color:var(--tblr-bg-surface-secondary)}.input-group>.form-control,.input-group>.form-select,.input-group>.form-floating{position:relative;flex:1 1 auto;width:1%;min-width:0}.input-group>.form-control:focus,.input-group>.form-select:focus,.input-group>.form-floating:focus-within{z-index:5}.input-group-text{display:flex;align-items:center;padding:.5625rem .75rem;font-size:.875rem;font-weight:400;line-height:1.4285714286;color:var(--tblr-secondary);text-align:center;white-space:nowrap;background-color:var(--tblr-bg-surface-secondary);border:var(--tblr-border-width) solid var(--tblr-border-color);border-radius:var(--tblr-border-radius)}.input-group-lg>.form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text,.input-group-lg>.btn{padding:.5rem .75rem;font-size:1.25rem;border-radius:var(--tblr-border-radius-lg)}.input-group-sm>.form-control,.input-group-sm>.form-select,.input-group-sm>.input-group-text,.input-group-sm>.btn{padding:.125rem .25rem;font-size:.75rem;border-radius:var(--tblr-border-radius-sm)}.input-group:not(.has-validation)>:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),.input-group:not(.has-validation)>.dropdown-toggle:nth-last-child(n+3),.input-group:not(.has-validation)>.form-floating:not(:last-child)>.form-control,.input-group:not(.has-validation)>.form-floating:not(:last-child)>.form-select{border-top-right-radius:0;border-bottom-right-radius:0}.input-group.has-validation>:nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),.input-group.has-validation>.dropdown-toggle:nth-last-child(n+4),.input-group.has-validation>.form-floating:nth-last-child(n+3)>.form-control,.input-group.has-validation>.form-floating:nth-last-child(n+3)>.form-select{border-top-right-radius:0;border-bottom-right-radius:0}.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip,.is-valid~.valid-feedback,.is-valid~.valid-tooltip{display:block}.was-validated .form-control:valid,.form-control.is-valid{border-color:var(--tblr-form-valid-border-color);padding-right:calc(1.4285714286em + 1.125rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%232fb344' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3e%3cpolyline points='20 6 9 17 4 12'%3e%3c/polyline%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.3571428572em + .28125rem) center;background-size:calc(.7142857143em + .5625rem) calc(.7142857143em + .5625rem)}.was-validated .form-control:valid:focus,.form-control.is-valid:focus{border-color:var(--tblr-form-valid-border-color);box-shadow:0 0 0 .25rem rgba(var(--tblr-success-rgb),.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.4285714286em + 1.125rem);background-position:top calc(.3571428572em + .28125rem) right calc(.3571428572em + .28125rem)}.was-validated .form-select:valid,.form-select.is-valid{border-color:var(--tblr-form-valid-border-color)}.was-validated .form-select:valid:not([multiple]):not([size]),.was-validated .form-select:valid:not([multiple])[size="1"],.form-select.is-valid:not([multiple]):not([size]),.form-select.is-valid:not([multiple])[size="1"]{--tblr-form-select-bg-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%232fb344' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3e%3cpolyline points='20 6 9 17 4 12'%3e%3c/polyline%3e%3c/svg%3e");padding-right:4.125rem;background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.7142857143em + .5625rem) calc(.7142857143em + .5625rem)}.was-validated .form-select:valid:focus,.form-select.is-valid:focus{border-color:var(--tblr-form-valid-border-color);box-shadow:0 0 0 .25rem rgba(var(--tblr-success-rgb),.25)}.was-validated .form-control-color:valid,.form-control-color.is-valid{width:calc(3rem + calc(1.4285714286em + 1.125rem))}.was-validated .form-check-input:valid,.form-check-input.is-valid{border-color:var(--tblr-form-valid-border-color)}.was-validated .form-check-input:valid:checked,.form-check-input.is-valid:checked{background-color:var(--tblr-form-valid-color)}.was-validated .form-check-input:valid:focus,.form-check-input.is-valid:focus{box-shadow:0 0 0 .25rem rgba(var(--tblr-success-rgb),.25)}.was-validated .form-check-input:valid~.form-check-label,.form-check-input.is-valid~.form-check-label{color:var(--tblr-form-valid-color)}.was-validated .input-group>.form-control:not(:focus):valid,.input-group>.form-control:not(:focus).is-valid,.was-validated .input-group>.form-select:not(:focus):valid,.input-group>.form-select:not(:focus).is-valid,.was-validated .input-group>.form-floating:not(:focus-within):valid,.input-group>.form-floating:not(:focus-within).is-valid{z-index:3}.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip,.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip{display:block}.was-validated .form-control:invalid,.form-control.is-invalid{border-color:var(--tblr-form-invalid-border-color);padding-right:calc(1.4285714286em + 1.125rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23d63939' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3e%3cline x1='18' y1='6' x2='6' y2='18'%3e%3c/line%3e%3cline x1='6' y1='6' x2='18' y2='18'%3e%3c/line%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.3571428572em + .28125rem) center;background-size:calc(.7142857143em + .5625rem) calc(.7142857143em + .5625rem)}.was-validated .form-control:invalid:focus,.form-control.is-invalid:focus{border-color:var(--tblr-form-invalid-border-color);box-shadow:0 0 0 .25rem rgba(var(--tblr-danger-rgb),.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.4285714286em + 1.125rem);background-position:top calc(.3571428572em + .28125rem) right calc(.3571428572em + .28125rem)}.was-validated .form-select:invalid,.form-select.is-invalid{border-color:var(--tblr-form-invalid-border-color)}.was-validated .form-select:invalid:not([multiple]):not([size]),.was-validated .form-select:invalid:not([multiple])[size="1"],.form-select.is-invalid:not([multiple]):not([size]),.form-select.is-invalid:not([multiple])[size="1"]{--tblr-form-select-bg-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23d63939' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3e%3cline x1='18' y1='6' x2='6' y2='18'%3e%3c/line%3e%3cline x1='6' y1='6' x2='18' y2='18'%3e%3c/line%3e%3c/svg%3e");padding-right:4.125rem;background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.7142857143em + .5625rem) calc(.7142857143em + .5625rem)}.was-validated .form-select:invalid:focus,.form-select.is-invalid:focus{border-color:var(--tblr-form-invalid-border-color);box-shadow:0 0 0 .25rem rgba(var(--tblr-danger-rgb),.25)}.was-validated .form-control-color:invalid,.form-control-color.is-invalid{width:calc(3rem + calc(1.4285714286em + 1.125rem))}.was-validated .form-check-input:invalid,.form-check-input.is-invalid{border-color:var(--tblr-form-invalid-border-color)}.was-validated .form-check-input:invalid:checked,.form-check-input.is-invalid:checked{background-color:var(--tblr-form-invalid-color)}.was-validated .form-check-input:invalid:focus,.form-check-input.is-invalid:focus{box-shadow:0 0 0 .25rem rgba(var(--tblr-danger-rgb),.25)}.was-validated .form-check-input:invalid~.form-check-label,.form-check-input.is-invalid~.form-check-label{color:var(--tblr-form-invalid-color)}.was-validated .input-group>.form-control:not(:focus):invalid,.input-group>.form-control:not(:focus).is-invalid,.was-validated .input-group>.form-select:not(:focus):invalid,.input-group>.form-select:not(:focus).is-invalid,.was-validated .input-group>.form-floating:not(:focus-within):invalid,.input-group>.form-floating:not(:focus-within).is-invalid{z-index:4}.btn{--tblr-btn-padding-x: 1rem;--tblr-btn-padding-y: .5625rem;--tblr-btn-font-family: var(--tblr-font-sans-serif);--tblr-btn-font-size: .875rem;--tblr-btn-font-weight: var(--tblr-font-weight-medium);--tblr-btn-line-height: 1.4285714286;--tblr-btn-color: var(--tblr-body-color);--tblr-btn-bg: transparent;--tblr-btn-border-width: var(--tblr-border-width);--tblr-btn-border-color: transparent;--tblr-btn-border-radius: var(--tblr-border-radius);--tblr-btn-hover-border-color: transparent;--tblr-btn-box-shadow: var(--tblr-box-shadow-input);--tblr-btn-disabled-opacity: .4;--tblr-btn-focus-box-shadow: 0 0 0 .25rem rgba(var(--tblr-btn-focus-shadow-rgb), .5);display:inline-block;padding:var(--tblr-btn-padding-y) var(--tblr-btn-padding-x);font-family:var(--tblr-btn-font-family);font-size:var(--tblr-btn-font-size);font-weight:var(--tblr-btn-font-weight);line-height:var(--tblr-btn-line-height);color:var(--tblr-btn-color);text-align:center;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:var(--tblr-btn-border-width) solid var(--tblr-btn-border-color);border-radius:var(--tblr-btn-border-radius);background-color:var(--tblr-btn-bg);box-shadow:var(--tblr-btn-box-shadow);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion: reduce){.btn{transition:none}}.btn-check:checked+.btn,:not(.btn-check)+.btn:active,.btn:first-child:active,.btn.active,.btn.show{color:var(--tblr-btn-active-color);background-color:var(--tblr-btn-active-bg);border-color:var(--tblr-btn-active-border-color);box-shadow:var(--tblr-btn-active-shadow)}.btn-check:checked+.btn:focus-visible,:not(.btn-check)+.btn:active:focus-visible,.btn:first-child:active:focus-visible,.btn.active:focus-visible,.btn.show:focus-visible{box-shadow:var(--tblr-btn-active-shadow),var(--tblr-btn-focus-box-shadow)}.btn:disabled,.btn.disabled,fieldset:disabled .btn{color:var(--tblr-btn-disabled-color);pointer-events:none;background-color:var(--tblr-btn-disabled-bg);border-color:var(--tblr-btn-disabled-border-color);opacity:var(--tblr-btn-disabled-opacity);box-shadow:none}.btn-link{--tblr-btn-font-weight: 400;--tblr-btn-color: var(--tblr-link-color);--tblr-btn-bg: transparent;--tblr-btn-border-color: transparent;--tblr-btn-hover-color: var(--tblr-link-hover-color);--tblr-btn-hover-border-color: transparent;--tblr-btn-active-color: var(--tblr-link-hover-color);--tblr-btn-active-border-color: transparent;--tblr-btn-disabled-color: #667382;--tblr-btn-disabled-border-color: transparent;--tblr-btn-box-shadow: 0 0 0 #000;--tblr-btn-focus-shadow-rgb: 38, 109, 179;text-decoration:none}.btn-link:hover,.btn-link:focus-visible{text-decoration:underline}.btn-lg,.btn-group-lg>.btn{--tblr-btn-padding-y: .5rem;--tblr-btn-padding-x: .75rem;--tblr-btn-font-size: 1.25rem;--tblr-btn-border-radius: var(--tblr-border-radius-lg)}.btn-sm,.btn-group-sm>.btn{--tblr-btn-padding-y: .125rem;--tblr-btn-padding-x: .25rem;--tblr-btn-font-size: .75rem;--tblr-btn-border-radius: var(--tblr-border-radius-sm)}@media (prefers-reduced-motion: reduce){.fade{transition:none}}@media (prefers-reduced-motion: reduce){.collapsing{transition:none}}@media (prefers-reduced-motion: reduce){.collapsing.collapse-horizontal{transition:none}}.dropup,.dropend,.dropdown,.dropstart,.dropup-center,.dropdown-center{position:relative}.dropdown-menu{--tblr-dropdown-zindex: 1000;--tblr-dropdown-min-width: 11rem;--tblr-dropdown-padding-x: 0;--tblr-dropdown-padding-y: .25rem;--tblr-dropdown-spacer: 1px;--tblr-dropdown-font-size: .875rem;--tblr-dropdown-color: var(--tblr-body-color);--tblr-dropdown-bg: var(--tblr-bg-surface);--tblr-dropdown-border-color: var(--tblr-border-color-translucent);--tblr-dropdown-border-radius: var(--tblr-border-radius);--tblr-dropdown-border-width: var(--tblr-border-width);--tblr-dropdown-inner-border-radius: calc( var(--tblr-border-radius) - var(--tblr-border-width) );--tblr-dropdown-divider-bg: var(--tblr-border-color-translucent);--tblr-dropdown-divider-margin-y: var(--tblr-spacer);--tblr-dropdown-box-shadow: var(--tblr-box-shadow-dropdown);--tblr-dropdown-link-color: inherit;--tblr-dropdown-link-hover-color: inherit;--tblr-dropdown-link-hover-bg: rgba(var(--tblr-text-secondary-rgb), .04);--tblr-dropdown-link-active-color: var(--tblr-primary);--tblr-dropdown-link-active-bg: var(--tblr-active-bg);--tblr-dropdown-link-disabled-color: var(--tblr-tertiary-color);--tblr-dropdown-item-padding-x: .75rem;--tblr-dropdown-item-padding-y: .5rem;--tblr-dropdown-header-color: #667382;--tblr-dropdown-header-padding-x: .75rem;--tblr-dropdown-header-padding-y: .25rem;position:absolute;z-index:var(--tblr-dropdown-zindex);display:none;min-width:var(--tblr-dropdown-min-width);padding:var(--tblr-dropdown-padding-y) var(--tblr-dropdown-padding-x);margin:0;font-size:var(--tblr-dropdown-font-size);color:var(--tblr-dropdown-color);text-align:left;list-style:none;background-color:var(--tblr-dropdown-bg);background-clip:padding-box;border:var(--tblr-dropdown-border-width) solid var(--tblr-dropdown-border-color);border-radius:var(--tblr-dropdown-border-radius);box-shadow:var(--tblr-dropdown-box-shadow)}.dropdown-menu-start{--bs-position: start}.dropdown-menu-end{--bs-position: end}@media (min-width: 576px){.dropdown-menu-sm-start{--bs-position: start}.dropdown-menu-sm-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-sm-end{--bs-position: end}.dropdown-menu-sm-end[data-bs-popper]{right:0;left:auto}}@media (min-width: 768px){.dropdown-menu-md-start{--bs-position: start}.dropdown-menu-md-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-md-end{--bs-position: end}.dropdown-menu-md-end[data-bs-popper]{right:0;left:auto}}@media (min-width: 992px){.dropdown-menu-lg-start{--bs-position: start}.dropdown-menu-lg-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-lg-end{--bs-position: end}.dropdown-menu-lg-end[data-bs-popper]{right:0;left:auto}}@media (min-width: 1200px){.dropdown-menu-xl-start{--bs-position: start}.dropdown-menu-xl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xl-end{--bs-position: end}.dropdown-menu-xl-end[data-bs-popper]{right:0;left:auto}}@media (min-width: 1400px){.dropdown-menu-xxl-start{--bs-position: start}.dropdown-menu-xxl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xxl-end{--bs-position: end}.dropdown-menu-xxl-end[data-bs-popper]{right:0;left:auto}}.dropdown-item{display:block;width:100%;padding:var(--tblr-dropdown-item-padding-y) var(--tblr-dropdown-item-padding-x);clear:both;font-weight:400;color:var(--tblr-dropdown-link-color);text-align:inherit;white-space:nowrap;background-color:transparent;border:0;border-radius:var(--tblr-dropdown-item-border-radius, 0)}.dropdown-item:hover,.dropdown-item:focus{color:var(--tblr-dropdown-link-hover-color);text-decoration:none;background-color:var(--tblr-dropdown-link-hover-bg)}.dropdown-menu-dark{--tblr-dropdown-color: #dadfe5;--tblr-dropdown-bg: #182433;--tblr-dropdown-border-color: var(--tblr-border-color-translucent);--tblr-dropdown-box-shadow: ;--tblr-dropdown-link-color: #dadfe5;--tblr-dropdown-link-hover-color: #ffffff;--tblr-dropdown-divider-bg: var(--tblr-border-color-translucent);--tblr-dropdown-link-hover-bg: rgba(255, 255, 255, .15);--tblr-dropdown-link-active-color: var(--tblr-primary);--tblr-dropdown-link-active-bg: var(--tblr-active-bg);--tblr-dropdown-link-disabled-color: #929dab;--tblr-dropdown-header-color: #929dab}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;flex:1 1 auto}.btn-group>.btn-check:checked+.btn,.btn-group>.btn-check:focus+.btn,.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn:hover,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn.active{z-index:1}.btn-group>:not(.btn-check:first-child)+.btn,.btn-group>.btn-group:not(:first-child){margin-left:calc(var(--tblr-border-width) * -1)}.btn-group>.btn:not(:last-child):not(.dropdown-toggle),.btn-group>.btn.dropdown-toggle-split:first-child,.btn-group>.btn-group:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:nth-child(n+3),.btn-group>:not(.btn-check)+.btn,.btn-group>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split:after,.dropup .dropdown-toggle-split:after,.dropend .dropdown-toggle-split:after{margin-left:0}.btn-sm+.dropdown-toggle-split,.btn-group-sm>.btn+.dropdown-toggle-split{padding-right:.1875rem;padding-left:.1875rem}.btn-lg+.dropdown-toggle-split,.btn-group-lg>.btn+.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.btn-group-vertical>.btn:not(:first-child),.btn-group-vertical>.btn-group:not(:first-child){margin-top:calc(var(--tblr-border-width) * -1)}.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle),.btn-group-vertical>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn~.btn,.btn-group-vertical>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-top-right-radius:0}.nav{--tblr-nav-link-padding-x: .75rem;--tblr-nav-link-padding-y: .5rem;--tblr-nav-link-font-weight: ;--tblr-nav-link-color: var(--tblr-secondary);--tblr-nav-link-hover-color: var(--tblr-link-hover-color);--tblr-nav-link-disabled-color: var(--tblr-disabled-color);display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:var(--tblr-nav-link-padding-y) var(--tblr-nav-link-padding-x);font-size:var(--tblr-nav-link-font-size);font-weight:var(--tblr-nav-link-font-weight);color:var(--tblr-nav-link-color);background:none;border:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out}.nav-link:hover,.nav-link:focus{color:var(--tblr-nav-link-hover-color);text-decoration:none}.nav-link:focus-visible{outline:0;box-shadow:0 0 0 .25rem rgba(var(--tblr-primary-rgb),.25)}.nav-link.disabled,.nav-link:disabled{color:var(--tblr-nav-link-disabled-color);pointer-events:none;cursor:default}.nav-tabs{--tblr-nav-tabs-border-width: var(--tblr-border-width);--tblr-nav-tabs-border-color: var(--tblr-border-color);--tblr-nav-tabs-border-radius: var(--tblr-border-radius);--tblr-nav-tabs-link-hover-border-color: var(--tblr-border-color) var(--tblr-border-color) var(--tblr-border-color);--tblr-nav-tabs-link-active-color: var(--tblr-body-color);--tblr-nav-tabs-link-active-bg: var(--tblr-body-bg);--tblr-nav-tabs-link-active-border-color: var(--tblr-border-color) var(--tblr-border-color) var(--tblr-border-color);border-bottom:var(--tblr-nav-tabs-border-width) solid var(--tblr-nav-tabs-border-color)}.nav-tabs .nav-link:hover,.nav-tabs .nav-link:focus{isolation:isolate;border-color:var(--tblr-nav-tabs-link-hover-border-color)}.nav-tabs .nav-link.active,.nav-tabs .nav-item.show .nav-link{color:var(--tblr-nav-tabs-link-active-color);background-color:var(--tblr-nav-tabs-link-active-bg);border-color:var(--tblr-nav-tabs-link-active-border-color)}.nav-pills{--tblr-nav-pills-border-radius: var(--tblr-border-radius);--tblr-nav-pills-link-active-color: var(--tblr-primary);--tblr-nav-pills-link-active-bg: var(--tblr-active-bg)}.nav-underline{--tblr-nav-underline-gap: 1rem;--tblr-nav-underline-border-width: .125rem;--tblr-nav-underline-link-active-color: var(--tblr-emphasis-color);gap:var(--tblr-nav-underline-gap)}.nav-underline .nav-link:hover,.nav-underline .nav-link:focus{border-bottom-color:currentcolor}.nav-fill>.nav-link,.nav-fill .nav-item{flex:1 1 auto;text-align:center}.nav-justified>.nav-link,.nav-justified .nav-item{flex-basis:0;flex-grow:1;text-align:center}.navbar{--tblr-navbar-padding-x: 0;--tblr-navbar-padding-y: .25rem;--tblr-navbar-color: var(--tblr-body-color);--tblr-navbar-hover-color: rgba(var(--tblr-emphasis-color-rgb), .8);--tblr-navbar-disabled-color: var(--tblr-disabled-color);--tblr-navbar-active-color: var(--tblr-body-color) color;--tblr-navbar-brand-padding-y: .5rem;--tblr-navbar-brand-margin-end: 1rem;--tblr-navbar-brand-font-size: 1.25rem;--tblr-navbar-brand-color: var(--tblr-body-color);--tblr-navbar-brand-hover-color: var(--tblr-body-color) color;--tblr-navbar-nav-link-padding-x: .75rem;--tblr-navbar-toggler-padding-y: 0;--tblr-navbar-toggler-padding-x: 0;--tblr-navbar-toggler-font-size: 1rem;--tblr-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%2824, 36, 51, 0.75%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e");--tblr-navbar-toggler-border-color: rgba( var(--tblr-emphasis-color-rgb), .15 );--tblr-navbar-toggler-border-radius: var(--tblr-border-radius);--tblr-navbar-toggler-focus-width: 0;--tblr-navbar-toggler-transition: box-shadow .15s ease-in-out;position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding:var(--tblr-navbar-padding-y) var(--tblr-navbar-padding-x)}.navbar>.container,.navbar>.container-fluid,.navbar>.container-sm,.navbar>.container-md,.navbar>.container-lg,.navbar>.container-xl,.navbar>.container-xxl{display:flex;flex-wrap:inherit;align-items:center;justify-content:space-between}.navbar-brand:hover,.navbar-brand:focus{color:var(--tblr-navbar-brand-hover-color);text-decoration:none}.navbar-nav{--tblr-nav-link-padding-x: 0;--tblr-nav-link-padding-y: .5rem;--tblr-nav-link-font-weight: ;--tblr-nav-link-color: var(--tblr-navbar-color);--tblr-nav-link-hover-color: var(--tblr-navbar-hover-color);--tblr-nav-link-disabled-color: var(--tblr-navbar-disabled-color);display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-text a,.navbar-text a:hover,.navbar-text a:focus{color:var(--tblr-navbar-active-color)}@media (prefers-reduced-motion: reduce){.navbar-toggler{transition:none}}.navbar-nav-scroll{max-height:var(--tblr-scroll-height, 75vh);overflow-y:auto}@media (min-width: 576px){.navbar-expand-sm{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:var(--tblr-navbar-nav-link-padding-x);padding-left:var(--tblr-navbar-nav-link-padding-x)}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;box-shadow:none;transition:none}.navbar-expand-sm .offcanvas .offcanvas-header{display:none}.navbar-expand-sm .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width: 768px){.navbar-expand-md{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:var(--tblr-navbar-nav-link-padding-x);padding-left:var(--tblr-navbar-nav-link-padding-x)}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;box-shadow:none;transition:none}.navbar-expand-md .offcanvas .offcanvas-header{display:none}.navbar-expand-md .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width: 992px){.navbar-expand-lg{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:var(--tblr-navbar-nav-link-padding-x);padding-left:var(--tblr-navbar-nav-link-padding-x)}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;box-shadow:none;transition:none}.navbar-expand-lg .offcanvas .offcanvas-header{display:none}.navbar-expand-lg .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width: 1200px){.navbar-expand-xl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:var(--tblr-navbar-nav-link-padding-x);padding-left:var(--tblr-navbar-nav-link-padding-x)}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;box-shadow:none;transition:none}.navbar-expand-xl .offcanvas .offcanvas-header{display:none}.navbar-expand-xl .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width: 1400px){.navbar-expand-xxl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xxl .navbar-nav{flex-direction:row}.navbar-expand-xxl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xxl .navbar-nav .nav-link{padding-right:var(--tblr-navbar-nav-link-padding-x);padding-left:var(--tblr-navbar-nav-link-padding-x)}.navbar-expand-xxl .navbar-nav-scroll{overflow:visible}.navbar-expand-xxl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xxl .navbar-toggler{display:none}.navbar-expand-xxl .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;box-shadow:none;transition:none}.navbar-expand-xxl .offcanvas .offcanvas-header{display:none}.navbar-expand-xxl .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}.navbar-dark,.navbar[data-bs-theme=dark],body[data-bs-theme=dark] .navbar[data-bs-theme=light]{--tblr-navbar-color: rgba(255, 255, 255, .7);--tblr-navbar-hover-color: rgba(255, 255, 255, .75);--tblr-navbar-disabled-color: var(--tblr-disabled-color);--tblr-navbar-active-color: #ffffff;--tblr-navbar-brand-color: #ffffff;--tblr-navbar-brand-hover-color: #ffffff;--tblr-navbar-toggler-border-color: rgba(255, 255, 255, .1);--tblr-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.7%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}[data-bs-theme=dark] .navbar-toggler-icon,body[data-bs-theme=dark] [data-bs-theme=light] .navbar-toggler-icon{--tblr-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.7%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.card{--tblr-card-spacer-y: 1.25rem;--tblr-card-spacer-x: 1.25rem;--tblr-card-title-spacer-y: 1.25rem;--tblr-card-title-color: ;--tblr-card-subtitle-color: ;--tblr-card-border-width: var(--tblr-border-width);--tblr-card-border-color: var(--tblr-border-color-translucent);--tblr-card-border-radius: var(--tblr-border-radius);--tblr-card-box-shadow: var(--tblr-shadow-card);--tblr-card-inner-border-radius: calc( var(--tblr-border-radius) - (var(--tblr-border-width)) );--tblr-card-cap-padding-y: 1.25rem;--tblr-card-cap-padding-x: 1.25rem;--tblr-card-cap-bg: var(--tblr-bg-surface-tertiary);--tblr-card-cap-color: inherit;--tblr-card-height: ;--tblr-card-color: inherit;--tblr-card-bg: var(--tblr-bg-surface);--tblr-card-img-overlay-padding: 1rem;--tblr-card-group-margin: 1.5rem;position:relative;display:flex;flex-direction:column;min-width:0;height:var(--tblr-card-height);color:var(--tblr-body-color);word-wrap:break-word;background-color:var(--tblr-card-bg);background-clip:border-box;border:var(--tblr-card-border-width) solid var(--tblr-card-border-color);border-radius:var(--tblr-card-border-radius);box-shadow:var(--tblr-card-box-shadow)}.card>hr,.card>.hr{margin-right:0;margin-left:0}.card-header.summary{display:flex;flex-direction:column;padding:0;justify-content:center;flex-wrap:nowrap;align-items:flex-start}.card-img,.card-img-top,.card-img-bottom{width:100%}@media (min-width: 576px){.card-group{display:flex;flex-flow:row wrap}.card-group>.card{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-img-top,.card-group>.card:not(:last-child) .card-header{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-img-bottom,.card-group>.card:not(:last-child) .card-footer{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-img-top,.card-group>.card:not(:first-child) .card-header{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-img-bottom,.card-group>.card:not(:first-child) .card-footer{border-bottom-left-radius:0}}.accordion{--tblr-accordion-color: var(--tblr-body-color);--tblr-accordion-bg: transparent;--tblr-accordion-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out, border-radius .15s ease;--tblr-accordion-border-color: var(--tblr-border-color-translucent);--tblr-accordion-border-width: var(--tblr-border-width);--tblr-accordion-border-radius: var(--tblr-border-radius);--tblr-accordion-inner-border-radius: calc( var(--tblr-border-radius) - (var(--tblr-border-width)) );--tblr-accordion-btn-padding-x: 1.25rem;--tblr-accordion-btn-padding-y: 1rem;--tblr-accordion-btn-color: var(--tblr-body-color);--tblr-accordion-btn-bg: transparent;--tblr-accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23182433'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");--tblr-accordion-btn-icon-width: 1rem;--tblr-accordion-btn-icon-transform: rotate(-180deg);--tblr-accordion-btn-icon-transition: transform .2s ease-in-out;--tblr-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23002242'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");--tblr-accordion-btn-focus-border-color: var(--tblr-border-color-translucent);--tblr-accordion-btn-focus-box-shadow: 0 0 0 .25rem rgba(var(--tblr-primary-rgb), .25);--tblr-accordion-body-padding-x: 1.25rem;--tblr-accordion-body-padding-y: 1rem;--tblr-accordion-active-color: inherit;--tblr-accordion-active-bg: transparent}@media (prefers-reduced-motion: reduce){.accordion-button{transition:none}}@media (prefers-reduced-motion: reduce){.accordion-button:after{transition:none}}[data-bs-theme=dark] .accordion-button:after{--tblr-accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236698ca'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");--tblr-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236698ca'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e")}.breadcrumb{--tblr-breadcrumb-padding-x: 0;--tblr-breadcrumb-padding-y: 0;--tblr-breadcrumb-margin-bottom: 1rem;--tblr-breadcrumb-bg: ;--tblr-breadcrumb-border-radius: ;--tblr-breadcrumb-divider-color: var(--tblr-secondary);--tblr-breadcrumb-item-padding-x: .5rem;--tblr-breadcrumb-item-active-color: inherit;display:flex;flex-wrap:wrap;padding:var(--tblr-breadcrumb-padding-y) var(--tblr-breadcrumb-padding-x);margin-bottom:var(--tblr-breadcrumb-margin-bottom);font-size:var(--tblr-breadcrumb-font-size);list-style:none;background-color:var(--tblr-breadcrumb-bg);border-radius:var(--tblr-breadcrumb-border-radius)}.pagination{--tblr-pagination-padding-x: .25rem;--tblr-pagination-padding-y: .25rem;--tblr-pagination-font-size: .875rem;--tblr-pagination-color: var(--tblr-secondary);--tblr-pagination-bg: transparent;--tblr-pagination-border-width: 0;--tblr-pagination-border-color: var(--tblr-border-color);--tblr-pagination-border-radius: var(--tblr-border-radius);--tblr-pagination-hover-color: var(--tblr-link-hover-color);--tblr-pagination-hover-bg: var(--tblr-tertiary-bg);--tblr-pagination-hover-border-color: var(--tblr-border-color);--tblr-pagination-focus-color: var(--tblr-link-hover-color);--tblr-pagination-focus-bg: var(--tblr-secondary-bg);--tblr-pagination-focus-box-shadow: 0 0 0 .25rem rgba(var(--tblr-primary-rgb), .25);--tblr-pagination-active-color: #ffffff;--tblr-pagination-active-bg: var(--tblr-primary);--tblr-pagination-active-border-color: var(--tblr-primary);--tblr-pagination-disabled-color: var(--tblr-disabled-color);--tblr-pagination-disabled-bg: transparent;--tblr-pagination-disabled-border-color: var(--tblr-border-color);display:flex;padding-left:0;list-style:none}@media (prefers-reduced-motion: reduce){.page-link{transition:none}}.page-link.active,.active>.page-link{z-index:3;color:var(--tblr-pagination-active-color);background-color:var(--tblr-pagination-active-bg);border-color:var(--tblr-pagination-active-border-color)}.page-link.disabled,.disabled>.page-link{color:var(--tblr-pagination-disabled-color);pointer-events:none;background-color:var(--tblr-pagination-disabled-bg);border-color:var(--tblr-pagination-disabled-border-color)}.pagination-lg{--tblr-pagination-padding-x: 1.5rem;--tblr-pagination-padding-y: .75rem;--tblr-pagination-font-size: 1.09375rem;--tblr-pagination-border-radius: var(--tblr-border-radius-lg)}.pagination-sm{--tblr-pagination-padding-x: .5rem;--tblr-pagination-padding-y: .25rem;--tblr-pagination-font-size: .765625rem;--tblr-pagination-border-radius: var(--tblr-border-radius-sm)}.badge{--tblr-badge-padding-x: .5em;--tblr-badge-padding-y: .25em;--tblr-badge-font-size: 85.714285%;--tblr-badge-font-weight: var(--tblr-font-weight-medium);--tblr-badge-color: var(--tblr-secondary);--tblr-badge-border-radius: var(--tblr-border-radius);display:inline-block;padding:var(--tblr-badge-padding-y) var(--tblr-badge-padding-x);font-size:var(--tblr-badge-font-size);font-weight:var(--tblr-badge-font-weight);line-height:1;color:var(--tblr-badge-color);text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:var(--tblr-badge-border-radius)}.alert{--tblr-alert-bg: transparent;--tblr-alert-padding-x: 1rem;--tblr-alert-padding-y: .75rem;--tblr-alert-margin-bottom: 1rem;--tblr-alert-color: inherit;--tblr-alert-border-color: transparent;--tblr-alert-border: var(--tblr-border-width) solid var(--tblr-alert-border-color);--tblr-alert-border-radius: var(--tblr-border-radius);--tblr-alert-link-color: inherit;position:relative;padding:var(--tblr-alert-padding-y) var(--tblr-alert-padding-x);margin-bottom:var(--tblr-alert-margin-bottom);color:var(--tblr-alert-color);background-color:var(--tblr-alert-bg);border:var(--tblr-alert-border);border-radius:var(--tblr-alert-border-radius)}.alert-dismissible .btn-close{position:absolute;top:0;right:0;z-index:2;padding:.9375rem 1rem}.alert-primary{--tblr-alert-color: var(--tblr-primary-text-emphasis);--tblr-alert-bg: var(--tblr-primary-bg-subtle);--tblr-alert-border-color: var(--tblr-primary-border-subtle);--tblr-alert-link-color: var(--tblr-primary-text-emphasis)}.alert-secondary{--tblr-alert-color: var(--tblr-secondary-text-emphasis);--tblr-alert-bg: var(--tblr-secondary-bg-subtle);--tblr-alert-border-color: var(--tblr-secondary-border-subtle);--tblr-alert-link-color: var(--tblr-secondary-text-emphasis)}.alert-success{--tblr-alert-color: var(--tblr-success-text-emphasis);--tblr-alert-bg: var(--tblr-success-bg-subtle);--tblr-alert-border-color: var(--tblr-success-border-subtle);--tblr-alert-link-color: var(--tblr-success-text-emphasis)}.alert-info{--tblr-alert-color: var(--tblr-info-text-emphasis);--tblr-alert-bg: var(--tblr-info-bg-subtle);--tblr-alert-border-color: var(--tblr-info-border-subtle);--tblr-alert-link-color: var(--tblr-info-text-emphasis)}.alert-warning{--tblr-alert-color: var(--tblr-warning-text-emphasis);--tblr-alert-bg: var(--tblr-warning-bg-subtle);--tblr-alert-border-color: var(--tblr-warning-border-subtle);--tblr-alert-link-color: var(--tblr-warning-text-emphasis)}.alert-danger{--tblr-alert-color: var(--tblr-danger-text-emphasis);--tblr-alert-bg: var(--tblr-danger-bg-subtle);--tblr-alert-border-color: var(--tblr-danger-border-subtle);--tblr-alert-link-color: var(--tblr-danger-text-emphasis)}.alert-light{--tblr-alert-color: var(--tblr-light-text-emphasis);--tblr-alert-bg: var(--tblr-light-bg-subtle);--tblr-alert-border-color: var(--tblr-light-border-subtle);--tblr-alert-link-color: var(--tblr-light-text-emphasis)}.alert-dark{--tblr-alert-color: var(--tblr-dark-text-emphasis);--tblr-alert-bg: var(--tblr-dark-bg-subtle);--tblr-alert-border-color: var(--tblr-dark-border-subtle);--tblr-alert-link-color: var(--tblr-dark-text-emphasis)}.alert-muted{--tblr-alert-color: var(--tblr-muted-text-emphasis);--tblr-alert-bg: var(--tblr-muted-bg-subtle);--tblr-alert-border-color: var(--tblr-muted-border-subtle);--tblr-alert-link-color: var(--tblr-muted-text-emphasis)}.alert-blue{--tblr-alert-color: var(--tblr-blue-text-emphasis);--tblr-alert-bg: var(--tblr-blue-bg-subtle);--tblr-alert-border-color: var(--tblr-blue-border-subtle);--tblr-alert-link-color: var(--tblr-blue-text-emphasis)}.alert-azure{--tblr-alert-color: var(--tblr-azure-text-emphasis);--tblr-alert-bg: var(--tblr-azure-bg-subtle);--tblr-alert-border-color: var(--tblr-azure-border-subtle);--tblr-alert-link-color: var(--tblr-azure-text-emphasis)}.alert-indigo{--tblr-alert-color: var(--tblr-indigo-text-emphasis);--tblr-alert-bg: var(--tblr-indigo-bg-subtle);--tblr-alert-border-color: var(--tblr-indigo-border-subtle);--tblr-alert-link-color: var(--tblr-indigo-text-emphasis)}.alert-purple{--tblr-alert-color: var(--tblr-purple-text-emphasis);--tblr-alert-bg: var(--tblr-purple-bg-subtle);--tblr-alert-border-color: var(--tblr-purple-border-subtle);--tblr-alert-link-color: var(--tblr-purple-text-emphasis)}.alert-pink{--tblr-alert-color: var(--tblr-pink-text-emphasis);--tblr-alert-bg: var(--tblr-pink-bg-subtle);--tblr-alert-border-color: var(--tblr-pink-border-subtle);--tblr-alert-link-color: var(--tblr-pink-text-emphasis)}.alert-red{--tblr-alert-color: var(--tblr-red-text-emphasis);--tblr-alert-bg: var(--tblr-red-bg-subtle);--tblr-alert-border-color: var(--tblr-red-border-subtle);--tblr-alert-link-color: var(--tblr-red-text-emphasis)}.alert-orange{--tblr-alert-color: var(--tblr-orange-text-emphasis);--tblr-alert-bg: var(--tblr-orange-bg-subtle);--tblr-alert-border-color: var(--tblr-orange-border-subtle);--tblr-alert-link-color: var(--tblr-orange-text-emphasis)}.alert-yellow{--tblr-alert-color: var(--tblr-yellow-text-emphasis);--tblr-alert-bg: var(--tblr-yellow-bg-subtle);--tblr-alert-border-color: var(--tblr-yellow-border-subtle);--tblr-alert-link-color: var(--tblr-yellow-text-emphasis)}.alert-lime{--tblr-alert-color: var(--tblr-lime-text-emphasis);--tblr-alert-bg: var(--tblr-lime-bg-subtle);--tblr-alert-border-color: var(--tblr-lime-border-subtle);--tblr-alert-link-color: var(--tblr-lime-text-emphasis)}.alert-green{--tblr-alert-color: var(--tblr-green-text-emphasis);--tblr-alert-bg: var(--tblr-green-bg-subtle);--tblr-alert-border-color: var(--tblr-green-border-subtle);--tblr-alert-link-color: var(--tblr-green-text-emphasis)}.alert-teal{--tblr-alert-color: var(--tblr-teal-text-emphasis);--tblr-alert-bg: var(--tblr-teal-bg-subtle);--tblr-alert-border-color: var(--tblr-teal-border-subtle);--tblr-alert-link-color: var(--tblr-teal-text-emphasis)}.alert-cyan{--tblr-alert-color: var(--tblr-cyan-text-emphasis);--tblr-alert-bg: var(--tblr-cyan-bg-subtle);--tblr-alert-border-color: var(--tblr-cyan-border-subtle);--tblr-alert-link-color: var(--tblr-cyan-text-emphasis)}.alert-facebook{--tblr-alert-color: var(--tblr-facebook-text-emphasis);--tblr-alert-bg: var(--tblr-facebook-bg-subtle);--tblr-alert-border-color: var(--tblr-facebook-border-subtle);--tblr-alert-link-color: var(--tblr-facebook-text-emphasis)}.alert-twitter{--tblr-alert-color: var(--tblr-twitter-text-emphasis);--tblr-alert-bg: var(--tblr-twitter-bg-subtle);--tblr-alert-border-color: var(--tblr-twitter-border-subtle);--tblr-alert-link-color: var(--tblr-twitter-text-emphasis)}.alert-linkedin{--tblr-alert-color: var(--tblr-linkedin-text-emphasis);--tblr-alert-bg: var(--tblr-linkedin-bg-subtle);--tblr-alert-border-color: var(--tblr-linkedin-border-subtle);--tblr-alert-link-color: var(--tblr-linkedin-text-emphasis)}.alert-google{--tblr-alert-color: var(--tblr-google-text-emphasis);--tblr-alert-bg: var(--tblr-google-bg-subtle);--tblr-alert-border-color: var(--tblr-google-border-subtle);--tblr-alert-link-color: var(--tblr-google-text-emphasis)}.alert-youtube{--tblr-alert-color: var(--tblr-youtube-text-emphasis);--tblr-alert-bg: var(--tblr-youtube-bg-subtle);--tblr-alert-border-color: var(--tblr-youtube-border-subtle);--tblr-alert-link-color: var(--tblr-youtube-text-emphasis)}.alert-vimeo{--tblr-alert-color: var(--tblr-vimeo-text-emphasis);--tblr-alert-bg: var(--tblr-vimeo-bg-subtle);--tblr-alert-border-color: var(--tblr-vimeo-border-subtle);--tblr-alert-link-color: var(--tblr-vimeo-text-emphasis)}.alert-dribbble{--tblr-alert-color: var(--tblr-dribbble-text-emphasis);--tblr-alert-bg: var(--tblr-dribbble-bg-subtle);--tblr-alert-border-color: var(--tblr-dribbble-border-subtle);--tblr-alert-link-color: var(--tblr-dribbble-text-emphasis)}.alert-github{--tblr-alert-color: var(--tblr-github-text-emphasis);--tblr-alert-bg: var(--tblr-github-bg-subtle);--tblr-alert-border-color: var(--tblr-github-border-subtle);--tblr-alert-link-color: var(--tblr-github-text-emphasis)}.alert-instagram{--tblr-alert-color: var(--tblr-instagram-text-emphasis);--tblr-alert-bg: var(--tblr-instagram-bg-subtle);--tblr-alert-border-color: var(--tblr-instagram-border-subtle);--tblr-alert-link-color: var(--tblr-instagram-text-emphasis)}.alert-pinterest{--tblr-alert-color: var(--tblr-pinterest-text-emphasis);--tblr-alert-bg: var(--tblr-pinterest-bg-subtle);--tblr-alert-border-color: var(--tblr-pinterest-border-subtle);--tblr-alert-link-color: var(--tblr-pinterest-text-emphasis)}.alert-vk{--tblr-alert-color: var(--tblr-vk-text-emphasis);--tblr-alert-bg: var(--tblr-vk-bg-subtle);--tblr-alert-border-color: var(--tblr-vk-border-subtle);--tblr-alert-link-color: var(--tblr-vk-text-emphasis)}.alert-rss{--tblr-alert-color: var(--tblr-rss-text-emphasis);--tblr-alert-bg: var(--tblr-rss-bg-subtle);--tblr-alert-border-color: var(--tblr-rss-border-subtle);--tblr-alert-link-color: var(--tblr-rss-text-emphasis)}.alert-flickr{--tblr-alert-color: var(--tblr-flickr-text-emphasis);--tblr-alert-bg: var(--tblr-flickr-bg-subtle);--tblr-alert-border-color: var(--tblr-flickr-border-subtle);--tblr-alert-link-color: var(--tblr-flickr-text-emphasis)}.alert-bitbucket{--tblr-alert-color: var(--tblr-bitbucket-text-emphasis);--tblr-alert-bg: var(--tblr-bitbucket-bg-subtle);--tblr-alert-border-color: var(--tblr-bitbucket-border-subtle);--tblr-alert-link-color: var(--tblr-bitbucket-text-emphasis)}.alert-tabler{--tblr-alert-color: var(--tblr-tabler-text-emphasis);--tblr-alert-bg: var(--tblr-tabler-bg-subtle);--tblr-alert-border-color: var(--tblr-tabler-border-subtle);--tblr-alert-link-color: var(--tblr-tabler-text-emphasis)}.progress,.progress-stacked{--tblr-progress-height: .5rem;--tblr-progress-font-size: .65625rem;--tblr-progress-bg: var(--tblr-border-color);--tblr-progress-border-radius: var(--tblr-border-radius);--tblr-progress-box-shadow: var(--tblr-box-shadow-inset);--tblr-progress-bar-color: #ffffff;--tblr-progress-bar-bg: var(--tblr-primary);--tblr-progress-bar-transition: width .6s ease;display:flex;height:var(--tblr-progress-height);overflow:hidden;font-size:var(--tblr-progress-font-size);background-color:var(--tblr-progress-bg);border-radius:var(--tblr-progress-border-radius);box-shadow:var(--tblr-progress-box-shadow)}@media (prefers-reduced-motion: reduce){.progress-bar{transition:none}}@media (prefers-reduced-motion: reduce){.progress-bar-animated{animation:none}}.list-group{--tblr-list-group-color: var(--tblr-body-color);--tblr-list-group-bg: inherit;--tblr-list-group-border-color: var(--tblr-border-color);--tblr-list-group-border-width: var(--tblr-border-width);--tblr-list-group-border-radius: var(--tblr-border-radius);--tblr-list-group-item-padding-x: 1.25rem;--tblr-list-group-item-padding-y: 1.25rem;--tblr-list-group-action-color: inherit;--tblr-list-group-action-hover-color: var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg: rgba(var(--tblr-text-secondary-rgb), .04);--tblr-list-group-action-active-color: var(--tblr-body-color);--tblr-list-group-action-active-bg: var(--tblr-secondary-bg);--tblr-list-group-disabled-color: var(--tblr-secondary-color);--tblr-list-group-disabled-bg: inherit;--tblr-list-group-active-color: inherit;--tblr-list-group-active-bg: var(--tblr-active-bg);--tblr-list-group-active-border-color: var(--tblr-border-color);display:flex;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:var(--tblr-list-group-border-radius)}.list-group-item-action:hover,.list-group-item-action:focus{z-index:1;color:var(--tblr-list-group-action-hover-color);text-decoration:none;background-color:var(--tblr-list-group-action-hover-bg)}@media (min-width: 576px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--tblr-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--tblr-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:var(--tblr-list-group-border-width);border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--tblr-list-group-border-width));border-left-width:var(--tblr-list-group-border-width)}}@media (min-width: 768px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--tblr-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--tblr-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:var(--tblr-list-group-border-width);border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--tblr-list-group-border-width));border-left-width:var(--tblr-list-group-border-width)}}@media (min-width: 992px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--tblr-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--tblr-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:var(--tblr-list-group-border-width);border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--tblr-list-group-border-width));border-left-width:var(--tblr-list-group-border-width)}}@media (min-width: 1200px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--tblr-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--tblr-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:var(--tblr-list-group-border-width);border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--tblr-list-group-border-width));border-left-width:var(--tblr-list-group-border-width)}}@media (min-width: 1400px){.list-group-horizontal-xxl{flex-direction:row}.list-group-horizontal-xxl>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--tblr-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-xxl>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--tblr-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-xxl>.list-group-item.active{margin-top:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item{border-top-width:var(--tblr-list-group-border-width);border-left-width:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--tblr-list-group-border-width));border-left-width:var(--tblr-list-group-border-width)}}.list-group-item-primary{--tblr-list-group-color: var(--tblr-primary-text-emphasis);--tblr-list-group-bg: var(--tblr-primary-bg-subtle);--tblr-list-group-border-color: var(--tblr-primary-border-subtle);--tblr-list-group-action-hover-color: var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg: var(--tblr-primary-border-subtle);--tblr-list-group-action-active-color: var(--tblr-emphasis-color);--tblr-list-group-action-active-bg: var(--tblr-primary-border-subtle);--tblr-list-group-active-color: var(--tblr-primary-bg-subtle);--tblr-list-group-active-bg: var(--tblr-primary-text-emphasis);--tblr-list-group-active-border-color: var(--tblr-primary-text-emphasis)}.list-group-item-secondary{--tblr-list-group-color: var(--tblr-secondary-text-emphasis);--tblr-list-group-bg: var(--tblr-secondary-bg-subtle);--tblr-list-group-border-color: var(--tblr-secondary-border-subtle);--tblr-list-group-action-hover-color: var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg: var(--tblr-secondary-border-subtle);--tblr-list-group-action-active-color: var(--tblr-emphasis-color);--tblr-list-group-action-active-bg: var(--tblr-secondary-border-subtle);--tblr-list-group-active-color: var(--tblr-secondary-bg-subtle);--tblr-list-group-active-bg: var(--tblr-secondary-text-emphasis);--tblr-list-group-active-border-color: var(--tblr-secondary-text-emphasis)}.list-group-item-success{--tblr-list-group-color: var(--tblr-success-text-emphasis);--tblr-list-group-bg: var(--tblr-success-bg-subtle);--tblr-list-group-border-color: var(--tblr-success-border-subtle);--tblr-list-group-action-hover-color: var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg: var(--tblr-success-border-subtle);--tblr-list-group-action-active-color: var(--tblr-emphasis-color);--tblr-list-group-action-active-bg: var(--tblr-success-border-subtle);--tblr-list-group-active-color: var(--tblr-success-bg-subtle);--tblr-list-group-active-bg: var(--tblr-success-text-emphasis);--tblr-list-group-active-border-color: var(--tblr-success-text-emphasis)}.list-group-item-info{--tblr-list-group-color: var(--tblr-info-text-emphasis);--tblr-list-group-bg: var(--tblr-info-bg-subtle);--tblr-list-group-border-color: var(--tblr-info-border-subtle);--tblr-list-group-action-hover-color: var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg: var(--tblr-info-border-subtle);--tblr-list-group-action-active-color: var(--tblr-emphasis-color);--tblr-list-group-action-active-bg: var(--tblr-info-border-subtle);--tblr-list-group-active-color: var(--tblr-info-bg-subtle);--tblr-list-group-active-bg: var(--tblr-info-text-emphasis);--tblr-list-group-active-border-color: var(--tblr-info-text-emphasis)}.list-group-item-warning{--tblr-list-group-color: var(--tblr-warning-text-emphasis);--tblr-list-group-bg: var(--tblr-warning-bg-subtle);--tblr-list-group-border-color: var(--tblr-warning-border-subtle);--tblr-list-group-action-hover-color: var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg: var(--tblr-warning-border-subtle);--tblr-list-group-action-active-color: var(--tblr-emphasis-color);--tblr-list-group-action-active-bg: var(--tblr-warning-border-subtle);--tblr-list-group-active-color: var(--tblr-warning-bg-subtle);--tblr-list-group-active-bg: var(--tblr-warning-text-emphasis);--tblr-list-group-active-border-color: var(--tblr-warning-text-emphasis)}.list-group-item-danger{--tblr-list-group-color: var(--tblr-danger-text-emphasis);--tblr-list-group-bg: var(--tblr-danger-bg-subtle);--tblr-list-group-border-color: var(--tblr-danger-border-subtle);--tblr-list-group-action-hover-color: var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg: var(--tblr-danger-border-subtle);--tblr-list-group-action-active-color: var(--tblr-emphasis-color);--tblr-list-group-action-active-bg: var(--tblr-danger-border-subtle);--tblr-list-group-active-color: var(--tblr-danger-bg-subtle);--tblr-list-group-active-bg: var(--tblr-danger-text-emphasis);--tblr-list-group-active-border-color: var(--tblr-danger-text-emphasis)}.list-group-item-light{--tblr-list-group-color: var(--tblr-light-text-emphasis);--tblr-list-group-bg: var(--tblr-light-bg-subtle);--tblr-list-group-border-color: var(--tblr-light-border-subtle);--tblr-list-group-action-hover-color: var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg: var(--tblr-light-border-subtle);--tblr-list-group-action-active-color: var(--tblr-emphasis-color);--tblr-list-group-action-active-bg: var(--tblr-light-border-subtle);--tblr-list-group-active-color: var(--tblr-light-bg-subtle);--tblr-list-group-active-bg: var(--tblr-light-text-emphasis);--tblr-list-group-active-border-color: var(--tblr-light-text-emphasis)}.list-group-item-dark{--tblr-list-group-color: var(--tblr-dark-text-emphasis);--tblr-list-group-bg: var(--tblr-dark-bg-subtle);--tblr-list-group-border-color: var(--tblr-dark-border-subtle);--tblr-list-group-action-hover-color: var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg: var(--tblr-dark-border-subtle);--tblr-list-group-action-active-color: var(--tblr-emphasis-color);--tblr-list-group-action-active-bg: var(--tblr-dark-border-subtle);--tblr-list-group-active-color: var(--tblr-dark-bg-subtle);--tblr-list-group-active-bg: var(--tblr-dark-text-emphasis);--tblr-list-group-active-border-color: var(--tblr-dark-text-emphasis)}.list-group-item-muted{--tblr-list-group-color: var(--tblr-muted-text-emphasis);--tblr-list-group-bg: var(--tblr-muted-bg-subtle);--tblr-list-group-border-color: var(--tblr-muted-border-subtle);--tblr-list-group-action-hover-color: var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg: var(--tblr-muted-border-subtle);--tblr-list-group-action-active-color: var(--tblr-emphasis-color);--tblr-list-group-action-active-bg: var(--tblr-muted-border-subtle);--tblr-list-group-active-color: var(--tblr-muted-bg-subtle);--tblr-list-group-active-bg: var(--tblr-muted-text-emphasis);--tblr-list-group-active-border-color: var(--tblr-muted-text-emphasis)}.list-group-item-blue{--tblr-list-group-color: var(--tblr-blue-text-emphasis);--tblr-list-group-bg: var(--tblr-blue-bg-subtle);--tblr-list-group-border-color: var(--tblr-blue-border-subtle);--tblr-list-group-action-hover-color: var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg: var(--tblr-blue-border-subtle);--tblr-list-group-action-active-color: var(--tblr-emphasis-color);--tblr-list-group-action-active-bg: var(--tblr-blue-border-subtle);--tblr-list-group-active-color: var(--tblr-blue-bg-subtle);--tblr-list-group-active-bg: var(--tblr-blue-text-emphasis);--tblr-list-group-active-border-color: var(--tblr-blue-text-emphasis)}.list-group-item-azure{--tblr-list-group-color: var(--tblr-azure-text-emphasis);--tblr-list-group-bg: var(--tblr-azure-bg-subtle);--tblr-list-group-border-color: var(--tblr-azure-border-subtle);--tblr-list-group-action-hover-color: var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg: var(--tblr-azure-border-subtle);--tblr-list-group-action-active-color: var(--tblr-emphasis-color);--tblr-list-group-action-active-bg: var(--tblr-azure-border-subtle);--tblr-list-group-active-color: var(--tblr-azure-bg-subtle);--tblr-list-group-active-bg: var(--tblr-azure-text-emphasis);--tblr-list-group-active-border-color: var(--tblr-azure-text-emphasis)}.list-group-item-indigo{--tblr-list-group-color: var(--tblr-indigo-text-emphasis);--tblr-list-group-bg: var(--tblr-indigo-bg-subtle);--tblr-list-group-border-color: var(--tblr-indigo-border-subtle);--tblr-list-group-action-hover-color: var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg: var(--tblr-indigo-border-subtle);--tblr-list-group-action-active-color: var(--tblr-emphasis-color);--tblr-list-group-action-active-bg: var(--tblr-indigo-border-subtle);--tblr-list-group-active-color: var(--tblr-indigo-bg-subtle);--tblr-list-group-active-bg: var(--tblr-indigo-text-emphasis);--tblr-list-group-active-border-color: var(--tblr-indigo-text-emphasis)}.list-group-item-purple{--tblr-list-group-color: var(--tblr-purple-text-emphasis);--tblr-list-group-bg: var(--tblr-purple-bg-subtle);--tblr-list-group-border-color: var(--tblr-purple-border-subtle);--tblr-list-group-action-hover-color: var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg: var(--tblr-purple-border-subtle);--tblr-list-group-action-active-color: var(--tblr-emphasis-color);--tblr-list-group-action-active-bg: var(--tblr-purple-border-subtle);--tblr-list-group-active-color: var(--tblr-purple-bg-subtle);--tblr-list-group-active-bg: var(--tblr-purple-text-emphasis);--tblr-list-group-active-border-color: var(--tblr-purple-text-emphasis)}.list-group-item-pink{--tblr-list-group-color: var(--tblr-pink-text-emphasis);--tblr-list-group-bg: var(--tblr-pink-bg-subtle);--tblr-list-group-border-color: var(--tblr-pink-border-subtle);--tblr-list-group-action-hover-color: var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg: var(--tblr-pink-border-subtle);--tblr-list-group-action-active-color: var(--tblr-emphasis-color);--tblr-list-group-action-active-bg: var(--tblr-pink-border-subtle);--tblr-list-group-active-color: var(--tblr-pink-bg-subtle);--tblr-list-group-active-bg: var(--tblr-pink-text-emphasis);--tblr-list-group-active-border-color: var(--tblr-pink-text-emphasis)}.list-group-item-red{--tblr-list-group-color: var(--tblr-red-text-emphasis);--tblr-list-group-bg: var(--tblr-red-bg-subtle);--tblr-list-group-border-color: var(--tblr-red-border-subtle);--tblr-list-group-action-hover-color: var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg: var(--tblr-red-border-subtle);--tblr-list-group-action-active-color: var(--tblr-emphasis-color);--tblr-list-group-action-active-bg: var(--tblr-red-border-subtle);--tblr-list-group-active-color: var(--tblr-red-bg-subtle);--tblr-list-group-active-bg: var(--tblr-red-text-emphasis);--tblr-list-group-active-border-color: var(--tblr-red-text-emphasis)}.list-group-item-orange{--tblr-list-group-color: var(--tblr-orange-text-emphasis);--tblr-list-group-bg: var(--tblr-orange-bg-subtle);--tblr-list-group-border-color: var(--tblr-orange-border-subtle);--tblr-list-group-action-hover-color: var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg: var(--tblr-orange-border-subtle);--tblr-list-group-action-active-color: var(--tblr-emphasis-color);--tblr-list-group-action-active-bg: var(--tblr-orange-border-subtle);--tblr-list-group-active-color: var(--tblr-orange-bg-subtle);--tblr-list-group-active-bg: var(--tblr-orange-text-emphasis);--tblr-list-group-active-border-color: var(--tblr-orange-text-emphasis)}.list-group-item-yellow{--tblr-list-group-color: var(--tblr-yellow-text-emphasis);--tblr-list-group-bg: var(--tblr-yellow-bg-subtle);--tblr-list-group-border-color: var(--tblr-yellow-border-subtle);--tblr-list-group-action-hover-color: var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg: var(--tblr-yellow-border-subtle);--tblr-list-group-action-active-color: var(--tblr-emphasis-color);--tblr-list-group-action-active-bg: var(--tblr-yellow-border-subtle);--tblr-list-group-active-color: var(--tblr-yellow-bg-subtle);--tblr-list-group-active-bg: var(--tblr-yellow-text-emphasis);--tblr-list-group-active-border-color: var(--tblr-yellow-text-emphasis)}.list-group-item-lime{--tblr-list-group-color: var(--tblr-lime-text-emphasis);--tblr-list-group-bg: var(--tblr-lime-bg-subtle);--tblr-list-group-border-color: var(--tblr-lime-border-subtle);--tblr-list-group-action-hover-color: var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg: var(--tblr-lime-border-subtle);--tblr-list-group-action-active-color: var(--tblr-emphasis-color);--tblr-list-group-action-active-bg: var(--tblr-lime-border-subtle);--tblr-list-group-active-color: var(--tblr-lime-bg-subtle);--tblr-list-group-active-bg: var(--tblr-lime-text-emphasis);--tblr-list-group-active-border-color: var(--tblr-lime-text-emphasis)}.list-group-item-green{--tblr-list-group-color: var(--tblr-green-text-emphasis);--tblr-list-group-bg: var(--tblr-green-bg-subtle);--tblr-list-group-border-color: var(--tblr-green-border-subtle);--tblr-list-group-action-hover-color: var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg: var(--tblr-green-border-subtle);--tblr-list-group-action-active-color: var(--tblr-emphasis-color);--tblr-list-group-action-active-bg: var(--tblr-green-border-subtle);--tblr-list-group-active-color: var(--tblr-green-bg-subtle);--tblr-list-group-active-bg: var(--tblr-green-text-emphasis);--tblr-list-group-active-border-color: var(--tblr-green-text-emphasis)}.list-group-item-teal{--tblr-list-group-color: var(--tblr-teal-text-emphasis);--tblr-list-group-bg: var(--tblr-teal-bg-subtle);--tblr-list-group-border-color: var(--tblr-teal-border-subtle);--tblr-list-group-action-hover-color: var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg: var(--tblr-teal-border-subtle);--tblr-list-group-action-active-color: var(--tblr-emphasis-color);--tblr-list-group-action-active-bg: var(--tblr-teal-border-subtle);--tblr-list-group-active-color: var(--tblr-teal-bg-subtle);--tblr-list-group-active-bg: var(--tblr-teal-text-emphasis);--tblr-list-group-active-border-color: var(--tblr-teal-text-emphasis)}.list-group-item-cyan{--tblr-list-group-color: var(--tblr-cyan-text-emphasis);--tblr-list-group-bg: var(--tblr-cyan-bg-subtle);--tblr-list-group-border-color: var(--tblr-cyan-border-subtle);--tblr-list-group-action-hover-color: var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg: var(--tblr-cyan-border-subtle);--tblr-list-group-action-active-color: var(--tblr-emphasis-color);--tblr-list-group-action-active-bg: var(--tblr-cyan-border-subtle);--tblr-list-group-active-color: var(--tblr-cyan-bg-subtle);--tblr-list-group-active-bg: var(--tblr-cyan-text-emphasis);--tblr-list-group-active-border-color: var(--tblr-cyan-text-emphasis)}.list-group-item-facebook{--tblr-list-group-color: var(--tblr-facebook-text-emphasis);--tblr-list-group-bg: var(--tblr-facebook-bg-subtle);--tblr-list-group-border-color: var(--tblr-facebook-border-subtle);--tblr-list-group-action-hover-color: var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg: var(--tblr-facebook-border-subtle);--tblr-list-group-action-active-color: var(--tblr-emphasis-color);--tblr-list-group-action-active-bg: var(--tblr-facebook-border-subtle);--tblr-list-group-active-color: var(--tblr-facebook-bg-subtle);--tblr-list-group-active-bg: var(--tblr-facebook-text-emphasis);--tblr-list-group-active-border-color: var(--tblr-facebook-text-emphasis)}.list-group-item-twitter{--tblr-list-group-color: var(--tblr-twitter-text-emphasis);--tblr-list-group-bg: var(--tblr-twitter-bg-subtle);--tblr-list-group-border-color: var(--tblr-twitter-border-subtle);--tblr-list-group-action-hover-color: var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg: var(--tblr-twitter-border-subtle);--tblr-list-group-action-active-color: var(--tblr-emphasis-color);--tblr-list-group-action-active-bg: var(--tblr-twitter-border-subtle);--tblr-list-group-active-color: var(--tblr-twitter-bg-subtle);--tblr-list-group-active-bg: var(--tblr-twitter-text-emphasis);--tblr-list-group-active-border-color: var(--tblr-twitter-text-emphasis)}.list-group-item-linkedin{--tblr-list-group-color: var(--tblr-linkedin-text-emphasis);--tblr-list-group-bg: var(--tblr-linkedin-bg-subtle);--tblr-list-group-border-color: var(--tblr-linkedin-border-subtle);--tblr-list-group-action-hover-color: var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg: var(--tblr-linkedin-border-subtle);--tblr-list-group-action-active-color: var(--tblr-emphasis-color);--tblr-list-group-action-active-bg: var(--tblr-linkedin-border-subtle);--tblr-list-group-active-color: var(--tblr-linkedin-bg-subtle);--tblr-list-group-active-bg: var(--tblr-linkedin-text-emphasis);--tblr-list-group-active-border-color: var(--tblr-linkedin-text-emphasis)}.list-group-item-google{--tblr-list-group-color: var(--tblr-google-text-emphasis);--tblr-list-group-bg: var(--tblr-google-bg-subtle);--tblr-list-group-border-color: var(--tblr-google-border-subtle);--tblr-list-group-action-hover-color: var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg: var(--tblr-google-border-subtle);--tblr-list-group-action-active-color: var(--tblr-emphasis-color);--tblr-list-group-action-active-bg: var(--tblr-google-border-subtle);--tblr-list-group-active-color: var(--tblr-google-bg-subtle);--tblr-list-group-active-bg: var(--tblr-google-text-emphasis);--tblr-list-group-active-border-color: var(--tblr-google-text-emphasis)}.list-group-item-youtube{--tblr-list-group-color: var(--tblr-youtube-text-emphasis);--tblr-list-group-bg: var(--tblr-youtube-bg-subtle);--tblr-list-group-border-color: var(--tblr-youtube-border-subtle);--tblr-list-group-action-hover-color: var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg: var(--tblr-youtube-border-subtle);--tblr-list-group-action-active-color: var(--tblr-emphasis-color);--tblr-list-group-action-active-bg: var(--tblr-youtube-border-subtle);--tblr-list-group-active-color: var(--tblr-youtube-bg-subtle);--tblr-list-group-active-bg: var(--tblr-youtube-text-emphasis);--tblr-list-group-active-border-color: var(--tblr-youtube-text-emphasis)}.list-group-item-vimeo{--tblr-list-group-color: var(--tblr-vimeo-text-emphasis);--tblr-list-group-bg: var(--tblr-vimeo-bg-subtle);--tblr-list-group-border-color: var(--tblr-vimeo-border-subtle);--tblr-list-group-action-hover-color: var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg: var(--tblr-vimeo-border-subtle);--tblr-list-group-action-active-color: var(--tblr-emphasis-color);--tblr-list-group-action-active-bg: var(--tblr-vimeo-border-subtle);--tblr-list-group-active-color: var(--tblr-vimeo-bg-subtle);--tblr-list-group-active-bg: var(--tblr-vimeo-text-emphasis);--tblr-list-group-active-border-color: var(--tblr-vimeo-text-emphasis)}.list-group-item-dribbble{--tblr-list-group-color: var(--tblr-dribbble-text-emphasis);--tblr-list-group-bg: var(--tblr-dribbble-bg-subtle);--tblr-list-group-border-color: var(--tblr-dribbble-border-subtle);--tblr-list-group-action-hover-color: var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg: var(--tblr-dribbble-border-subtle);--tblr-list-group-action-active-color: var(--tblr-emphasis-color);--tblr-list-group-action-active-bg: var(--tblr-dribbble-border-subtle);--tblr-list-group-active-color: var(--tblr-dribbble-bg-subtle);--tblr-list-group-active-bg: var(--tblr-dribbble-text-emphasis);--tblr-list-group-active-border-color: var(--tblr-dribbble-text-emphasis)}.list-group-item-github{--tblr-list-group-color: var(--tblr-github-text-emphasis);--tblr-list-group-bg: var(--tblr-github-bg-subtle);--tblr-list-group-border-color: var(--tblr-github-border-subtle);--tblr-list-group-action-hover-color: var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg: var(--tblr-github-border-subtle);--tblr-list-group-action-active-color: var(--tblr-emphasis-color);--tblr-list-group-action-active-bg: var(--tblr-github-border-subtle);--tblr-list-group-active-color: var(--tblr-github-bg-subtle);--tblr-list-group-active-bg: var(--tblr-github-text-emphasis);--tblr-list-group-active-border-color: var(--tblr-github-text-emphasis)}.list-group-item-instagram{--tblr-list-group-color: var(--tblr-instagram-text-emphasis);--tblr-list-group-bg: var(--tblr-instagram-bg-subtle);--tblr-list-group-border-color: var(--tblr-instagram-border-subtle);--tblr-list-group-action-hover-color: var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg: var(--tblr-instagram-border-subtle);--tblr-list-group-action-active-color: var(--tblr-emphasis-color);--tblr-list-group-action-active-bg: var(--tblr-instagram-border-subtle);--tblr-list-group-active-color: var(--tblr-instagram-bg-subtle);--tblr-list-group-active-bg: var(--tblr-instagram-text-emphasis);--tblr-list-group-active-border-color: var(--tblr-instagram-text-emphasis)}.list-group-item-pinterest{--tblr-list-group-color: var(--tblr-pinterest-text-emphasis);--tblr-list-group-bg: var(--tblr-pinterest-bg-subtle);--tblr-list-group-border-color: var(--tblr-pinterest-border-subtle);--tblr-list-group-action-hover-color: var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg: var(--tblr-pinterest-border-subtle);--tblr-list-group-action-active-color: var(--tblr-emphasis-color);--tblr-list-group-action-active-bg: var(--tblr-pinterest-border-subtle);--tblr-list-group-active-color: var(--tblr-pinterest-bg-subtle);--tblr-list-group-active-bg: var(--tblr-pinterest-text-emphasis);--tblr-list-group-active-border-color: var(--tblr-pinterest-text-emphasis)}.list-group-item-vk{--tblr-list-group-color: var(--tblr-vk-text-emphasis);--tblr-list-group-bg: var(--tblr-vk-bg-subtle);--tblr-list-group-border-color: var(--tblr-vk-border-subtle);--tblr-list-group-action-hover-color: var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg: var(--tblr-vk-border-subtle);--tblr-list-group-action-active-color: var(--tblr-emphasis-color);--tblr-list-group-action-active-bg: var(--tblr-vk-border-subtle);--tblr-list-group-active-color: var(--tblr-vk-bg-subtle);--tblr-list-group-active-bg: var(--tblr-vk-text-emphasis);--tblr-list-group-active-border-color: var(--tblr-vk-text-emphasis)}.list-group-item-rss{--tblr-list-group-color: var(--tblr-rss-text-emphasis);--tblr-list-group-bg: var(--tblr-rss-bg-subtle);--tblr-list-group-border-color: var(--tblr-rss-border-subtle);--tblr-list-group-action-hover-color: var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg: var(--tblr-rss-border-subtle);--tblr-list-group-action-active-color: var(--tblr-emphasis-color);--tblr-list-group-action-active-bg: var(--tblr-rss-border-subtle);--tblr-list-group-active-color: var(--tblr-rss-bg-subtle);--tblr-list-group-active-bg: var(--tblr-rss-text-emphasis);--tblr-list-group-active-border-color: var(--tblr-rss-text-emphasis)}.list-group-item-flickr{--tblr-list-group-color: var(--tblr-flickr-text-emphasis);--tblr-list-group-bg: var(--tblr-flickr-bg-subtle);--tblr-list-group-border-color: var(--tblr-flickr-border-subtle);--tblr-list-group-action-hover-color: var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg: var(--tblr-flickr-border-subtle);--tblr-list-group-action-active-color: var(--tblr-emphasis-color);--tblr-list-group-action-active-bg: var(--tblr-flickr-border-subtle);--tblr-list-group-active-color: var(--tblr-flickr-bg-subtle);--tblr-list-group-active-bg: var(--tblr-flickr-text-emphasis);--tblr-list-group-active-border-color: var(--tblr-flickr-text-emphasis)}.list-group-item-bitbucket{--tblr-list-group-color: var(--tblr-bitbucket-text-emphasis);--tblr-list-group-bg: var(--tblr-bitbucket-bg-subtle);--tblr-list-group-border-color: var(--tblr-bitbucket-border-subtle);--tblr-list-group-action-hover-color: var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg: var(--tblr-bitbucket-border-subtle);--tblr-list-group-action-active-color: var(--tblr-emphasis-color);--tblr-list-group-action-active-bg: var(--tblr-bitbucket-border-subtle);--tblr-list-group-active-color: var(--tblr-bitbucket-bg-subtle);--tblr-list-group-active-bg: var(--tblr-bitbucket-text-emphasis);--tblr-list-group-active-border-color: var(--tblr-bitbucket-text-emphasis)}.list-group-item-tabler{--tblr-list-group-color: var(--tblr-tabler-text-emphasis);--tblr-list-group-bg: var(--tblr-tabler-bg-subtle);--tblr-list-group-border-color: var(--tblr-tabler-border-subtle);--tblr-list-group-action-hover-color: var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg: var(--tblr-tabler-border-subtle);--tblr-list-group-action-active-color: var(--tblr-emphasis-color);--tblr-list-group-action-active-bg: var(--tblr-tabler-border-subtle);--tblr-list-group-active-color: var(--tblr-tabler-bg-subtle);--tblr-list-group-active-bg: var(--tblr-tabler-text-emphasis);--tblr-list-group-active-border-color: var(--tblr-tabler-text-emphasis)}.btn-close{--tblr-btn-close-color: #182433;--tblr-btn-close-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23182433'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/%3e%3c/svg%3e");--tblr-btn-close-opacity: .4;--tblr-btn-close-hover-opacity: .75;--tblr-btn-close-focus-shadow: 0 0 0 .25rem rgba(var(--tblr-primary-rgb), .25);--tblr-btn-close-focus-opacity: 1;--tblr-btn-close-disabled-opacity: .25;--tblr-btn-close-white-filter: invert(1) grayscale(100%) brightness(200%);box-sizing:content-box;width:1em;height:1em;padding:.25em;color:var(--tblr-btn-close-color);background:transparent var(--tblr-btn-close-bg) center/1em auto no-repeat;border:0;border-radius:4px;opacity:var(--tblr-btn-close-opacity)}.btn-close:disabled,.btn-close.disabled{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;opacity:var(--tblr-btn-close-disabled-opacity)}.btn-close-white,[data-bs-theme=dark] .btn-close,body[data-bs-theme=dark] [data-bs-theme=light] .btn-close{filter:var(--tblr-btn-close-white-filter)}.toast{--tblr-toast-zindex: 1090;--tblr-toast-padding-x: .75rem;--tblr-toast-padding-y: .5rem;--tblr-toast-spacing: calc(var(--tblr-page-padding) * 2);--tblr-toast-max-width: 350px;--tblr-toast-font-size: .875rem;--tblr-toast-color: ;--tblr-toast-bg: rgba(var(--tblr-body-bg-rgb), .85);--tblr-toast-border-width: var(--tblr-border-width);--tblr-toast-border-color: var(--tblr-border-color);--tblr-toast-border-radius: var(--tblr-border-radius);--tblr-toast-box-shadow: var(--tblr-box-shadow);--tblr-toast-header-color: var(--tblr-secondary);--tblr-toast-header-bg: rgba(var(--tblr-body-bg-rgb), .85);--tblr-toast-header-border-color: var(--tblr-border-color);width:var(--tblr-toast-max-width);max-width:100%;font-size:var(--tblr-toast-font-size);color:var(--tblr-toast-color);pointer-events:auto;background-color:var(--tblr-toast-bg);background-clip:padding-box;border:var(--tblr-toast-border-width) solid var(--tblr-toast-border-color);box-shadow:var(--tblr-toast-box-shadow);border-radius:var(--tblr-toast-border-radius)}.toast-container{--tblr-toast-zindex: 1090;position:absolute;z-index:var(--tblr-toast-zindex);width:-webkit-max-content;width:-moz-max-content;width:max-content;max-width:100%;pointer-events:none}.modal{--tblr-modal-zindex: 1055;--tblr-modal-width: 540px;--tblr-modal-padding: 1.5rem;--tblr-modal-margin: .5rem;--tblr-modal-color: ;--tblr-modal-bg: var(--tblr-bg-surface);--tblr-modal-border-color: transparent;--tblr-modal-border-width: var(--tblr-border-width);--tblr-modal-border-radius: var(--tblr-border-radius-lg);--tblr-modal-box-shadow: 0 .125rem .25rem rgba(0, 0, 0, .075);--tblr-modal-inner-border-radius: calc(var(--tblr-modal-border-radius) - 1px);--tblr-modal-header-padding-x: 1.5rem;--tblr-modal-header-padding-y: 1.5rem;--tblr-modal-header-padding: 1.5rem;--tblr-modal-header-border-color: var(--tblr-border-color);--tblr-modal-header-border-width: var(--tblr-border-width);--tblr-modal-title-line-height: 1.4285714286;--tblr-modal-footer-gap: .75rem;--tblr-modal-footer-bg: var(--tblr-bg-surface-tertiary);--tblr-modal-footer-border-color: var(--tblr-border-color);--tblr-modal-footer-border-width: var(--tblr-border-width);position:fixed;top:0;left:0;z-index:var(--tblr-modal-zindex);display:none;width:100%;height:100%;overflow-x:hidden;overflow-y:auto;outline:0}@media (prefers-reduced-motion: reduce){.modal.fade .modal-dialog{transition:none}}.modal-backdrop{--tblr-backdrop-zindex: 1050;--tblr-backdrop-bg: #182433;--tblr-backdrop-opacity: .24;position:fixed;top:0;left:0;z-index:var(--tblr-backdrop-zindex);width:100vw;height:100vh;background-color:var(--tblr-backdrop-bg)}@media (min-width: 576px){.modal{--tblr-modal-margin: 1.75rem;--tblr-modal-box-shadow: rgba(var(--tblr-body-color-rgb), .04) 0 2px 4px 0}.modal-dialog{max-width:var(--tblr-modal-width);margin-right:auto;margin-left:auto}.modal-sm{--tblr-modal-width: 380px}}@media (min-width: 992px){.modal-lg,.modal-xl{--tblr-modal-width: 720px}}@media (min-width: 1200px){.modal-xl{--tblr-modal-width: 1140px}}.modal-fullscreen .modal-header,.modal-fullscreen .modal-footer{border-radius:0}@media (max-width: 575.98px){.modal-fullscreen-sm-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-sm-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-sm-down .modal-header,.modal-fullscreen-sm-down .modal-footer{border-radius:0}.modal-fullscreen-sm-down .modal-body{overflow-y:auto}}@media (max-width: 767.98px){.modal-fullscreen-md-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-md-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-md-down .modal-header,.modal-fullscreen-md-down .modal-footer{border-radius:0}.modal-fullscreen-md-down .modal-body{overflow-y:auto}}@media (max-width: 991.98px){.modal-fullscreen-lg-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-lg-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-lg-down .modal-header,.modal-fullscreen-lg-down .modal-footer{border-radius:0}.modal-fullscreen-lg-down .modal-body{overflow-y:auto}}@media (max-width: 1199.98px){.modal-fullscreen-xl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xl-down .modal-header,.modal-fullscreen-xl-down .modal-footer{border-radius:0}.modal-fullscreen-xl-down .modal-body{overflow-y:auto}}@media (max-width: 1399.98px){.modal-fullscreen-xxl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xxl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xxl-down .modal-header,.modal-fullscreen-xxl-down .modal-footer{border-radius:0}.modal-fullscreen-xxl-down .modal-body{overflow-y:auto}}.tooltip{--tblr-tooltip-zindex: 1080;--tblr-tooltip-max-width: 200px;--tblr-tooltip-padding-x: var(--tblr-spacer-2);--tblr-tooltip-padding-y: var(--tblr-spacer-2);--tblr-tooltip-margin: ;--tblr-tooltip-font-size: .765625rem;--tblr-tooltip-color: var(--tblr-light);--tblr-tooltip-bg: var(--tblr-bg-surface-dark);--tblr-tooltip-border-radius: var(--tblr-border-radius);--tblr-tooltip-opacity: .9;--tblr-tooltip-arrow-width: .8rem;--tblr-tooltip-arrow-height: .4rem;z-index:var(--tblr-tooltip-zindex);display:block;margin:var(--tblr-tooltip-margin);font-family:var(--tblr-font-sans-serif);font-style:normal;font-weight:400;line-height:1.4285714286;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;white-space:normal;word-spacing:normal;line-break:auto;font-size:var(--tblr-tooltip-font-size);word-wrap:break-word;opacity:0}.bs-tooltip-top .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow{bottom:calc(-1 * var(--tblr-tooltip-arrow-height))}.bs-tooltip-top .tooltip-arrow:before,.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow:before{top:-1px;border-width:var(--tblr-tooltip-arrow-height) calc(var(--tblr-tooltip-arrow-width) * .5) 0;border-top-color:var(--tblr-tooltip-bg)}.bs-tooltip-end .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow{left:calc(-1 * var(--tblr-tooltip-arrow-height));width:var(--tblr-tooltip-arrow-height);height:var(--tblr-tooltip-arrow-width)}.bs-tooltip-end .tooltip-arrow:before,.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow:before{right:-1px;border-width:calc(var(--tblr-tooltip-arrow-width) * .5) var(--tblr-tooltip-arrow-height) calc(var(--tblr-tooltip-arrow-width) * .5) 0;border-right-color:var(--tblr-tooltip-bg)}.bs-tooltip-bottom .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow{top:calc(-1 * var(--tblr-tooltip-arrow-height))}.bs-tooltip-bottom .tooltip-arrow:before,.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow:before{bottom:-1px;border-width:0 calc(var(--tblr-tooltip-arrow-width) * .5) var(--tblr-tooltip-arrow-height);border-bottom-color:var(--tblr-tooltip-bg)}.bs-tooltip-start .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow{right:calc(-1 * var(--tblr-tooltip-arrow-height));width:var(--tblr-tooltip-arrow-height);height:var(--tblr-tooltip-arrow-width)}.bs-tooltip-start .tooltip-arrow:before,.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow:before{left:-1px;border-width:calc(var(--tblr-tooltip-arrow-width) * .5) 0 calc(var(--tblr-tooltip-arrow-width) * .5) var(--tblr-tooltip-arrow-height);border-left-color:var(--tblr-tooltip-bg)}.popover{--tblr-popover-zindex: 1070;--tblr-popover-max-width: 276px;--tblr-popover-font-size: .765625rem;--tblr-popover-bg: var(--tblr-bg-surface);--tblr-popover-border-width: var(--tblr-border-width);--tblr-popover-border-color: var(--tblr-border-color);--tblr-popover-border-radius: var(--tblr-border-radius-lg);--tblr-popover-inner-border-radius: calc( var(--tblr-border-radius-lg) - var(--tblr-border-width) );--tblr-popover-box-shadow: rgba(var(--tblr-body-color-rgb), .04) 0 2px 4px 0;--tblr-popover-header-padding-x: 1rem;--tblr-popover-header-padding-y: .5rem;--tblr-popover-header-font-size: .875rem;--tblr-popover-header-color: inherit;--tblr-popover-header-bg: transparent;--tblr-popover-body-padding-x: 1rem;--tblr-popover-body-padding-y: 1rem;--tblr-popover-body-color: inherit;--tblr-popover-arrow-width: 1rem;--tblr-popover-arrow-height: .5rem;--tblr-popover-arrow-border: var(--tblr-popover-border-color);z-index:var(--tblr-popover-zindex);display:block;max-width:var(--tblr-popover-max-width);font-family:var(--tblr-font-sans-serif);font-style:normal;font-weight:400;line-height:1.4285714286;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;white-space:normal;word-spacing:normal;line-break:auto;font-size:var(--tblr-popover-font-size);word-wrap:break-word;background-color:var(--tblr-popover-bg);background-clip:padding-box;border:var(--tblr-popover-border-width) solid var(--tblr-popover-border-color);border-radius:var(--tblr-popover-border-radius);box-shadow:var(--tblr-popover-box-shadow)}.popover .popover-arrow:before,.popover .popover-arrow:after{position:absolute;display:block;content:"";border-color:transparent;border-style:solid;border-width:0}.bs-popover-top>.popover-arrow,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow{bottom:calc(-1 * (var(--tblr-popover-arrow-height)) - var(--tblr-popover-border-width))}.bs-popover-top>.popover-arrow:before,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow:before,.bs-popover-top>.popover-arrow:after,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow:after{border-width:var(--tblr-popover-arrow-height) calc(var(--tblr-popover-arrow-width) * .5) 0}.bs-popover-top>.popover-arrow:before,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow:before{bottom:0;border-top-color:var(--tblr-popover-arrow-border)}.bs-popover-top>.popover-arrow:after,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow:after{bottom:var(--tblr-popover-border-width);border-top-color:var(--tblr-popover-bg)}.bs-popover-end>.popover-arrow,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow{left:calc(-1 * (var(--tblr-popover-arrow-height)) - var(--tblr-popover-border-width));width:var(--tblr-popover-arrow-height);height:var(--tblr-popover-arrow-width)}.bs-popover-end>.popover-arrow:before,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow:before,.bs-popover-end>.popover-arrow:after,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow:after{border-width:calc(var(--tblr-popover-arrow-width) * .5) var(--tblr-popover-arrow-height) calc(var(--tblr-popover-arrow-width) * .5) 0}.bs-popover-end>.popover-arrow:before,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow:before{left:0;border-right-color:var(--tblr-popover-arrow-border)}.bs-popover-end>.popover-arrow:after,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow:after{left:var(--tblr-popover-border-width);border-right-color:var(--tblr-popover-bg)}.bs-popover-bottom>.popover-arrow,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow{top:calc(-1 * (var(--tblr-popover-arrow-height)) - var(--tblr-popover-border-width))}.bs-popover-bottom>.popover-arrow:before,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow:before,.bs-popover-bottom>.popover-arrow:after,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow:after{border-width:0 calc(var(--tblr-popover-arrow-width) * .5) var(--tblr-popover-arrow-height)}.bs-popover-bottom>.popover-arrow:before,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow:before{top:0;border-bottom-color:var(--tblr-popover-arrow-border)}.bs-popover-bottom>.popover-arrow:after,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow:after{top:var(--tblr-popover-border-width);border-bottom-color:var(--tblr-popover-bg)}.bs-popover-bottom .popover-header:before,.bs-popover-auto[data-popper-placement^=bottom] .popover-header:before{position:absolute;top:0;left:50%;display:block;width:var(--tblr-popover-arrow-width);margin-left:calc(-.5 * var(--tblr-popover-arrow-width));content:"";border-bottom:var(--tblr-popover-border-width) solid var(--tblr-popover-header-bg)}.bs-popover-start>.popover-arrow,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow{right:calc(-1 * (var(--tblr-popover-arrow-height)) - var(--tblr-popover-border-width));width:var(--tblr-popover-arrow-height);height:var(--tblr-popover-arrow-width)}.bs-popover-start>.popover-arrow:before,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow:before,.bs-popover-start>.popover-arrow:after,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow:after{border-width:calc(var(--tblr-popover-arrow-width) * .5) 0 calc(var(--tblr-popover-arrow-width) * .5) var(--tblr-popover-arrow-height)}.bs-popover-start>.popover-arrow:before,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow:before{right:0;border-left-color:var(--tblr-popover-arrow-border)}.bs-popover-start>.popover-arrow:after,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow:after{right:var(--tblr-popover-border-width);border-left-color:var(--tblr-popover-bg)}@media (prefers-reduced-motion: reduce){.carousel-item{transition:none}}.carousel-item.active,.carousel-item-next,.carousel-item-prev{display:block}.carousel-item-next:not(.carousel-item-start),.active.carousel-item-end{transform:translate(100%)}.carousel-item-prev:not(.carousel-item-end),.active.carousel-item-start{transform:translate(-100%)}.carousel-fade .carousel-item.active,.carousel-fade .carousel-item-next.carousel-item-start,.carousel-fade .carousel-item-prev.carousel-item-end{z-index:1;opacity:1}.carousel-fade .active.carousel-item-start,.carousel-fade .active.carousel-item-end{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion: reduce){.carousel-fade .active.carousel-item-start,.carousel-fade .active.carousel-item-end{transition:none}}.carousel-control-prev,.carousel-control-next{position:absolute;top:0;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;width:15%;padding:0;color:#fff;text-align:center;background:none;border:0;opacity:.5;transition:opacity .15s ease}@media (prefers-reduced-motion: reduce){.carousel-control-prev,.carousel-control-next{transition:none}}.carousel-control-prev:hover,.carousel-control-prev:focus,.carousel-control-next:hover,.carousel-control-next:focus{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev-icon,.carousel-control-next-icon{display:inline-block;width:1.5rem;height:1.5rem;background-repeat:no-repeat;background-position:50%;background-size:100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23ffffff' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3e%3cpolyline points='15 18 9 12 15 6'%3e%3c/polyline%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23ffffff' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3e%3cpolyline points='9 18 15 12 9 6'%3e%3c/polyline%3e%3c/svg%3e")}@media (prefers-reduced-motion: reduce){.carousel-indicators [data-bs-target]{transition:none}}.carousel-dark .carousel-control-prev-icon,.carousel-dark .carousel-control-next-icon{filter:invert(1) grayscale(100)}[data-bs-theme=dark] .carousel .carousel-control-prev-icon,[data-bs-theme=dark] .carousel .carousel-control-next-icon,[data-bs-theme=dark].carousel .carousel-control-prev-icon,[data-bs-theme=dark].carousel .carousel-control-next-icon{filter:invert(1) grayscale(100)}.spinner-grow,.spinner-border{display:inline-block;width:var(--tblr-spinner-width);height:var(--tblr-spinner-height);vertical-align:var(--tblr-spinner-vertical-align);border-radius:50%;animation:var(--tblr-spinner-animation-speed) linear infinite var(--tblr-spinner-animation-name)}.spinner-border{--tblr-spinner-width: 1.5rem;--tblr-spinner-height: 1.5rem;--tblr-spinner-vertical-align: -.125em;--tblr-spinner-border-width: 2px;--tblr-spinner-animation-speed: .75s;--tblr-spinner-animation-name: spinner-border;border:var(--tblr-spinner-border-width) solid currentcolor;border-right-color:transparent}.spinner-border-sm{--tblr-spinner-width: 1rem;--tblr-spinner-height: 1rem;--tblr-spinner-border-width: 1px}.spinner-grow{--tblr-spinner-width: 1.5rem;--tblr-spinner-height: 1.5rem;--tblr-spinner-vertical-align: -.125em;--tblr-spinner-animation-speed: .75s;--tblr-spinner-animation-name: spinner-grow;background-color:currentcolor;opacity:0}.spinner-grow-sm{--tblr-spinner-width: 1rem;--tblr-spinner-height: 1rem}@media (prefers-reduced-motion: reduce){.spinner-border,.spinner-grow{--tblr-spinner-animation-speed: 1.5s}}.offcanvas,.offcanvas-xxl,.offcanvas-xl,.offcanvas-lg,.offcanvas-md,.offcanvas-sm{--tblr-offcanvas-zindex: 1045;--tblr-offcanvas-width: 400px;--tblr-offcanvas-height: 30vh;--tblr-offcanvas-padding-x: 1.5rem;--tblr-offcanvas-padding-y: 1.5rem;--tblr-offcanvas-color: var(--tblr-body-color);--tblr-offcanvas-bg: var(--tblr-bg-surface);--tblr-offcanvas-border-width: var(--tblr-border-width);--tblr-offcanvas-border-color: var(--tblr-border-color);--tblr-offcanvas-box-shadow: 0 .125rem .25rem rgba(0, 0, 0, .075);--tblr-offcanvas-transition: transform .3s ease-in-out;--tblr-offcanvas-title-line-height: 1.4285714286}@media (max-width: 575.98px){.offcanvas-sm{position:fixed;bottom:0;z-index:var(--tblr-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--tblr-offcanvas-color);visibility:hidden;background-color:var(--tblr-offcanvas-bg);background-clip:padding-box;outline:0;box-shadow:var(--tblr-offcanvas-box-shadow);transition:var(--tblr-offcanvas-transition)}}@media (max-width: 575.98px) and (prefers-reduced-motion: reduce){.offcanvas-sm{transition:none}}@media (max-width: 575.98px){.offcanvas-sm.offcanvas-start{top:0;left:0;width:var(--tblr-offcanvas-width);border-right:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);transform:translate(-100%)}.offcanvas-sm.offcanvas-end{top:0;right:0;width:var(--tblr-offcanvas-width);border-left:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);transform:translate(100%)}.offcanvas-sm.offcanvas-top{top:0;right:0;left:0;height:var(--tblr-offcanvas-height);max-height:100%;border-bottom:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-sm.offcanvas-bottom{right:0;left:0;height:var(--tblr-offcanvas-height);max-height:100%;border-top:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);transform:translateY(100%)}.offcanvas-sm.showing,.offcanvas-sm.show:not(.hiding){transform:none}.offcanvas-sm.showing,.offcanvas-sm.hiding,.offcanvas-sm.show{visibility:visible}}@media (min-width: 576px){.offcanvas-sm{--tblr-offcanvas-height: auto;--tblr-offcanvas-border-width: 0;background-color:transparent!important}.offcanvas-sm .offcanvas-header{display:none}.offcanvas-sm .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent!important}}@media (max-width: 767.98px){.offcanvas-md{position:fixed;bottom:0;z-index:var(--tblr-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--tblr-offcanvas-color);visibility:hidden;background-color:var(--tblr-offcanvas-bg);background-clip:padding-box;outline:0;box-shadow:var(--tblr-offcanvas-box-shadow);transition:var(--tblr-offcanvas-transition)}}@media (max-width: 767.98px) and (prefers-reduced-motion: reduce){.offcanvas-md{transition:none}}@media (max-width: 767.98px){.offcanvas-md.offcanvas-start{top:0;left:0;width:var(--tblr-offcanvas-width);border-right:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);transform:translate(-100%)}.offcanvas-md.offcanvas-end{top:0;right:0;width:var(--tblr-offcanvas-width);border-left:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);transform:translate(100%)}.offcanvas-md.offcanvas-top{top:0;right:0;left:0;height:var(--tblr-offcanvas-height);max-height:100%;border-bottom:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-md.offcanvas-bottom{right:0;left:0;height:var(--tblr-offcanvas-height);max-height:100%;border-top:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);transform:translateY(100%)}.offcanvas-md.showing,.offcanvas-md.show:not(.hiding){transform:none}.offcanvas-md.showing,.offcanvas-md.hiding,.offcanvas-md.show{visibility:visible}}@media (min-width: 768px){.offcanvas-md{--tblr-offcanvas-height: auto;--tblr-offcanvas-border-width: 0;background-color:transparent!important}.offcanvas-md .offcanvas-header{display:none}.offcanvas-md .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent!important}}@media (max-width: 991.98px){.offcanvas-lg{position:fixed;bottom:0;z-index:var(--tblr-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--tblr-offcanvas-color);visibility:hidden;background-color:var(--tblr-offcanvas-bg);background-clip:padding-box;outline:0;box-shadow:var(--tblr-offcanvas-box-shadow);transition:var(--tblr-offcanvas-transition)}}@media (max-width: 991.98px) and (prefers-reduced-motion: reduce){.offcanvas-lg{transition:none}}@media (max-width: 991.98px){.offcanvas-lg.offcanvas-start{top:0;left:0;width:var(--tblr-offcanvas-width);border-right:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);transform:translate(-100%)}.offcanvas-lg.offcanvas-end{top:0;right:0;width:var(--tblr-offcanvas-width);border-left:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);transform:translate(100%)}.offcanvas-lg.offcanvas-top{top:0;right:0;left:0;height:var(--tblr-offcanvas-height);max-height:100%;border-bottom:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-lg.offcanvas-bottom{right:0;left:0;height:var(--tblr-offcanvas-height);max-height:100%;border-top:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);transform:translateY(100%)}.offcanvas-lg.showing,.offcanvas-lg.show:not(.hiding){transform:none}.offcanvas-lg.showing,.offcanvas-lg.hiding,.offcanvas-lg.show{visibility:visible}}@media (min-width: 992px){.offcanvas-lg{--tblr-offcanvas-height: auto;--tblr-offcanvas-border-width: 0;background-color:transparent!important}.offcanvas-lg .offcanvas-header{display:none}.offcanvas-lg .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent!important}}@media (max-width: 1199.98px){.offcanvas-xl{position:fixed;bottom:0;z-index:var(--tblr-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--tblr-offcanvas-color);visibility:hidden;background-color:var(--tblr-offcanvas-bg);background-clip:padding-box;outline:0;box-shadow:var(--tblr-offcanvas-box-shadow);transition:var(--tblr-offcanvas-transition)}}@media (max-width: 1199.98px) and (prefers-reduced-motion: reduce){.offcanvas-xl{transition:none}}@media (max-width: 1199.98px){.offcanvas-xl.offcanvas-start{top:0;left:0;width:var(--tblr-offcanvas-width);border-right:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);transform:translate(-100%)}.offcanvas-xl.offcanvas-end{top:0;right:0;width:var(--tblr-offcanvas-width);border-left:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);transform:translate(100%)}.offcanvas-xl.offcanvas-top{top:0;right:0;left:0;height:var(--tblr-offcanvas-height);max-height:100%;border-bottom:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-xl.offcanvas-bottom{right:0;left:0;height:var(--tblr-offcanvas-height);max-height:100%;border-top:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);transform:translateY(100%)}.offcanvas-xl.showing,.offcanvas-xl.show:not(.hiding){transform:none}.offcanvas-xl.showing,.offcanvas-xl.hiding,.offcanvas-xl.show{visibility:visible}}@media (min-width: 1200px){.offcanvas-xl{--tblr-offcanvas-height: auto;--tblr-offcanvas-border-width: 0;background-color:transparent!important}.offcanvas-xl .offcanvas-header{display:none}.offcanvas-xl .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent!important}}@media (max-width: 1399.98px){.offcanvas-xxl{position:fixed;bottom:0;z-index:var(--tblr-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--tblr-offcanvas-color);visibility:hidden;background-color:var(--tblr-offcanvas-bg);background-clip:padding-box;outline:0;box-shadow:var(--tblr-offcanvas-box-shadow);transition:var(--tblr-offcanvas-transition)}}@media (max-width: 1399.98px) and (prefers-reduced-motion: reduce){.offcanvas-xxl{transition:none}}@media (max-width: 1399.98px){.offcanvas-xxl.offcanvas-start{top:0;left:0;width:var(--tblr-offcanvas-width);border-right:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);transform:translate(-100%)}.offcanvas-xxl.offcanvas-end{top:0;right:0;width:var(--tblr-offcanvas-width);border-left:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);transform:translate(100%)}.offcanvas-xxl.offcanvas-top{top:0;right:0;left:0;height:var(--tblr-offcanvas-height);max-height:100%;border-bottom:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-xxl.offcanvas-bottom{right:0;left:0;height:var(--tblr-offcanvas-height);max-height:100%;border-top:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);transform:translateY(100%)}.offcanvas-xxl.showing,.offcanvas-xxl.show:not(.hiding){transform:none}.offcanvas-xxl.showing,.offcanvas-xxl.hiding,.offcanvas-xxl.show{visibility:visible}}@media (min-width: 1400px){.offcanvas-xxl{--tblr-offcanvas-height: auto;--tblr-offcanvas-border-width: 0;background-color:transparent!important}.offcanvas-xxl .offcanvas-header{display:none}.offcanvas-xxl .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent!important}}@media (prefers-reduced-motion: reduce){.offcanvas{transition:none}}.offcanvas.showing,.offcanvas.show:not(.hiding){transform:none}.offcanvas.showing,.offcanvas.hiding,.offcanvas.show{visibility:visible}.placeholder-wave{-webkit-mask-image:linear-gradient(130deg,#000000 55%,rgba(0,0,0,.9) 75%,#000000 95%);mask-image:linear-gradient(130deg,#000 55%,#000000e6,#000 95%);-webkit-mask-size:200% 100%;mask-size:200% 100%;animation:placeholder-wave 2s linear infinite}.text-bg-primary{color:#fcfdfe!important;background-color:RGBA(var(--tblr-primary-rgb),var(--tblr-bg-opacity, 1))!important}.text-bg-secondary{color:#fcfdfe!important;background-color:RGBA(var(--tblr-secondary-rgb),var(--tblr-bg-opacity, 1))!important}.text-bg-success{color:#fcfdfe!important;background-color:RGBA(var(--tblr-success-rgb),var(--tblr-bg-opacity, 1))!important}.text-bg-info{color:#fcfdfe!important;background-color:RGBA(var(--tblr-info-rgb),var(--tblr-bg-opacity, 1))!important}.text-bg-warning{color:#fcfdfe!important;background-color:RGBA(var(--tblr-warning-rgb),var(--tblr-bg-opacity, 1))!important}.text-bg-danger{color:#fcfdfe!important;background-color:RGBA(var(--tblr-danger-rgb),var(--tblr-bg-opacity, 1))!important}.text-bg-light{color:#182433!important;background-color:RGBA(var(--tblr-light-rgb),var(--tblr-bg-opacity, 1))!important}.text-bg-dark{color:#fcfdfe!important;background-color:RGBA(var(--tblr-dark-rgb),var(--tblr-bg-opacity, 1))!important}.text-bg-muted{color:#fcfdfe!important;background-color:RGBA(var(--tblr-muted-rgb),var(--tblr-bg-opacity, 1))!important}.text-bg-blue{color:#fcfdfe!important;background-color:RGBA(var(--tblr-blue-rgb),var(--tblr-bg-opacity, 1))!important}.text-bg-azure{color:#fcfdfe!important;background-color:RGBA(var(--tblr-azure-rgb),var(--tblr-bg-opacity, 1))!important}.text-bg-indigo{color:#fcfdfe!important;background-color:RGBA(var(--tblr-indigo-rgb),var(--tblr-bg-opacity, 1))!important}.text-bg-purple{color:#fcfdfe!important;background-color:RGBA(var(--tblr-purple-rgb),var(--tblr-bg-opacity, 1))!important}.text-bg-pink{color:#fcfdfe!important;background-color:RGBA(var(--tblr-pink-rgb),var(--tblr-bg-opacity, 1))!important}.text-bg-red{color:#fcfdfe!important;background-color:RGBA(var(--tblr-red-rgb),var(--tblr-bg-opacity, 1))!important}.text-bg-orange{color:#fcfdfe!important;background-color:RGBA(var(--tblr-orange-rgb),var(--tblr-bg-opacity, 1))!important}.text-bg-yellow{color:#fcfdfe!important;background-color:RGBA(var(--tblr-yellow-rgb),var(--tblr-bg-opacity, 1))!important}.text-bg-lime{color:#fcfdfe!important;background-color:RGBA(var(--tblr-lime-rgb),var(--tblr-bg-opacity, 1))!important}.text-bg-green{color:#fcfdfe!important;background-color:RGBA(var(--tblr-green-rgb),var(--tblr-bg-opacity, 1))!important}.text-bg-teal{color:#fcfdfe!important;background-color:RGBA(var(--tblr-teal-rgb),var(--tblr-bg-opacity, 1))!important}.text-bg-cyan{color:#fcfdfe!important;background-color:RGBA(var(--tblr-cyan-rgb),var(--tblr-bg-opacity, 1))!important}.text-bg-facebook{color:#fcfdfe!important;background-color:RGBA(var(--tblr-facebook-rgb),var(--tblr-bg-opacity, 1))!important}.text-bg-twitter{color:#fcfdfe!important;background-color:RGBA(var(--tblr-twitter-rgb),var(--tblr-bg-opacity, 1))!important}.text-bg-linkedin{color:#fcfdfe!important;background-color:RGBA(var(--tblr-linkedin-rgb),var(--tblr-bg-opacity, 1))!important}.text-bg-google{color:#fcfdfe!important;background-color:RGBA(var(--tblr-google-rgb),var(--tblr-bg-opacity, 1))!important}.text-bg-youtube{color:#fcfdfe!important;background-color:RGBA(var(--tblr-youtube-rgb),var(--tblr-bg-opacity, 1))!important}.text-bg-vimeo{color:#fcfdfe!important;background-color:RGBA(var(--tblr-vimeo-rgb),var(--tblr-bg-opacity, 1))!important}.text-bg-dribbble{color:#fcfdfe!important;background-color:RGBA(var(--tblr-dribbble-rgb),var(--tblr-bg-opacity, 1))!important}.text-bg-github{color:#fcfdfe!important;background-color:RGBA(var(--tblr-github-rgb),var(--tblr-bg-opacity, 1))!important}.text-bg-instagram{color:#fcfdfe!important;background-color:RGBA(var(--tblr-instagram-rgb),var(--tblr-bg-opacity, 1))!important}.text-bg-pinterest{color:#fcfdfe!important;background-color:RGBA(var(--tblr-pinterest-rgb),var(--tblr-bg-opacity, 1))!important}.text-bg-vk{color:#fcfdfe!important;background-color:RGBA(var(--tblr-vk-rgb),var(--tblr-bg-opacity, 1))!important}.text-bg-rss{color:#fcfdfe!important;background-color:RGBA(var(--tblr-rss-rgb),var(--tblr-bg-opacity, 1))!important}.text-bg-flickr{color:#fcfdfe!important;background-color:RGBA(var(--tblr-flickr-rgb),var(--tblr-bg-opacity, 1))!important}.text-bg-bitbucket{color:#fcfdfe!important;background-color:RGBA(var(--tblr-bitbucket-rgb),var(--tblr-bg-opacity, 1))!important}.text-bg-tabler{color:#fcfdfe!important;background-color:RGBA(var(--tblr-tabler-rgb),var(--tblr-bg-opacity, 1))!important}.link-primary{color:RGBA(var(--tblr-primary-rgb),var(--tblr-link-opacity, 1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-primary-rgb),var(--tblr-link-underline-opacity, 1))!important;text-decoration-color:RGBA(var(--tblr-primary-rgb),var(--tblr-link-underline-opacity, 1))!important}.link-primary:hover,.link-primary:focus{color:RGBA(0,67,133,var(--tblr-link-opacity, 1))!important;-webkit-text-decoration-color:RGBA(0,67,133,var(--tblr-link-underline-opacity, 1))!important;text-decoration-color:RGBA(0,67,133,var(--tblr-link-underline-opacity, 1))!important}.link-secondary{color:RGBA(var(--tblr-secondary-rgb),var(--tblr-link-opacity, 1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-secondary-rgb),var(--tblr-link-underline-opacity, 1))!important;text-decoration-color:RGBA(var(--tblr-secondary-rgb),var(--tblr-link-underline-opacity, 1))!important}.link-secondary:hover,.link-secondary:focus{color:RGBA(82,92,104,var(--tblr-link-opacity, 1))!important;-webkit-text-decoration-color:RGBA(82,92,104,var(--tblr-link-underline-opacity, 1))!important;text-decoration-color:RGBA(82,92,104,var(--tblr-link-underline-opacity, 1))!important}.link-success{color:RGBA(var(--tblr-success-rgb),var(--tblr-link-opacity, 1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-success-rgb),var(--tblr-link-underline-opacity, 1))!important;text-decoration-color:RGBA(var(--tblr-success-rgb),var(--tblr-link-underline-opacity, 1))!important}.link-success:hover,.link-success:focus{color:RGBA(38,143,54,var(--tblr-link-opacity, 1))!important;-webkit-text-decoration-color:RGBA(38,143,54,var(--tblr-link-underline-opacity, 1))!important;text-decoration-color:RGBA(38,143,54,var(--tblr-link-underline-opacity, 1))!important}.link-info{color:RGBA(var(--tblr-info-rgb),var(--tblr-link-opacity, 1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-info-rgb),var(--tblr-link-underline-opacity, 1))!important;text-decoration-color:RGBA(var(--tblr-info-rgb),var(--tblr-link-underline-opacity, 1))!important}.link-info:hover,.link-info:focus{color:RGBA(53,122,180,var(--tblr-link-opacity, 1))!important;-webkit-text-decoration-color:RGBA(53,122,180,var(--tblr-link-underline-opacity, 1))!important;text-decoration-color:RGBA(53,122,180,var(--tblr-link-underline-opacity, 1))!important}.link-warning{color:RGBA(var(--tblr-warning-rgb),var(--tblr-link-opacity, 1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-warning-rgb),var(--tblr-link-underline-opacity, 1))!important;text-decoration-color:RGBA(var(--tblr-warning-rgb),var(--tblr-link-underline-opacity, 1))!important}.link-warning:hover,.link-warning:focus{color:RGBA(198,82,6,var(--tblr-link-opacity, 1))!important;-webkit-text-decoration-color:RGBA(198,82,6,var(--tblr-link-underline-opacity, 1))!important;text-decoration-color:RGBA(198,82,6,var(--tblr-link-underline-opacity, 1))!important}.link-danger{color:RGBA(var(--tblr-danger-rgb),var(--tblr-link-opacity, 1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-danger-rgb),var(--tblr-link-underline-opacity, 1))!important;text-decoration-color:RGBA(var(--tblr-danger-rgb),var(--tblr-link-underline-opacity, 1))!important}.link-danger:hover,.link-danger:focus{color:RGBA(171,46,46,var(--tblr-link-opacity, 1))!important;-webkit-text-decoration-color:RGBA(171,46,46,var(--tblr-link-underline-opacity, 1))!important;text-decoration-color:RGBA(171,46,46,var(--tblr-link-underline-opacity, 1))!important}.link-light{color:RGBA(var(--tblr-light-rgb),var(--tblr-link-opacity, 1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-light-rgb),var(--tblr-link-underline-opacity, 1))!important;text-decoration-color:RGBA(var(--tblr-light-rgb),var(--tblr-link-underline-opacity, 1))!important}.link-light:hover,.link-light:focus{color:RGBA(253,253,254,var(--tblr-link-opacity, 1))!important;-webkit-text-decoration-color:RGBA(253,253,254,var(--tblr-link-underline-opacity, 1))!important;text-decoration-color:RGBA(253,253,254,var(--tblr-link-underline-opacity, 1))!important}.link-dark{color:RGBA(var(--tblr-dark-rgb),var(--tblr-link-opacity, 1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-dark-rgb),var(--tblr-link-underline-opacity, 1))!important;text-decoration-color:RGBA(var(--tblr-dark-rgb),var(--tblr-link-underline-opacity, 1))!important}.link-dark:hover,.link-dark:focus{color:RGBA(19,29,41,var(--tblr-link-opacity, 1))!important;-webkit-text-decoration-color:RGBA(19,29,41,var(--tblr-link-underline-opacity, 1))!important;text-decoration-color:RGBA(19,29,41,var(--tblr-link-underline-opacity, 1))!important}.link-muted{color:RGBA(var(--tblr-muted-rgb),var(--tblr-link-opacity, 1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-muted-rgb),var(--tblr-link-underline-opacity, 1))!important;text-decoration-color:RGBA(var(--tblr-muted-rgb),var(--tblr-link-underline-opacity, 1))!important}.link-muted:hover,.link-muted:focus{color:RGBA(82,92,104,var(--tblr-link-opacity, 1))!important;-webkit-text-decoration-color:RGBA(82,92,104,var(--tblr-link-underline-opacity, 1))!important;text-decoration-color:RGBA(82,92,104,var(--tblr-link-underline-opacity, 1))!important}.link-blue{color:RGBA(var(--tblr-blue-rgb),var(--tblr-link-opacity, 1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-blue-rgb),var(--tblr-link-underline-opacity, 1))!important;text-decoration-color:RGBA(var(--tblr-blue-rgb),var(--tblr-link-underline-opacity, 1))!important}.link-blue:hover,.link-blue:focus{color:RGBA(0,67,133,var(--tblr-link-opacity, 1))!important;-webkit-text-decoration-color:RGBA(0,67,133,var(--tblr-link-underline-opacity, 1))!important;text-decoration-color:RGBA(0,67,133,var(--tblr-link-underline-opacity, 1))!important}.link-azure{color:RGBA(var(--tblr-azure-rgb),var(--tblr-link-opacity, 1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-azure-rgb),var(--tblr-link-underline-opacity, 1))!important;text-decoration-color:RGBA(var(--tblr-azure-rgb),var(--tblr-link-underline-opacity, 1))!important}.link-azure:hover,.link-azure:focus{color:RGBA(53,122,180,var(--tblr-link-opacity, 1))!important;-webkit-text-decoration-color:RGBA(53,122,180,var(--tblr-link-underline-opacity, 1))!important;text-decoration-color:RGBA(53,122,180,var(--tblr-link-underline-opacity, 1))!important}.link-indigo{color:RGBA(var(--tblr-indigo-rgb),var(--tblr-link-opacity, 1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-indigo-rgb),var(--tblr-link-underline-opacity, 1))!important;text-decoration-color:RGBA(var(--tblr-indigo-rgb),var(--tblr-link-underline-opacity, 1))!important}.link-indigo:hover,.link-indigo:focus{color:RGBA(53,79,188,var(--tblr-link-opacity, 1))!important;-webkit-text-decoration-color:RGBA(53,79,188,var(--tblr-link-underline-opacity, 1))!important;text-decoration-color:RGBA(53,79,188,var(--tblr-link-underline-opacity, 1))!important}.link-purple{color:RGBA(var(--tblr-purple-rgb),var(--tblr-link-opacity, 1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-purple-rgb),var(--tblr-link-underline-opacity, 1))!important;text-decoration-color:RGBA(var(--tblr-purple-rgb),var(--tblr-link-underline-opacity, 1))!important}.link-purple:hover,.link-purple:focus{color:RGBA(139,50,161,var(--tblr-link-opacity, 1))!important;-webkit-text-decoration-color:RGBA(139,50,161,var(--tblr-link-underline-opacity, 1))!important;text-decoration-color:RGBA(139,50,161,var(--tblr-link-underline-opacity, 1))!important}.link-pink{color:RGBA(var(--tblr-pink-rgb),var(--tblr-link-opacity, 1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-pink-rgb),var(--tblr-link-underline-opacity, 1))!important;text-decoration-color:RGBA(var(--tblr-pink-rgb),var(--tblr-link-underline-opacity, 1))!important}.link-pink:hover,.link-pink:focus{color:RGBA(171,41,86,var(--tblr-link-opacity, 1))!important;-webkit-text-decoration-color:RGBA(171,41,86,var(--tblr-link-underline-opacity, 1))!important;text-decoration-color:RGBA(171,41,86,var(--tblr-link-underline-opacity, 1))!important}.link-red{color:RGBA(var(--tblr-red-rgb),var(--tblr-link-opacity, 1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-red-rgb),var(--tblr-link-underline-opacity, 1))!important;text-decoration-color:RGBA(var(--tblr-red-rgb),var(--tblr-link-underline-opacity, 1))!important}.link-red:hover,.link-red:focus{color:RGBA(171,46,46,var(--tblr-link-opacity, 1))!important;-webkit-text-decoration-color:RGBA(171,46,46,var(--tblr-link-underline-opacity, 1))!important;text-decoration-color:RGBA(171,46,46,var(--tblr-link-underline-opacity, 1))!important}.link-orange{color:RGBA(var(--tblr-orange-rgb),var(--tblr-link-opacity, 1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-orange-rgb),var(--tblr-link-underline-opacity, 1))!important;text-decoration-color:RGBA(var(--tblr-orange-rgb),var(--tblr-link-underline-opacity, 1))!important}.link-orange:hover,.link-orange:focus{color:RGBA(198,82,6,var(--tblr-link-opacity, 1))!important;-webkit-text-decoration-color:RGBA(198,82,6,var(--tblr-link-underline-opacity, 1))!important;text-decoration-color:RGBA(198,82,6,var(--tblr-link-underline-opacity, 1))!important}.link-yellow{color:RGBA(var(--tblr-yellow-rgb),var(--tblr-link-opacity, 1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-yellow-rgb),var(--tblr-link-underline-opacity, 1))!important;text-decoration-color:RGBA(var(--tblr-yellow-rgb),var(--tblr-link-underline-opacity, 1))!important}.link-yellow:hover,.link-yellow:focus{color:RGBA(196,127,0,var(--tblr-link-opacity, 1))!important;-webkit-text-decoration-color:RGBA(196,127,0,var(--tblr-link-underline-opacity, 1))!important;text-decoration-color:RGBA(196,127,0,var(--tblr-link-underline-opacity, 1))!important}.link-lime{color:RGBA(var(--tblr-lime-rgb),var(--tblr-link-opacity, 1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-lime-rgb),var(--tblr-link-underline-opacity, 1))!important;text-decoration-color:RGBA(var(--tblr-lime-rgb),var(--tblr-link-underline-opacity, 1))!important}.link-lime:hover,.link-lime:focus{color:RGBA(93,147,18,var(--tblr-link-opacity, 1))!important;-webkit-text-decoration-color:RGBA(93,147,18,var(--tblr-link-underline-opacity, 1))!important;text-decoration-color:RGBA(93,147,18,var(--tblr-link-underline-opacity, 1))!important}.link-green{color:RGBA(var(--tblr-green-rgb),var(--tblr-link-opacity, 1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-green-rgb),var(--tblr-link-underline-opacity, 1))!important;text-decoration-color:RGBA(var(--tblr-green-rgb),var(--tblr-link-underline-opacity, 1))!important}.link-green:hover,.link-green:focus{color:RGBA(38,143,54,var(--tblr-link-opacity, 1))!important;-webkit-text-decoration-color:RGBA(38,143,54,var(--tblr-link-underline-opacity, 1))!important;text-decoration-color:RGBA(38,143,54,var(--tblr-link-underline-opacity, 1))!important}.link-teal{color:RGBA(var(--tblr-teal-rgb),var(--tblr-link-opacity, 1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-teal-rgb),var(--tblr-link-underline-opacity, 1))!important;text-decoration-color:RGBA(var(--tblr-teal-rgb),var(--tblr-link-underline-opacity, 1))!important}.link-teal:hover,.link-teal:focus{color:RGBA(10,133,96,var(--tblr-link-opacity, 1))!important;-webkit-text-decoration-color:RGBA(10,133,96,var(--tblr-link-underline-opacity, 1))!important;text-decoration-color:RGBA(10,133,96,var(--tblr-link-underline-opacity, 1))!important}.link-cyan{color:RGBA(var(--tblr-cyan-rgb),var(--tblr-link-opacity, 1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-cyan-rgb),var(--tblr-link-underline-opacity, 1))!important;text-decoration-color:RGBA(var(--tblr-cyan-rgb),var(--tblr-link-underline-opacity, 1))!important}.link-cyan:hover,.link-cyan:focus{color:RGBA(18,130,147,var(--tblr-link-opacity, 1))!important;-webkit-text-decoration-color:RGBA(18,130,147,var(--tblr-link-underline-opacity, 1))!important;text-decoration-color:RGBA(18,130,147,var(--tblr-link-underline-opacity, 1))!important}.link-facebook{color:RGBA(var(--tblr-facebook-rgb),var(--tblr-link-opacity, 1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-facebook-rgb),var(--tblr-link-underline-opacity, 1))!important;text-decoration-color:RGBA(var(--tblr-facebook-rgb),var(--tblr-link-underline-opacity, 1))!important}.link-facebook:hover,.link-facebook:focus{color:RGBA(19,95,194,var(--tblr-link-opacity, 1))!important;-webkit-text-decoration-color:RGBA(19,95,194,var(--tblr-link-underline-opacity, 1))!important;text-decoration-color:RGBA(19,95,194,var(--tblr-link-underline-opacity, 1))!important}.link-twitter{color:RGBA(var(--tblr-twitter-rgb),var(--tblr-link-opacity, 1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-twitter-rgb),var(--tblr-link-underline-opacity, 1))!important;text-decoration-color:RGBA(var(--tblr-twitter-rgb),var(--tblr-link-underline-opacity, 1))!important}.link-twitter:hover,.link-twitter:focus{color:RGBA(23,129,194,var(--tblr-link-opacity, 1))!important;-webkit-text-decoration-color:RGBA(23,129,194,var(--tblr-link-underline-opacity, 1))!important;text-decoration-color:RGBA(23,129,194,var(--tblr-link-underline-opacity, 1))!important}.link-linkedin{color:RGBA(var(--tblr-linkedin-rgb),var(--tblr-link-opacity, 1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-linkedin-rgb),var(--tblr-link-underline-opacity, 1))!important;text-decoration-color:RGBA(var(--tblr-linkedin-rgb),var(--tblr-link-underline-opacity, 1))!important}.link-linkedin:hover,.link-linkedin:focus{color:RGBA(8,82,155,var(--tblr-link-opacity, 1))!important;-webkit-text-decoration-color:RGBA(8,82,155,var(--tblr-link-underline-opacity, 1))!important;text-decoration-color:RGBA(8,82,155,var(--tblr-link-underline-opacity, 1))!important}.link-google{color:RGBA(var(--tblr-google-rgb),var(--tblr-link-opacity, 1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-google-rgb),var(--tblr-link-underline-opacity, 1))!important;text-decoration-color:RGBA(var(--tblr-google-rgb),var(--tblr-link-underline-opacity, 1))!important}.link-google:hover,.link-google:focus{color:RGBA(176,62,52,var(--tblr-link-opacity, 1))!important;-webkit-text-decoration-color:RGBA(176,62,52,var(--tblr-link-underline-opacity, 1))!important;text-decoration-color:RGBA(176,62,52,var(--tblr-link-underline-opacity, 1))!important}.link-youtube{color:RGBA(var(--tblr-youtube-rgb),var(--tblr-link-opacity, 1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-youtube-rgb),var(--tblr-link-underline-opacity, 1))!important;text-decoration-color:RGBA(var(--tblr-youtube-rgb),var(--tblr-link-underline-opacity, 1))!important}.link-youtube:hover,.link-youtube:focus{color:RGBA(204,0,0,var(--tblr-link-opacity, 1))!important;-webkit-text-decoration-color:RGBA(204,0,0,var(--tblr-link-underline-opacity, 1))!important;text-decoration-color:RGBA(204,0,0,var(--tblr-link-underline-opacity, 1))!important}.link-vimeo{color:RGBA(var(--tblr-vimeo-rgb),var(--tblr-link-opacity, 1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-vimeo-rgb),var(--tblr-link-underline-opacity, 1))!important;text-decoration-color:RGBA(var(--tblr-vimeo-rgb),var(--tblr-link-underline-opacity, 1))!important}.link-vimeo:hover,.link-vimeo:focus{color:RGBA(21,146,187,var(--tblr-link-opacity, 1))!important;-webkit-text-decoration-color:RGBA(21,146,187,var(--tblr-link-underline-opacity, 1))!important;text-decoration-color:RGBA(21,146,187,var(--tblr-link-underline-opacity, 1))!important}.link-dribbble{color:RGBA(var(--tblr-dribbble-rgb),var(--tblr-link-opacity, 1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-dribbble-rgb),var(--tblr-link-underline-opacity, 1))!important;text-decoration-color:RGBA(var(--tblr-dribbble-rgb),var(--tblr-link-underline-opacity, 1))!important}.link-dribbble:hover,.link-dribbble:focus{color:RGBA(187,61,110,var(--tblr-link-opacity, 1))!important;-webkit-text-decoration-color:RGBA(187,61,110,var(--tblr-link-underline-opacity, 1))!important;text-decoration-color:RGBA(187,61,110,var(--tblr-link-underline-opacity, 1))!important}.link-github{color:RGBA(var(--tblr-github-rgb),var(--tblr-link-opacity, 1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-github-rgb),var(--tblr-link-underline-opacity, 1))!important;text-decoration-color:RGBA(var(--tblr-github-rgb),var(--tblr-link-underline-opacity, 1))!important}.link-github:hover,.link-github:focus{color:RGBA(19,18,18,var(--tblr-link-opacity, 1))!important;-webkit-text-decoration-color:RGBA(19,18,18,var(--tblr-link-underline-opacity, 1))!important;text-decoration-color:RGBA(19,18,18,var(--tblr-link-underline-opacity, 1))!important}.link-instagram{color:RGBA(var(--tblr-instagram-rgb),var(--tblr-link-opacity, 1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-instagram-rgb),var(--tblr-link-underline-opacity, 1))!important;text-decoration-color:RGBA(var(--tblr-instagram-rgb),var(--tblr-link-underline-opacity, 1))!important}.link-instagram:hover,.link-instagram:focus{color:RGBA(182,51,76,var(--tblr-link-opacity, 1))!important;-webkit-text-decoration-color:RGBA(182,51,76,var(--tblr-link-underline-opacity, 1))!important;text-decoration-color:RGBA(182,51,76,var(--tblr-link-underline-opacity, 1))!important}.link-pinterest{color:RGBA(var(--tblr-pinterest-rgb),var(--tblr-link-opacity, 1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-pinterest-rgb),var(--tblr-link-underline-opacity, 1))!important;text-decoration-color:RGBA(var(--tblr-pinterest-rgb),var(--tblr-link-underline-opacity, 1))!important}.link-pinterest:hover,.link-pinterest:focus{color:RGBA(151,6,22,var(--tblr-link-opacity, 1))!important;-webkit-text-decoration-color:RGBA(151,6,22,var(--tblr-link-underline-opacity, 1))!important;text-decoration-color:RGBA(151,6,22,var(--tblr-link-underline-opacity, 1))!important}.link-vk{color:RGBA(var(--tblr-vk-rgb),var(--tblr-link-opacity, 1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-vk-rgb),var(--tblr-link-underline-opacity, 1))!important;text-decoration-color:RGBA(var(--tblr-vk-rgb),var(--tblr-link-underline-opacity, 1))!important}.link-vk:hover,.link-vk:focus{color:RGBA(79,105,134,var(--tblr-link-opacity, 1))!important;-webkit-text-decoration-color:RGBA(79,105,134,var(--tblr-link-underline-opacity, 1))!important;text-decoration-color:RGBA(79,105,134,var(--tblr-link-underline-opacity, 1))!important}.link-rss{color:RGBA(var(--tblr-rss-rgb),var(--tblr-link-opacity, 1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-rss-rgb),var(--tblr-link-underline-opacity, 1))!important;text-decoration-color:RGBA(var(--tblr-rss-rgb),var(--tblr-link-underline-opacity, 1))!important}.link-rss:hover,.link-rss:focus{color:RGBA(204,132,0,var(--tblr-link-opacity, 1))!important;-webkit-text-decoration-color:RGBA(204,132,0,var(--tblr-link-underline-opacity, 1))!important;text-decoration-color:RGBA(204,132,0,var(--tblr-link-underline-opacity, 1))!important}.link-flickr{color:RGBA(var(--tblr-flickr-rgb),var(--tblr-link-opacity, 1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-flickr-rgb),var(--tblr-link-underline-opacity, 1))!important;text-decoration-color:RGBA(var(--tblr-flickr-rgb),var(--tblr-link-underline-opacity, 1))!important}.link-flickr:hover,.link-flickr:focus{color:RGBA(0,79,176,var(--tblr-link-opacity, 1))!important;-webkit-text-decoration-color:RGBA(0,79,176,var(--tblr-link-underline-opacity, 1))!important;text-decoration-color:RGBA(0,79,176,var(--tblr-link-underline-opacity, 1))!important}.link-bitbucket{color:RGBA(var(--tblr-bitbucket-rgb),var(--tblr-link-opacity, 1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-bitbucket-rgb),var(--tblr-link-underline-opacity, 1))!important;text-decoration-color:RGBA(var(--tblr-bitbucket-rgb),var(--tblr-link-underline-opacity, 1))!important}.link-bitbucket:hover,.link-bitbucket:focus{color:RGBA(0,66,163,var(--tblr-link-opacity, 1))!important;-webkit-text-decoration-color:RGBA(0,66,163,var(--tblr-link-underline-opacity, 1))!important;text-decoration-color:RGBA(0,66,163,var(--tblr-link-underline-opacity, 1))!important}.link-tabler{color:RGBA(var(--tblr-tabler-rgb),var(--tblr-link-opacity, 1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-tabler-rgb),var(--tblr-link-underline-opacity, 1))!important;text-decoration-color:RGBA(var(--tblr-tabler-rgb),var(--tblr-link-underline-opacity, 1))!important}.link-tabler:hover,.link-tabler:focus{color:RGBA(0,67,133,var(--tblr-link-opacity, 1))!important;-webkit-text-decoration-color:RGBA(0,67,133,var(--tblr-link-underline-opacity, 1))!important;text-decoration-color:RGBA(0,67,133,var(--tblr-link-underline-opacity, 1))!important}.link-body-emphasis{color:RGBA(var(--tblr-emphasis-color-rgb),var(--tblr-link-opacity, 1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-emphasis-color-rgb),var(--tblr-link-underline-opacity, 1))!important;text-decoration-color:RGBA(var(--tblr-emphasis-color-rgb),var(--tblr-link-underline-opacity, 1))!important}.link-body-emphasis:hover,.link-body-emphasis:focus{color:RGBA(var(--tblr-emphasis-color-rgb),var(--tblr-link-opacity, .75))!important;-webkit-text-decoration-color:RGBA(var(--tblr-emphasis-color-rgb),var(--tblr-link-underline-opacity, .75))!important;text-decoration-color:RGBA(var(--tblr-emphasis-color-rgb),var(--tblr-link-underline-opacity, .75))!important}.focus-ring:focus{outline:0;box-shadow:var(--tblr-focus-ring-x, 0) var(--tblr-focus-ring-y, 0) var(--tblr-focus-ring-blur, 0) var(--tblr-focus-ring-width) var(--tblr-focus-ring-color)}.icon-link{display:inline-flex;gap:.375rem;align-items:center;-webkit-text-decoration-color:rgba(var(--tblr-link-color-rgb),var(--tblr-link-opacity, .5));text-decoration-color:rgba(var(--tblr-link-color-rgb),var(--tblr-link-opacity, .5));text-underline-offset:.25em;-webkit-backface-visibility:hidden;backface-visibility:hidden}@media (prefers-reduced-motion: reduce){.icon-link>.bi{transition:none}}.icon-link-hover:hover>.bi,.icon-link-hover:focus-visible>.bi{transform:var(--tblr-icon-link-transform, translate3d(.25em, 0, 0))}.ratio-1x1{--tblr-aspect-ratio: 100%}.ratio-2x1{--tblr-aspect-ratio: 50%}.ratio-1x2{--tblr-aspect-ratio: 200%}.ratio-3x1{--tblr-aspect-ratio: 33.3333333333%}.ratio-1x3{--tblr-aspect-ratio: 300%}.ratio-4x3{--tblr-aspect-ratio: 75%}.ratio-3x4{--tblr-aspect-ratio: 133.3333333333%}.ratio-16x9{--tblr-aspect-ratio: 56.25%}.ratio-9x16{--tblr-aspect-ratio: 177.7777777778%}.ratio-21x9{--tblr-aspect-ratio: 42.8571428571%}.ratio-9x21{--tblr-aspect-ratio: 233.3333333333%}@media (min-width: 576px){.sticky-sm-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-sm-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}}@media (min-width: 768px){.sticky-md-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-md-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}}@media (min-width: 992px){.sticky-lg-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-lg-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}}@media (min-width: 1200px){.sticky-xl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-xl-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}}@media (min-width: 1400px){.sticky-xxl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-xxl-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}}.visually-hidden:not(caption),.visually-hidden-focusable:not(:focus):not(:focus-within):not(caption){position:absolute!important}.vr{display:inline-block;align-self:stretch;width:var(--tblr-border-width);min-height:1em;background-color:currentcolor;opacity:.16}.shadow{box-shadow:rgba(var(--tblr-body-color-rgb),.04) 0 2px 4px!important}.focus-ring-primary{--tblr-focus-ring-color: rgba( var(--tblr-primary-rgb), var(--tblr-focus-ring-opacity) )}.focus-ring-secondary{--tblr-focus-ring-color: rgba( var(--tblr-secondary-rgb), var(--tblr-focus-ring-opacity) )}.focus-ring-success{--tblr-focus-ring-color: rgba( var(--tblr-success-rgb), var(--tblr-focus-ring-opacity) )}.focus-ring-info{--tblr-focus-ring-color: rgba( var(--tblr-info-rgb), var(--tblr-focus-ring-opacity) )}.focus-ring-warning{--tblr-focus-ring-color: rgba( var(--tblr-warning-rgb), var(--tblr-focus-ring-opacity) )}.focus-ring-danger{--tblr-focus-ring-color: rgba( var(--tblr-danger-rgb), var(--tblr-focus-ring-opacity) )}.focus-ring-light{--tblr-focus-ring-color: rgba( var(--tblr-light-rgb), var(--tblr-focus-ring-opacity) )}.focus-ring-dark{--tblr-focus-ring-color: rgba( var(--tblr-dark-rgb), var(--tblr-focus-ring-opacity) )}.focus-ring-muted{--tblr-focus-ring-color: rgba( var(--tblr-muted-rgb), var(--tblr-focus-ring-opacity) )}.focus-ring-blue{--tblr-focus-ring-color: rgba( var(--tblr-blue-rgb), var(--tblr-focus-ring-opacity) )}.focus-ring-azure{--tblr-focus-ring-color: rgba( var(--tblr-azure-rgb), var(--tblr-focus-ring-opacity) )}.focus-ring-indigo{--tblr-focus-ring-color: rgba( var(--tblr-indigo-rgb), var(--tblr-focus-ring-opacity) )}.focus-ring-purple{--tblr-focus-ring-color: rgba( var(--tblr-purple-rgb), var(--tblr-focus-ring-opacity) )}.focus-ring-pink{--tblr-focus-ring-color: rgba( var(--tblr-pink-rgb), var(--tblr-focus-ring-opacity) )}.focus-ring-red{--tblr-focus-ring-color: rgba( var(--tblr-red-rgb), var(--tblr-focus-ring-opacity) )}.focus-ring-orange{--tblr-focus-ring-color: rgba( var(--tblr-orange-rgb), var(--tblr-focus-ring-opacity) )}.focus-ring-yellow{--tblr-focus-ring-color: rgba( var(--tblr-yellow-rgb), var(--tblr-focus-ring-opacity) )}.focus-ring-lime{--tblr-focus-ring-color: rgba( var(--tblr-lime-rgb), var(--tblr-focus-ring-opacity) )}.focus-ring-green{--tblr-focus-ring-color: rgba( var(--tblr-green-rgb), var(--tblr-focus-ring-opacity) )}.focus-ring-teal{--tblr-focus-ring-color: rgba( var(--tblr-teal-rgb), var(--tblr-focus-ring-opacity) )}.focus-ring-cyan{--tblr-focus-ring-color: rgba( var(--tblr-cyan-rgb), var(--tblr-focus-ring-opacity) )}.focus-ring-facebook{--tblr-focus-ring-color: rgba( var(--tblr-facebook-rgb), var(--tblr-focus-ring-opacity) )}.focus-ring-twitter{--tblr-focus-ring-color: rgba( var(--tblr-twitter-rgb), var(--tblr-focus-ring-opacity) )}.focus-ring-linkedin{--tblr-focus-ring-color: rgba( var(--tblr-linkedin-rgb), var(--tblr-focus-ring-opacity) )}.focus-ring-google{--tblr-focus-ring-color: rgba( var(--tblr-google-rgb), var(--tblr-focus-ring-opacity) )}.focus-ring-youtube{--tblr-focus-ring-color: rgba( var(--tblr-youtube-rgb), var(--tblr-focus-ring-opacity) )}.focus-ring-vimeo{--tblr-focus-ring-color: rgba( var(--tblr-vimeo-rgb), var(--tblr-focus-ring-opacity) )}.focus-ring-dribbble{--tblr-focus-ring-color: rgba( var(--tblr-dribbble-rgb), var(--tblr-focus-ring-opacity) )}.focus-ring-github{--tblr-focus-ring-color: rgba( var(--tblr-github-rgb), var(--tblr-focus-ring-opacity) )}.focus-ring-instagram{--tblr-focus-ring-color: rgba( var(--tblr-instagram-rgb), var(--tblr-focus-ring-opacity) )}.focus-ring-pinterest{--tblr-focus-ring-color: rgba( var(--tblr-pinterest-rgb), var(--tblr-focus-ring-opacity) )}.focus-ring-vk{--tblr-focus-ring-color: rgba( var(--tblr-vk-rgb), var(--tblr-focus-ring-opacity) )}.focus-ring-rss{--tblr-focus-ring-color: rgba( var(--tblr-rss-rgb), var(--tblr-focus-ring-opacity) )}.focus-ring-flickr{--tblr-focus-ring-color: rgba( var(--tblr-flickr-rgb), var(--tblr-focus-ring-opacity) )}.focus-ring-bitbucket{--tblr-focus-ring-color: rgba( var(--tblr-bitbucket-rgb), var(--tblr-focus-ring-opacity) )}.focus-ring-tabler{--tblr-focus-ring-color: rgba( var(--tblr-tabler-rgb), var(--tblr-focus-ring-opacity) )}.border-primary{--tblr-border-opacity: 1;border-color:rgba(var(--tblr-primary-rgb),var(--tblr-border-opacity))!important}.border-secondary{--tblr-border-opacity: 1;border-color:rgba(var(--tblr-secondary-rgb),var(--tblr-border-opacity))!important}.border-success{--tblr-border-opacity: 1;border-color:rgba(var(--tblr-success-rgb),var(--tblr-border-opacity))!important}.border-info{--tblr-border-opacity: 1;border-color:rgba(var(--tblr-info-rgb),var(--tblr-border-opacity))!important}.border-warning{--tblr-border-opacity: 1;border-color:rgba(var(--tblr-warning-rgb),var(--tblr-border-opacity))!important}.border-danger{--tblr-border-opacity: 1;border-color:rgba(var(--tblr-danger-rgb),var(--tblr-border-opacity))!important}.border-light{--tblr-border-opacity: 1;border-color:rgba(var(--tblr-light-rgb),var(--tblr-border-opacity))!important}.border-dark{--tblr-border-opacity: 1;border-color:rgba(var(--tblr-dark-rgb),var(--tblr-border-opacity))!important}.border-muted{--tblr-border-opacity: 1;border-color:rgba(var(--tblr-muted-rgb),var(--tblr-border-opacity))!important}.border-blue{--tblr-border-opacity: 1;border-color:rgba(var(--tblr-blue-rgb),var(--tblr-border-opacity))!important}.border-azure{--tblr-border-opacity: 1;border-color:rgba(var(--tblr-azure-rgb),var(--tblr-border-opacity))!important}.border-indigo{--tblr-border-opacity: 1;border-color:rgba(var(--tblr-indigo-rgb),var(--tblr-border-opacity))!important}.border-purple{--tblr-border-opacity: 1;border-color:rgba(var(--tblr-purple-rgb),var(--tblr-border-opacity))!important}.border-pink{--tblr-border-opacity: 1;border-color:rgba(var(--tblr-pink-rgb),var(--tblr-border-opacity))!important}.border-red{--tblr-border-opacity: 1;border-color:rgba(var(--tblr-red-rgb),var(--tblr-border-opacity))!important}.border-orange{--tblr-border-opacity: 1;border-color:rgba(var(--tblr-orange-rgb),var(--tblr-border-opacity))!important}.border-yellow{--tblr-border-opacity: 1;border-color:rgba(var(--tblr-yellow-rgb),var(--tblr-border-opacity))!important}.border-lime{--tblr-border-opacity: 1;border-color:rgba(var(--tblr-lime-rgb),var(--tblr-border-opacity))!important}.border-green{--tblr-border-opacity: 1;border-color:rgba(var(--tblr-green-rgb),var(--tblr-border-opacity))!important}.border-teal{--tblr-border-opacity: 1;border-color:rgba(var(--tblr-teal-rgb),var(--tblr-border-opacity))!important}.border-cyan{--tblr-border-opacity: 1;border-color:rgba(var(--tblr-cyan-rgb),var(--tblr-border-opacity))!important}.border-facebook{--tblr-border-opacity: 1;border-color:rgba(var(--tblr-facebook-rgb),var(--tblr-border-opacity))!important}.border-twitter{--tblr-border-opacity: 1;border-color:rgba(var(--tblr-twitter-rgb),var(--tblr-border-opacity))!important}.border-linkedin{--tblr-border-opacity: 1;border-color:rgba(var(--tblr-linkedin-rgb),var(--tblr-border-opacity))!important}.border-google{--tblr-border-opacity: 1;border-color:rgba(var(--tblr-google-rgb),var(--tblr-border-opacity))!important}.border-youtube{--tblr-border-opacity: 1;border-color:rgba(var(--tblr-youtube-rgb),var(--tblr-border-opacity))!important}.border-vimeo{--tblr-border-opacity: 1;border-color:rgba(var(--tblr-vimeo-rgb),var(--tblr-border-opacity))!important}.border-dribbble{--tblr-border-opacity: 1;border-color:rgba(var(--tblr-dribbble-rgb),var(--tblr-border-opacity))!important}.border-github{--tblr-border-opacity: 1;border-color:rgba(var(--tblr-github-rgb),var(--tblr-border-opacity))!important}.border-instagram{--tblr-border-opacity: 1;border-color:rgba(var(--tblr-instagram-rgb),var(--tblr-border-opacity))!important}.border-pinterest{--tblr-border-opacity: 1;border-color:rgba(var(--tblr-pinterest-rgb),var(--tblr-border-opacity))!important}.border-vk{--tblr-border-opacity: 1;border-color:rgba(var(--tblr-vk-rgb),var(--tblr-border-opacity))!important}.border-rss{--tblr-border-opacity: 1;border-color:rgba(var(--tblr-rss-rgb),var(--tblr-border-opacity))!important}.border-flickr{--tblr-border-opacity: 1;border-color:rgba(var(--tblr-flickr-rgb),var(--tblr-border-opacity))!important}.border-bitbucket{--tblr-border-opacity: 1;border-color:rgba(var(--tblr-bitbucket-rgb),var(--tblr-border-opacity))!important}.border-tabler{--tblr-border-opacity: 1;border-color:rgba(var(--tblr-tabler-rgb),var(--tblr-border-opacity))!important}.border-black{--tblr-border-opacity: 1;border-color:rgba(var(--tblr-black-rgb),var(--tblr-border-opacity))!important}.border-white{--tblr-border-opacity: 1;border-color:rgba(var(--tblr-white-rgb),var(--tblr-border-opacity))!important}.border-opacity-10{--tblr-border-opacity: .1}.border-opacity-25{--tblr-border-opacity: .25}.border-opacity-50{--tblr-border-opacity: .5}.border-opacity-75{--tblr-border-opacity: .75}.border-opacity-100{--tblr-border-opacity: 1}.text-muted{--tblr-text-opacity: 1;color:var(--tblr-secondary-color)!important}.text-black{--tblr-text-opacity: 1;color:rgba(var(--tblr-black-rgb),var(--tblr-text-opacity))!important}.text-white{--tblr-text-opacity: 1;color:rgba(var(--tblr-white-rgb),var(--tblr-text-opacity))!important}.text-body{--tblr-text-opacity: 1;color:rgba(var(--tblr-body-color-rgb),var(--tblr-text-opacity))!important}.text-black-50{--tblr-text-opacity: 1;color:#00000080!important}.text-white-50{--tblr-text-opacity: 1;color:#ffffff80!important}.text-body-secondary{--tblr-text-opacity: 1;color:var(--tblr-secondary-color)!important}.text-body-tertiary{--tblr-text-opacity: 1;color:var(--tblr-tertiary-color)!important}.text-body-emphasis{--tblr-text-opacity: 1;color:var(--tblr-emphasis-color)!important}.text-reset{--tblr-text-opacity: 1;color:inherit!important}.text-opacity-25{--tblr-text-opacity: .25}.text-opacity-50{--tblr-text-opacity: .5}.text-opacity-75{--tblr-text-opacity: .75}.text-opacity-100{--tblr-text-opacity: 1}.link-opacity-10,.link-opacity-10-hover:hover{--tblr-link-opacity: .1}.link-opacity-25,.link-opacity-25-hover:hover{--tblr-link-opacity: .25}.link-opacity-50,.link-opacity-50-hover:hover{--tblr-link-opacity: .5}.link-opacity-75,.link-opacity-75-hover:hover{--tblr-link-opacity: .75}.link-opacity-100,.link-opacity-100-hover:hover{--tblr-link-opacity: 1}.link-underline-primary{--tblr-link-underline-opacity: 1;-webkit-text-decoration-color:rgba(var(--tblr-primary-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-primary-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-secondary{--tblr-link-underline-opacity: 1;-webkit-text-decoration-color:rgba(var(--tblr-secondary-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-secondary-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-success{--tblr-link-underline-opacity: 1;-webkit-text-decoration-color:rgba(var(--tblr-success-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-success-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-info{--tblr-link-underline-opacity: 1;-webkit-text-decoration-color:rgba(var(--tblr-info-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-info-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-warning{--tblr-link-underline-opacity: 1;-webkit-text-decoration-color:rgba(var(--tblr-warning-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-warning-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-danger{--tblr-link-underline-opacity: 1;-webkit-text-decoration-color:rgba(var(--tblr-danger-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-danger-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-light{--tblr-link-underline-opacity: 1;-webkit-text-decoration-color:rgba(var(--tblr-light-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-light-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-dark{--tblr-link-underline-opacity: 1;-webkit-text-decoration-color:rgba(var(--tblr-dark-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-dark-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-muted{--tblr-link-underline-opacity: 1;-webkit-text-decoration-color:rgba(var(--tblr-muted-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-muted-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-blue{--tblr-link-underline-opacity: 1;-webkit-text-decoration-color:rgba(var(--tblr-blue-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-blue-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-azure{--tblr-link-underline-opacity: 1;-webkit-text-decoration-color:rgba(var(--tblr-azure-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-azure-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-indigo{--tblr-link-underline-opacity: 1;-webkit-text-decoration-color:rgba(var(--tblr-indigo-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-indigo-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-purple{--tblr-link-underline-opacity: 1;-webkit-text-decoration-color:rgba(var(--tblr-purple-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-purple-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-pink{--tblr-link-underline-opacity: 1;-webkit-text-decoration-color:rgba(var(--tblr-pink-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-pink-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-red{--tblr-link-underline-opacity: 1;-webkit-text-decoration-color:rgba(var(--tblr-red-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-red-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-orange{--tblr-link-underline-opacity: 1;-webkit-text-decoration-color:rgba(var(--tblr-orange-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-orange-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-yellow{--tblr-link-underline-opacity: 1;-webkit-text-decoration-color:rgba(var(--tblr-yellow-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-yellow-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-lime{--tblr-link-underline-opacity: 1;-webkit-text-decoration-color:rgba(var(--tblr-lime-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-lime-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-green{--tblr-link-underline-opacity: 1;-webkit-text-decoration-color:rgba(var(--tblr-green-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-green-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-teal{--tblr-link-underline-opacity: 1;-webkit-text-decoration-color:rgba(var(--tblr-teal-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-teal-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-cyan{--tblr-link-underline-opacity: 1;-webkit-text-decoration-color:rgba(var(--tblr-cyan-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-cyan-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-facebook{--tblr-link-underline-opacity: 1;-webkit-text-decoration-color:rgba(var(--tblr-facebook-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-facebook-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-twitter{--tblr-link-underline-opacity: 1;-webkit-text-decoration-color:rgba(var(--tblr-twitter-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-twitter-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-linkedin{--tblr-link-underline-opacity: 1;-webkit-text-decoration-color:rgba(var(--tblr-linkedin-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-linkedin-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-google{--tblr-link-underline-opacity: 1;-webkit-text-decoration-color:rgba(var(--tblr-google-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-google-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-youtube{--tblr-link-underline-opacity: 1;-webkit-text-decoration-color:rgba(var(--tblr-youtube-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-youtube-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-vimeo{--tblr-link-underline-opacity: 1;-webkit-text-decoration-color:rgba(var(--tblr-vimeo-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-vimeo-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-dribbble{--tblr-link-underline-opacity: 1;-webkit-text-decoration-color:rgba(var(--tblr-dribbble-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-dribbble-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-github{--tblr-link-underline-opacity: 1;-webkit-text-decoration-color:rgba(var(--tblr-github-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-github-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-instagram{--tblr-link-underline-opacity: 1;-webkit-text-decoration-color:rgba(var(--tblr-instagram-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-instagram-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-pinterest{--tblr-link-underline-opacity: 1;-webkit-text-decoration-color:rgba(var(--tblr-pinterest-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-pinterest-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-vk{--tblr-link-underline-opacity: 1;-webkit-text-decoration-color:rgba(var(--tblr-vk-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-vk-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-rss{--tblr-link-underline-opacity: 1;-webkit-text-decoration-color:rgba(var(--tblr-rss-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-rss-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-flickr{--tblr-link-underline-opacity: 1;-webkit-text-decoration-color:rgba(var(--tblr-flickr-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-flickr-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-bitbucket{--tblr-link-underline-opacity: 1;-webkit-text-decoration-color:rgba(var(--tblr-bitbucket-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-bitbucket-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-tabler{--tblr-link-underline-opacity: 1;-webkit-text-decoration-color:rgba(var(--tblr-tabler-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-tabler-rgb),var(--tblr-link-underline-opacity))!important}.link-underline{--tblr-link-underline-opacity: 1;-webkit-text-decoration-color:rgba(var(--tblr-link-color-rgb),var(--tblr-link-underline-opacity, 1))!important;text-decoration-color:rgba(var(--tblr-link-color-rgb),var(--tblr-link-underline-opacity, 1))!important}.link-underline-opacity-0,.link-underline-opacity-0-hover:hover{--tblr-link-underline-opacity: 0}.link-underline-opacity-10,.link-underline-opacity-10-hover:hover{--tblr-link-underline-opacity: .1}.link-underline-opacity-25,.link-underline-opacity-25-hover:hover{--tblr-link-underline-opacity: .25}.link-underline-opacity-50,.link-underline-opacity-50-hover:hover{--tblr-link-underline-opacity: .5}.link-underline-opacity-75,.link-underline-opacity-75-hover:hover{--tblr-link-underline-opacity: .75}.link-underline-opacity-100,.link-underline-opacity-100-hover:hover{--tblr-link-underline-opacity: 1}.bg-black{--tblr-bg-opacity: 1;background-color:rgba(var(--tblr-black-rgb),var(--tblr-bg-opacity))!important}.bg-body{--tblr-bg-opacity: 1;background-color:rgba(var(--tblr-body-bg-rgb),var(--tblr-bg-opacity))!important}.bg-transparent{--tblr-bg-opacity: 1;background-color:transparent!important}.bg-body-secondary{--tblr-bg-opacity: 1;background-color:rgba(var(--tblr-secondary-bg-rgb),var(--tblr-bg-opacity))!important}.bg-body-tertiary{--tblr-bg-opacity: 1;background-color:rgba(var(--tblr-tertiary-bg-rgb),var(--tblr-bg-opacity))!important}.bg-opacity-10{--tblr-bg-opacity: .1}.bg-opacity-25{--tblr-bg-opacity: .25}.bg-opacity-50{--tblr-bg-opacity: .5}.bg-opacity-75{--tblr-bg-opacity: .75}.bg-opacity-100{--tblr-bg-opacity: 1}@media (min-width: 576px){.float-sm-start{float:left!important}.float-sm-end{float:right!important}.float-sm-none{float:none!important}.object-fit-sm-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-sm-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-sm-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-sm-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-sm-none{-o-object-fit:none!important;object-fit:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-grid{display:grid!important}.d-sm-inline-grid{display:inline-grid!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}.d-sm-none{display:none!important}.flex-sm-fill{flex:1 1 auto!important}.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.justify-content-sm-evenly{justify-content:space-evenly!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}.order-sm-first{order:-1!important}.order-sm-0{order:0!important}.order-sm-1{order:1!important}.order-sm-2{order:2!important}.order-sm-3{order:3!important}.order-sm-4{order:4!important}.order-sm-5{order:5!important}.order-sm-last{order:6!important}.m-sm-0{margin:0!important}.m-sm-1{margin:.25rem!important}.m-sm-2{margin:.5rem!important}.m-sm-3{margin:1rem!important}.m-sm-4{margin:1.5rem!important}.m-sm-5{margin:2rem!important}.m-sm-6{margin:3rem!important}.m-sm-7{margin:5rem!important}.m-sm-8{margin:8rem!important}.m-sm-auto{margin:auto!important}.mx-sm-0{margin-right:0!important;margin-left:0!important}.mx-sm-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-sm-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-sm-3{margin-right:1rem!important;margin-left:1rem!important}.mx-sm-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-sm-5{margin-right:2rem!important;margin-left:2rem!important}.mx-sm-6{margin-right:3rem!important;margin-left:3rem!important}.mx-sm-7{margin-right:5rem!important;margin-left:5rem!important}.mx-sm-8{margin-right:8rem!important;margin-left:8rem!important}.mx-sm-auto{margin-right:auto!important;margin-left:auto!important}.my-sm-0{margin-top:0!important;margin-bottom:0!important}.my-sm-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-sm-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-sm-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-sm-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-sm-5{margin-top:2rem!important;margin-bottom:2rem!important}.my-sm-6{margin-top:3rem!important;margin-bottom:3rem!important}.my-sm-7{margin-top:5rem!important;margin-bottom:5rem!important}.my-sm-8{margin-top:8rem!important;margin-bottom:8rem!important}.my-sm-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-sm-0{margin-top:0!important}.mt-sm-1{margin-top:.25rem!important}.mt-sm-2{margin-top:.5rem!important}.mt-sm-3{margin-top:1rem!important}.mt-sm-4{margin-top:1.5rem!important}.mt-sm-5{margin-top:2rem!important}.mt-sm-6{margin-top:3rem!important}.mt-sm-7{margin-top:5rem!important}.mt-sm-8{margin-top:8rem!important}.mt-sm-auto{margin-top:auto!important}.me-sm-0{margin-right:0!important}.me-sm-1{margin-right:.25rem!important}.me-sm-2{margin-right:.5rem!important}.me-sm-3{margin-right:1rem!important}.me-sm-4{margin-right:1.5rem!important}.me-sm-5{margin-right:2rem!important}.me-sm-6{margin-right:3rem!important}.me-sm-7{margin-right:5rem!important}.me-sm-8{margin-right:8rem!important}.me-sm-auto{margin-right:auto!important}.mb-sm-0{margin-bottom:0!important}.mb-sm-1{margin-bottom:.25rem!important}.mb-sm-2{margin-bottom:.5rem!important}.mb-sm-3{margin-bottom:1rem!important}.mb-sm-4{margin-bottom:1.5rem!important}.mb-sm-5{margin-bottom:2rem!important}.mb-sm-6{margin-bottom:3rem!important}.mb-sm-7{margin-bottom:5rem!important}.mb-sm-8{margin-bottom:8rem!important}.mb-sm-auto{margin-bottom:auto!important}.ms-sm-0{margin-left:0!important}.ms-sm-1{margin-left:.25rem!important}.ms-sm-2{margin-left:.5rem!important}.ms-sm-3{margin-left:1rem!important}.ms-sm-4{margin-left:1.5rem!important}.ms-sm-5{margin-left:2rem!important}.ms-sm-6{margin-left:3rem!important}.ms-sm-7{margin-left:5rem!important}.ms-sm-8{margin-left:8rem!important}.ms-sm-auto{margin-left:auto!important}.p-sm-0{padding:0!important}.p-sm-1{padding:.25rem!important}.p-sm-2{padding:.5rem!important}.p-sm-3{padding:1rem!important}.p-sm-4{padding:1.5rem!important}.p-sm-5{padding:2rem!important}.p-sm-6{padding:3rem!important}.p-sm-7{padding:5rem!important}.p-sm-8{padding:8rem!important}.px-sm-0{padding-right:0!important;padding-left:0!important}.px-sm-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-sm-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-sm-3{padding-right:1rem!important;padding-left:1rem!important}.px-sm-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-sm-5{padding-right:2rem!important;padding-left:2rem!important}.px-sm-6{padding-right:3rem!important;padding-left:3rem!important}.px-sm-7{padding-right:5rem!important;padding-left:5rem!important}.px-sm-8{padding-right:8rem!important;padding-left:8rem!important}.py-sm-0{padding-top:0!important;padding-bottom:0!important}.py-sm-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-sm-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-sm-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-sm-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-sm-5{padding-top:2rem!important;padding-bottom:2rem!important}.py-sm-6{padding-top:3rem!important;padding-bottom:3rem!important}.py-sm-7{padding-top:5rem!important;padding-bottom:5rem!important}.py-sm-8{padding-top:8rem!important;padding-bottom:8rem!important}.pt-sm-0{padding-top:0!important}.pt-sm-1{padding-top:.25rem!important}.pt-sm-2{padding-top:.5rem!important}.pt-sm-3{padding-top:1rem!important}.pt-sm-4{padding-top:1.5rem!important}.pt-sm-5{padding-top:2rem!important}.pt-sm-6{padding-top:3rem!important}.pt-sm-7{padding-top:5rem!important}.pt-sm-8{padding-top:8rem!important}.pe-sm-0{padding-right:0!important}.pe-sm-1{padding-right:.25rem!important}.pe-sm-2{padding-right:.5rem!important}.pe-sm-3{padding-right:1rem!important}.pe-sm-4{padding-right:1.5rem!important}.pe-sm-5{padding-right:2rem!important}.pe-sm-6{padding-right:3rem!important}.pe-sm-7{padding-right:5rem!important}.pe-sm-8{padding-right:8rem!important}.pb-sm-0{padding-bottom:0!important}.pb-sm-1{padding-bottom:.25rem!important}.pb-sm-2{padding-bottom:.5rem!important}.pb-sm-3{padding-bottom:1rem!important}.pb-sm-4{padding-bottom:1.5rem!important}.pb-sm-5{padding-bottom:2rem!important}.pb-sm-6{padding-bottom:3rem!important}.pb-sm-7{padding-bottom:5rem!important}.pb-sm-8{padding-bottom:8rem!important}.ps-sm-0{padding-left:0!important}.ps-sm-1{padding-left:.25rem!important}.ps-sm-2{padding-left:.5rem!important}.ps-sm-3{padding-left:1rem!important}.ps-sm-4{padding-left:1.5rem!important}.ps-sm-5{padding-left:2rem!important}.ps-sm-6{padding-left:3rem!important}.ps-sm-7{padding-left:5rem!important}.ps-sm-8{padding-left:8rem!important}.gap-sm-0{gap:0!important}.gap-sm-1{gap:.25rem!important}.gap-sm-2{gap:.5rem!important}.gap-sm-3{gap:1rem!important}.gap-sm-4{gap:1.5rem!important}.gap-sm-5{gap:2rem!important}.gap-sm-6{gap:3rem!important}.gap-sm-7{gap:5rem!important}.gap-sm-8{gap:8rem!important}.row-gap-sm-0{row-gap:0!important}.row-gap-sm-1{row-gap:.25rem!important}.row-gap-sm-2{row-gap:.5rem!important}.row-gap-sm-3{row-gap:1rem!important}.row-gap-sm-4{row-gap:1.5rem!important}.row-gap-sm-5{row-gap:2rem!important}.row-gap-sm-6{row-gap:3rem!important}.row-gap-sm-7{row-gap:5rem!important}.row-gap-sm-8{row-gap:8rem!important}.column-gap-sm-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-sm-1{-moz-column-gap:.25rem!important;column-gap:.25rem!important}.column-gap-sm-2{-moz-column-gap:.5rem!important;column-gap:.5rem!important}.column-gap-sm-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-sm-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-sm-5{-moz-column-gap:2rem!important;column-gap:2rem!important}.column-gap-sm-6{-moz-column-gap:3rem!important;column-gap:3rem!important}.column-gap-sm-7{-moz-column-gap:5rem!important;column-gap:5rem!important}.column-gap-sm-8{-moz-column-gap:8rem!important;column-gap:8rem!important}.text-sm-start{text-align:left!important}.text-sm-end{text-align:right!important}.text-sm-center{text-align:center!important}.columns-sm-2{-moz-columns:2!important;columns:2!important}.columns-sm-3{-moz-columns:3!important;columns:3!important}.columns-sm-4{-moz-columns:4!important;columns:4!important}}@media (min-width: 768px){.float-md-start{float:left!important}.float-md-end{float:right!important}.float-md-none{float:none!important}.object-fit-md-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-md-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-md-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-md-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-md-none{-o-object-fit:none!important;object-fit:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-grid{display:grid!important}.d-md-inline-grid{display:inline-grid!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}.d-md-none{display:none!important}.flex-md-fill{flex:1 1 auto!important}.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.justify-content-md-evenly{justify-content:space-evenly!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}.order-md-first{order:-1!important}.order-md-0{order:0!important}.order-md-1{order:1!important}.order-md-2{order:2!important}.order-md-3{order:3!important}.order-md-4{order:4!important}.order-md-5{order:5!important}.order-md-last{order:6!important}.m-md-0{margin:0!important}.m-md-1{margin:.25rem!important}.m-md-2{margin:.5rem!important}.m-md-3{margin:1rem!important}.m-md-4{margin:1.5rem!important}.m-md-5{margin:2rem!important}.m-md-6{margin:3rem!important}.m-md-7{margin:5rem!important}.m-md-8{margin:8rem!important}.m-md-auto{margin:auto!important}.mx-md-0{margin-right:0!important;margin-left:0!important}.mx-md-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-md-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-md-3{margin-right:1rem!important;margin-left:1rem!important}.mx-md-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-md-5{margin-right:2rem!important;margin-left:2rem!important}.mx-md-6{margin-right:3rem!important;margin-left:3rem!important}.mx-md-7{margin-right:5rem!important;margin-left:5rem!important}.mx-md-8{margin-right:8rem!important;margin-left:8rem!important}.mx-md-auto{margin-right:auto!important;margin-left:auto!important}.my-md-0{margin-top:0!important;margin-bottom:0!important}.my-md-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-md-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-md-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-md-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-md-5{margin-top:2rem!important;margin-bottom:2rem!important}.my-md-6{margin-top:3rem!important;margin-bottom:3rem!important}.my-md-7{margin-top:5rem!important;margin-bottom:5rem!important}.my-md-8{margin-top:8rem!important;margin-bottom:8rem!important}.my-md-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-md-0{margin-top:0!important}.mt-md-1{margin-top:.25rem!important}.mt-md-2{margin-top:.5rem!important}.mt-md-3{margin-top:1rem!important}.mt-md-4{margin-top:1.5rem!important}.mt-md-5{margin-top:2rem!important}.mt-md-6{margin-top:3rem!important}.mt-md-7{margin-top:5rem!important}.mt-md-8{margin-top:8rem!important}.mt-md-auto{margin-top:auto!important}.me-md-0{margin-right:0!important}.me-md-1{margin-right:.25rem!important}.me-md-2{margin-right:.5rem!important}.me-md-3{margin-right:1rem!important}.me-md-4{margin-right:1.5rem!important}.me-md-5{margin-right:2rem!important}.me-md-6{margin-right:3rem!important}.me-md-7{margin-right:5rem!important}.me-md-8{margin-right:8rem!important}.me-md-auto{margin-right:auto!important}.mb-md-0{margin-bottom:0!important}.mb-md-1{margin-bottom:.25rem!important}.mb-md-2{margin-bottom:.5rem!important}.mb-md-3{margin-bottom:1rem!important}.mb-md-4{margin-bottom:1.5rem!important}.mb-md-5{margin-bottom:2rem!important}.mb-md-6{margin-bottom:3rem!important}.mb-md-7{margin-bottom:5rem!important}.mb-md-8{margin-bottom:8rem!important}.mb-md-auto{margin-bottom:auto!important}.ms-md-0{margin-left:0!important}.ms-md-1{margin-left:.25rem!important}.ms-md-2{margin-left:.5rem!important}.ms-md-3{margin-left:1rem!important}.ms-md-4{margin-left:1.5rem!important}.ms-md-5{margin-left:2rem!important}.ms-md-6{margin-left:3rem!important}.ms-md-7{margin-left:5rem!important}.ms-md-8{margin-left:8rem!important}.ms-md-auto{margin-left:auto!important}.p-md-0{padding:0!important}.p-md-1{padding:.25rem!important}.p-md-2{padding:.5rem!important}.p-md-3{padding:1rem!important}.p-md-4{padding:1.5rem!important}.p-md-5{padding:2rem!important}.p-md-6{padding:3rem!important}.p-md-7{padding:5rem!important}.p-md-8{padding:8rem!important}.px-md-0{padding-right:0!important;padding-left:0!important}.px-md-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-md-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-md-3{padding-right:1rem!important;padding-left:1rem!important}.px-md-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-md-5{padding-right:2rem!important;padding-left:2rem!important}.px-md-6{padding-right:3rem!important;padding-left:3rem!important}.px-md-7{padding-right:5rem!important;padding-left:5rem!important}.px-md-8{padding-right:8rem!important;padding-left:8rem!important}.py-md-0{padding-top:0!important;padding-bottom:0!important}.py-md-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-md-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-md-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-md-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-md-5{padding-top:2rem!important;padding-bottom:2rem!important}.py-md-6{padding-top:3rem!important;padding-bottom:3rem!important}.py-md-7{padding-top:5rem!important;padding-bottom:5rem!important}.py-md-8{padding-top:8rem!important;padding-bottom:8rem!important}.pt-md-0{padding-top:0!important}.pt-md-1{padding-top:.25rem!important}.pt-md-2{padding-top:.5rem!important}.pt-md-3{padding-top:1rem!important}.pt-md-4{padding-top:1.5rem!important}.pt-md-5{padding-top:2rem!important}.pt-md-6{padding-top:3rem!important}.pt-md-7{padding-top:5rem!important}.pt-md-8{padding-top:8rem!important}.pe-md-0{padding-right:0!important}.pe-md-1{padding-right:.25rem!important}.pe-md-2{padding-right:.5rem!important}.pe-md-3{padding-right:1rem!important}.pe-md-4{padding-right:1.5rem!important}.pe-md-5{padding-right:2rem!important}.pe-md-6{padding-right:3rem!important}.pe-md-7{padding-right:5rem!important}.pe-md-8{padding-right:8rem!important}.pb-md-0{padding-bottom:0!important}.pb-md-1{padding-bottom:.25rem!important}.pb-md-2{padding-bottom:.5rem!important}.pb-md-3{padding-bottom:1rem!important}.pb-md-4{padding-bottom:1.5rem!important}.pb-md-5{padding-bottom:2rem!important}.pb-md-6{padding-bottom:3rem!important}.pb-md-7{padding-bottom:5rem!important}.pb-md-8{padding-bottom:8rem!important}.ps-md-0{padding-left:0!important}.ps-md-1{padding-left:.25rem!important}.ps-md-2{padding-left:.5rem!important}.ps-md-3{padding-left:1rem!important}.ps-md-4{padding-left:1.5rem!important}.ps-md-5{padding-left:2rem!important}.ps-md-6{padding-left:3rem!important}.ps-md-7{padding-left:5rem!important}.ps-md-8{padding-left:8rem!important}.gap-md-0{gap:0!important}.gap-md-1{gap:.25rem!important}.gap-md-2{gap:.5rem!important}.gap-md-3{gap:1rem!important}.gap-md-4{gap:1.5rem!important}.gap-md-5{gap:2rem!important}.gap-md-6{gap:3rem!important}.gap-md-7{gap:5rem!important}.gap-md-8{gap:8rem!important}.row-gap-md-0{row-gap:0!important}.row-gap-md-1{row-gap:.25rem!important}.row-gap-md-2{row-gap:.5rem!important}.row-gap-md-3{row-gap:1rem!important}.row-gap-md-4{row-gap:1.5rem!important}.row-gap-md-5{row-gap:2rem!important}.row-gap-md-6{row-gap:3rem!important}.row-gap-md-7{row-gap:5rem!important}.row-gap-md-8{row-gap:8rem!important}.column-gap-md-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-md-1{-moz-column-gap:.25rem!important;column-gap:.25rem!important}.column-gap-md-2{-moz-column-gap:.5rem!important;column-gap:.5rem!important}.column-gap-md-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-md-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-md-5{-moz-column-gap:2rem!important;column-gap:2rem!important}.column-gap-md-6{-moz-column-gap:3rem!important;column-gap:3rem!important}.column-gap-md-7{-moz-column-gap:5rem!important;column-gap:5rem!important}.column-gap-md-8{-moz-column-gap:8rem!important;column-gap:8rem!important}.text-md-start{text-align:left!important}.text-md-end{text-align:right!important}.text-md-center{text-align:center!important}.columns-md-2{-moz-columns:2!important;columns:2!important}.columns-md-3{-moz-columns:3!important;columns:3!important}.columns-md-4{-moz-columns:4!important;columns:4!important}}@media (min-width: 992px){.float-lg-start{float:left!important}.float-lg-end{float:right!important}.float-lg-none{float:none!important}.object-fit-lg-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-lg-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-lg-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-lg-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-lg-none{-o-object-fit:none!important;object-fit:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-grid{display:grid!important}.d-lg-inline-grid{display:inline-grid!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}.d-lg-none{display:none!important}.flex-lg-fill{flex:1 1 auto!important}.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.justify-content-lg-evenly{justify-content:space-evenly!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}.order-lg-first{order:-1!important}.order-lg-0{order:0!important}.order-lg-1{order:1!important}.order-lg-2{order:2!important}.order-lg-3{order:3!important}.order-lg-4{order:4!important}.order-lg-5{order:5!important}.order-lg-last{order:6!important}.m-lg-0{margin:0!important}.m-lg-1{margin:.25rem!important}.m-lg-2{margin:.5rem!important}.m-lg-3{margin:1rem!important}.m-lg-4{margin:1.5rem!important}.m-lg-5{margin:2rem!important}.m-lg-6{margin:3rem!important}.m-lg-7{margin:5rem!important}.m-lg-8{margin:8rem!important}.m-lg-auto{margin:auto!important}.mx-lg-0{margin-right:0!important;margin-left:0!important}.mx-lg-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-lg-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-lg-3{margin-right:1rem!important;margin-left:1rem!important}.mx-lg-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-lg-5{margin-right:2rem!important;margin-left:2rem!important}.mx-lg-6{margin-right:3rem!important;margin-left:3rem!important}.mx-lg-7{margin-right:5rem!important;margin-left:5rem!important}.mx-lg-8{margin-right:8rem!important;margin-left:8rem!important}.mx-lg-auto{margin-right:auto!important;margin-left:auto!important}.my-lg-0{margin-top:0!important;margin-bottom:0!important}.my-lg-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-lg-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-lg-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-lg-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-lg-5{margin-top:2rem!important;margin-bottom:2rem!important}.my-lg-6{margin-top:3rem!important;margin-bottom:3rem!important}.my-lg-7{margin-top:5rem!important;margin-bottom:5rem!important}.my-lg-8{margin-top:8rem!important;margin-bottom:8rem!important}.my-lg-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-lg-0{margin-top:0!important}.mt-lg-1{margin-top:.25rem!important}.mt-lg-2{margin-top:.5rem!important}.mt-lg-3{margin-top:1rem!important}.mt-lg-4{margin-top:1.5rem!important}.mt-lg-5{margin-top:2rem!important}.mt-lg-6{margin-top:3rem!important}.mt-lg-7{margin-top:5rem!important}.mt-lg-8{margin-top:8rem!important}.mt-lg-auto{margin-top:auto!important}.me-lg-0{margin-right:0!important}.me-lg-1{margin-right:.25rem!important}.me-lg-2{margin-right:.5rem!important}.me-lg-3{margin-right:1rem!important}.me-lg-4{margin-right:1.5rem!important}.me-lg-5{margin-right:2rem!important}.me-lg-6{margin-right:3rem!important}.me-lg-7{margin-right:5rem!important}.me-lg-8{margin-right:8rem!important}.me-lg-auto{margin-right:auto!important}.mb-lg-0{margin-bottom:0!important}.mb-lg-1{margin-bottom:.25rem!important}.mb-lg-2{margin-bottom:.5rem!important}.mb-lg-3{margin-bottom:1rem!important}.mb-lg-4{margin-bottom:1.5rem!important}.mb-lg-5{margin-bottom:2rem!important}.mb-lg-6{margin-bottom:3rem!important}.mb-lg-7{margin-bottom:5rem!important}.mb-lg-8{margin-bottom:8rem!important}.mb-lg-auto{margin-bottom:auto!important}.ms-lg-0{margin-left:0!important}.ms-lg-1{margin-left:.25rem!important}.ms-lg-2{margin-left:.5rem!important}.ms-lg-3{margin-left:1rem!important}.ms-lg-4{margin-left:1.5rem!important}.ms-lg-5{margin-left:2rem!important}.ms-lg-6{margin-left:3rem!important}.ms-lg-7{margin-left:5rem!important}.ms-lg-8{margin-left:8rem!important}.ms-lg-auto{margin-left:auto!important}.p-lg-0{padding:0!important}.p-lg-1{padding:.25rem!important}.p-lg-2{padding:.5rem!important}.p-lg-3{padding:1rem!important}.p-lg-4{padding:1.5rem!important}.p-lg-5{padding:2rem!important}.p-lg-6{padding:3rem!important}.p-lg-7{padding:5rem!important}.p-lg-8{padding:8rem!important}.px-lg-0{padding-right:0!important;padding-left:0!important}.px-lg-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-lg-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-lg-3{padding-right:1rem!important;padding-left:1rem!important}.px-lg-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-lg-5{padding-right:2rem!important;padding-left:2rem!important}.px-lg-6{padding-right:3rem!important;padding-left:3rem!important}.px-lg-7{padding-right:5rem!important;padding-left:5rem!important}.px-lg-8{padding-right:8rem!important;padding-left:8rem!important}.py-lg-0{padding-top:0!important;padding-bottom:0!important}.py-lg-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-lg-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-lg-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-lg-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-lg-5{padding-top:2rem!important;padding-bottom:2rem!important}.py-lg-6{padding-top:3rem!important;padding-bottom:3rem!important}.py-lg-7{padding-top:5rem!important;padding-bottom:5rem!important}.py-lg-8{padding-top:8rem!important;padding-bottom:8rem!important}.pt-lg-0{padding-top:0!important}.pt-lg-1{padding-top:.25rem!important}.pt-lg-2{padding-top:.5rem!important}.pt-lg-3{padding-top:1rem!important}.pt-lg-4{padding-top:1.5rem!important}.pt-lg-5{padding-top:2rem!important}.pt-lg-6{padding-top:3rem!important}.pt-lg-7{padding-top:5rem!important}.pt-lg-8{padding-top:8rem!important}.pe-lg-0{padding-right:0!important}.pe-lg-1{padding-right:.25rem!important}.pe-lg-2{padding-right:.5rem!important}.pe-lg-3{padding-right:1rem!important}.pe-lg-4{padding-right:1.5rem!important}.pe-lg-5{padding-right:2rem!important}.pe-lg-6{padding-right:3rem!important}.pe-lg-7{padding-right:5rem!important}.pe-lg-8{padding-right:8rem!important}.pb-lg-0{padding-bottom:0!important}.pb-lg-1{padding-bottom:.25rem!important}.pb-lg-2{padding-bottom:.5rem!important}.pb-lg-3{padding-bottom:1rem!important}.pb-lg-4{padding-bottom:1.5rem!important}.pb-lg-5{padding-bottom:2rem!important}.pb-lg-6{padding-bottom:3rem!important}.pb-lg-7{padding-bottom:5rem!important}.pb-lg-8{padding-bottom:8rem!important}.ps-lg-0{padding-left:0!important}.ps-lg-1{padding-left:.25rem!important}.ps-lg-2{padding-left:.5rem!important}.ps-lg-3{padding-left:1rem!important}.ps-lg-4{padding-left:1.5rem!important}.ps-lg-5{padding-left:2rem!important}.ps-lg-6{padding-left:3rem!important}.ps-lg-7{padding-left:5rem!important}.ps-lg-8{padding-left:8rem!important}.gap-lg-0{gap:0!important}.gap-lg-1{gap:.25rem!important}.gap-lg-2{gap:.5rem!important}.gap-lg-3{gap:1rem!important}.gap-lg-4{gap:1.5rem!important}.gap-lg-5{gap:2rem!important}.gap-lg-6{gap:3rem!important}.gap-lg-7{gap:5rem!important}.gap-lg-8{gap:8rem!important}.row-gap-lg-0{row-gap:0!important}.row-gap-lg-1{row-gap:.25rem!important}.row-gap-lg-2{row-gap:.5rem!important}.row-gap-lg-3{row-gap:1rem!important}.row-gap-lg-4{row-gap:1.5rem!important}.row-gap-lg-5{row-gap:2rem!important}.row-gap-lg-6{row-gap:3rem!important}.row-gap-lg-7{row-gap:5rem!important}.row-gap-lg-8{row-gap:8rem!important}.column-gap-lg-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-lg-1{-moz-column-gap:.25rem!important;column-gap:.25rem!important}.column-gap-lg-2{-moz-column-gap:.5rem!important;column-gap:.5rem!important}.column-gap-lg-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-lg-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-lg-5{-moz-column-gap:2rem!important;column-gap:2rem!important}.column-gap-lg-6{-moz-column-gap:3rem!important;column-gap:3rem!important}.column-gap-lg-7{-moz-column-gap:5rem!important;column-gap:5rem!important}.column-gap-lg-8{-moz-column-gap:8rem!important;column-gap:8rem!important}.text-lg-start{text-align:left!important}.text-lg-end{text-align:right!important}.text-lg-center{text-align:center!important}.columns-lg-2{-moz-columns:2!important;columns:2!important}.columns-lg-3{-moz-columns:3!important;columns:3!important}.columns-lg-4{-moz-columns:4!important;columns:4!important}}@media (min-width: 1200px){.float-xl-start{float:left!important}.float-xl-end{float:right!important}.float-xl-none{float:none!important}.object-fit-xl-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-xl-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-xl-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-xl-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-xl-none{-o-object-fit:none!important;object-fit:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-grid{display:grid!important}.d-xl-inline-grid{display:inline-grid!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}.d-xl-none{display:none!important}.flex-xl-fill{flex:1 1 auto!important}.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.justify-content-xl-evenly{justify-content:space-evenly!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}.order-xl-first{order:-1!important}.order-xl-0{order:0!important}.order-xl-1{order:1!important}.order-xl-2{order:2!important}.order-xl-3{order:3!important}.order-xl-4{order:4!important}.order-xl-5{order:5!important}.order-xl-last{order:6!important}.m-xl-0{margin:0!important}.m-xl-1{margin:.25rem!important}.m-xl-2{margin:.5rem!important}.m-xl-3{margin:1rem!important}.m-xl-4{margin:1.5rem!important}.m-xl-5{margin:2rem!important}.m-xl-6{margin:3rem!important}.m-xl-7{margin:5rem!important}.m-xl-8{margin:8rem!important}.m-xl-auto{margin:auto!important}.mx-xl-0{margin-right:0!important;margin-left:0!important}.mx-xl-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-xl-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-xl-3{margin-right:1rem!important;margin-left:1rem!important}.mx-xl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-xl-5{margin-right:2rem!important;margin-left:2rem!important}.mx-xl-6{margin-right:3rem!important;margin-left:3rem!important}.mx-xl-7{margin-right:5rem!important;margin-left:5rem!important}.mx-xl-8{margin-right:8rem!important;margin-left:8rem!important}.mx-xl-auto{margin-right:auto!important;margin-left:auto!important}.my-xl-0{margin-top:0!important;margin-bottom:0!important}.my-xl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xl-5{margin-top:2rem!important;margin-bottom:2rem!important}.my-xl-6{margin-top:3rem!important;margin-bottom:3rem!important}.my-xl-7{margin-top:5rem!important;margin-bottom:5rem!important}.my-xl-8{margin-top:8rem!important;margin-bottom:8rem!important}.my-xl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xl-0{margin-top:0!important}.mt-xl-1{margin-top:.25rem!important}.mt-xl-2{margin-top:.5rem!important}.mt-xl-3{margin-top:1rem!important}.mt-xl-4{margin-top:1.5rem!important}.mt-xl-5{margin-top:2rem!important}.mt-xl-6{margin-top:3rem!important}.mt-xl-7{margin-top:5rem!important}.mt-xl-8{margin-top:8rem!important}.mt-xl-auto{margin-top:auto!important}.me-xl-0{margin-right:0!important}.me-xl-1{margin-right:.25rem!important}.me-xl-2{margin-right:.5rem!important}.me-xl-3{margin-right:1rem!important}.me-xl-4{margin-right:1.5rem!important}.me-xl-5{margin-right:2rem!important}.me-xl-6{margin-right:3rem!important}.me-xl-7{margin-right:5rem!important}.me-xl-8{margin-right:8rem!important}.me-xl-auto{margin-right:auto!important}.mb-xl-0{margin-bottom:0!important}.mb-xl-1{margin-bottom:.25rem!important}.mb-xl-2{margin-bottom:.5rem!important}.mb-xl-3{margin-bottom:1rem!important}.mb-xl-4{margin-bottom:1.5rem!important}.mb-xl-5{margin-bottom:2rem!important}.mb-xl-6{margin-bottom:3rem!important}.mb-xl-7{margin-bottom:5rem!important}.mb-xl-8{margin-bottom:8rem!important}.mb-xl-auto{margin-bottom:auto!important}.ms-xl-0{margin-left:0!important}.ms-xl-1{margin-left:.25rem!important}.ms-xl-2{margin-left:.5rem!important}.ms-xl-3{margin-left:1rem!important}.ms-xl-4{margin-left:1.5rem!important}.ms-xl-5{margin-left:2rem!important}.ms-xl-6{margin-left:3rem!important}.ms-xl-7{margin-left:5rem!important}.ms-xl-8{margin-left:8rem!important}.ms-xl-auto{margin-left:auto!important}.p-xl-0{padding:0!important}.p-xl-1{padding:.25rem!important}.p-xl-2{padding:.5rem!important}.p-xl-3{padding:1rem!important}.p-xl-4{padding:1.5rem!important}.p-xl-5{padding:2rem!important}.p-xl-6{padding:3rem!important}.p-xl-7{padding:5rem!important}.p-xl-8{padding:8rem!important}.px-xl-0{padding-right:0!important;padding-left:0!important}.px-xl-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-xl-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-xl-3{padding-right:1rem!important;padding-left:1rem!important}.px-xl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-xl-5{padding-right:2rem!important;padding-left:2rem!important}.px-xl-6{padding-right:3rem!important;padding-left:3rem!important}.px-xl-7{padding-right:5rem!important;padding-left:5rem!important}.px-xl-8{padding-right:8rem!important;padding-left:8rem!important}.py-xl-0{padding-top:0!important;padding-bottom:0!important}.py-xl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xl-5{padding-top:2rem!important;padding-bottom:2rem!important}.py-xl-6{padding-top:3rem!important;padding-bottom:3rem!important}.py-xl-7{padding-top:5rem!important;padding-bottom:5rem!important}.py-xl-8{padding-top:8rem!important;padding-bottom:8rem!important}.pt-xl-0{padding-top:0!important}.pt-xl-1{padding-top:.25rem!important}.pt-xl-2{padding-top:.5rem!important}.pt-xl-3{padding-top:1rem!important}.pt-xl-4{padding-top:1.5rem!important}.pt-xl-5{padding-top:2rem!important}.pt-xl-6{padding-top:3rem!important}.pt-xl-7{padding-top:5rem!important}.pt-xl-8{padding-top:8rem!important}.pe-xl-0{padding-right:0!important}.pe-xl-1{padding-right:.25rem!important}.pe-xl-2{padding-right:.5rem!important}.pe-xl-3{padding-right:1rem!important}.pe-xl-4{padding-right:1.5rem!important}.pe-xl-5{padding-right:2rem!important}.pe-xl-6{padding-right:3rem!important}.pe-xl-7{padding-right:5rem!important}.pe-xl-8{padding-right:8rem!important}.pb-xl-0{padding-bottom:0!important}.pb-xl-1{padding-bottom:.25rem!important}.pb-xl-2{padding-bottom:.5rem!important}.pb-xl-3{padding-bottom:1rem!important}.pb-xl-4{padding-bottom:1.5rem!important}.pb-xl-5{padding-bottom:2rem!important}.pb-xl-6{padding-bottom:3rem!important}.pb-xl-7{padding-bottom:5rem!important}.pb-xl-8{padding-bottom:8rem!important}.ps-xl-0{padding-left:0!important}.ps-xl-1{padding-left:.25rem!important}.ps-xl-2{padding-left:.5rem!important}.ps-xl-3{padding-left:1rem!important}.ps-xl-4{padding-left:1.5rem!important}.ps-xl-5{padding-left:2rem!important}.ps-xl-6{padding-left:3rem!important}.ps-xl-7{padding-left:5rem!important}.ps-xl-8{padding-left:8rem!important}.gap-xl-0{gap:0!important}.gap-xl-1{gap:.25rem!important}.gap-xl-2{gap:.5rem!important}.gap-xl-3{gap:1rem!important}.gap-xl-4{gap:1.5rem!important}.gap-xl-5{gap:2rem!important}.gap-xl-6{gap:3rem!important}.gap-xl-7{gap:5rem!important}.gap-xl-8{gap:8rem!important}.row-gap-xl-0{row-gap:0!important}.row-gap-xl-1{row-gap:.25rem!important}.row-gap-xl-2{row-gap:.5rem!important}.row-gap-xl-3{row-gap:1rem!important}.row-gap-xl-4{row-gap:1.5rem!important}.row-gap-xl-5{row-gap:2rem!important}.row-gap-xl-6{row-gap:3rem!important}.row-gap-xl-7{row-gap:5rem!important}.row-gap-xl-8{row-gap:8rem!important}.column-gap-xl-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-xl-1{-moz-column-gap:.25rem!important;column-gap:.25rem!important}.column-gap-xl-2{-moz-column-gap:.5rem!important;column-gap:.5rem!important}.column-gap-xl-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-xl-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-xl-5{-moz-column-gap:2rem!important;column-gap:2rem!important}.column-gap-xl-6{-moz-column-gap:3rem!important;column-gap:3rem!important}.column-gap-xl-7{-moz-column-gap:5rem!important;column-gap:5rem!important}.column-gap-xl-8{-moz-column-gap:8rem!important;column-gap:8rem!important}.text-xl-start{text-align:left!important}.text-xl-end{text-align:right!important}.text-xl-center{text-align:center!important}.columns-xl-2{-moz-columns:2!important;columns:2!important}.columns-xl-3{-moz-columns:3!important;columns:3!important}.columns-xl-4{-moz-columns:4!important;columns:4!important}}@media (min-width: 1400px){.float-xxl-start{float:left!important}.float-xxl-end{float:right!important}.float-xxl-none{float:none!important}.object-fit-xxl-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-xxl-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-xxl-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-xxl-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-xxl-none{-o-object-fit:none!important;object-fit:none!important}.d-xxl-inline{display:inline!important}.d-xxl-inline-block{display:inline-block!important}.d-xxl-block{display:block!important}.d-xxl-grid{display:grid!important}.d-xxl-inline-grid{display:inline-grid!important}.d-xxl-table{display:table!important}.d-xxl-table-row{display:table-row!important}.d-xxl-table-cell{display:table-cell!important}.d-xxl-flex{display:flex!important}.d-xxl-inline-flex{display:inline-flex!important}.d-xxl-none{display:none!important}.flex-xxl-fill{flex:1 1 auto!important}.flex-xxl-row{flex-direction:row!important}.flex-xxl-column{flex-direction:column!important}.flex-xxl-row-reverse{flex-direction:row-reverse!important}.flex-xxl-column-reverse{flex-direction:column-reverse!important}.flex-xxl-grow-0{flex-grow:0!important}.flex-xxl-grow-1{flex-grow:1!important}.flex-xxl-shrink-0{flex-shrink:0!important}.flex-xxl-shrink-1{flex-shrink:1!important}.flex-xxl-wrap{flex-wrap:wrap!important}.flex-xxl-nowrap{flex-wrap:nowrap!important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-xxl-start{justify-content:flex-start!important}.justify-content-xxl-end{justify-content:flex-end!important}.justify-content-xxl-center{justify-content:center!important}.justify-content-xxl-between{justify-content:space-between!important}.justify-content-xxl-around{justify-content:space-around!important}.justify-content-xxl-evenly{justify-content:space-evenly!important}.align-items-xxl-start{align-items:flex-start!important}.align-items-xxl-end{align-items:flex-end!important}.align-items-xxl-center{align-items:center!important}.align-items-xxl-baseline{align-items:baseline!important}.align-items-xxl-stretch{align-items:stretch!important}.align-content-xxl-start{align-content:flex-start!important}.align-content-xxl-end{align-content:flex-end!important}.align-content-xxl-center{align-content:center!important}.align-content-xxl-between{align-content:space-between!important}.align-content-xxl-around{align-content:space-around!important}.align-content-xxl-stretch{align-content:stretch!important}.align-self-xxl-auto{align-self:auto!important}.align-self-xxl-start{align-self:flex-start!important}.align-self-xxl-end{align-self:flex-end!important}.align-self-xxl-center{align-self:center!important}.align-self-xxl-baseline{align-self:baseline!important}.align-self-xxl-stretch{align-self:stretch!important}.order-xxl-first{order:-1!important}.order-xxl-0{order:0!important}.order-xxl-1{order:1!important}.order-xxl-2{order:2!important}.order-xxl-3{order:3!important}.order-xxl-4{order:4!important}.order-xxl-5{order:5!important}.order-xxl-last{order:6!important}.m-xxl-0{margin:0!important}.m-xxl-1{margin:.25rem!important}.m-xxl-2{margin:.5rem!important}.m-xxl-3{margin:1rem!important}.m-xxl-4{margin:1.5rem!important}.m-xxl-5{margin:2rem!important}.m-xxl-6{margin:3rem!important}.m-xxl-7{margin:5rem!important}.m-xxl-8{margin:8rem!important}.m-xxl-auto{margin:auto!important}.mx-xxl-0{margin-right:0!important;margin-left:0!important}.mx-xxl-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-xxl-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-xxl-3{margin-right:1rem!important;margin-left:1rem!important}.mx-xxl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-xxl-5{margin-right:2rem!important;margin-left:2rem!important}.mx-xxl-6{margin-right:3rem!important;margin-left:3rem!important}.mx-xxl-7{margin-right:5rem!important;margin-left:5rem!important}.mx-xxl-8{margin-right:8rem!important;margin-left:8rem!important}.mx-xxl-auto{margin-right:auto!important;margin-left:auto!important}.my-xxl-0{margin-top:0!important;margin-bottom:0!important}.my-xxl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xxl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xxl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xxl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xxl-5{margin-top:2rem!important;margin-bottom:2rem!important}.my-xxl-6{margin-top:3rem!important;margin-bottom:3rem!important}.my-xxl-7{margin-top:5rem!important;margin-bottom:5rem!important}.my-xxl-8{margin-top:8rem!important;margin-bottom:8rem!important}.my-xxl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xxl-0{margin-top:0!important}.mt-xxl-1{margin-top:.25rem!important}.mt-xxl-2{margin-top:.5rem!important}.mt-xxl-3{margin-top:1rem!important}.mt-xxl-4{margin-top:1.5rem!important}.mt-xxl-5{margin-top:2rem!important}.mt-xxl-6{margin-top:3rem!important}.mt-xxl-7{margin-top:5rem!important}.mt-xxl-8{margin-top:8rem!important}.mt-xxl-auto{margin-top:auto!important}.me-xxl-0{margin-right:0!important}.me-xxl-1{margin-right:.25rem!important}.me-xxl-2{margin-right:.5rem!important}.me-xxl-3{margin-right:1rem!important}.me-xxl-4{margin-right:1.5rem!important}.me-xxl-5{margin-right:2rem!important}.me-xxl-6{margin-right:3rem!important}.me-xxl-7{margin-right:5rem!important}.me-xxl-8{margin-right:8rem!important}.me-xxl-auto{margin-right:auto!important}.mb-xxl-0{margin-bottom:0!important}.mb-xxl-1{margin-bottom:.25rem!important}.mb-xxl-2{margin-bottom:.5rem!important}.mb-xxl-3{margin-bottom:1rem!important}.mb-xxl-4{margin-bottom:1.5rem!important}.mb-xxl-5{margin-bottom:2rem!important}.mb-xxl-6{margin-bottom:3rem!important}.mb-xxl-7{margin-bottom:5rem!important}.mb-xxl-8{margin-bottom:8rem!important}.mb-xxl-auto{margin-bottom:auto!important}.ms-xxl-0{margin-left:0!important}.ms-xxl-1{margin-left:.25rem!important}.ms-xxl-2{margin-left:.5rem!important}.ms-xxl-3{margin-left:1rem!important}.ms-xxl-4{margin-left:1.5rem!important}.ms-xxl-5{margin-left:2rem!important}.ms-xxl-6{margin-left:3rem!important}.ms-xxl-7{margin-left:5rem!important}.ms-xxl-8{margin-left:8rem!important}.ms-xxl-auto{margin-left:auto!important}.p-xxl-0{padding:0!important}.p-xxl-1{padding:.25rem!important}.p-xxl-2{padding:.5rem!important}.p-xxl-3{padding:1rem!important}.p-xxl-4{padding:1.5rem!important}.p-xxl-5{padding:2rem!important}.p-xxl-6{padding:3rem!important}.p-xxl-7{padding:5rem!important}.p-xxl-8{padding:8rem!important}.px-xxl-0{padding-right:0!important;padding-left:0!important}.px-xxl-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-xxl-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-xxl-3{padding-right:1rem!important;padding-left:1rem!important}.px-xxl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-xxl-5{padding-right:2rem!important;padding-left:2rem!important}.px-xxl-6{padding-right:3rem!important;padding-left:3rem!important}.px-xxl-7{padding-right:5rem!important;padding-left:5rem!important}.px-xxl-8{padding-right:8rem!important;padding-left:8rem!important}.py-xxl-0{padding-top:0!important;padding-bottom:0!important}.py-xxl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xxl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xxl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xxl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xxl-5{padding-top:2rem!important;padding-bottom:2rem!important}.py-xxl-6{padding-top:3rem!important;padding-bottom:3rem!important}.py-xxl-7{padding-top:5rem!important;padding-bottom:5rem!important}.py-xxl-8{padding-top:8rem!important;padding-bottom:8rem!important}.pt-xxl-0{padding-top:0!important}.pt-xxl-1{padding-top:.25rem!important}.pt-xxl-2{padding-top:.5rem!important}.pt-xxl-3{padding-top:1rem!important}.pt-xxl-4{padding-top:1.5rem!important}.pt-xxl-5{padding-top:2rem!important}.pt-xxl-6{padding-top:3rem!important}.pt-xxl-7{padding-top:5rem!important}.pt-xxl-8{padding-top:8rem!important}.pe-xxl-0{padding-right:0!important}.pe-xxl-1{padding-right:.25rem!important}.pe-xxl-2{padding-right:.5rem!important}.pe-xxl-3{padding-right:1rem!important}.pe-xxl-4{padding-right:1.5rem!important}.pe-xxl-5{padding-right:2rem!important}.pe-xxl-6{padding-right:3rem!important}.pe-xxl-7{padding-right:5rem!important}.pe-xxl-8{padding-right:8rem!important}.pb-xxl-0{padding-bottom:0!important}.pb-xxl-1{padding-bottom:.25rem!important}.pb-xxl-2{padding-bottom:.5rem!important}.pb-xxl-3{padding-bottom:1rem!important}.pb-xxl-4{padding-bottom:1.5rem!important}.pb-xxl-5{padding-bottom:2rem!important}.pb-xxl-6{padding-bottom:3rem!important}.pb-xxl-7{padding-bottom:5rem!important}.pb-xxl-8{padding-bottom:8rem!important}.ps-xxl-0{padding-left:0!important}.ps-xxl-1{padding-left:.25rem!important}.ps-xxl-2{padding-left:.5rem!important}.ps-xxl-3{padding-left:1rem!important}.ps-xxl-4{padding-left:1.5rem!important}.ps-xxl-5{padding-left:2rem!important}.ps-xxl-6{padding-left:3rem!important}.ps-xxl-7{padding-left:5rem!important}.ps-xxl-8{padding-left:8rem!important}.gap-xxl-0{gap:0!important}.gap-xxl-1{gap:.25rem!important}.gap-xxl-2{gap:.5rem!important}.gap-xxl-3{gap:1rem!important}.gap-xxl-4{gap:1.5rem!important}.gap-xxl-5{gap:2rem!important}.gap-xxl-6{gap:3rem!important}.gap-xxl-7{gap:5rem!important}.gap-xxl-8{gap:8rem!important}.row-gap-xxl-0{row-gap:0!important}.row-gap-xxl-1{row-gap:.25rem!important}.row-gap-xxl-2{row-gap:.5rem!important}.row-gap-xxl-3{row-gap:1rem!important}.row-gap-xxl-4{row-gap:1.5rem!important}.row-gap-xxl-5{row-gap:2rem!important}.row-gap-xxl-6{row-gap:3rem!important}.row-gap-xxl-7{row-gap:5rem!important}.row-gap-xxl-8{row-gap:8rem!important}.column-gap-xxl-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-xxl-1{-moz-column-gap:.25rem!important;column-gap:.25rem!important}.column-gap-xxl-2{-moz-column-gap:.5rem!important;column-gap:.5rem!important}.column-gap-xxl-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-xxl-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-xxl-5{-moz-column-gap:2rem!important;column-gap:2rem!important}.column-gap-xxl-6{-moz-column-gap:3rem!important;column-gap:3rem!important}.column-gap-xxl-7{-moz-column-gap:5rem!important;column-gap:5rem!important}.column-gap-xxl-8{-moz-column-gap:8rem!important;column-gap:8rem!important}.text-xxl-start{text-align:left!important}.text-xxl-end{text-align:right!important}.text-xxl-center{text-align:center!important}.columns-xxl-2{-moz-columns:2!important;columns:2!important}.columns-xxl-3{-moz-columns:3!important;columns:3!important}.columns-xxl-4{-moz-columns:4!important;columns:4!important}}:root,:host{font-size:16px;height:100%}:root,:host,[data-bs-theme=light]{--tblr-primary: #0054a6;--tblr-primary-rgb: 0, 84, 166;--tblr-primary-fg: var(--tblr-light);--tblr-primary-darken: #004c95;--tblr-primary-lt: #e6eef6;--tblr-primary-lt-rgb: 230, 238, 246;--tblr-secondary: #667382;--tblr-secondary-rgb: 102, 115, 130;--tblr-secondary-fg: var(--tblr-light);--tblr-secondary-darken: #5c6875;--tblr-secondary-lt: #f0f1f3;--tblr-secondary-lt-rgb: 240, 241, 243;--tblr-success: #2fb344;--tblr-success-rgb: 47, 179, 68;--tblr-success-fg: var(--tblr-light);--tblr-success-darken: #2aa13d;--tblr-success-lt: #eaf7ec;--tblr-success-lt-rgb: 234, 247, 236;--tblr-info: #4299e1;--tblr-info-rgb: 66, 153, 225;--tblr-info-fg: var(--tblr-light);--tblr-info-darken: #3b8acb;--tblr-info-lt: #ecf5fc;--tblr-info-lt-rgb: 236, 245, 252;--tblr-warning: #f76707;--tblr-warning-rgb: 247, 103, 7;--tblr-warning-fg: var(--tblr-light);--tblr-warning-darken: #de5d06;--tblr-warning-lt: #fef0e6;--tblr-warning-lt-rgb: 254, 240, 230;--tblr-danger: #d63939;--tblr-danger-rgb: 214, 57, 57;--tblr-danger-fg: var(--tblr-light);--tblr-danger-darken: #c13333;--tblr-danger-lt: #fbebeb;--tblr-danger-lt-rgb: 251, 235, 235;--tblr-light: #fcfdfe;--tblr-light-rgb: 252, 253, 254;--tblr-light-fg: var(--tblr-dark);--tblr-light-darken: #e3e4e5;--tblr-light-lt: white;--tblr-light-lt-rgb: 255, 255, 255;--tblr-dark: #182433;--tblr-dark-rgb: 24, 36, 51;--tblr-dark-fg: var(--tblr-light);--tblr-dark-darken: #16202e;--tblr-dark-lt: #e8e9eb;--tblr-dark-lt-rgb: 232, 233, 235;--tblr-muted: #667382;--tblr-muted-rgb: 102, 115, 130;--tblr-muted-fg: var(--tblr-light);--tblr-muted-darken: #5c6875;--tblr-muted-lt: #f0f1f3;--tblr-muted-lt-rgb: 240, 241, 243;--tblr-blue: #0054a6;--tblr-blue-rgb: 0, 84, 166;--tblr-blue-fg: var(--tblr-light);--tblr-blue-darken: #004c95;--tblr-blue-lt: #e6eef6;--tblr-blue-lt-rgb: 230, 238, 246;--tblr-azure: #4299e1;--tblr-azure-rgb: 66, 153, 225;--tblr-azure-fg: var(--tblr-light);--tblr-azure-darken: #3b8acb;--tblr-azure-lt: #ecf5fc;--tblr-azure-lt-rgb: 236, 245, 252;--tblr-indigo: #4263eb;--tblr-indigo-rgb: 66, 99, 235;--tblr-indigo-fg: var(--tblr-light);--tblr-indigo-darken: #3b59d4;--tblr-indigo-lt: #eceffd;--tblr-indigo-lt-rgb: 236, 239, 253;--tblr-purple: #ae3ec9;--tblr-purple-rgb: 174, 62, 201;--tblr-purple-fg: var(--tblr-light);--tblr-purple-darken: #9d38b5;--tblr-purple-lt: #f7ecfa;--tblr-purple-lt-rgb: 247, 236, 250;--tblr-pink: #d6336c;--tblr-pink-rgb: 214, 51, 108;--tblr-pink-fg: var(--tblr-light);--tblr-pink-darken: #c12e61;--tblr-pink-lt: #fbebf0;--tblr-pink-lt-rgb: 251, 235, 240;--tblr-red: #d63939;--tblr-red-rgb: 214, 57, 57;--tblr-red-fg: var(--tblr-light);--tblr-red-darken: #c13333;--tblr-red-lt: #fbebeb;--tblr-red-lt-rgb: 251, 235, 235;--tblr-orange: #f76707;--tblr-orange-rgb: 247, 103, 7;--tblr-orange-fg: var(--tblr-light);--tblr-orange-darken: #de5d06;--tblr-orange-lt: #fef0e6;--tblr-orange-lt-rgb: 254, 240, 230;--tblr-yellow: #f59f00;--tblr-yellow-rgb: 245, 159, 0;--tblr-yellow-fg: var(--tblr-light);--tblr-yellow-darken: #dd8f00;--tblr-yellow-lt: #fef5e6;--tblr-yellow-lt-rgb: 254, 245, 230;--tblr-lime: #74b816;--tblr-lime-rgb: 116, 184, 22;--tblr-lime-fg: var(--tblr-light);--tblr-lime-darken: #68a614;--tblr-lime-lt: #f1f8e8;--tblr-lime-lt-rgb: 241, 248, 232;--tblr-green: #2fb344;--tblr-green-rgb: 47, 179, 68;--tblr-green-fg: var(--tblr-light);--tblr-green-darken: #2aa13d;--tblr-green-lt: #eaf7ec;--tblr-green-lt-rgb: 234, 247, 236;--tblr-teal: #0ca678;--tblr-teal-rgb: 12, 166, 120;--tblr-teal-fg: var(--tblr-light);--tblr-teal-darken: #0b956c;--tblr-teal-lt: #e7f6f2;--tblr-teal-lt-rgb: 231, 246, 242;--tblr-cyan: #17a2b8;--tblr-cyan-rgb: 23, 162, 184;--tblr-cyan-fg: var(--tblr-light);--tblr-cyan-darken: #1592a6;--tblr-cyan-lt: #e8f6f8;--tblr-cyan-lt-rgb: 232, 246, 248;--tblr-facebook: #1877f2;--tblr-facebook-rgb: 24, 119, 242;--tblr-facebook-fg: var(--tblr-light);--tblr-facebook-darken: #166bda;--tblr-facebook-lt: #e8f1fe;--tblr-facebook-lt-rgb: 232, 241, 254;--tblr-twitter: #1da1f2;--tblr-twitter-rgb: 29, 161, 242;--tblr-twitter-fg: var(--tblr-light);--tblr-twitter-darken: #1a91da;--tblr-twitter-lt: #e8f6fe;--tblr-twitter-lt-rgb: 232, 246, 254;--tblr-linkedin: #0a66c2;--tblr-linkedin-rgb: 10, 102, 194;--tblr-linkedin-fg: var(--tblr-light);--tblr-linkedin-darken: #095caf;--tblr-linkedin-lt: #e7f0f9;--tblr-linkedin-lt-rgb: 231, 240, 249;--tblr-google: #dc4e41;--tblr-google-rgb: 220, 78, 65;--tblr-google-fg: var(--tblr-light);--tblr-google-darken: #c6463b;--tblr-google-lt: #fcedec;--tblr-google-lt-rgb: 252, 237, 236;--tblr-youtube: #ff0000;--tblr-youtube-rgb: 255, 0, 0;--tblr-youtube-fg: var(--tblr-light);--tblr-youtube-darken: #e60000;--tblr-youtube-lt: #ffe6e6;--tblr-youtube-lt-rgb: 255, 230, 230;--tblr-vimeo: #1ab7ea;--tblr-vimeo-rgb: 26, 183, 234;--tblr-vimeo-fg: var(--tblr-light);--tblr-vimeo-darken: #17a5d3;--tblr-vimeo-lt: #e8f8fd;--tblr-vimeo-lt-rgb: 232, 248, 253;--tblr-dribbble: #ea4c89;--tblr-dribbble-rgb: 234, 76, 137;--tblr-dribbble-fg: var(--tblr-light);--tblr-dribbble-darken: #d3447b;--tblr-dribbble-lt: #fdedf3;--tblr-dribbble-lt-rgb: 253, 237, 243;--tblr-github: #181717;--tblr-github-rgb: 24, 23, 23;--tblr-github-fg: var(--tblr-light);--tblr-github-darken: #161515;--tblr-github-lt: #e8e8e8;--tblr-github-lt-rgb: 232, 232, 232;--tblr-instagram: #e4405f;--tblr-instagram-rgb: 228, 64, 95;--tblr-instagram-fg: var(--tblr-light);--tblr-instagram-darken: #cd3a56;--tblr-instagram-lt: #fcecef;--tblr-instagram-lt-rgb: 252, 236, 239;--tblr-pinterest: #bd081c;--tblr-pinterest-rgb: 189, 8, 28;--tblr-pinterest-fg: var(--tblr-light);--tblr-pinterest-darken: #aa0719;--tblr-pinterest-lt: #f8e6e8;--tblr-pinterest-lt-rgb: 248, 230, 232;--tblr-vk: #6383a8;--tblr-vk-rgb: 99, 131, 168;--tblr-vk-fg: var(--tblr-light);--tblr-vk-darken: #597697;--tblr-vk-lt: #eff3f6;--tblr-vk-lt-rgb: 239, 243, 246;--tblr-rss: #ffa500;--tblr-rss-rgb: 255, 165, 0;--tblr-rss-fg: var(--tblr-light);--tblr-rss-darken: #e69500;--tblr-rss-lt: #fff6e6;--tblr-rss-lt-rgb: 255, 246, 230;--tblr-flickr: #0063dc;--tblr-flickr-rgb: 0, 99, 220;--tblr-flickr-fg: var(--tblr-light);--tblr-flickr-darken: #0059c6;--tblr-flickr-lt: #e6effc;--tblr-flickr-lt-rgb: 230, 239, 252;--tblr-bitbucket: #0052cc;--tblr-bitbucket-rgb: 0, 82, 204;--tblr-bitbucket-fg: var(--tblr-light);--tblr-bitbucket-darken: #004ab8;--tblr-bitbucket-lt: #e6eefa;--tblr-bitbucket-lt-rgb: 230, 238, 250;--tblr-tabler: #0054a6;--tblr-tabler-rgb: 0, 84, 166;--tblr-tabler-fg: var(--tblr-light);--tblr-tabler-darken: #004c95;--tblr-tabler-lt: #e6eef6;--tblr-tabler-lt-rgb: 230, 238, 246;--tblr-gray-50: #fcfdfe;--tblr-gray-50-rgb: 252, 253, 254;--tblr-gray-50-fg: var(--tblr-dark);--tblr-gray-50-darken: #e3e4e5;--tblr-gray-50-lt: white;--tblr-gray-50-lt-rgb: 255, 255, 255;--tblr-gray-100: #f6f8fb;--tblr-gray-100-rgb: 246, 248, 251;--tblr-gray-100-fg: var(--tblr-dark);--tblr-gray-100-darken: #dddfe2;--tblr-gray-100-lt: #fefeff;--tblr-gray-100-lt-rgb: 254, 254, 255;--tblr-gray-200: #eef1f4;--tblr-gray-200-rgb: 238, 241, 244;--tblr-gray-200-fg: var(--tblr-dark);--tblr-gray-200-darken: #d6d9dc;--tblr-gray-200-lt: #fdfefe;--tblr-gray-200-lt-rgb: 253, 254, 254;--tblr-gray-300: #dadfe5;--tblr-gray-300-rgb: 218, 223, 229;--tblr-gray-300-fg: var(--tblr-dark);--tblr-gray-300-darken: #c4c9ce;--tblr-gray-300-lt: #fbfcfc;--tblr-gray-300-lt-rgb: 251, 252, 252;--tblr-gray-400: #bbc3cd;--tblr-gray-400-rgb: 187, 195, 205;--tblr-gray-400-fg: var(--tblr-light);--tblr-gray-400-darken: #a8b0b9;--tblr-gray-400-lt: #f8f9fa;--tblr-gray-400-lt-rgb: 248, 249, 250;--tblr-gray-500: #929dab;--tblr-gray-500-rgb: 146, 157, 171;--tblr-gray-500-fg: var(--tblr-light);--tblr-gray-500-darken: #838d9a;--tblr-gray-500-lt: #f4f5f7;--tblr-gray-500-lt-rgb: 244, 245, 247;--tblr-gray-600: #667382;--tblr-gray-600-rgb: 102, 115, 130;--tblr-gray-600-fg: var(--tblr-light);--tblr-gray-600-darken: #5c6875;--tblr-gray-600-lt: #f0f1f3;--tblr-gray-600-lt-rgb: 240, 241, 243;--tblr-gray-700: #3a4859;--tblr-gray-700-rgb: 58, 72, 89;--tblr-gray-700-fg: var(--tblr-light);--tblr-gray-700-darken: #344150;--tblr-gray-700-lt: #ebedee;--tblr-gray-700-lt-rgb: 235, 237, 238;--tblr-gray-800: #182433;--tblr-gray-800-rgb: 24, 36, 51;--tblr-gray-800-fg: var(--tblr-light);--tblr-gray-800-darken: #16202e;--tblr-gray-800-lt: #e8e9eb;--tblr-gray-800-lt-rgb: 232, 233, 235;--tblr-gray-900: #040a11;--tblr-gray-900-rgb: 4, 10, 17;--tblr-gray-900-fg: var(--tblr-light);--tblr-gray-900-darken: #04090f;--tblr-gray-900-lt: #e6e7e7;--tblr-gray-900-lt-rgb: 230, 231, 231;--tblr-spacer-0: 0;--tblr-spacer-1: .25rem;--tblr-spacer-2: .5rem;--tblr-spacer-3: 1rem;--tblr-spacer-4: 1.5rem;--tblr-spacer-5: 2rem;--tblr-spacer-6: 3rem;--tblr-spacer-7: 5rem;--tblr-spacer-8: 8rem;--tblr-spacer: 1rem;--tblr-bg-surface: var(--tblr-white);--tblr-bg-surface-secondary: var(--tblr-gray-100);--tblr-bg-surface-tertiary: var(--tblr-gray-50);--tblr-bg-surface-dark: var(--tblr-dark);--tblr-bg-forms: var(--tblr-bg-surface);--tblr-border-color: #dadfe5;--tblr-border-color-translucent: rgba(4, 32, 69, .14);--tblr-border-dark-color: #bbc3cd;--tblr-border-dark-color-translucent: rgba(4, 32, 69, .27);--tblr-border-active-color: #b6bcc3;--tblr-icon-color: var(--tblr-gray-500);--tblr-active-bg: rgba(var(--tblr-primary-rgb), .04);--tblr-disabled-bg: var(--tblr-bg-surface-secondary);--tblr-disabled-color: var(--tblr-gray-300);--tblr-code-color: var(--tblr-gray-600);--tblr-code-bg: var(--tblr-bg-surface-secondary);--tblr-dark-mode-border-color: #1f2e41;--tblr-dark-mode-border-color-translucent: rgba(72, 110, 149, .14);--tblr-dark-mode-border-color-active: #2c415d;--tblr-dark-mode-border-dark-color: #1f2e41;--tblr-page-padding: var(--tblr-spacer-3);--tblr-page-padding-y: var(--tblr-spacer-4);--tblr-font-weight-light: 300;--tblr-font-weight-normal: 400;--tblr-font-weight-medium: 500;--tblr-font-weight-bold: 600;--tblr-font-weight-headings: var(--tblr-font-weight-bold);--tblr-font-size-h1: 1.5rem;--tblr-font-size-h2: 1.25rem;--tblr-font-size-h3: 1rem;--tblr-font-size-h4: .875rem;--tblr-font-size-h5: .75rem;--tblr-font-size-h6: .625rem;--tblr-line-height-h1: 2rem;--tblr-line-height-h2: 1.75rem;--tblr-line-height-h3: 1.5rem;--tblr-line-height-h4: 1.25rem;--tblr-line-height-h5: 1rem;--tblr-line-height-h6: 1rem;--tblr-box-shadow: rgba(var(--tblr-body-color-rgb), .04) 0 2px 4px 0;--tblr-box-shadow-border: inset 0 0 0 1px var(--tblr-border-color-translucent);--tblr-box-shadow-transparent: 0 0 0 0 transparent;--tblr-box-shadow-input: 0 1px 1px rgba(var(--tblr-body-color-rgb), .06);--tblr-box-shadow-card: 0 0 4px rgba(var(--tblr-body-color-rgb), .04);--tblr-box-shadow-card-hover: rgba(var(--tblr-body-color-rgb), .16) 0 2px 16px 0;--tblr-box-shadow-dropdown: 0 16px 24px 2px rgba(0, 0, 0, .07), 0 6px 30px 5px rgba(0, 0, 0, .06), 0 8px 10px -5px rgba(0, 0, 0, .1)}@media (max-width: 991.98px){:root,:host,[data-bs-theme=light]{--tblr-page-padding: var(--tblr-spacer-2)}}@media print{body{background:transparent}}*{scrollbar-color:rgba(var(--tblr-scrollbar-color, var(--tblr-body-color-rgb)),.16) transparent}*::-webkit-scrollbar{width:1rem;height:1rem;-webkit-transition:background .3s;transition:background .3s}@media (prefers-reduced-motion: reduce){*::-webkit-scrollbar{-webkit-transition:none;transition:none}}*::-webkit-scrollbar-thumb{border-radius:1rem;border:5px solid transparent;box-shadow:inset 0 0 0 1rem rgba(var(--tblr-scrollbar-color, var(--tblr-body-color-rgb)),.16)}*::-webkit-scrollbar-track{background:transparent}*:hover::-webkit-scrollbar-thumb{box-shadow:inset 0 0 0 1rem rgba(var(--tblr-scrollbar-color, var(--tblr-body-color-rgb)),.32)}*::-webkit-scrollbar-corner{background:transparent}.layout-fluid .container,.layout-fluid [class^=container-],.layout-fluid [class*=" container-"]{max-width:100%}.layout-boxed{--tblr-theme-boxed-border-radius: 0;--tblr-theme-boxed-width: 1320px}@media (min-width: 768px){.layout-boxed{background:#182433 linear-gradient(to right,rgba(255,255,255,.1),transparent) fixed;padding:1rem;--tblr-theme-boxed-border-radius: 4px}}@media (min-width: 768px){.layout-boxed .page{border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);background:var(--tblr-body-bg)}}.navbar{--tblr-navbar-bg: var(--tblr-bg-surface);--tblr-navbar-border-width: var(--tblr-border-width);--tblr-navbar-active-border-color: var(--tblr-primary);--tblr-navbar-active-bg: rgba(0, 0, 0, .3);--tblr-navbar-color: var(--tblr-body-color);--tblr-navbar-border-color: var(--tblr-border-color);align-items:stretch;min-height:3.5rem;box-shadow:inset 0 calc(-1 * var(--tblr-navbar-border-width)) 0 0 var(--tblr-navbar-border-color);background:var(--tblr-navbar-bg);color:var(--tblr-navbar-color)}@media (max-width: 575.98px){.navbar-expand-sm .navbar-collapse{flex-direction:column}.navbar-expand-sm .navbar-collapse [class^=container]{flex-direction:column;align-items:stretch;padding:0}.navbar-expand-sm .navbar-collapse .navbar-nav{margin-left:0;margin-right:0}.navbar-expand-sm .navbar-collapse .navbar-nav .nav-link{padding:.5rem calc(calc(var(--tblr-page-padding) * 2) / 2);justify-content:flex-start}.navbar-expand-sm .navbar-collapse .dropdown-menu-columns{flex-direction:column}.navbar-expand-sm .navbar-collapse .dropdown-menu{padding:0;background:transparent;position:static;color:inherit;box-shadow:none;border:none;min-width:0;margin:0}.navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-item{min-width:0;display:flex;width:auto;padding-left:calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 1.75rem);color:inherit}.navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-item.active,.navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-item:active{background:var(--tblr-navbar-active-bg)}.navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 3.25rem)}.navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 4.75rem)}.navbar-expand-sm .navbar-collapse .dropdown-toggle:after{margin-left:auto}.navbar-expand-sm .navbar-collapse .nav-item.active:after{border-bottom-width:0;border-left-width:3px;right:auto;top:0;bottom:0}}@media (min-width: 576px){.navbar-expand-sm .navbar-collapse{width:auto;flex:1 1 auto}.navbar-expand-sm .nav-item.active{position:relative}.navbar-expand-sm .nav-item.active:after{content:"";position:absolute;left:0;right:0;bottom:-.25rem;border:0 var(--tblr-border-style) var(--tblr-navbar-active-border-color);border-bottom-width:2px}.navbar-expand-sm.navbar-vertical{box-shadow:inset calc(-1 * var(--tblr-navbar-border-width)) 0 0 0 var(--tblr-navbar-border-color)}.navbar-expand-sm.navbar-vertical.navbar-right{box-shadow:inset calc(1 * var(--tblr-navbar-border-width)) 0 0 0 var(--tblr-navbar-border-color)}.navbar-expand-sm.navbar-vertical~.navbar,.navbar-expand-sm.navbar-vertical~.page-wrapper{margin-left:15rem}.navbar-expand-sm.navbar-vertical.navbar-right~.navbar,.navbar-expand-sm.navbar-vertical.navbar-right~.page-wrapper{margin-left:0;margin-right:15rem}}@media (max-width: 767.98px){.navbar-expand-md .navbar-collapse{flex-direction:column}.navbar-expand-md .navbar-collapse [class^=container]{flex-direction:column;align-items:stretch;padding:0}.navbar-expand-md .navbar-collapse .navbar-nav{margin-left:0;margin-right:0}.navbar-expand-md .navbar-collapse .navbar-nav .nav-link{padding:.5rem calc(calc(var(--tblr-page-padding) * 2) / 2);justify-content:flex-start}.navbar-expand-md .navbar-collapse .dropdown-menu-columns{flex-direction:column}.navbar-expand-md .navbar-collapse .dropdown-menu{padding:0;background:transparent;position:static;color:inherit;box-shadow:none;border:none;min-width:0;margin:0}.navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-item{min-width:0;display:flex;width:auto;padding-left:calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 1.75rem);color:inherit}.navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-item.active,.navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-item:active{background:var(--tblr-navbar-active-bg)}.navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 3.25rem)}.navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 4.75rem)}.navbar-expand-md .navbar-collapse .dropdown-toggle:after{margin-left:auto}.navbar-expand-md .navbar-collapse .nav-item.active:after{border-bottom-width:0;border-left-width:3px;right:auto;top:0;bottom:0}}@media (min-width: 768px){.navbar-expand-md .navbar-collapse{width:auto;flex:1 1 auto}.navbar-expand-md .nav-item.active{position:relative}.navbar-expand-md .nav-item.active:after{content:"";position:absolute;left:0;right:0;bottom:-.25rem;border:0 var(--tblr-border-style) var(--tblr-navbar-active-border-color);border-bottom-width:2px}.navbar-expand-md.navbar-vertical{box-shadow:inset calc(-1 * var(--tblr-navbar-border-width)) 0 0 0 var(--tblr-navbar-border-color)}.navbar-expand-md.navbar-vertical.navbar-right{box-shadow:inset calc(1 * var(--tblr-navbar-border-width)) 0 0 0 var(--tblr-navbar-border-color)}.navbar-expand-md.navbar-vertical~.navbar,.navbar-expand-md.navbar-vertical~.page-wrapper{margin-left:15rem}.navbar-expand-md.navbar-vertical.navbar-right~.navbar,.navbar-expand-md.navbar-vertical.navbar-right~.page-wrapper{margin-left:0;margin-right:15rem}}@media (max-width: 991.98px){.navbar-expand-lg .navbar-collapse{flex-direction:column}.navbar-expand-lg .navbar-collapse [class^=container]{flex-direction:column;align-items:stretch;padding:0}.navbar-expand-lg .navbar-collapse .navbar-nav{margin-left:0;margin-right:0}.navbar-expand-lg .navbar-collapse .navbar-nav .nav-link{padding:.5rem calc(calc(var(--tblr-page-padding) * 2) / 2);justify-content:flex-start}.navbar-expand-lg .navbar-collapse .dropdown-menu-columns{flex-direction:column}.navbar-expand-lg .navbar-collapse .dropdown-menu{padding:0;background:transparent;position:static;color:inherit;box-shadow:none;border:none;min-width:0;margin:0}.navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-item{min-width:0;display:flex;width:auto;padding-left:calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 1.75rem);color:inherit}.navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-item.active,.navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-item:active{background:var(--tblr-navbar-active-bg)}.navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 3.25rem)}.navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 4.75rem)}.navbar-expand-lg .navbar-collapse .dropdown-toggle:after{margin-left:auto}.navbar-expand-lg .navbar-collapse .nav-item.active:after{border-bottom-width:0;border-left-width:3px;right:auto;top:0;bottom:0}}@media (min-width: 992px){.navbar-expand-lg .navbar-collapse{width:auto;flex:1 1 auto}.navbar-expand-lg .nav-item.active{position:relative}.navbar-expand-lg .nav-item.active:after{content:"";position:absolute;left:0;right:0;bottom:-.25rem;border:0 var(--tblr-border-style) var(--tblr-navbar-active-border-color);border-bottom-width:2px}.navbar-expand-lg.navbar-vertical{box-shadow:inset calc(-1 * var(--tblr-navbar-border-width)) 0 0 0 var(--tblr-navbar-border-color)}.navbar-expand-lg.navbar-vertical.navbar-right{box-shadow:inset calc(1 * var(--tblr-navbar-border-width)) 0 0 0 var(--tblr-navbar-border-color)}.navbar-expand-lg.navbar-vertical~.navbar,.navbar-expand-lg.navbar-vertical~.page-wrapper{margin-left:15rem}.navbar-expand-lg.navbar-vertical.navbar-right~.navbar,.navbar-expand-lg.navbar-vertical.navbar-right~.page-wrapper{margin-left:0;margin-right:15rem}}@media (max-width: 1199.98px){.navbar-expand-xl .navbar-collapse{flex-direction:column}.navbar-expand-xl .navbar-collapse [class^=container]{flex-direction:column;align-items:stretch;padding:0}.navbar-expand-xl .navbar-collapse .navbar-nav{margin-left:0;margin-right:0}.navbar-expand-xl .navbar-collapse .navbar-nav .nav-link{padding:.5rem calc(calc(var(--tblr-page-padding) * 2) / 2);justify-content:flex-start}.navbar-expand-xl .navbar-collapse .dropdown-menu-columns{flex-direction:column}.navbar-expand-xl .navbar-collapse .dropdown-menu{padding:0;background:transparent;position:static;color:inherit;box-shadow:none;border:none;min-width:0;margin:0}.navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-item{min-width:0;display:flex;width:auto;padding-left:calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 1.75rem);color:inherit}.navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-item.active,.navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-item:active{background:var(--tblr-navbar-active-bg)}.navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 3.25rem)}.navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 4.75rem)}.navbar-expand-xl .navbar-collapse .dropdown-toggle:after{margin-left:auto}.navbar-expand-xl .navbar-collapse .nav-item.active:after{border-bottom-width:0;border-left-width:3px;right:auto;top:0;bottom:0}}@media (min-width: 1200px){.navbar-expand-xl .navbar-collapse{width:auto;flex:1 1 auto}.navbar-expand-xl .nav-item.active{position:relative}.navbar-expand-xl .nav-item.active:after{content:"";position:absolute;left:0;right:0;bottom:-.25rem;border:0 var(--tblr-border-style) var(--tblr-navbar-active-border-color);border-bottom-width:2px}.navbar-expand-xl.navbar-vertical{box-shadow:inset calc(-1 * var(--tblr-navbar-border-width)) 0 0 0 var(--tblr-navbar-border-color)}.navbar-expand-xl.navbar-vertical.navbar-right{box-shadow:inset calc(1 * var(--tblr-navbar-border-width)) 0 0 0 var(--tblr-navbar-border-color)}.navbar-expand-xl.navbar-vertical~.navbar,.navbar-expand-xl.navbar-vertical~.page-wrapper{margin-left:15rem}.navbar-expand-xl.navbar-vertical.navbar-right~.navbar,.navbar-expand-xl.navbar-vertical.navbar-right~.page-wrapper{margin-left:0;margin-right:15rem}}@media (max-width: 1399.98px){.navbar-expand-xxl .navbar-collapse{flex-direction:column}.navbar-expand-xxl .navbar-collapse [class^=container]{flex-direction:column;align-items:stretch;padding:0}.navbar-expand-xxl .navbar-collapse .navbar-nav{margin-left:0;margin-right:0}.navbar-expand-xxl .navbar-collapse .navbar-nav .nav-link{padding:.5rem calc(calc(var(--tblr-page-padding) * 2) / 2);justify-content:flex-start}.navbar-expand-xxl .navbar-collapse .dropdown-menu-columns{flex-direction:column}.navbar-expand-xxl .navbar-collapse .dropdown-menu{padding:0;background:transparent;position:static;color:inherit;box-shadow:none;border:none;min-width:0;margin:0}.navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-item{min-width:0;display:flex;width:auto;padding-left:calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 1.75rem);color:inherit}.navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-item.active,.navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-item:active{background:var(--tblr-navbar-active-bg)}.navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 3.25rem)}.navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 4.75rem)}.navbar-expand-xxl .navbar-collapse .dropdown-toggle:after{margin-left:auto}.navbar-expand-xxl .navbar-collapse .nav-item.active:after{border-bottom-width:0;border-left-width:3px;right:auto;top:0;bottom:0}}@media (min-width: 1400px){.navbar-expand-xxl .navbar-collapse{width:auto;flex:1 1 auto}.navbar-expand-xxl .nav-item.active{position:relative}.navbar-expand-xxl .nav-item.active:after{content:"";position:absolute;left:0;right:0;bottom:-.25rem;border:0 var(--tblr-border-style) var(--tblr-navbar-active-border-color);border-bottom-width:2px}.navbar-expand-xxl.navbar-vertical{box-shadow:inset calc(-1 * var(--tblr-navbar-border-width)) 0 0 0 var(--tblr-navbar-border-color)}.navbar-expand-xxl.navbar-vertical.navbar-right{box-shadow:inset calc(1 * var(--tblr-navbar-border-width)) 0 0 0 var(--tblr-navbar-border-color)}.navbar-expand-xxl.navbar-vertical~.navbar,.navbar-expand-xxl.navbar-vertical~.page-wrapper{margin-left:15rem}.navbar-expand-xxl.navbar-vertical.navbar-right~.navbar,.navbar-expand-xxl.navbar-vertical.navbar-right~.page-wrapper{margin-left:0;margin-right:15rem}}.navbar-expand .navbar-collapse .navbar-nav .nav-link{padding:.5rem calc(calc(var(--tblr-page-padding) * 2) / 2);justify-content:flex-start}.navbar-expand .navbar-collapse .dropdown-menu{padding:0;background:transparent;position:static;color:inherit;box-shadow:none;border:none;min-width:0;margin:0}.navbar-expand .navbar-collapse .dropdown-menu .dropdown-item{min-width:0;display:flex;width:auto;padding-left:calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 1.75rem);color:inherit}.navbar-expand .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 3.25rem)}.navbar-expand .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 4.75rem)}@media (prefers-reduced-motion: reduce){.navbar-toggler-icon{transition:none}}.navbar-toggler-icon:before,.navbar-toggler-icon:after{content:"";display:block;height:inherit;width:inherit;border-radius:inherit;background:inherit;position:absolute;left:0;transition:inherit}@media (prefers-reduced-motion: reduce){.navbar-toggler-icon:before,.navbar-toggler-icon:after{transition:none}}@media (prefers-reduced-motion: reduce){.navbar-toggler[aria-expanded=true] .navbar-toggler-icon{transition:none}}.navbar-transparent{--tblr-navbar-border-color: transparent !important;background:transparent!important}@media (min-width: 576px){.navbar-vertical.navbar-expand-sm{width:15rem;position:fixed;top:0;left:0;bottom:0;z-index:1030;align-items:flex-start;transition:transform .3s;overflow-y:scroll;padding:0}}@media (min-width: 576px) and (prefers-reduced-motion: reduce){.navbar-vertical.navbar-expand-sm{transition:none}}@media (min-width: 576px){.navbar-vertical.navbar-expand-sm.navbar-right{left:auto;right:0}.navbar-vertical.navbar-expand-sm .navbar-brand{padding:.75rem 0;justify-content:center}.navbar-vertical.navbar-expand-sm .navbar-collapse{align-items:stretch}.navbar-vertical.navbar-expand-sm .navbar-nav{flex-direction:column;flex-grow:1;min-height:auto}.navbar-vertical.navbar-expand-sm .navbar-nav .nav-link{padding-top:.5rem;padding-bottom:.5rem}.navbar-vertical.navbar-expand-sm>[class^=container]{flex-direction:column;align-items:stretch;min-height:100%;justify-content:flex-start;padding:0}.navbar-vertical.navbar-expand-sm~.page{padding-left:15rem}.navbar-vertical.navbar-expand-sm~.page [class^=container]{padding-left:1.5rem;padding-right:1.5rem}.navbar-vertical.navbar-expand-sm.navbar-right~.page{padding-left:0;padding-right:15rem}.navbar-vertical.navbar-expand-sm .navbar-collapse{flex-direction:column}.navbar-vertical.navbar-expand-sm .navbar-collapse [class^=container]{flex-direction:column;align-items:stretch;padding:0}.navbar-vertical.navbar-expand-sm .navbar-collapse .navbar-nav{margin-left:0;margin-right:0}.navbar-vertical.navbar-expand-sm .navbar-collapse .navbar-nav .nav-link{padding:.5rem calc(calc(var(--tblr-page-padding) * 2) / 2);justify-content:flex-start}.navbar-vertical.navbar-expand-sm .navbar-collapse .dropdown-menu-columns{flex-direction:column}.navbar-vertical.navbar-expand-sm .navbar-collapse .dropdown-menu{padding:0;background:transparent;position:static;color:inherit;box-shadow:none;border:none;min-width:0;margin:0}.navbar-vertical.navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-item{min-width:0;display:flex;width:auto;padding-left:calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 1.75rem);color:inherit}.navbar-vertical.navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-item.active,.navbar-vertical.navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-item:active{background:var(--tblr-navbar-active-bg)}.navbar-vertical.navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 3.25rem)}.navbar-vertical.navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 4.75rem)}.navbar-vertical.navbar-expand-sm .navbar-collapse .dropdown-toggle:after{margin-left:auto}.navbar-vertical.navbar-expand-sm .navbar-collapse .nav-item.active:after{border-bottom-width:0;border-left-width:3px;right:auto;top:0;bottom:0}}@media (min-width: 768px){.navbar-vertical.navbar-expand-md{width:15rem;position:fixed;top:0;left:0;bottom:0;z-index:1030;align-items:flex-start;transition:transform .3s;overflow-y:scroll;padding:0}}@media (min-width: 768px) and (prefers-reduced-motion: reduce){.navbar-vertical.navbar-expand-md{transition:none}}@media (min-width: 768px){.navbar-vertical.navbar-expand-md.navbar-right{left:auto;right:0}.navbar-vertical.navbar-expand-md .navbar-brand{padding:.75rem 0;justify-content:center}.navbar-vertical.navbar-expand-md .navbar-collapse{align-items:stretch}.navbar-vertical.navbar-expand-md .navbar-nav{flex-direction:column;flex-grow:1;min-height:auto}.navbar-vertical.navbar-expand-md .navbar-nav .nav-link{padding-top:.5rem;padding-bottom:.5rem}.navbar-vertical.navbar-expand-md>[class^=container]{flex-direction:column;align-items:stretch;min-height:100%;justify-content:flex-start;padding:0}.navbar-vertical.navbar-expand-md~.page{padding-left:15rem}.navbar-vertical.navbar-expand-md~.page [class^=container]{padding-left:1.5rem;padding-right:1.5rem}.navbar-vertical.navbar-expand-md.navbar-right~.page{padding-left:0;padding-right:15rem}.navbar-vertical.navbar-expand-md .navbar-collapse{flex-direction:column}.navbar-vertical.navbar-expand-md .navbar-collapse [class^=container]{flex-direction:column;align-items:stretch;padding:0}.navbar-vertical.navbar-expand-md .navbar-collapse .navbar-nav{margin-left:0;margin-right:0}.navbar-vertical.navbar-expand-md .navbar-collapse .navbar-nav .nav-link{padding:.5rem calc(calc(var(--tblr-page-padding) * 2) / 2);justify-content:flex-start}.navbar-vertical.navbar-expand-md .navbar-collapse .dropdown-menu-columns{flex-direction:column}.navbar-vertical.navbar-expand-md .navbar-collapse .dropdown-menu{padding:0;background:transparent;position:static;color:inherit;box-shadow:none;border:none;min-width:0;margin:0}.navbar-vertical.navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-item{min-width:0;display:flex;width:auto;padding-left:calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 1.75rem);color:inherit}.navbar-vertical.navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-item.active,.navbar-vertical.navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-item:active{background:var(--tblr-navbar-active-bg)}.navbar-vertical.navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 3.25rem)}.navbar-vertical.navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 4.75rem)}.navbar-vertical.navbar-expand-md .navbar-collapse .dropdown-toggle:after{margin-left:auto}.navbar-vertical.navbar-expand-md .navbar-collapse .nav-item.active:after{border-bottom-width:0;border-left-width:3px;right:auto;top:0;bottom:0}}@media (min-width: 992px){.navbar-vertical.navbar-expand-lg{width:15rem;position:fixed;top:0;left:0;bottom:0;z-index:1030;align-items:flex-start;transition:transform .3s;overflow-y:scroll;padding:0}}@media (min-width: 992px) and (prefers-reduced-motion: reduce){.navbar-vertical.navbar-expand-lg{transition:none}}@media (min-width: 992px){.navbar-vertical.navbar-expand-lg.navbar-right{left:auto;right:0}.navbar-vertical.navbar-expand-lg .navbar-brand{padding:.75rem 0;justify-content:center}.navbar-vertical.navbar-expand-lg .navbar-collapse{align-items:stretch}.navbar-vertical.navbar-expand-lg .navbar-nav{flex-direction:column;flex-grow:1;min-height:auto}.navbar-vertical.navbar-expand-lg .navbar-nav .nav-link{padding-top:.5rem;padding-bottom:.5rem}.navbar-vertical.navbar-expand-lg>[class^=container]{flex-direction:column;align-items:stretch;min-height:100%;justify-content:flex-start;padding:0}.navbar-vertical.navbar-expand-lg~.page{padding-left:15rem}.navbar-vertical.navbar-expand-lg~.page [class^=container]{padding-left:1.5rem;padding-right:1.5rem}.navbar-vertical.navbar-expand-lg.navbar-right~.page{padding-left:0;padding-right:15rem}.navbar-vertical.navbar-expand-lg .navbar-collapse{flex-direction:column}.navbar-vertical.navbar-expand-lg .navbar-collapse [class^=container]{flex-direction:column;align-items:stretch;padding:0}.navbar-vertical.navbar-expand-lg .navbar-collapse .navbar-nav{margin-left:0;margin-right:0}.navbar-vertical.navbar-expand-lg .navbar-collapse .navbar-nav .nav-link{padding:.5rem calc(calc(var(--tblr-page-padding) * 2) / 2);justify-content:flex-start}.navbar-vertical.navbar-expand-lg .navbar-collapse .navbar-nav .nav-link .depth-one{padding:.8rem calc(calc(var(--tblr-page-padding) * 2) / 2);justify-content:flex-start}.navbar-vertical.navbar-expand-lg .navbar-collapse .dropdown-menu-columns{flex-direction:column}.navbar-vertical.navbar-expand-lg .navbar-collapse .dropdown-menu{padding:0;background:transparent;position:static;color:inherit;box-shadow:none;border:none;min-width:0;margin:0}.navbar-vertical.navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-item{min-width:0;display:flex;width:auto;padding-left:calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 1.75rem);color:inherit}.navbar-vertical.navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-item.active,.navbar-vertical.navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-item:active{background:var(--tblr-navbar-active-bg)}.navbar-vertical.navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 3.25rem)}.navbar-vertical.navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 4.75rem)}.navbar-vertical.navbar-expand-lg .navbar-collapse .dropdown-toggle:after{margin-left:auto}.navbar-vertical.navbar-expand-lg .navbar-collapse .nav-item.active:after{border-bottom-width:0;border-left-width:3px;right:auto;top:0;bottom:0}}@media (min-width: 1200px){.navbar-vertical.navbar-expand-xl{width:15rem;position:fixed;top:0;left:0;bottom:0;z-index:1030;align-items:flex-start;transition:transform .3s;overflow-y:scroll;padding:0}}@media (min-width: 1200px) and (prefers-reduced-motion: reduce){.navbar-vertical.navbar-expand-xl{transition:none}}@media (min-width: 1200px){.navbar-vertical.navbar-expand-xl.navbar-right{left:auto;right:0}.navbar-vertical.navbar-expand-xl .navbar-brand{padding:.75rem 0;justify-content:center}.navbar-vertical.navbar-expand-xl .navbar-collapse{align-items:stretch}.navbar-vertical.navbar-expand-xl .navbar-nav{flex-direction:column;flex-grow:1;min-height:auto}.navbar-vertical.navbar-expand-xl .navbar-nav .nav-link{padding-top:.5rem;padding-bottom:.5rem}.navbar-vertical.navbar-expand-xl>[class^=container]{flex-direction:column;align-items:stretch;min-height:100%;justify-content:flex-start;padding:0}.navbar-vertical.navbar-expand-xl~.page{padding-left:15rem}.navbar-vertical.navbar-expand-xl~.page [class^=container]{padding-left:1.5rem;padding-right:1.5rem}.navbar-vertical.navbar-expand-xl.navbar-right~.page{padding-left:0;padding-right:15rem}.navbar-vertical.navbar-expand-xl .navbar-collapse{flex-direction:column}.navbar-vertical.navbar-expand-xl .navbar-collapse [class^=container]{flex-direction:column;align-items:stretch;padding:0}.navbar-vertical.navbar-expand-xl .navbar-collapse .navbar-nav{margin-left:0;margin-right:0}.navbar-vertical.navbar-expand-xl .navbar-collapse .navbar-nav .nav-link{padding:.5rem calc(calc(var(--tblr-page-padding) * 2) / 2);justify-content:flex-start}.navbar-vertical.navbar-expand-xl .navbar-collapse .dropdown-menu-columns{flex-direction:column}.navbar-vertical.navbar-expand-xl .navbar-collapse .dropdown-menu{padding:0;background:transparent;position:static;color:inherit;box-shadow:none;border:none;min-width:0;margin:0}.navbar-vertical.navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-item{min-width:0;display:flex;width:auto;padding-left:calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 1.75rem);color:inherit}.navbar-vertical.navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-item.active,.navbar-vertical.navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-item:active{background:var(--tblr-navbar-active-bg)}.navbar-vertical.navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 3.25rem)}.navbar-vertical.navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 4.75rem)}.navbar-vertical.navbar-expand-xl .navbar-collapse .dropdown-toggle:after{margin-left:auto}.navbar-vertical.navbar-expand-xl .navbar-collapse .nav-item.active:after{border-bottom-width:0;border-left-width:3px;right:auto;top:0;bottom:0}}@media (min-width: 1400px){.navbar-vertical.navbar-expand-xxl{width:15rem;position:fixed;top:0;left:0;bottom:0;z-index:1030;align-items:flex-start;transition:transform .3s;overflow-y:scroll;padding:0}}@media (min-width: 1400px) and (prefers-reduced-motion: reduce){.navbar-vertical.navbar-expand-xxl{transition:none}}@media (min-width: 1400px){.navbar-vertical.navbar-expand-xxl.navbar-right{left:auto;right:0}.navbar-vertical.navbar-expand-xxl .navbar-brand{padding:.75rem 0;justify-content:center}.navbar-vertical.navbar-expand-xxl .navbar-collapse{align-items:stretch}.navbar-vertical.navbar-expand-xxl .navbar-nav{flex-direction:column;flex-grow:1;min-height:auto}.navbar-vertical.navbar-expand-xxl .navbar-nav .nav-link{padding-top:.5rem;padding-bottom:.5rem}.navbar-vertical.navbar-expand-xxl>[class^=container]{flex-direction:column;align-items:stretch;min-height:100%;justify-content:flex-start;padding:0}.navbar-vertical.navbar-expand-xxl~.page{padding-left:15rem}.navbar-vertical.navbar-expand-xxl~.page [class^=container]{padding-left:1.5rem;padding-right:1.5rem}.navbar-vertical.navbar-expand-xxl.navbar-right~.page{padding-left:0;padding-right:15rem}.navbar-vertical.navbar-expand-xxl .navbar-collapse{flex-direction:column}.navbar-vertical.navbar-expand-xxl .navbar-collapse [class^=container]{flex-direction:column;align-items:stretch;padding:0}.navbar-vertical.navbar-expand-xxl .navbar-collapse .navbar-nav{margin-left:0;margin-right:0}.navbar-vertical.navbar-expand-xxl .navbar-collapse .navbar-nav .nav-link{padding:.5rem calc(calc(var(--tblr-page-padding) * 2) / 2);justify-content:flex-start}.navbar-vertical.navbar-expand-xxl .navbar-collapse .dropdown-menu-columns{flex-direction:column}.navbar-vertical.navbar-expand-xxl .navbar-collapse .dropdown-menu{padding:0;background:transparent;position:static;color:inherit;box-shadow:none;border:none;min-width:0;margin:0}.navbar-vertical.navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-item{min-width:0;display:flex;width:auto;padding-left:calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 1.75rem);color:inherit}.navbar-vertical.navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-item.active,.navbar-vertical.navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-item:active{background:var(--tblr-navbar-active-bg)}.navbar-vertical.navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 3.25rem)}.navbar-vertical.navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 4.75rem)}.navbar-vertical.navbar-expand-xxl .navbar-collapse .dropdown-toggle:after{margin-left:auto}.navbar-vertical.navbar-expand-xxl .navbar-collapse .nav-item.active:after{border-bottom-width:0;border-left-width:3px;right:auto;top:0;bottom:0}}@media (prefers-reduced-motion: reduce){.navbar-vertical.navbar-expand{transition:none}}.navbar-vertical.navbar-expand .navbar-collapse .navbar-nav .nav-link{padding:.5rem calc(calc(var(--tblr-page-padding) * 2) / 2);justify-content:flex-start}.navbar-vertical.navbar-expand .navbar-collapse .dropdown-menu{padding:0;background:transparent;position:static;color:inherit;box-shadow:none;border:none;min-width:0;margin:0}.navbar-vertical.navbar-expand .navbar-collapse .dropdown-menu .dropdown-item{min-width:0;display:flex;width:auto;padding-left:calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 1.75rem);color:inherit}.navbar-vertical.navbar-expand .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 3.25rem)}.navbar-vertical.navbar-expand .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 4.75rem)}@media (min-width: 768px){.page-cover{min-height:12rem}}@media (min-width: 992px){.page-cover{min-height:15rem}}.page-cover-overlay:after{content:"";position:absolute;top:0;left:0;right:0;bottom:0;background-image:linear-gradient(180deg,#0000,#0009)}.page-pretitle{font-size:.625rem;font-weight:var(--tblr-font-weight-bold);text-transform:uppercase;letter-spacing:.04em;line-height:1rem;color:var(--tblr-secondary);margin-bottom:.2rem}.page-title{margin:0;font-size:1.5rem;line-height:var(--tblr-line-height-h4);font-weight:var(--tblr-font-weight-headings);color:inherit;display:flex;align-items:center}.page-subtitle{margin-top:.25rem;color:var(--tblr-secondary)}.page-cover{--tblr-page-cover-blur: 20px;--tblr-page-cover-padding: 1rem;min-height:6rem;padding:var(--tblr-page-cover-padding) 0;position:relative;overflow:hidden}.page-cover-img{position:absolute;top:calc(-2 * var(--tblr-page-cover-blur, 0));left:calc(-2 * var(--tblr-page-cover-blur, 0));right:calc(-2 * var(--tblr-page-cover-blur, 0));bottom:calc(-2 * var(--tblr-page-cover-blur, 0));pointer-events:none;filter:blur(var(--tblr-page-cover-blur));-o-object-fit:cover;object-fit:cover;background-size:cover;background-position:center;z-index:-1}.footer{border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);background-color:#fff;padding:2rem 0;color:var(--tblr-secondary);margin-top:auto}[data-bs-theme=dark],body[data-bs-theme=dark] [data-bs-theme=light]{--tblr-body-color: #fcfdfe;--tblr-body-color-rgb: 252, 253, 254;--tblr-muted: #3a4859;--tblr-body-bg: #151f2c;--tblr-body-bg-rgb: 21, 31, 44;--tblr-emphasis-color: #ffffff;--tblr-emphasis-color-rgb: 255, 255, 255;--tblr-bg-forms: #151f2c;--tblr-bg-surface: #182433;--tblr-bg-surface-dark: #151f2c;--tblr-bg-surface-secondary: #1b293a;--tblr-bg-surface-tertiary: #151f2c;--tblr-link-color: #0069cf;--tblr-link-hover-color: #0054a6;--tblr-active-bg: #1b293a;--tblr-disabled-color: var(--tblr-gray-700);--tblr-border-color: var(--tblr-dark-mode-border-color);--tblr-border-color-translucent: var( --tblr-dark-mode-border-color-translucent );--tblr-border-dark-color: var(--tblr-dark-mode-border-dark-color);--tblr-border-color-active: var(--tblr-dark-mode-border-color-active);--tblr-btn-color: #151f2c;--tblr-code-color: var(--tblr-body-color);--tblr-code-bg: #1f2e41;--tblr-primary-lt: #16293f;--tblr-primary-lt-rgb: 22, 41, 63;--tblr-secondary-lt: #202c3b;--tblr-secondary-lt-rgb: 32, 44, 59;--tblr-success-lt: #1a3235;--tblr-success-lt-rgb: 26, 50, 53;--tblr-info-lt: #1c3044;--tblr-info-lt-rgb: 28, 48, 68;--tblr-warning-lt: #2e2b2f;--tblr-warning-lt-rgb: 46, 43, 47;--tblr-danger-lt: #2b2634;--tblr-danger-lt-rgb: 43, 38, 52;--tblr-light-lt: #2f3a47;--tblr-light-lt-rgb: 47, 58, 71;--tblr-dark-lt: #182433;--tblr-dark-lt-rgb: 24, 36, 51;--tblr-muted-lt: #202c3b;--tblr-muted-lt-rgb: 32, 44, 59;--tblr-blue-lt: #16293f;--tblr-blue-lt-rgb: 22, 41, 63;--tblr-azure-lt: #1c3044;--tblr-azure-lt-rgb: 28, 48, 68;--tblr-indigo-lt: #1c2a45;--tblr-indigo-lt-rgb: 28, 42, 69;--tblr-purple-lt: #272742;--tblr-purple-lt-rgb: 39, 39, 66;--tblr-pink-lt: #2b2639;--tblr-pink-lt-rgb: 43, 38, 57;--tblr-red-lt: #2b2634;--tblr-red-lt-rgb: 43, 38, 52;--tblr-orange-lt: #2e2b2f;--tblr-orange-lt-rgb: 46, 43, 47;--tblr-yellow-lt: #2e302e;--tblr-yellow-lt-rgb: 46, 48, 46;--tblr-lime-lt: #213330;--tblr-lime-lt-rgb: 33, 51, 48;--tblr-green-lt: #1a3235;--tblr-green-lt-rgb: 26, 50, 53;--tblr-teal-lt: #17313a;--tblr-teal-lt-rgb: 23, 49, 58;--tblr-cyan-lt: #183140;--tblr-cyan-lt-rgb: 24, 49, 64;--tblr-facebook-lt: #182c46;--tblr-facebook-lt-rgb: 24, 44, 70;--tblr-twitter-lt: #193146;--tblr-twitter-lt-rgb: 25, 49, 70;--tblr-linkedin-lt: #172b41;--tblr-linkedin-lt-rgb: 23, 43, 65;--tblr-google-lt: #2c2834;--tblr-google-lt-rgb: 44, 40, 52;--tblr-youtube-lt: #2f202e;--tblr-youtube-lt-rgb: 47, 32, 46;--tblr-vimeo-lt: #183345;--tblr-vimeo-lt-rgb: 24, 51, 69;--tblr-dribbble-lt: #2d283c;--tblr-dribbble-lt-rgb: 45, 40, 60;--tblr-github-lt: #182330;--tblr-github-lt-rgb: 24, 35, 48;--tblr-instagram-lt: #2c2737;--tblr-instagram-lt-rgb: 44, 39, 55;--tblr-pinterest-lt: #292131;--tblr-pinterest-lt-rgb: 41, 33, 49;--tblr-vk-lt: #202e3f;--tblr-vk-lt-rgb: 32, 46, 63;--tblr-rss-lt: #2f312e;--tblr-rss-lt-rgb: 47, 49, 46;--tblr-flickr-lt: #162a44;--tblr-flickr-lt-rgb: 22, 42, 68;--tblr-bitbucket-lt: #162942;--tblr-bitbucket-lt-rgb: 22, 41, 66;--tblr-tabler-lt: #16293f;--tblr-tabler-lt-rgb: 22, 41, 63}.accordion{--tblr-accordion-color: var(--tblr-body-color)}.accordion-button:focus:not(:focus-visible){outline:none;box-shadow:none}.alert{--tblr-alert-color: var(--tblr-secondary);--tblr-alert-bg: var(--tblr-surface);border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent);border-left:.25rem var(--tblr-border-style) var(--tblr-alert-color);box-shadow:#1824330a 0 2px 4px}.alert-important .alert-icon,.alert-important .alert-link,.alert-important .alert-title,.alert-important .alert-link:hover{color:inherit}.alert-important .btn-close{filter:var(--tblr-btn-close-white-filter)}.alert-primary{--tblr-alert-color: var(--tblr-primary)}.alert-secondary{--tblr-alert-color: var(--tblr-secondary)}.alert-success{--tblr-alert-color: var(--tblr-success)}.alert-info{--tblr-alert-color: var(--tblr-info)}.alert-warning{--tblr-alert-color: var(--tblr-warning)}.alert-danger{--tblr-alert-color: var(--tblr-danger)}.alert-light{--tblr-alert-color: var(--tblr-light)}.alert-dark{--tblr-alert-color: var(--tblr-dark)}.alert-muted{--tblr-alert-color: var(--tblr-muted)}.alert-blue{--tblr-alert-color: var(--tblr-blue)}.alert-azure{--tblr-alert-color: var(--tblr-azure)}.alert-indigo{--tblr-alert-color: var(--tblr-indigo)}.alert-purple{--tblr-alert-color: var(--tblr-purple)}.alert-pink{--tblr-alert-color: var(--tblr-pink)}.alert-red{--tblr-alert-color: var(--tblr-red)}.alert-orange{--tblr-alert-color: var(--tblr-orange)}.alert-yellow{--tblr-alert-color: var(--tblr-yellow)}.alert-lime{--tblr-alert-color: var(--tblr-lime)}.alert-green{--tblr-alert-color: var(--tblr-green)}.alert-teal{--tblr-alert-color: var(--tblr-teal)}.alert-cyan{--tblr-alert-color: var(--tblr-cyan)}.alert-facebook{--tblr-alert-color: var(--tblr-facebook)}.alert-twitter{--tblr-alert-color: var(--tblr-twitter)}.alert-linkedin{--tblr-alert-color: var(--tblr-linkedin)}.alert-google{--tblr-alert-color: var(--tblr-google)}.alert-youtube{--tblr-alert-color: var(--tblr-youtube)}.alert-vimeo{--tblr-alert-color: var(--tblr-vimeo)}.alert-dribbble{--tblr-alert-color: var(--tblr-dribbble)}.alert-github{--tblr-alert-color: var(--tblr-github)}.alert-instagram{--tblr-alert-color: var(--tblr-instagram)}.alert-pinterest{--tblr-alert-color: var(--tblr-pinterest)}.alert-vk{--tblr-alert-color: var(--tblr-vk)}.alert-rss{--tblr-alert-color: var(--tblr-rss)}.alert-flickr{--tblr-alert-color: var(--tblr-flickr)}.alert-bitbucket{--tblr-alert-color: var(--tblr-bitbucket)}.alert-tabler{--tblr-alert-color: var(--tblr-tabler)}.avatar{--tblr-avatar-size: 2.5rem;--tblr-avatar-status-size: .75rem;--tblr-avatar-bg: var(--tblr-bg-surface-secondary);--tblr-avatar-box-shadow: var(--tblr-box-shadow-border);--tblr-avatar-font-size: 1rem;--tblr-avatar-icon-size: 1.5rem;position:relative;width:var(--tblr-avatar-size);height:var(--tblr-avatar-size);font-size:var(--tblr-avatar-font-size);font-weight:var(--tblr-font-weight-medium);line-height:1;display:inline-flex;align-items:center;justify-content:center;color:var(--tblr-secondary);text-align:center;text-transform:uppercase;vertical-align:bottom;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background:var(--tblr-avatar-bg) no-repeat center/cover;border-radius:var(--tblr-border-radius);box-shadow:var(--tblr-avatar-box-shadow)}.avatar .icon{width:var(--tblr-avatar-icon-size);height:var(--tblr-avatar-icon-size)}.avatar .badge{position:absolute;right:0;bottom:0;border-radius:100rem;box-shadow:0 0 0 calc(var(--tblr-avatar-status-size) / 4) var(--tblr-bg-surface)}.avatar-xxs{--tblr-avatar-size: 1rem;--tblr-avatar-status-size: .25rem;--tblr-avatar-font-size: .5rem;--tblr-avatar-icon-size: .75rem}.avatar-xxs .badge:empty{width:.25rem;height:.25rem}.avatar-xs{--tblr-avatar-size: 1.25rem;--tblr-avatar-status-size: .375rem;--tblr-avatar-font-size: .625rem;--tblr-avatar-icon-size: 1rem}.avatar-sm{--tblr-avatar-size: 2rem;--tblr-avatar-status-size: .5rem;--tblr-avatar-font-size: .75rem;--tblr-avatar-icon-size: 1.25rem}.avatar-md{--tblr-avatar-size: 2.5rem;--tblr-avatar-status-size: .75rem;--tblr-avatar-font-size: .875rem;--tblr-avatar-icon-size: 1.5rem}.avatar-md .badge:empty{width:.75rem;height:.75rem}.avatar-lg{--tblr-avatar-size: 3rem;--tblr-avatar-status-size: .75rem;--tblr-avatar-font-size: 1.25rem;--tblr-avatar-icon-size: 2rem}.avatar-lg .badge:empty{width:.75rem;height:.75rem}.avatar-xl{--tblr-avatar-size: 5rem;--tblr-avatar-status-size: 1rem;--tblr-avatar-font-size: 2rem;--tblr-avatar-icon-size: 3rem}.avatar-xl .badge:empty{width:1rem;height:1rem}.avatar-2xl{--tblr-avatar-size: 7rem;--tblr-avatar-status-size: 1rem;--tblr-avatar-font-size: 3rem;--tblr-avatar-icon-size: 5rem}.avatar-2xl .badge:empty{width:1rem;height:1rem}.avatar-list{--tblr-list-gap: .5rem;display:flex;flex-wrap:wrap;gap:var(--tblr-list-gap)}.avatar-list-stacked{display:block;--tblr-list-gap: 0}.avatar-list-stacked .avatar{margin-right:calc(-.5 * var(--tblr-avatar-size))!important;box-shadow:var(--tblr-avatar-box-shadow),0 0 0 2px var(--tblr-card-cap-bg, var(--tblr-card-bg, var(--tblr-bg-surface)))}@media (prefers-reduced-motion: reduce){.avatar-upload{transition:none}}.avatar-cover{margin-top:calc(-.5 * var(--tblr-avatar-size));box-shadow:0 0 0 .25rem var(--tblr-card-bg, var(--tblr-body-bg))}.badge{justify-content:center;align-items:center;background:var(--tblr-bg-surface-secondary);overflow:hidden;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:var(--tblr-border-width) var(--tblr-border-style) transparent;min-width:1.35714285em;font-weight:var(--tblr-font-weight-bold);letter-spacing:.04em;vertical-align:bottom}.badge:empty,.badge-empty{display:inline-block;width:.5rem;height:.5rem;min-width:0;min-height:auto;padding:0;border-radius:100rem;vertical-align:baseline}.badges-list{--tblr-list-gap: .5rem;display:flex;flex-wrap:wrap;gap:var(--tblr-list-gap)}.breadcrumb{--tblr-breadcrumb-item-active-font-weight: var(--tblr-font-weight-bold);--tblr-breadcrumb-item-disabled-color: var(--tblr-disabled-color);--tblr-breadcrumb-link-color: var(--tblr-link-color);padding:0;margin:0;background:transparent}.breadcrumb-muted{--tblr-breadcrumb-link-color: var(--tblr-secondary)}.breadcrumb-dots{--tblr-breadcrumb-divider: "·"}.breadcrumb-arrows{--tblr-breadcrumb-divider: "›"}.breadcrumb-bullets{--tblr-breadcrumb-divider: "•"}.btn{--tblr-btn-icon-size: 1.25rem;--tblr-btn-bg: var(--tblr-bg-surface);--tblr-btn-color: var(--tblr-body-color);--tblr-btn-border-color: var(--tblr-border-color);--tblr-btn-hover-bg: var(--tblr-btn-bg);--tblr-btn-hover-border-color: var(--tblr-border-color-active);--tblr-btn-box-shadow: var(--tblr-box-shadow-input);--tblr-btn-active-color: var(--tblr-primary);--tblr-btn-active-bg: rgba(var(--tblr-primary-rgb), .04);--tblr-btn-active-border-color: var(--tblr-primary);display:inline-flex;align-items:center;justify-content:center;white-space:nowrap;box-shadow:var(--tblr-btn-box-shadow)}.btn .icon{width:var(--tblr-btn-icon-size);height:var(--tblr-btn-icon-size);min-width:var(--tblr-btn-icon-size);margin:0 calc(var(--tblr-btn-padding-x) / 2) 0 calc(var(--tblr-btn-padding-x) / -4);vertical-align:bottom;color:inherit}.btn .avatar{width:var(--tblr-btn-icon-size);height:var(--tblr-btn-icon-size);margin:0 calc(var(--tblr-btn-padding-x) / 2) 0 calc(var(--tblr-btn-padding-x) / -4)}.btn .icon-right{margin:0 calc(var(--tblr-btn-padding-x) / -4) 0 calc(var(--tblr-btn-padding-x) / 2)}.btn-link{color:#0054a6;background-color:transparent;border-color:transparent;box-shadow:none}.btn-link:hover{color:#004385;border-color:transparent}.btn-primary{--tblr-btn-border-color: transparent;--tblr-btn-hover-border-color: transparent;--tblr-btn-active-border-color: transparent;--tblr-btn-color: var(--tblr-primary-fg);--tblr-btn-bg: var(--tblr-primary);--tblr-btn-hover-color: var(--tblr-primary-fg);--tblr-btn-hover-bg: rgba(var(--tblr-primary-rgb), .8);--tblr-btn-active-color: var(--tblr-primary-fg);--tblr-btn-active-bg: rgba(var(--tblr-primary-rgb), .8);--tblr-btn-disabled-bg: var(--tblr-primary);--tblr-btn-disabled-color: var(--tblr-primary-fg);--tblr-btn-box-shadow: var(--tblr-box-shadow-input)}.btn-outline-primary{--tblr-btn-color: var(--tblr-primary);--tblr-btn-bg: transparent;--tblr-btn-border-color: var(--tblr-primary);--tblr-btn-hover-color: var(--tblr-primary-fg);--tblr-btn-hover-border-color: transparent;--tblr-btn-hover-bg: var(--tblr-primary);--tblr-btn-active-color: var(--tblr-primary-fg);--tblr-btn-active-bg: var(--tblr-primary);--tblr-btn-disabled-color: var(--tblr-primary);--tblr-btn-disabled-border-color: var(--tblr-primary)}.btn-secondary{--tblr-btn-border-color: transparent;--tblr-btn-hover-border-color: transparent;--tblr-btn-active-border-color: transparent;--tblr-btn-color: var(--tblr-secondary-fg);--tblr-btn-bg: var(--tblr-secondary);--tblr-btn-hover-color: var(--tblr-secondary-fg);--tblr-btn-hover-bg: rgba(var(--tblr-secondary-rgb), .8);--tblr-btn-active-color: var(--tblr-secondary-fg);--tblr-btn-active-bg: rgba(var(--tblr-secondary-rgb), .8);--tblr-btn-disabled-bg: var(--tblr-secondary);--tblr-btn-disabled-color: var(--tblr-secondary-fg);--tblr-btn-box-shadow: var(--tblr-box-shadow-input)}.btn-outline-secondary{--tblr-btn-color: var(--tblr-secondary);--tblr-btn-bg: transparent;--tblr-btn-border-color: var(--tblr-secondary);--tblr-btn-hover-color: var(--tblr-secondary-fg);--tblr-btn-hover-border-color: transparent;--tblr-btn-hover-bg: var(--tblr-secondary);--tblr-btn-active-color: var(--tblr-secondary-fg);--tblr-btn-active-bg: var(--tblr-secondary);--tblr-btn-disabled-color: var(--tblr-secondary);--tblr-btn-disabled-border-color: var(--tblr-secondary)}.btn-success{--tblr-btn-border-color: transparent;--tblr-btn-hover-border-color: transparent;--tblr-btn-active-border-color: transparent;--tblr-btn-color: var(--tblr-success-fg);--tblr-btn-bg: var(--tblr-success);--tblr-btn-hover-color: var(--tblr-success-fg);--tblr-btn-hover-bg: rgba(var(--tblr-success-rgb), .8);--tblr-btn-active-color: var(--tblr-success-fg);--tblr-btn-active-bg: rgba(var(--tblr-success-rgb), .8);--tblr-btn-disabled-bg: var(--tblr-success);--tblr-btn-disabled-color: var(--tblr-success-fg);--tblr-btn-box-shadow: var(--tblr-box-shadow-input)}.btn-outline-success{--tblr-btn-color: var(--tblr-success);--tblr-btn-bg: transparent;--tblr-btn-border-color: var(--tblr-success);--tblr-btn-hover-color: var(--tblr-success-fg);--tblr-btn-hover-border-color: transparent;--tblr-btn-hover-bg: var(--tblr-success);--tblr-btn-active-color: var(--tblr-success-fg);--tblr-btn-active-bg: var(--tblr-success);--tblr-btn-disabled-color: var(--tblr-success);--tblr-btn-disabled-border-color: var(--tblr-success)}.btn-info{--tblr-btn-border-color: transparent;--tblr-btn-hover-border-color: transparent;--tblr-btn-active-border-color: transparent;--tblr-btn-color: var(--tblr-info-fg);--tblr-btn-bg: var(--tblr-info);--tblr-btn-hover-color: var(--tblr-info-fg);--tblr-btn-hover-bg: rgba(var(--tblr-info-rgb), .8);--tblr-btn-active-color: var(--tblr-info-fg);--tblr-btn-active-bg: rgba(var(--tblr-info-rgb), .8);--tblr-btn-disabled-bg: var(--tblr-info);--tblr-btn-disabled-color: var(--tblr-info-fg);--tblr-btn-box-shadow: var(--tblr-box-shadow-input)}.btn-outline-info{--tblr-btn-color: var(--tblr-info);--tblr-btn-bg: transparent;--tblr-btn-border-color: var(--tblr-info);--tblr-btn-hover-color: var(--tblr-info-fg);--tblr-btn-hover-border-color: transparent;--tblr-btn-hover-bg: var(--tblr-info);--tblr-btn-active-color: var(--tblr-info-fg);--tblr-btn-active-bg: var(--tblr-info);--tblr-btn-disabled-color: var(--tblr-info);--tblr-btn-disabled-border-color: var(--tblr-info)}.btn-warning{--tblr-btn-border-color: transparent;--tblr-btn-hover-border-color: transparent;--tblr-btn-active-border-color: transparent;--tblr-btn-color: var(--tblr-warning-fg);--tblr-btn-bg: var(--tblr-warning);--tblr-btn-hover-color: var(--tblr-warning-fg);--tblr-btn-hover-bg: rgba(var(--tblr-warning-rgb), .8);--tblr-btn-active-color: var(--tblr-warning-fg);--tblr-btn-active-bg: rgba(var(--tblr-warning-rgb), .8);--tblr-btn-disabled-bg: var(--tblr-warning);--tblr-btn-disabled-color: var(--tblr-warning-fg);--tblr-btn-box-shadow: var(--tblr-box-shadow-input)}.btn-outline-warning{--tblr-btn-color: var(--tblr-warning);--tblr-btn-bg: transparent;--tblr-btn-border-color: var(--tblr-warning);--tblr-btn-hover-color: var(--tblr-warning-fg);--tblr-btn-hover-border-color: transparent;--tblr-btn-hover-bg: var(--tblr-warning);--tblr-btn-active-color: var(--tblr-warning-fg);--tblr-btn-active-bg: var(--tblr-warning);--tblr-btn-disabled-color: var(--tblr-warning);--tblr-btn-disabled-border-color: var(--tblr-warning)}.btn-danger{--tblr-btn-border-color: transparent;--tblr-btn-hover-border-color: transparent;--tblr-btn-active-border-color: transparent;--tblr-btn-color: var(--tblr-danger-fg);--tblr-btn-bg: var(--tblr-danger);--tblr-btn-hover-color: var(--tblr-danger-fg);--tblr-btn-hover-bg: rgba(var(--tblr-danger-rgb), .8);--tblr-btn-active-color: var(--tblr-danger-fg);--tblr-btn-active-bg: rgba(var(--tblr-danger-rgb), .8);--tblr-btn-disabled-bg: var(--tblr-danger);--tblr-btn-disabled-color: var(--tblr-danger-fg);--tblr-btn-box-shadow: var(--tblr-box-shadow-input)}.btn-outline-danger{--tblr-btn-color: var(--tblr-danger);--tblr-btn-bg: transparent;--tblr-btn-border-color: var(--tblr-danger);--tblr-btn-hover-color: var(--tblr-danger-fg);--tblr-btn-hover-border-color: transparent;--tblr-btn-hover-bg: var(--tblr-danger);--tblr-btn-active-color: var(--tblr-danger-fg);--tblr-btn-active-bg: var(--tblr-danger);--tblr-btn-disabled-color: var(--tblr-danger);--tblr-btn-disabled-border-color: var(--tblr-danger)}.btn-light{--tblr-btn-border-color: transparent;--tblr-btn-hover-border-color: transparent;--tblr-btn-active-border-color: transparent;--tblr-btn-color: var(--tblr-light-fg);--tblr-btn-bg: var(--tblr-light);--tblr-btn-hover-color: var(--tblr-light-fg);--tblr-btn-hover-bg: rgba(var(--tblr-light-rgb), .8);--tblr-btn-active-color: var(--tblr-light-fg);--tblr-btn-active-bg: rgba(var(--tblr-light-rgb), .8);--tblr-btn-disabled-bg: var(--tblr-light);--tblr-btn-disabled-color: var(--tblr-light-fg);--tblr-btn-box-shadow: var(--tblr-box-shadow-input)}.btn-outline-light{--tblr-btn-color: var(--tblr-light);--tblr-btn-bg: transparent;--tblr-btn-border-color: var(--tblr-light);--tblr-btn-hover-color: var(--tblr-light-fg);--tblr-btn-hover-border-color: transparent;--tblr-btn-hover-bg: var(--tblr-light);--tblr-btn-active-color: var(--tblr-light-fg);--tblr-btn-active-bg: var(--tblr-light);--tblr-btn-disabled-color: var(--tblr-light);--tblr-btn-disabled-border-color: var(--tblr-light)}.btn-dark{--tblr-btn-border-color: var(--tblr-dark-mode-border-color);--tblr-btn-hover-border-color: var(--tblr-dark-mode-border-color-active);--tblr-btn-active-border-color: var(--tblr-dark-mode-border-color-active);--tblr-btn-color: var(--tblr-dark-fg);--tblr-btn-bg: var(--tblr-dark);--tblr-btn-hover-color: var(--tblr-dark-fg);--tblr-btn-hover-bg: rgba(var(--tblr-dark-rgb), .8);--tblr-btn-active-color: var(--tblr-dark-fg);--tblr-btn-active-bg: rgba(var(--tblr-dark-rgb), .8);--tblr-btn-disabled-bg: var(--tblr-dark);--tblr-btn-disabled-color: var(--tblr-dark-fg);--tblr-btn-box-shadow: var(--tblr-box-shadow-input)}.btn-outline-dark{--tblr-btn-color: var(--tblr-dark);--tblr-btn-bg: transparent;--tblr-btn-border-color: var(--tblr-dark);--tblr-btn-hover-color: var(--tblr-dark-fg);--tblr-btn-hover-border-color: transparent;--tblr-btn-hover-bg: var(--tblr-dark);--tblr-btn-active-color: var(--tblr-dark-fg);--tblr-btn-active-bg: var(--tblr-dark);--tblr-btn-disabled-color: var(--tblr-dark);--tblr-btn-disabled-border-color: var(--tblr-dark)}.btn-muted{--tblr-btn-border-color: transparent;--tblr-btn-hover-border-color: transparent;--tblr-btn-active-border-color: transparent;--tblr-btn-color: var(--tblr-muted-fg);--tblr-btn-bg: var(--tblr-muted);--tblr-btn-hover-color: var(--tblr-muted-fg);--tblr-btn-hover-bg: rgba(var(--tblr-muted-rgb), .8);--tblr-btn-active-color: var(--tblr-muted-fg);--tblr-btn-active-bg: rgba(var(--tblr-muted-rgb), .8);--tblr-btn-disabled-bg: var(--tblr-muted);--tblr-btn-disabled-color: var(--tblr-muted-fg);--tblr-btn-box-shadow: var(--tblr-box-shadow-input)}.btn-outline-muted{--tblr-btn-color: var(--tblr-muted);--tblr-btn-bg: transparent;--tblr-btn-border-color: var(--tblr-muted);--tblr-btn-hover-color: var(--tblr-muted-fg);--tblr-btn-hover-border-color: transparent;--tblr-btn-hover-bg: var(--tblr-muted);--tblr-btn-active-color: var(--tblr-muted-fg);--tblr-btn-active-bg: var(--tblr-muted);--tblr-btn-disabled-color: var(--tblr-muted);--tblr-btn-disabled-border-color: var(--tblr-muted)}.btn-blue{--tblr-btn-border-color: transparent;--tblr-btn-hover-border-color: transparent;--tblr-btn-active-border-color: transparent;--tblr-btn-color: var(--tblr-blue-fg);--tblr-btn-bg: var(--tblr-blue);--tblr-btn-hover-color: var(--tblr-blue-fg);--tblr-btn-hover-bg: rgba(var(--tblr-blue-rgb), .8);--tblr-btn-active-color: var(--tblr-blue-fg);--tblr-btn-active-bg: rgba(var(--tblr-blue-rgb), .8);--tblr-btn-disabled-bg: var(--tblr-blue);--tblr-btn-disabled-color: var(--tblr-blue-fg);--tblr-btn-box-shadow: var(--tblr-box-shadow-input)}.btn-outline-blue{--tblr-btn-color: var(--tblr-blue);--tblr-btn-bg: transparent;--tblr-btn-border-color: var(--tblr-blue);--tblr-btn-hover-color: var(--tblr-blue-fg);--tblr-btn-hover-border-color: transparent;--tblr-btn-hover-bg: var(--tblr-blue);--tblr-btn-active-color: var(--tblr-blue-fg);--tblr-btn-active-bg: var(--tblr-blue);--tblr-btn-disabled-color: var(--tblr-blue);--tblr-btn-disabled-border-color: var(--tblr-blue)}.btn-azure{--tblr-btn-border-color: transparent;--tblr-btn-hover-border-color: transparent;--tblr-btn-active-border-color: transparent;--tblr-btn-color: var(--tblr-azure-fg);--tblr-btn-bg: var(--tblr-azure);--tblr-btn-hover-color: var(--tblr-azure-fg);--tblr-btn-hover-bg: rgba(var(--tblr-azure-rgb), .8);--tblr-btn-active-color: var(--tblr-azure-fg);--tblr-btn-active-bg: rgba(var(--tblr-azure-rgb), .8);--tblr-btn-disabled-bg: var(--tblr-azure);--tblr-btn-disabled-color: var(--tblr-azure-fg);--tblr-btn-box-shadow: var(--tblr-box-shadow-input)}.btn-outline-azure{--tblr-btn-color: var(--tblr-azure);--tblr-btn-bg: transparent;--tblr-btn-border-color: var(--tblr-azure);--tblr-btn-hover-color: var(--tblr-azure-fg);--tblr-btn-hover-border-color: transparent;--tblr-btn-hover-bg: var(--tblr-azure);--tblr-btn-active-color: var(--tblr-azure-fg);--tblr-btn-active-bg: var(--tblr-azure);--tblr-btn-disabled-color: var(--tblr-azure);--tblr-btn-disabled-border-color: var(--tblr-azure)}.btn-indigo{--tblr-btn-border-color: transparent;--tblr-btn-hover-border-color: transparent;--tblr-btn-active-border-color: transparent;--tblr-btn-color: var(--tblr-indigo-fg);--tblr-btn-bg: var(--tblr-indigo);--tblr-btn-hover-color: var(--tblr-indigo-fg);--tblr-btn-hover-bg: rgba(var(--tblr-indigo-rgb), .8);--tblr-btn-active-color: var(--tblr-indigo-fg);--tblr-btn-active-bg: rgba(var(--tblr-indigo-rgb), .8);--tblr-btn-disabled-bg: var(--tblr-indigo);--tblr-btn-disabled-color: var(--tblr-indigo-fg);--tblr-btn-box-shadow: var(--tblr-box-shadow-input)}.btn-outline-indigo{--tblr-btn-color: var(--tblr-indigo);--tblr-btn-bg: transparent;--tblr-btn-border-color: var(--tblr-indigo);--tblr-btn-hover-color: var(--tblr-indigo-fg);--tblr-btn-hover-border-color: transparent;--tblr-btn-hover-bg: var(--tblr-indigo);--tblr-btn-active-color: var(--tblr-indigo-fg);--tblr-btn-active-bg: var(--tblr-indigo);--tblr-btn-disabled-color: var(--tblr-indigo);--tblr-btn-disabled-border-color: var(--tblr-indigo)}.btn-purple{--tblr-btn-border-color: transparent;--tblr-btn-hover-border-color: transparent;--tblr-btn-active-border-color: transparent;--tblr-btn-color: var(--tblr-purple-fg);--tblr-btn-bg: var(--tblr-purple);--tblr-btn-hover-color: var(--tblr-purple-fg);--tblr-btn-hover-bg: rgba(var(--tblr-purple-rgb), .8);--tblr-btn-active-color: var(--tblr-purple-fg);--tblr-btn-active-bg: rgba(var(--tblr-purple-rgb), .8);--tblr-btn-disabled-bg: var(--tblr-purple);--tblr-btn-disabled-color: var(--tblr-purple-fg);--tblr-btn-box-shadow: var(--tblr-box-shadow-input)}.btn-outline-purple{--tblr-btn-color: var(--tblr-purple);--tblr-btn-bg: transparent;--tblr-btn-border-color: var(--tblr-purple);--tblr-btn-hover-color: var(--tblr-purple-fg);--tblr-btn-hover-border-color: transparent;--tblr-btn-hover-bg: var(--tblr-purple);--tblr-btn-active-color: var(--tblr-purple-fg);--tblr-btn-active-bg: var(--tblr-purple);--tblr-btn-disabled-color: var(--tblr-purple);--tblr-btn-disabled-border-color: var(--tblr-purple)}.btn-pink{--tblr-btn-border-color: transparent;--tblr-btn-hover-border-color: transparent;--tblr-btn-active-border-color: transparent;--tblr-btn-color: var(--tblr-pink-fg);--tblr-btn-bg: var(--tblr-pink);--tblr-btn-hover-color: var(--tblr-pink-fg);--tblr-btn-hover-bg: rgba(var(--tblr-pink-rgb), .8);--tblr-btn-active-color: var(--tblr-pink-fg);--tblr-btn-active-bg: rgba(var(--tblr-pink-rgb), .8);--tblr-btn-disabled-bg: var(--tblr-pink);--tblr-btn-disabled-color: var(--tblr-pink-fg);--tblr-btn-box-shadow: var(--tblr-box-shadow-input)}.btn-outline-pink{--tblr-btn-color: var(--tblr-pink);--tblr-btn-bg: transparent;--tblr-btn-border-color: var(--tblr-pink);--tblr-btn-hover-color: var(--tblr-pink-fg);--tblr-btn-hover-border-color: transparent;--tblr-btn-hover-bg: var(--tblr-pink);--tblr-btn-active-color: var(--tblr-pink-fg);--tblr-btn-active-bg: var(--tblr-pink);--tblr-btn-disabled-color: var(--tblr-pink);--tblr-btn-disabled-border-color: var(--tblr-pink)}.btn-red{--tblr-btn-border-color: transparent;--tblr-btn-hover-border-color: transparent;--tblr-btn-active-border-color: transparent;--tblr-btn-color: var(--tblr-red-fg);--tblr-btn-bg: var(--tblr-red);--tblr-btn-hover-color: var(--tblr-red-fg);--tblr-btn-hover-bg: rgba(var(--tblr-red-rgb), .8);--tblr-btn-active-color: var(--tblr-red-fg);--tblr-btn-active-bg: rgba(var(--tblr-red-rgb), .8);--tblr-btn-disabled-bg: var(--tblr-red);--tblr-btn-disabled-color: var(--tblr-red-fg);--tblr-btn-box-shadow: var(--tblr-box-shadow-input)}.btn-outline-red{--tblr-btn-color: var(--tblr-red);--tblr-btn-bg: transparent;--tblr-btn-border-color: var(--tblr-red);--tblr-btn-hover-color: var(--tblr-red-fg);--tblr-btn-hover-border-color: transparent;--tblr-btn-hover-bg: var(--tblr-red);--tblr-btn-active-color: var(--tblr-red-fg);--tblr-btn-active-bg: var(--tblr-red);--tblr-btn-disabled-color: var(--tblr-red);--tblr-btn-disabled-border-color: var(--tblr-red)}.btn-orange{--tblr-btn-border-color: transparent;--tblr-btn-hover-border-color: transparent;--tblr-btn-active-border-color: transparent;--tblr-btn-color: var(--tblr-orange-fg);--tblr-btn-bg: var(--tblr-orange);--tblr-btn-hover-color: var(--tblr-orange-fg);--tblr-btn-hover-bg: rgba(var(--tblr-orange-rgb), .8);--tblr-btn-active-color: var(--tblr-orange-fg);--tblr-btn-active-bg: rgba(var(--tblr-orange-rgb), .8);--tblr-btn-disabled-bg: var(--tblr-orange);--tblr-btn-disabled-color: var(--tblr-orange-fg);--tblr-btn-box-shadow: var(--tblr-box-shadow-input)}.btn-outline-orange{--tblr-btn-color: var(--tblr-orange);--tblr-btn-bg: transparent;--tblr-btn-border-color: var(--tblr-orange);--tblr-btn-hover-color: var(--tblr-orange-fg);--tblr-btn-hover-border-color: transparent;--tblr-btn-hover-bg: var(--tblr-orange);--tblr-btn-active-color: var(--tblr-orange-fg);--tblr-btn-active-bg: var(--tblr-orange);--tblr-btn-disabled-color: var(--tblr-orange);--tblr-btn-disabled-border-color: var(--tblr-orange)}.btn-yellow{--tblr-btn-border-color: transparent;--tblr-btn-hover-border-color: transparent;--tblr-btn-active-border-color: transparent;--tblr-btn-color: var(--tblr-yellow-fg);--tblr-btn-bg: var(--tblr-yellow);--tblr-btn-hover-color: var(--tblr-yellow-fg);--tblr-btn-hover-bg: rgba(var(--tblr-yellow-rgb), .8);--tblr-btn-active-color: var(--tblr-yellow-fg);--tblr-btn-active-bg: rgba(var(--tblr-yellow-rgb), .8);--tblr-btn-disabled-bg: var(--tblr-yellow);--tblr-btn-disabled-color: var(--tblr-yellow-fg);--tblr-btn-box-shadow: var(--tblr-box-shadow-input)}.btn-outline-yellow{--tblr-btn-color: var(--tblr-yellow);--tblr-btn-bg: transparent;--tblr-btn-border-color: var(--tblr-yellow);--tblr-btn-hover-color: var(--tblr-yellow-fg);--tblr-btn-hover-border-color: transparent;--tblr-btn-hover-bg: var(--tblr-yellow);--tblr-btn-active-color: var(--tblr-yellow-fg);--tblr-btn-active-bg: var(--tblr-yellow);--tblr-btn-disabled-color: var(--tblr-yellow);--tblr-btn-disabled-border-color: var(--tblr-yellow)}.btn-lime{--tblr-btn-border-color: transparent;--tblr-btn-hover-border-color: transparent;--tblr-btn-active-border-color: transparent;--tblr-btn-color: var(--tblr-lime-fg);--tblr-btn-bg: var(--tblr-lime);--tblr-btn-hover-color: var(--tblr-lime-fg);--tblr-btn-hover-bg: rgba(var(--tblr-lime-rgb), .8);--tblr-btn-active-color: var(--tblr-lime-fg);--tblr-btn-active-bg: rgba(var(--tblr-lime-rgb), .8);--tblr-btn-disabled-bg: var(--tblr-lime);--tblr-btn-disabled-color: var(--tblr-lime-fg);--tblr-btn-box-shadow: var(--tblr-box-shadow-input)}.btn-outline-lime{--tblr-btn-color: var(--tblr-lime);--tblr-btn-bg: transparent;--tblr-btn-border-color: var(--tblr-lime);--tblr-btn-hover-color: var(--tblr-lime-fg);--tblr-btn-hover-border-color: transparent;--tblr-btn-hover-bg: var(--tblr-lime);--tblr-btn-active-color: var(--tblr-lime-fg);--tblr-btn-active-bg: var(--tblr-lime);--tblr-btn-disabled-color: var(--tblr-lime);--tblr-btn-disabled-border-color: var(--tblr-lime)}.btn-green{--tblr-btn-border-color: transparent;--tblr-btn-hover-border-color: transparent;--tblr-btn-active-border-color: transparent;--tblr-btn-color: var(--tblr-green-fg);--tblr-btn-bg: var(--tblr-green);--tblr-btn-hover-color: var(--tblr-green-fg);--tblr-btn-hover-bg: rgba(var(--tblr-green-rgb), .8);--tblr-btn-active-color: var(--tblr-green-fg);--tblr-btn-active-bg: rgba(var(--tblr-green-rgb), .8);--tblr-btn-disabled-bg: var(--tblr-green);--tblr-btn-disabled-color: var(--tblr-green-fg);--tblr-btn-box-shadow: var(--tblr-box-shadow-input)}.btn-outline-green{--tblr-btn-color: var(--tblr-green);--tblr-btn-bg: transparent;--tblr-btn-border-color: var(--tblr-green);--tblr-btn-hover-color: var(--tblr-green-fg);--tblr-btn-hover-border-color: transparent;--tblr-btn-hover-bg: var(--tblr-green);--tblr-btn-active-color: var(--tblr-green-fg);--tblr-btn-active-bg: var(--tblr-green);--tblr-btn-disabled-color: var(--tblr-green);--tblr-btn-disabled-border-color: var(--tblr-green)}.btn-teal{--tblr-btn-border-color: transparent;--tblr-btn-hover-border-color: transparent;--tblr-btn-active-border-color: transparent;--tblr-btn-color: var(--tblr-teal-fg);--tblr-btn-bg: var(--tblr-teal);--tblr-btn-hover-color: var(--tblr-teal-fg);--tblr-btn-hover-bg: rgba(var(--tblr-teal-rgb), .8);--tblr-btn-active-color: var(--tblr-teal-fg);--tblr-btn-active-bg: rgba(var(--tblr-teal-rgb), .8);--tblr-btn-disabled-bg: var(--tblr-teal);--tblr-btn-disabled-color: var(--tblr-teal-fg);--tblr-btn-box-shadow: var(--tblr-box-shadow-input)}.btn-outline-teal{--tblr-btn-color: var(--tblr-teal);--tblr-btn-bg: transparent;--tblr-btn-border-color: var(--tblr-teal);--tblr-btn-hover-color: var(--tblr-teal-fg);--tblr-btn-hover-border-color: transparent;--tblr-btn-hover-bg: var(--tblr-teal);--tblr-btn-active-color: var(--tblr-teal-fg);--tblr-btn-active-bg: var(--tblr-teal);--tblr-btn-disabled-color: var(--tblr-teal);--tblr-btn-disabled-border-color: var(--tblr-teal)}.btn-cyan{--tblr-btn-border-color: transparent;--tblr-btn-hover-border-color: transparent;--tblr-btn-active-border-color: transparent;--tblr-btn-color: var(--tblr-cyan-fg);--tblr-btn-bg: var(--tblr-cyan);--tblr-btn-hover-color: var(--tblr-cyan-fg);--tblr-btn-hover-bg: rgba(var(--tblr-cyan-rgb), .8);--tblr-btn-active-color: var(--tblr-cyan-fg);--tblr-btn-active-bg: rgba(var(--tblr-cyan-rgb), .8);--tblr-btn-disabled-bg: var(--tblr-cyan);--tblr-btn-disabled-color: var(--tblr-cyan-fg);--tblr-btn-box-shadow: var(--tblr-box-shadow-input)}.btn-outline-cyan{--tblr-btn-color: var(--tblr-cyan);--tblr-btn-bg: transparent;--tblr-btn-border-color: var(--tblr-cyan);--tblr-btn-hover-color: var(--tblr-cyan-fg);--tblr-btn-hover-border-color: transparent;--tblr-btn-hover-bg: var(--tblr-cyan);--tblr-btn-active-color: var(--tblr-cyan-fg);--tblr-btn-active-bg: var(--tblr-cyan);--tblr-btn-disabled-color: var(--tblr-cyan);--tblr-btn-disabled-border-color: var(--tblr-cyan)}.btn-facebook{--tblr-btn-border-color: transparent;--tblr-btn-hover-border-color: transparent;--tblr-btn-active-border-color: transparent;--tblr-btn-color: var(--tblr-facebook-fg);--tblr-btn-bg: var(--tblr-facebook);--tblr-btn-hover-color: var(--tblr-facebook-fg);--tblr-btn-hover-bg: rgba(var(--tblr-facebook-rgb), .8);--tblr-btn-active-color: var(--tblr-facebook-fg);--tblr-btn-active-bg: rgba(var(--tblr-facebook-rgb), .8);--tblr-btn-disabled-bg: var(--tblr-facebook);--tblr-btn-disabled-color: var(--tblr-facebook-fg);--tblr-btn-box-shadow: var(--tblr-box-shadow-input)}.btn-outline-facebook{--tblr-btn-color: var(--tblr-facebook);--tblr-btn-bg: transparent;--tblr-btn-border-color: var(--tblr-facebook);--tblr-btn-hover-color: var(--tblr-facebook-fg);--tblr-btn-hover-border-color: transparent;--tblr-btn-hover-bg: var(--tblr-facebook);--tblr-btn-active-color: var(--tblr-facebook-fg);--tblr-btn-active-bg: var(--tblr-facebook);--tblr-btn-disabled-color: var(--tblr-facebook);--tblr-btn-disabled-border-color: var(--tblr-facebook)}.btn-twitter{--tblr-btn-border-color: transparent;--tblr-btn-hover-border-color: transparent;--tblr-btn-active-border-color: transparent;--tblr-btn-color: var(--tblr-twitter-fg);--tblr-btn-bg: var(--tblr-twitter);--tblr-btn-hover-color: var(--tblr-twitter-fg);--tblr-btn-hover-bg: rgba(var(--tblr-twitter-rgb), .8);--tblr-btn-active-color: var(--tblr-twitter-fg);--tblr-btn-active-bg: rgba(var(--tblr-twitter-rgb), .8);--tblr-btn-disabled-bg: var(--tblr-twitter);--tblr-btn-disabled-color: var(--tblr-twitter-fg);--tblr-btn-box-shadow: var(--tblr-box-shadow-input)}.btn-outline-twitter{--tblr-btn-color: var(--tblr-twitter);--tblr-btn-bg: transparent;--tblr-btn-border-color: var(--tblr-twitter);--tblr-btn-hover-color: var(--tblr-twitter-fg);--tblr-btn-hover-border-color: transparent;--tblr-btn-hover-bg: var(--tblr-twitter);--tblr-btn-active-color: var(--tblr-twitter-fg);--tblr-btn-active-bg: var(--tblr-twitter);--tblr-btn-disabled-color: var(--tblr-twitter);--tblr-btn-disabled-border-color: var(--tblr-twitter)}.btn-linkedin{--tblr-btn-border-color: transparent;--tblr-btn-hover-border-color: transparent;--tblr-btn-active-border-color: transparent;--tblr-btn-color: var(--tblr-linkedin-fg);--tblr-btn-bg: var(--tblr-linkedin);--tblr-btn-hover-color: var(--tblr-linkedin-fg);--tblr-btn-hover-bg: rgba(var(--tblr-linkedin-rgb), .8);--tblr-btn-active-color: var(--tblr-linkedin-fg);--tblr-btn-active-bg: rgba(var(--tblr-linkedin-rgb), .8);--tblr-btn-disabled-bg: var(--tblr-linkedin);--tblr-btn-disabled-color: var(--tblr-linkedin-fg);--tblr-btn-box-shadow: var(--tblr-box-shadow-input)}.btn-outline-linkedin{--tblr-btn-color: var(--tblr-linkedin);--tblr-btn-bg: transparent;--tblr-btn-border-color: var(--tblr-linkedin);--tblr-btn-hover-color: var(--tblr-linkedin-fg);--tblr-btn-hover-border-color: transparent;--tblr-btn-hover-bg: var(--tblr-linkedin);--tblr-btn-active-color: var(--tblr-linkedin-fg);--tblr-btn-active-bg: var(--tblr-linkedin);--tblr-btn-disabled-color: var(--tblr-linkedin);--tblr-btn-disabled-border-color: var(--tblr-linkedin)}.btn-google{--tblr-btn-border-color: transparent;--tblr-btn-hover-border-color: transparent;--tblr-btn-active-border-color: transparent;--tblr-btn-color: var(--tblr-google-fg);--tblr-btn-bg: var(--tblr-google);--tblr-btn-hover-color: var(--tblr-google-fg);--tblr-btn-hover-bg: rgba(var(--tblr-google-rgb), .8);--tblr-btn-active-color: var(--tblr-google-fg);--tblr-btn-active-bg: rgba(var(--tblr-google-rgb), .8);--tblr-btn-disabled-bg: var(--tblr-google);--tblr-btn-disabled-color: var(--tblr-google-fg);--tblr-btn-box-shadow: var(--tblr-box-shadow-input)}.btn-outline-google{--tblr-btn-color: var(--tblr-google);--tblr-btn-bg: transparent;--tblr-btn-border-color: var(--tblr-google);--tblr-btn-hover-color: var(--tblr-google-fg);--tblr-btn-hover-border-color: transparent;--tblr-btn-hover-bg: var(--tblr-google);--tblr-btn-active-color: var(--tblr-google-fg);--tblr-btn-active-bg: var(--tblr-google);--tblr-btn-disabled-color: var(--tblr-google);--tblr-btn-disabled-border-color: var(--tblr-google)}.btn-youtube{--tblr-btn-border-color: transparent;--tblr-btn-hover-border-color: transparent;--tblr-btn-active-border-color: transparent;--tblr-btn-color: var(--tblr-youtube-fg);--tblr-btn-bg: var(--tblr-youtube);--tblr-btn-hover-color: var(--tblr-youtube-fg);--tblr-btn-hover-bg: rgba(var(--tblr-youtube-rgb), .8);--tblr-btn-active-color: var(--tblr-youtube-fg);--tblr-btn-active-bg: rgba(var(--tblr-youtube-rgb), .8);--tblr-btn-disabled-bg: var(--tblr-youtube);--tblr-btn-disabled-color: var(--tblr-youtube-fg);--tblr-btn-box-shadow: var(--tblr-box-shadow-input)}.btn-outline-youtube{--tblr-btn-color: var(--tblr-youtube);--tblr-btn-bg: transparent;--tblr-btn-border-color: var(--tblr-youtube);--tblr-btn-hover-color: var(--tblr-youtube-fg);--tblr-btn-hover-border-color: transparent;--tblr-btn-hover-bg: var(--tblr-youtube);--tblr-btn-active-color: var(--tblr-youtube-fg);--tblr-btn-active-bg: var(--tblr-youtube);--tblr-btn-disabled-color: var(--tblr-youtube);--tblr-btn-disabled-border-color: var(--tblr-youtube)}.btn-vimeo{--tblr-btn-border-color: transparent;--tblr-btn-hover-border-color: transparent;--tblr-btn-active-border-color: transparent;--tblr-btn-color: var(--tblr-vimeo-fg);--tblr-btn-bg: var(--tblr-vimeo);--tblr-btn-hover-color: var(--tblr-vimeo-fg);--tblr-btn-hover-bg: rgba(var(--tblr-vimeo-rgb), .8);--tblr-btn-active-color: var(--tblr-vimeo-fg);--tblr-btn-active-bg: rgba(var(--tblr-vimeo-rgb), .8);--tblr-btn-disabled-bg: var(--tblr-vimeo);--tblr-btn-disabled-color: var(--tblr-vimeo-fg);--tblr-btn-box-shadow: var(--tblr-box-shadow-input)}.btn-outline-vimeo{--tblr-btn-color: var(--tblr-vimeo);--tblr-btn-bg: transparent;--tblr-btn-border-color: var(--tblr-vimeo);--tblr-btn-hover-color: var(--tblr-vimeo-fg);--tblr-btn-hover-border-color: transparent;--tblr-btn-hover-bg: var(--tblr-vimeo);--tblr-btn-active-color: var(--tblr-vimeo-fg);--tblr-btn-active-bg: var(--tblr-vimeo);--tblr-btn-disabled-color: var(--tblr-vimeo);--tblr-btn-disabled-border-color: var(--tblr-vimeo)}.btn-dribbble{--tblr-btn-border-color: transparent;--tblr-btn-hover-border-color: transparent;--tblr-btn-active-border-color: transparent;--tblr-btn-color: var(--tblr-dribbble-fg);--tblr-btn-bg: var(--tblr-dribbble);--tblr-btn-hover-color: var(--tblr-dribbble-fg);--tblr-btn-hover-bg: rgba(var(--tblr-dribbble-rgb), .8);--tblr-btn-active-color: var(--tblr-dribbble-fg);--tblr-btn-active-bg: rgba(var(--tblr-dribbble-rgb), .8);--tblr-btn-disabled-bg: var(--tblr-dribbble);--tblr-btn-disabled-color: var(--tblr-dribbble-fg);--tblr-btn-box-shadow: var(--tblr-box-shadow-input)}.btn-outline-dribbble{--tblr-btn-color: var(--tblr-dribbble);--tblr-btn-bg: transparent;--tblr-btn-border-color: var(--tblr-dribbble);--tblr-btn-hover-color: var(--tblr-dribbble-fg);--tblr-btn-hover-border-color: transparent;--tblr-btn-hover-bg: var(--tblr-dribbble);--tblr-btn-active-color: var(--tblr-dribbble-fg);--tblr-btn-active-bg: var(--tblr-dribbble);--tblr-btn-disabled-color: var(--tblr-dribbble);--tblr-btn-disabled-border-color: var(--tblr-dribbble)}.btn-github{--tblr-btn-border-color: transparent;--tblr-btn-hover-border-color: transparent;--tblr-btn-active-border-color: transparent;--tblr-btn-color: var(--tblr-github-fg);--tblr-btn-bg: var(--tblr-github);--tblr-btn-hover-color: var(--tblr-github-fg);--tblr-btn-hover-bg: rgba(var(--tblr-github-rgb), .8);--tblr-btn-active-color: var(--tblr-github-fg);--tblr-btn-active-bg: rgba(var(--tblr-github-rgb), .8);--tblr-btn-disabled-bg: var(--tblr-github);--tblr-btn-disabled-color: var(--tblr-github-fg);--tblr-btn-box-shadow: var(--tblr-box-shadow-input)}.btn-outline-github{--tblr-btn-color: var(--tblr-github);--tblr-btn-bg: transparent;--tblr-btn-border-color: var(--tblr-github);--tblr-btn-hover-color: var(--tblr-github-fg);--tblr-btn-hover-border-color: transparent;--tblr-btn-hover-bg: var(--tblr-github);--tblr-btn-active-color: var(--tblr-github-fg);--tblr-btn-active-bg: var(--tblr-github);--tblr-btn-disabled-color: var(--tblr-github);--tblr-btn-disabled-border-color: var(--tblr-github)}.btn-instagram{--tblr-btn-border-color: transparent;--tblr-btn-hover-border-color: transparent;--tblr-btn-active-border-color: transparent;--tblr-btn-color: var(--tblr-instagram-fg);--tblr-btn-bg: var(--tblr-instagram);--tblr-btn-hover-color: var(--tblr-instagram-fg);--tblr-btn-hover-bg: rgba(var(--tblr-instagram-rgb), .8);--tblr-btn-active-color: var(--tblr-instagram-fg);--tblr-btn-active-bg: rgba(var(--tblr-instagram-rgb), .8);--tblr-btn-disabled-bg: var(--tblr-instagram);--tblr-btn-disabled-color: var(--tblr-instagram-fg);--tblr-btn-box-shadow: var(--tblr-box-shadow-input)}.btn-outline-instagram{--tblr-btn-color: var(--tblr-instagram);--tblr-btn-bg: transparent;--tblr-btn-border-color: var(--tblr-instagram);--tblr-btn-hover-color: var(--tblr-instagram-fg);--tblr-btn-hover-border-color: transparent;--tblr-btn-hover-bg: var(--tblr-instagram);--tblr-btn-active-color: var(--tblr-instagram-fg);--tblr-btn-active-bg: var(--tblr-instagram);--tblr-btn-disabled-color: var(--tblr-instagram);--tblr-btn-disabled-border-color: var(--tblr-instagram)}.btn-pinterest{--tblr-btn-border-color: transparent;--tblr-btn-hover-border-color: transparent;--tblr-btn-active-border-color: transparent;--tblr-btn-color: var(--tblr-pinterest-fg);--tblr-btn-bg: var(--tblr-pinterest);--tblr-btn-hover-color: var(--tblr-pinterest-fg);--tblr-btn-hover-bg: rgba(var(--tblr-pinterest-rgb), .8);--tblr-btn-active-color: var(--tblr-pinterest-fg);--tblr-btn-active-bg: rgba(var(--tblr-pinterest-rgb), .8);--tblr-btn-disabled-bg: var(--tblr-pinterest);--tblr-btn-disabled-color: var(--tblr-pinterest-fg);--tblr-btn-box-shadow: var(--tblr-box-shadow-input)}.btn-outline-pinterest{--tblr-btn-color: var(--tblr-pinterest);--tblr-btn-bg: transparent;--tblr-btn-border-color: var(--tblr-pinterest);--tblr-btn-hover-color: var(--tblr-pinterest-fg);--tblr-btn-hover-border-color: transparent;--tblr-btn-hover-bg: var(--tblr-pinterest);--tblr-btn-active-color: var(--tblr-pinterest-fg);--tblr-btn-active-bg: var(--tblr-pinterest);--tblr-btn-disabled-color: var(--tblr-pinterest);--tblr-btn-disabled-border-color: var(--tblr-pinterest)}.btn-vk{--tblr-btn-border-color: transparent;--tblr-btn-hover-border-color: transparent;--tblr-btn-active-border-color: transparent;--tblr-btn-color: var(--tblr-vk-fg);--tblr-btn-bg: var(--tblr-vk);--tblr-btn-hover-color: var(--tblr-vk-fg);--tblr-btn-hover-bg: rgba(var(--tblr-vk-rgb), .8);--tblr-btn-active-color: var(--tblr-vk-fg);--tblr-btn-active-bg: rgba(var(--tblr-vk-rgb), .8);--tblr-btn-disabled-bg: var(--tblr-vk);--tblr-btn-disabled-color: var(--tblr-vk-fg);--tblr-btn-box-shadow: var(--tblr-box-shadow-input)}.btn-outline-vk{--tblr-btn-color: var(--tblr-vk);--tblr-btn-bg: transparent;--tblr-btn-border-color: var(--tblr-vk);--tblr-btn-hover-color: var(--tblr-vk-fg);--tblr-btn-hover-border-color: transparent;--tblr-btn-hover-bg: var(--tblr-vk);--tblr-btn-active-color: var(--tblr-vk-fg);--tblr-btn-active-bg: var(--tblr-vk);--tblr-btn-disabled-color: var(--tblr-vk);--tblr-btn-disabled-border-color: var(--tblr-vk)}.btn-rss{--tblr-btn-border-color: transparent;--tblr-btn-hover-border-color: transparent;--tblr-btn-active-border-color: transparent;--tblr-btn-color: var(--tblr-rss-fg);--tblr-btn-bg: var(--tblr-rss);--tblr-btn-hover-color: var(--tblr-rss-fg);--tblr-btn-hover-bg: rgba(var(--tblr-rss-rgb), .8);--tblr-btn-active-color: var(--tblr-rss-fg);--tblr-btn-active-bg: rgba(var(--tblr-rss-rgb), .8);--tblr-btn-disabled-bg: var(--tblr-rss);--tblr-btn-disabled-color: var(--tblr-rss-fg);--tblr-btn-box-shadow: var(--tblr-box-shadow-input)}.btn-outline-rss{--tblr-btn-color: var(--tblr-rss);--tblr-btn-bg: transparent;--tblr-btn-border-color: var(--tblr-rss);--tblr-btn-hover-color: var(--tblr-rss-fg);--tblr-btn-hover-border-color: transparent;--tblr-btn-hover-bg: var(--tblr-rss);--tblr-btn-active-color: var(--tblr-rss-fg);--tblr-btn-active-bg: var(--tblr-rss);--tblr-btn-disabled-color: var(--tblr-rss);--tblr-btn-disabled-border-color: var(--tblr-rss)}.btn-flickr{--tblr-btn-border-color: transparent;--tblr-btn-hover-border-color: transparent;--tblr-btn-active-border-color: transparent;--tblr-btn-color: var(--tblr-flickr-fg);--tblr-btn-bg: var(--tblr-flickr);--tblr-btn-hover-color: var(--tblr-flickr-fg);--tblr-btn-hover-bg: rgba(var(--tblr-flickr-rgb), .8);--tblr-btn-active-color: var(--tblr-flickr-fg);--tblr-btn-active-bg: rgba(var(--tblr-flickr-rgb), .8);--tblr-btn-disabled-bg: var(--tblr-flickr);--tblr-btn-disabled-color: var(--tblr-flickr-fg);--tblr-btn-box-shadow: var(--tblr-box-shadow-input)}.btn-outline-flickr{--tblr-btn-color: var(--tblr-flickr);--tblr-btn-bg: transparent;--tblr-btn-border-color: var(--tblr-flickr);--tblr-btn-hover-color: var(--tblr-flickr-fg);--tblr-btn-hover-border-color: transparent;--tblr-btn-hover-bg: var(--tblr-flickr);--tblr-btn-active-color: var(--tblr-flickr-fg);--tblr-btn-active-bg: var(--tblr-flickr);--tblr-btn-disabled-color: var(--tblr-flickr);--tblr-btn-disabled-border-color: var(--tblr-flickr)}.btn-bitbucket{--tblr-btn-border-color: transparent;--tblr-btn-hover-border-color: transparent;--tblr-btn-active-border-color: transparent;--tblr-btn-color: var(--tblr-bitbucket-fg);--tblr-btn-bg: var(--tblr-bitbucket);--tblr-btn-hover-color: var(--tblr-bitbucket-fg);--tblr-btn-hover-bg: rgba(var(--tblr-bitbucket-rgb), .8);--tblr-btn-active-color: var(--tblr-bitbucket-fg);--tblr-btn-active-bg: rgba(var(--tblr-bitbucket-rgb), .8);--tblr-btn-disabled-bg: var(--tblr-bitbucket);--tblr-btn-disabled-color: var(--tblr-bitbucket-fg);--tblr-btn-box-shadow: var(--tblr-box-shadow-input)}.btn-outline-bitbucket{--tblr-btn-color: var(--tblr-bitbucket);--tblr-btn-bg: transparent;--tblr-btn-border-color: var(--tblr-bitbucket);--tblr-btn-hover-color: var(--tblr-bitbucket-fg);--tblr-btn-hover-border-color: transparent;--tblr-btn-hover-bg: var(--tblr-bitbucket);--tblr-btn-active-color: var(--tblr-bitbucket-fg);--tblr-btn-active-bg: var(--tblr-bitbucket);--tblr-btn-disabled-color: var(--tblr-bitbucket);--tblr-btn-disabled-border-color: var(--tblr-bitbucket)}.btn-tabler{--tblr-btn-border-color: transparent;--tblr-btn-hover-border-color: transparent;--tblr-btn-active-border-color: transparent;--tblr-btn-color: var(--tblr-tabler-fg);--tblr-btn-bg: var(--tblr-tabler);--tblr-btn-hover-color: var(--tblr-tabler-fg);--tblr-btn-hover-bg: rgba(var(--tblr-tabler-rgb), .8);--tblr-btn-active-color: var(--tblr-tabler-fg);--tblr-btn-active-bg: rgba(var(--tblr-tabler-rgb), .8);--tblr-btn-disabled-bg: var(--tblr-tabler);--tblr-btn-disabled-color: var(--tblr-tabler-fg);--tblr-btn-box-shadow: var(--tblr-box-shadow-input)}.btn-outline-tabler{--tblr-btn-color: var(--tblr-tabler);--tblr-btn-bg: transparent;--tblr-btn-border-color: var(--tblr-tabler);--tblr-btn-hover-color: var(--tblr-tabler-fg);--tblr-btn-hover-border-color: transparent;--tblr-btn-hover-bg: var(--tblr-tabler);--tblr-btn-active-color: var(--tblr-tabler-fg);--tblr-btn-active-bg: var(--tblr-tabler);--tblr-btn-disabled-color: var(--tblr-tabler);--tblr-btn-disabled-border-color: var(--tblr-tabler)}.btn-ghost-primary{--tblr-btn-color: var(--tblr-primary);--tblr-btn-bg: transparent;--tblr-btn-border-color: transparent;--tblr-btn-hover-color: var(--tblr-primary-fg);--tblr-btn-hover-bg: var(--tblr-primary);--tblr-btn-hover-border-color: var(--tblr-primary);--tblr-btn-active-color: var(--tblr-primary-fg);--tblr-btn-active-bg: var(--tblr-primary);--tblr-btn-active-border-color: transparent;--tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--tblr-btn-disabled-color: var(--tblr-primary);--tblr-btn-disabled-bg: transparent;--tblr-btn-disabled-border-color: transparent;--tblr-gradient: none;--tblr-btn-box-shadow: none}.btn-ghost-secondary{--tblr-btn-color: var(--tblr-secondary);--tblr-btn-bg: transparent;--tblr-btn-border-color: transparent;--tblr-btn-hover-color: var(--tblr-secondary-fg);--tblr-btn-hover-bg: var(--tblr-secondary);--tblr-btn-hover-border-color: var(--tblr-secondary);--tblr-btn-active-color: var(--tblr-secondary-fg);--tblr-btn-active-bg: var(--tblr-secondary);--tblr-btn-active-border-color: transparent;--tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--tblr-btn-disabled-color: var(--tblr-secondary);--tblr-btn-disabled-bg: transparent;--tblr-btn-disabled-border-color: transparent;--tblr-gradient: none;--tblr-btn-box-shadow: none}.btn-ghost-success{--tblr-btn-color: var(--tblr-success);--tblr-btn-bg: transparent;--tblr-btn-border-color: transparent;--tblr-btn-hover-color: var(--tblr-success-fg);--tblr-btn-hover-bg: var(--tblr-success);--tblr-btn-hover-border-color: var(--tblr-success);--tblr-btn-active-color: var(--tblr-success-fg);--tblr-btn-active-bg: var(--tblr-success);--tblr-btn-active-border-color: transparent;--tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--tblr-btn-disabled-color: var(--tblr-success);--tblr-btn-disabled-bg: transparent;--tblr-btn-disabled-border-color: transparent;--tblr-gradient: none;--tblr-btn-box-shadow: none}.btn-ghost-info{--tblr-btn-color: var(--tblr-info);--tblr-btn-bg: transparent;--tblr-btn-border-color: transparent;--tblr-btn-hover-color: var(--tblr-info-fg);--tblr-btn-hover-bg: var(--tblr-info);--tblr-btn-hover-border-color: var(--tblr-info);--tblr-btn-active-color: var(--tblr-info-fg);--tblr-btn-active-bg: var(--tblr-info);--tblr-btn-active-border-color: transparent;--tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--tblr-btn-disabled-color: var(--tblr-info);--tblr-btn-disabled-bg: transparent;--tblr-btn-disabled-border-color: transparent;--tblr-gradient: none;--tblr-btn-box-shadow: none}.btn-ghost-warning{--tblr-btn-color: var(--tblr-warning);--tblr-btn-bg: transparent;--tblr-btn-border-color: transparent;--tblr-btn-hover-color: var(--tblr-warning-fg);--tblr-btn-hover-bg: var(--tblr-warning);--tblr-btn-hover-border-color: var(--tblr-warning);--tblr-btn-active-color: var(--tblr-warning-fg);--tblr-btn-active-bg: var(--tblr-warning);--tblr-btn-active-border-color: transparent;--tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--tblr-btn-disabled-color: var(--tblr-warning);--tblr-btn-disabled-bg: transparent;--tblr-btn-disabled-border-color: transparent;--tblr-gradient: none;--tblr-btn-box-shadow: none}.btn-ghost-danger{--tblr-btn-color: var(--tblr-danger);--tblr-btn-bg: transparent;--tblr-btn-border-color: transparent;--tblr-btn-hover-color: var(--tblr-danger-fg);--tblr-btn-hover-bg: var(--tblr-danger);--tblr-btn-hover-border-color: var(--tblr-danger);--tblr-btn-active-color: var(--tblr-danger-fg);--tblr-btn-active-bg: var(--tblr-danger);--tblr-btn-active-border-color: transparent;--tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--tblr-btn-disabled-color: var(--tblr-danger);--tblr-btn-disabled-bg: transparent;--tblr-btn-disabled-border-color: transparent;--tblr-gradient: none;--tblr-btn-box-shadow: none}.btn-ghost-light{--tblr-btn-color: var(--tblr-light);--tblr-btn-bg: transparent;--tblr-btn-border-color: transparent;--tblr-btn-hover-color: var(--tblr-light-fg);--tblr-btn-hover-bg: var(--tblr-light);--tblr-btn-hover-border-color: var(--tblr-light);--tblr-btn-active-color: var(--tblr-light-fg);--tblr-btn-active-bg: var(--tblr-light);--tblr-btn-active-border-color: transparent;--tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--tblr-btn-disabled-color: var(--tblr-light);--tblr-btn-disabled-bg: transparent;--tblr-btn-disabled-border-color: transparent;--tblr-gradient: none;--tblr-btn-box-shadow: none}.btn-ghost-dark{--tblr-btn-color: var(--tblr-dark);--tblr-btn-bg: transparent;--tblr-btn-border-color: transparent;--tblr-btn-hover-color: var(--tblr-dark-fg);--tblr-btn-hover-bg: var(--tblr-dark);--tblr-btn-hover-border-color: var(--tblr-dark);--tblr-btn-active-color: var(--tblr-dark-fg);--tblr-btn-active-bg: var(--tblr-dark);--tblr-btn-active-border-color: transparent;--tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--tblr-btn-disabled-color: var(--tblr-dark);--tblr-btn-disabled-bg: transparent;--tblr-btn-disabled-border-color: transparent;--tblr-gradient: none;--tblr-btn-box-shadow: none}.btn-ghost-muted{--tblr-btn-color: var(--tblr-muted);--tblr-btn-bg: transparent;--tblr-btn-border-color: transparent;--tblr-btn-hover-color: var(--tblr-muted-fg);--tblr-btn-hover-bg: var(--tblr-muted);--tblr-btn-hover-border-color: var(--tblr-muted);--tblr-btn-active-color: var(--tblr-muted-fg);--tblr-btn-active-bg: var(--tblr-muted);--tblr-btn-active-border-color: transparent;--tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--tblr-btn-disabled-color: var(--tblr-muted);--tblr-btn-disabled-bg: transparent;--tblr-btn-disabled-border-color: transparent;--tblr-gradient: none;--tblr-btn-box-shadow: none}.btn-ghost-blue{--tblr-btn-color: var(--tblr-blue);--tblr-btn-bg: transparent;--tblr-btn-border-color: transparent;--tblr-btn-hover-color: var(--tblr-blue-fg);--tblr-btn-hover-bg: var(--tblr-blue);--tblr-btn-hover-border-color: var(--tblr-blue);--tblr-btn-active-color: var(--tblr-blue-fg);--tblr-btn-active-bg: var(--tblr-blue);--tblr-btn-active-border-color: transparent;--tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--tblr-btn-disabled-color: var(--tblr-blue);--tblr-btn-disabled-bg: transparent;--tblr-btn-disabled-border-color: transparent;--tblr-gradient: none;--tblr-btn-box-shadow: none}.btn-ghost-azure{--tblr-btn-color: var(--tblr-azure);--tblr-btn-bg: transparent;--tblr-btn-border-color: transparent;--tblr-btn-hover-color: var(--tblr-azure-fg);--tblr-btn-hover-bg: var(--tblr-azure);--tblr-btn-hover-border-color: var(--tblr-azure);--tblr-btn-active-color: var(--tblr-azure-fg);--tblr-btn-active-bg: var(--tblr-azure);--tblr-btn-active-border-color: transparent;--tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--tblr-btn-disabled-color: var(--tblr-azure);--tblr-btn-disabled-bg: transparent;--tblr-btn-disabled-border-color: transparent;--tblr-gradient: none;--tblr-btn-box-shadow: none}.btn-ghost-indigo{--tblr-btn-color: var(--tblr-indigo);--tblr-btn-bg: transparent;--tblr-btn-border-color: transparent;--tblr-btn-hover-color: var(--tblr-indigo-fg);--tblr-btn-hover-bg: var(--tblr-indigo);--tblr-btn-hover-border-color: var(--tblr-indigo);--tblr-btn-active-color: var(--tblr-indigo-fg);--tblr-btn-active-bg: var(--tblr-indigo);--tblr-btn-active-border-color: transparent;--tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--tblr-btn-disabled-color: var(--tblr-indigo);--tblr-btn-disabled-bg: transparent;--tblr-btn-disabled-border-color: transparent;--tblr-gradient: none;--tblr-btn-box-shadow: none}.btn-ghost-purple{--tblr-btn-color: var(--tblr-purple);--tblr-btn-bg: transparent;--tblr-btn-border-color: transparent;--tblr-btn-hover-color: var(--tblr-purple-fg);--tblr-btn-hover-bg: var(--tblr-purple);--tblr-btn-hover-border-color: var(--tblr-purple);--tblr-btn-active-color: var(--tblr-purple-fg);--tblr-btn-active-bg: var(--tblr-purple);--tblr-btn-active-border-color: transparent;--tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--tblr-btn-disabled-color: var(--tblr-purple);--tblr-btn-disabled-bg: transparent;--tblr-btn-disabled-border-color: transparent;--tblr-gradient: none;--tblr-btn-box-shadow: none}.btn-ghost-pink{--tblr-btn-color: var(--tblr-pink);--tblr-btn-bg: transparent;--tblr-btn-border-color: transparent;--tblr-btn-hover-color: var(--tblr-pink-fg);--tblr-btn-hover-bg: var(--tblr-pink);--tblr-btn-hover-border-color: var(--tblr-pink);--tblr-btn-active-color: var(--tblr-pink-fg);--tblr-btn-active-bg: var(--tblr-pink);--tblr-btn-active-border-color: transparent;--tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--tblr-btn-disabled-color: var(--tblr-pink);--tblr-btn-disabled-bg: transparent;--tblr-btn-disabled-border-color: transparent;--tblr-gradient: none;--tblr-btn-box-shadow: none}.btn-ghost-red{--tblr-btn-color: var(--tblr-red);--tblr-btn-bg: transparent;--tblr-btn-border-color: transparent;--tblr-btn-hover-color: var(--tblr-red-fg);--tblr-btn-hover-bg: var(--tblr-red);--tblr-btn-hover-border-color: var(--tblr-red);--tblr-btn-active-color: var(--tblr-red-fg);--tblr-btn-active-bg: var(--tblr-red);--tblr-btn-active-border-color: transparent;--tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--tblr-btn-disabled-color: var(--tblr-red);--tblr-btn-disabled-bg: transparent;--tblr-btn-disabled-border-color: transparent;--tblr-gradient: none;--tblr-btn-box-shadow: none}.btn-ghost-orange{--tblr-btn-color: var(--tblr-orange);--tblr-btn-bg: transparent;--tblr-btn-border-color: transparent;--tblr-btn-hover-color: var(--tblr-orange-fg);--tblr-btn-hover-bg: var(--tblr-orange);--tblr-btn-hover-border-color: var(--tblr-orange);--tblr-btn-active-color: var(--tblr-orange-fg);--tblr-btn-active-bg: var(--tblr-orange);--tblr-btn-active-border-color: transparent;--tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--tblr-btn-disabled-color: var(--tblr-orange);--tblr-btn-disabled-bg: transparent;--tblr-btn-disabled-border-color: transparent;--tblr-gradient: none;--tblr-btn-box-shadow: none}.btn-ghost-yellow{--tblr-btn-color: var(--tblr-yellow);--tblr-btn-bg: transparent;--tblr-btn-border-color: transparent;--tblr-btn-hover-color: var(--tblr-yellow-fg);--tblr-btn-hover-bg: var(--tblr-yellow);--tblr-btn-hover-border-color: var(--tblr-yellow);--tblr-btn-active-color: var(--tblr-yellow-fg);--tblr-btn-active-bg: var(--tblr-yellow);--tblr-btn-active-border-color: transparent;--tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--tblr-btn-disabled-color: var(--tblr-yellow);--tblr-btn-disabled-bg: transparent;--tblr-btn-disabled-border-color: transparent;--tblr-gradient: none;--tblr-btn-box-shadow: none}.btn-ghost-lime{--tblr-btn-color: var(--tblr-lime);--tblr-btn-bg: transparent;--tblr-btn-border-color: transparent;--tblr-btn-hover-color: var(--tblr-lime-fg);--tblr-btn-hover-bg: var(--tblr-lime);--tblr-btn-hover-border-color: var(--tblr-lime);--tblr-btn-active-color: var(--tblr-lime-fg);--tblr-btn-active-bg: var(--tblr-lime);--tblr-btn-active-border-color: transparent;--tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--tblr-btn-disabled-color: var(--tblr-lime);--tblr-btn-disabled-bg: transparent;--tblr-btn-disabled-border-color: transparent;--tblr-gradient: none;--tblr-btn-box-shadow: none}.btn-ghost-green{--tblr-btn-color: var(--tblr-green);--tblr-btn-bg: transparent;--tblr-btn-border-color: transparent;--tblr-btn-hover-color: var(--tblr-green-fg);--tblr-btn-hover-bg: var(--tblr-green);--tblr-btn-hover-border-color: var(--tblr-green);--tblr-btn-active-color: var(--tblr-green-fg);--tblr-btn-active-bg: var(--tblr-green);--tblr-btn-active-border-color: transparent;--tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--tblr-btn-disabled-color: var(--tblr-green);--tblr-btn-disabled-bg: transparent;--tblr-btn-disabled-border-color: transparent;--tblr-gradient: none;--tblr-btn-box-shadow: none}.btn-ghost-teal{--tblr-btn-color: var(--tblr-teal);--tblr-btn-bg: transparent;--tblr-btn-border-color: transparent;--tblr-btn-hover-color: var(--tblr-teal-fg);--tblr-btn-hover-bg: var(--tblr-teal);--tblr-btn-hover-border-color: var(--tblr-teal);--tblr-btn-active-color: var(--tblr-teal-fg);--tblr-btn-active-bg: var(--tblr-teal);--tblr-btn-active-border-color: transparent;--tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--tblr-btn-disabled-color: var(--tblr-teal);--tblr-btn-disabled-bg: transparent;--tblr-btn-disabled-border-color: transparent;--tblr-gradient: none;--tblr-btn-box-shadow: none}.btn-ghost-cyan{--tblr-btn-color: var(--tblr-cyan);--tblr-btn-bg: transparent;--tblr-btn-border-color: transparent;--tblr-btn-hover-color: var(--tblr-cyan-fg);--tblr-btn-hover-bg: var(--tblr-cyan);--tblr-btn-hover-border-color: var(--tblr-cyan);--tblr-btn-active-color: var(--tblr-cyan-fg);--tblr-btn-active-bg: var(--tblr-cyan);--tblr-btn-active-border-color: transparent;--tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--tblr-btn-disabled-color: var(--tblr-cyan);--tblr-btn-disabled-bg: transparent;--tblr-btn-disabled-border-color: transparent;--tblr-gradient: none;--tblr-btn-box-shadow: none}.btn-ghost-facebook{--tblr-btn-color: var(--tblr-facebook);--tblr-btn-bg: transparent;--tblr-btn-border-color: transparent;--tblr-btn-hover-color: var(--tblr-facebook-fg);--tblr-btn-hover-bg: var(--tblr-facebook);--tblr-btn-hover-border-color: var(--tblr-facebook);--tblr-btn-active-color: var(--tblr-facebook-fg);--tblr-btn-active-bg: var(--tblr-facebook);--tblr-btn-active-border-color: transparent;--tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--tblr-btn-disabled-color: var(--tblr-facebook);--tblr-btn-disabled-bg: transparent;--tblr-btn-disabled-border-color: transparent;--tblr-gradient: none;--tblr-btn-box-shadow: none}.btn-ghost-twitter{--tblr-btn-color: var(--tblr-twitter);--tblr-btn-bg: transparent;--tblr-btn-border-color: transparent;--tblr-btn-hover-color: var(--tblr-twitter-fg);--tblr-btn-hover-bg: var(--tblr-twitter);--tblr-btn-hover-border-color: var(--tblr-twitter);--tblr-btn-active-color: var(--tblr-twitter-fg);--tblr-btn-active-bg: var(--tblr-twitter);--tblr-btn-active-border-color: transparent;--tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--tblr-btn-disabled-color: var(--tblr-twitter);--tblr-btn-disabled-bg: transparent;--tblr-btn-disabled-border-color: transparent;--tblr-gradient: none;--tblr-btn-box-shadow: none}.btn-ghost-linkedin{--tblr-btn-color: var(--tblr-linkedin);--tblr-btn-bg: transparent;--tblr-btn-border-color: transparent;--tblr-btn-hover-color: var(--tblr-linkedin-fg);--tblr-btn-hover-bg: var(--tblr-linkedin);--tblr-btn-hover-border-color: var(--tblr-linkedin);--tblr-btn-active-color: var(--tblr-linkedin-fg);--tblr-btn-active-bg: var(--tblr-linkedin);--tblr-btn-active-border-color: transparent;--tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--tblr-btn-disabled-color: var(--tblr-linkedin);--tblr-btn-disabled-bg: transparent;--tblr-btn-disabled-border-color: transparent;--tblr-gradient: none;--tblr-btn-box-shadow: none}.btn-ghost-google{--tblr-btn-color: var(--tblr-google);--tblr-btn-bg: transparent;--tblr-btn-border-color: transparent;--tblr-btn-hover-color: var(--tblr-google-fg);--tblr-btn-hover-bg: var(--tblr-google);--tblr-btn-hover-border-color: var(--tblr-google);--tblr-btn-active-color: var(--tblr-google-fg);--tblr-btn-active-bg: var(--tblr-google);--tblr-btn-active-border-color: transparent;--tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--tblr-btn-disabled-color: var(--tblr-google);--tblr-btn-disabled-bg: transparent;--tblr-btn-disabled-border-color: transparent;--tblr-gradient: none;--tblr-btn-box-shadow: none}.btn-ghost-youtube{--tblr-btn-color: var(--tblr-youtube);--tblr-btn-bg: transparent;--tblr-btn-border-color: transparent;--tblr-btn-hover-color: var(--tblr-youtube-fg);--tblr-btn-hover-bg: var(--tblr-youtube);--tblr-btn-hover-border-color: var(--tblr-youtube);--tblr-btn-active-color: var(--tblr-youtube-fg);--tblr-btn-active-bg: var(--tblr-youtube);--tblr-btn-active-border-color: transparent;--tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--tblr-btn-disabled-color: var(--tblr-youtube);--tblr-btn-disabled-bg: transparent;--tblr-btn-disabled-border-color: transparent;--tblr-gradient: none;--tblr-btn-box-shadow: none}.btn-ghost-vimeo{--tblr-btn-color: var(--tblr-vimeo);--tblr-btn-bg: transparent;--tblr-btn-border-color: transparent;--tblr-btn-hover-color: var(--tblr-vimeo-fg);--tblr-btn-hover-bg: var(--tblr-vimeo);--tblr-btn-hover-border-color: var(--tblr-vimeo);--tblr-btn-active-color: var(--tblr-vimeo-fg);--tblr-btn-active-bg: var(--tblr-vimeo);--tblr-btn-active-border-color: transparent;--tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--tblr-btn-disabled-color: var(--tblr-vimeo);--tblr-btn-disabled-bg: transparent;--tblr-btn-disabled-border-color: transparent;--tblr-gradient: none;--tblr-btn-box-shadow: none}.btn-ghost-dribbble{--tblr-btn-color: var(--tblr-dribbble);--tblr-btn-bg: transparent;--tblr-btn-border-color: transparent;--tblr-btn-hover-color: var(--tblr-dribbble-fg);--tblr-btn-hover-bg: var(--tblr-dribbble);--tblr-btn-hover-border-color: var(--tblr-dribbble);--tblr-btn-active-color: var(--tblr-dribbble-fg);--tblr-btn-active-bg: var(--tblr-dribbble);--tblr-btn-active-border-color: transparent;--tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--tblr-btn-disabled-color: var(--tblr-dribbble);--tblr-btn-disabled-bg: transparent;--tblr-btn-disabled-border-color: transparent;--tblr-gradient: none;--tblr-btn-box-shadow: none}.btn-ghost-github{--tblr-btn-color: var(--tblr-github);--tblr-btn-bg: transparent;--tblr-btn-border-color: transparent;--tblr-btn-hover-color: var(--tblr-github-fg);--tblr-btn-hover-bg: var(--tblr-github);--tblr-btn-hover-border-color: var(--tblr-github);--tblr-btn-active-color: var(--tblr-github-fg);--tblr-btn-active-bg: var(--tblr-github);--tblr-btn-active-border-color: transparent;--tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--tblr-btn-disabled-color: var(--tblr-github);--tblr-btn-disabled-bg: transparent;--tblr-btn-disabled-border-color: transparent;--tblr-gradient: none;--tblr-btn-box-shadow: none}.btn-ghost-instagram{--tblr-btn-color: var(--tblr-instagram);--tblr-btn-bg: transparent;--tblr-btn-border-color: transparent;--tblr-btn-hover-color: var(--tblr-instagram-fg);--tblr-btn-hover-bg: var(--tblr-instagram);--tblr-btn-hover-border-color: var(--tblr-instagram);--tblr-btn-active-color: var(--tblr-instagram-fg);--tblr-btn-active-bg: var(--tblr-instagram);--tblr-btn-active-border-color: transparent;--tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--tblr-btn-disabled-color: var(--tblr-instagram);--tblr-btn-disabled-bg: transparent;--tblr-btn-disabled-border-color: transparent;--tblr-gradient: none;--tblr-btn-box-shadow: none}.btn-ghost-pinterest{--tblr-btn-color: var(--tblr-pinterest);--tblr-btn-bg: transparent;--tblr-btn-border-color: transparent;--tblr-btn-hover-color: var(--tblr-pinterest-fg);--tblr-btn-hover-bg: var(--tblr-pinterest);--tblr-btn-hover-border-color: var(--tblr-pinterest);--tblr-btn-active-color: var(--tblr-pinterest-fg);--tblr-btn-active-bg: var(--tblr-pinterest);--tblr-btn-active-border-color: transparent;--tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--tblr-btn-disabled-color: var(--tblr-pinterest);--tblr-btn-disabled-bg: transparent;--tblr-btn-disabled-border-color: transparent;--tblr-gradient: none;--tblr-btn-box-shadow: none}.btn-ghost-vk{--tblr-btn-color: var(--tblr-vk);--tblr-btn-bg: transparent;--tblr-btn-border-color: transparent;--tblr-btn-hover-color: var(--tblr-vk-fg);--tblr-btn-hover-bg: var(--tblr-vk);--tblr-btn-hover-border-color: var(--tblr-vk);--tblr-btn-active-color: var(--tblr-vk-fg);--tblr-btn-active-bg: var(--tblr-vk);--tblr-btn-active-border-color: transparent;--tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--tblr-btn-disabled-color: var(--tblr-vk);--tblr-btn-disabled-bg: transparent;--tblr-btn-disabled-border-color: transparent;--tblr-gradient: none;--tblr-btn-box-shadow: none}.btn-ghost-rss{--tblr-btn-color: var(--tblr-rss);--tblr-btn-bg: transparent;--tblr-btn-border-color: transparent;--tblr-btn-hover-color: var(--tblr-rss-fg);--tblr-btn-hover-bg: var(--tblr-rss);--tblr-btn-hover-border-color: var(--tblr-rss);--tblr-btn-active-color: var(--tblr-rss-fg);--tblr-btn-active-bg: var(--tblr-rss);--tblr-btn-active-border-color: transparent;--tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--tblr-btn-disabled-color: var(--tblr-rss);--tblr-btn-disabled-bg: transparent;--tblr-btn-disabled-border-color: transparent;--tblr-gradient: none;--tblr-btn-box-shadow: none}.btn-ghost-flickr{--tblr-btn-color: var(--tblr-flickr);--tblr-btn-bg: transparent;--tblr-btn-border-color: transparent;--tblr-btn-hover-color: var(--tblr-flickr-fg);--tblr-btn-hover-bg: var(--tblr-flickr);--tblr-btn-hover-border-color: var(--tblr-flickr);--tblr-btn-active-color: var(--tblr-flickr-fg);--tblr-btn-active-bg: var(--tblr-flickr);--tblr-btn-active-border-color: transparent;--tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--tblr-btn-disabled-color: var(--tblr-flickr);--tblr-btn-disabled-bg: transparent;--tblr-btn-disabled-border-color: transparent;--tblr-gradient: none;--tblr-btn-box-shadow: none}.btn-ghost-bitbucket{--tblr-btn-color: var(--tblr-bitbucket);--tblr-btn-bg: transparent;--tblr-btn-border-color: transparent;--tblr-btn-hover-color: var(--tblr-bitbucket-fg);--tblr-btn-hover-bg: var(--tblr-bitbucket);--tblr-btn-hover-border-color: var(--tblr-bitbucket);--tblr-btn-active-color: var(--tblr-bitbucket-fg);--tblr-btn-active-bg: var(--tblr-bitbucket);--tblr-btn-active-border-color: transparent;--tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--tblr-btn-disabled-color: var(--tblr-bitbucket);--tblr-btn-disabled-bg: transparent;--tblr-btn-disabled-border-color: transparent;--tblr-gradient: none;--tblr-btn-box-shadow: none}.btn-ghost-tabler{--tblr-btn-color: var(--tblr-tabler);--tblr-btn-bg: transparent;--tblr-btn-border-color: transparent;--tblr-btn-hover-color: var(--tblr-tabler-fg);--tblr-btn-hover-bg: var(--tblr-tabler);--tblr-btn-hover-border-color: var(--tblr-tabler);--tblr-btn-active-color: var(--tblr-tabler-fg);--tblr-btn-active-bg: var(--tblr-tabler);--tblr-btn-active-border-color: transparent;--tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--tblr-btn-disabled-color: var(--tblr-tabler);--tblr-btn-disabled-bg: transparent;--tblr-btn-disabled-border-color: transparent;--tblr-gradient: none;--tblr-btn-box-shadow: none}.btn-sm,.btn-group-sm>.btn{--tblr-btn-line-height: 1.5;--tblr-btn-icon-size: .75rem}.btn-lg,.btn-group-lg>.btn{--tblr-btn-line-height: 1.5;--tblr-btn-icon-size: 2rem}.btn-list{--tblr-list-gap: .5rem;display:flex;flex-wrap:wrap;gap:var(--tblr-list-gap)}.btn-loading:after{content:"";display:inline-block;vertical-align:text-bottom;border:2px var(--tblr-border-style) currentColor;border-right-color:transparent;border-radius:100rem;color:var(--tblr-btn-color);position:absolute;width:var(--tblr-btn-icon-size);height:var(--tblr-btn-icon-size);left:calc(50% - var(--tblr-btn-icon-size) / 2);top:calc(50% - var(--tblr-btn-icon-size) / 2);animation:spinner-border .75s linear infinite}.btn-action{padding:0;border:0;color:var(--tblr-secondary);display:inline-flex;width:2rem;height:2rem;align-items:center;justify-content:center;border-radius:var(--tblr-border-radius);background:transparent}.btn-action:focus{outline:none;box-shadow:none}.btn-action:hover,.btn-action.show{color:var(--tblr-body-color);background:var(--tblr-active-bg)}.btn-group,.btn-group-vertical{box-shadow:var(--tblr-box-shadow-input)}.btn-group>.btn-check:checked+.btn,.btn-group>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn.active{z-index:5}.btn-group>.btn-check:focus+.btn,.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn:hover,.btn-group-vertical>.btn:focus{z-index:1}.calendar-header{color:var(--tblr-secondary)}.calendar-date.prev-month,.calendar-date.next-month{opacity:.25}@media (prefers-reduced-motion: reduce){.calendar-date .date-item{transition:none}}.calendar-range.range-start .date-item,.calendar-range.range-end .date-item{color:#fff;background:var(--tblr-primary);border-color:var(--tblr-primary)}@media (min-width: 992px){.carousel-indicators-thumb [data-bs-target]{width:4rem}}.carousel-indicators-thumb [data-bs-target]:before{content:"";padding-top:var(--tblr-aspect-ratio, 100%);display:block}@media (prefers-reduced-motion: reduce){.card{transition:none}}.card-borderless,.card-borderless .card-header,.card-borderless .card-footer{border-color:transparent}.card-stamp{--tblr-stamp-size: 7rem;position:absolute;top:0;right:0;width:calc(var(--tblr-stamp-size) * 1);height:calc(var(--tblr-stamp-size) * 1);max-height:100%;border-top-right-radius:4px;opacity:.2;overflow:hidden;pointer-events:none}.card-stamp-lg{--tblr-stamp-size: 13rem}.card-stamp-icon{background:var(--tblr-secondary);color:var(--tblr-card-bg, var(--tblr-bg-surface));display:flex;align-items:center;justify-content:center;border-radius:100rem;width:calc(var(--tblr-stamp-size) * 1);height:calc(var(--tblr-stamp-size) * 1);position:relative;top:calc(var(--tblr-stamp-size) * -.25);right:calc(var(--tblr-stamp-size) * -.25);font-size:calc(var(--tblr-stamp-size) * .75);transform:rotate(10deg)}.card-img-overlay-dark{background-image:linear-gradient(180deg,#0000,#0009)}.card-active{--tblr-card-border-color: var(--tblr-primary);--tblr-card-bg: var(--tblr-active-bg)}.card-btn{display:flex;align-items:center;justify-content:center;padding:1.25rem;text-align:center;transition:background .3s;border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);flex:1;color:inherit;font-weight:var(--tblr-font-weight-medium)}@media (prefers-reduced-motion: reduce){.card-btn{transition:none}}.card-stacked{--tblr-card-stacked-offset: .25rem;position:relative}.card-stacked:after{position:absolute;top:calc(-1 * var(--tblr-card-stacked-offset));right:var(--tblr-card-stacked-offset);left:var(--tblr-card-stacked-offset);height:var(--tblr-card-stacked-offset);content:"";background:var(--tblr-card-bg, var(--tblr-bg-surface));border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-card-border-color);border-radius:var(--tblr-card-border-radius) var(--tblr-card-border-radius) 0 0}.card-cover{position:relative;padding:1.25rem;background:#666 no-repeat center/cover}.card-header{color:inherit;display:flex;align-items:center;background:transparent}.card-footer-transparent{background:transparent;border-color:transparent;padding-top:0}.card-meta{color:var(--tblr-secondary)}.card-title{display:block;margin:0 0 1rem;font-size:1rem;font-weight:var(--tblr-font-weight-medium);color:inherit;line-height:1.5rem}.card-subtitle{margin-bottom:1.25rem;color:var(--tblr-secondary);font-weight:400}@media (min-width: 768px){.card-md>.card-body{padding:2.5rem}}@media (min-width: 768px){.card-lg>.card-body{padding:2rem}}@media (min-width: 992px){.card-lg>.card-body{padding:4rem}}.card-options-link{display:inline-block;min-width:1rem;margin-left:.25rem;color:var(--tblr-secondary)}.card-table tr td:first-child,.card-table tr th:first-child{padding-left:1.25rem;border-left:0}.card-table tr td:last-child,.card-table tr th:last-child{padding-right:1.25rem;border-right:0}.card-table thead tr:first-child{font-weight:var(--tblr-font-weight-bold)}.card-table tbody tr:first-child{font-size:.875rem}.card-table tfoot tr:first-child{border-top:0;font-size:.75rem;padding-top:.25rem;padding-bottom:.25rem}.card-table thead tr:first-child td,.card-table thead tr:first-child th,.card-table tbody tr:first-child td,.card-table tbody tr:first-child th,.card-table tfoot tr:first-child td,.card-table tfoot tr:first-child th{border-top:0}.card-avatar{margin-left:auto;margin-right:auto;box-shadow:0 0 0 .25rem var(--tblr-card-bg, var(--tblr-bg-surface));margin-top:calc(-1 * var(--tblr-avatar-size) * .5)}.card-list-group .list-group-item{padding-right:1.25rem;padding-left:1.25rem;border-right:0;border-left:0;border-radius:0}.card-tabs .nav-tabs .nav-link.active{color:inherit;background:var(--tblr-card-bg, var(--tblr-bg-surface));border-bottom-color:transparent}.card-note{--tblr-card-bg: #fff7dd;--tblr-card-border-color: #fff1c9}.btn-close:focus{outline:none}.dropdown-item-icon{width:1.25rem!important;height:1.25rem!important;margin-right:.5rem;color:var(--tblr-secondary);opacity:.7;text-align:center}.dropdown-header{font-size:.625rem;font-weight:var(--tblr-font-weight-bold);text-transform:uppercase;letter-spacing:.04em;line-height:1rem;color:var(--tblr-secondary);padding-bottom:.25rem;pointer-events:none}.dropdown-menu-arrow:before{content:"";position:absolute;top:-.25rem;left:.75rem;display:block;background:inherit;width:14px;height:14px;transform:rotate(45deg);transform-origin:center;border:1px solid;border-color:inherit;z-index:-1;clip:rect(0px,9px,9px,0px)}.datagrid{--tblr-datagrid-padding: 1.5rem;--tblr-datagrid-item-width: 15rem;display:grid;grid-gap:var(--tblr-datagrid-padding);grid-template-columns:repeat(auto-fit,minmax(var(--tblr-datagrid-item-width),1fr))}.datagrid-content{min-height:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%}.datagrid-title{font-size:.875rem;font-weight:var(--tblr-font-weight-bold);text-transform:none;letter-spacing:0em;line-height:1rem;color:var(--tblr-secondary);margin-bottom:0}@media (min-width: 768px){.empty{padding:3rem}}.empty-icon{margin:0 0 1rem;width:3rem;height:3rem;line-height:1;color:var(--tblr-secondary)}.empty-header{margin:0 0 1rem;font-size:4rem;font-weight:var(--tblr-font-weight-light);line-height:1;color:var(--tblr-secondary)}.empty-title,.empty-subtitle{margin:0 0 .5rem}.container-slim{--tblr-gutter-x: calc(var(--tblr-page-padding) * 2);--tblr-gutter-y: 0;width:100%;padding-right:calc(var(--tblr-gutter-x) * .5);padding-left:calc(var(--tblr-gutter-x) * .5);margin-right:auto;margin-left:auto;max-width:16rem}.container-tight{--tblr-gutter-x: calc(var(--tblr-page-padding) * 2);--tblr-gutter-y: 0;width:100%;padding-right:calc(var(--tblr-gutter-x) * .5);padding-left:calc(var(--tblr-gutter-x) * .5);margin-right:auto;margin-left:auto;max-width:30rem}.container-narrow{--tblr-gutter-x: calc(var(--tblr-page-padding) * 2);--tblr-gutter-y: 0;width:100%;padding-right:calc(var(--tblr-gutter-x) * .5);padding-left:calc(var(--tblr-gutter-x) * .5);margin-right:auto;margin-left:auto;max-width:45rem}.row-cards{--tblr-gutter-x: var(--tblr-page-padding);--tblr-gutter-y: var(--tblr-page-padding);min-width:0}.icon{--tblr-icon-size: 1.25rem;width:var(--tblr-icon-size);height:var(--tblr-icon-size);font-size:var(--tblr-icon-size);vertical-align:bottom;stroke-width:1.5}.icon-inline{--tblr-icon-size: 1rem;vertical-align:-.2rem}.icon-sm{--tblr-icon-size: 1rem;stroke-width:1}.icon-md{--tblr-icon-size: 2.5rem;stroke-width:1}.icon-lg{--tblr-icon-size: 3.5rem;stroke-width:1}.img-responsive{--tblr-img-responsive-ratio: 75%;background:no-repeat center/cover;padding-top:var(--tblr-img-responsive-ratio)}.img-responsive-grid{padding-top:calc(var(--tblr-img-responsive-ratio) - var(--tblr-gutter-y) / 2)}.img-responsive-1x1{--tblr-img-responsive-ratio: 100%}.img-responsive-2x1{--tblr-img-responsive-ratio: 50%}.img-responsive-1x2{--tblr-img-responsive-ratio: 200%}.img-responsive-3x1{--tblr-img-responsive-ratio: 33.3333333333%}.img-responsive-1x3{--tblr-img-responsive-ratio: 300%}.img-responsive-4x3{--tblr-img-responsive-ratio: 75%}.img-responsive-3x4{--tblr-img-responsive-ratio: 133.3333333333%}.img-responsive-16x9{--tblr-img-responsive-ratio: 56.25%}.img-responsive-9x16{--tblr-img-responsive-ratio: 177.7777777778%}.img-responsive-21x9{--tblr-img-responsive-ratio: 42.8571428571%}.img-responsive-9x21{--tblr-img-responsive-ratio: 233.3333333333%}.form-label-description{float:right;font-weight:var(--tblr-font-weight-normal);color:var(--tblr-secondary)}.form-hint{display:block;color:var(--tblr-secondary)}.input-group+.form-hint,.form-control+.form-hint,.form-select+.form-hint{margin-top:.5rem}.form-control:disabled,.form-control.disabled{color:var(--tblr-secondary);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.form-control-flush{padding:0;background:none!important;border-color:transparent!important;resize:none;box-shadow:none!important;line-height:inherit}.form-help{display:inline-flex;font-weight:var(--tblr-font-weight-bold);align-items:center;justify-content:center;width:1.125rem;height:1.125rem;font-size:.75rem;color:var(--tblr-secondary);text-align:center;text-decoration:none;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background:var(--tblr-gray-100);border-radius:100rem;transition:background-color .3s,color .3s}@media (prefers-reduced-motion: reduce){.form-help{transition:none}}.input-group{box-shadow:var(--tblr-box-shadow-input);border-radius:var(--tblr-border-radius)}.input-group .form-control,.input-group .btn{box-shadow:none}.input-group-flat:focus-within{box-shadow:0 0 0 .25rem rgba(var(--tblr-primary-rgb),.25);border-radius:var(--tblr-border-radius)}.input-group-flat:focus-within .form-control,.input-group-flat:focus-within .input-group-text{border-color:#80aad3!important}@media (prefers-reduced-motion: reduce){.input-group-flat .input-group-text{transition:none}}.form-colorinput-color:before{position:absolute;top:0;left:0;width:100%;height:100%;content:"";background:no-repeat center center/1.25rem;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' width='16' height='16'%3e%3cpath fill='none' stroke='%23ffffff' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8.5l2.5 2.5l5.5 -5.5'/%3e%3c/svg%3e");opacity:0;transition:opacity .3s}@media (prefers-reduced-motion: reduce){.form-colorinput-color:before{transition:none}}.form-colorinput-input:focus~.form-colorinput-color{border-color:var(--tblr-primary);box-shadow:0 0 0 .25rem rgba(var(--tblr-primary-rgb),.25)}.form-colorinput-light .form-colorinput-color:before{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' width='16' height='16'%3e%3cpath fill='none' stroke='%23182433' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8.5l2.5 2.5l5.5 -5.5'/%3e%3c/svg%3e")}.form-imagecheck-input:focus~.form-imagecheck-figure{border-color:var(--tblr-primary);box-shadow:0 0 0 .25rem rgba(var(--tblr-primary-rgb),.25)}.form-imagecheck-figure:before{position:absolute;top:.25rem;left:.25rem;z-index:1;display:block;width:1.25rem;height:1.25rem;color:#fff;pointer-events:none;content:"";-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background:var(--tblr-bg-forms);border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);border-radius:var(--tblr-border-radius);transition:opacity .3s}@media (prefers-reduced-motion: reduce){.form-imagecheck-figure:before{transition:none}}.form-imagecheck-input:checked~.form-imagecheck-figure:before{background-color:var(--tblr-primary);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' width='16' height='16'%3e%3cpath fill='none' stroke='%23ffffff' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8.5l2.5 2.5l5.5 -5.5'/%3e%3c/svg%3e");background-repeat:repeat;background-position:center;background-size:1.25rem;border-color:var(--tblr-border-color-translucent)}.form-imagecheck-input[type=radio]:checked~.form-imagecheck-figure:before{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3ccircle r='3' fill='%23ffffff' cx='8' cy='8' /%3e%3c/svg%3e")}@media (prefers-reduced-motion: reduce){.form-imagecheck-image{transition:none}}.form-imagecheck:hover .form-imagecheck-image,.form-imagecheck-input:focus~.form-imagecheck-figure .form-imagecheck-image,.form-imagecheck-input:checked~.form-imagecheck-figure .form-imagecheck-image{opacity:1}.form-imagecheck-caption{padding:.25rem;font-size:.765625rem;color:var(--tblr-secondary);text-align:center;transition:color .3s}@media (prefers-reduced-motion: reduce){.form-imagecheck-caption{transition:none}}.form-imagecheck:hover .form-imagecheck-caption,.form-imagecheck-input:focus~.form-imagecheck-figure .form-imagecheck-caption,.form-imagecheck-input:checked~.form-imagecheck-figure .form-imagecheck-caption{color:var(--tblr-body-color)}.form-selectgroup-label{position:relative;display:block;min-width:calc(1.4285714286em + 1.125rem + calc(var(--tblr-border-width) * 2));margin:0;padding:.5625rem .75rem;font-size:.875rem;line-height:1.4285714286;color:var(--tblr-secondary);background:var(--tblr-bg-forms);text-align:center;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);border-radius:3px;box-shadow:var(--tblr-box-shadow-input);transition:border-color .3s,background .3s,color .3s}@media (prefers-reduced-motion: reduce){.form-selectgroup-label{transition:none}}.form-selectgroup-check{display:inline-block;width:1.25rem;height:1.25rem;border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent);vertical-align:middle;box-shadow:var(--tblr-box-shadow-input)}.form-selectgroup-input:checked+.form-selectgroup-label .form-selectgroup-check{background-color:var(--tblr-primary);background-repeat:repeat;background-position:center;background-size:1.25rem;border-color:var(--tblr-border-color-translucent)}.form-selectgroup-input[type=checkbox]:checked+.form-selectgroup-label .form-selectgroup-check{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' width='16' height='16'%3e%3cpath fill='none' stroke='%23ffffff' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8.5l2.5 2.5l5.5 -5.5'/%3e%3c/svg%3e")}.form-selectgroup-input[type=radio]:checked+.form-selectgroup-label .form-selectgroup-check{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3ccircle r='3' fill='%23ffffff' cx='8' cy='8' /%3e%3c/svg%3e")}.form-selectgroup-check-floated{position:absolute;top:.5625rem;right:.5625rem}.form-selectgroup-input:focus+.form-selectgroup-label{z-index:2;color:var(--tblr-primary);border-color:var(--tblr-primary);box-shadow:0 0 0 .25rem rgba(var(--tblr-primary-rgb),.25)}.form-selectgroup-boxes .form-selectgroup-label{text-align:left;padding:1.25rem;color:inherit}.form-control::-webkit-file-upload-button{background-color:var(--tblr-btn-color, var(--tblr-tertiary-bg))}.form-control::file-selector-button{background-color:var(--tblr-btn-color, var(--tblr-tertiary-bg))}.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button{background-color:var(--tblr-btn-color, var(--tblr-secondary-bg))}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:var(--tblr-btn-color, var(--tblr-secondary-bg))}.form-check.form-check-highlight .form-check-input:not(:checked)~.form-check-label{color:var(--tblr-secondary)}.form-check .form-check-label-off{color:var(--tblr-secondary)}.form-check-input{background-size:1.25rem;margin-top:0rem;box-shadow:var(--tblr-box-shadow-input)}@media (prefers-reduced-motion: reduce){.form-switch .form-check-input{transition:none}}.form-check-description{display:block;color:var(--tblr-secondary);font-size:.75rem;margin-top:.25rem}.form-switch .form-check-input{height:1.25rem;margin-top:0rem}.form-select.is-invalid-lite,.form-control.is-invalid-lite,.form-select.is-valid-lite,.form-control.is-valid-lite{border-color:var(--tblr-border-color)!important}.legend{--tblr-legend-size: .75em;display:inline-block;background:var(--tblr-border-color);width:var(--tblr-legend-size);height:var(--tblr-legend-size);border-radius:var(--tblr-border-radius-sm);border:1px solid var(--tblr-border-color-translucent)}.list-group-header{background:var(--tblr-bg-surface-tertiary);padding:.5rem 1.25rem;font-size:.75rem;font-weight:var(--tblr-font-weight-medium);line-height:1;text-transform:uppercase;color:var(--tblr-secondary);border-bottom:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color)}.list-group-item.active{background-color:rgba(var(--tblr-text-secondary-rgb),.04);border-left-color:#0054a6;border-left-width:2px}.list-group-item:active,.list-group-item:focus,.list-group-item:hover{background-color:rgba(var(--tblr-text-secondary-rgb),.04)}.list-group-item.disabled,.list-group-item:disabled{color:#929dab;background-color:rgba(var(--tblr-text-secondary-rgb),.04)}@media (prefers-reduced-motion: reduce){.list-group-hoverable .list-group-item-actions{transition:none}}.list-group-hoverable .list-group-item:hover .list-group-item-actions,.list-group-hoverable .list-group-item-actions.show{opacity:1}.list-group-transparent{--tblr-list-group-border-radius: 0;margin:0 -1.25rem}.list-group-transparent .list-group-item{background:none;border:0}.list-group-transparent .list-group-item .icon{color:var(--tblr-secondary)}.loader{position:relative;display:block;width:2.5rem;height:2.5rem;color:#0054a6;vertical-align:middle}.modal-body{scrollbar-color:rgba(var(--tblr-scrollbar-color, var(--tblr-body-color-rgb)),.16) transparent}@media (prefers-reduced-motion: reduce){.modal-body::-webkit-scrollbar{-webkit-transition:none;transition:none}}.modal-body::-webkit-scrollbar-thumb{border-radius:1rem;border:5px solid transparent;box-shadow:inset 0 0 0 1rem rgba(var(--tblr-scrollbar-color, var(--tblr-body-color-rgb)),.16)}.modal-body::-webkit-scrollbar-track{background:transparent}.modal-body:hover::-webkit-scrollbar-thumb{box-shadow:inset 0 0 0 1rem rgba(var(--tblr-scrollbar-color, var(--tblr-body-color-rgb)),.32)}.modal-body::-webkit-scrollbar-corner{background:transparent}.modal-status{position:absolute;top:0;left:0;right:0;height:2px;background:var(--tblr-secondary);border-radius:var(--tblr-border-radius-lg) var(--tblr-border-radius-lg) 0 0}.modal-header{align-items:center;min-height:3.5rem;background:transparent;padding:0 3.5rem 0 1.5rem}.modal-title{font-size:1rem;font-weight:var(--tblr-font-weight-bold);color:inherit;line-height:1.4285714286}.nav-vertical .nav-link.active,.nav-vertical .nav-item.show .nav-link{font-weight:var(--tblr-font-weight-bold)}.nav-bordered .nav-link{padding-left:0;padding-right:0;margin:0 0 -var(--tblr-border-width);border:0;border-bottom:2px var(--tblr-border-style) transparent;color:var(--tblr-secondary)}.nav-bordered .nav-link.active,.nav-bordered .nav-item.show .nav-link{color:var(--tblr-primary);border-color:var(--tblr-primary)}@media (prefers-reduced-motion: reduce){.nav-link{transition:none}}@media (prefers-reduced-motion: reduce){.nav-link-toggle{transition:none}}.page-item:not(.active) .page-link:hover{background:transparent}.page-item.page-prev,.page-item.page-next{flex:0 0 50%;text-align:left}.page-item-subtitle{margin-bottom:2px;font-size:12px;color:var(--tblr-secondary);text-transform:uppercase}.page-link:hover .page-item-title{color:#0054a6}.progress-separated .progress-bar{box-shadow:0 0 0 2px var(--tblr-card-bg, var(--tblr-bg-surface))}.progressbg-progress{position:absolute;top:0;right:0;bottom:0;left:0;z-index:0;height:100%;background:transparent;pointer-events:none}.ribbon{--tblr-ribbon-margin: .25rem;--tblr-ribbon-border-radius: var(--tblr-border-radius);position:absolute;top:.75rem;right:calc(-1 * var(--tblr-ribbon-margin));z-index:1;padding:.25rem .75rem;font-size:.625rem;font-weight:var(--tblr-font-weight-bold);line-height:1;color:#fff;text-align:center;text-transform:uppercase;background:var(--tblr-primary);border-color:var(--tblr-primary);border-radius:var(--tblr-ribbon-border-radius) 0 var(--tblr-ribbon-border-radius) var(--tblr-ribbon-border-radius);display:inline-flex;align-items:center;justify-content:center;min-height:2rem;min-width:2rem}@media (min-width: 768px){.markdown>hr,.markdown>.hr{margin-top:3em;margin-bottom:3em}}.markdown>h1,.markdown>.h1,.markdown>h2,.markdown>.h2,.markdown>h3,.markdown>.h3,.markdown>h4,.markdown>.h4,.markdown>h5,.markdown>.h5,.markdown>h6,.markdown>.h6{font-weight:var(--tblr-font-weight-bold)}.steps{--tblr-steps-color: var(--tblr-primary);--tblr-steps-inactive-color: var(--tblr-border-color);--tblr-steps-dot-size: .5rem;--tblr-steps-border-width: 2px;display:flex;flex-wrap:nowrap;width:100%;padding:0;margin:0;list-style:none}.steps-blue{--tblr-steps-color: var(--tblr-blue)}.steps-azure{--tblr-steps-color: var(--tblr-azure)}.steps-indigo{--tblr-steps-color: var(--tblr-indigo)}.steps-purple{--tblr-steps-color: var(--tblr-purple)}.steps-pink{--tblr-steps-color: var(--tblr-pink)}.steps-red{--tblr-steps-color: var(--tblr-red)}.steps-orange{--tblr-steps-color: var(--tblr-orange)}.steps-yellow{--tblr-steps-color: var(--tblr-yellow)}.steps-lime{--tblr-steps-color: var(--tblr-lime)}.steps-green{--tblr-steps-color: var(--tblr-green)}.steps-teal{--tblr-steps-color: var(--tblr-teal)}.steps-cyan{--tblr-steps-color: var(--tblr-cyan)}.steps-counter{--tblr-steps-dot-size: 1.5rem;counter-reset:steps}.steps-vertical{--tblr-steps-dot-offset: 6px;flex-direction:column}.steps-vertical.steps-counter{--tblr-steps-dot-offset: -2px}.status{--tblr-status-height: 1.5rem;--tblr-status-color: #667382;--tblr-status-color-rgb: 102, 115, 130;display:inline-flex;align-items:center;height:var(--tblr-status-height);padding:.25rem .75rem;gap:.5rem;color:var(--tblr-status-color);background:rgba(var(--tblr-status-color-rgb),.1);font-size:.875rem;text-transform:none;letter-spacing:normal;border-radius:100rem;font-weight:var(--tblr-font-weight-medium);line-height:1;margin:0}.status-lite{border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color)!important;background:transparent!important;color:var(--tblr-body-color)!important}.status-primary{--tblr-status-color: #0054a6;--tblr-status-color-rgb: 0, 84, 166}.status-secondary{--tblr-status-color: #667382;--tblr-status-color-rgb: 102, 115, 130}.status-success{--tblr-status-color: #2fb344;--tblr-status-color-rgb: 47, 179, 68}.status-info{--tblr-status-color: #4299e1;--tblr-status-color-rgb: 66, 153, 225}.status-warning{--tblr-status-color: #f76707;--tblr-status-color-rgb: 247, 103, 7}.status-danger{--tblr-status-color: #d63939;--tblr-status-color-rgb: 214, 57, 57}.status-light{--tblr-status-color: #fcfdfe;--tblr-status-color-rgb: 252, 253, 254}.status-dark{--tblr-status-color: #182433;--tblr-status-color-rgb: 24, 36, 51}.status-muted{--tblr-status-color: #667382;--tblr-status-color-rgb: 102, 115, 130}.status-blue{--tblr-status-color: #0054a6;--tblr-status-color-rgb: 0, 84, 166}.status-azure{--tblr-status-color: #4299e1;--tblr-status-color-rgb: 66, 153, 225}.status-indigo{--tblr-status-color: #4263eb;--tblr-status-color-rgb: 66, 99, 235}.status-purple{--tblr-status-color: #ae3ec9;--tblr-status-color-rgb: 174, 62, 201}.status-pink{--tblr-status-color: #d6336c;--tblr-status-color-rgb: 214, 51, 108}.status-red{--tblr-status-color: #d63939;--tblr-status-color-rgb: 214, 57, 57}.status-orange{--tblr-status-color: #f76707;--tblr-status-color-rgb: 247, 103, 7}.status-yellow{--tblr-status-color: #f59f00;--tblr-status-color-rgb: 245, 159, 0}.status-lime{--tblr-status-color: #74b816;--tblr-status-color-rgb: 116, 184, 22}.status-green{--tblr-status-color: #2fb344;--tblr-status-color-rgb: 47, 179, 68}.status-teal{--tblr-status-color: #0ca678;--tblr-status-color-rgb: 12, 166, 120}.status-cyan{--tblr-status-color: #17a2b8;--tblr-status-color-rgb: 23, 162, 184}.status-facebook{--tblr-status-color: #1877f2;--tblr-status-color-rgb: 24, 119, 242}.status-twitter{--tblr-status-color: #1da1f2;--tblr-status-color-rgb: 29, 161, 242}.status-linkedin{--tblr-status-color: #0a66c2;--tblr-status-color-rgb: 10, 102, 194}.status-google{--tblr-status-color: #dc4e41;--tblr-status-color-rgb: 220, 78, 65}.status-youtube{--tblr-status-color: #ff0000;--tblr-status-color-rgb: 255, 0, 0}.status-vimeo{--tblr-status-color: #1ab7ea;--tblr-status-color-rgb: 26, 183, 234}.status-dribbble{--tblr-status-color: #ea4c89;--tblr-status-color-rgb: 234, 76, 137}.status-github{--tblr-status-color: #181717;--tblr-status-color-rgb: 24, 23, 23}.status-instagram{--tblr-status-color: #e4405f;--tblr-status-color-rgb: 228, 64, 95}.status-pinterest{--tblr-status-color: #bd081c;--tblr-status-color-rgb: 189, 8, 28}.status-vk{--tblr-status-color: #6383a8;--tblr-status-color-rgb: 99, 131, 168}.status-rss{--tblr-status-color: #ffa500;--tblr-status-color-rgb: 255, 165, 0}.status-flickr{--tblr-status-color: #0063dc;--tblr-status-color-rgb: 0, 99, 220}.status-bitbucket{--tblr-status-color: #0052cc;--tblr-status-color-rgb: 0, 82, 204}.status-tabler{--tblr-status-color: #0054a6;--tblr-status-color-rgb: 0, 84, 166}.status-dot{--tblr-status-dot-color: var(--tblr-status-color, #667382);--tblr-status-size: .5rem;position:relative;display:inline-block;width:var(--tblr-status-size);height:var(--tblr-status-size);background:var(--tblr-status-dot-color);border-radius:100rem}.status-indicator{--tblr-status-indicator-size: 2.5rem;--tblr-status-indicator-color: var(--tblr-status-color, #667382);display:block;position:relative;width:var(--tblr-status-indicator-size);height:var(--tblr-status-indicator-size)}.status-indicator-circle{--tblr-status-circle-size: .75rem;position:absolute;left:50%;top:50%;margin:calc(var(--tblr-status-circle-size) / -2) 0 0 calc(var(--tblr-status-circle-size) / -2);width:var(--tblr-status-circle-size);height:var(--tblr-status-circle-size);border-radius:100rem;background:var(--tblr-status-color)}.switch-icon{display:inline-block;line-height:1;border:0;padding:0;background:transparent;width:1.25rem;height:1.25rem;vertical-align:bottom;position:relative;cursor:pointer}.switch-icon:focus{outline:none}@media (prefers-reduced-motion: reduce){.switch-icon-fade .switch-icon-a,.switch-icon-fade .switch-icon-b{transition:none}}@media (prefers-reduced-motion: reduce){.switch-icon-scale .switch-icon-a,.switch-icon-scale .switch-icon-b{transition:none}}@media (prefers-reduced-motion: reduce){.switch-icon-scale.active .switch-icon-a,.switch-icon-scale.active .switch-icon-b{transition:none}}@media (prefers-reduced-motion: reduce){.switch-icon-flip .switch-icon-a,.switch-icon-flip .switch-icon-b{transition:none}}.switch-icon-slide-up,.switch-icon-slide-left,.switch-icon-slide-right,.switch-icon-slide-down{overflow:hidden}.switch-icon-slide-up .switch-icon-a,.switch-icon-slide-up .switch-icon-b,.switch-icon-slide-left .switch-icon-a,.switch-icon-slide-left .switch-icon-b,.switch-icon-slide-right .switch-icon-a,.switch-icon-slide-right .switch-icon-b,.switch-icon-slide-down .switch-icon-a,.switch-icon-slide-down .switch-icon-b{transition:opacity .3s,transform .3s}@media (prefers-reduced-motion: reduce){.switch-icon-slide-up .switch-icon-a,.switch-icon-slide-up .switch-icon-b,.switch-icon-slide-left .switch-icon-a,.switch-icon-slide-left .switch-icon-b,.switch-icon-slide-right .switch-icon-a,.switch-icon-slide-right .switch-icon-b,.switch-icon-slide-down .switch-icon-a,.switch-icon-slide-down .switch-icon-b{transition:none}}.switch-icon-slide-up .switch-icon-a,.switch-icon-slide-left .switch-icon-a,.switch-icon-slide-right .switch-icon-a,.switch-icon-slide-down .switch-icon-a{transform:translateY(0)}.switch-icon-slide-up .switch-icon-b,.switch-icon-slide-left .switch-icon-b,.switch-icon-slide-right .switch-icon-b,.switch-icon-slide-down .switch-icon-b{transform:translateY(100%)}.switch-icon-slide-up.active .switch-icon-a,.switch-icon-slide-left.active .switch-icon-a,.switch-icon-slide-right.active .switch-icon-a,.switch-icon-slide-down.active .switch-icon-a{transform:translateY(-100%)}.switch-icon-slide-up.active .switch-icon-b,.switch-icon-slide-left.active .switch-icon-b,.switch-icon-slide-right.active .switch-icon-b,.switch-icon-slide-down.active .switch-icon-b{transform:translateY(0)}.table thead th,.markdown>table thead th{background:var(--tblr-bg-surface-tertiary);font-size:.625rem;font-weight:var(--tblr-font-weight-bold);text-transform:uppercase;letter-spacing:.04em;line-height:1rem;color:var(--tblr-secondary);padding-top:.5rem;padding-bottom:.5rem;white-space:nowrap}@media print{.table thead th,.markdown>table thead th{background:transparent}}.table-responsive .table,.table-responsive .markdown>table{margin-bottom:0}.table-transparent thead th{background:transparent}.table-mobile td[data-label]:before{font-size:.625rem;font-weight:var(--tblr-font-weight-bold);text-transform:uppercase;letter-spacing:.04em;line-height:1rem;color:var(--tblr-secondary);content:attr(data-label);display:block}@media (max-width: 575.98px){.table-mobile-sm{display:block}.table-mobile-sm thead{display:none}.table-mobile-sm tbody,.table-mobile-sm tr{display:flex;flex-direction:column}.table-mobile-sm td{display:block;padding:.75rem!important;border:none;color:var(--tblr-body-color)!important}.table-mobile-sm td[data-label]:before{font-size:.625rem;font-weight:var(--tblr-font-weight-bold);text-transform:uppercase;letter-spacing:.04em;line-height:1rem;color:var(--tblr-secondary);content:attr(data-label);display:block}.table-mobile-sm tr{border-bottom:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)}.table-mobile-sm .btn{display:block}}@media (max-width: 767.98px){.table-mobile-md{display:block}.table-mobile-md thead{display:none}.table-mobile-md tbody,.table-mobile-md tr{display:flex;flex-direction:column}.table-mobile-md td{display:block;padding:.75rem!important;border:none;color:var(--tblr-body-color)!important}.table-mobile-md td[data-label]:before{font-size:.625rem;font-weight:var(--tblr-font-weight-bold);text-transform:uppercase;letter-spacing:.04em;line-height:1rem;color:var(--tblr-secondary);content:attr(data-label);display:block}.table-mobile-md tr{border-bottom:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)}.table-mobile-md .btn{display:block}}@media (max-width: 991.98px){.table-mobile-lg{display:block}.table-mobile-lg thead{display:none}.table-mobile-lg tbody,.table-mobile-lg tr{display:flex;flex-direction:column}.table-mobile-lg td{display:block;padding:.75rem!important;border:none;color:var(--tblr-body-color)!important}.table-mobile-lg td[data-label]:before{font-size:.625rem;font-weight:var(--tblr-font-weight-bold);text-transform:uppercase;letter-spacing:.04em;line-height:1rem;color:var(--tblr-secondary);content:attr(data-label);display:block}.table-mobile-lg tr{border-bottom:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)}.table-mobile-lg .btn{display:block}}@media (max-width: 1199.98px){.table-mobile-xl{display:block}.table-mobile-xl thead{display:none}.table-mobile-xl tbody,.table-mobile-xl tr{display:flex;flex-direction:column}.table-mobile-xl td{display:block;padding:.75rem!important;border:none;color:var(--tblr-body-color)!important}.table-mobile-xl td[data-label]:before{font-size:.625rem;font-weight:var(--tblr-font-weight-bold);text-transform:uppercase;letter-spacing:.04em;line-height:1rem;color:var(--tblr-secondary);content:attr(data-label);display:block}.table-mobile-xl tr{border-bottom:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)}.table-mobile-xl .btn{display:block}}@media (max-width: 1399.98px){.table-mobile-xxl{display:block}.table-mobile-xxl thead{display:none}.table-mobile-xxl tbody,.table-mobile-xxl tr{display:flex;flex-direction:column}.table-mobile-xxl td{display:block;padding:.75rem!important;border:none;color:var(--tblr-body-color)!important}.table-mobile-xxl td[data-label]:before{font-size:.625rem;font-weight:var(--tblr-font-weight-bold);text-transform:uppercase;letter-spacing:.04em;line-height:1rem;color:var(--tblr-secondary);content:attr(data-label);display:block}.table-mobile-xxl tr{border-bottom:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)}.table-mobile-xxl .btn{display:block}}@media (prefers-reduced-motion: reduce){.table-sort{transition:none}}.table-sort:hover,.table-sort.asc,.table-sort.desc{color:var(--tblr-body-color)}.table-sort:after{content:"";display:inline-flex;width:1rem;height:1rem;vertical-align:bottom;-webkit-mask-image:url("data:image/svg+xml,");mask-image:url("data:image/svg+xml,");background:currentColor;margin-left:.25rem}.table-sort.asc:after{-webkit-mask-image:url("data:image/svg+xml,");mask-image:url("data:image/svg+xml,")}.table-sort.desc:after{-webkit-mask-image:url("data:image/svg+xml,");mask-image:url("data:image/svg+xml,")}.table-borderless thead th{background:transparent}.tag{--tblr-tag-height: 1.5rem;border:1px solid var(--tblr-border-color);display:inline-flex;align-items:center;height:var(--tblr-tag-height);border-radius:var(--tblr-border-radius);padding:0 .5rem;background:var(--tblr-bg-surface);box-shadow:var(--tblr-box-shadow-input);gap:.5rem}.tag .btn-close{margin-right:-.25rem;margin-left:-.125rem;padding:0;width:1rem;height:1rem;font-size:.5rem}.tag-badge{--tblr-badge-font-size: .625rem;--tblr-badge-padding-x: .25rem;--tblr-badge-padding-y: .125rem;margin-right:-.25rem}.tag-avatar,.tag-flag,.tag-payment,.tag-icon,.tag-check{margin-left:-.25rem}.tag-icon{color:var(--tblr-secondary);margin-right:-.125rem;width:1rem;height:1rem}.tag-check{width:1rem;height:1rem;background-size:1rem}.tags-list{--tblr-list-gap: .5rem;display:flex;flex-wrap:wrap;gap:var(--tblr-list-gap)}.toast button[data-bs-dismiss=toast]{outline:none}.toast-primary{--tblr-toast-color: #0054a6}.toast-secondary{--tblr-toast-color: #667382}.toast-success{--tblr-toast-color: #2fb344}.toast-info{--tblr-toast-color: #4299e1}.toast-warning{--tblr-toast-color: #f76707}.toast-danger{--tblr-toast-color: #d63939}.toast-light{--tblr-toast-color: #fcfdfe}.toast-dark{--tblr-toast-color: #182433}.toast-muted{--tblr-toast-color: #667382}.toast-blue{--tblr-toast-color: #0054a6}.toast-azure{--tblr-toast-color: #4299e1}.toast-indigo{--tblr-toast-color: #4263eb}.toast-purple{--tblr-toast-color: #ae3ec9}.toast-pink{--tblr-toast-color: #d6336c}.toast-red{--tblr-toast-color: #d63939}.toast-orange{--tblr-toast-color: #f76707}.toast-yellow{--tblr-toast-color: #f59f00}.toast-lime{--tblr-toast-color: #74b816}.toast-green{--tblr-toast-color: #2fb344}.toast-teal{--tblr-toast-color: #0ca678}.toast-cyan{--tblr-toast-color: #17a2b8}.toast-facebook{--tblr-toast-color: #1877f2}.toast-twitter{--tblr-toast-color: #1da1f2}.toast-linkedin{--tblr-toast-color: #0a66c2}.toast-google{--tblr-toast-color: #dc4e41}.toast-youtube{--tblr-toast-color: #ff0000}.toast-vimeo{--tblr-toast-color: #1ab7ea}.toast-dribbble{--tblr-toast-color: #ea4c89}.toast-github{--tblr-toast-color: #181717}.toast-instagram{--tblr-toast-color: #e4405f}.toast-pinterest{--tblr-toast-color: #bd081c}.toast-vk{--tblr-toast-color: #6383a8}.toast-rss{--tblr-toast-color: #ffa500}.toast-flickr{--tblr-toast-color: #0063dc}.toast-bitbucket{--tblr-toast-color: #0052cc}.toast-tabler{--tblr-toast-color: #0054a6}.tracking{--tblr-tracking-height: 1.5rem;--tblr-tracking-gap-width: .125rem;--tblr-tracking-block-border-radius: var(--tblr-border-radius);display:flex;gap:var(--tblr-tracking-gap-width)}.tracking-squares{--tblr-tracking-block-border-radius: var(--tblr-border-radius-sm)}.timeline{--tblr-timeline-icon-size: 2.5rem;position:relative;list-style:none;padding:0}.timeline-event:not(:last-child):before{content:"";position:absolute;top:var(--tblr-timeline-icon-size);left:calc(var(--tblr-timeline-icon-size) / 2);bottom:calc(-1 * var(--tblr-page-padding));width:var(--tblr-border-width);background-color:var(--tblr-border-color);border-radius:var(--tblr-border-radius)}.timeline-event-icon{position:absolute;display:flex;align-items:center;justify-content:center;width:var(--tblr-timeline-icon-size, 2.5rem);height:var(--tblr-timeline-icon-size, 2.5rem);background:var(--tblr-gray-200);color:var(--tblr-secondary);border-radius:var(--tblr-border-radius);z-index:5}.timeline-event-card{margin-left:calc(var(--tblr-timeline-icon-size, 2.5rem) + var(--tblr-page-padding))}.hr-text{display:flex;align-items:center;margin:2rem 0;font-size:.625rem;font-weight:var(--tblr-font-weight-bold);text-transform:uppercase;letter-spacing:.04em;line-height:1rem;color:var(--tblr-secondary);height:1px}.hr-text>*:first-child{padding-right:.5rem;padding-left:0;color:var(--tblr-secondary)}.hr-text.hr-text-left>*:first-child{padding-right:.5rem;padding-left:.5rem}.hr-text.hr-text-right>*:first-child{padding-right:0;padding-left:.5rem}h1 a,h2 a,h3 a,h4 a,h5 a,h6 a,.h1 a,.h2 a,.h3 a,.h4 a,.h5 a,.h6 a,h1 a:hover,h2 a:hover,h3 a:hover,h4 a:hover,h5 a:hover,h6 a:hover,.h1 a:hover,.h2 a:hover,.h3 a:hover,.h4 a:hover,.h5 a:hover,.h6 a:hover{color:inherit}h1,.h1{font-size:var(--tblr-font-size-h1);line-height:var(--tblr-line-height-h1)}h2,.h2{font-size:var(--tblr-font-size-h2);line-height:var(--tblr-line-height-h2)}h3,.h3{font-size:var(--tblr-font-size-h3);line-height:var(--tblr-line-height-h3)}h4,.h4{font-size:var(--tblr-font-size-h4);line-height:var(--tblr-line-height-h4)}h5,.h5{font-size:var(--tblr-font-size-h5);line-height:var(--tblr-line-height-h5)}h6,.h6{font-size:var(--tblr-font-size-h6);line-height:var(--tblr-line-height-h6)}strong,.strong,b{font-weight:var(--tblr-font-weight-bold)}ul,ol{padding-left:1.5rem}hr,.hr{margin:2rem 0}pre code{background:transparent}kbd,.kbd{border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);display:inline-block;box-sizing:border-box;max-width:100%;font-size:var(--tblr-font-size-h5);font-weight:var(--tblr-font-weight-medium);line-height:1;vertical-align:baseline;border-radius:var(--tblr-border-radius)}[class^=link-].disabled,[class*=" link-"].disabled{color:var(--tblr-disabled-color);pointer-events:none}.subheader{font-size:.625rem;font-weight:var(--tblr-font-weight-bold);text-transform:uppercase;letter-spacing:.04em;line-height:1rem;color:var(--tblr-secondary)}.chat-bubbles{display:flex;flex-direction:column;gap:1rem}.chat-bubble{background:var(--tblr-bg-surface-secondary);border-radius:var(--tblr-border-radius-lg);padding:1rem;position:relative}.chat-bubble-me{background-color:var(--tblr-primary-lt);box-shadow:none}.chat-bubble-title{margin-bottom:.25rem}.chat-bubble-author{font-weight:600}.chat-bubble-date{color:var(--tblr-secondary)}.chat-bubble-body>*:last-child{margin-bottom:0}.bg-primary{--tblr-bg-opacity: 1;background-color:rgba(var(--tblr-primary-rgb),var(--tblr-bg-opacity))!important}.bg-primary-lt{--tblr-bg-opacity: 1;--tblr-text-opacity: 1;color:rgba(var(--tblr-primary-rgb),var(--tblr-text-opacity))!important;background-color:rgba(var(--tblr-primary-lt-rgb),var(--tblr-bg-opacity))!important}.border-primary{border-color:#0054a6!important}.bg-secondary{--tblr-bg-opacity: 1;background-color:rgba(var(--tblr-secondary-rgb),var(--tblr-bg-opacity))!important}.bg-secondary-lt{--tblr-bg-opacity: 1;--tblr-text-opacity: 1;color:rgba(var(--tblr-secondary-rgb),var(--tblr-text-opacity))!important;background-color:rgba(var(--tblr-secondary-lt-rgb),var(--tblr-bg-opacity))!important}.bg-success{--tblr-bg-opacity: 1;background-color:rgba(var(--tblr-success-rgb),var(--tblr-bg-opacity))!important}.bg-success-lt{--tblr-bg-opacity: 1;--tblr-text-opacity: 1;color:rgba(var(--tblr-success-rgb),var(--tblr-text-opacity))!important;background-color:rgba(var(--tblr-success-lt-rgb),var(--tblr-bg-opacity))!important}.bg-info{--tblr-bg-opacity: 1;background-color:rgba(var(--tblr-info-rgb),var(--tblr-bg-opacity))!important}.bg-info-lt{--tblr-bg-opacity: 1;--tblr-text-opacity: 1;color:rgba(var(--tblr-info-rgb),var(--tblr-text-opacity))!important;background-color:rgba(var(--tblr-info-lt-rgb),var(--tblr-bg-opacity))!important}.bg-warning{--tblr-bg-opacity: 1;background-color:rgba(var(--tblr-warning-rgb),var(--tblr-bg-opacity))!important}.bg-warning-lt{--tblr-bg-opacity: 1;--tblr-text-opacity: 1;color:rgba(var(--tblr-warning-rgb),var(--tblr-text-opacity))!important;background-color:rgba(var(--tblr-warning-lt-rgb),var(--tblr-bg-opacity))!important}.bg-danger{--tblr-bg-opacity: 1;background-color:rgba(var(--tblr-danger-rgb),var(--tblr-bg-opacity))!important}.bg-danger-lt{--tblr-bg-opacity: 1;--tblr-text-opacity: 1;color:rgba(var(--tblr-danger-rgb),var(--tblr-text-opacity))!important;background-color:rgba(var(--tblr-danger-lt-rgb),var(--tblr-bg-opacity))!important}.bg-light{--tblr-bg-opacity: 1;background-color:rgba(var(--tblr-light-rgb),var(--tblr-bg-opacity))!important}.bg-light-lt{--tblr-bg-opacity: 1;--tblr-text-opacity: 1;color:rgba(var(--tblr-light-rgb),var(--tblr-text-opacity))!important;background-color:rgba(var(--tblr-light-lt-rgb),var(--tblr-bg-opacity))!important}.bg-dark{--tblr-bg-opacity: 1;background-color:rgba(var(--tblr-dark-rgb),var(--tblr-bg-opacity))!important}.bg-dark-lt{--tblr-bg-opacity: 1;--tblr-text-opacity: 1;color:rgba(var(--tblr-dark-rgb),var(--tblr-text-opacity))!important;background-color:rgba(var(--tblr-dark-lt-rgb),var(--tblr-bg-opacity))!important}.bg-muted{--tblr-bg-opacity: 1;background-color:rgba(var(--tblr-muted-rgb),var(--tblr-bg-opacity))!important}.bg-muted-lt{--tblr-bg-opacity: 1;--tblr-text-opacity: 1;color:rgba(var(--tblr-muted-rgb),var(--tblr-text-opacity))!important;background-color:rgba(var(--tblr-muted-lt-rgb),var(--tblr-bg-opacity))!important}.bg-blue{--tblr-bg-opacity: 1;background-color:rgba(var(--tblr-blue-rgb),var(--tblr-bg-opacity))!important}.bg-blue-lt{--tblr-bg-opacity: 1;--tblr-text-opacity: 1;color:rgba(var(--tblr-blue-rgb),var(--tblr-text-opacity))!important;background-color:rgba(var(--tblr-blue-lt-rgb),var(--tblr-bg-opacity))!important}.border-blue{border-color:#0054a6!important}.bg-azure{--tblr-bg-opacity: 1;background-color:rgba(var(--tblr-azure-rgb),var(--tblr-bg-opacity))!important}.bg-azure-lt{--tblr-bg-opacity: 1;--tblr-text-opacity: 1;color:rgba(var(--tblr-azure-rgb),var(--tblr-text-opacity))!important;background-color:rgba(var(--tblr-azure-lt-rgb),var(--tblr-bg-opacity))!important}.bg-indigo{--tblr-bg-opacity: 1;background-color:rgba(var(--tblr-indigo-rgb),var(--tblr-bg-opacity))!important}.bg-indigo-lt{--tblr-bg-opacity: 1;--tblr-text-opacity: 1;color:rgba(var(--tblr-indigo-rgb),var(--tblr-text-opacity))!important;background-color:rgba(var(--tblr-indigo-lt-rgb),var(--tblr-bg-opacity))!important}.bg-purple{--tblr-bg-opacity: 1;background-color:rgba(var(--tblr-purple-rgb),var(--tblr-bg-opacity))!important}.bg-purple-lt{--tblr-bg-opacity: 1;--tblr-text-opacity: 1;color:rgba(var(--tblr-purple-rgb),var(--tblr-text-opacity))!important;background-color:rgba(var(--tblr-purple-lt-rgb),var(--tblr-bg-opacity))!important}.bg-pink{--tblr-bg-opacity: 1;background-color:rgba(var(--tblr-pink-rgb),var(--tblr-bg-opacity))!important}.bg-pink-lt{--tblr-bg-opacity: 1;--tblr-text-opacity: 1;color:rgba(var(--tblr-pink-rgb),var(--tblr-text-opacity))!important;background-color:rgba(var(--tblr-pink-lt-rgb),var(--tblr-bg-opacity))!important}.bg-red{--tblr-bg-opacity: 1;background-color:rgba(var(--tblr-red-rgb),var(--tblr-bg-opacity))!important}.bg-red-lt{--tblr-bg-opacity: 1;--tblr-text-opacity: 1;color:rgba(var(--tblr-red-rgb),var(--tblr-text-opacity))!important;background-color:rgba(var(--tblr-red-lt-rgb),var(--tblr-bg-opacity))!important}.bg-orange{--tblr-bg-opacity: 1;background-color:rgba(var(--tblr-orange-rgb),var(--tblr-bg-opacity))!important}.bg-orange-lt{--tblr-bg-opacity: 1;--tblr-text-opacity: 1;color:rgba(var(--tblr-orange-rgb),var(--tblr-text-opacity))!important;background-color:rgba(var(--tblr-orange-lt-rgb),var(--tblr-bg-opacity))!important}.bg-yellow{--tblr-bg-opacity: 1;background-color:rgba(var(--tblr-yellow-rgb),var(--tblr-bg-opacity))!important}.bg-yellow-lt{--tblr-bg-opacity: 1;--tblr-text-opacity: 1;color:rgba(var(--tblr-yellow-rgb),var(--tblr-text-opacity))!important;background-color:rgba(var(--tblr-yellow-lt-rgb),var(--tblr-bg-opacity))!important}.bg-lime{--tblr-bg-opacity: 1;background-color:rgba(var(--tblr-lime-rgb),var(--tblr-bg-opacity))!important}.bg-lime-lt{--tblr-bg-opacity: 1;--tblr-text-opacity: 1;color:rgba(var(--tblr-lime-rgb),var(--tblr-text-opacity))!important;background-color:rgba(var(--tblr-lime-lt-rgb),var(--tblr-bg-opacity))!important}.bg-green{--tblr-bg-opacity: 1;background-color:rgba(var(--tblr-green-rgb),var(--tblr-bg-opacity))!important}.bg-green-lt{--tblr-bg-opacity: 1;--tblr-text-opacity: 1;color:rgba(var(--tblr-green-rgb),var(--tblr-text-opacity))!important;background-color:rgba(var(--tblr-green-lt-rgb),var(--tblr-bg-opacity))!important}.bg-teal{--tblr-bg-opacity: 1;background-color:rgba(var(--tblr-teal-rgb),var(--tblr-bg-opacity))!important}.bg-teal-lt{--tblr-bg-opacity: 1;--tblr-text-opacity: 1;color:rgba(var(--tblr-teal-rgb),var(--tblr-text-opacity))!important;background-color:rgba(var(--tblr-teal-lt-rgb),var(--tblr-bg-opacity))!important}.bg-cyan{--tblr-bg-opacity: 1;background-color:rgba(var(--tblr-cyan-rgb),var(--tblr-bg-opacity))!important}.bg-cyan-lt{--tblr-bg-opacity: 1;--tblr-text-opacity: 1;color:rgba(var(--tblr-cyan-rgb),var(--tblr-text-opacity))!important;background-color:rgba(var(--tblr-cyan-lt-rgb),var(--tblr-bg-opacity))!important}.bg-facebook{--tblr-bg-opacity: 1;background-color:rgba(var(--tblr-facebook-rgb),var(--tblr-bg-opacity))!important}.bg-facebook-lt{--tblr-bg-opacity: 1;--tblr-text-opacity: 1;color:rgba(var(--tblr-facebook-rgb),var(--tblr-text-opacity))!important;background-color:rgba(var(--tblr-facebook-lt-rgb),var(--tblr-bg-opacity))!important}.bg-twitter{--tblr-bg-opacity: 1;background-color:rgba(var(--tblr-twitter-rgb),var(--tblr-bg-opacity))!important}.bg-twitter-lt{--tblr-bg-opacity: 1;--tblr-text-opacity: 1;color:rgba(var(--tblr-twitter-rgb),var(--tblr-text-opacity))!important;background-color:rgba(var(--tblr-twitter-lt-rgb),var(--tblr-bg-opacity))!important}.bg-linkedin{--tblr-bg-opacity: 1;background-color:rgba(var(--tblr-linkedin-rgb),var(--tblr-bg-opacity))!important}.bg-linkedin-lt{--tblr-bg-opacity: 1;--tblr-text-opacity: 1;color:rgba(var(--tblr-linkedin-rgb),var(--tblr-text-opacity))!important;background-color:rgba(var(--tblr-linkedin-lt-rgb),var(--tblr-bg-opacity))!important}.bg-google{--tblr-bg-opacity: 1;background-color:rgba(var(--tblr-google-rgb),var(--tblr-bg-opacity))!important}.bg-google-lt{--tblr-bg-opacity: 1;--tblr-text-opacity: 1;color:rgba(var(--tblr-google-rgb),var(--tblr-text-opacity))!important;background-color:rgba(var(--tblr-google-lt-rgb),var(--tblr-bg-opacity))!important}.bg-youtube{--tblr-bg-opacity: 1;background-color:rgba(var(--tblr-youtube-rgb),var(--tblr-bg-opacity))!important}.bg-youtube-lt{--tblr-bg-opacity: 1;--tblr-text-opacity: 1;color:rgba(var(--tblr-youtube-rgb),var(--tblr-text-opacity))!important;background-color:rgba(var(--tblr-youtube-lt-rgb),var(--tblr-bg-opacity))!important}.bg-vimeo{--tblr-bg-opacity: 1;background-color:rgba(var(--tblr-vimeo-rgb),var(--tblr-bg-opacity))!important}.bg-vimeo-lt{--tblr-bg-opacity: 1;--tblr-text-opacity: 1;color:rgba(var(--tblr-vimeo-rgb),var(--tblr-text-opacity))!important;background-color:rgba(var(--tblr-vimeo-lt-rgb),var(--tblr-bg-opacity))!important}.bg-dribbble{--tblr-bg-opacity: 1;background-color:rgba(var(--tblr-dribbble-rgb),var(--tblr-bg-opacity))!important}.bg-dribbble-lt{--tblr-bg-opacity: 1;--tblr-text-opacity: 1;color:rgba(var(--tblr-dribbble-rgb),var(--tblr-text-opacity))!important;background-color:rgba(var(--tblr-dribbble-lt-rgb),var(--tblr-bg-opacity))!important}.bg-github{--tblr-bg-opacity: 1;background-color:rgba(var(--tblr-github-rgb),var(--tblr-bg-opacity))!important}.bg-github-lt{--tblr-bg-opacity: 1;--tblr-text-opacity: 1;color:rgba(var(--tblr-github-rgb),var(--tblr-text-opacity))!important;background-color:rgba(var(--tblr-github-lt-rgb),var(--tblr-bg-opacity))!important}.bg-instagram{--tblr-bg-opacity: 1;background-color:rgba(var(--tblr-instagram-rgb),var(--tblr-bg-opacity))!important}.bg-instagram-lt{--tblr-bg-opacity: 1;--tblr-text-opacity: 1;color:rgba(var(--tblr-instagram-rgb),var(--tblr-text-opacity))!important;background-color:rgba(var(--tblr-instagram-lt-rgb),var(--tblr-bg-opacity))!important}.bg-pinterest{--tblr-bg-opacity: 1;background-color:rgba(var(--tblr-pinterest-rgb),var(--tblr-bg-opacity))!important}.bg-pinterest-lt{--tblr-bg-opacity: 1;--tblr-text-opacity: 1;color:rgba(var(--tblr-pinterest-rgb),var(--tblr-text-opacity))!important;background-color:rgba(var(--tblr-pinterest-lt-rgb),var(--tblr-bg-opacity))!important}.bg-vk{--tblr-bg-opacity: 1;background-color:rgba(var(--tblr-vk-rgb),var(--tblr-bg-opacity))!important}.bg-vk-lt{--tblr-bg-opacity: 1;--tblr-text-opacity: 1;color:rgba(var(--tblr-vk-rgb),var(--tblr-text-opacity))!important;background-color:rgba(var(--tblr-vk-lt-rgb),var(--tblr-bg-opacity))!important}.bg-rss{--tblr-bg-opacity: 1;background-color:rgba(var(--tblr-rss-rgb),var(--tblr-bg-opacity))!important}.bg-rss-lt{--tblr-bg-opacity: 1;--tblr-text-opacity: 1;color:rgba(var(--tblr-rss-rgb),var(--tblr-text-opacity))!important;background-color:rgba(var(--tblr-rss-lt-rgb),var(--tblr-bg-opacity))!important}.bg-flickr{--tblr-bg-opacity: 1;background-color:rgba(var(--tblr-flickr-rgb),var(--tblr-bg-opacity))!important}.bg-flickr-lt{--tblr-bg-opacity: 1;--tblr-text-opacity: 1;color:rgba(var(--tblr-flickr-rgb),var(--tblr-text-opacity))!important;background-color:rgba(var(--tblr-flickr-lt-rgb),var(--tblr-bg-opacity))!important}.bg-bitbucket{--tblr-bg-opacity: 1;background-color:rgba(var(--tblr-bitbucket-rgb),var(--tblr-bg-opacity))!important}.bg-bitbucket-lt{--tblr-bg-opacity: 1;--tblr-text-opacity: 1;color:rgba(var(--tblr-bitbucket-rgb),var(--tblr-text-opacity))!important;background-color:rgba(var(--tblr-bitbucket-lt-rgb),var(--tblr-bg-opacity))!important}.bg-tabler{--tblr-bg-opacity: 1;background-color:rgba(var(--tblr-tabler-rgb),var(--tblr-bg-opacity))!important}.bg-tabler-lt{--tblr-bg-opacity: 1;--tblr-text-opacity: 1;color:rgba(var(--tblr-tabler-rgb),var(--tblr-text-opacity))!important;background-color:rgba(var(--tblr-tabler-lt-rgb),var(--tblr-bg-opacity))!important}.border-tabler{border-color:#0054a6!important}.bg-white{--tblr-bg-opacity: 1;background-color:rgba(var(--tblr-white-rgb),var(--tblr-bg-opacity))!important}.bg-white-lt{--tblr-bg-opacity: 1;--tblr-text-opacity: 1;color:rgba(var(--tblr-white-rgb),var(--tblr-text-opacity))!important;background-color:rgba(var(--tblr-white-lt-rgb),var(--tblr-bg-opacity))!important}.text-primary{--tblr-text-opacity: 1;color:rgba(var(--tblr-primary-rgb),var(--tblr-text-opacity))!important}.text-secondary{--tblr-text-opacity: 1;color:rgba(var(--tblr-secondary-rgb),var(--tblr-text-opacity))!important}.text-success{--tblr-text-opacity: 1;color:rgba(var(--tblr-success-rgb),var(--tblr-text-opacity))!important}.text-info{--tblr-text-opacity: 1;color:rgba(var(--tblr-info-rgb),var(--tblr-text-opacity))!important}.text-warning{--tblr-text-opacity: 1;color:rgba(var(--tblr-warning-rgb),var(--tblr-text-opacity))!important}.text-danger{--tblr-text-opacity: 1;color:rgba(var(--tblr-danger-rgb),var(--tblr-text-opacity))!important}.text-light{--tblr-text-opacity: 1;color:rgba(var(--tblr-light-rgb),var(--tblr-text-opacity))!important}.text-dark{--tblr-text-opacity: 1;color:rgba(var(--tblr-dark-rgb),var(--tblr-text-opacity))!important}.text-muted{--tblr-text-opacity: 1;color:rgba(var(--tblr-muted-rgb),var(--tblr-text-opacity))!important}.text-blue{--tblr-text-opacity: 1;color:rgba(var(--tblr-blue-rgb),var(--tblr-text-opacity))!important}.text-azure{--tblr-text-opacity: 1;color:rgba(var(--tblr-azure-rgb),var(--tblr-text-opacity))!important}.text-indigo{--tblr-text-opacity: 1;color:rgba(var(--tblr-indigo-rgb),var(--tblr-text-opacity))!important}.text-purple{--tblr-text-opacity: 1;color:rgba(var(--tblr-purple-rgb),var(--tblr-text-opacity))!important}.text-pink{--tblr-text-opacity: 1;color:rgba(var(--tblr-pink-rgb),var(--tblr-text-opacity))!important}.text-red{--tblr-text-opacity: 1;color:rgba(var(--tblr-red-rgb),var(--tblr-text-opacity))!important}.text-orange{--tblr-text-opacity: 1;color:rgba(var(--tblr-orange-rgb),var(--tblr-text-opacity))!important}.text-yellow{--tblr-text-opacity: 1;color:rgba(var(--tblr-yellow-rgb),var(--tblr-text-opacity))!important}.text-lime{--tblr-text-opacity: 1;color:rgba(var(--tblr-lime-rgb),var(--tblr-text-opacity))!important}.text-green{--tblr-text-opacity: 1;color:rgba(var(--tblr-green-rgb),var(--tblr-text-opacity))!important}.text-teal{--tblr-text-opacity: 1;color:rgba(var(--tblr-teal-rgb),var(--tblr-text-opacity))!important}.text-cyan{--tblr-text-opacity: 1;color:rgba(var(--tblr-cyan-rgb),var(--tblr-text-opacity))!important}.text-facebook{--tblr-text-opacity: 1;color:rgba(var(--tblr-facebook-rgb),var(--tblr-text-opacity))!important}.text-twitter{--tblr-text-opacity: 1;color:rgba(var(--tblr-twitter-rgb),var(--tblr-text-opacity))!important}.text-linkedin{--tblr-text-opacity: 1;color:rgba(var(--tblr-linkedin-rgb),var(--tblr-text-opacity))!important}.text-google{--tblr-text-opacity: 1;color:rgba(var(--tblr-google-rgb),var(--tblr-text-opacity))!important}.text-youtube{--tblr-text-opacity: 1;color:rgba(var(--tblr-youtube-rgb),var(--tblr-text-opacity))!important}.text-vimeo{--tblr-text-opacity: 1;color:rgba(var(--tblr-vimeo-rgb),var(--tblr-text-opacity))!important}.text-dribbble{--tblr-text-opacity: 1;color:rgba(var(--tblr-dribbble-rgb),var(--tblr-text-opacity))!important}.text-github{--tblr-text-opacity: 1;color:rgba(var(--tblr-github-rgb),var(--tblr-text-opacity))!important}.text-instagram{--tblr-text-opacity: 1;color:rgba(var(--tblr-instagram-rgb),var(--tblr-text-opacity))!important}.text-pinterest{--tblr-text-opacity: 1;color:rgba(var(--tblr-pinterest-rgb),var(--tblr-text-opacity))!important}.text-vk{--tblr-text-opacity: 1;color:rgba(var(--tblr-vk-rgb),var(--tblr-text-opacity))!important}.text-rss{--tblr-text-opacity: 1;color:rgba(var(--tblr-rss-rgb),var(--tblr-text-opacity))!important}.text-flickr{--tblr-text-opacity: 1;color:rgba(var(--tblr-flickr-rgb),var(--tblr-text-opacity))!important}.text-bitbucket{--tblr-text-opacity: 1;color:rgba(var(--tblr-bitbucket-rgb),var(--tblr-text-opacity))!important}.text-tabler{--tblr-text-opacity: 1;color:rgba(var(--tblr-tabler-rgb),var(--tblr-text-opacity))!important}.bg-gray-50{--tblr-bg-opacity: .1;background-color:rgba(var(--tblr-gray-50-rgb),var(--tblr-bg-opacity))!important}.bg-gray-100{--tblr-bg-opacity: .1;background-color:rgba(var(--tblr-gray-100-rgb),var(--tblr-bg-opacity))!important}.bg-gray-200{--tblr-bg-opacity: .1;background-color:rgba(var(--tblr-gray-200-rgb),var(--tblr-bg-opacity))!important}.bg-gray-300{--tblr-bg-opacity: .1;background-color:rgba(var(--tblr-gray-300-rgb),var(--tblr-bg-opacity))!important}.bg-gray-400{--tblr-bg-opacity: .1;background-color:rgba(var(--tblr-gray-400-rgb),var(--tblr-bg-opacity))!important}.bg-gray-500{--tblr-bg-opacity: .1;background-color:rgba(var(--tblr-gray-500-rgb),var(--tblr-bg-opacity))!important}.bg-gray-600{--tblr-bg-opacity: .1;background-color:rgba(var(--tblr-gray-600-rgb),var(--tblr-bg-opacity))!important}.bg-gray-700{--tblr-bg-opacity: .1;background-color:rgba(var(--tblr-gray-700-rgb),var(--tblr-bg-opacity))!important}.bg-gray-800{--tblr-bg-opacity: .1;background-color:rgba(var(--tblr-gray-800-rgb),var(--tblr-bg-opacity))!important}.bg-gray-900{--tblr-bg-opacity: .1;background-color:rgba(var(--tblr-gray-900-rgb),var(--tblr-bg-opacity))!important}.scrollable.hover:hover,.scrollable.hover:focus,.scrollable.hover:active{overflow:visible;overflow-y:auto}.hover-shadow:hover{box-shadow:rgba(var(--tblr-body-color-rgb),.04) 0 2px 4px!important}.Vue-Toastification__container{z-index:9999;position:fixed;padding:4px;width:600px;box-sizing:border-box;display:flex;min-height:100%;color:#fff;flex-direction:column;pointer-events:none}@media only screen and (min-width : 600px){.Vue-Toastification__container.top-left,.Vue-Toastification__container.top-right,.Vue-Toastification__container.top-center{top:1em}.Vue-Toastification__container.bottom-left,.Vue-Toastification__container.bottom-right,.Vue-Toastification__container.bottom-center{bottom:1em;flex-direction:column-reverse}.Vue-Toastification__container.top-left,.Vue-Toastification__container.bottom-left{left:1em}.Vue-Toastification__container.top-left .Vue-Toastification__toast,.Vue-Toastification__container.bottom-left .Vue-Toastification__toast{margin-right:auto}@supports not (-moz-appearance: none){.Vue-Toastification__container.top-left .Vue-Toastification__toast--rtl,.Vue-Toastification__container.bottom-left .Vue-Toastification__toast--rtl{margin-right:unset;margin-left:auto}}.Vue-Toastification__container.top-right,.Vue-Toastification__container.bottom-right{right:1em}.Vue-Toastification__container.top-right .Vue-Toastification__toast,.Vue-Toastification__container.bottom-right .Vue-Toastification__toast{margin-left:auto}@supports not (-moz-appearance: none){.Vue-Toastification__container.top-right .Vue-Toastification__toast--rtl,.Vue-Toastification__container.bottom-right .Vue-Toastification__toast--rtl{margin-left:unset;margin-right:auto}}.Vue-Toastification__container.top-center,.Vue-Toastification__container.bottom-center{left:50%;margin-left:-300px}.Vue-Toastification__container.top-center .Vue-Toastification__toast,.Vue-Toastification__container.bottom-center .Vue-Toastification__toast{margin-left:auto;margin-right:auto}}@media only screen and (max-width : 600px){.Vue-Toastification__container{width:100vw;padding:0;left:0;margin:0}.Vue-Toastification__container .Vue-Toastification__toast{width:100%}.Vue-Toastification__container.top-left,.Vue-Toastification__container.top-right,.Vue-Toastification__container.top-center{top:0}.Vue-Toastification__container.bottom-left,.Vue-Toastification__container.bottom-right,.Vue-Toastification__container.bottom-center{bottom:0;flex-direction:column-reverse}}.Vue-Toastification__toast{display:inline-flex;position:relative;max-height:800px;min-height:64px;box-sizing:border-box;margin-bottom:1rem;padding:22px 24px;border-radius:8px;box-shadow:0 1px 10px #0000001a,0 2px 15px #0000000d;justify-content:space-between;font-family:Lato,Helvetica,Roboto,Arial,sans-serif;max-width:600px;min-width:326px;pointer-events:auto;overflow:hidden;transform:translateZ(0);direction:ltr}.Vue-Toastification__toast--rtl{direction:rtl}.Vue-Toastification__toast--default{background-color:#1976d2;color:#fff}.Vue-Toastification__toast--info{background-color:#2196f3;color:#fff}.Vue-Toastification__toast--success{background-color:#4caf50;color:#fff}.Vue-Toastification__toast--error{background-color:#ff5252;color:#fff}.Vue-Toastification__toast--warning{background-color:#ffc107;color:#fff}@media only screen and (max-width : 600px){.Vue-Toastification__toast{border-radius:0;margin-bottom:.5rem}}.Vue-Toastification__toast-body{flex:1;line-height:24px;font-size:16px;word-break:break-word;white-space:pre-wrap}.Vue-Toastification__toast-component-body{flex:1}.Vue-Toastification__toast.disable-transition{animation:none!important}.Vue-Toastification__close-button{font-weight:700;font-size:24px;line-height:24px;background:transparent;outline:none;border:none;padding:0 0 0 10px;cursor:pointer;transition:.3s ease;align-items:center;color:#fff;opacity:.3;transition:visibility 0s,opacity .2s linear}.Vue-Toastification__close-button:hover,.Vue-Toastification__close-button:focus{opacity:1}.Vue-Toastification__toast:not(:hover) .Vue-Toastification__close-button.show-on-hover{opacity:0}.Vue-Toastification__toast--rtl .Vue-Toastification__close-button{padding-left:unset;padding-right:10px}@keyframes scale-x-frames{0%{transform:scaleX(1)}to{transform:scaleX(0)}}.Vue-Toastification__progress-bar{position:absolute;bottom:0;left:0;width:100%;height:5px;z-index:10000;background-color:#ffffffb3;transform-origin:left;animation:scale-x-frames linear 1 forwards}.Vue-Toastification__toast--rtl .Vue-Toastification__progress-bar{right:0;left:unset;transform-origin:right}.Vue-Toastification__icon{margin:auto 18px auto 0;background:transparent;outline:none;border:none;padding:0;transition:.3s ease;align-items:center;width:20px;height:100%}.Vue-Toastification__toast--rtl .Vue-Toastification__icon{margin:auto 0 auto 18px}@keyframes bounceInRight{0%,60%,75%,90%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:translate3d(3000px,0,0)}60%{opacity:1;transform:translate3d(-25px,0,0)}75%{transform:translate3d(10px,0,0)}90%{transform:translate3d(-5px,0,0)}to{transform:none}}@keyframes bounceOutRight{40%{opacity:1;transform:translate3d(-20px,0,0)}to{opacity:0;transform:translate3d(1000px,0,0)}}@keyframes bounceInLeft{0%,60%,75%,90%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:translate3d(-3000px,0,0)}60%{opacity:1;transform:translate3d(25px,0,0)}75%{transform:translate3d(-10px,0,0)}90%{transform:translate3d(5px,0,0)}to{transform:none}}@keyframes bounceOutLeft{20%{opacity:1;transform:translate3d(20px,0,0)}to{opacity:0;transform:translate3d(-2000px,0,0)}}@keyframes bounceInUp{0%,60%,75%,90%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:translate3d(0,3000px,0)}60%{opacity:1;transform:translate3d(0,-20px,0)}75%{transform:translate3d(0,10px,0)}90%{transform:translate3d(0,-5px,0)}to{transform:translateZ(0)}}@keyframes bounceOutUp{20%{transform:translate3d(0,-10px,0)}40%,45%{opacity:1;transform:translate3d(0,20px,0)}to{opacity:0;transform:translate3d(0,-2000px,0)}}@keyframes bounceInDown{0%,60%,75%,90%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:translate3d(0,-3000px,0)}60%{opacity:1;transform:translate3d(0,25px,0)}75%{transform:translate3d(0,-10px,0)}90%{transform:translate3d(0,5px,0)}to{transform:none}}@keyframes bounceOutDown{20%{transform:translate3d(0,10px,0)}40%,45%{opacity:1;transform:translate3d(0,-20px,0)}to{opacity:0;transform:translate3d(0,2000px,0)}}.Vue-Toastification__bounce-enter-active.top-left,.Vue-Toastification__bounce-enter-active.bottom-left{animation-name:bounceInLeft}.Vue-Toastification__bounce-enter-active.top-right,.Vue-Toastification__bounce-enter-active.bottom-right{animation-name:bounceInRight}.Vue-Toastification__bounce-enter-active.top-center{animation-name:bounceInDown}.Vue-Toastification__bounce-enter-active.bottom-center{animation-name:bounceInUp}.Vue-Toastification__bounce-leave-active:not(.disable-transition).top-left,.Vue-Toastification__bounce-leave-active:not(.disable-transition).bottom-left{animation-name:bounceOutLeft}.Vue-Toastification__bounce-leave-active:not(.disable-transition).top-right,.Vue-Toastification__bounce-leave-active:not(.disable-transition).bottom-right{animation-name:bounceOutRight}.Vue-Toastification__bounce-leave-active:not(.disable-transition).top-center{animation-name:bounceOutUp}.Vue-Toastification__bounce-leave-active:not(.disable-transition).bottom-center{animation-name:bounceOutDown}.Vue-Toastification__bounce-leave-active,.Vue-Toastification__bounce-enter-active{animation-duration:.75s;animation-fill-mode:both}.Vue-Toastification__bounce-move{transition-timing-function:ease-in-out;transition-property:all;transition-duration:.4s}@keyframes fadeOutTop{0%{transform:translateY(0);opacity:1}to{transform:translateY(-50px);opacity:0}}@keyframes fadeOutLeft{0%{transform:translate(0);opacity:1}to{transform:translate(-50px);opacity:0}}@keyframes fadeOutBottom{0%{transform:translateY(0);opacity:1}to{transform:translateY(50px);opacity:0}}@keyframes fadeOutRight{0%{transform:translate(0);opacity:1}to{transform:translate(50px);opacity:0}}@keyframes fadeInLeft{0%{transform:translate(-50px);opacity:0}to{transform:translate(0);opacity:1}}@keyframes fadeInRight{0%{transform:translate(50px);opacity:0}to{transform:translate(0);opacity:1}}@keyframes fadeInTop{0%{transform:translateY(-50px);opacity:0}to{transform:translateY(0);opacity:1}}@keyframes fadeInBottom{0%{transform:translateY(50px);opacity:0}to{transform:translateY(0);opacity:1}}.Vue-Toastification__fade-enter-active.top-left,.Vue-Toastification__fade-enter-active.bottom-left{animation-name:fadeInLeft}.Vue-Toastification__fade-enter-active.top-right,.Vue-Toastification__fade-enter-active.bottom-right{animation-name:fadeInRight}.Vue-Toastification__fade-enter-active.top-center{animation-name:fadeInTop}.Vue-Toastification__fade-enter-active.bottom-center{animation-name:fadeInBottom}.Vue-Toastification__fade-leave-active:not(.disable-transition).top-left,.Vue-Toastification__fade-leave-active:not(.disable-transition).bottom-left{animation-name:fadeOutLeft}.Vue-Toastification__fade-leave-active:not(.disable-transition).top-right,.Vue-Toastification__fade-leave-active:not(.disable-transition).bottom-right{animation-name:fadeOutRight}.Vue-Toastification__fade-leave-active:not(.disable-transition).top-center{animation-name:fadeOutTop}.Vue-Toastification__fade-leave-active:not(.disable-transition).bottom-center{animation-name:fadeOutBottom}.Vue-Toastification__fade-leave-active,.Vue-Toastification__fade-enter-active{animation-duration:.75s;animation-fill-mode:both}.Vue-Toastification__fade-move{transition-timing-function:ease-in-out;transition-property:all;transition-duration:.4s}@keyframes slideInBlurredLeft{0%{transform:translate(-1000px) scaleX(2.5) scaleY(.2);transform-origin:100% 50%;filter:blur(40px);opacity:0}to{transform:translate(0) scaleY(1) scaleX(1);transform-origin:50% 50%;filter:blur(0);opacity:1}}@keyframes slideInBlurredTop{0%{transform:translateY(-1000px) scaleY(2.5) scaleX(.2);transform-origin:50% 0%;filter:blur(240px);opacity:0}to{transform:translateY(0) scaleY(1) scaleX(1);transform-origin:50% 50%;filter:blur(0);opacity:1}}@keyframes slideInBlurredRight{0%{transform:translate(1000px) scaleX(2.5) scaleY(.2);transform-origin:0% 50%;filter:blur(40px);opacity:0}to{transform:translate(0) scaleY(1) scaleX(1);transform-origin:50% 50%;filter:blur(0);opacity:1}}@keyframes slideInBlurredBottom{0%{transform:translateY(1000px) scaleY(2.5) scaleX(.2);transform-origin:50% 100%;filter:blur(240px);opacity:0}to{transform:translateY(0) scaleY(1) scaleX(1);transform-origin:50% 50%;filter:blur(0);opacity:1}}@keyframes slideOutBlurredTop{0%{transform:translateY(0) scaleY(1) scaleX(1);transform-origin:50% 0%;filter:blur(0);opacity:1}to{transform:translateY(-1000px) scaleY(2) scaleX(.2);transform-origin:50% 0%;filter:blur(240px);opacity:0}}@keyframes slideOutBlurredBottom{0%{transform:translateY(0) scaleY(1) scaleX(1);transform-origin:50% 50%;filter:blur(0);opacity:1}to{transform:translateY(1000px) scaleY(2) scaleX(.2);transform-origin:50% 100%;filter:blur(240px);opacity:0}}@keyframes slideOutBlurredLeft{0%{transform:translate(0) scaleY(1) scaleX(1);transform-origin:50% 50%;filter:blur(0);opacity:1}to{transform:translate(-1000px) scaleX(2) scaleY(.2);transform-origin:100% 50%;filter:blur(40px);opacity:0}}@keyframes slideOutBlurredRight{0%{transform:translate(0) scaleY(1) scaleX(1);transform-origin:50% 50%;filter:blur(0);opacity:1}to{transform:translate(1000px) scaleX(2) scaleY(.2);transform-origin:0% 50%;filter:blur(40px);opacity:0}}.Vue-Toastification__slideBlurred-enter-active.top-left,.Vue-Toastification__slideBlurred-enter-active.bottom-left{animation-name:slideInBlurredLeft}.Vue-Toastification__slideBlurred-enter-active.top-right,.Vue-Toastification__slideBlurred-enter-active.bottom-right{animation-name:slideInBlurredRight}.Vue-Toastification__slideBlurred-enter-active.top-center{animation-name:slideInBlurredTop}.Vue-Toastification__slideBlurred-enter-active.bottom-center{animation-name:slideInBlurredBottom}.Vue-Toastification__slideBlurred-leave-active:not(.disable-transition).top-left,.Vue-Toastification__slideBlurred-leave-active:not(.disable-transition).bottom-left{animation-name:slideOutBlurredLeft}.Vue-Toastification__slideBlurred-leave-active:not(.disable-transition).top-right,.Vue-Toastification__slideBlurred-leave-active:not(.disable-transition).bottom-right{animation-name:slideOutBlurredRight}.Vue-Toastification__slideBlurred-leave-active:not(.disable-transition).top-center{animation-name:slideOutBlurredTop}.Vue-Toastification__slideBlurred-leave-active:not(.disable-transition).bottom-center{animation-name:slideOutBlurredBottom}.Vue-Toastification__slideBlurred-leave-active,.Vue-Toastification__slideBlurred-enter-active{animation-duration:.75s;animation-fill-mode:both}.Vue-Toastification__slideBlurred-move{transition-timing-function:ease-in-out;transition-property:all;transition-duration:.4s}/*! + * Bootstrap v5.3.3 (https://getbootstrap.com/) + * Copyright 2011-2024 The Bootstrap Authors + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */:root,[data-bs-theme=light]{--bs-blue:#0d6efd;--bs-indigo:#6610f2;--bs-purple:#6f42c1;--bs-pink:#d63384;--bs-red:#dc3545;--bs-orange:#fd7e14;--bs-yellow:#ffc107;--bs-green:#198754;--bs-teal:#20c997;--bs-cyan:#0dcaf0;--bs-black:#000;--bs-white:#fff;--bs-gray:#6c757d;--bs-gray-dark:#343a40;--bs-gray-100:#f8f9fa;--bs-gray-200:#e9ecef;--bs-gray-300:#dee2e6;--bs-gray-400:#ced4da;--bs-gray-500:#adb5bd;--bs-gray-600:#6c757d;--bs-gray-700:#495057;--bs-gray-800:#343a40;--bs-gray-900:#212529;--bs-primary:#0d6efd;--bs-secondary:#6c757d;--bs-success:#198754;--bs-info:#0dcaf0;--bs-warning:#ffc107;--bs-danger:#dc3545;--bs-light:#f8f9fa;--bs-dark:#212529;--bs-primary-rgb:13,110,253;--bs-secondary-rgb:108,117,125;--bs-success-rgb:25,135,84;--bs-info-rgb:13,202,240;--bs-warning-rgb:255,193,7;--bs-danger-rgb:220,53,69;--bs-light-rgb:248,249,250;--bs-dark-rgb:33,37,41;--bs-primary-text-emphasis:#052c65;--bs-secondary-text-emphasis:#2b2f32;--bs-success-text-emphasis:#0a3622;--bs-info-text-emphasis:#055160;--bs-warning-text-emphasis:#664d03;--bs-danger-text-emphasis:#58151c;--bs-light-text-emphasis:#495057;--bs-dark-text-emphasis:#495057;--bs-primary-bg-subtle:#cfe2ff;--bs-secondary-bg-subtle:#e2e3e5;--bs-success-bg-subtle:#d1e7dd;--bs-info-bg-subtle:#cff4fc;--bs-warning-bg-subtle:#fff3cd;--bs-danger-bg-subtle:#f8d7da;--bs-light-bg-subtle:#fcfcfd;--bs-dark-bg-subtle:#ced4da;--bs-primary-border-subtle:#9ec5fe;--bs-secondary-border-subtle:#c4c8cb;--bs-success-border-subtle:#a3cfbb;--bs-info-border-subtle:#9eeaf9;--bs-warning-border-subtle:#ffe69c;--bs-danger-border-subtle:#f1aeb5;--bs-light-border-subtle:#e9ecef;--bs-dark-border-subtle:#adb5bd;--bs-white-rgb:255,255,255;--bs-black-rgb:0,0,0;--bs-font-sans-serif:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue","Noto Sans","Liberation Sans",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--bs-font-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--bs-gradient:linear-gradient(180deg, rgba(255, 255, 255, .15), rgba(255, 255, 255, 0));--bs-body-font-family:var(--bs-font-sans-serif);--bs-body-font-size:1rem;--bs-body-font-weight:400;--bs-body-line-height:1.5;--bs-body-color:#212529;--bs-body-color-rgb:33,37,41;--bs-body-bg:#fff;--bs-body-bg-rgb:255,255,255;--bs-emphasis-color:#000;--bs-emphasis-color-rgb:0,0,0;--bs-secondary-color:rgba(33, 37, 41, .75);--bs-secondary-color-rgb:33,37,41;--bs-secondary-bg:#e9ecef;--bs-secondary-bg-rgb:233,236,239;--bs-tertiary-color:rgba(33, 37, 41, .5);--bs-tertiary-color-rgb:33,37,41;--bs-tertiary-bg:#f8f9fa;--bs-tertiary-bg-rgb:248,249,250;--bs-heading-color:inherit;--bs-link-color:#0d6efd;--bs-link-color-rgb:13,110,253;--bs-link-decoration:underline;--bs-link-hover-color:#0a58ca;--bs-link-hover-color-rgb:10,88,202;--bs-code-color:#d63384;--bs-highlight-color:#212529;--bs-highlight-bg:#fff3cd;--bs-border-width:1px;--bs-border-style:solid;--bs-border-color:#dee2e6;--bs-border-color-translucent:rgba(0, 0, 0, .175);--bs-border-radius:.375rem;--bs-border-radius-sm:.25rem;--bs-border-radius-lg:.5rem;--bs-border-radius-xl:1rem;--bs-border-radius-xxl:2rem;--bs-border-radius-2xl:var(--bs-border-radius-xxl);--bs-border-radius-pill:50rem;--bs-box-shadow:0 .5rem 1rem rgba(0, 0, 0, .15);--bs-box-shadow-sm:0 .125rem .25rem rgba(0, 0, 0, .075);--bs-box-shadow-lg:0 1rem 3rem rgba(0, 0, 0, .175);--bs-box-shadow-inset:inset 0 1px 2px rgba(0, 0, 0, .075);--bs-focus-ring-width:.25rem;--bs-focus-ring-opacity:.25;--bs-focus-ring-color:rgba(13, 110, 253, .25);--bs-form-valid-color:#198754;--bs-form-valid-border-color:#198754;--bs-form-invalid-color:#dc3545;--bs-form-invalid-border-color:#dc3545}[data-bs-theme=dark]{color-scheme:dark;--bs-body-color:#dee2e6;--bs-body-color-rgb:222,226,230;--bs-body-bg:#212529;--bs-body-bg-rgb:33,37,41;--bs-emphasis-color:#fff;--bs-emphasis-color-rgb:255,255,255;--bs-secondary-color:rgba(222, 226, 230, .75);--bs-secondary-color-rgb:222,226,230;--bs-secondary-bg:#343a40;--bs-secondary-bg-rgb:52,58,64;--bs-tertiary-color:rgba(222, 226, 230, .5);--bs-tertiary-color-rgb:222,226,230;--bs-tertiary-bg:#2b3035;--bs-tertiary-bg-rgb:43,48,53;--bs-primary-text-emphasis:#6ea8fe;--bs-secondary-text-emphasis:#a7acb1;--bs-success-text-emphasis:#75b798;--bs-info-text-emphasis:#6edff6;--bs-warning-text-emphasis:#ffda6a;--bs-danger-text-emphasis:#ea868f;--bs-light-text-emphasis:#f8f9fa;--bs-dark-text-emphasis:#dee2e6;--bs-primary-bg-subtle:#031633;--bs-secondary-bg-subtle:#161719;--bs-success-bg-subtle:#051b11;--bs-info-bg-subtle:#032830;--bs-warning-bg-subtle:#332701;--bs-danger-bg-subtle:#2c0b0e;--bs-light-bg-subtle:#343a40;--bs-dark-bg-subtle:#1a1d20;--bs-primary-border-subtle:#084298;--bs-secondary-border-subtle:#41464b;--bs-success-border-subtle:#0f5132;--bs-info-border-subtle:#087990;--bs-warning-border-subtle:#997404;--bs-danger-border-subtle:#842029;--bs-light-border-subtle:#495057;--bs-dark-border-subtle:#343a40;--bs-heading-color:inherit;--bs-link-color:#6ea8fe;--bs-link-hover-color:#8bb9fe;--bs-link-color-rgb:110,168,254;--bs-link-hover-color-rgb:139,185,254;--bs-code-color:#e685b5;--bs-highlight-color:#dee2e6;--bs-highlight-bg:#664d03;--bs-border-color:#495057;--bs-border-color-translucent:rgba(255, 255, 255, .15);--bs-form-valid-color:#75b798;--bs-form-valid-border-color:#75b798;--bs-form-invalid-color:#ea868f;--bs-form-invalid-border-color:#ea868f}body{margin:0;font-family:var(--bs-body-font-family);font-size:var(--bs-body-font-size);font-weight:var(--bs-body-font-weight);line-height:var(--bs-body-line-height);color:var(--bs-body-color);text-align:var(--bs-body-text-align);background-color:var(--bs-body-bg);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;border:0;border-top:var(--bs-border-width) solid;opacity:.25}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2;color:var(--bs-heading-color)}.h1,h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){.h1,h1{font-size:2.5rem}}.h2,h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){.h2,h2{font-size:2rem}}.h3,h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){.h3,h3{font-size:1.75rem}}.h4,h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){.h4,h4{font-size:1.5rem}}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}dt{font-weight:700}.small,small{font-size:.875em}.mark,mark{padding:.1875em;color:var(--bs-highlight-color);background-color:var(--bs-highlight-bg)}a{color:rgba(var(--bs-link-color-rgb),var(--bs-link-opacity,1));text-decoration:underline}a:hover{--bs-link-color-rgb:var(--bs-link-hover-color-rgb)}code,kbd,pre,samp{font-family:var(--bs-font-monospace);font-size:1em}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}code{font-size:.875em;color:var(--bs-code-color);word-wrap:break-word}kbd{padding:.1875rem .375rem;font-size:.875em;color:var(--bs-body-bg);background-color:var(--bs-body-color);border-radius:.25rem}caption{padding-top:.5rem;padding-bottom:.5rem;color:var(--bs-secondary-color);text-align:left}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:calc(1.625rem + 4.5vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-1{font-size:5rem}}.display-2{font-size:calc(1.575rem + 3.9vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-2{font-size:4.5rem}}.display-3{font-size:calc(1.525rem + 3.3vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-3{font-size:4rem}}.display-4{font-size:calc(1.475rem + 2.7vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-4{font-size:3.5rem}}.display-5{font-size:calc(1.425rem + 2.1vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-5{font-size:3rem}}.display-6{font-size:calc(1.375rem + 1.5vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-6{font-size:2.5rem}}.initialism{font-size:.875em;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{margin-top:-1rem;margin-bottom:1rem;font-size:.875em;color:#6c757d}.img-thumbnail{padding:.25rem;background-color:var(--bs-body-bg);border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);max-width:100%;height:auto}.figure-caption{font-size:.875em;color:var(--bs-secondary-color)}.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{--bs-gutter-x:1.5rem;--bs-gutter-y:0;width:100%;padding-right:calc(var(--bs-gutter-x) * .5);padding-left:calc(var(--bs-gutter-x) * .5);margin-right:auto;margin-left:auto}:root{--bs-breakpoint-xs:0;--bs-breakpoint-sm:576px;--bs-breakpoint-md:768px;--bs-breakpoint-lg:992px;--bs-breakpoint-xl:1200px;--bs-breakpoint-xxl:1400px}.row{--bs-gutter-x:1.5rem;--bs-gutter-y:0;display:flex;flex-wrap:wrap;margin-top:calc(-1 * var(--bs-gutter-y));margin-right:calc(-.5 * var(--bs-gutter-x));margin-left:calc(-.5 * var(--bs-gutter-x))}.row>*{flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--bs-gutter-x) * .5);padding-left:calc(var(--bs-gutter-x) * .5);margin-top:var(--bs-gutter-y)}.row-cols-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-6>*{flex:0 0 auto;width:16.66666667%}.g-0,.gx-0{--bs-gutter-x:0}.g-0,.gy-0{--bs-gutter-y:0}.g-1,.gx-1{--bs-gutter-x:.25rem}.g-1,.gy-1{--bs-gutter-y:.25rem}.g-2,.gx-2{--bs-gutter-x:.5rem}.g-2,.gy-2{--bs-gutter-y:.5rem}.g-3,.gx-3{--bs-gutter-x:1rem}.g-3,.gy-3{--bs-gutter-y:1rem}.g-4,.gx-4{--bs-gutter-x:1.5rem}.g-4,.gy-4{--bs-gutter-y:1.5rem}.g-5,.gx-5{--bs-gutter-x:3rem}.g-5,.gy-5{--bs-gutter-y:3rem}@media (min-width:576px){.col-sm{flex:1 0 0%}.row-cols-sm-auto>*{flex:0 0 auto;width:auto}.row-cols-sm-1>*{flex:0 0 auto;width:100%}.row-cols-sm-2>*{flex:0 0 auto;width:50%}.row-cols-sm-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-sm-4>*{flex:0 0 auto;width:25%}.row-cols-sm-5>*{flex:0 0 auto;width:20%}.row-cols-sm-6>*{flex:0 0 auto;width:16.66666667%}.col-sm-auto{flex:0 0 auto;width:auto}.col-sm-1{flex:0 0 auto;width:8.33333333%}.col-sm-2{flex:0 0 auto;width:16.66666667%}.col-sm-3{flex:0 0 auto;width:25%}.col-sm-4{flex:0 0 auto;width:33.33333333%}.col-sm-5{flex:0 0 auto;width:41.66666667%}.col-sm-6{flex:0 0 auto;width:50%}.col-sm-7{flex:0 0 auto;width:58.33333333%}.col-sm-8{flex:0 0 auto;width:66.66666667%}.col-sm-9{flex:0 0 auto;width:75%}.col-sm-10{flex:0 0 auto;width:83.33333333%}.col-sm-11{flex:0 0 auto;width:91.66666667%}.col-sm-12{flex:0 0 auto;width:100%}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333333%}.offset-sm-2{margin-left:16.66666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333333%}.offset-sm-5{margin-left:41.66666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333333%}.offset-sm-8{margin-left:66.66666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333333%}.offset-sm-11{margin-left:91.66666667%}.g-sm-0,.gx-sm-0{--bs-gutter-x:0}.g-sm-0,.gy-sm-0{--bs-gutter-y:0}.g-sm-1,.gx-sm-1{--bs-gutter-x:.25rem}.g-sm-1,.gy-sm-1{--bs-gutter-y:.25rem}.g-sm-2,.gx-sm-2{--bs-gutter-x:.5rem}.g-sm-2,.gy-sm-2{--bs-gutter-y:.5rem}.g-sm-3,.gx-sm-3{--bs-gutter-x:1rem}.g-sm-3,.gy-sm-3{--bs-gutter-y:1rem}.g-sm-4,.gx-sm-4{--bs-gutter-x:1.5rem}.g-sm-4,.gy-sm-4{--bs-gutter-y:1.5rem}.g-sm-5,.gx-sm-5{--bs-gutter-x:3rem}.g-sm-5,.gy-sm-5{--bs-gutter-y:3rem}}@media (min-width:768px){.col-md{flex:1 0 0%}.row-cols-md-auto>*{flex:0 0 auto;width:auto}.row-cols-md-1>*{flex:0 0 auto;width:100%}.row-cols-md-2>*{flex:0 0 auto;width:50%}.row-cols-md-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-md-4>*{flex:0 0 auto;width:25%}.row-cols-md-5>*{flex:0 0 auto;width:20%}.row-cols-md-6>*{flex:0 0 auto;width:16.66666667%}.col-md-auto{flex:0 0 auto;width:auto}.col-md-1{flex:0 0 auto;width:8.33333333%}.col-md-2{flex:0 0 auto;width:16.66666667%}.col-md-3{flex:0 0 auto;width:25%}.col-md-4{flex:0 0 auto;width:33.33333333%}.col-md-5{flex:0 0 auto;width:41.66666667%}.col-md-6{flex:0 0 auto;width:50%}.col-md-7{flex:0 0 auto;width:58.33333333%}.col-md-8{flex:0 0 auto;width:66.66666667%}.col-md-9{flex:0 0 auto;width:75%}.col-md-10{flex:0 0 auto;width:83.33333333%}.col-md-11{flex:0 0 auto;width:91.66666667%}.col-md-12{flex:0 0 auto;width:100%}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333333%}.offset-md-2{margin-left:16.66666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333333%}.offset-md-5{margin-left:41.66666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333333%}.offset-md-8{margin-left:66.66666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333333%}.offset-md-11{margin-left:91.66666667%}.g-md-0,.gx-md-0{--bs-gutter-x:0}.g-md-0,.gy-md-0{--bs-gutter-y:0}.g-md-1,.gx-md-1{--bs-gutter-x:.25rem}.g-md-1,.gy-md-1{--bs-gutter-y:.25rem}.g-md-2,.gx-md-2{--bs-gutter-x:.5rem}.g-md-2,.gy-md-2{--bs-gutter-y:.5rem}.g-md-3,.gx-md-3{--bs-gutter-x:1rem}.g-md-3,.gy-md-3{--bs-gutter-y:1rem}.g-md-4,.gx-md-4{--bs-gutter-x:1.5rem}.g-md-4,.gy-md-4{--bs-gutter-y:1.5rem}.g-md-5,.gx-md-5{--bs-gutter-x:3rem}.g-md-5,.gy-md-5{--bs-gutter-y:3rem}}@media (min-width:992px){.col-lg{flex:1 0 0%}.row-cols-lg-auto>*{flex:0 0 auto;width:auto}.row-cols-lg-1>*{flex:0 0 auto;width:100%}.row-cols-lg-2>*{flex:0 0 auto;width:50%}.row-cols-lg-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-lg-4>*{flex:0 0 auto;width:25%}.row-cols-lg-5>*{flex:0 0 auto;width:20%}.row-cols-lg-6>*{flex:0 0 auto;width:16.66666667%}.col-lg-auto{flex:0 0 auto;width:auto}.col-lg-1{flex:0 0 auto;width:8.33333333%}.col-lg-2{flex:0 0 auto;width:16.66666667%}.col-lg-3{flex:0 0 auto;width:25%}.col-lg-4{flex:0 0 auto;width:33.33333333%}.col-lg-5{flex:0 0 auto;width:41.66666667%}.col-lg-6{flex:0 0 auto;width:50%}.col-lg-7{flex:0 0 auto;width:58.33333333%}.col-lg-8{flex:0 0 auto;width:66.66666667%}.col-lg-9{flex:0 0 auto;width:75%}.col-lg-10{flex:0 0 auto;width:83.33333333%}.col-lg-11{flex:0 0 auto;width:91.66666667%}.col-lg-12{flex:0 0 auto;width:100%}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333333%}.offset-lg-2{margin-left:16.66666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333333%}.offset-lg-5{margin-left:41.66666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333333%}.offset-lg-8{margin-left:66.66666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333333%}.offset-lg-11{margin-left:91.66666667%}.g-lg-0,.gx-lg-0{--bs-gutter-x:0}.g-lg-0,.gy-lg-0{--bs-gutter-y:0}.g-lg-1,.gx-lg-1{--bs-gutter-x:.25rem}.g-lg-1,.gy-lg-1{--bs-gutter-y:.25rem}.g-lg-2,.gx-lg-2{--bs-gutter-x:.5rem}.g-lg-2,.gy-lg-2{--bs-gutter-y:.5rem}.g-lg-3,.gx-lg-3{--bs-gutter-x:1rem}.g-lg-3,.gy-lg-3{--bs-gutter-y:1rem}.g-lg-4,.gx-lg-4{--bs-gutter-x:1.5rem}.g-lg-4,.gy-lg-4{--bs-gutter-y:1.5rem}.g-lg-5,.gx-lg-5{--bs-gutter-x:3rem}.g-lg-5,.gy-lg-5{--bs-gutter-y:3rem}}@media (min-width:1200px){.col-xl{flex:1 0 0%}.row-cols-xl-auto>*{flex:0 0 auto;width:auto}.row-cols-xl-1>*{flex:0 0 auto;width:100%}.row-cols-xl-2>*{flex:0 0 auto;width:50%}.row-cols-xl-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-xl-4>*{flex:0 0 auto;width:25%}.row-cols-xl-5>*{flex:0 0 auto;width:20%}.row-cols-xl-6>*{flex:0 0 auto;width:16.66666667%}.col-xl-auto{flex:0 0 auto;width:auto}.col-xl-1{flex:0 0 auto;width:8.33333333%}.col-xl-2{flex:0 0 auto;width:16.66666667%}.col-xl-3{flex:0 0 auto;width:25%}.col-xl-4{flex:0 0 auto;width:33.33333333%}.col-xl-5{flex:0 0 auto;width:41.66666667%}.col-xl-6{flex:0 0 auto;width:50%}.col-xl-7{flex:0 0 auto;width:58.33333333%}.col-xl-8{flex:0 0 auto;width:66.66666667%}.col-xl-9{flex:0 0 auto;width:75%}.col-xl-10{flex:0 0 auto;width:83.33333333%}.col-xl-11{flex:0 0 auto;width:91.66666667%}.col-xl-12{flex:0 0 auto;width:100%}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333333%}.offset-xl-2{margin-left:16.66666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333333%}.offset-xl-5{margin-left:41.66666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333333%}.offset-xl-8{margin-left:66.66666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333333%}.offset-xl-11{margin-left:91.66666667%}.g-xl-0,.gx-xl-0{--bs-gutter-x:0}.g-xl-0,.gy-xl-0{--bs-gutter-y:0}.g-xl-1,.gx-xl-1{--bs-gutter-x:.25rem}.g-xl-1,.gy-xl-1{--bs-gutter-y:.25rem}.g-xl-2,.gx-xl-2{--bs-gutter-x:.5rem}.g-xl-2,.gy-xl-2{--bs-gutter-y:.5rem}.g-xl-3,.gx-xl-3{--bs-gutter-x:1rem}.g-xl-3,.gy-xl-3{--bs-gutter-y:1rem}.g-xl-4,.gx-xl-4{--bs-gutter-x:1.5rem}.g-xl-4,.gy-xl-4{--bs-gutter-y:1.5rem}.g-xl-5,.gx-xl-5{--bs-gutter-x:3rem}.g-xl-5,.gy-xl-5{--bs-gutter-y:3rem}}@media (min-width:1400px){.col-xxl{flex:1 0 0%}.row-cols-xxl-auto>*{flex:0 0 auto;width:auto}.row-cols-xxl-1>*{flex:0 0 auto;width:100%}.row-cols-xxl-2>*{flex:0 0 auto;width:50%}.row-cols-xxl-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-xxl-4>*{flex:0 0 auto;width:25%}.row-cols-xxl-5>*{flex:0 0 auto;width:20%}.row-cols-xxl-6>*{flex:0 0 auto;width:16.66666667%}.col-xxl-auto{flex:0 0 auto;width:auto}.col-xxl-1{flex:0 0 auto;width:8.33333333%}.col-xxl-2{flex:0 0 auto;width:16.66666667%}.col-xxl-3{flex:0 0 auto;width:25%}.col-xxl-4{flex:0 0 auto;width:33.33333333%}.col-xxl-5{flex:0 0 auto;width:41.66666667%}.col-xxl-6{flex:0 0 auto;width:50%}.col-xxl-7{flex:0 0 auto;width:58.33333333%}.col-xxl-8{flex:0 0 auto;width:66.66666667%}.col-xxl-9{flex:0 0 auto;width:75%}.col-xxl-10{flex:0 0 auto;width:83.33333333%}.col-xxl-11{flex:0 0 auto;width:91.66666667%}.col-xxl-12{flex:0 0 auto;width:100%}.offset-xxl-0{margin-left:0}.offset-xxl-1{margin-left:8.33333333%}.offset-xxl-2{margin-left:16.66666667%}.offset-xxl-3{margin-left:25%}.offset-xxl-4{margin-left:33.33333333%}.offset-xxl-5{margin-left:41.66666667%}.offset-xxl-6{margin-left:50%}.offset-xxl-7{margin-left:58.33333333%}.offset-xxl-8{margin-left:66.66666667%}.offset-xxl-9{margin-left:75%}.offset-xxl-10{margin-left:83.33333333%}.offset-xxl-11{margin-left:91.66666667%}.g-xxl-0,.gx-xxl-0{--bs-gutter-x:0}.g-xxl-0,.gy-xxl-0{--bs-gutter-y:0}.g-xxl-1,.gx-xxl-1{--bs-gutter-x:.25rem}.g-xxl-1,.gy-xxl-1{--bs-gutter-y:.25rem}.g-xxl-2,.gx-xxl-2{--bs-gutter-x:.5rem}.g-xxl-2,.gy-xxl-2{--bs-gutter-y:.5rem}.g-xxl-3,.gx-xxl-3{--bs-gutter-x:1rem}.g-xxl-3,.gy-xxl-3{--bs-gutter-y:1rem}.g-xxl-4,.gx-xxl-4{--bs-gutter-x:1.5rem}.g-xxl-4,.gy-xxl-4{--bs-gutter-y:1.5rem}.g-xxl-5,.gx-xxl-5{--bs-gutter-x:3rem}.g-xxl-5,.gy-xxl-5{--bs-gutter-y:3rem}}.table{--bs-table-color-type:initial;--bs-table-bg-type:initial;--bs-table-color-state:initial;--bs-table-bg-state:initial;--bs-table-color:var(--bs-emphasis-color);--bs-table-bg:var(--bs-body-bg);--bs-table-border-color:var(--bs-border-color);--bs-table-accent-bg:transparent;--bs-table-striped-color:var(--bs-emphasis-color);--bs-table-striped-bg:rgba(var(--bs-emphasis-color-rgb), .05);--bs-table-active-color:var(--bs-emphasis-color);--bs-table-active-bg:rgba(var(--bs-emphasis-color-rgb), .1);--bs-table-hover-color:var(--bs-emphasis-color);--bs-table-hover-bg:rgba(var(--bs-emphasis-color-rgb), .075);width:100%;margin-bottom:1rem;vertical-align:top;border-color:var(--bs-table-border-color)}.table>:not(caption)>*>*{padding:.5rem;color:var(--bs-table-color-state,var(--bs-table-color-type,var(--bs-table-color)));background-color:var(--bs-table-bg);border-bottom-width:var(--bs-border-width);box-shadow:inset 0 0 0 9999px var(--bs-table-bg-state,var(--bs-table-bg-type,var(--bs-table-accent-bg)))}.table>tbody{vertical-align:inherit}.table>thead{vertical-align:bottom}.table-group-divider{border-top:calc(var(--bs-border-width) * 2) solid currentcolor}.table-bordered>:not(caption)>*{border-width:var(--bs-border-width) 0}.table-bordered>:not(caption)>*>*{border-width:0 var(--bs-border-width)}.table-striped>tbody>tr:nth-of-type(odd)>*{--bs-table-color-type:var(--bs-table-striped-color);--bs-table-bg-type:var(--bs-table-striped-bg)}.table-striped-columns>:not(caption)>tr>:nth-child(2n){--bs-table-color-type:var(--bs-table-striped-color);--bs-table-bg-type:var(--bs-table-striped-bg)}.table-active{--bs-table-color-state:var(--bs-table-active-color);--bs-table-bg-state:var(--bs-table-active-bg)}.table-hover>tbody>tr:hover>*{--bs-table-color-state:var(--bs-table-hover-color);--bs-table-bg-state:var(--bs-table-hover-bg)}.table-primary{--bs-table-color:#000;--bs-table-bg:#cfe2ff;--bs-table-border-color:#a6b5cc;--bs-table-striped-bg:#c5d7f2;--bs-table-striped-color:#000;--bs-table-active-bg:#bacbe6;--bs-table-active-color:#000;--bs-table-hover-bg:#bfd1ec;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-secondary{--bs-table-color:#000;--bs-table-bg:#e2e3e5;--bs-table-border-color:#b5b6b7;--bs-table-striped-bg:#d7d8da;--bs-table-striped-color:#000;--bs-table-active-bg:#cbccce;--bs-table-active-color:#000;--bs-table-hover-bg:#d1d2d4;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-success{--bs-table-color:#000;--bs-table-bg:#d1e7dd;--bs-table-border-color:#a7b9b1;--bs-table-striped-bg:#c7dbd2;--bs-table-striped-color:#000;--bs-table-active-bg:#bcd0c7;--bs-table-active-color:#000;--bs-table-hover-bg:#c1d6cc;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-info{--bs-table-color:#000;--bs-table-bg:#cff4fc;--bs-table-border-color:#a6c3ca;--bs-table-striped-bg:#c5e8ef;--bs-table-striped-color:#000;--bs-table-active-bg:#badce3;--bs-table-active-color:#000;--bs-table-hover-bg:#bfe2e9;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-warning{--bs-table-color:#000;--bs-table-bg:#fff3cd;--bs-table-border-color:#ccc2a4;--bs-table-striped-bg:#f2e7c3;--bs-table-striped-color:#000;--bs-table-active-bg:#e6dbb9;--bs-table-active-color:#000;--bs-table-hover-bg:#ece1be;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-danger{--bs-table-color:#000;--bs-table-bg:#f8d7da;--bs-table-border-color:#c6acae;--bs-table-striped-bg:#eccccf;--bs-table-striped-color:#000;--bs-table-active-bg:#dfc2c4;--bs-table-active-color:#000;--bs-table-hover-bg:#e5c7ca;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-light{--bs-table-color:#000;--bs-table-bg:#f8f9fa;--bs-table-border-color:#c6c7c8;--bs-table-striped-bg:#ecedee;--bs-table-striped-color:#000;--bs-table-active-bg:#dfe0e1;--bs-table-active-color:#000;--bs-table-hover-bg:#e5e6e7;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-dark{--bs-table-color:#fff;--bs-table-bg:#212529;--bs-table-border-color:#4d5154;--bs-table-striped-bg:#2c3034;--bs-table-striped-color:#fff;--bs-table-active-bg:#373b3e;--bs-table-active-color:#fff;--bs-table-hover-bg:#323539;--bs-table-hover-color:#fff;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.form-label{margin-bottom:.5rem}.col-form-label{padding-top:calc(.375rem + var(--bs-border-width));padding-bottom:calc(.375rem + var(--bs-border-width));margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + var(--bs-border-width));padding-bottom:calc(.5rem + var(--bs-border-width));font-size:1.25rem}.col-form-label-sm{padding-top:calc(.25rem + var(--bs-border-width));padding-bottom:calc(.25rem + var(--bs-border-width));font-size:.875rem}.form-text{margin-top:.25rem;font-size:.875em;color:var(--bs-secondary-color)}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--bs-body-bg);background-clip:padding-box;border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-control:focus{color:var(--bs-body-color);background-color:var(--bs-body-bg);border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem #0d6efd40}.form-control::-webkit-date-and-time-value{min-width:85px;height:1.5em;margin:0}.form-control::-moz-placeholder{color:var(--bs-secondary-color);opacity:1}.form-control::placeholder{color:var(--bs-secondary-color);opacity:1}.form-control:disabled{background-color:var(--bs-secondary-bg);opacity:1}.form-control::-webkit-file-upload-button{padding:.375rem .75rem;margin:-.375rem -.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:var(--bs-body-color);background-color:var(--bs-tertiary-bg);pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:var(--bs-border-width);border-radius:0;-webkit-transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-control::file-selector-button{padding:.375rem .75rem;margin:-.375rem -.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:var(--bs-body-color);background-color:var(--bs-tertiary-bg);pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:var(--bs-border-width);border-radius:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button{background-color:var(--bs-secondary-bg)}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:var(--bs-secondary-bg)}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;line-height:1.5;color:var(--bs-body-color);background-color:transparent;border:solid transparent;border-width:var(--bs-border-width) 0}.form-control-sm{min-height:calc(1.5em + .5rem + calc(var(--bs-border-width) * 2));padding:.25rem .5rem;font-size:.875rem;border-radius:var(--bs-border-radius-sm)}.form-control-sm::-webkit-file-upload-button{padding:.25rem .5rem;margin:-.25rem -.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-sm::file-selector-button{padding:.25rem .5rem;margin:-.25rem -.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-lg{min-height:calc(1.5em + 1rem + calc(var(--bs-border-width) * 2));padding:.5rem 1rem;font-size:1.25rem;border-radius:var(--bs-border-radius-lg)}.form-control-lg::-webkit-file-upload-button{padding:.5rem 1rem;margin:-.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}.form-control-lg::file-selector-button{padding:.5rem 1rem;margin:-.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}textarea.form-control{min-height:calc(1.5em + .75rem + calc(var(--bs-border-width) * 2))}textarea.form-control-sm{min-height:calc(1.5em + .5rem + calc(var(--bs-border-width) * 2))}textarea.form-control-lg{min-height:calc(1.5em + 1rem + calc(var(--bs-border-width) * 2))}.form-control-color{width:3rem;height:calc(1.5em + .75rem + calc(var(--bs-border-width) * 2));padding:.375rem}.form-control-color::-moz-color-swatch{border:0!important;border-radius:var(--bs-border-radius)}.form-control-color::-webkit-color-swatch{border:0!important;border-radius:var(--bs-border-radius)}.form-control-color.form-control-sm{height:calc(1.5em + .5rem + calc(var(--bs-border-width) * 2))}.form-control-color.form-control-lg{height:calc(1.5em + 1rem + calc(var(--bs-border-width) * 2))}.form-select{--bs-form-select-bg-img:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e");display:block;width:100%;padding:.375rem 2.25rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--bs-body-bg);background-image:var(--bs-form-select-bg-img),var(--bs-form-select-bg-icon,none);background-repeat:no-repeat;background-position:right .75rem center;background-size:16px 12px;border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-select:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem #0d6efd40}.form-select:disabled{background-color:var(--bs-secondary-bg)}.form-select:-moz-focusring{color:transparent;text-shadow:0 0 0 var(--bs-body-color)}.form-select-sm{padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem;border-radius:var(--bs-border-radius-sm)}.form-select-lg{padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem;border-radius:var(--bs-border-radius-lg)}[data-bs-theme=dark] .form-select{--bs-form-select-bg-img:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23dee2e6' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e")}.form-check{display:block;min-height:1.5rem;padding-left:1.5em;margin-bottom:.125rem}.form-check .form-check-input{float:left;margin-left:-1.5em}.form-check-reverse{padding-right:1.5em;padding-left:0;text-align:right}.form-check-reverse .form-check-input{float:right;margin-right:-1.5em;margin-left:0}.form-check-input{--bs-form-check-bg:var(--bs-body-bg);flex-shrink:0;width:1em;height:1em;margin-top:.25em;vertical-align:top;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--bs-form-check-bg);background-image:var(--bs-form-check-bg-image);background-repeat:no-repeat;background-position:center;background-size:contain;border:var(--bs-border-width) solid var(--bs-border-color);-webkit-print-color-adjust:exact;color-adjust:exact;print-color-adjust:exact}.form-check-input[type=checkbox]{border-radius:.25em}.form-check-input:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem #0d6efd40}.form-check-input:checked{background-color:#0d6efd;border-color:#0d6efd}.form-check-input:checked[type=checkbox]{--bs-form-check-bg-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e")}.form-check-input:checked[type=radio]{--bs-form-check-bg-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e")}.form-check-input[type=checkbox]:indeterminate{background-color:#0d6efd;border-color:#0d6efd;--bs-form-check-bg-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e")}.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{cursor:default;opacity:.5}.form-switch{padding-left:2.5em}.form-switch .form-check-input{--bs-form-switch-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e");width:2em;margin-left:-2.5em;background-image:var(--bs-form-switch-bg);background-position:left center;border-radius:2em;transition:background-position .15s ease-in-out}.form-switch .form-check-input:focus{--bs-form-switch-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e")}.form-switch .form-check-input:checked{background-position:right center;--bs-form-switch-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.form-switch.form-check-reverse{padding-right:2.5em;padding-left:0}.form-switch.form-check-reverse .form-check-input{margin-right:-2.5em;margin-left:0}.btn-check:disabled+.btn,.btn-check[disabled]+.btn{pointer-events:none;filter:none;opacity:.65}[data-bs-theme=dark] .form-switch .form-check-input:not(:checked):not(:focus){--bs-form-switch-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%28255, 255, 255, 0.25%29'/%3e%3c/svg%3e")}.form-range{width:100%;height:1.5rem;padding:0;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent}.form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem #0d6efd40}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem #0d6efd40}.form-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#0d6efd;border:0;border-radius:1rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-range::-webkit-slider-thumb:active{background-color:#b6d4fe}.form-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:var(--bs-secondary-bg);border-color:transparent;border-radius:1rem}.form-range::-moz-range-thumb{width:1rem;height:1rem;-moz-appearance:none;-webkit-appearance:none;appearance:none;background-color:#0d6efd;border:0;border-radius:1rem;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-range::-moz-range-thumb:active{background-color:#b6d4fe}.form-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:var(--bs-secondary-bg);border-color:transparent;border-radius:1rem}.form-range:disabled::-webkit-slider-thumb{background-color:var(--bs-secondary-color)}.form-range:disabled::-moz-range-thumb{background-color:var(--bs-secondary-color)}.form-floating>.form-control,.form-floating>.form-control-plaintext,.form-floating>.form-select{height:calc(3.5rem + calc(var(--bs-border-width) * 2));min-height:calc(3.5rem + calc(var(--bs-border-width) * 2));line-height:1.25}.form-floating>label{position:absolute;top:0;left:0;z-index:2;height:100%;padding:1rem .75rem;overflow:hidden;text-align:start;text-overflow:ellipsis;white-space:nowrap;pointer-events:none;border:var(--bs-border-width) solid transparent;transform-origin:0 0;transition:opacity .1s ease-in-out,transform .1s ease-in-out}.form-floating>.form-control-plaintext::-moz-placeholder,.form-floating>.form-control::-moz-placeholder{color:transparent}.form-floating>.form-control-plaintext:not(:-moz-placeholder-shown),.form-floating>.form-control:not(:-moz-placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:not(:-moz-placeholder-shown)~label{color:rgba(var(--bs-body-color-rgb),.65);transform:scale(.85) translateY(-.5rem) translate(.15rem)}.form-floating>.form-control-plaintext~label,.form-floating>.form-control:focus~label,.form-floating>.form-control:not(:placeholder-shown)~label,.form-floating>.form-select~label{color:rgba(var(--bs-body-color-rgb),.65);transform:scale(.85) translateY(-.5rem) translate(.15rem)}.form-floating>.form-control:not(:-moz-placeholder-shown)~label:after{position:absolute;top:1rem;right:.375rem;bottom:1rem;left:.375rem;z-index:-1;height:1.5em;content:"";background-color:var(--bs-body-bg);border-radius:var(--bs-border-radius)}.form-floating>.form-control-plaintext~label:after,.form-floating>.form-control:focus~label:after,.form-floating>.form-control:not(:placeholder-shown)~label:after,.form-floating>.form-select~label:after{position:absolute;top:1rem;right:.375rem;bottom:1rem;left:.375rem;z-index:-1;height:1.5em;content:"";background-color:var(--bs-body-bg);border-radius:var(--bs-border-radius)}.form-floating>.form-control:-webkit-autofill~label{color:rgba(var(--bs-body-color-rgb),.65);transform:scale(.85) translateY(-.5rem) translate(.15rem)}.form-floating>.form-control-plaintext~label{border-width:var(--bs-border-width) 0}.form-floating>.form-control:disabled~label,.form-floating>:disabled~label{color:#6c757d}.form-floating>.form-control:disabled~label:after,.form-floating>:disabled~label:after{background-color:var(--bs-secondary-bg)}.input-group-text{display:flex;align-items:center;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);text-align:center;white-space:nowrap;background-color:var(--bs-tertiary-bg);border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius)}.input-group-lg>.btn,.input-group-lg>.form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;border-radius:var(--bs-border-radius-lg)}.input-group-sm>.btn,.input-group-sm>.form-control,.input-group-sm>.form-select,.input-group-sm>.input-group-text{padding:.25rem .5rem;font-size:.875rem;border-radius:var(--bs-border-radius-sm)}.input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){margin-left:calc(var(--bs-border-width) * -1);border-top-left-radius:0;border-bottom-left-radius:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:var(--bs-form-valid-color)}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:var(--bs-success);border-radius:var(--bs-border-radius)}.form-control.is-valid,.was-validated .form-control:valid{border-color:var(--bs-form-valid-border-color);padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:var(--bs-form-valid-border-color);box-shadow:0 0 0 .25rem rgba(var(--bs-success-rgb),.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.form-select.is-valid,.was-validated .form-select:valid{border-color:var(--bs-form-valid-border-color)}.form-select.is-valid:not([multiple]):not([size]),.form-select.is-valid:not([multiple])[size="1"],.was-validated .form-select:valid:not([multiple]):not([size]),.was-validated .form-select:valid:not([multiple])[size="1"]{--bs-form-select-bg-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");padding-right:4.125rem;background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)}.form-select.is-valid:focus,.was-validated .form-select:valid:focus{border-color:var(--bs-form-valid-border-color);box-shadow:0 0 0 .25rem rgba(var(--bs-success-rgb),.25)}.form-control-color.is-valid,.was-validated .form-control-color:valid{width:calc(3.75rem + 1.5em)}.form-check-input.is-valid,.was-validated .form-check-input:valid{border-color:var(--bs-form-valid-border-color)}.form-check-input.is-valid:checked,.was-validated .form-check-input:valid:checked{background-color:var(--bs-form-valid-color)}.form-check-input.is-valid:focus,.was-validated .form-check-input:valid:focus{box-shadow:0 0 0 .25rem rgba(var(--bs-success-rgb),.25)}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:var(--bs-form-valid-color)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:var(--bs-form-invalid-color)}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:var(--bs-danger);border-radius:var(--bs-border-radius)}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:var(--bs-form-invalid-border-color);padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:var(--bs-form-invalid-border-color);box-shadow:0 0 0 .25rem rgba(var(--bs-danger-rgb),.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.form-select.is-invalid,.was-validated .form-select:invalid{border-color:var(--bs-form-invalid-border-color)}.form-select.is-invalid:not([multiple]):not([size]),.form-select.is-invalid:not([multiple])[size="1"],.was-validated .form-select:invalid:not([multiple]):not([size]),.was-validated .form-select:invalid:not([multiple])[size="1"]{--bs-form-select-bg-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");padding-right:4.125rem;background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)}.form-select.is-invalid:focus,.was-validated .form-select:invalid:focus{border-color:var(--bs-form-invalid-border-color);box-shadow:0 0 0 .25rem rgba(var(--bs-danger-rgb),.25)}.form-control-color.is-invalid,.was-validated .form-control-color:invalid{width:calc(3.75rem + 1.5em)}.form-check-input.is-invalid,.was-validated .form-check-input:invalid{border-color:var(--bs-form-invalid-border-color)}.form-check-input.is-invalid:checked,.was-validated .form-check-input:invalid:checked{background-color:var(--bs-form-invalid-color)}.form-check-input.is-invalid:focus,.was-validated .form-check-input:invalid:focus{box-shadow:0 0 0 .25rem rgba(var(--bs-danger-rgb),.25)}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:var(--bs-form-invalid-color)}.btn{--bs-btn-padding-x:.75rem;--bs-btn-padding-y:.375rem;--bs-btn-font-family: ;--bs-btn-font-size:1rem;--bs-btn-font-weight:400;--bs-btn-line-height:1.5;--bs-btn-color:var(--bs-body-color);--bs-btn-bg:transparent;--bs-btn-border-width:var(--bs-border-width);--bs-btn-border-color:transparent;--bs-btn-border-radius:var(--bs-border-radius);--bs-btn-hover-border-color:transparent;--bs-btn-box-shadow:inset 0 1px 0 rgba(255, 255, 255, .15),0 1px 1px rgba(0, 0, 0, .075);--bs-btn-disabled-opacity:.65;--bs-btn-focus-box-shadow:0 0 0 .25rem rgba(var(--bs-btn-focus-shadow-rgb), .5);display:inline-block;padding:var(--bs-btn-padding-y) var(--bs-btn-padding-x);font-family:var(--bs-btn-font-family);font-size:var(--bs-btn-font-size);font-weight:var(--bs-btn-font-weight);line-height:var(--bs-btn-line-height);color:var(--bs-btn-color);text-align:center;text-decoration:none;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;border:var(--bs-btn-border-width) solid var(--bs-btn-border-color);border-radius:var(--bs-btn-border-radius);background-color:var(--bs-btn-bg);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}.btn:hover{color:var(--bs-btn-hover-color);background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color)}.btn-check+.btn:hover{color:var(--bs-btn-color);background-color:var(--bs-btn-bg);border-color:var(--bs-btn-border-color)}.btn:focus-visible{color:var(--bs-btn-hover-color);background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color);outline:0;box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:focus-visible+.btn{border-color:var(--bs-btn-hover-border-color);outline:0;box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:checked+.btn,.btn.active,.btn.show,.btn:first-child:active,:not(.btn-check)+.btn:active{color:var(--bs-btn-active-color);background-color:var(--bs-btn-active-bg);border-color:var(--bs-btn-active-border-color)}.btn-check:checked+.btn:focus-visible,.btn.active:focus-visible,.btn.show:focus-visible,.btn:first-child:active:focus-visible,:not(.btn-check)+.btn:active:focus-visible{box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:checked:focus-visible+.btn{box-shadow:var(--bs-btn-focus-box-shadow)}.btn.disabled,.btn:disabled,fieldset:disabled .btn{color:var(--bs-btn-disabled-color);pointer-events:none;background-color:var(--bs-btn-disabled-bg);border-color:var(--bs-btn-disabled-border-color);opacity:var(--bs-btn-disabled-opacity)}.btn-primary{--bs-btn-color:#fff;--bs-btn-bg:#0d6efd;--bs-btn-border-color:#0d6efd;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#0b5ed7;--bs-btn-hover-border-color:#0a58ca;--bs-btn-focus-shadow-rgb:49,132,253;--bs-btn-active-color:#fff;--bs-btn-active-bg:#0a58ca;--bs-btn-active-border-color:#0a53be;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color:#fff;--bs-btn-disabled-bg:#0d6efd;--bs-btn-disabled-border-color:#0d6efd}.btn-secondary{--bs-btn-color:#fff;--bs-btn-bg:#6c757d;--bs-btn-border-color:#6c757d;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#5c636a;--bs-btn-hover-border-color:#565e64;--bs-btn-focus-shadow-rgb:130,138,145;--bs-btn-active-color:#fff;--bs-btn-active-bg:#565e64;--bs-btn-active-border-color:#51585e;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color:#fff;--bs-btn-disabled-bg:#6c757d;--bs-btn-disabled-border-color:#6c757d}.btn-success{--bs-btn-color:#fff;--bs-btn-bg:#198754;--bs-btn-border-color:#198754;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#157347;--bs-btn-hover-border-color:#146c43;--bs-btn-focus-shadow-rgb:60,153,110;--bs-btn-active-color:#fff;--bs-btn-active-bg:#146c43;--bs-btn-active-border-color:#13653f;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color:#fff;--bs-btn-disabled-bg:#198754;--bs-btn-disabled-border-color:#198754}.btn-info{--bs-btn-color:#000;--bs-btn-bg:#0dcaf0;--bs-btn-border-color:#0dcaf0;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#31d2f2;--bs-btn-hover-border-color:#25cff2;--bs-btn-focus-shadow-rgb:11,172,204;--bs-btn-active-color:#000;--bs-btn-active-bg:#3dd5f3;--bs-btn-active-border-color:#25cff2;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color:#000;--bs-btn-disabled-bg:#0dcaf0;--bs-btn-disabled-border-color:#0dcaf0}.btn-warning{--bs-btn-color:#000;--bs-btn-bg:#ffc107;--bs-btn-border-color:#ffc107;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#ffca2c;--bs-btn-hover-border-color:#ffc720;--bs-btn-focus-shadow-rgb:217,164,6;--bs-btn-active-color:#000;--bs-btn-active-bg:#ffcd39;--bs-btn-active-border-color:#ffc720;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color:#000;--bs-btn-disabled-bg:#ffc107;--bs-btn-disabled-border-color:#ffc107}.btn-danger{--bs-btn-color:#fff;--bs-btn-bg:#dc3545;--bs-btn-border-color:#dc3545;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#bb2d3b;--bs-btn-hover-border-color:#b02a37;--bs-btn-focus-shadow-rgb:225,83,97;--bs-btn-active-color:#fff;--bs-btn-active-bg:#b02a37;--bs-btn-active-border-color:#a52834;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color:#fff;--bs-btn-disabled-bg:#dc3545;--bs-btn-disabled-border-color:#dc3545}.btn-light{--bs-btn-color:#000;--bs-btn-bg:#f8f9fa;--bs-btn-border-color:#f8f9fa;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#d3d4d5;--bs-btn-hover-border-color:#c6c7c8;--bs-btn-focus-shadow-rgb:211,212,213;--bs-btn-active-color:#000;--bs-btn-active-bg:#c6c7c8;--bs-btn-active-border-color:#babbbc;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color:#000;--bs-btn-disabled-bg:#f8f9fa;--bs-btn-disabled-border-color:#f8f9fa}.btn-dark{--bs-btn-color:#fff;--bs-btn-bg:#212529;--bs-btn-border-color:#212529;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#424649;--bs-btn-hover-border-color:#373b3e;--bs-btn-focus-shadow-rgb:66,70,73;--bs-btn-active-color:#fff;--bs-btn-active-bg:#4d5154;--bs-btn-active-border-color:#373b3e;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color:#fff;--bs-btn-disabled-bg:#212529;--bs-btn-disabled-border-color:#212529}.btn-outline-primary{--bs-btn-color:#0d6efd;--bs-btn-border-color:#0d6efd;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#0d6efd;--bs-btn-hover-border-color:#0d6efd;--bs-btn-focus-shadow-rgb:13,110,253;--bs-btn-active-color:#fff;--bs-btn-active-bg:#0d6efd;--bs-btn-active-border-color:#0d6efd;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color:#0d6efd;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#0d6efd;--bs-gradient:none}.btn-outline-secondary{--bs-btn-color:#6c757d;--bs-btn-border-color:#6c757d;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#6c757d;--bs-btn-hover-border-color:#6c757d;--bs-btn-focus-shadow-rgb:108,117,125;--bs-btn-active-color:#fff;--bs-btn-active-bg:#6c757d;--bs-btn-active-border-color:#6c757d;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color:#6c757d;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#6c757d;--bs-gradient:none}.btn-outline-success{--bs-btn-color:#198754;--bs-btn-border-color:#198754;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#198754;--bs-btn-hover-border-color:#198754;--bs-btn-focus-shadow-rgb:25,135,84;--bs-btn-active-color:#fff;--bs-btn-active-bg:#198754;--bs-btn-active-border-color:#198754;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color:#198754;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#198754;--bs-gradient:none}.btn-outline-info{--bs-btn-color:#0dcaf0;--bs-btn-border-color:#0dcaf0;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#0dcaf0;--bs-btn-hover-border-color:#0dcaf0;--bs-btn-focus-shadow-rgb:13,202,240;--bs-btn-active-color:#000;--bs-btn-active-bg:#0dcaf0;--bs-btn-active-border-color:#0dcaf0;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color:#0dcaf0;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#0dcaf0;--bs-gradient:none}.btn-outline-warning{--bs-btn-color:#ffc107;--bs-btn-border-color:#ffc107;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#ffc107;--bs-btn-hover-border-color:#ffc107;--bs-btn-focus-shadow-rgb:255,193,7;--bs-btn-active-color:#000;--bs-btn-active-bg:#ffc107;--bs-btn-active-border-color:#ffc107;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color:#ffc107;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#ffc107;--bs-gradient:none}.btn-outline-danger{--bs-btn-color:#dc3545;--bs-btn-border-color:#dc3545;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#dc3545;--bs-btn-hover-border-color:#dc3545;--bs-btn-focus-shadow-rgb:220,53,69;--bs-btn-active-color:#fff;--bs-btn-active-bg:#dc3545;--bs-btn-active-border-color:#dc3545;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color:#dc3545;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#dc3545;--bs-gradient:none}.btn-outline-light{--bs-btn-color:#f8f9fa;--bs-btn-border-color:#f8f9fa;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#f8f9fa;--bs-btn-hover-border-color:#f8f9fa;--bs-btn-focus-shadow-rgb:248,249,250;--bs-btn-active-color:#000;--bs-btn-active-bg:#f8f9fa;--bs-btn-active-border-color:#f8f9fa;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color:#f8f9fa;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#f8f9fa;--bs-gradient:none}.btn-outline-dark{--bs-btn-color:#212529;--bs-btn-border-color:#212529;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#212529;--bs-btn-hover-border-color:#212529;--bs-btn-focus-shadow-rgb:33,37,41;--bs-btn-active-color:#fff;--bs-btn-active-bg:#212529;--bs-btn-active-border-color:#212529;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color:#212529;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#212529;--bs-gradient:none}.btn-link{--bs-btn-font-weight:400;--bs-btn-color:var(--bs-link-color);--bs-btn-bg:transparent;--bs-btn-border-color:transparent;--bs-btn-hover-color:var(--bs-link-hover-color);--bs-btn-hover-border-color:transparent;--bs-btn-active-color:var(--bs-link-hover-color);--bs-btn-active-border-color:transparent;--bs-btn-disabled-color:#6c757d;--bs-btn-disabled-border-color:transparent;--bs-btn-box-shadow:0 0 0 #000;--bs-btn-focus-shadow-rgb:49,132,253;text-decoration:underline}.btn-link:focus-visible{color:var(--bs-btn-color)}.btn-link:hover{color:var(--bs-btn-hover-color)}.btn-group-lg>.btn,.btn-lg{--bs-btn-padding-y:.5rem;--bs-btn-padding-x:1rem;--bs-btn-font-size:1.25rem;--bs-btn-border-radius:var(--bs-border-radius-lg)}.btn-group-sm>.btn,.btn-sm{--bs-btn-padding-y:.25rem;--bs-btn-padding-x:.5rem;--bs-btn-font-size:.875rem;--bs-btn-border-radius:var(--bs-border-radius-sm)}.dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty:after{margin-left:0}.dropdown-menu{--bs-dropdown-zindex:1000;--bs-dropdown-min-width:10rem;--bs-dropdown-padding-x:0;--bs-dropdown-padding-y:.5rem;--bs-dropdown-spacer:.125rem;--bs-dropdown-font-size:1rem;--bs-dropdown-color:var(--bs-body-color);--bs-dropdown-bg:var(--bs-body-bg);--bs-dropdown-border-color:var(--bs-border-color-translucent);--bs-dropdown-border-radius:var(--bs-border-radius);--bs-dropdown-border-width:var(--bs-border-width);--bs-dropdown-inner-border-radius:calc(var(--bs-border-radius) - var(--bs-border-width));--bs-dropdown-divider-bg:var(--bs-border-color-translucent);--bs-dropdown-divider-margin-y:.5rem;--bs-dropdown-box-shadow:var(--bs-box-shadow);--bs-dropdown-link-color:var(--bs-body-color);--bs-dropdown-link-hover-color:var(--bs-body-color);--bs-dropdown-link-hover-bg:var(--bs-tertiary-bg);--bs-dropdown-link-active-color:#fff;--bs-dropdown-link-active-bg:#0d6efd;--bs-dropdown-link-disabled-color:var(--bs-tertiary-color);--bs-dropdown-item-padding-x:1rem;--bs-dropdown-item-padding-y:.25rem;--bs-dropdown-header-color:#6c757d;--bs-dropdown-header-padding-x:1rem;--bs-dropdown-header-padding-y:.5rem;position:absolute;z-index:var(--bs-dropdown-zindex);display:none;min-width:var(--bs-dropdown-min-width);padding:var(--bs-dropdown-padding-y) var(--bs-dropdown-padding-x);margin:0;font-size:var(--bs-dropdown-font-size);color:var(--bs-dropdown-color);text-align:left;list-style:none;background-color:var(--bs-dropdown-bg);background-clip:padding-box;border:var(--bs-dropdown-border-width) solid var(--bs-dropdown-border-color);border-radius:var(--bs-dropdown-border-radius)}.dropdown-menu[data-bs-popper]{top:100%;left:0;margin-top:var(--bs-dropdown-spacer)}.dropup .dropdown-menu[data-bs-popper]{top:auto;bottom:100%;margin-top:0;margin-bottom:var(--bs-dropdown-spacer)}.dropup .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty:after{margin-left:0}.dropend .dropdown-menu[data-bs-popper]{top:0;right:auto;left:100%;margin-top:0;margin-left:var(--bs-dropdown-spacer)}.dropend .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropend .dropdown-toggle:empty:after{margin-left:0}.dropstart .dropdown-menu[data-bs-popper]{top:0;right:100%;left:auto;margin-top:0;margin-right:var(--bs-dropdown-spacer)}.dropstart .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropstart .dropdown-toggle:after{display:none}.dropstart .dropdown-toggle:before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropstart .dropdown-toggle:empty:after{margin-left:0}.dropdown-divider{height:0;margin:var(--bs-dropdown-divider-margin-y) 0;overflow:hidden;border-top:1px solid var(--bs-dropdown-divider-bg);opacity:1}.dropdown-item{display:block;width:100%;padding:var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);clear:both;font-weight:400;color:var(--bs-dropdown-link-color);text-align:inherit;text-decoration:none;white-space:nowrap;background-color:transparent;border:0;border-radius:var(--bs-dropdown-item-border-radius,0)}.dropdown-item:focus,.dropdown-item:hover{color:var(--bs-dropdown-link-hover-color);background-color:var(--bs-dropdown-link-hover-bg)}.dropdown-item.active,.dropdown-item:active{color:var(--bs-dropdown-link-active-color);text-decoration:none;background-color:var(--bs-dropdown-link-active-bg)}.dropdown-item.disabled,.dropdown-item:disabled{color:var(--bs-dropdown-link-disabled-color);pointer-events:none;background-color:transparent}.dropdown-header{display:block;padding:var(--bs-dropdown-header-padding-y) var(--bs-dropdown-header-padding-x);margin-bottom:0;font-size:.875rem;color:var(--bs-dropdown-header-color);white-space:nowrap}.dropdown-item-text{display:block;padding:var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);color:var(--bs-dropdown-link-color)}.dropdown-menu-dark{--bs-dropdown-color:#dee2e6;--bs-dropdown-bg:#343a40;--bs-dropdown-border-color:var(--bs-border-color-translucent);--bs-dropdown-box-shadow: ;--bs-dropdown-link-color:#dee2e6;--bs-dropdown-link-hover-color:#fff;--bs-dropdown-divider-bg:var(--bs-border-color-translucent);--bs-dropdown-link-hover-bg:rgba(255, 255, 255, .15);--bs-dropdown-link-active-color:#fff;--bs-dropdown-link-active-bg:#0d6efd;--bs-dropdown-link-disabled-color:#adb5bd;--bs-dropdown-header-color:#adb5bd}.btn-group{border-radius:var(--bs-border-radius)}.btn-group>.btn-group:not(:first-child),.btn-group>:not(.btn-check:first-child)+.btn{margin-left:calc(var(--bs-border-width) * -1)}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:calc(var(--bs-border-width) * -1)}.nav{--bs-nav-link-padding-x:1rem;--bs-nav-link-padding-y:.5rem;--bs-nav-link-font-weight: ;--bs-nav-link-color:var(--bs-link-color);--bs-nav-link-hover-color:var(--bs-link-hover-color);--bs-nav-link-disabled-color:var(--bs-secondary-color);display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:var(--bs-nav-link-padding-y) var(--bs-nav-link-padding-x);font-size:var(--bs-nav-link-font-size);font-weight:var(--bs-nav-link-font-weight);color:var(--bs-nav-link-color);text-decoration:none;background:0 0;border:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out}.nav-link:focus,.nav-link:hover{color:var(--bs-nav-link-hover-color)}.nav-link:focus-visible{outline:0;box-shadow:0 0 0 .25rem #0d6efd40}.nav-link.disabled,.nav-link:disabled{color:var(--bs-nav-link-disabled-color);pointer-events:none;cursor:default}.nav-tabs{--bs-nav-tabs-border-width:var(--bs-border-width);--bs-nav-tabs-border-color:var(--bs-border-color);--bs-nav-tabs-border-radius:var(--bs-border-radius);--bs-nav-tabs-link-hover-border-color:var(--bs-secondary-bg) var(--bs-secondary-bg) var(--bs-border-color);--bs-nav-tabs-link-active-color:var(--bs-emphasis-color);--bs-nav-tabs-link-active-bg:var(--bs-body-bg);--bs-nav-tabs-link-active-border-color:var(--bs-border-color) var(--bs-border-color) var(--bs-body-bg);border-bottom:var(--bs-nav-tabs-border-width) solid var(--bs-nav-tabs-border-color)}.nav-tabs .nav-link{margin-bottom:calc(-1 * var(--bs-nav-tabs-border-width));border:var(--bs-nav-tabs-border-width) solid transparent;border-top-left-radius:var(--bs-nav-tabs-border-radius);border-top-right-radius:var(--bs-nav-tabs-border-radius)}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{isolation:isolate;border-color:var(--bs-nav-tabs-link-hover-border-color)}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:var(--bs-nav-tabs-link-active-color);background-color:var(--bs-nav-tabs-link-active-bg);border-color:var(--bs-nav-tabs-link-active-border-color)}.nav-tabs .dropdown-menu{margin-top:calc(-1 * var(--bs-nav-tabs-border-width));border-top-left-radius:0;border-top-right-radius:0}.nav-pills{--bs-nav-pills-border-radius:var(--bs-border-radius);--bs-nav-pills-link-active-color:#fff;--bs-nav-pills-link-active-bg:#0d6efd}.nav-pills .nav-link{border-radius:var(--bs-nav-pills-border-radius)}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:var(--bs-nav-pills-link-active-color);background-color:var(--bs-nav-pills-link-active-bg)}.nav-underline{--bs-nav-underline-gap:1rem;--bs-nav-underline-border-width:.125rem;--bs-nav-underline-link-active-color:var(--bs-emphasis-color);gap:var(--bs-nav-underline-gap)}.nav-underline .nav-link{padding-right:0;padding-left:0;border-bottom:var(--bs-nav-underline-border-width) solid transparent}.nav-underline .nav-link.active,.nav-underline .show>.nav-link{font-weight:700;color:var(--bs-nav-underline-link-active-color);border-bottom-color:currentcolor}.navbar{--bs-navbar-padding-x:0;--bs-navbar-padding-y:.5rem;--bs-navbar-color:rgba(var(--bs-emphasis-color-rgb), .65);--bs-navbar-hover-color:rgba(var(--bs-emphasis-color-rgb), .8);--bs-navbar-disabled-color:rgba(var(--bs-emphasis-color-rgb), .3);--bs-navbar-active-color:rgba(var(--bs-emphasis-color-rgb), 1);--bs-navbar-brand-padding-y:.3125rem;--bs-navbar-brand-margin-end:1rem;--bs-navbar-brand-font-size:1.25rem;--bs-navbar-brand-color:rgba(var(--bs-emphasis-color-rgb), 1);--bs-navbar-brand-hover-color:rgba(var(--bs-emphasis-color-rgb), 1);--bs-navbar-nav-link-padding-x:.5rem;--bs-navbar-toggler-padding-y:.25rem;--bs-navbar-toggler-padding-x:.75rem;--bs-navbar-toggler-font-size:1.25rem;--bs-navbar-toggler-icon-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%2833, 37, 41, 0.75%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e");--bs-navbar-toggler-border-color:rgba(var(--bs-emphasis-color-rgb), .15);--bs-navbar-toggler-border-radius:var(--bs-border-radius);--bs-navbar-toggler-focus-width:.25rem;--bs-navbar-toggler-transition:box-shadow .15s ease-in-out;position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding:var(--bs-navbar-padding-y) var(--bs-navbar-padding-x)}.navbar-brand{padding-top:var(--bs-navbar-brand-padding-y);padding-bottom:var(--bs-navbar-brand-padding-y);margin-right:var(--bs-navbar-brand-margin-end);font-size:var(--bs-navbar-brand-font-size);color:var(--bs-navbar-brand-color);text-decoration:none;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{color:var(--bs-navbar-brand-hover-color)}.navbar-nav{--bs-nav-link-padding-x:0;--bs-nav-link-padding-y:.5rem;--bs-nav-link-font-weight: ;--bs-nav-link-color:var(--bs-navbar-color);--bs-nav-link-hover-color:var(--bs-navbar-hover-color);--bs-nav-link-disabled-color:var(--bs-navbar-disabled-color);display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link.active,.navbar-nav .nav-link.show{color:var(--bs-navbar-active-color)}.navbar-text{padding-top:.5rem;padding-bottom:.5rem;color:var(--bs-navbar-color)}.navbar-text a,.navbar-text a:focus,.navbar-text a:hover{color:var(--bs-navbar-active-color)}.navbar-toggler{padding:var(--bs-navbar-toggler-padding-y) var(--bs-navbar-toggler-padding-x);font-size:var(--bs-navbar-toggler-font-size);line-height:1;color:var(--bs-navbar-color);background-color:transparent;border:var(--bs-border-width) solid var(--bs-navbar-toggler-border-color);border-radius:var(--bs-navbar-toggler-border-radius);transition:var(--bs-navbar-toggler-transition)}.navbar-toggler:focus{text-decoration:none;outline:0;box-shadow:0 0 0 var(--bs-navbar-toggler-focus-width)}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;background-image:var(--bs-navbar-toggler-icon-bg);background-repeat:no-repeat;background-position:center;background-size:100%}.navbar-nav-scroll{max-height:var(--bs-scroll-height,75vh);overflow-y:auto}@media (min-width:576px){.navbar-expand-sm{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;transition:none}.navbar-expand-sm .offcanvas .offcanvas-header{display:none}.navbar-expand-sm .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:768px){.navbar-expand-md{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;transition:none}.navbar-expand-md .offcanvas .offcanvas-header{display:none}.navbar-expand-md .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:992px){.navbar-expand-lg{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;transition:none}.navbar-expand-lg .offcanvas .offcanvas-header{display:none}.navbar-expand-lg .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:1200px){.navbar-expand-xl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;transition:none}.navbar-expand-xl .offcanvas .offcanvas-header{display:none}.navbar-expand-xl .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:1400px){.navbar-expand-xxl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xxl .navbar-nav{flex-direction:row}.navbar-expand-xxl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xxl .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-xxl .navbar-nav-scroll{overflow:visible}.navbar-expand-xxl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xxl .navbar-toggler{display:none}.navbar-expand-xxl .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;transition:none}.navbar-expand-xxl .offcanvas .offcanvas-header{display:none}.navbar-expand-xxl .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}.navbar-expand .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;transition:none}.navbar-dark,.navbar[data-bs-theme=dark]{--bs-navbar-color:rgba(255, 255, 255, .55);--bs-navbar-hover-color:rgba(255, 255, 255, .75);--bs-navbar-disabled-color:rgba(255, 255, 255, .25);--bs-navbar-active-color:#fff;--bs-navbar-brand-color:#fff;--bs-navbar-brand-hover-color:#fff;--bs-navbar-toggler-border-color:rgba(255, 255, 255, .1);--bs-navbar-toggler-icon-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}[data-bs-theme=dark] .navbar-toggler-icon{--bs-navbar-toggler-icon-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.card{--bs-card-spacer-y:1rem;--bs-card-spacer-x:1rem;--bs-card-title-spacer-y:.5rem;--bs-card-title-color: ;--bs-card-subtitle-color: ;--bs-card-border-width:var(--bs-border-width);--bs-card-border-color:var(--bs-border-color-translucent);--bs-card-border-radius:var(--bs-border-radius);--bs-card-box-shadow: ;--bs-card-inner-border-radius:calc(var(--bs-border-radius) - (var(--bs-border-width)));--bs-card-cap-padding-y:.5rem;--bs-card-cap-padding-x:1rem;--bs-card-cap-bg:rgba(var(--bs-body-color-rgb), .03);--bs-card-cap-color: ;--bs-card-height: ;--bs-card-color: ;--bs-card-bg:var(--bs-body-bg);--bs-card-img-overlay-padding:1rem;--bs-card-group-margin:.75rem;position:relative;display:flex;flex-direction:column;min-width:0;height:var(--bs-card-height);color:var(--bs-body-color);word-wrap:break-word;background-color:var(--bs-card-bg);background-clip:border-box;border:var(--bs-card-border-width) solid var(--bs-card-border-color);border-radius:var(--bs-card-border-radius)}.card>hr{margin-right:0;margin-left:0}.card>.list-group:first-child{border-top-width:0;border-top-left-radius:var(--bs-card-inner-border-radius);border-top-right-radius:var(--bs-card-inner-border-radius)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:var(--bs-card-inner-border-radius);border-bottom-left-radius:var(--bs-card-inner-border-radius)}.card-body{flex:1 1 auto;padding:var(--bs-card-spacer-y) var(--bs-card-spacer-x);color:var(--bs-card-color)}.card-title{margin-bottom:var(--bs-card-title-spacer-y);color:var(--bs-card-title-color)}.card-subtitle{margin-top:calc(-.5 * var(--bs-card-title-spacer-y));margin-bottom:0;color:var(--bs-card-subtitle-color)}.card-link+.card-link{margin-left:var(--bs-card-spacer-x)}.card-header{padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);margin-bottom:0;color:var(--bs-card-cap-color);background-color:var(--bs-card-cap-bg);border-bottom:var(--bs-card-border-width) solid var(--bs-card-border-color)}.card-header:first-child{border-radius:var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius) 0 0}.card-footer{padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);color:var(--bs-card-cap-color);background-color:var(--bs-card-cap-bg);border-top:var(--bs-card-border-width) solid var(--bs-card-border-color)}.card-footer:last-child{border-radius:0 0 var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius)}.card-header-tabs{margin-right:calc(-.5 * var(--bs-card-cap-padding-x));margin-bottom:calc(-1 * var(--bs-card-cap-padding-y));margin-left:calc(-.5 * var(--bs-card-cap-padding-x));border-bottom:0}.card-header-tabs .nav-link.active{background-color:var(--bs-card-bg);border-bottom-color:var(--bs-card-bg)}.card-header-pills{margin-right:calc(-.5 * var(--bs-card-cap-padding-x));margin-left:calc(-.5 * var(--bs-card-cap-padding-x))}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:var(--bs-card-img-overlay-padding);border-radius:var(--bs-card-inner-border-radius)}.card-img,.card-img-top{border-top-left-radius:var(--bs-card-inner-border-radius);border-top-right-radius:var(--bs-card-inner-border-radius)}.card-img,.card-img-bottom{border-bottom-right-radius:var(--bs-card-inner-border-radius);border-bottom-left-radius:var(--bs-card-inner-border-radius)}.card-group>.card{margin-bottom:var(--bs-card-group-margin)}.accordion{--bs-accordion-color:var(--bs-body-color);--bs-accordion-bg:var(--bs-body-bg);--bs-accordion-transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,border-radius .15s ease;--bs-accordion-border-color:var(--bs-border-color);--bs-accordion-border-width:var(--bs-border-width);--bs-accordion-border-radius:var(--bs-border-radius);--bs-accordion-inner-border-radius:calc(var(--bs-border-radius) - (var(--bs-border-width)));--bs-accordion-btn-padding-x:1.25rem;--bs-accordion-btn-padding-y:1rem;--bs-accordion-btn-color:var(--bs-body-color);--bs-accordion-btn-bg:var(--bs-accordion-bg);--bs-accordion-btn-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23212529' stroke-linecap='round' stroke-linejoin='round'%3e%3cpath d='M2 5L8 11L14 5'/%3e%3c/svg%3e");--bs-accordion-btn-icon-width:1.25rem;--bs-accordion-btn-icon-transform:rotate(-180deg);--bs-accordion-btn-icon-transition:transform .2s ease-in-out;--bs-accordion-btn-active-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23052c65' stroke-linecap='round' stroke-linejoin='round'%3e%3cpath d='M2 5L8 11L14 5'/%3e%3c/svg%3e");--bs-accordion-btn-focus-box-shadow:0 0 0 .25rem rgba(13, 110, 253, .25);--bs-accordion-body-padding-x:1.25rem;--bs-accordion-body-padding-y:1rem;--bs-accordion-active-color:var(--bs-primary-text-emphasis);--bs-accordion-active-bg:var(--bs-primary-bg-subtle)}.accordion-button{position:relative;display:flex;align-items:center;width:100%;padding:var(--bs-accordion-btn-padding-y) var(--bs-accordion-btn-padding-x);font-size:1rem;color:var(--bs-accordion-btn-color);text-align:left;background-color:var(--bs-accordion-btn-bg);border:0;border-radius:0;overflow-anchor:none;transition:var(--bs-accordion-transition)}.accordion-button:not(.collapsed){color:var(--bs-accordion-active-color);background-color:var(--bs-accordion-active-bg);box-shadow:inset 0 calc(-1 * var(--bs-accordion-border-width)) 0 var(--bs-accordion-border-color)}.accordion-button:not(.collapsed):after{background-image:var(--bs-accordion-btn-active-icon);transform:var(--bs-accordion-btn-icon-transform)}.accordion-button:after{flex-shrink:0;width:var(--bs-accordion-btn-icon-width);height:var(--bs-accordion-btn-icon-width);margin-left:auto;content:"";background-image:var(--bs-accordion-btn-icon);background-repeat:no-repeat;background-size:var(--bs-accordion-btn-icon-width);transition:var(--bs-accordion-btn-icon-transition)}.accordion-button:focus{z-index:3;outline:0;box-shadow:var(--bs-accordion-btn-focus-box-shadow)}.accordion-item{color:var(--bs-accordion-color);background-color:var(--bs-accordion-bg);border:var(--bs-accordion-border-width) solid var(--bs-accordion-border-color)}.accordion-item:first-of-type{border-top-left-radius:var(--bs-accordion-border-radius);border-top-right-radius:var(--bs-accordion-border-radius)}.accordion-item:first-of-type>.accordion-header .accordion-button{border-top-left-radius:var(--bs-accordion-inner-border-radius);border-top-right-radius:var(--bs-accordion-inner-border-radius)}.accordion-item:last-of-type{border-bottom-right-radius:var(--bs-accordion-border-radius);border-bottom-left-radius:var(--bs-accordion-border-radius)}.accordion-item:last-of-type>.accordion-header .accordion-button.collapsed{border-bottom-right-radius:var(--bs-accordion-inner-border-radius);border-bottom-left-radius:var(--bs-accordion-inner-border-radius)}.accordion-item:last-of-type>.accordion-collapse{border-bottom-right-radius:var(--bs-accordion-border-radius);border-bottom-left-radius:var(--bs-accordion-border-radius)}.accordion-body{padding:var(--bs-accordion-body-padding-y) var(--bs-accordion-body-padding-x)}.accordion-flush>.accordion-item{border-right:0;border-left:0;border-radius:0}.accordion-flush>.accordion-item:first-child{border-top:0}.accordion-flush>.accordion-item:last-child{border-bottom:0}.accordion-flush>.accordion-item>.accordion-header .accordion-button,.accordion-flush>.accordion-item>.accordion-header .accordion-button.collapsed{border-radius:0}.accordion-flush>.accordion-item>.accordion-collapse{border-radius:0}[data-bs-theme=dark] .accordion-button:after{--bs-accordion-btn-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");--bs-accordion-btn-active-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e")}.breadcrumb{--bs-breadcrumb-padding-x:0;--bs-breadcrumb-padding-y:0;--bs-breadcrumb-margin-bottom:1rem;--bs-breadcrumb-bg: ;--bs-breadcrumb-border-radius: ;--bs-breadcrumb-divider-color:var(--bs-secondary-color);--bs-breadcrumb-item-padding-x:.5rem;--bs-breadcrumb-item-active-color:var(--bs-secondary-color);display:flex;flex-wrap:wrap;padding:var(--bs-breadcrumb-padding-y) var(--bs-breadcrumb-padding-x);margin-bottom:var(--bs-breadcrumb-margin-bottom);font-size:var(--bs-breadcrumb-font-size);list-style:none;background-color:var(--bs-breadcrumb-bg);border-radius:var(--bs-breadcrumb-border-radius)}.breadcrumb-item+.breadcrumb-item{padding-left:var(--bs-breadcrumb-item-padding-x)}.breadcrumb-item+.breadcrumb-item:before{float:left;padding-right:var(--bs-breadcrumb-item-padding-x);color:var(--bs-breadcrumb-divider-color);content:var(--bs-breadcrumb-divider, "/")}.breadcrumb-item.active{color:var(--bs-breadcrumb-item-active-color)}.pagination{--bs-pagination-padding-x:.75rem;--bs-pagination-padding-y:.375rem;--bs-pagination-font-size:1rem;--bs-pagination-color:var(--bs-link-color);--bs-pagination-bg:var(--bs-body-bg);--bs-pagination-border-width:var(--bs-border-width);--bs-pagination-border-color:var(--bs-border-color);--bs-pagination-border-radius:var(--bs-border-radius);--bs-pagination-hover-color:var(--bs-link-hover-color);--bs-pagination-hover-bg:var(--bs-tertiary-bg);--bs-pagination-hover-border-color:var(--bs-border-color);--bs-pagination-focus-color:var(--bs-link-hover-color);--bs-pagination-focus-bg:var(--bs-secondary-bg);--bs-pagination-focus-box-shadow:0 0 0 .25rem rgba(13, 110, 253, .25);--bs-pagination-active-color:#fff;--bs-pagination-active-bg:#0d6efd;--bs-pagination-active-border-color:#0d6efd;--bs-pagination-disabled-color:var(--bs-secondary-color);--bs-pagination-disabled-bg:var(--bs-secondary-bg);--bs-pagination-disabled-border-color:var(--bs-border-color);display:flex;padding-left:0;list-style:none}.page-link{position:relative;display:block;padding:var(--bs-pagination-padding-y) var(--bs-pagination-padding-x);font-size:var(--bs-pagination-font-size);color:var(--bs-pagination-color);text-decoration:none;background-color:var(--bs-pagination-bg);border:var(--bs-pagination-border-width) solid var(--bs-pagination-border-color);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}.page-link:hover{z-index:2;color:var(--bs-pagination-hover-color);background-color:var(--bs-pagination-hover-bg);border-color:var(--bs-pagination-hover-border-color)}.page-link:focus{z-index:3;color:var(--bs-pagination-focus-color);background-color:var(--bs-pagination-focus-bg);outline:0;box-shadow:var(--bs-pagination-focus-box-shadow)}.active>.page-link,.page-link.active{z-index:3;color:var(--bs-pagination-active-color);background-color:var(--bs-pagination-active-bg);border-color:var(--bs-pagination-active-border-color)}.disabled>.page-link,.page-link.disabled{color:var(--bs-pagination-disabled-color);pointer-events:none;background-color:var(--bs-pagination-disabled-bg);border-color:var(--bs-pagination-disabled-border-color)}.page-item:not(:first-child) .page-link{margin-left:calc(var(--bs-border-width) * -1)}.page-item:first-child .page-link{border-top-left-radius:var(--bs-pagination-border-radius);border-bottom-left-radius:var(--bs-pagination-border-radius)}.page-item:last-child .page-link{border-top-right-radius:var(--bs-pagination-border-radius);border-bottom-right-radius:var(--bs-pagination-border-radius)}.pagination-lg{--bs-pagination-padding-x:1.5rem;--bs-pagination-padding-y:.75rem;--bs-pagination-font-size:1.25rem;--bs-pagination-border-radius:var(--bs-border-radius-lg)}.pagination-sm{--bs-pagination-padding-x:.5rem;--bs-pagination-padding-y:.25rem;--bs-pagination-font-size:.875rem;--bs-pagination-border-radius:var(--bs-border-radius-sm)}.badge{--bs-badge-padding-x:.65em;--bs-badge-padding-y:.35em;--bs-badge-font-size:.75em;--bs-badge-font-weight:700;--bs-badge-color:#fff;--bs-badge-border-radius:var(--bs-border-radius);display:inline-block;padding:var(--bs-badge-padding-y) var(--bs-badge-padding-x);font-size:var(--bs-badge-font-size);font-weight:var(--bs-badge-font-weight);line-height:1;color:var(--bs-badge-color);text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:var(--bs-badge-border-radius)}.alert{--bs-alert-bg:transparent;--bs-alert-padding-x:1rem;--bs-alert-padding-y:1rem;--bs-alert-margin-bottom:1rem;--bs-alert-color:inherit;--bs-alert-border-color:transparent;--bs-alert-border:var(--bs-border-width) solid var(--bs-alert-border-color);--bs-alert-border-radius:var(--bs-border-radius);--bs-alert-link-color:inherit;position:relative;padding:var(--bs-alert-padding-y) var(--bs-alert-padding-x);margin-bottom:var(--bs-alert-margin-bottom);color:var(--bs-alert-color);background-color:var(--bs-alert-bg);border:var(--bs-alert-border);border-radius:var(--bs-alert-border-radius)}.alert-link{font-weight:700;color:var(--bs-alert-link-color)}.alert-primary{--bs-alert-color:var(--bs-primary-text-emphasis);--bs-alert-bg:var(--bs-primary-bg-subtle);--bs-alert-border-color:var(--bs-primary-border-subtle);--bs-alert-link-color:var(--bs-primary-text-emphasis)}.alert-secondary{--bs-alert-color:var(--bs-secondary-text-emphasis);--bs-alert-bg:var(--bs-secondary-bg-subtle);--bs-alert-border-color:var(--bs-secondary-border-subtle);--bs-alert-link-color:var(--bs-secondary-text-emphasis)}.alert-success{--bs-alert-color:var(--bs-success-text-emphasis);--bs-alert-bg:var(--bs-success-bg-subtle);--bs-alert-border-color:var(--bs-success-border-subtle);--bs-alert-link-color:var(--bs-success-text-emphasis)}.alert-info{--bs-alert-color:var(--bs-info-text-emphasis);--bs-alert-bg:var(--bs-info-bg-subtle);--bs-alert-border-color:var(--bs-info-border-subtle);--bs-alert-link-color:var(--bs-info-text-emphasis)}.alert-warning{--bs-alert-color:var(--bs-warning-text-emphasis);--bs-alert-bg:var(--bs-warning-bg-subtle);--bs-alert-border-color:var(--bs-warning-border-subtle);--bs-alert-link-color:var(--bs-warning-text-emphasis)}.alert-danger{--bs-alert-color:var(--bs-danger-text-emphasis);--bs-alert-bg:var(--bs-danger-bg-subtle);--bs-alert-border-color:var(--bs-danger-border-subtle);--bs-alert-link-color:var(--bs-danger-text-emphasis)}.alert-light{--bs-alert-color:var(--bs-light-text-emphasis);--bs-alert-bg:var(--bs-light-bg-subtle);--bs-alert-border-color:var(--bs-light-border-subtle);--bs-alert-link-color:var(--bs-light-text-emphasis)}.alert-dark{--bs-alert-color:var(--bs-dark-text-emphasis);--bs-alert-bg:var(--bs-dark-bg-subtle);--bs-alert-border-color:var(--bs-dark-border-subtle);--bs-alert-link-color:var(--bs-dark-text-emphasis)}@keyframes progress-bar-stripes{0%{background-position-x:1rem}}.progress,.progress-stacked{--bs-progress-height:1rem;--bs-progress-font-size:.75rem;--bs-progress-bg:var(--bs-secondary-bg);--bs-progress-border-radius:var(--bs-border-radius);--bs-progress-box-shadow:var(--bs-box-shadow-inset);--bs-progress-bar-color:#fff;--bs-progress-bar-bg:#0d6efd;--bs-progress-bar-transition:width .6s ease;display:flex;height:var(--bs-progress-height);overflow:hidden;font-size:var(--bs-progress-font-size);background-color:var(--bs-progress-bg);border-radius:var(--bs-progress-border-radius)}.progress-bar{display:flex;flex-direction:column;justify-content:center;overflow:hidden;color:var(--bs-progress-bar-color);text-align:center;white-space:nowrap;background-color:var(--bs-progress-bar-bg);transition:var(--bs-progress-bar-transition)}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:var(--bs-progress-height) var(--bs-progress-height)}.list-group{--bs-list-group-color:var(--bs-body-color);--bs-list-group-bg:var(--bs-body-bg);--bs-list-group-border-color:var(--bs-border-color);--bs-list-group-border-width:var(--bs-border-width);--bs-list-group-border-radius:var(--bs-border-radius);--bs-list-group-item-padding-x:1rem;--bs-list-group-item-padding-y:.5rem;--bs-list-group-action-color:var(--bs-secondary-color);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-tertiary-bg);--bs-list-group-action-active-color:var(--bs-body-color);--bs-list-group-action-active-bg:var(--bs-secondary-bg);--bs-list-group-disabled-color:var(--bs-secondary-color);--bs-list-group-disabled-bg:var(--bs-body-bg);--bs-list-group-active-color:#fff;--bs-list-group-active-bg:#0d6efd;--bs-list-group-active-border-color:#0d6efd;display:flex;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:var(--bs-list-group-border-radius)}.list-group-item-action{width:100%;color:var(--bs-list-group-action-color);text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:var(--bs-list-group-action-hover-color);text-decoration:none;background-color:var(--bs-list-group-action-hover-bg)}.list-group-item-action:active{color:var(--bs-list-group-action-active-color);background-color:var(--bs-list-group-action-active-bg)}.list-group-item{position:relative;display:block;padding:var(--bs-list-group-item-padding-y) var(--bs-list-group-item-padding-x);color:var(--bs-list-group-color);text-decoration:none;background-color:var(--bs-list-group-bg);border:var(--bs-list-group-border-width) solid var(--bs-list-group-border-color)}.list-group-item.disabled,.list-group-item:disabled{color:var(--bs-list-group-disabled-color);pointer-events:none;background-color:var(--bs-list-group-disabled-bg)}.list-group-item.active{z-index:2;color:var(--bs-list-group-active-color);background-color:var(--bs-list-group-active-bg);border-color:var(--bs-list-group-active-border-color)}.list-group-item+.list-group-item.active{margin-top:calc(-1 * var(--bs-list-group-border-width));border-top-width:var(--bs-list-group-border-width)}.list-group-horizontal>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}@media (min-width:576px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media (min-width:768px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media (min-width:992px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media (min-width:1200px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media (min-width:1400px){.list-group-horizontal-xxl{flex-direction:row}.list-group-horizontal-xxl>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-xxl>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-xxl>.list-group-item.active{margin-top:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}.list-group-flush>.list-group-item{border-width:0 0 var(--bs-list-group-border-width)}.list-group-item-primary{--bs-list-group-color:var(--bs-primary-text-emphasis);--bs-list-group-bg:var(--bs-primary-bg-subtle);--bs-list-group-border-color:var(--bs-primary-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-primary-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-primary-border-subtle);--bs-list-group-active-color:var(--bs-primary-bg-subtle);--bs-list-group-active-bg:var(--bs-primary-text-emphasis);--bs-list-group-active-border-color:var(--bs-primary-text-emphasis)}.list-group-item-secondary{--bs-list-group-color:var(--bs-secondary-text-emphasis);--bs-list-group-bg:var(--bs-secondary-bg-subtle);--bs-list-group-border-color:var(--bs-secondary-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-secondary-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-secondary-border-subtle);--bs-list-group-active-color:var(--bs-secondary-bg-subtle);--bs-list-group-active-bg:var(--bs-secondary-text-emphasis);--bs-list-group-active-border-color:var(--bs-secondary-text-emphasis)}.list-group-item-success{--bs-list-group-color:var(--bs-success-text-emphasis);--bs-list-group-bg:var(--bs-success-bg-subtle);--bs-list-group-border-color:var(--bs-success-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-success-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-success-border-subtle);--bs-list-group-active-color:var(--bs-success-bg-subtle);--bs-list-group-active-bg:var(--bs-success-text-emphasis);--bs-list-group-active-border-color:var(--bs-success-text-emphasis)}.list-group-item-info{--bs-list-group-color:var(--bs-info-text-emphasis);--bs-list-group-bg:var(--bs-info-bg-subtle);--bs-list-group-border-color:var(--bs-info-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-info-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-info-border-subtle);--bs-list-group-active-color:var(--bs-info-bg-subtle);--bs-list-group-active-bg:var(--bs-info-text-emphasis);--bs-list-group-active-border-color:var(--bs-info-text-emphasis)}.list-group-item-warning{--bs-list-group-color:var(--bs-warning-text-emphasis);--bs-list-group-bg:var(--bs-warning-bg-subtle);--bs-list-group-border-color:var(--bs-warning-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-warning-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-warning-border-subtle);--bs-list-group-active-color:var(--bs-warning-bg-subtle);--bs-list-group-active-bg:var(--bs-warning-text-emphasis);--bs-list-group-active-border-color:var(--bs-warning-text-emphasis)}.list-group-item-danger{--bs-list-group-color:var(--bs-danger-text-emphasis);--bs-list-group-bg:var(--bs-danger-bg-subtle);--bs-list-group-border-color:var(--bs-danger-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-danger-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-danger-border-subtle);--bs-list-group-active-color:var(--bs-danger-bg-subtle);--bs-list-group-active-bg:var(--bs-danger-text-emphasis);--bs-list-group-active-border-color:var(--bs-danger-text-emphasis)}.list-group-item-light{--bs-list-group-color:var(--bs-light-text-emphasis);--bs-list-group-bg:var(--bs-light-bg-subtle);--bs-list-group-border-color:var(--bs-light-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-light-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-light-border-subtle);--bs-list-group-active-color:var(--bs-light-bg-subtle);--bs-list-group-active-bg:var(--bs-light-text-emphasis);--bs-list-group-active-border-color:var(--bs-light-text-emphasis)}.list-group-item-dark{--bs-list-group-color:var(--bs-dark-text-emphasis);--bs-list-group-bg:var(--bs-dark-bg-subtle);--bs-list-group-border-color:var(--bs-dark-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-dark-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-dark-border-subtle);--bs-list-group-active-color:var(--bs-dark-bg-subtle);--bs-list-group-active-bg:var(--bs-dark-text-emphasis);--bs-list-group-active-border-color:var(--bs-dark-text-emphasis)}.btn-close{--bs-btn-close-color:#000;--bs-btn-close-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/%3e%3c/svg%3e");--bs-btn-close-opacity:.5;--bs-btn-close-hover-opacity:.75;--bs-btn-close-focus-shadow:0 0 0 .25rem rgba(13, 110, 253, .25);--bs-btn-close-focus-opacity:1;--bs-btn-close-disabled-opacity:.25;--bs-btn-close-white-filter:invert(1) grayscale(100%) brightness(200%);box-sizing:content-box;width:1em;height:1em;padding:.25em;color:var(--bs-btn-close-color);background:transparent var(--bs-btn-close-bg) center/1em auto no-repeat;border:0;border-radius:.375rem;opacity:var(--bs-btn-close-opacity)}.btn-close:hover{color:var(--bs-btn-close-color);text-decoration:none;opacity:var(--bs-btn-close-hover-opacity)}.btn-close:focus{outline:0;box-shadow:var(--bs-btn-close-focus-shadow);opacity:var(--bs-btn-close-focus-opacity)}.btn-close.disabled,.btn-close:disabled{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;opacity:var(--bs-btn-close-disabled-opacity)}.btn-close-white,[data-bs-theme=dark] .btn-close{filter:var(--bs-btn-close-white-filter)}.toast{--bs-toast-zindex:1090;--bs-toast-padding-x:.75rem;--bs-toast-padding-y:.5rem;--bs-toast-spacing:1.5rem;--bs-toast-max-width:350px;--bs-toast-font-size:.875rem;--bs-toast-color: ;--bs-toast-bg:rgba(var(--bs-body-bg-rgb), .85);--bs-toast-border-width:var(--bs-border-width);--bs-toast-border-color:var(--bs-border-color-translucent);--bs-toast-border-radius:var(--bs-border-radius);--bs-toast-box-shadow:var(--bs-box-shadow);--bs-toast-header-color:var(--bs-secondary-color);--bs-toast-header-bg:rgba(var(--bs-body-bg-rgb), .85);--bs-toast-header-border-color:var(--bs-border-color-translucent);width:var(--bs-toast-max-width);max-width:100%;font-size:var(--bs-toast-font-size);color:var(--bs-toast-color);pointer-events:auto;background-color:var(--bs-toast-bg);background-clip:padding-box;border:var(--bs-toast-border-width) solid var(--bs-toast-border-color);box-shadow:var(--bs-toast-box-shadow);border-radius:var(--bs-toast-border-radius)}.toast-container{--bs-toast-zindex:1090;position:absolute;z-index:var(--bs-toast-zindex);width:-webkit-max-content;width:-moz-max-content;width:max-content;max-width:100%;pointer-events:none}.toast-container>:not(:last-child){margin-bottom:var(--bs-toast-spacing)}.toast-header{display:flex;align-items:center;padding:var(--bs-toast-padding-y) var(--bs-toast-padding-x);color:var(--bs-toast-header-color);background-color:var(--bs-toast-header-bg);background-clip:padding-box;border-bottom:var(--bs-toast-border-width) solid var(--bs-toast-header-border-color);border-top-left-radius:calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width));border-top-right-radius:calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width))}.toast-header .btn-close{margin-right:calc(-.5 * var(--bs-toast-padding-x));margin-left:var(--bs-toast-padding-x)}.toast-body{padding:var(--bs-toast-padding-x);word-wrap:break-word}.modal{--bs-modal-zindex:1055;--bs-modal-width:500px;--bs-modal-padding:1rem;--bs-modal-margin:.5rem;--bs-modal-color: ;--bs-modal-bg:var(--bs-body-bg);--bs-modal-border-color:var(--bs-border-color-translucent);--bs-modal-border-width:var(--bs-border-width);--bs-modal-border-radius:var(--bs-border-radius-lg);--bs-modal-box-shadow:var(--bs-box-shadow-sm);--bs-modal-inner-border-radius:calc(var(--bs-border-radius-lg) - (var(--bs-border-width)));--bs-modal-header-padding-x:1rem;--bs-modal-header-padding-y:1rem;--bs-modal-header-padding:1rem 1rem;--bs-modal-header-border-color:var(--bs-border-color);--bs-modal-header-border-width:var(--bs-border-width);--bs-modal-title-line-height:1.5;--bs-modal-footer-gap:.5rem;--bs-modal-footer-bg: ;--bs-modal-footer-border-color:var(--bs-border-color);--bs-modal-footer-border-width:var(--bs-border-width);position:fixed;top:0;left:0;z-index:var(--bs-modal-zindex);display:none;width:100%;height:100%;overflow-x:hidden;overflow-y:auto;outline:0}.modal-dialog{position:relative;width:auto;margin:var(--bs-modal-margin);pointer-events:none}.modal.fade .modal-dialog{transition:transform .3s ease-out;transform:translateY(-50px)}.modal-dialog-scrollable{height:calc(100% - var(--bs-modal-margin) * 2)}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - var(--bs-modal-margin) * 2)}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;color:var(--bs-modal-color);pointer-events:auto;background-color:var(--bs-modal-bg);background-clip:padding-box;border:var(--bs-modal-border-width) solid var(--bs-modal-border-color);border-radius:var(--bs-modal-border-radius);outline:0}.modal-backdrop{--bs-backdrop-zindex:1050;--bs-backdrop-bg:#000;--bs-backdrop-opacity:.5;position:fixed;top:0;left:0;z-index:var(--bs-backdrop-zindex);width:100vw;height:100vh;background-color:var(--bs-backdrop-bg)}.modal-backdrop.show{opacity:var(--bs-backdrop-opacity)}.modal-header{display:flex;flex-shrink:0;align-items:center;padding:var(--bs-modal-header-padding);border-bottom:var(--bs-modal-header-border-width) solid var(--bs-modal-header-border-color);border-top-left-radius:var(--bs-modal-inner-border-radius);border-top-right-radius:var(--bs-modal-inner-border-radius)}.modal-header .btn-close{padding:calc(var(--bs-modal-header-padding-y) * .5) calc(var(--bs-modal-header-padding-x) * .5);margin:calc(-.5 * var(--bs-modal-header-padding-y)) calc(-.5 * var(--bs-modal-header-padding-x)) calc(-.5 * var(--bs-modal-header-padding-y)) auto}.modal-title{margin-bottom:0;line-height:var(--bs-modal-title-line-height)}.modal-body{position:relative;flex:1 1 auto;padding:var(--bs-modal-padding)}.modal-footer{display:flex;flex-shrink:0;flex-wrap:wrap;align-items:center;justify-content:flex-end;padding:calc(var(--bs-modal-padding) - var(--bs-modal-footer-gap) * .5);background-color:var(--bs-modal-footer-bg);border-top:var(--bs-modal-footer-border-width) solid var(--bs-modal-footer-border-color);border-bottom-right-radius:var(--bs-modal-inner-border-radius);border-bottom-left-radius:var(--bs-modal-inner-border-radius)}.modal-footer>*{margin:calc(var(--bs-modal-footer-gap) * .5)}@media (min-width:576px){.modal{--bs-modal-margin:1.75rem;--bs-modal-box-shadow:var(--bs-box-shadow)}.modal-dialog{max-width:var(--bs-modal-width);margin-right:auto;margin-left:auto}.modal-sm{--bs-modal-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{--bs-modal-width:800px}}@media (min-width:1200px){.modal-xl{--bs-modal-width:1140px}}.tooltip{--bs-tooltip-zindex:1080;--bs-tooltip-max-width:200px;--bs-tooltip-padding-x:.5rem;--bs-tooltip-padding-y:.25rem;--bs-tooltip-margin: ;--bs-tooltip-font-size:.875rem;--bs-tooltip-color:var(--bs-body-bg);--bs-tooltip-bg:var(--bs-emphasis-color);--bs-tooltip-border-radius:var(--bs-border-radius);--bs-tooltip-opacity:.9;--bs-tooltip-arrow-width:.8rem;--bs-tooltip-arrow-height:.4rem;z-index:var(--bs-tooltip-zindex);display:block;margin:var(--bs-tooltip-margin);font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;white-space:normal;word-spacing:normal;line-break:auto;font-size:var(--bs-tooltip-font-size);word-wrap:break-word;opacity:0}.tooltip.show{opacity:var(--bs-tooltip-opacity)}.tooltip .tooltip-arrow{display:block;width:var(--bs-tooltip-arrow-width);height:var(--bs-tooltip-arrow-height)}.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow,.bs-tooltip-top .tooltip-arrow{bottom:calc(-1 * var(--bs-tooltip-arrow-height))}.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow:before,.bs-tooltip-top .tooltip-arrow:before{top:-1px;border-width:var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * .5) 0;border-top-color:var(--bs-tooltip-bg)}.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow,.bs-tooltip-end .tooltip-arrow{left:calc(-1 * var(--bs-tooltip-arrow-height));width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow:before,.bs-tooltip-end .tooltip-arrow:before{right:-1px;border-width:calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * .5) 0;border-right-color:var(--bs-tooltip-bg)}.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow,.bs-tooltip-bottom .tooltip-arrow{top:calc(-1 * var(--bs-tooltip-arrow-height))}.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow:before,.bs-tooltip-bottom .tooltip-arrow:before{bottom:-1px;border-width:0 calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height);border-bottom-color:var(--bs-tooltip-bg)}.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow,.bs-tooltip-start .tooltip-arrow{right:calc(-1 * var(--bs-tooltip-arrow-height));width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow:before,.bs-tooltip-start .tooltip-arrow:before{left:-1px;border-width:calc(var(--bs-tooltip-arrow-width) * .5) 0 calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height);border-left-color:var(--bs-tooltip-bg)}.tooltip-inner{max-width:var(--bs-tooltip-max-width);padding:var(--bs-tooltip-padding-y) var(--bs-tooltip-padding-x);color:var(--bs-tooltip-color);text-align:center;background-color:var(--bs-tooltip-bg);border-radius:var(--bs-tooltip-border-radius)}.popover{--bs-popover-zindex:1070;--bs-popover-max-width:276px;--bs-popover-font-size:.875rem;--bs-popover-bg:var(--bs-body-bg);--bs-popover-border-width:var(--bs-border-width);--bs-popover-border-color:var(--bs-border-color-translucent);--bs-popover-border-radius:var(--bs-border-radius-lg);--bs-popover-inner-border-radius:calc(var(--bs-border-radius-lg) - var(--bs-border-width));--bs-popover-box-shadow:var(--bs-box-shadow);--bs-popover-header-padding-x:1rem;--bs-popover-header-padding-y:.5rem;--bs-popover-header-font-size:1rem;--bs-popover-header-color:inherit;--bs-popover-header-bg:var(--bs-secondary-bg);--bs-popover-body-padding-x:1rem;--bs-popover-body-padding-y:1rem;--bs-popover-body-color:var(--bs-body-color);--bs-popover-arrow-width:1rem;--bs-popover-arrow-height:.5rem;--bs-popover-arrow-border:var(--bs-popover-border-color);z-index:var(--bs-popover-zindex);display:block;max-width:var(--bs-popover-max-width);font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;white-space:normal;word-spacing:normal;line-break:auto;font-size:var(--bs-popover-font-size);word-wrap:break-word;background-color:var(--bs-popover-bg);background-clip:padding-box;border:var(--bs-popover-border-width) solid var(--bs-popover-border-color);border-radius:var(--bs-popover-border-radius)}.popover .popover-arrow{display:block;width:var(--bs-popover-arrow-width);height:var(--bs-popover-arrow-height)}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow,.bs-popover-top>.popover-arrow{bottom:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width))}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow:after,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow:before,.bs-popover-top>.popover-arrow:after,.bs-popover-top>.popover-arrow:before{border-width:var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * .5) 0}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow:before,.bs-popover-top>.popover-arrow:before{bottom:0;border-top-color:var(--bs-popover-arrow-border)}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow:after,.bs-popover-top>.popover-arrow:after{bottom:var(--bs-popover-border-width);border-top-color:var(--bs-popover-bg)}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow,.bs-popover-end>.popover-arrow{left:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));width:var(--bs-popover-arrow-height);height:var(--bs-popover-arrow-width)}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow:after,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow:before,.bs-popover-end>.popover-arrow:after,.bs-popover-end>.popover-arrow:before{border-width:calc(var(--bs-popover-arrow-width) * .5) var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * .5) 0}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow:before,.bs-popover-end>.popover-arrow:before{left:0;border-right-color:var(--bs-popover-arrow-border)}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow:after,.bs-popover-end>.popover-arrow:after{left:var(--bs-popover-border-width);border-right-color:var(--bs-popover-bg)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow,.bs-popover-bottom>.popover-arrow{top:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width))}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow:after,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow:before,.bs-popover-bottom>.popover-arrow:after,.bs-popover-bottom>.popover-arrow:before{border-width:0 calc(var(--bs-popover-arrow-width) * .5) var(--bs-popover-arrow-height)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow:before,.bs-popover-bottom>.popover-arrow:before{top:0;border-bottom-color:var(--bs-popover-arrow-border)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow:after,.bs-popover-bottom>.popover-arrow:after{top:var(--bs-popover-border-width);border-bottom-color:var(--bs-popover-bg)}.bs-popover-auto[data-popper-placement^=bottom] .popover-header:before,.bs-popover-bottom .popover-header:before{position:absolute;top:0;left:50%;display:block;width:var(--bs-popover-arrow-width);margin-left:calc(-.5 * var(--bs-popover-arrow-width));content:"";border-bottom:var(--bs-popover-border-width) solid var(--bs-popover-header-bg)}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow,.bs-popover-start>.popover-arrow{right:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));width:var(--bs-popover-arrow-height);height:var(--bs-popover-arrow-width)}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow:after,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow:before,.bs-popover-start>.popover-arrow:after,.bs-popover-start>.popover-arrow:before{border-width:calc(var(--bs-popover-arrow-width) * .5) 0 calc(var(--bs-popover-arrow-width) * .5) var(--bs-popover-arrow-height)}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow:before,.bs-popover-start>.popover-arrow:before{right:0;border-left-color:var(--bs-popover-arrow-border)}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow:after,.bs-popover-start>.popover-arrow:after{right:var(--bs-popover-border-width);border-left-color:var(--bs-popover-bg)}.popover-header{padding:var(--bs-popover-header-padding-y) var(--bs-popover-header-padding-x);margin-bottom:0;font-size:var(--bs-popover-header-font-size);color:var(--bs-popover-header-color);background-color:var(--bs-popover-header-bg);border-bottom:var(--bs-popover-border-width) solid var(--bs-popover-border-color);border-top-left-radius:var(--bs-popover-inner-border-radius);border-top-right-radius:var(--bs-popover-inner-border-radius)}.popover-body{padding:var(--bs-popover-body-padding-y) var(--bs-popover-body-padding-x);color:var(--bs-popover-body-color)}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:2rem;height:2rem;background-repeat:no-repeat;background-position:50%;background-size:100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e")}.spinner-border,.spinner-grow{display:inline-block;width:var(--bs-spinner-width);height:var(--bs-spinner-height);vertical-align:var(--bs-spinner-vertical-align);border-radius:50%;animation:var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name)}.spinner-border{--bs-spinner-width:2rem;--bs-spinner-height:2rem;--bs-spinner-vertical-align:-.125em;--bs-spinner-border-width:.25em;--bs-spinner-animation-speed:.75s;--bs-spinner-animation-name:spinner-border;border:var(--bs-spinner-border-width) solid currentcolor;border-right-color:transparent}.spinner-border-sm{--bs-spinner-width:1rem;--bs-spinner-height:1rem;--bs-spinner-border-width:.2em}.spinner-grow{--bs-spinner-width:2rem;--bs-spinner-height:2rem;--bs-spinner-vertical-align:-.125em;--bs-spinner-animation-speed:.75s;--bs-spinner-animation-name:spinner-grow;background-color:currentcolor;opacity:0}.spinner-grow-sm{--bs-spinner-width:1rem;--bs-spinner-height:1rem}@media (prefers-reduced-motion:reduce){.spinner-border,.spinner-grow{--bs-spinner-animation-speed:1.5s}}.offcanvas,.offcanvas-lg,.offcanvas-md,.offcanvas-sm,.offcanvas-xl,.offcanvas-xxl{--bs-offcanvas-zindex:1045;--bs-offcanvas-width:400px;--bs-offcanvas-height:30vh;--bs-offcanvas-padding-x:1rem;--bs-offcanvas-padding-y:1rem;--bs-offcanvas-color:var(--bs-body-color);--bs-offcanvas-bg:var(--bs-body-bg);--bs-offcanvas-border-width:var(--bs-border-width);--bs-offcanvas-border-color:var(--bs-border-color-translucent);--bs-offcanvas-box-shadow:var(--bs-box-shadow-sm);--bs-offcanvas-transition:transform .3s ease-in-out;--bs-offcanvas-title-line-height:1.5}@media (max-width:575.98px){.offcanvas-sm{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media (max-width:575.98px){.offcanvas-sm.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translate(-100%)}.offcanvas-sm.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translate(100%)}.offcanvas-sm.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-sm.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-sm.show:not(.hiding),.offcanvas-sm.showing{transform:none}.offcanvas-sm.hiding,.offcanvas-sm.show,.offcanvas-sm.showing{visibility:visible}}@media (min-width:576px){.offcanvas-sm{--bs-offcanvas-height:auto;--bs-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-sm .offcanvas-header{display:none}.offcanvas-sm .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent!important}}@media (max-width:767.98px){.offcanvas-md{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media (max-width:767.98px){.offcanvas-md.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translate(-100%)}.offcanvas-md.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translate(100%)}.offcanvas-md.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-md.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-md.show:not(.hiding),.offcanvas-md.showing{transform:none}.offcanvas-md.hiding,.offcanvas-md.show,.offcanvas-md.showing{visibility:visible}}@media (min-width:768px){.offcanvas-md{--bs-offcanvas-height:auto;--bs-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-md .offcanvas-header{display:none}.offcanvas-md .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent!important}}@media (max-width:991.98px){.offcanvas-lg{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media (max-width:991.98px){.offcanvas-lg.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translate(-100%)}.offcanvas-lg.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translate(100%)}.offcanvas-lg.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-lg.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-lg.show:not(.hiding),.offcanvas-lg.showing{transform:none}.offcanvas-lg.hiding,.offcanvas-lg.show,.offcanvas-lg.showing{visibility:visible}}@media (min-width:992px){.offcanvas-lg{--bs-offcanvas-height:auto;--bs-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-lg .offcanvas-header{display:none}.offcanvas-lg .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent!important}}@media (max-width:1199.98px){.offcanvas-xl{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media (max-width:1199.98px){.offcanvas-xl.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translate(-100%)}.offcanvas-xl.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translate(100%)}.offcanvas-xl.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-xl.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-xl.show:not(.hiding),.offcanvas-xl.showing{transform:none}.offcanvas-xl.hiding,.offcanvas-xl.show,.offcanvas-xl.showing{visibility:visible}}@media (min-width:1200px){.offcanvas-xl{--bs-offcanvas-height:auto;--bs-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-xl .offcanvas-header{display:none}.offcanvas-xl .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent!important}}@media (max-width:1399.98px){.offcanvas-xxl{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media (max-width:1399.98px){.offcanvas-xxl.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translate(-100%)}.offcanvas-xxl.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translate(100%)}.offcanvas-xxl.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-xxl.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-xxl.show:not(.hiding),.offcanvas-xxl.showing{transform:none}.offcanvas-xxl.hiding,.offcanvas-xxl.show,.offcanvas-xxl.showing{visibility:visible}}@media (min-width:1400px){.offcanvas-xxl{--bs-offcanvas-height:auto;--bs-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-xxl .offcanvas-header{display:none}.offcanvas-xxl .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent!important}}.offcanvas{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}.offcanvas.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translate(-100%)}.offcanvas.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translate(100%)}.offcanvas.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.offcanvas-backdrop.show{opacity:.5}.offcanvas-header{display:flex;align-items:center;padding:var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x)}.offcanvas-header .btn-close{padding:calc(var(--bs-offcanvas-padding-y) * .5) calc(var(--bs-offcanvas-padding-x) * .5);margin:calc(-.5 * var(--bs-offcanvas-padding-y)) calc(-.5 * var(--bs-offcanvas-padding-x)) calc(-.5 * var(--bs-offcanvas-padding-y)) auto}.offcanvas-title{margin-bottom:0;line-height:var(--bs-offcanvas-title-line-height)}.offcanvas-body{flex-grow:1;padding:var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x);overflow-y:auto}.placeholder{display:inline-block;min-height:1em;vertical-align:middle;cursor:wait;background-color:currentcolor;opacity:.5}@keyframes placeholder-glow{50%{opacity:.2}}.placeholder-wave{-webkit-mask-image:linear-gradient(130deg,#000 55%,rgba(0,0,0,.8) 75%,#000 95%);mask-image:linear-gradient(130deg,#000 55%,#000c,#000 95%);-webkit-mask-size:200% 100%;mask-size:200% 100%;animation:placeholder-wave 2s linear infinite}@keyframes placeholder-wave{to{-webkit-mask-position:-200% 0%;mask-position:-200% 0%}}.text-bg-primary{color:#fff!important;background-color:RGBA(var(--bs-primary-rgb),var(--bs-bg-opacity,1))!important}.text-bg-secondary{color:#fff!important;background-color:RGBA(var(--bs-secondary-rgb),var(--bs-bg-opacity,1))!important}.text-bg-success{color:#fff!important;background-color:RGBA(var(--bs-success-rgb),var(--bs-bg-opacity,1))!important}.text-bg-info{color:#000!important;background-color:RGBA(var(--bs-info-rgb),var(--bs-bg-opacity,1))!important}.text-bg-warning{color:#000!important;background-color:RGBA(var(--bs-warning-rgb),var(--bs-bg-opacity,1))!important}.text-bg-danger{color:#fff!important;background-color:RGBA(var(--bs-danger-rgb),var(--bs-bg-opacity,1))!important}.text-bg-light{color:#000!important;background-color:RGBA(var(--bs-light-rgb),var(--bs-bg-opacity,1))!important}.text-bg-dark{color:#fff!important;background-color:RGBA(var(--bs-dark-rgb),var(--bs-bg-opacity,1))!important}.link-primary{color:RGBA(var(--bs-primary-rgb),var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--bs-primary-rgb),var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--bs-primary-rgb),var(--bs-link-underline-opacity,1))!important}.link-primary:focus,.link-primary:hover{color:RGBA(10,88,202,var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(10,88,202,var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(10,88,202,var(--bs-link-underline-opacity,1))!important}.link-secondary{color:RGBA(var(--bs-secondary-rgb),var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--bs-secondary-rgb),var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--bs-secondary-rgb),var(--bs-link-underline-opacity,1))!important}.link-secondary:focus,.link-secondary:hover{color:RGBA(86,94,100,var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(86,94,100,var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(86,94,100,var(--bs-link-underline-opacity,1))!important}.link-success{color:RGBA(var(--bs-success-rgb),var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--bs-success-rgb),var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--bs-success-rgb),var(--bs-link-underline-opacity,1))!important}.link-success:focus,.link-success:hover{color:RGBA(20,108,67,var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(20,108,67,var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(20,108,67,var(--bs-link-underline-opacity,1))!important}.link-info{color:RGBA(var(--bs-info-rgb),var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--bs-info-rgb),var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--bs-info-rgb),var(--bs-link-underline-opacity,1))!important}.link-info:focus,.link-info:hover{color:RGBA(61,213,243,var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(61,213,243,var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(61,213,243,var(--bs-link-underline-opacity,1))!important}.link-warning{color:RGBA(var(--bs-warning-rgb),var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--bs-warning-rgb),var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--bs-warning-rgb),var(--bs-link-underline-opacity,1))!important}.link-warning:focus,.link-warning:hover{color:RGBA(255,205,57,var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(255,205,57,var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(255,205,57,var(--bs-link-underline-opacity,1))!important}.link-danger{color:RGBA(var(--bs-danger-rgb),var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--bs-danger-rgb),var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--bs-danger-rgb),var(--bs-link-underline-opacity,1))!important}.link-danger:focus,.link-danger:hover{color:RGBA(176,42,55,var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(176,42,55,var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(176,42,55,var(--bs-link-underline-opacity,1))!important}.link-light{color:RGBA(var(--bs-light-rgb),var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--bs-light-rgb),var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--bs-light-rgb),var(--bs-link-underline-opacity,1))!important}.link-light:focus,.link-light:hover{color:RGBA(249,250,251,var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(249,250,251,var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(249,250,251,var(--bs-link-underline-opacity,1))!important}.link-dark{color:RGBA(var(--bs-dark-rgb),var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--bs-dark-rgb),var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--bs-dark-rgb),var(--bs-link-underline-opacity,1))!important}.link-dark:focus,.link-dark:hover{color:RGBA(26,30,33,var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(26,30,33,var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(26,30,33,var(--bs-link-underline-opacity,1))!important}.link-body-emphasis{color:RGBA(var(--bs-emphasis-color-rgb),var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--bs-emphasis-color-rgb),var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--bs-emphasis-color-rgb),var(--bs-link-underline-opacity,1))!important}.link-body-emphasis:focus,.link-body-emphasis:hover{color:RGBA(var(--bs-emphasis-color-rgb),var(--bs-link-opacity,.75))!important;-webkit-text-decoration-color:RGBA(var(--bs-emphasis-color-rgb),var(--bs-link-underline-opacity,.75))!important;text-decoration-color:RGBA(var(--bs-emphasis-color-rgb),var(--bs-link-underline-opacity,.75))!important}.focus-ring:focus{outline:0;box-shadow:var(--bs-focus-ring-x,0) var(--bs-focus-ring-y,0) var(--bs-focus-ring-blur,0) var(--bs-focus-ring-width) var(--bs-focus-ring-color)}.icon-link{display:inline-flex;gap:.375rem;align-items:center;-webkit-text-decoration-color:rgba(var(--bs-link-color-rgb),var(--bs-link-opacity,.5));text-decoration-color:rgba(var(--bs-link-color-rgb),var(--bs-link-opacity,.5));text-underline-offset:.25em;-webkit-backface-visibility:hidden;backface-visibility:hidden}.icon-link-hover:focus-visible>.bi,.icon-link-hover:hover>.bi{transform:var(--bs-icon-link-transform,translate3d(.25em,0,0))}.ratio:before{display:block;padding-top:var(--bs-aspect-ratio);content:""}.ratio-1x1{--bs-aspect-ratio:100%}.ratio-4x3{--bs-aspect-ratio:75%}.ratio-16x9{--bs-aspect-ratio:56.25%}.ratio-21x9{--bs-aspect-ratio:42.8571428571%}.vr{display:inline-block;align-self:stretch;width:var(--bs-border-width);min-height:1em;background-color:currentcolor;opacity:.25}.shadow{box-shadow:var(--bs-box-shadow)!important}.shadow-sm{box-shadow:var(--bs-box-shadow-sm)!important}.shadow-lg{box-shadow:var(--bs-box-shadow-lg)!important}.focus-ring-primary{--bs-focus-ring-color:rgba(var(--bs-primary-rgb), var(--bs-focus-ring-opacity))}.focus-ring-secondary{--bs-focus-ring-color:rgba(var(--bs-secondary-rgb), var(--bs-focus-ring-opacity))}.focus-ring-success{--bs-focus-ring-color:rgba(var(--bs-success-rgb), var(--bs-focus-ring-opacity))}.focus-ring-info{--bs-focus-ring-color:rgba(var(--bs-info-rgb), var(--bs-focus-ring-opacity))}.focus-ring-warning{--bs-focus-ring-color:rgba(var(--bs-warning-rgb), var(--bs-focus-ring-opacity))}.focus-ring-danger{--bs-focus-ring-color:rgba(var(--bs-danger-rgb), var(--bs-focus-ring-opacity))}.focus-ring-light{--bs-focus-ring-color:rgba(var(--bs-light-rgb), var(--bs-focus-ring-opacity))}.focus-ring-dark{--bs-focus-ring-color:rgba(var(--bs-dark-rgb), var(--bs-focus-ring-opacity))}.border{border:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-top{border-top:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-end{border-right:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-bottom{border-bottom:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-start{border-left:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-primary{--bs-border-opacity:1;border-color:rgba(var(--bs-primary-rgb),var(--bs-border-opacity))!important}.border-secondary{--bs-border-opacity:1;border-color:rgba(var(--bs-secondary-rgb),var(--bs-border-opacity))!important}.border-success{--bs-border-opacity:1;border-color:rgba(var(--bs-success-rgb),var(--bs-border-opacity))!important}.border-info{--bs-border-opacity:1;border-color:rgba(var(--bs-info-rgb),var(--bs-border-opacity))!important}.border-warning{--bs-border-opacity:1;border-color:rgba(var(--bs-warning-rgb),var(--bs-border-opacity))!important}.border-danger{--bs-border-opacity:1;border-color:rgba(var(--bs-danger-rgb),var(--bs-border-opacity))!important}.border-light{--bs-border-opacity:1;border-color:rgba(var(--bs-light-rgb),var(--bs-border-opacity))!important}.border-dark{--bs-border-opacity:1;border-color:rgba(var(--bs-dark-rgb),var(--bs-border-opacity))!important}.border-black{--bs-border-opacity:1;border-color:rgba(var(--bs-black-rgb),var(--bs-border-opacity))!important}.border-white{--bs-border-opacity:1;border-color:rgba(var(--bs-white-rgb),var(--bs-border-opacity))!important}.border-primary-subtle{border-color:var(--bs-primary-border-subtle)!important}.border-secondary-subtle{border-color:var(--bs-secondary-border-subtle)!important}.border-success-subtle{border-color:var(--bs-success-border-subtle)!important}.border-info-subtle{border-color:var(--bs-info-border-subtle)!important}.border-warning-subtle{border-color:var(--bs-warning-border-subtle)!important}.border-danger-subtle{border-color:var(--bs-danger-border-subtle)!important}.border-light-subtle{border-color:var(--bs-light-border-subtle)!important}.border-dark-subtle{border-color:var(--bs-dark-border-subtle)!important}.border-opacity-10{--bs-border-opacity:.1}.border-opacity-25{--bs-border-opacity:.25}.border-opacity-50{--bs-border-opacity:.5}.border-opacity-75{--bs-border-opacity:.75}.border-opacity-100{--bs-border-opacity:1}.m-5{margin:3rem!important}.mx-5{margin-right:3rem!important;margin-left:3rem!important}.my-5{margin-top:3rem!important;margin-bottom:3rem!important}.mt-5{margin-top:3rem!important}.me-5{margin-right:3rem!important}.mb-5{margin-bottom:3rem!important}.ms-5{margin-left:3rem!important}.p-5{padding:3rem!important}.px-5{padding-right:3rem!important;padding-left:3rem!important}.py-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-5{padding-top:3rem!important}.pe-5{padding-right:3rem!important}.pb-5{padding-bottom:3rem!important}.ps-5{padding-left:3rem!important}.gap-5{gap:3rem!important}.row-gap-5{row-gap:3rem!important}.column-gap-5{-moz-column-gap:3rem!important;column-gap:3rem!important}.font-monospace{font-family:var(--bs-font-monospace)!important}.fs-1{font-size:calc(1.375rem + 1.5vw)!important}.fs-2{font-size:calc(1.325rem + .9vw)!important}.fs-3{font-size:calc(1.3rem + .6vw)!important}.fs-4{font-size:calc(1.275rem + .3vw)!important}.fs-5{font-size:1.25rem!important}.fs-6{font-size:1rem!important}.fw-semibold{font-weight:600!important}.fw-bold{font-weight:700!important}.lh-sm{line-height:1.25!important}.lh-base{line-height:1.5!important}.lh-lg{line-height:2!important}.text-primary{--bs-text-opacity:1;color:rgba(var(--bs-primary-rgb),var(--bs-text-opacity))!important}.text-secondary{--bs-text-opacity:1;color:rgba(var(--bs-secondary-rgb),var(--bs-text-opacity))!important}.text-success{--bs-text-opacity:1;color:rgba(var(--bs-success-rgb),var(--bs-text-opacity))!important}.text-info{--bs-text-opacity:1;color:rgba(var(--bs-info-rgb),var(--bs-text-opacity))!important}.text-warning{--bs-text-opacity:1;color:rgba(var(--bs-warning-rgb),var(--bs-text-opacity))!important}.text-danger{--bs-text-opacity:1;color:rgba(var(--bs-danger-rgb),var(--bs-text-opacity))!important}.text-light{--bs-text-opacity:1;color:rgba(var(--bs-light-rgb),var(--bs-text-opacity))!important}.text-dark{--bs-text-opacity:1;color:rgba(var(--bs-dark-rgb),var(--bs-text-opacity))!important}.text-black{--bs-text-opacity:1;color:rgba(var(--bs-black-rgb),var(--bs-text-opacity))!important}.text-white{--bs-text-opacity:1;color:rgba(var(--bs-white-rgb),var(--bs-text-opacity))!important}.text-body{--bs-text-opacity:1;color:rgba(var(--bs-body-color-rgb),var(--bs-text-opacity))!important}.text-muted{--bs-text-opacity:1;color:var(--bs-secondary-color)!important}.text-black-50{--bs-text-opacity:1;color:#00000080!important}.text-white-50{--bs-text-opacity:1;color:#ffffff80!important}.text-body-secondary{--bs-text-opacity:1;color:var(--bs-secondary-color)!important}.text-body-tertiary{--bs-text-opacity:1;color:var(--bs-tertiary-color)!important}.text-body-emphasis{--bs-text-opacity:1;color:var(--bs-emphasis-color)!important}.text-reset{--bs-text-opacity:1;color:inherit!important}.text-opacity-25{--bs-text-opacity:.25}.text-opacity-50{--bs-text-opacity:.5}.text-opacity-75{--bs-text-opacity:.75}.text-opacity-100{--bs-text-opacity:1}.text-primary-emphasis{color:var(--bs-primary-text-emphasis)!important}.text-secondary-emphasis{color:var(--bs-secondary-text-emphasis)!important}.text-success-emphasis{color:var(--bs-success-text-emphasis)!important}.text-info-emphasis{color:var(--bs-info-text-emphasis)!important}.text-warning-emphasis{color:var(--bs-warning-text-emphasis)!important}.text-danger-emphasis{color:var(--bs-danger-text-emphasis)!important}.text-light-emphasis{color:var(--bs-light-text-emphasis)!important}.text-dark-emphasis{color:var(--bs-dark-text-emphasis)!important}.link-opacity-10,.link-opacity-10-hover:hover{--bs-link-opacity:.1}.link-opacity-25,.link-opacity-25-hover:hover{--bs-link-opacity:.25}.link-opacity-50,.link-opacity-50-hover:hover{--bs-link-opacity:.5}.link-opacity-75,.link-opacity-75-hover:hover{--bs-link-opacity:.75}.link-opacity-100,.link-opacity-100-hover:hover{--bs-link-opacity:1}.link-underline-primary{--bs-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--bs-primary-rgb),var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(var(--bs-primary-rgb),var(--bs-link-underline-opacity))!important}.link-underline-secondary{--bs-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--bs-secondary-rgb),var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(var(--bs-secondary-rgb),var(--bs-link-underline-opacity))!important}.link-underline-success{--bs-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--bs-success-rgb),var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(var(--bs-success-rgb),var(--bs-link-underline-opacity))!important}.link-underline-info{--bs-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--bs-info-rgb),var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(var(--bs-info-rgb),var(--bs-link-underline-opacity))!important}.link-underline-warning{--bs-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--bs-warning-rgb),var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(var(--bs-warning-rgb),var(--bs-link-underline-opacity))!important}.link-underline-danger{--bs-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--bs-danger-rgb),var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(var(--bs-danger-rgb),var(--bs-link-underline-opacity))!important}.link-underline-light{--bs-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--bs-light-rgb),var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(var(--bs-light-rgb),var(--bs-link-underline-opacity))!important}.link-underline-dark{--bs-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--bs-dark-rgb),var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(var(--bs-dark-rgb),var(--bs-link-underline-opacity))!important}.link-underline{--bs-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--bs-link-color-rgb),var(--bs-link-underline-opacity,1))!important;text-decoration-color:rgba(var(--bs-link-color-rgb),var(--bs-link-underline-opacity,1))!important}.link-underline-opacity-0,.link-underline-opacity-0-hover:hover{--bs-link-underline-opacity:0}.link-underline-opacity-10,.link-underline-opacity-10-hover:hover{--bs-link-underline-opacity:.1}.link-underline-opacity-25,.link-underline-opacity-25-hover:hover{--bs-link-underline-opacity:.25}.link-underline-opacity-50,.link-underline-opacity-50-hover:hover{--bs-link-underline-opacity:.5}.link-underline-opacity-75,.link-underline-opacity-75-hover:hover{--bs-link-underline-opacity:.75}.link-underline-opacity-100,.link-underline-opacity-100-hover:hover{--bs-link-underline-opacity:1}.bg-primary{--bs-bg-opacity:1;background-color:rgba(var(--bs-primary-rgb),var(--bs-bg-opacity))!important}.bg-secondary{--bs-bg-opacity:1;background-color:rgba(var(--bs-secondary-rgb),var(--bs-bg-opacity))!important}.bg-success{--bs-bg-opacity:1;background-color:rgba(var(--bs-success-rgb),var(--bs-bg-opacity))!important}.bg-info{--bs-bg-opacity:1;background-color:rgba(var(--bs-info-rgb),var(--bs-bg-opacity))!important}.bg-warning{--bs-bg-opacity:1;background-color:rgba(var(--bs-warning-rgb),var(--bs-bg-opacity))!important}.bg-danger{--bs-bg-opacity:1;background-color:rgba(var(--bs-danger-rgb),var(--bs-bg-opacity))!important}.bg-light{--bs-bg-opacity:1;background-color:rgba(var(--bs-light-rgb),var(--bs-bg-opacity))!important}.bg-dark{--bs-bg-opacity:1;background-color:rgba(var(--bs-dark-rgb),var(--bs-bg-opacity))!important}.bg-black{--bs-bg-opacity:1;background-color:rgba(var(--bs-black-rgb),var(--bs-bg-opacity))!important}.bg-white{--bs-bg-opacity:1;background-color:rgba(var(--bs-white-rgb),var(--bs-bg-opacity))!important}.bg-body{--bs-bg-opacity:1;background-color:rgba(var(--bs-body-bg-rgb),var(--bs-bg-opacity))!important}.bg-transparent{--bs-bg-opacity:1;background-color:transparent!important}.bg-body-secondary{--bs-bg-opacity:1;background-color:rgba(var(--bs-secondary-bg-rgb),var(--bs-bg-opacity))!important}.bg-body-tertiary{--bs-bg-opacity:1;background-color:rgba(var(--bs-tertiary-bg-rgb),var(--bs-bg-opacity))!important}.bg-opacity-10{--bs-bg-opacity:.1}.bg-opacity-25{--bs-bg-opacity:.25}.bg-opacity-50{--bs-bg-opacity:.5}.bg-opacity-75{--bs-bg-opacity:.75}.bg-opacity-100{--bs-bg-opacity:1}.bg-primary-subtle{background-color:var(--bs-primary-bg-subtle)!important}.bg-secondary-subtle{background-color:var(--bs-secondary-bg-subtle)!important}.bg-success-subtle{background-color:var(--bs-success-bg-subtle)!important}.bg-info-subtle{background-color:var(--bs-info-bg-subtle)!important}.bg-warning-subtle{background-color:var(--bs-warning-bg-subtle)!important}.bg-danger-subtle{background-color:var(--bs-danger-bg-subtle)!important}.bg-light-subtle{background-color:var(--bs-light-bg-subtle)!important}.bg-dark-subtle{background-color:var(--bs-dark-bg-subtle)!important}.bg-gradient{background-image:var(--bs-gradient)!important}.user-select-auto{-webkit-user-select:auto!important;-moz-user-select:auto!important;user-select:auto!important}.user-select-none{-webkit-user-select:none!important;-moz-user-select:none!important;user-select:none!important}.rounded{border-radius:var(--bs-border-radius)!important}.rounded-1{border-radius:var(--bs-border-radius-sm)!important}.rounded-2{border-radius:var(--bs-border-radius)!important}.rounded-3{border-radius:var(--bs-border-radius-lg)!important}.rounded-4{border-radius:var(--bs-border-radius-xl)!important}.rounded-5{border-radius:var(--bs-border-radius-xxl)!important}.rounded-pill{border-radius:var(--bs-border-radius-pill)!important}.rounded-top{border-top-left-radius:var(--bs-border-radius)!important;border-top-right-radius:var(--bs-border-radius)!important}.rounded-top-1{border-top-left-radius:var(--bs-border-radius-sm)!important;border-top-right-radius:var(--bs-border-radius-sm)!important}.rounded-top-2{border-top-left-radius:var(--bs-border-radius)!important;border-top-right-radius:var(--bs-border-radius)!important}.rounded-top-3{border-top-left-radius:var(--bs-border-radius-lg)!important;border-top-right-radius:var(--bs-border-radius-lg)!important}.rounded-top-4{border-top-left-radius:var(--bs-border-radius-xl)!important;border-top-right-radius:var(--bs-border-radius-xl)!important}.rounded-top-5{border-top-left-radius:var(--bs-border-radius-xxl)!important;border-top-right-radius:var(--bs-border-radius-xxl)!important}.rounded-top-pill{border-top-left-radius:var(--bs-border-radius-pill)!important;border-top-right-radius:var(--bs-border-radius-pill)!important}.rounded-end{border-top-right-radius:var(--bs-border-radius)!important;border-bottom-right-radius:var(--bs-border-radius)!important}.rounded-end-1{border-top-right-radius:var(--bs-border-radius-sm)!important;border-bottom-right-radius:var(--bs-border-radius-sm)!important}.rounded-end-2{border-top-right-radius:var(--bs-border-radius)!important;border-bottom-right-radius:var(--bs-border-radius)!important}.rounded-end-3{border-top-right-radius:var(--bs-border-radius-lg)!important;border-bottom-right-radius:var(--bs-border-radius-lg)!important}.rounded-end-4{border-top-right-radius:var(--bs-border-radius-xl)!important;border-bottom-right-radius:var(--bs-border-radius-xl)!important}.rounded-end-5{border-top-right-radius:var(--bs-border-radius-xxl)!important;border-bottom-right-radius:var(--bs-border-radius-xxl)!important}.rounded-end-pill{border-top-right-radius:var(--bs-border-radius-pill)!important;border-bottom-right-radius:var(--bs-border-radius-pill)!important}.rounded-bottom{border-bottom-right-radius:var(--bs-border-radius)!important;border-bottom-left-radius:var(--bs-border-radius)!important}.rounded-bottom-1{border-bottom-right-radius:var(--bs-border-radius-sm)!important;border-bottom-left-radius:var(--bs-border-radius-sm)!important}.rounded-bottom-2{border-bottom-right-radius:var(--bs-border-radius)!important;border-bottom-left-radius:var(--bs-border-radius)!important}.rounded-bottom-3{border-bottom-right-radius:var(--bs-border-radius-lg)!important;border-bottom-left-radius:var(--bs-border-radius-lg)!important}.rounded-bottom-4{border-bottom-right-radius:var(--bs-border-radius-xl)!important;border-bottom-left-radius:var(--bs-border-radius-xl)!important}.rounded-bottom-5{border-bottom-right-radius:var(--bs-border-radius-xxl)!important;border-bottom-left-radius:var(--bs-border-radius-xxl)!important}.rounded-bottom-pill{border-bottom-right-radius:var(--bs-border-radius-pill)!important;border-bottom-left-radius:var(--bs-border-radius-pill)!important}.rounded-start{border-bottom-left-radius:var(--bs-border-radius)!important;border-top-left-radius:var(--bs-border-radius)!important}.rounded-start-1{border-bottom-left-radius:var(--bs-border-radius-sm)!important;border-top-left-radius:var(--bs-border-radius-sm)!important}.rounded-start-2{border-bottom-left-radius:var(--bs-border-radius)!important;border-top-left-radius:var(--bs-border-radius)!important}.rounded-start-3{border-bottom-left-radius:var(--bs-border-radius-lg)!important;border-top-left-radius:var(--bs-border-radius-lg)!important}.rounded-start-4{border-bottom-left-radius:var(--bs-border-radius-xl)!important;border-top-left-radius:var(--bs-border-radius-xl)!important}.rounded-start-5{border-bottom-left-radius:var(--bs-border-radius-xxl)!important;border-top-left-radius:var(--bs-border-radius-xxl)!important}.rounded-start-pill{border-bottom-left-radius:var(--bs-border-radius-pill)!important;border-top-left-radius:var(--bs-border-radius-pill)!important}@media (min-width:576px){.float-sm-start{float:left!important}.float-sm-end{float:right!important}.float-sm-none{float:none!important}.object-fit-sm-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-sm-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-sm-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-sm-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-sm-none{-o-object-fit:none!important;object-fit:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-grid{display:grid!important}.d-sm-inline-grid{display:inline-grid!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}.d-sm-none{display:none!important}.flex-sm-fill{flex:1 1 auto!important}.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.justify-content-sm-evenly{justify-content:space-evenly!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}.order-sm-first{order:-1!important}.order-sm-0{order:0!important}.order-sm-1{order:1!important}.order-sm-2{order:2!important}.order-sm-3{order:3!important}.order-sm-4{order:4!important}.order-sm-5{order:5!important}.order-sm-last{order:6!important}.m-sm-0{margin:0!important}.m-sm-1{margin:.25rem!important}.m-sm-2{margin:.5rem!important}.m-sm-3{margin:1rem!important}.m-sm-4{margin:1.5rem!important}.m-sm-5{margin:3rem!important}.m-sm-auto{margin:auto!important}.mx-sm-0{margin-right:0!important;margin-left:0!important}.mx-sm-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-sm-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-sm-3{margin-right:1rem!important;margin-left:1rem!important}.mx-sm-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-sm-5{margin-right:3rem!important;margin-left:3rem!important}.mx-sm-auto{margin-right:auto!important;margin-left:auto!important}.my-sm-0{margin-top:0!important;margin-bottom:0!important}.my-sm-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-sm-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-sm-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-sm-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-sm-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-sm-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-sm-0{margin-top:0!important}.mt-sm-1{margin-top:.25rem!important}.mt-sm-2{margin-top:.5rem!important}.mt-sm-3{margin-top:1rem!important}.mt-sm-4{margin-top:1.5rem!important}.mt-sm-5{margin-top:3rem!important}.mt-sm-auto{margin-top:auto!important}.me-sm-0{margin-right:0!important}.me-sm-1{margin-right:.25rem!important}.me-sm-2{margin-right:.5rem!important}.me-sm-3{margin-right:1rem!important}.me-sm-4{margin-right:1.5rem!important}.me-sm-5{margin-right:3rem!important}.me-sm-auto{margin-right:auto!important}.mb-sm-0{margin-bottom:0!important}.mb-sm-1{margin-bottom:.25rem!important}.mb-sm-2{margin-bottom:.5rem!important}.mb-sm-3{margin-bottom:1rem!important}.mb-sm-4{margin-bottom:1.5rem!important}.mb-sm-5{margin-bottom:3rem!important}.mb-sm-auto{margin-bottom:auto!important}.ms-sm-0{margin-left:0!important}.ms-sm-1{margin-left:.25rem!important}.ms-sm-2{margin-left:.5rem!important}.ms-sm-3{margin-left:1rem!important}.ms-sm-4{margin-left:1.5rem!important}.ms-sm-5{margin-left:3rem!important}.ms-sm-auto{margin-left:auto!important}.p-sm-0{padding:0!important}.p-sm-1{padding:.25rem!important}.p-sm-2{padding:.5rem!important}.p-sm-3{padding:1rem!important}.p-sm-4{padding:1.5rem!important}.p-sm-5{padding:3rem!important}.px-sm-0{padding-right:0!important;padding-left:0!important}.px-sm-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-sm-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-sm-3{padding-right:1rem!important;padding-left:1rem!important}.px-sm-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-sm-5{padding-right:3rem!important;padding-left:3rem!important}.py-sm-0{padding-top:0!important;padding-bottom:0!important}.py-sm-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-sm-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-sm-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-sm-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-sm-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-sm-0{padding-top:0!important}.pt-sm-1{padding-top:.25rem!important}.pt-sm-2{padding-top:.5rem!important}.pt-sm-3{padding-top:1rem!important}.pt-sm-4{padding-top:1.5rem!important}.pt-sm-5{padding-top:3rem!important}.pe-sm-0{padding-right:0!important}.pe-sm-1{padding-right:.25rem!important}.pe-sm-2{padding-right:.5rem!important}.pe-sm-3{padding-right:1rem!important}.pe-sm-4{padding-right:1.5rem!important}.pe-sm-5{padding-right:3rem!important}.pb-sm-0{padding-bottom:0!important}.pb-sm-1{padding-bottom:.25rem!important}.pb-sm-2{padding-bottom:.5rem!important}.pb-sm-3{padding-bottom:1rem!important}.pb-sm-4{padding-bottom:1.5rem!important}.pb-sm-5{padding-bottom:3rem!important}.ps-sm-0{padding-left:0!important}.ps-sm-1{padding-left:.25rem!important}.ps-sm-2{padding-left:.5rem!important}.ps-sm-3{padding-left:1rem!important}.ps-sm-4{padding-left:1.5rem!important}.ps-sm-5{padding-left:3rem!important}.gap-sm-0{gap:0!important}.gap-sm-1{gap:.25rem!important}.gap-sm-2{gap:.5rem!important}.gap-sm-3{gap:1rem!important}.gap-sm-4{gap:1.5rem!important}.gap-sm-5{gap:3rem!important}.row-gap-sm-0{row-gap:0!important}.row-gap-sm-1{row-gap:.25rem!important}.row-gap-sm-2{row-gap:.5rem!important}.row-gap-sm-3{row-gap:1rem!important}.row-gap-sm-4{row-gap:1.5rem!important}.row-gap-sm-5{row-gap:3rem!important}.column-gap-sm-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-sm-1{-moz-column-gap:.25rem!important;column-gap:.25rem!important}.column-gap-sm-2{-moz-column-gap:.5rem!important;column-gap:.5rem!important}.column-gap-sm-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-sm-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-sm-5{-moz-column-gap:3rem!important;column-gap:3rem!important}.text-sm-start{text-align:left!important}.text-sm-end{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.float-md-start{float:left!important}.float-md-end{float:right!important}.float-md-none{float:none!important}.object-fit-md-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-md-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-md-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-md-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-md-none{-o-object-fit:none!important;object-fit:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-grid{display:grid!important}.d-md-inline-grid{display:inline-grid!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}.d-md-none{display:none!important}.flex-md-fill{flex:1 1 auto!important}.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.justify-content-md-evenly{justify-content:space-evenly!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}.order-md-first{order:-1!important}.order-md-0{order:0!important}.order-md-1{order:1!important}.order-md-2{order:2!important}.order-md-3{order:3!important}.order-md-4{order:4!important}.order-md-5{order:5!important}.order-md-last{order:6!important}.m-md-0{margin:0!important}.m-md-1{margin:.25rem!important}.m-md-2{margin:.5rem!important}.m-md-3{margin:1rem!important}.m-md-4{margin:1.5rem!important}.m-md-5{margin:3rem!important}.m-md-auto{margin:auto!important}.mx-md-0{margin-right:0!important;margin-left:0!important}.mx-md-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-md-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-md-3{margin-right:1rem!important;margin-left:1rem!important}.mx-md-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-md-5{margin-right:3rem!important;margin-left:3rem!important}.mx-md-auto{margin-right:auto!important;margin-left:auto!important}.my-md-0{margin-top:0!important;margin-bottom:0!important}.my-md-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-md-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-md-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-md-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-md-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-md-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-md-0{margin-top:0!important}.mt-md-1{margin-top:.25rem!important}.mt-md-2{margin-top:.5rem!important}.mt-md-3{margin-top:1rem!important}.mt-md-4{margin-top:1.5rem!important}.mt-md-5{margin-top:3rem!important}.mt-md-auto{margin-top:auto!important}.me-md-0{margin-right:0!important}.me-md-1{margin-right:.25rem!important}.me-md-2{margin-right:.5rem!important}.me-md-3{margin-right:1rem!important}.me-md-4{margin-right:1.5rem!important}.me-md-5{margin-right:3rem!important}.me-md-auto{margin-right:auto!important}.mb-md-0{margin-bottom:0!important}.mb-md-1{margin-bottom:.25rem!important}.mb-md-2{margin-bottom:.5rem!important}.mb-md-3{margin-bottom:1rem!important}.mb-md-4{margin-bottom:1.5rem!important}.mb-md-5{margin-bottom:3rem!important}.mb-md-auto{margin-bottom:auto!important}.ms-md-0{margin-left:0!important}.ms-md-1{margin-left:.25rem!important}.ms-md-2{margin-left:.5rem!important}.ms-md-3{margin-left:1rem!important}.ms-md-4{margin-left:1.5rem!important}.ms-md-5{margin-left:3rem!important}.ms-md-auto{margin-left:auto!important}.p-md-0{padding:0!important}.p-md-1{padding:.25rem!important}.p-md-2{padding:.5rem!important}.p-md-3{padding:1rem!important}.p-md-4{padding:1.5rem!important}.p-md-5{padding:3rem!important}.px-md-0{padding-right:0!important;padding-left:0!important}.px-md-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-md-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-md-3{padding-right:1rem!important;padding-left:1rem!important}.px-md-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-md-5{padding-right:3rem!important;padding-left:3rem!important}.py-md-0{padding-top:0!important;padding-bottom:0!important}.py-md-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-md-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-md-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-md-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-md-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-md-0{padding-top:0!important}.pt-md-1{padding-top:.25rem!important}.pt-md-2{padding-top:.5rem!important}.pt-md-3{padding-top:1rem!important}.pt-md-4{padding-top:1.5rem!important}.pt-md-5{padding-top:3rem!important}.pe-md-0{padding-right:0!important}.pe-md-1{padding-right:.25rem!important}.pe-md-2{padding-right:.5rem!important}.pe-md-3{padding-right:1rem!important}.pe-md-4{padding-right:1.5rem!important}.pe-md-5{padding-right:3rem!important}.pb-md-0{padding-bottom:0!important}.pb-md-1{padding-bottom:.25rem!important}.pb-md-2{padding-bottom:.5rem!important}.pb-md-3{padding-bottom:1rem!important}.pb-md-4{padding-bottom:1.5rem!important}.pb-md-5{padding-bottom:3rem!important}.ps-md-0{padding-left:0!important}.ps-md-1{padding-left:.25rem!important}.ps-md-2{padding-left:.5rem!important}.ps-md-3{padding-left:1rem!important}.ps-md-4{padding-left:1.5rem!important}.ps-md-5{padding-left:3rem!important}.gap-md-0{gap:0!important}.gap-md-1{gap:.25rem!important}.gap-md-2{gap:.5rem!important}.gap-md-3{gap:1rem!important}.gap-md-4{gap:1.5rem!important}.gap-md-5{gap:3rem!important}.row-gap-md-0{row-gap:0!important}.row-gap-md-1{row-gap:.25rem!important}.row-gap-md-2{row-gap:.5rem!important}.row-gap-md-3{row-gap:1rem!important}.row-gap-md-4{row-gap:1.5rem!important}.row-gap-md-5{row-gap:3rem!important}.column-gap-md-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-md-1{-moz-column-gap:.25rem!important;column-gap:.25rem!important}.column-gap-md-2{-moz-column-gap:.5rem!important;column-gap:.5rem!important}.column-gap-md-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-md-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-md-5{-moz-column-gap:3rem!important;column-gap:3rem!important}.text-md-start{text-align:left!important}.text-md-end{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.float-lg-start{float:left!important}.float-lg-end{float:right!important}.float-lg-none{float:none!important}.object-fit-lg-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-lg-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-lg-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-lg-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-lg-none{-o-object-fit:none!important;object-fit:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-grid{display:grid!important}.d-lg-inline-grid{display:inline-grid!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}.d-lg-none{display:none!important}.flex-lg-fill{flex:1 1 auto!important}.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.justify-content-lg-evenly{justify-content:space-evenly!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}.order-lg-first{order:-1!important}.order-lg-0{order:0!important}.order-lg-1{order:1!important}.order-lg-2{order:2!important}.order-lg-3{order:3!important}.order-lg-4{order:4!important}.order-lg-5{order:5!important}.order-lg-last{order:6!important}.m-lg-0{margin:0!important}.m-lg-1{margin:.25rem!important}.m-lg-2{margin:.5rem!important}.m-lg-3{margin:1rem!important}.m-lg-4{margin:1.5rem!important}.m-lg-5{margin:3rem!important}.m-lg-auto{margin:auto!important}.mx-lg-0{margin-right:0!important;margin-left:0!important}.mx-lg-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-lg-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-lg-3{margin-right:1rem!important;margin-left:1rem!important}.mx-lg-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-lg-5{margin-right:3rem!important;margin-left:3rem!important}.mx-lg-auto{margin-right:auto!important;margin-left:auto!important}.my-lg-0{margin-top:0!important;margin-bottom:0!important}.my-lg-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-lg-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-lg-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-lg-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-lg-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-lg-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-lg-0{margin-top:0!important}.mt-lg-1{margin-top:.25rem!important}.mt-lg-2{margin-top:.5rem!important}.mt-lg-3{margin-top:1rem!important}.mt-lg-4{margin-top:1.5rem!important}.mt-lg-5{margin-top:3rem!important}.mt-lg-auto{margin-top:auto!important}.me-lg-0{margin-right:0!important}.me-lg-1{margin-right:.25rem!important}.me-lg-2{margin-right:.5rem!important}.me-lg-3{margin-right:1rem!important}.me-lg-4{margin-right:1.5rem!important}.me-lg-5{margin-right:3rem!important}.me-lg-auto{margin-right:auto!important}.mb-lg-0{margin-bottom:0!important}.mb-lg-1{margin-bottom:.25rem!important}.mb-lg-2{margin-bottom:.5rem!important}.mb-lg-3{margin-bottom:1rem!important}.mb-lg-4{margin-bottom:1.5rem!important}.mb-lg-5{margin-bottom:3rem!important}.mb-lg-auto{margin-bottom:auto!important}.ms-lg-0{margin-left:0!important}.ms-lg-1{margin-left:.25rem!important}.ms-lg-2{margin-left:.5rem!important}.ms-lg-3{margin-left:1rem!important}.ms-lg-4{margin-left:1.5rem!important}.ms-lg-5{margin-left:3rem!important}.ms-lg-auto{margin-left:auto!important}.p-lg-0{padding:0!important}.p-lg-1{padding:.25rem!important}.p-lg-2{padding:.5rem!important}.p-lg-3{padding:1rem!important}.p-lg-4{padding:1.5rem!important}.p-lg-5{padding:3rem!important}.px-lg-0{padding-right:0!important;padding-left:0!important}.px-lg-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-lg-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-lg-3{padding-right:1rem!important;padding-left:1rem!important}.px-lg-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-lg-5{padding-right:3rem!important;padding-left:3rem!important}.py-lg-0{padding-top:0!important;padding-bottom:0!important}.py-lg-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-lg-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-lg-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-lg-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-lg-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-lg-0{padding-top:0!important}.pt-lg-1{padding-top:.25rem!important}.pt-lg-2{padding-top:.5rem!important}.pt-lg-3{padding-top:1rem!important}.pt-lg-4{padding-top:1.5rem!important}.pt-lg-5{padding-top:3rem!important}.pe-lg-0{padding-right:0!important}.pe-lg-1{padding-right:.25rem!important}.pe-lg-2{padding-right:.5rem!important}.pe-lg-3{padding-right:1rem!important}.pe-lg-4{padding-right:1.5rem!important}.pe-lg-5{padding-right:3rem!important}.pb-lg-0{padding-bottom:0!important}.pb-lg-1{padding-bottom:.25rem!important}.pb-lg-2{padding-bottom:.5rem!important}.pb-lg-3{padding-bottom:1rem!important}.pb-lg-4{padding-bottom:1.5rem!important}.pb-lg-5{padding-bottom:3rem!important}.ps-lg-0{padding-left:0!important}.ps-lg-1{padding-left:.25rem!important}.ps-lg-2{padding-left:.5rem!important}.ps-lg-3{padding-left:1rem!important}.ps-lg-4{padding-left:1.5rem!important}.ps-lg-5{padding-left:3rem!important}.gap-lg-0{gap:0!important}.gap-lg-1{gap:.25rem!important}.gap-lg-2{gap:.5rem!important}.gap-lg-3{gap:1rem!important}.gap-lg-4{gap:1.5rem!important}.gap-lg-5{gap:3rem!important}.row-gap-lg-0{row-gap:0!important}.row-gap-lg-1{row-gap:.25rem!important}.row-gap-lg-2{row-gap:.5rem!important}.row-gap-lg-3{row-gap:1rem!important}.row-gap-lg-4{row-gap:1.5rem!important}.row-gap-lg-5{row-gap:3rem!important}.column-gap-lg-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-lg-1{-moz-column-gap:.25rem!important;column-gap:.25rem!important}.column-gap-lg-2{-moz-column-gap:.5rem!important;column-gap:.5rem!important}.column-gap-lg-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-lg-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-lg-5{-moz-column-gap:3rem!important;column-gap:3rem!important}.text-lg-start{text-align:left!important}.text-lg-end{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.float-xl-start{float:left!important}.float-xl-end{float:right!important}.float-xl-none{float:none!important}.object-fit-xl-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-xl-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-xl-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-xl-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-xl-none{-o-object-fit:none!important;object-fit:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-grid{display:grid!important}.d-xl-inline-grid{display:inline-grid!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}.d-xl-none{display:none!important}.flex-xl-fill{flex:1 1 auto!important}.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.justify-content-xl-evenly{justify-content:space-evenly!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}.order-xl-first{order:-1!important}.order-xl-0{order:0!important}.order-xl-1{order:1!important}.order-xl-2{order:2!important}.order-xl-3{order:3!important}.order-xl-4{order:4!important}.order-xl-5{order:5!important}.order-xl-last{order:6!important}.m-xl-0{margin:0!important}.m-xl-1{margin:.25rem!important}.m-xl-2{margin:.5rem!important}.m-xl-3{margin:1rem!important}.m-xl-4{margin:1.5rem!important}.m-xl-5{margin:3rem!important}.m-xl-auto{margin:auto!important}.mx-xl-0{margin-right:0!important;margin-left:0!important}.mx-xl-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-xl-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-xl-3{margin-right:1rem!important;margin-left:1rem!important}.mx-xl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-xl-5{margin-right:3rem!important;margin-left:3rem!important}.mx-xl-auto{margin-right:auto!important;margin-left:auto!important}.my-xl-0{margin-top:0!important;margin-bottom:0!important}.my-xl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xl-0{margin-top:0!important}.mt-xl-1{margin-top:.25rem!important}.mt-xl-2{margin-top:.5rem!important}.mt-xl-3{margin-top:1rem!important}.mt-xl-4{margin-top:1.5rem!important}.mt-xl-5{margin-top:3rem!important}.mt-xl-auto{margin-top:auto!important}.me-xl-0{margin-right:0!important}.me-xl-1{margin-right:.25rem!important}.me-xl-2{margin-right:.5rem!important}.me-xl-3{margin-right:1rem!important}.me-xl-4{margin-right:1.5rem!important}.me-xl-5{margin-right:3rem!important}.me-xl-auto{margin-right:auto!important}.mb-xl-0{margin-bottom:0!important}.mb-xl-1{margin-bottom:.25rem!important}.mb-xl-2{margin-bottom:.5rem!important}.mb-xl-3{margin-bottom:1rem!important}.mb-xl-4{margin-bottom:1.5rem!important}.mb-xl-5{margin-bottom:3rem!important}.mb-xl-auto{margin-bottom:auto!important}.ms-xl-0{margin-left:0!important}.ms-xl-1{margin-left:.25rem!important}.ms-xl-2{margin-left:.5rem!important}.ms-xl-3{margin-left:1rem!important}.ms-xl-4{margin-left:1.5rem!important}.ms-xl-5{margin-left:3rem!important}.ms-xl-auto{margin-left:auto!important}.p-xl-0{padding:0!important}.p-xl-1{padding:.25rem!important}.p-xl-2{padding:.5rem!important}.p-xl-3{padding:1rem!important}.p-xl-4{padding:1.5rem!important}.p-xl-5{padding:3rem!important}.px-xl-0{padding-right:0!important;padding-left:0!important}.px-xl-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-xl-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-xl-3{padding-right:1rem!important;padding-left:1rem!important}.px-xl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-xl-5{padding-right:3rem!important;padding-left:3rem!important}.py-xl-0{padding-top:0!important;padding-bottom:0!important}.py-xl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xl-0{padding-top:0!important}.pt-xl-1{padding-top:.25rem!important}.pt-xl-2{padding-top:.5rem!important}.pt-xl-3{padding-top:1rem!important}.pt-xl-4{padding-top:1.5rem!important}.pt-xl-5{padding-top:3rem!important}.pe-xl-0{padding-right:0!important}.pe-xl-1{padding-right:.25rem!important}.pe-xl-2{padding-right:.5rem!important}.pe-xl-3{padding-right:1rem!important}.pe-xl-4{padding-right:1.5rem!important}.pe-xl-5{padding-right:3rem!important}.pb-xl-0{padding-bottom:0!important}.pb-xl-1{padding-bottom:.25rem!important}.pb-xl-2{padding-bottom:.5rem!important}.pb-xl-3{padding-bottom:1rem!important}.pb-xl-4{padding-bottom:1.5rem!important}.pb-xl-5{padding-bottom:3rem!important}.ps-xl-0{padding-left:0!important}.ps-xl-1{padding-left:.25rem!important}.ps-xl-2{padding-left:.5rem!important}.ps-xl-3{padding-left:1rem!important}.ps-xl-4{padding-left:1.5rem!important}.ps-xl-5{padding-left:3rem!important}.gap-xl-0{gap:0!important}.gap-xl-1{gap:.25rem!important}.gap-xl-2{gap:.5rem!important}.gap-xl-3{gap:1rem!important}.gap-xl-4{gap:1.5rem!important}.gap-xl-5{gap:3rem!important}.row-gap-xl-0{row-gap:0!important}.row-gap-xl-1{row-gap:.25rem!important}.row-gap-xl-2{row-gap:.5rem!important}.row-gap-xl-3{row-gap:1rem!important}.row-gap-xl-4{row-gap:1.5rem!important}.row-gap-xl-5{row-gap:3rem!important}.column-gap-xl-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-xl-1{-moz-column-gap:.25rem!important;column-gap:.25rem!important}.column-gap-xl-2{-moz-column-gap:.5rem!important;column-gap:.5rem!important}.column-gap-xl-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-xl-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-xl-5{-moz-column-gap:3rem!important;column-gap:3rem!important}.text-xl-start{text-align:left!important}.text-xl-end{text-align:right!important}.text-xl-center{text-align:center!important}}@media (min-width:1400px){.float-xxl-start{float:left!important}.float-xxl-end{float:right!important}.float-xxl-none{float:none!important}.object-fit-xxl-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-xxl-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-xxl-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-xxl-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-xxl-none{-o-object-fit:none!important;object-fit:none!important}.d-xxl-inline{display:inline!important}.d-xxl-inline-block{display:inline-block!important}.d-xxl-block{display:block!important}.d-xxl-grid{display:grid!important}.d-xxl-inline-grid{display:inline-grid!important}.d-xxl-table{display:table!important}.d-xxl-table-row{display:table-row!important}.d-xxl-table-cell{display:table-cell!important}.d-xxl-flex{display:flex!important}.d-xxl-inline-flex{display:inline-flex!important}.d-xxl-none{display:none!important}.flex-xxl-fill{flex:1 1 auto!important}.flex-xxl-row{flex-direction:row!important}.flex-xxl-column{flex-direction:column!important}.flex-xxl-row-reverse{flex-direction:row-reverse!important}.flex-xxl-column-reverse{flex-direction:column-reverse!important}.flex-xxl-grow-0{flex-grow:0!important}.flex-xxl-grow-1{flex-grow:1!important}.flex-xxl-shrink-0{flex-shrink:0!important}.flex-xxl-shrink-1{flex-shrink:1!important}.flex-xxl-wrap{flex-wrap:wrap!important}.flex-xxl-nowrap{flex-wrap:nowrap!important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-xxl-start{justify-content:flex-start!important}.justify-content-xxl-end{justify-content:flex-end!important}.justify-content-xxl-center{justify-content:center!important}.justify-content-xxl-between{justify-content:space-between!important}.justify-content-xxl-around{justify-content:space-around!important}.justify-content-xxl-evenly{justify-content:space-evenly!important}.align-items-xxl-start{align-items:flex-start!important}.align-items-xxl-end{align-items:flex-end!important}.align-items-xxl-center{align-items:center!important}.align-items-xxl-baseline{align-items:baseline!important}.align-items-xxl-stretch{align-items:stretch!important}.align-content-xxl-start{align-content:flex-start!important}.align-content-xxl-end{align-content:flex-end!important}.align-content-xxl-center{align-content:center!important}.align-content-xxl-between{align-content:space-between!important}.align-content-xxl-around{align-content:space-around!important}.align-content-xxl-stretch{align-content:stretch!important}.align-self-xxl-auto{align-self:auto!important}.align-self-xxl-start{align-self:flex-start!important}.align-self-xxl-end{align-self:flex-end!important}.align-self-xxl-center{align-self:center!important}.align-self-xxl-baseline{align-self:baseline!important}.align-self-xxl-stretch{align-self:stretch!important}.order-xxl-first{order:-1!important}.order-xxl-0{order:0!important}.order-xxl-1{order:1!important}.order-xxl-2{order:2!important}.order-xxl-3{order:3!important}.order-xxl-4{order:4!important}.order-xxl-5{order:5!important}.order-xxl-last{order:6!important}.m-xxl-0{margin:0!important}.m-xxl-1{margin:.25rem!important}.m-xxl-2{margin:.5rem!important}.m-xxl-3{margin:1rem!important}.m-xxl-4{margin:1.5rem!important}.m-xxl-5{margin:3rem!important}.m-xxl-auto{margin:auto!important}.mx-xxl-0{margin-right:0!important;margin-left:0!important}.mx-xxl-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-xxl-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-xxl-3{margin-right:1rem!important;margin-left:1rem!important}.mx-xxl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-xxl-5{margin-right:3rem!important;margin-left:3rem!important}.mx-xxl-auto{margin-right:auto!important;margin-left:auto!important}.my-xxl-0{margin-top:0!important;margin-bottom:0!important}.my-xxl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xxl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xxl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xxl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xxl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xxl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xxl-0{margin-top:0!important}.mt-xxl-1{margin-top:.25rem!important}.mt-xxl-2{margin-top:.5rem!important}.mt-xxl-3{margin-top:1rem!important}.mt-xxl-4{margin-top:1.5rem!important}.mt-xxl-5{margin-top:3rem!important}.mt-xxl-auto{margin-top:auto!important}.me-xxl-0{margin-right:0!important}.me-xxl-1{margin-right:.25rem!important}.me-xxl-2{margin-right:.5rem!important}.me-xxl-3{margin-right:1rem!important}.me-xxl-4{margin-right:1.5rem!important}.me-xxl-5{margin-right:3rem!important}.me-xxl-auto{margin-right:auto!important}.mb-xxl-0{margin-bottom:0!important}.mb-xxl-1{margin-bottom:.25rem!important}.mb-xxl-2{margin-bottom:.5rem!important}.mb-xxl-3{margin-bottom:1rem!important}.mb-xxl-4{margin-bottom:1.5rem!important}.mb-xxl-5{margin-bottom:3rem!important}.mb-xxl-auto{margin-bottom:auto!important}.ms-xxl-0{margin-left:0!important}.ms-xxl-1{margin-left:.25rem!important}.ms-xxl-2{margin-left:.5rem!important}.ms-xxl-3{margin-left:1rem!important}.ms-xxl-4{margin-left:1.5rem!important}.ms-xxl-5{margin-left:3rem!important}.ms-xxl-auto{margin-left:auto!important}.p-xxl-0{padding:0!important}.p-xxl-1{padding:.25rem!important}.p-xxl-2{padding:.5rem!important}.p-xxl-3{padding:1rem!important}.p-xxl-4{padding:1.5rem!important}.p-xxl-5{padding:3rem!important}.px-xxl-0{padding-right:0!important;padding-left:0!important}.px-xxl-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-xxl-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-xxl-3{padding-right:1rem!important;padding-left:1rem!important}.px-xxl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-xxl-5{padding-right:3rem!important;padding-left:3rem!important}.py-xxl-0{padding-top:0!important;padding-bottom:0!important}.py-xxl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xxl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xxl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xxl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xxl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xxl-0{padding-top:0!important}.pt-xxl-1{padding-top:.25rem!important}.pt-xxl-2{padding-top:.5rem!important}.pt-xxl-3{padding-top:1rem!important}.pt-xxl-4{padding-top:1.5rem!important}.pt-xxl-5{padding-top:3rem!important}.pe-xxl-0{padding-right:0!important}.pe-xxl-1{padding-right:.25rem!important}.pe-xxl-2{padding-right:.5rem!important}.pe-xxl-3{padding-right:1rem!important}.pe-xxl-4{padding-right:1.5rem!important}.pe-xxl-5{padding-right:3rem!important}.pb-xxl-0{padding-bottom:0!important}.pb-xxl-1{padding-bottom:.25rem!important}.pb-xxl-2{padding-bottom:.5rem!important}.pb-xxl-3{padding-bottom:1rem!important}.pb-xxl-4{padding-bottom:1.5rem!important}.pb-xxl-5{padding-bottom:3rem!important}.ps-xxl-0{padding-left:0!important}.ps-xxl-1{padding-left:.25rem!important}.ps-xxl-2{padding-left:.5rem!important}.ps-xxl-3{padding-left:1rem!important}.ps-xxl-4{padding-left:1.5rem!important}.ps-xxl-5{padding-left:3rem!important}.gap-xxl-0{gap:0!important}.gap-xxl-1{gap:.25rem!important}.gap-xxl-2{gap:.5rem!important}.gap-xxl-3{gap:1rem!important}.gap-xxl-4{gap:1.5rem!important}.gap-xxl-5{gap:3rem!important}.row-gap-xxl-0{row-gap:0!important}.row-gap-xxl-1{row-gap:.25rem!important}.row-gap-xxl-2{row-gap:.5rem!important}.row-gap-xxl-3{row-gap:1rem!important}.row-gap-xxl-4{row-gap:1.5rem!important}.row-gap-xxl-5{row-gap:3rem!important}.column-gap-xxl-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-xxl-1{-moz-column-gap:.25rem!important;column-gap:.25rem!important}.column-gap-xxl-2{-moz-column-gap:.5rem!important;column-gap:.5rem!important}.column-gap-xxl-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-xxl-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-xxl-5{-moz-column-gap:3rem!important;column-gap:3rem!important}.text-xxl-start{text-align:left!important}.text-xxl-end{text-align:right!important}.text-xxl-center{text-align:center!important}}@media (min-width:1200px){.fs-1{font-size:2.5rem!important}.fs-2{font-size:2rem!important}.fs-3{font-size:1.75rem!important}.fs-4{font-size:1.5rem!important}}/*! +* Bootstrap Icons v1.11.3 (https://icons.getbootstrap.com/) +* Copyright 2019-2024 The Bootstrap Authors +* Licensed under MIT (https://github.com/twbs/icons/blob/main/LICENSE) +*/@font-face{font-display:block;font-family:bootstrap-icons;src:url(/assets/bootstrap-icons-BtvjY1KL.woff2?dd67030699838ea613ee6dbda90effa6) format("woff2"),url(/assets/bootstrap-icons-BOrJxbIo.woff?dd67030699838ea613ee6dbda90effa6) format("woff")}.bi:before,[class^=bi-]:before,[class*=" bi-"]:before{display:inline-block;font-family:bootstrap-icons!important;font-style:normal;font-weight:400!important;font-variant:normal;text-transform:none;line-height:1;vertical-align:-.125em;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.bi-123:before{content:""}.bi-alarm-fill:before{content:""}.bi-alarm:before{content:""}.bi-align-bottom:before{content:""}.bi-align-center:before{content:""}.bi-align-end:before{content:""}.bi-align-middle:before{content:""}.bi-align-start:before{content:""}.bi-align-top:before{content:""}.bi-alt:before{content:""}.bi-app-indicator:before{content:""}.bi-app:before{content:""}.bi-archive-fill:before{content:""}.bi-archive:before{content:""}.bi-arrow-90deg-down:before{content:""}.bi-arrow-90deg-left:before{content:""}.bi-arrow-90deg-right:before{content:""}.bi-arrow-90deg-up:before{content:""}.bi-arrow-bar-down:before{content:""}.bi-arrow-bar-left:before{content:""}.bi-arrow-bar-right:before{content:""}.bi-arrow-bar-up:before{content:""}.bi-arrow-clockwise:before{content:""}.bi-arrow-counterclockwise:before{content:""}.bi-arrow-down-circle-fill:before{content:""}.bi-arrow-down-circle:before{content:""}.bi-arrow-down-left-circle-fill:before{content:""}.bi-arrow-down-left-circle:before{content:""}.bi-arrow-down-left-square-fill:before{content:""}.bi-arrow-down-left-square:before{content:""}.bi-arrow-down-left:before{content:""}.bi-arrow-down-right-circle-fill:before{content:""}.bi-arrow-down-right-circle:before{content:""}.bi-arrow-down-right-square-fill:before{content:""}.bi-arrow-down-right-square:before{content:""}.bi-arrow-down-right:before{content:""}.bi-arrow-down-short:before{content:""}.bi-arrow-down-square-fill:before{content:""}.bi-arrow-down-square:before{content:""}.bi-arrow-down-up:before{content:""}.bi-arrow-down:before{content:""}.bi-arrow-left-circle-fill:before{content:""}.bi-arrow-left-circle:before{content:""}.bi-arrow-left-right:before{content:""}.bi-arrow-left-short:before{content:""}.bi-arrow-left-square-fill:before{content:""}.bi-arrow-left-square:before{content:""}.bi-arrow-left:before{content:""}.bi-arrow-repeat:before{content:""}.bi-arrow-return-left:before{content:""}.bi-arrow-return-right:before{content:""}.bi-arrow-right-circle-fill:before{content:""}.bi-arrow-right-circle:before{content:""}.bi-arrow-right-short:before{content:""}.bi-arrow-right-square-fill:before{content:""}.bi-arrow-right-square:before{content:""}.bi-arrow-right:before{content:""}.bi-arrow-up-circle-fill:before{content:""}.bi-arrow-up-circle:before{content:""}.bi-arrow-up-left-circle-fill:before{content:""}.bi-arrow-up-left-circle:before{content:""}.bi-arrow-up-left-square-fill:before{content:""}.bi-arrow-up-left-square:before{content:""}.bi-arrow-up-left:before{content:""}.bi-arrow-up-right-circle-fill:before{content:""}.bi-arrow-up-right-circle:before{content:""}.bi-arrow-up-right-square-fill:before{content:""}.bi-arrow-up-right-square:before{content:""}.bi-arrow-up-right:before{content:""}.bi-arrow-up-short:before{content:""}.bi-arrow-up-square-fill:before{content:""}.bi-arrow-up-square:before{content:""}.bi-arrow-up:before{content:""}.bi-arrows-angle-contract:before{content:""}.bi-arrows-angle-expand:before{content:""}.bi-arrows-collapse:before{content:""}.bi-arrows-expand:before{content:""}.bi-arrows-fullscreen:before{content:""}.bi-arrows-move:before{content:""}.bi-aspect-ratio-fill:before{content:""}.bi-aspect-ratio:before{content:""}.bi-asterisk:before{content:""}.bi-at:before{content:""}.bi-award-fill:before{content:""}.bi-award:before{content:""}.bi-back:before{content:""}.bi-backspace-fill:before{content:""}.bi-backspace-reverse-fill:before{content:""}.bi-backspace-reverse:before{content:""}.bi-backspace:before{content:""}.bi-badge-3d-fill:before{content:""}.bi-badge-3d:before{content:""}.bi-badge-4k-fill:before{content:""}.bi-badge-4k:before{content:""}.bi-badge-8k-fill:before{content:""}.bi-badge-8k:before{content:""}.bi-badge-ad-fill:before{content:""}.bi-badge-ad:before{content:""}.bi-badge-ar-fill:before{content:""}.bi-badge-ar:before{content:""}.bi-badge-cc-fill:before{content:""}.bi-badge-cc:before{content:""}.bi-badge-hd-fill:before{content:""}.bi-badge-hd:before{content:""}.bi-badge-tm-fill:before{content:""}.bi-badge-tm:before{content:""}.bi-badge-vo-fill:before{content:""}.bi-badge-vo:before{content:""}.bi-badge-vr-fill:before{content:""}.bi-badge-vr:before{content:""}.bi-badge-wc-fill:before{content:""}.bi-badge-wc:before{content:""}.bi-bag-check-fill:before{content:""}.bi-bag-check:before{content:""}.bi-bag-dash-fill:before{content:""}.bi-bag-dash:before{content:""}.bi-bag-fill:before{content:""}.bi-bag-plus-fill:before{content:""}.bi-bag-plus:before{content:""}.bi-bag-x-fill:before{content:""}.bi-bag-x:before{content:""}.bi-bag:before{content:""}.bi-bar-chart-fill:before{content:""}.bi-bar-chart-line-fill:before{content:""}.bi-bar-chart-line:before{content:""}.bi-bar-chart-steps:before{content:""}.bi-bar-chart:before{content:""}.bi-basket-fill:before{content:""}.bi-basket:before{content:""}.bi-basket2-fill:before{content:""}.bi-basket2:before{content:""}.bi-basket3-fill:before{content:""}.bi-basket3:before{content:""}.bi-battery-charging:before{content:""}.bi-battery-full:before{content:""}.bi-battery-half:before{content:""}.bi-battery:before{content:""}.bi-bell-fill:before{content:""}.bi-bell:before{content:""}.bi-bezier:before{content:""}.bi-bezier2:before{content:""}.bi-bicycle:before{content:""}.bi-binoculars-fill:before{content:""}.bi-binoculars:before{content:""}.bi-blockquote-left:before{content:""}.bi-blockquote-right:before{content:""}.bi-book-fill:before{content:""}.bi-book-half:before{content:""}.bi-book:before{content:""}.bi-bookmark-check-fill:before{content:""}.bi-bookmark-check:before{content:""}.bi-bookmark-dash-fill:before{content:""}.bi-bookmark-dash:before{content:""}.bi-bookmark-fill:before{content:""}.bi-bookmark-heart-fill:before{content:""}.bi-bookmark-heart:before{content:""}.bi-bookmark-plus-fill:before{content:""}.bi-bookmark-plus:before{content:""}.bi-bookmark-star-fill:before{content:""}.bi-bookmark-star:before{content:""}.bi-bookmark-x-fill:before{content:""}.bi-bookmark-x:before{content:""}.bi-bookmark:before{content:""}.bi-bookmarks-fill:before{content:""}.bi-bookmarks:before{content:""}.bi-bookshelf:before{content:""}.bi-bootstrap-fill:before{content:""}.bi-bootstrap-reboot:before{content:""}.bi-bootstrap:before{content:""}.bi-border-all:before{content:""}.bi-border-bottom:before{content:""}.bi-border-center:before{content:""}.bi-border-inner:before{content:""}.bi-border-left:before{content:""}.bi-border-middle:before{content:""}.bi-border-outer:before{content:""}.bi-border-right:before{content:""}.bi-border-style:before{content:""}.bi-border-top:before{content:""}.bi-border-width:before{content:""}.bi-border:before{content:""}.bi-bounding-box-circles:before{content:""}.bi-bounding-box:before{content:""}.bi-box-arrow-down-left:before{content:""}.bi-box-arrow-down-right:before{content:""}.bi-box-arrow-down:before{content:""}.bi-box-arrow-in-down-left:before{content:""}.bi-box-arrow-in-down-right:before{content:""}.bi-box-arrow-in-down:before{content:""}.bi-box-arrow-in-left:before{content:""}.bi-box-arrow-in-right:before{content:""}.bi-box-arrow-in-up-left:before{content:""}.bi-box-arrow-in-up-right:before{content:""}.bi-box-arrow-in-up:before{content:""}.bi-box-arrow-left:before{content:""}.bi-box-arrow-right:before{content:""}.bi-box-arrow-up-left:before{content:""}.bi-box-arrow-up-right:before{content:""}.bi-box-arrow-up:before{content:""}.bi-box-seam:before{content:""}.bi-box:before{content:""}.bi-braces:before{content:""}.bi-bricks:before{content:""}.bi-briefcase-fill:before{content:""}.bi-briefcase:before{content:""}.bi-brightness-alt-high-fill:before{content:""}.bi-brightness-alt-high:before{content:""}.bi-brightness-alt-low-fill:before{content:""}.bi-brightness-alt-low:before{content:""}.bi-brightness-high-fill:before{content:""}.bi-brightness-high:before{content:""}.bi-brightness-low-fill:before{content:""}.bi-brightness-low:before{content:""}.bi-broadcast-pin:before{content:""}.bi-broadcast:before{content:""}.bi-brush-fill:before{content:""}.bi-brush:before{content:""}.bi-bucket-fill:before{content:""}.bi-bucket:before{content:""}.bi-bug-fill:before{content:""}.bi-bug:before{content:""}.bi-building:before{content:""}.bi-bullseye:before{content:""}.bi-calculator-fill:before{content:""}.bi-calculator:before{content:""}.bi-calendar-check-fill:before{content:""}.bi-calendar-check:before{content:""}.bi-calendar-date-fill:before{content:""}.bi-calendar-date:before{content:""}.bi-calendar-day-fill:before{content:""}.bi-calendar-day:before{content:""}.bi-calendar-event-fill:before{content:""}.bi-calendar-event:before{content:""}.bi-calendar-fill:before{content:""}.bi-calendar-minus-fill:before{content:""}.bi-calendar-minus:before{content:""}.bi-calendar-month-fill:before{content:""}.bi-calendar-month:before{content:""}.bi-calendar-plus-fill:before{content:""}.bi-calendar-plus:before{content:""}.bi-calendar-range-fill:before{content:""}.bi-calendar-range:before{content:""}.bi-calendar-week-fill:before{content:""}.bi-calendar-week:before{content:""}.bi-calendar-x-fill:before{content:""}.bi-calendar-x:before{content:""}.bi-calendar:before{content:""}.bi-calendar2-check-fill:before{content:""}.bi-calendar2-check:before{content:""}.bi-calendar2-date-fill:before{content:""}.bi-calendar2-date:before{content:""}.bi-calendar2-day-fill:before{content:""}.bi-calendar2-day:before{content:""}.bi-calendar2-event-fill:before{content:""}.bi-calendar2-event:before{content:""}.bi-calendar2-fill:before{content:""}.bi-calendar2-minus-fill:before{content:""}.bi-calendar2-minus:before{content:""}.bi-calendar2-month-fill:before{content:""}.bi-calendar2-month:before{content:""}.bi-calendar2-plus-fill:before{content:""}.bi-calendar2-plus:before{content:""}.bi-calendar2-range-fill:before{content:""}.bi-calendar2-range:before{content:""}.bi-calendar2-week-fill:before{content:""}.bi-calendar2-week:before{content:""}.bi-calendar2-x-fill:before{content:""}.bi-calendar2-x:before{content:""}.bi-calendar2:before{content:""}.bi-calendar3-event-fill:before{content:""}.bi-calendar3-event:before{content:""}.bi-calendar3-fill:before{content:""}.bi-calendar3-range-fill:before{content:""}.bi-calendar3-range:before{content:""}.bi-calendar3-week-fill:before{content:""}.bi-calendar3-week:before{content:""}.bi-calendar3:before{content:""}.bi-calendar4-event:before{content:""}.bi-calendar4-range:before{content:""}.bi-calendar4-week:before{content:""}.bi-calendar4:before{content:""}.bi-camera-fill:before{content:""}.bi-camera-reels-fill:before{content:""}.bi-camera-reels:before{content:""}.bi-camera-video-fill:before{content:""}.bi-camera-video-off-fill:before{content:""}.bi-camera-video-off:before{content:""}.bi-camera-video:before{content:""}.bi-camera:before{content:""}.bi-camera2:before{content:""}.bi-capslock-fill:before{content:""}.bi-capslock:before{content:""}.bi-card-checklist:before{content:""}.bi-card-heading:before{content:""}.bi-card-image:before{content:""}.bi-card-list:before{content:""}.bi-card-text:before{content:""}.bi-caret-down-fill:before{content:""}.bi-caret-down-square-fill:before{content:""}.bi-caret-down-square:before{content:""}.bi-caret-down:before{content:""}.bi-caret-left-fill:before{content:""}.bi-caret-left-square-fill:before{content:""}.bi-caret-left-square:before{content:""}.bi-caret-left:before{content:""}.bi-caret-right-fill:before{content:""}.bi-caret-right-square-fill:before{content:""}.bi-caret-right-square:before{content:""}.bi-caret-right:before{content:""}.bi-caret-up-fill:before{content:""}.bi-caret-up-square-fill:before{content:""}.bi-caret-up-square:before{content:""}.bi-caret-up:before{content:""}.bi-cart-check-fill:before{content:""}.bi-cart-check:before{content:""}.bi-cart-dash-fill:before{content:""}.bi-cart-dash:before{content:""}.bi-cart-fill:before{content:""}.bi-cart-plus-fill:before{content:""}.bi-cart-plus:before{content:""}.bi-cart-x-fill:before{content:""}.bi-cart-x:before{content:""}.bi-cart:before{content:""}.bi-cart2:before{content:""}.bi-cart3:before{content:""}.bi-cart4:before{content:""}.bi-cash-stack:before{content:""}.bi-cash:before{content:""}.bi-cast:before{content:""}.bi-chat-dots-fill:before{content:""}.bi-chat-dots:before{content:""}.bi-chat-fill:before{content:""}.bi-chat-left-dots-fill:before{content:""}.bi-chat-left-dots:before{content:""}.bi-chat-left-fill:before{content:""}.bi-chat-left-quote-fill:before{content:""}.bi-chat-left-quote:before{content:""}.bi-chat-left-text-fill:before{content:""}.bi-chat-left-text:before{content:""}.bi-chat-left:before{content:""}.bi-chat-quote-fill:before{content:""}.bi-chat-quote:before{content:""}.bi-chat-right-dots-fill:before{content:""}.bi-chat-right-dots:before{content:""}.bi-chat-right-fill:before{content:""}.bi-chat-right-quote-fill:before{content:""}.bi-chat-right-quote:before{content:""}.bi-chat-right-text-fill:before{content:""}.bi-chat-right-text:before{content:""}.bi-chat-right:before{content:""}.bi-chat-square-dots-fill:before{content:""}.bi-chat-square-dots:before{content:""}.bi-chat-square-fill:before{content:""}.bi-chat-square-quote-fill:before{content:""}.bi-chat-square-quote:before{content:""}.bi-chat-square-text-fill:before{content:""}.bi-chat-square-text:before{content:""}.bi-chat-square:before{content:""}.bi-chat-text-fill:before{content:""}.bi-chat-text:before{content:""}.bi-chat:before{content:""}.bi-check-all:before{content:""}.bi-check-circle-fill:before{content:""}.bi-check-circle:before{content:""}.bi-check-square-fill:before{content:""}.bi-check-square:before{content:""}.bi-check:before{content:""}.bi-check2-all:before{content:""}.bi-check2-circle:before{content:""}.bi-check2-square:before{content:""}.bi-check2:before{content:""}.bi-chevron-bar-contract:before{content:""}.bi-chevron-bar-down:before{content:""}.bi-chevron-bar-expand:before{content:""}.bi-chevron-bar-left:before{content:""}.bi-chevron-bar-right:before{content:""}.bi-chevron-bar-up:before{content:""}.bi-chevron-compact-down:before{content:""}.bi-chevron-compact-left:before{content:""}.bi-chevron-compact-right:before{content:""}.bi-chevron-compact-up:before{content:""}.bi-chevron-contract:before{content:""}.bi-chevron-double-down:before{content:""}.bi-chevron-double-left:before{content:""}.bi-chevron-double-right:before{content:""}.bi-chevron-double-up:before{content:""}.bi-chevron-down:before{content:""}.bi-chevron-expand:before{content:""}.bi-chevron-left:before{content:""}.bi-chevron-right:before{content:""}.bi-chevron-up:before{content:""}.bi-circle-fill:before{content:""}.bi-circle-half:before{content:""}.bi-circle-square:before{content:""}.bi-circle:before{content:""}.bi-clipboard-check:before{content:""}.bi-clipboard-data:before{content:""}.bi-clipboard-minus:before{content:""}.bi-clipboard-plus:before{content:""}.bi-clipboard-x:before{content:""}.bi-clipboard:before{content:""}.bi-clock-fill:before{content:""}.bi-clock-history:before{content:""}.bi-clock:before{content:""}.bi-cloud-arrow-down-fill:before{content:""}.bi-cloud-arrow-down:before{content:""}.bi-cloud-arrow-up-fill:before{content:""}.bi-cloud-arrow-up:before{content:""}.bi-cloud-check-fill:before{content:""}.bi-cloud-check:before{content:""}.bi-cloud-download-fill:before{content:""}.bi-cloud-download:before{content:""}.bi-cloud-drizzle-fill:before{content:""}.bi-cloud-drizzle:before{content:""}.bi-cloud-fill:before{content:""}.bi-cloud-fog-fill:before{content:""}.bi-cloud-fog:before{content:""}.bi-cloud-fog2-fill:before{content:""}.bi-cloud-fog2:before{content:""}.bi-cloud-hail-fill:before{content:""}.bi-cloud-hail:before{content:""}.bi-cloud-haze-fill:before{content:""}.bi-cloud-haze:before{content:""}.bi-cloud-haze2-fill:before{content:""}.bi-cloud-lightning-fill:before{content:""}.bi-cloud-lightning-rain-fill:before{content:""}.bi-cloud-lightning-rain:before{content:""}.bi-cloud-lightning:before{content:""}.bi-cloud-minus-fill:before{content:""}.bi-cloud-minus:before{content:""}.bi-cloud-moon-fill:before{content:""}.bi-cloud-moon:before{content:""}.bi-cloud-plus-fill:before{content:""}.bi-cloud-plus:before{content:""}.bi-cloud-rain-fill:before{content:""}.bi-cloud-rain-heavy-fill:before{content:""}.bi-cloud-rain-heavy:before{content:""}.bi-cloud-rain:before{content:""}.bi-cloud-slash-fill:before{content:""}.bi-cloud-slash:before{content:""}.bi-cloud-sleet-fill:before{content:""}.bi-cloud-sleet:before{content:""}.bi-cloud-snow-fill:before{content:""}.bi-cloud-snow:before{content:""}.bi-cloud-sun-fill:before{content:""}.bi-cloud-sun:before{content:""}.bi-cloud-upload-fill:before{content:""}.bi-cloud-upload:before{content:""}.bi-cloud:before{content:""}.bi-clouds-fill:before{content:""}.bi-clouds:before{content:""}.bi-cloudy-fill:before{content:""}.bi-cloudy:before{content:""}.bi-code-slash:before{content:""}.bi-code-square:before{content:""}.bi-code:before{content:""}.bi-collection-fill:before{content:""}.bi-collection-play-fill:before{content:""}.bi-collection-play:before{content:""}.bi-collection:before{content:""}.bi-columns-gap:before{content:""}.bi-columns:before{content:""}.bi-command:before{content:""}.bi-compass-fill:before{content:""}.bi-compass:before{content:""}.bi-cone-striped:before{content:""}.bi-cone:before{content:""}.bi-controller:before{content:""}.bi-cpu-fill:before{content:""}.bi-cpu:before{content:""}.bi-credit-card-2-back-fill:before{content:""}.bi-credit-card-2-back:before{content:""}.bi-credit-card-2-front-fill:before{content:""}.bi-credit-card-2-front:before{content:""}.bi-credit-card-fill:before{content:""}.bi-credit-card:before{content:""}.bi-crop:before{content:""}.bi-cup-fill:before{content:""}.bi-cup-straw:before{content:""}.bi-cup:before{content:""}.bi-cursor-fill:before{content:""}.bi-cursor-text:before{content:""}.bi-cursor:before{content:""}.bi-dash-circle-dotted:before{content:""}.bi-dash-circle-fill:before{content:""}.bi-dash-circle:before{content:""}.bi-dash-square-dotted:before{content:""}.bi-dash-square-fill:before{content:""}.bi-dash-square:before{content:""}.bi-dash:before{content:""}.bi-diagram-2-fill:before{content:""}.bi-diagram-2:before{content:""}.bi-diagram-3-fill:before{content:""}.bi-diagram-3:before{content:""}.bi-diamond-fill:before{content:""}.bi-diamond-half:before{content:""}.bi-diamond:before{content:""}.bi-dice-1-fill:before{content:""}.bi-dice-1:before{content:""}.bi-dice-2-fill:before{content:""}.bi-dice-2:before{content:""}.bi-dice-3-fill:before{content:""}.bi-dice-3:before{content:""}.bi-dice-4-fill:before{content:""}.bi-dice-4:before{content:""}.bi-dice-5-fill:before{content:""}.bi-dice-5:before{content:""}.bi-dice-6-fill:before{content:""}.bi-dice-6:before{content:""}.bi-disc-fill:before{content:""}.bi-disc:before{content:""}.bi-discord:before{content:""}.bi-display-fill:before{content:""}.bi-display:before{content:""}.bi-distribute-horizontal:before{content:""}.bi-distribute-vertical:before{content:""}.bi-door-closed-fill:before{content:""}.bi-door-closed:before{content:""}.bi-door-open-fill:before{content:""}.bi-door-open:before{content:""}.bi-dot:before{content:""}.bi-download:before{content:""}.bi-droplet-fill:before{content:""}.bi-droplet-half:before{content:""}.bi-droplet:before{content:""}.bi-earbuds:before{content:""}.bi-easel-fill:before{content:""}.bi-easel:before{content:""}.bi-egg-fill:before{content:""}.bi-egg-fried:before{content:""}.bi-egg:before{content:""}.bi-eject-fill:before{content:""}.bi-eject:before{content:""}.bi-emoji-angry-fill:before{content:""}.bi-emoji-angry:before{content:""}.bi-emoji-dizzy-fill:before{content:""}.bi-emoji-dizzy:before{content:""}.bi-emoji-expressionless-fill:before{content:""}.bi-emoji-expressionless:before{content:""}.bi-emoji-frown-fill:before{content:""}.bi-emoji-frown:before{content:""}.bi-emoji-heart-eyes-fill:before{content:""}.bi-emoji-heart-eyes:before{content:""}.bi-emoji-laughing-fill:before{content:""}.bi-emoji-laughing:before{content:""}.bi-emoji-neutral-fill:before{content:""}.bi-emoji-neutral:before{content:""}.bi-emoji-smile-fill:before{content:""}.bi-emoji-smile-upside-down-fill:before{content:""}.bi-emoji-smile-upside-down:before{content:""}.bi-emoji-smile:before{content:""}.bi-emoji-sunglasses-fill:before{content:""}.bi-emoji-sunglasses:before{content:""}.bi-emoji-wink-fill:before{content:""}.bi-emoji-wink:before{content:""}.bi-envelope-fill:before{content:""}.bi-envelope-open-fill:before{content:""}.bi-envelope-open:before{content:""}.bi-envelope:before{content:""}.bi-eraser-fill:before{content:""}.bi-eraser:before{content:""}.bi-exclamation-circle-fill:before{content:""}.bi-exclamation-circle:before{content:""}.bi-exclamation-diamond-fill:before{content:""}.bi-exclamation-diamond:before{content:""}.bi-exclamation-octagon-fill:before{content:""}.bi-exclamation-octagon:before{content:""}.bi-exclamation-square-fill:before{content:""}.bi-exclamation-square:before{content:""}.bi-exclamation-triangle-fill:before{content:""}.bi-exclamation-triangle:before{content:""}.bi-exclamation:before{content:""}.bi-exclude:before{content:""}.bi-eye-fill:before{content:""}.bi-eye-slash-fill:before{content:""}.bi-eye-slash:before{content:""}.bi-eye:before{content:""}.bi-eyedropper:before{content:""}.bi-eyeglasses:before{content:""}.bi-facebook:before{content:""}.bi-file-arrow-down-fill:before{content:""}.bi-file-arrow-down:before{content:""}.bi-file-arrow-up-fill:before{content:""}.bi-file-arrow-up:before{content:""}.bi-file-bar-graph-fill:before{content:""}.bi-file-bar-graph:before{content:""}.bi-file-binary-fill:before{content:""}.bi-file-binary:before{content:""}.bi-file-break-fill:before{content:""}.bi-file-break:before{content:""}.bi-file-check-fill:before{content:""}.bi-file-check:before{content:""}.bi-file-code-fill:before{content:""}.bi-file-code:before{content:""}.bi-file-diff-fill:before{content:""}.bi-file-diff:before{content:""}.bi-file-earmark-arrow-down-fill:before{content:""}.bi-file-earmark-arrow-down:before{content:""}.bi-file-earmark-arrow-up-fill:before{content:""}.bi-file-earmark-arrow-up:before{content:""}.bi-file-earmark-bar-graph-fill:before{content:""}.bi-file-earmark-bar-graph:before{content:""}.bi-file-earmark-binary-fill:before{content:""}.bi-file-earmark-binary:before{content:""}.bi-file-earmark-break-fill:before{content:""}.bi-file-earmark-break:before{content:""}.bi-file-earmark-check-fill:before{content:""}.bi-file-earmark-check:before{content:""}.bi-file-earmark-code-fill:before{content:""}.bi-file-earmark-code:before{content:""}.bi-file-earmark-diff-fill:before{content:""}.bi-file-earmark-diff:before{content:""}.bi-file-earmark-easel-fill:before{content:""}.bi-file-earmark-easel:before{content:""}.bi-file-earmark-excel-fill:before{content:""}.bi-file-earmark-excel:before{content:""}.bi-file-earmark-fill:before{content:""}.bi-file-earmark-font-fill:before{content:""}.bi-file-earmark-font:before{content:""}.bi-file-earmark-image-fill:before{content:""}.bi-file-earmark-image:before{content:""}.bi-file-earmark-lock-fill:before{content:""}.bi-file-earmark-lock:before{content:""}.bi-file-earmark-lock2-fill:before{content:""}.bi-file-earmark-lock2:before{content:""}.bi-file-earmark-medical-fill:before{content:""}.bi-file-earmark-medical:before{content:""}.bi-file-earmark-minus-fill:before{content:""}.bi-file-earmark-minus:before{content:""}.bi-file-earmark-music-fill:before{content:""}.bi-file-earmark-music:before{content:""}.bi-file-earmark-person-fill:before{content:""}.bi-file-earmark-person:before{content:""}.bi-file-earmark-play-fill:before{content:""}.bi-file-earmark-play:before{content:""}.bi-file-earmark-plus-fill:before{content:""}.bi-file-earmark-plus:before{content:""}.bi-file-earmark-post-fill:before{content:""}.bi-file-earmark-post:before{content:""}.bi-file-earmark-ppt-fill:before{content:""}.bi-file-earmark-ppt:before{content:""}.bi-file-earmark-richtext-fill:before{content:""}.bi-file-earmark-richtext:before{content:""}.bi-file-earmark-ruled-fill:before{content:""}.bi-file-earmark-ruled:before{content:""}.bi-file-earmark-slides-fill:before{content:""}.bi-file-earmark-slides:before{content:""}.bi-file-earmark-spreadsheet-fill:before{content:""}.bi-file-earmark-spreadsheet:before{content:""}.bi-file-earmark-text-fill:before{content:""}.bi-file-earmark-text:before{content:""}.bi-file-earmark-word-fill:before{content:""}.bi-file-earmark-word:before{content:""}.bi-file-earmark-x-fill:before{content:""}.bi-file-earmark-x:before{content:""}.bi-file-earmark-zip-fill:before{content:""}.bi-file-earmark-zip:before{content:""}.bi-file-earmark:before{content:""}.bi-file-easel-fill:before{content:""}.bi-file-easel:before{content:""}.bi-file-excel-fill:before{content:""}.bi-file-excel:before{content:""}.bi-file-fill:before{content:""}.bi-file-font-fill:before{content:""}.bi-file-font:before{content:""}.bi-file-image-fill:before{content:""}.bi-file-image:before{content:""}.bi-file-lock-fill:before{content:""}.bi-file-lock:before{content:""}.bi-file-lock2-fill:before{content:""}.bi-file-lock2:before{content:""}.bi-file-medical-fill:before{content:""}.bi-file-medical:before{content:""}.bi-file-minus-fill:before{content:""}.bi-file-minus:before{content:""}.bi-file-music-fill:before{content:""}.bi-file-music:before{content:""}.bi-file-person-fill:before{content:""}.bi-file-person:before{content:""}.bi-file-play-fill:before{content:""}.bi-file-play:before{content:""}.bi-file-plus-fill:before{content:""}.bi-file-plus:before{content:""}.bi-file-post-fill:before{content:""}.bi-file-post:before{content:""}.bi-file-ppt-fill:before{content:""}.bi-file-ppt:before{content:""}.bi-file-richtext-fill:before{content:""}.bi-file-richtext:before{content:""}.bi-file-ruled-fill:before{content:""}.bi-file-ruled:before{content:""}.bi-file-slides-fill:before{content:""}.bi-file-slides:before{content:""}.bi-file-spreadsheet-fill:before{content:""}.bi-file-spreadsheet:before{content:""}.bi-file-text-fill:before{content:""}.bi-file-text:before{content:""}.bi-file-word-fill:before{content:""}.bi-file-word:before{content:""}.bi-file-x-fill:before{content:""}.bi-file-x:before{content:""}.bi-file-zip-fill:before{content:""}.bi-file-zip:before{content:""}.bi-file:before{content:""}.bi-files-alt:before{content:""}.bi-files:before{content:""}.bi-film:before{content:""}.bi-filter-circle-fill:before{content:""}.bi-filter-circle:before{content:""}.bi-filter-left:before{content:""}.bi-filter-right:before{content:""}.bi-filter-square-fill:before{content:""}.bi-filter-square:before{content:""}.bi-filter:before{content:""}.bi-flag-fill:before{content:""}.bi-flag:before{content:""}.bi-flower1:before{content:""}.bi-flower2:before{content:""}.bi-flower3:before{content:""}.bi-folder-check:before{content:""}.bi-folder-fill:before{content:""}.bi-folder-minus:before{content:""}.bi-folder-plus:before{content:""}.bi-folder-symlink-fill:before{content:""}.bi-folder-symlink:before{content:""}.bi-folder-x:before{content:""}.bi-folder:before{content:""}.bi-folder2-open:before{content:""}.bi-folder2:before{content:""}.bi-fonts:before{content:""}.bi-forward-fill:before{content:""}.bi-forward:before{content:""}.bi-front:before{content:""}.bi-fullscreen-exit:before{content:""}.bi-fullscreen:before{content:""}.bi-funnel-fill:before{content:""}.bi-funnel:before{content:""}.bi-gear-fill:before{content:""}.bi-gear-wide-connected:before{content:""}.bi-gear-wide:before{content:""}.bi-gear:before{content:""}.bi-gem:before{content:""}.bi-geo-alt-fill:before{content:""}.bi-geo-alt:before{content:""}.bi-geo-fill:before{content:""}.bi-geo:before{content:""}.bi-gift-fill:before{content:""}.bi-gift:before{content:""}.bi-github:before{content:""}.bi-globe:before{content:""}.bi-globe2:before{content:""}.bi-google:before{content:""}.bi-graph-down:before{content:""}.bi-graph-up:before{content:""}.bi-grid-1x2-fill:before{content:""}.bi-grid-1x2:before{content:""}.bi-grid-3x2-gap-fill:before{content:""}.bi-grid-3x2-gap:before{content:""}.bi-grid-3x2:before{content:""}.bi-grid-3x3-gap-fill:before{content:""}.bi-grid-3x3-gap:before{content:""}.bi-grid-3x3:before{content:""}.bi-grid-fill:before{content:""}.bi-grid:before{content:""}.bi-grip-horizontal:before{content:""}.bi-grip-vertical:before{content:""}.bi-hammer:before{content:""}.bi-hand-index-fill:before{content:""}.bi-hand-index-thumb-fill:before{content:""}.bi-hand-index-thumb:before{content:""}.bi-hand-index:before{content:""}.bi-hand-thumbs-down-fill:before{content:""}.bi-hand-thumbs-down:before{content:""}.bi-hand-thumbs-up-fill:before{content:""}.bi-hand-thumbs-up:before{content:""}.bi-handbag-fill:before{content:""}.bi-handbag:before{content:""}.bi-hash:before{content:""}.bi-hdd-fill:before{content:""}.bi-hdd-network-fill:before{content:""}.bi-hdd-network:before{content:""}.bi-hdd-rack-fill:before{content:""}.bi-hdd-rack:before{content:""}.bi-hdd-stack-fill:before{content:""}.bi-hdd-stack:before{content:""}.bi-hdd:before{content:""}.bi-headphones:before{content:""}.bi-headset:before{content:""}.bi-heart-fill:before{content:""}.bi-heart-half:before{content:""}.bi-heart:before{content:""}.bi-heptagon-fill:before{content:""}.bi-heptagon-half:before{content:""}.bi-heptagon:before{content:""}.bi-hexagon-fill:before{content:""}.bi-hexagon-half:before{content:""}.bi-hexagon:before{content:""}.bi-hourglass-bottom:before{content:""}.bi-hourglass-split:before{content:""}.bi-hourglass-top:before{content:""}.bi-hourglass:before{content:""}.bi-house-door-fill:before{content:""}.bi-house-door:before{content:""}.bi-house-fill:before{content:""}.bi-house:before{content:""}.bi-hr:before{content:""}.bi-hurricane:before{content:""}.bi-image-alt:before{content:""}.bi-image-fill:before{content:""}.bi-image:before{content:""}.bi-images:before{content:""}.bi-inbox-fill:before{content:""}.bi-inbox:before{content:""}.bi-inboxes-fill:before{content:""}.bi-inboxes:before{content:""}.bi-info-circle-fill:before{content:""}.bi-info-circle:before{content:""}.bi-info-square-fill:before{content:""}.bi-info-square:before{content:""}.bi-info:before{content:""}.bi-input-cursor-text:before{content:""}.bi-input-cursor:before{content:""}.bi-instagram:before{content:""}.bi-intersect:before{content:""}.bi-journal-album:before{content:""}.bi-journal-arrow-down:before{content:""}.bi-journal-arrow-up:before{content:""}.bi-journal-bookmark-fill:before{content:""}.bi-journal-bookmark:before{content:""}.bi-journal-check:before{content:""}.bi-journal-code:before{content:""}.bi-journal-medical:before{content:""}.bi-journal-minus:before{content:""}.bi-journal-plus:before{content:""}.bi-journal-richtext:before{content:""}.bi-journal-text:before{content:""}.bi-journal-x:before{content:""}.bi-journal:before{content:""}.bi-journals:before{content:""}.bi-joystick:before{content:""}.bi-justify-left:before{content:""}.bi-justify-right:before{content:""}.bi-justify:before{content:""}.bi-kanban-fill:before{content:""}.bi-kanban:before{content:""}.bi-key-fill:before{content:""}.bi-key:before{content:""}.bi-keyboard-fill:before{content:""}.bi-keyboard:before{content:""}.bi-ladder:before{content:""}.bi-lamp-fill:before{content:""}.bi-lamp:before{content:""}.bi-laptop-fill:before{content:""}.bi-laptop:before{content:""}.bi-layer-backward:before{content:""}.bi-layer-forward:before{content:""}.bi-layers-fill:before{content:""}.bi-layers-half:before{content:""}.bi-layers:before{content:""}.bi-layout-sidebar-inset-reverse:before{content:""}.bi-layout-sidebar-inset:before{content:""}.bi-layout-sidebar-reverse:before{content:""}.bi-layout-sidebar:before{content:""}.bi-layout-split:before{content:""}.bi-layout-text-sidebar-reverse:before{content:""}.bi-layout-text-sidebar:before{content:""}.bi-layout-text-window-reverse:before{content:""}.bi-layout-text-window:before{content:""}.bi-layout-three-columns:before{content:""}.bi-layout-wtf:before{content:""}.bi-life-preserver:before{content:""}.bi-lightbulb-fill:before{content:""}.bi-lightbulb-off-fill:before{content:""}.bi-lightbulb-off:before{content:""}.bi-lightbulb:before{content:""}.bi-lightning-charge-fill:before{content:""}.bi-lightning-charge:before{content:""}.bi-lightning-fill:before{content:""}.bi-lightning:before{content:""}.bi-link-45deg:before{content:""}.bi-link:before{content:""}.bi-linkedin:before{content:""}.bi-list-check:before{content:""}.bi-list-nested:before{content:""}.bi-list-ol:before{content:""}.bi-list-stars:before{content:""}.bi-list-task:before{content:""}.bi-list-ul:before{content:""}.bi-list:before{content:""}.bi-lock-fill:before{content:""}.bi-lock:before{content:""}.bi-mailbox:before{content:""}.bi-mailbox2:before{content:""}.bi-map-fill:before{content:""}.bi-map:before{content:""}.bi-markdown-fill:before{content:""}.bi-markdown:before{content:""}.bi-mask:before{content:""}.bi-megaphone-fill:before{content:""}.bi-megaphone:before{content:""}.bi-menu-app-fill:before{content:""}.bi-menu-app:before{content:""}.bi-menu-button-fill:before{content:""}.bi-menu-button-wide-fill:before{content:""}.bi-menu-button-wide:before{content:""}.bi-menu-button:before{content:""}.bi-menu-down:before{content:""}.bi-menu-up:before{content:""}.bi-mic-fill:before{content:""}.bi-mic-mute-fill:before{content:""}.bi-mic-mute:before{content:""}.bi-mic:before{content:""}.bi-minecart-loaded:before{content:""}.bi-minecart:before{content:""}.bi-moisture:before{content:""}.bi-moon-fill:before{content:""}.bi-moon-stars-fill:before{content:""}.bi-moon-stars:before{content:""}.bi-moon:before{content:""}.bi-mouse-fill:before{content:""}.bi-mouse:before{content:""}.bi-mouse2-fill:before{content:""}.bi-mouse2:before{content:""}.bi-mouse3-fill:before{content:""}.bi-mouse3:before{content:""}.bi-music-note-beamed:before{content:""}.bi-music-note-list:before{content:""}.bi-music-note:before{content:""}.bi-music-player-fill:before{content:""}.bi-music-player:before{content:""}.bi-newspaper:before{content:""}.bi-node-minus-fill:before{content:""}.bi-node-minus:before{content:""}.bi-node-plus-fill:before{content:""}.bi-node-plus:before{content:""}.bi-nut-fill:before{content:""}.bi-nut:before{content:""}.bi-octagon-fill:before{content:""}.bi-octagon-half:before{content:""}.bi-octagon:before{content:""}.bi-option:before{content:""}.bi-outlet:before{content:""}.bi-paint-bucket:before{content:""}.bi-palette-fill:before{content:""}.bi-palette:before{content:""}.bi-palette2:before{content:""}.bi-paperclip:before{content:""}.bi-paragraph:before{content:""}.bi-patch-check-fill:before{content:""}.bi-patch-check:before{content:""}.bi-patch-exclamation-fill:before{content:""}.bi-patch-exclamation:before{content:""}.bi-patch-minus-fill:before{content:""}.bi-patch-minus:before{content:""}.bi-patch-plus-fill:before{content:""}.bi-patch-plus:before{content:""}.bi-patch-question-fill:before{content:""}.bi-patch-question:before{content:""}.bi-pause-btn-fill:before{content:""}.bi-pause-btn:before{content:""}.bi-pause-circle-fill:before{content:""}.bi-pause-circle:before{content:""}.bi-pause-fill:before{content:""}.bi-pause:before{content:""}.bi-peace-fill:before{content:""}.bi-peace:before{content:""}.bi-pen-fill:before{content:""}.bi-pen:before{content:""}.bi-pencil-fill:before{content:""}.bi-pencil-square:before{content:""}.bi-pencil:before{content:""}.bi-pentagon-fill:before{content:""}.bi-pentagon-half:before{content:""}.bi-pentagon:before{content:""}.bi-people-fill:before{content:""}.bi-people:before{content:""}.bi-percent:before{content:""}.bi-person-badge-fill:before{content:""}.bi-person-badge:before{content:""}.bi-person-bounding-box:before{content:""}.bi-person-check-fill:before{content:""}.bi-person-check:before{content:""}.bi-person-circle:before{content:""}.bi-person-dash-fill:before{content:""}.bi-person-dash:before{content:""}.bi-person-fill:before{content:""}.bi-person-lines-fill:before{content:""}.bi-person-plus-fill:before{content:""}.bi-person-plus:before{content:""}.bi-person-square:before{content:""}.bi-person-x-fill:before{content:""}.bi-person-x:before{content:""}.bi-person:before{content:""}.bi-phone-fill:before{content:""}.bi-phone-landscape-fill:before{content:""}.bi-phone-landscape:before{content:""}.bi-phone-vibrate-fill:before{content:""}.bi-phone-vibrate:before{content:""}.bi-phone:before{content:""}.bi-pie-chart-fill:before{content:""}.bi-pie-chart:before{content:""}.bi-pin-angle-fill:before{content:""}.bi-pin-angle:before{content:""}.bi-pin-fill:before{content:""}.bi-pin:before{content:""}.bi-pip-fill:before{content:""}.bi-pip:before{content:""}.bi-play-btn-fill:before{content:""}.bi-play-btn:before{content:""}.bi-play-circle-fill:before{content:""}.bi-play-circle:before{content:""}.bi-play-fill:before{content:""}.bi-play:before{content:""}.bi-plug-fill:before{content:""}.bi-plug:before{content:""}.bi-plus-circle-dotted:before{content:""}.bi-plus-circle-fill:before{content:""}.bi-plus-circle:before{content:""}.bi-plus-square-dotted:before{content:""}.bi-plus-square-fill:before{content:""}.bi-plus-square:before{content:""}.bi-plus:before{content:""}.bi-power:before{content:""}.bi-printer-fill:before{content:""}.bi-printer:before{content:""}.bi-puzzle-fill:before{content:""}.bi-puzzle:before{content:""}.bi-question-circle-fill:before{content:""}.bi-question-circle:before{content:""}.bi-question-diamond-fill:before{content:""}.bi-question-diamond:before{content:""}.bi-question-octagon-fill:before{content:""}.bi-question-octagon:before{content:""}.bi-question-square-fill:before{content:""}.bi-question-square:before{content:""}.bi-question:before{content:""}.bi-rainbow:before{content:""}.bi-receipt-cutoff:before{content:""}.bi-receipt:before{content:""}.bi-reception-0:before{content:""}.bi-reception-1:before{content:""}.bi-reception-2:before{content:""}.bi-reception-3:before{content:""}.bi-reception-4:before{content:""}.bi-record-btn-fill:before{content:""}.bi-record-btn:before{content:""}.bi-record-circle-fill:before{content:""}.bi-record-circle:before{content:""}.bi-record-fill:before{content:""}.bi-record:before{content:""}.bi-record2-fill:before{content:""}.bi-record2:before{content:""}.bi-reply-all-fill:before{content:""}.bi-reply-all:before{content:""}.bi-reply-fill:before{content:""}.bi-reply:before{content:""}.bi-rss-fill:before{content:""}.bi-rss:before{content:""}.bi-rulers:before{content:""}.bi-save-fill:before{content:""}.bi-save:before{content:""}.bi-save2-fill:before{content:""}.bi-save2:before{content:""}.bi-scissors:before{content:""}.bi-screwdriver:before{content:""}.bi-search:before{content:""}.bi-segmented-nav:before{content:""}.bi-server:before{content:""}.bi-share-fill:before{content:""}.bi-share:before{content:""}.bi-shield-check:before{content:""}.bi-shield-exclamation:before{content:""}.bi-shield-fill-check:before{content:""}.bi-shield-fill-exclamation:before{content:""}.bi-shield-fill-minus:before{content:""}.bi-shield-fill-plus:before{content:""}.bi-shield-fill-x:before{content:""}.bi-shield-fill:before{content:""}.bi-shield-lock-fill:before{content:""}.bi-shield-lock:before{content:""}.bi-shield-minus:before{content:""}.bi-shield-plus:before{content:""}.bi-shield-shaded:before{content:""}.bi-shield-slash-fill:before{content:""}.bi-shield-slash:before{content:""}.bi-shield-x:before{content:""}.bi-shield:before{content:""}.bi-shift-fill:before{content:""}.bi-shift:before{content:""}.bi-shop-window:before{content:""}.bi-shop:before{content:""}.bi-shuffle:before{content:""}.bi-signpost-2-fill:before{content:""}.bi-signpost-2:before{content:""}.bi-signpost-fill:before{content:""}.bi-signpost-split-fill:before{content:""}.bi-signpost-split:before{content:""}.bi-signpost:before{content:""}.bi-sim-fill:before{content:""}.bi-sim:before{content:""}.bi-skip-backward-btn-fill:before{content:""}.bi-skip-backward-btn:before{content:""}.bi-skip-backward-circle-fill:before{content:""}.bi-skip-backward-circle:before{content:""}.bi-skip-backward-fill:before{content:""}.bi-skip-backward:before{content:""}.bi-skip-end-btn-fill:before{content:""}.bi-skip-end-btn:before{content:""}.bi-skip-end-circle-fill:before{content:""}.bi-skip-end-circle:before{content:""}.bi-skip-end-fill:before{content:""}.bi-skip-end:before{content:""}.bi-skip-forward-btn-fill:before{content:""}.bi-skip-forward-btn:before{content:""}.bi-skip-forward-circle-fill:before{content:""}.bi-skip-forward-circle:before{content:""}.bi-skip-forward-fill:before{content:""}.bi-skip-forward:before{content:""}.bi-skip-start-btn-fill:before{content:""}.bi-skip-start-btn:before{content:""}.bi-skip-start-circle-fill:before{content:""}.bi-skip-start-circle:before{content:""}.bi-skip-start-fill:before{content:""}.bi-skip-start:before{content:""}.bi-slack:before{content:""}.bi-slash-circle-fill:before{content:""}.bi-slash-circle:before{content:""}.bi-slash-square-fill:before{content:""}.bi-slash-square:before{content:""}.bi-slash:before{content:""}.bi-sliders:before{content:""}.bi-smartwatch:before{content:""}.bi-snow:before{content:""}.bi-snow2:before{content:""}.bi-snow3:before{content:""}.bi-sort-alpha-down-alt:before{content:""}.bi-sort-alpha-down:before{content:""}.bi-sort-alpha-up-alt:before{content:""}.bi-sort-alpha-up:before{content:""}.bi-sort-down-alt:before{content:""}.bi-sort-down:before{content:""}.bi-sort-numeric-down-alt:before{content:""}.bi-sort-numeric-down:before{content:""}.bi-sort-numeric-up-alt:before{content:""}.bi-sort-numeric-up:before{content:""}.bi-sort-up-alt:before{content:""}.bi-sort-up:before{content:""}.bi-soundwave:before{content:""}.bi-speaker-fill:before{content:""}.bi-speaker:before{content:""}.bi-speedometer:before{content:""}.bi-speedometer2:before{content:""}.bi-spellcheck:before{content:""}.bi-square-fill:before{content:""}.bi-square-half:before{content:""}.bi-square:before{content:""}.bi-stack:before{content:""}.bi-star-fill:before{content:""}.bi-star-half:before{content:""}.bi-star:before{content:""}.bi-stars:before{content:""}.bi-stickies-fill:before{content:""}.bi-stickies:before{content:""}.bi-sticky-fill:before{content:""}.bi-sticky:before{content:""}.bi-stop-btn-fill:before{content:""}.bi-stop-btn:before{content:""}.bi-stop-circle-fill:before{content:""}.bi-stop-circle:before{content:""}.bi-stop-fill:before{content:""}.bi-stop:before{content:""}.bi-stoplights-fill:before{content:""}.bi-stoplights:before{content:""}.bi-stopwatch-fill:before{content:""}.bi-stopwatch:before{content:""}.bi-subtract:before{content:""}.bi-suit-club-fill:before{content:""}.bi-suit-club:before{content:""}.bi-suit-diamond-fill:before{content:""}.bi-suit-diamond:before{content:""}.bi-suit-heart-fill:before{content:""}.bi-suit-heart:before{content:""}.bi-suit-spade-fill:before{content:""}.bi-suit-spade:before{content:""}.bi-sun-fill:before{content:""}.bi-sun:before{content:""}.bi-sunglasses:before{content:""}.bi-sunrise-fill:before{content:""}.bi-sunrise:before{content:""}.bi-sunset-fill:before{content:""}.bi-sunset:before{content:""}.bi-symmetry-horizontal:before{content:""}.bi-symmetry-vertical:before{content:""}.bi-table:before{content:""}.bi-tablet-fill:before{content:""}.bi-tablet-landscape-fill:before{content:""}.bi-tablet-landscape:before{content:""}.bi-tablet:before{content:""}.bi-tag-fill:before{content:""}.bi-tag:before{content:""}.bi-tags-fill:before{content:""}.bi-tags:before{content:""}.bi-telegram:before{content:""}.bi-telephone-fill:before{content:""}.bi-telephone-forward-fill:before{content:""}.bi-telephone-forward:before{content:""}.bi-telephone-inbound-fill:before{content:""}.bi-telephone-inbound:before{content:""}.bi-telephone-minus-fill:before{content:""}.bi-telephone-minus:before{content:""}.bi-telephone-outbound-fill:before{content:""}.bi-telephone-outbound:before{content:""}.bi-telephone-plus-fill:before{content:""}.bi-telephone-plus:before{content:""}.bi-telephone-x-fill:before{content:""}.bi-telephone-x:before{content:""}.bi-telephone:before{content:""}.bi-terminal-fill:before{content:""}.bi-terminal:before{content:""}.bi-text-center:before{content:""}.bi-text-indent-left:before{content:""}.bi-text-indent-right:before{content:""}.bi-text-left:before{content:""}.bi-text-paragraph:before{content:""}.bi-text-right:before{content:""}.bi-textarea-resize:before{content:""}.bi-textarea-t:before{content:""}.bi-textarea:before{content:""}.bi-thermometer-half:before{content:""}.bi-thermometer-high:before{content:""}.bi-thermometer-low:before{content:""}.bi-thermometer-snow:before{content:""}.bi-thermometer-sun:before{content:""}.bi-thermometer:before{content:""}.bi-three-dots-vertical:before{content:""}.bi-three-dots:before{content:""}.bi-toggle-off:before{content:""}.bi-toggle-on:before{content:""}.bi-toggle2-off:before{content:""}.bi-toggle2-on:before{content:""}.bi-toggles:before{content:""}.bi-toggles2:before{content:""}.bi-tools:before{content:""}.bi-tornado:before{content:""}.bi-trash-fill:before{content:""}.bi-trash:before{content:""}.bi-trash2-fill:before{content:""}.bi-trash2:before{content:""}.bi-tree-fill:before{content:""}.bi-tree:before{content:""}.bi-triangle-fill:before{content:""}.bi-triangle-half:before{content:""}.bi-triangle:before{content:""}.bi-trophy-fill:before{content:""}.bi-trophy:before{content:""}.bi-tropical-storm:before{content:""}.bi-truck-flatbed:before{content:""}.bi-truck:before{content:""}.bi-tsunami:before{content:""}.bi-tv-fill:before{content:""}.bi-tv:before{content:""}.bi-twitch:before{content:""}.bi-twitter:before{content:""}.bi-type-bold:before{content:""}.bi-type-h1:before{content:""}.bi-type-h2:before{content:""}.bi-type-h3:before{content:""}.bi-type-italic:before{content:""}.bi-type-strikethrough:before{content:""}.bi-type-underline:before{content:""}.bi-type:before{content:""}.bi-ui-checks-grid:before{content:""}.bi-ui-checks:before{content:""}.bi-ui-radios-grid:before{content:""}.bi-ui-radios:before{content:""}.bi-umbrella-fill:before{content:""}.bi-umbrella:before{content:""}.bi-union:before{content:""}.bi-unlock-fill:before{content:""}.bi-unlock:before{content:""}.bi-upc-scan:before{content:""}.bi-upc:before{content:""}.bi-upload:before{content:""}.bi-vector-pen:before{content:""}.bi-view-list:before{content:""}.bi-view-stacked:before{content:""}.bi-vinyl-fill:before{content:""}.bi-vinyl:before{content:""}.bi-voicemail:before{content:""}.bi-volume-down-fill:before{content:""}.bi-volume-down:before{content:""}.bi-volume-mute-fill:before{content:""}.bi-volume-mute:before{content:""}.bi-volume-off-fill:before{content:""}.bi-volume-off:before{content:""}.bi-volume-up-fill:before{content:""}.bi-volume-up:before{content:""}.bi-vr:before{content:""}.bi-wallet-fill:before{content:""}.bi-wallet:before{content:""}.bi-wallet2:before{content:""}.bi-watch:before{content:""}.bi-water:before{content:""}.bi-whatsapp:before{content:""}.bi-wifi-1:before{content:""}.bi-wifi-2:before{content:""}.bi-wifi-off:before{content:""}.bi-wifi:before{content:""}.bi-wind:before{content:""}.bi-window-dock:before{content:""}.bi-window-sidebar:before{content:""}.bi-window:before{content:""}.bi-wrench:before{content:""}.bi-x-circle-fill:before{content:""}.bi-x-circle:before{content:""}.bi-x-diamond-fill:before{content:""}.bi-x-diamond:before{content:""}.bi-x-octagon-fill:before{content:""}.bi-x-octagon:before{content:""}.bi-x-square-fill:before{content:""}.bi-x-square:before{content:""}.bi-x:before{content:""}.bi-youtube:before{content:""}.bi-zoom-in:before{content:""}.bi-zoom-out:before{content:""}.bi-bank:before{content:""}.bi-bank2:before{content:""}.bi-bell-slash-fill:before{content:""}.bi-bell-slash:before{content:""}.bi-cash-coin:before{content:""}.bi-check-lg:before{content:""}.bi-coin:before{content:""}.bi-currency-bitcoin:before{content:""}.bi-currency-dollar:before{content:""}.bi-currency-euro:before{content:""}.bi-currency-exchange:before{content:""}.bi-currency-pound:before{content:""}.bi-currency-yen:before{content:""}.bi-dash-lg:before{content:""}.bi-exclamation-lg:before{content:""}.bi-file-earmark-pdf-fill:before{content:""}.bi-file-earmark-pdf:before{content:""}.bi-file-pdf-fill:before{content:""}.bi-file-pdf:before{content:""}.bi-gender-ambiguous:before{content:""}.bi-gender-female:before{content:""}.bi-gender-male:before{content:""}.bi-gender-trans:before{content:""}.bi-headset-vr:before{content:""}.bi-info-lg:before{content:""}.bi-mastodon:before{content:""}.bi-messenger:before{content:""}.bi-piggy-bank-fill:before{content:""}.bi-piggy-bank:before{content:""}.bi-pin-map-fill:before{content:""}.bi-pin-map:before{content:""}.bi-plus-lg:before{content:""}.bi-question-lg:before{content:""}.bi-recycle:before{content:""}.bi-reddit:before{content:""}.bi-safe-fill:before{content:""}.bi-safe2-fill:before{content:""}.bi-safe2:before{content:""}.bi-sd-card-fill:before{content:""}.bi-sd-card:before{content:""}.bi-skype:before{content:""}.bi-slash-lg:before{content:""}.bi-translate:before{content:""}.bi-x-lg:before{content:""}.bi-safe:before{content:""}.bi-apple:before{content:""}.bi-microsoft:before{content:""}.bi-windows:before{content:""}.bi-behance:before{content:""}.bi-dribbble:before{content:""}.bi-line:before{content:""}.bi-medium:before{content:""}.bi-paypal:before{content:""}.bi-pinterest:before{content:""}.bi-signal:before{content:""}.bi-snapchat:before{content:""}.bi-spotify:before{content:""}.bi-stack-overflow:before{content:""}.bi-strava:before{content:""}.bi-wordpress:before{content:""}.bi-vimeo:before{content:""}.bi-activity:before{content:""}.bi-easel2-fill:before{content:""}.bi-easel2:before{content:""}.bi-easel3-fill:before{content:""}.bi-easel3:before{content:""}.bi-fan:before{content:""}.bi-fingerprint:before{content:""}.bi-graph-down-arrow:before{content:""}.bi-graph-up-arrow:before{content:""}.bi-hypnotize:before{content:""}.bi-magic:before{content:""}.bi-person-rolodex:before{content:""}.bi-person-video:before{content:""}.bi-person-video2:before{content:""}.bi-person-video3:before{content:""}.bi-person-workspace:before{content:""}.bi-radioactive:before{content:""}.bi-webcam-fill:before{content:""}.bi-webcam:before{content:""}.bi-yin-yang:before{content:""}.bi-bandaid-fill:before{content:""}.bi-bandaid:before{content:""}.bi-bluetooth:before{content:""}.bi-body-text:before{content:""}.bi-boombox:before{content:""}.bi-boxes:before{content:""}.bi-dpad-fill:before{content:""}.bi-dpad:before{content:""}.bi-ear-fill:before{content:""}.bi-ear:before{content:""}.bi-envelope-check-fill:before{content:""}.bi-envelope-check:before{content:""}.bi-envelope-dash-fill:before{content:""}.bi-envelope-dash:before{content:""}.bi-envelope-exclamation-fill:before{content:""}.bi-envelope-exclamation:before{content:""}.bi-envelope-plus-fill:before{content:""}.bi-envelope-plus:before{content:""}.bi-envelope-slash-fill:before{content:""}.bi-envelope-slash:before{content:""}.bi-envelope-x-fill:before{content:""}.bi-envelope-x:before{content:""}.bi-explicit-fill:before{content:""}.bi-explicit:before{content:""}.bi-git:before{content:""}.bi-infinity:before{content:""}.bi-list-columns-reverse:before{content:""}.bi-list-columns:before{content:""}.bi-meta:before{content:""}.bi-nintendo-switch:before{content:""}.bi-pc-display-horizontal:before{content:""}.bi-pc-display:before{content:""}.bi-pc-horizontal:before{content:""}.bi-pc:before{content:""}.bi-playstation:before{content:""}.bi-plus-slash-minus:before{content:""}.bi-projector-fill:before{content:""}.bi-projector:before{content:""}.bi-qr-code-scan:before{content:""}.bi-qr-code:before{content:""}.bi-quora:before{content:""}.bi-quote:before{content:""}.bi-robot:before{content:""}.bi-send-check-fill:before{content:""}.bi-send-check:before{content:""}.bi-send-dash-fill:before{content:""}.bi-send-dash:before{content:""}.bi-send-exclamation-fill:before{content:""}.bi-send-exclamation:before{content:""}.bi-send-fill:before{content:""}.bi-send-plus-fill:before{content:""}.bi-send-plus:before{content:""}.bi-send-slash-fill:before{content:""}.bi-send-slash:before{content:""}.bi-send-x-fill:before{content:""}.bi-send-x:before{content:""}.bi-send:before{content:""}.bi-steam:before{content:""}.bi-terminal-dash:before{content:""}.bi-terminal-plus:before{content:""}.bi-terminal-split:before{content:""}.bi-ticket-detailed-fill:before{content:""}.bi-ticket-detailed:before{content:""}.bi-ticket-fill:before{content:""}.bi-ticket-perforated-fill:before{content:""}.bi-ticket-perforated:before{content:""}.bi-ticket:before{content:""}.bi-tiktok:before{content:""}.bi-window-dash:before{content:""}.bi-window-desktop:before{content:""}.bi-window-fullscreen:before{content:""}.bi-window-plus:before{content:""}.bi-window-split:before{content:""}.bi-window-stack:before{content:""}.bi-window-x:before{content:""}.bi-xbox:before{content:""}.bi-ethernet:before{content:""}.bi-hdmi-fill:before{content:""}.bi-hdmi:before{content:""}.bi-usb-c-fill:before{content:""}.bi-usb-c:before{content:""}.bi-usb-fill:before{content:""}.bi-usb-plug-fill:before{content:""}.bi-usb-plug:before{content:""}.bi-usb-symbol:before{content:""}.bi-usb:before{content:""}.bi-boombox-fill:before{content:""}.bi-displayport:before{content:""}.bi-gpu-card:before{content:""}.bi-memory:before{content:""}.bi-modem-fill:before{content:""}.bi-modem:before{content:""}.bi-motherboard-fill:before{content:""}.bi-motherboard:before{content:""}.bi-optical-audio-fill:before{content:""}.bi-optical-audio:before{content:""}.bi-pci-card:before{content:""}.bi-router-fill:before{content:""}.bi-router:before{content:""}.bi-thunderbolt-fill:before{content:""}.bi-thunderbolt:before{content:""}.bi-usb-drive-fill:before{content:""}.bi-usb-drive:before{content:""}.bi-usb-micro-fill:before{content:""}.bi-usb-micro:before{content:""}.bi-usb-mini-fill:before{content:""}.bi-usb-mini:before{content:""}.bi-cloud-haze2:before{content:""}.bi-device-hdd-fill:before{content:""}.bi-device-hdd:before{content:""}.bi-device-ssd-fill:before{content:""}.bi-device-ssd:before{content:""}.bi-displayport-fill:before{content:""}.bi-mortarboard-fill:before{content:""}.bi-mortarboard:before{content:""}.bi-terminal-x:before{content:""}.bi-arrow-through-heart-fill:before{content:""}.bi-arrow-through-heart:before{content:""}.bi-badge-sd-fill:before{content:""}.bi-badge-sd:before{content:""}.bi-bag-heart-fill:before{content:""}.bi-bag-heart:before{content:""}.bi-balloon-fill:before{content:""}.bi-balloon-heart-fill:before{content:""}.bi-balloon-heart:before{content:""}.bi-balloon:before{content:""}.bi-box2-fill:before{content:""}.bi-box2-heart-fill:before{content:""}.bi-box2-heart:before{content:""}.bi-box2:before{content:""}.bi-braces-asterisk:before{content:""}.bi-calendar-heart-fill:before{content:""}.bi-calendar-heart:before{content:""}.bi-calendar2-heart-fill:before{content:""}.bi-calendar2-heart:before{content:""}.bi-chat-heart-fill:before{content:""}.bi-chat-heart:before{content:""}.bi-chat-left-heart-fill:before{content:""}.bi-chat-left-heart:before{content:""}.bi-chat-right-heart-fill:before{content:""}.bi-chat-right-heart:before{content:""}.bi-chat-square-heart-fill:before{content:""}.bi-chat-square-heart:before{content:""}.bi-clipboard-check-fill:before{content:""}.bi-clipboard-data-fill:before{content:""}.bi-clipboard-fill:before{content:""}.bi-clipboard-heart-fill:before{content:""}.bi-clipboard-heart:before{content:""}.bi-clipboard-minus-fill:before{content:""}.bi-clipboard-plus-fill:before{content:""}.bi-clipboard-pulse:before{content:""}.bi-clipboard-x-fill:before{content:""}.bi-clipboard2-check-fill:before{content:""}.bi-clipboard2-check:before{content:""}.bi-clipboard2-data-fill:before{content:""}.bi-clipboard2-data:before{content:""}.bi-clipboard2-fill:before{content:""}.bi-clipboard2-heart-fill:before{content:""}.bi-clipboard2-heart:before{content:""}.bi-clipboard2-minus-fill:before{content:""}.bi-clipboard2-minus:before{content:""}.bi-clipboard2-plus-fill:before{content:""}.bi-clipboard2-plus:before{content:""}.bi-clipboard2-pulse-fill:before{content:""}.bi-clipboard2-pulse:before{content:""}.bi-clipboard2-x-fill:before{content:""}.bi-clipboard2-x:before{content:""}.bi-clipboard2:before{content:""}.bi-emoji-kiss-fill:before{content:""}.bi-emoji-kiss:before{content:""}.bi-envelope-heart-fill:before{content:""}.bi-envelope-heart:before{content:""}.bi-envelope-open-heart-fill:before{content:""}.bi-envelope-open-heart:before{content:""}.bi-envelope-paper-fill:before{content:""}.bi-envelope-paper-heart-fill:before{content:""}.bi-envelope-paper-heart:before{content:""}.bi-envelope-paper:before{content:""}.bi-filetype-aac:before{content:""}.bi-filetype-ai:before{content:""}.bi-filetype-bmp:before{content:""}.bi-filetype-cs:before{content:""}.bi-filetype-css:before{content:""}.bi-filetype-csv:before{content:""}.bi-filetype-doc:before{content:""}.bi-filetype-docx:before{content:""}.bi-filetype-exe:before{content:""}.bi-filetype-gif:before{content:""}.bi-filetype-heic:before{content:""}.bi-filetype-html:before{content:""}.bi-filetype-java:before{content:""}.bi-filetype-jpg:before{content:""}.bi-filetype-js:before{content:""}.bi-filetype-jsx:before{content:""}.bi-filetype-key:before{content:""}.bi-filetype-m4p:before{content:""}.bi-filetype-md:before{content:""}.bi-filetype-mdx:before{content:""}.bi-filetype-mov:before{content:""}.bi-filetype-mp3:before{content:""}.bi-filetype-mp4:before{content:""}.bi-filetype-otf:before{content:""}.bi-filetype-pdf:before{content:""}.bi-filetype-php:before{content:""}.bi-filetype-png:before{content:""}.bi-filetype-ppt:before{content:""}.bi-filetype-psd:before{content:""}.bi-filetype-py:before{content:""}.bi-filetype-raw:before{content:""}.bi-filetype-rb:before{content:""}.bi-filetype-sass:before{content:""}.bi-filetype-scss:before{content:""}.bi-filetype-sh:before{content:""}.bi-filetype-svg:before{content:""}.bi-filetype-tiff:before{content:""}.bi-filetype-tsx:before{content:""}.bi-filetype-ttf:before{content:""}.bi-filetype-txt:before{content:""}.bi-filetype-wav:before{content:""}.bi-filetype-woff:before{content:""}.bi-filetype-xls:before{content:""}.bi-filetype-xml:before{content:""}.bi-filetype-yml:before{content:""}.bi-heart-arrow:before{content:""}.bi-heart-pulse-fill:before{content:""}.bi-heart-pulse:before{content:""}.bi-heartbreak-fill:before{content:""}.bi-heartbreak:before{content:""}.bi-hearts:before{content:""}.bi-hospital-fill:before{content:""}.bi-hospital:before{content:""}.bi-house-heart-fill:before{content:""}.bi-house-heart:before{content:""}.bi-incognito:before{content:""}.bi-magnet-fill:before{content:""}.bi-magnet:before{content:""}.bi-person-heart:before{content:""}.bi-person-hearts:before{content:""}.bi-phone-flip:before{content:""}.bi-plugin:before{content:""}.bi-postage-fill:before{content:""}.bi-postage-heart-fill:before{content:""}.bi-postage-heart:before{content:""}.bi-postage:before{content:""}.bi-postcard-fill:before{content:""}.bi-postcard-heart-fill:before{content:""}.bi-postcard-heart:before{content:""}.bi-postcard:before{content:""}.bi-search-heart-fill:before{content:""}.bi-search-heart:before{content:""}.bi-sliders2-vertical:before{content:""}.bi-sliders2:before{content:""}.bi-trash3-fill:before{content:""}.bi-trash3:before{content:""}.bi-valentine:before{content:""}.bi-valentine2:before{content:""}.bi-wrench-adjustable-circle-fill:before{content:""}.bi-wrench-adjustable-circle:before{content:""}.bi-wrench-adjustable:before{content:""}.bi-filetype-json:before{content:""}.bi-filetype-pptx:before{content:""}.bi-filetype-xlsx:before{content:""}.bi-1-circle-fill:before{content:""}.bi-1-circle:before{content:""}.bi-1-square-fill:before{content:""}.bi-1-square:before{content:""}.bi-2-circle-fill:before{content:""}.bi-2-circle:before{content:""}.bi-2-square-fill:before{content:""}.bi-2-square:before{content:""}.bi-3-circle-fill:before{content:""}.bi-3-circle:before{content:""}.bi-3-square-fill:before{content:""}.bi-3-square:before{content:""}.bi-4-circle-fill:before{content:""}.bi-4-circle:before{content:""}.bi-4-square-fill:before{content:""}.bi-4-square:before{content:""}.bi-5-circle-fill:before{content:""}.bi-5-circle:before{content:""}.bi-5-square-fill:before{content:""}.bi-5-square:before{content:""}.bi-6-circle-fill:before{content:""}.bi-6-circle:before{content:""}.bi-6-square-fill:before{content:""}.bi-6-square:before{content:""}.bi-7-circle-fill:before{content:""}.bi-7-circle:before{content:""}.bi-7-square-fill:before{content:""}.bi-7-square:before{content:""}.bi-8-circle-fill:before{content:""}.bi-8-circle:before{content:""}.bi-8-square-fill:before{content:""}.bi-8-square:before{content:""}.bi-9-circle-fill:before{content:""}.bi-9-circle:before{content:""}.bi-9-square-fill:before{content:""}.bi-9-square:before{content:""}.bi-airplane-engines-fill:before{content:""}.bi-airplane-engines:before{content:""}.bi-airplane-fill:before{content:""}.bi-airplane:before{content:""}.bi-alexa:before{content:""}.bi-alipay:before{content:""}.bi-android:before{content:""}.bi-android2:before{content:""}.bi-box-fill:before{content:""}.bi-box-seam-fill:before{content:""}.bi-browser-chrome:before{content:""}.bi-browser-edge:before{content:""}.bi-browser-firefox:before{content:""}.bi-browser-safari:before{content:""}.bi-c-circle-fill:before{content:""}.bi-c-circle:before{content:""}.bi-c-square-fill:before{content:""}.bi-c-square:before{content:""}.bi-capsule-pill:before{content:""}.bi-capsule:before{content:""}.bi-car-front-fill:before{content:""}.bi-car-front:before{content:""}.bi-cassette-fill:before{content:""}.bi-cassette:before{content:""}.bi-cc-circle-fill:before{content:""}.bi-cc-circle:before{content:""}.bi-cc-square-fill:before{content:""}.bi-cc-square:before{content:""}.bi-cup-hot-fill:before{content:""}.bi-cup-hot:before{content:""}.bi-currency-rupee:before{content:""}.bi-dropbox:before{content:""}.bi-escape:before{content:""}.bi-fast-forward-btn-fill:before{content:""}.bi-fast-forward-btn:before{content:""}.bi-fast-forward-circle-fill:before{content:""}.bi-fast-forward-circle:before{content:""}.bi-fast-forward-fill:before{content:""}.bi-fast-forward:before{content:""}.bi-filetype-sql:before{content:""}.bi-fire:before{content:""}.bi-google-play:before{content:""}.bi-h-circle-fill:before{content:""}.bi-h-circle:before{content:""}.bi-h-square-fill:before{content:""}.bi-h-square:before{content:""}.bi-indent:before{content:""}.bi-lungs-fill:before{content:""}.bi-lungs:before{content:""}.bi-microsoft-teams:before{content:""}.bi-p-circle-fill:before{content:""}.bi-p-circle:before{content:""}.bi-p-square-fill:before{content:""}.bi-p-square:before{content:""}.bi-pass-fill:before{content:""}.bi-pass:before{content:""}.bi-prescription:before{content:""}.bi-prescription2:before{content:""}.bi-r-circle-fill:before{content:""}.bi-r-circle:before{content:""}.bi-r-square-fill:before{content:""}.bi-r-square:before{content:""}.bi-repeat-1:before{content:""}.bi-repeat:before{content:""}.bi-rewind-btn-fill:before{content:""}.bi-rewind-btn:before{content:""}.bi-rewind-circle-fill:before{content:""}.bi-rewind-circle:before{content:""}.bi-rewind-fill:before{content:""}.bi-rewind:before{content:""}.bi-train-freight-front-fill:before{content:""}.bi-train-freight-front:before{content:""}.bi-train-front-fill:before{content:""}.bi-train-front:before{content:""}.bi-train-lightrail-front-fill:before{content:""}.bi-train-lightrail-front:before{content:""}.bi-truck-front-fill:before{content:""}.bi-truck-front:before{content:""}.bi-ubuntu:before{content:""}.bi-unindent:before{content:""}.bi-unity:before{content:""}.bi-universal-access-circle:before{content:""}.bi-universal-access:before{content:""}.bi-virus:before{content:""}.bi-virus2:before{content:""}.bi-wechat:before{content:""}.bi-yelp:before{content:""}.bi-sign-stop-fill:before{content:""}.bi-sign-stop-lights-fill:before{content:""}.bi-sign-stop-lights:before{content:""}.bi-sign-stop:before{content:""}.bi-sign-turn-left-fill:before{content:""}.bi-sign-turn-left:before{content:""}.bi-sign-turn-right-fill:before{content:""}.bi-sign-turn-right:before{content:""}.bi-sign-turn-slight-left-fill:before{content:""}.bi-sign-turn-slight-left:before{content:""}.bi-sign-turn-slight-right-fill:before{content:""}.bi-sign-turn-slight-right:before{content:""}.bi-sign-yield-fill:before{content:""}.bi-sign-yield:before{content:""}.bi-ev-station-fill:before{content:""}.bi-ev-station:before{content:""}.bi-fuel-pump-diesel-fill:before{content:""}.bi-fuel-pump-diesel:before{content:""}.bi-fuel-pump-fill:before{content:""}.bi-fuel-pump:before{content:""}.bi-0-circle-fill:before{content:""}.bi-0-circle:before{content:""}.bi-0-square-fill:before{content:""}.bi-0-square:before{content:""}.bi-rocket-fill:before{content:""}.bi-rocket-takeoff-fill:before{content:""}.bi-rocket-takeoff:before{content:""}.bi-rocket:before{content:""}.bi-stripe:before{content:""}.bi-subscript:before{content:""}.bi-superscript:before{content:""}.bi-trello:before{content:""}.bi-envelope-at-fill:before{content:""}.bi-envelope-at:before{content:""}.bi-regex:before{content:""}.bi-text-wrap:before{content:""}.bi-sign-dead-end-fill:before{content:""}.bi-sign-dead-end:before{content:""}.bi-sign-do-not-enter-fill:before{content:""}.bi-sign-do-not-enter:before{content:""}.bi-sign-intersection-fill:before{content:""}.bi-sign-intersection-side-fill:before{content:""}.bi-sign-intersection-side:before{content:""}.bi-sign-intersection-t-fill:before{content:""}.bi-sign-intersection-t:before{content:""}.bi-sign-intersection-y-fill:before{content:""}.bi-sign-intersection-y:before{content:""}.bi-sign-intersection:before{content:""}.bi-sign-merge-left-fill:before{content:""}.bi-sign-merge-left:before{content:""}.bi-sign-merge-right-fill:before{content:""}.bi-sign-merge-right:before{content:""}.bi-sign-no-left-turn-fill:before{content:""}.bi-sign-no-left-turn:before{content:""}.bi-sign-no-parking-fill:before{content:""}.bi-sign-no-parking:before{content:""}.bi-sign-no-right-turn-fill:before{content:""}.bi-sign-no-right-turn:before{content:""}.bi-sign-railroad-fill:before{content:""}.bi-sign-railroad:before{content:""}.bi-building-add:before{content:""}.bi-building-check:before{content:""}.bi-building-dash:before{content:""}.bi-building-down:before{content:""}.bi-building-exclamation:before{content:""}.bi-building-fill-add:before{content:""}.bi-building-fill-check:before{content:""}.bi-building-fill-dash:before{content:""}.bi-building-fill-down:before{content:""}.bi-building-fill-exclamation:before{content:""}.bi-building-fill-gear:before{content:""}.bi-building-fill-lock:before{content:""}.bi-building-fill-slash:before{content:""}.bi-building-fill-up:before{content:""}.bi-building-fill-x:before{content:""}.bi-building-fill:before{content:""}.bi-building-gear:before{content:""}.bi-building-lock:before{content:""}.bi-building-slash:before{content:""}.bi-building-up:before{content:""}.bi-building-x:before{content:""}.bi-buildings-fill:before{content:""}.bi-buildings:before{content:""}.bi-bus-front-fill:before{content:""}.bi-bus-front:before{content:""}.bi-ev-front-fill:before{content:""}.bi-ev-front:before{content:""}.bi-globe-americas:before{content:""}.bi-globe-asia-australia:before{content:""}.bi-globe-central-south-asia:before{content:""}.bi-globe-europe-africa:before{content:""}.bi-house-add-fill:before{content:""}.bi-house-add:before{content:""}.bi-house-check-fill:before{content:""}.bi-house-check:before{content:""}.bi-house-dash-fill:before{content:""}.bi-house-dash:before{content:""}.bi-house-down-fill:before{content:""}.bi-house-down:before{content:""}.bi-house-exclamation-fill:before{content:""}.bi-house-exclamation:before{content:""}.bi-house-gear-fill:before{content:""}.bi-house-gear:before{content:""}.bi-house-lock-fill:before{content:""}.bi-house-lock:before{content:""}.bi-house-slash-fill:before{content:""}.bi-house-slash:before{content:""}.bi-house-up-fill:before{content:""}.bi-house-up:before{content:""}.bi-house-x-fill:before{content:""}.bi-house-x:before{content:""}.bi-person-add:before{content:""}.bi-person-down:before{content:""}.bi-person-exclamation:before{content:""}.bi-person-fill-add:before{content:""}.bi-person-fill-check:before{content:""}.bi-person-fill-dash:before{content:""}.bi-person-fill-down:before{content:""}.bi-person-fill-exclamation:before{content:""}.bi-person-fill-gear:before{content:""}.bi-person-fill-lock:before{content:""}.bi-person-fill-slash:before{content:""}.bi-person-fill-up:before{content:""}.bi-person-fill-x:before{content:""}.bi-person-gear:before{content:""}.bi-person-lock:before{content:""}.bi-person-slash:before{content:""}.bi-person-up:before{content:""}.bi-scooter:before{content:""}.bi-taxi-front-fill:before{content:""}.bi-taxi-front:before{content:""}.bi-amd:before{content:""}.bi-database-add:before{content:""}.bi-database-check:before{content:""}.bi-database-dash:before{content:""}.bi-database-down:before{content:""}.bi-database-exclamation:before{content:""}.bi-database-fill-add:before{content:""}.bi-database-fill-check:before{content:""}.bi-database-fill-dash:before{content:""}.bi-database-fill-down:before{content:""}.bi-database-fill-exclamation:before{content:""}.bi-database-fill-gear:before{content:""}.bi-database-fill-lock:before{content:""}.bi-database-fill-slash:before{content:""}.bi-database-fill-up:before{content:""}.bi-database-fill-x:before{content:""}.bi-database-fill:before{content:""}.bi-database-gear:before{content:""}.bi-database-lock:before{content:""}.bi-database-slash:before{content:""}.bi-database-up:before{content:""}.bi-database-x:before{content:""}.bi-database:before{content:""}.bi-houses-fill:before{content:""}.bi-houses:before{content:""}.bi-nvidia:before{content:""}.bi-person-vcard-fill:before{content:""}.bi-person-vcard:before{content:""}.bi-sina-weibo:before{content:""}.bi-tencent-qq:before{content:""}.bi-wikipedia:before{content:""}.bi-alphabet-uppercase:before{content:""}.bi-alphabet:before{content:""}.bi-amazon:before{content:""}.bi-arrows-collapse-vertical:before{content:""}.bi-arrows-expand-vertical:before{content:""}.bi-arrows-vertical:before{content:""}.bi-arrows:before{content:""}.bi-ban-fill:before{content:""}.bi-ban:before{content:""}.bi-bing:before{content:""}.bi-cake:before{content:""}.bi-cake2:before{content:""}.bi-cookie:before{content:""}.bi-copy:before{content:""}.bi-crosshair:before{content:""}.bi-crosshair2:before{content:""}.bi-emoji-astonished-fill:before{content:""}.bi-emoji-astonished:before{content:""}.bi-emoji-grimace-fill:before{content:""}.bi-emoji-grimace:before{content:""}.bi-emoji-grin-fill:before{content:""}.bi-emoji-grin:before{content:""}.bi-emoji-surprise-fill:before{content:""}.bi-emoji-surprise:before{content:""}.bi-emoji-tear-fill:before{content:""}.bi-emoji-tear:before{content:""}.bi-envelope-arrow-down-fill:before{content:""}.bi-envelope-arrow-down:before{content:""}.bi-envelope-arrow-up-fill:before{content:""}.bi-envelope-arrow-up:before{content:""}.bi-feather:before{content:""}.bi-feather2:before{content:""}.bi-floppy-fill:before{content:""}.bi-floppy:before{content:""}.bi-floppy2-fill:before{content:""}.bi-floppy2:before{content:""}.bi-gitlab:before{content:""}.bi-highlighter:before{content:""}.bi-marker-tip:before{content:""}.bi-nvme-fill:before{content:""}.bi-nvme:before{content:""}.bi-opencollective:before{content:""}.bi-pci-card-network:before{content:""}.bi-pci-card-sound:before{content:""}.bi-radar:before{content:""}.bi-send-arrow-down-fill:before{content:""}.bi-send-arrow-down:before{content:""}.bi-send-arrow-up-fill:before{content:""}.bi-send-arrow-up:before{content:""}.bi-sim-slash-fill:before{content:""}.bi-sim-slash:before{content:""}.bi-sourceforge:before{content:""}.bi-substack:before{content:""}.bi-threads-fill:before{content:""}.bi-threads:before{content:""}.bi-transparency:before{content:""}.bi-twitter-x:before{content:""}.bi-type-h4:before{content:""}.bi-type-h5:before{content:""}.bi-type-h6:before{content:""}.bi-backpack-fill:before{content:""}.bi-backpack:before{content:""}.bi-backpack2-fill:before{content:""}.bi-backpack2:before{content:""}.bi-backpack3-fill:before{content:""}.bi-backpack3:before{content:""}.bi-backpack4-fill:before{content:""}.bi-backpack4:before{content:""}.bi-brilliance:before{content:""}.bi-cake-fill:before{content:""}.bi-cake2-fill:before{content:""}.bi-duffle-fill:before{content:""}.bi-duffle:before{content:""}.bi-exposure:before{content:""}.bi-gender-neuter:before{content:""}.bi-highlights:before{content:""}.bi-luggage-fill:before{content:""}.bi-luggage:before{content:""}.bi-mailbox-flag:before{content:""}.bi-mailbox2-flag:before{content:""}.bi-noise-reduction:before{content:""}.bi-passport-fill:before{content:""}.bi-passport:before{content:""}.bi-person-arms-up:before{content:""}.bi-person-raised-hand:before{content:""}.bi-person-standing-dress:before{content:""}.bi-person-standing:before{content:""}.bi-person-walking:before{content:""}.bi-person-wheelchair:before{content:""}.bi-shadows:before{content:""}.bi-suitcase-fill:before{content:""}.bi-suitcase-lg-fill:before{content:""}.bi-suitcase-lg:before{content:""}.bi-suitcase:before{content:"豈"}.bi-suitcase2-fill:before{content:"更"}.bi-suitcase2:before{content:"車"}.bi-vignette:before{content:"賈"}:root,[data-bs-theme=light]{--tblr-black:#000000;--tblr-white:#ffffff;--tblr-gray:#667382;--tblr-gray-dark:#182433;--tblr-gray-100:#f6f8fb;--tblr-gray-200:#eef1f4;--tblr-gray-300:#dadfe5;--tblr-gray-400:#bbc3cd;--tblr-gray-500:#929dab;--tblr-gray-600:#667382;--tblr-gray-700:#3a4859;--tblr-gray-800:#182433;--tblr-gray-900:#040a11;--tblr-primary:#206bc4;--tblr-secondary:#667382;--tblr-success:#2fb344;--tblr-info:#4299e1;--tblr-warning:#f76707;--tblr-danger:#d63939;--tblr-light:#fcfdfe;--tblr-dark:#182433;--tblr-muted:#667382;--tblr-blue:#206bc4;--tblr-azure:#4299e1;--tblr-indigo:#4263eb;--tblr-purple:#ae3ec9;--tblr-pink:#d6336c;--tblr-red:#d63939;--tblr-orange:#f76707;--tblr-yellow:#f59f00;--tblr-lime:#74b816;--tblr-green:#2fb344;--tblr-teal:#0ca678;--tblr-cyan:#17a2b8;--tblr-facebook:#1877f2;--tblr-twitter:#1da1f2;--tblr-linkedin:#0a66c2;--tblr-google:#dc4e41;--tblr-youtube:#ff0000;--tblr-vimeo:#1ab7ea;--tblr-dribbble:#ea4c89;--tblr-github:#181717;--tblr-instagram:#e4405f;--tblr-pinterest:#bd081c;--tblr-vk:#6383a8;--tblr-rss:#ffa500;--tblr-flickr:#0063dc;--tblr-bitbucket:#0052cc;--tblr-tabler:#206bc4;--tblr-primary-rgb:32,107,196;--tblr-secondary-rgb:102,115,130;--tblr-success-rgb:47,179,68;--tblr-info-rgb:66,153,225;--tblr-warning-rgb:247,103,7;--tblr-danger-rgb:214,57,57;--tblr-light-rgb:252,253,254;--tblr-dark-rgb:24,36,51;--tblr-muted-rgb:102,115,130;--tblr-blue-rgb:32,107,196;--tblr-azure-rgb:66,153,225;--tblr-indigo-rgb:66,99,235;--tblr-purple-rgb:174,62,201;--tblr-pink-rgb:214,51,108;--tblr-red-rgb:214,57,57;--tblr-orange-rgb:247,103,7;--tblr-yellow-rgb:245,159,0;--tblr-lime-rgb:116,184,22;--tblr-green-rgb:47,179,68;--tblr-teal-rgb:12,166,120;--tblr-cyan-rgb:23,162,184;--tblr-facebook-rgb:24,119,242;--tblr-twitter-rgb:29,161,242;--tblr-linkedin-rgb:10,102,194;--tblr-google-rgb:220,78,65;--tblr-youtube-rgb:255,0,0;--tblr-vimeo-rgb:26,183,234;--tblr-dribbble-rgb:234,76,137;--tblr-github-rgb:24,23,23;--tblr-instagram-rgb:228,64,95;--tblr-pinterest-rgb:189,8,28;--tblr-vk-rgb:99,131,168;--tblr-rss-rgb:255,165,0;--tblr-flickr-rgb:0,99,220;--tblr-bitbucket-rgb:0,82,204;--tblr-tabler-rgb:32,107,196;--tblr-primary-text-emphasis:#0d2b4e;--tblr-secondary-text-emphasis:#292e34;--tblr-success-text-emphasis:#13481b;--tblr-info-text-emphasis:#1a3d5a;--tblr-warning-text-emphasis:#632903;--tblr-danger-text-emphasis:#561717;--tblr-light-text-emphasis:#3a4859;--tblr-dark-text-emphasis:#3a4859;--tblr-primary-bg-subtle:#d2e1f3;--tblr-secondary-bg-subtle:#e0e3e6;--tblr-success-bg-subtle:#d5f0da;--tblr-info-bg-subtle:#d9ebf9;--tblr-warning-bg-subtle:#fde1cd;--tblr-danger-bg-subtle:#f7d7d7;--tblr-light-bg-subtle:#fbfcfd;--tblr-dark-bg-subtle:#bbc3cd;--tblr-primary-border-subtle:#a6c4e7;--tblr-secondary-border-subtle:#c2c7cd;--tblr-success-border-subtle:#ace1b4;--tblr-info-border-subtle:#b3d6f3;--tblr-warning-border-subtle:#fcc29c;--tblr-danger-border-subtle:#efb0b0;--tblr-light-border-subtle:#eef1f4;--tblr-dark-border-subtle:#929dab;--tblr-white-rgb:255,255,255;--tblr-black-rgb:0,0,0;--tblr-font-sans-serif:-apple-system,BlinkMacSystemFont,San Francisco,Segoe UI,Roboto,Helvetica Neue,sans-serif;--tblr-font-monospace:Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;--tblr-gradient:linear-gradient(180deg, rgba(255, 255, 255, .15), rgba(255, 255, 255, 0));--tblr-body-font-family:var(--tblr-font-sans-serif);--tblr-body-font-size:.875rem;--tblr-body-font-weight:400;--tblr-body-line-height:1.4285714286;--tblr-body-color:#182433;--tblr-body-color-rgb:24,36,51;--tblr-body-bg:#f6f8fb;--tblr-body-bg-rgb:246,248,251;--tblr-emphasis-color:#182433;--tblr-emphasis-color-rgb:24,36,51;--tblr-secondary-color:rgba(24, 36, 51, .75);--tblr-secondary-color-rgb:24,36,51;--tblr-secondary-bg:#eef1f4;--tblr-secondary-bg-rgb:238,241,244;--tblr-tertiary-color:rgba(24, 36, 51, .5);--tblr-tertiary-color-rgb:24,36,51;--tblr-tertiary-bg:#f6f8fb;--tblr-tertiary-bg-rgb:246,248,251;--tblr-link-color:#206bc4;--tblr-link-color-rgb:32,107,196;--tblr-link-decoration:none;--tblr-link-hover-color:#1a569d;--tblr-link-hover-color-rgb:26,86,157;--tblr-link-hover-decoration:underline;--tblr-code-color:var(--tblr-gray-600);--tblr-highlight-bg:#fdeccc;--tblr-border-width:1px;--tblr-border-style:solid;--tblr-border-color:#dadfe5;--tblr-border-color-translucent:rgba(4, 32, 69, .14);--tblr-border-radius:4px;--tblr-border-radius-sm:2px;--tblr-border-radius-lg:8px;--tblr-border-radius-xl:1rem;--tblr-border-radius-xxl:2rem;--tblr-border-radius-2xl:var(--tblr-border-radius-xxl);--tblr-border-radius-pill:100rem;--tblr-box-shadow:0 .5rem 1rem rgba(0, 0, 0, .15);--tblr-box-shadow-sm:0 .125rem .25rem rgba(0, 0, 0, .075);--tblr-box-shadow-lg:0 1rem 3rem rgba(0, 0, 0, .175);--tblr-box-shadow-inset:0 0 transparent;--tblr-focus-ring-width:.25rem;--tblr-focus-ring-opacity:.25;--tblr-focus-ring-color:rgba(32, 107, 196, .25);--tblr-form-valid-color:#2fb344;--tblr-form-valid-border-color:#2fb344;--tblr-form-invalid-color:#d63939;--tblr-form-invalid-border-color:#d63939}[data-bs-theme=dark]{color-scheme:dark;--tblr-body-color:#fcfdfe;--tblr-body-color-rgb:252,253,254;--tblr-body-bg:#040a11;--tblr-body-bg-rgb:4,10,17;--tblr-emphasis-color:#ffffff;--tblr-emphasis-color-rgb:255,255,255;--tblr-secondary-color:rgba(252, 253, 254, .75);--tblr-secondary-color-rgb:252,253,254;--tblr-secondary-bg:#182433;--tblr-secondary-bg-rgb:24,36,51;--tblr-tertiary-color:rgba(252, 253, 254, .5);--tblr-tertiary-color-rgb:252,253,254;--tblr-tertiary-bg:#0e1722;--tblr-tertiary-bg-rgb:14,23,34;--tblr-primary-text-emphasis:#79a6dc;--tblr-secondary-text-emphasis:#a3abb4;--tblr-success-text-emphasis:#82d18f;--tblr-info-text-emphasis:#8ec2ed;--tblr-warning-text-emphasis:#faa46a;--tblr-danger-text-emphasis:#e68888;--tblr-light-text-emphasis:#f6f8fb;--tblr-dark-text-emphasis:#dadfe5;--tblr-primary-bg-subtle:#061527;--tblr-secondary-bg-subtle:#14171a;--tblr-success-bg-subtle:#09240e;--tblr-info-bg-subtle:#0d1f2d;--tblr-warning-bg-subtle:#311501;--tblr-danger-bg-subtle:#2b0b0b;--tblr-light-bg-subtle:#182433;--tblr-dark-bg-subtle:#0c121a;--tblr-primary-border-subtle:#134076;--tblr-secondary-border-subtle:#3d454e;--tblr-success-border-subtle:#1c6b29;--tblr-info-border-subtle:#285c87;--tblr-warning-border-subtle:#943e04;--tblr-danger-border-subtle:#802222;--tblr-light-border-subtle:#3a4859;--tblr-dark-border-subtle:#182433;--tblr-link-color:#79a6dc;--tblr-link-hover-color:#94b8e3;--tblr-link-color-rgb:121,166,220;--tblr-link-hover-color-rgb:148,184,227;--tblr-code-color:var(--tblr-gray-300);--tblr-border-color:#1f2e41;--tblr-border-color-translucent:rgba(72, 110, 149, .14);--tblr-form-valid-color:#82d18f;--tblr-form-valid-border-color:#82d18f;--tblr-form-invalid-color:#e68888;--tblr-form-invalid-border-color:#e68888}*,:after,:before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:var(--tblr-body-font-family);font-size:var(--tblr-body-font-size);font-weight:var(--tblr-body-font-weight);line-height:var(--tblr-body-line-height);color:var(--tblr-body-color);text-align:var(--tblr-body-text-align);background-color:var(--tblr-body-bg);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}.hr,hr{margin:2rem 0;color:inherit;border:0;border-top:var(--tblr-border-width) solid;opacity:.16}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:var(--tblr-spacer);font-weight:var(--tblr-font-weight-bold);line-height:1.2;color:var(--tblr-heading-color,inherit)}.h1,h1{font-size:1.5rem}.h2,h2{font-size:1.25rem}.h3,h3{font-size:1rem}.h4,h4{font-size:.875rem}.h5,h5{font-size:.75rem}.h6,h6{font-size:.625rem}p{margin-top:0;margin-bottom:1rem}abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:600}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}.small,small{font-size:85.714285%}.mark,mark{padding:.1875em;background-color:var(--tblr-highlight-bg)}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:rgba(var(--tblr-link-color-rgb),var(--tblr-link-opacity,1));text-decoration:none}a:hover{--tblr-link-color-rgb:var(--tblr-link-hover-color-rgb);text-decoration:underline}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:var(--tblr-font-monospace);font-size:1em}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:85.714285%;color:var(--tblr-light)}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:85.714285%;color:var(--tblr-code-color);word-wrap:break-word}a>code{color:inherit}kbd{padding:.25rem .5rem;font-size:var(--tblr-font-size-h5);color:var(--tblr-muted-dark);background-color:var(--tblr-code-bg);border-radius:2px}kbd kbd{padding:0;font-size:1em}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:var(--tblr-secondary-color);text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator{display:none!important}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}::file-selector-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}.lead{font-size:.875rem;font-weight:var(--tblr-font-weight-normal)}.display-1{font-size:5rem;font-weight:300;line-height:1.2}.display-2{font-size:4.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}.display-5{font-size:3rem;font-weight:300;line-height:1.2}.display-6{font-size:2rem;font-weight:300;line-height:1.2}.list-unstyled,.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:85.714285%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:.875rem}.blockquote>:last-child{margin-bottom:0}.blockquote-footer{margin-top:-1rem;margin-bottom:1rem;font-size:85.714285%;color:#667382}.blockquote-footer:before{content:"— "}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:var(--tblr-body-bg);border:var(--tblr-border-width) solid var(--tblr-border-color);border-radius:var(--tblr-border-radius);box-shadow:var(--tblr-box-shadow-sm);max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:85.714285%;color:var(--tblr-secondary-color)}.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{--tblr-gutter-x:calc(var(--tblr-page-padding) * 2);--tblr-gutter-y:0;width:100%;padding-right:calc(var(--tblr-gutter-x) * .5);padding-left:calc(var(--tblr-gutter-x) * .5);margin-right:auto;margin-left:auto}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}@media (min-width:1400px){.container,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{max-width:1320px}}:root{--tblr-breakpoint-xs:0;--tblr-breakpoint-sm:576px;--tblr-breakpoint-md:768px;--tblr-breakpoint-lg:992px;--tblr-breakpoint-xl:1200px;--tblr-breakpoint-xxl:1400px}.row{--tblr-gutter-x:var(--tblr-page-padding);--tblr-gutter-y:0;display:flex;flex-wrap:wrap;margin-top:calc(-1 * var(--tblr-gutter-y));margin-right:calc(-.5 * var(--tblr-gutter-x));margin-left:calc(-.5 * var(--tblr-gutter-x))}.row>*{flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--tblr-gutter-x) * .5);padding-left:calc(var(--tblr-gutter-x) * .5);margin-top:var(--tblr-gutter-y)}.grid{display:grid;grid-template-rows:repeat(var(--tblr-rows,1),1fr);grid-template-columns:repeat(var(--tblr-columns,12),1fr);gap:var(--tblr-gap,var(--tblr-page-padding))}.grid .g-col-1{grid-column:auto/span 1}.grid .g-col-2{grid-column:auto/span 2}.grid .g-col-3{grid-column:auto/span 3}.grid .g-col-4{grid-column:auto/span 4}.grid .g-col-5{grid-column:auto/span 5}.grid .g-col-6{grid-column:auto/span 6}.grid .g-col-7{grid-column:auto/span 7}.grid .g-col-8{grid-column:auto/span 8}.grid .g-col-9{grid-column:auto/span 9}.grid .g-col-10{grid-column:auto/span 10}.grid .g-col-11{grid-column:auto/span 11}.grid .g-col-12{grid-column:auto/span 12}.grid .g-start-1{grid-column-start:1}.grid .g-start-2{grid-column-start:2}.grid .g-start-3{grid-column-start:3}.grid .g-start-4{grid-column-start:4}.grid .g-start-5{grid-column-start:5}.grid .g-start-6{grid-column-start:6}.grid .g-start-7{grid-column-start:7}.grid .g-start-8{grid-column-start:8}.grid .g-start-9{grid-column-start:9}.grid .g-start-10{grid-column-start:10}.grid .g-start-11{grid-column-start:11}@media (min-width:576px){.grid .g-col-sm-1{grid-column:auto/span 1}.grid .g-col-sm-2{grid-column:auto/span 2}.grid .g-col-sm-3{grid-column:auto/span 3}.grid .g-col-sm-4{grid-column:auto/span 4}.grid .g-col-sm-5{grid-column:auto/span 5}.grid .g-col-sm-6{grid-column:auto/span 6}.grid .g-col-sm-7{grid-column:auto/span 7}.grid .g-col-sm-8{grid-column:auto/span 8}.grid .g-col-sm-9{grid-column:auto/span 9}.grid .g-col-sm-10{grid-column:auto/span 10}.grid .g-col-sm-11{grid-column:auto/span 11}.grid .g-col-sm-12{grid-column:auto/span 12}.grid .g-start-sm-1{grid-column-start:1}.grid .g-start-sm-2{grid-column-start:2}.grid .g-start-sm-3{grid-column-start:3}.grid .g-start-sm-4{grid-column-start:4}.grid .g-start-sm-5{grid-column-start:5}.grid .g-start-sm-6{grid-column-start:6}.grid .g-start-sm-7{grid-column-start:7}.grid .g-start-sm-8{grid-column-start:8}.grid .g-start-sm-9{grid-column-start:9}.grid .g-start-sm-10{grid-column-start:10}.grid .g-start-sm-11{grid-column-start:11}}@media (min-width:768px){.grid .g-col-md-1{grid-column:auto/span 1}.grid .g-col-md-2{grid-column:auto/span 2}.grid .g-col-md-3{grid-column:auto/span 3}.grid .g-col-md-4{grid-column:auto/span 4}.grid .g-col-md-5{grid-column:auto/span 5}.grid .g-col-md-6{grid-column:auto/span 6}.grid .g-col-md-7{grid-column:auto/span 7}.grid .g-col-md-8{grid-column:auto/span 8}.grid .g-col-md-9{grid-column:auto/span 9}.grid .g-col-md-10{grid-column:auto/span 10}.grid .g-col-md-11{grid-column:auto/span 11}.grid .g-col-md-12{grid-column:auto/span 12}.grid .g-start-md-1{grid-column-start:1}.grid .g-start-md-2{grid-column-start:2}.grid .g-start-md-3{grid-column-start:3}.grid .g-start-md-4{grid-column-start:4}.grid .g-start-md-5{grid-column-start:5}.grid .g-start-md-6{grid-column-start:6}.grid .g-start-md-7{grid-column-start:7}.grid .g-start-md-8{grid-column-start:8}.grid .g-start-md-9{grid-column-start:9}.grid .g-start-md-10{grid-column-start:10}.grid .g-start-md-11{grid-column-start:11}}@media (min-width:992px){.grid .g-col-lg-1{grid-column:auto/span 1}.grid .g-col-lg-2{grid-column:auto/span 2}.grid .g-col-lg-3{grid-column:auto/span 3}.grid .g-col-lg-4{grid-column:auto/span 4}.grid .g-col-lg-5{grid-column:auto/span 5}.grid .g-col-lg-6{grid-column:auto/span 6}.grid .g-col-lg-7{grid-column:auto/span 7}.grid .g-col-lg-8{grid-column:auto/span 8}.grid .g-col-lg-9{grid-column:auto/span 9}.grid .g-col-lg-10{grid-column:auto/span 10}.grid .g-col-lg-11{grid-column:auto/span 11}.grid .g-col-lg-12{grid-column:auto/span 12}.grid .g-start-lg-1{grid-column-start:1}.grid .g-start-lg-2{grid-column-start:2}.grid .g-start-lg-3{grid-column-start:3}.grid .g-start-lg-4{grid-column-start:4}.grid .g-start-lg-5{grid-column-start:5}.grid .g-start-lg-6{grid-column-start:6}.grid .g-start-lg-7{grid-column-start:7}.grid .g-start-lg-8{grid-column-start:8}.grid .g-start-lg-9{grid-column-start:9}.grid .g-start-lg-10{grid-column-start:10}.grid .g-start-lg-11{grid-column-start:11}}@media (min-width:1200px){.grid .g-col-xl-1{grid-column:auto/span 1}.grid .g-col-xl-2{grid-column:auto/span 2}.grid .g-col-xl-3{grid-column:auto/span 3}.grid .g-col-xl-4{grid-column:auto/span 4}.grid .g-col-xl-5{grid-column:auto/span 5}.grid .g-col-xl-6{grid-column:auto/span 6}.grid .g-col-xl-7{grid-column:auto/span 7}.grid .g-col-xl-8{grid-column:auto/span 8}.grid .g-col-xl-9{grid-column:auto/span 9}.grid .g-col-xl-10{grid-column:auto/span 10}.grid .g-col-xl-11{grid-column:auto/span 11}.grid .g-col-xl-12{grid-column:auto/span 12}.grid .g-start-xl-1{grid-column-start:1}.grid .g-start-xl-2{grid-column-start:2}.grid .g-start-xl-3{grid-column-start:3}.grid .g-start-xl-4{grid-column-start:4}.grid .g-start-xl-5{grid-column-start:5}.grid .g-start-xl-6{grid-column-start:6}.grid .g-start-xl-7{grid-column-start:7}.grid .g-start-xl-8{grid-column-start:8}.grid .g-start-xl-9{grid-column-start:9}.grid .g-start-xl-10{grid-column-start:10}.grid .g-start-xl-11{grid-column-start:11}}@media (min-width:1400px){.grid .g-col-xxl-1{grid-column:auto/span 1}.grid .g-col-xxl-2{grid-column:auto/span 2}.grid .g-col-xxl-3{grid-column:auto/span 3}.grid .g-col-xxl-4{grid-column:auto/span 4}.grid .g-col-xxl-5{grid-column:auto/span 5}.grid .g-col-xxl-6{grid-column:auto/span 6}.grid .g-col-xxl-7{grid-column:auto/span 7}.grid .g-col-xxl-8{grid-column:auto/span 8}.grid .g-col-xxl-9{grid-column:auto/span 9}.grid .g-col-xxl-10{grid-column:auto/span 10}.grid .g-col-xxl-11{grid-column:auto/span 11}.grid .g-col-xxl-12{grid-column:auto/span 12}.grid .g-start-xxl-1{grid-column-start:1}.grid .g-start-xxl-2{grid-column-start:2}.grid .g-start-xxl-3{grid-column-start:3}.grid .g-start-xxl-4{grid-column-start:4}.grid .g-start-xxl-5{grid-column-start:5}.grid .g-start-xxl-6{grid-column-start:6}.grid .g-start-xxl-7{grid-column-start:7}.grid .g-start-xxl-8{grid-column-start:8}.grid .g-start-xxl-9{grid-column-start:9}.grid .g-start-xxl-10{grid-column-start:10}.grid .g-start-xxl-11{grid-column-start:11}}.col{flex:1 0 0%}.row-cols-auto>*{flex:0 0 auto;width:auto}.row-cols-1>*{flex:0 0 auto;width:100%}.row-cols-2>*{flex:0 0 auto;width:50%}.row-cols-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-4>*{flex:0 0 auto;width:25%}.row-cols-5>*{flex:0 0 auto;width:20%}.row-cols-6>*{flex:0 0 auto;width:16.6666666667%}.col-auto{flex:0 0 auto;width:auto}.col-1{flex:0 0 auto;width:8.33333333%}.col-2{flex:0 0 auto;width:16.66666667%}.col-3{flex:0 0 auto;width:25%}.col-4{flex:0 0 auto;width:33.33333333%}.col-5{flex:0 0 auto;width:41.66666667%}.col-6{flex:0 0 auto;width:50%}.col-7{flex:0 0 auto;width:58.33333333%}.col-8{flex:0 0 auto;width:66.66666667%}.col-9{flex:0 0 auto;width:75%}.col-10{flex:0 0 auto;width:83.33333333%}.col-11{flex:0 0 auto;width:91.66666667%}.col-12{flex:0 0 auto;width:100%}.offset-1{margin-left:8.33333333%}.offset-2{margin-left:16.66666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333333%}.offset-5{margin-left:41.66666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333333%}.offset-8{margin-left:66.66666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333333%}.offset-11{margin-left:91.66666667%}.g-0,.gx-0{--tblr-gutter-x:0}.g-0,.gy-0{--tblr-gutter-y:0}.g-1,.gx-1{--tblr-gutter-x:.25rem}.g-1,.gy-1{--tblr-gutter-y:.25rem}.g-2,.gx-2{--tblr-gutter-x:.5rem}.g-2,.gy-2{--tblr-gutter-y:.5rem}.g-3,.gx-3{--tblr-gutter-x:1rem}.g-3,.gy-3{--tblr-gutter-y:1rem}.g-4,.gx-4{--tblr-gutter-x:1.5rem}.g-4,.gy-4{--tblr-gutter-y:1.5rem}.g-5,.gx-5{--tblr-gutter-x:2rem}.g-5,.gy-5{--tblr-gutter-y:2rem}.g-6,.gx-6{--tblr-gutter-x:3rem}.g-6,.gy-6{--tblr-gutter-y:3rem}.g-7,.gx-7{--tblr-gutter-x:5rem}.g-7,.gy-7{--tblr-gutter-y:5rem}.g-8,.gx-8{--tblr-gutter-x:8rem}.g-8,.gy-8{--tblr-gutter-y:8rem}@media (min-width:576px){.col-sm{flex:1 0 0%}.row-cols-sm-auto>*{flex:0 0 auto;width:auto}.row-cols-sm-1>*{flex:0 0 auto;width:100%}.row-cols-sm-2>*{flex:0 0 auto;width:50%}.row-cols-sm-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-sm-4>*{flex:0 0 auto;width:25%}.row-cols-sm-5>*{flex:0 0 auto;width:20%}.row-cols-sm-6>*{flex:0 0 auto;width:16.6666666667%}.col-sm-auto{flex:0 0 auto;width:auto}.col-sm-1{flex:0 0 auto;width:8.33333333%}.col-sm-2{flex:0 0 auto;width:16.66666667%}.col-sm-3{flex:0 0 auto;width:25%}.col-sm-4{flex:0 0 auto;width:33.33333333%}.col-sm-5{flex:0 0 auto;width:41.66666667%}.col-sm-6{flex:0 0 auto;width:50%}.col-sm-7{flex:0 0 auto;width:58.33333333%}.col-sm-8{flex:0 0 auto;width:66.66666667%}.col-sm-9{flex:0 0 auto;width:75%}.col-sm-10{flex:0 0 auto;width:83.33333333%}.col-sm-11{flex:0 0 auto;width:91.66666667%}.col-sm-12{flex:0 0 auto;width:100%}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333333%}.offset-sm-2{margin-left:16.66666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333333%}.offset-sm-5{margin-left:41.66666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333333%}.offset-sm-8{margin-left:66.66666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333333%}.offset-sm-11{margin-left:91.66666667%}.g-sm-0,.gx-sm-0{--tblr-gutter-x:0}.g-sm-0,.gy-sm-0{--tblr-gutter-y:0}.g-sm-1,.gx-sm-1{--tblr-gutter-x:.25rem}.g-sm-1,.gy-sm-1{--tblr-gutter-y:.25rem}.g-sm-2,.gx-sm-2{--tblr-gutter-x:.5rem}.g-sm-2,.gy-sm-2{--tblr-gutter-y:.5rem}.g-sm-3,.gx-sm-3{--tblr-gutter-x:1rem}.g-sm-3,.gy-sm-3{--tblr-gutter-y:1rem}.g-sm-4,.gx-sm-4{--tblr-gutter-x:1.5rem}.g-sm-4,.gy-sm-4{--tblr-gutter-y:1.5rem}.g-sm-5,.gx-sm-5{--tblr-gutter-x:2rem}.g-sm-5,.gy-sm-5{--tblr-gutter-y:2rem}.g-sm-6,.gx-sm-6{--tblr-gutter-x:3rem}.g-sm-6,.gy-sm-6{--tblr-gutter-y:3rem}.g-sm-7,.gx-sm-7{--tblr-gutter-x:5rem}.g-sm-7,.gy-sm-7{--tblr-gutter-y:5rem}.g-sm-8,.gx-sm-8{--tblr-gutter-x:8rem}.g-sm-8,.gy-sm-8{--tblr-gutter-y:8rem}}@media (min-width:768px){.col-md{flex:1 0 0%}.row-cols-md-auto>*{flex:0 0 auto;width:auto}.row-cols-md-1>*{flex:0 0 auto;width:100%}.row-cols-md-2>*{flex:0 0 auto;width:50%}.row-cols-md-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-md-4>*{flex:0 0 auto;width:25%}.row-cols-md-5>*{flex:0 0 auto;width:20%}.row-cols-md-6>*{flex:0 0 auto;width:16.6666666667%}.col-md-auto{flex:0 0 auto;width:auto}.col-md-1{flex:0 0 auto;width:8.33333333%}.col-md-2{flex:0 0 auto;width:16.66666667%}.col-md-3{flex:0 0 auto;width:25%}.col-md-4{flex:0 0 auto;width:33.33333333%}.col-md-5{flex:0 0 auto;width:41.66666667%}.col-md-6{flex:0 0 auto;width:50%}.col-md-7{flex:0 0 auto;width:58.33333333%}.col-md-8{flex:0 0 auto;width:66.66666667%}.col-md-9{flex:0 0 auto;width:75%}.col-md-10{flex:0 0 auto;width:83.33333333%}.col-md-11{flex:0 0 auto;width:91.66666667%}.col-md-12{flex:0 0 auto;width:100%}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333333%}.offset-md-2{margin-left:16.66666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333333%}.offset-md-5{margin-left:41.66666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333333%}.offset-md-8{margin-left:66.66666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333333%}.offset-md-11{margin-left:91.66666667%}.g-md-0,.gx-md-0{--tblr-gutter-x:0}.g-md-0,.gy-md-0{--tblr-gutter-y:0}.g-md-1,.gx-md-1{--tblr-gutter-x:.25rem}.g-md-1,.gy-md-1{--tblr-gutter-y:.25rem}.g-md-2,.gx-md-2{--tblr-gutter-x:.5rem}.g-md-2,.gy-md-2{--tblr-gutter-y:.5rem}.g-md-3,.gx-md-3{--tblr-gutter-x:1rem}.g-md-3,.gy-md-3{--tblr-gutter-y:1rem}.g-md-4,.gx-md-4{--tblr-gutter-x:1.5rem}.g-md-4,.gy-md-4{--tblr-gutter-y:1.5rem}.g-md-5,.gx-md-5{--tblr-gutter-x:2rem}.g-md-5,.gy-md-5{--tblr-gutter-y:2rem}.g-md-6,.gx-md-6{--tblr-gutter-x:3rem}.g-md-6,.gy-md-6{--tblr-gutter-y:3rem}.g-md-7,.gx-md-7{--tblr-gutter-x:5rem}.g-md-7,.gy-md-7{--tblr-gutter-y:5rem}.g-md-8,.gx-md-8{--tblr-gutter-x:8rem}.g-md-8,.gy-md-8{--tblr-gutter-y:8rem}}@media (min-width:992px){.col-lg{flex:1 0 0%}.row-cols-lg-auto>*{flex:0 0 auto;width:auto}.row-cols-lg-1>*{flex:0 0 auto;width:100%}.row-cols-lg-2>*{flex:0 0 auto;width:50%}.row-cols-lg-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-lg-4>*{flex:0 0 auto;width:25%}.row-cols-lg-5>*{flex:0 0 auto;width:20%}.row-cols-lg-6>*{flex:0 0 auto;width:16.6666666667%}.col-lg-auto{flex:0 0 auto;width:auto}.col-lg-1{flex:0 0 auto;width:8.33333333%}.col-lg-2{flex:0 0 auto;width:16.66666667%}.col-lg-3{flex:0 0 auto;width:25%}.col-lg-4{flex:0 0 auto;width:33.33333333%}.col-lg-5{flex:0 0 auto;width:41.66666667%}.col-lg-6{flex:0 0 auto;width:50%}.col-lg-7{flex:0 0 auto;width:58.33333333%}.col-lg-8{flex:0 0 auto;width:66.66666667%}.col-lg-9{flex:0 0 auto;width:75%}.col-lg-10{flex:0 0 auto;width:83.33333333%}.col-lg-11{flex:0 0 auto;width:91.66666667%}.col-lg-12{flex:0 0 auto;width:100%}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333333%}.offset-lg-2{margin-left:16.66666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333333%}.offset-lg-5{margin-left:41.66666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333333%}.offset-lg-8{margin-left:66.66666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333333%}.offset-lg-11{margin-left:91.66666667%}.g-lg-0,.gx-lg-0{--tblr-gutter-x:0}.g-lg-0,.gy-lg-0{--tblr-gutter-y:0}.g-lg-1,.gx-lg-1{--tblr-gutter-x:.25rem}.g-lg-1,.gy-lg-1{--tblr-gutter-y:.25rem}.g-lg-2,.gx-lg-2{--tblr-gutter-x:.5rem}.g-lg-2,.gy-lg-2{--tblr-gutter-y:.5rem}.g-lg-3,.gx-lg-3{--tblr-gutter-x:1rem}.g-lg-3,.gy-lg-3{--tblr-gutter-y:1rem}.g-lg-4,.gx-lg-4{--tblr-gutter-x:1.5rem}.g-lg-4,.gy-lg-4{--tblr-gutter-y:1.5rem}.g-lg-5,.gx-lg-5{--tblr-gutter-x:2rem}.g-lg-5,.gy-lg-5{--tblr-gutter-y:2rem}.g-lg-6,.gx-lg-6{--tblr-gutter-x:3rem}.g-lg-6,.gy-lg-6{--tblr-gutter-y:3rem}.g-lg-7,.gx-lg-7{--tblr-gutter-x:5rem}.g-lg-7,.gy-lg-7{--tblr-gutter-y:5rem}.g-lg-8,.gx-lg-8{--tblr-gutter-x:8rem}.g-lg-8,.gy-lg-8{--tblr-gutter-y:8rem}}@media (min-width:1200px){.col-xl{flex:1 0 0%}.row-cols-xl-auto>*{flex:0 0 auto;width:auto}.row-cols-xl-1>*{flex:0 0 auto;width:100%}.row-cols-xl-2>*{flex:0 0 auto;width:50%}.row-cols-xl-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-xl-4>*{flex:0 0 auto;width:25%}.row-cols-xl-5>*{flex:0 0 auto;width:20%}.row-cols-xl-6>*{flex:0 0 auto;width:16.6666666667%}.col-xl-auto{flex:0 0 auto;width:auto}.col-xl-1{flex:0 0 auto;width:8.33333333%}.col-xl-2{flex:0 0 auto;width:16.66666667%}.col-xl-3{flex:0 0 auto;width:25%}.col-xl-4{flex:0 0 auto;width:33.33333333%}.col-xl-5{flex:0 0 auto;width:41.66666667%}.col-xl-6{flex:0 0 auto;width:50%}.col-xl-7{flex:0 0 auto;width:58.33333333%}.col-xl-8{flex:0 0 auto;width:66.66666667%}.col-xl-9{flex:0 0 auto;width:75%}.col-xl-10{flex:0 0 auto;width:83.33333333%}.col-xl-11{flex:0 0 auto;width:91.66666667%}.col-xl-12{flex:0 0 auto;width:100%}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333333%}.offset-xl-2{margin-left:16.66666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333333%}.offset-xl-5{margin-left:41.66666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333333%}.offset-xl-8{margin-left:66.66666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333333%}.offset-xl-11{margin-left:91.66666667%}.g-xl-0,.gx-xl-0{--tblr-gutter-x:0}.g-xl-0,.gy-xl-0{--tblr-gutter-y:0}.g-xl-1,.gx-xl-1{--tblr-gutter-x:.25rem}.g-xl-1,.gy-xl-1{--tblr-gutter-y:.25rem}.g-xl-2,.gx-xl-2{--tblr-gutter-x:.5rem}.g-xl-2,.gy-xl-2{--tblr-gutter-y:.5rem}.g-xl-3,.gx-xl-3{--tblr-gutter-x:1rem}.g-xl-3,.gy-xl-3{--tblr-gutter-y:1rem}.g-xl-4,.gx-xl-4{--tblr-gutter-x:1.5rem}.g-xl-4,.gy-xl-4{--tblr-gutter-y:1.5rem}.g-xl-5,.gx-xl-5{--tblr-gutter-x:2rem}.g-xl-5,.gy-xl-5{--tblr-gutter-y:2rem}.g-xl-6,.gx-xl-6{--tblr-gutter-x:3rem}.g-xl-6,.gy-xl-6{--tblr-gutter-y:3rem}.g-xl-7,.gx-xl-7{--tblr-gutter-x:5rem}.g-xl-7,.gy-xl-7{--tblr-gutter-y:5rem}.g-xl-8,.gx-xl-8{--tblr-gutter-x:8rem}.g-xl-8,.gy-xl-8{--tblr-gutter-y:8rem}}@media (min-width:1400px){.col-xxl{flex:1 0 0%}.row-cols-xxl-auto>*{flex:0 0 auto;width:auto}.row-cols-xxl-1>*{flex:0 0 auto;width:100%}.row-cols-xxl-2>*{flex:0 0 auto;width:50%}.row-cols-xxl-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-xxl-4>*{flex:0 0 auto;width:25%}.row-cols-xxl-5>*{flex:0 0 auto;width:20%}.row-cols-xxl-6>*{flex:0 0 auto;width:16.6666666667%}.col-xxl-auto{flex:0 0 auto;width:auto}.col-xxl-1{flex:0 0 auto;width:8.33333333%}.col-xxl-2{flex:0 0 auto;width:16.66666667%}.col-xxl-3{flex:0 0 auto;width:25%}.col-xxl-4{flex:0 0 auto;width:33.33333333%}.col-xxl-5{flex:0 0 auto;width:41.66666667%}.col-xxl-6{flex:0 0 auto;width:50%}.col-xxl-7{flex:0 0 auto;width:58.33333333%}.col-xxl-8{flex:0 0 auto;width:66.66666667%}.col-xxl-9{flex:0 0 auto;width:75%}.col-xxl-10{flex:0 0 auto;width:83.33333333%}.col-xxl-11{flex:0 0 auto;width:91.66666667%}.col-xxl-12{flex:0 0 auto;width:100%}.offset-xxl-0{margin-left:0}.offset-xxl-1{margin-left:8.33333333%}.offset-xxl-2{margin-left:16.66666667%}.offset-xxl-3{margin-left:25%}.offset-xxl-4{margin-left:33.33333333%}.offset-xxl-5{margin-left:41.66666667%}.offset-xxl-6{margin-left:50%}.offset-xxl-7{margin-left:58.33333333%}.offset-xxl-8{margin-left:66.66666667%}.offset-xxl-9{margin-left:75%}.offset-xxl-10{margin-left:83.33333333%}.offset-xxl-11{margin-left:91.66666667%}.g-xxl-0,.gx-xxl-0{--tblr-gutter-x:0}.g-xxl-0,.gy-xxl-0{--tblr-gutter-y:0}.g-xxl-1,.gx-xxl-1{--tblr-gutter-x:.25rem}.g-xxl-1,.gy-xxl-1{--tblr-gutter-y:.25rem}.g-xxl-2,.gx-xxl-2{--tblr-gutter-x:.5rem}.g-xxl-2,.gy-xxl-2{--tblr-gutter-y:.5rem}.g-xxl-3,.gx-xxl-3{--tblr-gutter-x:1rem}.g-xxl-3,.gy-xxl-3{--tblr-gutter-y:1rem}.g-xxl-4,.gx-xxl-4{--tblr-gutter-x:1.5rem}.g-xxl-4,.gy-xxl-4{--tblr-gutter-y:1.5rem}.g-xxl-5,.gx-xxl-5{--tblr-gutter-x:2rem}.g-xxl-5,.gy-xxl-5{--tblr-gutter-y:2rem}.g-xxl-6,.gx-xxl-6{--tblr-gutter-x:3rem}.g-xxl-6,.gy-xxl-6{--tblr-gutter-y:3rem}.g-xxl-7,.gx-xxl-7{--tblr-gutter-x:5rem}.g-xxl-7,.gy-xxl-7{--tblr-gutter-y:5rem}.g-xxl-8,.gx-xxl-8{--tblr-gutter-x:8rem}.g-xxl-8,.gy-xxl-8{--tblr-gutter-y:8rem}}.markdown>table,.table{--tblr-table-color:inherit;--tblr-table-bg:transparent;--tblr-table-border-color:var(--tblr-border-color-translucent);--tblr-table-accent-bg:transparent;--tblr-table-striped-color:inherit;--tblr-table-striped-bg:var(--tblr-bg-surface-tertiary);--tblr-table-active-color:inherit;--tblr-table-active-bg:rgba(0, 0, 0, .1);--tblr-table-hover-color:inherit;--tblr-table-hover-bg:rgba(0, 0, 0, .075);width:100%;margin-bottom:1rem;color:var(--tblr-table-color);vertical-align:top;border-color:var(--tblr-table-border-color)}.markdown>table>:not(caption)>*>*,.table>:not(caption)>*>*{padding:.75rem;background-color:var(--tblr-table-bg);border-bottom-width:var(--tblr-border-width);box-shadow:inset 0 0 0 9999px var(--tblr-table-accent-bg)}.markdown>table>tbody,.table>tbody{vertical-align:inherit}.markdown>table>thead,.table>thead{vertical-align:bottom}.table-group-divider{border-top:calc(var(--tblr-border-width) * 2) solid var(--tblr-border-color-translucent)}.caption-top{caption-side:top}.table-sm>:not(caption)>*>*{padding:.25rem}.markdown>table>:not(caption)>*,.table-bordered>:not(caption)>*{border-width:var(--tblr-border-width) 0}.markdown>table>:not(caption)>*>*,.table-bordered>:not(caption)>*>*{border-width:0 var(--tblr-border-width)}.table-borderless>:not(caption)>*>*{border-bottom-width:0}.table-borderless>:not(:first-child){border-top-width:0}.table-striped>tbody>tr:nth-of-type(2n)>*{--tblr-table-accent-bg:var(--tblr-table-striped-bg);color:var(--tblr-table-striped-color)}.table-striped-columns>:not(caption)>tr>:nth-child(2n){--tblr-table-accent-bg:var(--tblr-table-striped-bg);color:var(--tblr-table-striped-color)}.table-active{--tblr-table-accent-bg:var(--tblr-table-active-bg);color:var(--tblr-table-active-color)}.table-hover>tbody>tr:hover>*{--tblr-table-accent-bg:var(--tblr-table-hover-bg);color:var(--tblr-table-hover-color)}.table-primary{--tblr-table-color:#182433;--tblr-table-bg:#d2e1f3;--tblr-table-border-color:#bfcee0;--tblr-table-striped-bg:#c9d8e9;--tblr-table-striped-color:#182433;--tblr-table-active-bg:#bfcee0;--tblr-table-active-color:#fcfdfe;--tblr-table-hover-bg:#c4d3e5;--tblr-table-hover-color:#182433;color:var(--tblr-table-color);border-color:var(--tblr-table-border-color)}.table-secondary{--tblr-table-color:#182433;--tblr-table-bg:#e0e3e6;--tblr-table-border-color:#ccd0d4;--tblr-table-striped-bg:#d6d9dd;--tblr-table-striped-color:#182433;--tblr-table-active-bg:#ccd0d4;--tblr-table-active-color:#fcfdfe;--tblr-table-hover-bg:#d1d5d9;--tblr-table-hover-color:#182433;color:var(--tblr-table-color);border-color:var(--tblr-table-border-color)}.table-success{--tblr-table-color:#182433;--tblr-table-bg:#d5f0da;--tblr-table-border-color:#c2dcc9;--tblr-table-striped-bg:#cce6d2;--tblr-table-striped-color:#182433;--tblr-table-active-bg:#c2dcc9;--tblr-table-active-color:#182433;--tblr-table-hover-bg:#c7e1cd;--tblr-table-hover-color:#182433;color:var(--tblr-table-color);border-color:var(--tblr-table-border-color)}.table-info{--tblr-table-color:#182433;--tblr-table-bg:#d9ebf9;--tblr-table-border-color:#c6d7e5;--tblr-table-striped-bg:#cfe1ef;--tblr-table-striped-color:#182433;--tblr-table-active-bg:#c6d7e5;--tblr-table-active-color:#182433;--tblr-table-hover-bg:#cbdcea;--tblr-table-hover-color:#182433;color:var(--tblr-table-color);border-color:var(--tblr-table-border-color)}.table-warning{--tblr-table-color:#182433;--tblr-table-bg:#fde1cd;--tblr-table-border-color:#e6cebe;--tblr-table-striped-bg:#f2d8c5;--tblr-table-striped-color:#182433;--tblr-table-active-bg:#e6cebe;--tblr-table-active-color:#182433;--tblr-table-hover-bg:#ecd3c1;--tblr-table-hover-color:#182433;color:var(--tblr-table-color);border-color:var(--tblr-table-border-color)}.table-danger{--tblr-table-color:#182433;--tblr-table-bg:#f7d7d7;--tblr-table-border-color:#e1c5c7;--tblr-table-striped-bg:#eccecf;--tblr-table-striped-color:#182433;--tblr-table-active-bg:#e1c5c7;--tblr-table-active-color:#fcfdfe;--tblr-table-hover-bg:#e6cacb;--tblr-table-hover-color:#fcfdfe;color:var(--tblr-table-color);border-color:var(--tblr-table-border-color)}.table-light{--tblr-table-color:#182433;--tblr-table-bg:#fcfdfe;--tblr-table-border-color:#e5e7ea;--tblr-table-striped-bg:#f1f2f4;--tblr-table-striped-color:#182433;--tblr-table-active-bg:#e5e7ea;--tblr-table-active-color:#182433;--tblr-table-hover-bg:#ebedef;--tblr-table-hover-color:#182433;color:var(--tblr-table-color);border-color:var(--tblr-table-border-color)}.table-dark{--tblr-table-color:#fcfdfe;--tblr-table-bg:#182433;--tblr-table-border-color:#2f3a47;--tblr-table-striped-bg:#232f3d;--tblr-table-striped-color:#fcfdfe;--tblr-table-active-bg:#2f3a47;--tblr-table-active-color:#fcfdfe;--tblr-table-hover-bg:#293442;--tblr-table-hover-color:#fcfdfe;color:var(--tblr-table-color);border-color:var(--tblr-table-border-color)}.table-responsive{overflow-x:auto;-webkit-overflow-scrolling:touch}@media (max-width:575.98px){.table-responsive-sm{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:767.98px){.table-responsive-md{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:991.98px){.table-responsive-lg{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:1199.98px){.table-responsive-xl{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:1399.98px){.table-responsive-xxl{overflow-x:auto;-webkit-overflow-scrolling:touch}}.form-label{margin-bottom:.5rem;font-size:.875rem;font-weight:var(--tblr-font-weight-medium)}.col-form-label{padding-top:calc(.4375rem + var(--tblr-border-width));padding-bottom:calc(.4375rem + var(--tblr-border-width));margin-bottom:0;font-size:inherit;font-weight:var(--tblr-font-weight-medium);line-height:1.4285714286}.col-form-label-lg{padding-top:calc(.5rem + var(--tblr-border-width));padding-bottom:calc(.5rem + var(--tblr-border-width));font-size:1.25rem}.col-form-label-sm{padding-top:calc(.125rem + var(--tblr-border-width));padding-bottom:calc(.125rem + var(--tblr-border-width));font-size:.75rem}.form-text{margin-top:.25rem;font-size:85.714285%;color:var(--tblr-secondary-color)}.form-control{display:block;width:100%;padding:.4375rem .75rem;font-family:var(--tblr-font-sans-serif);font-size:.875rem;font-weight:400;line-height:1.4285714286;color:inherit;background-color:var(--tblr-bg-forms);background-clip:padding-box;border:var(--tblr-border-width) solid var(--tblr-border-color);-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:var(--tblr-border-radius);box-shadow:0 0 transparent;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control[type=file]{overflow:hidden}.form-control[type=file]:not(:disabled):not([readonly]){cursor:pointer}.form-control:focus{color:inherit;background-color:var(--tblr-bg-forms);border-color:#90b5e2;outline:0;box-shadow:0 0 transparent,0 0 0 .25rem #206bc440}.form-control::-webkit-date-and-time-value{min-width:85px;height:1.4285714286em;margin:0}.form-control::-webkit-datetime-edit{display:block;padding:0}.form-control::-webkit-input-placeholder{color:#929dab;opacity:1}.form-control:-ms-input-placeholder{color:#929dab;opacity:1}.form-control::-ms-input-placeholder{color:#929dab;opacity:1}.form-control::placeholder{color:#929dab;opacity:1}.form-control:disabled{background-color:var(--tblr-bg-surface-secondary);opacity:1}.form-control::-webkit-file-upload-button{padding:.4375rem .75rem;margin:-.4375rem -.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:inherit;background-color:var(--tblr-tertiary-bg);pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:var(--tblr-border-width);border-radius:0;-webkit-transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-control::file-selector-button{padding:.4375rem .75rem;margin:-.4375rem -.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:inherit;background-color:var(--tblr-tertiary-bg);pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:var(--tblr-border-width);border-radius:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control::-webkit-file-upload-button{-webkit-transition:none;transition:none}.form-control::file-selector-button{transition:none}}.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button{background-color:var(--tblr-secondary-bg)}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:var(--tblr-secondary-bg)}.form-control-plaintext{display:block;width:100%;padding:.4375rem 0;margin-bottom:0;line-height:1.4285714286;color:var(--tblr-body-color);background-color:transparent;border:solid transparent;border-width:var(--tblr-border-width) 0}.form-control-plaintext:focus{outline:0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{min-height:calc(1.4285714286em + .25rem + calc(var(--tblr-border-width) * 2));padding:.125rem .25rem;font-size:.75rem;border-radius:var(--tblr-border-radius-sm)}.form-control-sm::-webkit-file-upload-button{padding:.125rem .25rem;margin:-.125rem -.25rem;-webkit-margin-end:.25rem;margin-inline-end:.25rem}.form-control-sm::file-selector-button{padding:.125rem .25rem;margin:-.125rem -.25rem;-webkit-margin-end:.25rem;margin-inline-end:.25rem}.form-control-lg{min-height:calc(1.4285714286em + 1rem + calc(var(--tblr-border-width) * 2));padding:.5rem .75rem;font-size:1.25rem;border-radius:var(--tblr-border-radius-lg)}.form-control-lg::-webkit-file-upload-button{padding:.5rem .75rem;margin:-.5rem -.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem}.form-control-lg::file-selector-button{padding:.5rem .75rem;margin:-.5rem -.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem}textarea.form-control{min-height:calc(1.4285714286em + .875rem + calc(var(--tblr-border-width) * 2))}textarea.form-control-sm{min-height:calc(1.4285714286em + .25rem + calc(var(--tblr-border-width) * 2))}textarea.form-control-lg{min-height:calc(1.4285714286em + 1rem + calc(var(--tblr-border-width) * 2))}.form-control-color{width:3rem;height:calc(1.4285714286em + .875rem + calc(var(--tblr-border-width) * 2));padding:.4375rem}.form-control-color:not(:disabled):not([readonly]){cursor:pointer}.form-control-color::-moz-color-swatch{border:0!important;border-radius:var(--tblr-border-radius)}.form-control-color::-webkit-color-swatch{border:0!important;border-radius:var(--tblr-border-radius)}.form-control-color.form-control-sm{height:calc(1.4285714286em + .25rem + calc(var(--tblr-border-width) * 2))}.form-control-color.form-control-lg{height:calc(1.4285714286em + 1rem + calc(var(--tblr-border-width) * 2))}.form-select{--tblr-form-select-bg-img:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23929dab' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e");display:block;width:100%;padding:.4375rem 2.25rem .4375rem .75rem;font-family:var(--tblr-font-sans-serif);font-size:.875rem;font-weight:400;line-height:1.4285714286;color:inherit;background-color:var(--tblr-bg-forms);background-image:var(--tblr-form-select-bg-img),var(--tblr-form-select-bg-icon,none);background-repeat:no-repeat;background-position:right .75rem center;background-size:16px 12px;border:var(--tblr-border-width) solid var(--tblr-border-color);border-radius:var(--tblr-border-radius);box-shadow:0 0 transparent;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.form-select{transition:none}}.form-select:focus{border-color:#90b5e2;outline:0;box-shadow:0 0 transparent,0 0 0 .25rem #206bc440}.form-select[multiple],.form-select[size]:not([size="1"]){padding-right:.75rem;background-image:none}.form-select:disabled{background-color:var(--tblr-bg-surface-secondary)}.form-select:-moz-focusring{color:transparent;text-shadow:0 0 0 inherit}.form-select-sm{padding-top:.125rem;padding-bottom:.125rem;padding-left:.25rem;font-size:.75rem;border-radius:var(--tblr-border-radius-sm)}.form-select-lg{padding-top:.5rem;padding-bottom:.5rem;padding-left:.75rem;font-size:1.25rem;border-radius:var(--tblr-border-radius-lg)}[data-bs-theme=dark] .form-select{--tblr-form-select-bg-img:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23fcfdfe' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e")}.form-check{display:block;min-height:1.25rem;padding-left:1.5rem;margin-bottom:.5rem}.form-check .form-check-input{float:left;margin-left:-1.5rem}.form-check-reverse{padding-right:1.5rem;padding-left:0;text-align:right}.form-check-reverse .form-check-input{float:right;margin-right:-1.5rem;margin-left:0}.form-check-input{--tblr-form-check-bg:var(--tblr-bg-forms);width:1rem;height:1rem;margin-top:.2142857143rem;vertical-align:top;background-color:var(--tblr-form-check-bg);background-image:var(--tblr-form-check-bg-image);background-repeat:no-repeat;background-position:center;background-size:contain;border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent);-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-print-color-adjust:exact;color-adjust:exact;print-color-adjust:exact}.form-check-input[type=checkbox]{border-radius:var(--tblr-border-radius)}.form-check-input[type=radio]{border-radius:50%}.form-check-input:active{filter:brightness(90%)}.form-check-input:focus{border-color:#90b5e2;outline:0;box-shadow:0 0 0 .25rem #206bc440}.form-check-input:checked{background-color:var(--tblr-primary);border-color:var(--tblr-border-color-translucent)}.form-check-input:checked[type=checkbox]{--tblr-form-check-bg-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' width='16' height='16'%3e%3cpath fill='none' stroke='%23ffffff' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8.5l2.5 2.5l5.5 -5.5'/%3e%3c/svg%3e")}.form-check-input:checked[type=radio]{--tblr-form-check-bg-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3ccircle r='3' fill='%23ffffff' cx='8' cy='8' /%3e%3c/svg%3e")}.form-check-input[type=checkbox]:indeterminate{background-color:var(--tblr-primary);border-color:var(--tblr-primary);--tblr-form-check-bg-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23ffffff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e")}.form-check-input:disabled{pointer-events:none;filter:none;opacity:.5}.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{cursor:default;opacity:.7}.form-switch{padding-left:2.5rem}.form-switch .form-check-input{--tblr-form-switch-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23dadfe5'/%3e%3c/svg%3e");width:2rem;margin-left:-2.5rem;background-image:var(--tblr-form-switch-bg);background-position:left center;border-radius:2rem;transition:background-position .15s ease-in-out}.form-switch .form-check-input:focus{--tblr-form-switch-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2390b5e2'/%3e%3c/svg%3e")}.form-switch .form-check-input:checked{background-position:right center;--tblr-form-switch-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23ffffff'/%3e%3c/svg%3e")}.form-switch.form-check-reverse{padding-right:2.5rem;padding-left:0}.form-switch.form-check-reverse .form-check-input{margin-right:-2.5rem;margin-left:0}.form-check-inline{display:inline-block;margin-right:1rem}.btn-check{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.btn-check:disabled+.btn,.btn-check[disabled]+.btn{pointer-events:none;filter:none;opacity:.4}[data-bs-theme=dark] .form-switch .form-check-input:not(:checked):not(:focus){--tblr-form-switch-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%28255, 255, 255, 0.25%29'/%3e%3c/svg%3e")}.form-range{width:100%;height:1.25rem;padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.form-range:focus{outline:0}.form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #f6f8fb,0 0 0 .25rem #206bc440}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #f6f8fb,0 0 0 .25rem #206bc440}.form-range::-moz-focus-outer{border:0}.form-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.375rem;background-color:var(--tblr-primary);border:2px var(--tblr-border-style) #fff;border-radius:1rem;box-shadow:0 .1rem .25rem #0000001a;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.form-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.form-range::-webkit-slider-thumb:active{background-color:#bcd3ed}.form-range::-webkit-slider-runnable-track{width:100%;height:.25rem;color:transparent;cursor:pointer;background-color:var(--tblr-border-color);border-color:transparent;border-radius:1rem;box-shadow:0 0 transparent}.form-range::-moz-range-thumb{width:1rem;height:1rem;background-color:var(--tblr-primary);border:2px var(--tblr-border-style) #fff;border-radius:1rem;box-shadow:0 .1rem .25rem #0000001a;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;-webkit-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.form-range::-moz-range-thumb{-moz-transition:none;transition:none}}.form-range::-moz-range-thumb:active{background-color:#bcd3ed}.form-range::-moz-range-track{width:100%;height:.25rem;color:transparent;cursor:pointer;background-color:var(--tblr-border-color);border-color:transparent;border-radius:1rem;box-shadow:0 0 transparent}.form-range:disabled{pointer-events:none}.form-range:disabled::-webkit-slider-thumb{background-color:var(--tblr-secondary-color)}.form-range:disabled::-moz-range-thumb{background-color:var(--tblr-secondary-color)}.form-floating{position:relative}.form-floating>.form-control,.form-floating>.form-control-plaintext,.form-floating>.form-select{height:calc(3.5rem + calc(var(--tblr-border-width) * 2));line-height:1.25}.form-floating>label{position:absolute;top:0;left:0;z-index:2;height:100%;padding:1rem .75rem;overflow:hidden;text-align:start;text-overflow:ellipsis;white-space:nowrap;pointer-events:none;border:var(--tblr-border-width) solid transparent;transform-origin:0 0;transition:opacity .1s ease-in-out,transform .1s ease-in-out}@media (prefers-reduced-motion:reduce){.form-floating>label{transition:none}}.form-floating>.form-control,.form-floating>.form-control-plaintext{padding:1rem .75rem}.form-floating>.form-control-plaintext::-webkit-input-placeholder,.form-floating>.form-control::-webkit-input-placeholder{color:transparent}.form-floating>.form-control-plaintext:-ms-input-placeholder,.form-floating>.form-control:-ms-input-placeholder{color:transparent}.form-floating>.form-control-plaintext::-ms-input-placeholder,.form-floating>.form-control::-ms-input-placeholder{color:transparent}.form-floating>.form-control-plaintext::placeholder,.form-floating>.form-control::placeholder{color:transparent}.form-floating>.form-control-plaintext:not(:-ms-input-placeholder),.form-floating>.form-control:not(:-ms-input-placeholder){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control-plaintext:focus,.form-floating>.form-control-plaintext:not(:placeholder-shown),.form-floating>.form-control:focus,.form-floating>.form-control:not(:placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control-plaintext:-webkit-autofill,.form-floating>.form-control:-webkit-autofill{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-select{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:not(:-ms-input-placeholder)~label{color:rgba(var(--tblr-body-color-rgb),.65);transform:scale(.85) translateY(-.5rem) translate(.15rem)}.form-floating>.form-control-plaintext~label,.form-floating>.form-control:focus~label,.form-floating>.form-control:not(:placeholder-shown)~label,.form-floating>.form-select~label{color:rgba(var(--tblr-body-color-rgb),.65);transform:scale(.85) translateY(-.5rem) translate(.15rem)}.form-floating>.form-control:not(:-ms-input-placeholder)~label:after{position:absolute;top:1rem;right:.375rem;bottom:1rem;left:.375rem;z-index:-1;height:1.5em;content:"";background-color:var(--tblr-bg-forms);border-radius:var(--tblr-border-radius)}.form-floating>.form-control-plaintext~label:after,.form-floating>.form-control:focus~label:after,.form-floating>.form-control:not(:placeholder-shown)~label:after,.form-floating>.form-select~label:after{position:absolute;top:1rem;right:.375rem;bottom:1rem;left:.375rem;z-index:-1;height:1.5em;content:"";background-color:var(--tblr-bg-forms);border-radius:var(--tblr-border-radius)}.form-floating>.form-control:-webkit-autofill~label{color:rgba(var(--tblr-body-color-rgb),.65);transform:scale(.85) translateY(-.5rem) translate(.15rem)}.form-floating>.form-control-plaintext~label{border-width:var(--tblr-border-width) 0}.form-floating>:disabled~label{color:#667382}.form-floating>:disabled~label:after{background-color:var(--tblr-bg-surface-secondary)}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.form-control,.input-group>.form-floating,.input-group>.form-select{position:relative;flex:1 1 auto;width:1%;min-width:0}.input-group>.form-control:focus,.input-group>.form-floating:focus-within,.input-group>.form-select:focus{z-index:5}.input-group .btn{position:relative;z-index:2}.input-group .btn:focus{z-index:5}.input-group-text{display:flex;align-items:center;padding:.4375rem .75rem;font-size:.875rem;font-weight:400;line-height:1.4285714286;color:var(--tblr-muted);text-align:center;white-space:nowrap;background-color:var(--tblr-bg-surface-secondary);border:var(--tblr-border-width) solid var(--tblr-border-color);border-radius:var(--tblr-border-radius)}.input-group-lg>.btn,.input-group-lg>.form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text{padding:.5rem .75rem;font-size:1.25rem;border-radius:var(--tblr-border-radius-lg)}.input-group-sm>.btn,.input-group-sm>.form-control,.input-group-sm>.form-select,.input-group-sm>.input-group-text{padding:.125rem .25rem;font-size:.75rem;border-radius:var(--tblr-border-radius-sm)}.input-group-lg>.form-select,.input-group-sm>.form-select{padding-right:3rem}.input-group:not(.has-validation)>.dropdown-toggle:nth-last-child(n+3),.input-group:not(.has-validation)>.form-floating:not(:last-child)>.form-control,.input-group:not(.has-validation)>.form-floating:not(:last-child)>.form-select,.input-group:not(.has-validation)>:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating){border-top-right-radius:0;border-bottom-right-radius:0}.input-group.has-validation>.dropdown-toggle:nth-last-child(n+4),.input-group.has-validation>.form-floating:nth-last-child(n+3)>.form-control,.input-group.has-validation>.form-floating:nth-last-child(n+3)>.form-select,.input-group.has-validation>:nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){margin-left:calc(var(--tblr-border-width) * -1);border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.form-floating:not(:first-child)>.form-control,.input-group>.form-floating:not(:first-child)>.form-select{border-top-left-radius:0;border-bottom-left-radius:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:85.714285%;color:var(--tblr-form-valid-color)}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:var(--tblr-spacer-2) var(--tblr-spacer-2);margin-top:.1rem;font-size:.765625rem;color:#fff;background-color:var(--tblr-success);border-radius:var(--tblr-border-radius)}.is-valid~.valid-feedback,.is-valid~.valid-tooltip,.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip{display:block}.form-control.is-valid,.was-validated .form-control:valid{border-color:var(--tblr-form-valid-border-color);padding-right:calc(1.4285714286em + .875rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%232fb344' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3e%3cpolyline points='20 6 9 17 4 12'%3e%3c/polyline%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.3571428572em + .21875rem) center;background-size:calc(.7142857143em + .4375rem) calc(.7142857143em + .4375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:var(--tblr-form-valid-border-color);box-shadow:0 0 0 .25rem rgba(var(--tblr-success-rgb),.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.4285714286em + .875rem);background-position:top calc(.3571428572em + .21875rem) right calc(.3571428572em + .21875rem)}.form-select.is-valid,.was-validated .form-select:valid{border-color:var(--tblr-form-valid-border-color)}.form-select.is-valid:not([multiple]):not([size]),.form-select.is-valid:not([multiple])[size="1"],.was-validated .form-select:valid:not([multiple]):not([size]),.was-validated .form-select:valid:not([multiple])[size="1"]{--tblr-form-select-bg-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%232fb344' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3e%3cpolyline points='20 6 9 17 4 12'%3e%3c/polyline%3e%3c/svg%3e");padding-right:4.125rem;background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.7142857143em + .4375rem) calc(.7142857143em + .4375rem)}.form-select.is-valid:focus,.was-validated .form-select:valid:focus{border-color:var(--tblr-form-valid-border-color);box-shadow:0 0 0 .25rem rgba(var(--tblr-success-rgb),.25)}.form-control-color.is-valid,.was-validated .form-control-color:valid{width:calc(3rem + calc(1.4285714286em + .875rem))}.form-check-input.is-valid,.was-validated .form-check-input:valid{border-color:var(--tblr-form-valid-border-color)}.form-check-input.is-valid:checked,.was-validated .form-check-input:valid:checked{background-color:var(--tblr-form-valid-color)}.form-check-input.is-valid:focus,.was-validated .form-check-input:valid:focus{box-shadow:0 0 0 .25rem rgba(var(--tblr-success-rgb),.25)}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:var(--tblr-form-valid-color)}.form-check-inline .form-check-input~.valid-feedback{margin-left:.5em}.input-group>.form-control:not(:focus).is-valid,.input-group>.form-floating:not(:focus-within).is-valid,.input-group>.form-select:not(:focus).is-valid,.was-validated .input-group>.form-control:not(:focus):valid,.was-validated .input-group>.form-floating:not(:focus-within):valid,.was-validated .input-group>.form-select:not(:focus):valid{z-index:3}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:85.714285%;color:var(--tblr-form-invalid-color)}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:var(--tblr-spacer-2) var(--tblr-spacer-2);margin-top:.1rem;font-size:.765625rem;color:#fff;background-color:var(--tblr-danger);border-radius:var(--tblr-border-radius)}.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip,.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip{display:block}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:var(--tblr-form-invalid-border-color);padding-right:calc(1.4285714286em + .875rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23d63939' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3e%3cline x1='18' y1='6' x2='6' y2='18'%3e%3c/line%3e%3cline x1='6' y1='6' x2='18' y2='18'%3e%3c/line%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.3571428572em + .21875rem) center;background-size:calc(.7142857143em + .4375rem) calc(.7142857143em + .4375rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:var(--tblr-form-invalid-border-color);box-shadow:0 0 0 .25rem rgba(var(--tblr-danger-rgb),.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.4285714286em + .875rem);background-position:top calc(.3571428572em + .21875rem) right calc(.3571428572em + .21875rem)}.form-select.is-invalid,.was-validated .form-select:invalid{border-color:var(--tblr-form-invalid-border-color)}.form-select.is-invalid:not([multiple]):not([size]),.form-select.is-invalid:not([multiple])[size="1"],.was-validated .form-select:invalid:not([multiple]):not([size]),.was-validated .form-select:invalid:not([multiple])[size="1"]{--tblr-form-select-bg-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23d63939' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3e%3cline x1='18' y1='6' x2='6' y2='18'%3e%3c/line%3e%3cline x1='6' y1='6' x2='18' y2='18'%3e%3c/line%3e%3c/svg%3e");padding-right:4.125rem;background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.7142857143em + .4375rem) calc(.7142857143em + .4375rem)}.form-select.is-invalid:focus,.was-validated .form-select:invalid:focus{border-color:var(--tblr-form-invalid-border-color);box-shadow:0 0 0 .25rem rgba(var(--tblr-danger-rgb),.25)}.form-control-color.is-invalid,.was-validated .form-control-color:invalid{width:calc(3rem + calc(1.4285714286em + .875rem))}.form-check-input.is-invalid,.was-validated .form-check-input:invalid{border-color:var(--tblr-form-invalid-border-color)}.form-check-input.is-invalid:checked,.was-validated .form-check-input:invalid:checked{background-color:var(--tblr-form-invalid-color)}.form-check-input.is-invalid:focus,.was-validated .form-check-input:invalid:focus{box-shadow:0 0 0 .25rem rgba(var(--tblr-danger-rgb),.25)}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:var(--tblr-form-invalid-color)}.form-check-inline .form-check-input~.invalid-feedback{margin-left:.5em}.input-group>.form-control:not(:focus).is-invalid,.input-group>.form-floating:not(:focus-within).is-invalid,.input-group>.form-select:not(:focus).is-invalid,.was-validated .input-group>.form-control:not(:focus):invalid,.was-validated .input-group>.form-floating:not(:focus-within):invalid,.was-validated .input-group>.form-select:not(:focus):invalid{z-index:4}.btn{--tblr-btn-padding-x:1rem;--tblr-btn-padding-y:.4375rem;--tblr-btn-font-family:var(--tblr-font-sans-serif);--tblr-btn-font-size:.875rem;--tblr-btn-font-weight:var(--tblr-font-weight-medium);--tblr-btn-line-height:1.4285714286;--tblr-btn-color:var(--tblr-body-color);--tblr-btn-bg:transparent;--tblr-btn-border-width:var(--tblr-border-width);--tblr-btn-border-color:transparent;--tblr-btn-border-radius:var(--tblr-border-radius);--tblr-btn-hover-border-color:transparent;--tblr-btn-box-shadow:inset 0 1px 0 rgba(255, 255, 255, .15),0 1px 1px rgba(0, 0, 0, .075);--tblr-btn-disabled-opacity:.4;--tblr-btn-focus-box-shadow:0 0 0 .25rem rgba(var(--tblr-btn-focus-shadow-rgb), .5);display:inline-block;padding:var(--tblr-btn-padding-y) var(--tblr-btn-padding-x);font-family:var(--tblr-btn-font-family);font-size:var(--tblr-btn-font-size);font-weight:var(--tblr-btn-font-weight);line-height:var(--tblr-btn-line-height);color:var(--tblr-btn-color);text-align:center;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:var(--tblr-btn-border-width) solid var(--tblr-btn-border-color);border-radius:var(--tblr-btn-border-radius);background-color:var(--tblr-btn-bg);box-shadow:var(--tblr-btn-box-shadow);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:var(--tblr-btn-hover-color);text-decoration:none;background-color:var(--tblr-btn-hover-bg);border-color:var(--tblr-btn-hover-border-color)}.btn-check+.btn:hover{color:var(--tblr-btn-color);background-color:var(--tblr-btn-bg);border-color:var(--tblr-btn-border-color)}.btn:focus-visible{color:var(--tblr-btn-hover-color);background-color:var(--tblr-btn-hover-bg);border-color:var(--tblr-btn-hover-border-color);outline:0;box-shadow:var(--tblr-btn-box-shadow),var(--tblr-btn-focus-box-shadow)}.btn-check:focus-visible+.btn{border-color:var(--tblr-btn-hover-border-color);outline:0;box-shadow:var(--tblr-btn-box-shadow),var(--tblr-btn-focus-box-shadow)}.btn-check:checked+.btn,.btn.active,.btn.show,.btn:first-child:active,:not(.btn-check)+.btn:active{color:var(--tblr-btn-active-color);background-color:var(--tblr-btn-active-bg);border-color:var(--tblr-btn-active-border-color);box-shadow:var(--tblr-btn-active-shadow)}.btn-check:checked+.btn:focus-visible,.btn.active:focus-visible,.btn.show:focus-visible,.btn:first-child:active:focus-visible,:not(.btn-check)+.btn:active:focus-visible{box-shadow:var(--tblr-btn-active-shadow),var(--tblr-btn-focus-box-shadow)}.btn.disabled,.btn:disabled,fieldset:disabled .btn{color:var(--tblr-btn-disabled-color);pointer-events:none;background-color:var(--tblr-btn-disabled-bg);border-color:var(--tblr-btn-disabled-border-color);opacity:var(--tblr-btn-disabled-opacity);box-shadow:none}.btn-link{--tblr-btn-font-weight:400;--tblr-btn-color:var(--tblr-link-color);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-link-hover-color);--tblr-btn-hover-border-color:transparent;--tblr-btn-active-color:var(--tblr-link-hover-color);--tblr-btn-active-border-color:transparent;--tblr-btn-disabled-color:#667382;--tblr-btn-disabled-border-color:transparent;--tblr-btn-box-shadow:0 0 0 #000;--tblr-btn-focus-shadow-rgb:65,129,205;text-decoration:none}.btn-link:focus-visible,.btn-link:hover{text-decoration:underline}.btn-link:focus-visible{color:var(--tblr-btn-color)}.btn-link:hover{color:var(--tblr-btn-hover-color)}.btn-group-lg>.btn,.btn-lg{--tblr-btn-padding-y:.5rem;--tblr-btn-padding-x:.75rem;--tblr-btn-font-size:1.25rem;--tblr-btn-border-radius:var(--tblr-border-radius-lg)}.btn-group-sm>.btn,.btn-sm{--tblr-btn-padding-y:.125rem;--tblr-btn-padding-x:.25rem;--tblr-btn-font-size:.75rem;--tblr-btn-border-radius:var(--tblr-border-radius-sm)}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.collapsing.collapse-horizontal{width:0;height:auto;transition:width .35s ease}@media (prefers-reduced-motion:reduce){.collapsing.collapse-horizontal{transition:none}}.dropdown,.dropdown-center,.dropend,.dropstart,.dropup,.dropup-center{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle:after{content:"";display:inline-block;vertical-align:.306em;width:.36em;height:.36em;border-bottom:1px var(--tblr-border-style);border-left:1px var(--tblr-border-style);margin-right:.1em;margin-left:.4em;transform:rotate(-45deg)}.dropdown-menu{--tblr-dropdown-zindex:1000;--tblr-dropdown-min-width:11rem;--tblr-dropdown-padding-x:0;--tblr-dropdown-padding-y:.25rem;--tblr-dropdown-spacer:1px;--tblr-dropdown-font-size:.875rem;--tblr-dropdown-color:var(--tblr-body-color);--tblr-dropdown-bg:var(--tblr-bg-surface);--tblr-dropdown-border-color:var(--tblr-border-color-translucent);--tblr-dropdown-border-radius:var(--tblr-border-radius);--tblr-dropdown-border-width:var(--tblr-border-width);--tblr-dropdown-inner-border-radius:calc(var(--tblr-border-radius) - var(--tblr-border-width));--tblr-dropdown-divider-bg:var(--tblr-border-color-translucent);--tblr-dropdown-divider-margin-y:var(--tblr-spacer);--tblr-dropdown-box-shadow:var(--tblr-shadow-dropdown);--tblr-dropdown-link-color:inherit;--tblr-dropdown-link-hover-color:inherit;--tblr-dropdown-link-hover-bg:rgba(var(--tblr-muted-rgb), .04);--tblr-dropdown-link-active-color:var(--tblr-primary);--tblr-dropdown-link-active-bg:var(--tblr-active-bg);--tblr-dropdown-link-disabled-color:var(--tblr-tertiary-color);--tblr-dropdown-item-padding-x:.75rem;--tblr-dropdown-item-padding-y:.5rem;--tblr-dropdown-header-color:#667382;--tblr-dropdown-header-padding-x:.75rem;--tblr-dropdown-header-padding-y:.25rem;position:absolute;z-index:var(--tblr-dropdown-zindex);display:none;min-width:var(--tblr-dropdown-min-width);padding:var(--tblr-dropdown-padding-y) var(--tblr-dropdown-padding-x);margin:0;font-size:var(--tblr-dropdown-font-size);color:var(--tblr-dropdown-color);text-align:left;list-style:none;background-color:var(--tblr-dropdown-bg);background-clip:padding-box;border:var(--tblr-dropdown-border-width) solid var(--tblr-dropdown-border-color);border-radius:var(--tblr-dropdown-border-radius);box-shadow:var(--tblr-dropdown-box-shadow)}.dropdown-menu[data-bs-popper]{top:100%;left:0;margin-top:var(--tblr-dropdown-spacer)}.dropdown-menu-start{--bs-position:start}.dropdown-menu-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-end{--bs-position:end}.dropdown-menu-end[data-bs-popper]{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-start{--bs-position:start}.dropdown-menu-sm-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-sm-end{--bs-position:end}.dropdown-menu-sm-end[data-bs-popper]{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-start{--bs-position:start}.dropdown-menu-md-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-md-end{--bs-position:end}.dropdown-menu-md-end[data-bs-popper]{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-start{--bs-position:start}.dropdown-menu-lg-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-lg-end{--bs-position:end}.dropdown-menu-lg-end[data-bs-popper]{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-start{--bs-position:start}.dropdown-menu-xl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xl-end{--bs-position:end}.dropdown-menu-xl-end[data-bs-popper]{right:0;left:auto}}@media (min-width:1400px){.dropdown-menu-xxl-start{--bs-position:start}.dropdown-menu-xxl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xxl-end{--bs-position:end}.dropdown-menu-xxl-end[data-bs-popper]{right:0;left:auto}}.dropup .dropdown-menu[data-bs-popper]{top:auto;bottom:100%;margin-top:0;margin-bottom:var(--tblr-dropdown-spacer)}.dropup .dropdown-toggle:after{content:"";display:inline-block;vertical-align:.306em;width:.36em;height:.36em;border-bottom:1px var(--tblr-border-style);border-left:1px var(--tblr-border-style);margin-right:.1em;margin-left:.4em;transform:rotate(135deg)}.dropend .dropdown-menu[data-bs-popper]{top:0;right:auto;left:100%;margin-top:0;margin-left:var(--tblr-dropdown-spacer)}.dropend .dropdown-toggle:after{content:"";display:inline-block;vertical-align:.306em;width:.36em;height:.36em;border-bottom:1px var(--tblr-border-style);border-left:1px var(--tblr-border-style);margin-right:.1em;margin-left:.4em;transform:rotate(-135deg)}.dropend .dropdown-toggle:after{vertical-align:0}.dropstart .dropdown-menu[data-bs-popper]{top:0;right:100%;left:auto;margin-top:0;margin-right:var(--tblr-dropdown-spacer)}.dropstart .dropdown-toggle:after{content:"";display:inline-block;vertical-align:.306em;width:.36em;height:.36em;border-bottom:1px var(--tblr-border-style);border-left:1px var(--tblr-border-style);margin-right:.1em;margin-left:.4em;transform:rotate(45deg)}.dropstart .dropdown-toggle:before{vertical-align:0}.dropdown-divider{height:0;margin:var(--tblr-dropdown-divider-margin-y) 0;overflow:hidden;border-top:1px solid var(--tblr-dropdown-divider-bg);opacity:1}.dropdown-item{display:block;width:100%;padding:var(--tblr-dropdown-item-padding-y) var(--tblr-dropdown-item-padding-x);clear:both;font-weight:400;color:var(--tblr-dropdown-link-color);text-align:inherit;white-space:nowrap;background-color:transparent;border:0;border-radius:var(--tblr-dropdown-item-border-radius,0)}.dropdown-item:focus,.dropdown-item:hover{color:var(--tblr-dropdown-link-hover-color);text-decoration:none;background-color:var(--tblr-dropdown-link-hover-bg)}.dropdown-item.active,.dropdown-item:active{color:var(--tblr-dropdown-link-active-color);text-decoration:none;background-color:var(--tblr-dropdown-link-active-bg)}.dropdown-item.disabled,.dropdown-item:disabled{color:var(--tblr-dropdown-link-disabled-color);pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:var(--tblr-dropdown-header-padding-y) var(--tblr-dropdown-header-padding-x);margin-bottom:0;font-size:.765625rem;color:var(--tblr-dropdown-header-color);white-space:nowrap}.dropdown-item-text{display:block;padding:var(--tblr-dropdown-item-padding-y) var(--tblr-dropdown-item-padding-x);color:var(--tblr-dropdown-link-color)}.dropdown-menu-dark{--tblr-dropdown-color:#dadfe5;--tblr-dropdown-bg:#182433;--tblr-dropdown-border-color:var(--tblr-border-color-translucent);--tblr-dropdown-link-color:#dadfe5;--tblr-dropdown-link-hover-color:#ffffff;--tblr-dropdown-divider-bg:var(--tblr-border-color-translucent);--tblr-dropdown-link-hover-bg:rgba(255, 255, 255, .15);--tblr-dropdown-link-active-color:var(--tblr-primary);--tblr-dropdown-link-active-bg:var(--tblr-active-bg);--tblr-dropdown-link-disabled-color:#929dab;--tblr-dropdown-header-color:#929dab}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;flex:1 1 auto}.btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn-check:checked+.btn,.btn-group>.btn-check:focus+.btn,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group{border-radius:var(--tblr-border-radius)}.btn-group>.btn-group:not(:first-child),.btn-group>:not(.btn-check:first-child)+.btn{margin-left:calc(var(--tblr-border-width) * -1)}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn.dropdown-toggle-split:first-child,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:nth-child(n+3),.btn-group>:not(.btn-check)+.btn{border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.dropdown-toggle-split:after,.dropend .dropdown-toggle-split:after,.dropup .dropdown-toggle-split:after{margin-left:0}.dropstart .dropdown-toggle-split:before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.1875rem;padding-left:.1875rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.btn-group.show .dropdown-toggle{box-shadow:inset 0 3px 5px #00000020}.btn-group.show .dropdown-toggle.btn-link{box-shadow:none}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:calc(var(--tblr-border-width) * -1)}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn~.btn{border-top-left-radius:0;border-top-right-radius:0}.nav{--tblr-nav-link-padding-x:.75rem;--tblr-nav-link-padding-y:.5rem;--tblr-nav-link-color:var(--tblr-muted);--tblr-nav-link-hover-color:var(--tblr-link-hover-color);--tblr-nav-link-disabled-color:var(--tblr-disabled-color);display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:var(--tblr-nav-link-padding-y) var(--tblr-nav-link-padding-x);font-size:var(--tblr-nav-link-font-size);font-weight:var(--tblr-nav-link-font-weight);color:var(--tblr-nav-link-color);background:0 0;border:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out}.nav-link:focus,.nav-link:hover{color:var(--tblr-nav-link-hover-color);text-decoration:none}.nav-link:focus-visible{outline:0;box-shadow:0 0 0 .25rem #206bc440}.nav-link.disabled{color:var(--tblr-nav-link-disabled-color);pointer-events:none;cursor:default}.nav-tabs{--tblr-nav-tabs-border-width:var(--tblr-border-width);--tblr-nav-tabs-border-color:var(--tblr-border-color);--tblr-nav-tabs-border-radius:var(--tblr-border-radius);--tblr-nav-tabs-link-hover-border-color:var(--tblr-border-color) var(--tblr-border-color) var(--tblr-border-color);--tblr-nav-tabs-link-active-color:var(--tblr-body-color);--tblr-nav-tabs-link-active-bg:var(--tblr-body-bg);--tblr-nav-tabs-link-active-border-color:var(--tblr-border-color) var(--tblr-border-color) var(--tblr-border-color);border-bottom:var(--tblr-nav-tabs-border-width) solid var(--tblr-nav-tabs-border-color)}.nav-tabs .nav-link{margin-bottom:calc(-1 * var(--tblr-nav-tabs-border-width));border:var(--tblr-nav-tabs-border-width) solid transparent;border-top-left-radius:var(--tblr-nav-tabs-border-radius);border-top-right-radius:var(--tblr-nav-tabs-border-radius)}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{isolation:isolate;border-color:var(--tblr-nav-tabs-link-hover-border-color)}.nav-tabs .nav-link.disabled,.nav-tabs .nav-link:disabled{color:var(--tblr-nav-link-disabled-color);background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:var(--tblr-nav-tabs-link-active-color);background-color:var(--tblr-nav-tabs-link-active-bg);border-color:var(--tblr-nav-tabs-link-active-border-color)}.nav-tabs .dropdown-menu{margin-top:calc(-1 * var(--tblr-nav-tabs-border-width));border-top-left-radius:0;border-top-right-radius:0}.nav-pills{--tblr-nav-pills-border-radius:var(--tblr-border-radius);--tblr-nav-pills-link-active-color:var(--tblr-primary);--tblr-nav-pills-link-active-bg:var(--tblr-active-bg)}.nav-pills .nav-link{border-radius:var(--tblr-nav-pills-border-radius)}.nav-pills .nav-link:disabled{color:var(--tblr-nav-link-disabled-color);background-color:transparent;border-color:transparent}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:var(--tblr-nav-pills-link-active-color);background-color:var(--tblr-nav-pills-link-active-bg)}.nav-underline{--tblr-nav-underline-gap:1rem;--tblr-nav-underline-border-width:.125rem;--tblr-nav-underline-link-active-color:var(--tblr-emphasis-color);gap:var(--tblr-nav-underline-gap)}.nav-underline .nav-link{padding-right:0;padding-left:0;border-bottom:var(--tblr-nav-underline-border-width) solid transparent}.nav-underline .nav-link:focus,.nav-underline .nav-link:hover{border-bottom-color:currentcolor}.nav-underline .nav-link.active,.nav-underline .show>.nav-link{font-weight:600;color:var(--tblr-nav-underline-link-active-color);border-bottom-color:currentcolor}.nav-fill .nav-item,.nav-fill>.nav-link{flex:1 1 auto;text-align:center}.nav-justified .nav-item,.nav-justified>.nav-link{flex-basis:0;flex-grow:1;text-align:center}.nav-fill .nav-item .nav-link,.nav-justified .nav-item .nav-link{width:100%}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{--tblr-navbar-padding-x:0;--tblr-navbar-padding-y:.25rem;--tblr-navbar-color:var(--tblr-body-color);--tblr-navbar-hover-color:rgba(var(--tblr-emphasis-color-rgb), .8);--tblr-navbar-disabled-color:var(--tblr-disabled-color);--tblr-navbar-active-color:var(--tblr-body-color) color;--tblr-navbar-brand-padding-y:.5rem;--tblr-navbar-brand-margin-end:1rem;--tblr-navbar-brand-font-size:1.25rem;--tblr-navbar-brand-color:var(--tblr-body-color);--tblr-navbar-brand-hover-color:var(--tblr-body-color) color;--tblr-navbar-nav-link-padding-x:.75rem;--tblr-navbar-toggler-padding-y:0;--tblr-navbar-toggler-padding-x:0;--tblr-navbar-toggler-font-size:1rem;--tblr-navbar-toggler-icon-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%2824, 36, 51, 0.75%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e");--tblr-navbar-toggler-border-color:rgba(var(--tblr-emphasis-color-rgb), .15);--tblr-navbar-toggler-border-radius:var(--tblr-border-radius);--tblr-navbar-toggler-focus-width:0;--tblr-navbar-toggler-transition:box-shadow .15s ease-in-out;position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding:var(--tblr-navbar-padding-y) var(--tblr-navbar-padding-x)}.navbar>.container,.navbar>.container-fluid,.navbar>.container-lg,.navbar>.container-md,.navbar>.container-sm,.navbar>.container-xl,.navbar>.container-xxl{display:flex;flex-wrap:inherit;align-items:center;justify-content:space-between}.navbar-brand{padding-top:var(--tblr-navbar-brand-padding-y);padding-bottom:var(--tblr-navbar-brand-padding-y);margin-right:var(--tblr-navbar-brand-margin-end);font-size:var(--tblr-navbar-brand-font-size);color:var(--tblr-navbar-brand-color);white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{color:var(--tblr-navbar-brand-hover-color);text-decoration:none}.navbar-nav{--tblr-nav-link-padding-x:0;--tblr-nav-link-padding-y:.5rem;--tblr-nav-link-color:var(--tblr-navbar-color);--tblr-nav-link-hover-color:var(--tblr-navbar-hover-color);--tblr-nav-link-disabled-color:var(--tblr-navbar-disabled-color);display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link.active,.navbar-nav .nav-link.show{color:var(--tblr-navbar-active-color)}.navbar-nav .dropdown-menu{position:static}.navbar-text{padding-top:.5rem;padding-bottom:.5rem;color:var(--tblr-navbar-color)}.navbar-text a,.navbar-text a:focus,.navbar-text a:hover{color:var(--tblr-navbar-active-color)}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:var(--tblr-navbar-toggler-padding-y) var(--tblr-navbar-toggler-padding-x);font-size:var(--tblr-navbar-toggler-font-size);line-height:1;color:var(--tblr-navbar-color);background-color:transparent;border:var(--tblr-border-width) solid var(--tblr-navbar-toggler-border-color);border-radius:var(--tblr-navbar-toggler-border-radius);transition:var(--tblr-navbar-toggler-transition)}@media (prefers-reduced-motion:reduce){.navbar-toggler{transition:none}}.navbar-toggler:hover{text-decoration:none}.navbar-toggler:focus{text-decoration:none;outline:0;box-shadow:0 0 0 var(--tblr-navbar-toggler-focus-width)}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;background-image:var(--tblr-navbar-toggler-icon-bg);background-repeat:no-repeat;background-position:center;background-size:100%}.navbar-nav-scroll{max-height:var(--tblr-scroll-height,75vh);overflow-y:auto}@media (min-width:576px){.navbar-expand-sm{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:var(--tblr-navbar-nav-link-padding-x);padding-left:var(--tblr-navbar-nav-link-padding-x)}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;box-shadow:none;transition:none}.navbar-expand-sm .offcanvas .offcanvas-header{display:none}.navbar-expand-sm .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:768px){.navbar-expand-md{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:var(--tblr-navbar-nav-link-padding-x);padding-left:var(--tblr-navbar-nav-link-padding-x)}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;box-shadow:none;transition:none}.navbar-expand-md .offcanvas .offcanvas-header{display:none}.navbar-expand-md .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:992px){.navbar-expand-lg{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:var(--tblr-navbar-nav-link-padding-x);padding-left:var(--tblr-navbar-nav-link-padding-x)}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;box-shadow:none;transition:none}.navbar-expand-lg .offcanvas .offcanvas-header{display:none}.navbar-expand-lg .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:1200px){.navbar-expand-xl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:var(--tblr-navbar-nav-link-padding-x);padding-left:var(--tblr-navbar-nav-link-padding-x)}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;box-shadow:none;transition:none}.navbar-expand-xl .offcanvas .offcanvas-header{display:none}.navbar-expand-xl .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:1400px){.navbar-expand-xxl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xxl .navbar-nav{flex-direction:row}.navbar-expand-xxl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xxl .navbar-nav .nav-link{padding-right:var(--tblr-navbar-nav-link-padding-x);padding-left:var(--tblr-navbar-nav-link-padding-x)}.navbar-expand-xxl .navbar-nav-scroll{overflow:visible}.navbar-expand-xxl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xxl .navbar-toggler{display:none}.navbar-expand-xxl .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;box-shadow:none;transition:none}.navbar-expand-xxl .offcanvas .offcanvas-header{display:none}.navbar-expand-xxl .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}.navbar-expand{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:var(--tblr-navbar-nav-link-padding-x);padding-left:var(--tblr-navbar-nav-link-padding-x)}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;box-shadow:none;transition:none}.navbar-expand .offcanvas .offcanvas-header{display:none}.navbar-expand .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}.navbar-dark{--tblr-navbar-color:rgba(255, 255, 255, .7);--tblr-navbar-hover-color:rgba(255, 255, 255, .75);--tblr-navbar-disabled-color:var(--tblr-disabled-color);--tblr-navbar-active-color:#ffffff;--tblr-navbar-brand-color:#ffffff;--tblr-navbar-brand-hover-color:#ffffff;--tblr-navbar-toggler-border-color:rgba(255, 255, 255, .1);--tblr-navbar-toggler-icon-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.7%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}[data-bs-theme=dark] .navbar-toggler-icon{--tblr-navbar-toggler-icon-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.7%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.card{--tblr-card-spacer-y:1rem;--tblr-card-spacer-x:1.5rem;--tblr-card-title-spacer-y:1.25rem;--tblr-card-border-width:var(--tblr-border-width);--tblr-card-border-color:var(--tblr-border-color-translucent);--tblr-card-border-radius:var(--tblr-border-radius);--tblr-card-box-shadow:var(--tblr-shadow-card);--tblr-card-inner-border-radius:calc(var(--tblr-border-radius) - (var(--tblr-border-width)));--tblr-card-cap-padding-y:1rem;--tblr-card-cap-padding-x:1.5rem;--tblr-card-cap-bg:var(--tblr-bg-surface-tertiary);--tblr-card-cap-color:inherit;--tblr-card-color:inherit;--tblr-card-bg:var(--tblr-bg-surface);--tblr-card-img-overlay-padding:1rem;--tblr-card-group-margin:1.5rem;position:relative;display:flex;flex-direction:column;min-width:0;height:var(--tblr-card-height);color:var(--tblr-body-color);word-wrap:break-word;background-color:var(--tblr-card-bg);background-clip:border-box;border:var(--tblr-card-border-width) solid var(--tblr-card-border-color);border-radius:var(--tblr-card-border-radius);box-shadow:var(--tblr-card-box-shadow)}.card>.hr,.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-left-radius:var(--tblr-card-inner-border-radius);border-top-right-radius:var(--tblr-card-inner-border-radius)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:var(--tblr-card-inner-border-radius);border-bottom-left-radius:var(--tblr-card-inner-border-radius)}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{flex:1 1 auto;padding:var(--tblr-card-spacer-y) var(--tblr-card-spacer-x);color:var(--tblr-card-color)}.card-title{margin-bottom:var(--tblr-card-title-spacer-y);color:var(--tblr-card-title-color)}.card-subtitle{margin-top:calc(-.5 * var(--tblr-card-title-spacer-y));margin-bottom:0;color:var(--tblr-card-subtitle-color)}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:var(--tblr-card-spacer-x)}.card-header{padding:var(--tblr-card-cap-padding-y) var(--tblr-card-cap-padding-x);margin-bottom:0;color:var(--tblr-card-cap-color);background-color:var(--tblr-card-cap-bg);border-bottom:var(--tblr-card-border-width) solid var(--tblr-card-border-color)}.card-header:first-child{border-radius:var(--tblr-card-inner-border-radius) var(--tblr-card-inner-border-radius) 0 0}.card-footer{padding:var(--tblr-card-cap-padding-y) var(--tblr-card-cap-padding-x);color:var(--tblr-card-cap-color);background-color:var(--tblr-card-cap-bg);border-top:var(--tblr-card-border-width) solid var(--tblr-card-border-color)}.card-footer:last-child{border-radius:0 0 var(--tblr-card-inner-border-radius) var(--tblr-card-inner-border-radius)}.card-header-tabs{margin-right:calc(-.5 * var(--tblr-card-cap-padding-x));margin-bottom:calc(-1 * var(--tblr-card-cap-padding-y));margin-left:calc(-.5 * var(--tblr-card-cap-padding-x));border-bottom:0}.card-header-tabs .nav-link.active{background-color:var(--tblr-card-bg);border-bottom-color:var(--tblr-card-bg)}.card-header-pills{margin-right:calc(-.5 * var(--tblr-card-cap-padding-x));margin-left:calc(-.5 * var(--tblr-card-cap-padding-x))}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:var(--tblr-card-img-overlay-padding);border-radius:var(--tblr-card-inner-border-radius)}.card-img,.card-img-bottom,.card-img-top{width:100%}.card-img,.card-img-top{border-top-left-radius:var(--tblr-card-inner-border-radius);border-top-right-radius:var(--tblr-card-inner-border-radius)}.card-img,.card-img-bottom{border-bottom-right-radius:var(--tblr-card-inner-border-radius);border-bottom-left-radius:var(--tblr-card-inner-border-radius)}.card-group>.card{margin-bottom:var(--tblr-card-group-margin)}@media (min-width:576px){.card-group{display:flex;flex-flow:row wrap}.card-group>.card{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.accordion{--tblr-accordion-color:var(--tblr-body-color);--tblr-accordion-bg:transparent;--tblr-accordion-transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,border-radius .15s ease;--tblr-accordion-border-color:var(--tblr-border-color-translucent);--tblr-accordion-border-width:var(--tblr-border-width);--tblr-accordion-border-radius:var(--tblr-border-radius);--tblr-accordion-inner-border-radius:calc(var(--tblr-border-radius) - (var(--tblr-border-width)));--tblr-accordion-btn-padding-x:1.25rem;--tblr-accordion-btn-padding-y:1rem;--tblr-accordion-btn-color:var(--tblr-body-color);--tblr-accordion-btn-bg:transparent;--tblr-accordion-btn-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23182433'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");--tblr-accordion-btn-icon-width:1rem;--tblr-accordion-btn-icon-transform:rotate(-180deg);--tblr-accordion-btn-icon-transition:transform .2s ease-in-out;--tblr-accordion-btn-active-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%230d2b4e'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");--tblr-accordion-btn-focus-border-color:var(--tblr-border-color-translucent);--tblr-accordion-btn-focus-box-shadow:0 0 0 .25rem rgba(32, 107, 196, .25);--tblr-accordion-body-padding-x:1.25rem;--tblr-accordion-body-padding-y:1rem;--tblr-accordion-active-color:inherit;--tblr-accordion-active-bg:transparent}.accordion-button{position:relative;display:flex;align-items:center;width:100%;padding:var(--tblr-accordion-btn-padding-y) var(--tblr-accordion-btn-padding-x);font-size:.875rem;color:var(--tblr-accordion-btn-color);text-align:left;background-color:var(--tblr-accordion-btn-bg);border:0;border-radius:0;overflow-anchor:none;transition:var(--tblr-accordion-transition)}@media (prefers-reduced-motion:reduce){.accordion-button{transition:none}}.accordion-button:not(.collapsed){color:var(--tblr-accordion-active-color);background-color:var(--tblr-accordion-active-bg);box-shadow:inset 0 calc(-1 * var(--tblr-accordion-border-width)) 0 var(--tblr-accordion-border-color)}.accordion-button:not(.collapsed):after{background-image:var(--tblr-accordion-btn-active-icon);transform:var(--tblr-accordion-btn-icon-transform)}.accordion-button:after{flex-shrink:0;width:var(--tblr-accordion-btn-icon-width);height:var(--tblr-accordion-btn-icon-width);margin-left:auto;content:"";background-image:var(--tblr-accordion-btn-icon);background-repeat:no-repeat;background-size:var(--tblr-accordion-btn-icon-width);transition:var(--tblr-accordion-btn-icon-transition)}@media (prefers-reduced-motion:reduce){.accordion-button:after{transition:none}}.accordion-button:hover{z-index:2}.accordion-button:focus{z-index:3;border-color:var(--tblr-accordion-btn-focus-border-color);outline:0;box-shadow:var(--tblr-accordion-btn-focus-box-shadow)}.accordion-header{margin-bottom:0}.accordion-item{color:var(--tblr-accordion-color);background-color:var(--tblr-accordion-bg);border:var(--tblr-accordion-border-width) solid var(--tblr-accordion-border-color)}.accordion-item:first-of-type{border-top-left-radius:var(--tblr-accordion-border-radius);border-top-right-radius:var(--tblr-accordion-border-radius)}.accordion-item:first-of-type .accordion-button{border-top-left-radius:var(--tblr-accordion-inner-border-radius);border-top-right-radius:var(--tblr-accordion-inner-border-radius)}.accordion-item:not(:first-of-type){border-top:0}.accordion-item:last-of-type{border-bottom-right-radius:var(--tblr-accordion-border-radius);border-bottom-left-radius:var(--tblr-accordion-border-radius)}.accordion-item:last-of-type .accordion-button.collapsed{border-bottom-right-radius:var(--tblr-accordion-inner-border-radius);border-bottom-left-radius:var(--tblr-accordion-inner-border-radius)}.accordion-item:last-of-type .accordion-collapse{border-bottom-right-radius:var(--tblr-accordion-border-radius);border-bottom-left-radius:var(--tblr-accordion-border-radius)}.accordion-body{padding:var(--tblr-accordion-body-padding-y) var(--tblr-accordion-body-padding-x)}.accordion-flush .accordion-collapse{border-width:0}.accordion-flush .accordion-item{border-right:0;border-left:0;border-radius:0}.accordion-flush .accordion-item:first-child{border-top:0}.accordion-flush .accordion-item:last-child{border-bottom:0}.accordion-flush .accordion-item .accordion-button,.accordion-flush .accordion-item .accordion-button.collapsed{border-radius:0}[data-bs-theme=dark] .accordion-button:after{--tblr-accordion-btn-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%2379a6dc'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");--tblr-accordion-btn-active-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%2379a6dc'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e")}.breadcrumb{--tblr-breadcrumb-padding-x:0;--tblr-breadcrumb-padding-y:0;--tblr-breadcrumb-margin-bottom:1rem;--tblr-breadcrumb-divider-color:var(--tblr-muted);--tblr-breadcrumb-item-padding-x:.5rem;--tblr-breadcrumb-item-active-color:inherit;display:flex;flex-wrap:wrap;padding:var(--tblr-breadcrumb-padding-y) var(--tblr-breadcrumb-padding-x);margin-bottom:var(--tblr-breadcrumb-margin-bottom);font-size:var(--tblr-breadcrumb-font-size);list-style:none;background-color:var(--tblr-breadcrumb-bg);border-radius:var(--tblr-breadcrumb-border-radius)}.breadcrumb-item+.breadcrumb-item{padding-left:var(--tblr-breadcrumb-item-padding-x)}.breadcrumb-item+.breadcrumb-item:before{float:left;padding-right:var(--tblr-breadcrumb-item-padding-x);color:var(--tblr-breadcrumb-divider-color);content:var(--tblr-breadcrumb-divider, "/")}.breadcrumb-item.active{color:var(--tblr-breadcrumb-item-active-color)}.pagination{--tblr-pagination-padding-x:.25rem;--tblr-pagination-padding-y:.25rem;--tblr-pagination-font-size:.875rem;--tblr-pagination-color:var(--tblr-muted);--tblr-pagination-bg:transparent;--tblr-pagination-border-width:0;--tblr-pagination-border-color:var(--tblr-border-color);--tblr-pagination-border-radius:var(--tblr-border-radius);--tblr-pagination-hover-color:var(--tblr-link-hover-color);--tblr-pagination-hover-bg:var(--tblr-tertiary-bg);--tblr-pagination-hover-border-color:var(--tblr-border-color);--tblr-pagination-focus-color:var(--tblr-link-hover-color);--tblr-pagination-focus-bg:var(--tblr-secondary-bg);--tblr-pagination-focus-box-shadow:0 0 0 .25rem rgba(32, 107, 196, .25);--tblr-pagination-active-color:#ffffff;--tblr-pagination-active-bg:var(--tblr-primary);--tblr-pagination-active-border-color:var(--tblr-primary);--tblr-pagination-disabled-color:var(--tblr-disabled-color);--tblr-pagination-disabled-bg:transparent;--tblr-pagination-disabled-border-color:var(--tblr-border-color);display:flex;padding-left:0;list-style:none}.page-link{position:relative;display:block;padding:var(--tblr-pagination-padding-y) var(--tblr-pagination-padding-x);font-size:var(--tblr-pagination-font-size);color:var(--tblr-pagination-color);background-color:var(--tblr-pagination-bg);border:var(--tblr-pagination-border-width) solid var(--tblr-pagination-border-color);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.page-link{transition:none}}.page-link:hover{z-index:2;color:var(--tblr-pagination-hover-color);text-decoration:none;background-color:var(--tblr-pagination-hover-bg);border-color:var(--tblr-pagination-hover-border-color)}.page-link:focus{z-index:3;color:var(--tblr-pagination-focus-color);background-color:var(--tblr-pagination-focus-bg);outline:0;box-shadow:var(--tblr-pagination-focus-box-shadow)}.active>.page-link,.page-link.active{z-index:3;color:var(--tblr-pagination-active-color);background-color:var(--tblr-pagination-active-bg);border-color:var(--tblr-pagination-active-border-color)}.disabled>.page-link,.page-link.disabled{color:var(--tblr-pagination-disabled-color);pointer-events:none;background-color:var(--tblr-pagination-disabled-bg);border-color:var(--tblr-pagination-disabled-border-color)}.page-item:not(:first-child) .page-link{margin-left:-0}.page-item:first-child .page-link{border-top-left-radius:var(--tblr-pagination-border-radius);border-bottom-left-radius:var(--tblr-pagination-border-radius)}.page-item:last-child .page-link{border-top-right-radius:var(--tblr-pagination-border-radius);border-bottom-right-radius:var(--tblr-pagination-border-radius)}.pagination-lg{--tblr-pagination-padding-x:1.5rem;--tblr-pagination-padding-y:.75rem;--tblr-pagination-font-size:1.09375rem;--tblr-pagination-border-radius:var(--tblr-border-radius-lg)}.pagination-sm{--tblr-pagination-padding-x:.5rem;--tblr-pagination-padding-y:.25rem;--tblr-pagination-font-size:.765625rem;--tblr-pagination-border-radius:var(--tblr-border-radius-sm)}.badge{--tblr-badge-padding-x:.5em;--tblr-badge-padding-y:.25em;--tblr-badge-font-size:85.714285%;--tblr-badge-font-weight:var(--tblr-font-weight-medium);--tblr-badge-color:#ffffff;--tblr-badge-border-radius:var(--tblr-border-radius);display:inline-block;padding:var(--tblr-badge-padding-y) var(--tblr-badge-padding-x);font-size:var(--tblr-badge-font-size);font-weight:var(--tblr-badge-font-weight);line-height:1;color:var(--tblr-badge-color);text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:var(--tblr-badge-border-radius)}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.alert{--tblr-alert-bg:transparent;--tblr-alert-padding-x:1rem;--tblr-alert-padding-y:1rem;--tblr-alert-margin-bottom:1rem;--tblr-alert-color:inherit;--tblr-alert-border-color:transparent;--tblr-alert-border:var(--tblr-border-width) solid var(--tblr-alert-border-color);--tblr-alert-border-radius:var(--tblr-border-radius);--tblr-alert-link-color:inherit;position:relative;padding:var(--tblr-alert-padding-y) var(--tblr-alert-padding-x);margin-bottom:var(--tblr-alert-margin-bottom);color:var(--tblr-alert-color);background-color:var(--tblr-alert-bg);border:var(--tblr-alert-border);border-radius:var(--tblr-alert-border-radius)}.alert-heading{color:inherit}.alert-link{font-weight:var(--tblr-font-weight-bold);color:var(--tblr-alert-link-color)}.alert-dismissible{padding-right:3rem}.alert-dismissible .btn-close{position:absolute;top:0;right:0;z-index:2;padding:1.25rem 1rem}.alert-primary{--tblr-alert-color:var(--tblr-primary-text-emphasis);--tblr-alert-bg:var(--tblr-primary-bg-subtle);--tblr-alert-border-color:var(--tblr-primary-border-subtle);--tblr-alert-link-color:var(--tblr-primary-text-emphasis)}.alert-secondary{--tblr-alert-color:var(--tblr-secondary-text-emphasis);--tblr-alert-bg:var(--tblr-secondary-bg-subtle);--tblr-alert-border-color:var(--tblr-secondary-border-subtle);--tblr-alert-link-color:var(--tblr-secondary-text-emphasis)}.alert-success{--tblr-alert-color:var(--tblr-success-text-emphasis);--tblr-alert-bg:var(--tblr-success-bg-subtle);--tblr-alert-border-color:var(--tblr-success-border-subtle);--tblr-alert-link-color:var(--tblr-success-text-emphasis)}.alert-info{--tblr-alert-color:var(--tblr-info-text-emphasis);--tblr-alert-bg:var(--tblr-info-bg-subtle);--tblr-alert-border-color:var(--tblr-info-border-subtle);--tblr-alert-link-color:var(--tblr-info-text-emphasis)}.alert-warning{--tblr-alert-color:var(--tblr-warning-text-emphasis);--tblr-alert-bg:var(--tblr-warning-bg-subtle);--tblr-alert-border-color:var(--tblr-warning-border-subtle);--tblr-alert-link-color:var(--tblr-warning-text-emphasis)}.alert-danger{--tblr-alert-color:var(--tblr-danger-text-emphasis);--tblr-alert-bg:var(--tblr-danger-bg-subtle);--tblr-alert-border-color:var(--tblr-danger-border-subtle);--tblr-alert-link-color:var(--tblr-danger-text-emphasis)}.alert-light{--tblr-alert-color:var(--tblr-light-text-emphasis);--tblr-alert-bg:var(--tblr-light-bg-subtle);--tblr-alert-border-color:var(--tblr-light-border-subtle);--tblr-alert-link-color:var(--tblr-light-text-emphasis)}.alert-dark{--tblr-alert-color:var(--tblr-dark-text-emphasis);--tblr-alert-bg:var(--tblr-dark-bg-subtle);--tblr-alert-border-color:var(--tblr-dark-border-subtle);--tblr-alert-link-color:var(--tblr-dark-text-emphasis)}.alert-muted{--tblr-alert-color:var(--tblr-muted-text-emphasis);--tblr-alert-bg:var(--tblr-muted-bg-subtle);--tblr-alert-border-color:var(--tblr-muted-border-subtle);--tblr-alert-link-color:var(--tblr-muted-text-emphasis)}.alert-blue{--tblr-alert-color:var(--tblr-blue-text-emphasis);--tblr-alert-bg:var(--tblr-blue-bg-subtle);--tblr-alert-border-color:var(--tblr-blue-border-subtle);--tblr-alert-link-color:var(--tblr-blue-text-emphasis)}.alert-azure{--tblr-alert-color:var(--tblr-azure-text-emphasis);--tblr-alert-bg:var(--tblr-azure-bg-subtle);--tblr-alert-border-color:var(--tblr-azure-border-subtle);--tblr-alert-link-color:var(--tblr-azure-text-emphasis)}.alert-indigo{--tblr-alert-color:var(--tblr-indigo-text-emphasis);--tblr-alert-bg:var(--tblr-indigo-bg-subtle);--tblr-alert-border-color:var(--tblr-indigo-border-subtle);--tblr-alert-link-color:var(--tblr-indigo-text-emphasis)}.alert-purple{--tblr-alert-color:var(--tblr-purple-text-emphasis);--tblr-alert-bg:var(--tblr-purple-bg-subtle);--tblr-alert-border-color:var(--tblr-purple-border-subtle);--tblr-alert-link-color:var(--tblr-purple-text-emphasis)}.alert-pink{--tblr-alert-color:var(--tblr-pink-text-emphasis);--tblr-alert-bg:var(--tblr-pink-bg-subtle);--tblr-alert-border-color:var(--tblr-pink-border-subtle);--tblr-alert-link-color:var(--tblr-pink-text-emphasis)}.alert-red{--tblr-alert-color:var(--tblr-red-text-emphasis);--tblr-alert-bg:var(--tblr-red-bg-subtle);--tblr-alert-border-color:var(--tblr-red-border-subtle);--tblr-alert-link-color:var(--tblr-red-text-emphasis)}.alert-orange{--tblr-alert-color:var(--tblr-orange-text-emphasis);--tblr-alert-bg:var(--tblr-orange-bg-subtle);--tblr-alert-border-color:var(--tblr-orange-border-subtle);--tblr-alert-link-color:var(--tblr-orange-text-emphasis)}.alert-yellow{--tblr-alert-color:var(--tblr-yellow-text-emphasis);--tblr-alert-bg:var(--tblr-yellow-bg-subtle);--tblr-alert-border-color:var(--tblr-yellow-border-subtle);--tblr-alert-link-color:var(--tblr-yellow-text-emphasis)}.alert-lime{--tblr-alert-color:var(--tblr-lime-text-emphasis);--tblr-alert-bg:var(--tblr-lime-bg-subtle);--tblr-alert-border-color:var(--tblr-lime-border-subtle);--tblr-alert-link-color:var(--tblr-lime-text-emphasis)}.alert-green{--tblr-alert-color:var(--tblr-green-text-emphasis);--tblr-alert-bg:var(--tblr-green-bg-subtle);--tblr-alert-border-color:var(--tblr-green-border-subtle);--tblr-alert-link-color:var(--tblr-green-text-emphasis)}.alert-teal{--tblr-alert-color:var(--tblr-teal-text-emphasis);--tblr-alert-bg:var(--tblr-teal-bg-subtle);--tblr-alert-border-color:var(--tblr-teal-border-subtle);--tblr-alert-link-color:var(--tblr-teal-text-emphasis)}.alert-cyan{--tblr-alert-color:var(--tblr-cyan-text-emphasis);--tblr-alert-bg:var(--tblr-cyan-bg-subtle);--tblr-alert-border-color:var(--tblr-cyan-border-subtle);--tblr-alert-link-color:var(--tblr-cyan-text-emphasis)}.alert-facebook{--tblr-alert-color:var(--tblr-facebook-text-emphasis);--tblr-alert-bg:var(--tblr-facebook-bg-subtle);--tblr-alert-border-color:var(--tblr-facebook-border-subtle);--tblr-alert-link-color:var(--tblr-facebook-text-emphasis)}.alert-twitter{--tblr-alert-color:var(--tblr-twitter-text-emphasis);--tblr-alert-bg:var(--tblr-twitter-bg-subtle);--tblr-alert-border-color:var(--tblr-twitter-border-subtle);--tblr-alert-link-color:var(--tblr-twitter-text-emphasis)}.alert-linkedin{--tblr-alert-color:var(--tblr-linkedin-text-emphasis);--tblr-alert-bg:var(--tblr-linkedin-bg-subtle);--tblr-alert-border-color:var(--tblr-linkedin-border-subtle);--tblr-alert-link-color:var(--tblr-linkedin-text-emphasis)}.alert-google{--tblr-alert-color:var(--tblr-google-text-emphasis);--tblr-alert-bg:var(--tblr-google-bg-subtle);--tblr-alert-border-color:var(--tblr-google-border-subtle);--tblr-alert-link-color:var(--tblr-google-text-emphasis)}.alert-youtube{--tblr-alert-color:var(--tblr-youtube-text-emphasis);--tblr-alert-bg:var(--tblr-youtube-bg-subtle);--tblr-alert-border-color:var(--tblr-youtube-border-subtle);--tblr-alert-link-color:var(--tblr-youtube-text-emphasis)}.alert-vimeo{--tblr-alert-color:var(--tblr-vimeo-text-emphasis);--tblr-alert-bg:var(--tblr-vimeo-bg-subtle);--tblr-alert-border-color:var(--tblr-vimeo-border-subtle);--tblr-alert-link-color:var(--tblr-vimeo-text-emphasis)}.alert-dribbble{--tblr-alert-color:var(--tblr-dribbble-text-emphasis);--tblr-alert-bg:var(--tblr-dribbble-bg-subtle);--tblr-alert-border-color:var(--tblr-dribbble-border-subtle);--tblr-alert-link-color:var(--tblr-dribbble-text-emphasis)}.alert-github{--tblr-alert-color:var(--tblr-github-text-emphasis);--tblr-alert-bg:var(--tblr-github-bg-subtle);--tblr-alert-border-color:var(--tblr-github-border-subtle);--tblr-alert-link-color:var(--tblr-github-text-emphasis)}.alert-instagram{--tblr-alert-color:var(--tblr-instagram-text-emphasis);--tblr-alert-bg:var(--tblr-instagram-bg-subtle);--tblr-alert-border-color:var(--tblr-instagram-border-subtle);--tblr-alert-link-color:var(--tblr-instagram-text-emphasis)}.alert-pinterest{--tblr-alert-color:var(--tblr-pinterest-text-emphasis);--tblr-alert-bg:var(--tblr-pinterest-bg-subtle);--tblr-alert-border-color:var(--tblr-pinterest-border-subtle);--tblr-alert-link-color:var(--tblr-pinterest-text-emphasis)}.alert-vk{--tblr-alert-color:var(--tblr-vk-text-emphasis);--tblr-alert-bg:var(--tblr-vk-bg-subtle);--tblr-alert-border-color:var(--tblr-vk-border-subtle);--tblr-alert-link-color:var(--tblr-vk-text-emphasis)}.alert-rss{--tblr-alert-color:var(--tblr-rss-text-emphasis);--tblr-alert-bg:var(--tblr-rss-bg-subtle);--tblr-alert-border-color:var(--tblr-rss-border-subtle);--tblr-alert-link-color:var(--tblr-rss-text-emphasis)}.alert-flickr{--tblr-alert-color:var(--tblr-flickr-text-emphasis);--tblr-alert-bg:var(--tblr-flickr-bg-subtle);--tblr-alert-border-color:var(--tblr-flickr-border-subtle);--tblr-alert-link-color:var(--tblr-flickr-text-emphasis)}.alert-bitbucket{--tblr-alert-color:var(--tblr-bitbucket-text-emphasis);--tblr-alert-bg:var(--tblr-bitbucket-bg-subtle);--tblr-alert-border-color:var(--tblr-bitbucket-border-subtle);--tblr-alert-link-color:var(--tblr-bitbucket-text-emphasis)}.alert-tabler{--tblr-alert-color:var(--tblr-tabler-text-emphasis);--tblr-alert-bg:var(--tblr-tabler-bg-subtle);--tblr-alert-border-color:var(--tblr-tabler-border-subtle);--tblr-alert-link-color:var(--tblr-tabler-text-emphasis)}@keyframes progress-bar-stripes{0%{background-position-x:.5rem}}.progress,.progress-stacked{--tblr-progress-height:.5rem;--tblr-progress-font-size:.65625rem;--tblr-progress-bg:var(--tblr-border-color);--tblr-progress-border-radius:var(--tblr-border-radius);--tblr-progress-box-shadow:var(--tblr-box-shadow-inset);--tblr-progress-bar-color:#ffffff;--tblr-progress-bar-bg:var(--tblr-primary);--tblr-progress-bar-transition:width .6s ease;display:flex;height:var(--tblr-progress-height);overflow:hidden;font-size:var(--tblr-progress-font-size);background-color:var(--tblr-progress-bg);border-radius:var(--tblr-progress-border-radius);box-shadow:var(--tblr-progress-box-shadow)}.progress-bar{display:flex;flex-direction:column;justify-content:center;overflow:hidden;color:var(--tblr-progress-bar-color);text-align:center;white-space:nowrap;background-color:var(--tblr-progress-bar-bg);transition:var(--tblr-progress-bar-transition)}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:var(--tblr-progress-height) var(--tblr-progress-height)}.progress-stacked>.progress{overflow:visible}.progress-stacked>.progress>.progress-bar{width:100%}.progress-bar-animated{animation:1s linear infinite progress-bar-stripes}@media (prefers-reduced-motion:reduce){.progress-bar-animated{animation:none}}.list-group{--tblr-list-group-color:var(--tblr-body-color);--tblr-list-group-bg:inherit;--tblr-list-group-border-color:var(--tblr-border-color);--tblr-list-group-border-width:var(--tblr-border-width);--tblr-list-group-border-radius:var(--tblr-border-radius);--tblr-list-group-item-padding-x:1.5rem;--tblr-list-group-item-padding-y:1rem;--tblr-list-group-action-color:inherit;--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:rgba(var(--tblr-muted-rgb), .04);--tblr-list-group-action-active-color:var(--tblr-body-color);--tblr-list-group-action-active-bg:var(--tblr-secondary-bg);--tblr-list-group-disabled-color:var(--tblr-secondary-color);--tblr-list-group-disabled-bg:inherit;--tblr-list-group-active-color:inherit;--tblr-list-group-active-bg:var(--tblr-active-bg);--tblr-list-group-active-border-color:var(--tblr-border-color);display:flex;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:var(--tblr-list-group-border-radius)}.list-group-numbered{list-style-type:none;counter-reset:section}.list-group-numbered>.list-group-item:before{content:counters(section,".") ". ";counter-increment:section}.list-group-item-action{width:100%;color:var(--tblr-list-group-action-color);text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:var(--tblr-list-group-action-hover-color);text-decoration:none;background-color:var(--tblr-list-group-action-hover-bg)}.list-group-item-action:active{color:var(--tblr-list-group-action-active-color);background-color:var(--tblr-list-group-action-active-bg)}.list-group-item{position:relative;display:block;padding:var(--tblr-list-group-item-padding-y) var(--tblr-list-group-item-padding-x);color:var(--tblr-list-group-color);background-color:var(--tblr-list-group-bg);border:var(--tblr-list-group-border-width) solid var(--tblr-list-group-border-color)}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:var(--tblr-list-group-disabled-color);pointer-events:none;background-color:var(--tblr-list-group-disabled-bg)}.list-group-item.active{z-index:2;color:var(--tblr-list-group-active-color);background-color:var(--tblr-list-group-active-bg);border-color:var(--tblr-list-group-active-border-color)}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:calc(-1 * var(--tblr-list-group-border-width));border-top-width:var(--tblr-list-group-border-width)}.list-group-horizontal{flex-direction:row}.list-group-horizontal>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--tblr-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--tblr-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:var(--tblr-list-group-border-width);border-left-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--tblr-list-group-border-width));border-left-width:var(--tblr-list-group-border-width)}@media (min-width:576px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--tblr-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--tblr-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:var(--tblr-list-group-border-width);border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--tblr-list-group-border-width));border-left-width:var(--tblr-list-group-border-width)}}@media (min-width:768px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--tblr-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--tblr-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:var(--tblr-list-group-border-width);border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--tblr-list-group-border-width));border-left-width:var(--tblr-list-group-border-width)}}@media (min-width:992px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--tblr-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--tblr-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:var(--tblr-list-group-border-width);border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--tblr-list-group-border-width));border-left-width:var(--tblr-list-group-border-width)}}@media (min-width:1200px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--tblr-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--tblr-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:var(--tblr-list-group-border-width);border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--tblr-list-group-border-width));border-left-width:var(--tblr-list-group-border-width)}}@media (min-width:1400px){.list-group-horizontal-xxl{flex-direction:row}.list-group-horizontal-xxl>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--tblr-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-xxl>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--tblr-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-xxl>.list-group-item.active{margin-top:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item{border-top-width:var(--tblr-list-group-border-width);border-left-width:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--tblr-list-group-border-width));border-left-width:var(--tblr-list-group-border-width)}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 var(--tblr-list-group-border-width)}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{--tblr-list-group-color:var(--tblr-primary-text-emphasis);--tblr-list-group-bg:var(--tblr-primary-bg-subtle);--tblr-list-group-border-color:var(--tblr-primary-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-primary-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-primary-border-subtle);--tblr-list-group-active-color:var(--tblr-primary-bg-subtle);--tblr-list-group-active-bg:var(--tblr-primary-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-primary-text-emphasis)}.list-group-item-secondary{--tblr-list-group-color:var(--tblr-secondary-text-emphasis);--tblr-list-group-bg:var(--tblr-secondary-bg-subtle);--tblr-list-group-border-color:var(--tblr-secondary-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-secondary-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-secondary-border-subtle);--tblr-list-group-active-color:var(--tblr-secondary-bg-subtle);--tblr-list-group-active-bg:var(--tblr-secondary-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-secondary-text-emphasis)}.list-group-item-success{--tblr-list-group-color:var(--tblr-success-text-emphasis);--tblr-list-group-bg:var(--tblr-success-bg-subtle);--tblr-list-group-border-color:var(--tblr-success-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-success-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-success-border-subtle);--tblr-list-group-active-color:var(--tblr-success-bg-subtle);--tblr-list-group-active-bg:var(--tblr-success-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-success-text-emphasis)}.list-group-item-info{--tblr-list-group-color:var(--tblr-info-text-emphasis);--tblr-list-group-bg:var(--tblr-info-bg-subtle);--tblr-list-group-border-color:var(--tblr-info-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-info-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-info-border-subtle);--tblr-list-group-active-color:var(--tblr-info-bg-subtle);--tblr-list-group-active-bg:var(--tblr-info-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-info-text-emphasis)}.list-group-item-warning{--tblr-list-group-color:var(--tblr-warning-text-emphasis);--tblr-list-group-bg:var(--tblr-warning-bg-subtle);--tblr-list-group-border-color:var(--tblr-warning-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-warning-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-warning-border-subtle);--tblr-list-group-active-color:var(--tblr-warning-bg-subtle);--tblr-list-group-active-bg:var(--tblr-warning-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-warning-text-emphasis)}.list-group-item-danger{--tblr-list-group-color:var(--tblr-danger-text-emphasis);--tblr-list-group-bg:var(--tblr-danger-bg-subtle);--tblr-list-group-border-color:var(--tblr-danger-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-danger-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-danger-border-subtle);--tblr-list-group-active-color:var(--tblr-danger-bg-subtle);--tblr-list-group-active-bg:var(--tblr-danger-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-danger-text-emphasis)}.list-group-item-light{--tblr-list-group-color:var(--tblr-light-text-emphasis);--tblr-list-group-bg:var(--tblr-light-bg-subtle);--tblr-list-group-border-color:var(--tblr-light-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-light-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-light-border-subtle);--tblr-list-group-active-color:var(--tblr-light-bg-subtle);--tblr-list-group-active-bg:var(--tblr-light-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-light-text-emphasis)}.list-group-item-dark{--tblr-list-group-color:var(--tblr-dark-text-emphasis);--tblr-list-group-bg:var(--tblr-dark-bg-subtle);--tblr-list-group-border-color:var(--tblr-dark-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-dark-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-dark-border-subtle);--tblr-list-group-active-color:var(--tblr-dark-bg-subtle);--tblr-list-group-active-bg:var(--tblr-dark-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-dark-text-emphasis)}.list-group-item-muted{--tblr-list-group-color:var(--tblr-muted-text-emphasis);--tblr-list-group-bg:var(--tblr-muted-bg-subtle);--tblr-list-group-border-color:var(--tblr-muted-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-muted-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-muted-border-subtle);--tblr-list-group-active-color:var(--tblr-muted-bg-subtle);--tblr-list-group-active-bg:var(--tblr-muted-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-muted-text-emphasis)}.list-group-item-blue{--tblr-list-group-color:var(--tblr-blue-text-emphasis);--tblr-list-group-bg:var(--tblr-blue-bg-subtle);--tblr-list-group-border-color:var(--tblr-blue-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-blue-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-blue-border-subtle);--tblr-list-group-active-color:var(--tblr-blue-bg-subtle);--tblr-list-group-active-bg:var(--tblr-blue-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-blue-text-emphasis)}.list-group-item-azure{--tblr-list-group-color:var(--tblr-azure-text-emphasis);--tblr-list-group-bg:var(--tblr-azure-bg-subtle);--tblr-list-group-border-color:var(--tblr-azure-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-azure-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-azure-border-subtle);--tblr-list-group-active-color:var(--tblr-azure-bg-subtle);--tblr-list-group-active-bg:var(--tblr-azure-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-azure-text-emphasis)}.list-group-item-indigo{--tblr-list-group-color:var(--tblr-indigo-text-emphasis);--tblr-list-group-bg:var(--tblr-indigo-bg-subtle);--tblr-list-group-border-color:var(--tblr-indigo-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-indigo-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-indigo-border-subtle);--tblr-list-group-active-color:var(--tblr-indigo-bg-subtle);--tblr-list-group-active-bg:var(--tblr-indigo-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-indigo-text-emphasis)}.list-group-item-purple{--tblr-list-group-color:var(--tblr-purple-text-emphasis);--tblr-list-group-bg:var(--tblr-purple-bg-subtle);--tblr-list-group-border-color:var(--tblr-purple-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-purple-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-purple-border-subtle);--tblr-list-group-active-color:var(--tblr-purple-bg-subtle);--tblr-list-group-active-bg:var(--tblr-purple-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-purple-text-emphasis)}.list-group-item-pink{--tblr-list-group-color:var(--tblr-pink-text-emphasis);--tblr-list-group-bg:var(--tblr-pink-bg-subtle);--tblr-list-group-border-color:var(--tblr-pink-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-pink-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-pink-border-subtle);--tblr-list-group-active-color:var(--tblr-pink-bg-subtle);--tblr-list-group-active-bg:var(--tblr-pink-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-pink-text-emphasis)}.list-group-item-red{--tblr-list-group-color:var(--tblr-red-text-emphasis);--tblr-list-group-bg:var(--tblr-red-bg-subtle);--tblr-list-group-border-color:var(--tblr-red-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-red-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-red-border-subtle);--tblr-list-group-active-color:var(--tblr-red-bg-subtle);--tblr-list-group-active-bg:var(--tblr-red-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-red-text-emphasis)}.list-group-item-orange{--tblr-list-group-color:var(--tblr-orange-text-emphasis);--tblr-list-group-bg:var(--tblr-orange-bg-subtle);--tblr-list-group-border-color:var(--tblr-orange-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-orange-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-orange-border-subtle);--tblr-list-group-active-color:var(--tblr-orange-bg-subtle);--tblr-list-group-active-bg:var(--tblr-orange-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-orange-text-emphasis)}.list-group-item-yellow{--tblr-list-group-color:var(--tblr-yellow-text-emphasis);--tblr-list-group-bg:var(--tblr-yellow-bg-subtle);--tblr-list-group-border-color:var(--tblr-yellow-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-yellow-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-yellow-border-subtle);--tblr-list-group-active-color:var(--tblr-yellow-bg-subtle);--tblr-list-group-active-bg:var(--tblr-yellow-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-yellow-text-emphasis)}.list-group-item-lime{--tblr-list-group-color:var(--tblr-lime-text-emphasis);--tblr-list-group-bg:var(--tblr-lime-bg-subtle);--tblr-list-group-border-color:var(--tblr-lime-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-lime-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-lime-border-subtle);--tblr-list-group-active-color:var(--tblr-lime-bg-subtle);--tblr-list-group-active-bg:var(--tblr-lime-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-lime-text-emphasis)}.list-group-item-green{--tblr-list-group-color:var(--tblr-green-text-emphasis);--tblr-list-group-bg:var(--tblr-green-bg-subtle);--tblr-list-group-border-color:var(--tblr-green-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-green-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-green-border-subtle);--tblr-list-group-active-color:var(--tblr-green-bg-subtle);--tblr-list-group-active-bg:var(--tblr-green-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-green-text-emphasis)}.list-group-item-teal{--tblr-list-group-color:var(--tblr-teal-text-emphasis);--tblr-list-group-bg:var(--tblr-teal-bg-subtle);--tblr-list-group-border-color:var(--tblr-teal-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-teal-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-teal-border-subtle);--tblr-list-group-active-color:var(--tblr-teal-bg-subtle);--tblr-list-group-active-bg:var(--tblr-teal-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-teal-text-emphasis)}.list-group-item-cyan{--tblr-list-group-color:var(--tblr-cyan-text-emphasis);--tblr-list-group-bg:var(--tblr-cyan-bg-subtle);--tblr-list-group-border-color:var(--tblr-cyan-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-cyan-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-cyan-border-subtle);--tblr-list-group-active-color:var(--tblr-cyan-bg-subtle);--tblr-list-group-active-bg:var(--tblr-cyan-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-cyan-text-emphasis)}.list-group-item-facebook{--tblr-list-group-color:var(--tblr-facebook-text-emphasis);--tblr-list-group-bg:var(--tblr-facebook-bg-subtle);--tblr-list-group-border-color:var(--tblr-facebook-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-facebook-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-facebook-border-subtle);--tblr-list-group-active-color:var(--tblr-facebook-bg-subtle);--tblr-list-group-active-bg:var(--tblr-facebook-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-facebook-text-emphasis)}.list-group-item-twitter{--tblr-list-group-color:var(--tblr-twitter-text-emphasis);--tblr-list-group-bg:var(--tblr-twitter-bg-subtle);--tblr-list-group-border-color:var(--tblr-twitter-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-twitter-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-twitter-border-subtle);--tblr-list-group-active-color:var(--tblr-twitter-bg-subtle);--tblr-list-group-active-bg:var(--tblr-twitter-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-twitter-text-emphasis)}.list-group-item-linkedin{--tblr-list-group-color:var(--tblr-linkedin-text-emphasis);--tblr-list-group-bg:var(--tblr-linkedin-bg-subtle);--tblr-list-group-border-color:var(--tblr-linkedin-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-linkedin-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-linkedin-border-subtle);--tblr-list-group-active-color:var(--tblr-linkedin-bg-subtle);--tblr-list-group-active-bg:var(--tblr-linkedin-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-linkedin-text-emphasis)}.list-group-item-google{--tblr-list-group-color:var(--tblr-google-text-emphasis);--tblr-list-group-bg:var(--tblr-google-bg-subtle);--tblr-list-group-border-color:var(--tblr-google-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-google-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-google-border-subtle);--tblr-list-group-active-color:var(--tblr-google-bg-subtle);--tblr-list-group-active-bg:var(--tblr-google-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-google-text-emphasis)}.list-group-item-youtube{--tblr-list-group-color:var(--tblr-youtube-text-emphasis);--tblr-list-group-bg:var(--tblr-youtube-bg-subtle);--tblr-list-group-border-color:var(--tblr-youtube-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-youtube-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-youtube-border-subtle);--tblr-list-group-active-color:var(--tblr-youtube-bg-subtle);--tblr-list-group-active-bg:var(--tblr-youtube-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-youtube-text-emphasis)}.list-group-item-vimeo{--tblr-list-group-color:var(--tblr-vimeo-text-emphasis);--tblr-list-group-bg:var(--tblr-vimeo-bg-subtle);--tblr-list-group-border-color:var(--tblr-vimeo-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-vimeo-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-vimeo-border-subtle);--tblr-list-group-active-color:var(--tblr-vimeo-bg-subtle);--tblr-list-group-active-bg:var(--tblr-vimeo-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-vimeo-text-emphasis)}.list-group-item-dribbble{--tblr-list-group-color:var(--tblr-dribbble-text-emphasis);--tblr-list-group-bg:var(--tblr-dribbble-bg-subtle);--tblr-list-group-border-color:var(--tblr-dribbble-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-dribbble-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-dribbble-border-subtle);--tblr-list-group-active-color:var(--tblr-dribbble-bg-subtle);--tblr-list-group-active-bg:var(--tblr-dribbble-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-dribbble-text-emphasis)}.list-group-item-github{--tblr-list-group-color:var(--tblr-github-text-emphasis);--tblr-list-group-bg:var(--tblr-github-bg-subtle);--tblr-list-group-border-color:var(--tblr-github-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-github-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-github-border-subtle);--tblr-list-group-active-color:var(--tblr-github-bg-subtle);--tblr-list-group-active-bg:var(--tblr-github-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-github-text-emphasis)}.list-group-item-instagram{--tblr-list-group-color:var(--tblr-instagram-text-emphasis);--tblr-list-group-bg:var(--tblr-instagram-bg-subtle);--tblr-list-group-border-color:var(--tblr-instagram-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-instagram-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-instagram-border-subtle);--tblr-list-group-active-color:var(--tblr-instagram-bg-subtle);--tblr-list-group-active-bg:var(--tblr-instagram-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-instagram-text-emphasis)}.list-group-item-pinterest{--tblr-list-group-color:var(--tblr-pinterest-text-emphasis);--tblr-list-group-bg:var(--tblr-pinterest-bg-subtle);--tblr-list-group-border-color:var(--tblr-pinterest-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-pinterest-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-pinterest-border-subtle);--tblr-list-group-active-color:var(--tblr-pinterest-bg-subtle);--tblr-list-group-active-bg:var(--tblr-pinterest-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-pinterest-text-emphasis)}.list-group-item-vk{--tblr-list-group-color:var(--tblr-vk-text-emphasis);--tblr-list-group-bg:var(--tblr-vk-bg-subtle);--tblr-list-group-border-color:var(--tblr-vk-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-vk-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-vk-border-subtle);--tblr-list-group-active-color:var(--tblr-vk-bg-subtle);--tblr-list-group-active-bg:var(--tblr-vk-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-vk-text-emphasis)}.list-group-item-rss{--tblr-list-group-color:var(--tblr-rss-text-emphasis);--tblr-list-group-bg:var(--tblr-rss-bg-subtle);--tblr-list-group-border-color:var(--tblr-rss-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-rss-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-rss-border-subtle);--tblr-list-group-active-color:var(--tblr-rss-bg-subtle);--tblr-list-group-active-bg:var(--tblr-rss-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-rss-text-emphasis)}.list-group-item-flickr{--tblr-list-group-color:var(--tblr-flickr-text-emphasis);--tblr-list-group-bg:var(--tblr-flickr-bg-subtle);--tblr-list-group-border-color:var(--tblr-flickr-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-flickr-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-flickr-border-subtle);--tblr-list-group-active-color:var(--tblr-flickr-bg-subtle);--tblr-list-group-active-bg:var(--tblr-flickr-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-flickr-text-emphasis)}.list-group-item-bitbucket{--tblr-list-group-color:var(--tblr-bitbucket-text-emphasis);--tblr-list-group-bg:var(--tblr-bitbucket-bg-subtle);--tblr-list-group-border-color:var(--tblr-bitbucket-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-bitbucket-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-bitbucket-border-subtle);--tblr-list-group-active-color:var(--tblr-bitbucket-bg-subtle);--tblr-list-group-active-bg:var(--tblr-bitbucket-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-bitbucket-text-emphasis)}.list-group-item-tabler{--tblr-list-group-color:var(--tblr-tabler-text-emphasis);--tblr-list-group-bg:var(--tblr-tabler-bg-subtle);--tblr-list-group-border-color:var(--tblr-tabler-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-tabler-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-tabler-border-subtle);--tblr-list-group-active-color:var(--tblr-tabler-bg-subtle);--tblr-list-group-active-bg:var(--tblr-tabler-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-tabler-text-emphasis)}.btn-close{--tblr-btn-close-color:#000000;--tblr-btn-close-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000000'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/%3e%3c/svg%3e");--tblr-btn-close-opacity:.3;--tblr-btn-close-hover-opacity:.75;--tblr-btn-close-focus-shadow:0 0 0 .25rem rgba(32, 107, 196, .25);--tblr-btn-close-focus-opacity:1;--tblr-btn-close-disabled-opacity:.25;--tblr-btn-close-white-filter:invert(1) grayscale(100%) brightness(200%);box-sizing:content-box;width:.75rem;height:.75rem;padding:.25em;color:var(--tblr-btn-close-color);background:transparent var(--tblr-btn-close-bg) center/.75rem auto no-repeat;border:0;border-radius:4px;opacity:var(--tblr-btn-close-opacity)}.btn-close:hover{color:var(--tblr-btn-close-color);text-decoration:none;opacity:var(--tblr-btn-close-hover-opacity)}.btn-close:focus{outline:0;box-shadow:var(--tblr-btn-close-focus-shadow);opacity:var(--tblr-btn-close-focus-opacity)}.btn-close.disabled,.btn-close:disabled{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;opacity:var(--tblr-btn-close-disabled-opacity)}.btn-close-white,[data-bs-theme=dark] .btn-close{filter:var(--tblr-btn-close-white-filter)}.toast{--tblr-toast-zindex:1090;--tblr-toast-padding-x:.75rem;--tblr-toast-padding-y:.5rem;--tblr-toast-spacing:calc(var(--tblr-page-padding) * 2);--tblr-toast-max-width:350px;--tblr-toast-font-size:.875rem;--tblr-toast-bg:rgba(var(--tblr-body-bg-rgb), .85);--tblr-toast-border-width:var(--tblr-border-width);--tblr-toast-border-color:var(--tblr-border-color);--tblr-toast-border-radius:var(--tblr-border-radius);--tblr-toast-box-shadow:var(--tblr-box-shadow);--tblr-toast-header-color:var(--tblr-muted);--tblr-toast-header-bg:rgba(var(--tblr-body-bg-rgb), .85);--tblr-toast-header-border-color:var(--tblr-border-color);width:var(--tblr-toast-max-width);max-width:100%;font-size:var(--tblr-toast-font-size);color:var(--tblr-toast-color);pointer-events:auto;background-color:var(--tblr-toast-bg);background-clip:padding-box;border:var(--tblr-toast-border-width) solid var(--tblr-toast-border-color);box-shadow:var(--tblr-toast-box-shadow);border-radius:var(--tblr-toast-border-radius)}.toast.showing{opacity:0}.toast:not(.show){display:none}.toast-container{--tblr-toast-zindex:1090;position:absolute;z-index:var(--tblr-toast-zindex);width:-webkit-max-content;width:-moz-max-content;width:max-content;max-width:100%;pointer-events:none}.toast-container>:not(:last-child){margin-bottom:var(--tblr-toast-spacing)}.toast-header{display:flex;align-items:center;padding:var(--tblr-toast-padding-y) var(--tblr-toast-padding-x);color:var(--tblr-toast-header-color);background-color:var(--tblr-toast-header-bg);background-clip:padding-box;border-bottom:var(--tblr-toast-border-width) solid var(--tblr-toast-header-border-color);border-top-left-radius:calc(var(--tblr-toast-border-radius) - var(--tblr-toast-border-width));border-top-right-radius:calc(var(--tblr-toast-border-radius) - var(--tblr-toast-border-width))}.toast-header .btn-close{margin-right:calc(-.5 * var(--tblr-toast-padding-x));margin-left:var(--tblr-toast-padding-x)}.toast-body{padding:var(--tblr-toast-padding-x);word-wrap:break-word}.modal{--tblr-modal-zindex:1055;--tblr-modal-width:540px;--tblr-modal-padding:1.5rem;--tblr-modal-margin:.5rem;--tblr-modal-bg:var(--tblr-bg-surface);--tblr-modal-border-color:transparent;--tblr-modal-border-width:var(--tblr-border-width);--tblr-modal-border-radius:var(--tblr-border-radius-lg);--tblr-modal-box-shadow:0 .125rem .25rem rgba(0, 0, 0, .075);--tblr-modal-inner-border-radius:calc(var(--tblr-modal-border-radius) - 1px);--tblr-modal-header-padding-x:1.5rem;--tblr-modal-header-padding-y:1.5rem;--tblr-modal-header-padding:1.5rem;--tblr-modal-header-border-color:var(--tblr-border-color);--tblr-modal-header-border-width:var(--tblr-border-width);--tblr-modal-title-line-height:1.4285714286;--tblr-modal-footer-gap:.75rem;--tblr-modal-footer-bg:var(--tblr-bg-surface-tertiary);--tblr-modal-footer-border-color:var(--tblr-border-color);--tblr-modal-footer-border-width:var(--tblr-border-width);position:fixed;top:0;left:0;z-index:var(--tblr-modal-zindex);display:none;width:100%;height:100%;overflow-x:hidden;overflow-y:auto;outline:0}.modal-dialog{position:relative;width:auto;margin:var(--tblr-modal-margin);pointer-events:none}.modal.fade .modal-dialog{transition:transform .3s ease-out;transform:translateY(-1rem)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{height:calc(100% - var(--tblr-modal-margin) * 2)}.modal-dialog-scrollable .modal-content{max-height:100%;overflow:hidden}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - var(--tblr-modal-margin) * 2)}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;color:var(--tblr-modal-color);pointer-events:auto;background-color:var(--tblr-modal-bg);background-clip:padding-box;border:var(--tblr-modal-border-width) solid var(--tblr-modal-border-color);border-radius:var(--tblr-modal-border-radius);box-shadow:var(--tblr-modal-box-shadow);outline:0}.modal-backdrop{--tblr-backdrop-zindex:1050;--tblr-backdrop-bg:#182433;--tblr-backdrop-opacity:.24;position:fixed;top:0;left:0;z-index:var(--tblr-backdrop-zindex);width:100vw;height:100vh;background-color:var(--tblr-backdrop-bg)}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:var(--tblr-backdrop-opacity)}.modal-header{display:flex;flex-shrink:0;align-items:center;justify-content:space-between;padding:var(--tblr-modal-header-padding);border-bottom:var(--tblr-modal-header-border-width) solid var(--tblr-modal-header-border-color);border-top-left-radius:var(--tblr-modal-inner-border-radius);border-top-right-radius:var(--tblr-modal-inner-border-radius)}.modal-header .btn-close{padding:calc(var(--tblr-modal-header-padding-y) * .5) calc(var(--tblr-modal-header-padding-x) * .5);margin:calc(-.5 * var(--tblr-modal-header-padding-y)) calc(-.5 * var(--tblr-modal-header-padding-x)) calc(-.5 * var(--tblr-modal-header-padding-y)) auto}.modal-title{margin-bottom:0;line-height:var(--tblr-modal-title-line-height)}.modal-body{position:relative;flex:1 1 auto;padding:var(--tblr-modal-padding)}.modal-footer{display:flex;flex-shrink:0;flex-wrap:wrap;align-items:center;justify-content:flex-end;padding:calc(var(--tblr-modal-padding) - var(--tblr-modal-footer-gap) * .5);background-color:var(--tblr-modal-footer-bg);border-top:var(--tblr-modal-footer-border-width) solid var(--tblr-modal-footer-border-color);border-bottom-right-radius:var(--tblr-modal-inner-border-radius);border-bottom-left-radius:var(--tblr-modal-inner-border-radius)}.modal-footer>*{margin:calc(var(--tblr-modal-footer-gap) * .5)}@media (min-width:576px){.modal{--tblr-modal-margin:1.75rem;--tblr-modal-box-shadow:0 .5rem 1rem rgba(0, 0, 0, .15)}.modal-dialog{max-width:var(--tblr-modal-width);margin-right:auto;margin-left:auto}.modal-sm{--tblr-modal-width:380px}}@media (min-width:992px){.modal-lg,.modal-xl{--tblr-modal-width:720px}}@media (min-width:1200px){.modal-xl{--tblr-modal-width:1140px}}.modal-fullscreen{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen .modal-footer,.modal-fullscreen .modal-header{border-radius:0}.modal-fullscreen .modal-body{overflow-y:auto}@media (max-width:575.98px){.modal-fullscreen-sm-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-sm-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-sm-down .modal-footer,.modal-fullscreen-sm-down .modal-header{border-radius:0}.modal-fullscreen-sm-down .modal-body{overflow-y:auto}}@media (max-width:767.98px){.modal-fullscreen-md-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-md-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-md-down .modal-footer,.modal-fullscreen-md-down .modal-header{border-radius:0}.modal-fullscreen-md-down .modal-body{overflow-y:auto}}@media (max-width:991.98px){.modal-fullscreen-lg-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-lg-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-lg-down .modal-footer,.modal-fullscreen-lg-down .modal-header{border-radius:0}.modal-fullscreen-lg-down .modal-body{overflow-y:auto}}@media (max-width:1199.98px){.modal-fullscreen-xl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xl-down .modal-footer,.modal-fullscreen-xl-down .modal-header{border-radius:0}.modal-fullscreen-xl-down .modal-body{overflow-y:auto}}@media (max-width:1399.98px){.modal-fullscreen-xxl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xxl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xxl-down .modal-footer,.modal-fullscreen-xxl-down .modal-header{border-radius:0}.modal-fullscreen-xxl-down .modal-body{overflow-y:auto}}.tooltip{--tblr-tooltip-zindex:1080;--tblr-tooltip-max-width:200px;--tblr-tooltip-padding-x:var(--tblr-spacer-2);--tblr-tooltip-padding-y:var(--tblr-spacer-2);--tblr-tooltip-font-size:.765625rem;--tblr-tooltip-color:var(--tblr-light);--tblr-tooltip-bg:var(--tblr-bg-surface-dark);--tblr-tooltip-border-radius:var(--tblr-border-radius);--tblr-tooltip-opacity:.9;--tblr-tooltip-arrow-width:.8rem;--tblr-tooltip-arrow-height:.4rem;z-index:var(--tblr-tooltip-zindex);display:block;margin:var(--tblr-tooltip-margin);font-family:var(--tblr-font-sans-serif);font-style:normal;font-weight:400;line-height:1.4285714286;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;white-space:normal;word-spacing:normal;line-break:auto;font-size:var(--tblr-tooltip-font-size);word-wrap:break-word;opacity:0}.tooltip.show{opacity:var(--tblr-tooltip-opacity)}.tooltip .tooltip-arrow{display:block;width:var(--tblr-tooltip-arrow-width);height:var(--tblr-tooltip-arrow-height)}.tooltip .tooltip-arrow:before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow,.bs-tooltip-top .tooltip-arrow{bottom:calc(-1 * var(--tblr-tooltip-arrow-height))}.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow:before,.bs-tooltip-top .tooltip-arrow:before{top:-1px;border-width:var(--tblr-tooltip-arrow-height) calc(var(--tblr-tooltip-arrow-width) * .5) 0;border-top-color:var(--tblr-tooltip-bg)}.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow,.bs-tooltip-end .tooltip-arrow{left:calc(-1 * var(--tblr-tooltip-arrow-height));width:var(--tblr-tooltip-arrow-height);height:var(--tblr-tooltip-arrow-width)}.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow:before,.bs-tooltip-end .tooltip-arrow:before{right:-1px;border-width:calc(var(--tblr-tooltip-arrow-width) * .5) var(--tblr-tooltip-arrow-height) calc(var(--tblr-tooltip-arrow-width) * .5) 0;border-right-color:var(--tblr-tooltip-bg)}.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow,.bs-tooltip-bottom .tooltip-arrow{top:calc(-1 * var(--tblr-tooltip-arrow-height))}.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow:before,.bs-tooltip-bottom .tooltip-arrow:before{bottom:-1px;border-width:0 calc(var(--tblr-tooltip-arrow-width) * .5) var(--tblr-tooltip-arrow-height);border-bottom-color:var(--tblr-tooltip-bg)}.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow,.bs-tooltip-start .tooltip-arrow{right:calc(-1 * var(--tblr-tooltip-arrow-height));width:var(--tblr-tooltip-arrow-height);height:var(--tblr-tooltip-arrow-width)}.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow:before,.bs-tooltip-start .tooltip-arrow:before{left:-1px;border-width:calc(var(--tblr-tooltip-arrow-width) * .5) 0 calc(var(--tblr-tooltip-arrow-width) * .5) var(--tblr-tooltip-arrow-height);border-left-color:var(--tblr-tooltip-bg)}.tooltip-inner{max-width:var(--tblr-tooltip-max-width);padding:var(--tblr-tooltip-padding-y) var(--tblr-tooltip-padding-x);color:var(--tblr-tooltip-color);text-align:center;background-color:var(--tblr-tooltip-bg);border-radius:var(--tblr-tooltip-border-radius)}.popover{--tblr-popover-zindex:1070;--tblr-popover-max-width:276px;--tblr-popover-font-size:.765625rem;--tblr-popover-bg:var(--tblr-bg-surface);--tblr-popover-border-width:var(--tblr-border-width);--tblr-popover-border-color:var(--tblr-border-color);--tblr-popover-border-radius:var(--tblr-border-radius-lg);--tblr-popover-inner-border-radius:calc(var(--tblr-border-radius-lg) - var(--tblr-border-width));--tblr-popover-box-shadow:0 .5rem 1rem rgba(0, 0, 0, .15);--tblr-popover-header-padding-x:1rem;--tblr-popover-header-padding-y:.5rem;--tblr-popover-header-font-size:.875rem;--tblr-popover-header-bg:transparent;--tblr-popover-body-padding-x:1rem;--tblr-popover-body-padding-y:1rem;--tblr-popover-body-color:inherit;--tblr-popover-arrow-width:1rem;--tblr-popover-arrow-height:.5rem;--tblr-popover-arrow-border:var(--tblr-popover-border-color);z-index:var(--tblr-popover-zindex);display:block;max-width:var(--tblr-popover-max-width);font-family:var(--tblr-font-sans-serif);font-style:normal;font-weight:400;line-height:1.4285714286;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;white-space:normal;word-spacing:normal;line-break:auto;font-size:var(--tblr-popover-font-size);word-wrap:break-word;background-color:var(--tblr-popover-bg);background-clip:padding-box;border:var(--tblr-popover-border-width) solid var(--tblr-popover-border-color);border-radius:var(--tblr-popover-border-radius);box-shadow:var(--tblr-popover-box-shadow)}.popover .popover-arrow{display:block;width:var(--tblr-popover-arrow-width);height:var(--tblr-popover-arrow-height)}.popover .popover-arrow:after,.popover .popover-arrow:before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid;border-width:0}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow,.bs-popover-top>.popover-arrow{bottom:calc(-1 * (var(--tblr-popover-arrow-height)) - var(--tblr-popover-border-width))}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow:after,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow:before,.bs-popover-top>.popover-arrow:after,.bs-popover-top>.popover-arrow:before{border-width:var(--tblr-popover-arrow-height) calc(var(--tblr-popover-arrow-width) * .5) 0}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow:before,.bs-popover-top>.popover-arrow:before{bottom:0;border-top-color:var(--tblr-popover-arrow-border)}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow:after,.bs-popover-top>.popover-arrow:after{bottom:var(--tblr-popover-border-width);border-top-color:var(--tblr-popover-bg)}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow,.bs-popover-end>.popover-arrow{left:calc(-1 * (var(--tblr-popover-arrow-height)) - var(--tblr-popover-border-width));width:var(--tblr-popover-arrow-height);height:var(--tblr-popover-arrow-width)}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow:after,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow:before,.bs-popover-end>.popover-arrow:after,.bs-popover-end>.popover-arrow:before{border-width:calc(var(--tblr-popover-arrow-width) * .5) var(--tblr-popover-arrow-height) calc(var(--tblr-popover-arrow-width) * .5) 0}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow:before,.bs-popover-end>.popover-arrow:before{left:0;border-right-color:var(--tblr-popover-arrow-border)}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow:after,.bs-popover-end>.popover-arrow:after{left:var(--tblr-popover-border-width);border-right-color:var(--tblr-popover-bg)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow,.bs-popover-bottom>.popover-arrow{top:calc(-1 * (var(--tblr-popover-arrow-height)) - var(--tblr-popover-border-width))}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow:after,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow:before,.bs-popover-bottom>.popover-arrow:after,.bs-popover-bottom>.popover-arrow:before{border-width:0 calc(var(--tblr-popover-arrow-width) * .5) var(--tblr-popover-arrow-height)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow:before,.bs-popover-bottom>.popover-arrow:before{top:0;border-bottom-color:var(--tblr-popover-arrow-border)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow:after,.bs-popover-bottom>.popover-arrow:after{top:var(--tblr-popover-border-width);border-bottom-color:var(--tblr-popover-bg)}.bs-popover-auto[data-popper-placement^=bottom] .popover-header:before,.bs-popover-bottom .popover-header:before{position:absolute;top:0;left:50%;display:block;width:var(--tblr-popover-arrow-width);margin-left:calc(-.5 * var(--tblr-popover-arrow-width));content:"";border-bottom:var(--tblr-popover-border-width) solid var(--tblr-popover-header-bg)}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow,.bs-popover-start>.popover-arrow{right:calc(-1 * (var(--tblr-popover-arrow-height)) - var(--tblr-popover-border-width));width:var(--tblr-popover-arrow-height);height:var(--tblr-popover-arrow-width)}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow:after,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow:before,.bs-popover-start>.popover-arrow:after,.bs-popover-start>.popover-arrow:before{border-width:calc(var(--tblr-popover-arrow-width) * .5) 0 calc(var(--tblr-popover-arrow-width) * .5) var(--tblr-popover-arrow-height)}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow:before,.bs-popover-start>.popover-arrow:before{right:0;border-left-color:var(--tblr-popover-arrow-border)}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow:after,.bs-popover-start>.popover-arrow:after{right:var(--tblr-popover-border-width);border-left-color:var(--tblr-popover-bg)}.popover-header{padding:var(--tblr-popover-header-padding-y) var(--tblr-popover-header-padding-x);margin-bottom:0;font-size:var(--tblr-popover-header-font-size);color:var(--tblr-popover-header-color);background-color:var(--tblr-popover-header-bg);border-bottom:var(--tblr-popover-border-width) solid var(--tblr-popover-border-color);border-top-left-radius:var(--tblr-popover-inner-border-radius);border-top-right-radius:var(--tblr-popover-inner-border-radius)}.popover-header:empty{display:none}.popover-body{padding:var(--tblr-popover-body-padding-y) var(--tblr-popover-body-padding-x);color:var(--tblr-popover-body-color)}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner:after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-end,.carousel-item-next:not(.carousel-item-start){transform:translate(100%)}.active.carousel-item-start,.carousel-item-prev:not(.carousel-item-end){transform:translate(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}.carousel-fade .carousel-item-next.carousel-item-start,.carousel-fade .carousel-item-prev.carousel-item-end,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start{transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;width:15%;padding:0;color:#fff;text-align:center;background:0 0;border:0;opacity:.5;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:1.5rem;height:1.5rem;background-repeat:no-repeat;background-position:50%;background-size:100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23ffffff' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3e%3cpolyline points='15 18 9 12 15 6'%3e%3c/polyline%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23ffffff' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3e%3cpolyline points='9 18 15 12 9 6'%3e%3c/polyline%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:2;display:flex;justify-content:center;padding:0;margin-right:15%;margin-bottom:1rem;margin-left:15%}.carousel-indicators [data-bs-target]{box-sizing:content-box;flex:0 1 auto;width:30px;height:3px;padding:0;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border:0;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators [data-bs-target]{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:1.25rem;left:15%;padding-top:1.25rem;padding-bottom:1.25rem;color:#fff;text-align:center}.carousel-dark .carousel-control-next-icon,.carousel-dark .carousel-control-prev-icon{filter:invert(1) grayscale(100)}.carousel-dark .carousel-indicators [data-bs-target]{background-color:#000}.carousel-dark .carousel-caption{color:#000}[data-bs-theme=dark] .carousel .carousel-control-next-icon,[data-bs-theme=dark] .carousel .carousel-control-prev-icon,[data-bs-theme=dark].carousel .carousel-control-next-icon,[data-bs-theme=dark].carousel .carousel-control-prev-icon{filter:invert(1) grayscale(100)}[data-bs-theme=dark] .carousel .carousel-indicators [data-bs-target],[data-bs-theme=dark].carousel .carousel-indicators [data-bs-target]{background-color:#000}[data-bs-theme=dark] .carousel .carousel-caption,[data-bs-theme=dark].carousel .carousel-caption{color:#000}.spinner-border,.spinner-grow{display:inline-block;width:var(--tblr-spinner-width);height:var(--tblr-spinner-height);vertical-align:var(--tblr-spinner-vertical-align);border-radius:50%;animation:var(--tblr-spinner-animation-speed) linear infinite var(--tblr-spinner-animation-name)}@keyframes spinner-border{to{transform:rotate(360deg)}}.spinner-border{--tblr-spinner-width:1.5rem;--tblr-spinner-height:1.5rem;--tblr-spinner-vertical-align:-.125em;--tblr-spinner-border-width:2px;--tblr-spinner-animation-speed:.75s;--tblr-spinner-animation-name:spinner-border;border:var(--tblr-spinner-border-width) solid currentcolor;border-right-color:transparent}.spinner-border-sm{--tblr-spinner-width:1rem;--tblr-spinner-height:1rem;--tblr-spinner-border-width:1px}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.spinner-grow{--tblr-spinner-width:1.5rem;--tblr-spinner-height:1.5rem;--tblr-spinner-vertical-align:-.125em;--tblr-spinner-animation-speed:.75s;--tblr-spinner-animation-name:spinner-grow;background-color:currentcolor;opacity:0}.spinner-grow-sm{--tblr-spinner-width:1rem;--tblr-spinner-height:1rem}@media (prefers-reduced-motion:reduce){.spinner-border,.spinner-grow{--tblr-spinner-animation-speed:1.5s}}.offcanvas,.offcanvas-lg,.offcanvas-md,.offcanvas-sm,.offcanvas-xl,.offcanvas-xxl{--tblr-offcanvas-zindex:1045;--tblr-offcanvas-width:400px;--tblr-offcanvas-height:30vh;--tblr-offcanvas-padding-x:1.5rem;--tblr-offcanvas-padding-y:1.5rem;--tblr-offcanvas-color:var(--tblr-body-color);--tblr-offcanvas-bg:var(--tblr-bg-surface);--tblr-offcanvas-border-width:var(--tblr-border-width);--tblr-offcanvas-border-color:var(--tblr-border-color);--tblr-offcanvas-box-shadow:0 .125rem .25rem rgba(0, 0, 0, .075);--tblr-offcanvas-transition:transform .3s ease-in-out;--tblr-offcanvas-title-line-height:1.4285714286}@media (max-width:575.98px){.offcanvas-sm{position:fixed;bottom:0;z-index:var(--tblr-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--tblr-offcanvas-color);visibility:hidden;background-color:var(--tblr-offcanvas-bg);background-clip:padding-box;outline:0;box-shadow:var(--tblr-offcanvas-box-shadow);transition:var(--tblr-offcanvas-transition)}}@media (max-width:575.98px) and (prefers-reduced-motion:reduce){.offcanvas-sm{transition:none}}@media (max-width:575.98px){.offcanvas-sm.offcanvas-start{top:0;left:0;width:var(--tblr-offcanvas-width);border-right:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);transform:translate(-100%)}.offcanvas-sm.offcanvas-end{top:0;right:0;width:var(--tblr-offcanvas-width);border-left:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);transform:translate(100%)}.offcanvas-sm.offcanvas-top{top:0;right:0;left:0;height:var(--tblr-offcanvas-height);max-height:100%;border-bottom:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-sm.offcanvas-bottom{right:0;left:0;height:var(--tblr-offcanvas-height);max-height:100%;border-top:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);transform:translateY(100%)}.offcanvas-sm.show:not(.hiding),.offcanvas-sm.showing{transform:none}.offcanvas-sm.hiding,.offcanvas-sm.show,.offcanvas-sm.showing{visibility:visible}}@media (min-width:576px){.offcanvas-sm{--tblr-offcanvas-height:auto;--tblr-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-sm .offcanvas-header{display:none}.offcanvas-sm .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent!important}}@media (max-width:767.98px){.offcanvas-md{position:fixed;bottom:0;z-index:var(--tblr-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--tblr-offcanvas-color);visibility:hidden;background-color:var(--tblr-offcanvas-bg);background-clip:padding-box;outline:0;box-shadow:var(--tblr-offcanvas-box-shadow);transition:var(--tblr-offcanvas-transition)}}@media (max-width:767.98px) and (prefers-reduced-motion:reduce){.offcanvas-md{transition:none}}@media (max-width:767.98px){.offcanvas-md.offcanvas-start{top:0;left:0;width:var(--tblr-offcanvas-width);border-right:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);transform:translate(-100%)}.offcanvas-md.offcanvas-end{top:0;right:0;width:var(--tblr-offcanvas-width);border-left:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);transform:translate(100%)}.offcanvas-md.offcanvas-top{top:0;right:0;left:0;height:var(--tblr-offcanvas-height);max-height:100%;border-bottom:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-md.offcanvas-bottom{right:0;left:0;height:var(--tblr-offcanvas-height);max-height:100%;border-top:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);transform:translateY(100%)}.offcanvas-md.show:not(.hiding),.offcanvas-md.showing{transform:none}.offcanvas-md.hiding,.offcanvas-md.show,.offcanvas-md.showing{visibility:visible}}@media (min-width:768px){.offcanvas-md{--tblr-offcanvas-height:auto;--tblr-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-md .offcanvas-header{display:none}.offcanvas-md .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent!important}}@media (max-width:991.98px){.offcanvas-lg{position:fixed;bottom:0;z-index:var(--tblr-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--tblr-offcanvas-color);visibility:hidden;background-color:var(--tblr-offcanvas-bg);background-clip:padding-box;outline:0;box-shadow:var(--tblr-offcanvas-box-shadow);transition:var(--tblr-offcanvas-transition)}}@media (max-width:991.98px) and (prefers-reduced-motion:reduce){.offcanvas-lg{transition:none}}@media (max-width:991.98px){.offcanvas-lg.offcanvas-start{top:0;left:0;width:var(--tblr-offcanvas-width);border-right:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);transform:translate(-100%)}.offcanvas-lg.offcanvas-end{top:0;right:0;width:var(--tblr-offcanvas-width);border-left:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);transform:translate(100%)}.offcanvas-lg.offcanvas-top{top:0;right:0;left:0;height:var(--tblr-offcanvas-height);max-height:100%;border-bottom:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-lg.offcanvas-bottom{right:0;left:0;height:var(--tblr-offcanvas-height);max-height:100%;border-top:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);transform:translateY(100%)}.offcanvas-lg.show:not(.hiding),.offcanvas-lg.showing{transform:none}.offcanvas-lg.hiding,.offcanvas-lg.show,.offcanvas-lg.showing{visibility:visible}}@media (min-width:992px){.offcanvas-lg{--tblr-offcanvas-height:auto;--tblr-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-lg .offcanvas-header{display:none}.offcanvas-lg .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent!important}}@media (max-width:1199.98px){.offcanvas-xl{position:fixed;bottom:0;z-index:var(--tblr-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--tblr-offcanvas-color);visibility:hidden;background-color:var(--tblr-offcanvas-bg);background-clip:padding-box;outline:0;box-shadow:var(--tblr-offcanvas-box-shadow);transition:var(--tblr-offcanvas-transition)}}@media (max-width:1199.98px) and (prefers-reduced-motion:reduce){.offcanvas-xl{transition:none}}@media (max-width:1199.98px){.offcanvas-xl.offcanvas-start{top:0;left:0;width:var(--tblr-offcanvas-width);border-right:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);transform:translate(-100%)}.offcanvas-xl.offcanvas-end{top:0;right:0;width:var(--tblr-offcanvas-width);border-left:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);transform:translate(100%)}.offcanvas-xl.offcanvas-top{top:0;right:0;left:0;height:var(--tblr-offcanvas-height);max-height:100%;border-bottom:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-xl.offcanvas-bottom{right:0;left:0;height:var(--tblr-offcanvas-height);max-height:100%;border-top:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);transform:translateY(100%)}.offcanvas-xl.show:not(.hiding),.offcanvas-xl.showing{transform:none}.offcanvas-xl.hiding,.offcanvas-xl.show,.offcanvas-xl.showing{visibility:visible}}@media (min-width:1200px){.offcanvas-xl{--tblr-offcanvas-height:auto;--tblr-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-xl .offcanvas-header{display:none}.offcanvas-xl .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent!important}}@media (max-width:1399.98px){.offcanvas-xxl{position:fixed;bottom:0;z-index:var(--tblr-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--tblr-offcanvas-color);visibility:hidden;background-color:var(--tblr-offcanvas-bg);background-clip:padding-box;outline:0;box-shadow:var(--tblr-offcanvas-box-shadow);transition:var(--tblr-offcanvas-transition)}}@media (max-width:1399.98px) and (prefers-reduced-motion:reduce){.offcanvas-xxl{transition:none}}@media (max-width:1399.98px){.offcanvas-xxl.offcanvas-start{top:0;left:0;width:var(--tblr-offcanvas-width);border-right:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);transform:translate(-100%)}.offcanvas-xxl.offcanvas-end{top:0;right:0;width:var(--tblr-offcanvas-width);border-left:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);transform:translate(100%)}.offcanvas-xxl.offcanvas-top{top:0;right:0;left:0;height:var(--tblr-offcanvas-height);max-height:100%;border-bottom:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-xxl.offcanvas-bottom{right:0;left:0;height:var(--tblr-offcanvas-height);max-height:100%;border-top:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);transform:translateY(100%)}.offcanvas-xxl.show:not(.hiding),.offcanvas-xxl.showing{transform:none}.offcanvas-xxl.hiding,.offcanvas-xxl.show,.offcanvas-xxl.showing{visibility:visible}}@media (min-width:1400px){.offcanvas-xxl{--tblr-offcanvas-height:auto;--tblr-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-xxl .offcanvas-header{display:none}.offcanvas-xxl .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent!important}}.offcanvas{position:fixed;bottom:0;z-index:var(--tblr-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--tblr-offcanvas-color);visibility:hidden;background-color:var(--tblr-offcanvas-bg);background-clip:padding-box;outline:0;box-shadow:var(--tblr-offcanvas-box-shadow);transition:var(--tblr-offcanvas-transition)}@media (prefers-reduced-motion:reduce){.offcanvas{transition:none}}.offcanvas.offcanvas-start{top:0;left:0;width:var(--tblr-offcanvas-width);border-right:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);transform:translate(-100%)}.offcanvas.offcanvas-end{top:0;right:0;width:var(--tblr-offcanvas-width);border-left:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);transform:translate(100%)}.offcanvas.offcanvas-top{top:0;right:0;left:0;height:var(--tblr-offcanvas-height);max-height:100%;border-bottom:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);transform:translateY(-100%)}.offcanvas.offcanvas-bottom{right:0;left:0;height:var(--tblr-offcanvas-height);max-height:100%;border-top:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);transform:translateY(100%)}.offcanvas.show:not(.hiding),.offcanvas.showing{transform:none}.offcanvas.hiding,.offcanvas.show,.offcanvas.showing{visibility:visible}.offcanvas-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#182433}.offcanvas-backdrop.fade{opacity:0}.offcanvas-backdrop.show{opacity:.24}.offcanvas-header{display:flex;align-items:center;justify-content:space-between;padding:var(--tblr-offcanvas-padding-y) var(--tblr-offcanvas-padding-x)}.offcanvas-header .btn-close{padding:calc(var(--tblr-offcanvas-padding-y) * .5) calc(var(--tblr-offcanvas-padding-x) * .5);margin-top:calc(-.5 * var(--tblr-offcanvas-padding-y));margin-right:calc(-.5 * var(--tblr-offcanvas-padding-x));margin-bottom:calc(-.5 * var(--tblr-offcanvas-padding-y))}.offcanvas-title{margin-bottom:0;line-height:var(--tblr-offcanvas-title-line-height)}.offcanvas-body{flex-grow:1;padding:var(--tblr-offcanvas-padding-y) var(--tblr-offcanvas-padding-x);overflow-y:auto}.placeholder{display:inline-block;min-height:1em;vertical-align:middle;cursor:wait;background-color:currentcolor;opacity:.2}.placeholder.btn:before{display:inline-block;content:""}.placeholder-xs{min-height:.6em}.placeholder-sm{min-height:.8em}.placeholder-lg{min-height:1.2em}.placeholder-glow .placeholder{animation:placeholder-glow 2s ease-in-out infinite}@keyframes placeholder-glow{50%{opacity:.1}}.placeholder-wave{-webkit-mask-image:linear-gradient(130deg,#000 55%,rgba(0,0,0,.9) 75%,#000 95%);mask-image:linear-gradient(130deg,#000 55%,#000000e6,#000 95%);-webkit-mask-size:200% 100%;mask-size:200% 100%;animation:placeholder-wave 2s linear infinite}@keyframes placeholder-wave{to{-webkit-mask-position:-200% 0;mask-position:-200% 0}}.clearfix:after{display:block;clear:both;content:""}.text-bg-primary{color:#fcfdfe!important;background-color:RGBA(32,107,196,var(--tblr-bg-opacity,1))!important}.text-bg-secondary{color:#fcfdfe!important;background-color:RGBA(102,115,130,var(--tblr-bg-opacity,1))!important}.text-bg-success{color:#fcfdfe!important;background-color:RGBA(47,179,68,var(--tblr-bg-opacity,1))!important}.text-bg-info{color:#fcfdfe!important;background-color:RGBA(66,153,225,var(--tblr-bg-opacity,1))!important}.text-bg-warning{color:#fcfdfe!important;background-color:RGBA(247,103,7,var(--tblr-bg-opacity,1))!important}.text-bg-danger{color:#fcfdfe!important;background-color:RGBA(214,57,57,var(--tblr-bg-opacity,1))!important}.text-bg-light{color:#182433!important;background-color:RGBA(252,253,254,var(--tblr-bg-opacity,1))!important}.text-bg-dark{color:#fcfdfe!important;background-color:RGBA(24,36,51,var(--tblr-bg-opacity,1))!important}.text-bg-muted{color:#fcfdfe!important;background-color:RGBA(102,115,130,var(--tblr-bg-opacity,1))!important}.text-bg-blue{color:#fcfdfe!important;background-color:RGBA(32,107,196,var(--tblr-bg-opacity,1))!important}.text-bg-azure{color:#fcfdfe!important;background-color:RGBA(66,153,225,var(--tblr-bg-opacity,1))!important}.text-bg-indigo{color:#fcfdfe!important;background-color:RGBA(66,99,235,var(--tblr-bg-opacity,1))!important}.text-bg-purple{color:#fcfdfe!important;background-color:RGBA(174,62,201,var(--tblr-bg-opacity,1))!important}.text-bg-pink{color:#fcfdfe!important;background-color:RGBA(214,51,108,var(--tblr-bg-opacity,1))!important}.text-bg-red{color:#fcfdfe!important;background-color:RGBA(214,57,57,var(--tblr-bg-opacity,1))!important}.text-bg-orange{color:#fcfdfe!important;background-color:RGBA(247,103,7,var(--tblr-bg-opacity,1))!important}.text-bg-yellow{color:#fcfdfe!important;background-color:RGBA(245,159,0,var(--tblr-bg-opacity,1))!important}.text-bg-lime{color:#fcfdfe!important;background-color:RGBA(116,184,22,var(--tblr-bg-opacity,1))!important}.text-bg-green{color:#fcfdfe!important;background-color:RGBA(47,179,68,var(--tblr-bg-opacity,1))!important}.text-bg-teal{color:#fcfdfe!important;background-color:RGBA(12,166,120,var(--tblr-bg-opacity,1))!important}.text-bg-cyan{color:#fcfdfe!important;background-color:RGBA(23,162,184,var(--tblr-bg-opacity,1))!important}.text-bg-facebook{color:#fcfdfe!important;background-color:RGBA(24,119,242,var(--tblr-bg-opacity,1))!important}.text-bg-twitter{color:#fcfdfe!important;background-color:RGBA(29,161,242,var(--tblr-bg-opacity,1))!important}.text-bg-linkedin{color:#fcfdfe!important;background-color:RGBA(10,102,194,var(--tblr-bg-opacity,1))!important}.text-bg-google{color:#fcfdfe!important;background-color:RGBA(220,78,65,var(--tblr-bg-opacity,1))!important}.text-bg-youtube{color:#fcfdfe!important;background-color:RGBA(255,0,0,var(--tblr-bg-opacity,1))!important}.text-bg-vimeo{color:#fcfdfe!important;background-color:RGBA(26,183,234,var(--tblr-bg-opacity,1))!important}.text-bg-dribbble{color:#fcfdfe!important;background-color:RGBA(234,76,137,var(--tblr-bg-opacity,1))!important}.text-bg-github{color:#fcfdfe!important;background-color:RGBA(24,23,23,var(--tblr-bg-opacity,1))!important}.text-bg-instagram{color:#fcfdfe!important;background-color:RGBA(228,64,95,var(--tblr-bg-opacity,1))!important}.text-bg-pinterest{color:#fcfdfe!important;background-color:RGBA(189,8,28,var(--tblr-bg-opacity,1))!important}.text-bg-vk{color:#fcfdfe!important;background-color:RGBA(99,131,168,var(--tblr-bg-opacity,1))!important}.text-bg-rss{color:#fcfdfe!important;background-color:RGBA(255,165,0,var(--tblr-bg-opacity,1))!important}.text-bg-flickr{color:#fcfdfe!important;background-color:RGBA(0,99,220,var(--tblr-bg-opacity,1))!important}.text-bg-bitbucket{color:#fcfdfe!important;background-color:RGBA(0,82,204,var(--tblr-bg-opacity,1))!important}.text-bg-tabler{color:#fcfdfe!important;background-color:RGBA(32,107,196,var(--tblr-bg-opacity,1))!important}.link-primary{color:RGBA(var(--tblr-primary-rgb,var(--tblr-link-opacity,1)));-webkit-text-decoration-color:RGBA(var(--tblr-primary-rgb),var(--tblr-link-underline-opacity,1));text-decoration-color:RGBA(var(--tblr-primary-rgb),var(--tblr-link-underline-opacity,1))}.link-primary:focus,.link-primary:hover{color:RGBA(26,86,157,var(--tblr-link-opacity,1));-webkit-text-decoration-color:RGBA(26,86,157,var(--tblr-link-underline-opacity,1));text-decoration-color:RGBA(26,86,157,var(--tblr-link-underline-opacity,1))}.link-secondary{color:RGBA(var(--tblr-secondary-rgb,var(--tblr-link-opacity,1)));-webkit-text-decoration-color:RGBA(var(--tblr-secondary-rgb),var(--tblr-link-underline-opacity,1));text-decoration-color:RGBA(var(--tblr-secondary-rgb),var(--tblr-link-underline-opacity,1))}.link-secondary:focus,.link-secondary:hover{color:RGBA(82,92,104,var(--tblr-link-opacity,1));-webkit-text-decoration-color:RGBA(82,92,104,var(--tblr-link-underline-opacity,1));text-decoration-color:RGBA(82,92,104,var(--tblr-link-underline-opacity,1))}.link-success{color:RGBA(var(--tblr-success-rgb,var(--tblr-link-opacity,1)));-webkit-text-decoration-color:RGBA(var(--tblr-success-rgb),var(--tblr-link-underline-opacity,1));text-decoration-color:RGBA(var(--tblr-success-rgb),var(--tblr-link-underline-opacity,1))}.link-success:focus,.link-success:hover{color:RGBA(38,143,54,var(--tblr-link-opacity,1));-webkit-text-decoration-color:RGBA(38,143,54,var(--tblr-link-underline-opacity,1));text-decoration-color:RGBA(38,143,54,var(--tblr-link-underline-opacity,1))}.link-info{color:RGBA(var(--tblr-info-rgb,var(--tblr-link-opacity,1)));-webkit-text-decoration-color:RGBA(var(--tblr-info-rgb),var(--tblr-link-underline-opacity,1));text-decoration-color:RGBA(var(--tblr-info-rgb),var(--tblr-link-underline-opacity,1))}.link-info:focus,.link-info:hover{color:RGBA(53,122,180,var(--tblr-link-opacity,1));-webkit-text-decoration-color:RGBA(53,122,180,var(--tblr-link-underline-opacity,1));text-decoration-color:RGBA(53,122,180,var(--tblr-link-underline-opacity,1))}.link-warning{color:RGBA(var(--tblr-warning-rgb,var(--tblr-link-opacity,1)));-webkit-text-decoration-color:RGBA(var(--tblr-warning-rgb),var(--tblr-link-underline-opacity,1));text-decoration-color:RGBA(var(--tblr-warning-rgb),var(--tblr-link-underline-opacity,1))}.link-warning:focus,.link-warning:hover{color:RGBA(198,82,6,var(--tblr-link-opacity,1));-webkit-text-decoration-color:RGBA(198,82,6,var(--tblr-link-underline-opacity,1));text-decoration-color:RGBA(198,82,6,var(--tblr-link-underline-opacity,1))}.link-danger{color:RGBA(var(--tblr-danger-rgb,var(--tblr-link-opacity,1)));-webkit-text-decoration-color:RGBA(var(--tblr-danger-rgb),var(--tblr-link-underline-opacity,1));text-decoration-color:RGBA(var(--tblr-danger-rgb),var(--tblr-link-underline-opacity,1))}.link-danger:focus,.link-danger:hover{color:RGBA(171,46,46,var(--tblr-link-opacity,1));-webkit-text-decoration-color:RGBA(171,46,46,var(--tblr-link-underline-opacity,1));text-decoration-color:RGBA(171,46,46,var(--tblr-link-underline-opacity,1))}.link-light{color:RGBA(var(--tblr-light-rgb,var(--tblr-link-opacity,1)));-webkit-text-decoration-color:RGBA(var(--tblr-light-rgb),var(--tblr-link-underline-opacity,1));text-decoration-color:RGBA(var(--tblr-light-rgb),var(--tblr-link-underline-opacity,1))}.link-light:focus,.link-light:hover{color:RGBA(253,253,254,var(--tblr-link-opacity,1));-webkit-text-decoration-color:RGBA(253,253,254,var(--tblr-link-underline-opacity,1));text-decoration-color:RGBA(253,253,254,var(--tblr-link-underline-opacity,1))}.link-dark{color:RGBA(var(--tblr-dark-rgb,var(--tblr-link-opacity,1)));-webkit-text-decoration-color:RGBA(var(--tblr-dark-rgb),var(--tblr-link-underline-opacity,1));text-decoration-color:RGBA(var(--tblr-dark-rgb),var(--tblr-link-underline-opacity,1))}.link-dark:focus,.link-dark:hover{color:RGBA(19,29,41,var(--tblr-link-opacity,1));-webkit-text-decoration-color:RGBA(19,29,41,var(--tblr-link-underline-opacity,1));text-decoration-color:RGBA(19,29,41,var(--tblr-link-underline-opacity,1))}.link-muted{color:RGBA(var(--tblr-muted-rgb,var(--tblr-link-opacity,1)));-webkit-text-decoration-color:RGBA(var(--tblr-muted-rgb),var(--tblr-link-underline-opacity,1));text-decoration-color:RGBA(var(--tblr-muted-rgb),var(--tblr-link-underline-opacity,1))}.link-muted:focus,.link-muted:hover{color:RGBA(82,92,104,var(--tblr-link-opacity,1));-webkit-text-decoration-color:RGBA(82,92,104,var(--tblr-link-underline-opacity,1));text-decoration-color:RGBA(82,92,104,var(--tblr-link-underline-opacity,1))}.link-blue{color:RGBA(var(--tblr-blue-rgb,var(--tblr-link-opacity,1)));-webkit-text-decoration-color:RGBA(var(--tblr-blue-rgb),var(--tblr-link-underline-opacity,1));text-decoration-color:RGBA(var(--tblr-blue-rgb),var(--tblr-link-underline-opacity,1))}.link-blue:focus,.link-blue:hover{color:RGBA(26,86,157,var(--tblr-link-opacity,1));-webkit-text-decoration-color:RGBA(26,86,157,var(--tblr-link-underline-opacity,1));text-decoration-color:RGBA(26,86,157,var(--tblr-link-underline-opacity,1))}.link-azure{color:RGBA(var(--tblr-azure-rgb,var(--tblr-link-opacity,1)));-webkit-text-decoration-color:RGBA(var(--tblr-azure-rgb),var(--tblr-link-underline-opacity,1));text-decoration-color:RGBA(var(--tblr-azure-rgb),var(--tblr-link-underline-opacity,1))}.link-azure:focus,.link-azure:hover{color:RGBA(53,122,180,var(--tblr-link-opacity,1));-webkit-text-decoration-color:RGBA(53,122,180,var(--tblr-link-underline-opacity,1));text-decoration-color:RGBA(53,122,180,var(--tblr-link-underline-opacity,1))}.link-indigo{color:RGBA(var(--tblr-indigo-rgb,var(--tblr-link-opacity,1)));-webkit-text-decoration-color:RGBA(var(--tblr-indigo-rgb),var(--tblr-link-underline-opacity,1));text-decoration-color:RGBA(var(--tblr-indigo-rgb),var(--tblr-link-underline-opacity,1))}.link-indigo:focus,.link-indigo:hover{color:RGBA(53,79,188,var(--tblr-link-opacity,1));-webkit-text-decoration-color:RGBA(53,79,188,var(--tblr-link-underline-opacity,1));text-decoration-color:RGBA(53,79,188,var(--tblr-link-underline-opacity,1))}.link-purple{color:RGBA(var(--tblr-purple-rgb,var(--tblr-link-opacity,1)));-webkit-text-decoration-color:RGBA(var(--tblr-purple-rgb),var(--tblr-link-underline-opacity,1));text-decoration-color:RGBA(var(--tblr-purple-rgb),var(--tblr-link-underline-opacity,1))}.link-purple:focus,.link-purple:hover{color:RGBA(139,50,161,var(--tblr-link-opacity,1));-webkit-text-decoration-color:RGBA(139,50,161,var(--tblr-link-underline-opacity,1));text-decoration-color:RGBA(139,50,161,var(--tblr-link-underline-opacity,1))}.link-pink{color:RGBA(var(--tblr-pink-rgb,var(--tblr-link-opacity,1)));-webkit-text-decoration-color:RGBA(var(--tblr-pink-rgb),var(--tblr-link-underline-opacity,1));text-decoration-color:RGBA(var(--tblr-pink-rgb),var(--tblr-link-underline-opacity,1))}.link-pink:focus,.link-pink:hover{color:RGBA(171,41,86,var(--tblr-link-opacity,1));-webkit-text-decoration-color:RGBA(171,41,86,var(--tblr-link-underline-opacity,1));text-decoration-color:RGBA(171,41,86,var(--tblr-link-underline-opacity,1))}.link-red{color:RGBA(var(--tblr-red-rgb,var(--tblr-link-opacity,1)));-webkit-text-decoration-color:RGBA(var(--tblr-red-rgb),var(--tblr-link-underline-opacity,1));text-decoration-color:RGBA(var(--tblr-red-rgb),var(--tblr-link-underline-opacity,1))}.link-red:focus,.link-red:hover{color:RGBA(171,46,46,var(--tblr-link-opacity,1));-webkit-text-decoration-color:RGBA(171,46,46,var(--tblr-link-underline-opacity,1));text-decoration-color:RGBA(171,46,46,var(--tblr-link-underline-opacity,1))}.link-orange{color:RGBA(var(--tblr-orange-rgb,var(--tblr-link-opacity,1)));-webkit-text-decoration-color:RGBA(var(--tblr-orange-rgb),var(--tblr-link-underline-opacity,1));text-decoration-color:RGBA(var(--tblr-orange-rgb),var(--tblr-link-underline-opacity,1))}.link-orange:focus,.link-orange:hover{color:RGBA(198,82,6,var(--tblr-link-opacity,1));-webkit-text-decoration-color:RGBA(198,82,6,var(--tblr-link-underline-opacity,1));text-decoration-color:RGBA(198,82,6,var(--tblr-link-underline-opacity,1))}.link-yellow{color:RGBA(var(--tblr-yellow-rgb,var(--tblr-link-opacity,1)));-webkit-text-decoration-color:RGBA(var(--tblr-yellow-rgb),var(--tblr-link-underline-opacity,1));text-decoration-color:RGBA(var(--tblr-yellow-rgb),var(--tblr-link-underline-opacity,1))}.link-yellow:focus,.link-yellow:hover{color:RGBA(196,127,0,var(--tblr-link-opacity,1));-webkit-text-decoration-color:RGBA(196,127,0,var(--tblr-link-underline-opacity,1));text-decoration-color:RGBA(196,127,0,var(--tblr-link-underline-opacity,1))}.link-lime{color:RGBA(var(--tblr-lime-rgb,var(--tblr-link-opacity,1)));-webkit-text-decoration-color:RGBA(var(--tblr-lime-rgb),var(--tblr-link-underline-opacity,1));text-decoration-color:RGBA(var(--tblr-lime-rgb),var(--tblr-link-underline-opacity,1))}.link-lime:focus,.link-lime:hover{color:RGBA(93,147,18,var(--tblr-link-opacity,1));-webkit-text-decoration-color:RGBA(93,147,18,var(--tblr-link-underline-opacity,1));text-decoration-color:RGBA(93,147,18,var(--tblr-link-underline-opacity,1))}.link-green{color:RGBA(var(--tblr-green-rgb,var(--tblr-link-opacity,1)));-webkit-text-decoration-color:RGBA(var(--tblr-green-rgb),var(--tblr-link-underline-opacity,1));text-decoration-color:RGBA(var(--tblr-green-rgb),var(--tblr-link-underline-opacity,1))}.link-green:focus,.link-green:hover{color:RGBA(38,143,54,var(--tblr-link-opacity,1));-webkit-text-decoration-color:RGBA(38,143,54,var(--tblr-link-underline-opacity,1));text-decoration-color:RGBA(38,143,54,var(--tblr-link-underline-opacity,1))}.link-teal{color:RGBA(var(--tblr-teal-rgb,var(--tblr-link-opacity,1)));-webkit-text-decoration-color:RGBA(var(--tblr-teal-rgb),var(--tblr-link-underline-opacity,1));text-decoration-color:RGBA(var(--tblr-teal-rgb),var(--tblr-link-underline-opacity,1))}.link-teal:focus,.link-teal:hover{color:RGBA(10,133,96,var(--tblr-link-opacity,1));-webkit-text-decoration-color:RGBA(10,133,96,var(--tblr-link-underline-opacity,1));text-decoration-color:RGBA(10,133,96,var(--tblr-link-underline-opacity,1))}.link-cyan{color:RGBA(var(--tblr-cyan-rgb,var(--tblr-link-opacity,1)));-webkit-text-decoration-color:RGBA(var(--tblr-cyan-rgb),var(--tblr-link-underline-opacity,1));text-decoration-color:RGBA(var(--tblr-cyan-rgb),var(--tblr-link-underline-opacity,1))}.link-cyan:focus,.link-cyan:hover{color:RGBA(18,130,147,var(--tblr-link-opacity,1));-webkit-text-decoration-color:RGBA(18,130,147,var(--tblr-link-underline-opacity,1));text-decoration-color:RGBA(18,130,147,var(--tblr-link-underline-opacity,1))}.link-facebook{color:RGBA(var(--tblr-facebook-rgb,var(--tblr-link-opacity,1)));-webkit-text-decoration-color:RGBA(var(--tblr-facebook-rgb),var(--tblr-link-underline-opacity,1));text-decoration-color:RGBA(var(--tblr-facebook-rgb),var(--tblr-link-underline-opacity,1))}.link-facebook:focus,.link-facebook:hover{color:RGBA(19,95,194,var(--tblr-link-opacity,1));-webkit-text-decoration-color:RGBA(19,95,194,var(--tblr-link-underline-opacity,1));text-decoration-color:RGBA(19,95,194,var(--tblr-link-underline-opacity,1))}.link-twitter{color:RGBA(var(--tblr-twitter-rgb,var(--tblr-link-opacity,1)));-webkit-text-decoration-color:RGBA(var(--tblr-twitter-rgb),var(--tblr-link-underline-opacity,1));text-decoration-color:RGBA(var(--tblr-twitter-rgb),var(--tblr-link-underline-opacity,1))}.link-twitter:focus,.link-twitter:hover{color:RGBA(23,129,194,var(--tblr-link-opacity,1));-webkit-text-decoration-color:RGBA(23,129,194,var(--tblr-link-underline-opacity,1));text-decoration-color:RGBA(23,129,194,var(--tblr-link-underline-opacity,1))}.link-linkedin{color:RGBA(var(--tblr-linkedin-rgb,var(--tblr-link-opacity,1)));-webkit-text-decoration-color:RGBA(var(--tblr-linkedin-rgb),var(--tblr-link-underline-opacity,1));text-decoration-color:RGBA(var(--tblr-linkedin-rgb),var(--tblr-link-underline-opacity,1))}.link-linkedin:focus,.link-linkedin:hover{color:RGBA(8,82,155,var(--tblr-link-opacity,1));-webkit-text-decoration-color:RGBA(8,82,155,var(--tblr-link-underline-opacity,1));text-decoration-color:RGBA(8,82,155,var(--tblr-link-underline-opacity,1))}.link-google{color:RGBA(var(--tblr-google-rgb,var(--tblr-link-opacity,1)));-webkit-text-decoration-color:RGBA(var(--tblr-google-rgb),var(--tblr-link-underline-opacity,1));text-decoration-color:RGBA(var(--tblr-google-rgb),var(--tblr-link-underline-opacity,1))}.link-google:focus,.link-google:hover{color:RGBA(176,62,52,var(--tblr-link-opacity,1));-webkit-text-decoration-color:RGBA(176,62,52,var(--tblr-link-underline-opacity,1));text-decoration-color:RGBA(176,62,52,var(--tblr-link-underline-opacity,1))}.link-youtube{color:RGBA(var(--tblr-youtube-rgb,var(--tblr-link-opacity,1)));-webkit-text-decoration-color:RGBA(var(--tblr-youtube-rgb),var(--tblr-link-underline-opacity,1));text-decoration-color:RGBA(var(--tblr-youtube-rgb),var(--tblr-link-underline-opacity,1))}.link-youtube:focus,.link-youtube:hover{color:RGBA(204,0,0,var(--tblr-link-opacity,1));-webkit-text-decoration-color:RGBA(204,0,0,var(--tblr-link-underline-opacity,1));text-decoration-color:RGBA(204,0,0,var(--tblr-link-underline-opacity,1))}.link-vimeo{color:RGBA(var(--tblr-vimeo-rgb,var(--tblr-link-opacity,1)));-webkit-text-decoration-color:RGBA(var(--tblr-vimeo-rgb),var(--tblr-link-underline-opacity,1));text-decoration-color:RGBA(var(--tblr-vimeo-rgb),var(--tblr-link-underline-opacity,1))}.link-vimeo:focus,.link-vimeo:hover{color:RGBA(21,146,187,var(--tblr-link-opacity,1));-webkit-text-decoration-color:RGBA(21,146,187,var(--tblr-link-underline-opacity,1));text-decoration-color:RGBA(21,146,187,var(--tblr-link-underline-opacity,1))}.link-dribbble{color:RGBA(var(--tblr-dribbble-rgb,var(--tblr-link-opacity,1)));-webkit-text-decoration-color:RGBA(var(--tblr-dribbble-rgb),var(--tblr-link-underline-opacity,1));text-decoration-color:RGBA(var(--tblr-dribbble-rgb),var(--tblr-link-underline-opacity,1))}.link-dribbble:focus,.link-dribbble:hover{color:RGBA(187,61,110,var(--tblr-link-opacity,1));-webkit-text-decoration-color:RGBA(187,61,110,var(--tblr-link-underline-opacity,1));text-decoration-color:RGBA(187,61,110,var(--tblr-link-underline-opacity,1))}.link-github{color:RGBA(var(--tblr-github-rgb,var(--tblr-link-opacity,1)));-webkit-text-decoration-color:RGBA(var(--tblr-github-rgb),var(--tblr-link-underline-opacity,1));text-decoration-color:RGBA(var(--tblr-github-rgb),var(--tblr-link-underline-opacity,1))}.link-github:focus,.link-github:hover{color:RGBA(19,18,18,var(--tblr-link-opacity,1));-webkit-text-decoration-color:RGBA(19,18,18,var(--tblr-link-underline-opacity,1));text-decoration-color:RGBA(19,18,18,var(--tblr-link-underline-opacity,1))}.link-instagram{color:RGBA(var(--tblr-instagram-rgb,var(--tblr-link-opacity,1)));-webkit-text-decoration-color:RGBA(var(--tblr-instagram-rgb),var(--tblr-link-underline-opacity,1));text-decoration-color:RGBA(var(--tblr-instagram-rgb),var(--tblr-link-underline-opacity,1))}.link-instagram:focus,.link-instagram:hover{color:RGBA(182,51,76,var(--tblr-link-opacity,1));-webkit-text-decoration-color:RGBA(182,51,76,var(--tblr-link-underline-opacity,1));text-decoration-color:RGBA(182,51,76,var(--tblr-link-underline-opacity,1))}.link-pinterest{color:RGBA(var(--tblr-pinterest-rgb,var(--tblr-link-opacity,1)));-webkit-text-decoration-color:RGBA(var(--tblr-pinterest-rgb),var(--tblr-link-underline-opacity,1));text-decoration-color:RGBA(var(--tblr-pinterest-rgb),var(--tblr-link-underline-opacity,1))}.link-pinterest:focus,.link-pinterest:hover{color:RGBA(151,6,22,var(--tblr-link-opacity,1));-webkit-text-decoration-color:RGBA(151,6,22,var(--tblr-link-underline-opacity,1));text-decoration-color:RGBA(151,6,22,var(--tblr-link-underline-opacity,1))}.link-vk{color:RGBA(var(--tblr-vk-rgb,var(--tblr-link-opacity,1)));-webkit-text-decoration-color:RGBA(var(--tblr-vk-rgb),var(--tblr-link-underline-opacity,1));text-decoration-color:RGBA(var(--tblr-vk-rgb),var(--tblr-link-underline-opacity,1))}.link-vk:focus,.link-vk:hover{color:RGBA(79,105,134,var(--tblr-link-opacity,1));-webkit-text-decoration-color:RGBA(79,105,134,var(--tblr-link-underline-opacity,1));text-decoration-color:RGBA(79,105,134,var(--tblr-link-underline-opacity,1))}.link-rss{color:RGBA(var(--tblr-rss-rgb,var(--tblr-link-opacity,1)));-webkit-text-decoration-color:RGBA(var(--tblr-rss-rgb),var(--tblr-link-underline-opacity,1));text-decoration-color:RGBA(var(--tblr-rss-rgb),var(--tblr-link-underline-opacity,1))}.link-rss:focus,.link-rss:hover{color:RGBA(204,132,0,var(--tblr-link-opacity,1));-webkit-text-decoration-color:RGBA(204,132,0,var(--tblr-link-underline-opacity,1));text-decoration-color:RGBA(204,132,0,var(--tblr-link-underline-opacity,1))}.link-flickr{color:RGBA(var(--tblr-flickr-rgb,var(--tblr-link-opacity,1)));-webkit-text-decoration-color:RGBA(var(--tblr-flickr-rgb),var(--tblr-link-underline-opacity,1));text-decoration-color:RGBA(var(--tblr-flickr-rgb),var(--tblr-link-underline-opacity,1))}.link-flickr:focus,.link-flickr:hover{color:RGBA(0,79,176,var(--tblr-link-opacity,1));-webkit-text-decoration-color:RGBA(0,79,176,var(--tblr-link-underline-opacity,1));text-decoration-color:RGBA(0,79,176,var(--tblr-link-underline-opacity,1))}.link-bitbucket{color:RGBA(var(--tblr-bitbucket-rgb,var(--tblr-link-opacity,1)));-webkit-text-decoration-color:RGBA(var(--tblr-bitbucket-rgb),var(--tblr-link-underline-opacity,1));text-decoration-color:RGBA(var(--tblr-bitbucket-rgb),var(--tblr-link-underline-opacity,1))}.link-bitbucket:focus,.link-bitbucket:hover{color:RGBA(0,66,163,var(--tblr-link-opacity,1));-webkit-text-decoration-color:RGBA(0,66,163,var(--tblr-link-underline-opacity,1));text-decoration-color:RGBA(0,66,163,var(--tblr-link-underline-opacity,1))}.link-tabler{color:RGBA(var(--tblr-tabler-rgb,var(--tblr-link-opacity,1)));-webkit-text-decoration-color:RGBA(var(--tblr-tabler-rgb),var(--tblr-link-underline-opacity,1));text-decoration-color:RGBA(var(--tblr-tabler-rgb),var(--tblr-link-underline-opacity,1))}.link-tabler:focus,.link-tabler:hover{color:RGBA(26,86,157,var(--tblr-link-opacity,1));-webkit-text-decoration-color:RGBA(26,86,157,var(--tblr-link-underline-opacity,1));text-decoration-color:RGBA(26,86,157,var(--tblr-link-underline-opacity,1))}.link-body-emphasis{color:RGBA(var(--tblr-emphasis-color-rgb),var(--tblr-link-opacity,1));-webkit-text-decoration-color:RGBA(var(--tblr-emphasis-color-rgb),var(--tblr-link-underline-opacity,1));text-decoration-color:RGBA(var(--tblr-emphasis-color-rgb),var(--tblr-link-underline-opacity,1))}.link-body-emphasis:focus,.link-body-emphasis:hover{color:RGBA(var(--tblr-emphasis-color-rgb),var(--tblr-link-opacity,.75));-webkit-text-decoration-color:RGBA(var(--tblr-emphasis-color-rgb),var(--tblr-link-underline-opacity,.75));text-decoration-color:RGBA(var(--tblr-emphasis-color-rgb),var(--tblr-link-underline-opacity,.75))}.focus-ring:focus{outline:0;box-shadow:var(--tblr-focus-ring-x,0) var(--tblr-focus-ring-y,0) var(--tblr-focus-ring-blur,0) var(--tblr-focus-ring-width) var(--tblr-focus-ring-color)}.icon-link{display:inline-flex;gap:.375rem;align-items:center;-webkit-text-decoration-color:rgba(var(--tblr-link-color-rgb),var(--tblr-link-opacity,.5));text-decoration-color:rgba(var(--tblr-link-color-rgb),var(--tblr-link-opacity,.5));text-underline-offset:.25em;-webkit-backface-visibility:hidden;backface-visibility:hidden}.icon-link>.bi{flex-shrink:0;width:1em;height:1em;fill:currentcolor;transition:.2s ease-in-out transform}@media (prefers-reduced-motion:reduce){.icon-link>.bi{transition:none}}.icon-link-hover:focus-visible>.bi,.icon-link-hover:hover>.bi{transform:var(--tblr-icon-link-transform,translate3d(.25em,0,0))}.ratio{position:relative;width:100%}.ratio:before{display:block;padding-top:var(--tblr-aspect-ratio);content:""}.ratio>*{position:absolute;top:0;left:0;width:100%;height:100%}.ratio-1x1{--tblr-aspect-ratio:100%}.ratio-2x1{--tblr-aspect-ratio:50%}.ratio-1x2{--tblr-aspect-ratio:200%}.ratio-3x1{--tblr-aspect-ratio:33.3333333333%}.ratio-1x3{--tblr-aspect-ratio:300%}.ratio-4x3{--tblr-aspect-ratio:75%}.ratio-3x4{--tblr-aspect-ratio:133.3333333333%}.ratio-16x9{--tblr-aspect-ratio:56.25%}.ratio-9x16{--tblr-aspect-ratio:177.7777777778%}.ratio-21x9{--tblr-aspect-ratio:42.8571428571%}.ratio-9x21{--tblr-aspect-ratio:233.3333333333%}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}@media (min-width:576px){.sticky-sm-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-sm-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}}@media (min-width:768px){.sticky-md-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-md-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}}@media (min-width:992px){.sticky-lg-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-lg-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}}@media (min-width:1200px){.sticky-xl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-xl-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}}@media (min-width:1400px){.sticky-xxl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-xxl-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}}.hstack{display:flex;flex-direction:row;align-items:center;align-self:stretch}.vstack{display:flex;flex:1 1 auto;flex-direction:column;align-self:stretch}.visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}.visually-hidden-focusable:not(:focus):not(:focus-within):not(caption),.visually-hidden:not(caption){position:absolute!important}.stretched-link:after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vr{display:inline-block;align-self:stretch;width:1px;min-height:1em;background-color:currentcolor;opacity:.16}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.float-start{float:left!important}.float-end{float:right!important}.float-none{float:none!important}.object-fit-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-none{-o-object-fit:none!important;object-fit:none!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.overflow-visible{overflow:visible!important}.overflow-scroll{overflow:scroll!important}.overflow-x-auto{overflow-x:auto!important}.overflow-x-hidden{overflow-x:hidden!important}.overflow-x-visible{overflow-x:visible!important}.overflow-x-scroll{overflow-x:scroll!important}.overflow-y-auto{overflow-y:auto!important}.overflow-y-hidden{overflow-y:hidden!important}.overflow-y-visible{overflow-y:visible!important}.overflow-y-scroll{overflow-y:scroll!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-grid{display:grid!important}.d-inline-grid{display:inline-grid!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:flex!important}.d-inline-flex{display:inline-flex!important}.d-none{display:none!important}.shadow{box-shadow:0 .5rem 1rem #00000026!important}.shadow-sm{box-shadow:0 .125rem .25rem #00000013!important}.shadow-lg{box-shadow:0 1rem 3rem #0000002d!important}.shadow-none{box-shadow:none!important}.focus-ring-primary{--tblr-focus-ring-color:rgba(var(--tblr-primary-rgb), var(--tblr-focus-ring-opacity))}.focus-ring-secondary{--tblr-focus-ring-color:rgba(var(--tblr-secondary-rgb), var(--tblr-focus-ring-opacity))}.focus-ring-success{--tblr-focus-ring-color:rgba(var(--tblr-success-rgb), var(--tblr-focus-ring-opacity))}.focus-ring-info{--tblr-focus-ring-color:rgba(var(--tblr-info-rgb), var(--tblr-focus-ring-opacity))}.focus-ring-warning{--tblr-focus-ring-color:rgba(var(--tblr-warning-rgb), var(--tblr-focus-ring-opacity))}.focus-ring-danger{--tblr-focus-ring-color:rgba(var(--tblr-danger-rgb), var(--tblr-focus-ring-opacity))}.focus-ring-light{--tblr-focus-ring-color:rgba(var(--tblr-light-rgb), var(--tblr-focus-ring-opacity))}.focus-ring-dark{--tblr-focus-ring-color:rgba(var(--tblr-dark-rgb), var(--tblr-focus-ring-opacity))}.focus-ring-muted{--tblr-focus-ring-color:rgba(var(--tblr-muted-rgb), var(--tblr-focus-ring-opacity))}.focus-ring-blue{--tblr-focus-ring-color:rgba(var(--tblr-blue-rgb), var(--tblr-focus-ring-opacity))}.focus-ring-azure{--tblr-focus-ring-color:rgba(var(--tblr-azure-rgb), var(--tblr-focus-ring-opacity))}.focus-ring-indigo{--tblr-focus-ring-color:rgba(var(--tblr-indigo-rgb), var(--tblr-focus-ring-opacity))}.focus-ring-purple{--tblr-focus-ring-color:rgba(var(--tblr-purple-rgb), var(--tblr-focus-ring-opacity))}.focus-ring-pink{--tblr-focus-ring-color:rgba(var(--tblr-pink-rgb), var(--tblr-focus-ring-opacity))}.focus-ring-red{--tblr-focus-ring-color:rgba(var(--tblr-red-rgb), var(--tblr-focus-ring-opacity))}.focus-ring-orange{--tblr-focus-ring-color:rgba(var(--tblr-orange-rgb), var(--tblr-focus-ring-opacity))}.focus-ring-yellow{--tblr-focus-ring-color:rgba(var(--tblr-yellow-rgb), var(--tblr-focus-ring-opacity))}.focus-ring-lime{--tblr-focus-ring-color:rgba(var(--tblr-lime-rgb), var(--tblr-focus-ring-opacity))}.focus-ring-green{--tblr-focus-ring-color:rgba(var(--tblr-green-rgb), var(--tblr-focus-ring-opacity))}.focus-ring-teal{--tblr-focus-ring-color:rgba(var(--tblr-teal-rgb), var(--tblr-focus-ring-opacity))}.focus-ring-cyan{--tblr-focus-ring-color:rgba(var(--tblr-cyan-rgb), var(--tblr-focus-ring-opacity))}.focus-ring-facebook{--tblr-focus-ring-color:rgba(var(--tblr-facebook-rgb), var(--tblr-focus-ring-opacity))}.focus-ring-twitter{--tblr-focus-ring-color:rgba(var(--tblr-twitter-rgb), var(--tblr-focus-ring-opacity))}.focus-ring-linkedin{--tblr-focus-ring-color:rgba(var(--tblr-linkedin-rgb), var(--tblr-focus-ring-opacity))}.focus-ring-google{--tblr-focus-ring-color:rgba(var(--tblr-google-rgb), var(--tblr-focus-ring-opacity))}.focus-ring-youtube{--tblr-focus-ring-color:rgba(var(--tblr-youtube-rgb), var(--tblr-focus-ring-opacity))}.focus-ring-vimeo{--tblr-focus-ring-color:rgba(var(--tblr-vimeo-rgb), var(--tblr-focus-ring-opacity))}.focus-ring-dribbble{--tblr-focus-ring-color:rgba(var(--tblr-dribbble-rgb), var(--tblr-focus-ring-opacity))}.focus-ring-github{--tblr-focus-ring-color:rgba(var(--tblr-github-rgb), var(--tblr-focus-ring-opacity))}.focus-ring-instagram{--tblr-focus-ring-color:rgba(var(--tblr-instagram-rgb), var(--tblr-focus-ring-opacity))}.focus-ring-pinterest{--tblr-focus-ring-color:rgba(var(--tblr-pinterest-rgb), var(--tblr-focus-ring-opacity))}.focus-ring-vk{--tblr-focus-ring-color:rgba(var(--tblr-vk-rgb), var(--tblr-focus-ring-opacity))}.focus-ring-rss{--tblr-focus-ring-color:rgba(var(--tblr-rss-rgb), var(--tblr-focus-ring-opacity))}.focus-ring-flickr{--tblr-focus-ring-color:rgba(var(--tblr-flickr-rgb), var(--tblr-focus-ring-opacity))}.focus-ring-bitbucket{--tblr-focus-ring-color:rgba(var(--tblr-bitbucket-rgb), var(--tblr-focus-ring-opacity))}.focus-ring-tabler{--tblr-focus-ring-color:rgba(var(--tblr-tabler-rgb), var(--tblr-focus-ring-opacity))}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.top-0{top:0!important}.top-50{top:50%!important}.top-100{top:100%!important}.bottom-0{bottom:0!important}.bottom-50{bottom:50%!important}.bottom-100{bottom:100%!important}.start-0{left:0!important}.start-50{left:50%!important}.start-100{left:100%!important}.end-0{right:0!important}.end-50{right:50%!important}.end-100{right:100%!important}.translate-middle{transform:translate(-50%,-50%)!important}.translate-middle-x{transform:translate(-50%)!important}.translate-middle-y{transform:translateY(-50%)!important}.border{border:var(--tblr-border-width) var(--tblr-border-style) rgba(4,32,69,.14)!important}.border-wide{border:2px var(--tblr-border-style) rgba(4,32,69,.14)!important}.border-0{border:0!important}.border-top{border-top:var(--tblr-border-width) var(--tblr-border-style) rgba(4,32,69,.14)!important}.border-top-wide{border-top:2px var(--tblr-border-style) rgba(4,32,69,.14)!important}.border-top-0{border-top:0!important}.border-end{border-right:var(--tblr-border-width) var(--tblr-border-style) rgba(4,32,69,.14)!important}.border-end-wide{border-right:2px var(--tblr-border-style) rgba(4,32,69,.14)!important}.border-end-0{border-right:0!important}.border-bottom{border-bottom:var(--tblr-border-width) var(--tblr-border-style) rgba(4,32,69,.14)!important}.border-bottom-wide{border-bottom:2px var(--tblr-border-style) rgba(4,32,69,.14)!important}.border-bottom-0{border-bottom:0!important}.border-start{border-left:var(--tblr-border-width) var(--tblr-border-style) rgba(4,32,69,.14)!important}.border-start-wide{border-left:2px var(--tblr-border-style) rgba(4,32,69,.14)!important}.border-start-0{border-left:0!important}.border-primary{--tblr-border-opacity:1;border-color:rgba(var(--tblr-primary-rgb),var(--tblr-border-opacity))!important}.border-secondary{--tblr-border-opacity:1;border-color:rgba(var(--tblr-secondary-rgb),var(--tblr-border-opacity))!important}.border-success{--tblr-border-opacity:1;border-color:rgba(var(--tblr-success-rgb),var(--tblr-border-opacity))!important}.border-info{--tblr-border-opacity:1;border-color:rgba(var(--tblr-info-rgb),var(--tblr-border-opacity))!important}.border-warning{--tblr-border-opacity:1;border-color:rgba(var(--tblr-warning-rgb),var(--tblr-border-opacity))!important}.border-danger{--tblr-border-opacity:1;border-color:rgba(var(--tblr-danger-rgb),var(--tblr-border-opacity))!important}.border-light{--tblr-border-opacity:1;border-color:rgba(var(--tblr-light-rgb),var(--tblr-border-opacity))!important}.border-dark{--tblr-border-opacity:1;border-color:rgba(var(--tblr-dark-rgb),var(--tblr-border-opacity))!important}.border-muted{--tblr-border-opacity:1;border-color:rgba(var(--tblr-muted-rgb),var(--tblr-border-opacity))!important}.border-blue{--tblr-border-opacity:1;border-color:rgba(var(--tblr-blue-rgb),var(--tblr-border-opacity))!important}.border-azure{--tblr-border-opacity:1;border-color:rgba(var(--tblr-azure-rgb),var(--tblr-border-opacity))!important}.border-indigo{--tblr-border-opacity:1;border-color:rgba(var(--tblr-indigo-rgb),var(--tblr-border-opacity))!important}.border-purple{--tblr-border-opacity:1;border-color:rgba(var(--tblr-purple-rgb),var(--tblr-border-opacity))!important}.border-pink{--tblr-border-opacity:1;border-color:rgba(var(--tblr-pink-rgb),var(--tblr-border-opacity))!important}.border-red{--tblr-border-opacity:1;border-color:rgba(var(--tblr-red-rgb),var(--tblr-border-opacity))!important}.border-orange{--tblr-border-opacity:1;border-color:rgba(var(--tblr-orange-rgb),var(--tblr-border-opacity))!important}.border-yellow{--tblr-border-opacity:1;border-color:rgba(var(--tblr-yellow-rgb),var(--tblr-border-opacity))!important}.border-lime{--tblr-border-opacity:1;border-color:rgba(var(--tblr-lime-rgb),var(--tblr-border-opacity))!important}.border-green{--tblr-border-opacity:1;border-color:rgba(var(--tblr-green-rgb),var(--tblr-border-opacity))!important}.border-teal{--tblr-border-opacity:1;border-color:rgba(var(--tblr-teal-rgb),var(--tblr-border-opacity))!important}.border-cyan{--tblr-border-opacity:1;border-color:rgba(var(--tblr-cyan-rgb),var(--tblr-border-opacity))!important}.border-facebook{--tblr-border-opacity:1;border-color:rgba(var(--tblr-facebook-rgb),var(--tblr-border-opacity))!important}.border-twitter{--tblr-border-opacity:1;border-color:rgba(var(--tblr-twitter-rgb),var(--tblr-border-opacity))!important}.border-linkedin{--tblr-border-opacity:1;border-color:rgba(var(--tblr-linkedin-rgb),var(--tblr-border-opacity))!important}.border-google{--tblr-border-opacity:1;border-color:rgba(var(--tblr-google-rgb),var(--tblr-border-opacity))!important}.border-youtube{--tblr-border-opacity:1;border-color:rgba(var(--tblr-youtube-rgb),var(--tblr-border-opacity))!important}.border-vimeo{--tblr-border-opacity:1;border-color:rgba(var(--tblr-vimeo-rgb),var(--tblr-border-opacity))!important}.border-dribbble{--tblr-border-opacity:1;border-color:rgba(var(--tblr-dribbble-rgb),var(--tblr-border-opacity))!important}.border-github{--tblr-border-opacity:1;border-color:rgba(var(--tblr-github-rgb),var(--tblr-border-opacity))!important}.border-instagram{--tblr-border-opacity:1;border-color:rgba(var(--tblr-instagram-rgb),var(--tblr-border-opacity))!important}.border-pinterest{--tblr-border-opacity:1;border-color:rgba(var(--tblr-pinterest-rgb),var(--tblr-border-opacity))!important}.border-vk{--tblr-border-opacity:1;border-color:rgba(var(--tblr-vk-rgb),var(--tblr-border-opacity))!important}.border-rss{--tblr-border-opacity:1;border-color:rgba(var(--tblr-rss-rgb),var(--tblr-border-opacity))!important}.border-flickr{--tblr-border-opacity:1;border-color:rgba(var(--tblr-flickr-rgb),var(--tblr-border-opacity))!important}.border-bitbucket{--tblr-border-opacity:1;border-color:rgba(var(--tblr-bitbucket-rgb),var(--tblr-border-opacity))!important}.border-tabler{--tblr-border-opacity:1;border-color:rgba(var(--tblr-tabler-rgb),var(--tblr-border-opacity))!important}.border-black{--tblr-border-opacity:1;border-color:rgba(var(--tblr-black-rgb),var(--tblr-border-opacity))!important}.border-white{--tblr-border-opacity:1;border-color:rgba(var(--tblr-white-rgb),var(--tblr-border-opacity))!important}.border-primary-subtle{border-color:var(--tblr-primary-border-subtle)!important}.border-secondary-subtle{border-color:var(--tblr-secondary-border-subtle)!important}.border-success-subtle{border-color:var(--tblr-success-border-subtle)!important}.border-info-subtle{border-color:var(--tblr-info-border-subtle)!important}.border-warning-subtle{border-color:var(--tblr-warning-border-subtle)!important}.border-danger-subtle{border-color:var(--tblr-danger-border-subtle)!important}.border-light-subtle{border-color:var(--tblr-light-border-subtle)!important}.border-dark-subtle{border-color:var(--tblr-dark-border-subtle)!important}.border-1{border-width:1px!important}.border-2{border-width:2px!important}.border-3{border-width:3px!important}.border-4{border-width:4px!important}.border-5{border-width:5px!important}.border-opacity-10{--tblr-border-opacity:.1}.border-opacity-25{--tblr-border-opacity:.25}.border-opacity-50{--tblr-border-opacity:.5}.border-opacity-75{--tblr-border-opacity:.75}.border-opacity-100{--tblr-border-opacity:1}.w-25{width:25%!important}.w-33{width:33.33333%!important}.w-50{width:50%!important}.w-66{width:66.66666%!important}.w-75{width:75%!important}.w-100{width:100%!important}.mw-100{max-width:100%!important}.vw-100{width:100vw!important}.min-vw-100{min-width:100vw!important}.h-25{height:25%!important}.h-33{height:33.33333%!important}.h-50{height:50%!important}.h-66{height:66.66666%!important}.h-75{height:75%!important}.h-100{height:100%!important}.mh-100{max-height:100%!important}.vh-100{height:100vh!important}.min-vh-100{min-height:100vh!important}.flex-fill{flex:1 1 auto!important}.flex-row{flex-direction:row!important}.flex-column{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}.flex-grow-0{flex-grow:0!important}.flex-grow-1{flex-grow:1!important}.flex-shrink-0{flex-shrink:0!important}.flex-shrink-1{flex-shrink:1!important}.flex-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.justify-content-evenly{justify-content:space-evenly!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}.order-first{order:-1!important}.order-0{order:0!important}.order-1{order:1!important}.order-2{order:2!important}.order-3{order:3!important}.order-4{order:4!important}.order-5{order:5!important}.order-last{order:6!important}.m-0{margin:0!important}.m-1{margin:.25rem!important}.m-2{margin:.5rem!important}.m-3{margin:1rem!important}.m-4{margin:1.5rem!important}.m-5{margin:2rem!important}.m-6{margin:3rem!important}.m-7{margin:5rem!important}.m-8{margin:8rem!important}.m-auto{margin:auto!important}.mx-0{margin-right:0!important;margin-left:0!important}.mx-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-3{margin-right:1rem!important;margin-left:1rem!important}.mx-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-5{margin-right:2rem!important;margin-left:2rem!important}.mx-6{margin-right:3rem!important;margin-left:3rem!important}.mx-7{margin-right:5rem!important;margin-left:5rem!important}.mx-8{margin-right:8rem!important;margin-left:8rem!important}.mx-auto{margin-right:auto!important;margin-left:auto!important}.my-0{margin-top:0!important;margin-bottom:0!important}.my-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-5{margin-top:2rem!important;margin-bottom:2rem!important}.my-6{margin-top:3rem!important;margin-bottom:3rem!important}.my-7{margin-top:5rem!important;margin-bottom:5rem!important}.my-8{margin-top:8rem!important;margin-bottom:8rem!important}.my-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-0{margin-top:0!important}.mt-1{margin-top:.25rem!important}.mt-2{margin-top:.5rem!important}.mt-3{margin-top:1rem!important}.mt-4{margin-top:1.5rem!important}.mt-5{margin-top:2rem!important}.mt-6{margin-top:3rem!important}.mt-7{margin-top:5rem!important}.mt-8{margin-top:8rem!important}.mt-auto{margin-top:auto!important}.me-0{margin-right:0!important}.me-1{margin-right:.25rem!important}.me-2{margin-right:.5rem!important}.me-3{margin-right:1rem!important}.me-4{margin-right:1.5rem!important}.me-5{margin-right:2rem!important}.me-6{margin-right:3rem!important}.me-7{margin-right:5rem!important}.me-8{margin-right:8rem!important}.me-auto{margin-right:auto!important}.mb-0{margin-bottom:0!important}.mb-1{margin-bottom:.25rem!important}.mb-2{margin-bottom:.5rem!important}.mb-3{margin-bottom:1rem!important}.mb-4{margin-bottom:1.5rem!important}.mb-5{margin-bottom:2rem!important}.mb-6{margin-bottom:3rem!important}.mb-7{margin-bottom:5rem!important}.mb-8{margin-bottom:8rem!important}.mb-auto{margin-bottom:auto!important}.ms-0{margin-left:0!important}.ms-1{margin-left:.25rem!important}.ms-2{margin-left:.5rem!important}.ms-3{margin-left:1rem!important}.ms-4{margin-left:1.5rem!important}.ms-5{margin-left:2rem!important}.ms-6{margin-left:3rem!important}.ms-7{margin-left:5rem!important}.ms-8{margin-left:8rem!important}.ms-auto{margin-left:auto!important}.p-0{padding:0!important}.p-1{padding:.25rem!important}.p-2{padding:.5rem!important}.p-3{padding:1rem!important}.p-4{padding:1.5rem!important}.p-5{padding:2rem!important}.p-6{padding:3rem!important}.p-7{padding:5rem!important}.p-8{padding:8rem!important}.px-0{padding-right:0!important;padding-left:0!important}.px-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-3{padding-right:1rem!important;padding-left:1rem!important}.px-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-5{padding-right:2rem!important;padding-left:2rem!important}.px-6{padding-right:3rem!important;padding-left:3rem!important}.px-7{padding-right:5rem!important;padding-left:5rem!important}.px-8{padding-right:8rem!important;padding-left:8rem!important}.py-0{padding-top:0!important;padding-bottom:0!important}.py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-5{padding-top:2rem!important;padding-bottom:2rem!important}.py-6{padding-top:3rem!important;padding-bottom:3rem!important}.py-7{padding-top:5rem!important;padding-bottom:5rem!important}.py-8{padding-top:8rem!important;padding-bottom:8rem!important}.pt-0{padding-top:0!important}.pt-1{padding-top:.25rem!important}.pt-2{padding-top:.5rem!important}.pt-3{padding-top:1rem!important}.pt-4{padding-top:1.5rem!important}.pt-5{padding-top:2rem!important}.pt-6{padding-top:3rem!important}.pt-7{padding-top:5rem!important}.pt-8{padding-top:8rem!important}.pe-0{padding-right:0!important}.pe-1{padding-right:.25rem!important}.pe-2{padding-right:.5rem!important}.pe-3{padding-right:1rem!important}.pe-4{padding-right:1.5rem!important}.pe-5{padding-right:2rem!important}.pe-6{padding-right:3rem!important}.pe-7{padding-right:5rem!important}.pe-8{padding-right:8rem!important}.pb-0{padding-bottom:0!important}.pb-1{padding-bottom:.25rem!important}.pb-2{padding-bottom:.5rem!important}.pb-3{padding-bottom:1rem!important}.pb-4{padding-bottom:1.5rem!important}.pb-5{padding-bottom:2rem!important}.pb-6{padding-bottom:3rem!important}.pb-7{padding-bottom:5rem!important}.pb-8{padding-bottom:8rem!important}.ps-0{padding-left:0!important}.ps-1{padding-left:.25rem!important}.ps-2{padding-left:.5rem!important}.ps-3{padding-left:1rem!important}.ps-4{padding-left:1.5rem!important}.ps-5{padding-left:2rem!important}.ps-6{padding-left:3rem!important}.ps-7{padding-left:5rem!important}.ps-8{padding-left:8rem!important}.gap-0{gap:0!important}.gap-1{gap:.25rem!important}.gap-2{gap:.5rem!important}.gap-3{gap:1rem!important}.gap-4{gap:1.5rem!important}.gap-5{gap:2rem!important}.gap-6{gap:3rem!important}.gap-7{gap:5rem!important}.gap-8{gap:8rem!important}.row-gap-0{row-gap:0!important}.row-gap-1{row-gap:.25rem!important}.row-gap-2{row-gap:.5rem!important}.row-gap-3{row-gap:1rem!important}.row-gap-4{row-gap:1.5rem!important}.row-gap-5{row-gap:2rem!important}.row-gap-6{row-gap:3rem!important}.row-gap-7{row-gap:5rem!important}.row-gap-8{row-gap:8rem!important}.column-gap-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-1{-moz-column-gap:.25rem!important;column-gap:.25rem!important}.column-gap-2{-moz-column-gap:.5rem!important;column-gap:.5rem!important}.column-gap-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-5{-moz-column-gap:2rem!important;column-gap:2rem!important}.column-gap-6{-moz-column-gap:3rem!important;column-gap:3rem!important}.column-gap-7{-moz-column-gap:5rem!important;column-gap:5rem!important}.column-gap-8{-moz-column-gap:8rem!important;column-gap:8rem!important}.font-monospace{font-family:var(--tblr-font-monospace)!important}.fs-1{font-size:1.5rem!important}.fs-2{font-size:1.25rem!important}.fs-3{font-size:1rem!important}.fs-4{font-size:.875rem!important}.fs-5{font-size:.75rem!important}.fs-6{font-size:.625rem!important}.fst-italic{font-style:italic!important}.fst-normal{font-style:normal!important}.fw-lighter{font-weight:lighter!important}.fw-light{font-weight:300!important}.fw-normal{font-weight:400!important}.fw-medium{font-weight:500!important}.fw-semibold,.fw-bold{font-weight:600!important}.fw-bolder{font-weight:bolder!important}.lh-1{line-height:1!important}.lh-sm{line-height:1.1428571429!important}.lh-base{line-height:1.4285714286!important}.lh-lg{line-height:1.7142857143!important}.text-start{text-align:left!important}.text-end{text-align:right!important}.text-center{text-align:center!important}.text-decoration-none{text-decoration:none!important}.text-decoration-underline{text-decoration:underline!important}.text-decoration-line-through{text-decoration:line-through!important}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-break{word-wrap:break-word!important;word-break:break-word!important}.text-muted{--tblr-text-opacity:1;color:var(--tblr-secondary-color)!important}.text-black{--tblr-text-opacity:1;color:rgba(var(--tblr-black-rgb),var(--tblr-text-opacity))!important}.text-white{--tblr-text-opacity:1;color:rgba(var(--tblr-white-rgb),var(--tblr-text-opacity))!important}.text-body{--tblr-text-opacity:1;color:rgba(var(--tblr-body-color-rgb),var(--tblr-text-opacity))!important}.text-black-50{--tblr-text-opacity:1;color:#00000080!important}.text-white-50{--tblr-text-opacity:1;color:#ffffff80!important}.text-body-secondary{--tblr-text-opacity:1;color:var(--tblr-secondary-color)!important}.text-body-tertiary{--tblr-text-opacity:1;color:var(--tblr-tertiary-color)!important}.text-body-emphasis{--tblr-text-opacity:1;color:var(--tblr-emphasis-color)!important}.text-reset{--tblr-text-opacity:1;color:inherit!important}.text-opacity-25{--tblr-text-opacity:.25}.text-opacity-50{--tblr-text-opacity:.5}.text-opacity-75{--tblr-text-opacity:.75}.text-opacity-100{--tblr-text-opacity:1}.text-primary-emphasis{color:var(--tblr-primary-text-emphasis)!important}.text-secondary-emphasis{color:var(--tblr-secondary-text-emphasis)!important}.text-success-emphasis{color:var(--tblr-success-text-emphasis)!important}.text-info-emphasis{color:var(--tblr-info-text-emphasis)!important}.text-warning-emphasis{color:var(--tblr-warning-text-emphasis)!important}.text-danger-emphasis{color:var(--tblr-danger-text-emphasis)!important}.text-light-emphasis{color:var(--tblr-light-text-emphasis)!important}.text-dark-emphasis{color:var(--tblr-dark-text-emphasis)!important}.link-opacity-10,.link-opacity-10-hover:hover{--tblr-link-opacity:.1}.link-opacity-25,.link-opacity-25-hover:hover{--tblr-link-opacity:.25}.link-opacity-50,.link-opacity-50-hover:hover{--tblr-link-opacity:.5}.link-opacity-75,.link-opacity-75-hover:hover{--tblr-link-opacity:.75}.link-opacity-100,.link-opacity-100-hover:hover{--tblr-link-opacity:1}.link-offset-1,.link-offset-1-hover:hover{text-underline-offset:.125em!important}.link-offset-2,.link-offset-2-hover:hover{text-underline-offset:.25em!important}.link-offset-3,.link-offset-3-hover:hover{text-underline-offset:.375em!important}.link-underline-primary{--tblr-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--tblr-primary-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-primary-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-secondary{--tblr-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--tblr-secondary-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-secondary-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-success{--tblr-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--tblr-success-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-success-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-info{--tblr-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--tblr-info-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-info-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-warning{--tblr-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--tblr-warning-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-warning-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-danger{--tblr-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--tblr-danger-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-danger-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-light{--tblr-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--tblr-light-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-light-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-dark{--tblr-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--tblr-dark-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-dark-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-muted{--tblr-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--tblr-muted-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-muted-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-blue{--tblr-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--tblr-blue-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-blue-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-azure{--tblr-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--tblr-azure-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-azure-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-indigo{--tblr-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--tblr-indigo-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-indigo-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-purple{--tblr-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--tblr-purple-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-purple-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-pink{--tblr-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--tblr-pink-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-pink-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-red{--tblr-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--tblr-red-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-red-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-orange{--tblr-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--tblr-orange-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-orange-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-yellow{--tblr-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--tblr-yellow-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-yellow-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-lime{--tblr-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--tblr-lime-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-lime-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-green{--tblr-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--tblr-green-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-green-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-teal{--tblr-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--tblr-teal-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-teal-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-cyan{--tblr-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--tblr-cyan-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-cyan-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-facebook{--tblr-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--tblr-facebook-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-facebook-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-twitter{--tblr-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--tblr-twitter-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-twitter-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-linkedin{--tblr-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--tblr-linkedin-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-linkedin-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-google{--tblr-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--tblr-google-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-google-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-youtube{--tblr-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--tblr-youtube-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-youtube-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-vimeo{--tblr-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--tblr-vimeo-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-vimeo-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-dribbble{--tblr-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--tblr-dribbble-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-dribbble-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-github{--tblr-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--tblr-github-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-github-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-instagram{--tblr-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--tblr-instagram-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-instagram-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-pinterest{--tblr-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--tblr-pinterest-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-pinterest-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-vk{--tblr-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--tblr-vk-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-vk-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-rss{--tblr-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--tblr-rss-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-rss-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-flickr{--tblr-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--tblr-flickr-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-flickr-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-bitbucket{--tblr-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--tblr-bitbucket-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-bitbucket-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-tabler{--tblr-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--tblr-tabler-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-tabler-rgb),var(--tblr-link-underline-opacity))!important}.link-underline{--tblr-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--tblr-link-color-rgb),var(--tblr-link-underline-opacity,1))!important;text-decoration-color:rgba(var(--tblr-link-color-rgb),var(--tblr-link-underline-opacity,1))!important}.link-underline-opacity-0,.link-underline-opacity-0-hover:hover{--tblr-link-underline-opacity:0}.link-underline-opacity-10,.link-underline-opacity-10-hover:hover{--tblr-link-underline-opacity:.1}.link-underline-opacity-25,.link-underline-opacity-25-hover:hover{--tblr-link-underline-opacity:.25}.link-underline-opacity-50,.link-underline-opacity-50-hover:hover{--tblr-link-underline-opacity:.5}.link-underline-opacity-75,.link-underline-opacity-75-hover:hover{--tblr-link-underline-opacity:.75}.link-underline-opacity-100,.link-underline-opacity-100-hover:hover{--tblr-link-underline-opacity:1}.bg-black{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-black-rgb),var(--tblr-bg-opacity))!important}.bg-body{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-body-bg-rgb),var(--tblr-bg-opacity))!important}.bg-transparent{--tblr-bg-opacity:1;background-color:transparent!important}.bg-body-secondary{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-secondary-bg-rgb),var(--tblr-bg-opacity))!important}.bg-body-tertiary{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-tertiary-bg-rgb),var(--tblr-bg-opacity))!important}.bg-opacity-10{--tblr-bg-opacity:.1}.bg-opacity-25{--tblr-bg-opacity:.25}.bg-opacity-50{--tblr-bg-opacity:.5}.bg-opacity-75{--tblr-bg-opacity:.75}.bg-opacity-100{--tblr-bg-opacity:1}.bg-primary-subtle{background-color:var(--tblr-primary-bg-subtle)!important}.bg-secondary-subtle{background-color:var(--tblr-secondary-bg-subtle)!important}.bg-success-subtle{background-color:var(--tblr-success-bg-subtle)!important}.bg-info-subtle{background-color:var(--tblr-info-bg-subtle)!important}.bg-warning-subtle{background-color:var(--tblr-warning-bg-subtle)!important}.bg-danger-subtle{background-color:var(--tblr-danger-bg-subtle)!important}.bg-light-subtle{background-color:var(--tblr-light-bg-subtle)!important}.bg-dark-subtle{background-color:var(--tblr-dark-bg-subtle)!important}.bg-gradient{background-image:var(--tblr-gradient)!important}.user-select-all{-webkit-user-select:all!important;-moz-user-select:all!important;user-select:all!important}.user-select-auto{-webkit-user-select:auto!important;-moz-user-select:auto!important;-ms-user-select:auto!important;user-select:auto!important}.user-select-none{-webkit-user-select:none!important;-moz-user-select:none!important;-ms-user-select:none!important;user-select:none!important}.pe-none{pointer-events:none!important}.pe-auto{pointer-events:auto!important}.rounded{border-radius:var(--tblr-border-radius)!important}.rounded-0{border-radius:0!important}.rounded-1{border-radius:var(--tblr-border-radius-sm)!important}.rounded-2{border-radius:var(--tblr-border-radius)!important}.rounded-3{border-radius:var(--tblr-border-radius-lg)!important}.rounded-4{border-radius:var(--tblr-border-radius-xl)!important}.rounded-5{border-radius:var(--tblr-border-radius-xxl)!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:var(--tblr-border-radius-pill)!important}.rounded-top{border-top-left-radius:var(--tblr-border-radius)!important;border-top-right-radius:var(--tblr-border-radius)!important}.rounded-top-0{border-top-left-radius:0!important;border-top-right-radius:0!important}.rounded-top-1{border-top-left-radius:var(--tblr-border-radius-sm)!important;border-top-right-radius:var(--tblr-border-radius-sm)!important}.rounded-top-2{border-top-left-radius:var(--tblr-border-radius)!important;border-top-right-radius:var(--tblr-border-radius)!important}.rounded-top-3{border-top-left-radius:var(--tblr-border-radius-lg)!important;border-top-right-radius:var(--tblr-border-radius-lg)!important}.rounded-top-4{border-top-left-radius:var(--tblr-border-radius-xl)!important;border-top-right-radius:var(--tblr-border-radius-xl)!important}.rounded-top-5{border-top-left-radius:var(--tblr-border-radius-xxl)!important;border-top-right-radius:var(--tblr-border-radius-xxl)!important}.rounded-top-circle{border-top-left-radius:50%!important;border-top-right-radius:50%!important}.rounded-top-pill{border-top-left-radius:var(--tblr-border-radius-pill)!important;border-top-right-radius:var(--tblr-border-radius-pill)!important}.rounded-end{border-top-right-radius:var(--tblr-border-radius)!important;border-bottom-right-radius:var(--tblr-border-radius)!important}.rounded-end-0{border-top-right-radius:0!important;border-bottom-right-radius:0!important}.rounded-end-1{border-top-right-radius:var(--tblr-border-radius-sm)!important;border-bottom-right-radius:var(--tblr-border-radius-sm)!important}.rounded-end-2{border-top-right-radius:var(--tblr-border-radius)!important;border-bottom-right-radius:var(--tblr-border-radius)!important}.rounded-end-3{border-top-right-radius:var(--tblr-border-radius-lg)!important;border-bottom-right-radius:var(--tblr-border-radius-lg)!important}.rounded-end-4{border-top-right-radius:var(--tblr-border-radius-xl)!important;border-bottom-right-radius:var(--tblr-border-radius-xl)!important}.rounded-end-5{border-top-right-radius:var(--tblr-border-radius-xxl)!important;border-bottom-right-radius:var(--tblr-border-radius-xxl)!important}.rounded-end-circle{border-top-right-radius:50%!important;border-bottom-right-radius:50%!important}.rounded-end-pill{border-top-right-radius:var(--tblr-border-radius-pill)!important;border-bottom-right-radius:var(--tblr-border-radius-pill)!important}.rounded-bottom{border-bottom-right-radius:var(--tblr-border-radius)!important;border-bottom-left-radius:var(--tblr-border-radius)!important}.rounded-bottom-0{border-bottom-right-radius:0!important;border-bottom-left-radius:0!important}.rounded-bottom-1{border-bottom-right-radius:var(--tblr-border-radius-sm)!important;border-bottom-left-radius:var(--tblr-border-radius-sm)!important}.rounded-bottom-2{border-bottom-right-radius:var(--tblr-border-radius)!important;border-bottom-left-radius:var(--tblr-border-radius)!important}.rounded-bottom-3{border-bottom-right-radius:var(--tblr-border-radius-lg)!important;border-bottom-left-radius:var(--tblr-border-radius-lg)!important}.rounded-bottom-4{border-bottom-right-radius:var(--tblr-border-radius-xl)!important;border-bottom-left-radius:var(--tblr-border-radius-xl)!important}.rounded-bottom-5{border-bottom-right-radius:var(--tblr-border-radius-xxl)!important;border-bottom-left-radius:var(--tblr-border-radius-xxl)!important}.rounded-bottom-circle{border-bottom-right-radius:50%!important;border-bottom-left-radius:50%!important}.rounded-bottom-pill{border-bottom-right-radius:var(--tblr-border-radius-pill)!important;border-bottom-left-radius:var(--tblr-border-radius-pill)!important}.rounded-start{border-bottom-left-radius:var(--tblr-border-radius)!important;border-top-left-radius:var(--tblr-border-radius)!important}.rounded-start-0{border-bottom-left-radius:0!important;border-top-left-radius:0!important}.rounded-start-1{border-bottom-left-radius:var(--tblr-border-radius-sm)!important;border-top-left-radius:var(--tblr-border-radius-sm)!important}.rounded-start-2{border-bottom-left-radius:var(--tblr-border-radius)!important;border-top-left-radius:var(--tblr-border-radius)!important}.rounded-start-3{border-bottom-left-radius:var(--tblr-border-radius-lg)!important;border-top-left-radius:var(--tblr-border-radius-lg)!important}.rounded-start-4{border-bottom-left-radius:var(--tblr-border-radius-xl)!important;border-top-left-radius:var(--tblr-border-radius-xl)!important}.rounded-start-5{border-bottom-left-radius:var(--tblr-border-radius-xxl)!important;border-top-left-radius:var(--tblr-border-radius-xxl)!important}.rounded-start-circle{border-bottom-left-radius:50%!important;border-top-left-radius:50%!important}.rounded-start-pill{border-bottom-left-radius:var(--tblr-border-radius-pill)!important;border-top-left-radius:var(--tblr-border-radius-pill)!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}.z-n1{z-index:-1!important}.z-0{z-index:0!important}.z-1{z-index:1!important}.z-2{z-index:2!important}.z-3{z-index:3!important}.object-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-scale-down{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-none{-o-object-fit:none!important;object-fit:none!important}.tracking-tight{letter-spacing:-.05em!important}.tracking-normal{letter-spacing:0!important}.tracking-wide{letter-spacing:.05em!important}.cursor-auto{cursor:auto!important}.cursor-pointer{cursor:pointer!important}.cursor-move{cursor:move!important}.cursor-not-allowed{cursor:not-allowed!important}.cursor-zoom-in{cursor:zoom-in!important}.cursor-zoom-out{cursor:zoom-out!important}.cursor-default{cursor:default!important}.cursor-none{cursor:none!important}.cursor-help{cursor:help!important}.cursor-progress{cursor:progress!important}.cursor-wait{cursor:wait!important}.cursor-text{cursor:text!important}.cursor-v-text{cursor:vertical-text!important}.cursor-grab{cursor:-webkit-grab!important;cursor:grab!important}.cursor-grabbing{cursor:-webkit-grabbing!important;cursor:grabbing!important}.border-x{border-left:var(--tblr-border-width) var(--tblr-border-style) rgba(4,32,69,.14)!important;border-right:var(--tblr-border-width) var(--tblr-border-style) rgba(4,32,69,.14)!important}.border-x-wide{border-left:2px var(--tblr-border-style) rgba(4,32,69,.14)!important;border-right:2px var(--tblr-border-style) rgba(4,32,69,.14)!important}.border-x-0{border-left:0!important;border-right:0!important}.border-y{border-top:var(--tblr-border-width) var(--tblr-border-style) rgba(4,32,69,.14)!important;border-bottom:var(--tblr-border-width) var(--tblr-border-style) rgba(4,32,69,.14)!important}.border-y-wide{border-top:2px var(--tblr-border-style) rgba(4,32,69,.14)!important;border-bottom:2px var(--tblr-border-style) rgba(4,32,69,.14)!important}.border-y-0{border-top:0!important;border-bottom:0!important}.columns-2{-moz-columns:2!important;columns:2!important}.columns-3{-moz-columns:3!important;columns:3!important}.columns-4{-moz-columns:4!important;columns:4!important}@media (min-width:576px){.float-sm-start{float:left!important}.float-sm-end{float:right!important}.float-sm-none{float:none!important}.object-fit-sm-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-sm-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-sm-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-sm-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-sm-none{-o-object-fit:none!important;object-fit:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-grid{display:grid!important}.d-sm-inline-grid{display:inline-grid!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}.d-sm-none{display:none!important}.flex-sm-fill{flex:1 1 auto!important}.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.justify-content-sm-evenly{justify-content:space-evenly!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}.order-sm-first{order:-1!important}.order-sm-0{order:0!important}.order-sm-1{order:1!important}.order-sm-2{order:2!important}.order-sm-3{order:3!important}.order-sm-4{order:4!important}.order-sm-5{order:5!important}.order-sm-last{order:6!important}.m-sm-0{margin:0!important}.m-sm-1{margin:.25rem!important}.m-sm-2{margin:.5rem!important}.m-sm-3{margin:1rem!important}.m-sm-4{margin:1.5rem!important}.m-sm-5{margin:2rem!important}.m-sm-6{margin:3rem!important}.m-sm-7{margin:5rem!important}.m-sm-8{margin:8rem!important}.m-sm-auto{margin:auto!important}.mx-sm-0{margin-right:0!important;margin-left:0!important}.mx-sm-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-sm-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-sm-3{margin-right:1rem!important;margin-left:1rem!important}.mx-sm-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-sm-5{margin-right:2rem!important;margin-left:2rem!important}.mx-sm-6{margin-right:3rem!important;margin-left:3rem!important}.mx-sm-7{margin-right:5rem!important;margin-left:5rem!important}.mx-sm-8{margin-right:8rem!important;margin-left:8rem!important}.mx-sm-auto{margin-right:auto!important;margin-left:auto!important}.my-sm-0{margin-top:0!important;margin-bottom:0!important}.my-sm-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-sm-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-sm-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-sm-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-sm-5{margin-top:2rem!important;margin-bottom:2rem!important}.my-sm-6{margin-top:3rem!important;margin-bottom:3rem!important}.my-sm-7{margin-top:5rem!important;margin-bottom:5rem!important}.my-sm-8{margin-top:8rem!important;margin-bottom:8rem!important}.my-sm-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-sm-0{margin-top:0!important}.mt-sm-1{margin-top:.25rem!important}.mt-sm-2{margin-top:.5rem!important}.mt-sm-3{margin-top:1rem!important}.mt-sm-4{margin-top:1.5rem!important}.mt-sm-5{margin-top:2rem!important}.mt-sm-6{margin-top:3rem!important}.mt-sm-7{margin-top:5rem!important}.mt-sm-8{margin-top:8rem!important}.mt-sm-auto{margin-top:auto!important}.me-sm-0{margin-right:0!important}.me-sm-1{margin-right:.25rem!important}.me-sm-2{margin-right:.5rem!important}.me-sm-3{margin-right:1rem!important}.me-sm-4{margin-right:1.5rem!important}.me-sm-5{margin-right:2rem!important}.me-sm-6{margin-right:3rem!important}.me-sm-7{margin-right:5rem!important}.me-sm-8{margin-right:8rem!important}.me-sm-auto{margin-right:auto!important}.mb-sm-0{margin-bottom:0!important}.mb-sm-1{margin-bottom:.25rem!important}.mb-sm-2{margin-bottom:.5rem!important}.mb-sm-3{margin-bottom:1rem!important}.mb-sm-4{margin-bottom:1.5rem!important}.mb-sm-5{margin-bottom:2rem!important}.mb-sm-6{margin-bottom:3rem!important}.mb-sm-7{margin-bottom:5rem!important}.mb-sm-8{margin-bottom:8rem!important}.mb-sm-auto{margin-bottom:auto!important}.ms-sm-0{margin-left:0!important}.ms-sm-1{margin-left:.25rem!important}.ms-sm-2{margin-left:.5rem!important}.ms-sm-3{margin-left:1rem!important}.ms-sm-4{margin-left:1.5rem!important}.ms-sm-5{margin-left:2rem!important}.ms-sm-6{margin-left:3rem!important}.ms-sm-7{margin-left:5rem!important}.ms-sm-8{margin-left:8rem!important}.ms-sm-auto{margin-left:auto!important}.p-sm-0{padding:0!important}.p-sm-1{padding:.25rem!important}.p-sm-2{padding:.5rem!important}.p-sm-3{padding:1rem!important}.p-sm-4{padding:1.5rem!important}.p-sm-5{padding:2rem!important}.p-sm-6{padding:3rem!important}.p-sm-7{padding:5rem!important}.p-sm-8{padding:8rem!important}.px-sm-0{padding-right:0!important;padding-left:0!important}.px-sm-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-sm-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-sm-3{padding-right:1rem!important;padding-left:1rem!important}.px-sm-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-sm-5{padding-right:2rem!important;padding-left:2rem!important}.px-sm-6{padding-right:3rem!important;padding-left:3rem!important}.px-sm-7{padding-right:5rem!important;padding-left:5rem!important}.px-sm-8{padding-right:8rem!important;padding-left:8rem!important}.py-sm-0{padding-top:0!important;padding-bottom:0!important}.py-sm-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-sm-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-sm-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-sm-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-sm-5{padding-top:2rem!important;padding-bottom:2rem!important}.py-sm-6{padding-top:3rem!important;padding-bottom:3rem!important}.py-sm-7{padding-top:5rem!important;padding-bottom:5rem!important}.py-sm-8{padding-top:8rem!important;padding-bottom:8rem!important}.pt-sm-0{padding-top:0!important}.pt-sm-1{padding-top:.25rem!important}.pt-sm-2{padding-top:.5rem!important}.pt-sm-3{padding-top:1rem!important}.pt-sm-4{padding-top:1.5rem!important}.pt-sm-5{padding-top:2rem!important}.pt-sm-6{padding-top:3rem!important}.pt-sm-7{padding-top:5rem!important}.pt-sm-8{padding-top:8rem!important}.pe-sm-0{padding-right:0!important}.pe-sm-1{padding-right:.25rem!important}.pe-sm-2{padding-right:.5rem!important}.pe-sm-3{padding-right:1rem!important}.pe-sm-4{padding-right:1.5rem!important}.pe-sm-5{padding-right:2rem!important}.pe-sm-6{padding-right:3rem!important}.pe-sm-7{padding-right:5rem!important}.pe-sm-8{padding-right:8rem!important}.pb-sm-0{padding-bottom:0!important}.pb-sm-1{padding-bottom:.25rem!important}.pb-sm-2{padding-bottom:.5rem!important}.pb-sm-3{padding-bottom:1rem!important}.pb-sm-4{padding-bottom:1.5rem!important}.pb-sm-5{padding-bottom:2rem!important}.pb-sm-6{padding-bottom:3rem!important}.pb-sm-7{padding-bottom:5rem!important}.pb-sm-8{padding-bottom:8rem!important}.ps-sm-0{padding-left:0!important}.ps-sm-1{padding-left:.25rem!important}.ps-sm-2{padding-left:.5rem!important}.ps-sm-3{padding-left:1rem!important}.ps-sm-4{padding-left:1.5rem!important}.ps-sm-5{padding-left:2rem!important}.ps-sm-6{padding-left:3rem!important}.ps-sm-7{padding-left:5rem!important}.ps-sm-8{padding-left:8rem!important}.gap-sm-0{gap:0!important}.gap-sm-1{gap:.25rem!important}.gap-sm-2{gap:.5rem!important}.gap-sm-3{gap:1rem!important}.gap-sm-4{gap:1.5rem!important}.gap-sm-5{gap:2rem!important}.gap-sm-6{gap:3rem!important}.gap-sm-7{gap:5rem!important}.gap-sm-8{gap:8rem!important}.row-gap-sm-0{row-gap:0!important}.row-gap-sm-1{row-gap:.25rem!important}.row-gap-sm-2{row-gap:.5rem!important}.row-gap-sm-3{row-gap:1rem!important}.row-gap-sm-4{row-gap:1.5rem!important}.row-gap-sm-5{row-gap:2rem!important}.row-gap-sm-6{row-gap:3rem!important}.row-gap-sm-7{row-gap:5rem!important}.row-gap-sm-8{row-gap:8rem!important}.column-gap-sm-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-sm-1{-moz-column-gap:.25rem!important;column-gap:.25rem!important}.column-gap-sm-2{-moz-column-gap:.5rem!important;column-gap:.5rem!important}.column-gap-sm-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-sm-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-sm-5{-moz-column-gap:2rem!important;column-gap:2rem!important}.column-gap-sm-6{-moz-column-gap:3rem!important;column-gap:3rem!important}.column-gap-sm-7{-moz-column-gap:5rem!important;column-gap:5rem!important}.column-gap-sm-8{-moz-column-gap:8rem!important;column-gap:8rem!important}.text-sm-start{text-align:left!important}.text-sm-end{text-align:right!important}.text-sm-center{text-align:center!important}.columns-sm-2{-moz-columns:2!important;columns:2!important}.columns-sm-3{-moz-columns:3!important;columns:3!important}.columns-sm-4{-moz-columns:4!important;columns:4!important}}@media (min-width:768px){.float-md-start{float:left!important}.float-md-end{float:right!important}.float-md-none{float:none!important}.object-fit-md-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-md-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-md-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-md-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-md-none{-o-object-fit:none!important;object-fit:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-grid{display:grid!important}.d-md-inline-grid{display:inline-grid!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}.d-md-none{display:none!important}.flex-md-fill{flex:1 1 auto!important}.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.justify-content-md-evenly{justify-content:space-evenly!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}.order-md-first{order:-1!important}.order-md-0{order:0!important}.order-md-1{order:1!important}.order-md-2{order:2!important}.order-md-3{order:3!important}.order-md-4{order:4!important}.order-md-5{order:5!important}.order-md-last{order:6!important}.m-md-0{margin:0!important}.m-md-1{margin:.25rem!important}.m-md-2{margin:.5rem!important}.m-md-3{margin:1rem!important}.m-md-4{margin:1.5rem!important}.m-md-5{margin:2rem!important}.m-md-6{margin:3rem!important}.m-md-7{margin:5rem!important}.m-md-8{margin:8rem!important}.m-md-auto{margin:auto!important}.mx-md-0{margin-right:0!important;margin-left:0!important}.mx-md-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-md-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-md-3{margin-right:1rem!important;margin-left:1rem!important}.mx-md-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-md-5{margin-right:2rem!important;margin-left:2rem!important}.mx-md-6{margin-right:3rem!important;margin-left:3rem!important}.mx-md-7{margin-right:5rem!important;margin-left:5rem!important}.mx-md-8{margin-right:8rem!important;margin-left:8rem!important}.mx-md-auto{margin-right:auto!important;margin-left:auto!important}.my-md-0{margin-top:0!important;margin-bottom:0!important}.my-md-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-md-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-md-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-md-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-md-5{margin-top:2rem!important;margin-bottom:2rem!important}.my-md-6{margin-top:3rem!important;margin-bottom:3rem!important}.my-md-7{margin-top:5rem!important;margin-bottom:5rem!important}.my-md-8{margin-top:8rem!important;margin-bottom:8rem!important}.my-md-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-md-0{margin-top:0!important}.mt-md-1{margin-top:.25rem!important}.mt-md-2{margin-top:.5rem!important}.mt-md-3{margin-top:1rem!important}.mt-md-4{margin-top:1.5rem!important}.mt-md-5{margin-top:2rem!important}.mt-md-6{margin-top:3rem!important}.mt-md-7{margin-top:5rem!important}.mt-md-8{margin-top:8rem!important}.mt-md-auto{margin-top:auto!important}.me-md-0{margin-right:0!important}.me-md-1{margin-right:.25rem!important}.me-md-2{margin-right:.5rem!important}.me-md-3{margin-right:1rem!important}.me-md-4{margin-right:1.5rem!important}.me-md-5{margin-right:2rem!important}.me-md-6{margin-right:3rem!important}.me-md-7{margin-right:5rem!important}.me-md-8{margin-right:8rem!important}.me-md-auto{margin-right:auto!important}.mb-md-0{margin-bottom:0!important}.mb-md-1{margin-bottom:.25rem!important}.mb-md-2{margin-bottom:.5rem!important}.mb-md-3{margin-bottom:1rem!important}.mb-md-4{margin-bottom:1.5rem!important}.mb-md-5{margin-bottom:2rem!important}.mb-md-6{margin-bottom:3rem!important}.mb-md-7{margin-bottom:5rem!important}.mb-md-8{margin-bottom:8rem!important}.mb-md-auto{margin-bottom:auto!important}.ms-md-0{margin-left:0!important}.ms-md-1{margin-left:.25rem!important}.ms-md-2{margin-left:.5rem!important}.ms-md-3{margin-left:1rem!important}.ms-md-4{margin-left:1.5rem!important}.ms-md-5{margin-left:2rem!important}.ms-md-6{margin-left:3rem!important}.ms-md-7{margin-left:5rem!important}.ms-md-8{margin-left:8rem!important}.ms-md-auto{margin-left:auto!important}.p-md-0{padding:0!important}.p-md-1{padding:.25rem!important}.p-md-2{padding:.5rem!important}.p-md-3{padding:1rem!important}.p-md-4{padding:1.5rem!important}.p-md-5{padding:2rem!important}.p-md-6{padding:3rem!important}.p-md-7{padding:5rem!important}.p-md-8{padding:8rem!important}.px-md-0{padding-right:0!important;padding-left:0!important}.px-md-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-md-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-md-3{padding-right:1rem!important;padding-left:1rem!important}.px-md-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-md-5{padding-right:2rem!important;padding-left:2rem!important}.px-md-6{padding-right:3rem!important;padding-left:3rem!important}.px-md-7{padding-right:5rem!important;padding-left:5rem!important}.px-md-8{padding-right:8rem!important;padding-left:8rem!important}.py-md-0{padding-top:0!important;padding-bottom:0!important}.py-md-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-md-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-md-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-md-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-md-5{padding-top:2rem!important;padding-bottom:2rem!important}.py-md-6{padding-top:3rem!important;padding-bottom:3rem!important}.py-md-7{padding-top:5rem!important;padding-bottom:5rem!important}.py-md-8{padding-top:8rem!important;padding-bottom:8rem!important}.pt-md-0{padding-top:0!important}.pt-md-1{padding-top:.25rem!important}.pt-md-2{padding-top:.5rem!important}.pt-md-3{padding-top:1rem!important}.pt-md-4{padding-top:1.5rem!important}.pt-md-5{padding-top:2rem!important}.pt-md-6{padding-top:3rem!important}.pt-md-7{padding-top:5rem!important}.pt-md-8{padding-top:8rem!important}.pe-md-0{padding-right:0!important}.pe-md-1{padding-right:.25rem!important}.pe-md-2{padding-right:.5rem!important}.pe-md-3{padding-right:1rem!important}.pe-md-4{padding-right:1.5rem!important}.pe-md-5{padding-right:2rem!important}.pe-md-6{padding-right:3rem!important}.pe-md-7{padding-right:5rem!important}.pe-md-8{padding-right:8rem!important}.pb-md-0{padding-bottom:0!important}.pb-md-1{padding-bottom:.25rem!important}.pb-md-2{padding-bottom:.5rem!important}.pb-md-3{padding-bottom:1rem!important}.pb-md-4{padding-bottom:1.5rem!important}.pb-md-5{padding-bottom:2rem!important}.pb-md-6{padding-bottom:3rem!important}.pb-md-7{padding-bottom:5rem!important}.pb-md-8{padding-bottom:8rem!important}.ps-md-0{padding-left:0!important}.ps-md-1{padding-left:.25rem!important}.ps-md-2{padding-left:.5rem!important}.ps-md-3{padding-left:1rem!important}.ps-md-4{padding-left:1.5rem!important}.ps-md-5{padding-left:2rem!important}.ps-md-6{padding-left:3rem!important}.ps-md-7{padding-left:5rem!important}.ps-md-8{padding-left:8rem!important}.gap-md-0{gap:0!important}.gap-md-1{gap:.25rem!important}.gap-md-2{gap:.5rem!important}.gap-md-3{gap:1rem!important}.gap-md-4{gap:1.5rem!important}.gap-md-5{gap:2rem!important}.gap-md-6{gap:3rem!important}.gap-md-7{gap:5rem!important}.gap-md-8{gap:8rem!important}.row-gap-md-0{row-gap:0!important}.row-gap-md-1{row-gap:.25rem!important}.row-gap-md-2{row-gap:.5rem!important}.row-gap-md-3{row-gap:1rem!important}.row-gap-md-4{row-gap:1.5rem!important}.row-gap-md-5{row-gap:2rem!important}.row-gap-md-6{row-gap:3rem!important}.row-gap-md-7{row-gap:5rem!important}.row-gap-md-8{row-gap:8rem!important}.column-gap-md-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-md-1{-moz-column-gap:.25rem!important;column-gap:.25rem!important}.column-gap-md-2{-moz-column-gap:.5rem!important;column-gap:.5rem!important}.column-gap-md-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-md-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-md-5{-moz-column-gap:2rem!important;column-gap:2rem!important}.column-gap-md-6{-moz-column-gap:3rem!important;column-gap:3rem!important}.column-gap-md-7{-moz-column-gap:5rem!important;column-gap:5rem!important}.column-gap-md-8{-moz-column-gap:8rem!important;column-gap:8rem!important}.text-md-start{text-align:left!important}.text-md-end{text-align:right!important}.text-md-center{text-align:center!important}.columns-md-2{-moz-columns:2!important;columns:2!important}.columns-md-3{-moz-columns:3!important;columns:3!important}.columns-md-4{-moz-columns:4!important;columns:4!important}}@media (min-width:992px){.float-lg-start{float:left!important}.float-lg-end{float:right!important}.float-lg-none{float:none!important}.object-fit-lg-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-lg-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-lg-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-lg-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-lg-none{-o-object-fit:none!important;object-fit:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-grid{display:grid!important}.d-lg-inline-grid{display:inline-grid!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}.d-lg-none{display:none!important}.flex-lg-fill{flex:1 1 auto!important}.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.justify-content-lg-evenly{justify-content:space-evenly!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}.order-lg-first{order:-1!important}.order-lg-0{order:0!important}.order-lg-1{order:1!important}.order-lg-2{order:2!important}.order-lg-3{order:3!important}.order-lg-4{order:4!important}.order-lg-5{order:5!important}.order-lg-last{order:6!important}.m-lg-0{margin:0!important}.m-lg-1{margin:.25rem!important}.m-lg-2{margin:.5rem!important}.m-lg-3{margin:1rem!important}.m-lg-4{margin:1.5rem!important}.m-lg-5{margin:2rem!important}.m-lg-6{margin:3rem!important}.m-lg-7{margin:5rem!important}.m-lg-8{margin:8rem!important}.m-lg-auto{margin:auto!important}.mx-lg-0{margin-right:0!important;margin-left:0!important}.mx-lg-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-lg-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-lg-3{margin-right:1rem!important;margin-left:1rem!important}.mx-lg-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-lg-5{margin-right:2rem!important;margin-left:2rem!important}.mx-lg-6{margin-right:3rem!important;margin-left:3rem!important}.mx-lg-7{margin-right:5rem!important;margin-left:5rem!important}.mx-lg-8{margin-right:8rem!important;margin-left:8rem!important}.mx-lg-auto{margin-right:auto!important;margin-left:auto!important}.my-lg-0{margin-top:0!important;margin-bottom:0!important}.my-lg-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-lg-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-lg-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-lg-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-lg-5{margin-top:2rem!important;margin-bottom:2rem!important}.my-lg-6{margin-top:3rem!important;margin-bottom:3rem!important}.my-lg-7{margin-top:5rem!important;margin-bottom:5rem!important}.my-lg-8{margin-top:8rem!important;margin-bottom:8rem!important}.my-lg-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-lg-0{margin-top:0!important}.mt-lg-1{margin-top:.25rem!important}.mt-lg-2{margin-top:.5rem!important}.mt-lg-3{margin-top:1rem!important}.mt-lg-4{margin-top:1.5rem!important}.mt-lg-5{margin-top:2rem!important}.mt-lg-6{margin-top:3rem!important}.mt-lg-7{margin-top:5rem!important}.mt-lg-8{margin-top:8rem!important}.mt-lg-auto{margin-top:auto!important}.me-lg-0{margin-right:0!important}.me-lg-1{margin-right:.25rem!important}.me-lg-2{margin-right:.5rem!important}.me-lg-3{margin-right:1rem!important}.me-lg-4{margin-right:1.5rem!important}.me-lg-5{margin-right:2rem!important}.me-lg-6{margin-right:3rem!important}.me-lg-7{margin-right:5rem!important}.me-lg-8{margin-right:8rem!important}.me-lg-auto{margin-right:auto!important}.mb-lg-0{margin-bottom:0!important}.mb-lg-1{margin-bottom:.25rem!important}.mb-lg-2{margin-bottom:.5rem!important}.mb-lg-3{margin-bottom:1rem!important}.mb-lg-4{margin-bottom:1.5rem!important}.mb-lg-5{margin-bottom:2rem!important}.mb-lg-6{margin-bottom:3rem!important}.mb-lg-7{margin-bottom:5rem!important}.mb-lg-8{margin-bottom:8rem!important}.mb-lg-auto{margin-bottom:auto!important}.ms-lg-0{margin-left:0!important}.ms-lg-1{margin-left:.25rem!important}.ms-lg-2{margin-left:.5rem!important}.ms-lg-3{margin-left:1rem!important}.ms-lg-4{margin-left:1.5rem!important}.ms-lg-5{margin-left:2rem!important}.ms-lg-6{margin-left:3rem!important}.ms-lg-7{margin-left:5rem!important}.ms-lg-8{margin-left:8rem!important}.ms-lg-auto{margin-left:auto!important}.p-lg-0{padding:0!important}.p-lg-1{padding:.25rem!important}.p-lg-2{padding:.5rem!important}.p-lg-3{padding:1rem!important}.p-lg-4{padding:1.5rem!important}.p-lg-5{padding:2rem!important}.p-lg-6{padding:3rem!important}.p-lg-7{padding:5rem!important}.p-lg-8{padding:8rem!important}.px-lg-0{padding-right:0!important;padding-left:0!important}.px-lg-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-lg-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-lg-3{padding-right:1rem!important;padding-left:1rem!important}.px-lg-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-lg-5{padding-right:2rem!important;padding-left:2rem!important}.px-lg-6{padding-right:3rem!important;padding-left:3rem!important}.px-lg-7{padding-right:5rem!important;padding-left:5rem!important}.px-lg-8{padding-right:8rem!important;padding-left:8rem!important}.py-lg-0{padding-top:0!important;padding-bottom:0!important}.py-lg-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-lg-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-lg-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-lg-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-lg-5{padding-top:2rem!important;padding-bottom:2rem!important}.py-lg-6{padding-top:3rem!important;padding-bottom:3rem!important}.py-lg-7{padding-top:5rem!important;padding-bottom:5rem!important}.py-lg-8{padding-top:8rem!important;padding-bottom:8rem!important}.pt-lg-0{padding-top:0!important}.pt-lg-1{padding-top:.25rem!important}.pt-lg-2{padding-top:.5rem!important}.pt-lg-3{padding-top:1rem!important}.pt-lg-4{padding-top:1.5rem!important}.pt-lg-5{padding-top:2rem!important}.pt-lg-6{padding-top:3rem!important}.pt-lg-7{padding-top:5rem!important}.pt-lg-8{padding-top:8rem!important}.pe-lg-0{padding-right:0!important}.pe-lg-1{padding-right:.25rem!important}.pe-lg-2{padding-right:.5rem!important}.pe-lg-3{padding-right:1rem!important}.pe-lg-4{padding-right:1.5rem!important}.pe-lg-5{padding-right:2rem!important}.pe-lg-6{padding-right:3rem!important}.pe-lg-7{padding-right:5rem!important}.pe-lg-8{padding-right:8rem!important}.pb-lg-0{padding-bottom:0!important}.pb-lg-1{padding-bottom:.25rem!important}.pb-lg-2{padding-bottom:.5rem!important}.pb-lg-3{padding-bottom:1rem!important}.pb-lg-4{padding-bottom:1.5rem!important}.pb-lg-5{padding-bottom:2rem!important}.pb-lg-6{padding-bottom:3rem!important}.pb-lg-7{padding-bottom:5rem!important}.pb-lg-8{padding-bottom:8rem!important}.ps-lg-0{padding-left:0!important}.ps-lg-1{padding-left:.25rem!important}.ps-lg-2{padding-left:.5rem!important}.ps-lg-3{padding-left:1rem!important}.ps-lg-4{padding-left:1.5rem!important}.ps-lg-5{padding-left:2rem!important}.ps-lg-6{padding-left:3rem!important}.ps-lg-7{padding-left:5rem!important}.ps-lg-8{padding-left:8rem!important}.gap-lg-0{gap:0!important}.gap-lg-1{gap:.25rem!important}.gap-lg-2{gap:.5rem!important}.gap-lg-3{gap:1rem!important}.gap-lg-4{gap:1.5rem!important}.gap-lg-5{gap:2rem!important}.gap-lg-6{gap:3rem!important}.gap-lg-7{gap:5rem!important}.gap-lg-8{gap:8rem!important}.row-gap-lg-0{row-gap:0!important}.row-gap-lg-1{row-gap:.25rem!important}.row-gap-lg-2{row-gap:.5rem!important}.row-gap-lg-3{row-gap:1rem!important}.row-gap-lg-4{row-gap:1.5rem!important}.row-gap-lg-5{row-gap:2rem!important}.row-gap-lg-6{row-gap:3rem!important}.row-gap-lg-7{row-gap:5rem!important}.row-gap-lg-8{row-gap:8rem!important}.column-gap-lg-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-lg-1{-moz-column-gap:.25rem!important;column-gap:.25rem!important}.column-gap-lg-2{-moz-column-gap:.5rem!important;column-gap:.5rem!important}.column-gap-lg-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-lg-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-lg-5{-moz-column-gap:2rem!important;column-gap:2rem!important}.column-gap-lg-6{-moz-column-gap:3rem!important;column-gap:3rem!important}.column-gap-lg-7{-moz-column-gap:5rem!important;column-gap:5rem!important}.column-gap-lg-8{-moz-column-gap:8rem!important;column-gap:8rem!important}.text-lg-start{text-align:left!important}.text-lg-end{text-align:right!important}.text-lg-center{text-align:center!important}.columns-lg-2{-moz-columns:2!important;columns:2!important}.columns-lg-3{-moz-columns:3!important;columns:3!important}.columns-lg-4{-moz-columns:4!important;columns:4!important}}@media (min-width:1200px){.float-xl-start{float:left!important}.float-xl-end{float:right!important}.float-xl-none{float:none!important}.object-fit-xl-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-xl-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-xl-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-xl-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-xl-none{-o-object-fit:none!important;object-fit:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-grid{display:grid!important}.d-xl-inline-grid{display:inline-grid!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}.d-xl-none{display:none!important}.flex-xl-fill{flex:1 1 auto!important}.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.justify-content-xl-evenly{justify-content:space-evenly!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}.order-xl-first{order:-1!important}.order-xl-0{order:0!important}.order-xl-1{order:1!important}.order-xl-2{order:2!important}.order-xl-3{order:3!important}.order-xl-4{order:4!important}.order-xl-5{order:5!important}.order-xl-last{order:6!important}.m-xl-0{margin:0!important}.m-xl-1{margin:.25rem!important}.m-xl-2{margin:.5rem!important}.m-xl-3{margin:1rem!important}.m-xl-4{margin:1.5rem!important}.m-xl-5{margin:2rem!important}.m-xl-6{margin:3rem!important}.m-xl-7{margin:5rem!important}.m-xl-8{margin:8rem!important}.m-xl-auto{margin:auto!important}.mx-xl-0{margin-right:0!important;margin-left:0!important}.mx-xl-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-xl-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-xl-3{margin-right:1rem!important;margin-left:1rem!important}.mx-xl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-xl-5{margin-right:2rem!important;margin-left:2rem!important}.mx-xl-6{margin-right:3rem!important;margin-left:3rem!important}.mx-xl-7{margin-right:5rem!important;margin-left:5rem!important}.mx-xl-8{margin-right:8rem!important;margin-left:8rem!important}.mx-xl-auto{margin-right:auto!important;margin-left:auto!important}.my-xl-0{margin-top:0!important;margin-bottom:0!important}.my-xl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xl-5{margin-top:2rem!important;margin-bottom:2rem!important}.my-xl-6{margin-top:3rem!important;margin-bottom:3rem!important}.my-xl-7{margin-top:5rem!important;margin-bottom:5rem!important}.my-xl-8{margin-top:8rem!important;margin-bottom:8rem!important}.my-xl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xl-0{margin-top:0!important}.mt-xl-1{margin-top:.25rem!important}.mt-xl-2{margin-top:.5rem!important}.mt-xl-3{margin-top:1rem!important}.mt-xl-4{margin-top:1.5rem!important}.mt-xl-5{margin-top:2rem!important}.mt-xl-6{margin-top:3rem!important}.mt-xl-7{margin-top:5rem!important}.mt-xl-8{margin-top:8rem!important}.mt-xl-auto{margin-top:auto!important}.me-xl-0{margin-right:0!important}.me-xl-1{margin-right:.25rem!important}.me-xl-2{margin-right:.5rem!important}.me-xl-3{margin-right:1rem!important}.me-xl-4{margin-right:1.5rem!important}.me-xl-5{margin-right:2rem!important}.me-xl-6{margin-right:3rem!important}.me-xl-7{margin-right:5rem!important}.me-xl-8{margin-right:8rem!important}.me-xl-auto{margin-right:auto!important}.mb-xl-0{margin-bottom:0!important}.mb-xl-1{margin-bottom:.25rem!important}.mb-xl-2{margin-bottom:.5rem!important}.mb-xl-3{margin-bottom:1rem!important}.mb-xl-4{margin-bottom:1.5rem!important}.mb-xl-5{margin-bottom:2rem!important}.mb-xl-6{margin-bottom:3rem!important}.mb-xl-7{margin-bottom:5rem!important}.mb-xl-8{margin-bottom:8rem!important}.mb-xl-auto{margin-bottom:auto!important}.ms-xl-0{margin-left:0!important}.ms-xl-1{margin-left:.25rem!important}.ms-xl-2{margin-left:.5rem!important}.ms-xl-3{margin-left:1rem!important}.ms-xl-4{margin-left:1.5rem!important}.ms-xl-5{margin-left:2rem!important}.ms-xl-6{margin-left:3rem!important}.ms-xl-7{margin-left:5rem!important}.ms-xl-8{margin-left:8rem!important}.ms-xl-auto{margin-left:auto!important}.p-xl-0{padding:0!important}.p-xl-1{padding:.25rem!important}.p-xl-2{padding:.5rem!important}.p-xl-3{padding:1rem!important}.p-xl-4{padding:1.5rem!important}.p-xl-5{padding:2rem!important}.p-xl-6{padding:3rem!important}.p-xl-7{padding:5rem!important}.p-xl-8{padding:8rem!important}.px-xl-0{padding-right:0!important;padding-left:0!important}.px-xl-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-xl-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-xl-3{padding-right:1rem!important;padding-left:1rem!important}.px-xl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-xl-5{padding-right:2rem!important;padding-left:2rem!important}.px-xl-6{padding-right:3rem!important;padding-left:3rem!important}.px-xl-7{padding-right:5rem!important;padding-left:5rem!important}.px-xl-8{padding-right:8rem!important;padding-left:8rem!important}.py-xl-0{padding-top:0!important;padding-bottom:0!important}.py-xl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xl-5{padding-top:2rem!important;padding-bottom:2rem!important}.py-xl-6{padding-top:3rem!important;padding-bottom:3rem!important}.py-xl-7{padding-top:5rem!important;padding-bottom:5rem!important}.py-xl-8{padding-top:8rem!important;padding-bottom:8rem!important}.pt-xl-0{padding-top:0!important}.pt-xl-1{padding-top:.25rem!important}.pt-xl-2{padding-top:.5rem!important}.pt-xl-3{padding-top:1rem!important}.pt-xl-4{padding-top:1.5rem!important}.pt-xl-5{padding-top:2rem!important}.pt-xl-6{padding-top:3rem!important}.pt-xl-7{padding-top:5rem!important}.pt-xl-8{padding-top:8rem!important}.pe-xl-0{padding-right:0!important}.pe-xl-1{padding-right:.25rem!important}.pe-xl-2{padding-right:.5rem!important}.pe-xl-3{padding-right:1rem!important}.pe-xl-4{padding-right:1.5rem!important}.pe-xl-5{padding-right:2rem!important}.pe-xl-6{padding-right:3rem!important}.pe-xl-7{padding-right:5rem!important}.pe-xl-8{padding-right:8rem!important}.pb-xl-0{padding-bottom:0!important}.pb-xl-1{padding-bottom:.25rem!important}.pb-xl-2{padding-bottom:.5rem!important}.pb-xl-3{padding-bottom:1rem!important}.pb-xl-4{padding-bottom:1.5rem!important}.pb-xl-5{padding-bottom:2rem!important}.pb-xl-6{padding-bottom:3rem!important}.pb-xl-7{padding-bottom:5rem!important}.pb-xl-8{padding-bottom:8rem!important}.ps-xl-0{padding-left:0!important}.ps-xl-1{padding-left:.25rem!important}.ps-xl-2{padding-left:.5rem!important}.ps-xl-3{padding-left:1rem!important}.ps-xl-4{padding-left:1.5rem!important}.ps-xl-5{padding-left:2rem!important}.ps-xl-6{padding-left:3rem!important}.ps-xl-7{padding-left:5rem!important}.ps-xl-8{padding-left:8rem!important}.gap-xl-0{gap:0!important}.gap-xl-1{gap:.25rem!important}.gap-xl-2{gap:.5rem!important}.gap-xl-3{gap:1rem!important}.gap-xl-4{gap:1.5rem!important}.gap-xl-5{gap:2rem!important}.gap-xl-6{gap:3rem!important}.gap-xl-7{gap:5rem!important}.gap-xl-8{gap:8rem!important}.row-gap-xl-0{row-gap:0!important}.row-gap-xl-1{row-gap:.25rem!important}.row-gap-xl-2{row-gap:.5rem!important}.row-gap-xl-3{row-gap:1rem!important}.row-gap-xl-4{row-gap:1.5rem!important}.row-gap-xl-5{row-gap:2rem!important}.row-gap-xl-6{row-gap:3rem!important}.row-gap-xl-7{row-gap:5rem!important}.row-gap-xl-8{row-gap:8rem!important}.column-gap-xl-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-xl-1{-moz-column-gap:.25rem!important;column-gap:.25rem!important}.column-gap-xl-2{-moz-column-gap:.5rem!important;column-gap:.5rem!important}.column-gap-xl-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-xl-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-xl-5{-moz-column-gap:2rem!important;column-gap:2rem!important}.column-gap-xl-6{-moz-column-gap:3rem!important;column-gap:3rem!important}.column-gap-xl-7{-moz-column-gap:5rem!important;column-gap:5rem!important}.column-gap-xl-8{-moz-column-gap:8rem!important;column-gap:8rem!important}.text-xl-start{text-align:left!important}.text-xl-end{text-align:right!important}.text-xl-center{text-align:center!important}.columns-xl-2{-moz-columns:2!important;columns:2!important}.columns-xl-3{-moz-columns:3!important;columns:3!important}.columns-xl-4{-moz-columns:4!important;columns:4!important}}@media (min-width:1400px){.float-xxl-start{float:left!important}.float-xxl-end{float:right!important}.float-xxl-none{float:none!important}.object-fit-xxl-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-xxl-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-xxl-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-xxl-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-xxl-none{-o-object-fit:none!important;object-fit:none!important}.d-xxl-inline{display:inline!important}.d-xxl-inline-block{display:inline-block!important}.d-xxl-block{display:block!important}.d-xxl-grid{display:grid!important}.d-xxl-inline-grid{display:inline-grid!important}.d-xxl-table{display:table!important}.d-xxl-table-row{display:table-row!important}.d-xxl-table-cell{display:table-cell!important}.d-xxl-flex{display:flex!important}.d-xxl-inline-flex{display:inline-flex!important}.d-xxl-none{display:none!important}.flex-xxl-fill{flex:1 1 auto!important}.flex-xxl-row{flex-direction:row!important}.flex-xxl-column{flex-direction:column!important}.flex-xxl-row-reverse{flex-direction:row-reverse!important}.flex-xxl-column-reverse{flex-direction:column-reverse!important}.flex-xxl-grow-0{flex-grow:0!important}.flex-xxl-grow-1{flex-grow:1!important}.flex-xxl-shrink-0{flex-shrink:0!important}.flex-xxl-shrink-1{flex-shrink:1!important}.flex-xxl-wrap{flex-wrap:wrap!important}.flex-xxl-nowrap{flex-wrap:nowrap!important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-xxl-start{justify-content:flex-start!important}.justify-content-xxl-end{justify-content:flex-end!important}.justify-content-xxl-center{justify-content:center!important}.justify-content-xxl-between{justify-content:space-between!important}.justify-content-xxl-around{justify-content:space-around!important}.justify-content-xxl-evenly{justify-content:space-evenly!important}.align-items-xxl-start{align-items:flex-start!important}.align-items-xxl-end{align-items:flex-end!important}.align-items-xxl-center{align-items:center!important}.align-items-xxl-baseline{align-items:baseline!important}.align-items-xxl-stretch{align-items:stretch!important}.align-content-xxl-start{align-content:flex-start!important}.align-content-xxl-end{align-content:flex-end!important}.align-content-xxl-center{align-content:center!important}.align-content-xxl-between{align-content:space-between!important}.align-content-xxl-around{align-content:space-around!important}.align-content-xxl-stretch{align-content:stretch!important}.align-self-xxl-auto{align-self:auto!important}.align-self-xxl-start{align-self:flex-start!important}.align-self-xxl-end{align-self:flex-end!important}.align-self-xxl-center{align-self:center!important}.align-self-xxl-baseline{align-self:baseline!important}.align-self-xxl-stretch{align-self:stretch!important}.order-xxl-first{order:-1!important}.order-xxl-0{order:0!important}.order-xxl-1{order:1!important}.order-xxl-2{order:2!important}.order-xxl-3{order:3!important}.order-xxl-4{order:4!important}.order-xxl-5{order:5!important}.order-xxl-last{order:6!important}.m-xxl-0{margin:0!important}.m-xxl-1{margin:.25rem!important}.m-xxl-2{margin:.5rem!important}.m-xxl-3{margin:1rem!important}.m-xxl-4{margin:1.5rem!important}.m-xxl-5{margin:2rem!important}.m-xxl-6{margin:3rem!important}.m-xxl-7{margin:5rem!important}.m-xxl-8{margin:8rem!important}.m-xxl-auto{margin:auto!important}.mx-xxl-0{margin-right:0!important;margin-left:0!important}.mx-xxl-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-xxl-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-xxl-3{margin-right:1rem!important;margin-left:1rem!important}.mx-xxl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-xxl-5{margin-right:2rem!important;margin-left:2rem!important}.mx-xxl-6{margin-right:3rem!important;margin-left:3rem!important}.mx-xxl-7{margin-right:5rem!important;margin-left:5rem!important}.mx-xxl-8{margin-right:8rem!important;margin-left:8rem!important}.mx-xxl-auto{margin-right:auto!important;margin-left:auto!important}.my-xxl-0{margin-top:0!important;margin-bottom:0!important}.my-xxl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xxl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xxl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xxl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xxl-5{margin-top:2rem!important;margin-bottom:2rem!important}.my-xxl-6{margin-top:3rem!important;margin-bottom:3rem!important}.my-xxl-7{margin-top:5rem!important;margin-bottom:5rem!important}.my-xxl-8{margin-top:8rem!important;margin-bottom:8rem!important}.my-xxl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xxl-0{margin-top:0!important}.mt-xxl-1{margin-top:.25rem!important}.mt-xxl-2{margin-top:.5rem!important}.mt-xxl-3{margin-top:1rem!important}.mt-xxl-4{margin-top:1.5rem!important}.mt-xxl-5{margin-top:2rem!important}.mt-xxl-6{margin-top:3rem!important}.mt-xxl-7{margin-top:5rem!important}.mt-xxl-8{margin-top:8rem!important}.mt-xxl-auto{margin-top:auto!important}.me-xxl-0{margin-right:0!important}.me-xxl-1{margin-right:.25rem!important}.me-xxl-2{margin-right:.5rem!important}.me-xxl-3{margin-right:1rem!important}.me-xxl-4{margin-right:1.5rem!important}.me-xxl-5{margin-right:2rem!important}.me-xxl-6{margin-right:3rem!important}.me-xxl-7{margin-right:5rem!important}.me-xxl-8{margin-right:8rem!important}.me-xxl-auto{margin-right:auto!important}.mb-xxl-0{margin-bottom:0!important}.mb-xxl-1{margin-bottom:.25rem!important}.mb-xxl-2{margin-bottom:.5rem!important}.mb-xxl-3{margin-bottom:1rem!important}.mb-xxl-4{margin-bottom:1.5rem!important}.mb-xxl-5{margin-bottom:2rem!important}.mb-xxl-6{margin-bottom:3rem!important}.mb-xxl-7{margin-bottom:5rem!important}.mb-xxl-8{margin-bottom:8rem!important}.mb-xxl-auto{margin-bottom:auto!important}.ms-xxl-0{margin-left:0!important}.ms-xxl-1{margin-left:.25rem!important}.ms-xxl-2{margin-left:.5rem!important}.ms-xxl-3{margin-left:1rem!important}.ms-xxl-4{margin-left:1.5rem!important}.ms-xxl-5{margin-left:2rem!important}.ms-xxl-6{margin-left:3rem!important}.ms-xxl-7{margin-left:5rem!important}.ms-xxl-8{margin-left:8rem!important}.ms-xxl-auto{margin-left:auto!important}.p-xxl-0{padding:0!important}.p-xxl-1{padding:.25rem!important}.p-xxl-2{padding:.5rem!important}.p-xxl-3{padding:1rem!important}.p-xxl-4{padding:1.5rem!important}.p-xxl-5{padding:2rem!important}.p-xxl-6{padding:3rem!important}.p-xxl-7{padding:5rem!important}.p-xxl-8{padding:8rem!important}.px-xxl-0{padding-right:0!important;padding-left:0!important}.px-xxl-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-xxl-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-xxl-3{padding-right:1rem!important;padding-left:1rem!important}.px-xxl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-xxl-5{padding-right:2rem!important;padding-left:2rem!important}.px-xxl-6{padding-right:3rem!important;padding-left:3rem!important}.px-xxl-7{padding-right:5rem!important;padding-left:5rem!important}.px-xxl-8{padding-right:8rem!important;padding-left:8rem!important}.py-xxl-0{padding-top:0!important;padding-bottom:0!important}.py-xxl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xxl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xxl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xxl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xxl-5{padding-top:2rem!important;padding-bottom:2rem!important}.py-xxl-6{padding-top:3rem!important;padding-bottom:3rem!important}.py-xxl-7{padding-top:5rem!important;padding-bottom:5rem!important}.py-xxl-8{padding-top:8rem!important;padding-bottom:8rem!important}.pt-xxl-0{padding-top:0!important}.pt-xxl-1{padding-top:.25rem!important}.pt-xxl-2{padding-top:.5rem!important}.pt-xxl-3{padding-top:1rem!important}.pt-xxl-4{padding-top:1.5rem!important}.pt-xxl-5{padding-top:2rem!important}.pt-xxl-6{padding-top:3rem!important}.pt-xxl-7{padding-top:5rem!important}.pt-xxl-8{padding-top:8rem!important}.pe-xxl-0{padding-right:0!important}.pe-xxl-1{padding-right:.25rem!important}.pe-xxl-2{padding-right:.5rem!important}.pe-xxl-3{padding-right:1rem!important}.pe-xxl-4{padding-right:1.5rem!important}.pe-xxl-5{padding-right:2rem!important}.pe-xxl-6{padding-right:3rem!important}.pe-xxl-7{padding-right:5rem!important}.pe-xxl-8{padding-right:8rem!important}.pb-xxl-0{padding-bottom:0!important}.pb-xxl-1{padding-bottom:.25rem!important}.pb-xxl-2{padding-bottom:.5rem!important}.pb-xxl-3{padding-bottom:1rem!important}.pb-xxl-4{padding-bottom:1.5rem!important}.pb-xxl-5{padding-bottom:2rem!important}.pb-xxl-6{padding-bottom:3rem!important}.pb-xxl-7{padding-bottom:5rem!important}.pb-xxl-8{padding-bottom:8rem!important}.ps-xxl-0{padding-left:0!important}.ps-xxl-1{padding-left:.25rem!important}.ps-xxl-2{padding-left:.5rem!important}.ps-xxl-3{padding-left:1rem!important}.ps-xxl-4{padding-left:1.5rem!important}.ps-xxl-5{padding-left:2rem!important}.ps-xxl-6{padding-left:3rem!important}.ps-xxl-7{padding-left:5rem!important}.ps-xxl-8{padding-left:8rem!important}.gap-xxl-0{gap:0!important}.gap-xxl-1{gap:.25rem!important}.gap-xxl-2{gap:.5rem!important}.gap-xxl-3{gap:1rem!important}.gap-xxl-4{gap:1.5rem!important}.gap-xxl-5{gap:2rem!important}.gap-xxl-6{gap:3rem!important}.gap-xxl-7{gap:5rem!important}.gap-xxl-8{gap:8rem!important}.row-gap-xxl-0{row-gap:0!important}.row-gap-xxl-1{row-gap:.25rem!important}.row-gap-xxl-2{row-gap:.5rem!important}.row-gap-xxl-3{row-gap:1rem!important}.row-gap-xxl-4{row-gap:1.5rem!important}.row-gap-xxl-5{row-gap:2rem!important}.row-gap-xxl-6{row-gap:3rem!important}.row-gap-xxl-7{row-gap:5rem!important}.row-gap-xxl-8{row-gap:8rem!important}.column-gap-xxl-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-xxl-1{-moz-column-gap:.25rem!important;column-gap:.25rem!important}.column-gap-xxl-2{-moz-column-gap:.5rem!important;column-gap:.5rem!important}.column-gap-xxl-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-xxl-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-xxl-5{-moz-column-gap:2rem!important;column-gap:2rem!important}.column-gap-xxl-6{-moz-column-gap:3rem!important;column-gap:3rem!important}.column-gap-xxl-7{-moz-column-gap:5rem!important;column-gap:5rem!important}.column-gap-xxl-8{-moz-column-gap:8rem!important;column-gap:8rem!important}.text-xxl-start{text-align:left!important}.text-xxl-end{text-align:right!important}.text-xxl-center{text-align:center!important}.columns-xxl-2{-moz-columns:2!important;columns:2!important}.columns-xxl-3{-moz-columns:3!important;columns:3!important}.columns-xxl-4{-moz-columns:4!important;columns:4!important}}@media print{.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-grid{display:grid!important}.d-print-inline-grid{display:inline-grid!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}.d-print-none{display:none!important}}:host,:root{font-size:16px;height:100%;--tblr-primary:#206bc4;--tblr-primary-rgb:32,107,196;--tblr-primary-fg:var(--tblr-light);--tblr-primary-darken:#1d60b0;--tblr-primary-lt:#e9f0f9;--tblr-primary-lt-rgb:233,240,249;--tblr-secondary:#667382;--tblr-secondary-rgb:102,115,130;--tblr-secondary-fg:var(--tblr-light);--tblr-secondary-darken:#5c6875;--tblr-secondary-lt:#f0f1f3;--tblr-secondary-lt-rgb:240,241,243;--tblr-success:#2fb344;--tblr-success-rgb:47,179,68;--tblr-success-fg:var(--tblr-light);--tblr-success-darken:#2aa13d;--tblr-success-lt:#eaf7ec;--tblr-success-lt-rgb:234,247,236;--tblr-info:#4299e1;--tblr-info-rgb:66,153,225;--tblr-info-fg:var(--tblr-light);--tblr-info-darken:#3b8acb;--tblr-info-lt:#ecf5fc;--tblr-info-lt-rgb:236,245,252;--tblr-warning:#f76707;--tblr-warning-rgb:247,103,7;--tblr-warning-fg:var(--tblr-light);--tblr-warning-darken:#de5d06;--tblr-warning-lt:#fef0e6;--tblr-warning-lt-rgb:254,240,230;--tblr-danger:#d63939;--tblr-danger-rgb:214,57,57;--tblr-danger-fg:var(--tblr-light);--tblr-danger-darken:#c13333;--tblr-danger-lt:#fbebeb;--tblr-danger-lt-rgb:251,235,235;--tblr-light:#fcfdfe;--tblr-light-rgb:252,253,254;--tblr-light-fg:var(--tblr-dark);--tblr-light-darken:#e3e4e5;--tblr-light-lt:white;--tblr-light-lt-rgb:255,255,255;--tblr-dark:#182433;--tblr-dark-rgb:24,36,51;--tblr-dark-fg:var(--tblr-light);--tblr-dark-darken:#16202e;--tblr-dark-lt:#e8e9eb;--tblr-dark-lt-rgb:232,233,235;--tblr-muted:#667382;--tblr-muted-rgb:102,115,130;--tblr-muted-fg:var(--tblr-light);--tblr-muted-darken:#5c6875;--tblr-muted-lt:#f0f1f3;--tblr-muted-lt-rgb:240,241,243;--tblr-blue:#206bc4;--tblr-blue-rgb:32,107,196;--tblr-blue-fg:var(--tblr-light);--tblr-blue-darken:#1d60b0;--tblr-blue-lt:#e9f0f9;--tblr-blue-lt-rgb:233,240,249;--tblr-azure:#4299e1;--tblr-azure-rgb:66,153,225;--tblr-azure-fg:var(--tblr-light);--tblr-azure-darken:#3b8acb;--tblr-azure-lt:#ecf5fc;--tblr-azure-lt-rgb:236,245,252;--tblr-indigo:#4263eb;--tblr-indigo-rgb:66,99,235;--tblr-indigo-fg:var(--tblr-light);--tblr-indigo-darken:#3b59d4;--tblr-indigo-lt:#eceffd;--tblr-indigo-lt-rgb:236,239,253;--tblr-purple:#ae3ec9;--tblr-purple-rgb:174,62,201;--tblr-purple-fg:var(--tblr-light);--tblr-purple-darken:#9d38b5;--tblr-purple-lt:#f7ecfa;--tblr-purple-lt-rgb:247,236,250;--tblr-pink:#d6336c;--tblr-pink-rgb:214,51,108;--tblr-pink-fg:var(--tblr-light);--tblr-pink-darken:#c12e61;--tblr-pink-lt:#fbebf0;--tblr-pink-lt-rgb:251,235,240;--tblr-red:#d63939;--tblr-red-rgb:214,57,57;--tblr-red-fg:var(--tblr-light);--tblr-red-darken:#c13333;--tblr-red-lt:#fbebeb;--tblr-red-lt-rgb:251,235,235;--tblr-orange:#f76707;--tblr-orange-rgb:247,103,7;--tblr-orange-fg:var(--tblr-light);--tblr-orange-darken:#de5d06;--tblr-orange-lt:#fef0e6;--tblr-orange-lt-rgb:254,240,230;--tblr-yellow:#f59f00;--tblr-yellow-rgb:245,159,0;--tblr-yellow-fg:var(--tblr-light);--tblr-yellow-darken:#dd8f00;--tblr-yellow-lt:#fef5e6;--tblr-yellow-lt-rgb:254,245,230;--tblr-lime:#74b816;--tblr-lime-rgb:116,184,22;--tblr-lime-fg:var(--tblr-light);--tblr-lime-darken:#68a614;--tblr-lime-lt:#f1f8e8;--tblr-lime-lt-rgb:241,248,232;--tblr-green:#2fb344;--tblr-green-rgb:47,179,68;--tblr-green-fg:var(--tblr-light);--tblr-green-darken:#2aa13d;--tblr-green-lt:#eaf7ec;--tblr-green-lt-rgb:234,247,236;--tblr-teal:#0ca678;--tblr-teal-rgb:12,166,120;--tblr-teal-fg:var(--tblr-light);--tblr-teal-darken:#0b956c;--tblr-teal-lt:#e7f6f2;--tblr-teal-lt-rgb:231,246,242;--tblr-cyan:#17a2b8;--tblr-cyan-rgb:23,162,184;--tblr-cyan-fg:var(--tblr-light);--tblr-cyan-darken:#1592a6;--tblr-cyan-lt:#e8f6f8;--tblr-cyan-lt-rgb:232,246,248;--tblr-facebook:#1877f2;--tblr-facebook-rgb:24,119,242;--tblr-facebook-fg:var(--tblr-light);--tblr-facebook-darken:#166bda;--tblr-facebook-lt:#e8f1fe;--tblr-facebook-lt-rgb:232,241,254;--tblr-twitter:#1da1f2;--tblr-twitter-rgb:29,161,242;--tblr-twitter-fg:var(--tblr-light);--tblr-twitter-darken:#1a91da;--tblr-twitter-lt:#e8f6fe;--tblr-twitter-lt-rgb:232,246,254;--tblr-linkedin:#0a66c2;--tblr-linkedin-rgb:10,102,194;--tblr-linkedin-fg:var(--tblr-light);--tblr-linkedin-darken:#095caf;--tblr-linkedin-lt:#e7f0f9;--tblr-linkedin-lt-rgb:231,240,249;--tblr-google:#dc4e41;--tblr-google-rgb:220,78,65;--tblr-google-fg:var(--tblr-light);--tblr-google-darken:#c6463b;--tblr-google-lt:#fcedec;--tblr-google-lt-rgb:252,237,236;--tblr-youtube:#ff0000;--tblr-youtube-rgb:255,0,0;--tblr-youtube-fg:var(--tblr-light);--tblr-youtube-darken:#e60000;--tblr-youtube-lt:#ffe6e6;--tblr-youtube-lt-rgb:255,230,230;--tblr-vimeo:#1ab7ea;--tblr-vimeo-rgb:26,183,234;--tblr-vimeo-fg:var(--tblr-light);--tblr-vimeo-darken:#17a5d3;--tblr-vimeo-lt:#e8f8fd;--tblr-vimeo-lt-rgb:232,248,253;--tblr-dribbble:#ea4c89;--tblr-dribbble-rgb:234,76,137;--tblr-dribbble-fg:var(--tblr-light);--tblr-dribbble-darken:#d3447b;--tblr-dribbble-lt:#fdedf3;--tblr-dribbble-lt-rgb:253,237,243;--tblr-github:#181717;--tblr-github-rgb:24,23,23;--tblr-github-fg:var(--tblr-light);--tblr-github-darken:#161515;--tblr-github-lt:#e8e8e8;--tblr-github-lt-rgb:232,232,232;--tblr-instagram:#e4405f;--tblr-instagram-rgb:228,64,95;--tblr-instagram-fg:var(--tblr-light);--tblr-instagram-darken:#cd3a56;--tblr-instagram-lt:#fcecef;--tblr-instagram-lt-rgb:252,236,239;--tblr-pinterest:#bd081c;--tblr-pinterest-rgb:189,8,28;--tblr-pinterest-fg:var(--tblr-light);--tblr-pinterest-darken:#aa0719;--tblr-pinterest-lt:#f8e6e8;--tblr-pinterest-lt-rgb:248,230,232;--tblr-vk:#6383a8;--tblr-vk-rgb:99,131,168;--tblr-vk-fg:var(--tblr-light);--tblr-vk-darken:#597697;--tblr-vk-lt:#eff3f6;--tblr-vk-lt-rgb:239,243,246;--tblr-rss:#ffa500;--tblr-rss-rgb:255,165,0;--tblr-rss-fg:var(--tblr-light);--tblr-rss-darken:#e69500;--tblr-rss-lt:#fff6e6;--tblr-rss-lt-rgb:255,246,230;--tblr-flickr:#0063dc;--tblr-flickr-rgb:0,99,220;--tblr-flickr-fg:var(--tblr-light);--tblr-flickr-darken:#0059c6;--tblr-flickr-lt:#e6effc;--tblr-flickr-lt-rgb:230,239,252;--tblr-bitbucket:#0052cc;--tblr-bitbucket-rgb:0,82,204;--tblr-bitbucket-fg:var(--tblr-light);--tblr-bitbucket-darken:#004ab8;--tblr-bitbucket-lt:#e6eefa;--tblr-bitbucket-lt-rgb:230,238,250;--tblr-tabler:#206bc4;--tblr-tabler-rgb:32,107,196;--tblr-tabler-fg:var(--tblr-light);--tblr-tabler-darken:#1d60b0;--tblr-tabler-lt:#e9f0f9;--tblr-tabler-lt-rgb:233,240,249;--tblr-gray-50:#fcfdfe;--tblr-gray-50-rgb:252,253,254;--tblr-gray-50-fg:var(--tblr-dark);--tblr-gray-50-darken:#e3e4e5;--tblr-gray-50-lt:white;--tblr-gray-50-lt-rgb:255,255,255;--tblr-gray-100:#f6f8fb;--tblr-gray-100-rgb:246,248,251;--tblr-gray-100-fg:var(--tblr-dark);--tblr-gray-100-darken:#dddfe2;--tblr-gray-100-lt:#fefeff;--tblr-gray-100-lt-rgb:254,254,255;--tblr-gray-200:#eef1f4;--tblr-gray-200-rgb:238,241,244;--tblr-gray-200-fg:var(--tblr-dark);--tblr-gray-200-darken:#d6d9dc;--tblr-gray-200-lt:#fdfefe;--tblr-gray-200-lt-rgb:253,254,254;--tblr-gray-300:#dadfe5;--tblr-gray-300-rgb:218,223,229;--tblr-gray-300-fg:var(--tblr-dark);--tblr-gray-300-darken:#c4c9ce;--tblr-gray-300-lt:#fbfcfc;--tblr-gray-300-lt-rgb:251,252,252;--tblr-gray-400:#bbc3cd;--tblr-gray-400-rgb:187,195,205;--tblr-gray-400-fg:var(--tblr-light);--tblr-gray-400-darken:#a8b0b9;--tblr-gray-400-lt:#f8f9fa;--tblr-gray-400-lt-rgb:248,249,250;--tblr-gray-500:#929dab;--tblr-gray-500-rgb:146,157,171;--tblr-gray-500-fg:var(--tblr-light);--tblr-gray-500-darken:#838d9a;--tblr-gray-500-lt:#f4f5f7;--tblr-gray-500-lt-rgb:244,245,247;--tblr-gray-600:#667382;--tblr-gray-600-rgb:102,115,130;--tblr-gray-600-fg:var(--tblr-light);--tblr-gray-600-darken:#5c6875;--tblr-gray-600-lt:#f0f1f3;--tblr-gray-600-lt-rgb:240,241,243;--tblr-gray-700:#3a4859;--tblr-gray-700-rgb:58,72,89;--tblr-gray-700-fg:var(--tblr-light);--tblr-gray-700-darken:#344150;--tblr-gray-700-lt:#ebedee;--tblr-gray-700-lt-rgb:235,237,238;--tblr-gray-800:#182433;--tblr-gray-800-rgb:24,36,51;--tblr-gray-800-fg:var(--tblr-light);--tblr-gray-800-darken:#16202e;--tblr-gray-800-lt:#e8e9eb;--tblr-gray-800-lt-rgb:232,233,235;--tblr-gray-900:#040a11;--tblr-gray-900-rgb:4,10,17;--tblr-gray-900-fg:var(--tblr-light);--tblr-gray-900-darken:#04090f;--tblr-gray-900-lt:#e6e7e7;--tblr-gray-900-lt-rgb:230,231,231;--tblr-spacer-0:0;--tblr-spacer-1:.25rem;--tblr-spacer-2:.5rem;--tblr-spacer-3:1rem;--tblr-spacer-4:1.5rem;--tblr-spacer-5:2rem;--tblr-spacer-6:3rem;--tblr-spacer-7:5rem;--tblr-spacer-8:8rem;--tblr-spacer:1rem;--tblr-bg-surface:var(--tblr-white);--tblr-bg-surface-secondary:var(--tblr-gray-100);--tblr-bg-surface-tertiary:var(--tblr-gray-50);--tblr-bg-surface-dark:var(--tblr-dark);--tblr-bg-forms:var(--tblr-bg-surface);--tblr-border-color:#dadfe5;--tblr-border-color-translucent:rgba(4, 32, 69, .14);--tblr-border-dark-color:#bbc3cd;--tblr-border-dark-color-translucent:rgba(4, 32, 69, .27);--tblr-border-active-color:#b6bcc3;--tblr-icon-color:var(--tblr-gray-500);--tblr-active-bg:rgba(var(--tblr-primary-rgb), .04);--tblr-disabled-bg:var(--tblr-bg-surface-secondary);--tblr-disabled-color:var(--tblr-gray-300);--tblr-code-color:var(--tblr-gray-600);--tblr-code-bg:var(--tblr-bg-surface-secondary);--tblr-dark-mode-border-color:#1f2e41;--tblr-dark-mode-border-color-translucent:rgba(72, 110, 149, .14);--tblr-dark-mode-border-color-active:#2c415d;--tblr-dark-mode-border-dark-color:#1f2e41;--tblr-page-padding:var(--tblr-spacer-3);--tblr-page-padding-y:var(--tblr-spacer-4);--tblr-font-weight-light:300;--tblr-font-weight-normal:400;--tblr-font-weight-medium:500;--tblr-font-weight-bold:600;--tblr-font-weight-headings:var(--tblr-font-weight-bold);--tblr-font-size-h1:1.5rem;--tblr-font-size-h2:1.25rem;--tblr-font-size-h3:1rem;--tblr-font-size-h4:.875rem;--tblr-font-size-h5:.75rem;--tblr-font-size-h6:.625rem;--tblr-line-height-h1:2rem;--tblr-line-height-h2:1.75rem;--tblr-line-height-h3:1.5rem;--tblr-line-height-h4:1.25rem;--tblr-line-height-h5:1rem;--tblr-line-height-h6:1rem;--tblr-shadow:rgba(var(--tblr-body-color-rgb), .04) 0 2px 4px 0;--tblr-shadow-transparent:0 0 0 0 transparent;--tblr-shadow-button:0 1px 0 rgba(var(--tblr-body-color-rgb), .04);--tblr-shadow-button-inset:inset 0 -1px 0 rgba(var(--tblr-body-color-rgb), .2);--tblr-shadow-card:0 0 4px rgba(var(--tblr-body-color-rgb), .04);--tblr-shadow-card-hover:rgba(var(--tblr-body-color-rgb), .16) 0 2px 16px 0;--tblr-shadow-dropdown:0px 16px 24px 2px rgba(0, 0, 0, .07),0px 6px 30px 5px rgba(0, 0, 0, .06),0px 8px 10px -5px rgba(0, 0, 0, .1)}@media (max-width:991.98px){:host,:root{--tblr-page-padding:var(--tblr-spacer-2)}}@keyframes pulse{0%{opacity:1;transform:scale3d(.8,.8,.8)}50%{transform:scaleZ(1);opacity:1}to{opacity:1;transform:scale3d(.8,.8,.8)}}@keyframes tada{0%{transform:scaleZ(1)}10%,5%{transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-5deg)}15%,25%,35%,45%{transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,5deg)}20%,30%,40%{transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-5deg)}50%{transform:scaleZ(1)}}@keyframes rotate-360{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes blink{0%{opacity:0}50%{opacity:1}to{opacity:0}}body{letter-spacing:0;touch-action:manipulation;text-rendering:optimizeLegibility;font-feature-settings:"liga" 0;position:relative;min-height:100%;height:100%;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@media print{body{background:0 0}}*{scrollbar-color:rgba(var(--tblr-scrollbar-color,var(--tblr-body-color-rgb)),.16) transparent}::-webkit-scrollbar{width:1rem;height:1rem;-webkit-transition:background .3s;transition:background .3s}@media (prefers-reduced-motion:reduce){::-webkit-scrollbar{-webkit-transition:none;transition:none}}::-webkit-scrollbar-thumb{border-radius:1rem;border:5px solid transparent;box-shadow:inset 0 0 0 1rem rgba(var(--tblr-scrollbar-color,var(--tblr-body-color-rgb)),.16)}::-webkit-scrollbar-track{background:0 0}:hover::-webkit-scrollbar-thumb{box-shadow:inset 0 0 0 1rem rgba(var(--tblr-scrollbar-color,var(--tblr-body-color-rgb)),.32)}::-webkit-scrollbar-corner{background:0 0}.layout-fluid .container,.layout-fluid [class*=" container-"],.layout-fluid [class^=container-]{max-width:100%}.layout-boxed{--tblr-theme-boxed-border-radius:0;--tblr-theme-boxed-width:1320px}@media (min-width:768px){.layout-boxed{background:#182433 linear-gradient(to right,rgba(255,255,255,.1),transparent) fixed;padding:1rem;--tblr-theme-boxed-border-radius:4px}}.layout-boxed .page{margin:0 auto;max-width:var(--tblr-theme-boxed-width);border-radius:var(--tblr-theme-boxed-border-radius);color:var(--tblr-body-color)}@media (min-width:768px){.layout-boxed .page{border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);background:var(--tblr-body-bg)}}.layout-boxed .page>.navbar:first-child{border-top-left-radius:var(--tblr-theme-boxed-border-radius);border-top-right-radius:var(--tblr-theme-boxed-border-radius)}.navbar{--tblr-navbar-bg:var(--tblr-bg-surface);--tblr-navbar-border-width:var(--tblr-border-width);--tblr-navbar-active-border-color:var(--tblr-primary);--tblr-navbar-active-bg:rgba(0, 0, 0, .06);--tblr-navbar-color:var(--tblr-body-color);--tblr-navbar-border-color:var(--tblr-border-color);align-items:stretch;min-height:3.5rem;box-shadow:inset 0 calc(-1 * var(--tblr-navbar-border-width)) 0 0 var(--tblr-navbar-border-color);background:var(--tblr-navbar-bg);color:var(--tblr-navbar-color)}.navbar-collapse .navbar{flex-grow:1}.navbar.collapsing{min-height:0}.navbar .dropdown-menu{position:absolute;z-index:1030}.navbar .navbar-nav{min-height:3rem}.navbar .navbar-nav .nav-link{position:relative;min-width:2rem;min-height:2rem;justify-content:center;border-radius:var(--tblr-border-radius)}.navbar .navbar-nav .nav-link .badge{position:absolute;top:.375rem;right:.375rem;transform:translate(50%,-50%)}.navbar-nav{margin:0;padding:0}@media (max-width:575.98px){.navbar-expand-sm .navbar-collapse{flex-direction:column}.navbar-expand-sm .navbar-collapse [class^=container]{flex-direction:column;align-items:stretch;padding:0}.navbar-expand-sm .navbar-collapse .navbar-nav{margin-left:0;margin-right:0}.navbar-expand-sm .navbar-collapse .navbar-nav .nav-link{padding:.5rem calc(calc(var(--tblr-page-padding) * 2)/ 2);justify-content:flex-start}.navbar-expand-sm .navbar-collapse .dropdown-menu-columns{flex-direction:column}.navbar-expand-sm .navbar-collapse .dropdown-menu{padding:0;background:0 0;position:static;color:inherit;box-shadow:none;border:none;min-width:0;margin:0}.navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-item{min-width:0;display:flex;width:auto;padding-left:calc(calc(calc(var(--tblr-page-padding) * 2)/ 2) + 1.75rem);color:inherit}.navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-item.active,.navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-item:active{background:var(--tblr-navbar-active-bg)}.navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(calc(calc(var(--tblr-page-padding) * 2)/ 2) + 3.25rem)}.navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(calc(calc(var(--tblr-page-padding) * 2)/ 2) + 4.75rem)}.navbar-expand-sm .navbar-collapse .dropdown-toggle:after{margin-left:auto}.navbar-expand-sm .navbar-collapse .nav-item.active:after{border-bottom-width:0;border-left-width:3px;right:auto;top:0;bottom:0}}@media (min-width:576px){.navbar-expand-sm .navbar-collapse{width:auto;flex:1 1 auto}.navbar-expand-sm .nav-item.active{position:relative}.navbar-expand-sm .nav-item.active:after{content:"";position:absolute;left:0;right:0;bottom:-.25rem;border:0 var(--tblr-border-style) var(--tblr-navbar-active-border-color);border-bottom-width:2px}.navbar-expand-sm.navbar-vertical{box-shadow:inset calc(-1 * var(--tblr-navbar-border-width)) 0 0 0 var(--tblr-navbar-border-color)}.navbar-expand-sm.navbar-vertical.navbar-right{box-shadow:inset calc(1 * var(--tblr-navbar-border-width)) 0 0 0 var(--tblr-navbar-border-color)}.navbar-expand-sm.navbar-vertical~.navbar,.navbar-expand-sm.navbar-vertical~.page-wrapper{margin-left:15rem}.navbar-expand-sm.navbar-vertical.navbar-right~.navbar,.navbar-expand-sm.navbar-vertical.navbar-right~.page-wrapper{margin-left:0;margin-right:15rem}}@media (max-width:767.98px){.navbar-expand-md .navbar-collapse{flex-direction:column}.navbar-expand-md .navbar-collapse [class^=container]{flex-direction:column;align-items:stretch;padding:0}.navbar-expand-md .navbar-collapse .navbar-nav{margin-left:0;margin-right:0}.navbar-expand-md .navbar-collapse .navbar-nav .nav-link{padding:.5rem calc(calc(var(--tblr-page-padding) * 2)/ 2);justify-content:flex-start}.navbar-expand-md .navbar-collapse .dropdown-menu-columns{flex-direction:column}.navbar-expand-md .navbar-collapse .dropdown-menu{padding:0;background:0 0;position:static;color:inherit;box-shadow:none;border:none;min-width:0;margin:0}.navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-item{min-width:0;display:flex;width:auto;padding-left:calc(calc(calc(var(--tblr-page-padding) * 2)/ 2) + 1.75rem);color:inherit}.navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-item.active,.navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-item:active{background:var(--tblr-navbar-active-bg)}.navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(calc(calc(var(--tblr-page-padding) * 2)/ 2) + 3.25rem)}.navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(calc(calc(var(--tblr-page-padding) * 2)/ 2) + 4.75rem)}.navbar-expand-md .navbar-collapse .dropdown-toggle:after{margin-left:auto}.navbar-expand-md .navbar-collapse .nav-item.active:after{border-bottom-width:0;border-left-width:3px;right:auto;top:0;bottom:0}}@media (min-width:768px){.navbar-expand-md .navbar-collapse{width:auto;flex:1 1 auto}.navbar-expand-md .nav-item.active{position:relative}.navbar-expand-md .nav-item.active:after{content:"";position:absolute;left:0;right:0;bottom:-.25rem;border:0 var(--tblr-border-style) var(--tblr-navbar-active-border-color);border-bottom-width:2px}.navbar-expand-md.navbar-vertical{box-shadow:inset calc(-1 * var(--tblr-navbar-border-width)) 0 0 0 var(--tblr-navbar-border-color)}.navbar-expand-md.navbar-vertical.navbar-right{box-shadow:inset calc(1 * var(--tblr-navbar-border-width)) 0 0 0 var(--tblr-navbar-border-color)}.navbar-expand-md.navbar-vertical~.navbar,.navbar-expand-md.navbar-vertical~.page-wrapper{margin-left:15rem}.navbar-expand-md.navbar-vertical.navbar-right~.navbar,.navbar-expand-md.navbar-vertical.navbar-right~.page-wrapper{margin-left:0;margin-right:15rem}}@media (max-width:991.98px){.navbar-expand-lg .navbar-collapse{flex-direction:column}.navbar-expand-lg .navbar-collapse [class^=container]{flex-direction:column;align-items:stretch;padding:0}.navbar-expand-lg .navbar-collapse .navbar-nav{margin-left:0;margin-right:0}.navbar-expand-lg .navbar-collapse .navbar-nav .nav-link{padding:.5rem calc(calc(var(--tblr-page-padding) * 2)/ 2);justify-content:flex-start}.navbar-expand-lg .navbar-collapse .dropdown-menu-columns{flex-direction:column}.navbar-expand-lg .navbar-collapse .dropdown-menu{padding:0;background:0 0;position:static;color:inherit;box-shadow:none;border:none;min-width:0;margin:0}.navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-item{min-width:0;display:flex;width:auto;padding-left:calc(calc(calc(var(--tblr-page-padding) * 2)/ 2) + 1.75rem);color:inherit}.navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-item.active,.navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-item:active{background:var(--tblr-navbar-active-bg)}.navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(calc(calc(var(--tblr-page-padding) * 2)/ 2) + 3.25rem)}.navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(calc(calc(var(--tblr-page-padding) * 2)/ 2) + 4.75rem)}.navbar-expand-lg .navbar-collapse .dropdown-toggle:after{margin-left:auto}.navbar-expand-lg .navbar-collapse .nav-item.active:after{border-bottom-width:0;border-left-width:3px;right:auto;top:0;bottom:0}}@media (min-width:992px){.navbar-expand-lg .navbar-collapse{width:auto;flex:1 1 auto}.navbar-expand-lg .nav-item.active{position:relative}.navbar-expand-lg .nav-item.active:after{content:"";position:absolute;left:0;right:0;bottom:-.25rem;border:0 var(--tblr-border-style) var(--tblr-navbar-active-border-color);border-bottom-width:2px}.navbar-expand-lg.navbar-vertical{box-shadow:inset calc(-1 * var(--tblr-navbar-border-width)) 0 0 0 var(--tblr-navbar-border-color)}.navbar-expand-lg.navbar-vertical.navbar-right{box-shadow:inset calc(1 * var(--tblr-navbar-border-width)) 0 0 0 var(--tblr-navbar-border-color)}.navbar-expand-lg.navbar-vertical~.navbar,.navbar-expand-lg.navbar-vertical~.page-wrapper{margin-left:15rem}.navbar-expand-lg.navbar-vertical.navbar-right~.navbar,.navbar-expand-lg.navbar-vertical.navbar-right~.page-wrapper{margin-left:0;margin-right:15rem}}@media (max-width:1199.98px){.navbar-expand-xl .navbar-collapse{flex-direction:column}.navbar-expand-xl .navbar-collapse [class^=container]{flex-direction:column;align-items:stretch;padding:0}.navbar-expand-xl .navbar-collapse .navbar-nav{margin-left:0;margin-right:0}.navbar-expand-xl .navbar-collapse .navbar-nav .nav-link{padding:.5rem calc(calc(var(--tblr-page-padding) * 2)/ 2);justify-content:flex-start}.navbar-expand-xl .navbar-collapse .dropdown-menu-columns{flex-direction:column}.navbar-expand-xl .navbar-collapse .dropdown-menu{padding:0;background:0 0;position:static;color:inherit;box-shadow:none;border:none;min-width:0;margin:0}.navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-item{min-width:0;display:flex;width:auto;padding-left:calc(calc(calc(var(--tblr-page-padding) * 2)/ 2) + 1.75rem);color:inherit}.navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-item.active,.navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-item:active{background:var(--tblr-navbar-active-bg)}.navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(calc(calc(var(--tblr-page-padding) * 2)/ 2) + 3.25rem)}.navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(calc(calc(var(--tblr-page-padding) * 2)/ 2) + 4.75rem)}.navbar-expand-xl .navbar-collapse .dropdown-toggle:after{margin-left:auto}.navbar-expand-xl .navbar-collapse .nav-item.active:after{border-bottom-width:0;border-left-width:3px;right:auto;top:0;bottom:0}}@media (min-width:1200px){.navbar-expand-xl .navbar-collapse{width:auto;flex:1 1 auto}.navbar-expand-xl .nav-item.active{position:relative}.navbar-expand-xl .nav-item.active:after{content:"";position:absolute;left:0;right:0;bottom:-.25rem;border:0 var(--tblr-border-style) var(--tblr-navbar-active-border-color);border-bottom-width:2px}.navbar-expand-xl.navbar-vertical{box-shadow:inset calc(-1 * var(--tblr-navbar-border-width)) 0 0 0 var(--tblr-navbar-border-color)}.navbar-expand-xl.navbar-vertical.navbar-right{box-shadow:inset calc(1 * var(--tblr-navbar-border-width)) 0 0 0 var(--tblr-navbar-border-color)}.navbar-expand-xl.navbar-vertical~.navbar,.navbar-expand-xl.navbar-vertical~.page-wrapper{margin-left:15rem}.navbar-expand-xl.navbar-vertical.navbar-right~.navbar,.navbar-expand-xl.navbar-vertical.navbar-right~.page-wrapper{margin-left:0;margin-right:15rem}}@media (max-width:1399.98px){.navbar-expand-xxl .navbar-collapse{flex-direction:column}.navbar-expand-xxl .navbar-collapse [class^=container]{flex-direction:column;align-items:stretch;padding:0}.navbar-expand-xxl .navbar-collapse .navbar-nav{margin-left:0;margin-right:0}.navbar-expand-xxl .navbar-collapse .navbar-nav .nav-link{padding:.5rem calc(calc(var(--tblr-page-padding) * 2)/ 2);justify-content:flex-start}.navbar-expand-xxl .navbar-collapse .dropdown-menu-columns{flex-direction:column}.navbar-expand-xxl .navbar-collapse .dropdown-menu{padding:0;background:0 0;position:static;color:inherit;box-shadow:none;border:none;min-width:0;margin:0}.navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-item{min-width:0;display:flex;width:auto;padding-left:calc(calc(calc(var(--tblr-page-padding) * 2)/ 2) + 1.75rem);color:inherit}.navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-item.active,.navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-item:active{background:var(--tblr-navbar-active-bg)}.navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(calc(calc(var(--tblr-page-padding) * 2)/ 2) + 3.25rem)}.navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(calc(calc(var(--tblr-page-padding) * 2)/ 2) + 4.75rem)}.navbar-expand-xxl .navbar-collapse .dropdown-toggle:after{margin-left:auto}.navbar-expand-xxl .navbar-collapse .nav-item.active:after{border-bottom-width:0;border-left-width:3px;right:auto;top:0;bottom:0}}@media (min-width:1400px){.navbar-expand-xxl .navbar-collapse{width:auto;flex:1 1 auto}.navbar-expand-xxl .nav-item.active{position:relative}.navbar-expand-xxl .nav-item.active:after{content:"";position:absolute;left:0;right:0;bottom:-.25rem;border:0 var(--tblr-border-style) var(--tblr-navbar-active-border-color);border-bottom-width:2px}.navbar-expand-xxl.navbar-vertical{box-shadow:inset calc(-1 * var(--tblr-navbar-border-width)) 0 0 0 var(--tblr-navbar-border-color)}.navbar-expand-xxl.navbar-vertical.navbar-right{box-shadow:inset calc(1 * var(--tblr-navbar-border-width)) 0 0 0 var(--tblr-navbar-border-color)}.navbar-expand-xxl.navbar-vertical~.navbar,.navbar-expand-xxl.navbar-vertical~.page-wrapper{margin-left:15rem}.navbar-expand-xxl.navbar-vertical.navbar-right~.navbar,.navbar-expand-xxl.navbar-vertical.navbar-right~.page-wrapper{margin-left:0;margin-right:15rem}}.navbar-expand .navbar-collapse{flex-direction:column}.navbar-expand .navbar-collapse [class^=container]{flex-direction:column;align-items:stretch;padding:0}.navbar-expand .navbar-collapse .navbar-nav{margin-left:0;margin-right:0}.navbar-expand .navbar-collapse .navbar-nav .nav-link{padding:.5rem calc(calc(var(--tblr-page-padding) * 2)/ 2);justify-content:flex-start}.navbar-expand .navbar-collapse .dropdown-menu-columns{flex-direction:column}.navbar-expand .navbar-collapse .dropdown-menu{padding:0;background:0 0;position:static;color:inherit;box-shadow:none;border:none;min-width:0;margin:0}.navbar-expand .navbar-collapse .dropdown-menu .dropdown-item{min-width:0;display:flex;width:auto;padding-left:calc(calc(calc(var(--tblr-page-padding) * 2)/ 2) + 1.75rem);color:inherit}.navbar-expand .navbar-collapse .dropdown-menu .dropdown-item.active,.navbar-expand .navbar-collapse .dropdown-menu .dropdown-item:active{background:var(--tblr-navbar-active-bg)}.navbar-expand .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(calc(calc(var(--tblr-page-padding) * 2)/ 2) + 3.25rem)}.navbar-expand .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(calc(calc(var(--tblr-page-padding) * 2)/ 2) + 4.75rem)}.navbar-expand .navbar-collapse .dropdown-toggle:after{margin-left:auto}.navbar-expand .navbar-collapse .nav-item.active:after{border-bottom-width:0;border-left-width:3px;right:auto;top:0;bottom:0}.navbar-expand .navbar-collapse{width:auto;flex:1 1 auto}.navbar-expand .nav-item.active{position:relative}.navbar-expand .nav-item.active:after{content:"";position:absolute;left:0;right:0;bottom:-.25rem;border:0 var(--tblr-border-style) var(--tblr-navbar-active-border-color);border-bottom-width:2px}.navbar-expand.navbar-vertical{box-shadow:inset calc(-1 * var(--tblr-navbar-border-width)) 0 0 0 var(--tblr-navbar-border-color)}.navbar-expand.navbar-vertical.navbar-right{box-shadow:inset calc(1 * var(--tblr-navbar-border-width)) 0 0 0 var(--tblr-navbar-border-color)}.navbar-expand.navbar-vertical~.navbar,.navbar-expand.navbar-vertical~.page-wrapper{margin-left:15rem}.navbar-expand.navbar-vertical.navbar-right~.navbar,.navbar-expand.navbar-vertical.navbar-right~.page-wrapper{margin-left:0;margin-right:15rem}.navbar-brand{display:inline-flex;align-items:center;font-weight:var(--tblr-font-weight-bold);margin:0;line-height:1;gap:.5rem}.navbar-brand-image{height:2rem;width:auto}.navbar-toggler{border:0;width:2rem;height:2rem;position:relative;display:flex;align-items:center;justify-content:center}.navbar-toggler-icon{height:2px;width:1.25em;background:currentColor;border-radius:10px;transition:top .2s .2s,bottom .2s .2s,transform .2s,opacity 0s .2s;position:relative}@media (prefers-reduced-motion:reduce){.navbar-toggler-icon{transition:none}}.navbar-toggler-icon:after,.navbar-toggler-icon:before{content:"";display:block;height:inherit;width:inherit;border-radius:inherit;background:inherit;position:absolute;left:0;transition:inherit}@media (prefers-reduced-motion:reduce){.navbar-toggler-icon:after,.navbar-toggler-icon:before{transition:none}}.navbar-toggler-icon:before{top:-.45em}.navbar-toggler-icon:after{bottom:-.45em}.navbar-toggler[aria-expanded=true] .navbar-toggler-icon{transform:rotate(45deg);transition:top .3s,bottom .3s,transform .3s .3s,opacity 0s .3s}@media (prefers-reduced-motion:reduce){.navbar-toggler[aria-expanded=true] .navbar-toggler-icon{transition:none}}.navbar-toggler[aria-expanded=true] .navbar-toggler-icon:before{top:0;transform:rotate(-90deg)}.navbar-toggler[aria-expanded=true] .navbar-toggler-icon:after{bottom:0;opacity:0}.navbar-transparent{--tblr-navbar-border-color:transparent!important;background:0 0!important}.navbar-nav{align-items:stretch}.navbar-nav .nav-item{display:flex;flex-direction:column;justify-content:center}.navbar-side{margin:0;display:flex;flex-direction:row;align-items:center;justify-content:space-around}@media (min-width:576px){.navbar-vertical.navbar-expand-sm{width:15rem;position:fixed;top:0;left:0;bottom:0;z-index:1030;align-items:flex-start;transition:transform .3s;overflow-y:scroll;padding:0}}@media (min-width:576px) and (prefers-reduced-motion:reduce){.navbar-vertical.navbar-expand-sm{transition:none}}@media (min-width:576px){.navbar-vertical.navbar-expand-sm.navbar-right{left:auto;right:0}.navbar-vertical.navbar-expand-sm .navbar-brand{padding:.75rem 0;justify-content:center}.navbar-vertical.navbar-expand-sm .navbar-collapse{align-items:stretch}.navbar-vertical.navbar-expand-sm .navbar-nav{flex-direction:column;flex-grow:1;min-height:auto}.navbar-vertical.navbar-expand-sm .navbar-nav .nav-link{padding-top:.5rem;padding-bottom:.5rem}.navbar-vertical.navbar-expand-sm>[class^=container]{flex-direction:column;align-items:stretch;min-height:100%;justify-content:flex-start;padding:0}.navbar-vertical.navbar-expand-sm~.page{padding-left:15rem}.navbar-vertical.navbar-expand-sm~.page [class^=container]{padding-left:1.5rem;padding-right:1.5rem}.navbar-vertical.navbar-expand-sm.navbar-right~.page{padding-left:0;padding-right:15rem}.navbar-vertical.navbar-expand-sm .navbar-collapse{flex-direction:column}.navbar-vertical.navbar-expand-sm .navbar-collapse [class^=container]{flex-direction:column;align-items:stretch;padding:0}.navbar-vertical.navbar-expand-sm .navbar-collapse .navbar-nav{margin-left:0;margin-right:0}.navbar-vertical.navbar-expand-sm .navbar-collapse .navbar-nav .nav-link{padding:.5rem calc(calc(var(--tblr-page-padding) * 2)/ 2);justify-content:flex-start}.navbar-vertical.navbar-expand-sm .navbar-collapse .dropdown-menu-columns{flex-direction:column}.navbar-vertical.navbar-expand-sm .navbar-collapse .dropdown-menu{padding:0;background:0 0;position:static;color:inherit;box-shadow:none;border:none;min-width:0;margin:0}.navbar-vertical.navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-item{min-width:0;display:flex;width:auto;padding-left:calc(calc(calc(var(--tblr-page-padding) * 2)/ 2) + 1.75rem);color:inherit}.navbar-vertical.navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-item.active,.navbar-vertical.navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-item:active{background:var(--tblr-navbar-active-bg)}.navbar-vertical.navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(calc(calc(var(--tblr-page-padding) * 2)/ 2) + 3.25rem)}.navbar-vertical.navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(calc(calc(var(--tblr-page-padding) * 2)/ 2) + 4.75rem)}.navbar-vertical.navbar-expand-sm .navbar-collapse .dropdown-toggle:after{margin-left:auto}.navbar-vertical.navbar-expand-sm .navbar-collapse .nav-item.active:after{border-bottom-width:0;border-left-width:3px;right:auto;top:0;bottom:0}}@media (min-width:768px){.navbar-vertical.navbar-expand-md{width:15rem;position:fixed;top:0;left:0;bottom:0;z-index:1030;align-items:flex-start;transition:transform .3s;overflow-y:scroll;padding:0}}@media (min-width:768px) and (prefers-reduced-motion:reduce){.navbar-vertical.navbar-expand-md{transition:none}}@media (min-width:768px){.navbar-vertical.navbar-expand-md.navbar-right{left:auto;right:0}.navbar-vertical.navbar-expand-md .navbar-brand{padding:.75rem 0;justify-content:center}.navbar-vertical.navbar-expand-md .navbar-collapse{align-items:stretch}.navbar-vertical.navbar-expand-md .navbar-nav{flex-direction:column;flex-grow:1;min-height:auto}.navbar-vertical.navbar-expand-md .navbar-nav .nav-link{padding-top:.5rem;padding-bottom:.5rem}.navbar-vertical.navbar-expand-md>[class^=container]{flex-direction:column;align-items:stretch;min-height:100%;justify-content:flex-start;padding:0}.navbar-vertical.navbar-expand-md~.page{padding-left:15rem}.navbar-vertical.navbar-expand-md~.page [class^=container]{padding-left:1.5rem;padding-right:1.5rem}.navbar-vertical.navbar-expand-md.navbar-right~.page{padding-left:0;padding-right:15rem}.navbar-vertical.navbar-expand-md .navbar-collapse{flex-direction:column}.navbar-vertical.navbar-expand-md .navbar-collapse [class^=container]{flex-direction:column;align-items:stretch;padding:0}.navbar-vertical.navbar-expand-md .navbar-collapse .navbar-nav{margin-left:0;margin-right:0}.navbar-vertical.navbar-expand-md .navbar-collapse .navbar-nav .nav-link{padding:.5rem calc(calc(var(--tblr-page-padding) * 2)/ 2);justify-content:flex-start}.navbar-vertical.navbar-expand-md .navbar-collapse .dropdown-menu-columns{flex-direction:column}.navbar-vertical.navbar-expand-md .navbar-collapse .dropdown-menu{padding:0;background:0 0;position:static;color:inherit;box-shadow:none;border:none;min-width:0;margin:0}.navbar-vertical.navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-item{min-width:0;display:flex;width:auto;padding-left:calc(calc(calc(var(--tblr-page-padding) * 2)/ 2) + 1.75rem);color:inherit}.navbar-vertical.navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-item.active,.navbar-vertical.navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-item:active{background:var(--tblr-navbar-active-bg)}.navbar-vertical.navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(calc(calc(var(--tblr-page-padding) * 2)/ 2) + 3.25rem)}.navbar-vertical.navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(calc(calc(var(--tblr-page-padding) * 2)/ 2) + 4.75rem)}.navbar-vertical.navbar-expand-md .navbar-collapse .dropdown-toggle:after{margin-left:auto}.navbar-vertical.navbar-expand-md .navbar-collapse .nav-item.active:after{border-bottom-width:0;border-left-width:3px;right:auto;top:0;bottom:0}}@media (min-width:992px){.navbar-vertical.navbar-expand-lg{width:15rem;position:fixed;top:0;left:0;bottom:0;z-index:1030;align-items:flex-start;transition:transform .3s;overflow-y:scroll;padding:0}}@media (min-width:992px) and (prefers-reduced-motion:reduce){.navbar-vertical.navbar-expand-lg{transition:none}}@media (min-width:992px){.navbar-vertical.navbar-expand-lg.navbar-right{left:auto;right:0}.navbar-vertical.navbar-expand-lg .navbar-brand{padding:.75rem 0;justify-content:center}.navbar-vertical.navbar-expand-lg .navbar-collapse{align-items:stretch}.navbar-vertical.navbar-expand-lg .navbar-nav{flex-direction:column;flex-grow:1;min-height:auto}.navbar-vertical.navbar-expand-lg .navbar-nav .nav-link{padding-top:.5rem;padding-bottom:.5rem}.navbar-vertical.navbar-expand-lg>[class^=container]{flex-direction:column;align-items:stretch;min-height:100%;justify-content:flex-start;padding:0}.navbar-vertical.navbar-expand-lg~.page{padding-left:15rem}.navbar-vertical.navbar-expand-lg~.page [class^=container]{padding-left:1.5rem;padding-right:1.5rem}.navbar-vertical.navbar-expand-lg.navbar-right~.page{padding-left:0;padding-right:15rem}.navbar-vertical.navbar-expand-lg .navbar-collapse{flex-direction:column}.navbar-vertical.navbar-expand-lg .navbar-collapse [class^=container]{flex-direction:column;align-items:stretch;padding:0}.navbar-vertical.navbar-expand-lg .navbar-collapse .navbar-nav{margin-left:0;margin-right:0}.navbar-vertical.navbar-expand-lg .navbar-collapse .navbar-nav .nav-link{padding:.5rem calc(calc(var(--tblr-page-padding) * 2)/ 2);justify-content:flex-start}.navbar-vertical.navbar-expand-lg .navbar-collapse .dropdown-menu-columns{flex-direction:column}.navbar-vertical.navbar-expand-lg .navbar-collapse .dropdown-menu{padding:0;background:0 0;position:static;color:inherit;box-shadow:none;border:none;min-width:0;margin:0}.navbar-vertical.navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-item{min-width:0;display:flex;width:auto;padding-left:calc(calc(calc(var(--tblr-page-padding) * 2)/ 2) + 1.75rem);color:inherit}.navbar-vertical.navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-item.active,.navbar-vertical.navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-item:active{background:var(--tblr-navbar-active-bg)}.navbar-vertical.navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(calc(calc(var(--tblr-page-padding) * 2)/ 2) + 3.25rem)}.navbar-vertical.navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(calc(calc(var(--tblr-page-padding) * 2)/ 2) + 4.75rem)}.navbar-vertical.navbar-expand-lg .navbar-collapse .dropdown-toggle:after{margin-left:auto}.navbar-vertical.navbar-expand-lg .navbar-collapse .nav-item.active:after{border-bottom-width:0;border-left-width:3px;right:auto;top:0;bottom:0}}@media (min-width:1200px){.navbar-vertical.navbar-expand-xl{width:15rem;position:fixed;top:0;left:0;bottom:0;z-index:1030;align-items:flex-start;transition:transform .3s;overflow-y:scroll;padding:0}}@media (min-width:1200px) and (prefers-reduced-motion:reduce){.navbar-vertical.navbar-expand-xl{transition:none}}@media (min-width:1200px){.navbar-vertical.navbar-expand-xl.navbar-right{left:auto;right:0}.navbar-vertical.navbar-expand-xl .navbar-brand{padding:.75rem 0;justify-content:center}.navbar-vertical.navbar-expand-xl .navbar-collapse{align-items:stretch}.navbar-vertical.navbar-expand-xl .navbar-nav{flex-direction:column;flex-grow:1;min-height:auto}.navbar-vertical.navbar-expand-xl .navbar-nav .nav-link{padding-top:.5rem;padding-bottom:.5rem}.navbar-vertical.navbar-expand-xl>[class^=container]{flex-direction:column;align-items:stretch;min-height:100%;justify-content:flex-start;padding:0}.navbar-vertical.navbar-expand-xl~.page{padding-left:15rem}.navbar-vertical.navbar-expand-xl~.page [class^=container]{padding-left:1.5rem;padding-right:1.5rem}.navbar-vertical.navbar-expand-xl.navbar-right~.page{padding-left:0;padding-right:15rem}.navbar-vertical.navbar-expand-xl .navbar-collapse{flex-direction:column}.navbar-vertical.navbar-expand-xl .navbar-collapse [class^=container]{flex-direction:column;align-items:stretch;padding:0}.navbar-vertical.navbar-expand-xl .navbar-collapse .navbar-nav{margin-left:0;margin-right:0}.navbar-vertical.navbar-expand-xl .navbar-collapse .navbar-nav .nav-link{padding:.5rem calc(calc(var(--tblr-page-padding) * 2)/ 2);justify-content:flex-start}.navbar-vertical.navbar-expand-xl .navbar-collapse .dropdown-menu-columns{flex-direction:column}.navbar-vertical.navbar-expand-xl .navbar-collapse .dropdown-menu{padding:0;background:0 0;position:static;color:inherit;box-shadow:none;border:none;min-width:0;margin:0}.navbar-vertical.navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-item{min-width:0;display:flex;width:auto;padding-left:calc(calc(calc(var(--tblr-page-padding) * 2)/ 2) + 1.75rem);color:inherit}.navbar-vertical.navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-item.active,.navbar-vertical.navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-item:active{background:var(--tblr-navbar-active-bg)}.navbar-vertical.navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(calc(calc(var(--tblr-page-padding) * 2)/ 2) + 3.25rem)}.navbar-vertical.navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(calc(calc(var(--tblr-page-padding) * 2)/ 2) + 4.75rem)}.navbar-vertical.navbar-expand-xl .navbar-collapse .dropdown-toggle:after{margin-left:auto}.navbar-vertical.navbar-expand-xl .navbar-collapse .nav-item.active:after{border-bottom-width:0;border-left-width:3px;right:auto;top:0;bottom:0}}@media (min-width:1400px){.navbar-vertical.navbar-expand-xxl{width:15rem;position:fixed;top:0;left:0;bottom:0;z-index:1030;align-items:flex-start;transition:transform .3s;overflow-y:scroll;padding:0}}@media (min-width:1400px) and (prefers-reduced-motion:reduce){.navbar-vertical.navbar-expand-xxl{transition:none}}@media (min-width:1400px){.navbar-vertical.navbar-expand-xxl.navbar-right{left:auto;right:0}.navbar-vertical.navbar-expand-xxl .navbar-brand{padding:.75rem 0;justify-content:center}.navbar-vertical.navbar-expand-xxl .navbar-collapse{align-items:stretch}.navbar-vertical.navbar-expand-xxl .navbar-nav{flex-direction:column;flex-grow:1;min-height:auto}.navbar-vertical.navbar-expand-xxl .navbar-nav .nav-link{padding-top:.5rem;padding-bottom:.5rem}.navbar-vertical.navbar-expand-xxl>[class^=container]{flex-direction:column;align-items:stretch;min-height:100%;justify-content:flex-start;padding:0}.navbar-vertical.navbar-expand-xxl~.page{padding-left:15rem}.navbar-vertical.navbar-expand-xxl~.page [class^=container]{padding-left:1.5rem;padding-right:1.5rem}.navbar-vertical.navbar-expand-xxl.navbar-right~.page{padding-left:0;padding-right:15rem}.navbar-vertical.navbar-expand-xxl .navbar-collapse{flex-direction:column}.navbar-vertical.navbar-expand-xxl .navbar-collapse [class^=container]{flex-direction:column;align-items:stretch;padding:0}.navbar-vertical.navbar-expand-xxl .navbar-collapse .navbar-nav{margin-left:0;margin-right:0}.navbar-vertical.navbar-expand-xxl .navbar-collapse .navbar-nav .nav-link{padding:.5rem calc(calc(var(--tblr-page-padding) * 2)/ 2);justify-content:flex-start}.navbar-vertical.navbar-expand-xxl .navbar-collapse .dropdown-menu-columns{flex-direction:column}.navbar-vertical.navbar-expand-xxl .navbar-collapse .dropdown-menu{padding:0;background:0 0;position:static;color:inherit;box-shadow:none;border:none;min-width:0;margin:0}.navbar-vertical.navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-item{min-width:0;display:flex;width:auto;padding-left:calc(calc(calc(var(--tblr-page-padding) * 2)/ 2) + 1.75rem);color:inherit}.navbar-vertical.navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-item.active,.navbar-vertical.navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-item:active{background:var(--tblr-navbar-active-bg)}.navbar-vertical.navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(calc(calc(var(--tblr-page-padding) * 2)/ 2) + 3.25rem)}.navbar-vertical.navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(calc(calc(var(--tblr-page-padding) * 2)/ 2) + 4.75rem)}.navbar-vertical.navbar-expand-xxl .navbar-collapse .dropdown-toggle:after{margin-left:auto}.navbar-vertical.navbar-expand-xxl .navbar-collapse .nav-item.active:after{border-bottom-width:0;border-left-width:3px;right:auto;top:0;bottom:0}}.navbar-vertical.navbar-expand{width:15rem;position:fixed;top:0;left:0;bottom:0;z-index:1030;align-items:flex-start;transition:transform .3s;overflow-y:scroll;padding:0}@media (prefers-reduced-motion:reduce){.navbar-vertical.navbar-expand{transition:none}}.navbar-vertical.navbar-expand.navbar-right{left:auto;right:0}.navbar-vertical.navbar-expand .navbar-brand{padding:.75rem 0;justify-content:center}.navbar-vertical.navbar-expand .navbar-collapse{align-items:stretch}.navbar-vertical.navbar-expand .navbar-nav{flex-direction:column;flex-grow:1;min-height:auto}.navbar-vertical.navbar-expand .navbar-nav .nav-link{padding-top:.5rem;padding-bottom:.5rem}.navbar-vertical.navbar-expand>[class^=container]{flex-direction:column;align-items:stretch;min-height:100%;justify-content:flex-start;padding:0}.navbar-vertical.navbar-expand~.page{padding-left:15rem}.navbar-vertical.navbar-expand~.page [class^=container]{padding-left:1.5rem;padding-right:1.5rem}.navbar-vertical.navbar-expand.navbar-right~.page{padding-left:0;padding-right:15rem}.navbar-vertical.navbar-expand .navbar-collapse{flex-direction:column}.navbar-vertical.navbar-expand .navbar-collapse [class^=container]{flex-direction:column;align-items:stretch;padding:0}.navbar-vertical.navbar-expand .navbar-collapse .navbar-nav{margin-left:0;margin-right:0}.navbar-vertical.navbar-expand .navbar-collapse .navbar-nav .nav-link{padding:.5rem calc(calc(var(--tblr-page-padding) * 2)/ 2);justify-content:flex-start}.navbar-vertical.navbar-expand .navbar-collapse .dropdown-menu-columns{flex-direction:column}.navbar-vertical.navbar-expand .navbar-collapse .dropdown-menu{padding:0;background:0 0;position:static;color:inherit;box-shadow:none;border:none;min-width:0;margin:0}.navbar-vertical.navbar-expand .navbar-collapse .dropdown-menu .dropdown-item{min-width:0;display:flex;width:auto;padding-left:calc(calc(calc(var(--tblr-page-padding) * 2)/ 2) + 1.75rem);color:inherit}.navbar-vertical.navbar-expand .navbar-collapse .dropdown-menu .dropdown-item.active,.navbar-vertical.navbar-expand .navbar-collapse .dropdown-menu .dropdown-item:active{background:var(--tblr-navbar-active-bg)}.navbar-vertical.navbar-expand .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(calc(calc(var(--tblr-page-padding) * 2)/ 2) + 3.25rem)}.navbar-vertical.navbar-expand .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(calc(calc(var(--tblr-page-padding) * 2)/ 2) + 4.75rem)}.navbar-vertical.navbar-expand .navbar-collapse .dropdown-toggle:after{margin-left:auto}.navbar-vertical.navbar-expand .navbar-collapse .nav-item.active:after{border-bottom-width:0;border-left-width:3px;right:auto;top:0;bottom:0}.navbar-overlap:after{content:"";height:9rem;position:absolute;top:100%;left:0;right:0;background:inherit;z-index:-1;box-shadow:inherit}.page{display:flex;flex-direction:column;position:relative;min-height:100%}.page-center .container{margin-top:auto;margin-bottom:auto}.page-wrapper{flex:1;display:flex;flex-direction:column}@media print{.page-wrapper{margin:0!important}}.page-wrapper-full .page-body:first-child{margin:0;border-top:0}.page-body{margin-top:var(--tblr-page-padding-y);margin-bottom:var(--tblr-page-padding-y)}.page-body-card{background:var(--tblr-bg-surface);border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent);padding:var(--tblr-page-padding) 0;margin-bottom:0;flex:1}.page-body~.page-body-card{margin-top:0}.page-cover{background:no-repeat center/cover;min-height:9rem}@media (min-width:768px){.page-cover{min-height:12rem}}@media (min-width:992px){.page-cover{min-height:15rem}}.page-cover-overlay{position:relative}.page-cover-overlay:after{content:"";position:absolute;top:0;left:0;right:0;bottom:0;background-image:linear-gradient(180deg,#0000 0,#0009)}.page-header{display:flex;flex-wrap:wrap;min-height:2.25rem;flex-direction:column;justify-content:center}.page-wrapper .page-header{margin:var(--tblr-page-padding-y) 0 0}.page-header-border{border-bottom:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);padding:var(--tblr-page-padding-y) 0;margin:0!important;background-color:var(--tblr-bg-surface)}.page-pretitle{font-size:.625rem;font-weight:var(--tblr-font-weight-bold);text-transform:uppercase;letter-spacing:.04em;line-height:1rem;color:var(--tblr-muted)}.page-title{margin:0;font-size:1.25rem;line-height:1.75rem;font-weight:var(--tblr-font-weight-bold);color:inherit;display:flex;align-items:center}.page-title svg{width:1.5rem;height:1.5rem;margin-right:.25rem}.page-title-lg{font-size:1.5rem;line-height:2rem}.page-subtitle{margin-top:.25rem;color:var(--tblr-muted)}.page-cover{--tblr-page-cover-blur:20px;--tblr-page-cover-padding:1rem;min-height:6rem;padding:var(--tblr-page-cover-padding) 0;position:relative;overflow:hidden}.page-cover-img{position:absolute;top:calc(-2 * var(--tblr-page-cover-blur,0));left:calc(-2 * var(--tblr-page-cover-blur,0));right:calc(-2 * var(--tblr-page-cover-blur,0));bottom:calc(-2 * var(--tblr-page-cover-blur,0));pointer-events:none;filter:blur(var(--tblr-page-cover-blur));-o-object-fit:cover;object-fit:cover;background-size:cover;background-position:center;z-index:-1}.page-tabs{margin-top:.5rem;position:relative}.page-header-tabs .nav-bordered{border:0}.page-header-tabs+.page-body-card{margin-top:0}.footer{border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);background-color:#fff;padding:2rem 0;color:var(--tblr-muted);margin-top:auto}.footer-transparent{background-color:transparent;border-top:0}body:not(.theme-dark):not([data-bs-theme=dark]) .hide-theme-light{display:none!important}body.theme-dark .hide-theme-dark,body[data-bs-theme=dark] .hide-theme-dark{display:none!important}[data-bs-theme=dark]{--tblr-body-color:#fcfdfe;--tblr-body-color-rgb:252,253,254;--tblr-muted:#3a4859;--tblr-body-bg:#151f2c;--tblr-body-bg-rgb:21,31,44;--tblr-emphasis-color:#ffffff;--tblr-emphasis-color-rgb:255,255,255;--tblr-bg-forms:#151f2c;--tblr-bg-surface:#182433;--tblr-bg-surface-dark:#151f2c;--tblr-bg-surface-secondary:#1b293a;--tblr-bg-surface-tertiary:#151f2c;--tblr-link-color:#307fdd;--tblr-link-hover-color:#206bc4;--tblr-active-bg:#1b293a;--tblr-disabled-color:var(--tblr-gray-700);--tblr-border-color:var(--tblr-dark-mode-border-color);--tblr-border-color-translucent:var( --tblr-dark-mode-border-color-translucent );--tblr-border-dark-color:var(--tblr-dark-mode-border-dark-color);--tblr-border-color-active:var( --tblr-dark-mode-border-color-active );--tblr-btn-color:#151f2c;--tblr-code-color:var(--tblr-body-color);--tblr-code-bg:#1f2e41;--tblr-primary-lt:#192b42;--tblr-primary-lt-rgb:25,43,66;--tblr-secondary-lt:#202c3b;--tblr-secondary-lt-rgb:32,44,59;--tblr-success-lt:#1a3235;--tblr-success-lt-rgb:26,50,53;--tblr-info-lt:#1c3044;--tblr-info-lt-rgb:28,48,68;--tblr-warning-lt:#2e2b2f;--tblr-warning-lt-rgb:46,43,47;--tblr-danger-lt:#2b2634;--tblr-danger-lt-rgb:43,38,52;--tblr-light-lt:#2f3a47;--tblr-light-lt-rgb:47,58,71;--tblr-dark-lt:#182433;--tblr-dark-lt-rgb:24,36,51;--tblr-muted-lt:#202c3b;--tblr-muted-lt-rgb:32,44,59;--tblr-blue-lt:#192b42;--tblr-blue-lt-rgb:25,43,66;--tblr-azure-lt:#1c3044;--tblr-azure-lt-rgb:28,48,68;--tblr-indigo-lt:#1c2a45;--tblr-indigo-lt-rgb:28,42,69;--tblr-purple-lt:#272742;--tblr-purple-lt-rgb:39,39,66;--tblr-pink-lt:#2b2639;--tblr-pink-lt-rgb:43,38,57;--tblr-red-lt:#2b2634;--tblr-red-lt-rgb:43,38,52;--tblr-orange-lt:#2e2b2f;--tblr-orange-lt-rgb:46,43,47;--tblr-yellow-lt:#2e302e;--tblr-yellow-lt-rgb:46,48,46;--tblr-lime-lt:#213330;--tblr-lime-lt-rgb:33,51,48;--tblr-green-lt:#1a3235;--tblr-green-lt-rgb:26,50,53;--tblr-teal-lt:#17313a;--tblr-teal-lt-rgb:23,49,58;--tblr-cyan-lt:#183140;--tblr-cyan-lt-rgb:24,49,64;--tblr-facebook-lt:#182c46;--tblr-facebook-lt-rgb:24,44,70;--tblr-twitter-lt:#193146;--tblr-twitter-lt-rgb:25,49,70;--tblr-linkedin-lt:#172b41;--tblr-linkedin-lt-rgb:23,43,65;--tblr-google-lt:#2c2834;--tblr-google-lt-rgb:44,40,52;--tblr-youtube-lt:#2f202e;--tblr-youtube-lt-rgb:47,32,46;--tblr-vimeo-lt:#183345;--tblr-vimeo-lt-rgb:24,51,69;--tblr-dribbble-lt:#2d283c;--tblr-dribbble-lt-rgb:45,40,60;--tblr-github-lt:#182330;--tblr-github-lt-rgb:24,35,48;--tblr-instagram-lt:#2c2737;--tblr-instagram-lt-rgb:44,39,55;--tblr-pinterest-lt:#292131;--tblr-pinterest-lt-rgb:41,33,49;--tblr-vk-lt:#202e3f;--tblr-vk-lt-rgb:32,46,63;--tblr-rss-lt:#2f312e;--tblr-rss-lt-rgb:47,49,46;--tblr-flickr-lt:#162a44;--tblr-flickr-lt-rgb:22,42,68;--tblr-bitbucket-lt:#162942;--tblr-bitbucket-lt-rgb:22,41,66;--tblr-tabler-lt:#192b42;--tblr-tabler-lt-rgb:25,43,66}[data-bs-theme=dark] .navbar-brand-autodark .navbar-brand-image{filter:brightness(0) invert(1)}.accordion{--tblr-accordion-color:var(--tblr-body-color)}.accordion-button:focus:not(:focus-visible){outline:0;box-shadow:none}.accordion-button:after{opacity:.7}.accordion-button:not(.collapsed){font-weight:var(--tblr-font-weight-bold);border-bottom-color:transparent;box-shadow:none}.accordion-button:not(.collapsed):after{opacity:1}.alert{--tblr-alert-color:var(--tblr-muted);background:#fff;border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent);border-left:.25rem var(--tblr-border-style) var(--tblr-alert-color);box-shadow:#1824330a 0 2px 4px}.alert>:last-child{margin-bottom:0}.alert-important{border-color:transparent;background:var(--tblr-alert-color);color:#fff}.alert-important .alert-icon,.alert-important .alert-link,.alert-important .alert-link:hover{color:inherit}.alert-link,.alert-link:hover{color:var(--tblr-alert-color)}.alert-primary{--tblr-alert-color:var(--tblr-primary)}.alert-secondary{--tblr-alert-color:var(--tblr-secondary)}.alert-success{--tblr-alert-color:var(--tblr-success)}.alert-info{--tblr-alert-color:var(--tblr-info)}.alert-warning{--tblr-alert-color:var(--tblr-warning)}.alert-danger{--tblr-alert-color:var(--tblr-danger)}.alert-light{--tblr-alert-color:var(--tblr-light)}.alert-dark{--tblr-alert-color:var(--tblr-dark)}.alert-muted{--tblr-alert-color:var(--tblr-muted)}.alert-blue{--tblr-alert-color:var(--tblr-blue)}.alert-azure{--tblr-alert-color:var(--tblr-azure)}.alert-indigo{--tblr-alert-color:var(--tblr-indigo)}.alert-purple{--tblr-alert-color:var(--tblr-purple)}.alert-pink{--tblr-alert-color:var(--tblr-pink)}.alert-red{--tblr-alert-color:var(--tblr-red)}.alert-orange{--tblr-alert-color:var(--tblr-orange)}.alert-yellow{--tblr-alert-color:var(--tblr-yellow)}.alert-lime{--tblr-alert-color:var(--tblr-lime)}.alert-green{--tblr-alert-color:var(--tblr-green)}.alert-teal{--tblr-alert-color:var(--tblr-teal)}.alert-cyan{--tblr-alert-color:var(--tblr-cyan)}.alert-facebook{--tblr-alert-color:var(--tblr-facebook)}.alert-twitter{--tblr-alert-color:var(--tblr-twitter)}.alert-linkedin{--tblr-alert-color:var(--tblr-linkedin)}.alert-google{--tblr-alert-color:var(--tblr-google)}.alert-youtube{--tblr-alert-color:var(--tblr-youtube)}.alert-vimeo{--tblr-alert-color:var(--tblr-vimeo)}.alert-dribbble{--tblr-alert-color:var(--tblr-dribbble)}.alert-github{--tblr-alert-color:var(--tblr-github)}.alert-instagram{--tblr-alert-color:var(--tblr-instagram)}.alert-pinterest{--tblr-alert-color:var(--tblr-pinterest)}.alert-vk{--tblr-alert-color:var(--tblr-vk)}.alert-rss{--tblr-alert-color:var(--tblr-rss)}.alert-flickr{--tblr-alert-color:var(--tblr-flickr)}.alert-bitbucket{--tblr-alert-color:var(--tblr-bitbucket)}.alert-tabler{--tblr-alert-color:var(--tblr-tabler)}.alert-icon{color:var(--tblr-alert-color);width:1.5rem!important;height:1.5rem!important;margin:-.125rem 1rem -.125rem 0}.alert-title{font-size:.875rem;line-height:1.25rem;font-weight:var(--tblr-font-weight-bold);margin-bottom:.25rem;color:var(--tblr-alert-color)}.avatar{--tblr-avatar-size:2.5rem;--tblr-avatar-bg:var(--tblr-bg-surface-secondary);--tblr-avatar-shadow:inset var(--tblr-border-color-translucent) 0 0 0 1px;position:relative;width:var(--tblr-avatar-size);height:var(--tblr-avatar-size);font-size:calc(var(--tblr-avatar-size)/ 2.8571428572);font-weight:var(--tblr-font-weight-medium);display:inline-flex;align-items:center;justify-content:center;color:var(--tblr-muted);text-align:center;text-transform:uppercase;vertical-align:bottom;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background:var(--tblr-avatar-bg) no-repeat center/cover;border-radius:var(--tblr-border-radius);box-shadow:var(--tblr-avatar-shadow)}.avatar svg{width:calc(var(--tblr-avatar-size)/ 1.6666666667);height:calc(var(--tblr-avatar-size)/ 1.6666666667)}.avatar .badge{position:absolute;right:0;bottom:0;border-radius:100rem;box-shadow:0 0 0 2px var(--tblr-bg-surface)}a.avatar{cursor:pointer}.avatar-rounded{border-radius:100rem}.avatar-xs{--tblr-avatar-size:1.5rem}.avatar-xs .badge:empty{width:.375rem;height:.375rem}.avatar-sm{--tblr-avatar-size:2rem}.avatar-sm .badge:empty{width:.5rem;height:.5rem}.avatar-md{--tblr-avatar-size:4rem}.avatar-md .badge:empty{width:1rem;height:1rem}.avatar-lg{--tblr-avatar-size:5.5rem}.avatar-lg .badge:empty{width:1.375rem;height:1.375rem}.avatar-xl{--tblr-avatar-size:7rem}.avatar-xl .badge:empty{width:1.75rem;height:1.75rem}.avatar-2xl{--tblr-avatar-size:11rem}.avatar-2xl .badge:empty{width:2.75rem;height:2.75rem}.avatar-list{--tblr-list-gap:.5rem;display:flex;flex-wrap:wrap;gap:var(--tblr-list-gap)}.avatar-list a.avatar:hover{z-index:1}.avatar-list-stacked{display:block;--tblr-list-gap:0}.avatar-list-stacked .avatar{margin-right:calc(-.5 * var(--tblr-avatar-size))!important;box-shadow:var(--tblr-avatar-shadow),0 0 0 2px var(--tblr-card-cap-bg,var(--tblr-card-bg,var(--tblr-bg-surface)))}.avatar-upload{width:4rem;height:4rem;border:var(--tblr-border-width) dashed var(--tblr-border-color);background:var(--tblr-bg-forms);flex-direction:column;transition:color .3s,background-color .3s}@media (prefers-reduced-motion:reduce){.avatar-upload{transition:none}}.avatar-upload svg{width:1.5rem;height:1.5rem;stroke-width:1}.avatar-upload:hover{border-color:var(--tblr-primary);color:var(--tblr-primary);text-decoration:none}.avatar-upload-text{font-size:.625rem;line-height:1;margin-top:.25rem}.avatar-cover{margin-top:calc(-.5 * var(--tblr-avatar-size));box-shadow:0 0 0 .25rem var(--tblr-card-bg,var(--tblr-body-bg))}.badge{justify-content:center;align-items:center;background:#929dab;overflow:hidden;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:var(--tblr-border-width) var(--tblr-border-style) transparent;min-width:1.35714285em;font-weight:var(--tblr-font-weight-bold);letter-spacing:.04em;vertical-align:bottom}a.badge{color:var(--tblr-bg-surface)}.badge:empty{display:inline-block;width:.5rem;height:.5rem;min-width:0;min-height:auto;padding:0;border-radius:100rem;vertical-align:baseline}.badge .avatar{box-sizing:content-box;width:1.25rem;height:1.25rem;margin:0 .5rem 0 -.5rem}.badge .icon{width:1em;height:1em;font-size:1rem;stroke-width:2}.badge-outline{background-color:transparent;border:var(--tblr-border-width) var(--tblr-border-style) currentColor}.badge-pill{border-radius:100rem}.badges-list{--tblr-list-gap:.5rem;display:flex;flex-wrap:wrap;gap:var(--tblr-list-gap)}.badge-notification{position:absolute!important;top:0!important;right:0!important;transform:translate(50%,-50%);z-index:1}.badge-blink{animation:blink 2s infinite}.breadcrumb{--tblr-breadcrumb-item-active-font-weight:var(--tblr-font-weight-bold);--tblr-breadcrumb-item-disabled-color:var(--tblr-disabled-color);--tblr-breadcrumb-link-color:var(--tblr-link-color);padding:0;margin:0;background:0 0}.breadcrumb a{color:var(--tblr-breadcrumb-link-color)}.breadcrumb a:hover{text-decoration:underline}.breadcrumb-muted{--tblr-breadcrumb-link-color:var(--tblr-muted)}.breadcrumb-item.active{font-weight:var(--tblr-breadcrumb-item-active-font-weight)}.breadcrumb-item.active a{color:inherit;pointer-events:none}.breadcrumb-item.disabled{color:var(--tblr-breadcrumb-item-disabled-color)}.breadcrumb-item.disabled:before{color:inherit}.breadcrumb-item.disabled a{color:inherit;pointer-events:none}.breadcrumb-dots{--tblr-breadcrumb-divider:"·"}.breadcrumb-arrows{--tblr-breadcrumb-divider:"›"}.breadcrumb-bullets{--tblr-breadcrumb-divider:"•"}.btn{--tblr-btn-hover-bg:var(--tblr-bg-surface);--tblr-btn-icon-size:1.25rem;--tblr-btn-bg:var(--tblr-bg-surface);--tblr-btn-color:var(--tblr-body-color);--tblr-btn-border-color:var(--tblr-border-color);--tblr-btn-hover-bg:var(--tblr-btn-bg);--tblr-btn-hover-border-color:var(--tblr-border-color-active);--tblr-btn-box-shadow:var(--tblr-shadow-button);--tblr-btn-active-color:var(--tblr-primary);--tblr-btn-active-bg:rgba(var(--tblr-primary-rgb), .04);--tblr-btn-active-border-color:var(--tblr-primary);display:inline-flex;align-items:center;justify-content:center;white-space:nowrap;box-shadow:var(--tblr-btn-box-shadow)}.btn .icon{width:var(--tblr-btn-icon-size);height:var(--tblr-btn-icon-size);min-width:var(--tblr-btn-icon-size);margin:0 calc(var(--tblr-btn-padding-x)/ 2) 0 calc(var(--tblr-btn-padding-x)/ -4);vertical-align:bottom;color:inherit}.btn .avatar{width:var(--tblr-btn-icon-size);height:var(--tblr-btn-icon-size);margin:0 calc(var(--tblr-btn-padding-x)/ 2) 0 calc(var(--tblr-btn-padding-x)/ -4)}.btn .icon-right{margin:0 calc(var(--tblr-btn-padding-x)/ -4) 0 calc(var(--tblr-btn-padding-x)/ 2)}.btn .badge{top:auto}.btn-check+.btn:hover{color:var(--tblr-btn-hover-color);background-color:var(--tblr-btn-hover-bg);border-color:var(--tblr-btn-hover-border-color)}.btn-link{color:#206bc4;background-color:transparent;border-color:transparent;box-shadow:none}.btn-link .icon{color:inherit}.btn-link:hover{color:#1a569d;border-color:transparent}.btn-primary{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-primary-fg);--tblr-btn-bg:var(--tblr-primary);--tblr-btn-hover-color:var(--tblr-primary-fg);--tblr-btn-hover-bg:rgba(var(--tblr-primary-rgb), .8);--tblr-btn-active-color:var(--tblr-primary-fg);--tblr-btn-active-bg:rgba(var(--tblr-primary-rgb), .8);--tblr-btn-disabled-bg:var(--tblr-primary);--tblr-btn-disabled-color:var(--tblr-primary-fg);--tblr-btn-box-shadow:var(--tblr-shadow-button),var(--tblr-shadow-button-inset)}.btn-outline-primary{--tblr-btn-color:var(--tblr-primary);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-primary);--tblr-btn-hover-color:var(--tblr-primary-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-primary);--tblr-btn-active-color:var(--tblr-primary-fg);--tblr-btn-active-bg:var(--tblr-primary);--tblr-btn-disabled-color:var(--tblr-primary);--tblr-btn-disabled-border-color:var(--tblr-primary)}.btn-secondary{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-secondary-fg);--tblr-btn-bg:var(--tblr-secondary);--tblr-btn-hover-color:var(--tblr-secondary-fg);--tblr-btn-hover-bg:rgba(var(--tblr-secondary-rgb), .8);--tblr-btn-active-color:var(--tblr-secondary-fg);--tblr-btn-active-bg:rgba(var(--tblr-secondary-rgb), .8);--tblr-btn-disabled-bg:var(--tblr-secondary);--tblr-btn-disabled-color:var(--tblr-secondary-fg);--tblr-btn-box-shadow:var(--tblr-shadow-button),var(--tblr-shadow-button-inset)}.btn-outline-secondary{--tblr-btn-color:var(--tblr-secondary);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-secondary);--tblr-btn-hover-color:var(--tblr-secondary-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-secondary);--tblr-btn-active-color:var(--tblr-secondary-fg);--tblr-btn-active-bg:var(--tblr-secondary);--tblr-btn-disabled-color:var(--tblr-secondary);--tblr-btn-disabled-border-color:var(--tblr-secondary)}.btn-success{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-success-fg);--tblr-btn-bg:var(--tblr-success);--tblr-btn-hover-color:var(--tblr-success-fg);--tblr-btn-hover-bg:rgba(var(--tblr-success-rgb), .8);--tblr-btn-active-color:var(--tblr-success-fg);--tblr-btn-active-bg:rgba(var(--tblr-success-rgb), .8);--tblr-btn-disabled-bg:var(--tblr-success);--tblr-btn-disabled-color:var(--tblr-success-fg);--tblr-btn-box-shadow:var(--tblr-shadow-button),var(--tblr-shadow-button-inset)}.btn-outline-success{--tblr-btn-color:var(--tblr-success);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-success);--tblr-btn-hover-color:var(--tblr-success-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-success);--tblr-btn-active-color:var(--tblr-success-fg);--tblr-btn-active-bg:var(--tblr-success);--tblr-btn-disabled-color:var(--tblr-success);--tblr-btn-disabled-border-color:var(--tblr-success)}.btn-info{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-info-fg);--tblr-btn-bg:var(--tblr-info);--tblr-btn-hover-color:var(--tblr-info-fg);--tblr-btn-hover-bg:rgba(var(--tblr-info-rgb), .8);--tblr-btn-active-color:var(--tblr-info-fg);--tblr-btn-active-bg:rgba(var(--tblr-info-rgb), .8);--tblr-btn-disabled-bg:var(--tblr-info);--tblr-btn-disabled-color:var(--tblr-info-fg);--tblr-btn-box-shadow:var(--tblr-shadow-button),var(--tblr-shadow-button-inset)}.btn-outline-info{--tblr-btn-color:var(--tblr-info);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-info);--tblr-btn-hover-color:var(--tblr-info-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-info);--tblr-btn-active-color:var(--tblr-info-fg);--tblr-btn-active-bg:var(--tblr-info);--tblr-btn-disabled-color:var(--tblr-info);--tblr-btn-disabled-border-color:var(--tblr-info)}.btn-warning{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-warning-fg);--tblr-btn-bg:var(--tblr-warning);--tblr-btn-hover-color:var(--tblr-warning-fg);--tblr-btn-hover-bg:rgba(var(--tblr-warning-rgb), .8);--tblr-btn-active-color:var(--tblr-warning-fg);--tblr-btn-active-bg:rgba(var(--tblr-warning-rgb), .8);--tblr-btn-disabled-bg:var(--tblr-warning);--tblr-btn-disabled-color:var(--tblr-warning-fg);--tblr-btn-box-shadow:var(--tblr-shadow-button),var(--tblr-shadow-button-inset)}.btn-outline-warning{--tblr-btn-color:var(--tblr-warning);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-warning);--tblr-btn-hover-color:var(--tblr-warning-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-warning);--tblr-btn-active-color:var(--tblr-warning-fg);--tblr-btn-active-bg:var(--tblr-warning);--tblr-btn-disabled-color:var(--tblr-warning);--tblr-btn-disabled-border-color:var(--tblr-warning)}.btn-danger{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-danger-fg);--tblr-btn-bg:var(--tblr-danger);--tblr-btn-hover-color:var(--tblr-danger-fg);--tblr-btn-hover-bg:rgba(var(--tblr-danger-rgb), .8);--tblr-btn-active-color:var(--tblr-danger-fg);--tblr-btn-active-bg:rgba(var(--tblr-danger-rgb), .8);--tblr-btn-disabled-bg:var(--tblr-danger);--tblr-btn-disabled-color:var(--tblr-danger-fg);--tblr-btn-box-shadow:var(--tblr-shadow-button),var(--tblr-shadow-button-inset)}.btn-outline-danger{--tblr-btn-color:var(--tblr-danger);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-danger);--tblr-btn-hover-color:var(--tblr-danger-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-danger);--tblr-btn-active-color:var(--tblr-danger-fg);--tblr-btn-active-bg:var(--tblr-danger);--tblr-btn-disabled-color:var(--tblr-danger);--tblr-btn-disabled-border-color:var(--tblr-danger)}.btn-light{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-light-fg);--tblr-btn-bg:var(--tblr-light);--tblr-btn-hover-color:var(--tblr-light-fg);--tblr-btn-hover-bg:rgba(var(--tblr-light-rgb), .8);--tblr-btn-active-color:var(--tblr-light-fg);--tblr-btn-active-bg:rgba(var(--tblr-light-rgb), .8);--tblr-btn-disabled-bg:var(--tblr-light);--tblr-btn-disabled-color:var(--tblr-light-fg);--tblr-btn-box-shadow:var(--tblr-shadow-button),var(--tblr-shadow-button-inset)}.btn-outline-light{--tblr-btn-color:var(--tblr-light);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-light);--tblr-btn-hover-color:var(--tblr-light-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-light);--tblr-btn-active-color:var(--tblr-light-fg);--tblr-btn-active-bg:var(--tblr-light);--tblr-btn-disabled-color:var(--tblr-light);--tblr-btn-disabled-border-color:var(--tblr-light)}.btn-dark{--tblr-btn-border-color:var(--tblr-dark-mode-border-color);--tblr-btn-hover-border-color:var(--tblr-dark-mode-border-color-active);--tblr-btn-active-border-color:var(--tblr-dark-mode-border-color-active);--tblr-btn-color:var(--tblr-dark-fg);--tblr-btn-bg:var(--tblr-dark);--tblr-btn-hover-color:var(--tblr-dark-fg);--tblr-btn-hover-bg:rgba(var(--tblr-dark-rgb), .8);--tblr-btn-active-color:var(--tblr-dark-fg);--tblr-btn-active-bg:rgba(var(--tblr-dark-rgb), .8);--tblr-btn-disabled-bg:var(--tblr-dark);--tblr-btn-disabled-color:var(--tblr-dark-fg);--tblr-btn-box-shadow:var(--tblr-shadow-button),var(--tblr-shadow-button-inset)}.btn-outline-dark{--tblr-btn-color:var(--tblr-dark);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-dark);--tblr-btn-hover-color:var(--tblr-dark-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-dark);--tblr-btn-active-color:var(--tblr-dark-fg);--tblr-btn-active-bg:var(--tblr-dark);--tblr-btn-disabled-color:var(--tblr-dark);--tblr-btn-disabled-border-color:var(--tblr-dark)}.btn-muted{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-muted-fg);--tblr-btn-bg:var(--tblr-muted);--tblr-btn-hover-color:var(--tblr-muted-fg);--tblr-btn-hover-bg:rgba(var(--tblr-muted-rgb), .8);--tblr-btn-active-color:var(--tblr-muted-fg);--tblr-btn-active-bg:rgba(var(--tblr-muted-rgb), .8);--tblr-btn-disabled-bg:var(--tblr-muted);--tblr-btn-disabled-color:var(--tblr-muted-fg);--tblr-btn-box-shadow:var(--tblr-shadow-button),var(--tblr-shadow-button-inset)}.btn-outline-muted{--tblr-btn-color:var(--tblr-muted);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-muted);--tblr-btn-hover-color:var(--tblr-muted-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-muted);--tblr-btn-active-color:var(--tblr-muted-fg);--tblr-btn-active-bg:var(--tblr-muted);--tblr-btn-disabled-color:var(--tblr-muted);--tblr-btn-disabled-border-color:var(--tblr-muted)}.btn-blue{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-blue-fg);--tblr-btn-bg:var(--tblr-blue);--tblr-btn-hover-color:var(--tblr-blue-fg);--tblr-btn-hover-bg:rgba(var(--tblr-blue-rgb), .8);--tblr-btn-active-color:var(--tblr-blue-fg);--tblr-btn-active-bg:rgba(var(--tblr-blue-rgb), .8);--tblr-btn-disabled-bg:var(--tblr-blue);--tblr-btn-disabled-color:var(--tblr-blue-fg);--tblr-btn-box-shadow:var(--tblr-shadow-button),var(--tblr-shadow-button-inset)}.btn-outline-blue{--tblr-btn-color:var(--tblr-blue);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-blue);--tblr-btn-hover-color:var(--tblr-blue-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-blue);--tblr-btn-active-color:var(--tblr-blue-fg);--tblr-btn-active-bg:var(--tblr-blue);--tblr-btn-disabled-color:var(--tblr-blue);--tblr-btn-disabled-border-color:var(--tblr-blue)}.btn-azure{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-azure-fg);--tblr-btn-bg:var(--tblr-azure);--tblr-btn-hover-color:var(--tblr-azure-fg);--tblr-btn-hover-bg:rgba(var(--tblr-azure-rgb), .8);--tblr-btn-active-color:var(--tblr-azure-fg);--tblr-btn-active-bg:rgba(var(--tblr-azure-rgb), .8);--tblr-btn-disabled-bg:var(--tblr-azure);--tblr-btn-disabled-color:var(--tblr-azure-fg);--tblr-btn-box-shadow:var(--tblr-shadow-button),var(--tblr-shadow-button-inset)}.btn-outline-azure{--tblr-btn-color:var(--tblr-azure);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-azure);--tblr-btn-hover-color:var(--tblr-azure-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-azure);--tblr-btn-active-color:var(--tblr-azure-fg);--tblr-btn-active-bg:var(--tblr-azure);--tblr-btn-disabled-color:var(--tblr-azure);--tblr-btn-disabled-border-color:var(--tblr-azure)}.btn-indigo{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-indigo-fg);--tblr-btn-bg:var(--tblr-indigo);--tblr-btn-hover-color:var(--tblr-indigo-fg);--tblr-btn-hover-bg:rgba(var(--tblr-indigo-rgb), .8);--tblr-btn-active-color:var(--tblr-indigo-fg);--tblr-btn-active-bg:rgba(var(--tblr-indigo-rgb), .8);--tblr-btn-disabled-bg:var(--tblr-indigo);--tblr-btn-disabled-color:var(--tblr-indigo-fg);--tblr-btn-box-shadow:var(--tblr-shadow-button),var(--tblr-shadow-button-inset)}.btn-outline-indigo{--tblr-btn-color:var(--tblr-indigo);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-indigo);--tblr-btn-hover-color:var(--tblr-indigo-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-indigo);--tblr-btn-active-color:var(--tblr-indigo-fg);--tblr-btn-active-bg:var(--tblr-indigo);--tblr-btn-disabled-color:var(--tblr-indigo);--tblr-btn-disabled-border-color:var(--tblr-indigo)}.btn-purple{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-purple-fg);--tblr-btn-bg:var(--tblr-purple);--tblr-btn-hover-color:var(--tblr-purple-fg);--tblr-btn-hover-bg:rgba(var(--tblr-purple-rgb), .8);--tblr-btn-active-color:var(--tblr-purple-fg);--tblr-btn-active-bg:rgba(var(--tblr-purple-rgb), .8);--tblr-btn-disabled-bg:var(--tblr-purple);--tblr-btn-disabled-color:var(--tblr-purple-fg);--tblr-btn-box-shadow:var(--tblr-shadow-button),var(--tblr-shadow-button-inset)}.btn-outline-purple{--tblr-btn-color:var(--tblr-purple);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-purple);--tblr-btn-hover-color:var(--tblr-purple-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-purple);--tblr-btn-active-color:var(--tblr-purple-fg);--tblr-btn-active-bg:var(--tblr-purple);--tblr-btn-disabled-color:var(--tblr-purple);--tblr-btn-disabled-border-color:var(--tblr-purple)}.btn-pink{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-pink-fg);--tblr-btn-bg:var(--tblr-pink);--tblr-btn-hover-color:var(--tblr-pink-fg);--tblr-btn-hover-bg:rgba(var(--tblr-pink-rgb), .8);--tblr-btn-active-color:var(--tblr-pink-fg);--tblr-btn-active-bg:rgba(var(--tblr-pink-rgb), .8);--tblr-btn-disabled-bg:var(--tblr-pink);--tblr-btn-disabled-color:var(--tblr-pink-fg);--tblr-btn-box-shadow:var(--tblr-shadow-button),var(--tblr-shadow-button-inset)}.btn-outline-pink{--tblr-btn-color:var(--tblr-pink);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-pink);--tblr-btn-hover-color:var(--tblr-pink-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-pink);--tblr-btn-active-color:var(--tblr-pink-fg);--tblr-btn-active-bg:var(--tblr-pink);--tblr-btn-disabled-color:var(--tblr-pink);--tblr-btn-disabled-border-color:var(--tblr-pink)}.btn-red{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-red-fg);--tblr-btn-bg:var(--tblr-red);--tblr-btn-hover-color:var(--tblr-red-fg);--tblr-btn-hover-bg:rgba(var(--tblr-red-rgb), .8);--tblr-btn-active-color:var(--tblr-red-fg);--tblr-btn-active-bg:rgba(var(--tblr-red-rgb), .8);--tblr-btn-disabled-bg:var(--tblr-red);--tblr-btn-disabled-color:var(--tblr-red-fg);--tblr-btn-box-shadow:var(--tblr-shadow-button),var(--tblr-shadow-button-inset)}.btn-outline-red{--tblr-btn-color:var(--tblr-red);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-red);--tblr-btn-hover-color:var(--tblr-red-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-red);--tblr-btn-active-color:var(--tblr-red-fg);--tblr-btn-active-bg:var(--tblr-red);--tblr-btn-disabled-color:var(--tblr-red);--tblr-btn-disabled-border-color:var(--tblr-red)}.btn-orange{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-orange-fg);--tblr-btn-bg:var(--tblr-orange);--tblr-btn-hover-color:var(--tblr-orange-fg);--tblr-btn-hover-bg:rgba(var(--tblr-orange-rgb), .8);--tblr-btn-active-color:var(--tblr-orange-fg);--tblr-btn-active-bg:rgba(var(--tblr-orange-rgb), .8);--tblr-btn-disabled-bg:var(--tblr-orange);--tblr-btn-disabled-color:var(--tblr-orange-fg);--tblr-btn-box-shadow:var(--tblr-shadow-button),var(--tblr-shadow-button-inset)}.btn-outline-orange{--tblr-btn-color:var(--tblr-orange);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-orange);--tblr-btn-hover-color:var(--tblr-orange-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-orange);--tblr-btn-active-color:var(--tblr-orange-fg);--tblr-btn-active-bg:var(--tblr-orange);--tblr-btn-disabled-color:var(--tblr-orange);--tblr-btn-disabled-border-color:var(--tblr-orange)}.btn-yellow{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-yellow-fg);--tblr-btn-bg:var(--tblr-yellow);--tblr-btn-hover-color:var(--tblr-yellow-fg);--tblr-btn-hover-bg:rgba(var(--tblr-yellow-rgb), .8);--tblr-btn-active-color:var(--tblr-yellow-fg);--tblr-btn-active-bg:rgba(var(--tblr-yellow-rgb), .8);--tblr-btn-disabled-bg:var(--tblr-yellow);--tblr-btn-disabled-color:var(--tblr-yellow-fg);--tblr-btn-box-shadow:var(--tblr-shadow-button),var(--tblr-shadow-button-inset)}.btn-outline-yellow{--tblr-btn-color:var(--tblr-yellow);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-yellow);--tblr-btn-hover-color:var(--tblr-yellow-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-yellow);--tblr-btn-active-color:var(--tblr-yellow-fg);--tblr-btn-active-bg:var(--tblr-yellow);--tblr-btn-disabled-color:var(--tblr-yellow);--tblr-btn-disabled-border-color:var(--tblr-yellow)}.btn-lime{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-lime-fg);--tblr-btn-bg:var(--tblr-lime);--tblr-btn-hover-color:var(--tblr-lime-fg);--tblr-btn-hover-bg:rgba(var(--tblr-lime-rgb), .8);--tblr-btn-active-color:var(--tblr-lime-fg);--tblr-btn-active-bg:rgba(var(--tblr-lime-rgb), .8);--tblr-btn-disabled-bg:var(--tblr-lime);--tblr-btn-disabled-color:var(--tblr-lime-fg);--tblr-btn-box-shadow:var(--tblr-shadow-button),var(--tblr-shadow-button-inset)}.btn-outline-lime{--tblr-btn-color:var(--tblr-lime);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-lime);--tblr-btn-hover-color:var(--tblr-lime-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-lime);--tblr-btn-active-color:var(--tblr-lime-fg);--tblr-btn-active-bg:var(--tblr-lime);--tblr-btn-disabled-color:var(--tblr-lime);--tblr-btn-disabled-border-color:var(--tblr-lime)}.btn-green{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-green-fg);--tblr-btn-bg:var(--tblr-green);--tblr-btn-hover-color:var(--tblr-green-fg);--tblr-btn-hover-bg:rgba(var(--tblr-green-rgb), .8);--tblr-btn-active-color:var(--tblr-green-fg);--tblr-btn-active-bg:rgba(var(--tblr-green-rgb), .8);--tblr-btn-disabled-bg:var(--tblr-green);--tblr-btn-disabled-color:var(--tblr-green-fg);--tblr-btn-box-shadow:var(--tblr-shadow-button),var(--tblr-shadow-button-inset)}.btn-outline-green{--tblr-btn-color:var(--tblr-green);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-green);--tblr-btn-hover-color:var(--tblr-green-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-green);--tblr-btn-active-color:var(--tblr-green-fg);--tblr-btn-active-bg:var(--tblr-green);--tblr-btn-disabled-color:var(--tblr-green);--tblr-btn-disabled-border-color:var(--tblr-green)}.btn-teal{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-teal-fg);--tblr-btn-bg:var(--tblr-teal);--tblr-btn-hover-color:var(--tblr-teal-fg);--tblr-btn-hover-bg:rgba(var(--tblr-teal-rgb), .8);--tblr-btn-active-color:var(--tblr-teal-fg);--tblr-btn-active-bg:rgba(var(--tblr-teal-rgb), .8);--tblr-btn-disabled-bg:var(--tblr-teal);--tblr-btn-disabled-color:var(--tblr-teal-fg);--tblr-btn-box-shadow:var(--tblr-shadow-button),var(--tblr-shadow-button-inset)}.btn-outline-teal{--tblr-btn-color:var(--tblr-teal);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-teal);--tblr-btn-hover-color:var(--tblr-teal-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-teal);--tblr-btn-active-color:var(--tblr-teal-fg);--tblr-btn-active-bg:var(--tblr-teal);--tblr-btn-disabled-color:var(--tblr-teal);--tblr-btn-disabled-border-color:var(--tblr-teal)}.btn-cyan{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-cyan-fg);--tblr-btn-bg:var(--tblr-cyan);--tblr-btn-hover-color:var(--tblr-cyan-fg);--tblr-btn-hover-bg:rgba(var(--tblr-cyan-rgb), .8);--tblr-btn-active-color:var(--tblr-cyan-fg);--tblr-btn-active-bg:rgba(var(--tblr-cyan-rgb), .8);--tblr-btn-disabled-bg:var(--tblr-cyan);--tblr-btn-disabled-color:var(--tblr-cyan-fg);--tblr-btn-box-shadow:var(--tblr-shadow-button),var(--tblr-shadow-button-inset)}.btn-outline-cyan{--tblr-btn-color:var(--tblr-cyan);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-cyan);--tblr-btn-hover-color:var(--tblr-cyan-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-cyan);--tblr-btn-active-color:var(--tblr-cyan-fg);--tblr-btn-active-bg:var(--tblr-cyan);--tblr-btn-disabled-color:var(--tblr-cyan);--tblr-btn-disabled-border-color:var(--tblr-cyan)}.btn-facebook{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-facebook-fg);--tblr-btn-bg:var(--tblr-facebook);--tblr-btn-hover-color:var(--tblr-facebook-fg);--tblr-btn-hover-bg:rgba(var(--tblr-facebook-rgb), .8);--tblr-btn-active-color:var(--tblr-facebook-fg);--tblr-btn-active-bg:rgba(var(--tblr-facebook-rgb), .8);--tblr-btn-disabled-bg:var(--tblr-facebook);--tblr-btn-disabled-color:var(--tblr-facebook-fg);--tblr-btn-box-shadow:var(--tblr-shadow-button),var(--tblr-shadow-button-inset)}.btn-outline-facebook{--tblr-btn-color:var(--tblr-facebook);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-facebook);--tblr-btn-hover-color:var(--tblr-facebook-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-facebook);--tblr-btn-active-color:var(--tblr-facebook-fg);--tblr-btn-active-bg:var(--tblr-facebook);--tblr-btn-disabled-color:var(--tblr-facebook);--tblr-btn-disabled-border-color:var(--tblr-facebook)}.btn-twitter{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-twitter-fg);--tblr-btn-bg:var(--tblr-twitter);--tblr-btn-hover-color:var(--tblr-twitter-fg);--tblr-btn-hover-bg:rgba(var(--tblr-twitter-rgb), .8);--tblr-btn-active-color:var(--tblr-twitter-fg);--tblr-btn-active-bg:rgba(var(--tblr-twitter-rgb), .8);--tblr-btn-disabled-bg:var(--tblr-twitter);--tblr-btn-disabled-color:var(--tblr-twitter-fg);--tblr-btn-box-shadow:var(--tblr-shadow-button),var(--tblr-shadow-button-inset)}.btn-outline-twitter{--tblr-btn-color:var(--tblr-twitter);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-twitter);--tblr-btn-hover-color:var(--tblr-twitter-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-twitter);--tblr-btn-active-color:var(--tblr-twitter-fg);--tblr-btn-active-bg:var(--tblr-twitter);--tblr-btn-disabled-color:var(--tblr-twitter);--tblr-btn-disabled-border-color:var(--tblr-twitter)}.btn-linkedin{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-linkedin-fg);--tblr-btn-bg:var(--tblr-linkedin);--tblr-btn-hover-color:var(--tblr-linkedin-fg);--tblr-btn-hover-bg:rgba(var(--tblr-linkedin-rgb), .8);--tblr-btn-active-color:var(--tblr-linkedin-fg);--tblr-btn-active-bg:rgba(var(--tblr-linkedin-rgb), .8);--tblr-btn-disabled-bg:var(--tblr-linkedin);--tblr-btn-disabled-color:var(--tblr-linkedin-fg);--tblr-btn-box-shadow:var(--tblr-shadow-button),var(--tblr-shadow-button-inset)}.btn-outline-linkedin{--tblr-btn-color:var(--tblr-linkedin);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-linkedin);--tblr-btn-hover-color:var(--tblr-linkedin-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-linkedin);--tblr-btn-active-color:var(--tblr-linkedin-fg);--tblr-btn-active-bg:var(--tblr-linkedin);--tblr-btn-disabled-color:var(--tblr-linkedin);--tblr-btn-disabled-border-color:var(--tblr-linkedin)}.btn-google{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-google-fg);--tblr-btn-bg:var(--tblr-google);--tblr-btn-hover-color:var(--tblr-google-fg);--tblr-btn-hover-bg:rgba(var(--tblr-google-rgb), .8);--tblr-btn-active-color:var(--tblr-google-fg);--tblr-btn-active-bg:rgba(var(--tblr-google-rgb), .8);--tblr-btn-disabled-bg:var(--tblr-google);--tblr-btn-disabled-color:var(--tblr-google-fg);--tblr-btn-box-shadow:var(--tblr-shadow-button),var(--tblr-shadow-button-inset)}.btn-outline-google{--tblr-btn-color:var(--tblr-google);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-google);--tblr-btn-hover-color:var(--tblr-google-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-google);--tblr-btn-active-color:var(--tblr-google-fg);--tblr-btn-active-bg:var(--tblr-google);--tblr-btn-disabled-color:var(--tblr-google);--tblr-btn-disabled-border-color:var(--tblr-google)}.btn-youtube{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-youtube-fg);--tblr-btn-bg:var(--tblr-youtube);--tblr-btn-hover-color:var(--tblr-youtube-fg);--tblr-btn-hover-bg:rgba(var(--tblr-youtube-rgb), .8);--tblr-btn-active-color:var(--tblr-youtube-fg);--tblr-btn-active-bg:rgba(var(--tblr-youtube-rgb), .8);--tblr-btn-disabled-bg:var(--tblr-youtube);--tblr-btn-disabled-color:var(--tblr-youtube-fg);--tblr-btn-box-shadow:var(--tblr-shadow-button),var(--tblr-shadow-button-inset)}.btn-outline-youtube{--tblr-btn-color:var(--tblr-youtube);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-youtube);--tblr-btn-hover-color:var(--tblr-youtube-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-youtube);--tblr-btn-active-color:var(--tblr-youtube-fg);--tblr-btn-active-bg:var(--tblr-youtube);--tblr-btn-disabled-color:var(--tblr-youtube);--tblr-btn-disabled-border-color:var(--tblr-youtube)}.btn-vimeo{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-vimeo-fg);--tblr-btn-bg:var(--tblr-vimeo);--tblr-btn-hover-color:var(--tblr-vimeo-fg);--tblr-btn-hover-bg:rgba(var(--tblr-vimeo-rgb), .8);--tblr-btn-active-color:var(--tblr-vimeo-fg);--tblr-btn-active-bg:rgba(var(--tblr-vimeo-rgb), .8);--tblr-btn-disabled-bg:var(--tblr-vimeo);--tblr-btn-disabled-color:var(--tblr-vimeo-fg);--tblr-btn-box-shadow:var(--tblr-shadow-button),var(--tblr-shadow-button-inset)}.btn-outline-vimeo{--tblr-btn-color:var(--tblr-vimeo);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-vimeo);--tblr-btn-hover-color:var(--tblr-vimeo-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-vimeo);--tblr-btn-active-color:var(--tblr-vimeo-fg);--tblr-btn-active-bg:var(--tblr-vimeo);--tblr-btn-disabled-color:var(--tblr-vimeo);--tblr-btn-disabled-border-color:var(--tblr-vimeo)}.btn-dribbble{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-dribbble-fg);--tblr-btn-bg:var(--tblr-dribbble);--tblr-btn-hover-color:var(--tblr-dribbble-fg);--tblr-btn-hover-bg:rgba(var(--tblr-dribbble-rgb), .8);--tblr-btn-active-color:var(--tblr-dribbble-fg);--tblr-btn-active-bg:rgba(var(--tblr-dribbble-rgb), .8);--tblr-btn-disabled-bg:var(--tblr-dribbble);--tblr-btn-disabled-color:var(--tblr-dribbble-fg);--tblr-btn-box-shadow:var(--tblr-shadow-button),var(--tblr-shadow-button-inset)}.btn-outline-dribbble{--tblr-btn-color:var(--tblr-dribbble);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-dribbble);--tblr-btn-hover-color:var(--tblr-dribbble-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-dribbble);--tblr-btn-active-color:var(--tblr-dribbble-fg);--tblr-btn-active-bg:var(--tblr-dribbble);--tblr-btn-disabled-color:var(--tblr-dribbble);--tblr-btn-disabled-border-color:var(--tblr-dribbble)}.btn-github{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-github-fg);--tblr-btn-bg:var(--tblr-github);--tblr-btn-hover-color:var(--tblr-github-fg);--tblr-btn-hover-bg:rgba(var(--tblr-github-rgb), .8);--tblr-btn-active-color:var(--tblr-github-fg);--tblr-btn-active-bg:rgba(var(--tblr-github-rgb), .8);--tblr-btn-disabled-bg:var(--tblr-github);--tblr-btn-disabled-color:var(--tblr-github-fg);--tblr-btn-box-shadow:var(--tblr-shadow-button),var(--tblr-shadow-button-inset)}.btn-outline-github{--tblr-btn-color:var(--tblr-github);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-github);--tblr-btn-hover-color:var(--tblr-github-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-github);--tblr-btn-active-color:var(--tblr-github-fg);--tblr-btn-active-bg:var(--tblr-github);--tblr-btn-disabled-color:var(--tblr-github);--tblr-btn-disabled-border-color:var(--tblr-github)}.btn-instagram{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-instagram-fg);--tblr-btn-bg:var(--tblr-instagram);--tblr-btn-hover-color:var(--tblr-instagram-fg);--tblr-btn-hover-bg:rgba(var(--tblr-instagram-rgb), .8);--tblr-btn-active-color:var(--tblr-instagram-fg);--tblr-btn-active-bg:rgba(var(--tblr-instagram-rgb), .8);--tblr-btn-disabled-bg:var(--tblr-instagram);--tblr-btn-disabled-color:var(--tblr-instagram-fg);--tblr-btn-box-shadow:var(--tblr-shadow-button),var(--tblr-shadow-button-inset)}.btn-outline-instagram{--tblr-btn-color:var(--tblr-instagram);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-instagram);--tblr-btn-hover-color:var(--tblr-instagram-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-instagram);--tblr-btn-active-color:var(--tblr-instagram-fg);--tblr-btn-active-bg:var(--tblr-instagram);--tblr-btn-disabled-color:var(--tblr-instagram);--tblr-btn-disabled-border-color:var(--tblr-instagram)}.btn-pinterest{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-pinterest-fg);--tblr-btn-bg:var(--tblr-pinterest);--tblr-btn-hover-color:var(--tblr-pinterest-fg);--tblr-btn-hover-bg:rgba(var(--tblr-pinterest-rgb), .8);--tblr-btn-active-color:var(--tblr-pinterest-fg);--tblr-btn-active-bg:rgba(var(--tblr-pinterest-rgb), .8);--tblr-btn-disabled-bg:var(--tblr-pinterest);--tblr-btn-disabled-color:var(--tblr-pinterest-fg);--tblr-btn-box-shadow:var(--tblr-shadow-button),var(--tblr-shadow-button-inset)}.btn-outline-pinterest{--tblr-btn-color:var(--tblr-pinterest);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-pinterest);--tblr-btn-hover-color:var(--tblr-pinterest-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-pinterest);--tblr-btn-active-color:var(--tblr-pinterest-fg);--tblr-btn-active-bg:var(--tblr-pinterest);--tblr-btn-disabled-color:var(--tblr-pinterest);--tblr-btn-disabled-border-color:var(--tblr-pinterest)}.btn-vk{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-vk-fg);--tblr-btn-bg:var(--tblr-vk);--tblr-btn-hover-color:var(--tblr-vk-fg);--tblr-btn-hover-bg:rgba(var(--tblr-vk-rgb), .8);--tblr-btn-active-color:var(--tblr-vk-fg);--tblr-btn-active-bg:rgba(var(--tblr-vk-rgb), .8);--tblr-btn-disabled-bg:var(--tblr-vk);--tblr-btn-disabled-color:var(--tblr-vk-fg);--tblr-btn-box-shadow:var(--tblr-shadow-button),var(--tblr-shadow-button-inset)}.btn-outline-vk{--tblr-btn-color:var(--tblr-vk);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-vk);--tblr-btn-hover-color:var(--tblr-vk-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-vk);--tblr-btn-active-color:var(--tblr-vk-fg);--tblr-btn-active-bg:var(--tblr-vk);--tblr-btn-disabled-color:var(--tblr-vk);--tblr-btn-disabled-border-color:var(--tblr-vk)}.btn-rss{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-rss-fg);--tblr-btn-bg:var(--tblr-rss);--tblr-btn-hover-color:var(--tblr-rss-fg);--tblr-btn-hover-bg:rgba(var(--tblr-rss-rgb), .8);--tblr-btn-active-color:var(--tblr-rss-fg);--tblr-btn-active-bg:rgba(var(--tblr-rss-rgb), .8);--tblr-btn-disabled-bg:var(--tblr-rss);--tblr-btn-disabled-color:var(--tblr-rss-fg);--tblr-btn-box-shadow:var(--tblr-shadow-button),var(--tblr-shadow-button-inset)}.btn-outline-rss{--tblr-btn-color:var(--tblr-rss);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-rss);--tblr-btn-hover-color:var(--tblr-rss-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-rss);--tblr-btn-active-color:var(--tblr-rss-fg);--tblr-btn-active-bg:var(--tblr-rss);--tblr-btn-disabled-color:var(--tblr-rss);--tblr-btn-disabled-border-color:var(--tblr-rss)}.btn-flickr{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-flickr-fg);--tblr-btn-bg:var(--tblr-flickr);--tblr-btn-hover-color:var(--tblr-flickr-fg);--tblr-btn-hover-bg:rgba(var(--tblr-flickr-rgb), .8);--tblr-btn-active-color:var(--tblr-flickr-fg);--tblr-btn-active-bg:rgba(var(--tblr-flickr-rgb), .8);--tblr-btn-disabled-bg:var(--tblr-flickr);--tblr-btn-disabled-color:var(--tblr-flickr-fg);--tblr-btn-box-shadow:var(--tblr-shadow-button),var(--tblr-shadow-button-inset)}.btn-outline-flickr{--tblr-btn-color:var(--tblr-flickr);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-flickr);--tblr-btn-hover-color:var(--tblr-flickr-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-flickr);--tblr-btn-active-color:var(--tblr-flickr-fg);--tblr-btn-active-bg:var(--tblr-flickr);--tblr-btn-disabled-color:var(--tblr-flickr);--tblr-btn-disabled-border-color:var(--tblr-flickr)}.btn-bitbucket{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-bitbucket-fg);--tblr-btn-bg:var(--tblr-bitbucket);--tblr-btn-hover-color:var(--tblr-bitbucket-fg);--tblr-btn-hover-bg:rgba(var(--tblr-bitbucket-rgb), .8);--tblr-btn-active-color:var(--tblr-bitbucket-fg);--tblr-btn-active-bg:rgba(var(--tblr-bitbucket-rgb), .8);--tblr-btn-disabled-bg:var(--tblr-bitbucket);--tblr-btn-disabled-color:var(--tblr-bitbucket-fg);--tblr-btn-box-shadow:var(--tblr-shadow-button),var(--tblr-shadow-button-inset)}.btn-outline-bitbucket{--tblr-btn-color:var(--tblr-bitbucket);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-bitbucket);--tblr-btn-hover-color:var(--tblr-bitbucket-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-bitbucket);--tblr-btn-active-color:var(--tblr-bitbucket-fg);--tblr-btn-active-bg:var(--tblr-bitbucket);--tblr-btn-disabled-color:var(--tblr-bitbucket);--tblr-btn-disabled-border-color:var(--tblr-bitbucket)}.btn-tabler{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-tabler-fg);--tblr-btn-bg:var(--tblr-tabler);--tblr-btn-hover-color:var(--tblr-tabler-fg);--tblr-btn-hover-bg:rgba(var(--tblr-tabler-rgb), .8);--tblr-btn-active-color:var(--tblr-tabler-fg);--tblr-btn-active-bg:rgba(var(--tblr-tabler-rgb), .8);--tblr-btn-disabled-bg:var(--tblr-tabler);--tblr-btn-disabled-color:var(--tblr-tabler-fg);--tblr-btn-box-shadow:var(--tblr-shadow-button),var(--tblr-shadow-button-inset)}.btn-outline-tabler{--tblr-btn-color:var(--tblr-tabler);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-tabler);--tblr-btn-hover-color:var(--tblr-tabler-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-tabler);--tblr-btn-active-color:var(--tblr-tabler-fg);--tblr-btn-active-bg:var(--tblr-tabler);--tblr-btn-disabled-color:var(--tblr-tabler);--tblr-btn-disabled-border-color:var(--tblr-tabler)}.btn-ghost-primary{--tblr-btn-color:var(--tblr-primary);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-primary-fg);--tblr-btn-hover-bg:var(--tblr-primary);--tblr-btn-hover-border-color:var(--tblr-primary);--tblr-btn-active-color:var(--tblr-primary-fg);--tblr-btn-active-bg:var(--tblr-primary);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, .125);--tblr-btn-disabled-color:var(--tblr-primary);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-secondary{--tblr-btn-color:var(--tblr-secondary);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-secondary-fg);--tblr-btn-hover-bg:var(--tblr-secondary);--tblr-btn-hover-border-color:var(--tblr-secondary);--tblr-btn-active-color:var(--tblr-secondary-fg);--tblr-btn-active-bg:var(--tblr-secondary);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, .125);--tblr-btn-disabled-color:var(--tblr-secondary);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-success{--tblr-btn-color:var(--tblr-success);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-success-fg);--tblr-btn-hover-bg:var(--tblr-success);--tblr-btn-hover-border-color:var(--tblr-success);--tblr-btn-active-color:var(--tblr-success-fg);--tblr-btn-active-bg:var(--tblr-success);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, .125);--tblr-btn-disabled-color:var(--tblr-success);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-info{--tblr-btn-color:var(--tblr-info);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-info-fg);--tblr-btn-hover-bg:var(--tblr-info);--tblr-btn-hover-border-color:var(--tblr-info);--tblr-btn-active-color:var(--tblr-info-fg);--tblr-btn-active-bg:var(--tblr-info);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, .125);--tblr-btn-disabled-color:var(--tblr-info);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-warning{--tblr-btn-color:var(--tblr-warning);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-warning-fg);--tblr-btn-hover-bg:var(--tblr-warning);--tblr-btn-hover-border-color:var(--tblr-warning);--tblr-btn-active-color:var(--tblr-warning-fg);--tblr-btn-active-bg:var(--tblr-warning);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, .125);--tblr-btn-disabled-color:var(--tblr-warning);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-danger{--tblr-btn-color:var(--tblr-danger);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-danger-fg);--tblr-btn-hover-bg:var(--tblr-danger);--tblr-btn-hover-border-color:var(--tblr-danger);--tblr-btn-active-color:var(--tblr-danger-fg);--tblr-btn-active-bg:var(--tblr-danger);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, .125);--tblr-btn-disabled-color:var(--tblr-danger);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-light{--tblr-btn-color:var(--tblr-light);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-light-fg);--tblr-btn-hover-bg:var(--tblr-light);--tblr-btn-hover-border-color:var(--tblr-light);--tblr-btn-active-color:var(--tblr-light-fg);--tblr-btn-active-bg:var(--tblr-light);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, .125);--tblr-btn-disabled-color:var(--tblr-light);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-dark{--tblr-btn-color:var(--tblr-dark);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-dark-fg);--tblr-btn-hover-bg:var(--tblr-dark);--tblr-btn-hover-border-color:var(--tblr-dark);--tblr-btn-active-color:var(--tblr-dark-fg);--tblr-btn-active-bg:var(--tblr-dark);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, .125);--tblr-btn-disabled-color:var(--tblr-dark);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-muted{--tblr-btn-color:var(--tblr-muted);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-muted-fg);--tblr-btn-hover-bg:var(--tblr-muted);--tblr-btn-hover-border-color:var(--tblr-muted);--tblr-btn-active-color:var(--tblr-muted-fg);--tblr-btn-active-bg:var(--tblr-muted);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, .125);--tblr-btn-disabled-color:var(--tblr-muted);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-blue{--tblr-btn-color:var(--tblr-blue);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-blue-fg);--tblr-btn-hover-bg:var(--tblr-blue);--tblr-btn-hover-border-color:var(--tblr-blue);--tblr-btn-active-color:var(--tblr-blue-fg);--tblr-btn-active-bg:var(--tblr-blue);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, .125);--tblr-btn-disabled-color:var(--tblr-blue);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-azure{--tblr-btn-color:var(--tblr-azure);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-azure-fg);--tblr-btn-hover-bg:var(--tblr-azure);--tblr-btn-hover-border-color:var(--tblr-azure);--tblr-btn-active-color:var(--tblr-azure-fg);--tblr-btn-active-bg:var(--tblr-azure);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, .125);--tblr-btn-disabled-color:var(--tblr-azure);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-indigo{--tblr-btn-color:var(--tblr-indigo);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-indigo-fg);--tblr-btn-hover-bg:var(--tblr-indigo);--tblr-btn-hover-border-color:var(--tblr-indigo);--tblr-btn-active-color:var(--tblr-indigo-fg);--tblr-btn-active-bg:var(--tblr-indigo);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, .125);--tblr-btn-disabled-color:var(--tblr-indigo);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-purple{--tblr-btn-color:var(--tblr-purple);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-purple-fg);--tblr-btn-hover-bg:var(--tblr-purple);--tblr-btn-hover-border-color:var(--tblr-purple);--tblr-btn-active-color:var(--tblr-purple-fg);--tblr-btn-active-bg:var(--tblr-purple);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, .125);--tblr-btn-disabled-color:var(--tblr-purple);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-pink{--tblr-btn-color:var(--tblr-pink);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-pink-fg);--tblr-btn-hover-bg:var(--tblr-pink);--tblr-btn-hover-border-color:var(--tblr-pink);--tblr-btn-active-color:var(--tblr-pink-fg);--tblr-btn-active-bg:var(--tblr-pink);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, .125);--tblr-btn-disabled-color:var(--tblr-pink);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-red{--tblr-btn-color:var(--tblr-red);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-red-fg);--tblr-btn-hover-bg:var(--tblr-red);--tblr-btn-hover-border-color:var(--tblr-red);--tblr-btn-active-color:var(--tblr-red-fg);--tblr-btn-active-bg:var(--tblr-red);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, .125);--tblr-btn-disabled-color:var(--tblr-red);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-orange{--tblr-btn-color:var(--tblr-orange);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-orange-fg);--tblr-btn-hover-bg:var(--tblr-orange);--tblr-btn-hover-border-color:var(--tblr-orange);--tblr-btn-active-color:var(--tblr-orange-fg);--tblr-btn-active-bg:var(--tblr-orange);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, .125);--tblr-btn-disabled-color:var(--tblr-orange);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-yellow{--tblr-btn-color:var(--tblr-yellow);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-yellow-fg);--tblr-btn-hover-bg:var(--tblr-yellow);--tblr-btn-hover-border-color:var(--tblr-yellow);--tblr-btn-active-color:var(--tblr-yellow-fg);--tblr-btn-active-bg:var(--tblr-yellow);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, .125);--tblr-btn-disabled-color:var(--tblr-yellow);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-lime{--tblr-btn-color:var(--tblr-lime);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-lime-fg);--tblr-btn-hover-bg:var(--tblr-lime);--tblr-btn-hover-border-color:var(--tblr-lime);--tblr-btn-active-color:var(--tblr-lime-fg);--tblr-btn-active-bg:var(--tblr-lime);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, .125);--tblr-btn-disabled-color:var(--tblr-lime);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-green{--tblr-btn-color:var(--tblr-green);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-green-fg);--tblr-btn-hover-bg:var(--tblr-green);--tblr-btn-hover-border-color:var(--tblr-green);--tblr-btn-active-color:var(--tblr-green-fg);--tblr-btn-active-bg:var(--tblr-green);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, .125);--tblr-btn-disabled-color:var(--tblr-green);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-teal{--tblr-btn-color:var(--tblr-teal);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-teal-fg);--tblr-btn-hover-bg:var(--tblr-teal);--tblr-btn-hover-border-color:var(--tblr-teal);--tblr-btn-active-color:var(--tblr-teal-fg);--tblr-btn-active-bg:var(--tblr-teal);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, .125);--tblr-btn-disabled-color:var(--tblr-teal);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-cyan{--tblr-btn-color:var(--tblr-cyan);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-cyan-fg);--tblr-btn-hover-bg:var(--tblr-cyan);--tblr-btn-hover-border-color:var(--tblr-cyan);--tblr-btn-active-color:var(--tblr-cyan-fg);--tblr-btn-active-bg:var(--tblr-cyan);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, .125);--tblr-btn-disabled-color:var(--tblr-cyan);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-facebook{--tblr-btn-color:var(--tblr-facebook);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-facebook-fg);--tblr-btn-hover-bg:var(--tblr-facebook);--tblr-btn-hover-border-color:var(--tblr-facebook);--tblr-btn-active-color:var(--tblr-facebook-fg);--tblr-btn-active-bg:var(--tblr-facebook);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, .125);--tblr-btn-disabled-color:var(--tblr-facebook);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-twitter{--tblr-btn-color:var(--tblr-twitter);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-twitter-fg);--tblr-btn-hover-bg:var(--tblr-twitter);--tblr-btn-hover-border-color:var(--tblr-twitter);--tblr-btn-active-color:var(--tblr-twitter-fg);--tblr-btn-active-bg:var(--tblr-twitter);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, .125);--tblr-btn-disabled-color:var(--tblr-twitter);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-linkedin{--tblr-btn-color:var(--tblr-linkedin);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-linkedin-fg);--tblr-btn-hover-bg:var(--tblr-linkedin);--tblr-btn-hover-border-color:var(--tblr-linkedin);--tblr-btn-active-color:var(--tblr-linkedin-fg);--tblr-btn-active-bg:var(--tblr-linkedin);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, .125);--tblr-btn-disabled-color:var(--tblr-linkedin);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-google{--tblr-btn-color:var(--tblr-google);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-google-fg);--tblr-btn-hover-bg:var(--tblr-google);--tblr-btn-hover-border-color:var(--tblr-google);--tblr-btn-active-color:var(--tblr-google-fg);--tblr-btn-active-bg:var(--tblr-google);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, .125);--tblr-btn-disabled-color:var(--tblr-google);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-youtube{--tblr-btn-color:var(--tblr-youtube);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-youtube-fg);--tblr-btn-hover-bg:var(--tblr-youtube);--tblr-btn-hover-border-color:var(--tblr-youtube);--tblr-btn-active-color:var(--tblr-youtube-fg);--tblr-btn-active-bg:var(--tblr-youtube);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, .125);--tblr-btn-disabled-color:var(--tblr-youtube);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-vimeo{--tblr-btn-color:var(--tblr-vimeo);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-vimeo-fg);--tblr-btn-hover-bg:var(--tblr-vimeo);--tblr-btn-hover-border-color:var(--tblr-vimeo);--tblr-btn-active-color:var(--tblr-vimeo-fg);--tblr-btn-active-bg:var(--tblr-vimeo);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, .125);--tblr-btn-disabled-color:var(--tblr-vimeo);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-dribbble{--tblr-btn-color:var(--tblr-dribbble);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-dribbble-fg);--tblr-btn-hover-bg:var(--tblr-dribbble);--tblr-btn-hover-border-color:var(--tblr-dribbble);--tblr-btn-active-color:var(--tblr-dribbble-fg);--tblr-btn-active-bg:var(--tblr-dribbble);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, .125);--tblr-btn-disabled-color:var(--tblr-dribbble);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-github{--tblr-btn-color:var(--tblr-github);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-github-fg);--tblr-btn-hover-bg:var(--tblr-github);--tblr-btn-hover-border-color:var(--tblr-github);--tblr-btn-active-color:var(--tblr-github-fg);--tblr-btn-active-bg:var(--tblr-github);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, .125);--tblr-btn-disabled-color:var(--tblr-github);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-instagram{--tblr-btn-color:var(--tblr-instagram);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-instagram-fg);--tblr-btn-hover-bg:var(--tblr-instagram);--tblr-btn-hover-border-color:var(--tblr-instagram);--tblr-btn-active-color:var(--tblr-instagram-fg);--tblr-btn-active-bg:var(--tblr-instagram);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, .125);--tblr-btn-disabled-color:var(--tblr-instagram);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-pinterest{--tblr-btn-color:var(--tblr-pinterest);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-pinterest-fg);--tblr-btn-hover-bg:var(--tblr-pinterest);--tblr-btn-hover-border-color:var(--tblr-pinterest);--tblr-btn-active-color:var(--tblr-pinterest-fg);--tblr-btn-active-bg:var(--tblr-pinterest);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, .125);--tblr-btn-disabled-color:var(--tblr-pinterest);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-vk{--tblr-btn-color:var(--tblr-vk);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-vk-fg);--tblr-btn-hover-bg:var(--tblr-vk);--tblr-btn-hover-border-color:var(--tblr-vk);--tblr-btn-active-color:var(--tblr-vk-fg);--tblr-btn-active-bg:var(--tblr-vk);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, .125);--tblr-btn-disabled-color:var(--tblr-vk);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-rss{--tblr-btn-color:var(--tblr-rss);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-rss-fg);--tblr-btn-hover-bg:var(--tblr-rss);--tblr-btn-hover-border-color:var(--tblr-rss);--tblr-btn-active-color:var(--tblr-rss-fg);--tblr-btn-active-bg:var(--tblr-rss);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, .125);--tblr-btn-disabled-color:var(--tblr-rss);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-flickr{--tblr-btn-color:var(--tblr-flickr);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-flickr-fg);--tblr-btn-hover-bg:var(--tblr-flickr);--tblr-btn-hover-border-color:var(--tblr-flickr);--tblr-btn-active-color:var(--tblr-flickr-fg);--tblr-btn-active-bg:var(--tblr-flickr);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, .125);--tblr-btn-disabled-color:var(--tblr-flickr);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-bitbucket{--tblr-btn-color:var(--tblr-bitbucket);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-bitbucket-fg);--tblr-btn-hover-bg:var(--tblr-bitbucket);--tblr-btn-hover-border-color:var(--tblr-bitbucket);--tblr-btn-active-color:var(--tblr-bitbucket-fg);--tblr-btn-active-bg:var(--tblr-bitbucket);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, .125);--tblr-btn-disabled-color:var(--tblr-bitbucket);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-tabler{--tblr-btn-color:var(--tblr-tabler);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-tabler-fg);--tblr-btn-hover-bg:var(--tblr-tabler);--tblr-btn-hover-border-color:var(--tblr-tabler);--tblr-btn-active-color:var(--tblr-tabler-fg);--tblr-btn-active-bg:var(--tblr-tabler);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, .125);--tblr-btn-disabled-color:var(--tblr-tabler);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-group-sm>.btn,.btn-sm{--tblr-btn-line-height:1.5;--tblr-btn-icon-size:.75rem}.btn-group-lg>.btn,.btn-lg{--tblr-btn-line-height:1.5;--tblr-btn-icon-size:2rem}.btn-pill{padding-right:1.5em;padding-left:1.5em;border-radius:10rem}.btn-pill[class*=btn-icon]{padding:.375rem 15px}.btn-square{border-radius:0}.btn-icon{min-width:calc(var(--tblr-btn-line-height) * var(--tblr-btn-font-size) + var(--tblr-btn-padding-y) * 2 + var(--tblr-btn-border-width) * 2);min-height:calc(var(--tblr-btn-line-height) * var(--tblr-btn-font-size) + var(--tblr-btn-padding-y) * 2 + var(--tblr-btn-border-width) * 2);padding-left:0;padding-right:0}.btn-icon .icon{margin:calc(-1 * var(--tblr-btn-padding-x))}.btn-list{--tblr-list-gap:.5rem;display:flex;flex-wrap:wrap;gap:var(--tblr-list-gap)}.btn-floating{position:fixed;z-index:1030;bottom:1.5rem;right:1.5rem;border-radius:100rem}.btn-loading{position:relative;color:transparent!important;text-shadow:none!important;pointer-events:none}.btn-loading>*{opacity:0}.btn-loading:after{content:"";display:inline-block;vertical-align:text-bottom;border:2px var(--tblr-border-style) currentColor;border-right-color:transparent;border-radius:100rem;color:var(--tblr-btn-color);position:absolute;width:var(--tblr-btn-icon-size);height:var(--tblr-btn-icon-size);left:calc(50% - var(--tblr-btn-icon-size)/ 2);top:calc(50% - var(--tblr-btn-icon-size)/ 2);animation:spinner-border .75s linear infinite}.btn-action{padding:0;border:0;color:var(--tblr-muted);display:inline-flex;width:2rem;height:2rem;align-items:center;justify-content:center;border-radius:var(--tblr-border-radius);background:0 0}.btn-action:after{content:none}.btn-action:focus{outline:0;box-shadow:none}.btn-action.show,.btn-action:hover{color:var(--tblr-body-color);background:var(--tblr-active-bg)}.btn-action.show{color:var(--tblr-primary)}.btn-action .icon{margin:0;width:1.25rem;height:1.25rem;font-size:1.25rem;stroke-width:1}.btn-actions{display:flex}.btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group>.btn-check:checked+.btn,.btn-group>.btn.active,.btn-group>.btn:active{z-index:5}.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn-check:focus+.btn,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:1}.calendar{display:block;font-size:.765625rem;border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);border-radius:var(--tblr-border-radius)}.calendar-nav{display:flex;align-items:center}.calendar-title{flex:1;text-align:center}.calendar-body,.calendar-header{display:flex;flex-wrap:wrap;justify-content:flex-start;padding:.5rem 0}.calendar-header{color:var(--tblr-muted)}.calendar-date{flex:0 0 14.2857142857%;max-width:14.2857142857%;padding:.2rem;text-align:center;border:0}.calendar-date.next-month,.calendar-date.prev-month{opacity:.25}.calendar-date .date-item{position:relative;display:inline-block;width:1.4rem;height:1.4rem;line-height:1.4rem;color:#66758c;text-align:center;text-decoration:none;white-space:nowrap;vertical-align:middle;cursor:pointer;background:0 0;border:var(--tblr-border-width) var(--tblr-border-style) transparent;border-radius:100rem;outline:0;transition:background .3s,border .3s,box-shadow .32s,color .3s}@media (prefers-reduced-motion:reduce){.calendar-date .date-item{transition:none}}.calendar-date .date-item:hover{color:var(--tblr-primary);text-decoration:none;background:#fefeff;border-color:var(--tblr-border-color)}.calendar-date .date-today{color:var(--tblr-primary);border-color:var(--tblr-border-color)}.calendar-range{position:relative}.calendar-range:before{position:absolute;top:50%;right:0;left:0;height:1.4rem;content:"";background:rgba(var(--tblr-primary-rgb),.1);transform:translateY(-50%)}.calendar-range.range-end .date-item,.calendar-range.range-start .date-item{color:#fff;background:var(--tblr-primary);border-color:var(--tblr-primary)}.calendar-range.range-start:before{left:50%}.calendar-range.range-end:before{right:50%}.carousel-indicators-vertical{left:auto;top:0;margin:0 1rem 0 0;flex-direction:column}.carousel-indicators-vertical [data-bs-target]{margin:3px 0;width:3px;height:30px;border:0;border-left:10px var(--tblr-border-style) transparent;border-right:10px var(--tblr-border-style) transparent}.carousel-indicators-dot [data-bs-target]{width:.5rem;height:.5rem;border-radius:100rem;border:10px var(--tblr-border-style) transparent;margin:0}.carousel-indicators-thumb [data-bs-target]{width:2rem;height:auto;background:no-repeat center/cover;border:0;border-radius:var(--tblr-border-radius);box-shadow:rgba(var(--tblr-body-color-rgb),.04) 0 2px 4px;margin:0 3px;opacity:.75}@media (min-width:992px){.carousel-indicators-thumb [data-bs-target]{width:4rem}}.carousel-indicators-thumb [data-bs-target]:before{content:"";padding-top:var(--tblr-aspect-ratio,100%);display:block}.carousel-indicators-thumb.carousel-indicators-vertical [data-bs-target]{margin:3px 0}.carousel-caption-background{background:red;position:absolute;left:0;right:0;bottom:0;height:90%;background:linear-gradient(0deg,#182433e6,#18243300)}.card{transition:transform .3s ease-out,opacity .3s ease-out,box-shadow .3s ease-out}@media (prefers-reduced-motion:reduce){.card{transition:none}}@media print{.card{border:none;box-shadow:none}}a.card{color:inherit}a.card:hover{text-decoration:none;box-shadow:rgba(var(--tblr-body-color-rgb),.16) 0 2px 16px}.card .card{box-shadow:none}.card-borderless,.card-borderless .card-footer,.card-borderless .card-header{border-color:transparent}.card-stamp{--tblr-stamp-size:7rem;position:absolute;top:0;right:0;width:calc(var(--tblr-stamp-size) * 1);height:calc(var(--tblr-stamp-size) * 1);max-height:100%;border-top-right-radius:4px;opacity:.2;overflow:hidden;pointer-events:none}.card-stamp-lg{--tblr-stamp-size:13rem}.card-stamp-icon{background:var(--tblr-muted);color:var(--tblr-card-bg,var(--tblr-bg-surface));display:flex;align-items:center;justify-content:center;border-radius:100rem;width:calc(var(--tblr-stamp-size) * 1);height:calc(var(--tblr-stamp-size) * 1);position:relative;top:calc(var(--tblr-stamp-size) * -.25);right:calc(var(--tblr-stamp-size) * -.25);font-size:calc(var(--tblr-stamp-size) * .75);transform:rotate(10deg)}.card-stamp-icon .icon{stroke-width:2;width:calc(var(--tblr-stamp-size) * .75);height:calc(var(--tblr-stamp-size) * .75)}.card-img,.card-img-start{border-top-left-radius:calc(var(--tblr-border-radius) - (var(--tblr-border-width)));border-bottom-left-radius:calc(var(--tblr-border-radius) - (var(--tblr-border-width)))}.card-img,.card-img-end{border-top-right-radius:calc(var(--tblr-border-radius) - (var(--tblr-border-width)));border-bottom-right-radius:calc(var(--tblr-border-radius) - (var(--tblr-border-width)))}.card-img-overlay{display:flex;flex-direction:column;justify-content:flex-end}.card-img-overlay-dark{background-image:linear-gradient(180deg,#0000 0,#0009)}.card-inactive{pointer-events:none;box-shadow:none}.card-inactive .card-body{opacity:.64}.card-active{--tblr-card-border-color:var(--tblr-primary);--tblr-card-bg:var(--tblr-active-bg)}.card-btn{display:flex;align-items:center;justify-content:center;padding:1rem 1.5rem;text-align:center;transition:background .3s;border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);flex:1;color:inherit;font-weight:var(--tblr-font-weight-medium)}@media (prefers-reduced-motion:reduce){.card-btn{transition:none}}.card-btn:hover{text-decoration:none;background:rgba(var(--tblr-primary-rgb),.04)}.card-btn+.card-btn{border-left:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color)}.card-stacked{--tblr-card-stacked-offset:.25rem;position:relative}.card-stacked:after{position:absolute;top:calc(-1 * var(--tblr-card-stacked-offset));right:var(--tblr-card-stacked-offset);left:var(--tblr-card-stacked-offset);height:var(--tblr-card-stacked-offset);content:"";background:var(--tblr-card-bg,var(--tblr-bg-surface));border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-card-border-color);border-radius:var(--tblr-card-border-radius) var(--tblr-card-border-radius) 0 0}.card-cover{position:relative;padding:1rem 1.5rem;background:#666 no-repeat center/cover}.card-cover:before{position:absolute;top:0;right:0;bottom:0;left:0;content:"";background:#1824337a}.card-cover:first-child,.card-cover:first-child:before{border-radius:4px 4px 0 0}.card-cover-blurred:before{-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.card-actions{margin:-.5rem -.5rem -.5rem auto;padding-left:.5rem}.card-actions a{text-decoration:none}.card-header{color:inherit;display:flex;align-items:center;background:0 0}.card-header:first-child{border-radius:var(--tblr-card-border-radius) var(--tblr-card-border-radius) 0 0}.card-header-light{border-bottom-color:transparent;background:var(--tblr-bg-surface-tertiary)}.card-header-tabs{background:var(--tblr-bg-surface-tertiary);flex:1;margin:calc(var(--tblr-card-cap-padding-y) * -1) calc(var(--tblr-card-cap-padding-x) * -1) calc(var(--tblr-card-cap-padding-y) * -1);padding:calc(var(--tblr-card-cap-padding-y) * .5) calc(var(--tblr-card-cap-padding-x) * .5) 0}.card-header-pills{flex:1;margin-top:-.5rem;margin-bottom:-.5rem}.card-rotate-left{transform:rotate(-1.5deg)}.card-rotate-right{transform:rotate(1.5deg)}.card-link{color:inherit}.card-link:hover{color:inherit;text-decoration:none;box-shadow:0 1px 6px #00000014}.card-link-rotate:hover{transform:rotate(1.5deg);opacity:1}.card-link-pop:hover{transform:translateY(-2px);opacity:1}.card-footer{margin-top:auto}.card-footer:last-child{border-radius:0 0 var(--tblr-card-border-radius) var(--tblr-card-border-radius)}.card-footer-transparent{background:0 0;border-color:transparent;padding-top:0}.card-footer-borderless{border-top:none}.card-progress{height:.25rem}.card-progress:last-child{border-radius:0 0 2px 2px}.card-progress:first-child{border-radius:2px 2px 0 0}.card-meta{color:var(--tblr-muted)}.card-title{display:block;margin:0 0 1rem;font-size:1rem;font-weight:var(--tblr-font-weight-medium);line-height:1.5rem}a.card-title:hover{color:inherit}.card-header .card-title{margin:0}.card-subtitle{margin-bottom:1.25rem;color:var(--tblr-muted);font-weight:400}.card-header .card-subtitle{margin:0}.card-title .card-subtitle{margin:0 0 0 .25rem;font-size:.875rem}.card-body{position:relative}.card-body>:last-child{margin-bottom:0}.card-sm>.card-body{padding:1rem}@media (min-width:768px){.card-md>.card-body{padding:2.5rem}}@media (min-width:768px){.card-lg>.card-body{padding:2rem}}@media (min-width:992px){.card-lg>.card-body{padding:4rem}}@media print{.card-body{padding:0}}.card-body+.card-body{border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color)}.card-body-scrollable{overflow:auto}.card-options{top:1.5rem;right:.75rem;display:flex;margin-left:auto}.card-options-link{display:inline-block;min-width:1rem;margin-left:.25rem;color:var(--tblr-muted)}.card-status-top{position:absolute;top:0;right:0;left:0;height:2px;border-radius:var(--tblr-card-border-radius) var(--tblr-card-border-radius) 0 0}.card-status-start{position:absolute;right:auto;bottom:0;width:2px;height:100%;border-radius:var(--tblr-card-border-radius) 0 0 var(--tblr-card-border-radius)}.card-status-bottom{position:absolute;top:initial;bottom:0;width:100%;height:2px;border-radius:0 0 var(--tblr-card-border-radius) var(--tblr-card-border-radius)}.card-table{margin-bottom:0!important}.card-table tr td:first-child,.card-table tr th:first-child{padding-left:1.5rem;border-left:0}.card-table tr td:last-child,.card-table tr th:last-child{padding-right:1.5rem;border-right:0}.card-table tbody tr:first-child,.card-table tfoot tr:first-child,.card-table thead tr:first-child,.card-table tbody tr:first-child td,.card-table tbody tr:first-child th,.card-table tfoot tr:first-child td,.card-table tfoot tr:first-child th,.card-table thead tr:first-child td,.card-table thead tr:first-child th{border-top:0}.card-body+.card-table{border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-table-border-color)}.card-code{padding:0}.card-code .highlight{margin:0;border:0}.card-code pre{margin:0!important;border:0!important}.card-chart{position:relative;z-index:1;height:3.5rem}.card-avatar{margin-left:auto;margin-right:auto;box-shadow:0 0 0 .25rem var(--tblr-card-bg,var(--tblr-bg-surface));margin-top:calc(-1 * var(--tblr-avatar-size) * .5)}.card-body+.card-list-group{border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color)}.card-list-group .list-group-item{padding-right:1.5rem;padding-left:1.5rem;border-right:0;border-left:0;border-radius:0}.card-list-group .list-group-item:last-child{border-bottom:0}.card-list-group .list-group-item:first-child{border-top:0}.card-tabs .nav-tabs{position:relative;z-index:1000;border-bottom:0}.card-tabs .nav-tabs .nav-link{background:var(--tblr-bg-surface-tertiary);border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)}.card-tabs .nav-tabs .nav-link.active,.card-tabs .nav-tabs .nav-link:active,.card-tabs .nav-tabs .nav-link:hover{border-color:var(--tblr-border-color-translucent);color:var(--tblr-body-color)}.card-tabs .nav-tabs .nav-link.active{background:var(--tblr-card-bg,var(--tblr-bg-surface));border-bottom-color:transparent}.card-tabs .nav-tabs .nav-item:not(:first-child) .nav-link{border-top-left-radius:0}.card-tabs .nav-tabs .nav-item:not(:last-child) .nav-link{border-top-right-radius:0}.card-tabs .nav-tabs .nav-item+.nav-item{margin-left:calc(-1 * var(--tblr-border-width))}.card-tabs .nav-tabs-bottom,.card-tabs .nav-tabs-bottom .nav-link{margin-bottom:0}.card-tabs .nav-tabs-bottom .nav-link.active{border-top-color:transparent}.card-tabs .nav-tabs-bottom .nav-item{margin-top:calc(-1 * var(--tblr-border-width));margin-bottom:0}.card-tabs .nav-tabs-bottom .nav-item .nav-link{border-bottom:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent);border-radius:0 0 var(--tblr-border-radius) var(--tblr-border-radius)}.card-tabs .nav-tabs-bottom .nav-item:not(:first-child) .nav-link{border-bottom-left-radius:0}.card-tabs .nav-tabs-bottom .nav-item:not(:last-child) .nav-link{border-bottom-right-radius:0}.card-tabs .card{border-bottom-left-radius:0}.card-tabs .nav-tabs+.tab-content .card{border-bottom-left-radius:var(--tblr-card-border-radius);border-top-left-radius:0}.btn-close{cursor:pointer}.btn-close:focus{outline:0}.dropdown-menu{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.dropdown-menu.card{padding:0;min-width:25rem;display:none}.dropdown-menu.card.show{display:flex}.dropdown-item{min-width:11rem;display:flex;align-items:center;margin:0;line-height:1.4285714286}.dropdown-item-icon{width:1.25rem!important;height:1.25rem!important;margin-right:.5rem;color:var(--tblr-muted);opacity:.7;text-align:center}.dropdown-item-indicator{margin-right:.5rem;margin-left:-.25rem;height:1.25rem;display:inline-flex;line-height:1;vertical-align:bottom;align-items:center}.dropdown-header{font-size:.625rem;font-weight:var(--tblr-font-weight-bold);text-transform:uppercase;letter-spacing:.04em;line-height:1rem;color:var(--tblr-muted);padding-bottom:.25rem;pointer-events:none}.dropdown-menu-scrollable{height:auto;max-height:13rem;overflow-x:hidden}.dropdown-menu-column{min-width:11rem}.dropdown-menu-column .dropdown-item{min-width:0}.dropdown-menu-columns{display:flex;flex:0 .25rem}.dropdown-menu-arrow:before{content:"";position:absolute;top:-.25rem;left:.75rem;display:block;background:inherit;width:14px;height:14px;transform:rotate(45deg);transform-origin:center;border:1px solid;border-color:inherit;z-index:-1;clip:rect(0,9px,9px,0)}.dropdown-menu-arrow.dropdown-menu-end:before{right:.75rem;left:auto}.dropend>.dropdown-menu{margin-top:calc(-.25rem - 1px);margin-left:-.25rem}.dropend .dropdown-toggle:after{margin-left:auto}.dropdown-menu-card{padding:0}.dropdown-menu-card>.card{margin:0;border:0;box-shadow:none}.datagrid{--tblr-datagrid-padding:1.5rem;--tblr-datagrid-item-width:15rem;display:grid;grid-gap:var(--tblr-datagrid-padding);grid-template-columns:repeat(auto-fit,minmax(var(--tblr-datagrid-item-width),1fr))}.datagrid-title{font-size:.625rem;font-weight:var(--tblr-font-weight-bold);text-transform:uppercase;letter-spacing:.04em;line-height:1rem;color:var(--tblr-muted);margin-bottom:.25rem}.empty{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;padding:1rem;text-align:center}@media (min-width:768px){.empty{padding:3rem}}.empty-icon{margin:0 0 1rem;width:3rem;height:3rem;line-height:1;color:var(--tblr-muted)}.empty-icon svg{width:100%;height:100%}.empty-img{margin:0 0 2rem;line-height:1}.empty-img img{height:8rem;width:auto}.empty-header{margin:0 0 1rem;font-size:4rem;font-weight:var(--tblr-font-weight-light);line-height:1;color:var(--tblr-muted)}.empty-title{font-size:1.25rem;line-height:1.75rem;font-weight:var(--tblr-font-weight-bold)}.empty-subtitle,.empty-title{margin:0 0 .5rem}.empty-action{margin-top:1.5rem}.empty-bordered{border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);border-radius:var(--tblr-border-radius)}.row>*{min-width:0}.col-separator{border-left:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color)}.container-slim{--tblr-gutter-x:calc(var(--tblr-page-padding) * 2);--tblr-gutter-y:0;width:100%;padding-right:calc(var(--tblr-gutter-x) * .5);padding-left:calc(var(--tblr-gutter-x) * .5);margin-right:auto;margin-left:auto;max-width:16rem}.container-tight{--tblr-gutter-x:calc(var(--tblr-page-padding) * 2);--tblr-gutter-y:0;width:100%;padding-right:calc(var(--tblr-gutter-x) * .5);padding-left:calc(var(--tblr-gutter-x) * .5);margin-right:auto;margin-left:auto;max-width:30rem}.container-narrow{--tblr-gutter-x:calc(var(--tblr-page-padding) * 2);--tblr-gutter-y:0;width:100%;padding-right:calc(var(--tblr-gutter-x) * .5);padding-left:calc(var(--tblr-gutter-x) * .5);margin-right:auto;margin-left:auto;max-width:45rem}.row-0{margin-right:0;margin-left:0}.row-0>.col,.row-0>[class*=col-]{padding-right:0;padding-left:0}.row-0 .card{margin-bottom:0}.row-sm{margin-right:-.375rem;margin-left:-.375rem}.row-sm>.col,.row-sm>[class*=col-]{padding-right:.375rem;padding-left:.375rem}.row-sm .card{margin-bottom:.75rem}.row-md{margin-right:-1.5rem;margin-left:-1.5rem}.row-md>.col,.row-md>[class*=col-]{padding-right:1.5rem;padding-left:1.5rem}.row-md .card{margin-bottom:3rem}.row-lg{margin-right:-3rem;margin-left:-3rem}.row-lg>.col,.row-lg>[class*=col-]{padding-right:3rem;padding-left:3rem}.row-lg .card{margin-bottom:6rem}.row-deck>.col,.row-deck>[class*=col-]{display:flex;align-items:stretch}.row-deck>.col .card,.row-deck>[class*=col-] .card{flex:1 1 auto}.row-cards{--tblr-gutter-x:var(--tblr-page-padding);--tblr-gutter-y:var(--tblr-page-padding);min-width:0}.row-cards .row-cards{flex:1}.space-y{display:flex;flex-direction:column;gap:1rem}.space-x{display:flex;gap:1rem}.space-y-0{display:flex;flex-direction:column;gap:0}.space-x-0{display:flex;gap:0}.space-y-1{display:flex;flex-direction:column;gap:.25rem}.space-x-1{display:flex;gap:.25rem}.space-y-2{display:flex;flex-direction:column;gap:.5rem}.space-x-2{display:flex;gap:.5rem}.space-y-3{display:flex;flex-direction:column;gap:1rem}.space-x-3{display:flex;gap:1rem}.space-y-4{display:flex;flex-direction:column;gap:1.5rem}.space-x-4{display:flex;gap:1.5rem}.space-y-5{display:flex;flex-direction:column;gap:2rem}.space-x-5{display:flex;gap:2rem}.space-y-6{display:flex;flex-direction:column;gap:3rem}.space-x-6{display:flex;gap:3rem}.space-y-7{display:flex;flex-direction:column;gap:5rem}.space-x-7{display:flex;gap:5rem}.space-y-8{display:flex;flex-direction:column;gap:8rem}.space-x-8{display:flex;gap:8rem}.divide-y>:not(template)~:not(template){border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-y>:not(template):not(:first-child){padding-top:1rem!important}.divide-y>:not(template):not(:last-child){padding-bottom:1rem!important}.divide-x>:not(template)~:not(template){border-left:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-x>:not(template):not(:first-child){padding-left:1rem!important}.divide-x>:not(template):not(:last-child){padding-right:1rem!important}.divide-y-0>:not(template)~:not(template){border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-y-0>:not(template):not(:first-child){padding-top:0!important}.divide-y-0>:not(template):not(:last-child){padding-bottom:0!important}.divide-x-0>:not(template)~:not(template){border-left:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-x-0>:not(template):not(:first-child){padding-left:0!important}.divide-x-0>:not(template):not(:last-child){padding-right:0!important}.divide-y-1>:not(template)~:not(template){border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-y-1>:not(template):not(:first-child){padding-top:.25rem!important}.divide-y-1>:not(template):not(:last-child){padding-bottom:.25rem!important}.divide-x-1>:not(template)~:not(template){border-left:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-x-1>:not(template):not(:first-child){padding-left:.25rem!important}.divide-x-1>:not(template):not(:last-child){padding-right:.25rem!important}.divide-y-2>:not(template)~:not(template){border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-y-2>:not(template):not(:first-child){padding-top:.5rem!important}.divide-y-2>:not(template):not(:last-child){padding-bottom:.5rem!important}.divide-x-2>:not(template)~:not(template){border-left:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-x-2>:not(template):not(:first-child){padding-left:.5rem!important}.divide-x-2>:not(template):not(:last-child){padding-right:.5rem!important}.divide-y-3>:not(template)~:not(template){border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-y-3>:not(template):not(:first-child){padding-top:1rem!important}.divide-y-3>:not(template):not(:last-child){padding-bottom:1rem!important}.divide-x-3>:not(template)~:not(template){border-left:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-x-3>:not(template):not(:first-child){padding-left:1rem!important}.divide-x-3>:not(template):not(:last-child){padding-right:1rem!important}.divide-y-4>:not(template)~:not(template){border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-y-4>:not(template):not(:first-child){padding-top:1.5rem!important}.divide-y-4>:not(template):not(:last-child){padding-bottom:1.5rem!important}.divide-x-4>:not(template)~:not(template){border-left:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-x-4>:not(template):not(:first-child){padding-left:1.5rem!important}.divide-x-4>:not(template):not(:last-child){padding-right:1.5rem!important}.divide-y-5>:not(template)~:not(template){border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-y-5>:not(template):not(:first-child){padding-top:2rem!important}.divide-y-5>:not(template):not(:last-child){padding-bottom:2rem!important}.divide-x-5>:not(template)~:not(template){border-left:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-x-5>:not(template):not(:first-child){padding-left:2rem!important}.divide-x-5>:not(template):not(:last-child){padding-right:2rem!important}.divide-y-6>:not(template)~:not(template){border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-y-6>:not(template):not(:first-child){padding-top:3rem!important}.divide-y-6>:not(template):not(:last-child){padding-bottom:3rem!important}.divide-x-6>:not(template)~:not(template){border-left:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-x-6>:not(template):not(:first-child){padding-left:3rem!important}.divide-x-6>:not(template):not(:last-child){padding-right:3rem!important}.divide-y-7>:not(template)~:not(template){border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-y-7>:not(template):not(:first-child){padding-top:5rem!important}.divide-y-7>:not(template):not(:last-child){padding-bottom:5rem!important}.divide-x-7>:not(template)~:not(template){border-left:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-x-7>:not(template):not(:first-child){padding-left:5rem!important}.divide-x-7>:not(template):not(:last-child){padding-right:5rem!important}.divide-y-8>:not(template)~:not(template){border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-y-8>:not(template):not(:first-child){padding-top:8rem!important}.divide-y-8>:not(template):not(:last-child){padding-bottom:8rem!important}.divide-x-8>:not(template)~:not(template){border-left:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-x-8>:not(template):not(:first-child){padding-left:8rem!important}.divide-x-8>:not(template):not(:last-child){padding-right:8rem!important}.divide-y-fill{display:flex;flex-direction:column;height:100%}.divide-y-fill>:not(template){flex:1;display:flex;justify-content:center;flex-direction:column}.icon{--tblr-icon-size:1.25rem;width:var(--tblr-icon-size);height:var(--tblr-icon-size);font-size:var(--tblr-icon-size);vertical-align:bottom;stroke-width:1.5}.icon:hover{text-decoration:none}.icon-inline{--tblr-icon-size:1rem;vertical-align:-.2rem}.icon-filled{fill:currentColor}.icon-sm{--tblr-icon-size:1rem;stroke-width:1}.icon-md{--tblr-icon-size:2.5rem;stroke-width:1}.icon-lg{--tblr-icon-size:3.5rem;stroke-width:1}.icon-pulse{transition:all .15s ease 0s;animation:pulse 2s ease infinite;animation-fill-mode:both}.icon-tada{transition:all .15s ease 0s;animation:tada 3s ease infinite;animation-fill-mode:both}.icon-rotate{transition:all .15s ease 0s;animation:rotate-360 3s linear infinite;animation-fill-mode:both}.img-responsive{--tblr-img-responsive-ratio:75%;background:no-repeat center/cover;padding-top:var(--tblr-img-responsive-ratio)}.img-responsive-grid{padding-top:calc(var(--tblr-img-responsive-ratio) - var(--tblr-gutter-y)/ 2)}.img-responsive-1x1{--tblr-img-responsive-ratio:100%}.img-responsive-2x1{--tblr-img-responsive-ratio:50%}.img-responsive-1x2{--tblr-img-responsive-ratio:200%}.img-responsive-3x1{--tblr-img-responsive-ratio:33.3333333333%}.img-responsive-1x3{--tblr-img-responsive-ratio:300%}.img-responsive-4x3{--tblr-img-responsive-ratio:75%}.img-responsive-3x4{--tblr-img-responsive-ratio:133.3333333333%}.img-responsive-16x9{--tblr-img-responsive-ratio:56.25%}.img-responsive-9x16{--tblr-img-responsive-ratio:177.7777777778%}.img-responsive-21x9{--tblr-img-responsive-ratio:42.8571428571%}.img-responsive-9x21{--tblr-img-responsive-ratio:233.3333333333%}textarea[cols]{height:auto}.col-form-label,.form-label{display:block;font-weight:var(--tblr-font-weight-medium)}.col-form-label.required:after,.form-label.required:after{content:"*";margin-left:.25rem;color:#d63939}.form-label-description{float:right;font-weight:var(--tblr-font-weight-normal);color:var(--tblr-muted)}.form-hint{display:block;color:var(--tblr-muted)}.form-hint:last-child{margin-bottom:0}.form-hint+.form-control{margin-top:.25rem}.form-label+.form-hint{margin-top:-.25rem}.form-control+.form-hint,.form-select+.form-hint,.input-group+.form-hint{margin-top:.5rem}.form-select:-moz-focusring{color:var(--tblr-body-color)}.form-control:-webkit-autofill{box-shadow:0 0 0 1000px var(--tblr-body-bg) inset;color:var(--tblr-body-color);-webkit-text-fill-color:var(--tblr-body-color)}.form-control.disabled,.form-control:disabled{color:var(--tblr-muted);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.form-control[size]{width:auto}.form-control-light{background-color:var(--tblr-gray-100);border-color:transparent}.form-control-dark{background-color:#0000001a;color:#fff;border-color:transparent}.form-control-dark:focus{background-color:#0000001a;box-shadow:none;border-color:#ffffff3d}.form-control-dark::-webkit-input-placeholder{color:#fff9}.form-control-dark:-ms-input-placeholder{color:#fff9}.form-control-dark::-ms-input-placeholder{color:#fff9}.form-control-dark::placeholder{color:#fff9}.form-control-rounded{border-radius:10rem}.form-control-flush{padding:0;background:0 0!important;border-color:transparent!important;resize:none;box-shadow:none!important;line-height:inherit}.form-footer{margin-top:2rem}.form-fieldset{padding:1rem;margin-bottom:1rem;background:var(--tblr-body-bg);border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);border-radius:var(--tblr-border-radius)}.form-help{display:inline-flex;font-weight:var(--tblr-font-weight-bold);align-items:center;justify-content:center;width:1.125rem;height:1.125rem;font-size:.75rem;color:var(--tblr-muted);text-align:center;text-decoration:none;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background:var(--tblr-gray-100);border-radius:100rem;transition:background-color .3s,color .3s}@media (prefers-reduced-motion:reduce){.form-help{transition:none}}.form-help:hover,.form-help[aria-describedby]{color:#fff;background:var(--tblr-primary)}.input-group-link{font-size:.75rem}.input-group-flat:focus-within{box-shadow:0 0 0 .25rem #206bc440;border-radius:var(--tblr-border-radius)}.input-group-flat:focus-within .form-control,.input-group-flat:focus-within .input-group-text{border-color:#90b5e2!important}.input-group-flat .form-control:focus{border-color:var(--tblr-border-color);box-shadow:none}.input-group-flat .form-control:not(:last-child){border-right:0}.input-group-flat .form-control:not(:first-child){border-left:0}.input-group-flat .input-group-text{background:var(--tblr-bg-forms);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.input-group-flat .input-group-text{transition:none}}.input-group-flat .input-group-text:first-child{padding-right:0}.input-group-flat .input-group-text:last-child{padding-left:0}.form-file-button{margin-left:0;border-left:0}.input-icon{position:relative}.input-icon .form-control:not(:last-child),.input-icon .form-select:not(:last-child){padding-right:2.5rem}.input-icon .form-control:not(:first-child),.input-icon .form-select:not(:last-child){padding-left:2.5rem}.input-icon-addon{position:absolute;top:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;min-width:2.5rem;color:var(--tblr-icon-color);pointer-events:none;font-size:1.2em}.input-icon-addon:last-child{right:0;left:auto}.form-colorinput{position:relative;display:inline-block;margin:0;line-height:1;cursor:pointer}.form-colorinput-input{position:absolute;z-index:-1;opacity:0}.form-colorinput-color{display:block;width:1.5rem;height:1.5rem;color:#fff;border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent);border-radius:3px;box-shadow:0 1px 2px #0000000d}.form-colorinput-color:before{position:absolute;top:0;left:0;width:100%;height:100%;content:"";background:no-repeat center center/1rem;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' width='16' height='16'%3e%3cpath fill='none' stroke='%23ffffff' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8.5l2.5 2.5l5.5 -5.5'/%3e%3c/svg%3e");opacity:0;transition:opacity .3s}@media (prefers-reduced-motion:reduce){.form-colorinput-color:before{transition:none}}.form-colorinput-input:checked~.form-colorinput-color:before{opacity:1}.form-colorinput-input:focus~.form-colorinput-color{border-color:var(--tblr-primary);box-shadow:0 0 0 .25rem #206bc440}.form-colorinput-light .form-colorinput-color:before{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' width='16' height='16'%3e%3cpath fill='none' stroke='%23182433' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8.5l2.5 2.5l5.5 -5.5'/%3e%3c/svg%3e")}.form-imagecheck{position:relative;margin:0;cursor:pointer}.form-imagecheck-input{position:absolute;z-index:-1;opacity:0}.form-imagecheck-figure{position:relative;display:block;margin:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);border-radius:3px}.form-imagecheck-input:focus~.form-imagecheck-figure{border-color:var(--tblr-primary);box-shadow:0 0 0 .25rem #206bc440}.form-imagecheck-input:checked~.form-imagecheck-figure{border-color:var(--tblr-primary)}.form-imagecheck-figure:before{position:absolute;top:.25rem;left:.25rem;z-index:1;display:block;width:1rem;height:1rem;color:#fff;pointer-events:none;content:"";-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background:var(--tblr-bg-forms);border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);border-radius:var(--tblr-border-radius);transition:opacity .3s}@media (prefers-reduced-motion:reduce){.form-imagecheck-figure:before{transition:none}}.form-imagecheck-input:checked~.form-imagecheck-figure:before{background-color:var(--tblr-primary);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' width='16' height='16'%3e%3cpath fill='none' stroke='%23ffffff' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8.5l2.5 2.5l5.5 -5.5'/%3e%3c/svg%3e");background-repeat:repeat;background-position:center;background-size:1rem;border-color:var(--tblr-border-color-translucent)}.form-imagecheck-input[type=radio]~.form-imagecheck-figure:before{border-radius:50%}.form-imagecheck-input[type=radio]:checked~.form-imagecheck-figure:before{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3ccircle r='3' fill='%23ffffff' cx='8' cy='8' /%3e%3c/svg%3e")}.form-imagecheck-image{max-width:100%;display:block;opacity:.64;transition:opacity .3s}@media (prefers-reduced-motion:reduce){.form-imagecheck-image{transition:none}}.form-imagecheck-image:first-child{border-top-left-radius:2px;border-top-right-radius:2px}.form-imagecheck-image:last-child{border-bottom-right-radius:2px;border-bottom-left-radius:2px}.form-imagecheck-input:checked~.form-imagecheck-figure .form-imagecheck-image,.form-imagecheck-input:focus~.form-imagecheck-figure .form-imagecheck-image,.form-imagecheck:hover .form-imagecheck-image{opacity:1}.form-imagecheck-caption{padding:.25rem;font-size:.765625rem;color:var(--tblr-muted);text-align:center;transition:color .3s}@media (prefers-reduced-motion:reduce){.form-imagecheck-caption{transition:none}}.form-imagecheck-input:checked~.form-imagecheck-figure .form-imagecheck-caption,.form-imagecheck-input:focus~.form-imagecheck-figure .form-imagecheck-caption,.form-imagecheck:hover .form-imagecheck-caption{color:var(--tblr-body-color)}.form-selectgroup{display:inline-flex;margin:0 -.5rem -.5rem 0;flex-wrap:wrap}.form-selectgroup .form-selectgroup-item{margin:0 .5rem .5rem 0}.form-selectgroup-vertical{flex-direction:column}.form-selectgroup-item{display:block;position:relative}.form-selectgroup-input{position:absolute;top:0;left:0;z-index:-1;opacity:0}.form-selectgroup-label{position:relative;display:block;min-width:calc(1.4285714286em + .875rem + calc(var(--tblr-border-width) * 2));margin:0;padding:.4375rem .75rem;font-size:.875rem;line-height:1.4285714286;color:var(--tblr-muted);background:var(--tblr-bg-forms);text-align:center;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);border-radius:3px;transition:border-color .3s,background .3s,color .3s}@media (prefers-reduced-motion:reduce){.form-selectgroup-label{transition:none}}.form-selectgroup-label .icon:only-child{margin:0 -.25rem}.form-selectgroup-label:hover{color:var(--tblr-body-color)}.form-selectgroup-check{display:inline-block;width:1rem;height:1rem;border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent);vertical-align:middle}.form-selectgroup-input[type=checkbox]+.form-selectgroup-label .form-selectgroup-check{border-radius:var(--tblr-border-radius)}.form-selectgroup-input[type=radio]+.form-selectgroup-label .form-selectgroup-check{border-radius:50%}.form-selectgroup-input:checked+.form-selectgroup-label .form-selectgroup-check{background-color:var(--tblr-primary);background-repeat:repeat;background-position:center;background-size:1rem;border-color:var(--tblr-border-color-translucent)}.form-selectgroup-input[type=checkbox]:checked+.form-selectgroup-label .form-selectgroup-check{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' width='16' height='16'%3e%3cpath fill='none' stroke='%23ffffff' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8.5l2.5 2.5l5.5 -5.5'/%3e%3c/svg%3e")}.form-selectgroup-input[type=radio]:checked+.form-selectgroup-label .form-selectgroup-check{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3ccircle r='3' fill='%23ffffff' cx='8' cy='8' /%3e%3c/svg%3e")}.form-selectgroup-check-floated{position:absolute;top:.4375rem;right:.4375rem}.form-selectgroup-input:checked+.form-selectgroup-label{z-index:1;color:var(--tblr-primary);background:rgba(var(--tblr-primary-rgb),.04);border-color:var(--tblr-primary)}.form-selectgroup-input:focus+.form-selectgroup-label{z-index:2;color:var(--tblr-primary);border-color:var(--tblr-primary);box-shadow:0 0 0 .25rem #206bc440}.form-selectgroup-boxes .form-selectgroup-label{text-align:left;padding:1.5rem 1rem;color:inherit}.form-selectgroup-boxes .form-selectgroup-input:checked+.form-selectgroup-label{color:inherit}.form-selectgroup-boxes .form-selectgroup-input:checked+.form-selectgroup-label .form-selectgroup-title{color:var(--tblr-primary)}.form-selectgroup-boxes .form-selectgroup-input:checked+.form-selectgroup-label .form-selectgroup-label-content{opacity:1}.form-selectgroup-pills{flex-wrap:wrap;align-items:flex-start}.form-selectgroup-pills .form-selectgroup-item{flex-grow:0}.form-selectgroup-pills .form-selectgroup-label{border-radius:50px}.form-control-color::-webkit-color-swatch{border:none}[type=search]::-webkit-search-cancel-button{-webkit-appearance:none}.form-control::-webkit-file-upload-button{background-color:var(--tblr-btn-color,var(--tblr-tertiary-bg))}.form-control::file-selector-button{background-color:var(--tblr-btn-color,var(--tblr-tertiary-bg))}.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button{background-color:var(--tblr-btn-color,var(--tblr-secondary-bg))}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:var(--tblr-btn-color,var(--tblr-secondary-bg))}.form-check{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.form-check.form-check-highlight .form-check-input:not(:checked)~.form-check-label{color:var(--tblr-muted)}.form-check .form-check-label-off{color:var(--tblr-muted)}.form-check .form-check-input:checked~.form-check-label-off{display:none}.form-check .form-check-input:not(:checked)~.form-check-label-on{display:none}.form-check-input{background-size:1rem;margin-top:.125rem}.form-switch .form-check-input{transition:background-color .3s,background-position .3s}@media (prefers-reduced-motion:reduce){.form-switch .form-check-input{transition:none}}.form-check-label{display:block}.form-check-label.required:after{content:"*";margin-left:.25rem;color:#d63939}.form-check-description{display:block;color:var(--tblr-muted);font-size:.75rem;margin-top:.25rem}.form-check-single,.form-check-single .form-check-input{margin:0}.form-switch .form-check-input{height:1.125rem;margin-top:.0625rem}.form-switch-lg{padding-left:3.5rem;min-height:1.5rem}.form-switch-lg .form-check-input{height:1.5rem;width:2.75rem;background-size:1.5rem;margin-left:-3.5rem}.form-switch-lg .form-check-label{padding-top:.125rem}.form-check-input:checked{border:none}.form-control.is-invalid-lite,.form-control.is-valid-lite,.form-select.is-invalid-lite,.form-select.is-valid-lite{border-color:var(--tblr-border-color)!important}.legend{--tblr-legend-size:.75em;display:inline-block;background:var(--tblr-border-color);width:var(--tblr-legend-size);height:var(--tblr-legend-size);border-radius:var(--tblr-border-radius-sm)}.list-group{margin-left:0;margin-right:0}.list-group-header{background:var(--tblr-bg-surface-tertiary);padding:.5rem 1.5rem;font-size:.75rem;font-weight:var(--tblr-font-weight-medium);line-height:1;text-transform:uppercase;color:var(--tblr-muted);border-bottom:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color)}.list-group-flush>.list-group-header:last-child{border-bottom-width:0}.list-group-item{background-color:inherit}.list-group-item.active{background-color:rgba(var(--tblr-muted-rgb),.04);border-left-color:#206bc4;border-left-width:2px}.list-group-item:active,.list-group-item:focus,.list-group-item:hover{background-color:rgba(var(--tblr-muted-rgb),.04)}.list-group-item.disabled,.list-group-item:disabled{color:#929dab;background-color:rgba(var(--tblr-muted-rgb),.04)}.list-bordered .list-item{border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);margin-top:-1px}.list-bordered .list-item:first-child{border-top:none}.list-group-hoverable .list-group-item-actions{opacity:0;transition:opacity .3s}@media (prefers-reduced-motion:reduce){.list-group-hoverable .list-group-item-actions{transition:none}}.list-group-hoverable .list-group-item-actions.show,.list-group-hoverable .list-group-item:hover .list-group-item-actions{opacity:1}.list-group-transparent{--tblr-list-group-border-radius:0;margin:0 -1.5rem}.list-group-transparent .list-group-item{background:0 0;border:0}.list-group-transparent .list-group-item .icon{color:var(--tblr-muted)}.list-group-transparent .list-group-item.active{font-weight:var(--tblr-font-weight-bold);color:inherit;background:var(--tblr-active-bg)}.list-group-transparent .list-group-item.active .icon{color:inherit}.list-separated-item{padding:1rem 0}.list-separated-item:first-child{padding-top:0}.list-separated-item:last-child{padding-bottom:0}.list-separated-item+.list-separated-item{border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color)}.list-inline-item:not(:last-child){margin-right:auto;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.list-inline-dots .list-inline-item+.list-inline-item:before{content:" · ";-webkit-margin-end:.5rem;margin-inline-end:.5rem}.loader{position:relative;display:block;width:2.5rem;height:2.5rem;color:#206bc4;vertical-align:middle}.loader:after{position:absolute;top:0;left:0;width:100%;height:100%;content:"";border:1px var(--tblr-border-style);border-color:transparent;border-top-color:currentColor;border-left-color:currentColor;border-radius:100rem;animation:rotate-360 .6s linear;animation-iteration-count:infinite}.dimmer{position:relative}.dimmer .loader{position:absolute;top:50%;right:0;left:0;display:none;margin:0 auto;transform:translateY(-50%)}.dimmer.active .loader{display:block}.dimmer.active .dimmer-content{pointer-events:none;opacity:.1}@keyframes animated-dots{0%{transform:translate(-100%)}}.animated-dots{display:inline-block;overflow:hidden;vertical-align:bottom}.animated-dots:after{display:inline-block;content:"...";animation:animated-dots 1.2s steps(4,jump-none) infinite}.modal-content .btn-close{position:absolute;top:0;right:0;width:3.5rem;height:3.5rem;margin:0;padding:0;z-index:10}.modal-body{scrollbar-color:rgba(var(--tblr-scrollbar-color,var(--tblr-body-color-rgb)),.16) transparent}.modal-body::-webkit-scrollbar{width:1rem;height:1rem;-webkit-transition:background .3s;transition:background .3s}@media (prefers-reduced-motion:reduce){.modal-body::-webkit-scrollbar{-webkit-transition:none;transition:none}}.modal-body::-webkit-scrollbar-thumb{border-radius:1rem;border:5px solid transparent;box-shadow:inset 0 0 0 1rem rgba(var(--tblr-scrollbar-color,var(--tblr-body-color-rgb)),.16)}.modal-body::-webkit-scrollbar-track{background:0 0}.modal-body:hover::-webkit-scrollbar-thumb{box-shadow:inset 0 0 0 1rem rgba(var(--tblr-scrollbar-color,var(--tblr-body-color-rgb)),.32)}.modal-body::-webkit-scrollbar-corner{background:0 0}.modal-body .modal-title{margin-bottom:1rem}.modal-body+.modal-body{border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color)}.modal-status{position:absolute;top:0;left:0;right:0;height:2px;background:var(--tblr-muted);border-radius:var(--tblr-border-radius-lg) var(--tblr-border-radius-lg) 0 0}.modal-header{align-items:center;min-height:3.5rem;background:0 0;padding:0 3.5rem 0 1.5rem}.modal-title{font-size:1rem;font-weight:var(--tblr-font-weight-bold);line-height:1.4285714286}.modal-footer{padding-top:.75rem;padding-bottom:.75rem}.modal-blur{-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}.modal-full-width{max-width:none;margin:0 .5rem}.nav-vertical,.nav-vertical .nav{flex-direction:column;flex-wrap:nowrap}.nav-vertical .nav{margin-left:1.25rem;border-left:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);padding-left:.5rem}.nav-vertical .nav-item.show .nav-link,.nav-vertical .nav-link.active{font-weight:var(--tblr-font-weight-bold)}.nav-vertical.nav-pills{margin:0 -.75rem}.nav-bordered{border-bottom:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color)}.nav-bordered .nav-item+.nav-item{margin-left:1.25rem}.nav-bordered .nav-link{padding-left:0;padding-right:0;margin:0 0 -var(--tblr-border-width);border:0;border-bottom:2px var(--tblr-border-style) transparent;color:var(--tblr-muted)}.nav-bordered .nav-item.show .nav-link,.nav-bordered .nav-link.active{color:var(--tblr-primary);border-color:var(--tblr-primary)}.nav-link{display:flex;transition:color .3s;align-items:center}@media (prefers-reduced-motion:reduce){.nav-link{transition:none}}.nav-link-toggle{margin-left:auto;padding:0 .25rem;transition:transform .3s}@media (prefers-reduced-motion:reduce){.nav-link-toggle{transition:none}}.nav-link-toggle:after{content:"";display:inline-block;vertical-align:.306em;width:.36em;height:.36em;border-bottom:1px var(--tblr-border-style);border-left:1px var(--tblr-border-style);margin-right:.1em;margin-left:.4em;transform:rotate(-45deg)}.nav-link-toggle:after{margin:0}.nav-link[aria-expanded=true] .nav-link-toggle{transform:rotate(180deg)}.nav-link-icon{width:1.25rem;height:1.25rem;margin-right:.5rem;color:var(--tblr-icon-color)}.nav-link-icon svg{display:block;height:100%}.nav-fill .nav-item .nav-link{justify-content:center}.stars{display:inline-flex;color:#bbc3cd;font-size:.75rem}.stars .star:not(:first-child){margin-left:.25rem}.pagination{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.page-link{min-width:1.75rem;border-radius:var(--tblr-border-radius)}.page-item{text-align:center}.page-item:not(.active) .page-link:hover{background:0 0}.page-item.page-next,.page-item.page-prev{flex:0 0 50%;text-align:left}.page-item.page-next{margin-left:auto;text-align:right}.page-item-subtitle{margin-bottom:2px;font-size:12px;color:var(--tblr-muted);text-transform:uppercase}.page-item.disabled .page-item-subtitle{color:var(--tblr-disabled-color)}.page-item-title{font-size:1rem;font-weight:var(--tblr-font-weight-normal);color:var(--tblr-body-color)}.page-link:hover .page-item-title{color:#206bc4}.page-item.disabled .page-item-title{color:var(--tblr-disabled-color)}@keyframes progress-indeterminate{0%{right:100%;left:-35%}to,60%{right:-90%;left:100%}}.progress{position:relative;width:100%;line-height:.5rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.progress::-webkit-progress-bar{background:var(--tblr-progress-bg)}.progress::-webkit-progress-value{background-color:var(--tblr-primary)}.progress::-moz-progress-bar{background-color:var(--tblr-primary)}.progress::-ms-fill{background-color:var(--tblr-primary);border:none}.progress-sm{height:.25rem}.progress-bar{height:100%}.progress-bar-indeterminate:after,.progress-bar-indeterminate:before{position:absolute;top:0;bottom:0;left:0;content:"";background-color:inherit;will-change:left,right}.progress-bar-indeterminate:before{animation:progress-indeterminate 1.5s cubic-bezier(.65,.815,.735,.395) infinite}.progress-separated .progress-bar{box-shadow:0 0 0 2px var(--tblr-card-bg,var(--tblr-bg-surface))}.progressbg{position:relative;padding:.25rem .5rem;display:flex}.progressbg-text{position:relative;z-index:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.progressbg-progress{position:absolute;top:0;right:0;bottom:0;left:0;z-index:0;height:100%;background:0 0;pointer-events:none}.progressbg-value{font-weight:var(--tblr-font-weight-medium);margin-left:auto;padding-left:2rem}.ribbon{--tblr-ribbon-margin:.25rem;--tblr-ribbon-border-radius:var(--tblr-border-radius);position:absolute;top:.75rem;right:calc(-1 * var(--tblr-ribbon-margin));z-index:1;padding:.25rem .75rem;font-size:.625rem;font-weight:var(--tblr-font-weight-bold);line-height:1;color:#fff;text-align:center;text-transform:uppercase;background:var(--tblr-primary);border-color:var(--tblr-primary);border-radius:var(--tblr-ribbon-border-radius) 0 var(--tblr-ribbon-border-radius) var(--tblr-ribbon-border-radius);display:inline-flex;align-items:center;justify-content:center;min-height:2rem;min-width:2rem}.ribbon:before{position:absolute;right:0;bottom:100%;width:0;height:0;content:"";filter:brightness(70%);border:calc(var(--tblr-ribbon-margin) * .5) var(--tblr-border-style);border-color:inherit;border-top-color:transparent;border-right-color:transparent}.ribbon.bg-blue{border-color:var(--tblr-blue)}.ribbon.bg-blue-lt{border-color:rgba(var(--tblr-blue-rgb),.1)!important}.ribbon.bg-azure{border-color:var(--tblr-azure)}.ribbon.bg-azure-lt{border-color:rgba(var(--tblr-azure-rgb),.1)!important}.ribbon.bg-indigo{border-color:var(--tblr-indigo)}.ribbon.bg-indigo-lt{border-color:rgba(var(--tblr-indigo-rgb),.1)!important}.ribbon.bg-purple{border-color:var(--tblr-purple)}.ribbon.bg-purple-lt{border-color:rgba(var(--tblr-purple-rgb),.1)!important}.ribbon.bg-pink{border-color:var(--tblr-pink)}.ribbon.bg-pink-lt{border-color:rgba(var(--tblr-pink-rgb),.1)!important}.ribbon.bg-red{border-color:var(--tblr-red)}.ribbon.bg-red-lt{border-color:rgba(var(--tblr-red-rgb),.1)!important}.ribbon.bg-orange{border-color:var(--tblr-orange)}.ribbon.bg-orange-lt{border-color:rgba(var(--tblr-orange-rgb),.1)!important}.ribbon.bg-yellow{border-color:var(--tblr-yellow)}.ribbon.bg-yellow-lt{border-color:rgba(var(--tblr-yellow-rgb),.1)!important}.ribbon.bg-lime{border-color:var(--tblr-lime)}.ribbon.bg-lime-lt{border-color:rgba(var(--tblr-lime-rgb),.1)!important}.ribbon.bg-green{border-color:var(--tblr-green)}.ribbon.bg-green-lt{border-color:rgba(var(--tblr-green-rgb),.1)!important}.ribbon.bg-teal{border-color:var(--tblr-teal)}.ribbon.bg-teal-lt{border-color:rgba(var(--tblr-teal-rgb),.1)!important}.ribbon.bg-cyan{border-color:var(--tblr-cyan)}.ribbon.bg-cyan-lt{border-color:rgba(var(--tblr-cyan-rgb),.1)!important}.ribbon .icon{width:1.25rem;height:1.25rem;font-size:1.25rem}.ribbon-top{top:calc(-1 * var(--tblr-ribbon-margin));right:.75rem;width:2rem;padding:.5rem 0;border-radius:0 var(--tblr-ribbon-border-radius) var(--tblr-ribbon-border-radius) var(--tblr-ribbon-border-radius)}.ribbon-top:before{top:0;right:100%;bottom:auto;border-color:inherit;border-top-color:transparent;border-left-color:transparent}.ribbon-top.ribbon-start{right:auto;left:.75rem}.ribbon-top.ribbon-start:before{top:0;right:100%;left:auto}.ribbon-start{right:auto;left:calc(-1 * var(--tblr-ribbon-margin))}.ribbon-start:before{top:auto;bottom:100%;left:0;border-color:inherit;border-top-color:transparent;border-left-color:transparent}.ribbon-bottom{top:auto;bottom:.75rem}.ribbon-bookmark{padding-left:.25rem;border-radius:0 0 var(--tblr-ribbon-border-radius) 0}.ribbon-bookmark:after{position:absolute;top:0;right:100%;display:block;width:0;height:0;content:"";border:1rem var(--tblr-border-style);border-color:inherit;border-right-width:0;border-left-color:transparent;border-left-width:.5rem}.ribbon-bookmark.ribbon-left{padding-right:.5rem}.ribbon-bookmark.ribbon-left:after{right:auto;left:100%;border-right-color:transparent;border-right-width:.5rem;border-left-width:0}.ribbon-bookmark.ribbon-top{padding-right:0;padding-bottom:.25rem;padding-left:0;border-radius:0 var(--tblr-ribbon-border-radius) 0 0}.ribbon-bookmark.ribbon-top:after{top:100%;right:0;left:0;border-color:inherit;border-width:1rem;border-top-width:0;border-bottom-color:transparent;border-bottom-width:.5rem}.markdown{line-height:1.7142857143}.markdown>:first-child{margin-top:0}.markdown>:last-child,.markdown>:last-child .highlight{margin-bottom:0}@media (min-width:768px){.markdown>.hr,.markdown>hr{margin-top:3em;margin-bottom:3em}}.markdown>.h1,.markdown>.h2,.markdown>.h3,.markdown>.h4,.markdown>.h5,.markdown>.h6,.markdown>h1,.markdown>h2,.markdown>h3,.markdown>h4,.markdown>h5,.markdown>h6{font-weight:var(--tblr-font-weight-bold)}.markdown>blockquote{font-size:1rem;margin:1.5rem 0;padding:.5rem 1.5rem}.markdown>img{border-radius:var(--tblr-border-radius)}.placeholder:not(.btn):not([class*=bg-]){background-color:currentColor!important}.placeholder:not(.avatar):not([class*=card-img-]){border-radius:var(--tblr-border-radius)}.steps{--tblr-steps-color:var(--tblr-primary);--tblr-steps-inactive-color:var(--tblr-border-color);--tblr-steps-dot-size:.5rem;--tblr-steps-border-width:2px;display:flex;flex-wrap:nowrap;width:100%;padding:0;margin:0;list-style:none}.steps-blue{--tblr-steps-color:var(--tblr-blue)}.steps-azure{--tblr-steps-color:var(--tblr-azure)}.steps-indigo{--tblr-steps-color:var(--tblr-indigo)}.steps-purple{--tblr-steps-color:var(--tblr-purple)}.steps-pink{--tblr-steps-color:var(--tblr-pink)}.steps-red{--tblr-steps-color:var(--tblr-red)}.steps-orange{--tblr-steps-color:var(--tblr-orange)}.steps-yellow{--tblr-steps-color:var(--tblr-yellow)}.steps-lime{--tblr-steps-color:var(--tblr-lime)}.steps-green{--tblr-steps-color:var(--tblr-green)}.steps-teal{--tblr-steps-color:var(--tblr-teal)}.steps-cyan{--tblr-steps-color:var(--tblr-cyan)}.step-item{position:relative;flex:1 1 0;min-height:1rem;margin-top:0;color:inherit;text-align:center;cursor:default;padding-top:calc(var(--tblr-steps-dot-size))}a.step-item{cursor:pointer}a.step-item:hover{color:inherit}.step-item:after,.step-item:before{background:var(--tblr-steps-color)}.step-item:not(:last-child):after{position:absolute;left:50%;width:100%;content:"";transform:translateY(-50%)}.step-item:after{top:calc(var(--tblr-steps-dot-size) * .5);height:var(--tblr-steps-border-width)}.step-item:before{content:"";position:absolute;top:0;left:50%;z-index:1;box-sizing:content-box;display:flex;align-items:center;justify-content:center;border-radius:100rem;transform:translate(-50%);color:var(--tblr-white);width:var(--tblr-steps-dot-size);height:var(--tblr-steps-dot-size)}.step-item.active{font-weight:var(--tblr-font-weight-bold)}.step-item.active:after{background:var(--tblr-steps-inactive-color)}.step-item.active~.step-item{color:var(--tblr-disabled-color)}.step-item.active~.step-item:after,.step-item.active~.step-item:before{background:var(--tblr-steps-inactive-color)}.steps-counter{--tblr-steps-dot-size:1.5rem;counter-reset:steps}.steps-counter .step-item{counter-increment:steps}.steps-counter .step-item:before{content:counter(steps)}.steps-vertical{--tblr-steps-dot-offset:6px;flex-direction:column}.steps-vertical.steps-counter{--tblr-steps-dot-offset:-2px}.steps-vertical .step-item{text-align:left;padding-top:0;padding-left:calc(var(--tblr-steps-dot-size) + 1rem);min-height:auto}.steps-vertical .step-item:not(:first-child){margin-top:1rem}.steps-vertical .step-item:before{top:var(--tblr-steps-dot-offset);left:0;transform:translate(0)}.steps-vertical .step-item:not(:last-child):after{position:absolute;content:"";transform:translate(-50%);top:var(--tblr-steps-dot-offset);left:calc(var(--tblr-steps-dot-size) * .5);width:var(--tblr-steps-border-width);height:calc(100% + 1rem)}@keyframes status-pulsate-main{40%{transform:scale(1.25)}60%{transform:scale(1.25)}}@keyframes status-pulsate-secondary{10%{transform:scale(1)}30%{transform:scale(3)}80%{transform:scale(3)}to{transform:scale(1)}}@keyframes status-pulsate-tertiary{25%{transform:scale(1)}80%{transform:scale(3);opacity:0}to{transform:scale(3);opacity:0}}.status{--tblr-status-height:1.5rem;--tblr-status-color:#667382;--tblr-status-color-rgb:102,115,130;display:inline-flex;align-items:center;height:var(--tblr-status-height);padding:.25rem .75rem;gap:.5rem;color:var(--tblr-status-color);background:rgba(var(--tblr-status-color-rgb),.1);font-size:.875rem;text-transform:none;letter-spacing:normal;border-radius:100rem;font-weight:var(--tblr-font-weight-medium);line-height:1;margin:0}.status .status-dot{background:var(--tblr-status-color)}.status .icon{font-size:1.25rem}.status-lite{border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color)!important;background:0 0!important;color:var(--tblr-body-color)!important}.status-primary{--tblr-status-color:#206bc4;--tblr-status-color-rgb:32,107,196}.status-secondary{--tblr-status-color:#667382;--tblr-status-color-rgb:102,115,130}.status-success{--tblr-status-color:#2fb344;--tblr-status-color-rgb:47,179,68}.status-info{--tblr-status-color:#4299e1;--tblr-status-color-rgb:66,153,225}.status-warning{--tblr-status-color:#f76707;--tblr-status-color-rgb:247,103,7}.status-danger{--tblr-status-color:#d63939;--tblr-status-color-rgb:214,57,57}.status-light{--tblr-status-color:#fcfdfe;--tblr-status-color-rgb:252,253,254}.status-dark{--tblr-status-color:#182433;--tblr-status-color-rgb:24,36,51}.status-muted{--tblr-status-color:#667382;--tblr-status-color-rgb:102,115,130}.status-blue{--tblr-status-color:#206bc4;--tblr-status-color-rgb:32,107,196}.status-azure{--tblr-status-color:#4299e1;--tblr-status-color-rgb:66,153,225}.status-indigo{--tblr-status-color:#4263eb;--tblr-status-color-rgb:66,99,235}.status-purple{--tblr-status-color:#ae3ec9;--tblr-status-color-rgb:174,62,201}.status-pink{--tblr-status-color:#d6336c;--tblr-status-color-rgb:214,51,108}.status-red{--tblr-status-color:#d63939;--tblr-status-color-rgb:214,57,57}.status-orange{--tblr-status-color:#f76707;--tblr-status-color-rgb:247,103,7}.status-yellow{--tblr-status-color:#f59f00;--tblr-status-color-rgb:245,159,0}.status-lime{--tblr-status-color:#74b816;--tblr-status-color-rgb:116,184,22}.status-green{--tblr-status-color:#2fb344;--tblr-status-color-rgb:47,179,68}.status-teal{--tblr-status-color:#0ca678;--tblr-status-color-rgb:12,166,120}.status-cyan{--tblr-status-color:#17a2b8;--tblr-status-color-rgb:23,162,184}.status-facebook{--tblr-status-color:#1877f2;--tblr-status-color-rgb:24,119,242}.status-twitter{--tblr-status-color:#1da1f2;--tblr-status-color-rgb:29,161,242}.status-linkedin{--tblr-status-color:#0a66c2;--tblr-status-color-rgb:10,102,194}.status-google{--tblr-status-color:#dc4e41;--tblr-status-color-rgb:220,78,65}.status-youtube{--tblr-status-color:#ff0000;--tblr-status-color-rgb:255,0,0}.status-vimeo{--tblr-status-color:#1ab7ea;--tblr-status-color-rgb:26,183,234}.status-dribbble{--tblr-status-color:#ea4c89;--tblr-status-color-rgb:234,76,137}.status-github{--tblr-status-color:#181717;--tblr-status-color-rgb:24,23,23}.status-instagram{--tblr-status-color:#e4405f;--tblr-status-color-rgb:228,64,95}.status-pinterest{--tblr-status-color:#bd081c;--tblr-status-color-rgb:189,8,28}.status-vk{--tblr-status-color:#6383a8;--tblr-status-color-rgb:99,131,168}.status-rss{--tblr-status-color:#ffa500;--tblr-status-color-rgb:255,165,0}.status-flickr{--tblr-status-color:#0063dc;--tblr-status-color-rgb:0,99,220}.status-bitbucket{--tblr-status-color:#0052cc;--tblr-status-color-rgb:0,82,204}.status-tabler{--tblr-status-color:#206bc4;--tblr-status-color-rgb:32,107,196}.status-dot{--tblr-status-dot-color:var(--tblr-status-color, #667382);--tblr-status-size:.5rem;position:relative;display:inline-block;width:var(--tblr-status-size);height:var(--tblr-status-size);background:var(--tblr-status-dot-color);border-radius:100rem}.status-dot-animated:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;z-index:0;background:inherit;border-radius:inherit;opacity:.6;animation:1s linear 2s backwards infinite status-pulsate-tertiary}.status-indicator{--tblr-status-indicator-size:2.5rem;--tblr-status-indicator-color:var(--tblr-status-color, #667382);display:block;position:relative;width:var(--tblr-status-indicator-size);height:var(--tblr-status-indicator-size)}.status-indicator-circle{--tblr-status-circle-size:.75rem;position:absolute;left:50%;top:50%;margin:calc(var(--tblr-status-circle-size)/ -2) 0 0 calc(var(--tblr-status-circle-size)/ -2);width:var(--tblr-status-circle-size);height:var(--tblr-status-circle-size);border-radius:100rem;background:var(--tblr-status-color)}.status-indicator-circle:nth-child(1){z-index:3}.status-indicator-circle:nth-child(2){z-index:2;opacity:.1}.status-indicator-circle:nth-child(3){z-index:1;opacity:.3}.status-indicator-animated .status-indicator-circle:nth-child(1){animation:2s linear 1s infinite backwards status-pulsate-main}.status-indicator-animated .status-indicator-circle:nth-child(2){animation:2s linear 1s infinite backwards status-pulsate-secondary}.status-indicator-animated .status-indicator-circle:nth-child(3){animation:2s linear 1s infinite backwards status-pulsate-tertiary}.switch-icon{display:inline-block;line-height:1;border:0;padding:0;background:0 0;width:1.25rem;height:1.25rem;vertical-align:bottom;position:relative;cursor:pointer}.switch-icon.disabled{pointer-events:none;opacity:.4}.switch-icon:focus{outline:0}.switch-icon svg{display:block;width:100%;height:100%}.switch-icon .switch-icon-a,.switch-icon .switch-icon-b{display:block;width:100%;height:100%}.switch-icon .switch-icon-a{opacity:1}.switch-icon .switch-icon-b{position:absolute;top:0;left:0;opacity:0}.switch-icon.active .switch-icon-a{opacity:0}.switch-icon.active .switch-icon-b{opacity:1}.switch-icon-fade .switch-icon-a,.switch-icon-fade .switch-icon-b{transition:opacity .5s}@media (prefers-reduced-motion:reduce){.switch-icon-fade .switch-icon-a,.switch-icon-fade .switch-icon-b{transition:none}}.switch-icon-scale .switch-icon-a,.switch-icon-scale .switch-icon-b{transition:opacity .5s,transform 0s .5s}@media (prefers-reduced-motion:reduce){.switch-icon-scale .switch-icon-a,.switch-icon-scale .switch-icon-b{transition:none}}.switch-icon-scale .switch-icon-b{transform:scale(1.5)}.switch-icon-scale.active .switch-icon-a,.switch-icon-scale.active .switch-icon-b{transition:opacity 0s,transform .5s}@media (prefers-reduced-motion:reduce){.switch-icon-scale.active .switch-icon-a,.switch-icon-scale.active .switch-icon-b{transition:none}}.switch-icon-scale.active .switch-icon-b{transform:scale(1)}.switch-icon-flip{perspective:10em}.switch-icon-flip .switch-icon-a,.switch-icon-flip .switch-icon-b{-webkit-backface-visibility:hidden;backface-visibility:hidden;transform-style:preserve-3d;transition:opacity 0s .2s,transform .4s ease-in-out}@media (prefers-reduced-motion:reduce){.switch-icon-flip .switch-icon-a,.switch-icon-flip .switch-icon-b{transition:none}}.switch-icon-flip .switch-icon-a{opacity:1;transform:rotateY(0)}.switch-icon-flip .switch-icon-b{opacity:1;transform:rotateY(-180deg)}.switch-icon-flip.active .switch-icon-a{opacity:1;transform:rotateY(180deg)}.switch-icon-flip.active .switch-icon-b{opacity:1;transform:rotateY(0)}.switch-icon-slide-down,.switch-icon-slide-left,.switch-icon-slide-right,.switch-icon-slide-up{overflow:hidden}.switch-icon-slide-down .switch-icon-a,.switch-icon-slide-down .switch-icon-b,.switch-icon-slide-left .switch-icon-a,.switch-icon-slide-left .switch-icon-b,.switch-icon-slide-right .switch-icon-a,.switch-icon-slide-right .switch-icon-b,.switch-icon-slide-up .switch-icon-a,.switch-icon-slide-up .switch-icon-b{transition:opacity .3s,transform .3s}@media (prefers-reduced-motion:reduce){.switch-icon-slide-down .switch-icon-a,.switch-icon-slide-down .switch-icon-b,.switch-icon-slide-left .switch-icon-a,.switch-icon-slide-left .switch-icon-b,.switch-icon-slide-right .switch-icon-a,.switch-icon-slide-right .switch-icon-b,.switch-icon-slide-up .switch-icon-a,.switch-icon-slide-up .switch-icon-b{transition:none}}.switch-icon-slide-down .switch-icon-a,.switch-icon-slide-left .switch-icon-a,.switch-icon-slide-right .switch-icon-a,.switch-icon-slide-up .switch-icon-a{transform:translateY(0)}.switch-icon-slide-down .switch-icon-b,.switch-icon-slide-left .switch-icon-b,.switch-icon-slide-right .switch-icon-b,.switch-icon-slide-up .switch-icon-b{transform:translateY(100%)}.switch-icon-slide-down.active .switch-icon-a,.switch-icon-slide-left.active .switch-icon-a,.switch-icon-slide-right.active .switch-icon-a,.switch-icon-slide-up.active .switch-icon-a{transform:translateY(-100%)}.switch-icon-slide-down.active .switch-icon-b,.switch-icon-slide-left.active .switch-icon-b,.switch-icon-slide-right.active .switch-icon-b,.switch-icon-slide-up.active .switch-icon-b{transform:translateY(0)}.switch-icon-slide-left .switch-icon-a{transform:translate(0)}.switch-icon-slide-left .switch-icon-b{transform:translate(100%)}.switch-icon-slide-left.active .switch-icon-a{transform:translate(-100%)}.switch-icon-slide-left.active .switch-icon-b,.switch-icon-slide-right .switch-icon-a{transform:translate(0)}.switch-icon-slide-right .switch-icon-b{transform:translate(-100%)}.switch-icon-slide-right.active .switch-icon-a{transform:translate(100%)}.switch-icon-slide-right.active .switch-icon-b{transform:translate(0)}.switch-icon-slide-down .switch-icon-a{transform:translateY(0)}.switch-icon-slide-down .switch-icon-b{transform:translateY(-100%)}.switch-icon-slide-down.active .switch-icon-a{transform:translateY(100%)}.switch-icon-slide-down.active .switch-icon-b{transform:translateY(0)}.markdown>table thead th,.table thead th{background:var(--tblr-bg-surface-tertiary);font-size:.625rem;font-weight:var(--tblr-font-weight-bold);text-transform:uppercase;letter-spacing:.04em;line-height:1rem;color:var(--tblr-muted);padding-top:.5rem;padding-bottom:.5rem;white-space:nowrap}@media print{.markdown>table thead th,.table thead th{background:0 0}}.table-responsive .markdown>table,.table-responsive .table{margin-bottom:0}.table-responsive+.card-footer{border-top:0}.table-transparent thead th{background:0 0}.table-nowrap>:not(caption)>*>*{white-space:nowrap}.table-vcenter>:not(caption)>*>*{vertical-align:middle}.table-center>:not(caption)>*>*{text-align:center}.td-truncate{max-width:1px;width:100%}.table-mobile{display:block}.table-mobile thead{display:none}.table-mobile tbody,.table-mobile tr{display:flex;flex-direction:column}.table-mobile td{display:block;padding:.75rem!important;border:none;color:var(--tblr-body-color)!important}.table-mobile td[data-label]:before{font-size:.625rem;font-weight:var(--tblr-font-weight-bold);text-transform:uppercase;letter-spacing:.04em;line-height:1rem;color:var(--tblr-muted);content:attr(data-label);display:block}.table-mobile tr{border-bottom:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)}.table-mobile .btn{display:block}@media (max-width:575.98px){.table-mobile-sm{display:block}.table-mobile-sm thead{display:none}.table-mobile-sm tbody,.table-mobile-sm tr{display:flex;flex-direction:column}.table-mobile-sm td{display:block;padding:.75rem!important;border:none;color:var(--tblr-body-color)!important}.table-mobile-sm td[data-label]:before{font-size:.625rem;font-weight:var(--tblr-font-weight-bold);text-transform:uppercase;letter-spacing:.04em;line-height:1rem;color:var(--tblr-muted);content:attr(data-label);display:block}.table-mobile-sm tr{border-bottom:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)}.table-mobile-sm .btn{display:block}}@media (max-width:767.98px){.table-mobile-md{display:block}.table-mobile-md thead{display:none}.table-mobile-md tbody,.table-mobile-md tr{display:flex;flex-direction:column}.table-mobile-md td{display:block;padding:.75rem!important;border:none;color:var(--tblr-body-color)!important}.table-mobile-md td[data-label]:before{font-size:.625rem;font-weight:var(--tblr-font-weight-bold);text-transform:uppercase;letter-spacing:.04em;line-height:1rem;color:var(--tblr-muted);content:attr(data-label);display:block}.table-mobile-md tr{border-bottom:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)}.table-mobile-md .btn{display:block}}@media (max-width:991.98px){.table-mobile-lg{display:block}.table-mobile-lg thead{display:none}.table-mobile-lg tbody,.table-mobile-lg tr{display:flex;flex-direction:column}.table-mobile-lg td{display:block;padding:.75rem!important;border:none;color:var(--tblr-body-color)!important}.table-mobile-lg td[data-label]:before{font-size:.625rem;font-weight:var(--tblr-font-weight-bold);text-transform:uppercase;letter-spacing:.04em;line-height:1rem;color:var(--tblr-muted);content:attr(data-label);display:block}.table-mobile-lg tr{border-bottom:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)}.table-mobile-lg .btn{display:block}}@media (max-width:1199.98px){.table-mobile-xl{display:block}.table-mobile-xl thead{display:none}.table-mobile-xl tbody,.table-mobile-xl tr{display:flex;flex-direction:column}.table-mobile-xl td{display:block;padding:.75rem!important;border:none;color:var(--tblr-body-color)!important}.table-mobile-xl td[data-label]:before{font-size:.625rem;font-weight:var(--tblr-font-weight-bold);text-transform:uppercase;letter-spacing:.04em;line-height:1rem;color:var(--tblr-muted);content:attr(data-label);display:block}.table-mobile-xl tr{border-bottom:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)}.table-mobile-xl .btn{display:block}}@media (max-width:1399.98px){.table-mobile-xxl{display:block}.table-mobile-xxl thead{display:none}.table-mobile-xxl tbody,.table-mobile-xxl tr{display:flex;flex-direction:column}.table-mobile-xxl td{display:block;padding:.75rem!important;border:none;color:var(--tblr-body-color)!important}.table-mobile-xxl td[data-label]:before{font-size:.625rem;font-weight:var(--tblr-font-weight-bold);text-transform:uppercase;letter-spacing:.04em;line-height:1rem;color:var(--tblr-muted);content:attr(data-label);display:block}.table-mobile-xxl tr{border-bottom:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)}.table-mobile-xxl .btn{display:block}}.table-sort{font:inherit;color:inherit;text-transform:inherit;letter-spacing:inherit;border:0;background:inherit;display:block;width:100%;text-align:inherit;transition:color .3s;margin:-.5rem -.75rem;padding:.5rem .75rem}@media (prefers-reduced-motion:reduce){.table-sort{transition:none}}.table-sort.asc,.table-sort.desc,.table-sort:hover{color:var(--tblr-body-color)}.table-sort:after{content:"";display:inline-flex;width:1rem;height:1rem;vertical-align:bottom;-webkit-mask-image:url("data:image/svg+xml,");mask-image:url("data:image/svg+xml,");background:currentColor;margin-left:.25rem}.table-sort.asc:after{-webkit-mask-image:url("data:image/svg+xml,");mask-image:url("data:image/svg+xml,")}.table-sort.desc:after{-webkit-mask-image:url("data:image/svg+xml,");mask-image:url("data:image/svg+xml,")}.table-borderless thead th{background:0 0}.toast{background:#fff;border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent);box-shadow:#1824330a 0 2px 4px}.toast .toast-header{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.toast button[data-bs-dismiss=toast]{outline:0}.toast-primary{--tblr-toast-color:#206bc4}.toast-secondary{--tblr-toast-color:#667382}.toast-success{--tblr-toast-color:#2fb344}.toast-info{--tblr-toast-color:#4299e1}.toast-warning{--tblr-toast-color:#f76707}.toast-danger{--tblr-toast-color:#d63939}.toast-light{--tblr-toast-color:#fcfdfe}.toast-dark{--tblr-toast-color:#182433}.toast-muted{--tblr-toast-color:#667382}.toast-blue{--tblr-toast-color:#206bc4}.toast-azure{--tblr-toast-color:#4299e1}.toast-indigo{--tblr-toast-color:#4263eb}.toast-purple{--tblr-toast-color:#ae3ec9}.toast-pink{--tblr-toast-color:#d6336c}.toast-red{--tblr-toast-color:#d63939}.toast-orange{--tblr-toast-color:#f76707}.toast-yellow{--tblr-toast-color:#f59f00}.toast-lime{--tblr-toast-color:#74b816}.toast-green{--tblr-toast-color:#2fb344}.toast-teal{--tblr-toast-color:#0ca678}.toast-cyan{--tblr-toast-color:#17a2b8}.toast-facebook{--tblr-toast-color:#1877f2}.toast-twitter{--tblr-toast-color:#1da1f2}.toast-linkedin{--tblr-toast-color:#0a66c2}.toast-google{--tblr-toast-color:#dc4e41}.toast-youtube{--tblr-toast-color:#ff0000}.toast-vimeo{--tblr-toast-color:#1ab7ea}.toast-dribbble{--tblr-toast-color:#ea4c89}.toast-github{--tblr-toast-color:#181717}.toast-instagram{--tblr-toast-color:#e4405f}.toast-pinterest{--tblr-toast-color:#bd081c}.toast-vk{--tblr-toast-color:#6383a8}.toast-rss{--tblr-toast-color:#ffa500}.toast-flickr{--tblr-toast-color:#0063dc}.toast-bitbucket{--tblr-toast-color:#0052cc}.toast-tabler{--tblr-toast-color:#206bc4}.toolbar{display:flex;flex-wrap:nowrap;flex-shrink:0;margin:0 -.5rem}.toolbar>*{margin:0 .5rem}.tracking{--tblr-tracking-height:1.5rem;--tblr-tracking-gap-width:.125rem;--tblr-tracking-block-border-radius:var(--tblr-border-radius);display:flex;gap:var(--tblr-tracking-gap-width)}.tracking-squares{--tblr-tracking-block-border-radius:var(--tblr-border-radius-sm)}.tracking-squares .tracking-block{height:auto}.tracking-squares .tracking-block:before{content:"";display:block;padding-top:100%}.tracking-block{flex:1;border-radius:var(--tblr-tracking-block-border-radius);height:var(--tblr-tracking-height);min-width:.25rem;background:var(--tblr-border-color)}.timeline{--tblr-timeline-icon-size:2.5rem;position:relative;list-style:none;padding:0}.timeline-event{position:relative}.timeline-event:not(:last-child){margin-bottom:var(--tblr-page-padding)}.timeline-event:not(:last-child):before{content:"";position:absolute;top:var(--tblr-timeline-icon-size);left:calc(var(--tblr-timeline-icon-size)/ 2);bottom:calc(-1 * var(--tblr-page-padding));width:var(--tblr-border-width);background-color:var(--tblr-border-color);border-radius:var(--tblr-border-radius)}.timeline-event-icon{position:absolute;display:flex;align-items:center;justify-content:center;width:var(--tblr-timeline-icon-size,2.5rem);height:var(--tblr-timeline-icon-size,2.5rem);background:var(--tblr-gray-200);color:var(--tblr-muted);border-radius:var(--tblr-border-radius);z-index:5}.timeline-event-card{margin-left:calc(var(--tblr-timeline-icon-size,2.5rem) + var(--tblr-page-padding))}.timeline-simple .timeline-event-icon{display:none}.timeline-simple .timeline-event-card{margin-left:0}.hr-text{display:flex;align-items:center;margin:2rem 0;font-size:.625rem;font-weight:var(--tblr-font-weight-bold);text-transform:uppercase;letter-spacing:.04em;line-height:1rem;color:var(--tblr-muted);height:1px}.hr-text:after,.hr-text:before{flex:1 1 auto;height:1px;background-color:var(--tblr-border-color)}.hr-text:before{content:"";margin-right:.5rem}.hr-text:after{content:"";margin-left:.5rem}.hr-text>:first-child{padding-right:.5rem;padding-left:0;color:var(--tblr-muted)}.hr-text.hr-text-left:before{content:none}.hr-text.hr-text-left>:first-child{padding-right:.5rem;padding-left:.5rem}.hr-text.hr-text-right:before{content:""}.hr-text.hr-text-right:after{content:none}.hr-text.hr-text-right>:first-child{padding-right:0;padding-left:.5rem}.card>.hr-text{margin:0}.hr-text-spaceless{margin:-.5rem 0}.lead{line-height:1.4}a{-webkit-text-decoration-skip:ink;text-decoration-skip-ink:auto}.h1 a,.h2 a,.h3 a,.h4 a,.h5 a,.h6 a,h1 a,h2 a,h3 a,h4 a,h5 a,h6 a,.h1 a:hover,.h2 a:hover,.h3 a:hover,.h4 a:hover,.h5 a:hover,.h6 a:hover,h1 a:hover,h2 a:hover,h3 a:hover,h4 a:hover,h5 a:hover,h6 a:hover{color:inherit}.h1,h1{font-size:var(--tblr-font-size-h1);line-height:var(--tblr-line-height-h1)}.h2,h2{font-size:var(--tblr-font-size-h2);line-height:var(--tblr-line-height-h2)}.h3,h3{font-size:var(--tblr-font-size-h3);line-height:var(--tblr-line-height-h3)}.h4,h4{font-size:var(--tblr-font-size-h4);line-height:var(--tblr-line-height-h4)}.h5,h5{font-size:var(--tblr-font-size-h5);line-height:var(--tblr-line-height-h5)}.h6,h6{font-size:var(--tblr-font-size-h6);line-height:var(--tblr-line-height-h6)}.strong,b,strong{font-weight:var(--tblr-font-weight-bold)}blockquote{padding-left:1rem;border-left:2px var(--tblr-border-style) var(--tblr-border-color)}blockquote p{margin-bottom:1rem}blockquote cite{display:block;text-align:right}blockquote cite:before{content:"— "}ol,ul{padding-left:1.5rem}.hr,hr{margin:2rem 0}dl dd:last-child{margin-bottom:0}pre{padding:1rem;background:var(--tblr-bg-surface-dark);color:var(--tblr-light);border-radius:var(--tblr-border-radius)}pre code{background:0 0}code{background:var(--tblr-code-bg);padding:2px 4px;border-radius:var(--tblr-border-radius)}.kbd,kbd{border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);display:inline-block;box-sizing:border-box;max-width:100%;font-size:var(--tblr-font-size-h5);font-weight:var(--tblr-font-weight-medium);line-height:1;vertical-align:baseline;border-radius:var(--tblr-border-radius)}img{max-width:100%}.list-unstyled{margin-left:0}::-moz-selection{background-color:rgba(var(--tblr-primary-rgb),.16)}::selection{background-color:rgba(var(--tblr-primary-rgb),.16)}[class*=" link-"].disabled,[class^=link-].disabled{color:var(--tblr-disabled-color);pointer-events:none}.subheader{font-size:.625rem;font-weight:var(--tblr-font-weight-bold);text-transform:uppercase;letter-spacing:.04em;line-height:1rem;color:var(--tblr-muted)}.chart{display:block;min-height:10rem}.chart text{font-family:inherit}.chart-sm{height:2.5rem}.chart-lg{height:15rem}.chart-square{height:5.75rem}.chart-sparkline{position:relative;width:4rem;height:2.5rem;line-height:1;min-height:0!important}.chart-sparkline-sm{height:1.5rem}.chart-sparkline-square{width:2.5rem}.chart-sparkline-wide{width:6rem}.chart-sparkline-label{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;font-size:.625rem}.chart-sparkline-label .icon{width:1rem;height:1rem;font-size:1rem}.offcanvas-header{border-bottom:var(--tblr-border-width) var(--tblr-border-style) rgba(4,32,69,.14)}.offcanvas-footer{padding:1.5rem}.offcanvas-title{font-size:1rem;font-weight:var(--tblr-font-weight-medium);line-height:1.5rem}.offcanvas-narrow{width:20rem}.bg-white-overlay{color:#fff;background-color:#fcfdfe3d}.bg-dark-overlay{color:#fff;background-color:#1824333d}.bg-cover{background-repeat:no-repeat;background-size:cover;background-position:center}.bg-primary{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-primary-rgb),var(--tblr-bg-opacity))!important}.bg-primary-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;color:rgba(var(--tblr-primary-rgb),var(--tblr-text-opacity))!important;background-color:rgba(var(--tblr-primary-lt-rgb),var(--tblr-bg-opacity))!important}.border-primary{border-color:#206bc4!important}.bg-secondary{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-secondary-rgb),var(--tblr-bg-opacity))!important}.bg-secondary-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;color:rgba(var(--tblr-secondary-rgb),var(--tblr-text-opacity))!important;background-color:rgba(var(--tblr-secondary-lt-rgb),var(--tblr-bg-opacity))!important}.border-secondary{border-color:#667382!important}.bg-success{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-success-rgb),var(--tblr-bg-opacity))!important}.bg-success-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;color:rgba(var(--tblr-success-rgb),var(--tblr-text-opacity))!important;background-color:rgba(var(--tblr-success-lt-rgb),var(--tblr-bg-opacity))!important}.border-success{border-color:#2fb344!important}.bg-info{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-info-rgb),var(--tblr-bg-opacity))!important}.bg-info-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;color:rgba(var(--tblr-info-rgb),var(--tblr-text-opacity))!important;background-color:rgba(var(--tblr-info-lt-rgb),var(--tblr-bg-opacity))!important}.border-info{border-color:#4299e1!important}.bg-warning{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-warning-rgb),var(--tblr-bg-opacity))!important}.bg-warning-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;color:rgba(var(--tblr-warning-rgb),var(--tblr-text-opacity))!important;background-color:rgba(var(--tblr-warning-lt-rgb),var(--tblr-bg-opacity))!important}.border-warning{border-color:#f76707!important}.bg-danger{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-danger-rgb),var(--tblr-bg-opacity))!important}.bg-danger-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;color:rgba(var(--tblr-danger-rgb),var(--tblr-text-opacity))!important;background-color:rgba(var(--tblr-danger-lt-rgb),var(--tblr-bg-opacity))!important}.border-danger{border-color:#d63939!important}.bg-light{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-light-rgb),var(--tblr-bg-opacity))!important}.bg-light-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;color:rgba(var(--tblr-light-rgb),var(--tblr-text-opacity))!important;background-color:rgba(var(--tblr-light-lt-rgb),var(--tblr-bg-opacity))!important}.border-light{border-color:#fcfdfe!important}.bg-dark{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-dark-rgb),var(--tblr-bg-opacity))!important}.bg-dark-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;color:rgba(var(--tblr-dark-rgb),var(--tblr-text-opacity))!important;background-color:rgba(var(--tblr-dark-lt-rgb),var(--tblr-bg-opacity))!important}.border-dark{border-color:#182433!important}.bg-muted{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-muted-rgb),var(--tblr-bg-opacity))!important}.bg-muted-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;color:rgba(var(--tblr-muted-rgb),var(--tblr-text-opacity))!important;background-color:rgba(var(--tblr-muted-lt-rgb),var(--tblr-bg-opacity))!important}.border-muted{border-color:#667382!important}.bg-blue{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-blue-rgb),var(--tblr-bg-opacity))!important}.bg-blue-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;color:rgba(var(--tblr-blue-rgb),var(--tblr-text-opacity))!important;background-color:rgba(var(--tblr-blue-lt-rgb),var(--tblr-bg-opacity))!important}.border-blue{border-color:#206bc4!important}.bg-azure{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-azure-rgb),var(--tblr-bg-opacity))!important}.bg-azure-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;color:rgba(var(--tblr-azure-rgb),var(--tblr-text-opacity))!important;background-color:rgba(var(--tblr-azure-lt-rgb),var(--tblr-bg-opacity))!important}.border-azure{border-color:#4299e1!important}.bg-indigo{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-indigo-rgb),var(--tblr-bg-opacity))!important}.bg-indigo-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;color:rgba(var(--tblr-indigo-rgb),var(--tblr-text-opacity))!important;background-color:rgba(var(--tblr-indigo-lt-rgb),var(--tblr-bg-opacity))!important}.border-indigo{border-color:#4263eb!important}.bg-purple{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-purple-rgb),var(--tblr-bg-opacity))!important}.bg-purple-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;color:rgba(var(--tblr-purple-rgb),var(--tblr-text-opacity))!important;background-color:rgba(var(--tblr-purple-lt-rgb),var(--tblr-bg-opacity))!important}.border-purple{border-color:#ae3ec9!important}.bg-pink{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-pink-rgb),var(--tblr-bg-opacity))!important}.bg-pink-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;color:rgba(var(--tblr-pink-rgb),var(--tblr-text-opacity))!important;background-color:rgba(var(--tblr-pink-lt-rgb),var(--tblr-bg-opacity))!important}.border-pink{border-color:#d6336c!important}.bg-red{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-red-rgb),var(--tblr-bg-opacity))!important}.bg-red-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;color:rgba(var(--tblr-red-rgb),var(--tblr-text-opacity))!important;background-color:rgba(var(--tblr-red-lt-rgb),var(--tblr-bg-opacity))!important}.border-red{border-color:#d63939!important}.bg-orange{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-orange-rgb),var(--tblr-bg-opacity))!important}.bg-orange-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;color:rgba(var(--tblr-orange-rgb),var(--tblr-text-opacity))!important;background-color:rgba(var(--tblr-orange-lt-rgb),var(--tblr-bg-opacity))!important}.border-orange{border-color:#f76707!important}.bg-yellow{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-yellow-rgb),var(--tblr-bg-opacity))!important}.bg-yellow-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;color:rgba(var(--tblr-yellow-rgb),var(--tblr-text-opacity))!important;background-color:rgba(var(--tblr-yellow-lt-rgb),var(--tblr-bg-opacity))!important}.border-yellow{border-color:#f59f00!important}.bg-lime{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-lime-rgb),var(--tblr-bg-opacity))!important}.bg-lime-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;color:rgba(var(--tblr-lime-rgb),var(--tblr-text-opacity))!important;background-color:rgba(var(--tblr-lime-lt-rgb),var(--tblr-bg-opacity))!important}.border-lime{border-color:#74b816!important}.bg-green{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-green-rgb),var(--tblr-bg-opacity))!important}.bg-green-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;color:rgba(var(--tblr-green-rgb),var(--tblr-text-opacity))!important;background-color:rgba(var(--tblr-green-lt-rgb),var(--tblr-bg-opacity))!important}.border-green{border-color:#2fb344!important}.bg-teal{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-teal-rgb),var(--tblr-bg-opacity))!important}.bg-teal-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;color:rgba(var(--tblr-teal-rgb),var(--tblr-text-opacity))!important;background-color:rgba(var(--tblr-teal-lt-rgb),var(--tblr-bg-opacity))!important}.border-teal{border-color:#0ca678!important}.bg-cyan{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-cyan-rgb),var(--tblr-bg-opacity))!important}.bg-cyan-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;color:rgba(var(--tblr-cyan-rgb),var(--tblr-text-opacity))!important;background-color:rgba(var(--tblr-cyan-lt-rgb),var(--tblr-bg-opacity))!important}.border-cyan{border-color:#17a2b8!important}.bg-facebook{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-facebook-rgb),var(--tblr-bg-opacity))!important}.bg-facebook-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;color:rgba(var(--tblr-facebook-rgb),var(--tblr-text-opacity))!important;background-color:rgba(var(--tblr-facebook-lt-rgb),var(--tblr-bg-opacity))!important}.border-facebook{border-color:#1877f2!important}.bg-twitter{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-twitter-rgb),var(--tblr-bg-opacity))!important}.bg-twitter-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;color:rgba(var(--tblr-twitter-rgb),var(--tblr-text-opacity))!important;background-color:rgba(var(--tblr-twitter-lt-rgb),var(--tblr-bg-opacity))!important}.border-twitter{border-color:#1da1f2!important}.bg-linkedin{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-linkedin-rgb),var(--tblr-bg-opacity))!important}.bg-linkedin-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;color:rgba(var(--tblr-linkedin-rgb),var(--tblr-text-opacity))!important;background-color:rgba(var(--tblr-linkedin-lt-rgb),var(--tblr-bg-opacity))!important}.border-linkedin{border-color:#0a66c2!important}.bg-google{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-google-rgb),var(--tblr-bg-opacity))!important}.bg-google-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;color:rgba(var(--tblr-google-rgb),var(--tblr-text-opacity))!important;background-color:rgba(var(--tblr-google-lt-rgb),var(--tblr-bg-opacity))!important}.border-google{border-color:#dc4e41!important}.bg-youtube{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-youtube-rgb),var(--tblr-bg-opacity))!important}.bg-youtube-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;color:rgba(var(--tblr-youtube-rgb),var(--tblr-text-opacity))!important;background-color:rgba(var(--tblr-youtube-lt-rgb),var(--tblr-bg-opacity))!important}.border-youtube{border-color:red!important}.bg-vimeo{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-vimeo-rgb),var(--tblr-bg-opacity))!important}.bg-vimeo-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;color:rgba(var(--tblr-vimeo-rgb),var(--tblr-text-opacity))!important;background-color:rgba(var(--tblr-vimeo-lt-rgb),var(--tblr-bg-opacity))!important}.border-vimeo{border-color:#1ab7ea!important}.bg-dribbble{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-dribbble-rgb),var(--tblr-bg-opacity))!important}.bg-dribbble-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;color:rgba(var(--tblr-dribbble-rgb),var(--tblr-text-opacity))!important;background-color:rgba(var(--tblr-dribbble-lt-rgb),var(--tblr-bg-opacity))!important}.border-dribbble{border-color:#ea4c89!important}.bg-github{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-github-rgb),var(--tblr-bg-opacity))!important}.bg-github-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;color:rgba(var(--tblr-github-rgb),var(--tblr-text-opacity))!important;background-color:rgba(var(--tblr-github-lt-rgb),var(--tblr-bg-opacity))!important}.border-github{border-color:#181717!important}.bg-instagram{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-instagram-rgb),var(--tblr-bg-opacity))!important}.bg-instagram-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;color:rgba(var(--tblr-instagram-rgb),var(--tblr-text-opacity))!important;background-color:rgba(var(--tblr-instagram-lt-rgb),var(--tblr-bg-opacity))!important}.border-instagram{border-color:#e4405f!important}.bg-pinterest{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-pinterest-rgb),var(--tblr-bg-opacity))!important}.bg-pinterest-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;color:rgba(var(--tblr-pinterest-rgb),var(--tblr-text-opacity))!important;background-color:rgba(var(--tblr-pinterest-lt-rgb),var(--tblr-bg-opacity))!important}.border-pinterest{border-color:#bd081c!important}.bg-vk{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-vk-rgb),var(--tblr-bg-opacity))!important}.bg-vk-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;color:rgba(var(--tblr-vk-rgb),var(--tblr-text-opacity))!important;background-color:rgba(var(--tblr-vk-lt-rgb),var(--tblr-bg-opacity))!important}.border-vk{border-color:#6383a8!important}.bg-rss{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-rss-rgb),var(--tblr-bg-opacity))!important}.bg-rss-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;color:rgba(var(--tblr-rss-rgb),var(--tblr-text-opacity))!important;background-color:rgba(var(--tblr-rss-lt-rgb),var(--tblr-bg-opacity))!important}.border-rss{border-color:orange!important}.bg-flickr{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-flickr-rgb),var(--tblr-bg-opacity))!important}.bg-flickr-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;color:rgba(var(--tblr-flickr-rgb),var(--tblr-text-opacity))!important;background-color:rgba(var(--tblr-flickr-lt-rgb),var(--tblr-bg-opacity))!important}.border-flickr{border-color:#0063dc!important}.bg-bitbucket{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-bitbucket-rgb),var(--tblr-bg-opacity))!important}.bg-bitbucket-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;color:rgba(var(--tblr-bitbucket-rgb),var(--tblr-text-opacity))!important;background-color:rgba(var(--tblr-bitbucket-lt-rgb),var(--tblr-bg-opacity))!important}.border-bitbucket{border-color:#0052cc!important}.bg-tabler{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-tabler-rgb),var(--tblr-bg-opacity))!important}.bg-tabler-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;color:rgba(var(--tblr-tabler-rgb),var(--tblr-text-opacity))!important;background-color:rgba(var(--tblr-tabler-lt-rgb),var(--tblr-bg-opacity))!important}.border-tabler{border-color:#206bc4!important}.bg-white{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-white-rgb),var(--tblr-bg-opacity))!important}.bg-white-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;color:rgba(var(--tblr-white-rgb),var(--tblr-text-opacity))!important;background-color:rgba(var(--tblr-white-lt-rgb),var(--tblr-bg-opacity))!important}.border-white{border-color:#fff!important}.text-primary{--tblr-text-opacity:1;color:rgba(var(--tblr-primary-rgb),var(--tblr-text-opacity))!important}.text-primary-fg{color:var(--tblr-primary-fg)!important}.text-secondary{--tblr-text-opacity:1;color:rgba(var(--tblr-secondary-rgb),var(--tblr-text-opacity))!important}.text-secondary-fg{color:var(--tblr-secondary-fg)!important}.text-success{--tblr-text-opacity:1;color:rgba(var(--tblr-success-rgb),var(--tblr-text-opacity))!important}.text-success-fg{color:var(--tblr-success-fg)!important}.text-info{--tblr-text-opacity:1;color:rgba(var(--tblr-info-rgb),var(--tblr-text-opacity))!important}.text-info-fg{color:var(--tblr-info-fg)!important}.text-warning{--tblr-text-opacity:1;color:rgba(var(--tblr-warning-rgb),var(--tblr-text-opacity))!important}.text-warning-fg{color:var(--tblr-warning-fg)!important}.text-danger{--tblr-text-opacity:1;color:rgba(var(--tblr-danger-rgb),var(--tblr-text-opacity))!important}.text-danger-fg{color:var(--tblr-danger-fg)!important}.text-light{--tblr-text-opacity:1;color:rgba(var(--tblr-light-rgb),var(--tblr-text-opacity))!important}.text-light-fg{color:var(--tblr-light-fg)!important}.text-dark{--tblr-text-opacity:1;color:rgba(var(--tblr-dark-rgb),var(--tblr-text-opacity))!important}.text-dark-fg{color:var(--tblr-dark-fg)!important}.text-muted{--tblr-text-opacity:1;color:rgba(var(--tblr-muted-rgb),var(--tblr-text-opacity))!important}.text-muted-fg{color:var(--tblr-muted-fg)!important}.text-blue{--tblr-text-opacity:1;color:rgba(var(--tblr-blue-rgb),var(--tblr-text-opacity))!important}.text-blue-fg{color:var(--tblr-blue-fg)!important}.text-azure{--tblr-text-opacity:1;color:rgba(var(--tblr-azure-rgb),var(--tblr-text-opacity))!important}.text-azure-fg{color:var(--tblr-azure-fg)!important}.text-indigo{--tblr-text-opacity:1;color:rgba(var(--tblr-indigo-rgb),var(--tblr-text-opacity))!important}.text-indigo-fg{color:var(--tblr-indigo-fg)!important}.text-purple{--tblr-text-opacity:1;color:rgba(var(--tblr-purple-rgb),var(--tblr-text-opacity))!important}.text-purple-fg{color:var(--tblr-purple-fg)!important}.text-pink{--tblr-text-opacity:1;color:rgba(var(--tblr-pink-rgb),var(--tblr-text-opacity))!important}.text-pink-fg{color:var(--tblr-pink-fg)!important}.text-red{--tblr-text-opacity:1;color:rgba(var(--tblr-red-rgb),var(--tblr-text-opacity))!important}.text-red-fg{color:var(--tblr-red-fg)!important}.text-orange{--tblr-text-opacity:1;color:rgba(var(--tblr-orange-rgb),var(--tblr-text-opacity))!important}.text-orange-fg{color:var(--tblr-orange-fg)!important}.text-yellow{--tblr-text-opacity:1;color:rgba(var(--tblr-yellow-rgb),var(--tblr-text-opacity))!important}.text-yellow-fg{color:var(--tblr-yellow-fg)!important}.text-lime{--tblr-text-opacity:1;color:rgba(var(--tblr-lime-rgb),var(--tblr-text-opacity))!important}.text-lime-fg{color:var(--tblr-lime-fg)!important}.text-green{--tblr-text-opacity:1;color:rgba(var(--tblr-green-rgb),var(--tblr-text-opacity))!important}.text-green-fg{color:var(--tblr-green-fg)!important}.text-teal{--tblr-text-opacity:1;color:rgba(var(--tblr-teal-rgb),var(--tblr-text-opacity))!important}.text-teal-fg{color:var(--tblr-teal-fg)!important}.text-cyan{--tblr-text-opacity:1;color:rgba(var(--tblr-cyan-rgb),var(--tblr-text-opacity))!important}.text-cyan-fg{color:var(--tblr-cyan-fg)!important}.text-facebook{--tblr-text-opacity:1;color:rgba(var(--tblr-facebook-rgb),var(--tblr-text-opacity))!important}.text-facebook-fg{color:var(--tblr-facebook-fg)!important}.text-twitter{--tblr-text-opacity:1;color:rgba(var(--tblr-twitter-rgb),var(--tblr-text-opacity))!important}.text-twitter-fg{color:var(--tblr-twitter-fg)!important}.text-linkedin{--tblr-text-opacity:1;color:rgba(var(--tblr-linkedin-rgb),var(--tblr-text-opacity))!important}.text-linkedin-fg{color:var(--tblr-linkedin-fg)!important}.text-google{--tblr-text-opacity:1;color:rgba(var(--tblr-google-rgb),var(--tblr-text-opacity))!important}.text-google-fg{color:var(--tblr-google-fg)!important}.text-youtube{--tblr-text-opacity:1;color:rgba(var(--tblr-youtube-rgb),var(--tblr-text-opacity))!important}.text-youtube-fg{color:var(--tblr-youtube-fg)!important}.text-vimeo{--tblr-text-opacity:1;color:rgba(var(--tblr-vimeo-rgb),var(--tblr-text-opacity))!important}.text-vimeo-fg{color:var(--tblr-vimeo-fg)!important}.text-dribbble{--tblr-text-opacity:1;color:rgba(var(--tblr-dribbble-rgb),var(--tblr-text-opacity))!important}.text-dribbble-fg{color:var(--tblr-dribbble-fg)!important}.text-github{--tblr-text-opacity:1;color:rgba(var(--tblr-github-rgb),var(--tblr-text-opacity))!important}.text-github-fg{color:var(--tblr-github-fg)!important}.text-instagram{--tblr-text-opacity:1;color:rgba(var(--tblr-instagram-rgb),var(--tblr-text-opacity))!important}.text-instagram-fg{color:var(--tblr-instagram-fg)!important}.text-pinterest{--tblr-text-opacity:1;color:rgba(var(--tblr-pinterest-rgb),var(--tblr-text-opacity))!important}.text-pinterest-fg{color:var(--tblr-pinterest-fg)!important}.text-vk{--tblr-text-opacity:1;color:rgba(var(--tblr-vk-rgb),var(--tblr-text-opacity))!important}.text-vk-fg{color:var(--tblr-vk-fg)!important}.text-rss{--tblr-text-opacity:1;color:rgba(var(--tblr-rss-rgb),var(--tblr-text-opacity))!important}.text-rss-fg{color:var(--tblr-rss-fg)!important}.text-flickr{--tblr-text-opacity:1;color:rgba(var(--tblr-flickr-rgb),var(--tblr-text-opacity))!important}.text-flickr-fg{color:var(--tblr-flickr-fg)!important}.text-bitbucket{--tblr-text-opacity:1;color:rgba(var(--tblr-bitbucket-rgb),var(--tblr-text-opacity))!important}.text-bitbucket-fg{color:var(--tblr-bitbucket-fg)!important}.text-tabler{--tblr-text-opacity:1;color:rgba(var(--tblr-tabler-rgb),var(--tblr-text-opacity))!important}.text-tabler-fg{color:var(--tblr-tabler-fg)!important}.bg-gray-50{--tblr-bg-opacity:.1;background-color:rgba(var(--tblr-gray-50-rgb),var(--tblr-bg-opacity))!important}.text-gray-50-fg{color:#182433!important}.bg-gray-100{--tblr-bg-opacity:.1;background-color:rgba(var(--tblr-gray-100-rgb),var(--tblr-bg-opacity))!important}.text-gray-100-fg{color:#182433!important}.bg-gray-200{--tblr-bg-opacity:.1;background-color:rgba(var(--tblr-gray-200-rgb),var(--tblr-bg-opacity))!important}.text-gray-200-fg{color:#182433!important}.bg-gray-300{--tblr-bg-opacity:.1;background-color:rgba(var(--tblr-gray-300-rgb),var(--tblr-bg-opacity))!important}.text-gray-300-fg{color:#182433!important}.bg-gray-400{--tblr-bg-opacity:.1;background-color:rgba(var(--tblr-gray-400-rgb),var(--tblr-bg-opacity))!important}.text-gray-400-fg{color:#fcfdfe!important}.bg-gray-500{--tblr-bg-opacity:.1;background-color:rgba(var(--tblr-gray-500-rgb),var(--tblr-bg-opacity))!important}.text-gray-500-fg{color:#fcfdfe!important}.bg-gray-600{--tblr-bg-opacity:.1;background-color:rgba(var(--tblr-gray-600-rgb),var(--tblr-bg-opacity))!important}.text-gray-600-fg{color:#fcfdfe!important}.bg-gray-700{--tblr-bg-opacity:.1;background-color:rgba(var(--tblr-gray-700-rgb),var(--tblr-bg-opacity))!important}.text-gray-700-fg{color:#fcfdfe!important}.bg-gray-800{--tblr-bg-opacity:.1;background-color:rgba(var(--tblr-gray-800-rgb),var(--tblr-bg-opacity))!important}.text-gray-800-fg{color:#fcfdfe!important}.bg-gray-900{--tblr-bg-opacity:.1;background-color:rgba(var(--tblr-gray-900-rgb),var(--tblr-bg-opacity))!important}.text-gray-900-fg{color:#fcfdfe!important}.scrollable{overflow-x:hidden;overflow-y:auto;-webkit-overflow-scrolling:touch}.scrollable.hover{overflow-y:hidden}.scrollable.hover>*{margin-top:-1px}.scrollable.hover:active,.scrollable.hover:focus,.scrollable.hover:hover{overflow:visible;overflow-y:auto}.touch .scrollable{overflow-y:auto!important}.scroll-x,.scroll-y{overflow:hidden;-webkit-overflow-scrolling:touch}.scroll-y{overflow-y:auto}.scroll-x{overflow-x:auto}.no-scroll{overflow:hidden}.w-0{width:0!important}.h-0{height:0!important}.w-1{width:.25rem!important}.h-1{height:.25rem!important}.w-2{width:.5rem!important}.h-2{height:.5rem!important}.w-3{width:1rem!important}.h-3{height:1rem!important}.w-4{width:1.5rem!important}.h-4{height:1.5rem!important}.w-5{width:2rem!important}.h-5{height:2rem!important}.w-6{width:3rem!important}.h-6{height:3rem!important}.w-7{width:5rem!important}.h-7{height:5rem!important}.w-8{width:8rem!important}.h-8{height:8rem!important}.w-auto{width:auto!important}.h-auto{height:auto!important}.w-px{width:1px!important}.h-px{height:1px!important}.w-full{width:100%!important}.h-full{height:100%!important}.opacity-0{opacity:0!important}.opacity-5{opacity:.05!important}.opacity-10{opacity:.1!important}.opacity-15{opacity:.15!important}.opacity-20{opacity:.2!important}.opacity-25{opacity:.25!important}.opacity-30{opacity:.3!important}.opacity-35{opacity:.35!important}.opacity-40{opacity:.4!important}.opacity-45{opacity:.45!important}.opacity-50{opacity:.5!important}.opacity-55{opacity:.55!important}.opacity-60{opacity:.6!important}.opacity-65{opacity:.65!important}.opacity-70{opacity:.7!important}.opacity-75{opacity:.75!important}.opacity-80{opacity:.8!important}.opacity-85{opacity:.85!important}.opacity-90{opacity:.9!important}.opacity-95{opacity:.95!important}.opacity-100{opacity:1!important}.hover-shadow-sm:hover{box-shadow:0 .125rem .25rem #00000013!important}.hover-shadow:hover{box-shadow:0 .5rem 1rem #00000026!important}.hover-shadow-lg:hover{box-shadow:0 1rem 3rem #0000002d!important}.hover-shadow-none:hover{box-shadow:none!important}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.subpixel-antialiased{-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}/*! +* Tabler v1.0.0-beta19 (https://tabler.io) +* @version 1.0.0-beta19 +* @link https://tabler.io +* Copyright 2018-2023 The Tabler Authors +* Copyright 2018-2023 codecalm.net Paweł Kuna +* Licensed under MIT (https://github.com/tabler/tabler/blob/master/LICENSE) +*/.highlight pre,pre.highlight{max-height:30rem;margin:1.5rem 0;overflow:auto;border-radius:var(--tblr-border-radius)}.highlight pre,pre.highlight{scrollbar-color:rgba(var(--tblr-scrollbar-color,var(--tblr-body-color-rgb)),.16) transparent}.highlight pre::-webkit-scrollbar,pre.highlight::-webkit-scrollbar{width:1rem;height:1rem;-webkit-transition:background .3s;transition:background .3s}@media (prefers-reduced-motion:reduce){.highlight pre::-webkit-scrollbar,pre.highlight::-webkit-scrollbar{-webkit-transition:none;transition:none}}.highlight pre::-webkit-scrollbar-thumb,pre.highlight::-webkit-scrollbar-thumb{border-radius:1rem;border:5px solid transparent;box-shadow:inset 0 0 0 1rem rgba(var(--tblr-scrollbar-color,var(--tblr-body-color-rgb)),.16)}.highlight pre::-webkit-scrollbar-track,pre.highlight::-webkit-scrollbar-track{background:0 0}.highlight pre:hover::-webkit-scrollbar-thumb,pre.highlight:hover::-webkit-scrollbar-thumb{box-shadow:inset 0 0 0 1rem rgba(var(--tblr-scrollbar-color,var(--tblr-body-color-rgb)),.32)}.highlight pre::-webkit-scrollbar-corner,pre.highlight::-webkit-scrollbar-corner{background:0 0}.highlight{margin:0}.highlight code>*{margin:0!important;padding:0!important}.highlight .c,.highlight .c1{color:#a0aec0}.highlight .nc,.highlight .nt,.highlight .nx{color:#ff8383}.highlight .na,.highlight .p{color:#ffe484}.highlight .dl,.highlight .s,.highlight .s2{color:#b5f4a5}.highlight .k{color:#93ddfd}.highlight .mi,.highlight .s1{color:#d9a9ff}.example{padding:2rem;margin:1rem 0 2rem;border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);border-radius:3px 3px 0 0;position:relative;min-height:12rem;display:flex;align-items:center;overflow-x:auto}.example-centered{justify-content:center}.example-centered .example-content{flex:0 auto}.example-content{font-size:.875rem;line-height:1.4285714286;color:var(--tblr-body-color);flex:1;max-width:100%}.example-content .page-header{margin-bottom:0}.example-bg{background:#f6f8fb}.example-code{margin:2rem 0;border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);border-top:none}.example-code pre{margin:0;border:0;border-radius:0 0 3px 3px}.example+.example-code{margin-top:-2rem}.example-column{margin:0 auto}.example-column>.card:last-of-type{margin-bottom:0}.example-column-1{max-width:26rem}.example-column-2{max-width:52rem}.example-modal-backdrop{background:#182433;opacity:.24;position:absolute;width:100%;left:0;top:0;height:100%;border-radius:2px 2px 0 0}.card-sponsor{background:var(--tblr-primary-lt) no-repeat center/100% 100%;border-color:var(--tblr-primary);min-height:316px}.dropdown-menu-demo{display:inline-block;width:100%;position:relative;top:0;margin-bottom:1rem!important}.demo-icon-preview{position:-webkit-sticky;position:sticky;top:0}.demo-icon-preview i,.demo-icon-preview svg{width:15rem;height:15rem;font-size:15rem;stroke-width:1.5;margin:0 auto;display:block}@media (max-width:575.98px){.demo-icon-preview i,.demo-icon-preview svg{width:10rem;height:10rem;font-size:10rem}}.demo-icon-preview-icon pre{margin:0;-webkit-user-select:all;-moz-user-select:all;user-select:all}.demo-dividers>p{opacity:.2;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.demo-icons-list{display:flex;flex-wrap:wrap;padding:0;margin:0 -2px -1px 0;list-style:none}.demo-icons-list>*{flex:1 0 4rem}.demo-icons-list-wrap{overflow:hidden}.demo-icons-list-item{display:flex;flex-direction:column;align-items:center;justify-content:center;aspect-ratio:1;text-align:center;padding:.5rem;border-right:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);border-bottom:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);color:inherit;cursor:pointer}.demo-icons-list-item .icon{width:1.5rem;height:1.5rem;font-size:1.5rem}.demo-icons-list-item:hover{text-decoration:none}.settings-btn{position:fixed;right:-1px;top:10rem;border-top-right-radius:0;border-bottom-right-radius:0;box-shadow:rgba(var(--tblr-body-color-rgb),.04) 0 2px 4px}.settings-scheme{display:inline-block;border-radius:50%;height:3rem;width:3rem;position:relative;border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);box-shadow:rgba(var(--tblr-body-color-rgb),.04) 0 2px 4px}.settings-scheme-light{background:linear-gradient(135deg,#fff 50%,#fcfdfe 50%)}.settings-scheme-mixed{background-image:linear-gradient(135deg,#182433 50%,#fff 50%)}.settings-scheme-transparent{background:#fcfdfe}.settings-scheme-dark{background:#182433}.settings-scheme-colored{background-image:linear-gradient(135deg,var(--tblr-primary) 50%,#fcfdfe 50%)} diff --git a/src/main/resources/static/assets/index-DKle5_5b.js b/src/main/resources/static/assets/index-DKle5_5b.js new file mode 100644 index 00000000..ce6cf291 --- /dev/null +++ b/src/main/resources/static/assets/index-DKle5_5b.js @@ -0,0 +1,42 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/OssList-C0gSiIVM.js","assets/IconPlus-CFf7AFLH.js","assets/createVueComponent-l3sgX4hZ.js","assets/Tabulator.vue_vue_type_style_index_0_lang-BwLOthig.js","assets/Tabulator-C0-hRjAn.css","assets/request-DSShymva.js","assets/bootstrap.esm-Ceob_0pG.js","assets/YamlGenerate-IrhFSZLu.js","assets/_plugin-vue_export-helper-DlAUqK2U.js","assets/YamlGenerate-DSiHz0eV.css","assets/InstallSoftwareIframe-DUSv8_Be.js","assets/applicationInstallationForm-C5Vcb2Aw.js","assets/lodash-pZBD3XEw.js","assets/softwareCatalog-DbmZz9hR.js","assets/applicationInstallationForm-CIrFSkx4.css","assets/InstallSoftwareIframe-DgcZVSJH.css","assets/SoftwareCatalog-DW4Ywuns.js","assets/applicationDetailModal-D8U6ml02.js","assets/applicationDetailModal-BfM4XzFr.css","assets/SoftwareCatalog-CwQ6RJcF.css","assets/ApplicationStatus-D536zrb9.js","assets/ApplicationStatus-DPixrIJt.css","assets/ApplicationRepository-DUwHTE2E.js","assets/RepositoryList-B5opHrLQ.js","assets/repository-CdIWmRAQ.js","assets/RepositoryDetail-EZ68pMZx.js","assets/SoftwareCatalogListTest-C-sMMqkM.js","assets/SoftwareCatalogListTest-DfiSBOQi.css"])))=>i.map(i=>d[i]); +(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const i of document.querySelectorAll('link[rel="modulepreload"]'))s(i);new MutationObserver(i=>{for(const o of i)if(o.type==="childList")for(const a of o.addedNodes)a.tagName==="LINK"&&a.rel==="modulepreload"&&s(a)}).observe(document,{childList:!0,subtree:!0});function n(i){const o={};return i.integrity&&(o.integrity=i.integrity),i.referrerPolicy&&(o.referrerPolicy=i.referrerPolicy),i.crossOrigin==="use-credentials"?o.credentials="include":i.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function s(i){if(i.ep)return;i.ep=!0;const o=n(i);fetch(i.href,o)}})();/** +* @vue/shared v3.5.3 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**//*! #__NO_SIDE_EFFECTS__ */function Ca(e,t){const n=new Set(e.split(","));return s=>n.has(s)}const Me={},$s=[],cn=()=>{},Lm=()=>!1,Ii=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),Sa=e=>e.startsWith("onUpdate:"),Ge=Object.assign,Ta=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},Dm=Object.prototype.hasOwnProperty,Ie=(e,t)=>Dm.call(e,t),ee=Array.isArray,Fs=e=>Ar(e)==="[object Map]",Ws=e=>Ar(e)==="[object Set]",Rc=e=>Ar(e)==="[object Date]",fe=e=>typeof e=="function",qe=e=>typeof e=="string",fn=e=>typeof e=="symbol",$e=e=>e!==null&&typeof e=="object",nf=e=>($e(e)||fe(e))&&fe(e.then)&&fe(e.catch),sf=Object.prototype.toString,Ar=e=>sf.call(e),Nm=e=>Ar(e).slice(8,-1),rf=e=>Ar(e)==="[object Object]",Aa=e=>qe(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,ar=Ca(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Li=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},km=/-(\w)/g,Gt=Li(e=>e.replace(km,(t,n)=>n?n.toUpperCase():"")),Mm=/\B([A-Z])/g,gs=Li(e=>e.replace(Mm,"-$1").toLowerCase()),Di=Li(e=>e.charAt(0).toUpperCase()+e.slice(1)),ui=Li(e=>e?`on${Di(e)}`:""),Bn=(e,t)=>!Object.is(e,t),fi=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:s,value:n})},yi=e=>{const t=parseFloat(e);return isNaN(t)?e:t},$m=e=>{const t=qe(e)?Number(e):NaN;return isNaN(t)?e:t};let Pc;const af=()=>Pc||(Pc=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function Or(e){if(ee(e)){const t={};for(let n=0;n{if(n){const s=n.split(jm);s.length>1&&(t[s[0].trim()]=s[1].trim())}}),t}function Hn(e){let t="";if(qe(e))t=e;else if(ee(e))for(let n=0;nds(n,t))}const cf=e=>!!(e&&e.__v_isRef===!0),xa=e=>qe(e)?e:e==null?"":ee(e)||$e(e)&&(e.toString===sf||!fe(e.toString))?cf(e)?xa(e.value):JSON.stringify(e,uf,2):String(e),uf=(e,t)=>cf(t)?uf(e,t.value):Fs(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[s,i],o)=>(n[Do(s,o)+" =>"]=i,n),{})}:Ws(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>Do(n))}:fn(t)?Do(t):$e(t)&&!ee(t)&&!rf(t)?String(t):t,Do=(e,t="")=>{var n;return fn(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};/** +* @vue/reactivity v3.5.3 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/let mt;class ff{constructor(t=!1){this.detached=t,this._active=!0,this.effects=[],this.cleanups=[],this._isPaused=!1,this.parent=mt,!t&&mt&&(this.index=(mt.scopes||(mt.scopes=[])).push(this)-1)}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,n;if(this.scopes)for(t=0,n=this.scopes.length;t0)return;let e;for(;lr;){let t=lr;for(lr=void 0;t;){const n=t.nextEffect;if(t.nextEffect=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(s){e||(e=s)}t=n}}if(e)throw e}function gf(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function _f(e){let t,n=e.depsTail;for(let s=n;s;s=s.prevDep)s.version===-1?(s===n&&(n=s.prevDep),Ia(s),zm(s)):t=s,s.dep.activeLink=s.prevActiveLink,s.prevActiveLink=void 0;e.deps=t,e.depsTail=n}function Zo(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&bf(t.dep.computed)===!1||t.dep.version!==t.version)return!0;return!!e._dirty}function bf(e){if(e.flags&2)return!1;if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===gr))return;e.globalVersion=gr;const t=e.dep;if(e.flags|=2,t.version>0&&!e.isSSR&&!Zo(e)){e.flags&=-3;return}const n=ke,s=zt;ke=e,zt=!0;try{gf(e);const i=e.fn(e._value);(t.version===0||Bn(i,e._value))&&(e._value=i,t.version++)}catch(i){throw t.version++,i}finally{ke=n,zt=s,_f(e),e.flags&=-3}}function Ia(e){const{dep:t,prevSub:n,nextSub:s}=e;if(n&&(n.nextSub=s,e.prevSub=void 0),s&&(s.prevSub=n,e.nextSub=void 0),t.subs===e&&(t.subs=n),!t.subs&&t.computed){t.computed.flags&=-5;for(let i=t.computed.deps;i;i=i.nextDep)Ia(i)}}function zm(e){const{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}let zt=!0;const yf=[];function Vn(){yf.push(zt),zt=!1}function qn(){const e=yf.pop();zt=e===void 0?!0:e}function Ic(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const n=ke;ke=void 0;try{t()}finally{ke=n}}}let gr=0;class La{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0}track(t){if(!ke||!zt||ke===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==ke)n=this.activeLink={dep:this,sub:ke,version:this.version,nextDep:void 0,prevDep:void 0,nextSub:void 0,prevSub:void 0,prevActiveLink:void 0},ke.deps?(n.prevDep=ke.depsTail,ke.depsTail.nextDep=n,ke.depsTail=n):ke.deps=ke.depsTail=n,ke.flags&4&&vf(n);else if(n.version===-1&&(n.version=this.version,n.nextDep)){const s=n.nextDep;s.prevDep=n.prevDep,n.prevDep&&(n.prevDep.nextDep=s),n.prevDep=ke.depsTail,n.nextDep=void 0,ke.depsTail.nextDep=n,ke.depsTail=n,ke.deps===n&&(ke.deps=s)}return n}trigger(t){this.version++,gr++,this.notify(t)}notify(t){Ra();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()}finally{Pa()}}}function vf(e){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let s=t.deps;s;s=s.nextDep)vf(s)}const n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}const vi=new WeakMap,cs=Symbol(""),ea=Symbol(""),_r=Symbol("");function ot(e,t,n){if(zt&&ke){let s=vi.get(e);s||vi.set(e,s=new Map);let i=s.get(n);i||s.set(n,i=new La),i.track()}}function En(e,t,n,s,i,o){const a=vi.get(e);if(!a){gr++;return}let c=[];if(t==="clear")c=[...a.values()];else{const f=ee(e),p=f&&Aa(n);if(f&&n==="length"){const d=Number(s);a.forEach((m,b)=>{(b==="length"||b===_r||!fn(b)&&b>=d)&&c.push(m)})}else{const d=m=>m&&c.push(m);switch(n!==void 0&&d(a.get(n)),p&&d(a.get(_r)),t){case"add":f?p&&d(a.get("length")):(d(a.get(cs)),Fs(e)&&d(a.get(ea)));break;case"delete":f||(d(a.get(cs)),Fs(e)&&d(a.get(ea)));break;case"set":Fs(e)&&d(a.get(cs));break}}}Ra();for(const f of c)f.trigger();Pa()}function Km(e,t){var n;return(n=vi.get(e))==null?void 0:n.get(t)}function Is(e){const t=Ee(e);return t===e?t:(ot(t,"iterate",_r),Kt(e)?t:t.map(it))}function Ni(e){return ot(e=Ee(e),"iterate",_r),e}const Gm={__proto__:null,[Symbol.iterator](){return ko(this,Symbol.iterator,it)},concat(...e){return Is(this).concat(...e.map(t=>ee(t)?Is(t):t))},entries(){return ko(this,"entries",e=>(e[1]=it(e[1]),e))},every(e,t){return gn(this,"every",e,t,void 0,arguments)},filter(e,t){return gn(this,"filter",e,t,n=>n.map(it),arguments)},find(e,t){return gn(this,"find",e,t,it,arguments)},findIndex(e,t){return gn(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return gn(this,"findLast",e,t,it,arguments)},findLastIndex(e,t){return gn(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return gn(this,"forEach",e,t,void 0,arguments)},includes(...e){return Mo(this,"includes",e)},indexOf(...e){return Mo(this,"indexOf",e)},join(e){return Is(this).join(e)},lastIndexOf(...e){return Mo(this,"lastIndexOf",e)},map(e,t){return gn(this,"map",e,t,void 0,arguments)},pop(){return tr(this,"pop")},push(...e){return tr(this,"push",e)},reduce(e,...t){return Lc(this,"reduce",e,t)},reduceRight(e,...t){return Lc(this,"reduceRight",e,t)},shift(){return tr(this,"shift")},some(e,t){return gn(this,"some",e,t,void 0,arguments)},splice(...e){return tr(this,"splice",e)},toReversed(){return Is(this).toReversed()},toSorted(e){return Is(this).toSorted(e)},toSpliced(...e){return Is(this).toSpliced(...e)},unshift(...e){return tr(this,"unshift",e)},values(){return ko(this,"values",it)}};function ko(e,t,n){const s=Ni(e),i=s[t]();return s!==e&&!Kt(e)&&(i._next=i.next,i.next=()=>{const o=i._next();return o.value&&(o.value=n(o.value)),o}),i}const Jm=Array.prototype;function gn(e,t,n,s,i,o){const a=Ni(e),c=a!==e&&!Kt(e),f=a[t];if(f!==Jm[t]){const m=f.apply(e,o);return c?it(m):m}let p=n;a!==e&&(c?p=function(m,b){return n.call(this,it(m),b,e)}:n.length>2&&(p=function(m,b){return n.call(this,m,b,e)}));const d=f.call(a,p,s);return c&&i?i(d):d}function Lc(e,t,n,s){const i=Ni(e);let o=n;return i!==e&&(Kt(e)?n.length>3&&(o=function(a,c,f){return n.call(this,a,c,f,e)}):o=function(a,c,f){return n.call(this,a,it(c),f,e)}),i[t](o,...s)}function Mo(e,t,n){const s=Ee(e);ot(s,"iterate",_r);const i=s[t](...n);return(i===-1||i===!1)&&Ma(n[0])?(n[0]=Ee(n[0]),s[t](...n)):i}function tr(e,t,n=[]){Vn(),Ra();const s=Ee(e)[t].apply(e,n);return Pa(),qn(),s}const Xm=Ca("__proto__,__v_isRef,__isVue"),wf=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(fn));function Qm(e){fn(e)||(e=String(e));const t=Ee(this);return ot(t,"has",e),t.hasOwnProperty(e)}class Ef{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,s){const i=this._isReadonly,o=this._isShallow;if(n==="__v_isReactive")return!i;if(n==="__v_isReadonly")return i;if(n==="__v_isShallow")return o;if(n==="__v_raw")return s===(i?o?ug:Af:o?Tf:Sf).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(s)?t:void 0;const a=ee(t);if(!i){let f;if(a&&(f=Gm[n]))return f;if(n==="hasOwnProperty")return Qm}const c=Reflect.get(t,n,ze(t)?t:s);return(fn(n)?wf.has(n):Xm(n))||(i||ot(t,"get",n),o)?c:ze(c)?a&&Aa(n)?c:c.value:$e(c)?i?xf(c):xr(c):c}}class Cf extends Ef{constructor(t=!1){super(!1,t)}set(t,n,s,i){let o=t[n];if(!this._isShallow){const f=hs(o);if(!Kt(s)&&!hs(s)&&(o=Ee(o),s=Ee(s)),!ee(t)&&ze(o)&&!ze(s))return f?!1:(o.value=s,!0)}const a=ee(t)&&Aa(n)?Number(n)e,ki=e=>Reflect.getPrototypeOf(e);function si(e,t,n=!1,s=!1){e=e.__v_raw;const i=Ee(e),o=Ee(t);n||(Bn(t,o)&&ot(i,"get",t),ot(i,"get",o));const{has:a}=ki(i),c=s?Da:n?Fa:it;if(a.call(i,t))return c(e.get(t));if(a.call(i,o))return c(e.get(o));e!==i&&e.get(t)}function ri(e,t=!1){const n=this.__v_raw,s=Ee(n),i=Ee(e);return t||(Bn(e,i)&&ot(s,"has",e),ot(s,"has",i)),e===i?n.has(e):n.has(e)||n.has(i)}function ii(e,t=!1){return e=e.__v_raw,!t&&ot(Ee(e),"iterate",cs),Reflect.get(e,"size",e)}function Dc(e,t=!1){!t&&!Kt(e)&&!hs(e)&&(e=Ee(e));const n=Ee(this);return ki(n).has.call(n,e)||(n.add(e),En(n,"add",e,e)),this}function Nc(e,t,n=!1){!n&&!Kt(t)&&!hs(t)&&(t=Ee(t));const s=Ee(this),{has:i,get:o}=ki(s);let a=i.call(s,e);a||(e=Ee(e),a=i.call(s,e));const c=o.call(s,e);return s.set(e,t),a?Bn(t,c)&&En(s,"set",e,t):En(s,"add",e,t),this}function kc(e){const t=Ee(this),{has:n,get:s}=ki(t);let i=n.call(t,e);i||(e=Ee(e),i=n.call(t,e)),s&&s.call(t,e);const o=t.delete(e);return i&&En(t,"delete",e,void 0),o}function Mc(){const e=Ee(this),t=e.size!==0,n=e.clear();return t&&En(e,"clear",void 0,void 0),n}function oi(e,t){return function(s,i){const o=this,a=o.__v_raw,c=Ee(a),f=t?Da:e?Fa:it;return!e&&ot(c,"iterate",cs),a.forEach((p,d)=>s.call(i,f(p),f(d),o))}}function ai(e,t,n){return function(...s){const i=this.__v_raw,o=Ee(i),a=Fs(o),c=e==="entries"||e===Symbol.iterator&&a,f=e==="keys"&&a,p=i[e](...s),d=n?Da:t?Fa:it;return!t&&ot(o,"iterate",f?ea:cs),{next(){const{value:m,done:b}=p.next();return b?{value:m,done:b}:{value:c?[d(m[0]),d(m[1])]:d(m),done:b}},[Symbol.iterator](){return this}}}}function Rn(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function ng(){const e={get(o){return si(this,o)},get size(){return ii(this)},has:ri,add:Dc,set:Nc,delete:kc,clear:Mc,forEach:oi(!1,!1)},t={get(o){return si(this,o,!1,!0)},get size(){return ii(this)},has:ri,add(o){return Dc.call(this,o,!0)},set(o,a){return Nc.call(this,o,a,!0)},delete:kc,clear:Mc,forEach:oi(!1,!0)},n={get(o){return si(this,o,!0)},get size(){return ii(this,!0)},has(o){return ri.call(this,o,!0)},add:Rn("add"),set:Rn("set"),delete:Rn("delete"),clear:Rn("clear"),forEach:oi(!0,!1)},s={get(o){return si(this,o,!0,!0)},get size(){return ii(this,!0)},has(o){return ri.call(this,o,!0)},add:Rn("add"),set:Rn("set"),delete:Rn("delete"),clear:Rn("clear"),forEach:oi(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(o=>{e[o]=ai(o,!1,!1),n[o]=ai(o,!0,!1),t[o]=ai(o,!1,!0),s[o]=ai(o,!0,!0)}),[e,n,t,s]}const[sg,rg,ig,og]=ng();function Na(e,t){const n=t?e?og:ig:e?rg:sg;return(s,i,o)=>i==="__v_isReactive"?!e:i==="__v_isReadonly"?e:i==="__v_raw"?s:Reflect.get(Ie(n,i)&&i in s?n:s,i,o)}const ag={get:Na(!1,!1)},lg={get:Na(!1,!0)},cg={get:Na(!0,!1)};const Sf=new WeakMap,Tf=new WeakMap,Af=new WeakMap,ug=new WeakMap;function fg(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function dg(e){return e.__v_skip||!Object.isExtensible(e)?0:fg(Nm(e))}function xr(e){return hs(e)?e:ka(e,!1,Zm,ag,Sf)}function Of(e){return ka(e,!1,tg,lg,Tf)}function xf(e){return ka(e,!0,eg,cg,Af)}function ka(e,t,n,s,i){if(!$e(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const o=i.get(e);if(o)return o;const a=dg(e);if(a===0)return e;const c=new Proxy(e,a===2?s:n);return i.set(e,c),c}function Fn(e){return hs(e)?Fn(e.__v_raw):!!(e&&e.__v_isReactive)}function hs(e){return!!(e&&e.__v_isReadonly)}function Kt(e){return!!(e&&e.__v_isShallow)}function Ma(e){return e?!!e.__v_raw:!1}function Ee(e){const t=e&&e.__v_raw;return t?Ee(t):e}function $a(e){return Object.isExtensible(e)&&of(e,"__v_skip",!0),e}const it=e=>$e(e)?xr(e):e,Fa=e=>$e(e)?xf(e):e;function ze(e){return e?e.__v_isRef===!0:!1}function ja(e){return Rf(e,!1)}function hg(e){return Rf(e,!0)}function Rf(e,t){return ze(e)?e:new pg(e,t)}class pg{constructor(t,n){this.dep=new La,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=n?t:Ee(t),this._value=n?t:it(t),this.__v_isShallow=n}get value(){return this.dep.track(),this._value}set value(t){const n=this._rawValue,s=this.__v_isShallow||Kt(t)||hs(t);t=s?t:Ee(t),Bn(t,n)&&(this._rawValue=t,this._value=s?t:it(t),this.dep.trigger())}}function jn(e){return ze(e)?e.value:e}const mg={get:(e,t,n)=>t==="__v_raw"?e:jn(Reflect.get(e,t,n)),set:(e,t,n,s)=>{const i=e[t];return ze(i)&&!ze(n)?(i.value=n,!0):Reflect.set(e,t,n,s)}};function Pf(e){return Fn(e)?e:new Proxy(e,mg)}function gg(e){const t=ee(e)?new Array(e.length):{};for(const n in e)t[n]=bg(e,n);return t}class _g{constructor(t,n,s){this._object=t,this._key=n,this._defaultValue=s,this.__v_isRef=!0,this._value=void 0}get value(){const t=this._object[this._key];return this._value=t===void 0?this._defaultValue:t}set value(t){this._object[this._key]=t}get dep(){return Km(Ee(this._object),this._key)}}function bg(e,t,n){const s=e[t];return ze(s)?s:new _g(e,t,n)}class yg{constructor(t,n,s){this.fn=t,this.setter=n,this._value=void 0,this.dep=new La(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=gr-1,this.effect=this,this.__v_isReadonly=!n,this.isSSR=s}notify(){ke!==this&&(this.flags|=16,this.dep.notify())}get value(){const t=this.dep.track();return bf(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function vg(e,t,n=!1){let s,i;return fe(e)?s=e:(s=e.get,i=e.set),new yg(s,i,n)}const li={},wi=new WeakMap;let os;function wg(e,t=!1,n=os){if(n){let s=wi.get(n);s||wi.set(n,s=[]),s.push(e)}}function Eg(e,t,n=Me){const{immediate:s,deep:i,once:o,scheduler:a,augmentJob:c,call:f}=n,p=H=>i?H:Kt(H)||i===!1||i===0?vn(H,1):vn(H);let d,m,b,w,C=!1,P=!1;if(ze(e)?(m=()=>e.value,C=Kt(e)):Fn(e)?(m=()=>p(e),C=!0):ee(e)?(P=!0,C=e.some(H=>Fn(H)||Kt(H)),m=()=>e.map(H=>{if(ze(H))return H.value;if(Fn(H))return p(H);if(fe(H))return f?f(H,2):H()})):fe(e)?t?m=f?()=>f(e,2):e:m=()=>{if(b){Vn();try{b()}finally{qn()}}const H=os;os=d;try{return f?f(e,3,[w]):e(w)}finally{os=H}}:m=cn,t&&i){const H=m,Y=i===!0?1/0:i;m=()=>vn(H(),Y)}const R=hf(),$=()=>{d.stop(),R&&Ta(R.effects,d)};if(o)if(t){const H=t;t=(...Y)=>{H(...Y),$()}}else{const H=m;m=()=>{H(),$()}}let N=P?new Array(e.length).fill(li):li;const B=H=>{if(!(!(d.flags&1)||!d.dirty&&!H))if(t){const Y=d.run();if(i||C||(P?Y.some((ge,le)=>Bn(ge,N[le])):Bn(Y,N))){b&&b();const ge=os;os=d;try{const le=[Y,N===li?void 0:P&&N[0]===li?[]:N,w];f?f(t,3,le):t(...le),N=Y}finally{os=ge}}}else d.run()};return c&&c(B),d=new pf(m),d.scheduler=a?()=>a(B,!1):B,w=H=>wg(H,!1,d),b=d.onStop=()=>{const H=wi.get(d);if(H){if(f)f(H,4);else for(const Y of H)Y();wi.delete(d)}},t?s?B(!0):N=d.run():a?a(B.bind(null,!0),!0):d.run(),$.pause=d.pause.bind(d),$.resume=d.resume.bind(d),$.stop=$,$}function vn(e,t=1/0,n){if(t<=0||!$e(e)||e.__v_skip||(n=n||new Set,n.has(e)))return e;if(n.add(e),t--,ze(e))vn(e.value,t,n);else if(ee(e))for(let s=0;s{vn(s,t,n)});else if(rf(e)){for(const s in e)vn(e[s],t,n);for(const s of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,s)&&vn(e[s],t,n)}return e}/** +* @vue/runtime-core v3.5.3 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/function Rr(e,t,n,s){try{return s?e(...s):e()}catch(i){Mi(i,t,n)}}function Jt(e,t,n,s){if(fe(e)){const i=Rr(e,t,n,s);return i&&nf(i)&&i.catch(o=>{Mi(o,t,n)}),i}if(ee(e)){const i=[];for(let o=0;o>>1,i=gt[s],o=yr(i);o=yr(n)?gt.push(e):gt.splice(Sg(t),0,e),e.flags|=1,Lf()}}function Lf(){!br&&!ta&&(ta=!0,Ba=If.then(Nf))}function Tg(e){ee(e)?js.push(...e):kn&&e.id===-1?kn.splice(Ns+1,0,e):e.flags&1||(js.push(e),e.flags|=1),Lf()}function $c(e,t,n=br?an+1:0){for(;nyr(n)-yr(s));if(js.length=0,kn){kn.push(...t);return}for(kn=t,Ns=0;Nse.id==null?e.flags&2?-1:1/0:e.id;function Nf(e){ta=!1,br=!0;try{for(an=0;an{s._d&&Kc(-1);const o=Ei(t);let a;try{a=e(...i)}finally{Ei(o),s._d&&Kc(1)}return a};return s._n=!0,s._c=!0,s._d=!0,s}function n0(e,t){if(Je===null)return e;const n=Vi(Je),s=e.dirs||(e.dirs=[]);for(let i=0;ie.__isTeleport,Ls=Symbol("_leaveCb"),ci=Symbol("_enterCb");function xg(){const e={isMounted:!1,isLeaving:!1,isUnmounting:!1,leavingVNodes:new Map};return Bf(()=>{e.isMounted=!0}),Uf(()=>{e.isUnmounting=!0}),e}const $t=[Function,Array],Rg={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:$t,onEnter:$t,onAfterEnter:$t,onEnterCancelled:$t,onBeforeLeave:$t,onLeave:$t,onAfterLeave:$t,onLeaveCancelled:$t,onBeforeAppear:$t,onAppear:$t,onAfterAppear:$t,onAppearCancelled:$t};function Pg(e,t){const{leavingVNodes:n}=e;let s=n.get(t.type);return s||(s=Object.create(null),n.set(t.type,s)),s}function na(e,t,n,s,i){const{appear:o,mode:a,persisted:c=!1,onBeforeEnter:f,onEnter:p,onAfterEnter:d,onEnterCancelled:m,onBeforeLeave:b,onLeave:w,onAfterLeave:C,onLeaveCancelled:P,onBeforeAppear:R,onAppear:$,onAfterAppear:N,onAppearCancelled:B}=t,H=String(e.key),Y=Pg(n,e),ge=(q,oe)=>{q&&Jt(q,s,9,oe)},le=(q,oe)=>{const ve=oe[1];ge(q,oe),ee(q)?q.every(G=>G.length<=1)&&ve():q.length<=1&&ve()},te={mode:a,persisted:c,beforeEnter(q){let oe=f;if(!n.isMounted)if(o)oe=R||f;else return;q[Ls]&&q[Ls](!0);const ve=Y[H];ve&&ks(e,ve)&&ve.el[Ls]&&ve.el[Ls](),ge(oe,[q])},enter(q){let oe=p,ve=d,G=m;if(!n.isMounted)if(o)oe=$||p,ve=N||d,G=B||m;else return;let be=!1;const He=q[ci]=st=>{be||(be=!0,st?ge(G,[q]):ge(ve,[q]),te.delayedLeave&&te.delayedLeave(),q[ci]=void 0)};oe?le(oe,[q,He]):He()},leave(q,oe){const ve=String(e.key);if(q[ci]&&q[ci](!0),n.isUnmounting)return oe();ge(b,[q]);let G=!1;const be=q[Ls]=He=>{G||(G=!0,oe(),He?ge(P,[q]):ge(C,[q]),q[Ls]=void 0,Y[ve]===e&&delete Y[ve])};Y[ve]=e,w?le(w,[q,be]):be()},clone(q){return na(q,t,n,s)}};return te}function vr(e,t){e.shapeFlag&6&&e.component?(e.transition=t,vr(e.component.subTree,t)):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function Mf(e,t=!1,n){let s=[],i=0;for(let o=0;o1)for(let o=0;osa(C,t&&(ee(t)?t[P]:t),n,s,i));return}if(Bs(s)&&!i)return;const o=s.shapeFlag&4?Vi(s.component):s.el,a=i?null:o,{i:c,r:f}=e,p=t&&t.r,d=c.refs===Me?c.refs={}:c.refs,m=c.setupState,b=Ee(m),w=m===Me?()=>!1:C=>Ie(b,C);if(p!=null&&p!==f&&(qe(p)?(d[p]=null,w(p)&&(m[p]=null)):ze(p)&&(p.value=null)),fe(f))Rr(f,c,12,[a,d]);else{const C=qe(f),P=ze(f);if(C||P){const R=()=>{if(e.f){const $=C?w(f)?m[f]:d[f]:f.value;i?ee($)&&Ta($,o):ee($)?$.includes(o)||$.push(o):C?(d[f]=[o],w(f)&&(m[f]=d[f])):(f.value=[o],e.k&&(d[e.k]=f.value))}else C?(d[f]=a,w(f)&&(m[f]=a)):P&&(f.value=a,e.k&&(d[e.k]=a))};a?(R.id=-1,St(R,n)):R()}}}const Bs=e=>!!e.type.__asyncLoader,Ff=e=>e.type.__isKeepAlive;function Ig(e,t){jf(e,"a",t)}function Lg(e,t){jf(e,"da",t)}function jf(e,t,n=Ze){const s=e.__wdc||(e.__wdc=()=>{let i=n;for(;i;){if(i.isDeactivated)return;i=i.parent}return e()});if($i(t,s,n),n){let i=n.parent;for(;i&&i.parent;)Ff(i.parent.vnode)&&Dg(s,t,n,i),i=i.parent}}function Dg(e,t,n,s){const i=$i(t,e,s,!0);Vf(()=>{Ta(s[t],i)},n)}function $i(e,t,n=Ze,s=!1){if(n){const i=n[e]||(n[e]=[]),o=t.__weh||(t.__weh=(...a)=>{Vn();const c=Lr(n),f=Jt(t,n,e,a);return c(),qn(),f});return s?i.unshift(o):i.push(o),o}}const Tn=e=>(t,n=Ze)=>{(!Ui||e==="sp")&&$i(e,(...s)=>t(...s),n)},Ng=Tn("bm"),Bf=Tn("m"),kg=Tn("bu"),Hf=Tn("u"),Uf=Tn("bum"),Vf=Tn("um"),Mg=Tn("sp"),$g=Tn("rtg"),Fg=Tn("rtc");function jg(e,t=Ze){$i("ec",e,t)}const qf="components";function cr(e,t){return zf(qf,e,!0,t)||e}const Wf=Symbol.for("v-ndc");function Ua(e){return qe(e)?zf(qf,e,!1)||e:e||Wf}function zf(e,t,n=!0,s=!1){const i=Je||Ze;if(i){const o=i.type;{const c=O_(o,!1);if(c&&(c===t||c===Gt(t)||c===Di(Gt(t))))return o}const a=Fc(i[e]||o[e],t)||Fc(i.appContext[e],t);return!a&&s?o:a}}function Fc(e,t){return e&&(e[t]||e[Gt(t)]||e[Di(Gt(t))])}function jc(e,t,n,s){let i;const o=n,a=ee(e);if(a||qe(e)){const c=a&&Fn(e);c&&(e=Ni(e)),i=new Array(e.length);for(let f=0,p=e.length;ft(c,f,void 0,o));else{const c=Object.keys(e);i=new Array(c.length);for(let f=0,p=c.length;fSi(t)?!(t.type===Sn||t.type===tt&&!Kf(t.children)):!0)?e:null}function Hg(e,t){const n={};for(const s in e)n[ui(s)]=e[s];return n}const ra=e=>e?pd(e)?Vi(e):ra(e.parent):null,ur=Ge(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>ra(e.parent),$root:e=>ra(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>Va(e),$forceUpdate:e=>e.f||(e.f=()=>{Ha(e.update)}),$nextTick:e=>e.n||(e.n=Pr.bind(e.proxy)),$watch:e=>c_.bind(e)}),$o=(e,t)=>e!==Me&&!e.__isScriptSetup&&Ie(e,t),Ug={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:s,data:i,props:o,accessCache:a,type:c,appContext:f}=e;let p;if(t[0]!=="$"){const w=a[t];if(w!==void 0)switch(w){case 1:return s[t];case 2:return i[t];case 4:return n[t];case 3:return o[t]}else{if($o(s,t))return a[t]=1,s[t];if(i!==Me&&Ie(i,t))return a[t]=2,i[t];if((p=e.propsOptions[0])&&Ie(p,t))return a[t]=3,o[t];if(n!==Me&&Ie(n,t))return a[t]=4,n[t];ia&&(a[t]=0)}}const d=ur[t];let m,b;if(d)return t==="$attrs"&&ot(e.attrs,"get",""),d(e);if((m=c.__cssModules)&&(m=m[t]))return m;if(n!==Me&&Ie(n,t))return a[t]=4,n[t];if(b=f.config.globalProperties,Ie(b,t))return b[t]},set({_:e},t,n){const{data:s,setupState:i,ctx:o}=e;return $o(i,t)?(i[t]=n,!0):s!==Me&&Ie(s,t)?(s[t]=n,!0):Ie(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(o[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:s,appContext:i,propsOptions:o}},a){let c;return!!n[a]||e!==Me&&Ie(e,a)||$o(t,a)||(c=o[0])&&Ie(c,a)||Ie(s,a)||Ie(ur,a)||Ie(i.config.globalProperties,a)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:Ie(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function Bc(e){return ee(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let ia=!0;function Vg(e){const t=Va(e),n=e.proxy,s=e.ctx;ia=!1,t.beforeCreate&&Hc(t.beforeCreate,e,"bc");const{data:i,computed:o,methods:a,watch:c,provide:f,inject:p,created:d,beforeMount:m,mounted:b,beforeUpdate:w,updated:C,activated:P,deactivated:R,beforeDestroy:$,beforeUnmount:N,destroyed:B,unmounted:H,render:Y,renderTracked:ge,renderTriggered:le,errorCaptured:te,serverPrefetch:q,expose:oe,inheritAttrs:ve,components:G,directives:be,filters:He}=t;if(p&&qg(p,s,null),a)for(const ae in a){const Se=a[ae];fe(Se)&&(s[ae]=Se.bind(n))}if(i){const ae=i.call(n,n);$e(ae)&&(e.data=xr(ae))}if(ia=!0,o)for(const ae in o){const Se=o[ae],Pt=fe(Se)?Se.bind(n,n):fe(Se.get)?Se.get.bind(n,n):cn,I=!fe(Se)&&fe(Se.set)?Se.set.bind(n):cn,_t=Ft({get:Pt,set:I});Object.defineProperty(s,ae,{enumerable:!0,configurable:!0,get:()=>_t.value,set:et=>_t.value=et})}if(c)for(const ae in c)Gf(c[ae],s,n,ae);if(f){const ae=fe(f)?f.call(n):f;Reflect.ownKeys(ae).forEach(Se=>{di(Se,ae[Se])})}d&&Hc(d,e,"c");function Oe(ae,Se){ee(Se)?Se.forEach(Pt=>ae(Pt.bind(n))):Se&&ae(Se.bind(n))}if(Oe(Ng,m),Oe(Bf,b),Oe(kg,w),Oe(Hf,C),Oe(Ig,P),Oe(Lg,R),Oe(jg,te),Oe(Fg,ge),Oe($g,le),Oe(Uf,N),Oe(Vf,H),Oe(Mg,q),ee(oe))if(oe.length){const ae=e.exposed||(e.exposed={});oe.forEach(Se=>{Object.defineProperty(ae,Se,{get:()=>n[Se],set:Pt=>n[Se]=Pt})})}else e.exposed||(e.exposed={});Y&&e.render===cn&&(e.render=Y),ve!=null&&(e.inheritAttrs=ve),G&&(e.components=G),be&&(e.directives=be),q&&$f(e)}function qg(e,t,n=cn){ee(e)&&(e=oa(e));for(const s in e){const i=e[s];let o;$e(i)?"default"in i?o=xt(i.from||s,i.default,!0):o=xt(i.from||s):o=xt(i),ze(o)?Object.defineProperty(t,s,{enumerable:!0,configurable:!0,get:()=>o.value,set:a=>o.value=a}):t[s]=o}}function Hc(e,t,n){Jt(ee(e)?e.map(s=>s.bind(t.proxy)):e.bind(t.proxy),t,n)}function Gf(e,t,n,s){let i=s.includes(".")?ld(n,s):()=>n[s];if(qe(e)){const o=t[e];fe(o)&&fr(i,o)}else if(fe(e))fr(i,e.bind(n));else if($e(e))if(ee(e))e.forEach(o=>Gf(o,t,n,s));else{const o=fe(e.handler)?e.handler.bind(n):t[e.handler];fe(o)&&fr(i,o,e)}}function Va(e){const t=e.type,{mixins:n,extends:s}=t,{mixins:i,optionsCache:o,config:{optionMergeStrategies:a}}=e.appContext,c=o.get(t);let f;return c?f=c:!i.length&&!n&&!s?f=t:(f={},i.length&&i.forEach(p=>Ci(f,p,a,!0)),Ci(f,t,a)),$e(t)&&o.set(t,f),f}function Ci(e,t,n,s=!1){const{mixins:i,extends:o}=t;o&&Ci(e,o,n,!0),i&&i.forEach(a=>Ci(e,a,n,!0));for(const a in t)if(!(s&&a==="expose")){const c=Wg[a]||n&&n[a];e[a]=c?c(e[a],t[a]):t[a]}return e}const Wg={data:Uc,props:Vc,emits:Vc,methods:or,computed:or,beforeCreate:pt,created:pt,beforeMount:pt,mounted:pt,beforeUpdate:pt,updated:pt,beforeDestroy:pt,beforeUnmount:pt,destroyed:pt,unmounted:pt,activated:pt,deactivated:pt,errorCaptured:pt,serverPrefetch:pt,components:or,directives:or,watch:Kg,provide:Uc,inject:zg};function Uc(e,t){return t?e?function(){return Ge(fe(e)?e.call(this,this):e,fe(t)?t.call(this,this):t)}:t:e}function zg(e,t){return or(oa(e),oa(t))}function oa(e){if(ee(e)){const t={};for(let n=0;n1)return n&&fe(t)?t.call(s&&s.proxy):t}}function Xg(){return!!(Ze||Je||us)}const Xf={},Qf=()=>Object.create(Xf),Yf=e=>Object.getPrototypeOf(e)===Xf;function Qg(e,t,n,s=!1){const i={},o=Qf();e.propsDefaults=Object.create(null),Zf(e,t,i,o);for(const a in e.propsOptions[0])a in i||(i[a]=void 0);n?e.props=s?i:Of(i):e.type.props?e.props=i:e.props=o,e.attrs=o}function Yg(e,t,n,s){const{props:i,attrs:o,vnode:{patchFlag:a}}=e,c=Ee(i),[f]=e.propsOptions;let p=!1;if((s||a>0)&&!(a&16)){if(a&8){const d=e.vnode.dynamicProps;for(let m=0;m{f=!0;const[b,w]=ed(m,t,!0);Ge(a,b),w&&c.push(...w)};!n&&t.mixins.length&&t.mixins.forEach(d),e.extends&&d(e.extends),e.mixins&&e.mixins.forEach(d)}if(!o&&!f)return $e(e)&&s.set(e,$s),$s;if(ee(o))for(let d=0;de[0]==="_"||e==="$stable",qa=e=>ee(e)?e.map(ln):[ln(e)],e_=(e,t,n)=>{if(t._n)return t;const s=Ir((...i)=>qa(t(...i)),n);return s._c=!1,s},nd=(e,t,n)=>{const s=e._ctx;for(const i in e){if(td(i))continue;const o=e[i];if(fe(o))t[i]=e_(i,o,s);else if(o!=null){const a=qa(o);t[i]=()=>a}}},sd=(e,t)=>{const n=qa(t);e.slots.default=()=>n},rd=(e,t,n)=>{for(const s in t)(n||s!=="_")&&(e[s]=t[s])},t_=(e,t,n)=>{const s=e.slots=Qf();if(e.vnode.shapeFlag&32){const i=t._;i?(rd(s,t,n),n&&of(s,"_",i,!0)):nd(t,s)}else t&&sd(e,t)},n_=(e,t,n)=>{const{vnode:s,slots:i}=e;let o=!0,a=Me;if(s.shapeFlag&32){const c=t._;c?n&&c===1?o=!1:rd(i,t,n):(o=!t.$stable,nd(t,i)),a=t}else t&&(sd(e,t),a={default:1});if(o)for(const c in i)!td(c)&&a[c]==null&&delete i[c]},St=g_;function s_(e){return r_(e)}function r_(e,t){const n=af();n.__VUE__=!0;const{insert:s,remove:i,patchProp:o,createElement:a,createText:c,createComment:f,setText:p,setElementText:d,parentNode:m,nextSibling:b,setScopeId:w=cn,insertStaticContent:C}=e,P=(g,_,E,D=null,O=null,k=null,W=void 0,U=null,F=!!_.dynamicChildren)=>{if(g===_)return;g&&!ks(g,_)&&(D=x(g),et(g,O,k,!0),g=null),_.patchFlag===-2&&(F=!1,_.dynamicChildren=null);const{type:M,ref:ne,shapeFlag:z}=_;switch(M){case ji:R(g,_,E,D);break;case Sn:$(g,_,E,D);break;case hi:g==null&&N(_,E,D,W);break;case tt:G(g,_,E,D,O,k,W,U,F);break;default:z&1?Y(g,_,E,D,O,k,W,U,F):z&6?be(g,_,E,D,O,k,W,U,F):(z&64||z&128)&&M.process(g,_,E,D,O,k,W,U,F,Z)}ne!=null&&O&&sa(ne,g&&g.ref,k,_||g,!_)},R=(g,_,E,D)=>{if(g==null)s(_.el=c(_.children),E,D);else{const O=_.el=g.el;_.children!==g.children&&p(O,_.children)}},$=(g,_,E,D)=>{g==null?s(_.el=f(_.children||""),E,D):_.el=g.el},N=(g,_,E,D)=>{[g.el,g.anchor]=C(g.children,_,E,D,g.el,g.anchor)},B=({el:g,anchor:_},E,D)=>{let O;for(;g&&g!==_;)O=b(g),s(g,E,D),g=O;s(_,E,D)},H=({el:g,anchor:_})=>{let E;for(;g&&g!==_;)E=b(g),i(g),g=E;i(_)},Y=(g,_,E,D,O,k,W,U,F)=>{_.type==="svg"?W="svg":_.type==="math"&&(W="mathml"),g==null?ge(_,E,D,O,k,W,U,F):q(g,_,O,k,W,U,F)},ge=(g,_,E,D,O,k,W,U)=>{let F,M;const{props:ne,shapeFlag:z,transition:Q,dirs:re}=g;if(F=g.el=a(g.type,k,ne&&ne.is,ne),z&8?d(F,g.children):z&16&&te(g.children,F,null,D,O,Fo(g,k),W,U),re&&ss(g,null,D,"created"),le(F,g,g.scopeId,W,D),ne){for(const Ce in ne)Ce!=="value"&&!ar(Ce)&&o(F,Ce,null,ne[Ce],k,D);"value"in ne&&o(F,"value",null,ne.value,k),(M=ne.onVnodeBeforeMount)&&rn(M,D,g)}re&&ss(g,null,D,"beforeMount");const pe=i_(O,Q);pe&&Q.beforeEnter(F),s(F,_,E),((M=ne&&ne.onVnodeMounted)||pe||re)&&St(()=>{M&&rn(M,D,g),pe&&Q.enter(F),re&&ss(g,null,D,"mounted")},O)},le=(g,_,E,D,O)=>{if(E&&w(g,E),D)for(let k=0;k{for(let M=F;M{const U=_.el=g.el;let{patchFlag:F,dynamicChildren:M,dirs:ne}=_;F|=g.patchFlag&16;const z=g.props||Me,Q=_.props||Me;let re;if(E&&rs(E,!1),(re=Q.onVnodeBeforeUpdate)&&rn(re,E,_,g),ne&&ss(_,g,E,"beforeUpdate"),E&&rs(E,!0),(z.innerHTML&&Q.innerHTML==null||z.textContent&&Q.textContent==null)&&d(U,""),M?oe(g.dynamicChildren,M,U,E,D,Fo(_,O),k):W||Se(g,_,U,null,E,D,Fo(_,O),k,!1),F>0){if(F&16)ve(U,z,Q,E,O);else if(F&2&&z.class!==Q.class&&o(U,"class",null,Q.class,O),F&4&&o(U,"style",z.style,Q.style,O),F&8){const pe=_.dynamicProps;for(let Ce=0;Ce{re&&rn(re,E,_,g),ne&&ss(_,g,E,"updated")},D)},oe=(g,_,E,D,O,k,W)=>{for(let U=0;U<_.length;U++){const F=g[U],M=_[U],ne=F.el&&(F.type===tt||!ks(F,M)||F.shapeFlag&70)?m(F.el):E;P(F,M,ne,null,D,O,k,W,!0)}},ve=(g,_,E,D,O)=>{if(_!==E){if(_!==Me)for(const k in _)!ar(k)&&!(k in E)&&o(g,k,_[k],null,O,D);for(const k in E){if(ar(k))continue;const W=E[k],U=_[k];W!==U&&k!=="value"&&o(g,k,U,W,O,D)}"value"in E&&o(g,"value",_.value,E.value,O)}},G=(g,_,E,D,O,k,W,U,F)=>{const M=_.el=g?g.el:c(""),ne=_.anchor=g?g.anchor:c("");let{patchFlag:z,dynamicChildren:Q,slotScopeIds:re}=_;re&&(U=U?U.concat(re):re),g==null?(s(M,E,D),s(ne,E,D),te(_.children||[],E,ne,O,k,W,U,F)):z>0&&z&64&&Q&&g.dynamicChildren?(oe(g.dynamicChildren,Q,E,O,k,W,U),(_.key!=null||O&&_===O.subTree)&&id(g,_,!0)):Se(g,_,E,ne,O,k,W,U,F)},be=(g,_,E,D,O,k,W,U,F)=>{_.slotScopeIds=U,g==null?_.shapeFlag&512?O.ctx.activate(_,E,D,W,F):He(_,E,D,O,k,W,F):st(g,_,F)},He=(g,_,E,D,O,k,W)=>{const U=g.component=E_(g,D,O);if(Ff(g)&&(U.ctx.renderer=Z),C_(U,!1,W),U.asyncDep){if(O&&O.registerDep(U,Oe,W),!g.el){const F=U.subTree=nt(Sn);$(null,F,_,E)}}else Oe(U,g,_,E,O,k,W)},st=(g,_,E)=>{const D=_.component=g.component;if(p_(g,_,E))if(D.asyncDep&&!D.asyncResolved){ae(D,_,E);return}else D.next=_,D.update();else _.el=g.el,D.vnode=_},Oe=(g,_,E,D,O,k,W)=>{const U=()=>{if(g.isMounted){let{next:z,bu:Q,u:re,parent:pe,vnode:Ce}=g;{const lt=od(g);if(lt){z&&(z.el=Ce.el,ae(g,z,W)),lt.asyncDep.then(()=>{g.isUnmounted||U()});return}}let ye=z,Xe;rs(g,!1),z?(z.el=Ce.el,ae(g,z,W)):z=Ce,Q&&fi(Q),(Xe=z.props&&z.props.onVnodeBeforeUpdate)&&rn(Xe,pe,z,Ce),rs(g,!0);const Qe=jo(g),at=g.subTree;g.subTree=Qe,P(at,Qe,m(at.el),x(at),g,O,k),z.el=Qe.el,ye===null&&m_(g,Qe.el),re&&St(re,O),(Xe=z.props&&z.props.onVnodeUpdated)&&St(()=>rn(Xe,pe,z,Ce),O)}else{let z;const{el:Q,props:re}=_,{bm:pe,m:Ce,parent:ye,root:Xe,type:Qe}=g,at=Bs(_);if(rs(g,!1),pe&&fi(pe),!at&&(z=re&&re.onVnodeBeforeMount)&&rn(z,ye,_),rs(g,!0),Q&&je){const lt=()=>{g.subTree=jo(g),je(Q,g.subTree,g,O,null)};at&&Qe.__asyncHydrate?Qe.__asyncHydrate(Q,g,lt):lt()}else{Xe.ce&&Xe.ce._injectChildStyle(Qe);const lt=g.subTree=jo(g);P(null,lt,E,D,g,O,k),_.el=lt.el}if(Ce&&St(Ce,O),!at&&(z=re&&re.onVnodeMounted)){const lt=_;St(()=>rn(z,ye,lt),O)}(_.shapeFlag&256||ye&&Bs(ye.vnode)&&ye.vnode.shapeFlag&256)&&g.a&&St(g.a,O),g.isMounted=!0,_=E=D=null}};g.scope.on();const F=g.effect=new pf(U);g.scope.off();const M=g.update=F.run.bind(F),ne=g.job=F.runIfDirty.bind(F);ne.i=g,ne.id=g.uid,F.scheduler=()=>Ha(ne),rs(g,!0),M()},ae=(g,_,E)=>{_.component=g;const D=g.vnode.props;g.vnode=_,g.next=null,Yg(g,_.props,D,E),n_(g,_.children,E),Vn(),$c(g),qn()},Se=(g,_,E,D,O,k,W,U,F=!1)=>{const M=g&&g.children,ne=g?g.shapeFlag:0,z=_.children,{patchFlag:Q,shapeFlag:re}=_;if(Q>0){if(Q&128){I(M,z,E,D,O,k,W,U,F);return}else if(Q&256){Pt(M,z,E,D,O,k,W,U,F);return}}re&8?(ne&16&&Be(M,O,k),z!==M&&d(E,z)):ne&16?re&16?I(M,z,E,D,O,k,W,U,F):Be(M,O,k,!0):(ne&8&&d(E,""),re&16&&te(z,E,D,O,k,W,U,F))},Pt=(g,_,E,D,O,k,W,U,F)=>{g=g||$s,_=_||$s;const M=g.length,ne=_.length,z=Math.min(M,ne);let Q;for(Q=0;Qne?Be(g,O,k,!0,!1,z):te(_,E,D,O,k,W,U,F,z)},I=(g,_,E,D,O,k,W,U,F)=>{let M=0;const ne=_.length;let z=g.length-1,Q=ne-1;for(;M<=z&&M<=Q;){const re=g[M],pe=_[M]=F?Mn(_[M]):ln(_[M]);if(ks(re,pe))P(re,pe,E,null,O,k,W,U,F);else break;M++}for(;M<=z&&M<=Q;){const re=g[z],pe=_[Q]=F?Mn(_[Q]):ln(_[Q]);if(ks(re,pe))P(re,pe,E,null,O,k,W,U,F);else break;z--,Q--}if(M>z){if(M<=Q){const re=Q+1,pe=reQ)for(;M<=z;)et(g[M],O,k,!0),M++;else{const re=M,pe=M,Ce=new Map;for(M=pe;M<=Q;M++){const ct=_[M]=F?Mn(_[M]):ln(_[M]);ct.key!=null&&Ce.set(ct.key,M)}let ye,Xe=0;const Qe=Q-pe+1;let at=!1,lt=0;const Wn=new Array(Qe);for(M=0;M=Qe){et(ct,O,k,!0);continue}let It;if(ct.key!=null)It=Ce.get(ct.key);else for(ye=pe;ye<=Q;ye++)if(Wn[ye-pe]===0&&ks(ct,_[ye])){It=ye;break}It===void 0?et(ct,O,k,!0):(Wn[It-pe]=M+1,It>=lt?lt=It:at=!0,P(ct,_[It],E,null,O,k,W,U,F),Xe++)}const $r=at?o_(Wn):$s;for(ye=$r.length-1,M=Qe-1;M>=0;M--){const ct=pe+M,It=_[ct],Fr=ct+1{const{el:k,type:W,transition:U,children:F,shapeFlag:M}=g;if(M&6){_t(g.component.subTree,_,E,D);return}if(M&128){g.suspense.move(_,E,D);return}if(M&64){W.move(g,_,E,Z);return}if(W===tt){s(k,_,E);for(let z=0;zU.enter(k),O);else{const{leave:z,delayLeave:Q,afterLeave:re}=U,pe=()=>s(k,_,E),Ce=()=>{z(k,()=>{pe(),re&&re()})};Q?Q(k,pe,Ce):Ce()}else s(k,_,E)},et=(g,_,E,D=!1,O=!1)=>{const{type:k,props:W,ref:U,children:F,dynamicChildren:M,shapeFlag:ne,patchFlag:z,dirs:Q,cacheIndex:re}=g;if(z===-2&&(O=!1),U!=null&&sa(U,null,E,g,!0),re!=null&&(_.renderCache[re]=void 0),ne&256){_.ctx.deactivate(g);return}const pe=ne&1&&Q,Ce=!Bs(g);let ye;if(Ce&&(ye=W&&W.onVnodeBeforeUnmount)&&rn(ye,_,g),ne&6)Zt(g.component,E,D);else{if(ne&128){g.suspense.unmount(E,D);return}pe&&ss(g,null,_,"beforeUnmount"),ne&64?g.type.remove(g,_,E,Z,D):M&&!M.hasOnce&&(k!==tt||z>0&&z&64)?Be(M,_,E,!1,!0):(k===tt&&z&384||!O&&ne&16)&&Be(F,_,E),D&&Yt(g)}(Ce&&(ye=W&&W.onVnodeUnmounted)||pe)&&St(()=>{ye&&rn(ye,_,g),pe&&ss(g,null,_,"unmounted")},E)},Yt=g=>{const{type:_,el:E,anchor:D,transition:O}=g;if(_===tt){rt(E,D);return}if(_===hi){H(g);return}const k=()=>{i(E),O&&!O.persisted&&O.afterLeave&&O.afterLeave()};if(g.shapeFlag&1&&O&&!O.persisted){const{leave:W,delayLeave:U}=O,F=()=>W(E,k);U?U(g.el,k,F):F()}else k()},rt=(g,_)=>{let E;for(;g!==_;)E=b(g),i(g),g=E;i(_)},Zt=(g,_,E)=>{const{bum:D,scope:O,job:k,subTree:W,um:U,m:F,a:M}=g;Wc(F),Wc(M),D&&fi(D),O.stop(),k&&(k.flags|=8,et(W,g,_,E)),U&&St(U,_),St(()=>{g.isUnmounted=!0},_),_&&_.pendingBranch&&!_.isUnmounted&&g.asyncDep&&!g.asyncResolved&&g.suspenseId===_.pendingId&&(_.deps--,_.deps===0&&_.resolve())},Be=(g,_,E,D=!1,O=!1,k=0)=>{for(let W=k;W{if(g.shapeFlag&6)return x(g.component.subTree);if(g.shapeFlag&128)return g.suspense.next();const _=b(g.anchor||g.el),E=_&&_[Ag];return E?b(E):_};let A=!1;const V=(g,_,E)=>{g==null?_._vnode&&et(_._vnode,null,null,!0):P(_._vnode||null,g,_,null,null,null,E),_._vnode=g,A||(A=!0,$c(),Df(),A=!1)},Z={p:P,um:et,m:_t,r:Yt,mt:He,mc:te,pc:Se,pbc:oe,n:x,o:e};let Te,je;return{render:V,hydrate:Te,createApp:Jg(V,Te)}}function Fo({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function rs({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function i_(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function id(e,t,n=!1){const s=e.children,i=t.children;if(ee(s)&&ee(i))for(let o=0;o>1,e[n[c]]0&&(t[s]=n[o-1]),n[o]=s)}}for(o=n.length,a=n[o-1];o-- >0;)n[o]=a,a=t[a];return n}function od(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:od(t)}function Wc(e){if(e)for(let t=0;txt(a_);function fr(e,t,n){return ad(e,t,n)}function ad(e,t,n=Me){const{immediate:s,deep:i,flush:o,once:a}=n,c=Ge({},n);let f;if(Ui)if(o==="sync"){const b=l_();f=b.__watcherHandles||(b.__watcherHandles=[])}else if(!t||s)c.once=!0;else return{stop:cn,resume:cn,pause:cn};const p=Ze;c.call=(b,w,C)=>Jt(b,p,w,C);let d=!1;o==="post"?c.scheduler=b=>{St(b,p&&p.suspense)}:o!=="sync"&&(d=!0,c.scheduler=(b,w)=>{w?b():Ha(b)}),c.augmentJob=b=>{t&&(b.flags|=4),d&&(b.flags|=2,p&&(b.id=p.uid,b.i=p))};const m=Eg(e,t,c);return f&&f.push(m),m}function c_(e,t,n){const s=this.proxy,i=qe(e)?e.includes(".")?ld(s,e):()=>s[e]:e.bind(s,s);let o;fe(t)?o=t:(o=t.handler,n=t);const a=Lr(this),c=ad(i,o.bind(s),n);return a(),c}function ld(e,t){const n=t.split(".");return()=>{let s=e;for(let i=0;it==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${Gt(t)}Modifiers`]||e[`${gs(t)}Modifiers`];function f_(e,t,...n){if(e.isUnmounted)return;const s=e.vnode.props||Me;let i=n;const o=t.startsWith("update:"),a=o&&u_(s,t.slice(7));a&&(a.trim&&(i=n.map(d=>qe(d)?d.trim():d)),a.number&&(i=n.map(yi)));let c,f=s[c=ui(t)]||s[c=ui(Gt(t))];!f&&o&&(f=s[c=ui(gs(t))]),f&&Jt(f,e,6,i);const p=s[c+"Once"];if(p){if(!e.emitted)e.emitted={};else if(e.emitted[c])return;e.emitted[c]=!0,Jt(p,e,6,i)}}function cd(e,t,n=!1){const s=t.emitsCache,i=s.get(e);if(i!==void 0)return i;const o=e.emits;let a={},c=!1;if(!fe(e)){const f=p=>{const d=cd(p,t,!0);d&&(c=!0,Ge(a,d))};!n&&t.mixins.length&&t.mixins.forEach(f),e.extends&&f(e.extends),e.mixins&&e.mixins.forEach(f)}return!o&&!c?($e(e)&&s.set(e,null),null):(ee(o)?o.forEach(f=>a[f]=null):Ge(a,o),$e(e)&&s.set(e,a),a)}function Fi(e,t){return!e||!Ii(t)?!1:(t=t.slice(2).replace(/Once$/,""),Ie(e,t[0].toLowerCase()+t.slice(1))||Ie(e,gs(t))||Ie(e,t))}function jo(e){const{type:t,vnode:n,proxy:s,withProxy:i,propsOptions:[o],slots:a,attrs:c,emit:f,render:p,renderCache:d,props:m,data:b,setupState:w,ctx:C,inheritAttrs:P}=e,R=Ei(e);let $,N;try{if(n.shapeFlag&4){const H=i||s,Y=H;$=ln(p.call(Y,H,d,m,w,b,C)),N=c}else{const H=t;$=ln(H.length>1?H(m,{attrs:c,slots:a,emit:f}):H(m,null)),N=t.props?c:d_(c)}}catch(H){dr.length=0,Mi(H,e,1),$=nt(Sn)}let B=$;if(N&&P!==!1){const H=Object.keys(N),{shapeFlag:Y}=B;H.length&&Y&7&&(o&&H.some(Sa)&&(N=h_(N,o)),B=ps(B,N,!1,!0))}return n.dirs&&(B=ps(B,null,!1,!0),B.dirs=B.dirs?B.dirs.concat(n.dirs):n.dirs),n.transition&&vr(B,n.transition),$=B,Ei(R),$}const d_=e=>{let t;for(const n in e)(n==="class"||n==="style"||Ii(n))&&((t||(t={}))[n]=e[n]);return t},h_=(e,t)=>{const n={};for(const s in e)(!Sa(s)||!(s.slice(9)in t))&&(n[s]=e[s]);return n};function p_(e,t,n){const{props:s,children:i,component:o}=e,{props:a,children:c,patchFlag:f}=t,p=o.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&f>=0){if(f&1024)return!0;if(f&16)return s?zc(s,a,p):!!a;if(f&8){const d=t.dynamicProps;for(let m=0;me.__isSuspense;function g_(e,t){t&&t.pendingBranch?ee(e)?t.effects.push(...e):t.effects.push(e):Tg(e)}const tt=Symbol.for("v-fgt"),ji=Symbol.for("v-txt"),Sn=Symbol.for("v-cmt"),hi=Symbol.for("v-stc"),dr=[];let Ot=null;function Ue(e=!1){dr.push(Ot=e?null:[])}function __(){dr.pop(),Ot=dr[dr.length-1]||null}let wr=1;function Kc(e){wr+=e,e<0&&Ot&&(Ot.hasOnce=!0)}function fd(e){return e.dynamicChildren=wr>0?Ot||$s:null,__(),wr>0&&Ot&&Ot.push(e),e}function qt(e,t,n,s,i,o){return fd(_s(e,t,n,s,i,o,!0))}function jt(e,t,n,s,i){return fd(nt(e,t,n,s,i,!0))}function Si(e){return e?e.__v_isVNode===!0:!1}function ks(e,t){return e.type===t.type&&e.key===t.key}const dd=({key:e})=>e??null,pi=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?qe(e)||ze(e)||fe(e)?{i:Je,r:e,k:t,f:!!n}:e:null);function _s(e,t=null,n=null,s=0,i=null,o=e===tt?0:1,a=!1,c=!1){const f={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&dd(t),ref:t&&pi(t),scopeId:kf,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:o,patchFlag:s,dynamicProps:i,dynamicChildren:null,appContext:null,ctx:Je};return c?(Wa(f,n),o&128&&e.normalize(f)):n&&(f.shapeFlag|=qe(n)?8:16),wr>0&&!a&&Ot&&(f.patchFlag>0||o&6)&&f.patchFlag!==32&&Ot.push(f),f}const nt=b_;function b_(e,t=null,n=null,s=0,i=null,o=!1){if((!e||e===Wf)&&(e=Sn),Si(e)){const c=ps(e,t,!0);return n&&Wa(c,n),wr>0&&!o&&Ot&&(c.shapeFlag&6?Ot[Ot.indexOf(e)]=c:Ot.push(c)),c.patchFlag=-2,c}if(x_(e)&&(e=e.__vccOpts),t){t=y_(t);let{class:c,style:f}=t;c&&!qe(c)&&(t.class=Hn(c)),$e(f)&&(Ma(f)&&!ee(f)&&(f=Ge({},f)),t.style=Or(f))}const a=qe(e)?1:ud(e)?128:Og(e)?64:$e(e)?4:fe(e)?2:0;return _s(e,t,n,s,i,a,o,!0)}function y_(e){return e?Ma(e)||Yf(e)?Ge({},e):e:null}function ps(e,t,n=!1,s=!1){const{props:i,ref:o,patchFlag:a,children:c,transition:f}=e,p=t?Hi(i||{},t):i,d={__v_isVNode:!0,__v_skip:!0,type:e.type,props:p,key:p&&dd(p),ref:t&&t.ref?n&&o?ee(o)?o.concat(pi(t)):[o,pi(t)]:pi(t):o,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:c,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==tt?a===-1?16:a|16:a,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:f,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&ps(e.ssContent),ssFallback:e.ssFallback&&ps(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return f&&s&&vr(d,f.clone(d)),d}function Bi(e=" ",t=0){return nt(ji,null,e,t)}function s0(e,t){const n=nt(hi,null,e);return n.staticCount=t,n}function Bo(e="",t=!1){return t?(Ue(),jt(Sn,null,e)):nt(Sn,null,e)}function ln(e){return e==null||typeof e=="boolean"?nt(Sn):ee(e)?nt(tt,null,e.slice()):typeof e=="object"?Mn(e):nt(ji,null,String(e))}function Mn(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:ps(e)}function Wa(e,t){let n=0;const{shapeFlag:s}=e;if(t==null)t=null;else if(ee(t))n=16;else if(typeof t=="object")if(s&65){const i=t.default;i&&(i._c&&(i._d=!1),Wa(e,i()),i._c&&(i._d=!0));return}else{n=32;const i=t._;!i&&!Yf(t)?t._ctx=Je:i===3&&Je&&(Je.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else fe(t)?(t={default:t,_ctx:Je},n=32):(t=String(t),s&64?(n=16,t=[Bi(t)]):n=8);e.children=t,e.shapeFlag|=n}function Hi(...e){const t={};for(let n=0;nZe||Je;let Ti,la;{const e=af(),t=(n,s)=>{let i;return(i=e[n])||(i=e[n]=[]),i.push(s),o=>{i.length>1?i.forEach(a=>a(o)):i[0](o)}};Ti=t("__VUE_INSTANCE_SETTERS__",n=>Ze=n),la=t("__VUE_SSR_SETTERS__",n=>Ui=n)}const Lr=e=>{const t=Ze;return Ti(e),e.scope.on(),()=>{e.scope.off(),Ti(t)}},Gc=()=>{Ze&&Ze.scope.off(),Ti(null)};function pd(e){return e.vnode.shapeFlag&4}let Ui=!1;function C_(e,t=!1,n=!1){t&&la(t);const{props:s,children:i}=e.vnode,o=pd(e);Qg(e,s,o,t),t_(e,i,n);const a=o?S_(e,t):void 0;return t&&la(!1),a}function S_(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,Ug);const{setup:s}=n;if(s){const i=e.setupContext=s.length>1?A_(e):null,o=Lr(e);Vn();const a=Rr(s,e,0,[e.props,i]);if(qn(),o(),nf(a)){if(Bs(e)||$f(e),a.then(Gc,Gc),t)return a.then(c=>{Jc(e,c,t)}).catch(c=>{Mi(c,e,0)});e.asyncDep=a}else Jc(e,a,t)}else md(e,t)}function Jc(e,t,n){fe(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:$e(t)&&(e.setupState=Pf(t)),md(e,n)}let Xc;function md(e,t,n){const s=e.type;if(!e.render){if(!t&&Xc&&!s.render){const i=s.template||Va(e).template;if(i){const{isCustomElement:o,compilerOptions:a}=e.appContext.config,{delimiters:c,compilerOptions:f}=s,p=Ge(Ge({isCustomElement:o,delimiters:c},a),f);s.render=Xc(i,p)}}e.render=s.render||cn}{const i=Lr(e);Vn();try{Vg(e)}finally{qn(),i()}}}const T_={get(e,t){return ot(e,"get",""),e[t]}};function A_(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,T_),slots:e.slots,emit:e.emit,expose:t}}function Vi(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(Pf($a(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in ur)return ur[n](e)},has(t,n){return n in t||n in ur}})):e.proxy}function O_(e,t=!0){return fe(e)?e.displayName||e.name:e.name||t&&e.__name}function x_(e){return fe(e)&&"__vccOpts"in e}const Ft=(e,t)=>vg(e,t,Ui);function gd(e,t,n){const s=arguments.length;return s===2?$e(t)&&!ee(t)?Si(t)?nt(e,null,[t]):nt(e,t):nt(e,null,t):(s>3?n=Array.prototype.slice.call(arguments,2):s===3&&Si(n)&&(n=[n]),nt(e,t,n))}const R_="3.5.3";/** +* @vue/runtime-dom v3.5.3 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/let ca;const Qc=typeof window<"u"&&window.trustedTypes;if(Qc)try{ca=Qc.createPolicy("vue",{createHTML:e=>e})}catch{}const _d=ca?e=>ca.createHTML(e):e=>e,P_="http://www.w3.org/2000/svg",I_="http://www.w3.org/1998/Math/MathML",yn=typeof document<"u"?document:null,Yc=yn&&yn.createElement("template"),L_={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,s)=>{const i=t==="svg"?yn.createElementNS(P_,e):t==="mathml"?yn.createElementNS(I_,e):n?yn.createElement(e,{is:n}):yn.createElement(e);return e==="select"&&s&&s.multiple!=null&&i.setAttribute("multiple",s.multiple),i},createText:e=>yn.createTextNode(e),createComment:e=>yn.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>yn.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,s,i,o){const a=n?n.previousSibling:t.lastChild;if(i&&(i===o||i.nextSibling))for(;t.insertBefore(i.cloneNode(!0),n),!(i===o||!(i=i.nextSibling)););else{Yc.innerHTML=_d(s==="svg"?`${e}`:s==="mathml"?`${e}`:e);const c=Yc.content;if(s==="svg"||s==="mathml"){const f=c.firstChild;for(;f.firstChild;)c.appendChild(f.firstChild);c.removeChild(f)}t.insertBefore(c,n)}return[a?a.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},Pn="transition",nr="animation",Hs=Symbol("_vtc"),bd={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},D_=Ge({},Rg,bd),is=(e,t=[])=>{ee(e)?e.forEach(n=>n(...t)):e&&e(...t)},Zc=e=>e?ee(e)?e.some(t=>t.length>1):e.length>1:!1;function N_(e){const t={};for(const G in e)G in bd||(t[G]=e[G]);if(e.css===!1)return t;const{name:n="v",type:s,duration:i,enterFromClass:o=`${n}-enter-from`,enterActiveClass:a=`${n}-enter-active`,enterToClass:c=`${n}-enter-to`,appearFromClass:f=o,appearActiveClass:p=a,appearToClass:d=c,leaveFromClass:m=`${n}-leave-from`,leaveActiveClass:b=`${n}-leave-active`,leaveToClass:w=`${n}-leave-to`}=e,C=k_(i),P=C&&C[0],R=C&&C[1],{onBeforeEnter:$,onEnter:N,onEnterCancelled:B,onLeave:H,onLeaveCancelled:Y,onBeforeAppear:ge=$,onAppear:le=N,onAppearCancelled:te=B}=t,q=(G,be,He)=>{Dn(G,be?d:c),Dn(G,be?p:a),He&&He()},oe=(G,be)=>{G._isLeaving=!1,Dn(G,m),Dn(G,w),Dn(G,b),be&&be()},ve=G=>(be,He)=>{const st=G?le:N,Oe=()=>q(be,G,He);is(st,[be,Oe]),eu(()=>{Dn(be,G?f:o),bn(be,G?d:c),Zc(st)||tu(be,s,P,Oe)})};return Ge(t,{onBeforeEnter(G){is($,[G]),bn(G,o),bn(G,a)},onBeforeAppear(G){is(ge,[G]),bn(G,f),bn(G,p)},onEnter:ve(!1),onAppear:ve(!0),onLeave(G,be){G._isLeaving=!0;const He=()=>oe(G,be);bn(G,m),bn(G,b),vd(),eu(()=>{G._isLeaving&&(Dn(G,m),bn(G,w),Zc(H)||tu(G,s,R,He))}),is(H,[G,He])},onEnterCancelled(G){q(G,!1),is(B,[G])},onAppearCancelled(G){q(G,!0),is(te,[G])},onLeaveCancelled(G){oe(G),is(Y,[G])}})}function k_(e){if(e==null)return null;if($e(e))return[Ho(e.enter),Ho(e.leave)];{const t=Ho(e);return[t,t]}}function Ho(e){return $m(e)}function bn(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[Hs]||(e[Hs]=new Set)).add(t)}function Dn(e,t){t.split(/\s+/).forEach(s=>s&&e.classList.remove(s));const n=e[Hs];n&&(n.delete(t),n.size||(e[Hs]=void 0))}function eu(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let M_=0;function tu(e,t,n,s){const i=e._endId=++M_,o=()=>{i===e._endId&&s()};if(n)return setTimeout(o,n);const{type:a,timeout:c,propCount:f}=yd(e,t);if(!a)return s();const p=a+"end";let d=0;const m=()=>{e.removeEventListener(p,b),o()},b=w=>{w.target===e&&++d>=f&&m()};setTimeout(()=>{d(n[C]||"").split(", "),i=s(`${Pn}Delay`),o=s(`${Pn}Duration`),a=nu(i,o),c=s(`${nr}Delay`),f=s(`${nr}Duration`),p=nu(c,f);let d=null,m=0,b=0;t===Pn?a>0&&(d=Pn,m=a,b=o.length):t===nr?p>0&&(d=nr,m=p,b=f.length):(m=Math.max(a,p),d=m>0?a>p?Pn:nr:null,b=d?d===Pn?o.length:f.length:0);const w=d===Pn&&/\b(transform|all)(,|$)/.test(s(`${Pn}Property`).toString());return{type:d,timeout:m,propCount:b,hasTransform:w}}function nu(e,t){for(;e.lengthsu(n)+su(e[s])))}function su(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function vd(){return document.body.offsetHeight}function $_(e,t,n){const s=e[Hs];s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const Ai=Symbol("_vod"),wd=Symbol("_vsh"),r0={beforeMount(e,{value:t},{transition:n}){e[Ai]=e.style.display==="none"?"":e.style.display,n&&t?n.beforeEnter(e):sr(e,t)},mounted(e,{value:t},{transition:n}){n&&t&&n.enter(e)},updated(e,{value:t,oldValue:n},{transition:s}){!t!=!n&&(s?t?(s.beforeEnter(e),sr(e,!0),s.enter(e)):s.leave(e,()=>{sr(e,!1)}):sr(e,t))},beforeUnmount(e,{value:t}){sr(e,t)}};function sr(e,t){e.style.display=t?e[Ai]:"none",e[wd]=!t}const F_=Symbol(""),j_=/(^|;)\s*display\s*:/;function B_(e,t,n){const s=e.style,i=qe(n);let o=!1;if(n&&!i){if(t)if(qe(t))for(const a of t.split(";")){const c=a.slice(0,a.indexOf(":")).trim();n[c]==null&&mi(s,c,"")}else for(const a in t)n[a]==null&&mi(s,a,"");for(const a in n)a==="display"&&(o=!0),mi(s,a,n[a])}else if(i){if(t!==n){const a=s[F_];a&&(n+=";"+a),s.cssText=n,o=j_.test(n)}}else t&&e.removeAttribute("style");Ai in e&&(e[Ai]=o?s.display:"",e[wd]&&(s.display="none"))}const ru=/\s*!important$/;function mi(e,t,n){if(ee(n))n.forEach(s=>mi(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const s=H_(e,t);ru.test(n)?e.setProperty(gs(s),n.replace(ru,""),"important"):e[s]=n}}const iu=["Webkit","Moz","ms"],Uo={};function H_(e,t){const n=Uo[t];if(n)return n;let s=Gt(t);if(s!=="filter"&&s in e)return Uo[t]=s;s=Di(s);for(let i=0;iVo||(z_.then(()=>Vo=0),Vo=Date.now());function G_(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;Jt(J_(s,n.value),t,5,[s])};return n.value=e,n.attached=K_(),n}function J_(e,t){if(ee(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(s=>i=>!i._stopped&&s&&s(i))}else return t}const uu=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,X_=(e,t,n,s,i,o)=>{const a=i==="svg";t==="class"?$_(e,s,a):t==="style"?B_(e,n,s):Ii(t)?Sa(t)||q_(e,t,n,s,o):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Q_(e,t,s,a))?(U_(e,t,s),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&au(e,t,s,a,o,t!=="value")):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),au(e,t,s,a))};function Q_(e,t,n,s){if(s)return!!(t==="innerHTML"||t==="textContent"||t in e&&uu(t)&&fe(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const i=e.tagName;if(i==="IMG"||i==="VIDEO"||i==="CANVAS"||i==="SOURCE")return!1}return uu(t)&&qe(n)?!1:!!(t in e||e._isVueCE&&(/[A-Z]/.test(t)||!qe(n)))}const Ed=new WeakMap,Cd=new WeakMap,Oi=Symbol("_moveCb"),fu=Symbol("_enterCb"),Y_=e=>(delete e.props.mode,e),Z_=Y_({name:"TransitionGroup",props:Ge({},D_,{tag:String,moveClass:String}),setup(e,{slots:t}){const n=hd(),s=xg();let i,o;return Hf(()=>{if(!i.length)return;const a=e.moveClass||`${e.name||"v"}-move`;if(!rb(i[0].el,n.vnode.el,a))return;i.forEach(tb),i.forEach(nb);const c=i.filter(sb);vd(),c.forEach(f=>{const p=f.el,d=p.style;bn(p,a),d.transform=d.webkitTransform=d.transitionDuration="";const m=p[Oi]=b=>{b&&b.target!==p||(!b||/transform$/.test(b.propertyName))&&(p.removeEventListener("transitionend",m),p[Oi]=null,Dn(p,a))};p.addEventListener("transitionend",m)})}),()=>{const a=Ee(e),c=N_(a);let f=a.tag||tt;if(i=[],o)for(let p=0;p{c.split(/\s+/).forEach(f=>f&&s.classList.remove(f))}),n.split(/\s+/).forEach(c=>c&&s.classList.add(c)),s.style.display="none";const o=t.nodeType===1?t:t.parentNode;o.appendChild(s);const{hasTransform:a}=yd(s);return o.removeChild(s),a}const Un=e=>{const t=e.props["onUpdate:modelValue"]||!1;return ee(t)?n=>fi(t,n):t};function ib(e){e.target.composing=!0}function du(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const Bt=Symbol("_assign"),i0={created(e,{modifiers:{lazy:t,trim:n,number:s}},i){e[Bt]=Un(i);const o=s||i.props&&i.props.type==="number";wn(e,t?"change":"input",a=>{if(a.target.composing)return;let c=e.value;n&&(c=c.trim()),o&&(c=yi(c)),e[Bt](c)}),n&&wn(e,"change",()=>{e.value=e.value.trim()}),t||(wn(e,"compositionstart",ib),wn(e,"compositionend",du),wn(e,"change",du))},mounted(e,{value:t}){e.value=t??""},beforeUpdate(e,{value:t,oldValue:n,modifiers:{lazy:s,trim:i,number:o}},a){if(e[Bt]=Un(a),e.composing)return;const c=(o||e.type==="number")&&!/^0\d/.test(e.value)?yi(e.value):e.value,f=t??"";c!==f&&(document.activeElement===e&&e.type!=="range"&&(s&&t===n||i&&e.value.trim()===f)||(e.value=f))}},o0={deep:!0,created(e,t,n){e[Bt]=Un(n),wn(e,"change",()=>{const s=e._modelValue,i=Us(e),o=e.checked,a=e[Bt];if(ee(s)){const c=Oa(s,i),f=c!==-1;if(o&&!f)a(s.concat(i));else if(!o&&f){const p=[...s];p.splice(c,1),a(p)}}else if(Ws(s)){const c=new Set(s);o?c.add(i):c.delete(i),a(c)}else a(Sd(e,o))})},mounted:hu,beforeUpdate(e,t,n){e[Bt]=Un(n),hu(e,t,n)}};function hu(e,{value:t,oldValue:n},s){e._modelValue=t;let i;ee(t)?i=Oa(t,s.props.value)>-1:Ws(t)?i=t.has(s.props.value):i=ds(t,Sd(e,!0)),e.checked!==i&&(e.checked=i)}const a0={created(e,{value:t},n){e.checked=ds(t,n.props.value),e[Bt]=Un(n),wn(e,"change",()=>{e[Bt](Us(e))})},beforeUpdate(e,{value:t,oldValue:n},s){e[Bt]=Un(s),t!==n&&(e.checked=ds(t,s.props.value))}},l0={deep:!0,created(e,{value:t,modifiers:{number:n}},s){const i=Ws(t);wn(e,"change",()=>{const o=Array.prototype.filter.call(e.options,a=>a.selected).map(a=>n?yi(Us(a)):Us(a));e[Bt](e.multiple?i?new Set(o):o:o[0]),e._assigning=!0,Pr(()=>{e._assigning=!1})}),e[Bt]=Un(s)},mounted(e,{value:t,modifiers:{number:n}}){pu(e,t)},beforeUpdate(e,t,n){e[Bt]=Un(n)},updated(e,{value:t,modifiers:{number:n}}){e._assigning||pu(e,t)}};function pu(e,t,n){const s=e.multiple,i=ee(t);if(!(s&&!i&&!Ws(t))){for(let o=0,a=e.options.length;oString(d)===String(f)):c.selected=Oa(t,f)>-1}else c.selected=t.has(f);else if(ds(Us(c),t)){e.selectedIndex!==o&&(e.selectedIndex=o);return}}!s&&e.selectedIndex!==-1&&(e.selectedIndex=-1)}}function Us(e){return"_value"in e?e._value:e.value}function Sd(e,t){const n=t?"_trueValue":"_falseValue";return n in e?e[n]:t}const ob=["ctrl","shift","alt","meta"],ab={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>ob.some(n=>e[`${n}Key`]&&!t.includes(n))},lb=(e,t)=>{const n=e._withMods||(e._withMods={}),s=t.join(".");return n[s]||(n[s]=(i,...o)=>{for(let a=0;a{const t=ub().createApp(...e),{mount:n}=t;return t.mount=s=>{const i=db(s);if(!i)return;const o=t._component;!fe(o)&&!o.render&&!o.template&&(o.template=i.innerHTML),i.nodeType===1&&(i.textContent="");const a=n(i,!1,fb(i));return i instanceof Element&&(i.removeAttribute("v-cloak"),i.setAttribute("data-v-app","")),a},t};function fb(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function db(e){return qe(e)?document.querySelector(e):e}var hb=!1;/*! + * pinia v2.2.2 + * (c) 2024 Eduardo San Martin Morote + * @license MIT + */let Ad;const qi=e=>Ad=e,Od=Symbol();function ua(e){return e&&typeof e=="object"&&Object.prototype.toString.call(e)==="[object Object]"&&typeof e.toJSON!="function"}var hr;(function(e){e.direct="direct",e.patchObject="patch object",e.patchFunction="patch function"})(hr||(hr={}));function pb(){const e=df(!0),t=e.run(()=>ja({}));let n=[],s=[];const i=$a({install(o){qi(i),i._a=o,o.provide(Od,i),o.config.globalProperties.$pinia=i,s.forEach(a=>n.push(a)),s=[]},use(o){return!this._a&&!hb?s.push(o):n.push(o),this},_p:n,_a:null,_e:e,_s:new Map,state:t});return i}const xd=()=>{};function gu(e,t,n,s=xd){e.push(t);const i=()=>{const o=e.indexOf(t);o>-1&&(e.splice(o,1),s())};return!n&&hf()&&Wm(i),i}function Ds(e,...t){e.slice().forEach(n=>{n(...t)})}const mb=e=>e(),_u=Symbol(),qo=Symbol();function fa(e,t){e instanceof Map&&t instanceof Map?t.forEach((n,s)=>e.set(s,n)):e instanceof Set&&t instanceof Set&&t.forEach(e.add,e);for(const n in t){if(!t.hasOwnProperty(n))continue;const s=t[n],i=e[n];ua(i)&&ua(s)&&e.hasOwnProperty(n)&&!ze(s)&&!Fn(s)?e[n]=fa(i,s):e[n]=s}return e}const gb=Symbol();function _b(e){return!ua(e)||!e.hasOwnProperty(gb)}const{assign:Nn}=Object;function bb(e){return!!(ze(e)&&e.effect)}function yb(e,t,n,s){const{state:i,actions:o,getters:a}=t,c=n.state.value[e];let f;function p(){c||(n.state.value[e]=i?i():{});const d=gg(n.state.value[e]);return Nn(d,o,Object.keys(a||{}).reduce((m,b)=>(m[b]=$a(Ft(()=>{qi(n);const w=n._s.get(e);return a[b].call(w,w)})),m),{}))}return f=Rd(e,p,t,n,s,!0),f}function Rd(e,t,n={},s,i,o){let a;const c=Nn({actions:{}},n),f={deep:!0};let p,d,m=[],b=[],w;const C=s.state.value[e];!o&&!C&&(s.state.value[e]={}),ja({});let P;function R(te){let q;p=d=!1,typeof te=="function"?(te(s.state.value[e]),q={type:hr.patchFunction,storeId:e,events:w}):(fa(s.state.value[e],te),q={type:hr.patchObject,payload:te,storeId:e,events:w});const oe=P=Symbol();Pr().then(()=>{P===oe&&(p=!0)}),d=!0,Ds(m,q,s.state.value[e])}const $=o?function(){const{state:q}=n,oe=q?q():{};this.$patch(ve=>{Nn(ve,oe)})}:xd;function N(){a.stop(),m=[],b=[],s._s.delete(e)}const B=(te,q="")=>{if(_u in te)return te[qo]=q,te;const oe=function(){qi(s);const ve=Array.from(arguments),G=[],be=[];function He(ae){G.push(ae)}function st(ae){be.push(ae)}Ds(b,{args:ve,name:oe[qo],store:Y,after:He,onError:st});let Oe;try{Oe=te.apply(this&&this.$id===e?this:Y,ve)}catch(ae){throw Ds(be,ae),ae}return Oe instanceof Promise?Oe.then(ae=>(Ds(G,ae),ae)).catch(ae=>(Ds(be,ae),Promise.reject(ae))):(Ds(G,Oe),Oe)};return oe[_u]=!0,oe[qo]=q,oe},H={_p:s,$id:e,$onAction:gu.bind(null,b),$patch:R,$reset:$,$subscribe(te,q={}){const oe=gu(m,te,q.detached,()=>ve()),ve=a.run(()=>fr(()=>s.state.value[e],G=>{(q.flush==="sync"?d:p)&&te({storeId:e,type:hr.direct,events:w},G)},Nn({},f,q)));return oe},$dispose:N},Y=xr(H);s._s.set(e,Y);const le=(s._a&&s._a.runWithContext||mb)(()=>s._e.run(()=>(a=df()).run(()=>t({action:B}))));for(const te in le){const q=le[te];if(ze(q)&&!bb(q)||Fn(q))o||(C&&_b(q)&&(ze(q)?q.value=C[te]:fa(q,C[te])),s.state.value[e][te]=q);else if(typeof q=="function"){const oe=B(q,te);le[te]=oe,c.actions[te]=q}}return Nn(Y,le),Nn(Ee(Y),le),Object.defineProperty(Y,"$state",{get:()=>s.state.value[e],set:te=>{R(q=>{Nn(q,te)})}}),s._p.forEach(te=>{Nn(Y,a.run(()=>te({store:Y,app:s._a,pinia:s,options:c})))}),C&&o&&n.hydrate&&n.hydrate(Y.$state,C),p=!0,d=!0,Y}function vb(e,t,n){let s,i;const o=typeof t=="function";s=e,i=o?n:t;function a(c,f){const p=Xg();return c=c||(p?xt(Od,null):null),c&&qi(c),c=Ad,c._s.has(s)||(o?Rd(s,t,i,c):yb(s,i,c)),c._s.get(s)}return a.$id=s,a}/*! + * vue-router v4.4.3 + * (c) 2024 Eduardo San Martin Morote + * @license MIT + */const Ms=typeof document<"u";function wb(e){return e.__esModule||e[Symbol.toStringTag]==="Module"}const Pe=Object.assign;function Wo(e,t){const n={};for(const s in t){const i=t[s];n[s]=Xt(i)?i.map(e):e(i)}return n}const pr=()=>{},Xt=Array.isArray,Pd=/#/g,Eb=/&/g,Cb=/\//g,Sb=/=/g,Tb=/\?/g,Id=/\+/g,Ab=/%5B/g,Ob=/%5D/g,Ld=/%5E/g,xb=/%60/g,Dd=/%7B/g,Rb=/%7C/g,Nd=/%7D/g,Pb=/%20/g;function za(e){return encodeURI(""+e).replace(Rb,"|").replace(Ab,"[").replace(Ob,"]")}function Ib(e){return za(e).replace(Dd,"{").replace(Nd,"}").replace(Ld,"^")}function da(e){return za(e).replace(Id,"%2B").replace(Pb,"+").replace(Pd,"%23").replace(Eb,"%26").replace(xb,"`").replace(Dd,"{").replace(Nd,"}").replace(Ld,"^")}function Lb(e){return da(e).replace(Sb,"%3D")}function Db(e){return za(e).replace(Pd,"%23").replace(Tb,"%3F")}function Nb(e){return e==null?"":Db(e).replace(Cb,"%2F")}function Er(e){try{return decodeURIComponent(""+e)}catch{}return""+e}const kb=/\/$/,Mb=e=>e.replace(kb,"");function zo(e,t,n="/"){let s,i={},o="",a="";const c=t.indexOf("#");let f=t.indexOf("?");return c=0&&(f=-1),f>-1&&(s=t.slice(0,f),o=t.slice(f+1,c>-1?c:t.length),i=e(o)),c>-1&&(s=s||t.slice(0,c),a=t.slice(c,t.length)),s=Bb(s??t,n),{fullPath:s+(o&&"?")+o+a,path:s,query:i,hash:Er(a)}}function $b(e,t){const n=t.query?e(t.query):"";return t.path+(n&&"?")+n+(t.hash||"")}function bu(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function Fb(e,t,n){const s=t.matched.length-1,i=n.matched.length-1;return s>-1&&s===i&&Vs(t.matched[s],n.matched[i])&&kd(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function Vs(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function kd(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(const n in e)if(!jb(e[n],t[n]))return!1;return!0}function jb(e,t){return Xt(e)?yu(e,t):Xt(t)?yu(t,e):e===t}function yu(e,t){return Xt(t)?e.length===t.length&&e.every((n,s)=>n===t[s]):e.length===1&&e[0]===t}function Bb(e,t){if(e.startsWith("/"))return e;if(!e)return t;const n=t.split("/"),s=e.split("/"),i=s[s.length-1];(i===".."||i===".")&&s.push("");let o=n.length-1,a,c;for(a=0;a1&&o--;else break;return n.slice(0,o).join("/")+"/"+s.slice(a).join("/")}const In={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0};var Cr;(function(e){e.pop="pop",e.push="push"})(Cr||(Cr={}));var mr;(function(e){e.back="back",e.forward="forward",e.unknown=""})(mr||(mr={}));function Hb(e){if(!e)if(Ms){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),Mb(e)}const Ub=/^[^#]+#/;function Vb(e,t){return e.replace(Ub,"#")+t}function qb(e,t){const n=document.documentElement.getBoundingClientRect(),s=e.getBoundingClientRect();return{behavior:t.behavior,left:s.left-n.left-(t.left||0),top:s.top-n.top-(t.top||0)}}const Wi=()=>({left:window.scrollX,top:window.scrollY});function Wb(e){let t;if("el"in e){const n=e.el,s=typeof n=="string"&&n.startsWith("#"),i=typeof n=="string"?s?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!i)return;t=qb(i,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.scrollX,t.top!=null?t.top:window.scrollY)}function vu(e,t){return(history.state?history.state.position-t:-1)+e}const ha=new Map;function zb(e,t){ha.set(e,t)}function Kb(e){const t=ha.get(e);return ha.delete(e),t}let Gb=()=>location.protocol+"//"+location.host;function Md(e,t){const{pathname:n,search:s,hash:i}=t,o=e.indexOf("#");if(o>-1){let c=i.includes(e.slice(o))?e.slice(o).length:1,f=i.slice(c);return f[0]!=="/"&&(f="/"+f),bu(f,"")}return bu(n,e)+s+i}function Jb(e,t,n,s){let i=[],o=[],a=null;const c=({state:b})=>{const w=Md(e,location),C=n.value,P=t.value;let R=0;if(b){if(n.value=w,t.value=b,a&&a===C){a=null;return}R=P?b.position-P.position:0}else s(w);i.forEach($=>{$(n.value,C,{delta:R,type:Cr.pop,direction:R?R>0?mr.forward:mr.back:mr.unknown})})};function f(){a=n.value}function p(b){i.push(b);const w=()=>{const C=i.indexOf(b);C>-1&&i.splice(C,1)};return o.push(w),w}function d(){const{history:b}=window;b.state&&b.replaceState(Pe({},b.state,{scroll:Wi()}),"")}function m(){for(const b of o)b();o=[],window.removeEventListener("popstate",c),window.removeEventListener("beforeunload",d)}return window.addEventListener("popstate",c),window.addEventListener("beforeunload",d,{passive:!0}),{pauseListeners:f,listen:p,destroy:m}}function wu(e,t,n,s=!1,i=!1){return{back:e,current:t,forward:n,replaced:s,position:window.history.length,scroll:i?Wi():null}}function Xb(e){const{history:t,location:n}=window,s={value:Md(e,n)},i={value:t.state};i.value||o(s.value,{back:null,current:s.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function o(f,p,d){const m=e.indexOf("#"),b=m>-1?(n.host&&document.querySelector("base")?e:e.slice(m))+f:Gb()+e+f;try{t[d?"replaceState":"pushState"](p,"",b),i.value=p}catch(w){console.error(w),n[d?"replace":"assign"](b)}}function a(f,p){const d=Pe({},t.state,wu(i.value.back,f,i.value.forward,!0),p,{position:i.value.position});o(f,d,!0),s.value=f}function c(f,p){const d=Pe({},i.value,t.state,{forward:f,scroll:Wi()});o(d.current,d,!0);const m=Pe({},wu(s.value,f,null),{position:d.position+1},p);o(f,m,!1),s.value=f}return{location:s,state:i,push:c,replace:a}}function Qb(e){e=Hb(e);const t=Xb(e),n=Jb(e,t.state,t.location,t.replace);function s(o,a=!0){a||n.pauseListeners(),history.go(o)}const i=Pe({location:"",base:e,go:s,createHref:Vb.bind(null,e)},t,n);return Object.defineProperty(i,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(i,"state",{enumerable:!0,get:()=>t.state.value}),i}function Yb(e){return typeof e=="string"||e&&typeof e=="object"}function $d(e){return typeof e=="string"||typeof e=="symbol"}const Fd=Symbol("");var Eu;(function(e){e[e.aborted=4]="aborted",e[e.cancelled=8]="cancelled",e[e.duplicated=16]="duplicated"})(Eu||(Eu={}));function qs(e,t){return Pe(new Error,{type:e,[Fd]:!0},t)}function _n(e,t){return e instanceof Error&&Fd in e&&(t==null||!!(e.type&t))}const Cu="[^/]+?",Zb={sensitive:!1,strict:!1,start:!0,end:!0},ey=/[.+*?^${}()[\]/\\]/g;function ty(e,t){const n=Pe({},Zb,t),s=[];let i=n.start?"^":"";const o=[];for(const p of e){const d=p.length?[]:[90];n.strict&&!p.length&&(i+="/");for(let m=0;mt.length?t.length===1&&t[0]===80?1:-1:0}function jd(e,t){let n=0;const s=e.score,i=t.score;for(;n0&&t[t.length-1]<0}const sy={type:0,value:""},ry=/[a-zA-Z0-9_]/;function iy(e){if(!e)return[[]];if(e==="/")return[[sy]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(w){throw new Error(`ERR (${n})/"${p}": ${w}`)}let n=0,s=n;const i=[];let o;function a(){o&&i.push(o),o=[]}let c=0,f,p="",d="";function m(){p&&(n===0?o.push({type:0,value:p}):n===1||n===2||n===3?(o.length>1&&(f==="*"||f==="+")&&t(`A repeatable param (${p}) must be alone in its segment. eg: '/:ids+.`),o.push({type:1,value:p,regexp:d,repeatable:f==="*"||f==="+",optional:f==="*"||f==="?"})):t("Invalid state to consume buffer"),p="")}function b(){p+=f}for(;c{a(B)}:pr}function a(m){if($d(m)){const b=s.get(m);b&&(s.delete(m),n.splice(n.indexOf(b),1),b.children.forEach(a),b.alias.forEach(a))}else{const b=n.indexOf(m);b>-1&&(n.splice(b,1),m.record.name&&s.delete(m.record.name),m.children.forEach(a),m.alias.forEach(a))}}function c(){return n}function f(m){const b=fy(m,n);n.splice(b,0,m),m.record.name&&!Au(m)&&s.set(m.record.name,m)}function p(m,b){let w,C={},P,R;if("name"in m&&m.name){if(w=s.get(m.name),!w)throw qs(1,{location:m});R=w.record.name,C=Pe(Tu(b.params,w.keys.filter(B=>!B.optional).concat(w.parent?w.parent.keys.filter(B=>B.optional):[]).map(B=>B.name)),m.params&&Tu(m.params,w.keys.map(B=>B.name))),P=w.stringify(C)}else if(m.path!=null)P=m.path,w=n.find(B=>B.re.test(P)),w&&(C=w.parse(P),R=w.record.name);else{if(w=b.name?s.get(b.name):n.find(B=>B.re.test(b.path)),!w)throw qs(1,{location:m,currentLocation:b});R=w.record.name,C=Pe({},b.params,m.params),P=w.stringify(C)}const $=[];let N=w;for(;N;)$.unshift(N.record),N=N.parent;return{name:R,path:P,params:C,matched:$,meta:uy($)}}e.forEach(m=>o(m));function d(){n.length=0,s.clear()}return{addRoute:o,resolve:p,removeRoute:a,clearRoutes:d,getRoutes:c,getRecordMatcher:i}}function Tu(e,t){const n={};for(const s of t)s in e&&(n[s]=e[s]);return n}function ly(e){return{path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:void 0,beforeEnter:e.beforeEnter,props:cy(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}}}function cy(e){const t={},n=e.props||!1;if("component"in e)t.default=n;else for(const s in e.components)t[s]=typeof n=="object"?n[s]:n;return t}function Au(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function uy(e){return e.reduce((t,n)=>Pe(t,n.meta),{})}function Ou(e,t){const n={};for(const s in e)n[s]=s in t?t[s]:e[s];return n}function fy(e,t){let n=0,s=t.length;for(;n!==s;){const o=n+s>>1;jd(e,t[o])<0?s=o:n=o+1}const i=dy(e);return i&&(s=t.lastIndexOf(i,s-1)),s}function dy(e){let t=e;for(;t=t.parent;)if(Bd(t)&&jd(e,t)===0)return t}function Bd({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function hy(e){const t={};if(e===""||e==="?")return t;const s=(e[0]==="?"?e.slice(1):e).split("&");for(let i=0;io&&da(o)):[s&&da(s)]).forEach(o=>{o!==void 0&&(t+=(t.length?"&":"")+n,o!=null&&(t+="="+o))})}return t}function py(e){const t={};for(const n in e){const s=e[n];s!==void 0&&(t[n]=Xt(s)?s.map(i=>i==null?null:""+i):s==null?s:""+s)}return t}const my=Symbol(""),Ru=Symbol(""),zi=Symbol(""),Ka=Symbol(""),pa=Symbol("");function rr(){let e=[];function t(s){return e.push(s),()=>{const i=e.indexOf(s);i>-1&&e.splice(i,1)}}function n(){e=[]}return{add:t,list:()=>e.slice(),reset:n}}function $n(e,t,n,s,i,o=a=>a()){const a=s&&(s.enterCallbacks[i]=s.enterCallbacks[i]||[]);return()=>new Promise((c,f)=>{const p=b=>{b===!1?f(qs(4,{from:n,to:t})):b instanceof Error?f(b):Yb(b)?f(qs(2,{from:t,to:b})):(a&&s.enterCallbacks[i]===a&&typeof b=="function"&&a.push(b),c())},d=o(()=>e.call(s&&s.instances[i],t,n,p));let m=Promise.resolve(d);e.length<3&&(m=m.then(p)),m.catch(b=>f(b))})}function Ko(e,t,n,s,i=o=>o()){const o=[];for(const a of e)for(const c in a.components){let f=a.components[c];if(!(t!=="beforeRouteEnter"&&!a.instances[c]))if(gy(f)){const d=(f.__vccOpts||f)[t];d&&o.push($n(d,n,s,a,c,i))}else{let p=f();o.push(()=>p.then(d=>{if(!d)return Promise.reject(new Error(`Couldn't resolve component "${c}" at "${a.path}"`));const m=wb(d)?d.default:d;a.components[c]=m;const w=(m.__vccOpts||m)[t];return w&&$n(w,n,s,a,c,i)()}))}}return o}function gy(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function Pu(e){const t=xt(zi),n=xt(Ka),s=Ft(()=>{const f=jn(e.to);return t.resolve(f)}),i=Ft(()=>{const{matched:f}=s.value,{length:p}=f,d=f[p-1],m=n.matched;if(!d||!m.length)return-1;const b=m.findIndex(Vs.bind(null,d));if(b>-1)return b;const w=Iu(f[p-2]);return p>1&&Iu(d)===w&&m[m.length-1].path!==w?m.findIndex(Vs.bind(null,f[p-2])):b}),o=Ft(()=>i.value>-1&&vy(n.params,s.value.params)),a=Ft(()=>i.value>-1&&i.value===n.matched.length-1&&kd(n.params,s.value.params));function c(f={}){return yy(f)?t[jn(e.replace)?"replace":"push"](jn(e.to)).catch(pr):Promise.resolve()}return{route:s,href:Ft(()=>s.value.href),isActive:o,isExactActive:a,navigate:c}}const _y=dn({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"}},useLink:Pu,setup(e,{slots:t}){const n=xr(Pu(e)),{options:s}=xt(zi),i=Ft(()=>({[Lu(e.activeClass,s.linkActiveClass,"router-link-active")]:n.isActive,[Lu(e.exactActiveClass,s.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive}));return()=>{const o=t.default&&t.default(n);return e.custom?o:gd("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:i.value},o)}}}),by=_y;function yy(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function vy(e,t){for(const n in t){const s=t[n],i=e[n];if(typeof s=="string"){if(s!==i)return!1}else if(!Xt(i)||i.length!==s.length||s.some((o,a)=>o!==i[a]))return!1}return!0}function Iu(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const Lu=(e,t,n)=>e??t??n,wy=dn({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){const s=xt(pa),i=Ft(()=>e.route||s.value),o=xt(Ru,0),a=Ft(()=>{let p=jn(o);const{matched:d}=i.value;let m;for(;(m=d[p])&&!m.components;)p++;return p}),c=Ft(()=>i.value.matched[a.value]);di(Ru,Ft(()=>a.value+1)),di(my,c),di(pa,i);const f=ja();return fr(()=>[f.value,c.value,e.name],([p,d,m],[b,w,C])=>{d&&(d.instances[m]=p,w&&w!==d&&p&&p===b&&(d.leaveGuards.size||(d.leaveGuards=w.leaveGuards),d.updateGuards.size||(d.updateGuards=w.updateGuards))),p&&d&&(!w||!Vs(d,w)||!b)&&(d.enterCallbacks[m]||[]).forEach(P=>P(p))},{flush:"post"}),()=>{const p=i.value,d=e.name,m=c.value,b=m&&m.components[d];if(!b)return Du(n.default,{Component:b,route:p});const w=m.props[d],C=w?w===!0?p.params:typeof w=="function"?w(p):w:null,R=gd(b,Pe({},C,t,{onVnodeUnmounted:$=>{$.component.isUnmounted&&(m.instances[d]=null)},ref:f}));return Du(n.default,{Component:R,route:p})||R}}});function Du(e,t){if(!e)return null;const n=e(t);return n.length===1?n[0]:n}const Hd=wy;function Ey(e){const t=ay(e.routes,e),n=e.parseQuery||hy,s=e.stringifyQuery||xu,i=e.history,o=rr(),a=rr(),c=rr(),f=hg(In);let p=In;Ms&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const d=Wo.bind(null,x=>""+x),m=Wo.bind(null,Nb),b=Wo.bind(null,Er);function w(x,A){let V,Z;return $d(x)?(V=t.getRecordMatcher(x),Z=A):Z=x,t.addRoute(Z,V)}function C(x){const A=t.getRecordMatcher(x);A&&t.removeRoute(A)}function P(){return t.getRoutes().map(x=>x.record)}function R(x){return!!t.getRecordMatcher(x)}function $(x,A){if(A=Pe({},A||f.value),typeof x=="string"){const _=zo(n,x,A.path),E=t.resolve({path:_.path},A),D=i.createHref(_.fullPath);return Pe(_,E,{params:b(E.params),hash:Er(_.hash),redirectedFrom:void 0,href:D})}let V;if(x.path!=null)V=Pe({},x,{path:zo(n,x.path,A.path).path});else{const _=Pe({},x.params);for(const E in _)_[E]==null&&delete _[E];V=Pe({},x,{params:m(_)}),A.params=m(A.params)}const Z=t.resolve(V,A),Te=x.hash||"";Z.params=d(b(Z.params));const je=$b(s,Pe({},x,{hash:Ib(Te),path:Z.path})),g=i.createHref(je);return Pe({fullPath:je,hash:Te,query:s===xu?py(x.query):x.query||{}},Z,{redirectedFrom:void 0,href:g})}function N(x){return typeof x=="string"?zo(n,x,f.value.path):Pe({},x)}function B(x,A){if(p!==x)return qs(8,{from:A,to:x})}function H(x){return le(x)}function Y(x){return H(Pe(N(x),{replace:!0}))}function ge(x){const A=x.matched[x.matched.length-1];if(A&&A.redirect){const{redirect:V}=A;let Z=typeof V=="function"?V(x):V;return typeof Z=="string"&&(Z=Z.includes("?")||Z.includes("#")?Z=N(Z):{path:Z},Z.params={}),Pe({query:x.query,hash:x.hash,params:Z.path!=null?{}:x.params},Z)}}function le(x,A){const V=p=$(x),Z=f.value,Te=x.state,je=x.force,g=x.replace===!0,_=ge(V);if(_)return le(Pe(N(_),{state:typeof _=="object"?Pe({},Te,_.state):Te,force:je,replace:g}),A||V);const E=V;E.redirectedFrom=A;let D;return!je&&Fb(s,Z,V)&&(D=qs(16,{to:E,from:Z}),_t(Z,Z,!0,!1)),(D?Promise.resolve(D):oe(E,Z)).catch(O=>_n(O)?_n(O,2)?O:I(O):Se(O,E,Z)).then(O=>{if(O){if(_n(O,2))return le(Pe({replace:g},N(O.to),{state:typeof O.to=="object"?Pe({},Te,O.to.state):Te,force:je}),A||E)}else O=G(E,Z,!0,g,Te);return ve(E,Z,O),O})}function te(x,A){const V=B(x,A);return V?Promise.reject(V):Promise.resolve()}function q(x){const A=rt.values().next().value;return A&&typeof A.runWithContext=="function"?A.runWithContext(x):x()}function oe(x,A){let V;const[Z,Te,je]=Cy(x,A);V=Ko(Z.reverse(),"beforeRouteLeave",x,A);for(const _ of Z)_.leaveGuards.forEach(E=>{V.push($n(E,x,A))});const g=te.bind(null,x,A);return V.push(g),Be(V).then(()=>{V=[];for(const _ of o.list())V.push($n(_,x,A));return V.push(g),Be(V)}).then(()=>{V=Ko(Te,"beforeRouteUpdate",x,A);for(const _ of Te)_.updateGuards.forEach(E=>{V.push($n(E,x,A))});return V.push(g),Be(V)}).then(()=>{V=[];for(const _ of je)if(_.beforeEnter)if(Xt(_.beforeEnter))for(const E of _.beforeEnter)V.push($n(E,x,A));else V.push($n(_.beforeEnter,x,A));return V.push(g),Be(V)}).then(()=>(x.matched.forEach(_=>_.enterCallbacks={}),V=Ko(je,"beforeRouteEnter",x,A,q),V.push(g),Be(V))).then(()=>{V=[];for(const _ of a.list())V.push($n(_,x,A));return V.push(g),Be(V)}).catch(_=>_n(_,8)?_:Promise.reject(_))}function ve(x,A,V){c.list().forEach(Z=>q(()=>Z(x,A,V)))}function G(x,A,V,Z,Te){const je=B(x,A);if(je)return je;const g=A===In,_=Ms?history.state:{};V&&(Z||g?i.replace(x.fullPath,Pe({scroll:g&&_&&_.scroll},Te)):i.push(x.fullPath,Te)),f.value=x,_t(x,A,V,g),I()}let be;function He(){be||(be=i.listen((x,A,V)=>{if(!Zt.listening)return;const Z=$(x),Te=ge(Z);if(Te){le(Pe(Te,{replace:!0}),Z).catch(pr);return}p=Z;const je=f.value;Ms&&zb(vu(je.fullPath,V.delta),Wi()),oe(Z,je).catch(g=>_n(g,12)?g:_n(g,2)?(le(g.to,Z).then(_=>{_n(_,20)&&!V.delta&&V.type===Cr.pop&&i.go(-1,!1)}).catch(pr),Promise.reject()):(V.delta&&i.go(-V.delta,!1),Se(g,Z,je))).then(g=>{g=g||G(Z,je,!1),g&&(V.delta&&!_n(g,8)?i.go(-V.delta,!1):V.type===Cr.pop&&_n(g,20)&&i.go(-1,!1)),ve(Z,je,g)}).catch(pr)}))}let st=rr(),Oe=rr(),ae;function Se(x,A,V){I(x);const Z=Oe.list();return Z.length?Z.forEach(Te=>Te(x,A,V)):console.error(x),Promise.reject(x)}function Pt(){return ae&&f.value!==In?Promise.resolve():new Promise((x,A)=>{st.add([x,A])})}function I(x){return ae||(ae=!x,He(),st.list().forEach(([A,V])=>x?V(x):A()),st.reset()),x}function _t(x,A,V,Z){const{scrollBehavior:Te}=e;if(!Ms||!Te)return Promise.resolve();const je=!V&&Kb(vu(x.fullPath,0))||(Z||!V)&&history.state&&history.state.scroll||null;return Pr().then(()=>Te(x,A,je)).then(g=>g&&Wb(g)).catch(g=>Se(g,x,A))}const et=x=>i.go(x);let Yt;const rt=new Set,Zt={currentRoute:f,listening:!0,addRoute:w,removeRoute:C,clearRoutes:t.clearRoutes,hasRoute:R,getRoutes:P,resolve:$,options:e,push:H,replace:Y,go:et,back:()=>et(-1),forward:()=>et(1),beforeEach:o.add,beforeResolve:a.add,afterEach:c.add,onError:Oe.add,isReady:Pt,install(x){const A=this;x.component("RouterLink",by),x.component("RouterView",Hd),x.config.globalProperties.$router=A,Object.defineProperty(x.config.globalProperties,"$route",{enumerable:!0,get:()=>jn(f)}),Ms&&!Yt&&f.value===In&&(Yt=!0,H(i.location).catch(Te=>{}));const V={};for(const Te in In)Object.defineProperty(V,Te,{get:()=>f.value[Te],enumerable:!0});x.provide(zi,A),x.provide(Ka,Of(V)),x.provide(pa,f);const Z=x.unmount;rt.add(x),x.unmount=function(){rt.delete(x),rt.size<1&&(p=In,be&&be(),be=null,f.value=In,Yt=!1,ae=!1),Z()}}};function Be(x){return x.reduce((A,V)=>A.then(()=>q(V)),Promise.resolve())}return Zt}function Cy(e,t){const n=[],s=[],i=[],o=Math.max(t.matched.length,e.matched.length);for(let a=0;aVs(p,c))?s.push(c):n.push(c));const f=e.matched[a];f&&(t.matched.find(p=>Vs(p,f))||i.push(f))}return[n,s,i]}function c0(){return xt(zi)}function u0(e){return xt(Ka)}const Sy=dn({__name:"App",setup(e){return(t,n)=>(Ue(),jt(jn(Hd)))}});function Ud(e,t){return function(){return e.apply(t,arguments)}}const{toString:Ty}=Object.prototype,{getPrototypeOf:Ga}=Object,Ki=(e=>t=>{const n=Ty.call(t);return e[n]||(e[n]=n.slice(8,-1).toLowerCase())})(Object.create(null)),Qt=e=>(e=e.toLowerCase(),t=>Ki(t)===e),Gi=e=>t=>typeof t===e,{isArray:zs}=Array,Sr=Gi("undefined");function Ay(e){return e!==null&&!Sr(e)&&e.constructor!==null&&!Sr(e.constructor)&&Rt(e.constructor.isBuffer)&&e.constructor.isBuffer(e)}const Vd=Qt("ArrayBuffer");function Oy(e){let t;return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?t=ArrayBuffer.isView(e):t=e&&e.buffer&&Vd(e.buffer),t}const xy=Gi("string"),Rt=Gi("function"),qd=Gi("number"),Ji=e=>e!==null&&typeof e=="object",Ry=e=>e===!0||e===!1,gi=e=>{if(Ki(e)!=="object")return!1;const t=Ga(e);return(t===null||t===Object.prototype||Object.getPrototypeOf(t)===null)&&!(Symbol.toStringTag in e)&&!(Symbol.iterator in e)},Py=Qt("Date"),Iy=Qt("File"),Ly=Qt("Blob"),Dy=Qt("FileList"),Ny=e=>Ji(e)&&Rt(e.pipe),ky=e=>{let t;return e&&(typeof FormData=="function"&&e instanceof FormData||Rt(e.append)&&((t=Ki(e))==="formdata"||t==="object"&&Rt(e.toString)&&e.toString()==="[object FormData]"))},My=Qt("URLSearchParams"),[$y,Fy,jy,By]=["ReadableStream","Request","Response","Headers"].map(Qt),Hy=e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");function Dr(e,t,{allOwnKeys:n=!1}={}){if(e===null||typeof e>"u")return;let s,i;if(typeof e!="object"&&(e=[e]),zs(e))for(s=0,i=e.length;s0;)if(i=n[s],t===i.toLowerCase())return i;return null}const as=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:global,zd=e=>!Sr(e)&&e!==as;function ma(){const{caseless:e}=zd(this)&&this||{},t={},n=(s,i)=>{const o=e&&Wd(t,i)||i;gi(t[o])&&gi(s)?t[o]=ma(t[o],s):gi(s)?t[o]=ma({},s):zs(s)?t[o]=s.slice():t[o]=s};for(let s=0,i=arguments.length;s(Dr(t,(i,o)=>{n&&Rt(i)?e[o]=Ud(i,n):e[o]=i},{allOwnKeys:s}),e),Vy=e=>(e.charCodeAt(0)===65279&&(e=e.slice(1)),e),qy=(e,t,n,s)=>{e.prototype=Object.create(t.prototype,s),e.prototype.constructor=e,Object.defineProperty(e,"super",{value:t.prototype}),n&&Object.assign(e.prototype,n)},Wy=(e,t,n,s)=>{let i,o,a;const c={};if(t=t||{},e==null)return t;do{for(i=Object.getOwnPropertyNames(e),o=i.length;o-- >0;)a=i[o],(!s||s(a,e,t))&&!c[a]&&(t[a]=e[a],c[a]=!0);e=n!==!1&&Ga(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},zy=(e,t,n)=>{e=String(e),(n===void 0||n>e.length)&&(n=e.length),n-=t.length;const s=e.indexOf(t,n);return s!==-1&&s===n},Ky=e=>{if(!e)return null;if(zs(e))return e;let t=e.length;if(!qd(t))return null;const n=new Array(t);for(;t-- >0;)n[t]=e[t];return n},Gy=(e=>t=>e&&t instanceof e)(typeof Uint8Array<"u"&&Ga(Uint8Array)),Jy=(e,t)=>{const s=(e&&e[Symbol.iterator]).call(e);let i;for(;(i=s.next())&&!i.done;){const o=i.value;t.call(e,o[0],o[1])}},Xy=(e,t)=>{let n;const s=[];for(;(n=e.exec(t))!==null;)s.push(n);return s},Qy=Qt("HTMLFormElement"),Yy=e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(n,s,i){return s.toUpperCase()+i}),Nu=(({hasOwnProperty:e})=>(t,n)=>e.call(t,n))(Object.prototype),Zy=Qt("RegExp"),Kd=(e,t)=>{const n=Object.getOwnPropertyDescriptors(e),s={};Dr(n,(i,o)=>{let a;(a=t(i,o,e))!==!1&&(s[o]=a||i)}),Object.defineProperties(e,s)},ev=e=>{Kd(e,(t,n)=>{if(Rt(e)&&["arguments","caller","callee"].indexOf(n)!==-1)return!1;const s=e[n];if(Rt(s)){if(t.enumerable=!1,"writable"in t){t.writable=!1;return}t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+n+"'")})}})},tv=(e,t)=>{const n={},s=i=>{i.forEach(o=>{n[o]=!0})};return zs(e)?s(e):s(String(e).split(t)),n},nv=()=>{},sv=(e,t)=>e!=null&&Number.isFinite(e=+e)?e:t,Go="abcdefghijklmnopqrstuvwxyz",ku="0123456789",Gd={DIGIT:ku,ALPHA:Go,ALPHA_DIGIT:Go+Go.toUpperCase()+ku},rv=(e=16,t=Gd.ALPHA_DIGIT)=>{let n="";const{length:s}=t;for(;e--;)n+=t[Math.random()*s|0];return n};function iv(e){return!!(e&&Rt(e.append)&&e[Symbol.toStringTag]==="FormData"&&e[Symbol.iterator])}const ov=e=>{const t=new Array(10),n=(s,i)=>{if(Ji(s)){if(t.indexOf(s)>=0)return;if(!("toJSON"in s)){t[i]=s;const o=zs(s)?[]:{};return Dr(s,(a,c)=>{const f=n(a,i+1);!Sr(f)&&(o[c]=f)}),t[i]=void 0,o}}return s};return n(e,0)},av=Qt("AsyncFunction"),lv=e=>e&&(Ji(e)||Rt(e))&&Rt(e.then)&&Rt(e.catch),Jd=((e,t)=>e?setImmediate:t?((n,s)=>(as.addEventListener("message",({source:i,data:o})=>{i===as&&o===n&&s.length&&s.shift()()},!1),i=>{s.push(i),as.postMessage(n,"*")}))(`axios@${Math.random()}`,[]):n=>setTimeout(n))(typeof setImmediate=="function",Rt(as.postMessage)),cv=typeof queueMicrotask<"u"?queueMicrotask.bind(as):typeof process<"u"&&process.nextTick||Jd,T={isArray:zs,isArrayBuffer:Vd,isBuffer:Ay,isFormData:ky,isArrayBufferView:Oy,isString:xy,isNumber:qd,isBoolean:Ry,isObject:Ji,isPlainObject:gi,isReadableStream:$y,isRequest:Fy,isResponse:jy,isHeaders:By,isUndefined:Sr,isDate:Py,isFile:Iy,isBlob:Ly,isRegExp:Zy,isFunction:Rt,isStream:Ny,isURLSearchParams:My,isTypedArray:Gy,isFileList:Dy,forEach:Dr,merge:ma,extend:Uy,trim:Hy,stripBOM:Vy,inherits:qy,toFlatObject:Wy,kindOf:Ki,kindOfTest:Qt,endsWith:zy,toArray:Ky,forEachEntry:Jy,matchAll:Xy,isHTMLForm:Qy,hasOwnProperty:Nu,hasOwnProp:Nu,reduceDescriptors:Kd,freezeMethods:ev,toObjectSet:tv,toCamelCase:Yy,noop:nv,toFiniteNumber:sv,findKey:Wd,global:as,isContextDefined:zd,ALPHABET:Gd,generateString:rv,isSpecCompliantForm:iv,toJSONObject:ov,isAsyncFn:av,isThenable:lv,setImmediate:Jd,asap:cv};function de(e,t,n,s,i){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack,this.message=e,this.name="AxiosError",t&&(this.code=t),n&&(this.config=n),s&&(this.request=s),i&&(this.response=i,this.status=i.status?i.status:null)}T.inherits(de,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:T.toJSONObject(this.config),code:this.code,status:this.status}}});const Xd=de.prototype,Qd={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach(e=>{Qd[e]={value:e}});Object.defineProperties(de,Qd);Object.defineProperty(Xd,"isAxiosError",{value:!0});de.from=(e,t,n,s,i,o)=>{const a=Object.create(Xd);return T.toFlatObject(e,a,function(f){return f!==Error.prototype},c=>c!=="isAxiosError"),de.call(a,e.message,t,n,s,i),a.cause=e,a.name=e.name,o&&Object.assign(a,o),a};const uv=null;function ga(e){return T.isPlainObject(e)||T.isArray(e)}function Yd(e){return T.endsWith(e,"[]")?e.slice(0,-2):e}function Mu(e,t,n){return e?e.concat(t).map(function(i,o){return i=Yd(i),!n&&o?"["+i+"]":i}).join(n?".":""):t}function fv(e){return T.isArray(e)&&!e.some(ga)}const dv=T.toFlatObject(T,{},null,function(t){return/^is[A-Z]/.test(t)});function Xi(e,t,n){if(!T.isObject(e))throw new TypeError("target must be an object");t=t||new FormData,n=T.toFlatObject(n,{metaTokens:!0,dots:!1,indexes:!1},!1,function(P,R){return!T.isUndefined(R[P])});const s=n.metaTokens,i=n.visitor||d,o=n.dots,a=n.indexes,f=(n.Blob||typeof Blob<"u"&&Blob)&&T.isSpecCompliantForm(t);if(!T.isFunction(i))throw new TypeError("visitor must be a function");function p(C){if(C===null)return"";if(T.isDate(C))return C.toISOString();if(!f&&T.isBlob(C))throw new de("Blob is not supported. Use a Buffer instead.");return T.isArrayBuffer(C)||T.isTypedArray(C)?f&&typeof Blob=="function"?new Blob([C]):Buffer.from(C):C}function d(C,P,R){let $=C;if(C&&!R&&typeof C=="object"){if(T.endsWith(P,"{}"))P=s?P:P.slice(0,-2),C=JSON.stringify(C);else if(T.isArray(C)&&fv(C)||(T.isFileList(C)||T.endsWith(P,"[]"))&&($=T.toArray(C)))return P=Yd(P),$.forEach(function(B,H){!(T.isUndefined(B)||B===null)&&t.append(a===!0?Mu([P],H,o):a===null?P:P+"[]",p(B))}),!1}return ga(C)?!0:(t.append(Mu(R,P,o),p(C)),!1)}const m=[],b=Object.assign(dv,{defaultVisitor:d,convertValue:p,isVisitable:ga});function w(C,P){if(!T.isUndefined(C)){if(m.indexOf(C)!==-1)throw Error("Circular reference detected in "+P.join("."));m.push(C),T.forEach(C,function($,N){(!(T.isUndefined($)||$===null)&&i.call(t,$,T.isString(N)?N.trim():N,P,b))===!0&&w($,P?P.concat(N):[N])}),m.pop()}}if(!T.isObject(e))throw new TypeError("data must be an object");return w(e),t}function $u(e){const t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,function(s){return t[s]})}function Ja(e,t){this._pairs=[],e&&Xi(e,this,t)}const Zd=Ja.prototype;Zd.append=function(t,n){this._pairs.push([t,n])};Zd.toString=function(t){const n=t?function(s){return t.call(this,s,$u)}:$u;return this._pairs.map(function(i){return n(i[0])+"="+n(i[1])},"").join("&")};function hv(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function eh(e,t,n){if(!t)return e;const s=n&&n.encode||hv,i=n&&n.serialize;let o;if(i?o=i(t,n):o=T.isURLSearchParams(t)?t.toString():new Ja(t,n).toString(s),o){const a=e.indexOf("#");a!==-1&&(e=e.slice(0,a)),e+=(e.indexOf("?")===-1?"?":"&")+o}return e}class Fu{constructor(){this.handlers=[]}use(t,n,s){return this.handlers.push({fulfilled:t,rejected:n,synchronous:s?s.synchronous:!1,runWhen:s?s.runWhen:null}),this.handlers.length-1}eject(t){this.handlers[t]&&(this.handlers[t]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(t){T.forEach(this.handlers,function(s){s!==null&&t(s)})}}const th={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},pv=typeof URLSearchParams<"u"?URLSearchParams:Ja,mv=typeof FormData<"u"?FormData:null,gv=typeof Blob<"u"?Blob:null,_v={isBrowser:!0,classes:{URLSearchParams:pv,FormData:mv,Blob:gv},protocols:["http","https","file","blob","url","data"]},Xa=typeof window<"u"&&typeof document<"u",_a=typeof navigator=="object"&&navigator||void 0,bv=Xa&&(!_a||["ReactNative","NativeScript","NS"].indexOf(_a.product)<0),yv=typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&typeof self.importScripts=="function",vv=Xa&&window.location.href||"http://localhost",wv=Object.freeze(Object.defineProperty({__proto__:null,hasBrowserEnv:Xa,hasStandardBrowserEnv:bv,hasStandardBrowserWebWorkerEnv:yv,navigator:_a,origin:vv},Symbol.toStringTag,{value:"Module"})),bt={...wv,..._v};function Ev(e,t){return Xi(e,new bt.classes.URLSearchParams,Object.assign({visitor:function(n,s,i,o){return bt.isNode&&T.isBuffer(n)?(this.append(s,n.toString("base64")),!1):o.defaultVisitor.apply(this,arguments)}},t))}function Cv(e){return T.matchAll(/\w+|\[(\w*)]/g,e).map(t=>t[0]==="[]"?"":t[1]||t[0])}function Sv(e){const t={},n=Object.keys(e);let s;const i=n.length;let o;for(s=0;s=n.length;return a=!a&&T.isArray(i)?i.length:a,f?(T.hasOwnProp(i,a)?i[a]=[i[a],s]:i[a]=s,!c):((!i[a]||!T.isObject(i[a]))&&(i[a]=[]),t(n,s,i[a],o)&&T.isArray(i[a])&&(i[a]=Sv(i[a])),!c)}if(T.isFormData(e)&&T.isFunction(e.entries)){const n={};return T.forEachEntry(e,(s,i)=>{t(Cv(s),i,n,0)}),n}return null}function Tv(e,t,n){if(T.isString(e))try{return(t||JSON.parse)(e),T.trim(e)}catch(s){if(s.name!=="SyntaxError")throw s}return(n||JSON.stringify)(e)}const Nr={transitional:th,adapter:["xhr","http","fetch"],transformRequest:[function(t,n){const s=n.getContentType()||"",i=s.indexOf("application/json")>-1,o=T.isObject(t);if(o&&T.isHTMLForm(t)&&(t=new FormData(t)),T.isFormData(t))return i?JSON.stringify(nh(t)):t;if(T.isArrayBuffer(t)||T.isBuffer(t)||T.isStream(t)||T.isFile(t)||T.isBlob(t)||T.isReadableStream(t))return t;if(T.isArrayBufferView(t))return t.buffer;if(T.isURLSearchParams(t))return n.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),t.toString();let c;if(o){if(s.indexOf("application/x-www-form-urlencoded")>-1)return Ev(t,this.formSerializer).toString();if((c=T.isFileList(t))||s.indexOf("multipart/form-data")>-1){const f=this.env&&this.env.FormData;return Xi(c?{"files[]":t}:t,f&&new f,this.formSerializer)}}return o||i?(n.setContentType("application/json",!1),Tv(t)):t}],transformResponse:[function(t){const n=this.transitional||Nr.transitional,s=n&&n.forcedJSONParsing,i=this.responseType==="json";if(T.isResponse(t)||T.isReadableStream(t))return t;if(t&&T.isString(t)&&(s&&!this.responseType||i)){const a=!(n&&n.silentJSONParsing)&&i;try{return JSON.parse(t)}catch(c){if(a)throw c.name==="SyntaxError"?de.from(c,de.ERR_BAD_RESPONSE,this,null,this.response):c}}return t}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:bt.classes.FormData,Blob:bt.classes.Blob},validateStatus:function(t){return t>=200&&t<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};T.forEach(["delete","get","head","post","put","patch"],e=>{Nr.headers[e]={}});const Av=T.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),Ov=e=>{const t={};let n,s,i;return e&&e.split(` +`).forEach(function(a){i=a.indexOf(":"),n=a.substring(0,i).trim().toLowerCase(),s=a.substring(i+1).trim(),!(!n||t[n]&&Av[n])&&(n==="set-cookie"?t[n]?t[n].push(s):t[n]=[s]:t[n]=t[n]?t[n]+", "+s:s)}),t},ju=Symbol("internals");function ir(e){return e&&String(e).trim().toLowerCase()}function _i(e){return e===!1||e==null?e:T.isArray(e)?e.map(_i):String(e)}function xv(e){const t=Object.create(null),n=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let s;for(;s=n.exec(e);)t[s[1]]=s[2];return t}const Rv=e=>/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim());function Jo(e,t,n,s,i){if(T.isFunction(s))return s.call(this,t,n);if(i&&(t=n),!!T.isString(t)){if(T.isString(s))return t.indexOf(s)!==-1;if(T.isRegExp(s))return s.test(t)}}function Pv(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(t,n,s)=>n.toUpperCase()+s)}function Iv(e,t){const n=T.toCamelCase(" "+t);["get","set","has"].forEach(s=>{Object.defineProperty(e,s+n,{value:function(i,o,a){return this[s].call(this,t,i,o,a)},configurable:!0})})}class yt{constructor(t){t&&this.set(t)}set(t,n,s){const i=this;function o(c,f,p){const d=ir(f);if(!d)throw new Error("header name must be a non-empty string");const m=T.findKey(i,d);(!m||i[m]===void 0||p===!0||p===void 0&&i[m]!==!1)&&(i[m||f]=_i(c))}const a=(c,f)=>T.forEach(c,(p,d)=>o(p,d,f));if(T.isPlainObject(t)||t instanceof this.constructor)a(t,n);else if(T.isString(t)&&(t=t.trim())&&!Rv(t))a(Ov(t),n);else if(T.isHeaders(t))for(const[c,f]of t.entries())o(f,c,s);else t!=null&&o(n,t,s);return this}get(t,n){if(t=ir(t),t){const s=T.findKey(this,t);if(s){const i=this[s];if(!n)return i;if(n===!0)return xv(i);if(T.isFunction(n))return n.call(this,i,s);if(T.isRegExp(n))return n.exec(i);throw new TypeError("parser must be boolean|regexp|function")}}}has(t,n){if(t=ir(t),t){const s=T.findKey(this,t);return!!(s&&this[s]!==void 0&&(!n||Jo(this,this[s],s,n)))}return!1}delete(t,n){const s=this;let i=!1;function o(a){if(a=ir(a),a){const c=T.findKey(s,a);c&&(!n||Jo(s,s[c],c,n))&&(delete s[c],i=!0)}}return T.isArray(t)?t.forEach(o):o(t),i}clear(t){const n=Object.keys(this);let s=n.length,i=!1;for(;s--;){const o=n[s];(!t||Jo(this,this[o],o,t,!0))&&(delete this[o],i=!0)}return i}normalize(t){const n=this,s={};return T.forEach(this,(i,o)=>{const a=T.findKey(s,o);if(a){n[a]=_i(i),delete n[o];return}const c=t?Pv(o):String(o).trim();c!==o&&delete n[o],n[c]=_i(i),s[c]=!0}),this}concat(...t){return this.constructor.concat(this,...t)}toJSON(t){const n=Object.create(null);return T.forEach(this,(s,i)=>{s!=null&&s!==!1&&(n[i]=t&&T.isArray(s)?s.join(", "):s)}),n}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([t,n])=>t+": "+n).join(` +`)}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(t){return t instanceof this?t:new this(t)}static concat(t,...n){const s=new this(t);return n.forEach(i=>s.set(i)),s}static accessor(t){const s=(this[ju]=this[ju]={accessors:{}}).accessors,i=this.prototype;function o(a){const c=ir(a);s[c]||(Iv(i,a),s[c]=!0)}return T.isArray(t)?t.forEach(o):o(t),this}}yt.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]);T.reduceDescriptors(yt.prototype,({value:e},t)=>{let n=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(s){this[n]=s}}});T.freezeMethods(yt);function Xo(e,t){const n=this||Nr,s=t||n,i=yt.from(s.headers);let o=s.data;return T.forEach(e,function(c){o=c.call(n,o,i.normalize(),t?t.status:void 0)}),i.normalize(),o}function sh(e){return!!(e&&e.__CANCEL__)}function Ks(e,t,n){de.call(this,e??"canceled",de.ERR_CANCELED,t,n),this.name="CanceledError"}T.inherits(Ks,de,{__CANCEL__:!0});function rh(e,t,n){const s=n.config.validateStatus;!n.status||!s||s(n.status)?e(n):t(new de("Request failed with status code "+n.status,[de.ERR_BAD_REQUEST,de.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n))}function Lv(e){const t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}function Dv(e,t){e=e||10;const n=new Array(e),s=new Array(e);let i=0,o=0,a;return t=t!==void 0?t:1e3,function(f){const p=Date.now(),d=s[o];a||(a=p),n[i]=f,s[i]=p;let m=o,b=0;for(;m!==i;)b+=n[m++],m=m%e;if(i=(i+1)%e,i===o&&(o=(o+1)%e),p-a{n=d,i=null,o&&(clearTimeout(o),o=null),e.apply(null,p)};return[(...p)=>{const d=Date.now(),m=d-n;m>=s?a(p,d):(i=p,o||(o=setTimeout(()=>{o=null,a(i)},s-m)))},()=>i&&a(i)]}const xi=(e,t,n=3)=>{let s=0;const i=Dv(50,250);return Nv(o=>{const a=o.loaded,c=o.lengthComputable?o.total:void 0,f=a-s,p=i(f),d=a<=c;s=a;const m={loaded:a,total:c,progress:c?a/c:void 0,bytes:f,rate:p||void 0,estimated:p&&c&&d?(c-a)/p:void 0,event:o,lengthComputable:c!=null,[t?"download":"upload"]:!0};e(m)},n)},Bu=(e,t)=>{const n=e!=null;return[s=>t[0]({lengthComputable:n,total:e,loaded:s}),t[1]]},Hu=e=>(...t)=>T.asap(()=>e(...t)),kv=bt.hasStandardBrowserEnv?function(){const t=bt.navigator&&/(msie|trident)/i.test(bt.navigator.userAgent),n=document.createElement("a");let s;function i(o){let a=o;return t&&(n.setAttribute("href",a),a=n.href),n.setAttribute("href",a),{href:n.href,protocol:n.protocol?n.protocol.replace(/:$/,""):"",host:n.host,search:n.search?n.search.replace(/^\?/,""):"",hash:n.hash?n.hash.replace(/^#/,""):"",hostname:n.hostname,port:n.port,pathname:n.pathname.charAt(0)==="/"?n.pathname:"/"+n.pathname}}return s=i(window.location.href),function(a){const c=T.isString(a)?i(a):a;return c.protocol===s.protocol&&c.host===s.host}}():function(){return function(){return!0}}(),Mv=bt.hasStandardBrowserEnv?{write(e,t,n,s,i,o){const a=[e+"="+encodeURIComponent(t)];T.isNumber(n)&&a.push("expires="+new Date(n).toGMTString()),T.isString(s)&&a.push("path="+s),T.isString(i)&&a.push("domain="+i),o===!0&&a.push("secure"),document.cookie=a.join("; ")},read(e){const t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove(e){this.write(e,"",Date.now()-864e5)}}:{write(){},read(){return null},remove(){}};function $v(e){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(e)}function Fv(e,t){return t?e.replace(/\/?\/$/,"")+"/"+t.replace(/^\/+/,""):e}function ih(e,t){return e&&!$v(t)?Fv(e,t):t}const Uu=e=>e instanceof yt?{...e}:e;function ms(e,t){t=t||{};const n={};function s(p,d,m){return T.isPlainObject(p)&&T.isPlainObject(d)?T.merge.call({caseless:m},p,d):T.isPlainObject(d)?T.merge({},d):T.isArray(d)?d.slice():d}function i(p,d,m){if(T.isUndefined(d)){if(!T.isUndefined(p))return s(void 0,p,m)}else return s(p,d,m)}function o(p,d){if(!T.isUndefined(d))return s(void 0,d)}function a(p,d){if(T.isUndefined(d)){if(!T.isUndefined(p))return s(void 0,p)}else return s(void 0,d)}function c(p,d,m){if(m in t)return s(p,d);if(m in e)return s(void 0,p)}const f={url:o,method:o,data:o,baseURL:a,transformRequest:a,transformResponse:a,paramsSerializer:a,timeout:a,timeoutMessage:a,withCredentials:a,withXSRFToken:a,adapter:a,responseType:a,xsrfCookieName:a,xsrfHeaderName:a,onUploadProgress:a,onDownloadProgress:a,decompress:a,maxContentLength:a,maxBodyLength:a,beforeRedirect:a,transport:a,httpAgent:a,httpsAgent:a,cancelToken:a,socketPath:a,responseEncoding:a,validateStatus:c,headers:(p,d)=>i(Uu(p),Uu(d),!0)};return T.forEach(Object.keys(Object.assign({},e,t)),function(d){const m=f[d]||i,b=m(e[d],t[d],d);T.isUndefined(b)&&m!==c||(n[d]=b)}),n}const oh=e=>{const t=ms({},e);let{data:n,withXSRFToken:s,xsrfHeaderName:i,xsrfCookieName:o,headers:a,auth:c}=t;t.headers=a=yt.from(a),t.url=eh(ih(t.baseURL,t.url),e.params,e.paramsSerializer),c&&a.set("Authorization","Basic "+btoa((c.username||"")+":"+(c.password?unescape(encodeURIComponent(c.password)):"")));let f;if(T.isFormData(n)){if(bt.hasStandardBrowserEnv||bt.hasStandardBrowserWebWorkerEnv)a.setContentType(void 0);else if((f=a.getContentType())!==!1){const[p,...d]=f?f.split(";").map(m=>m.trim()).filter(Boolean):[];a.setContentType([p||"multipart/form-data",...d].join("; "))}}if(bt.hasStandardBrowserEnv&&(s&&T.isFunction(s)&&(s=s(t)),s||s!==!1&&kv(t.url))){const p=i&&o&&Mv.read(o);p&&a.set(i,p)}return t},jv=typeof XMLHttpRequest<"u",Bv=jv&&function(e){return new Promise(function(n,s){const i=oh(e);let o=i.data;const a=yt.from(i.headers).normalize();let{responseType:c,onUploadProgress:f,onDownloadProgress:p}=i,d,m,b,w,C;function P(){w&&w(),C&&C(),i.cancelToken&&i.cancelToken.unsubscribe(d),i.signal&&i.signal.removeEventListener("abort",d)}let R=new XMLHttpRequest;R.open(i.method.toUpperCase(),i.url,!0),R.timeout=i.timeout;function $(){if(!R)return;const B=yt.from("getAllResponseHeaders"in R&&R.getAllResponseHeaders()),Y={data:!c||c==="text"||c==="json"?R.responseText:R.response,status:R.status,statusText:R.statusText,headers:B,config:e,request:R};rh(function(le){n(le),P()},function(le){s(le),P()},Y),R=null}"onloadend"in R?R.onloadend=$:R.onreadystatechange=function(){!R||R.readyState!==4||R.status===0&&!(R.responseURL&&R.responseURL.indexOf("file:")===0)||setTimeout($)},R.onabort=function(){R&&(s(new de("Request aborted",de.ECONNABORTED,e,R)),R=null)},R.onerror=function(){s(new de("Network Error",de.ERR_NETWORK,e,R)),R=null},R.ontimeout=function(){let H=i.timeout?"timeout of "+i.timeout+"ms exceeded":"timeout exceeded";const Y=i.transitional||th;i.timeoutErrorMessage&&(H=i.timeoutErrorMessage),s(new de(H,Y.clarifyTimeoutError?de.ETIMEDOUT:de.ECONNABORTED,e,R)),R=null},o===void 0&&a.setContentType(null),"setRequestHeader"in R&&T.forEach(a.toJSON(),function(H,Y){R.setRequestHeader(Y,H)}),T.isUndefined(i.withCredentials)||(R.withCredentials=!!i.withCredentials),c&&c!=="json"&&(R.responseType=i.responseType),p&&([b,C]=xi(p,!0),R.addEventListener("progress",b)),f&&R.upload&&([m,w]=xi(f),R.upload.addEventListener("progress",m),R.upload.addEventListener("loadend",w)),(i.cancelToken||i.signal)&&(d=B=>{R&&(s(!B||B.type?new Ks(null,e,R):B),R.abort(),R=null)},i.cancelToken&&i.cancelToken.subscribe(d),i.signal&&(i.signal.aborted?d():i.signal.addEventListener("abort",d)));const N=Lv(i.url);if(N&&bt.protocols.indexOf(N)===-1){s(new de("Unsupported protocol "+N+":",de.ERR_BAD_REQUEST,e));return}R.send(o||null)})},Hv=(e,t)=>{const{length:n}=e=e?e.filter(Boolean):[];if(t||n){let s=new AbortController,i;const o=function(p){if(!i){i=!0,c();const d=p instanceof Error?p:this.reason;s.abort(d instanceof de?d:new Ks(d instanceof Error?d.message:d))}};let a=t&&setTimeout(()=>{a=null,o(new de(`timeout ${t} of ms exceeded`,de.ETIMEDOUT))},t);const c=()=>{e&&(a&&clearTimeout(a),a=null,e.forEach(p=>{p.unsubscribe?p.unsubscribe(o):p.removeEventListener("abort",o)}),e=null)};e.forEach(p=>p.addEventListener("abort",o));const{signal:f}=s;return f.unsubscribe=()=>T.asap(c),f}},Uv=function*(e,t){let n=e.byteLength;if(!t||n{const i=Vv(e,t);let o=0,a,c=f=>{a||(a=!0,s&&s(f))};return new ReadableStream({async pull(f){try{const{done:p,value:d}=await i.next();if(p){c(),f.close();return}let m=d.byteLength;if(n){let b=o+=m;n(b)}f.enqueue(new Uint8Array(d))}catch(p){throw c(p),p}},cancel(f){return c(f),i.return()}},{highWaterMark:2})},Qi=typeof fetch=="function"&&typeof Request=="function"&&typeof Response=="function",ah=Qi&&typeof ReadableStream=="function",Wv=Qi&&(typeof TextEncoder=="function"?(e=>t=>e.encode(t))(new TextEncoder):async e=>new Uint8Array(await new Response(e).arrayBuffer())),lh=(e,...t)=>{try{return!!e(...t)}catch{return!1}},zv=ah&&lh(()=>{let e=!1;const t=new Request(bt.origin,{body:new ReadableStream,method:"POST",get duplex(){return e=!0,"half"}}).headers.has("Content-Type");return e&&!t}),qu=64*1024,ba=ah&&lh(()=>T.isReadableStream(new Response("").body)),Ri={stream:ba&&(e=>e.body)};Qi&&(e=>{["text","arrayBuffer","blob","formData","stream"].forEach(t=>{!Ri[t]&&(Ri[t]=T.isFunction(e[t])?n=>n[t]():(n,s)=>{throw new de(`Response type '${t}' is not supported`,de.ERR_NOT_SUPPORT,s)})})})(new Response);const Kv=async e=>{if(e==null)return 0;if(T.isBlob(e))return e.size;if(T.isSpecCompliantForm(e))return(await new Request(bt.origin,{method:"POST",body:e}).arrayBuffer()).byteLength;if(T.isArrayBufferView(e)||T.isArrayBuffer(e))return e.byteLength;if(T.isURLSearchParams(e)&&(e=e+""),T.isString(e))return(await Wv(e)).byteLength},Gv=async(e,t)=>{const n=T.toFiniteNumber(e.getContentLength());return n??Kv(t)},Jv=Qi&&(async e=>{let{url:t,method:n,data:s,signal:i,cancelToken:o,timeout:a,onDownloadProgress:c,onUploadProgress:f,responseType:p,headers:d,withCredentials:m="same-origin",fetchOptions:b}=oh(e);p=p?(p+"").toLowerCase():"text";let w=Hv([i,o&&o.toAbortSignal()],a),C;const P=w&&w.unsubscribe&&(()=>{w.unsubscribe()});let R;try{if(f&&zv&&n!=="get"&&n!=="head"&&(R=await Gv(d,s))!==0){let Y=new Request(t,{method:"POST",body:s,duplex:"half"}),ge;if(T.isFormData(s)&&(ge=Y.headers.get("content-type"))&&d.setContentType(ge),Y.body){const[le,te]=Bu(R,xi(Hu(f)));s=Vu(Y.body,qu,le,te)}}T.isString(m)||(m=m?"include":"omit");const $="credentials"in Request.prototype;C=new Request(t,{...b,signal:w,method:n.toUpperCase(),headers:d.normalize().toJSON(),body:s,duplex:"half",credentials:$?m:void 0});let N=await fetch(C);const B=ba&&(p==="stream"||p==="response");if(ba&&(c||B&&P)){const Y={};["status","statusText","headers"].forEach(q=>{Y[q]=N[q]});const ge=T.toFiniteNumber(N.headers.get("content-length")),[le,te]=c&&Bu(ge,xi(Hu(c),!0))||[];N=new Response(Vu(N.body,qu,le,()=>{te&&te(),P&&P()}),Y)}p=p||"text";let H=await Ri[T.findKey(Ri,p)||"text"](N,e);return!B&&P&&P(),await new Promise((Y,ge)=>{rh(Y,ge,{data:H,headers:yt.from(N.headers),status:N.status,statusText:N.statusText,config:e,request:C})})}catch($){throw P&&P(),$&&$.name==="TypeError"&&/fetch/i.test($.message)?Object.assign(new de("Network Error",de.ERR_NETWORK,e,C),{cause:$.cause||$}):de.from($,$&&$.code,e,C)}}),ya={http:uv,xhr:Bv,fetch:Jv};T.forEach(ya,(e,t)=>{if(e){try{Object.defineProperty(e,"name",{value:t})}catch{}Object.defineProperty(e,"adapterName",{value:t})}});const Wu=e=>`- ${e}`,Xv=e=>T.isFunction(e)||e===null||e===!1,ch={getAdapter:e=>{e=T.isArray(e)?e:[e];const{length:t}=e;let n,s;const i={};for(let o=0;o`adapter ${c} `+(f===!1?"is not supported by the environment":"is not available in the build"));let a=t?o.length>1?`since : +`+o.map(Wu).join(` +`):" "+Wu(o[0]):"as no adapter specified";throw new de("There is no suitable adapter to dispatch the request "+a,"ERR_NOT_SUPPORT")}return s},adapters:ya};function Qo(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new Ks(null,e)}function zu(e){return Qo(e),e.headers=yt.from(e.headers),e.data=Xo.call(e,e.transformRequest),["post","put","patch"].indexOf(e.method)!==-1&&e.headers.setContentType("application/x-www-form-urlencoded",!1),ch.getAdapter(e.adapter||Nr.adapter)(e).then(function(s){return Qo(e),s.data=Xo.call(e,e.transformResponse,s),s.headers=yt.from(s.headers),s},function(s){return sh(s)||(Qo(e),s&&s.response&&(s.response.data=Xo.call(e,e.transformResponse,s.response),s.response.headers=yt.from(s.response.headers))),Promise.reject(s)})}const uh="1.7.7",Qa={};["object","boolean","number","function","string","symbol"].forEach((e,t)=>{Qa[e]=function(s){return typeof s===e||"a"+(t<1?"n ":" ")+e}});const Ku={};Qa.transitional=function(t,n,s){function i(o,a){return"[Axios v"+uh+"] Transitional option '"+o+"'"+a+(s?". "+s:"")}return(o,a,c)=>{if(t===!1)throw new de(i(a," has been removed"+(n?" in "+n:"")),de.ERR_DEPRECATED);return n&&!Ku[a]&&(Ku[a]=!0,console.warn(i(a," has been deprecated since v"+n+" and will be removed in the near future"))),t?t(o,a,c):!0}};function Qv(e,t,n){if(typeof e!="object")throw new de("options must be an object",de.ERR_BAD_OPTION_VALUE);const s=Object.keys(e);let i=s.length;for(;i-- >0;){const o=s[i],a=t[o];if(a){const c=e[o],f=c===void 0||a(c,o,e);if(f!==!0)throw new de("option "+o+" must be "+f,de.ERR_BAD_OPTION_VALUE);continue}if(n!==!0)throw new de("Unknown option "+o,de.ERR_BAD_OPTION)}}const va={assertOptions:Qv,validators:Qa},Ln=va.validators;class fs{constructor(t){this.defaults=t,this.interceptors={request:new Fu,response:new Fu}}async request(t,n){try{return await this._request(t,n)}catch(s){if(s instanceof Error){let i;Error.captureStackTrace?Error.captureStackTrace(i={}):i=new Error;const o=i.stack?i.stack.replace(/^.+\n/,""):"";try{s.stack?o&&!String(s.stack).endsWith(o.replace(/^.+\n.+\n/,""))&&(s.stack+=` +`+o):s.stack=o}catch{}}throw s}}_request(t,n){typeof t=="string"?(n=n||{},n.url=t):n=t||{},n=ms(this.defaults,n);const{transitional:s,paramsSerializer:i,headers:o}=n;s!==void 0&&va.assertOptions(s,{silentJSONParsing:Ln.transitional(Ln.boolean),forcedJSONParsing:Ln.transitional(Ln.boolean),clarifyTimeoutError:Ln.transitional(Ln.boolean)},!1),i!=null&&(T.isFunction(i)?n.paramsSerializer={serialize:i}:va.assertOptions(i,{encode:Ln.function,serialize:Ln.function},!0)),n.method=(n.method||this.defaults.method||"get").toLowerCase();let a=o&&T.merge(o.common,o[n.method]);o&&T.forEach(["delete","get","head","post","put","patch","common"],C=>{delete o[C]}),n.headers=yt.concat(a,o);const c=[];let f=!0;this.interceptors.request.forEach(function(P){typeof P.runWhen=="function"&&P.runWhen(n)===!1||(f=f&&P.synchronous,c.unshift(P.fulfilled,P.rejected))});const p=[];this.interceptors.response.forEach(function(P){p.push(P.fulfilled,P.rejected)});let d,m=0,b;if(!f){const C=[zu.bind(this),void 0];for(C.unshift.apply(C,c),C.push.apply(C,p),b=C.length,d=Promise.resolve(n);m{if(!s._listeners)return;let o=s._listeners.length;for(;o-- >0;)s._listeners[o](i);s._listeners=null}),this.promise.then=i=>{let o;const a=new Promise(c=>{s.subscribe(c),o=c}).then(i);return a.cancel=function(){s.unsubscribe(o)},a},t(function(o,a,c){s.reason||(s.reason=new Ks(o,a,c),n(s.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(t){if(this.reason){t(this.reason);return}this._listeners?this._listeners.push(t):this._listeners=[t]}unsubscribe(t){if(!this._listeners)return;const n=this._listeners.indexOf(t);n!==-1&&this._listeners.splice(n,1)}toAbortSignal(){const t=new AbortController,n=s=>{t.abort(s)};return this.subscribe(n),t.signal.unsubscribe=()=>this.unsubscribe(n),t.signal}static source(){let t;return{token:new Ya(function(i){t=i}),cancel:t}}}function Yv(e){return function(n){return e.apply(null,n)}}function Zv(e){return T.isObject(e)&&e.isAxiosError===!0}const wa={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(wa).forEach(([e,t])=>{wa[t]=e});function fh(e){const t=new fs(e),n=Ud(fs.prototype.request,t);return T.extend(n,fs.prototype,t,{allOwnKeys:!0}),T.extend(n,t,null,{allOwnKeys:!0}),n.create=function(i){return fh(ms(e,i))},n}const Ke=fh(Nr);Ke.Axios=fs;Ke.CanceledError=Ks;Ke.CancelToken=Ya;Ke.isCancel=sh;Ke.VERSION=uh;Ke.toFormData=Xi;Ke.AxiosError=de;Ke.Cancel=Ke.CanceledError;Ke.all=function(t){return Promise.all(t)};Ke.spread=Yv;Ke.isAxiosError=Zv;Ke.mergeConfig=ms;Ke.AxiosHeaders=yt;Ke.formToJSON=e=>nh(T.isHTMLForm(e)?new FormData(e):e);Ke.getAdapter=ch.getAdapter;Ke.HttpStatusCode=wa;Ke.default=Ke;const ew="modulepreload",tw=function(e){return"/"+e},Gu={},on=function(t,n,s){let i=Promise.resolve();if(n&&n.length>0){document.getElementsByTagName("link");const o=document.querySelector("meta[property=csp-nonce]"),a=(o==null?void 0:o.nonce)||(o==null?void 0:o.getAttribute("nonce"));i=Promise.all(n.map(c=>{if(c=tw(c),c in Gu)return;Gu[c]=!0;const f=c.endsWith(".css"),p=f?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${c}"]${p}`))return;const d=document.createElement("link");if(d.rel=f?"stylesheet":ew,f||(d.as="script"),d.crossOrigin="",d.href=c,a&&d.setAttribute("nonce",a),document.head.appendChild(d),f)return new Promise((m,b)=>{d.addEventListener("load",m),d.addEventListener("error",()=>b(new Error(`Unable to preload CSS for ${c}`)))})}))}return i.then(()=>t()).catch(o=>{const a=new Event("vite:preloadError",{cancelable:!0});if(a.payload=o,window.dispatchEvent(a),!a.defaultPrevented)throw o})},dh=Ey({history:Qb(),routes:[{path:"/",name:"home",redirect:"/web/applications/swcatalog"},{path:"/web",name:"rootOssList",component:()=>on(()=>import("./OssList-C0gSiIVM.js"),__vite__mapDeps([0,1,2,3,4,5,6]))},{path:"/web/oss/list",name:"ossList",component:()=>on(()=>import("./OssList-C0gSiIVM.js"),__vite__mapDeps([0,1,2,3,4,5,6]))},{path:"/web/generate/yaml",name:"yamlGenerate",component:()=>on(()=>import("./YamlGenerate-IrhFSZLu.js"),__vite__mapDeps([7,5,8,9]))},{path:"/web/repository/list",redirect:e=>({name:"repositoryList",query:e.query,hash:e.hash})},{path:"/web/repository/detail/:repositoryName",redirect:e=>({name:"repositoryDetail",params:{repositoryName:e.params.repositoryName},query:e.query,hash:e.hash})},{path:"/web/softwareCatalog/install",name:"softwareCatalogInstall",component:()=>on(()=>import("./InstallSoftwareIframe-DUSv8_Be.js"),__vite__mapDeps([10,11,12,5,13,8,14,15]))},{path:"/web/softwareCatalog",redirect:e=>({name:"softwareCatalog",query:e.query,hash:e.hash})},{path:"/web/applications/swcatalog",name:"softwareCatalog",component:()=>on(()=>import("./SoftwareCatalog-DW4Ywuns.js"),__vite__mapDeps([16,11,12,5,13,8,14,2,17,18,6,19]))},{path:"/web/applications/status",name:"applicationStatus",component:()=>on(()=>import("./ApplicationStatus-D536zrb9.js"),__vite__mapDeps([20,17,2,13,5,8,18,3,4,21]))},{path:"/web/applications/repository",component:()=>on(()=>import("./ApplicationRepository-DUwHTE2E.js"),__vite__mapDeps([22,1,2])),children:[{path:"",name:"repositoryList",component:()=>on(()=>import("./RepositoryList-B5opHrLQ.js"),__vite__mapDeps([23,3,4,24,5,6]))},{path:":repositoryName",name:"repositoryDetail",component:()=>on(()=>import("./RepositoryDetail-EZ68pMZx.js"),__vite__mapDeps([25,24,5,12,3,4]))}]},{path:"/web/softwareCatalog/list/test",name:"softwareCatalogListTest",component:()=>on(()=>import("./SoftwareCatalogListTest-C-sMMqkM.js"),__vite__mapDeps([26,1,2,13,5,8,12,11,14,27]))}]}),nw=vb("user",{state:()=>({accessToken:"",workspaceInfo:{id:"",name:"",description:"",created_at:"",updated_at:""},projectInfo:{id:"",ns_id:"",mci_id:"",cluster_id:"",name:"",description:"",created_at:"",updated_at:""},operationId:""}),actions:{setUser(e){this.accessToken=e.accessToken,this.workspaceInfo=e.workspaceInfo,this.projectInfo=e.projectInfo,this.operationId=e.operationId},getNsId(){var e,t,n,s;return((e=this.projectInfo)==null?void 0:e.ns_id)||((t=this.projectInfo)==null?void 0:t.nsid)||((n=this.projectInfo)==null?void 0:n.nsId)||((s=this.projectInfo)==null?void 0:s.NsId)||null},clearUser(){this.accessToken=null,this.workspaceInfo=null,this.projectInfo=null,this.operationId=null}}});let Ju=!1;dh.beforeEach(async(e,t,n)=>{Ju||(window.addEventListener("message",function(s){var f,p,d,m;const i=s.data;if(!i||typeof i!="object")return;const o=String(i.accessToken??"").trim(),a=((f=i.workspaceInfo)==null?void 0:f.id)??((p=i.workspaceInfo)==null?void 0:p.Id),c=((d=i.projectInfo)==null?void 0:d.id)??((m=i.projectInfo)==null?void 0:m.Id);if(!(!o||["undefined","null"].includes(o.toLowerCase())||!a||!c))try{nw().setUser(i)}catch{console.error("Unable to apply Web Console project context.")}}),Ju=!0),n()});const sw=e=>window.location.origin,f0=e=>e?/^(?:[a-z][a-z\d+\-.]*:)?\/\//i.test(e)||e.startsWith("data:")?e:`${window.location.origin}${e.startsWith("/")?"":"/"}${e}`:"";var rw=Object.defineProperty,Xu=Object.getOwnPropertySymbols,iw=Object.prototype.hasOwnProperty,ow=Object.prototype.propertyIsEnumerable,Qu=(e,t,n)=>t in e?rw(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,hh=(e,t)=>{for(var n in t||(t={}))iw.call(t,n)&&Qu(e,n,t[n]);if(Xu)for(var n of Xu(t))ow.call(t,n)&&Qu(e,n,t[n]);return e},Yi=e=>typeof e=="function",Zi=e=>typeof e=="string",ph=e=>Zi(e)&&e.trim().length>0,aw=e=>typeof e=="number",ls=e=>typeof e>"u",Tr=e=>typeof e=="object"&&e!==null,lw=e=>un(e,"tag")&&ph(e.tag),mh=e=>window.TouchEvent&&e instanceof TouchEvent,gh=e=>un(e,"component")&&_h(e.component),cw=e=>Yi(e)||Tr(e),_h=e=>!ls(e)&&(Zi(e)||cw(e)||gh(e)),Yu=e=>Tr(e)&&["height","width","right","left","top","bottom"].every(t=>aw(e[t])),un=(e,t)=>(Tr(e)||Yi(e))&&t in e,uw=(e=>()=>e++)(0);function Yo(e){return mh(e)?e.targetTouches[0].clientX:e.clientX}function Zu(e){return mh(e)?e.targetTouches[0].clientY:e.clientY}var fw=e=>{ls(e.remove)?e.parentNode&&e.parentNode.removeChild(e):e.remove()},kr=e=>gh(e)?kr(e.component):lw(e)?dn({render(){return e}}):typeof e=="string"?e:Ee(jn(e)),dw=e=>{if(typeof e=="string")return e;const t=un(e,"props")&&Tr(e.props)?e.props:{},n=un(e,"listeners")&&Tr(e.listeners)?e.listeners:{};return{component:kr(e),props:t,listeners:n}},hw=()=>typeof window<"u",Za=class{constructor(){this.allHandlers={}}getHandlers(e){return this.allHandlers[e]||[]}on(e,t){const n=this.getHandlers(e);n.push(t),this.allHandlers[e]=n}off(e,t){const n=this.getHandlers(e);n.splice(n.indexOf(t)>>>0,1)}emit(e,t){this.getHandlers(e).forEach(s=>s(t))}},pw=e=>["on","off","emit"].every(t=>un(e,t)&&Yi(e[t])),Tt;(function(e){e.SUCCESS="success",e.ERROR="error",e.WARNING="warning",e.INFO="info",e.DEFAULT="default"})(Tt||(Tt={}));var Pi;(function(e){e.TOP_LEFT="top-left",e.TOP_CENTER="top-center",e.TOP_RIGHT="top-right",e.BOTTOM_LEFT="bottom-left",e.BOTTOM_CENTER="bottom-center",e.BOTTOM_RIGHT="bottom-right"})(Pi||(Pi={}));var At;(function(e){e.ADD="add",e.DISMISS="dismiss",e.UPDATE="update",e.CLEAR="clear",e.UPDATE_DEFAULTS="update_defaults"})(At||(At={}));var Wt="Vue-Toastification",Vt={type:{type:String,default:Tt.DEFAULT},classNames:{type:[String,Array],default:()=>[]},trueBoolean:{type:Boolean,default:!0}},bh={type:Vt.type,customIcon:{type:[String,Boolean,Object,Function],default:!0}},bi={component:{type:[String,Object,Function,Boolean],default:"button"},classNames:Vt.classNames,showOnHover:{type:Boolean,default:!1},ariaLabel:{type:String,default:"close"}},Ea={timeout:{type:[Number,Boolean],default:5e3},hideProgressBar:{type:Boolean,default:!1},isRunning:{type:Boolean,default:!1}},yh={transition:{type:[Object,String],default:`${Wt}__bounce`}},mw={position:{type:String,default:Pi.TOP_RIGHT},draggable:Vt.trueBoolean,draggablePercent:{type:Number,default:.6},pauseOnFocusLoss:Vt.trueBoolean,pauseOnHover:Vt.trueBoolean,closeOnClick:Vt.trueBoolean,timeout:Ea.timeout,hideProgressBar:Ea.hideProgressBar,toastClassName:Vt.classNames,bodyClassName:Vt.classNames,icon:bh.customIcon,closeButton:bi.component,closeButtonClassName:bi.classNames,showCloseButtonOnHover:bi.showOnHover,accessibility:{type:Object,default:()=>({toastRole:"alert",closeButtonLabel:"close"})},rtl:{type:Boolean,default:!1},eventBus:{type:Object,required:!1,default:()=>new Za}},gw={id:{type:[String,Number],required:!0,default:0},type:Vt.type,content:{type:[String,Object,Function],required:!0,default:""},onClick:{type:Function,default:void 0},onClose:{type:Function,default:void 0}},_w={container:{type:[Object,Function],default:()=>document.body},newestOnTop:Vt.trueBoolean,maxToasts:{type:Number,default:20},transition:yh.transition,toastDefaults:Object,filterBeforeCreate:{type:Function,default:e=>e},filterToasts:{type:Function,default:e=>e},containerClassName:Vt.classNames,onMounted:Function,shareAppContext:[Boolean,Object]},Cn={CORE_TOAST:mw,TOAST:gw,CONTAINER:_w,PROGRESS_BAR:Ea,ICON:bh,TRANSITION:yh,CLOSE_BUTTON:bi},vh=dn({name:"VtProgressBar",props:Cn.PROGRESS_BAR,data(){return{hasClass:!0}},computed:{style(){return{animationDuration:`${this.timeout}ms`,animationPlayState:this.isRunning?"running":"paused",opacity:this.hideProgressBar?0:1}},cpClass(){return this.hasClass?`${Wt}__progress-bar`:""}},watch:{timeout(){this.hasClass=!1,this.$nextTick(()=>this.hasClass=!0)}},mounted(){this.$el.addEventListener("animationend",this.animationEnded)},beforeUnmount(){this.$el.removeEventListener("animationend",this.animationEnded)},methods:{animationEnded(){this.$emit("close-toast")}}});function bw(e,t){return Ue(),qt("div",{style:Or(e.style),class:Hn(e.cpClass)},null,6)}vh.render=bw;var yw=vh,wh=dn({name:"VtCloseButton",props:Cn.CLOSE_BUTTON,computed:{buttonComponent(){return this.component!==!1?kr(this.component):"button"},classes(){const e=[`${Wt}__close-button`];return this.showOnHover&&e.push("show-on-hover"),e.concat(this.classNames)}}}),vw=Bi(" × ");function ww(e,t){return Ue(),jt(Ua(e.buttonComponent),Hi({"aria-label":e.ariaLabel,class:e.classes},e.$attrs),{default:Ir(()=>[vw]),_:1},16,["aria-label","class"])}wh.render=ww;var Ew=wh,Eh={},Cw={"aria-hidden":"true",focusable:"false","data-prefix":"fas","data-icon":"check-circle",class:"svg-inline--fa fa-check-circle fa-w-16",role:"img",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 512 512"},Sw=_s("path",{fill:"currentColor",d:"M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zM227.314 387.314l184-184c6.248-6.248 6.248-16.379 0-22.627l-22.627-22.627c-6.248-6.249-16.379-6.249-22.628 0L216 308.118l-70.059-70.059c-6.248-6.248-16.379-6.248-22.628 0l-22.627 22.627c-6.248 6.248-6.248 16.379 0 22.627l104 104c6.249 6.249 16.379 6.249 22.628.001z"},null,-1),Tw=[Sw];function Aw(e,t){return Ue(),qt("svg",Cw,Tw)}Eh.render=Aw;var Ow=Eh,Ch={},xw={"aria-hidden":"true",focusable:"false","data-prefix":"fas","data-icon":"info-circle",class:"svg-inline--fa fa-info-circle fa-w-16",role:"img",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 512 512"},Rw=_s("path",{fill:"currentColor",d:"M256 8C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8zm0 110c23.196 0 42 18.804 42 42s-18.804 42-42 42-42-18.804-42-42 18.804-42 42-42zm56 254c0 6.627-5.373 12-12 12h-88c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h12v-64h-12c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h64c6.627 0 12 5.373 12 12v100h12c6.627 0 12 5.373 12 12v24z"},null,-1),Pw=[Rw];function Iw(e,t){return Ue(),qt("svg",xw,Pw)}Ch.render=Iw;var ef=Ch,Sh={},Lw={"aria-hidden":"true",focusable:"false","data-prefix":"fas","data-icon":"exclamation-circle",class:"svg-inline--fa fa-exclamation-circle fa-w-16",role:"img",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 512 512"},Dw=_s("path",{fill:"currentColor",d:"M504 256c0 136.997-111.043 248-248 248S8 392.997 8 256C8 119.083 119.043 8 256 8s248 111.083 248 248zm-248 50c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z"},null,-1),Nw=[Dw];function kw(e,t){return Ue(),qt("svg",Lw,Nw)}Sh.render=kw;var Mw=Sh,Th={},$w={"aria-hidden":"true",focusable:"false","data-prefix":"fas","data-icon":"exclamation-triangle",class:"svg-inline--fa fa-exclamation-triangle fa-w-18",role:"img",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 576 512"},Fw=_s("path",{fill:"currentColor",d:"M569.517 440.013C587.975 472.007 564.806 512 527.94 512H48.054c-36.937 0-59.999-40.055-41.577-71.987L246.423 23.985c18.467-32.009 64.72-31.951 83.154 0l239.94 416.028zM288 354c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z"},null,-1),jw=[Fw];function Bw(e,t){return Ue(),qt("svg",$w,jw)}Th.render=Bw;var Hw=Th,Ah=dn({name:"VtIcon",props:Cn.ICON,computed:{customIconChildren(){return un(this.customIcon,"iconChildren")?this.trimValue(this.customIcon.iconChildren):""},customIconClass(){return Zi(this.customIcon)?this.trimValue(this.customIcon):un(this.customIcon,"iconClass")?this.trimValue(this.customIcon.iconClass):""},customIconTag(){return un(this.customIcon,"iconTag")?this.trimValue(this.customIcon.iconTag,"i"):"i"},hasCustomIcon(){return this.customIconClass.length>0},component(){return this.hasCustomIcon?this.customIconTag:_h(this.customIcon)?kr(this.customIcon):this.iconTypeComponent},iconTypeComponent(){return{[Tt.DEFAULT]:ef,[Tt.INFO]:ef,[Tt.SUCCESS]:Ow,[Tt.ERROR]:Hw,[Tt.WARNING]:Mw}[this.type]},iconClasses(){const e=[`${Wt}__icon`];return this.hasCustomIcon?e.concat(this.customIconClass):e}},methods:{trimValue(e,t=""){return ph(e)?e.trim():t}}});function Uw(e,t){return Ue(),jt(Ua(e.component),{class:Hn(e.iconClasses)},{default:Ir(()=>[Bi(xa(e.customIconChildren),1)]),_:1},8,["class"])}Ah.render=Uw;var Vw=Ah,Oh=dn({name:"VtToast",components:{ProgressBar:yw,CloseButton:Ew,Icon:Vw},inheritAttrs:!1,props:Object.assign({},Cn.CORE_TOAST,Cn.TOAST),data(){return{isRunning:!0,disableTransitions:!1,beingDragged:!1,dragStart:0,dragPos:{x:0,y:0},dragRect:{}}},computed:{classes(){const e=[`${Wt}__toast`,`${Wt}__toast--${this.type}`,`${this.position}`].concat(this.toastClassName);return this.disableTransitions&&e.push("disable-transition"),this.rtl&&e.push(`${Wt}__toast--rtl`),e},bodyClasses(){return[`${Wt}__toast-${Zi(this.content)?"body":"component-body"}`].concat(this.bodyClassName)},draggableStyle(){return this.dragStart===this.dragPos.x?{}:this.beingDragged?{transform:`translateX(${this.dragDelta}px)`,opacity:1-Math.abs(this.dragDelta/this.removalDistance)}:{transition:"transform 0.2s, opacity 0.2s",transform:"translateX(0)",opacity:1}},dragDelta(){return this.beingDragged?this.dragPos.x-this.dragStart:0},removalDistance(){return Yu(this.dragRect)?(this.dragRect.right-this.dragRect.left)*this.draggablePercent:0}},mounted(){this.draggable&&this.draggableSetup(),this.pauseOnFocusLoss&&this.focusSetup()},beforeUnmount(){this.draggable&&this.draggableCleanup(),this.pauseOnFocusLoss&&this.focusCleanup()},methods:{hasProp:un,getVueComponentFromObj:kr,closeToast(){this.eventBus.emit(At.DISMISS,this.id)},clickHandler(){this.onClick&&this.onClick(this.closeToast),this.closeOnClick&&(!this.beingDragged||this.dragStart===this.dragPos.x)&&this.closeToast()},timeoutHandler(){this.closeToast()},hoverPause(){this.pauseOnHover&&(this.isRunning=!1)},hoverPlay(){this.pauseOnHover&&(this.isRunning=!0)},focusPause(){this.isRunning=!1},focusPlay(){this.isRunning=!0},focusSetup(){addEventListener("blur",this.focusPause),addEventListener("focus",this.focusPlay)},focusCleanup(){removeEventListener("blur",this.focusPause),removeEventListener("focus",this.focusPlay)},draggableSetup(){const e=this.$el;e.addEventListener("touchstart",this.onDragStart,{passive:!0}),e.addEventListener("mousedown",this.onDragStart),addEventListener("touchmove",this.onDragMove,{passive:!1}),addEventListener("mousemove",this.onDragMove),addEventListener("touchend",this.onDragEnd),addEventListener("mouseup",this.onDragEnd)},draggableCleanup(){const e=this.$el;e.removeEventListener("touchstart",this.onDragStart),e.removeEventListener("mousedown",this.onDragStart),removeEventListener("touchmove",this.onDragMove),removeEventListener("mousemove",this.onDragMove),removeEventListener("touchend",this.onDragEnd),removeEventListener("mouseup",this.onDragEnd)},onDragStart(e){this.beingDragged=!0,this.dragPos={x:Yo(e),y:Zu(e)},this.dragStart=Yo(e),this.dragRect=this.$el.getBoundingClientRect()},onDragMove(e){this.beingDragged&&(e.preventDefault(),this.isRunning&&(this.isRunning=!1),this.dragPos={x:Yo(e),y:Zu(e)})},onDragEnd(){this.beingDragged&&(Math.abs(this.dragDelta)>=this.removalDistance?(this.disableTransitions=!0,this.$nextTick(()=>this.closeToast())):setTimeout(()=>{this.beingDragged=!1,Yu(this.dragRect)&&this.pauseOnHover&&this.dragRect.bottom>=this.dragPos.y&&this.dragPos.y>=this.dragRect.top&&this.dragRect.left<=this.dragPos.x&&this.dragPos.x<=this.dragRect.right?this.isRunning=!1:this.isRunning=!0}))}}}),qw=["role"];function Ww(e,t){const n=cr("Icon"),s=cr("CloseButton"),i=cr("ProgressBar");return Ue(),qt("div",{class:Hn(e.classes),style:Or(e.draggableStyle),onClick:t[0]||(t[0]=(...o)=>e.clickHandler&&e.clickHandler(...o)),onMouseenter:t[1]||(t[1]=(...o)=>e.hoverPause&&e.hoverPause(...o)),onMouseleave:t[2]||(t[2]=(...o)=>e.hoverPlay&&e.hoverPlay(...o))},[e.icon?(Ue(),jt(n,{key:0,"custom-icon":e.icon,type:e.type},null,8,["custom-icon","type"])):Bo("v-if",!0),_s("div",{role:e.accessibility.toastRole||"alert",class:Hn(e.bodyClasses)},[typeof e.content=="string"?(Ue(),qt(tt,{key:0},[Bi(xa(e.content),1)],2112)):(Ue(),jt(Ua(e.getVueComponentFromObj(e.content)),Hi({key:1,"toast-id":e.id},e.hasProp(e.content,"props")?e.content.props:{},Hg(e.hasProp(e.content,"listeners")?e.content.listeners:{}),{onCloseToast:e.closeToast}),null,16,["toast-id","onCloseToast"]))],10,qw),e.closeButton?(Ue(),jt(s,{key:1,component:e.closeButton,"class-names":e.closeButtonClassName,"show-on-hover":e.showCloseButtonOnHover,"aria-label":e.accessibility.closeButtonLabel,onClick:lb(e.closeToast,["stop"])},null,8,["component","class-names","show-on-hover","aria-label","onClick"])):Bo("v-if",!0),e.timeout?(Ue(),jt(i,{key:2,"is-running":e.isRunning,"hide-progress-bar":e.hideProgressBar,timeout:e.timeout,onCloseToast:e.timeoutHandler},null,8,["is-running","hide-progress-bar","timeout","onCloseToast"])):Bo("v-if",!0)],38)}Oh.render=Ww;var zw=Oh,xh=dn({name:"VtTransition",props:Cn.TRANSITION,emits:["leave"],methods:{hasProp:un,leave(e){e instanceof HTMLElement&&(e.style.left=e.offsetLeft+"px",e.style.top=e.offsetTop+"px",e.style.width=getComputedStyle(e).width,e.style.position="absolute")}}});function Kw(e,t){return Ue(),jt(eb,{tag:"div","enter-active-class":e.transition.enter?e.transition.enter:`${e.transition}-enter-active`,"move-class":e.transition.move?e.transition.move:`${e.transition}-move`,"leave-active-class":e.transition.leave?e.transition.leave:`${e.transition}-leave-active`,onLeave:e.leave},{default:Ir(()=>[Bg(e.$slots,"default")]),_:3},8,["enter-active-class","move-class","leave-active-class","onLeave"])}xh.render=Kw;var Gw=xh,Rh=dn({name:"VueToastification",devtools:{hide:!0},components:{Toast:zw,VtTransition:Gw},props:Object.assign({},Cn.CORE_TOAST,Cn.CONTAINER,Cn.TRANSITION),data(){return{count:0,positions:Object.values(Pi),toasts:{},defaults:{}}},computed:{toastArray(){return Object.values(this.toasts)},filteredToasts(){return this.defaults.filterToasts(this.toastArray)}},beforeMount(){const e=this.eventBus;e.on(At.ADD,this.addToast),e.on(At.CLEAR,this.clearToasts),e.on(At.DISMISS,this.dismissToast),e.on(At.UPDATE,this.updateToast),e.on(At.UPDATE_DEFAULTS,this.updateDefaults),this.defaults=this.$props},mounted(){this.setup(this.container)},methods:{async setup(e){Yi(e)&&(e=await e()),fw(this.$el),e.appendChild(this.$el)},setToast(e){ls(e.id)||(this.toasts[e.id]=e)},addToast(e){e.content=dw(e.content);const t=Object.assign({},this.defaults,e.type&&this.defaults.toastDefaults&&this.defaults.toastDefaults[e.type],e),n=this.defaults.filterBeforeCreate(t,this.toastArray);n&&this.setToast(n)},dismissToast(e){const t=this.toasts[e];!ls(t)&&!ls(t.onClose)&&t.onClose(),delete this.toasts[e]},clearToasts(){Object.keys(this.toasts).forEach(e=>{this.dismissToast(e)})},getPositionToasts(e){const t=this.filteredToasts.filter(n=>n.position===e).slice(0,this.defaults.maxToasts);return this.defaults.newestOnTop?t.reverse():t},updateDefaults(e){ls(e.container)||this.setup(e.container),this.defaults=Object.assign({},this.defaults,e)},updateToast({id:e,options:t,create:n}){this.toasts[e]?(t.timeout&&t.timeout===this.toasts[e].timeout&&t.timeout++,this.setToast(Object.assign({},this.toasts[e],t))):n&&this.addToast(Object.assign({},{id:e},t))},getClasses(e){return[`${Wt}__container`,e].concat(this.defaults.containerClassName)}}});function Jw(e,t){const n=cr("Toast"),s=cr("VtTransition");return Ue(),qt("div",null,[(Ue(!0),qt(tt,null,jc(e.positions,i=>(Ue(),qt("div",{key:i},[nt(s,{transition:e.defaults.transition,class:Hn(e.getClasses(i))},{default:Ir(()=>[(Ue(!0),qt(tt,null,jc(e.getPositionToasts(i),o=>(Ue(),jt(n,Hi({key:o.id},o),null,16))),128))]),_:2},1032,["transition","class"])]))),128))])}Rh.render=Jw;var Xw=Rh,tf=(e={},t=!0)=>{const n=e.eventBus=e.eventBus||new Za;t&&Pr(()=>{const o=Td(Xw,hh({},e)),a=o.mount(document.createElement("div")),c=e.onMounted;if(ls(c)||c(a,o),e.shareAppContext){const f=e.shareAppContext;f===!0?console.warn(`[${Wt}] App to share context with was not provided.`):(o._context.components=f._context.components,o._context.directives=f._context.directives,o._context.mixins=f._context.mixins,o._context.provides=f._context.provides,o.config.globalProperties=f.config.globalProperties)}});const s=(o,a)=>{const c=Object.assign({},{id:uw(),type:Tt.DEFAULT},a,{content:o});return n.emit(At.ADD,c),c.id};s.clear=()=>n.emit(At.CLEAR,void 0),s.updateDefaults=o=>{n.emit(At.UPDATE_DEFAULTS,o)},s.dismiss=o=>{n.emit(At.DISMISS,o)};function i(o,{content:a,options:c},f=!1){const p=Object.assign({},c,{content:a});n.emit(At.UPDATE,{id:o,options:p,create:f})}return s.update=i,s.success=(o,a)=>s(o,Object.assign({},a,{type:Tt.SUCCESS})),s.info=(o,a)=>s(o,Object.assign({},a,{type:Tt.INFO})),s.error=(o,a)=>s(o,Object.assign({},a,{type:Tt.ERROR})),s.warning=(o,a)=>s(o,Object.assign({},a,{type:Tt.WARNING})),s},Qw=()=>{const e=()=>console.warn(`[${Wt}] This plugin does not support SSR!`);return new Proxy(e,{get(){return e}})};function Ph(e){return hw()?pw(e)?tf({eventBus:e},!1):tf(e,!0):Qw()}var Ih=Symbol("VueToastification"),Lh=new Za,Yw=(e,t)=>{(t==null?void 0:t.shareAppContext)===!0&&(t.shareAppContext=e);const n=Ph(hh({eventBus:Lh},t));e.provide(Ih,n)},d0=e=>{const t=hd()?xt(Ih,void 0):void 0;return t||Ph(Lh)},Zw=Yw,e0=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function h0(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var t0={exports:{}};/*! + * Bootstrap v5.3.3 (https://getbootstrap.com/) + * Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */(function(e,t){(function(n,s){e.exports=s()})(e0,function(){const n=new Map,s={set(u,r,l){n.has(u)||n.set(u,new Map);const h=n.get(u);h.has(r)||h.size===0?h.set(r,l):console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(h.keys())[0]}.`)},get:(u,r)=>n.has(u)&&n.get(u).get(r)||null,remove(u,r){if(!n.has(u))return;const l=n.get(u);l.delete(r),l.size===0&&n.delete(u)}},i="transitionend",o=u=>(u&&window.CSS&&window.CSS.escape&&(u=u.replace(/#([^\s"#']+)/g,(r,l)=>`#${CSS.escape(l)}`)),u),a=u=>{u.dispatchEvent(new Event(i))},c=u=>!(!u||typeof u!="object")&&(u.jquery!==void 0&&(u=u[0]),u.nodeType!==void 0),f=u=>c(u)?u.jquery?u[0]:u:typeof u=="string"&&u.length>0?document.querySelector(o(u)):null,p=u=>{if(!c(u)||u.getClientRects().length===0)return!1;const r=getComputedStyle(u).getPropertyValue("visibility")==="visible",l=u.closest("details:not([open])");if(!l)return r;if(l!==u){const h=u.closest("summary");if(h&&h.parentNode!==l||h===null)return!1}return r},d=u=>!u||u.nodeType!==Node.ELEMENT_NODE||!!u.classList.contains("disabled")||(u.disabled!==void 0?u.disabled:u.hasAttribute("disabled")&&u.getAttribute("disabled")!=="false"),m=u=>{if(!document.documentElement.attachShadow)return null;if(typeof u.getRootNode=="function"){const r=u.getRootNode();return r instanceof ShadowRoot?r:null}return u instanceof ShadowRoot?u:u.parentNode?m(u.parentNode):null},b=()=>{},w=u=>{u.offsetHeight},C=()=>window.jQuery&&!document.body.hasAttribute("data-bs-no-jquery")?window.jQuery:null,P=[],R=()=>document.documentElement.dir==="rtl",$=u=>{var r;r=()=>{const l=C();if(l){const h=u.NAME,y=l.fn[h];l.fn[h]=u.jQueryInterface,l.fn[h].Constructor=u,l.fn[h].noConflict=()=>(l.fn[h]=y,u.jQueryInterface)}},document.readyState==="loading"?(P.length||document.addEventListener("DOMContentLoaded",()=>{for(const l of P)l()}),P.push(r)):r()},N=(u,r=[],l=u)=>typeof u=="function"?u(...r):l,B=(u,r,l=!0)=>{if(!l)return void N(u);const h=(S=>{if(!S)return 0;let{transitionDuration:L,transitionDelay:j}=window.getComputedStyle(S);const J=Number.parseFloat(L),X=Number.parseFloat(j);return J||X?(L=L.split(",")[0],j=j.split(",")[0],1e3*(Number.parseFloat(L)+Number.parseFloat(j))):0})(r)+5;let y=!1;const v=({target:S})=>{S===r&&(y=!0,r.removeEventListener(i,v),N(u))};r.addEventListener(i,v),setTimeout(()=>{y||a(r)},h)},H=(u,r,l,h)=>{const y=u.length;let v=u.indexOf(r);return v===-1?!l&&h?u[y-1]:u[0]:(v+=l?1:-1,h&&(v=(v+y)%y),u[Math.max(0,Math.min(v,y-1))])},Y=/[^.]*(?=\..*)\.|.*/,ge=/\..*/,le=/::\d+$/,te={};let q=1;const oe={mouseenter:"mouseover",mouseleave:"mouseout"},ve=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function G(u,r){return r&&`${r}::${q++}`||u.uidEvent||q++}function be(u){const r=G(u);return u.uidEvent=r,te[r]=te[r]||{},te[r]}function He(u,r,l=null){return Object.values(u).find(h=>h.callable===r&&h.delegationSelector===l)}function st(u,r,l){const h=typeof r=="string",y=h?l:r||l;let v=Pt(u);return ve.has(v)||(v=u),[h,y,v]}function Oe(u,r,l,h,y){if(typeof r!="string"||!u)return;let[v,S,L]=st(r,l,h);r in oe&&(S=(ce=>function(ie){if(!ie.relatedTarget||ie.relatedTarget!==ie.delegateTarget&&!ie.delegateTarget.contains(ie.relatedTarget))return ce.call(this,ie)})(S));const j=be(u),J=j[L]||(j[L]={}),X=He(J,S,v?l:null);if(X)return void(X.oneOff=X.oneOff&&y);const K=G(S,r.replace(Y,"")),he=v?function(se,ce,ie){return function ue(Le){const Fe=se.querySelectorAll(ce);for(let{target:_e}=Le;_e&&_e!==this;_e=_e.parentNode)for(const Ae of Fe)if(Ae===_e)return _t(Le,{delegateTarget:_e}),ue.oneOff&&I.off(se,Le.type,ce,ie),ie.apply(_e,[Le])}}(u,l,S):function(se,ce){return function ie(ue){return _t(ue,{delegateTarget:se}),ie.oneOff&&I.off(se,ue.type,ce),ce.apply(se,[ue])}}(u,S);he.delegationSelector=v?l:null,he.callable=S,he.oneOff=y,he.uidEvent=K,J[K]=he,u.addEventListener(L,he,v)}function ae(u,r,l,h,y){const v=He(r[l],h,y);v&&(u.removeEventListener(l,v,!!y),delete r[l][v.uidEvent])}function Se(u,r,l,h){const y=r[l]||{};for(const[v,S]of Object.entries(y))v.includes(h)&&ae(u,r,l,S.callable,S.delegationSelector)}function Pt(u){return u=u.replace(ge,""),oe[u]||u}const I={on(u,r,l,h){Oe(u,r,l,h,!1)},one(u,r,l,h){Oe(u,r,l,h,!0)},off(u,r,l,h){if(typeof r!="string"||!u)return;const[y,v,S]=st(r,l,h),L=S!==r,j=be(u),J=j[S]||{},X=r.startsWith(".");if(v===void 0){if(X)for(const K of Object.keys(j))Se(u,j,K,r.slice(1));for(const[K,he]of Object.entries(J)){const se=K.replace(le,"");L&&!r.includes(se)||ae(u,j,S,he.callable,he.delegationSelector)}}else{if(!Object.keys(J).length)return;ae(u,j,S,v,y?l:null)}},trigger(u,r,l){if(typeof r!="string"||!u)return null;const h=C();let y=null,v=!0,S=!0,L=!1;r!==Pt(r)&&h&&(y=h.Event(r,l),h(u).trigger(y),v=!y.isPropagationStopped(),S=!y.isImmediatePropagationStopped(),L=y.isDefaultPrevented());const j=_t(new Event(r,{bubbles:v,cancelable:!0}),l);return L&&j.preventDefault(),S&&u.dispatchEvent(j),j.defaultPrevented&&y&&y.preventDefault(),j}};function _t(u,r={}){for(const[l,h]of Object.entries(r))try{u[l]=h}catch{Object.defineProperty(u,l,{configurable:!0,get:()=>h})}return u}function et(u){if(u==="true")return!0;if(u==="false")return!1;if(u===Number(u).toString())return Number(u);if(u===""||u==="null")return null;if(typeof u!="string")return u;try{return JSON.parse(decodeURIComponent(u))}catch{return u}}function Yt(u){return u.replace(/[A-Z]/g,r=>`-${r.toLowerCase()}`)}const rt={setDataAttribute(u,r,l){u.setAttribute(`data-bs-${Yt(r)}`,l)},removeDataAttribute(u,r){u.removeAttribute(`data-bs-${Yt(r)}`)},getDataAttributes(u){if(!u)return{};const r={},l=Object.keys(u.dataset).filter(h=>h.startsWith("bs")&&!h.startsWith("bsConfig"));for(const h of l){let y=h.replace(/^bs/,"");y=y.charAt(0).toLowerCase()+y.slice(1,y.length),r[y]=et(u.dataset[h])}return r},getDataAttribute:(u,r)=>et(u.getAttribute(`data-bs-${Yt(r)}`))};class Zt{static get Default(){return{}}static get DefaultType(){return{}}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}_getConfig(r){return r=this._mergeConfigObj(r),r=this._configAfterMerge(r),this._typeCheckConfig(r),r}_configAfterMerge(r){return r}_mergeConfigObj(r,l){const h=c(l)?rt.getDataAttribute(l,"config"):{};return{...this.constructor.Default,...typeof h=="object"?h:{},...c(l)?rt.getDataAttributes(l):{},...typeof r=="object"?r:{}}}_typeCheckConfig(r,l=this.constructor.DefaultType){for(const[y,v]of Object.entries(l)){const S=r[y],L=c(S)?"element":(h=S)==null?`${h}`:Object.prototype.toString.call(h).match(/\s([a-z]+)/i)[1].toLowerCase();if(!new RegExp(v).test(L))throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${y}" provided type "${L}" but expected type "${v}".`)}var h}}class Be extends Zt{constructor(r,l){super(),(r=f(r))&&(this._element=r,this._config=this._getConfig(l),s.set(this._element,this.constructor.DATA_KEY,this))}dispose(){s.remove(this._element,this.constructor.DATA_KEY),I.off(this._element,this.constructor.EVENT_KEY);for(const r of Object.getOwnPropertyNames(this))this[r]=null}_queueCallback(r,l,h=!0){B(r,l,h)}_getConfig(r){return r=this._mergeConfigObj(r,this._element),r=this._configAfterMerge(r),this._typeCheckConfig(r),r}static getInstance(r){return s.get(f(r),this.DATA_KEY)}static getOrCreateInstance(r,l={}){return this.getInstance(r)||new this(r,typeof l=="object"?l:null)}static get VERSION(){return"5.3.3"}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}static eventName(r){return`${r}${this.EVENT_KEY}`}}const x=u=>{let r=u.getAttribute("data-bs-target");if(!r||r==="#"){let l=u.getAttribute("href");if(!l||!l.includes("#")&&!l.startsWith("."))return null;l.includes("#")&&!l.startsWith("#")&&(l=`#${l.split("#")[1]}`),r=l&&l!=="#"?l.trim():null}return r?r.split(",").map(l=>o(l)).join(","):null},A={find:(u,r=document.documentElement)=>[].concat(...Element.prototype.querySelectorAll.call(r,u)),findOne:(u,r=document.documentElement)=>Element.prototype.querySelector.call(r,u),children:(u,r)=>[].concat(...u.children).filter(l=>l.matches(r)),parents(u,r){const l=[];let h=u.parentNode.closest(r);for(;h;)l.push(h),h=h.parentNode.closest(r);return l},prev(u,r){let l=u.previousElementSibling;for(;l;){if(l.matches(r))return[l];l=l.previousElementSibling}return[]},next(u,r){let l=u.nextElementSibling;for(;l;){if(l.matches(r))return[l];l=l.nextElementSibling}return[]},focusableChildren(u){const r=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map(l=>`${l}:not([tabindex^="-"])`).join(",");return this.find(r,u).filter(l=>!d(l)&&p(l))},getSelectorFromElement(u){const r=x(u);return r&&A.findOne(r)?r:null},getElementFromSelector(u){const r=x(u);return r?A.findOne(r):null},getMultipleElementsFromSelector(u){const r=x(u);return r?A.find(r):[]}},V=(u,r="hide")=>{const l=`click.dismiss${u.EVENT_KEY}`,h=u.NAME;I.on(document,l,`[data-bs-dismiss="${h}"]`,function(y){if(["A","AREA"].includes(this.tagName)&&y.preventDefault(),d(this))return;const v=A.getElementFromSelector(this)||this.closest(`.${h}`);u.getOrCreateInstance(v)[r]()})},Z=".bs.alert",Te=`close${Z}`,je=`closed${Z}`;class g extends Be{static get NAME(){return"alert"}close(){if(I.trigger(this._element,Te).defaultPrevented)return;this._element.classList.remove("show");const r=this._element.classList.contains("fade");this._queueCallback(()=>this._destroyElement(),this._element,r)}_destroyElement(){this._element.remove(),I.trigger(this._element,je),this.dispose()}static jQueryInterface(r){return this.each(function(){const l=g.getOrCreateInstance(this);if(typeof r=="string"){if(l[r]===void 0||r.startsWith("_")||r==="constructor")throw new TypeError(`No method named "${r}"`);l[r](this)}})}}V(g,"close"),$(g);const _='[data-bs-toggle="button"]';class E extends Be{static get NAME(){return"button"}toggle(){this._element.setAttribute("aria-pressed",this._element.classList.toggle("active"))}static jQueryInterface(r){return this.each(function(){const l=E.getOrCreateInstance(this);r==="toggle"&&l[r]()})}}I.on(document,"click.bs.button.data-api",_,u=>{u.preventDefault();const r=u.target.closest(_);E.getOrCreateInstance(r).toggle()}),$(E);const D=".bs.swipe",O=`touchstart${D}`,k=`touchmove${D}`,W=`touchend${D}`,U=`pointerdown${D}`,F=`pointerup${D}`,M={endCallback:null,leftCallback:null,rightCallback:null},ne={endCallback:"(function|null)",leftCallback:"(function|null)",rightCallback:"(function|null)"};class z extends Zt{constructor(r,l){super(),this._element=r,r&&z.isSupported()&&(this._config=this._getConfig(l),this._deltaX=0,this._supportPointerEvents=!!window.PointerEvent,this._initEvents())}static get Default(){return M}static get DefaultType(){return ne}static get NAME(){return"swipe"}dispose(){I.off(this._element,D)}_start(r){this._supportPointerEvents?this._eventIsPointerPenTouch(r)&&(this._deltaX=r.clientX):this._deltaX=r.touches[0].clientX}_end(r){this._eventIsPointerPenTouch(r)&&(this._deltaX=r.clientX-this._deltaX),this._handleSwipe(),N(this._config.endCallback)}_move(r){this._deltaX=r.touches&&r.touches.length>1?0:r.touches[0].clientX-this._deltaX}_handleSwipe(){const r=Math.abs(this._deltaX);if(r<=40)return;const l=r/this._deltaX;this._deltaX=0,l&&N(l>0?this._config.rightCallback:this._config.leftCallback)}_initEvents(){this._supportPointerEvents?(I.on(this._element,U,r=>this._start(r)),I.on(this._element,F,r=>this._end(r)),this._element.classList.add("pointer-event")):(I.on(this._element,O,r=>this._start(r)),I.on(this._element,k,r=>this._move(r)),I.on(this._element,W,r=>this._end(r)))}_eventIsPointerPenTouch(r){return this._supportPointerEvents&&(r.pointerType==="pen"||r.pointerType==="touch")}static isSupported(){return"ontouchstart"in document.documentElement||navigator.maxTouchPoints>0}}const Q=".bs.carousel",re=".data-api",pe="next",Ce="prev",ye="left",Xe="right",Qe=`slide${Q}`,at=`slid${Q}`,lt=`keydown${Q}`,Wn=`mouseenter${Q}`,$r=`mouseleave${Q}`,ct=`dragstart${Q}`,It=`load${Q}${re}`,Fr=`click${Q}${re}`,el="carousel",jr="active",tl=".active",nl=".carousel-item",Dh=tl+nl,Nh={ArrowLeft:Xe,ArrowRight:ye},kh={interval:5e3,keyboard:!0,pause:"hover",ride:!1,touch:!0,wrap:!0},Mh={interval:"(number|boolean)",keyboard:"boolean",pause:"(string|boolean)",ride:"(boolean|string)",touch:"boolean",wrap:"boolean"};class bs extends Be{constructor(r,l){super(r,l),this._interval=null,this._activeElement=null,this._isSliding=!1,this.touchTimeout=null,this._swipeHelper=null,this._indicatorsElement=A.findOne(".carousel-indicators",this._element),this._addEventListeners(),this._config.ride===el&&this.cycle()}static get Default(){return kh}static get DefaultType(){return Mh}static get NAME(){return"carousel"}next(){this._slide(pe)}nextWhenVisible(){!document.hidden&&p(this._element)&&this.next()}prev(){this._slide(Ce)}pause(){this._isSliding&&a(this._element),this._clearInterval()}cycle(){this._clearInterval(),this._updateInterval(),this._interval=setInterval(()=>this.nextWhenVisible(),this._config.interval)}_maybeEnableCycle(){this._config.ride&&(this._isSliding?I.one(this._element,at,()=>this.cycle()):this.cycle())}to(r){const l=this._getItems();if(r>l.length-1||r<0)return;if(this._isSliding)return void I.one(this._element,at,()=>this.to(r));const h=this._getItemIndex(this._getActive());if(h===r)return;const y=r>h?pe:Ce;this._slide(y,l[r])}dispose(){this._swipeHelper&&this._swipeHelper.dispose(),super.dispose()}_configAfterMerge(r){return r.defaultInterval=r.interval,r}_addEventListeners(){this._config.keyboard&&I.on(this._element,lt,r=>this._keydown(r)),this._config.pause==="hover"&&(I.on(this._element,Wn,()=>this.pause()),I.on(this._element,$r,()=>this._maybeEnableCycle())),this._config.touch&&z.isSupported()&&this._addTouchEventListeners()}_addTouchEventListeners(){for(const l of A.find(".carousel-item img",this._element))I.on(l,ct,h=>h.preventDefault());const r={leftCallback:()=>this._slide(this._directionToOrder(ye)),rightCallback:()=>this._slide(this._directionToOrder(Xe)),endCallback:()=>{this._config.pause==="hover"&&(this.pause(),this.touchTimeout&&clearTimeout(this.touchTimeout),this.touchTimeout=setTimeout(()=>this._maybeEnableCycle(),500+this._config.interval))}};this._swipeHelper=new z(this._element,r)}_keydown(r){if(/input|textarea/i.test(r.target.tagName))return;const l=Nh[r.key];l&&(r.preventDefault(),this._slide(this._directionToOrder(l)))}_getItemIndex(r){return this._getItems().indexOf(r)}_setActiveIndicatorElement(r){if(!this._indicatorsElement)return;const l=A.findOne(tl,this._indicatorsElement);l.classList.remove(jr),l.removeAttribute("aria-current");const h=A.findOne(`[data-bs-slide-to="${r}"]`,this._indicatorsElement);h&&(h.classList.add(jr),h.setAttribute("aria-current","true"))}_updateInterval(){const r=this._activeElement||this._getActive();if(!r)return;const l=Number.parseInt(r.getAttribute("data-bs-interval"),10);this._config.interval=l||this._config.defaultInterval}_slide(r,l=null){if(this._isSliding)return;const h=this._getActive(),y=r===pe,v=l||H(this._getItems(),h,y,this._config.wrap);if(v===h)return;const S=this._getItemIndex(v),L=K=>I.trigger(this._element,K,{relatedTarget:v,direction:this._orderToDirection(r),from:this._getItemIndex(h),to:S});if(L(Qe).defaultPrevented||!h||!v)return;const j=!!this._interval;this.pause(),this._isSliding=!0,this._setActiveIndicatorElement(S),this._activeElement=v;const J=y?"carousel-item-start":"carousel-item-end",X=y?"carousel-item-next":"carousel-item-prev";v.classList.add(X),w(v),h.classList.add(J),v.classList.add(J),this._queueCallback(()=>{v.classList.remove(J,X),v.classList.add(jr),h.classList.remove(jr,X,J),this._isSliding=!1,L(at)},h,this._isAnimated()),j&&this.cycle()}_isAnimated(){return this._element.classList.contains("slide")}_getActive(){return A.findOne(Dh,this._element)}_getItems(){return A.find(nl,this._element)}_clearInterval(){this._interval&&(clearInterval(this._interval),this._interval=null)}_directionToOrder(r){return R()?r===ye?Ce:pe:r===ye?pe:Ce}_orderToDirection(r){return R()?r===Ce?ye:Xe:r===Ce?Xe:ye}static jQueryInterface(r){return this.each(function(){const l=bs.getOrCreateInstance(this,r);if(typeof r!="number"){if(typeof r=="string"){if(l[r]===void 0||r.startsWith("_")||r==="constructor")throw new TypeError(`No method named "${r}"`);l[r]()}}else l.to(r)})}}I.on(document,Fr,"[data-bs-slide], [data-bs-slide-to]",function(u){const r=A.getElementFromSelector(this);if(!r||!r.classList.contains(el))return;u.preventDefault();const l=bs.getOrCreateInstance(r),h=this.getAttribute("data-bs-slide-to");return h?(l.to(h),void l._maybeEnableCycle()):rt.getDataAttribute(this,"slide")==="next"?(l.next(),void l._maybeEnableCycle()):(l.prev(),void l._maybeEnableCycle())}),I.on(window,It,()=>{const u=A.find('[data-bs-ride="carousel"]');for(const r of u)bs.getOrCreateInstance(r)}),$(bs);const Gs=".bs.collapse",$h=`show${Gs}`,Fh=`shown${Gs}`,jh=`hide${Gs}`,Bh=`hidden${Gs}`,Hh=`click${Gs}.data-api`,eo="show",ys="collapse",Br="collapsing",Uh=`:scope .${ys} .${ys}`,to='[data-bs-toggle="collapse"]',Vh={parent:null,toggle:!0},qh={parent:"(null|element)",toggle:"boolean"};class vs extends Be{constructor(r,l){super(r,l),this._isTransitioning=!1,this._triggerArray=[];const h=A.find(to);for(const y of h){const v=A.getSelectorFromElement(y),S=A.find(v).filter(L=>L===this._element);v!==null&&S.length&&this._triggerArray.push(y)}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return Vh}static get DefaultType(){return qh}static get NAME(){return"collapse"}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let r=[];if(this._config.parent&&(r=this._getFirstLevelChildren(".collapse.show, .collapse.collapsing").filter(y=>y!==this._element).map(y=>vs.getOrCreateInstance(y,{toggle:!1}))),r.length&&r[0]._isTransitioning||I.trigger(this._element,$h).defaultPrevented)return;for(const y of r)y.hide();const l=this._getDimension();this._element.classList.remove(ys),this._element.classList.add(Br),this._element.style[l]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;const h=`scroll${l[0].toUpperCase()+l.slice(1)}`;this._queueCallback(()=>{this._isTransitioning=!1,this._element.classList.remove(Br),this._element.classList.add(ys,eo),this._element.style[l]="",I.trigger(this._element,Fh)},this._element,!0),this._element.style[l]=`${this._element[h]}px`}hide(){if(this._isTransitioning||!this._isShown()||I.trigger(this._element,jh).defaultPrevented)return;const r=this._getDimension();this._element.style[r]=`${this._element.getBoundingClientRect()[r]}px`,w(this._element),this._element.classList.add(Br),this._element.classList.remove(ys,eo);for(const l of this._triggerArray){const h=A.getElementFromSelector(l);h&&!this._isShown(h)&&this._addAriaAndCollapsedClass([l],!1)}this._isTransitioning=!0,this._element.style[r]="",this._queueCallback(()=>{this._isTransitioning=!1,this._element.classList.remove(Br),this._element.classList.add(ys),I.trigger(this._element,Bh)},this._element,!0)}_isShown(r=this._element){return r.classList.contains(eo)}_configAfterMerge(r){return r.toggle=!!r.toggle,r.parent=f(r.parent),r}_getDimension(){return this._element.classList.contains("collapse-horizontal")?"width":"height"}_initializeChildren(){if(!this._config.parent)return;const r=this._getFirstLevelChildren(to);for(const l of r){const h=A.getElementFromSelector(l);h&&this._addAriaAndCollapsedClass([l],this._isShown(h))}}_getFirstLevelChildren(r){const l=A.find(Uh,this._config.parent);return A.find(r,this._config.parent).filter(h=>!l.includes(h))}_addAriaAndCollapsedClass(r,l){if(r.length)for(const h of r)h.classList.toggle("collapsed",!l),h.setAttribute("aria-expanded",l)}static jQueryInterface(r){const l={};return typeof r=="string"&&/show|hide/.test(r)&&(l.toggle=!1),this.each(function(){const h=vs.getOrCreateInstance(this,l);if(typeof r=="string"){if(h[r]===void 0)throw new TypeError(`No method named "${r}"`);h[r]()}})}}I.on(document,Hh,to,function(u){(u.target.tagName==="A"||u.delegateTarget&&u.delegateTarget.tagName==="A")&&u.preventDefault();for(const r of A.getMultipleElementsFromSelector(this))vs.getOrCreateInstance(r,{toggle:!1}).toggle()}),$(vs);var ut="top",vt="bottom",wt="right",ft="left",Hr="auto",ws=[ut,vt,wt,ft],zn="start",Es="end",sl="clippingParents",no="viewport",Cs="popper",rl="reference",so=ws.reduce(function(u,r){return u.concat([r+"-"+zn,r+"-"+Es])},[]),ro=[].concat(ws,[Hr]).reduce(function(u,r){return u.concat([r,r+"-"+zn,r+"-"+Es])},[]),il="beforeRead",ol="read",al="afterRead",ll="beforeMain",cl="main",ul="afterMain",fl="beforeWrite",dl="write",hl="afterWrite",pl=[il,ol,al,ll,cl,ul,fl,dl,hl];function en(u){return u?(u.nodeName||"").toLowerCase():null}function Et(u){if(u==null)return window;if(u.toString()!=="[object Window]"){var r=u.ownerDocument;return r&&r.defaultView||window}return u}function Kn(u){return u instanceof Et(u).Element||u instanceof Element}function Lt(u){return u instanceof Et(u).HTMLElement||u instanceof HTMLElement}function io(u){return typeof ShadowRoot<"u"&&(u instanceof Et(u).ShadowRoot||u instanceof ShadowRoot)}const oo={name:"applyStyles",enabled:!0,phase:"write",fn:function(u){var r=u.state;Object.keys(r.elements).forEach(function(l){var h=r.styles[l]||{},y=r.attributes[l]||{},v=r.elements[l];Lt(v)&&en(v)&&(Object.assign(v.style,h),Object.keys(y).forEach(function(S){var L=y[S];L===!1?v.removeAttribute(S):v.setAttribute(S,L===!0?"":L)}))})},effect:function(u){var r=u.state,l={popper:{position:r.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(r.elements.popper.style,l.popper),r.styles=l,r.elements.arrow&&Object.assign(r.elements.arrow.style,l.arrow),function(){Object.keys(r.elements).forEach(function(h){var y=r.elements[h],v=r.attributes[h]||{},S=Object.keys(r.styles.hasOwnProperty(h)?r.styles[h]:l[h]).reduce(function(L,j){return L[j]="",L},{});Lt(y)&&en(y)&&(Object.assign(y.style,S),Object.keys(v).forEach(function(L){y.removeAttribute(L)}))})}},requires:["computeStyles"]};function tn(u){return u.split("-")[0]}var Gn=Math.max,Ur=Math.min,Ss=Math.round;function ao(){var u=navigator.userAgentData;return u!=null&&u.brands&&Array.isArray(u.brands)?u.brands.map(function(r){return r.brand+"/"+r.version}).join(" "):navigator.userAgent}function ml(){return!/^((?!chrome|android).)*safari/i.test(ao())}function Ts(u,r,l){r===void 0&&(r=!1),l===void 0&&(l=!1);var h=u.getBoundingClientRect(),y=1,v=1;r&&Lt(u)&&(y=u.offsetWidth>0&&Ss(h.width)/u.offsetWidth||1,v=u.offsetHeight>0&&Ss(h.height)/u.offsetHeight||1);var S=(Kn(u)?Et(u):window).visualViewport,L=!ml()&&l,j=(h.left+(L&&S?S.offsetLeft:0))/y,J=(h.top+(L&&S?S.offsetTop:0))/v,X=h.width/y,K=h.height/v;return{width:X,height:K,top:J,right:j+X,bottom:J+K,left:j,x:j,y:J}}function lo(u){var r=Ts(u),l=u.offsetWidth,h=u.offsetHeight;return Math.abs(r.width-l)<=1&&(l=r.width),Math.abs(r.height-h)<=1&&(h=r.height),{x:u.offsetLeft,y:u.offsetTop,width:l,height:h}}function gl(u,r){var l=r.getRootNode&&r.getRootNode();if(u.contains(r))return!0;if(l&&io(l)){var h=r;do{if(h&&u.isSameNode(h))return!0;h=h.parentNode||h.host}while(h)}return!1}function hn(u){return Et(u).getComputedStyle(u)}function Wh(u){return["table","td","th"].indexOf(en(u))>=0}function An(u){return((Kn(u)?u.ownerDocument:u.document)||window.document).documentElement}function Vr(u){return en(u)==="html"?u:u.assignedSlot||u.parentNode||(io(u)?u.host:null)||An(u)}function _l(u){return Lt(u)&&hn(u).position!=="fixed"?u.offsetParent:null}function Js(u){for(var r=Et(u),l=_l(u);l&&Wh(l)&&hn(l).position==="static";)l=_l(l);return l&&(en(l)==="html"||en(l)==="body"&&hn(l).position==="static")?r:l||function(h){var y=/firefox/i.test(ao());if(/Trident/i.test(ao())&&Lt(h)&&hn(h).position==="fixed")return null;var v=Vr(h);for(io(v)&&(v=v.host);Lt(v)&&["html","body"].indexOf(en(v))<0;){var S=hn(v);if(S.transform!=="none"||S.perspective!=="none"||S.contain==="paint"||["transform","perspective"].indexOf(S.willChange)!==-1||y&&S.willChange==="filter"||y&&S.filter&&S.filter!=="none")return v;v=v.parentNode}return null}(u)||r}function co(u){return["top","bottom"].indexOf(u)>=0?"x":"y"}function Xs(u,r,l){return Gn(u,Ur(r,l))}function bl(u){return Object.assign({},{top:0,right:0,bottom:0,left:0},u)}function yl(u,r){return r.reduce(function(l,h){return l[h]=u,l},{})}const vl={name:"arrow",enabled:!0,phase:"main",fn:function(u){var r,l=u.state,h=u.name,y=u.options,v=l.elements.arrow,S=l.modifiersData.popperOffsets,L=tn(l.placement),j=co(L),J=[ft,wt].indexOf(L)>=0?"height":"width";if(v&&S){var X=function(De,Re){return bl(typeof(De=typeof De=="function"?De(Object.assign({},Re.rects,{placement:Re.placement})):De)!="number"?De:yl(De,ws))}(y.padding,l),K=lo(v),he=j==="y"?ut:ft,se=j==="y"?vt:wt,ce=l.rects.reference[J]+l.rects.reference[j]-S[j]-l.rects.popper[J],ie=S[j]-l.rects.reference[j],ue=Js(v),Le=ue?j==="y"?ue.clientHeight||0:ue.clientWidth||0:0,Fe=ce/2-ie/2,_e=X[he],Ae=Le-K[J]-X[se],me=Le/2-K[J]/2+Fe,we=Xs(_e,me,Ae),xe=j;l.modifiersData[h]=((r={})[xe]=we,r.centerOffset=we-me,r)}},effect:function(u){var r=u.state,l=u.options.element,h=l===void 0?"[data-popper-arrow]":l;h!=null&&(typeof h!="string"||(h=r.elements.popper.querySelector(h)))&&gl(r.elements.popper,h)&&(r.elements.arrow=h)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function As(u){return u.split("-")[1]}var zh={top:"auto",right:"auto",bottom:"auto",left:"auto"};function wl(u){var r,l=u.popper,h=u.popperRect,y=u.placement,v=u.variation,S=u.offsets,L=u.position,j=u.gpuAcceleration,J=u.adaptive,X=u.roundOffsets,K=u.isFixed,he=S.x,se=he===void 0?0:he,ce=S.y,ie=ce===void 0?0:ce,ue=typeof X=="function"?X({x:se,y:ie}):{x:se,y:ie};se=ue.x,ie=ue.y;var Le=S.hasOwnProperty("x"),Fe=S.hasOwnProperty("y"),_e=ft,Ae=ut,me=window;if(J){var we=Js(l),xe="clientHeight",De="clientWidth";we===Et(l)&&hn(we=An(l)).position!=="static"&&L==="absolute"&&(xe="scrollHeight",De="scrollWidth"),(y===ut||(y===ft||y===wt)&&v===Es)&&(Ae=vt,ie-=(K&&we===me&&me.visualViewport?me.visualViewport.height:we[xe])-h.height,ie*=j?1:-1),y!==ft&&(y!==ut&&y!==vt||v!==Es)||(_e=wt,se-=(K&&we===me&&me.visualViewport?me.visualViewport.width:we[De])-h.width,se*=j?1:-1)}var Re,We=Object.assign({position:L},J&&zh),Ct=X===!0?function(Ut,dt){var Nt=Ut.x,kt=Ut.y,Ve=dt.devicePixelRatio||1;return{x:Ss(Nt*Ve)/Ve||0,y:Ss(kt*Ve)/Ve||0}}({x:se,y:ie},Et(l)):{x:se,y:ie};return se=Ct.x,ie=Ct.y,j?Object.assign({},We,((Re={})[Ae]=Fe?"0":"",Re[_e]=Le?"0":"",Re.transform=(me.devicePixelRatio||1)<=1?"translate("+se+"px, "+ie+"px)":"translate3d("+se+"px, "+ie+"px, 0)",Re)):Object.assign({},We,((r={})[Ae]=Fe?ie+"px":"",r[_e]=Le?se+"px":"",r.transform="",r))}const uo={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(u){var r=u.state,l=u.options,h=l.gpuAcceleration,y=h===void 0||h,v=l.adaptive,S=v===void 0||v,L=l.roundOffsets,j=L===void 0||L,J={placement:tn(r.placement),variation:As(r.placement),popper:r.elements.popper,popperRect:r.rects.popper,gpuAcceleration:y,isFixed:r.options.strategy==="fixed"};r.modifiersData.popperOffsets!=null&&(r.styles.popper=Object.assign({},r.styles.popper,wl(Object.assign({},J,{offsets:r.modifiersData.popperOffsets,position:r.options.strategy,adaptive:S,roundOffsets:j})))),r.modifiersData.arrow!=null&&(r.styles.arrow=Object.assign({},r.styles.arrow,wl(Object.assign({},J,{offsets:r.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:j})))),r.attributes.popper=Object.assign({},r.attributes.popper,{"data-popper-placement":r.placement})},data:{}};var qr={passive:!0};const fo={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(u){var r=u.state,l=u.instance,h=u.options,y=h.scroll,v=y===void 0||y,S=h.resize,L=S===void 0||S,j=Et(r.elements.popper),J=[].concat(r.scrollParents.reference,r.scrollParents.popper);return v&&J.forEach(function(X){X.addEventListener("scroll",l.update,qr)}),L&&j.addEventListener("resize",l.update,qr),function(){v&&J.forEach(function(X){X.removeEventListener("scroll",l.update,qr)}),L&&j.removeEventListener("resize",l.update,qr)}},data:{}};var Kh={left:"right",right:"left",bottom:"top",top:"bottom"};function Wr(u){return u.replace(/left|right|bottom|top/g,function(r){return Kh[r]})}var Gh={start:"end",end:"start"};function El(u){return u.replace(/start|end/g,function(r){return Gh[r]})}function ho(u){var r=Et(u);return{scrollLeft:r.pageXOffset,scrollTop:r.pageYOffset}}function po(u){return Ts(An(u)).left+ho(u).scrollLeft}function mo(u){var r=hn(u),l=r.overflow,h=r.overflowX,y=r.overflowY;return/auto|scroll|overlay|hidden/.test(l+y+h)}function Cl(u){return["html","body","#document"].indexOf(en(u))>=0?u.ownerDocument.body:Lt(u)&&mo(u)?u:Cl(Vr(u))}function Qs(u,r){var l;r===void 0&&(r=[]);var h=Cl(u),y=h===((l=u.ownerDocument)==null?void 0:l.body),v=Et(h),S=y?[v].concat(v.visualViewport||[],mo(h)?h:[]):h,L=r.concat(S);return y?L:L.concat(Qs(Vr(S)))}function go(u){return Object.assign({},u,{left:u.x,top:u.y,right:u.x+u.width,bottom:u.y+u.height})}function Sl(u,r,l){return r===no?go(function(h,y){var v=Et(h),S=An(h),L=v.visualViewport,j=S.clientWidth,J=S.clientHeight,X=0,K=0;if(L){j=L.width,J=L.height;var he=ml();(he||!he&&y==="fixed")&&(X=L.offsetLeft,K=L.offsetTop)}return{width:j,height:J,x:X+po(h),y:K}}(u,l)):Kn(r)?function(h,y){var v=Ts(h,!1,y==="fixed");return v.top=v.top+h.clientTop,v.left=v.left+h.clientLeft,v.bottom=v.top+h.clientHeight,v.right=v.left+h.clientWidth,v.width=h.clientWidth,v.height=h.clientHeight,v.x=v.left,v.y=v.top,v}(r,l):go(function(h){var y,v=An(h),S=ho(h),L=(y=h.ownerDocument)==null?void 0:y.body,j=Gn(v.scrollWidth,v.clientWidth,L?L.scrollWidth:0,L?L.clientWidth:0),J=Gn(v.scrollHeight,v.clientHeight,L?L.scrollHeight:0,L?L.clientHeight:0),X=-S.scrollLeft+po(h),K=-S.scrollTop;return hn(L||v).direction==="rtl"&&(X+=Gn(v.clientWidth,L?L.clientWidth:0)-j),{width:j,height:J,x:X,y:K}}(An(u)))}function Tl(u){var r,l=u.reference,h=u.element,y=u.placement,v=y?tn(y):null,S=y?As(y):null,L=l.x+l.width/2-h.width/2,j=l.y+l.height/2-h.height/2;switch(v){case ut:r={x:L,y:l.y-h.height};break;case vt:r={x:L,y:l.y+l.height};break;case wt:r={x:l.x+l.width,y:j};break;case ft:r={x:l.x-h.width,y:j};break;default:r={x:l.x,y:l.y}}var J=v?co(v):null;if(J!=null){var X=J==="y"?"height":"width";switch(S){case zn:r[J]=r[J]-(l[X]/2-h[X]/2);break;case Es:r[J]=r[J]+(l[X]/2-h[X]/2)}}return r}function Os(u,r){r===void 0&&(r={});var l=r,h=l.placement,y=h===void 0?u.placement:h,v=l.strategy,S=v===void 0?u.strategy:v,L=l.boundary,j=L===void 0?sl:L,J=l.rootBoundary,X=J===void 0?no:J,K=l.elementContext,he=K===void 0?Cs:K,se=l.altBoundary,ce=se!==void 0&&se,ie=l.padding,ue=ie===void 0?0:ie,Le=bl(typeof ue!="number"?ue:yl(ue,ws)),Fe=he===Cs?rl:Cs,_e=u.rects.popper,Ae=u.elements[ce?Fe:he],me=function(dt,Nt,kt,Ve){var nn=Nt==="clippingParents"?function(Ne){var ht=Qs(Vr(Ne)),Mt=["absolute","fixed"].indexOf(hn(Ne).position)>=0&&Lt(Ne)?Js(Ne):Ne;return Kn(Mt)?ht.filter(function(xn){return Kn(xn)&&gl(xn,Mt)&&en(xn)!=="body"}):[]}(dt):[].concat(Nt),sn=[].concat(nn,[kt]),Ps=sn[0],Ye=sn.reduce(function(Ne,ht){var Mt=Sl(dt,ht,Ve);return Ne.top=Gn(Mt.top,Ne.top),Ne.right=Ur(Mt.right,Ne.right),Ne.bottom=Ur(Mt.bottom,Ne.bottom),Ne.left=Gn(Mt.left,Ne.left),Ne},Sl(dt,Ps,Ve));return Ye.width=Ye.right-Ye.left,Ye.height=Ye.bottom-Ye.top,Ye.x=Ye.left,Ye.y=Ye.top,Ye}(Kn(Ae)?Ae:Ae.contextElement||An(u.elements.popper),j,X,S),we=Ts(u.elements.reference),xe=Tl({reference:we,element:_e,strategy:"absolute",placement:y}),De=go(Object.assign({},_e,xe)),Re=he===Cs?De:we,We={top:me.top-Re.top+Le.top,bottom:Re.bottom-me.bottom+Le.bottom,left:me.left-Re.left+Le.left,right:Re.right-me.right+Le.right},Ct=u.modifiersData.offset;if(he===Cs&&Ct){var Ut=Ct[y];Object.keys(We).forEach(function(dt){var Nt=[wt,vt].indexOf(dt)>=0?1:-1,kt=[ut,vt].indexOf(dt)>=0?"y":"x";We[dt]+=Ut[kt]*Nt})}return We}function Jh(u,r){r===void 0&&(r={});var l=r,h=l.placement,y=l.boundary,v=l.rootBoundary,S=l.padding,L=l.flipVariations,j=l.allowedAutoPlacements,J=j===void 0?ro:j,X=As(h),K=X?L?so:so.filter(function(ce){return As(ce)===X}):ws,he=K.filter(function(ce){return J.indexOf(ce)>=0});he.length===0&&(he=K);var se=he.reduce(function(ce,ie){return ce[ie]=Os(u,{placement:ie,boundary:y,rootBoundary:v,padding:S})[tn(ie)],ce},{});return Object.keys(se).sort(function(ce,ie){return se[ce]-se[ie]})}const Al={name:"flip",enabled:!0,phase:"main",fn:function(u){var r=u.state,l=u.options,h=u.name;if(!r.modifiersData[h]._skip){for(var y=l.mainAxis,v=y===void 0||y,S=l.altAxis,L=S===void 0||S,j=l.fallbackPlacements,J=l.padding,X=l.boundary,K=l.rootBoundary,he=l.altBoundary,se=l.flipVariations,ce=se===void 0||se,ie=l.allowedAutoPlacements,ue=r.options.placement,Le=tn(ue),Fe=j||(Le!==ue&&ce?function(Ne){if(tn(Ne)===Hr)return[];var ht=Wr(Ne);return[El(Ne),ht,El(ht)]}(ue):[Wr(ue)]),_e=[ue].concat(Fe).reduce(function(Ne,ht){return Ne.concat(tn(ht)===Hr?Jh(r,{placement:ht,boundary:X,rootBoundary:K,padding:J,flipVariations:ce,allowedAutoPlacements:ie}):ht)},[]),Ae=r.rects.reference,me=r.rects.popper,we=new Map,xe=!0,De=_e[0],Re=0;Re<_e.length;Re++){var We=_e[Re],Ct=tn(We),Ut=As(We)===zn,dt=[ut,vt].indexOf(Ct)>=0,Nt=dt?"width":"height",kt=Os(r,{placement:We,boundary:X,rootBoundary:K,altBoundary:he,padding:J}),Ve=dt?Ut?wt:ft:Ut?vt:ut;Ae[Nt]>me[Nt]&&(Ve=Wr(Ve));var nn=Wr(Ve),sn=[];if(v&&sn.push(kt[Ct]<=0),L&&sn.push(kt[Ve]<=0,kt[nn]<=0),sn.every(function(Ne){return Ne})){De=We,xe=!1;break}we.set(We,sn)}if(xe)for(var Ps=function(Ne){var ht=_e.find(function(Mt){var xn=we.get(Mt);if(xn)return xn.slice(0,Ne).every(function(ei){return ei})});if(ht)return De=ht,"break"},Ye=ce?3:1;Ye>0&&Ps(Ye)!=="break";Ye--);r.placement!==De&&(r.modifiersData[h]._skip=!0,r.placement=De,r.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function Ol(u,r,l){return l===void 0&&(l={x:0,y:0}),{top:u.top-r.height-l.y,right:u.right-r.width+l.x,bottom:u.bottom-r.height+l.y,left:u.left-r.width-l.x}}function xl(u){return[ut,wt,vt,ft].some(function(r){return u[r]>=0})}const Rl={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(u){var r=u.state,l=u.name,h=r.rects.reference,y=r.rects.popper,v=r.modifiersData.preventOverflow,S=Os(r,{elementContext:"reference"}),L=Os(r,{altBoundary:!0}),j=Ol(S,h),J=Ol(L,y,v),X=xl(j),K=xl(J);r.modifiersData[l]={referenceClippingOffsets:j,popperEscapeOffsets:J,isReferenceHidden:X,hasPopperEscaped:K},r.attributes.popper=Object.assign({},r.attributes.popper,{"data-popper-reference-hidden":X,"data-popper-escaped":K})}},Pl={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(u){var r=u.state,l=u.options,h=u.name,y=l.offset,v=y===void 0?[0,0]:y,S=ro.reduce(function(X,K){return X[K]=function(he,se,ce){var ie=tn(he),ue=[ft,ut].indexOf(ie)>=0?-1:1,Le=typeof ce=="function"?ce(Object.assign({},se,{placement:he})):ce,Fe=Le[0],_e=Le[1];return Fe=Fe||0,_e=(_e||0)*ue,[ft,wt].indexOf(ie)>=0?{x:_e,y:Fe}:{x:Fe,y:_e}}(K,r.rects,v),X},{}),L=S[r.placement],j=L.x,J=L.y;r.modifiersData.popperOffsets!=null&&(r.modifiersData.popperOffsets.x+=j,r.modifiersData.popperOffsets.y+=J),r.modifiersData[h]=S}},_o={name:"popperOffsets",enabled:!0,phase:"read",fn:function(u){var r=u.state,l=u.name;r.modifiersData[l]=Tl({reference:r.rects.reference,element:r.rects.popper,strategy:"absolute",placement:r.placement})},data:{}},Il={name:"preventOverflow",enabled:!0,phase:"main",fn:function(u){var r=u.state,l=u.options,h=u.name,y=l.mainAxis,v=y===void 0||y,S=l.altAxis,L=S!==void 0&&S,j=l.boundary,J=l.rootBoundary,X=l.altBoundary,K=l.padding,he=l.tether,se=he===void 0||he,ce=l.tetherOffset,ie=ce===void 0?0:ce,ue=Os(r,{boundary:j,rootBoundary:J,padding:K,altBoundary:X}),Le=tn(r.placement),Fe=As(r.placement),_e=!Fe,Ae=co(Le),me=Ae==="x"?"y":"x",we=r.modifiersData.popperOffsets,xe=r.rects.reference,De=r.rects.popper,Re=typeof ie=="function"?ie(Object.assign({},r.rects,{placement:r.placement})):ie,We=typeof Re=="number"?{mainAxis:Re,altAxis:Re}:Object.assign({mainAxis:0,altAxis:0},Re),Ct=r.modifiersData.offset?r.modifiersData.offset[r.placement]:null,Ut={x:0,y:0};if(we){if(v){var dt,Nt=Ae==="y"?ut:ft,kt=Ae==="y"?vt:wt,Ve=Ae==="y"?"height":"width",nn=we[Ae],sn=nn+ue[Nt],Ps=nn-ue[kt],Ye=se?-De[Ve]/2:0,Ne=Fe===zn?xe[Ve]:De[Ve],ht=Fe===zn?-De[Ve]:-xe[Ve],Mt=r.elements.arrow,xn=se&&Mt?lo(Mt):{width:0,height:0},ei=r.modifiersData["arrow#persistent"]?r.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},_c=ei[Nt],bc=ei[kt],ti=Xs(0,xe[Ve],xn[Ve]),Sm=_e?xe[Ve]/2-Ye-ti-_c-We.mainAxis:Ne-ti-_c-We.mainAxis,Tm=_e?-xe[Ve]/2+Ye+ti+bc+We.mainAxis:ht+ti+bc+We.mainAxis,Po=r.elements.arrow&&Js(r.elements.arrow),Am=Po?Ae==="y"?Po.clientTop||0:Po.clientLeft||0:0,yc=(dt=Ct==null?void 0:Ct[Ae])!=null?dt:0,Om=nn+Tm-yc,vc=Xs(se?Ur(sn,nn+Sm-yc-Am):sn,nn,se?Gn(Ps,Om):Ps);we[Ae]=vc,Ut[Ae]=vc-nn}if(L){var wc,xm=Ae==="x"?ut:ft,Rm=Ae==="x"?vt:wt,ns=we[me],ni=me==="y"?"height":"width",Ec=ns+ue[xm],Cc=ns-ue[Rm],Io=[ut,ft].indexOf(Le)!==-1,Sc=(wc=Ct==null?void 0:Ct[me])!=null?wc:0,Tc=Io?Ec:ns-xe[ni]-De[ni]-Sc+We.altAxis,Ac=Io?ns+xe[ni]+De[ni]-Sc-We.altAxis:Cc,Oc=se&&Io?function(Pm,Im,Lo){var xc=Xs(Pm,Im,Lo);return xc>Lo?Lo:xc}(Tc,ns,Ac):Xs(se?Tc:Ec,ns,se?Ac:Cc);we[me]=Oc,Ut[me]=Oc-ns}r.modifiersData[h]=Ut}},requiresIfExists:["offset"]};function Xh(u,r,l){l===void 0&&(l=!1);var h,y,v=Lt(r),S=Lt(r)&&function(K){var he=K.getBoundingClientRect(),se=Ss(he.width)/K.offsetWidth||1,ce=Ss(he.height)/K.offsetHeight||1;return se!==1||ce!==1}(r),L=An(r),j=Ts(u,S,l),J={scrollLeft:0,scrollTop:0},X={x:0,y:0};return(v||!v&&!l)&&((en(r)!=="body"||mo(L))&&(J=(h=r)!==Et(h)&&Lt(h)?{scrollLeft:(y=h).scrollLeft,scrollTop:y.scrollTop}:ho(h)),Lt(r)?((X=Ts(r,!0)).x+=r.clientLeft,X.y+=r.clientTop):L&&(X.x=po(L))),{x:j.left+J.scrollLeft-X.x,y:j.top+J.scrollTop-X.y,width:j.width,height:j.height}}function Qh(u){var r=new Map,l=new Set,h=[];function y(v){l.add(v.name),[].concat(v.requires||[],v.requiresIfExists||[]).forEach(function(S){if(!l.has(S)){var L=r.get(S);L&&y(L)}}),h.push(v)}return u.forEach(function(v){r.set(v.name,v)}),u.forEach(function(v){l.has(v.name)||y(v)}),h}var Ll={placement:"bottom",modifiers:[],strategy:"absolute"};function Dl(){for(var u=arguments.length,r=new Array(u),l=0;lNumber.parseInt(l,10)):typeof r=="function"?l=>r(l,this._element):r}_getPopperConfig(){const r={placement:this._getPlacement(),modifiers:[{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"offset",options:{offset:this._getOffset()}}]};return(this._inNavbar||this._config.display==="static")&&(rt.setDataAttribute(this._menu,"popper","static"),r.modifiers=[{name:"applyStyles",enabled:!1}]),{...r,...N(this._config.popperConfig,[r])}}_selectMenuItem({key:r,target:l}){const h=A.find(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",this._menu).filter(y=>p(y));h.length&&H(h,l,r===Ml,!h.includes(l)).focus()}static jQueryInterface(r){return this.each(function(){const l=Ht.getOrCreateInstance(this,r);if(typeof r=="string"){if(l[r]===void 0)throw new TypeError(`No method named "${r}"`);l[r]()}})}static clearMenus(r){if(r.button===2||r.type==="keyup"&&r.key!=="Tab")return;const l=A.find(op);for(const h of l){const y=Ht.getInstance(h);if(!y||y._config.autoClose===!1)continue;const v=r.composedPath(),S=v.includes(y._menu);if(v.includes(y._element)||y._config.autoClose==="inside"&&!S||y._config.autoClose==="outside"&&S||y._menu.contains(r.target)&&(r.type==="keyup"&&r.key==="Tab"||/input|select|option|textarea|form/i.test(r.target.tagName)))continue;const L={relatedTarget:y._element};r.type==="click"&&(L.clickEvent=r),y._completeHide(L)}}static dataApiKeydownHandler(r){const l=/input|textarea/i.test(r.target.tagName),h=r.key==="Escape",y=[ep,Ml].includes(r.key);if(!y&&!h||l&&!h)return;r.preventDefault();const v=this.matches(Xn)?this:A.prev(this,Xn)[0]||A.next(this,Xn)[0]||A.findOne(Xn,r.delegateTarget.parentNode),S=Ht.getOrCreateInstance(v);if(y)return r.stopPropagation(),S.show(),void S._selectMenuItem(r);S._isShown()&&(r.stopPropagation(),S.hide(),v.focus())}}I.on(document,Fl,Xn,Ht.dataApiKeydownHandler),I.on(document,Fl,Kr,Ht.dataApiKeydownHandler),I.on(document,$l,Ht.clearMenus),I.on(document,ip,Ht.clearMenus),I.on(document,$l,Xn,function(u){u.preventDefault(),Ht.getOrCreateInstance(this).toggle()}),$(Ht);const jl="backdrop",Bl="show",Hl=`mousedown.bs.${jl}`,mp={className:"modal-backdrop",clickCallback:null,isAnimated:!1,isVisible:!0,rootElement:"body"},gp={className:"string",clickCallback:"(function|null)",isAnimated:"boolean",isVisible:"boolean",rootElement:"(element|string)"};class Ul extends Zt{constructor(r){super(),this._config=this._getConfig(r),this._isAppended=!1,this._element=null}static get Default(){return mp}static get DefaultType(){return gp}static get NAME(){return jl}show(r){if(!this._config.isVisible)return void N(r);this._append();const l=this._getElement();this._config.isAnimated&&w(l),l.classList.add(Bl),this._emulateAnimation(()=>{N(r)})}hide(r){this._config.isVisible?(this._getElement().classList.remove(Bl),this._emulateAnimation(()=>{this.dispose(),N(r)})):N(r)}dispose(){this._isAppended&&(I.off(this._element,Hl),this._element.remove(),this._isAppended=!1)}_getElement(){if(!this._element){const r=document.createElement("div");r.className=this._config.className,this._config.isAnimated&&r.classList.add("fade"),this._element=r}return this._element}_configAfterMerge(r){return r.rootElement=f(r.rootElement),r}_append(){if(this._isAppended)return;const r=this._getElement();this._config.rootElement.append(r),I.on(r,Hl,()=>{N(this._config.clickCallback)}),this._isAppended=!0}_emulateAnimation(r){B(r,this._getElement(),this._config.isAnimated)}}const Gr=".bs.focustrap",_p=`focusin${Gr}`,bp=`keydown.tab${Gr}`,Vl="backward",yp={autofocus:!0,trapElement:null},vp={autofocus:"boolean",trapElement:"element"};class ql extends Zt{constructor(r){super(),this._config=this._getConfig(r),this._isActive=!1,this._lastTabNavDirection=null}static get Default(){return yp}static get DefaultType(){return vp}static get NAME(){return"focustrap"}activate(){this._isActive||(this._config.autofocus&&this._config.trapElement.focus(),I.off(document,Gr),I.on(document,_p,r=>this._handleFocusin(r)),I.on(document,bp,r=>this._handleKeydown(r)),this._isActive=!0)}deactivate(){this._isActive&&(this._isActive=!1,I.off(document,Gr))}_handleFocusin(r){const{trapElement:l}=this._config;if(r.target===document||r.target===l||l.contains(r.target))return;const h=A.focusableChildren(l);h.length===0?l.focus():this._lastTabNavDirection===Vl?h[h.length-1].focus():h[0].focus()}_handleKeydown(r){r.key==="Tab"&&(this._lastTabNavDirection=r.shiftKey?Vl:"forward")}}const Wl=".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",zl=".sticky-top",Jr="padding-right",Kl="margin-right";class vo{constructor(){this._element=document.body}getWidth(){const r=document.documentElement.clientWidth;return Math.abs(window.innerWidth-r)}hide(){const r=this.getWidth();this._disableOverFlow(),this._setElementAttributes(this._element,Jr,l=>l+r),this._setElementAttributes(Wl,Jr,l=>l+r),this._setElementAttributes(zl,Kl,l=>l-r)}reset(){this._resetElementAttributes(this._element,"overflow"),this._resetElementAttributes(this._element,Jr),this._resetElementAttributes(Wl,Jr),this._resetElementAttributes(zl,Kl)}isOverflowing(){return this.getWidth()>0}_disableOverFlow(){this._saveInitialAttribute(this._element,"overflow"),this._element.style.overflow="hidden"}_setElementAttributes(r,l,h){const y=this.getWidth();this._applyManipulationCallback(r,v=>{if(v!==this._element&&window.innerWidth>v.clientWidth+y)return;this._saveInitialAttribute(v,l);const S=window.getComputedStyle(v).getPropertyValue(l);v.style.setProperty(l,`${h(Number.parseFloat(S))}px`)})}_saveInitialAttribute(r,l){const h=r.style.getPropertyValue(l);h&&rt.setDataAttribute(r,l,h)}_resetElementAttributes(r,l){this._applyManipulationCallback(r,h=>{const y=rt.getDataAttribute(h,l);y!==null?(rt.removeDataAttribute(h,l),h.style.setProperty(l,y)):h.style.removeProperty(l)})}_applyManipulationCallback(r,l){if(c(r))l(r);else for(const h of A.find(r,this._element))l(h)}}const Dt=".bs.modal",wp=`hide${Dt}`,Ep=`hidePrevented${Dt}`,Gl=`hidden${Dt}`,Jl=`show${Dt}`,Cp=`shown${Dt}`,Sp=`resize${Dt}`,Tp=`click.dismiss${Dt}`,Ap=`mousedown.dismiss${Dt}`,Op=`keydown.dismiss${Dt}`,xp=`click${Dt}.data-api`,Xl="modal-open",Ql="show",wo="modal-static",Rp={backdrop:!0,focus:!0,keyboard:!0},Pp={backdrop:"(boolean|string)",focus:"boolean",keyboard:"boolean"};class Qn extends Be{constructor(r,l){super(r,l),this._dialog=A.findOne(".modal-dialog",this._element),this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._isShown=!1,this._isTransitioning=!1,this._scrollBar=new vo,this._addEventListeners()}static get Default(){return Rp}static get DefaultType(){return Pp}static get NAME(){return"modal"}toggle(r){return this._isShown?this.hide():this.show(r)}show(r){this._isShown||this._isTransitioning||I.trigger(this._element,Jl,{relatedTarget:r}).defaultPrevented||(this._isShown=!0,this._isTransitioning=!0,this._scrollBar.hide(),document.body.classList.add(Xl),this._adjustDialog(),this._backdrop.show(()=>this._showElement(r)))}hide(){this._isShown&&!this._isTransitioning&&(I.trigger(this._element,wp).defaultPrevented||(this._isShown=!1,this._isTransitioning=!0,this._focustrap.deactivate(),this._element.classList.remove(Ql),this._queueCallback(()=>this._hideModal(),this._element,this._isAnimated())))}dispose(){I.off(window,Dt),I.off(this._dialog,Dt),this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}handleUpdate(){this._adjustDialog()}_initializeBackDrop(){return new Ul({isVisible:!!this._config.backdrop,isAnimated:this._isAnimated()})}_initializeFocusTrap(){return new ql({trapElement:this._element})}_showElement(r){document.body.contains(this._element)||document.body.append(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.scrollTop=0;const l=A.findOne(".modal-body",this._dialog);l&&(l.scrollTop=0),w(this._element),this._element.classList.add(Ql),this._queueCallback(()=>{this._config.focus&&this._focustrap.activate(),this._isTransitioning=!1,I.trigger(this._element,Cp,{relatedTarget:r})},this._dialog,this._isAnimated())}_addEventListeners(){I.on(this._element,Op,r=>{r.key==="Escape"&&(this._config.keyboard?this.hide():this._triggerBackdropTransition())}),I.on(window,Sp,()=>{this._isShown&&!this._isTransitioning&&this._adjustDialog()}),I.on(this._element,Ap,r=>{I.one(this._element,Tp,l=>{this._element===r.target&&this._element===l.target&&(this._config.backdrop!=="static"?this._config.backdrop&&this.hide():this._triggerBackdropTransition())})})}_hideModal(){this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._isTransitioning=!1,this._backdrop.hide(()=>{document.body.classList.remove(Xl),this._resetAdjustments(),this._scrollBar.reset(),I.trigger(this._element,Gl)})}_isAnimated(){return this._element.classList.contains("fade")}_triggerBackdropTransition(){if(I.trigger(this._element,Ep).defaultPrevented)return;const r=this._element.scrollHeight>document.documentElement.clientHeight,l=this._element.style.overflowY;l==="hidden"||this._element.classList.contains(wo)||(r||(this._element.style.overflowY="hidden"),this._element.classList.add(wo),this._queueCallback(()=>{this._element.classList.remove(wo),this._queueCallback(()=>{this._element.style.overflowY=l},this._dialog)},this._dialog),this._element.focus())}_adjustDialog(){const r=this._element.scrollHeight>document.documentElement.clientHeight,l=this._scrollBar.getWidth(),h=l>0;if(h&&!r){const y=R()?"paddingLeft":"paddingRight";this._element.style[y]=`${l}px`}if(!h&&r){const y=R()?"paddingRight":"paddingLeft";this._element.style[y]=`${l}px`}}_resetAdjustments(){this._element.style.paddingLeft="",this._element.style.paddingRight=""}static jQueryInterface(r,l){return this.each(function(){const h=Qn.getOrCreateInstance(this,r);if(typeof r=="string"){if(h[r]===void 0)throw new TypeError(`No method named "${r}"`);h[r](l)}})}}I.on(document,xp,'[data-bs-toggle="modal"]',function(u){const r=A.getElementFromSelector(this);["A","AREA"].includes(this.tagName)&&u.preventDefault(),I.one(r,Jl,h=>{h.defaultPrevented||I.one(r,Gl,()=>{p(this)&&this.focus()})});const l=A.findOne(".modal.show");l&&Qn.getInstance(l).hide(),Qn.getOrCreateInstance(r).toggle(this)}),V(Qn),$(Qn);const pn=".bs.offcanvas",Yl=".data-api",Ip=`load${pn}${Yl}`,Zl="show",ec="showing",tc="hiding",nc=".offcanvas.show",Lp=`show${pn}`,Dp=`shown${pn}`,Np=`hide${pn}`,sc=`hidePrevented${pn}`,rc=`hidden${pn}`,kp=`resize${pn}`,Mp=`click${pn}${Yl}`,$p=`keydown.dismiss${pn}`,Fp={backdrop:!0,keyboard:!0,scroll:!1},jp={backdrop:"(boolean|string)",keyboard:"boolean",scroll:"boolean"};class mn extends Be{constructor(r,l){super(r,l),this._isShown=!1,this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._addEventListeners()}static get Default(){return Fp}static get DefaultType(){return jp}static get NAME(){return"offcanvas"}toggle(r){return this._isShown?this.hide():this.show(r)}show(r){this._isShown||I.trigger(this._element,Lp,{relatedTarget:r}).defaultPrevented||(this._isShown=!0,this._backdrop.show(),this._config.scroll||new vo().hide(),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.classList.add(ec),this._queueCallback(()=>{this._config.scroll&&!this._config.backdrop||this._focustrap.activate(),this._element.classList.add(Zl),this._element.classList.remove(ec),I.trigger(this._element,Dp,{relatedTarget:r})},this._element,!0))}hide(){this._isShown&&(I.trigger(this._element,Np).defaultPrevented||(this._focustrap.deactivate(),this._element.blur(),this._isShown=!1,this._element.classList.add(tc),this._backdrop.hide(),this._queueCallback(()=>{this._element.classList.remove(Zl,tc),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._config.scroll||new vo().reset(),I.trigger(this._element,rc)},this._element,!0)))}dispose(){this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}_initializeBackDrop(){const r=!!this._config.backdrop;return new Ul({className:"offcanvas-backdrop",isVisible:r,isAnimated:!0,rootElement:this._element.parentNode,clickCallback:r?()=>{this._config.backdrop!=="static"?this.hide():I.trigger(this._element,sc)}:null})}_initializeFocusTrap(){return new ql({trapElement:this._element})}_addEventListeners(){I.on(this._element,$p,r=>{r.key==="Escape"&&(this._config.keyboard?this.hide():I.trigger(this._element,sc))})}static jQueryInterface(r){return this.each(function(){const l=mn.getOrCreateInstance(this,r);if(typeof r=="string"){if(l[r]===void 0||r.startsWith("_")||r==="constructor")throw new TypeError(`No method named "${r}"`);l[r](this)}})}}I.on(document,Mp,'[data-bs-toggle="offcanvas"]',function(u){const r=A.getElementFromSelector(this);if(["A","AREA"].includes(this.tagName)&&u.preventDefault(),d(this))return;I.one(r,rc,()=>{p(this)&&this.focus()});const l=A.findOne(nc);l&&l!==r&&mn.getInstance(l).hide(),mn.getOrCreateInstance(r).toggle(this)}),I.on(window,Ip,()=>{for(const u of A.find(nc))mn.getOrCreateInstance(u).show()}),I.on(window,kp,()=>{for(const u of A.find("[aria-modal][class*=show][class*=offcanvas-]"))getComputedStyle(u).position!=="fixed"&&mn.getOrCreateInstance(u).hide()}),V(mn),$(mn);const ic={"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],dd:[],div:[],dl:[],dt:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","srcset","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},Bp=new Set(["background","cite","href","itemtype","longdesc","poster","src","xlink:href"]),Hp=/^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i,Up=(u,r)=>{const l=u.nodeName.toLowerCase();return r.includes(l)?!Bp.has(l)||!!Hp.test(u.nodeValue):r.filter(h=>h instanceof RegExp).some(h=>h.test(l))},Vp={allowList:ic,content:{},extraClass:"",html:!1,sanitize:!0,sanitizeFn:null,template:"
"},qp={allowList:"object",content:"object",extraClass:"(string|function)",html:"boolean",sanitize:"boolean",sanitizeFn:"(null|function)",template:"string"},Wp={entry:"(string|element|function|null)",selector:"(string|element)"};class zp extends Zt{constructor(r){super(),this._config=this._getConfig(r)}static get Default(){return Vp}static get DefaultType(){return qp}static get NAME(){return"TemplateFactory"}getContent(){return Object.values(this._config.content).map(r=>this._resolvePossibleFunction(r)).filter(Boolean)}hasContent(){return this.getContent().length>0}changeContent(r){return this._checkContent(r),this._config.content={...this._config.content,...r},this}toHtml(){const r=document.createElement("div");r.innerHTML=this._maybeSanitize(this._config.template);for(const[y,v]of Object.entries(this._config.content))this._setContent(r,v,y);const l=r.children[0],h=this._resolvePossibleFunction(this._config.extraClass);return h&&l.classList.add(...h.split(" ")),l}_typeCheckConfig(r){super._typeCheckConfig(r),this._checkContent(r.content)}_checkContent(r){for(const[l,h]of Object.entries(r))super._typeCheckConfig({selector:l,entry:h},Wp)}_setContent(r,l,h){const y=A.findOne(h,r);y&&((l=this._resolvePossibleFunction(l))?c(l)?this._putElementInTemplate(f(l),y):this._config.html?y.innerHTML=this._maybeSanitize(l):y.textContent=l:y.remove())}_maybeSanitize(r){return this._config.sanitize?function(l,h,y){if(!l.length)return l;if(y&&typeof y=="function")return y(l);const v=new window.DOMParser().parseFromString(l,"text/html"),S=[].concat(...v.body.querySelectorAll("*"));for(const L of S){const j=L.nodeName.toLowerCase();if(!Object.keys(h).includes(j)){L.remove();continue}const J=[].concat(...L.attributes),X=[].concat(h["*"]||[],h[j]||[]);for(const K of J)Up(K,X)||L.removeAttribute(K.nodeName)}return v.body.innerHTML}(r,this._config.allowList,this._config.sanitizeFn):r}_resolvePossibleFunction(r){return N(r,[this])}_putElementInTemplate(r,l){if(this._config.html)return l.innerHTML="",void l.append(r);l.textContent=r.textContent}}const Kp=new Set(["sanitize","allowList","sanitizeFn"]),Eo="fade",Xr="show",oc=".modal",ac="hide.bs.modal",Ys="hover",Co="focus",Gp={AUTO:"auto",TOP:"top",RIGHT:R()?"left":"right",BOTTOM:"bottom",LEFT:R()?"right":"left"},Jp={allowList:ic,animation:!0,boundary:"clippingParents",container:!1,customClass:"",delay:0,fallbackPlacements:["top","right","bottom","left"],html:!1,offset:[0,6],placement:"top",popperConfig:null,sanitize:!0,sanitizeFn:null,selector:!1,template:'',title:"",trigger:"hover focus"},Xp={allowList:"object",animation:"boolean",boundary:"(string|element)",container:"(string|element|boolean)",customClass:"(string|function)",delay:"(number|object)",fallbackPlacements:"array",html:"boolean",offset:"(array|string|function)",placement:"(string|function)",popperConfig:"(null|object|function)",sanitize:"boolean",sanitizeFn:"(null|function)",selector:"(string|boolean)",template:"string",title:"(string|element|function)",trigger:"string"};class Yn extends Be{constructor(r,l){if(Nl===void 0)throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)");super(r,l),this._isEnabled=!0,this._timeout=0,this._isHovered=null,this._activeTrigger={},this._popper=null,this._templateFactory=null,this._newContent=null,this.tip=null,this._setListeners(),this._config.selector||this._fixTitle()}static get Default(){return Jp}static get DefaultType(){return Xp}static get NAME(){return"tooltip"}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(){this._isEnabled&&(this._activeTrigger.click=!this._activeTrigger.click,this._isShown()?this._leave():this._enter())}dispose(){clearTimeout(this._timeout),I.off(this._element.closest(oc),ac,this._hideModalHandler),this._element.getAttribute("data-bs-original-title")&&this._element.setAttribute("title",this._element.getAttribute("data-bs-original-title")),this._disposePopper(),super.dispose()}show(){if(this._element.style.display==="none")throw new Error("Please use show on visible elements");if(!this._isWithContent()||!this._isEnabled)return;const r=I.trigger(this._element,this.constructor.eventName("show")),l=(m(this._element)||this._element.ownerDocument.documentElement).contains(this._element);if(r.defaultPrevented||!l)return;this._disposePopper();const h=this._getTipElement();this._element.setAttribute("aria-describedby",h.getAttribute("id"));const{container:y}=this._config;if(this._element.ownerDocument.documentElement.contains(this.tip)||(y.append(h),I.trigger(this._element,this.constructor.eventName("inserted"))),this._popper=this._createPopper(h),h.classList.add(Xr),"ontouchstart"in document.documentElement)for(const v of[].concat(...document.body.children))I.on(v,"mouseover",b);this._queueCallback(()=>{I.trigger(this._element,this.constructor.eventName("shown")),this._isHovered===!1&&this._leave(),this._isHovered=!1},this.tip,this._isAnimated())}hide(){if(this._isShown()&&!I.trigger(this._element,this.constructor.eventName("hide")).defaultPrevented){if(this._getTipElement().classList.remove(Xr),"ontouchstart"in document.documentElement)for(const r of[].concat(...document.body.children))I.off(r,"mouseover",b);this._activeTrigger.click=!1,this._activeTrigger[Co]=!1,this._activeTrigger[Ys]=!1,this._isHovered=null,this._queueCallback(()=>{this._isWithActiveTrigger()||(this._isHovered||this._disposePopper(),this._element.removeAttribute("aria-describedby"),I.trigger(this._element,this.constructor.eventName("hidden")))},this.tip,this._isAnimated())}}update(){this._popper&&this._popper.update()}_isWithContent(){return!!this._getTitle()}_getTipElement(){return this.tip||(this.tip=this._createTipElement(this._newContent||this._getContentForTemplate())),this.tip}_createTipElement(r){const l=this._getTemplateFactory(r).toHtml();if(!l)return null;l.classList.remove(Eo,Xr),l.classList.add(`bs-${this.constructor.NAME}-auto`);const h=(y=>{do y+=Math.floor(1e6*Math.random());while(document.getElementById(y));return y})(this.constructor.NAME).toString();return l.setAttribute("id",h),this._isAnimated()&&l.classList.add(Eo),l}setContent(r){this._newContent=r,this._isShown()&&(this._disposePopper(),this.show())}_getTemplateFactory(r){return this._templateFactory?this._templateFactory.changeContent(r):this._templateFactory=new zp({...this._config,content:r,extraClass:this._resolvePossibleFunction(this._config.customClass)}),this._templateFactory}_getContentForTemplate(){return{".tooltip-inner":this._getTitle()}}_getTitle(){return this._resolvePossibleFunction(this._config.title)||this._element.getAttribute("data-bs-original-title")}_initializeOnDelegatedTarget(r){return this.constructor.getOrCreateInstance(r.delegateTarget,this._getDelegateConfig())}_isAnimated(){return this._config.animation||this.tip&&this.tip.classList.contains(Eo)}_isShown(){return this.tip&&this.tip.classList.contains(Xr)}_createPopper(r){const l=N(this._config.placement,[this,r,this._element]),h=Gp[l.toUpperCase()];return bo(this._element,r,this._getPopperConfig(h))}_getOffset(){const{offset:r}=this._config;return typeof r=="string"?r.split(",").map(l=>Number.parseInt(l,10)):typeof r=="function"?l=>r(l,this._element):r}_resolvePossibleFunction(r){return N(r,[this._element])}_getPopperConfig(r){const l={placement:r,modifiers:[{name:"flip",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:"offset",options:{offset:this._getOffset()}},{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"arrow",options:{element:`.${this.constructor.NAME}-arrow`}},{name:"preSetPlacement",enabled:!0,phase:"beforeMain",fn:h=>{this._getTipElement().setAttribute("data-popper-placement",h.state.placement)}}]};return{...l,...N(this._config.popperConfig,[l])}}_setListeners(){const r=this._config.trigger.split(" ");for(const l of r)if(l==="click")I.on(this._element,this.constructor.eventName("click"),this._config.selector,h=>{this._initializeOnDelegatedTarget(h).toggle()});else if(l!=="manual"){const h=l===Ys?this.constructor.eventName("mouseenter"):this.constructor.eventName("focusin"),y=l===Ys?this.constructor.eventName("mouseleave"):this.constructor.eventName("focusout");I.on(this._element,h,this._config.selector,v=>{const S=this._initializeOnDelegatedTarget(v);S._activeTrigger[v.type==="focusin"?Co:Ys]=!0,S._enter()}),I.on(this._element,y,this._config.selector,v=>{const S=this._initializeOnDelegatedTarget(v);S._activeTrigger[v.type==="focusout"?Co:Ys]=S._element.contains(v.relatedTarget),S._leave()})}this._hideModalHandler=()=>{this._element&&this.hide()},I.on(this._element.closest(oc),ac,this._hideModalHandler)}_fixTitle(){const r=this._element.getAttribute("title");r&&(this._element.getAttribute("aria-label")||this._element.textContent.trim()||this._element.setAttribute("aria-label",r),this._element.setAttribute("data-bs-original-title",r),this._element.removeAttribute("title"))}_enter(){this._isShown()||this._isHovered?this._isHovered=!0:(this._isHovered=!0,this._setTimeout(()=>{this._isHovered&&this.show()},this._config.delay.show))}_leave(){this._isWithActiveTrigger()||(this._isHovered=!1,this._setTimeout(()=>{this._isHovered||this.hide()},this._config.delay.hide))}_setTimeout(r,l){clearTimeout(this._timeout),this._timeout=setTimeout(r,l)}_isWithActiveTrigger(){return Object.values(this._activeTrigger).includes(!0)}_getConfig(r){const l=rt.getDataAttributes(this._element);for(const h of Object.keys(l))Kp.has(h)&&delete l[h];return r={...l,...typeof r=="object"&&r?r:{}},r=this._mergeConfigObj(r),r=this._configAfterMerge(r),this._typeCheckConfig(r),r}_configAfterMerge(r){return r.container=r.container===!1?document.body:f(r.container),typeof r.delay=="number"&&(r.delay={show:r.delay,hide:r.delay}),typeof r.title=="number"&&(r.title=r.title.toString()),typeof r.content=="number"&&(r.content=r.content.toString()),r}_getDelegateConfig(){const r={};for(const[l,h]of Object.entries(this._config))this.constructor.Default[l]!==h&&(r[l]=h);return r.selector=!1,r.trigger="manual",r}_disposePopper(){this._popper&&(this._popper.destroy(),this._popper=null),this.tip&&(this.tip.remove(),this.tip=null)}static jQueryInterface(r){return this.each(function(){const l=Yn.getOrCreateInstance(this,r);if(typeof r=="string"){if(l[r]===void 0)throw new TypeError(`No method named "${r}"`);l[r]()}})}}$(Yn);const Qp={...Yn.Default,content:"",offset:[0,8],placement:"right",template:'',trigger:"click"},Yp={...Yn.DefaultType,content:"(null|string|element|function)"};class Qr extends Yn{static get Default(){return Qp}static get DefaultType(){return Yp}static get NAME(){return"popover"}_isWithContent(){return this._getTitle()||this._getContent()}_getContentForTemplate(){return{".popover-header":this._getTitle(),".popover-body":this._getContent()}}_getContent(){return this._resolvePossibleFunction(this._config.content)}static jQueryInterface(r){return this.each(function(){const l=Qr.getOrCreateInstance(this,r);if(typeof r=="string"){if(l[r]===void 0)throw new TypeError(`No method named "${r}"`);l[r]()}})}}$(Qr);const So=".bs.scrollspy",Zp=`activate${So}`,lc=`click${So}`,em=`load${So}.data-api`,Rs="active",To="[href]",cc=".nav-link",tm=`${cc}, .nav-item > ${cc}, .list-group-item`,nm={offset:null,rootMargin:"0px 0px -25%",smoothScroll:!1,target:null,threshold:[.1,.5,1]},sm={offset:"(number|null)",rootMargin:"string",smoothScroll:"boolean",target:"element",threshold:"array"};class Zs extends Be{constructor(r,l){super(r,l),this._targetLinks=new Map,this._observableSections=new Map,this._rootElement=getComputedStyle(this._element).overflowY==="visible"?null:this._element,this._activeTarget=null,this._observer=null,this._previousScrollData={visibleEntryTop:0,parentScrollTop:0},this.refresh()}static get Default(){return nm}static get DefaultType(){return sm}static get NAME(){return"scrollspy"}refresh(){this._initializeTargetsAndObservables(),this._maybeEnableSmoothScroll(),this._observer?this._observer.disconnect():this._observer=this._getNewObserver();for(const r of this._observableSections.values())this._observer.observe(r)}dispose(){this._observer.disconnect(),super.dispose()}_configAfterMerge(r){return r.target=f(r.target)||document.body,r.rootMargin=r.offset?`${r.offset}px 0px -30%`:r.rootMargin,typeof r.threshold=="string"&&(r.threshold=r.threshold.split(",").map(l=>Number.parseFloat(l))),r}_maybeEnableSmoothScroll(){this._config.smoothScroll&&(I.off(this._config.target,lc),I.on(this._config.target,lc,To,r=>{const l=this._observableSections.get(r.target.hash);if(l){r.preventDefault();const h=this._rootElement||window,y=l.offsetTop-this._element.offsetTop;if(h.scrollTo)return void h.scrollTo({top:y,behavior:"smooth"});h.scrollTop=y}}))}_getNewObserver(){const r={root:this._rootElement,threshold:this._config.threshold,rootMargin:this._config.rootMargin};return new IntersectionObserver(l=>this._observerCallback(l),r)}_observerCallback(r){const l=S=>this._targetLinks.get(`#${S.target.id}`),h=S=>{this._previousScrollData.visibleEntryTop=S.target.offsetTop,this._process(l(S))},y=(this._rootElement||document.documentElement).scrollTop,v=y>=this._previousScrollData.parentScrollTop;this._previousScrollData.parentScrollTop=y;for(const S of r){if(!S.isIntersecting){this._activeTarget=null,this._clearActiveClass(l(S));continue}const L=S.target.offsetTop>=this._previousScrollData.visibleEntryTop;if(v&&L){if(h(S),!y)return}else v||L||h(S)}}_initializeTargetsAndObservables(){this._targetLinks=new Map,this._observableSections=new Map;const r=A.find(To,this._config.target);for(const l of r){if(!l.hash||d(l))continue;const h=A.findOne(decodeURI(l.hash),this._element);p(h)&&(this._targetLinks.set(decodeURI(l.hash),l),this._observableSections.set(l.hash,h))}}_process(r){this._activeTarget!==r&&(this._clearActiveClass(this._config.target),this._activeTarget=r,r.classList.add(Rs),this._activateParents(r),I.trigger(this._element,Zp,{relatedTarget:r}))}_activateParents(r){if(r.classList.contains("dropdown-item"))A.findOne(".dropdown-toggle",r.closest(".dropdown")).classList.add(Rs);else for(const l of A.parents(r,".nav, .list-group"))for(const h of A.prev(l,tm))h.classList.add(Rs)}_clearActiveClass(r){r.classList.remove(Rs);const l=A.find(`${To}.${Rs}`,r);for(const h of l)h.classList.remove(Rs)}static jQueryInterface(r){return this.each(function(){const l=Zs.getOrCreateInstance(this,r);if(typeof r=="string"){if(l[r]===void 0||r.startsWith("_")||r==="constructor")throw new TypeError(`No method named "${r}"`);l[r]()}})}}I.on(window,em,()=>{for(const u of A.find('[data-bs-spy="scroll"]'))Zs.getOrCreateInstance(u)}),$(Zs);const Zn=".bs.tab",rm=`hide${Zn}`,im=`hidden${Zn}`,om=`show${Zn}`,am=`shown${Zn}`,lm=`click${Zn}`,cm=`keydown${Zn}`,um=`load${Zn}`,fm="ArrowLeft",uc="ArrowRight",dm="ArrowUp",fc="ArrowDown",Ao="Home",dc="End",es="active",hc="fade",Oo="show",pc=".dropdown-toggle",xo=`:not(${pc})`,mc='[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]',Ro=`.nav-link${xo}, .list-group-item${xo}, [role="tab"]${xo}, ${mc}`,hm=`.${es}[data-bs-toggle="tab"], .${es}[data-bs-toggle="pill"], .${es}[data-bs-toggle="list"]`;class ts extends Be{constructor(r){super(r),this._parent=this._element.closest('.list-group, .nav, [role="tablist"]'),this._parent&&(this._setInitialAttributes(this._parent,this._getChildren()),I.on(this._element,cm,l=>this._keydown(l)))}static get NAME(){return"tab"}show(){const r=this._element;if(this._elemIsActive(r))return;const l=this._getActiveElem(),h=l?I.trigger(l,rm,{relatedTarget:r}):null;I.trigger(r,om,{relatedTarget:l}).defaultPrevented||h&&h.defaultPrevented||(this._deactivate(l,r),this._activate(r,l))}_activate(r,l){r&&(r.classList.add(es),this._activate(A.getElementFromSelector(r)),this._queueCallback(()=>{r.getAttribute("role")==="tab"?(r.removeAttribute("tabindex"),r.setAttribute("aria-selected",!0),this._toggleDropDown(r,!0),I.trigger(r,am,{relatedTarget:l})):r.classList.add(Oo)},r,r.classList.contains(hc)))}_deactivate(r,l){r&&(r.classList.remove(es),r.blur(),this._deactivate(A.getElementFromSelector(r)),this._queueCallback(()=>{r.getAttribute("role")==="tab"?(r.setAttribute("aria-selected",!1),r.setAttribute("tabindex","-1"),this._toggleDropDown(r,!1),I.trigger(r,im,{relatedTarget:l})):r.classList.remove(Oo)},r,r.classList.contains(hc)))}_keydown(r){if(![fm,uc,dm,fc,Ao,dc].includes(r.key))return;r.stopPropagation(),r.preventDefault();const l=this._getChildren().filter(y=>!d(y));let h;if([Ao,dc].includes(r.key))h=l[r.key===Ao?0:l.length-1];else{const y=[uc,fc].includes(r.key);h=H(l,r.target,y,!0)}h&&(h.focus({preventScroll:!0}),ts.getOrCreateInstance(h).show())}_getChildren(){return A.find(Ro,this._parent)}_getActiveElem(){return this._getChildren().find(r=>this._elemIsActive(r))||null}_setInitialAttributes(r,l){this._setAttributeIfNotExists(r,"role","tablist");for(const h of l)this._setInitialAttributesOnChild(h)}_setInitialAttributesOnChild(r){r=this._getInnerElement(r);const l=this._elemIsActive(r),h=this._getOuterElement(r);r.setAttribute("aria-selected",l),h!==r&&this._setAttributeIfNotExists(h,"role","presentation"),l||r.setAttribute("tabindex","-1"),this._setAttributeIfNotExists(r,"role","tab"),this._setInitialAttributesOnTargetPanel(r)}_setInitialAttributesOnTargetPanel(r){const l=A.getElementFromSelector(r);l&&(this._setAttributeIfNotExists(l,"role","tabpanel"),r.id&&this._setAttributeIfNotExists(l,"aria-labelledby",`${r.id}`))}_toggleDropDown(r,l){const h=this._getOuterElement(r);if(!h.classList.contains("dropdown"))return;const y=(v,S)=>{const L=A.findOne(v,h);L&&L.classList.toggle(S,l)};y(pc,es),y(".dropdown-menu",Oo),h.setAttribute("aria-expanded",l)}_setAttributeIfNotExists(r,l,h){r.hasAttribute(l)||r.setAttribute(l,h)}_elemIsActive(r){return r.classList.contains(es)}_getInnerElement(r){return r.matches(Ro)?r:A.findOne(Ro,r)}_getOuterElement(r){return r.closest(".nav-item, .list-group-item")||r}static jQueryInterface(r){return this.each(function(){const l=ts.getOrCreateInstance(this);if(typeof r=="string"){if(l[r]===void 0||r.startsWith("_")||r==="constructor")throw new TypeError(`No method named "${r}"`);l[r]()}})}}I.on(document,lm,mc,function(u){["A","AREA"].includes(this.tagName)&&u.preventDefault(),d(this)||ts.getOrCreateInstance(this).show()}),I.on(window,um,()=>{for(const u of A.find(hm))ts.getOrCreateInstance(u)}),$(ts);const On=".bs.toast",pm=`mouseover${On}`,mm=`mouseout${On}`,gm=`focusin${On}`,_m=`focusout${On}`,bm=`hide${On}`,ym=`hidden${On}`,vm=`show${On}`,wm=`shown${On}`,gc="hide",Yr="show",Zr="showing",Em={animation:"boolean",autohide:"boolean",delay:"number"},Cm={animation:!0,autohide:!0,delay:5e3};class er extends Be{constructor(r,l){super(r,l),this._timeout=null,this._hasMouseInteraction=!1,this._hasKeyboardInteraction=!1,this._setListeners()}static get Default(){return Cm}static get DefaultType(){return Em}static get NAME(){return"toast"}show(){I.trigger(this._element,vm).defaultPrevented||(this._clearTimeout(),this._config.animation&&this._element.classList.add("fade"),this._element.classList.remove(gc),w(this._element),this._element.classList.add(Yr,Zr),this._queueCallback(()=>{this._element.classList.remove(Zr),I.trigger(this._element,wm),this._maybeScheduleHide()},this._element,this._config.animation))}hide(){this.isShown()&&(I.trigger(this._element,bm).defaultPrevented||(this._element.classList.add(Zr),this._queueCallback(()=>{this._element.classList.add(gc),this._element.classList.remove(Zr,Yr),I.trigger(this._element,ym)},this._element,this._config.animation)))}dispose(){this._clearTimeout(),this.isShown()&&this._element.classList.remove(Yr),super.dispose()}isShown(){return this._element.classList.contains(Yr)}_maybeScheduleHide(){this._config.autohide&&(this._hasMouseInteraction||this._hasKeyboardInteraction||(this._timeout=setTimeout(()=>{this.hide()},this._config.delay)))}_onInteraction(r,l){switch(r.type){case"mouseover":case"mouseout":this._hasMouseInteraction=l;break;case"focusin":case"focusout":this._hasKeyboardInteraction=l}if(l)return void this._clearTimeout();const h=r.relatedTarget;this._element===h||this._element.contains(h)||this._maybeScheduleHide()}_setListeners(){I.on(this._element,pm,r=>this._onInteraction(r,!0)),I.on(this._element,mm,r=>this._onInteraction(r,!1)),I.on(this._element,gm,r=>this._onInteraction(r,!0)),I.on(this._element,_m,r=>this._onInteraction(r,!1))}_clearTimeout(){clearTimeout(this._timeout),this._timeout=null}static jQueryInterface(r){return this.each(function(){const l=er.getOrCreateInstance(this,r);if(typeof r=="string"){if(l[r]===void 0)throw new TypeError(`No method named "${r}"`);l[r](this)}})}}return V(er),$(er),{Alert:g,Button:E,Carousel:bs,Collapse:vs,Dropdown:Ht,Modal:Qn,Offcanvas:mn,Popover:Qr,ScrollSpy:Zs,Tab:ts,Toast:er,Tooltip:Yn}})})(t0);/*! +* Tabler v1.0.0-beta19 (https://tabler.io) +* @version 1.0.0-beta19 +* @link https://tabler.io +* Copyright 2018-2023 The Tabler Authors +* Copyright 2018-2023 codecalm.net Paweł Kuna +* Licensed under MIT (https://github.com/tabler/tabler/blob/master/LICENSE) +*/(function(e){typeof define=="function"&&define.amd?define(e):e()})(function(){var e,t="tablerTheme",n=new Proxy(new URLSearchParams(window.location.search),{get:function(i,o){return i.get(o)}});if(n.theme)localStorage.setItem(t,n.theme),e=n.theme;else{var s=localStorage.getItem(t);e=s||"light"}e==="dark"?document.body.setAttribute("data-bs-theme",e):document.body.removeAttribute("data-bs-theme")});const Mr=Td(Sy);Ke.defaults.baseURL=sw();Mr.config.globalProperties.axios=Ke;Mr.use(pb());Mr.use(dh);Mr.use(Zw,{});Mr.mount("#app");export{o0 as A,Pr as B,Or as C,f0 as D,u0 as E,tt as F,Ir as G,Ua as H,dh as I,c0 as J,sw as K,Ke as L,gd as M,e0 as N,h0 as O,Hd as R,_s as a,nt as b,qt as c,dn as d,Bi as e,d0 as f,Ft as g,fr as h,Bf as i,n0 as j,jc as k,i0 as l,Bo as m,Hn as n,Ue as o,s0 as p,nw as q,ja as r,jt as s,xa as t,jn as u,l0 as v,lb as w,Uf as x,r0 as y,a0 as z}; diff --git a/src/main/resources/static/assets/index-DU977P1k.js b/src/main/resources/static/assets/index-DU977P1k.js new file mode 100644 index 00000000..69ab7321 --- /dev/null +++ b/src/main/resources/static/assets/index-DU977P1k.js @@ -0,0 +1,42 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/OssList-ByTkpwdw.js","assets/IconPlus-BCHYOAFu.js","assets/createVueComponent-Bt7iWPgv.js","assets/Tabulator.vue_vue_type_style_index_0_lang-COGEFirO.js","assets/Tabulator-C0-hRjAn.css","assets/request-jyImEBot.js","assets/bootstrap.esm-Ceob_0pG.js","assets/YamlGenerate-7neU9daB.js","assets/_plugin-vue_export-helper-DlAUqK2U.js","assets/YamlGenerate-DSiHz0eV.css","assets/InstallSoftwareIframe-OUoonEDo.js","assets/applicationInstallationForm-DA09_p5G.js","assets/lodash-BpiFzpk2.js","assets/softwareCatalog-VAKfe9v1.js","assets/applicationInstallationForm-BhLuCKSl.css","assets/InstallSoftwareIframe-DPwVg-cJ.css","assets/SoftwareCatalog-CXVjN_tf.js","assets/applicationDetailModal-BPa-EzOB.js","assets/applicationDetailModal-BfM4XzFr.css","assets/SoftwareCatalog-CwQ6RJcF.css","assets/ApplicationStatus-weJ1o5xY.js","assets/ApplicationStatus-DPixrIJt.css","assets/ApplicationRepository-DuzlT9V3.js","assets/RepositoryList-CEHvsm8y.js","assets/repository-XiwfojAe.js","assets/RepositoryDetail-kNHmtnL-.js","assets/SoftwareCatalogListTest-DrdksJST.js","assets/SoftwareCatalogListTest-DfiSBOQi.css"])))=>i.map(i=>d[i]); +(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const i of document.querySelectorAll('link[rel="modulepreload"]'))s(i);new MutationObserver(i=>{for(const o of i)if(o.type==="childList")for(const a of o.addedNodes)a.tagName==="LINK"&&a.rel==="modulepreload"&&s(a)}).observe(document,{childList:!0,subtree:!0});function n(i){const o={};return i.integrity&&(o.integrity=i.integrity),i.referrerPolicy&&(o.referrerPolicy=i.referrerPolicy),i.crossOrigin==="use-credentials"?o.credentials="include":i.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function s(i){if(i.ep)return;i.ep=!0;const o=n(i);fetch(i.href,o)}})();/** +* @vue/shared v3.5.3 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**//*! #__NO_SIDE_EFFECTS__ */function Ca(e,t){const n=new Set(e.split(","));return s=>n.has(s)}const Me={},$s=[],cn=()=>{},Lm=()=>!1,Ii=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),Sa=e=>e.startsWith("onUpdate:"),Ge=Object.assign,Ta=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},Dm=Object.prototype.hasOwnProperty,Ie=(e,t)=>Dm.call(e,t),ee=Array.isArray,Fs=e=>Ar(e)==="[object Map]",Ws=e=>Ar(e)==="[object Set]",Rc=e=>Ar(e)==="[object Date]",fe=e=>typeof e=="function",qe=e=>typeof e=="string",fn=e=>typeof e=="symbol",$e=e=>e!==null&&typeof e=="object",nf=e=>($e(e)||fe(e))&&fe(e.then)&&fe(e.catch),sf=Object.prototype.toString,Ar=e=>sf.call(e),Nm=e=>Ar(e).slice(8,-1),rf=e=>Ar(e)==="[object Object]",Aa=e=>qe(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,ar=Ca(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Li=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},km=/-(\w)/g,Gt=Li(e=>e.replace(km,(t,n)=>n?n.toUpperCase():"")),Mm=/\B([A-Z])/g,gs=Li(e=>e.replace(Mm,"-$1").toLowerCase()),Di=Li(e=>e.charAt(0).toUpperCase()+e.slice(1)),ui=Li(e=>e?`on${Di(e)}`:""),Bn=(e,t)=>!Object.is(e,t),fi=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:s,value:n})},yi=e=>{const t=parseFloat(e);return isNaN(t)?e:t},$m=e=>{const t=qe(e)?Number(e):NaN;return isNaN(t)?e:t};let Pc;const af=()=>Pc||(Pc=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function Or(e){if(ee(e)){const t={};for(let n=0;n{if(n){const s=n.split(jm);s.length>1&&(t[s[0].trim()]=s[1].trim())}}),t}function Hn(e){let t="";if(qe(e))t=e;else if(ee(e))for(let n=0;nds(n,t))}const cf=e=>!!(e&&e.__v_isRef===!0),xa=e=>qe(e)?e:e==null?"":ee(e)||$e(e)&&(e.toString===sf||!fe(e.toString))?cf(e)?xa(e.value):JSON.stringify(e,uf,2):String(e),uf=(e,t)=>cf(t)?uf(e,t.value):Fs(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[s,i],o)=>(n[Do(s,o)+" =>"]=i,n),{})}:Ws(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>Do(n))}:fn(t)?Do(t):$e(t)&&!ee(t)&&!rf(t)?String(t):t,Do=(e,t="")=>{var n;return fn(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};/** +* @vue/reactivity v3.5.3 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/let mt;class ff{constructor(t=!1){this.detached=t,this._active=!0,this.effects=[],this.cleanups=[],this._isPaused=!1,this.parent=mt,!t&&mt&&(this.index=(mt.scopes||(mt.scopes=[])).push(this)-1)}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,n;if(this.scopes)for(t=0,n=this.scopes.length;t0)return;let e;for(;lr;){let t=lr;for(lr=void 0;t;){const n=t.nextEffect;if(t.nextEffect=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(s){e||(e=s)}t=n}}if(e)throw e}function gf(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function _f(e){let t,n=e.depsTail;for(let s=n;s;s=s.prevDep)s.version===-1?(s===n&&(n=s.prevDep),Ia(s),zm(s)):t=s,s.dep.activeLink=s.prevActiveLink,s.prevActiveLink=void 0;e.deps=t,e.depsTail=n}function Zo(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&bf(t.dep.computed)===!1||t.dep.version!==t.version)return!0;return!!e._dirty}function bf(e){if(e.flags&2)return!1;if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===gr))return;e.globalVersion=gr;const t=e.dep;if(e.flags|=2,t.version>0&&!e.isSSR&&!Zo(e)){e.flags&=-3;return}const n=ke,s=zt;ke=e,zt=!0;try{gf(e);const i=e.fn(e._value);(t.version===0||Bn(i,e._value))&&(e._value=i,t.version++)}catch(i){throw t.version++,i}finally{ke=n,zt=s,_f(e),e.flags&=-3}}function Ia(e){const{dep:t,prevSub:n,nextSub:s}=e;if(n&&(n.nextSub=s,e.prevSub=void 0),s&&(s.prevSub=n,e.nextSub=void 0),t.subs===e&&(t.subs=n),!t.subs&&t.computed){t.computed.flags&=-5;for(let i=t.computed.deps;i;i=i.nextDep)Ia(i)}}function zm(e){const{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}let zt=!0;const yf=[];function Vn(){yf.push(zt),zt=!1}function qn(){const e=yf.pop();zt=e===void 0?!0:e}function Ic(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const n=ke;ke=void 0;try{t()}finally{ke=n}}}let gr=0;class La{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0}track(t){if(!ke||!zt||ke===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==ke)n=this.activeLink={dep:this,sub:ke,version:this.version,nextDep:void 0,prevDep:void 0,nextSub:void 0,prevSub:void 0,prevActiveLink:void 0},ke.deps?(n.prevDep=ke.depsTail,ke.depsTail.nextDep=n,ke.depsTail=n):ke.deps=ke.depsTail=n,ke.flags&4&&vf(n);else if(n.version===-1&&(n.version=this.version,n.nextDep)){const s=n.nextDep;s.prevDep=n.prevDep,n.prevDep&&(n.prevDep.nextDep=s),n.prevDep=ke.depsTail,n.nextDep=void 0,ke.depsTail.nextDep=n,ke.depsTail=n,ke.deps===n&&(ke.deps=s)}return n}trigger(t){this.version++,gr++,this.notify(t)}notify(t){Ra();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()}finally{Pa()}}}function vf(e){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let s=t.deps;s;s=s.nextDep)vf(s)}const n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}const vi=new WeakMap,cs=Symbol(""),ea=Symbol(""),_r=Symbol("");function ot(e,t,n){if(zt&&ke){let s=vi.get(e);s||vi.set(e,s=new Map);let i=s.get(n);i||s.set(n,i=new La),i.track()}}function En(e,t,n,s,i,o){const a=vi.get(e);if(!a){gr++;return}let c=[];if(t==="clear")c=[...a.values()];else{const f=ee(e),p=f&&Aa(n);if(f&&n==="length"){const d=Number(s);a.forEach((m,b)=>{(b==="length"||b===_r||!fn(b)&&b>=d)&&c.push(m)})}else{const d=m=>m&&c.push(m);switch(n!==void 0&&d(a.get(n)),p&&d(a.get(_r)),t){case"add":f?p&&d(a.get("length")):(d(a.get(cs)),Fs(e)&&d(a.get(ea)));break;case"delete":f||(d(a.get(cs)),Fs(e)&&d(a.get(ea)));break;case"set":Fs(e)&&d(a.get(cs));break}}}Ra();for(const f of c)f.trigger();Pa()}function Km(e,t){var n;return(n=vi.get(e))==null?void 0:n.get(t)}function Is(e){const t=Ee(e);return t===e?t:(ot(t,"iterate",_r),Kt(e)?t:t.map(it))}function Ni(e){return ot(e=Ee(e),"iterate",_r),e}const Gm={__proto__:null,[Symbol.iterator](){return ko(this,Symbol.iterator,it)},concat(...e){return Is(this).concat(...e.map(t=>ee(t)?Is(t):t))},entries(){return ko(this,"entries",e=>(e[1]=it(e[1]),e))},every(e,t){return gn(this,"every",e,t,void 0,arguments)},filter(e,t){return gn(this,"filter",e,t,n=>n.map(it),arguments)},find(e,t){return gn(this,"find",e,t,it,arguments)},findIndex(e,t){return gn(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return gn(this,"findLast",e,t,it,arguments)},findLastIndex(e,t){return gn(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return gn(this,"forEach",e,t,void 0,arguments)},includes(...e){return Mo(this,"includes",e)},indexOf(...e){return Mo(this,"indexOf",e)},join(e){return Is(this).join(e)},lastIndexOf(...e){return Mo(this,"lastIndexOf",e)},map(e,t){return gn(this,"map",e,t,void 0,arguments)},pop(){return tr(this,"pop")},push(...e){return tr(this,"push",e)},reduce(e,...t){return Lc(this,"reduce",e,t)},reduceRight(e,...t){return Lc(this,"reduceRight",e,t)},shift(){return tr(this,"shift")},some(e,t){return gn(this,"some",e,t,void 0,arguments)},splice(...e){return tr(this,"splice",e)},toReversed(){return Is(this).toReversed()},toSorted(e){return Is(this).toSorted(e)},toSpliced(...e){return Is(this).toSpliced(...e)},unshift(...e){return tr(this,"unshift",e)},values(){return ko(this,"values",it)}};function ko(e,t,n){const s=Ni(e),i=s[t]();return s!==e&&!Kt(e)&&(i._next=i.next,i.next=()=>{const o=i._next();return o.value&&(o.value=n(o.value)),o}),i}const Jm=Array.prototype;function gn(e,t,n,s,i,o){const a=Ni(e),c=a!==e&&!Kt(e),f=a[t];if(f!==Jm[t]){const m=f.apply(e,o);return c?it(m):m}let p=n;a!==e&&(c?p=function(m,b){return n.call(this,it(m),b,e)}:n.length>2&&(p=function(m,b){return n.call(this,m,b,e)}));const d=f.call(a,p,s);return c&&i?i(d):d}function Lc(e,t,n,s){const i=Ni(e);let o=n;return i!==e&&(Kt(e)?n.length>3&&(o=function(a,c,f){return n.call(this,a,c,f,e)}):o=function(a,c,f){return n.call(this,a,it(c),f,e)}),i[t](o,...s)}function Mo(e,t,n){const s=Ee(e);ot(s,"iterate",_r);const i=s[t](...n);return(i===-1||i===!1)&&Ma(n[0])?(n[0]=Ee(n[0]),s[t](...n)):i}function tr(e,t,n=[]){Vn(),Ra();const s=Ee(e)[t].apply(e,n);return Pa(),qn(),s}const Xm=Ca("__proto__,__v_isRef,__isVue"),wf=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(fn));function Qm(e){fn(e)||(e=String(e));const t=Ee(this);return ot(t,"has",e),t.hasOwnProperty(e)}class Ef{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,s){const i=this._isReadonly,o=this._isShallow;if(n==="__v_isReactive")return!i;if(n==="__v_isReadonly")return i;if(n==="__v_isShallow")return o;if(n==="__v_raw")return s===(i?o?ug:Af:o?Tf:Sf).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(s)?t:void 0;const a=ee(t);if(!i){let f;if(a&&(f=Gm[n]))return f;if(n==="hasOwnProperty")return Qm}const c=Reflect.get(t,n,ze(t)?t:s);return(fn(n)?wf.has(n):Xm(n))||(i||ot(t,"get",n),o)?c:ze(c)?a&&Aa(n)?c:c.value:$e(c)?i?xf(c):xr(c):c}}class Cf extends Ef{constructor(t=!1){super(!1,t)}set(t,n,s,i){let o=t[n];if(!this._isShallow){const f=hs(o);if(!Kt(s)&&!hs(s)&&(o=Ee(o),s=Ee(s)),!ee(t)&&ze(o)&&!ze(s))return f?!1:(o.value=s,!0)}const a=ee(t)&&Aa(n)?Number(n)e,ki=e=>Reflect.getPrototypeOf(e);function si(e,t,n=!1,s=!1){e=e.__v_raw;const i=Ee(e),o=Ee(t);n||(Bn(t,o)&&ot(i,"get",t),ot(i,"get",o));const{has:a}=ki(i),c=s?Da:n?Fa:it;if(a.call(i,t))return c(e.get(t));if(a.call(i,o))return c(e.get(o));e!==i&&e.get(t)}function ri(e,t=!1){const n=this.__v_raw,s=Ee(n),i=Ee(e);return t||(Bn(e,i)&&ot(s,"has",e),ot(s,"has",i)),e===i?n.has(e):n.has(e)||n.has(i)}function ii(e,t=!1){return e=e.__v_raw,!t&&ot(Ee(e),"iterate",cs),Reflect.get(e,"size",e)}function Dc(e,t=!1){!t&&!Kt(e)&&!hs(e)&&(e=Ee(e));const n=Ee(this);return ki(n).has.call(n,e)||(n.add(e),En(n,"add",e,e)),this}function Nc(e,t,n=!1){!n&&!Kt(t)&&!hs(t)&&(t=Ee(t));const s=Ee(this),{has:i,get:o}=ki(s);let a=i.call(s,e);a||(e=Ee(e),a=i.call(s,e));const c=o.call(s,e);return s.set(e,t),a?Bn(t,c)&&En(s,"set",e,t):En(s,"add",e,t),this}function kc(e){const t=Ee(this),{has:n,get:s}=ki(t);let i=n.call(t,e);i||(e=Ee(e),i=n.call(t,e)),s&&s.call(t,e);const o=t.delete(e);return i&&En(t,"delete",e,void 0),o}function Mc(){const e=Ee(this),t=e.size!==0,n=e.clear();return t&&En(e,"clear",void 0,void 0),n}function oi(e,t){return function(s,i){const o=this,a=o.__v_raw,c=Ee(a),f=t?Da:e?Fa:it;return!e&&ot(c,"iterate",cs),a.forEach((p,d)=>s.call(i,f(p),f(d),o))}}function ai(e,t,n){return function(...s){const i=this.__v_raw,o=Ee(i),a=Fs(o),c=e==="entries"||e===Symbol.iterator&&a,f=e==="keys"&&a,p=i[e](...s),d=n?Da:t?Fa:it;return!t&&ot(o,"iterate",f?ea:cs),{next(){const{value:m,done:b}=p.next();return b?{value:m,done:b}:{value:c?[d(m[0]),d(m[1])]:d(m),done:b}},[Symbol.iterator](){return this}}}}function Rn(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function ng(){const e={get(o){return si(this,o)},get size(){return ii(this)},has:ri,add:Dc,set:Nc,delete:kc,clear:Mc,forEach:oi(!1,!1)},t={get(o){return si(this,o,!1,!0)},get size(){return ii(this)},has:ri,add(o){return Dc.call(this,o,!0)},set(o,a){return Nc.call(this,o,a,!0)},delete:kc,clear:Mc,forEach:oi(!1,!0)},n={get(o){return si(this,o,!0)},get size(){return ii(this,!0)},has(o){return ri.call(this,o,!0)},add:Rn("add"),set:Rn("set"),delete:Rn("delete"),clear:Rn("clear"),forEach:oi(!0,!1)},s={get(o){return si(this,o,!0,!0)},get size(){return ii(this,!0)},has(o){return ri.call(this,o,!0)},add:Rn("add"),set:Rn("set"),delete:Rn("delete"),clear:Rn("clear"),forEach:oi(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(o=>{e[o]=ai(o,!1,!1),n[o]=ai(o,!0,!1),t[o]=ai(o,!1,!0),s[o]=ai(o,!0,!0)}),[e,n,t,s]}const[sg,rg,ig,og]=ng();function Na(e,t){const n=t?e?og:ig:e?rg:sg;return(s,i,o)=>i==="__v_isReactive"?!e:i==="__v_isReadonly"?e:i==="__v_raw"?s:Reflect.get(Ie(n,i)&&i in s?n:s,i,o)}const ag={get:Na(!1,!1)},lg={get:Na(!1,!0)},cg={get:Na(!0,!1)};const Sf=new WeakMap,Tf=new WeakMap,Af=new WeakMap,ug=new WeakMap;function fg(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function dg(e){return e.__v_skip||!Object.isExtensible(e)?0:fg(Nm(e))}function xr(e){return hs(e)?e:ka(e,!1,Zm,ag,Sf)}function Of(e){return ka(e,!1,tg,lg,Tf)}function xf(e){return ka(e,!0,eg,cg,Af)}function ka(e,t,n,s,i){if(!$e(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const o=i.get(e);if(o)return o;const a=dg(e);if(a===0)return e;const c=new Proxy(e,a===2?s:n);return i.set(e,c),c}function Fn(e){return hs(e)?Fn(e.__v_raw):!!(e&&e.__v_isReactive)}function hs(e){return!!(e&&e.__v_isReadonly)}function Kt(e){return!!(e&&e.__v_isShallow)}function Ma(e){return e?!!e.__v_raw:!1}function Ee(e){const t=e&&e.__v_raw;return t?Ee(t):e}function $a(e){return Object.isExtensible(e)&&of(e,"__v_skip",!0),e}const it=e=>$e(e)?xr(e):e,Fa=e=>$e(e)?xf(e):e;function ze(e){return e?e.__v_isRef===!0:!1}function ja(e){return Rf(e,!1)}function hg(e){return Rf(e,!0)}function Rf(e,t){return ze(e)?e:new pg(e,t)}class pg{constructor(t,n){this.dep=new La,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=n?t:Ee(t),this._value=n?t:it(t),this.__v_isShallow=n}get value(){return this.dep.track(),this._value}set value(t){const n=this._rawValue,s=this.__v_isShallow||Kt(t)||hs(t);t=s?t:Ee(t),Bn(t,n)&&(this._rawValue=t,this._value=s?t:it(t),this.dep.trigger())}}function jn(e){return ze(e)?e.value:e}const mg={get:(e,t,n)=>t==="__v_raw"?e:jn(Reflect.get(e,t,n)),set:(e,t,n,s)=>{const i=e[t];return ze(i)&&!ze(n)?(i.value=n,!0):Reflect.set(e,t,n,s)}};function Pf(e){return Fn(e)?e:new Proxy(e,mg)}function gg(e){const t=ee(e)?new Array(e.length):{};for(const n in e)t[n]=bg(e,n);return t}class _g{constructor(t,n,s){this._object=t,this._key=n,this._defaultValue=s,this.__v_isRef=!0,this._value=void 0}get value(){const t=this._object[this._key];return this._value=t===void 0?this._defaultValue:t}set value(t){this._object[this._key]=t}get dep(){return Km(Ee(this._object),this._key)}}function bg(e,t,n){const s=e[t];return ze(s)?s:new _g(e,t,n)}class yg{constructor(t,n,s){this.fn=t,this.setter=n,this._value=void 0,this.dep=new La(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=gr-1,this.effect=this,this.__v_isReadonly=!n,this.isSSR=s}notify(){ke!==this&&(this.flags|=16,this.dep.notify())}get value(){const t=this.dep.track();return bf(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function vg(e,t,n=!1){let s,i;return fe(e)?s=e:(s=e.get,i=e.set),new yg(s,i,n)}const li={},wi=new WeakMap;let os;function wg(e,t=!1,n=os){if(n){let s=wi.get(n);s||wi.set(n,s=[]),s.push(e)}}function Eg(e,t,n=Me){const{immediate:s,deep:i,once:o,scheduler:a,augmentJob:c,call:f}=n,p=H=>i?H:Kt(H)||i===!1||i===0?vn(H,1):vn(H);let d,m,b,w,C=!1,P=!1;if(ze(e)?(m=()=>e.value,C=Kt(e)):Fn(e)?(m=()=>p(e),C=!0):ee(e)?(P=!0,C=e.some(H=>Fn(H)||Kt(H)),m=()=>e.map(H=>{if(ze(H))return H.value;if(Fn(H))return p(H);if(fe(H))return f?f(H,2):H()})):fe(e)?t?m=f?()=>f(e,2):e:m=()=>{if(b){Vn();try{b()}finally{qn()}}const H=os;os=d;try{return f?f(e,3,[w]):e(w)}finally{os=H}}:m=cn,t&&i){const H=m,Y=i===!0?1/0:i;m=()=>vn(H(),Y)}const R=hf(),$=()=>{d.stop(),R&&Ta(R.effects,d)};if(o)if(t){const H=t;t=(...Y)=>{H(...Y),$()}}else{const H=m;m=()=>{H(),$()}}let N=P?new Array(e.length).fill(li):li;const B=H=>{if(!(!(d.flags&1)||!d.dirty&&!H))if(t){const Y=d.run();if(i||C||(P?Y.some((ge,le)=>Bn(ge,N[le])):Bn(Y,N))){b&&b();const ge=os;os=d;try{const le=[Y,N===li?void 0:P&&N[0]===li?[]:N,w];f?f(t,3,le):t(...le),N=Y}finally{os=ge}}}else d.run()};return c&&c(B),d=new pf(m),d.scheduler=a?()=>a(B,!1):B,w=H=>wg(H,!1,d),b=d.onStop=()=>{const H=wi.get(d);if(H){if(f)f(H,4);else for(const Y of H)Y();wi.delete(d)}},t?s?B(!0):N=d.run():a?a(B.bind(null,!0),!0):d.run(),$.pause=d.pause.bind(d),$.resume=d.resume.bind(d),$.stop=$,$}function vn(e,t=1/0,n){if(t<=0||!$e(e)||e.__v_skip||(n=n||new Set,n.has(e)))return e;if(n.add(e),t--,ze(e))vn(e.value,t,n);else if(ee(e))for(let s=0;s{vn(s,t,n)});else if(rf(e)){for(const s in e)vn(e[s],t,n);for(const s of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,s)&&vn(e[s],t,n)}return e}/** +* @vue/runtime-core v3.5.3 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/function Rr(e,t,n,s){try{return s?e(...s):e()}catch(i){Mi(i,t,n)}}function Jt(e,t,n,s){if(fe(e)){const i=Rr(e,t,n,s);return i&&nf(i)&&i.catch(o=>{Mi(o,t,n)}),i}if(ee(e)){const i=[];for(let o=0;o>>1,i=gt[s],o=yr(i);o=yr(n)?gt.push(e):gt.splice(Sg(t),0,e),e.flags|=1,Lf()}}function Lf(){!br&&!ta&&(ta=!0,Ba=If.then(Nf))}function Tg(e){ee(e)?js.push(...e):kn&&e.id===-1?kn.splice(Ns+1,0,e):e.flags&1||(js.push(e),e.flags|=1),Lf()}function $c(e,t,n=br?an+1:0){for(;nyr(n)-yr(s));if(js.length=0,kn){kn.push(...t);return}for(kn=t,Ns=0;Nse.id==null?e.flags&2?-1:1/0:e.id;function Nf(e){ta=!1,br=!0;try{for(an=0;an{s._d&&Kc(-1);const o=Ei(t);let a;try{a=e(...i)}finally{Ei(o),s._d&&Kc(1)}return a};return s._n=!0,s._c=!0,s._d=!0,s}function n0(e,t){if(Je===null)return e;const n=Vi(Je),s=e.dirs||(e.dirs=[]);for(let i=0;ie.__isTeleport,Ls=Symbol("_leaveCb"),ci=Symbol("_enterCb");function xg(){const e={isMounted:!1,isLeaving:!1,isUnmounting:!1,leavingVNodes:new Map};return Bf(()=>{e.isMounted=!0}),Uf(()=>{e.isUnmounting=!0}),e}const $t=[Function,Array],Rg={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:$t,onEnter:$t,onAfterEnter:$t,onEnterCancelled:$t,onBeforeLeave:$t,onLeave:$t,onAfterLeave:$t,onLeaveCancelled:$t,onBeforeAppear:$t,onAppear:$t,onAfterAppear:$t,onAppearCancelled:$t};function Pg(e,t){const{leavingVNodes:n}=e;let s=n.get(t.type);return s||(s=Object.create(null),n.set(t.type,s)),s}function na(e,t,n,s,i){const{appear:o,mode:a,persisted:c=!1,onBeforeEnter:f,onEnter:p,onAfterEnter:d,onEnterCancelled:m,onBeforeLeave:b,onLeave:w,onAfterLeave:C,onLeaveCancelled:P,onBeforeAppear:R,onAppear:$,onAfterAppear:N,onAppearCancelled:B}=t,H=String(e.key),Y=Pg(n,e),ge=(q,oe)=>{q&&Jt(q,s,9,oe)},le=(q,oe)=>{const ve=oe[1];ge(q,oe),ee(q)?q.every(G=>G.length<=1)&&ve():q.length<=1&&ve()},te={mode:a,persisted:c,beforeEnter(q){let oe=f;if(!n.isMounted)if(o)oe=R||f;else return;q[Ls]&&q[Ls](!0);const ve=Y[H];ve&&ks(e,ve)&&ve.el[Ls]&&ve.el[Ls](),ge(oe,[q])},enter(q){let oe=p,ve=d,G=m;if(!n.isMounted)if(o)oe=$||p,ve=N||d,G=B||m;else return;let be=!1;const He=q[ci]=st=>{be||(be=!0,st?ge(G,[q]):ge(ve,[q]),te.delayedLeave&&te.delayedLeave(),q[ci]=void 0)};oe?le(oe,[q,He]):He()},leave(q,oe){const ve=String(e.key);if(q[ci]&&q[ci](!0),n.isUnmounting)return oe();ge(b,[q]);let G=!1;const be=q[Ls]=He=>{G||(G=!0,oe(),He?ge(P,[q]):ge(C,[q]),q[Ls]=void 0,Y[ve]===e&&delete Y[ve])};Y[ve]=e,w?le(w,[q,be]):be()},clone(q){return na(q,t,n,s)}};return te}function vr(e,t){e.shapeFlag&6&&e.component?(e.transition=t,vr(e.component.subTree,t)):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function Mf(e,t=!1,n){let s=[],i=0;for(let o=0;o1)for(let o=0;osa(C,t&&(ee(t)?t[P]:t),n,s,i));return}if(Bs(s)&&!i)return;const o=s.shapeFlag&4?Vi(s.component):s.el,a=i?null:o,{i:c,r:f}=e,p=t&&t.r,d=c.refs===Me?c.refs={}:c.refs,m=c.setupState,b=Ee(m),w=m===Me?()=>!1:C=>Ie(b,C);if(p!=null&&p!==f&&(qe(p)?(d[p]=null,w(p)&&(m[p]=null)):ze(p)&&(p.value=null)),fe(f))Rr(f,c,12,[a,d]);else{const C=qe(f),P=ze(f);if(C||P){const R=()=>{if(e.f){const $=C?w(f)?m[f]:d[f]:f.value;i?ee($)&&Ta($,o):ee($)?$.includes(o)||$.push(o):C?(d[f]=[o],w(f)&&(m[f]=d[f])):(f.value=[o],e.k&&(d[e.k]=f.value))}else C?(d[f]=a,w(f)&&(m[f]=a)):P&&(f.value=a,e.k&&(d[e.k]=a))};a?(R.id=-1,St(R,n)):R()}}}const Bs=e=>!!e.type.__asyncLoader,Ff=e=>e.type.__isKeepAlive;function Ig(e,t){jf(e,"a",t)}function Lg(e,t){jf(e,"da",t)}function jf(e,t,n=Ze){const s=e.__wdc||(e.__wdc=()=>{let i=n;for(;i;){if(i.isDeactivated)return;i=i.parent}return e()});if($i(t,s,n),n){let i=n.parent;for(;i&&i.parent;)Ff(i.parent.vnode)&&Dg(s,t,n,i),i=i.parent}}function Dg(e,t,n,s){const i=$i(t,e,s,!0);Vf(()=>{Ta(s[t],i)},n)}function $i(e,t,n=Ze,s=!1){if(n){const i=n[e]||(n[e]=[]),o=t.__weh||(t.__weh=(...a)=>{Vn();const c=Lr(n),f=Jt(t,n,e,a);return c(),qn(),f});return s?i.unshift(o):i.push(o),o}}const Tn=e=>(t,n=Ze)=>{(!Ui||e==="sp")&&$i(e,(...s)=>t(...s),n)},Ng=Tn("bm"),Bf=Tn("m"),kg=Tn("bu"),Hf=Tn("u"),Uf=Tn("bum"),Vf=Tn("um"),Mg=Tn("sp"),$g=Tn("rtg"),Fg=Tn("rtc");function jg(e,t=Ze){$i("ec",e,t)}const qf="components";function cr(e,t){return zf(qf,e,!0,t)||e}const Wf=Symbol.for("v-ndc");function Ua(e){return qe(e)?zf(qf,e,!1)||e:e||Wf}function zf(e,t,n=!0,s=!1){const i=Je||Ze;if(i){const o=i.type;{const c=O_(o,!1);if(c&&(c===t||c===Gt(t)||c===Di(Gt(t))))return o}const a=Fc(i[e]||o[e],t)||Fc(i.appContext[e],t);return!a&&s?o:a}}function Fc(e,t){return e&&(e[t]||e[Gt(t)]||e[Di(Gt(t))])}function jc(e,t,n,s){let i;const o=n,a=ee(e);if(a||qe(e)){const c=a&&Fn(e);c&&(e=Ni(e)),i=new Array(e.length);for(let f=0,p=e.length;ft(c,f,void 0,o));else{const c=Object.keys(e);i=new Array(c.length);for(let f=0,p=c.length;fSi(t)?!(t.type===Sn||t.type===tt&&!Kf(t.children)):!0)?e:null}function Hg(e,t){const n={};for(const s in e)n[ui(s)]=e[s];return n}const ra=e=>e?pd(e)?Vi(e):ra(e.parent):null,ur=Ge(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>ra(e.parent),$root:e=>ra(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>Va(e),$forceUpdate:e=>e.f||(e.f=()=>{Ha(e.update)}),$nextTick:e=>e.n||(e.n=Pr.bind(e.proxy)),$watch:e=>c_.bind(e)}),$o=(e,t)=>e!==Me&&!e.__isScriptSetup&&Ie(e,t),Ug={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:s,data:i,props:o,accessCache:a,type:c,appContext:f}=e;let p;if(t[0]!=="$"){const w=a[t];if(w!==void 0)switch(w){case 1:return s[t];case 2:return i[t];case 4:return n[t];case 3:return o[t]}else{if($o(s,t))return a[t]=1,s[t];if(i!==Me&&Ie(i,t))return a[t]=2,i[t];if((p=e.propsOptions[0])&&Ie(p,t))return a[t]=3,o[t];if(n!==Me&&Ie(n,t))return a[t]=4,n[t];ia&&(a[t]=0)}}const d=ur[t];let m,b;if(d)return t==="$attrs"&&ot(e.attrs,"get",""),d(e);if((m=c.__cssModules)&&(m=m[t]))return m;if(n!==Me&&Ie(n,t))return a[t]=4,n[t];if(b=f.config.globalProperties,Ie(b,t))return b[t]},set({_:e},t,n){const{data:s,setupState:i,ctx:o}=e;return $o(i,t)?(i[t]=n,!0):s!==Me&&Ie(s,t)?(s[t]=n,!0):Ie(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(o[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:s,appContext:i,propsOptions:o}},a){let c;return!!n[a]||e!==Me&&Ie(e,a)||$o(t,a)||(c=o[0])&&Ie(c,a)||Ie(s,a)||Ie(ur,a)||Ie(i.config.globalProperties,a)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:Ie(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function Bc(e){return ee(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let ia=!0;function Vg(e){const t=Va(e),n=e.proxy,s=e.ctx;ia=!1,t.beforeCreate&&Hc(t.beforeCreate,e,"bc");const{data:i,computed:o,methods:a,watch:c,provide:f,inject:p,created:d,beforeMount:m,mounted:b,beforeUpdate:w,updated:C,activated:P,deactivated:R,beforeDestroy:$,beforeUnmount:N,destroyed:B,unmounted:H,render:Y,renderTracked:ge,renderTriggered:le,errorCaptured:te,serverPrefetch:q,expose:oe,inheritAttrs:ve,components:G,directives:be,filters:He}=t;if(p&&qg(p,s,null),a)for(const ae in a){const Se=a[ae];fe(Se)&&(s[ae]=Se.bind(n))}if(i){const ae=i.call(n,n);$e(ae)&&(e.data=xr(ae))}if(ia=!0,o)for(const ae in o){const Se=o[ae],Pt=fe(Se)?Se.bind(n,n):fe(Se.get)?Se.get.bind(n,n):cn,I=!fe(Se)&&fe(Se.set)?Se.set.bind(n):cn,_t=Ft({get:Pt,set:I});Object.defineProperty(s,ae,{enumerable:!0,configurable:!0,get:()=>_t.value,set:et=>_t.value=et})}if(c)for(const ae in c)Gf(c[ae],s,n,ae);if(f){const ae=fe(f)?f.call(n):f;Reflect.ownKeys(ae).forEach(Se=>{di(Se,ae[Se])})}d&&Hc(d,e,"c");function Oe(ae,Se){ee(Se)?Se.forEach(Pt=>ae(Pt.bind(n))):Se&&ae(Se.bind(n))}if(Oe(Ng,m),Oe(Bf,b),Oe(kg,w),Oe(Hf,C),Oe(Ig,P),Oe(Lg,R),Oe(jg,te),Oe(Fg,ge),Oe($g,le),Oe(Uf,N),Oe(Vf,H),Oe(Mg,q),ee(oe))if(oe.length){const ae=e.exposed||(e.exposed={});oe.forEach(Se=>{Object.defineProperty(ae,Se,{get:()=>n[Se],set:Pt=>n[Se]=Pt})})}else e.exposed||(e.exposed={});Y&&e.render===cn&&(e.render=Y),ve!=null&&(e.inheritAttrs=ve),G&&(e.components=G),be&&(e.directives=be),q&&$f(e)}function qg(e,t,n=cn){ee(e)&&(e=oa(e));for(const s in e){const i=e[s];let o;$e(i)?"default"in i?o=xt(i.from||s,i.default,!0):o=xt(i.from||s):o=xt(i),ze(o)?Object.defineProperty(t,s,{enumerable:!0,configurable:!0,get:()=>o.value,set:a=>o.value=a}):t[s]=o}}function Hc(e,t,n){Jt(ee(e)?e.map(s=>s.bind(t.proxy)):e.bind(t.proxy),t,n)}function Gf(e,t,n,s){let i=s.includes(".")?ld(n,s):()=>n[s];if(qe(e)){const o=t[e];fe(o)&&fr(i,o)}else if(fe(e))fr(i,e.bind(n));else if($e(e))if(ee(e))e.forEach(o=>Gf(o,t,n,s));else{const o=fe(e.handler)?e.handler.bind(n):t[e.handler];fe(o)&&fr(i,o,e)}}function Va(e){const t=e.type,{mixins:n,extends:s}=t,{mixins:i,optionsCache:o,config:{optionMergeStrategies:a}}=e.appContext,c=o.get(t);let f;return c?f=c:!i.length&&!n&&!s?f=t:(f={},i.length&&i.forEach(p=>Ci(f,p,a,!0)),Ci(f,t,a)),$e(t)&&o.set(t,f),f}function Ci(e,t,n,s=!1){const{mixins:i,extends:o}=t;o&&Ci(e,o,n,!0),i&&i.forEach(a=>Ci(e,a,n,!0));for(const a in t)if(!(s&&a==="expose")){const c=Wg[a]||n&&n[a];e[a]=c?c(e[a],t[a]):t[a]}return e}const Wg={data:Uc,props:Vc,emits:Vc,methods:or,computed:or,beforeCreate:pt,created:pt,beforeMount:pt,mounted:pt,beforeUpdate:pt,updated:pt,beforeDestroy:pt,beforeUnmount:pt,destroyed:pt,unmounted:pt,activated:pt,deactivated:pt,errorCaptured:pt,serverPrefetch:pt,components:or,directives:or,watch:Kg,provide:Uc,inject:zg};function Uc(e,t){return t?e?function(){return Ge(fe(e)?e.call(this,this):e,fe(t)?t.call(this,this):t)}:t:e}function zg(e,t){return or(oa(e),oa(t))}function oa(e){if(ee(e)){const t={};for(let n=0;n1)return n&&fe(t)?t.call(s&&s.proxy):t}}function Xg(){return!!(Ze||Je||us)}const Xf={},Qf=()=>Object.create(Xf),Yf=e=>Object.getPrototypeOf(e)===Xf;function Qg(e,t,n,s=!1){const i={},o=Qf();e.propsDefaults=Object.create(null),Zf(e,t,i,o);for(const a in e.propsOptions[0])a in i||(i[a]=void 0);n?e.props=s?i:Of(i):e.type.props?e.props=i:e.props=o,e.attrs=o}function Yg(e,t,n,s){const{props:i,attrs:o,vnode:{patchFlag:a}}=e,c=Ee(i),[f]=e.propsOptions;let p=!1;if((s||a>0)&&!(a&16)){if(a&8){const d=e.vnode.dynamicProps;for(let m=0;m{f=!0;const[b,w]=ed(m,t,!0);Ge(a,b),w&&c.push(...w)};!n&&t.mixins.length&&t.mixins.forEach(d),e.extends&&d(e.extends),e.mixins&&e.mixins.forEach(d)}if(!o&&!f)return $e(e)&&s.set(e,$s),$s;if(ee(o))for(let d=0;de[0]==="_"||e==="$stable",qa=e=>ee(e)?e.map(ln):[ln(e)],e_=(e,t,n)=>{if(t._n)return t;const s=Ir((...i)=>qa(t(...i)),n);return s._c=!1,s},nd=(e,t,n)=>{const s=e._ctx;for(const i in e){if(td(i))continue;const o=e[i];if(fe(o))t[i]=e_(i,o,s);else if(o!=null){const a=qa(o);t[i]=()=>a}}},sd=(e,t)=>{const n=qa(t);e.slots.default=()=>n},rd=(e,t,n)=>{for(const s in t)(n||s!=="_")&&(e[s]=t[s])},t_=(e,t,n)=>{const s=e.slots=Qf();if(e.vnode.shapeFlag&32){const i=t._;i?(rd(s,t,n),n&&of(s,"_",i,!0)):nd(t,s)}else t&&sd(e,t)},n_=(e,t,n)=>{const{vnode:s,slots:i}=e;let o=!0,a=Me;if(s.shapeFlag&32){const c=t._;c?n&&c===1?o=!1:rd(i,t,n):(o=!t.$stable,nd(t,i)),a=t}else t&&(sd(e,t),a={default:1});if(o)for(const c in i)!td(c)&&a[c]==null&&delete i[c]},St=g_;function s_(e){return r_(e)}function r_(e,t){const n=af();n.__VUE__=!0;const{insert:s,remove:i,patchProp:o,createElement:a,createText:c,createComment:f,setText:p,setElementText:d,parentNode:m,nextSibling:b,setScopeId:w=cn,insertStaticContent:C}=e,P=(g,_,E,D=null,O=null,k=null,W=void 0,U=null,F=!!_.dynamicChildren)=>{if(g===_)return;g&&!ks(g,_)&&(D=x(g),et(g,O,k,!0),g=null),_.patchFlag===-2&&(F=!1,_.dynamicChildren=null);const{type:M,ref:ne,shapeFlag:z}=_;switch(M){case ji:R(g,_,E,D);break;case Sn:$(g,_,E,D);break;case hi:g==null&&N(_,E,D,W);break;case tt:G(g,_,E,D,O,k,W,U,F);break;default:z&1?Y(g,_,E,D,O,k,W,U,F):z&6?be(g,_,E,D,O,k,W,U,F):(z&64||z&128)&&M.process(g,_,E,D,O,k,W,U,F,Z)}ne!=null&&O&&sa(ne,g&&g.ref,k,_||g,!_)},R=(g,_,E,D)=>{if(g==null)s(_.el=c(_.children),E,D);else{const O=_.el=g.el;_.children!==g.children&&p(O,_.children)}},$=(g,_,E,D)=>{g==null?s(_.el=f(_.children||""),E,D):_.el=g.el},N=(g,_,E,D)=>{[g.el,g.anchor]=C(g.children,_,E,D,g.el,g.anchor)},B=({el:g,anchor:_},E,D)=>{let O;for(;g&&g!==_;)O=b(g),s(g,E,D),g=O;s(_,E,D)},H=({el:g,anchor:_})=>{let E;for(;g&&g!==_;)E=b(g),i(g),g=E;i(_)},Y=(g,_,E,D,O,k,W,U,F)=>{_.type==="svg"?W="svg":_.type==="math"&&(W="mathml"),g==null?ge(_,E,D,O,k,W,U,F):q(g,_,O,k,W,U,F)},ge=(g,_,E,D,O,k,W,U)=>{let F,M;const{props:ne,shapeFlag:z,transition:Q,dirs:re}=g;if(F=g.el=a(g.type,k,ne&&ne.is,ne),z&8?d(F,g.children):z&16&&te(g.children,F,null,D,O,Fo(g,k),W,U),re&&ss(g,null,D,"created"),le(F,g,g.scopeId,W,D),ne){for(const Ce in ne)Ce!=="value"&&!ar(Ce)&&o(F,Ce,null,ne[Ce],k,D);"value"in ne&&o(F,"value",null,ne.value,k),(M=ne.onVnodeBeforeMount)&&rn(M,D,g)}re&&ss(g,null,D,"beforeMount");const pe=i_(O,Q);pe&&Q.beforeEnter(F),s(F,_,E),((M=ne&&ne.onVnodeMounted)||pe||re)&&St(()=>{M&&rn(M,D,g),pe&&Q.enter(F),re&&ss(g,null,D,"mounted")},O)},le=(g,_,E,D,O)=>{if(E&&w(g,E),D)for(let k=0;k{for(let M=F;M{const U=_.el=g.el;let{patchFlag:F,dynamicChildren:M,dirs:ne}=_;F|=g.patchFlag&16;const z=g.props||Me,Q=_.props||Me;let re;if(E&&rs(E,!1),(re=Q.onVnodeBeforeUpdate)&&rn(re,E,_,g),ne&&ss(_,g,E,"beforeUpdate"),E&&rs(E,!0),(z.innerHTML&&Q.innerHTML==null||z.textContent&&Q.textContent==null)&&d(U,""),M?oe(g.dynamicChildren,M,U,E,D,Fo(_,O),k):W||Se(g,_,U,null,E,D,Fo(_,O),k,!1),F>0){if(F&16)ve(U,z,Q,E,O);else if(F&2&&z.class!==Q.class&&o(U,"class",null,Q.class,O),F&4&&o(U,"style",z.style,Q.style,O),F&8){const pe=_.dynamicProps;for(let Ce=0;Ce{re&&rn(re,E,_,g),ne&&ss(_,g,E,"updated")},D)},oe=(g,_,E,D,O,k,W)=>{for(let U=0;U<_.length;U++){const F=g[U],M=_[U],ne=F.el&&(F.type===tt||!ks(F,M)||F.shapeFlag&70)?m(F.el):E;P(F,M,ne,null,D,O,k,W,!0)}},ve=(g,_,E,D,O)=>{if(_!==E){if(_!==Me)for(const k in _)!ar(k)&&!(k in E)&&o(g,k,_[k],null,O,D);for(const k in E){if(ar(k))continue;const W=E[k],U=_[k];W!==U&&k!=="value"&&o(g,k,U,W,O,D)}"value"in E&&o(g,"value",_.value,E.value,O)}},G=(g,_,E,D,O,k,W,U,F)=>{const M=_.el=g?g.el:c(""),ne=_.anchor=g?g.anchor:c("");let{patchFlag:z,dynamicChildren:Q,slotScopeIds:re}=_;re&&(U=U?U.concat(re):re),g==null?(s(M,E,D),s(ne,E,D),te(_.children||[],E,ne,O,k,W,U,F)):z>0&&z&64&&Q&&g.dynamicChildren?(oe(g.dynamicChildren,Q,E,O,k,W,U),(_.key!=null||O&&_===O.subTree)&&id(g,_,!0)):Se(g,_,E,ne,O,k,W,U,F)},be=(g,_,E,D,O,k,W,U,F)=>{_.slotScopeIds=U,g==null?_.shapeFlag&512?O.ctx.activate(_,E,D,W,F):He(_,E,D,O,k,W,F):st(g,_,F)},He=(g,_,E,D,O,k,W)=>{const U=g.component=E_(g,D,O);if(Ff(g)&&(U.ctx.renderer=Z),C_(U,!1,W),U.asyncDep){if(O&&O.registerDep(U,Oe,W),!g.el){const F=U.subTree=nt(Sn);$(null,F,_,E)}}else Oe(U,g,_,E,O,k,W)},st=(g,_,E)=>{const D=_.component=g.component;if(p_(g,_,E))if(D.asyncDep&&!D.asyncResolved){ae(D,_,E);return}else D.next=_,D.update();else _.el=g.el,D.vnode=_},Oe=(g,_,E,D,O,k,W)=>{const U=()=>{if(g.isMounted){let{next:z,bu:Q,u:re,parent:pe,vnode:Ce}=g;{const lt=od(g);if(lt){z&&(z.el=Ce.el,ae(g,z,W)),lt.asyncDep.then(()=>{g.isUnmounted||U()});return}}let ye=z,Xe;rs(g,!1),z?(z.el=Ce.el,ae(g,z,W)):z=Ce,Q&&fi(Q),(Xe=z.props&&z.props.onVnodeBeforeUpdate)&&rn(Xe,pe,z,Ce),rs(g,!0);const Qe=jo(g),at=g.subTree;g.subTree=Qe,P(at,Qe,m(at.el),x(at),g,O,k),z.el=Qe.el,ye===null&&m_(g,Qe.el),re&&St(re,O),(Xe=z.props&&z.props.onVnodeUpdated)&&St(()=>rn(Xe,pe,z,Ce),O)}else{let z;const{el:Q,props:re}=_,{bm:pe,m:Ce,parent:ye,root:Xe,type:Qe}=g,at=Bs(_);if(rs(g,!1),pe&&fi(pe),!at&&(z=re&&re.onVnodeBeforeMount)&&rn(z,ye,_),rs(g,!0),Q&&je){const lt=()=>{g.subTree=jo(g),je(Q,g.subTree,g,O,null)};at&&Qe.__asyncHydrate?Qe.__asyncHydrate(Q,g,lt):lt()}else{Xe.ce&&Xe.ce._injectChildStyle(Qe);const lt=g.subTree=jo(g);P(null,lt,E,D,g,O,k),_.el=lt.el}if(Ce&&St(Ce,O),!at&&(z=re&&re.onVnodeMounted)){const lt=_;St(()=>rn(z,ye,lt),O)}(_.shapeFlag&256||ye&&Bs(ye.vnode)&&ye.vnode.shapeFlag&256)&&g.a&&St(g.a,O),g.isMounted=!0,_=E=D=null}};g.scope.on();const F=g.effect=new pf(U);g.scope.off();const M=g.update=F.run.bind(F),ne=g.job=F.runIfDirty.bind(F);ne.i=g,ne.id=g.uid,F.scheduler=()=>Ha(ne),rs(g,!0),M()},ae=(g,_,E)=>{_.component=g;const D=g.vnode.props;g.vnode=_,g.next=null,Yg(g,_.props,D,E),n_(g,_.children,E),Vn(),$c(g),qn()},Se=(g,_,E,D,O,k,W,U,F=!1)=>{const M=g&&g.children,ne=g?g.shapeFlag:0,z=_.children,{patchFlag:Q,shapeFlag:re}=_;if(Q>0){if(Q&128){I(M,z,E,D,O,k,W,U,F);return}else if(Q&256){Pt(M,z,E,D,O,k,W,U,F);return}}re&8?(ne&16&&Be(M,O,k),z!==M&&d(E,z)):ne&16?re&16?I(M,z,E,D,O,k,W,U,F):Be(M,O,k,!0):(ne&8&&d(E,""),re&16&&te(z,E,D,O,k,W,U,F))},Pt=(g,_,E,D,O,k,W,U,F)=>{g=g||$s,_=_||$s;const M=g.length,ne=_.length,z=Math.min(M,ne);let Q;for(Q=0;Qne?Be(g,O,k,!0,!1,z):te(_,E,D,O,k,W,U,F,z)},I=(g,_,E,D,O,k,W,U,F)=>{let M=0;const ne=_.length;let z=g.length-1,Q=ne-1;for(;M<=z&&M<=Q;){const re=g[M],pe=_[M]=F?Mn(_[M]):ln(_[M]);if(ks(re,pe))P(re,pe,E,null,O,k,W,U,F);else break;M++}for(;M<=z&&M<=Q;){const re=g[z],pe=_[Q]=F?Mn(_[Q]):ln(_[Q]);if(ks(re,pe))P(re,pe,E,null,O,k,W,U,F);else break;z--,Q--}if(M>z){if(M<=Q){const re=Q+1,pe=reQ)for(;M<=z;)et(g[M],O,k,!0),M++;else{const re=M,pe=M,Ce=new Map;for(M=pe;M<=Q;M++){const ct=_[M]=F?Mn(_[M]):ln(_[M]);ct.key!=null&&Ce.set(ct.key,M)}let ye,Xe=0;const Qe=Q-pe+1;let at=!1,lt=0;const Wn=new Array(Qe);for(M=0;M=Qe){et(ct,O,k,!0);continue}let It;if(ct.key!=null)It=Ce.get(ct.key);else for(ye=pe;ye<=Q;ye++)if(Wn[ye-pe]===0&&ks(ct,_[ye])){It=ye;break}It===void 0?et(ct,O,k,!0):(Wn[It-pe]=M+1,It>=lt?lt=It:at=!0,P(ct,_[It],E,null,O,k,W,U,F),Xe++)}const $r=at?o_(Wn):$s;for(ye=$r.length-1,M=Qe-1;M>=0;M--){const ct=pe+M,It=_[ct],Fr=ct+1{const{el:k,type:W,transition:U,children:F,shapeFlag:M}=g;if(M&6){_t(g.component.subTree,_,E,D);return}if(M&128){g.suspense.move(_,E,D);return}if(M&64){W.move(g,_,E,Z);return}if(W===tt){s(k,_,E);for(let z=0;zU.enter(k),O);else{const{leave:z,delayLeave:Q,afterLeave:re}=U,pe=()=>s(k,_,E),Ce=()=>{z(k,()=>{pe(),re&&re()})};Q?Q(k,pe,Ce):Ce()}else s(k,_,E)},et=(g,_,E,D=!1,O=!1)=>{const{type:k,props:W,ref:U,children:F,dynamicChildren:M,shapeFlag:ne,patchFlag:z,dirs:Q,cacheIndex:re}=g;if(z===-2&&(O=!1),U!=null&&sa(U,null,E,g,!0),re!=null&&(_.renderCache[re]=void 0),ne&256){_.ctx.deactivate(g);return}const pe=ne&1&&Q,Ce=!Bs(g);let ye;if(Ce&&(ye=W&&W.onVnodeBeforeUnmount)&&rn(ye,_,g),ne&6)Zt(g.component,E,D);else{if(ne&128){g.suspense.unmount(E,D);return}pe&&ss(g,null,_,"beforeUnmount"),ne&64?g.type.remove(g,_,E,Z,D):M&&!M.hasOnce&&(k!==tt||z>0&&z&64)?Be(M,_,E,!1,!0):(k===tt&&z&384||!O&&ne&16)&&Be(F,_,E),D&&Yt(g)}(Ce&&(ye=W&&W.onVnodeUnmounted)||pe)&&St(()=>{ye&&rn(ye,_,g),pe&&ss(g,null,_,"unmounted")},E)},Yt=g=>{const{type:_,el:E,anchor:D,transition:O}=g;if(_===tt){rt(E,D);return}if(_===hi){H(g);return}const k=()=>{i(E),O&&!O.persisted&&O.afterLeave&&O.afterLeave()};if(g.shapeFlag&1&&O&&!O.persisted){const{leave:W,delayLeave:U}=O,F=()=>W(E,k);U?U(g.el,k,F):F()}else k()},rt=(g,_)=>{let E;for(;g!==_;)E=b(g),i(g),g=E;i(_)},Zt=(g,_,E)=>{const{bum:D,scope:O,job:k,subTree:W,um:U,m:F,a:M}=g;Wc(F),Wc(M),D&&fi(D),O.stop(),k&&(k.flags|=8,et(W,g,_,E)),U&&St(U,_),St(()=>{g.isUnmounted=!0},_),_&&_.pendingBranch&&!_.isUnmounted&&g.asyncDep&&!g.asyncResolved&&g.suspenseId===_.pendingId&&(_.deps--,_.deps===0&&_.resolve())},Be=(g,_,E,D=!1,O=!1,k=0)=>{for(let W=k;W{if(g.shapeFlag&6)return x(g.component.subTree);if(g.shapeFlag&128)return g.suspense.next();const _=b(g.anchor||g.el),E=_&&_[Ag];return E?b(E):_};let A=!1;const V=(g,_,E)=>{g==null?_._vnode&&et(_._vnode,null,null,!0):P(_._vnode||null,g,_,null,null,null,E),_._vnode=g,A||(A=!0,$c(),Df(),A=!1)},Z={p:P,um:et,m:_t,r:Yt,mt:He,mc:te,pc:Se,pbc:oe,n:x,o:e};let Te,je;return{render:V,hydrate:Te,createApp:Jg(V,Te)}}function Fo({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function rs({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function i_(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function id(e,t,n=!1){const s=e.children,i=t.children;if(ee(s)&&ee(i))for(let o=0;o>1,e[n[c]]0&&(t[s]=n[o-1]),n[o]=s)}}for(o=n.length,a=n[o-1];o-- >0;)n[o]=a,a=t[a];return n}function od(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:od(t)}function Wc(e){if(e)for(let t=0;txt(a_);function fr(e,t,n){return ad(e,t,n)}function ad(e,t,n=Me){const{immediate:s,deep:i,flush:o,once:a}=n,c=Ge({},n);let f;if(Ui)if(o==="sync"){const b=l_();f=b.__watcherHandles||(b.__watcherHandles=[])}else if(!t||s)c.once=!0;else return{stop:cn,resume:cn,pause:cn};const p=Ze;c.call=(b,w,C)=>Jt(b,p,w,C);let d=!1;o==="post"?c.scheduler=b=>{St(b,p&&p.suspense)}:o!=="sync"&&(d=!0,c.scheduler=(b,w)=>{w?b():Ha(b)}),c.augmentJob=b=>{t&&(b.flags|=4),d&&(b.flags|=2,p&&(b.id=p.uid,b.i=p))};const m=Eg(e,t,c);return f&&f.push(m),m}function c_(e,t,n){const s=this.proxy,i=qe(e)?e.includes(".")?ld(s,e):()=>s[e]:e.bind(s,s);let o;fe(t)?o=t:(o=t.handler,n=t);const a=Lr(this),c=ad(i,o.bind(s),n);return a(),c}function ld(e,t){const n=t.split(".");return()=>{let s=e;for(let i=0;it==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${Gt(t)}Modifiers`]||e[`${gs(t)}Modifiers`];function f_(e,t,...n){if(e.isUnmounted)return;const s=e.vnode.props||Me;let i=n;const o=t.startsWith("update:"),a=o&&u_(s,t.slice(7));a&&(a.trim&&(i=n.map(d=>qe(d)?d.trim():d)),a.number&&(i=n.map(yi)));let c,f=s[c=ui(t)]||s[c=ui(Gt(t))];!f&&o&&(f=s[c=ui(gs(t))]),f&&Jt(f,e,6,i);const p=s[c+"Once"];if(p){if(!e.emitted)e.emitted={};else if(e.emitted[c])return;e.emitted[c]=!0,Jt(p,e,6,i)}}function cd(e,t,n=!1){const s=t.emitsCache,i=s.get(e);if(i!==void 0)return i;const o=e.emits;let a={},c=!1;if(!fe(e)){const f=p=>{const d=cd(p,t,!0);d&&(c=!0,Ge(a,d))};!n&&t.mixins.length&&t.mixins.forEach(f),e.extends&&f(e.extends),e.mixins&&e.mixins.forEach(f)}return!o&&!c?($e(e)&&s.set(e,null),null):(ee(o)?o.forEach(f=>a[f]=null):Ge(a,o),$e(e)&&s.set(e,a),a)}function Fi(e,t){return!e||!Ii(t)?!1:(t=t.slice(2).replace(/Once$/,""),Ie(e,t[0].toLowerCase()+t.slice(1))||Ie(e,gs(t))||Ie(e,t))}function jo(e){const{type:t,vnode:n,proxy:s,withProxy:i,propsOptions:[o],slots:a,attrs:c,emit:f,render:p,renderCache:d,props:m,data:b,setupState:w,ctx:C,inheritAttrs:P}=e,R=Ei(e);let $,N;try{if(n.shapeFlag&4){const H=i||s,Y=H;$=ln(p.call(Y,H,d,m,w,b,C)),N=c}else{const H=t;$=ln(H.length>1?H(m,{attrs:c,slots:a,emit:f}):H(m,null)),N=t.props?c:d_(c)}}catch(H){dr.length=0,Mi(H,e,1),$=nt(Sn)}let B=$;if(N&&P!==!1){const H=Object.keys(N),{shapeFlag:Y}=B;H.length&&Y&7&&(o&&H.some(Sa)&&(N=h_(N,o)),B=ps(B,N,!1,!0))}return n.dirs&&(B=ps(B,null,!1,!0),B.dirs=B.dirs?B.dirs.concat(n.dirs):n.dirs),n.transition&&vr(B,n.transition),$=B,Ei(R),$}const d_=e=>{let t;for(const n in e)(n==="class"||n==="style"||Ii(n))&&((t||(t={}))[n]=e[n]);return t},h_=(e,t)=>{const n={};for(const s in e)(!Sa(s)||!(s.slice(9)in t))&&(n[s]=e[s]);return n};function p_(e,t,n){const{props:s,children:i,component:o}=e,{props:a,children:c,patchFlag:f}=t,p=o.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&f>=0){if(f&1024)return!0;if(f&16)return s?zc(s,a,p):!!a;if(f&8){const d=t.dynamicProps;for(let m=0;me.__isSuspense;function g_(e,t){t&&t.pendingBranch?ee(e)?t.effects.push(...e):t.effects.push(e):Tg(e)}const tt=Symbol.for("v-fgt"),ji=Symbol.for("v-txt"),Sn=Symbol.for("v-cmt"),hi=Symbol.for("v-stc"),dr=[];let Ot=null;function Ue(e=!1){dr.push(Ot=e?null:[])}function __(){dr.pop(),Ot=dr[dr.length-1]||null}let wr=1;function Kc(e){wr+=e,e<0&&Ot&&(Ot.hasOnce=!0)}function fd(e){return e.dynamicChildren=wr>0?Ot||$s:null,__(),wr>0&&Ot&&Ot.push(e),e}function qt(e,t,n,s,i,o){return fd(_s(e,t,n,s,i,o,!0))}function jt(e,t,n,s,i){return fd(nt(e,t,n,s,i,!0))}function Si(e){return e?e.__v_isVNode===!0:!1}function ks(e,t){return e.type===t.type&&e.key===t.key}const dd=({key:e})=>e??null,pi=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?qe(e)||ze(e)||fe(e)?{i:Je,r:e,k:t,f:!!n}:e:null);function _s(e,t=null,n=null,s=0,i=null,o=e===tt?0:1,a=!1,c=!1){const f={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&dd(t),ref:t&&pi(t),scopeId:kf,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:o,patchFlag:s,dynamicProps:i,dynamicChildren:null,appContext:null,ctx:Je};return c?(Wa(f,n),o&128&&e.normalize(f)):n&&(f.shapeFlag|=qe(n)?8:16),wr>0&&!a&&Ot&&(f.patchFlag>0||o&6)&&f.patchFlag!==32&&Ot.push(f),f}const nt=b_;function b_(e,t=null,n=null,s=0,i=null,o=!1){if((!e||e===Wf)&&(e=Sn),Si(e)){const c=ps(e,t,!0);return n&&Wa(c,n),wr>0&&!o&&Ot&&(c.shapeFlag&6?Ot[Ot.indexOf(e)]=c:Ot.push(c)),c.patchFlag=-2,c}if(x_(e)&&(e=e.__vccOpts),t){t=y_(t);let{class:c,style:f}=t;c&&!qe(c)&&(t.class=Hn(c)),$e(f)&&(Ma(f)&&!ee(f)&&(f=Ge({},f)),t.style=Or(f))}const a=qe(e)?1:ud(e)?128:Og(e)?64:$e(e)?4:fe(e)?2:0;return _s(e,t,n,s,i,a,o,!0)}function y_(e){return e?Ma(e)||Yf(e)?Ge({},e):e:null}function ps(e,t,n=!1,s=!1){const{props:i,ref:o,patchFlag:a,children:c,transition:f}=e,p=t?Hi(i||{},t):i,d={__v_isVNode:!0,__v_skip:!0,type:e.type,props:p,key:p&&dd(p),ref:t&&t.ref?n&&o?ee(o)?o.concat(pi(t)):[o,pi(t)]:pi(t):o,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:c,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==tt?a===-1?16:a|16:a,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:f,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&ps(e.ssContent),ssFallback:e.ssFallback&&ps(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return f&&s&&vr(d,f.clone(d)),d}function Bi(e=" ",t=0){return nt(ji,null,e,t)}function s0(e,t){const n=nt(hi,null,e);return n.staticCount=t,n}function Bo(e="",t=!1){return t?(Ue(),jt(Sn,null,e)):nt(Sn,null,e)}function ln(e){return e==null||typeof e=="boolean"?nt(Sn):ee(e)?nt(tt,null,e.slice()):typeof e=="object"?Mn(e):nt(ji,null,String(e))}function Mn(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:ps(e)}function Wa(e,t){let n=0;const{shapeFlag:s}=e;if(t==null)t=null;else if(ee(t))n=16;else if(typeof t=="object")if(s&65){const i=t.default;i&&(i._c&&(i._d=!1),Wa(e,i()),i._c&&(i._d=!0));return}else{n=32;const i=t._;!i&&!Yf(t)?t._ctx=Je:i===3&&Je&&(Je.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else fe(t)?(t={default:t,_ctx:Je},n=32):(t=String(t),s&64?(n=16,t=[Bi(t)]):n=8);e.children=t,e.shapeFlag|=n}function Hi(...e){const t={};for(let n=0;nZe||Je;let Ti,la;{const e=af(),t=(n,s)=>{let i;return(i=e[n])||(i=e[n]=[]),i.push(s),o=>{i.length>1?i.forEach(a=>a(o)):i[0](o)}};Ti=t("__VUE_INSTANCE_SETTERS__",n=>Ze=n),la=t("__VUE_SSR_SETTERS__",n=>Ui=n)}const Lr=e=>{const t=Ze;return Ti(e),e.scope.on(),()=>{e.scope.off(),Ti(t)}},Gc=()=>{Ze&&Ze.scope.off(),Ti(null)};function pd(e){return e.vnode.shapeFlag&4}let Ui=!1;function C_(e,t=!1,n=!1){t&&la(t);const{props:s,children:i}=e.vnode,o=pd(e);Qg(e,s,o,t),t_(e,i,n);const a=o?S_(e,t):void 0;return t&&la(!1),a}function S_(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,Ug);const{setup:s}=n;if(s){const i=e.setupContext=s.length>1?A_(e):null,o=Lr(e);Vn();const a=Rr(s,e,0,[e.props,i]);if(qn(),o(),nf(a)){if(Bs(e)||$f(e),a.then(Gc,Gc),t)return a.then(c=>{Jc(e,c,t)}).catch(c=>{Mi(c,e,0)});e.asyncDep=a}else Jc(e,a,t)}else md(e,t)}function Jc(e,t,n){fe(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:$e(t)&&(e.setupState=Pf(t)),md(e,n)}let Xc;function md(e,t,n){const s=e.type;if(!e.render){if(!t&&Xc&&!s.render){const i=s.template||Va(e).template;if(i){const{isCustomElement:o,compilerOptions:a}=e.appContext.config,{delimiters:c,compilerOptions:f}=s,p=Ge(Ge({isCustomElement:o,delimiters:c},a),f);s.render=Xc(i,p)}}e.render=s.render||cn}{const i=Lr(e);Vn();try{Vg(e)}finally{qn(),i()}}}const T_={get(e,t){return ot(e,"get",""),e[t]}};function A_(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,T_),slots:e.slots,emit:e.emit,expose:t}}function Vi(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(Pf($a(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in ur)return ur[n](e)},has(t,n){return n in t||n in ur}})):e.proxy}function O_(e,t=!0){return fe(e)?e.displayName||e.name:e.name||t&&e.__name}function x_(e){return fe(e)&&"__vccOpts"in e}const Ft=(e,t)=>vg(e,t,Ui);function gd(e,t,n){const s=arguments.length;return s===2?$e(t)&&!ee(t)?Si(t)?nt(e,null,[t]):nt(e,t):nt(e,null,t):(s>3?n=Array.prototype.slice.call(arguments,2):s===3&&Si(n)&&(n=[n]),nt(e,t,n))}const R_="3.5.3";/** +* @vue/runtime-dom v3.5.3 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/let ca;const Qc=typeof window<"u"&&window.trustedTypes;if(Qc)try{ca=Qc.createPolicy("vue",{createHTML:e=>e})}catch{}const _d=ca?e=>ca.createHTML(e):e=>e,P_="http://www.w3.org/2000/svg",I_="http://www.w3.org/1998/Math/MathML",yn=typeof document<"u"?document:null,Yc=yn&&yn.createElement("template"),L_={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,s)=>{const i=t==="svg"?yn.createElementNS(P_,e):t==="mathml"?yn.createElementNS(I_,e):n?yn.createElement(e,{is:n}):yn.createElement(e);return e==="select"&&s&&s.multiple!=null&&i.setAttribute("multiple",s.multiple),i},createText:e=>yn.createTextNode(e),createComment:e=>yn.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>yn.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,s,i,o){const a=n?n.previousSibling:t.lastChild;if(i&&(i===o||i.nextSibling))for(;t.insertBefore(i.cloneNode(!0),n),!(i===o||!(i=i.nextSibling)););else{Yc.innerHTML=_d(s==="svg"?`${e}`:s==="mathml"?`${e}`:e);const c=Yc.content;if(s==="svg"||s==="mathml"){const f=c.firstChild;for(;f.firstChild;)c.appendChild(f.firstChild);c.removeChild(f)}t.insertBefore(c,n)}return[a?a.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},Pn="transition",nr="animation",Hs=Symbol("_vtc"),bd={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},D_=Ge({},Rg,bd),is=(e,t=[])=>{ee(e)?e.forEach(n=>n(...t)):e&&e(...t)},Zc=e=>e?ee(e)?e.some(t=>t.length>1):e.length>1:!1;function N_(e){const t={};for(const G in e)G in bd||(t[G]=e[G]);if(e.css===!1)return t;const{name:n="v",type:s,duration:i,enterFromClass:o=`${n}-enter-from`,enterActiveClass:a=`${n}-enter-active`,enterToClass:c=`${n}-enter-to`,appearFromClass:f=o,appearActiveClass:p=a,appearToClass:d=c,leaveFromClass:m=`${n}-leave-from`,leaveActiveClass:b=`${n}-leave-active`,leaveToClass:w=`${n}-leave-to`}=e,C=k_(i),P=C&&C[0],R=C&&C[1],{onBeforeEnter:$,onEnter:N,onEnterCancelled:B,onLeave:H,onLeaveCancelled:Y,onBeforeAppear:ge=$,onAppear:le=N,onAppearCancelled:te=B}=t,q=(G,be,He)=>{Dn(G,be?d:c),Dn(G,be?p:a),He&&He()},oe=(G,be)=>{G._isLeaving=!1,Dn(G,m),Dn(G,w),Dn(G,b),be&&be()},ve=G=>(be,He)=>{const st=G?le:N,Oe=()=>q(be,G,He);is(st,[be,Oe]),eu(()=>{Dn(be,G?f:o),bn(be,G?d:c),Zc(st)||tu(be,s,P,Oe)})};return Ge(t,{onBeforeEnter(G){is($,[G]),bn(G,o),bn(G,a)},onBeforeAppear(G){is(ge,[G]),bn(G,f),bn(G,p)},onEnter:ve(!1),onAppear:ve(!0),onLeave(G,be){G._isLeaving=!0;const He=()=>oe(G,be);bn(G,m),bn(G,b),vd(),eu(()=>{G._isLeaving&&(Dn(G,m),bn(G,w),Zc(H)||tu(G,s,R,He))}),is(H,[G,He])},onEnterCancelled(G){q(G,!1),is(B,[G])},onAppearCancelled(G){q(G,!0),is(te,[G])},onLeaveCancelled(G){oe(G),is(Y,[G])}})}function k_(e){if(e==null)return null;if($e(e))return[Ho(e.enter),Ho(e.leave)];{const t=Ho(e);return[t,t]}}function Ho(e){return $m(e)}function bn(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[Hs]||(e[Hs]=new Set)).add(t)}function Dn(e,t){t.split(/\s+/).forEach(s=>s&&e.classList.remove(s));const n=e[Hs];n&&(n.delete(t),n.size||(e[Hs]=void 0))}function eu(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let M_=0;function tu(e,t,n,s){const i=e._endId=++M_,o=()=>{i===e._endId&&s()};if(n)return setTimeout(o,n);const{type:a,timeout:c,propCount:f}=yd(e,t);if(!a)return s();const p=a+"end";let d=0;const m=()=>{e.removeEventListener(p,b),o()},b=w=>{w.target===e&&++d>=f&&m()};setTimeout(()=>{d(n[C]||"").split(", "),i=s(`${Pn}Delay`),o=s(`${Pn}Duration`),a=nu(i,o),c=s(`${nr}Delay`),f=s(`${nr}Duration`),p=nu(c,f);let d=null,m=0,b=0;t===Pn?a>0&&(d=Pn,m=a,b=o.length):t===nr?p>0&&(d=nr,m=p,b=f.length):(m=Math.max(a,p),d=m>0?a>p?Pn:nr:null,b=d?d===Pn?o.length:f.length:0);const w=d===Pn&&/\b(transform|all)(,|$)/.test(s(`${Pn}Property`).toString());return{type:d,timeout:m,propCount:b,hasTransform:w}}function nu(e,t){for(;e.lengthsu(n)+su(e[s])))}function su(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function vd(){return document.body.offsetHeight}function $_(e,t,n){const s=e[Hs];s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const Ai=Symbol("_vod"),wd=Symbol("_vsh"),r0={beforeMount(e,{value:t},{transition:n}){e[Ai]=e.style.display==="none"?"":e.style.display,n&&t?n.beforeEnter(e):sr(e,t)},mounted(e,{value:t},{transition:n}){n&&t&&n.enter(e)},updated(e,{value:t,oldValue:n},{transition:s}){!t!=!n&&(s?t?(s.beforeEnter(e),sr(e,!0),s.enter(e)):s.leave(e,()=>{sr(e,!1)}):sr(e,t))},beforeUnmount(e,{value:t}){sr(e,t)}};function sr(e,t){e.style.display=t?e[Ai]:"none",e[wd]=!t}const F_=Symbol(""),j_=/(^|;)\s*display\s*:/;function B_(e,t,n){const s=e.style,i=qe(n);let o=!1;if(n&&!i){if(t)if(qe(t))for(const a of t.split(";")){const c=a.slice(0,a.indexOf(":")).trim();n[c]==null&&mi(s,c,"")}else for(const a in t)n[a]==null&&mi(s,a,"");for(const a in n)a==="display"&&(o=!0),mi(s,a,n[a])}else if(i){if(t!==n){const a=s[F_];a&&(n+=";"+a),s.cssText=n,o=j_.test(n)}}else t&&e.removeAttribute("style");Ai in e&&(e[Ai]=o?s.display:"",e[wd]&&(s.display="none"))}const ru=/\s*!important$/;function mi(e,t,n){if(ee(n))n.forEach(s=>mi(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const s=H_(e,t);ru.test(n)?e.setProperty(gs(s),n.replace(ru,""),"important"):e[s]=n}}const iu=["Webkit","Moz","ms"],Uo={};function H_(e,t){const n=Uo[t];if(n)return n;let s=Gt(t);if(s!=="filter"&&s in e)return Uo[t]=s;s=Di(s);for(let i=0;iVo||(z_.then(()=>Vo=0),Vo=Date.now());function G_(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;Jt(J_(s,n.value),t,5,[s])};return n.value=e,n.attached=K_(),n}function J_(e,t){if(ee(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(s=>i=>!i._stopped&&s&&s(i))}else return t}const uu=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,X_=(e,t,n,s,i,o)=>{const a=i==="svg";t==="class"?$_(e,s,a):t==="style"?B_(e,n,s):Ii(t)?Sa(t)||q_(e,t,n,s,o):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Q_(e,t,s,a))?(U_(e,t,s),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&au(e,t,s,a,o,t!=="value")):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),au(e,t,s,a))};function Q_(e,t,n,s){if(s)return!!(t==="innerHTML"||t==="textContent"||t in e&&uu(t)&&fe(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const i=e.tagName;if(i==="IMG"||i==="VIDEO"||i==="CANVAS"||i==="SOURCE")return!1}return uu(t)&&qe(n)?!1:!!(t in e||e._isVueCE&&(/[A-Z]/.test(t)||!qe(n)))}const Ed=new WeakMap,Cd=new WeakMap,Oi=Symbol("_moveCb"),fu=Symbol("_enterCb"),Y_=e=>(delete e.props.mode,e),Z_=Y_({name:"TransitionGroup",props:Ge({},D_,{tag:String,moveClass:String}),setup(e,{slots:t}){const n=hd(),s=xg();let i,o;return Hf(()=>{if(!i.length)return;const a=e.moveClass||`${e.name||"v"}-move`;if(!rb(i[0].el,n.vnode.el,a))return;i.forEach(tb),i.forEach(nb);const c=i.filter(sb);vd(),c.forEach(f=>{const p=f.el,d=p.style;bn(p,a),d.transform=d.webkitTransform=d.transitionDuration="";const m=p[Oi]=b=>{b&&b.target!==p||(!b||/transform$/.test(b.propertyName))&&(p.removeEventListener("transitionend",m),p[Oi]=null,Dn(p,a))};p.addEventListener("transitionend",m)})}),()=>{const a=Ee(e),c=N_(a);let f=a.tag||tt;if(i=[],o)for(let p=0;p{c.split(/\s+/).forEach(f=>f&&s.classList.remove(f))}),n.split(/\s+/).forEach(c=>c&&s.classList.add(c)),s.style.display="none";const o=t.nodeType===1?t:t.parentNode;o.appendChild(s);const{hasTransform:a}=yd(s);return o.removeChild(s),a}const Un=e=>{const t=e.props["onUpdate:modelValue"]||!1;return ee(t)?n=>fi(t,n):t};function ib(e){e.target.composing=!0}function du(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const Bt=Symbol("_assign"),i0={created(e,{modifiers:{lazy:t,trim:n,number:s}},i){e[Bt]=Un(i);const o=s||i.props&&i.props.type==="number";wn(e,t?"change":"input",a=>{if(a.target.composing)return;let c=e.value;n&&(c=c.trim()),o&&(c=yi(c)),e[Bt](c)}),n&&wn(e,"change",()=>{e.value=e.value.trim()}),t||(wn(e,"compositionstart",ib),wn(e,"compositionend",du),wn(e,"change",du))},mounted(e,{value:t}){e.value=t??""},beforeUpdate(e,{value:t,oldValue:n,modifiers:{lazy:s,trim:i,number:o}},a){if(e[Bt]=Un(a),e.composing)return;const c=(o||e.type==="number")&&!/^0\d/.test(e.value)?yi(e.value):e.value,f=t??"";c!==f&&(document.activeElement===e&&e.type!=="range"&&(s&&t===n||i&&e.value.trim()===f)||(e.value=f))}},o0={deep:!0,created(e,t,n){e[Bt]=Un(n),wn(e,"change",()=>{const s=e._modelValue,i=Us(e),o=e.checked,a=e[Bt];if(ee(s)){const c=Oa(s,i),f=c!==-1;if(o&&!f)a(s.concat(i));else if(!o&&f){const p=[...s];p.splice(c,1),a(p)}}else if(Ws(s)){const c=new Set(s);o?c.add(i):c.delete(i),a(c)}else a(Sd(e,o))})},mounted:hu,beforeUpdate(e,t,n){e[Bt]=Un(n),hu(e,t,n)}};function hu(e,{value:t,oldValue:n},s){e._modelValue=t;let i;ee(t)?i=Oa(t,s.props.value)>-1:Ws(t)?i=t.has(s.props.value):i=ds(t,Sd(e,!0)),e.checked!==i&&(e.checked=i)}const a0={created(e,{value:t},n){e.checked=ds(t,n.props.value),e[Bt]=Un(n),wn(e,"change",()=>{e[Bt](Us(e))})},beforeUpdate(e,{value:t,oldValue:n},s){e[Bt]=Un(s),t!==n&&(e.checked=ds(t,s.props.value))}},l0={deep:!0,created(e,{value:t,modifiers:{number:n}},s){const i=Ws(t);wn(e,"change",()=>{const o=Array.prototype.filter.call(e.options,a=>a.selected).map(a=>n?yi(Us(a)):Us(a));e[Bt](e.multiple?i?new Set(o):o:o[0]),e._assigning=!0,Pr(()=>{e._assigning=!1})}),e[Bt]=Un(s)},mounted(e,{value:t,modifiers:{number:n}}){pu(e,t)},beforeUpdate(e,t,n){e[Bt]=Un(n)},updated(e,{value:t,modifiers:{number:n}}){e._assigning||pu(e,t)}};function pu(e,t,n){const s=e.multiple,i=ee(t);if(!(s&&!i&&!Ws(t))){for(let o=0,a=e.options.length;oString(d)===String(f)):c.selected=Oa(t,f)>-1}else c.selected=t.has(f);else if(ds(Us(c),t)){e.selectedIndex!==o&&(e.selectedIndex=o);return}}!s&&e.selectedIndex!==-1&&(e.selectedIndex=-1)}}function Us(e){return"_value"in e?e._value:e.value}function Sd(e,t){const n=t?"_trueValue":"_falseValue";return n in e?e[n]:t}const ob=["ctrl","shift","alt","meta"],ab={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>ob.some(n=>e[`${n}Key`]&&!t.includes(n))},lb=(e,t)=>{const n=e._withMods||(e._withMods={}),s=t.join(".");return n[s]||(n[s]=(i,...o)=>{for(let a=0;a{const t=ub().createApp(...e),{mount:n}=t;return t.mount=s=>{const i=db(s);if(!i)return;const o=t._component;!fe(o)&&!o.render&&!o.template&&(o.template=i.innerHTML),i.nodeType===1&&(i.textContent="");const a=n(i,!1,fb(i));return i instanceof Element&&(i.removeAttribute("v-cloak"),i.setAttribute("data-v-app","")),a},t};function fb(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function db(e){return qe(e)?document.querySelector(e):e}var hb=!1;/*! + * pinia v2.2.2 + * (c) 2024 Eduardo San Martin Morote + * @license MIT + */let Ad;const qi=e=>Ad=e,Od=Symbol();function ua(e){return e&&typeof e=="object"&&Object.prototype.toString.call(e)==="[object Object]"&&typeof e.toJSON!="function"}var hr;(function(e){e.direct="direct",e.patchObject="patch object",e.patchFunction="patch function"})(hr||(hr={}));function pb(){const e=df(!0),t=e.run(()=>ja({}));let n=[],s=[];const i=$a({install(o){qi(i),i._a=o,o.provide(Od,i),o.config.globalProperties.$pinia=i,s.forEach(a=>n.push(a)),s=[]},use(o){return!this._a&&!hb?s.push(o):n.push(o),this},_p:n,_a:null,_e:e,_s:new Map,state:t});return i}const xd=()=>{};function gu(e,t,n,s=xd){e.push(t);const i=()=>{const o=e.indexOf(t);o>-1&&(e.splice(o,1),s())};return!n&&hf()&&Wm(i),i}function Ds(e,...t){e.slice().forEach(n=>{n(...t)})}const mb=e=>e(),_u=Symbol(),qo=Symbol();function fa(e,t){e instanceof Map&&t instanceof Map?t.forEach((n,s)=>e.set(s,n)):e instanceof Set&&t instanceof Set&&t.forEach(e.add,e);for(const n in t){if(!t.hasOwnProperty(n))continue;const s=t[n],i=e[n];ua(i)&&ua(s)&&e.hasOwnProperty(n)&&!ze(s)&&!Fn(s)?e[n]=fa(i,s):e[n]=s}return e}const gb=Symbol();function _b(e){return!ua(e)||!e.hasOwnProperty(gb)}const{assign:Nn}=Object;function bb(e){return!!(ze(e)&&e.effect)}function yb(e,t,n,s){const{state:i,actions:o,getters:a}=t,c=n.state.value[e];let f;function p(){c||(n.state.value[e]=i?i():{});const d=gg(n.state.value[e]);return Nn(d,o,Object.keys(a||{}).reduce((m,b)=>(m[b]=$a(Ft(()=>{qi(n);const w=n._s.get(e);return a[b].call(w,w)})),m),{}))}return f=Rd(e,p,t,n,s,!0),f}function Rd(e,t,n={},s,i,o){let a;const c=Nn({actions:{}},n),f={deep:!0};let p,d,m=[],b=[],w;const C=s.state.value[e];!o&&!C&&(s.state.value[e]={}),ja({});let P;function R(te){let q;p=d=!1,typeof te=="function"?(te(s.state.value[e]),q={type:hr.patchFunction,storeId:e,events:w}):(fa(s.state.value[e],te),q={type:hr.patchObject,payload:te,storeId:e,events:w});const oe=P=Symbol();Pr().then(()=>{P===oe&&(p=!0)}),d=!0,Ds(m,q,s.state.value[e])}const $=o?function(){const{state:q}=n,oe=q?q():{};this.$patch(ve=>{Nn(ve,oe)})}:xd;function N(){a.stop(),m=[],b=[],s._s.delete(e)}const B=(te,q="")=>{if(_u in te)return te[qo]=q,te;const oe=function(){qi(s);const ve=Array.from(arguments),G=[],be=[];function He(ae){G.push(ae)}function st(ae){be.push(ae)}Ds(b,{args:ve,name:oe[qo],store:Y,after:He,onError:st});let Oe;try{Oe=te.apply(this&&this.$id===e?this:Y,ve)}catch(ae){throw Ds(be,ae),ae}return Oe instanceof Promise?Oe.then(ae=>(Ds(G,ae),ae)).catch(ae=>(Ds(be,ae),Promise.reject(ae))):(Ds(G,Oe),Oe)};return oe[_u]=!0,oe[qo]=q,oe},H={_p:s,$id:e,$onAction:gu.bind(null,b),$patch:R,$reset:$,$subscribe(te,q={}){const oe=gu(m,te,q.detached,()=>ve()),ve=a.run(()=>fr(()=>s.state.value[e],G=>{(q.flush==="sync"?d:p)&&te({storeId:e,type:hr.direct,events:w},G)},Nn({},f,q)));return oe},$dispose:N},Y=xr(H);s._s.set(e,Y);const le=(s._a&&s._a.runWithContext||mb)(()=>s._e.run(()=>(a=df()).run(()=>t({action:B}))));for(const te in le){const q=le[te];if(ze(q)&&!bb(q)||Fn(q))o||(C&&_b(q)&&(ze(q)?q.value=C[te]:fa(q,C[te])),s.state.value[e][te]=q);else if(typeof q=="function"){const oe=B(q,te);le[te]=oe,c.actions[te]=q}}return Nn(Y,le),Nn(Ee(Y),le),Object.defineProperty(Y,"$state",{get:()=>s.state.value[e],set:te=>{R(q=>{Nn(q,te)})}}),s._p.forEach(te=>{Nn(Y,a.run(()=>te({store:Y,app:s._a,pinia:s,options:c})))}),C&&o&&n.hydrate&&n.hydrate(Y.$state,C),p=!0,d=!0,Y}function vb(e,t,n){let s,i;const o=typeof t=="function";s=e,i=o?n:t;function a(c,f){const p=Xg();return c=c||(p?xt(Od,null):null),c&&qi(c),c=Ad,c._s.has(s)||(o?Rd(s,t,i,c):yb(s,i,c)),c._s.get(s)}return a.$id=s,a}/*! + * vue-router v4.4.3 + * (c) 2024 Eduardo San Martin Morote + * @license MIT + */const Ms=typeof document<"u";function wb(e){return e.__esModule||e[Symbol.toStringTag]==="Module"}const Pe=Object.assign;function Wo(e,t){const n={};for(const s in t){const i=t[s];n[s]=Xt(i)?i.map(e):e(i)}return n}const pr=()=>{},Xt=Array.isArray,Pd=/#/g,Eb=/&/g,Cb=/\//g,Sb=/=/g,Tb=/\?/g,Id=/\+/g,Ab=/%5B/g,Ob=/%5D/g,Ld=/%5E/g,xb=/%60/g,Dd=/%7B/g,Rb=/%7C/g,Nd=/%7D/g,Pb=/%20/g;function za(e){return encodeURI(""+e).replace(Rb,"|").replace(Ab,"[").replace(Ob,"]")}function Ib(e){return za(e).replace(Dd,"{").replace(Nd,"}").replace(Ld,"^")}function da(e){return za(e).replace(Id,"%2B").replace(Pb,"+").replace(Pd,"%23").replace(Eb,"%26").replace(xb,"`").replace(Dd,"{").replace(Nd,"}").replace(Ld,"^")}function Lb(e){return da(e).replace(Sb,"%3D")}function Db(e){return za(e).replace(Pd,"%23").replace(Tb,"%3F")}function Nb(e){return e==null?"":Db(e).replace(Cb,"%2F")}function Er(e){try{return decodeURIComponent(""+e)}catch{}return""+e}const kb=/\/$/,Mb=e=>e.replace(kb,"");function zo(e,t,n="/"){let s,i={},o="",a="";const c=t.indexOf("#");let f=t.indexOf("?");return c=0&&(f=-1),f>-1&&(s=t.slice(0,f),o=t.slice(f+1,c>-1?c:t.length),i=e(o)),c>-1&&(s=s||t.slice(0,c),a=t.slice(c,t.length)),s=Bb(s??t,n),{fullPath:s+(o&&"?")+o+a,path:s,query:i,hash:Er(a)}}function $b(e,t){const n=t.query?e(t.query):"";return t.path+(n&&"?")+n+(t.hash||"")}function bu(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function Fb(e,t,n){const s=t.matched.length-1,i=n.matched.length-1;return s>-1&&s===i&&Vs(t.matched[s],n.matched[i])&&kd(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function Vs(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function kd(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(const n in e)if(!jb(e[n],t[n]))return!1;return!0}function jb(e,t){return Xt(e)?yu(e,t):Xt(t)?yu(t,e):e===t}function yu(e,t){return Xt(t)?e.length===t.length&&e.every((n,s)=>n===t[s]):e.length===1&&e[0]===t}function Bb(e,t){if(e.startsWith("/"))return e;if(!e)return t;const n=t.split("/"),s=e.split("/"),i=s[s.length-1];(i===".."||i===".")&&s.push("");let o=n.length-1,a,c;for(a=0;a1&&o--;else break;return n.slice(0,o).join("/")+"/"+s.slice(a).join("/")}const In={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0};var Cr;(function(e){e.pop="pop",e.push="push"})(Cr||(Cr={}));var mr;(function(e){e.back="back",e.forward="forward",e.unknown=""})(mr||(mr={}));function Hb(e){if(!e)if(Ms){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),Mb(e)}const Ub=/^[^#]+#/;function Vb(e,t){return e.replace(Ub,"#")+t}function qb(e,t){const n=document.documentElement.getBoundingClientRect(),s=e.getBoundingClientRect();return{behavior:t.behavior,left:s.left-n.left-(t.left||0),top:s.top-n.top-(t.top||0)}}const Wi=()=>({left:window.scrollX,top:window.scrollY});function Wb(e){let t;if("el"in e){const n=e.el,s=typeof n=="string"&&n.startsWith("#"),i=typeof n=="string"?s?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!i)return;t=qb(i,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.scrollX,t.top!=null?t.top:window.scrollY)}function vu(e,t){return(history.state?history.state.position-t:-1)+e}const ha=new Map;function zb(e,t){ha.set(e,t)}function Kb(e){const t=ha.get(e);return ha.delete(e),t}let Gb=()=>location.protocol+"//"+location.host;function Md(e,t){const{pathname:n,search:s,hash:i}=t,o=e.indexOf("#");if(o>-1){let c=i.includes(e.slice(o))?e.slice(o).length:1,f=i.slice(c);return f[0]!=="/"&&(f="/"+f),bu(f,"")}return bu(n,e)+s+i}function Jb(e,t,n,s){let i=[],o=[],a=null;const c=({state:b})=>{const w=Md(e,location),C=n.value,P=t.value;let R=0;if(b){if(n.value=w,t.value=b,a&&a===C){a=null;return}R=P?b.position-P.position:0}else s(w);i.forEach($=>{$(n.value,C,{delta:R,type:Cr.pop,direction:R?R>0?mr.forward:mr.back:mr.unknown})})};function f(){a=n.value}function p(b){i.push(b);const w=()=>{const C=i.indexOf(b);C>-1&&i.splice(C,1)};return o.push(w),w}function d(){const{history:b}=window;b.state&&b.replaceState(Pe({},b.state,{scroll:Wi()}),"")}function m(){for(const b of o)b();o=[],window.removeEventListener("popstate",c),window.removeEventListener("beforeunload",d)}return window.addEventListener("popstate",c),window.addEventListener("beforeunload",d,{passive:!0}),{pauseListeners:f,listen:p,destroy:m}}function wu(e,t,n,s=!1,i=!1){return{back:e,current:t,forward:n,replaced:s,position:window.history.length,scroll:i?Wi():null}}function Xb(e){const{history:t,location:n}=window,s={value:Md(e,n)},i={value:t.state};i.value||o(s.value,{back:null,current:s.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function o(f,p,d){const m=e.indexOf("#"),b=m>-1?(n.host&&document.querySelector("base")?e:e.slice(m))+f:Gb()+e+f;try{t[d?"replaceState":"pushState"](p,"",b),i.value=p}catch(w){console.error(w),n[d?"replace":"assign"](b)}}function a(f,p){const d=Pe({},t.state,wu(i.value.back,f,i.value.forward,!0),p,{position:i.value.position});o(f,d,!0),s.value=f}function c(f,p){const d=Pe({},i.value,t.state,{forward:f,scroll:Wi()});o(d.current,d,!0);const m=Pe({},wu(s.value,f,null),{position:d.position+1},p);o(f,m,!1),s.value=f}return{location:s,state:i,push:c,replace:a}}function Qb(e){e=Hb(e);const t=Xb(e),n=Jb(e,t.state,t.location,t.replace);function s(o,a=!0){a||n.pauseListeners(),history.go(o)}const i=Pe({location:"",base:e,go:s,createHref:Vb.bind(null,e)},t,n);return Object.defineProperty(i,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(i,"state",{enumerable:!0,get:()=>t.state.value}),i}function Yb(e){return typeof e=="string"||e&&typeof e=="object"}function $d(e){return typeof e=="string"||typeof e=="symbol"}const Fd=Symbol("");var Eu;(function(e){e[e.aborted=4]="aborted",e[e.cancelled=8]="cancelled",e[e.duplicated=16]="duplicated"})(Eu||(Eu={}));function qs(e,t){return Pe(new Error,{type:e,[Fd]:!0},t)}function _n(e,t){return e instanceof Error&&Fd in e&&(t==null||!!(e.type&t))}const Cu="[^/]+?",Zb={sensitive:!1,strict:!1,start:!0,end:!0},ey=/[.+*?^${}()[\]/\\]/g;function ty(e,t){const n=Pe({},Zb,t),s=[];let i=n.start?"^":"";const o=[];for(const p of e){const d=p.length?[]:[90];n.strict&&!p.length&&(i+="/");for(let m=0;mt.length?t.length===1&&t[0]===80?1:-1:0}function jd(e,t){let n=0;const s=e.score,i=t.score;for(;n0&&t[t.length-1]<0}const sy={type:0,value:""},ry=/[a-zA-Z0-9_]/;function iy(e){if(!e)return[[]];if(e==="/")return[[sy]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(w){throw new Error(`ERR (${n})/"${p}": ${w}`)}let n=0,s=n;const i=[];let o;function a(){o&&i.push(o),o=[]}let c=0,f,p="",d="";function m(){p&&(n===0?o.push({type:0,value:p}):n===1||n===2||n===3?(o.length>1&&(f==="*"||f==="+")&&t(`A repeatable param (${p}) must be alone in its segment. eg: '/:ids+.`),o.push({type:1,value:p,regexp:d,repeatable:f==="*"||f==="+",optional:f==="*"||f==="?"})):t("Invalid state to consume buffer"),p="")}function b(){p+=f}for(;c{a(B)}:pr}function a(m){if($d(m)){const b=s.get(m);b&&(s.delete(m),n.splice(n.indexOf(b),1),b.children.forEach(a),b.alias.forEach(a))}else{const b=n.indexOf(m);b>-1&&(n.splice(b,1),m.record.name&&s.delete(m.record.name),m.children.forEach(a),m.alias.forEach(a))}}function c(){return n}function f(m){const b=fy(m,n);n.splice(b,0,m),m.record.name&&!Au(m)&&s.set(m.record.name,m)}function p(m,b){let w,C={},P,R;if("name"in m&&m.name){if(w=s.get(m.name),!w)throw qs(1,{location:m});R=w.record.name,C=Pe(Tu(b.params,w.keys.filter(B=>!B.optional).concat(w.parent?w.parent.keys.filter(B=>B.optional):[]).map(B=>B.name)),m.params&&Tu(m.params,w.keys.map(B=>B.name))),P=w.stringify(C)}else if(m.path!=null)P=m.path,w=n.find(B=>B.re.test(P)),w&&(C=w.parse(P),R=w.record.name);else{if(w=b.name?s.get(b.name):n.find(B=>B.re.test(b.path)),!w)throw qs(1,{location:m,currentLocation:b});R=w.record.name,C=Pe({},b.params,m.params),P=w.stringify(C)}const $=[];let N=w;for(;N;)$.unshift(N.record),N=N.parent;return{name:R,path:P,params:C,matched:$,meta:uy($)}}e.forEach(m=>o(m));function d(){n.length=0,s.clear()}return{addRoute:o,resolve:p,removeRoute:a,clearRoutes:d,getRoutes:c,getRecordMatcher:i}}function Tu(e,t){const n={};for(const s of t)s in e&&(n[s]=e[s]);return n}function ly(e){return{path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:void 0,beforeEnter:e.beforeEnter,props:cy(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}}}function cy(e){const t={},n=e.props||!1;if("component"in e)t.default=n;else for(const s in e.components)t[s]=typeof n=="object"?n[s]:n;return t}function Au(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function uy(e){return e.reduce((t,n)=>Pe(t,n.meta),{})}function Ou(e,t){const n={};for(const s in e)n[s]=s in t?t[s]:e[s];return n}function fy(e,t){let n=0,s=t.length;for(;n!==s;){const o=n+s>>1;jd(e,t[o])<0?s=o:n=o+1}const i=dy(e);return i&&(s=t.lastIndexOf(i,s-1)),s}function dy(e){let t=e;for(;t=t.parent;)if(Bd(t)&&jd(e,t)===0)return t}function Bd({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function hy(e){const t={};if(e===""||e==="?")return t;const s=(e[0]==="?"?e.slice(1):e).split("&");for(let i=0;io&&da(o)):[s&&da(s)]).forEach(o=>{o!==void 0&&(t+=(t.length?"&":"")+n,o!=null&&(t+="="+o))})}return t}function py(e){const t={};for(const n in e){const s=e[n];s!==void 0&&(t[n]=Xt(s)?s.map(i=>i==null?null:""+i):s==null?s:""+s)}return t}const my=Symbol(""),Ru=Symbol(""),zi=Symbol(""),Ka=Symbol(""),pa=Symbol("");function rr(){let e=[];function t(s){return e.push(s),()=>{const i=e.indexOf(s);i>-1&&e.splice(i,1)}}function n(){e=[]}return{add:t,list:()=>e.slice(),reset:n}}function $n(e,t,n,s,i,o=a=>a()){const a=s&&(s.enterCallbacks[i]=s.enterCallbacks[i]||[]);return()=>new Promise((c,f)=>{const p=b=>{b===!1?f(qs(4,{from:n,to:t})):b instanceof Error?f(b):Yb(b)?f(qs(2,{from:t,to:b})):(a&&s.enterCallbacks[i]===a&&typeof b=="function"&&a.push(b),c())},d=o(()=>e.call(s&&s.instances[i],t,n,p));let m=Promise.resolve(d);e.length<3&&(m=m.then(p)),m.catch(b=>f(b))})}function Ko(e,t,n,s,i=o=>o()){const o=[];for(const a of e)for(const c in a.components){let f=a.components[c];if(!(t!=="beforeRouteEnter"&&!a.instances[c]))if(gy(f)){const d=(f.__vccOpts||f)[t];d&&o.push($n(d,n,s,a,c,i))}else{let p=f();o.push(()=>p.then(d=>{if(!d)return Promise.reject(new Error(`Couldn't resolve component "${c}" at "${a.path}"`));const m=wb(d)?d.default:d;a.components[c]=m;const w=(m.__vccOpts||m)[t];return w&&$n(w,n,s,a,c,i)()}))}}return o}function gy(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function Pu(e){const t=xt(zi),n=xt(Ka),s=Ft(()=>{const f=jn(e.to);return t.resolve(f)}),i=Ft(()=>{const{matched:f}=s.value,{length:p}=f,d=f[p-1],m=n.matched;if(!d||!m.length)return-1;const b=m.findIndex(Vs.bind(null,d));if(b>-1)return b;const w=Iu(f[p-2]);return p>1&&Iu(d)===w&&m[m.length-1].path!==w?m.findIndex(Vs.bind(null,f[p-2])):b}),o=Ft(()=>i.value>-1&&vy(n.params,s.value.params)),a=Ft(()=>i.value>-1&&i.value===n.matched.length-1&&kd(n.params,s.value.params));function c(f={}){return yy(f)?t[jn(e.replace)?"replace":"push"](jn(e.to)).catch(pr):Promise.resolve()}return{route:s,href:Ft(()=>s.value.href),isActive:o,isExactActive:a,navigate:c}}const _y=dn({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"}},useLink:Pu,setup(e,{slots:t}){const n=xr(Pu(e)),{options:s}=xt(zi),i=Ft(()=>({[Lu(e.activeClass,s.linkActiveClass,"router-link-active")]:n.isActive,[Lu(e.exactActiveClass,s.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive}));return()=>{const o=t.default&&t.default(n);return e.custom?o:gd("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:i.value},o)}}}),by=_y;function yy(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function vy(e,t){for(const n in t){const s=t[n],i=e[n];if(typeof s=="string"){if(s!==i)return!1}else if(!Xt(i)||i.length!==s.length||s.some((o,a)=>o!==i[a]))return!1}return!0}function Iu(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const Lu=(e,t,n)=>e??t??n,wy=dn({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){const s=xt(pa),i=Ft(()=>e.route||s.value),o=xt(Ru,0),a=Ft(()=>{let p=jn(o);const{matched:d}=i.value;let m;for(;(m=d[p])&&!m.components;)p++;return p}),c=Ft(()=>i.value.matched[a.value]);di(Ru,Ft(()=>a.value+1)),di(my,c),di(pa,i);const f=ja();return fr(()=>[f.value,c.value,e.name],([p,d,m],[b,w,C])=>{d&&(d.instances[m]=p,w&&w!==d&&p&&p===b&&(d.leaveGuards.size||(d.leaveGuards=w.leaveGuards),d.updateGuards.size||(d.updateGuards=w.updateGuards))),p&&d&&(!w||!Vs(d,w)||!b)&&(d.enterCallbacks[m]||[]).forEach(P=>P(p))},{flush:"post"}),()=>{const p=i.value,d=e.name,m=c.value,b=m&&m.components[d];if(!b)return Du(n.default,{Component:b,route:p});const w=m.props[d],C=w?w===!0?p.params:typeof w=="function"?w(p):w:null,R=gd(b,Pe({},C,t,{onVnodeUnmounted:$=>{$.component.isUnmounted&&(m.instances[d]=null)},ref:f}));return Du(n.default,{Component:R,route:p})||R}}});function Du(e,t){if(!e)return null;const n=e(t);return n.length===1?n[0]:n}const Hd=wy;function Ey(e){const t=ay(e.routes,e),n=e.parseQuery||hy,s=e.stringifyQuery||xu,i=e.history,o=rr(),a=rr(),c=rr(),f=hg(In);let p=In;Ms&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const d=Wo.bind(null,x=>""+x),m=Wo.bind(null,Nb),b=Wo.bind(null,Er);function w(x,A){let V,Z;return $d(x)?(V=t.getRecordMatcher(x),Z=A):Z=x,t.addRoute(Z,V)}function C(x){const A=t.getRecordMatcher(x);A&&t.removeRoute(A)}function P(){return t.getRoutes().map(x=>x.record)}function R(x){return!!t.getRecordMatcher(x)}function $(x,A){if(A=Pe({},A||f.value),typeof x=="string"){const _=zo(n,x,A.path),E=t.resolve({path:_.path},A),D=i.createHref(_.fullPath);return Pe(_,E,{params:b(E.params),hash:Er(_.hash),redirectedFrom:void 0,href:D})}let V;if(x.path!=null)V=Pe({},x,{path:zo(n,x.path,A.path).path});else{const _=Pe({},x.params);for(const E in _)_[E]==null&&delete _[E];V=Pe({},x,{params:m(_)}),A.params=m(A.params)}const Z=t.resolve(V,A),Te=x.hash||"";Z.params=d(b(Z.params));const je=$b(s,Pe({},x,{hash:Ib(Te),path:Z.path})),g=i.createHref(je);return Pe({fullPath:je,hash:Te,query:s===xu?py(x.query):x.query||{}},Z,{redirectedFrom:void 0,href:g})}function N(x){return typeof x=="string"?zo(n,x,f.value.path):Pe({},x)}function B(x,A){if(p!==x)return qs(8,{from:A,to:x})}function H(x){return le(x)}function Y(x){return H(Pe(N(x),{replace:!0}))}function ge(x){const A=x.matched[x.matched.length-1];if(A&&A.redirect){const{redirect:V}=A;let Z=typeof V=="function"?V(x):V;return typeof Z=="string"&&(Z=Z.includes("?")||Z.includes("#")?Z=N(Z):{path:Z},Z.params={}),Pe({query:x.query,hash:x.hash,params:Z.path!=null?{}:x.params},Z)}}function le(x,A){const V=p=$(x),Z=f.value,Te=x.state,je=x.force,g=x.replace===!0,_=ge(V);if(_)return le(Pe(N(_),{state:typeof _=="object"?Pe({},Te,_.state):Te,force:je,replace:g}),A||V);const E=V;E.redirectedFrom=A;let D;return!je&&Fb(s,Z,V)&&(D=qs(16,{to:E,from:Z}),_t(Z,Z,!0,!1)),(D?Promise.resolve(D):oe(E,Z)).catch(O=>_n(O)?_n(O,2)?O:I(O):Se(O,E,Z)).then(O=>{if(O){if(_n(O,2))return le(Pe({replace:g},N(O.to),{state:typeof O.to=="object"?Pe({},Te,O.to.state):Te,force:je}),A||E)}else O=G(E,Z,!0,g,Te);return ve(E,Z,O),O})}function te(x,A){const V=B(x,A);return V?Promise.reject(V):Promise.resolve()}function q(x){const A=rt.values().next().value;return A&&typeof A.runWithContext=="function"?A.runWithContext(x):x()}function oe(x,A){let V;const[Z,Te,je]=Cy(x,A);V=Ko(Z.reverse(),"beforeRouteLeave",x,A);for(const _ of Z)_.leaveGuards.forEach(E=>{V.push($n(E,x,A))});const g=te.bind(null,x,A);return V.push(g),Be(V).then(()=>{V=[];for(const _ of o.list())V.push($n(_,x,A));return V.push(g),Be(V)}).then(()=>{V=Ko(Te,"beforeRouteUpdate",x,A);for(const _ of Te)_.updateGuards.forEach(E=>{V.push($n(E,x,A))});return V.push(g),Be(V)}).then(()=>{V=[];for(const _ of je)if(_.beforeEnter)if(Xt(_.beforeEnter))for(const E of _.beforeEnter)V.push($n(E,x,A));else V.push($n(_.beforeEnter,x,A));return V.push(g),Be(V)}).then(()=>(x.matched.forEach(_=>_.enterCallbacks={}),V=Ko(je,"beforeRouteEnter",x,A,q),V.push(g),Be(V))).then(()=>{V=[];for(const _ of a.list())V.push($n(_,x,A));return V.push(g),Be(V)}).catch(_=>_n(_,8)?_:Promise.reject(_))}function ve(x,A,V){c.list().forEach(Z=>q(()=>Z(x,A,V)))}function G(x,A,V,Z,Te){const je=B(x,A);if(je)return je;const g=A===In,_=Ms?history.state:{};V&&(Z||g?i.replace(x.fullPath,Pe({scroll:g&&_&&_.scroll},Te)):i.push(x.fullPath,Te)),f.value=x,_t(x,A,V,g),I()}let be;function He(){be||(be=i.listen((x,A,V)=>{if(!Zt.listening)return;const Z=$(x),Te=ge(Z);if(Te){le(Pe(Te,{replace:!0}),Z).catch(pr);return}p=Z;const je=f.value;Ms&&zb(vu(je.fullPath,V.delta),Wi()),oe(Z,je).catch(g=>_n(g,12)?g:_n(g,2)?(le(g.to,Z).then(_=>{_n(_,20)&&!V.delta&&V.type===Cr.pop&&i.go(-1,!1)}).catch(pr),Promise.reject()):(V.delta&&i.go(-V.delta,!1),Se(g,Z,je))).then(g=>{g=g||G(Z,je,!1),g&&(V.delta&&!_n(g,8)?i.go(-V.delta,!1):V.type===Cr.pop&&_n(g,20)&&i.go(-1,!1)),ve(Z,je,g)}).catch(pr)}))}let st=rr(),Oe=rr(),ae;function Se(x,A,V){I(x);const Z=Oe.list();return Z.length?Z.forEach(Te=>Te(x,A,V)):console.error(x),Promise.reject(x)}function Pt(){return ae&&f.value!==In?Promise.resolve():new Promise((x,A)=>{st.add([x,A])})}function I(x){return ae||(ae=!x,He(),st.list().forEach(([A,V])=>x?V(x):A()),st.reset()),x}function _t(x,A,V,Z){const{scrollBehavior:Te}=e;if(!Ms||!Te)return Promise.resolve();const je=!V&&Kb(vu(x.fullPath,0))||(Z||!V)&&history.state&&history.state.scroll||null;return Pr().then(()=>Te(x,A,je)).then(g=>g&&Wb(g)).catch(g=>Se(g,x,A))}const et=x=>i.go(x);let Yt;const rt=new Set,Zt={currentRoute:f,listening:!0,addRoute:w,removeRoute:C,clearRoutes:t.clearRoutes,hasRoute:R,getRoutes:P,resolve:$,options:e,push:H,replace:Y,go:et,back:()=>et(-1),forward:()=>et(1),beforeEach:o.add,beforeResolve:a.add,afterEach:c.add,onError:Oe.add,isReady:Pt,install(x){const A=this;x.component("RouterLink",by),x.component("RouterView",Hd),x.config.globalProperties.$router=A,Object.defineProperty(x.config.globalProperties,"$route",{enumerable:!0,get:()=>jn(f)}),Ms&&!Yt&&f.value===In&&(Yt=!0,H(i.location).catch(Te=>{}));const V={};for(const Te in In)Object.defineProperty(V,Te,{get:()=>f.value[Te],enumerable:!0});x.provide(zi,A),x.provide(Ka,Of(V)),x.provide(pa,f);const Z=x.unmount;rt.add(x),x.unmount=function(){rt.delete(x),rt.size<1&&(p=In,be&&be(),be=null,f.value=In,Yt=!1,ae=!1),Z()}}};function Be(x){return x.reduce((A,V)=>A.then(()=>q(V)),Promise.resolve())}return Zt}function Cy(e,t){const n=[],s=[],i=[],o=Math.max(t.matched.length,e.matched.length);for(let a=0;aVs(p,c))?s.push(c):n.push(c));const f=e.matched[a];f&&(t.matched.find(p=>Vs(p,f))||i.push(f))}return[n,s,i]}function c0(){return xt(zi)}function u0(e){return xt(Ka)}const Sy=dn({__name:"App",setup(e){return(t,n)=>(Ue(),jt(jn(Hd)))}});function Ud(e,t){return function(){return e.apply(t,arguments)}}const{toString:Ty}=Object.prototype,{getPrototypeOf:Ga}=Object,Ki=(e=>t=>{const n=Ty.call(t);return e[n]||(e[n]=n.slice(8,-1).toLowerCase())})(Object.create(null)),Qt=e=>(e=e.toLowerCase(),t=>Ki(t)===e),Gi=e=>t=>typeof t===e,{isArray:zs}=Array,Sr=Gi("undefined");function Ay(e){return e!==null&&!Sr(e)&&e.constructor!==null&&!Sr(e.constructor)&&Rt(e.constructor.isBuffer)&&e.constructor.isBuffer(e)}const Vd=Qt("ArrayBuffer");function Oy(e){let t;return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?t=ArrayBuffer.isView(e):t=e&&e.buffer&&Vd(e.buffer),t}const xy=Gi("string"),Rt=Gi("function"),qd=Gi("number"),Ji=e=>e!==null&&typeof e=="object",Ry=e=>e===!0||e===!1,gi=e=>{if(Ki(e)!=="object")return!1;const t=Ga(e);return(t===null||t===Object.prototype||Object.getPrototypeOf(t)===null)&&!(Symbol.toStringTag in e)&&!(Symbol.iterator in e)},Py=Qt("Date"),Iy=Qt("File"),Ly=Qt("Blob"),Dy=Qt("FileList"),Ny=e=>Ji(e)&&Rt(e.pipe),ky=e=>{let t;return e&&(typeof FormData=="function"&&e instanceof FormData||Rt(e.append)&&((t=Ki(e))==="formdata"||t==="object"&&Rt(e.toString)&&e.toString()==="[object FormData]"))},My=Qt("URLSearchParams"),[$y,Fy,jy,By]=["ReadableStream","Request","Response","Headers"].map(Qt),Hy=e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");function Dr(e,t,{allOwnKeys:n=!1}={}){if(e===null||typeof e>"u")return;let s,i;if(typeof e!="object"&&(e=[e]),zs(e))for(s=0,i=e.length;s0;)if(i=n[s],t===i.toLowerCase())return i;return null}const as=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:global,zd=e=>!Sr(e)&&e!==as;function ma(){const{caseless:e}=zd(this)&&this||{},t={},n=(s,i)=>{const o=e&&Wd(t,i)||i;gi(t[o])&&gi(s)?t[o]=ma(t[o],s):gi(s)?t[o]=ma({},s):zs(s)?t[o]=s.slice():t[o]=s};for(let s=0,i=arguments.length;s(Dr(t,(i,o)=>{n&&Rt(i)?e[o]=Ud(i,n):e[o]=i},{allOwnKeys:s}),e),Vy=e=>(e.charCodeAt(0)===65279&&(e=e.slice(1)),e),qy=(e,t,n,s)=>{e.prototype=Object.create(t.prototype,s),e.prototype.constructor=e,Object.defineProperty(e,"super",{value:t.prototype}),n&&Object.assign(e.prototype,n)},Wy=(e,t,n,s)=>{let i,o,a;const c={};if(t=t||{},e==null)return t;do{for(i=Object.getOwnPropertyNames(e),o=i.length;o-- >0;)a=i[o],(!s||s(a,e,t))&&!c[a]&&(t[a]=e[a],c[a]=!0);e=n!==!1&&Ga(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},zy=(e,t,n)=>{e=String(e),(n===void 0||n>e.length)&&(n=e.length),n-=t.length;const s=e.indexOf(t,n);return s!==-1&&s===n},Ky=e=>{if(!e)return null;if(zs(e))return e;let t=e.length;if(!qd(t))return null;const n=new Array(t);for(;t-- >0;)n[t]=e[t];return n},Gy=(e=>t=>e&&t instanceof e)(typeof Uint8Array<"u"&&Ga(Uint8Array)),Jy=(e,t)=>{const s=(e&&e[Symbol.iterator]).call(e);let i;for(;(i=s.next())&&!i.done;){const o=i.value;t.call(e,o[0],o[1])}},Xy=(e,t)=>{let n;const s=[];for(;(n=e.exec(t))!==null;)s.push(n);return s},Qy=Qt("HTMLFormElement"),Yy=e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(n,s,i){return s.toUpperCase()+i}),Nu=(({hasOwnProperty:e})=>(t,n)=>e.call(t,n))(Object.prototype),Zy=Qt("RegExp"),Kd=(e,t)=>{const n=Object.getOwnPropertyDescriptors(e),s={};Dr(n,(i,o)=>{let a;(a=t(i,o,e))!==!1&&(s[o]=a||i)}),Object.defineProperties(e,s)},ev=e=>{Kd(e,(t,n)=>{if(Rt(e)&&["arguments","caller","callee"].indexOf(n)!==-1)return!1;const s=e[n];if(Rt(s)){if(t.enumerable=!1,"writable"in t){t.writable=!1;return}t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+n+"'")})}})},tv=(e,t)=>{const n={},s=i=>{i.forEach(o=>{n[o]=!0})};return zs(e)?s(e):s(String(e).split(t)),n},nv=()=>{},sv=(e,t)=>e!=null&&Number.isFinite(e=+e)?e:t,Go="abcdefghijklmnopqrstuvwxyz",ku="0123456789",Gd={DIGIT:ku,ALPHA:Go,ALPHA_DIGIT:Go+Go.toUpperCase()+ku},rv=(e=16,t=Gd.ALPHA_DIGIT)=>{let n="";const{length:s}=t;for(;e--;)n+=t[Math.random()*s|0];return n};function iv(e){return!!(e&&Rt(e.append)&&e[Symbol.toStringTag]==="FormData"&&e[Symbol.iterator])}const ov=e=>{const t=new Array(10),n=(s,i)=>{if(Ji(s)){if(t.indexOf(s)>=0)return;if(!("toJSON"in s)){t[i]=s;const o=zs(s)?[]:{};return Dr(s,(a,c)=>{const f=n(a,i+1);!Sr(f)&&(o[c]=f)}),t[i]=void 0,o}}return s};return n(e,0)},av=Qt("AsyncFunction"),lv=e=>e&&(Ji(e)||Rt(e))&&Rt(e.then)&&Rt(e.catch),Jd=((e,t)=>e?setImmediate:t?((n,s)=>(as.addEventListener("message",({source:i,data:o})=>{i===as&&o===n&&s.length&&s.shift()()},!1),i=>{s.push(i),as.postMessage(n,"*")}))(`axios@${Math.random()}`,[]):n=>setTimeout(n))(typeof setImmediate=="function",Rt(as.postMessage)),cv=typeof queueMicrotask<"u"?queueMicrotask.bind(as):typeof process<"u"&&process.nextTick||Jd,T={isArray:zs,isArrayBuffer:Vd,isBuffer:Ay,isFormData:ky,isArrayBufferView:Oy,isString:xy,isNumber:qd,isBoolean:Ry,isObject:Ji,isPlainObject:gi,isReadableStream:$y,isRequest:Fy,isResponse:jy,isHeaders:By,isUndefined:Sr,isDate:Py,isFile:Iy,isBlob:Ly,isRegExp:Zy,isFunction:Rt,isStream:Ny,isURLSearchParams:My,isTypedArray:Gy,isFileList:Dy,forEach:Dr,merge:ma,extend:Uy,trim:Hy,stripBOM:Vy,inherits:qy,toFlatObject:Wy,kindOf:Ki,kindOfTest:Qt,endsWith:zy,toArray:Ky,forEachEntry:Jy,matchAll:Xy,isHTMLForm:Qy,hasOwnProperty:Nu,hasOwnProp:Nu,reduceDescriptors:Kd,freezeMethods:ev,toObjectSet:tv,toCamelCase:Yy,noop:nv,toFiniteNumber:sv,findKey:Wd,global:as,isContextDefined:zd,ALPHABET:Gd,generateString:rv,isSpecCompliantForm:iv,toJSONObject:ov,isAsyncFn:av,isThenable:lv,setImmediate:Jd,asap:cv};function de(e,t,n,s,i){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack,this.message=e,this.name="AxiosError",t&&(this.code=t),n&&(this.config=n),s&&(this.request=s),i&&(this.response=i,this.status=i.status?i.status:null)}T.inherits(de,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:T.toJSONObject(this.config),code:this.code,status:this.status}}});const Xd=de.prototype,Qd={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach(e=>{Qd[e]={value:e}});Object.defineProperties(de,Qd);Object.defineProperty(Xd,"isAxiosError",{value:!0});de.from=(e,t,n,s,i,o)=>{const a=Object.create(Xd);return T.toFlatObject(e,a,function(f){return f!==Error.prototype},c=>c!=="isAxiosError"),de.call(a,e.message,t,n,s,i),a.cause=e,a.name=e.name,o&&Object.assign(a,o),a};const uv=null;function ga(e){return T.isPlainObject(e)||T.isArray(e)}function Yd(e){return T.endsWith(e,"[]")?e.slice(0,-2):e}function Mu(e,t,n){return e?e.concat(t).map(function(i,o){return i=Yd(i),!n&&o?"["+i+"]":i}).join(n?".":""):t}function fv(e){return T.isArray(e)&&!e.some(ga)}const dv=T.toFlatObject(T,{},null,function(t){return/^is[A-Z]/.test(t)});function Xi(e,t,n){if(!T.isObject(e))throw new TypeError("target must be an object");t=t||new FormData,n=T.toFlatObject(n,{metaTokens:!0,dots:!1,indexes:!1},!1,function(P,R){return!T.isUndefined(R[P])});const s=n.metaTokens,i=n.visitor||d,o=n.dots,a=n.indexes,f=(n.Blob||typeof Blob<"u"&&Blob)&&T.isSpecCompliantForm(t);if(!T.isFunction(i))throw new TypeError("visitor must be a function");function p(C){if(C===null)return"";if(T.isDate(C))return C.toISOString();if(!f&&T.isBlob(C))throw new de("Blob is not supported. Use a Buffer instead.");return T.isArrayBuffer(C)||T.isTypedArray(C)?f&&typeof Blob=="function"?new Blob([C]):Buffer.from(C):C}function d(C,P,R){let $=C;if(C&&!R&&typeof C=="object"){if(T.endsWith(P,"{}"))P=s?P:P.slice(0,-2),C=JSON.stringify(C);else if(T.isArray(C)&&fv(C)||(T.isFileList(C)||T.endsWith(P,"[]"))&&($=T.toArray(C)))return P=Yd(P),$.forEach(function(B,H){!(T.isUndefined(B)||B===null)&&t.append(a===!0?Mu([P],H,o):a===null?P:P+"[]",p(B))}),!1}return ga(C)?!0:(t.append(Mu(R,P,o),p(C)),!1)}const m=[],b=Object.assign(dv,{defaultVisitor:d,convertValue:p,isVisitable:ga});function w(C,P){if(!T.isUndefined(C)){if(m.indexOf(C)!==-1)throw Error("Circular reference detected in "+P.join("."));m.push(C),T.forEach(C,function($,N){(!(T.isUndefined($)||$===null)&&i.call(t,$,T.isString(N)?N.trim():N,P,b))===!0&&w($,P?P.concat(N):[N])}),m.pop()}}if(!T.isObject(e))throw new TypeError("data must be an object");return w(e),t}function $u(e){const t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,function(s){return t[s]})}function Ja(e,t){this._pairs=[],e&&Xi(e,this,t)}const Zd=Ja.prototype;Zd.append=function(t,n){this._pairs.push([t,n])};Zd.toString=function(t){const n=t?function(s){return t.call(this,s,$u)}:$u;return this._pairs.map(function(i){return n(i[0])+"="+n(i[1])},"").join("&")};function hv(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function eh(e,t,n){if(!t)return e;const s=n&&n.encode||hv,i=n&&n.serialize;let o;if(i?o=i(t,n):o=T.isURLSearchParams(t)?t.toString():new Ja(t,n).toString(s),o){const a=e.indexOf("#");a!==-1&&(e=e.slice(0,a)),e+=(e.indexOf("?")===-1?"?":"&")+o}return e}class Fu{constructor(){this.handlers=[]}use(t,n,s){return this.handlers.push({fulfilled:t,rejected:n,synchronous:s?s.synchronous:!1,runWhen:s?s.runWhen:null}),this.handlers.length-1}eject(t){this.handlers[t]&&(this.handlers[t]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(t){T.forEach(this.handlers,function(s){s!==null&&t(s)})}}const th={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},pv=typeof URLSearchParams<"u"?URLSearchParams:Ja,mv=typeof FormData<"u"?FormData:null,gv=typeof Blob<"u"?Blob:null,_v={isBrowser:!0,classes:{URLSearchParams:pv,FormData:mv,Blob:gv},protocols:["http","https","file","blob","url","data"]},Xa=typeof window<"u"&&typeof document<"u",_a=typeof navigator=="object"&&navigator||void 0,bv=Xa&&(!_a||["ReactNative","NativeScript","NS"].indexOf(_a.product)<0),yv=typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&typeof self.importScripts=="function",vv=Xa&&window.location.href||"http://localhost",wv=Object.freeze(Object.defineProperty({__proto__:null,hasBrowserEnv:Xa,hasStandardBrowserEnv:bv,hasStandardBrowserWebWorkerEnv:yv,navigator:_a,origin:vv},Symbol.toStringTag,{value:"Module"})),bt={...wv,..._v};function Ev(e,t){return Xi(e,new bt.classes.URLSearchParams,Object.assign({visitor:function(n,s,i,o){return bt.isNode&&T.isBuffer(n)?(this.append(s,n.toString("base64")),!1):o.defaultVisitor.apply(this,arguments)}},t))}function Cv(e){return T.matchAll(/\w+|\[(\w*)]/g,e).map(t=>t[0]==="[]"?"":t[1]||t[0])}function Sv(e){const t={},n=Object.keys(e);let s;const i=n.length;let o;for(s=0;s=n.length;return a=!a&&T.isArray(i)?i.length:a,f?(T.hasOwnProp(i,a)?i[a]=[i[a],s]:i[a]=s,!c):((!i[a]||!T.isObject(i[a]))&&(i[a]=[]),t(n,s,i[a],o)&&T.isArray(i[a])&&(i[a]=Sv(i[a])),!c)}if(T.isFormData(e)&&T.isFunction(e.entries)){const n={};return T.forEachEntry(e,(s,i)=>{t(Cv(s),i,n,0)}),n}return null}function Tv(e,t,n){if(T.isString(e))try{return(t||JSON.parse)(e),T.trim(e)}catch(s){if(s.name!=="SyntaxError")throw s}return(n||JSON.stringify)(e)}const Nr={transitional:th,adapter:["xhr","http","fetch"],transformRequest:[function(t,n){const s=n.getContentType()||"",i=s.indexOf("application/json")>-1,o=T.isObject(t);if(o&&T.isHTMLForm(t)&&(t=new FormData(t)),T.isFormData(t))return i?JSON.stringify(nh(t)):t;if(T.isArrayBuffer(t)||T.isBuffer(t)||T.isStream(t)||T.isFile(t)||T.isBlob(t)||T.isReadableStream(t))return t;if(T.isArrayBufferView(t))return t.buffer;if(T.isURLSearchParams(t))return n.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),t.toString();let c;if(o){if(s.indexOf("application/x-www-form-urlencoded")>-1)return Ev(t,this.formSerializer).toString();if((c=T.isFileList(t))||s.indexOf("multipart/form-data")>-1){const f=this.env&&this.env.FormData;return Xi(c?{"files[]":t}:t,f&&new f,this.formSerializer)}}return o||i?(n.setContentType("application/json",!1),Tv(t)):t}],transformResponse:[function(t){const n=this.transitional||Nr.transitional,s=n&&n.forcedJSONParsing,i=this.responseType==="json";if(T.isResponse(t)||T.isReadableStream(t))return t;if(t&&T.isString(t)&&(s&&!this.responseType||i)){const a=!(n&&n.silentJSONParsing)&&i;try{return JSON.parse(t)}catch(c){if(a)throw c.name==="SyntaxError"?de.from(c,de.ERR_BAD_RESPONSE,this,null,this.response):c}}return t}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:bt.classes.FormData,Blob:bt.classes.Blob},validateStatus:function(t){return t>=200&&t<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};T.forEach(["delete","get","head","post","put","patch"],e=>{Nr.headers[e]={}});const Av=T.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),Ov=e=>{const t={};let n,s,i;return e&&e.split(` +`).forEach(function(a){i=a.indexOf(":"),n=a.substring(0,i).trim().toLowerCase(),s=a.substring(i+1).trim(),!(!n||t[n]&&Av[n])&&(n==="set-cookie"?t[n]?t[n].push(s):t[n]=[s]:t[n]=t[n]?t[n]+", "+s:s)}),t},ju=Symbol("internals");function ir(e){return e&&String(e).trim().toLowerCase()}function _i(e){return e===!1||e==null?e:T.isArray(e)?e.map(_i):String(e)}function xv(e){const t=Object.create(null),n=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let s;for(;s=n.exec(e);)t[s[1]]=s[2];return t}const Rv=e=>/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim());function Jo(e,t,n,s,i){if(T.isFunction(s))return s.call(this,t,n);if(i&&(t=n),!!T.isString(t)){if(T.isString(s))return t.indexOf(s)!==-1;if(T.isRegExp(s))return s.test(t)}}function Pv(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(t,n,s)=>n.toUpperCase()+s)}function Iv(e,t){const n=T.toCamelCase(" "+t);["get","set","has"].forEach(s=>{Object.defineProperty(e,s+n,{value:function(i,o,a){return this[s].call(this,t,i,o,a)},configurable:!0})})}class yt{constructor(t){t&&this.set(t)}set(t,n,s){const i=this;function o(c,f,p){const d=ir(f);if(!d)throw new Error("header name must be a non-empty string");const m=T.findKey(i,d);(!m||i[m]===void 0||p===!0||p===void 0&&i[m]!==!1)&&(i[m||f]=_i(c))}const a=(c,f)=>T.forEach(c,(p,d)=>o(p,d,f));if(T.isPlainObject(t)||t instanceof this.constructor)a(t,n);else if(T.isString(t)&&(t=t.trim())&&!Rv(t))a(Ov(t),n);else if(T.isHeaders(t))for(const[c,f]of t.entries())o(f,c,s);else t!=null&&o(n,t,s);return this}get(t,n){if(t=ir(t),t){const s=T.findKey(this,t);if(s){const i=this[s];if(!n)return i;if(n===!0)return xv(i);if(T.isFunction(n))return n.call(this,i,s);if(T.isRegExp(n))return n.exec(i);throw new TypeError("parser must be boolean|regexp|function")}}}has(t,n){if(t=ir(t),t){const s=T.findKey(this,t);return!!(s&&this[s]!==void 0&&(!n||Jo(this,this[s],s,n)))}return!1}delete(t,n){const s=this;let i=!1;function o(a){if(a=ir(a),a){const c=T.findKey(s,a);c&&(!n||Jo(s,s[c],c,n))&&(delete s[c],i=!0)}}return T.isArray(t)?t.forEach(o):o(t),i}clear(t){const n=Object.keys(this);let s=n.length,i=!1;for(;s--;){const o=n[s];(!t||Jo(this,this[o],o,t,!0))&&(delete this[o],i=!0)}return i}normalize(t){const n=this,s={};return T.forEach(this,(i,o)=>{const a=T.findKey(s,o);if(a){n[a]=_i(i),delete n[o];return}const c=t?Pv(o):String(o).trim();c!==o&&delete n[o],n[c]=_i(i),s[c]=!0}),this}concat(...t){return this.constructor.concat(this,...t)}toJSON(t){const n=Object.create(null);return T.forEach(this,(s,i)=>{s!=null&&s!==!1&&(n[i]=t&&T.isArray(s)?s.join(", "):s)}),n}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([t,n])=>t+": "+n).join(` +`)}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(t){return t instanceof this?t:new this(t)}static concat(t,...n){const s=new this(t);return n.forEach(i=>s.set(i)),s}static accessor(t){const s=(this[ju]=this[ju]={accessors:{}}).accessors,i=this.prototype;function o(a){const c=ir(a);s[c]||(Iv(i,a),s[c]=!0)}return T.isArray(t)?t.forEach(o):o(t),this}}yt.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]);T.reduceDescriptors(yt.prototype,({value:e},t)=>{let n=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(s){this[n]=s}}});T.freezeMethods(yt);function Xo(e,t){const n=this||Nr,s=t||n,i=yt.from(s.headers);let o=s.data;return T.forEach(e,function(c){o=c.call(n,o,i.normalize(),t?t.status:void 0)}),i.normalize(),o}function sh(e){return!!(e&&e.__CANCEL__)}function Ks(e,t,n){de.call(this,e??"canceled",de.ERR_CANCELED,t,n),this.name="CanceledError"}T.inherits(Ks,de,{__CANCEL__:!0});function rh(e,t,n){const s=n.config.validateStatus;!n.status||!s||s(n.status)?e(n):t(new de("Request failed with status code "+n.status,[de.ERR_BAD_REQUEST,de.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n))}function Lv(e){const t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}function Dv(e,t){e=e||10;const n=new Array(e),s=new Array(e);let i=0,o=0,a;return t=t!==void 0?t:1e3,function(f){const p=Date.now(),d=s[o];a||(a=p),n[i]=f,s[i]=p;let m=o,b=0;for(;m!==i;)b+=n[m++],m=m%e;if(i=(i+1)%e,i===o&&(o=(o+1)%e),p-a{n=d,i=null,o&&(clearTimeout(o),o=null),e.apply(null,p)};return[(...p)=>{const d=Date.now(),m=d-n;m>=s?a(p,d):(i=p,o||(o=setTimeout(()=>{o=null,a(i)},s-m)))},()=>i&&a(i)]}const xi=(e,t,n=3)=>{let s=0;const i=Dv(50,250);return Nv(o=>{const a=o.loaded,c=o.lengthComputable?o.total:void 0,f=a-s,p=i(f),d=a<=c;s=a;const m={loaded:a,total:c,progress:c?a/c:void 0,bytes:f,rate:p||void 0,estimated:p&&c&&d?(c-a)/p:void 0,event:o,lengthComputable:c!=null,[t?"download":"upload"]:!0};e(m)},n)},Bu=(e,t)=>{const n=e!=null;return[s=>t[0]({lengthComputable:n,total:e,loaded:s}),t[1]]},Hu=e=>(...t)=>T.asap(()=>e(...t)),kv=bt.hasStandardBrowserEnv?function(){const t=bt.navigator&&/(msie|trident)/i.test(bt.navigator.userAgent),n=document.createElement("a");let s;function i(o){let a=o;return t&&(n.setAttribute("href",a),a=n.href),n.setAttribute("href",a),{href:n.href,protocol:n.protocol?n.protocol.replace(/:$/,""):"",host:n.host,search:n.search?n.search.replace(/^\?/,""):"",hash:n.hash?n.hash.replace(/^#/,""):"",hostname:n.hostname,port:n.port,pathname:n.pathname.charAt(0)==="/"?n.pathname:"/"+n.pathname}}return s=i(window.location.href),function(a){const c=T.isString(a)?i(a):a;return c.protocol===s.protocol&&c.host===s.host}}():function(){return function(){return!0}}(),Mv=bt.hasStandardBrowserEnv?{write(e,t,n,s,i,o){const a=[e+"="+encodeURIComponent(t)];T.isNumber(n)&&a.push("expires="+new Date(n).toGMTString()),T.isString(s)&&a.push("path="+s),T.isString(i)&&a.push("domain="+i),o===!0&&a.push("secure"),document.cookie=a.join("; ")},read(e){const t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove(e){this.write(e,"",Date.now()-864e5)}}:{write(){},read(){return null},remove(){}};function $v(e){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(e)}function Fv(e,t){return t?e.replace(/\/?\/$/,"")+"/"+t.replace(/^\/+/,""):e}function ih(e,t){return e&&!$v(t)?Fv(e,t):t}const Uu=e=>e instanceof yt?{...e}:e;function ms(e,t){t=t||{};const n={};function s(p,d,m){return T.isPlainObject(p)&&T.isPlainObject(d)?T.merge.call({caseless:m},p,d):T.isPlainObject(d)?T.merge({},d):T.isArray(d)?d.slice():d}function i(p,d,m){if(T.isUndefined(d)){if(!T.isUndefined(p))return s(void 0,p,m)}else return s(p,d,m)}function o(p,d){if(!T.isUndefined(d))return s(void 0,d)}function a(p,d){if(T.isUndefined(d)){if(!T.isUndefined(p))return s(void 0,p)}else return s(void 0,d)}function c(p,d,m){if(m in t)return s(p,d);if(m in e)return s(void 0,p)}const f={url:o,method:o,data:o,baseURL:a,transformRequest:a,transformResponse:a,paramsSerializer:a,timeout:a,timeoutMessage:a,withCredentials:a,withXSRFToken:a,adapter:a,responseType:a,xsrfCookieName:a,xsrfHeaderName:a,onUploadProgress:a,onDownloadProgress:a,decompress:a,maxContentLength:a,maxBodyLength:a,beforeRedirect:a,transport:a,httpAgent:a,httpsAgent:a,cancelToken:a,socketPath:a,responseEncoding:a,validateStatus:c,headers:(p,d)=>i(Uu(p),Uu(d),!0)};return T.forEach(Object.keys(Object.assign({},e,t)),function(d){const m=f[d]||i,b=m(e[d],t[d],d);T.isUndefined(b)&&m!==c||(n[d]=b)}),n}const oh=e=>{const t=ms({},e);let{data:n,withXSRFToken:s,xsrfHeaderName:i,xsrfCookieName:o,headers:a,auth:c}=t;t.headers=a=yt.from(a),t.url=eh(ih(t.baseURL,t.url),e.params,e.paramsSerializer),c&&a.set("Authorization","Basic "+btoa((c.username||"")+":"+(c.password?unescape(encodeURIComponent(c.password)):"")));let f;if(T.isFormData(n)){if(bt.hasStandardBrowserEnv||bt.hasStandardBrowserWebWorkerEnv)a.setContentType(void 0);else if((f=a.getContentType())!==!1){const[p,...d]=f?f.split(";").map(m=>m.trim()).filter(Boolean):[];a.setContentType([p||"multipart/form-data",...d].join("; "))}}if(bt.hasStandardBrowserEnv&&(s&&T.isFunction(s)&&(s=s(t)),s||s!==!1&&kv(t.url))){const p=i&&o&&Mv.read(o);p&&a.set(i,p)}return t},jv=typeof XMLHttpRequest<"u",Bv=jv&&function(e){return new Promise(function(n,s){const i=oh(e);let o=i.data;const a=yt.from(i.headers).normalize();let{responseType:c,onUploadProgress:f,onDownloadProgress:p}=i,d,m,b,w,C;function P(){w&&w(),C&&C(),i.cancelToken&&i.cancelToken.unsubscribe(d),i.signal&&i.signal.removeEventListener("abort",d)}let R=new XMLHttpRequest;R.open(i.method.toUpperCase(),i.url,!0),R.timeout=i.timeout;function $(){if(!R)return;const B=yt.from("getAllResponseHeaders"in R&&R.getAllResponseHeaders()),Y={data:!c||c==="text"||c==="json"?R.responseText:R.response,status:R.status,statusText:R.statusText,headers:B,config:e,request:R};rh(function(le){n(le),P()},function(le){s(le),P()},Y),R=null}"onloadend"in R?R.onloadend=$:R.onreadystatechange=function(){!R||R.readyState!==4||R.status===0&&!(R.responseURL&&R.responseURL.indexOf("file:")===0)||setTimeout($)},R.onabort=function(){R&&(s(new de("Request aborted",de.ECONNABORTED,e,R)),R=null)},R.onerror=function(){s(new de("Network Error",de.ERR_NETWORK,e,R)),R=null},R.ontimeout=function(){let H=i.timeout?"timeout of "+i.timeout+"ms exceeded":"timeout exceeded";const Y=i.transitional||th;i.timeoutErrorMessage&&(H=i.timeoutErrorMessage),s(new de(H,Y.clarifyTimeoutError?de.ETIMEDOUT:de.ECONNABORTED,e,R)),R=null},o===void 0&&a.setContentType(null),"setRequestHeader"in R&&T.forEach(a.toJSON(),function(H,Y){R.setRequestHeader(Y,H)}),T.isUndefined(i.withCredentials)||(R.withCredentials=!!i.withCredentials),c&&c!=="json"&&(R.responseType=i.responseType),p&&([b,C]=xi(p,!0),R.addEventListener("progress",b)),f&&R.upload&&([m,w]=xi(f),R.upload.addEventListener("progress",m),R.upload.addEventListener("loadend",w)),(i.cancelToken||i.signal)&&(d=B=>{R&&(s(!B||B.type?new Ks(null,e,R):B),R.abort(),R=null)},i.cancelToken&&i.cancelToken.subscribe(d),i.signal&&(i.signal.aborted?d():i.signal.addEventListener("abort",d)));const N=Lv(i.url);if(N&&bt.protocols.indexOf(N)===-1){s(new de("Unsupported protocol "+N+":",de.ERR_BAD_REQUEST,e));return}R.send(o||null)})},Hv=(e,t)=>{const{length:n}=e=e?e.filter(Boolean):[];if(t||n){let s=new AbortController,i;const o=function(p){if(!i){i=!0,c();const d=p instanceof Error?p:this.reason;s.abort(d instanceof de?d:new Ks(d instanceof Error?d.message:d))}};let a=t&&setTimeout(()=>{a=null,o(new de(`timeout ${t} of ms exceeded`,de.ETIMEDOUT))},t);const c=()=>{e&&(a&&clearTimeout(a),a=null,e.forEach(p=>{p.unsubscribe?p.unsubscribe(o):p.removeEventListener("abort",o)}),e=null)};e.forEach(p=>p.addEventListener("abort",o));const{signal:f}=s;return f.unsubscribe=()=>T.asap(c),f}},Uv=function*(e,t){let n=e.byteLength;if(!t||n{const i=Vv(e,t);let o=0,a,c=f=>{a||(a=!0,s&&s(f))};return new ReadableStream({async pull(f){try{const{done:p,value:d}=await i.next();if(p){c(),f.close();return}let m=d.byteLength;if(n){let b=o+=m;n(b)}f.enqueue(new Uint8Array(d))}catch(p){throw c(p),p}},cancel(f){return c(f),i.return()}},{highWaterMark:2})},Qi=typeof fetch=="function"&&typeof Request=="function"&&typeof Response=="function",ah=Qi&&typeof ReadableStream=="function",Wv=Qi&&(typeof TextEncoder=="function"?(e=>t=>e.encode(t))(new TextEncoder):async e=>new Uint8Array(await new Response(e).arrayBuffer())),lh=(e,...t)=>{try{return!!e(...t)}catch{return!1}},zv=ah&&lh(()=>{let e=!1;const t=new Request(bt.origin,{body:new ReadableStream,method:"POST",get duplex(){return e=!0,"half"}}).headers.has("Content-Type");return e&&!t}),qu=64*1024,ba=ah&&lh(()=>T.isReadableStream(new Response("").body)),Ri={stream:ba&&(e=>e.body)};Qi&&(e=>{["text","arrayBuffer","blob","formData","stream"].forEach(t=>{!Ri[t]&&(Ri[t]=T.isFunction(e[t])?n=>n[t]():(n,s)=>{throw new de(`Response type '${t}' is not supported`,de.ERR_NOT_SUPPORT,s)})})})(new Response);const Kv=async e=>{if(e==null)return 0;if(T.isBlob(e))return e.size;if(T.isSpecCompliantForm(e))return(await new Request(bt.origin,{method:"POST",body:e}).arrayBuffer()).byteLength;if(T.isArrayBufferView(e)||T.isArrayBuffer(e))return e.byteLength;if(T.isURLSearchParams(e)&&(e=e+""),T.isString(e))return(await Wv(e)).byteLength},Gv=async(e,t)=>{const n=T.toFiniteNumber(e.getContentLength());return n??Kv(t)},Jv=Qi&&(async e=>{let{url:t,method:n,data:s,signal:i,cancelToken:o,timeout:a,onDownloadProgress:c,onUploadProgress:f,responseType:p,headers:d,withCredentials:m="same-origin",fetchOptions:b}=oh(e);p=p?(p+"").toLowerCase():"text";let w=Hv([i,o&&o.toAbortSignal()],a),C;const P=w&&w.unsubscribe&&(()=>{w.unsubscribe()});let R;try{if(f&&zv&&n!=="get"&&n!=="head"&&(R=await Gv(d,s))!==0){let Y=new Request(t,{method:"POST",body:s,duplex:"half"}),ge;if(T.isFormData(s)&&(ge=Y.headers.get("content-type"))&&d.setContentType(ge),Y.body){const[le,te]=Bu(R,xi(Hu(f)));s=Vu(Y.body,qu,le,te)}}T.isString(m)||(m=m?"include":"omit");const $="credentials"in Request.prototype;C=new Request(t,{...b,signal:w,method:n.toUpperCase(),headers:d.normalize().toJSON(),body:s,duplex:"half",credentials:$?m:void 0});let N=await fetch(C);const B=ba&&(p==="stream"||p==="response");if(ba&&(c||B&&P)){const Y={};["status","statusText","headers"].forEach(q=>{Y[q]=N[q]});const ge=T.toFiniteNumber(N.headers.get("content-length")),[le,te]=c&&Bu(ge,xi(Hu(c),!0))||[];N=new Response(Vu(N.body,qu,le,()=>{te&&te(),P&&P()}),Y)}p=p||"text";let H=await Ri[T.findKey(Ri,p)||"text"](N,e);return!B&&P&&P(),await new Promise((Y,ge)=>{rh(Y,ge,{data:H,headers:yt.from(N.headers),status:N.status,statusText:N.statusText,config:e,request:C})})}catch($){throw P&&P(),$&&$.name==="TypeError"&&/fetch/i.test($.message)?Object.assign(new de("Network Error",de.ERR_NETWORK,e,C),{cause:$.cause||$}):de.from($,$&&$.code,e,C)}}),ya={http:uv,xhr:Bv,fetch:Jv};T.forEach(ya,(e,t)=>{if(e){try{Object.defineProperty(e,"name",{value:t})}catch{}Object.defineProperty(e,"adapterName",{value:t})}});const Wu=e=>`- ${e}`,Xv=e=>T.isFunction(e)||e===null||e===!1,ch={getAdapter:e=>{e=T.isArray(e)?e:[e];const{length:t}=e;let n,s;const i={};for(let o=0;o`adapter ${c} `+(f===!1?"is not supported by the environment":"is not available in the build"));let a=t?o.length>1?`since : +`+o.map(Wu).join(` +`):" "+Wu(o[0]):"as no adapter specified";throw new de("There is no suitable adapter to dispatch the request "+a,"ERR_NOT_SUPPORT")}return s},adapters:ya};function Qo(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new Ks(null,e)}function zu(e){return Qo(e),e.headers=yt.from(e.headers),e.data=Xo.call(e,e.transformRequest),["post","put","patch"].indexOf(e.method)!==-1&&e.headers.setContentType("application/x-www-form-urlencoded",!1),ch.getAdapter(e.adapter||Nr.adapter)(e).then(function(s){return Qo(e),s.data=Xo.call(e,e.transformResponse,s),s.headers=yt.from(s.headers),s},function(s){return sh(s)||(Qo(e),s&&s.response&&(s.response.data=Xo.call(e,e.transformResponse,s.response),s.response.headers=yt.from(s.response.headers))),Promise.reject(s)})}const uh="1.7.7",Qa={};["object","boolean","number","function","string","symbol"].forEach((e,t)=>{Qa[e]=function(s){return typeof s===e||"a"+(t<1?"n ":" ")+e}});const Ku={};Qa.transitional=function(t,n,s){function i(o,a){return"[Axios v"+uh+"] Transitional option '"+o+"'"+a+(s?". "+s:"")}return(o,a,c)=>{if(t===!1)throw new de(i(a," has been removed"+(n?" in "+n:"")),de.ERR_DEPRECATED);return n&&!Ku[a]&&(Ku[a]=!0,console.warn(i(a," has been deprecated since v"+n+" and will be removed in the near future"))),t?t(o,a,c):!0}};function Qv(e,t,n){if(typeof e!="object")throw new de("options must be an object",de.ERR_BAD_OPTION_VALUE);const s=Object.keys(e);let i=s.length;for(;i-- >0;){const o=s[i],a=t[o];if(a){const c=e[o],f=c===void 0||a(c,o,e);if(f!==!0)throw new de("option "+o+" must be "+f,de.ERR_BAD_OPTION_VALUE);continue}if(n!==!0)throw new de("Unknown option "+o,de.ERR_BAD_OPTION)}}const va={assertOptions:Qv,validators:Qa},Ln=va.validators;class fs{constructor(t){this.defaults=t,this.interceptors={request:new Fu,response:new Fu}}async request(t,n){try{return await this._request(t,n)}catch(s){if(s instanceof Error){let i;Error.captureStackTrace?Error.captureStackTrace(i={}):i=new Error;const o=i.stack?i.stack.replace(/^.+\n/,""):"";try{s.stack?o&&!String(s.stack).endsWith(o.replace(/^.+\n.+\n/,""))&&(s.stack+=` +`+o):s.stack=o}catch{}}throw s}}_request(t,n){typeof t=="string"?(n=n||{},n.url=t):n=t||{},n=ms(this.defaults,n);const{transitional:s,paramsSerializer:i,headers:o}=n;s!==void 0&&va.assertOptions(s,{silentJSONParsing:Ln.transitional(Ln.boolean),forcedJSONParsing:Ln.transitional(Ln.boolean),clarifyTimeoutError:Ln.transitional(Ln.boolean)},!1),i!=null&&(T.isFunction(i)?n.paramsSerializer={serialize:i}:va.assertOptions(i,{encode:Ln.function,serialize:Ln.function},!0)),n.method=(n.method||this.defaults.method||"get").toLowerCase();let a=o&&T.merge(o.common,o[n.method]);o&&T.forEach(["delete","get","head","post","put","patch","common"],C=>{delete o[C]}),n.headers=yt.concat(a,o);const c=[];let f=!0;this.interceptors.request.forEach(function(P){typeof P.runWhen=="function"&&P.runWhen(n)===!1||(f=f&&P.synchronous,c.unshift(P.fulfilled,P.rejected))});const p=[];this.interceptors.response.forEach(function(P){p.push(P.fulfilled,P.rejected)});let d,m=0,b;if(!f){const C=[zu.bind(this),void 0];for(C.unshift.apply(C,c),C.push.apply(C,p),b=C.length,d=Promise.resolve(n);m{if(!s._listeners)return;let o=s._listeners.length;for(;o-- >0;)s._listeners[o](i);s._listeners=null}),this.promise.then=i=>{let o;const a=new Promise(c=>{s.subscribe(c),o=c}).then(i);return a.cancel=function(){s.unsubscribe(o)},a},t(function(o,a,c){s.reason||(s.reason=new Ks(o,a,c),n(s.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(t){if(this.reason){t(this.reason);return}this._listeners?this._listeners.push(t):this._listeners=[t]}unsubscribe(t){if(!this._listeners)return;const n=this._listeners.indexOf(t);n!==-1&&this._listeners.splice(n,1)}toAbortSignal(){const t=new AbortController,n=s=>{t.abort(s)};return this.subscribe(n),t.signal.unsubscribe=()=>this.unsubscribe(n),t.signal}static source(){let t;return{token:new Ya(function(i){t=i}),cancel:t}}}function Yv(e){return function(n){return e.apply(null,n)}}function Zv(e){return T.isObject(e)&&e.isAxiosError===!0}const wa={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(wa).forEach(([e,t])=>{wa[t]=e});function fh(e){const t=new fs(e),n=Ud(fs.prototype.request,t);return T.extend(n,fs.prototype,t,{allOwnKeys:!0}),T.extend(n,t,null,{allOwnKeys:!0}),n.create=function(i){return fh(ms(e,i))},n}const Ke=fh(Nr);Ke.Axios=fs;Ke.CanceledError=Ks;Ke.CancelToken=Ya;Ke.isCancel=sh;Ke.VERSION=uh;Ke.toFormData=Xi;Ke.AxiosError=de;Ke.Cancel=Ke.CanceledError;Ke.all=function(t){return Promise.all(t)};Ke.spread=Yv;Ke.isAxiosError=Zv;Ke.mergeConfig=ms;Ke.AxiosHeaders=yt;Ke.formToJSON=e=>nh(T.isHTMLForm(e)?new FormData(e):e);Ke.getAdapter=ch.getAdapter;Ke.HttpStatusCode=wa;Ke.default=Ke;const ew="modulepreload",tw=function(e){return"/"+e},Gu={},on=function(t,n,s){let i=Promise.resolve();if(n&&n.length>0){document.getElementsByTagName("link");const o=document.querySelector("meta[property=csp-nonce]"),a=(o==null?void 0:o.nonce)||(o==null?void 0:o.getAttribute("nonce"));i=Promise.all(n.map(c=>{if(c=tw(c),c in Gu)return;Gu[c]=!0;const f=c.endsWith(".css"),p=f?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${c}"]${p}`))return;const d=document.createElement("link");if(d.rel=f?"stylesheet":ew,f||(d.as="script"),d.crossOrigin="",d.href=c,a&&d.setAttribute("nonce",a),document.head.appendChild(d),f)return new Promise((m,b)=>{d.addEventListener("load",m),d.addEventListener("error",()=>b(new Error(`Unable to preload CSS for ${c}`)))})}))}return i.then(()=>t()).catch(o=>{const a=new Event("vite:preloadError",{cancelable:!0});if(a.payload=o,window.dispatchEvent(a),!a.defaultPrevented)throw o})},dh=Ey({history:Qb(),routes:[{path:"/",name:"home",redirect:"/web/applications/swcatalog"},{path:"/web",name:"rootOssList",component:()=>on(()=>import("./OssList-ByTkpwdw.js"),__vite__mapDeps([0,1,2,3,4,5,6]))},{path:"/web/oss/list",name:"ossList",component:()=>on(()=>import("./OssList-ByTkpwdw.js"),__vite__mapDeps([0,1,2,3,4,5,6]))},{path:"/web/generate/yaml",name:"yamlGenerate",component:()=>on(()=>import("./YamlGenerate-7neU9daB.js"),__vite__mapDeps([7,5,8,9]))},{path:"/web/repository/list",redirect:e=>({name:"repositoryList",query:e.query,hash:e.hash})},{path:"/web/repository/detail/:repositoryName",redirect:e=>({name:"repositoryDetail",params:{repositoryName:e.params.repositoryName},query:e.query,hash:e.hash})},{path:"/web/softwareCatalog/install",name:"softwareCatalogInstall",component:()=>on(()=>import("./InstallSoftwareIframe-OUoonEDo.js"),__vite__mapDeps([10,11,12,5,13,8,14,15]))},{path:"/web/softwareCatalog",redirect:e=>({name:"softwareCatalog",query:e.query,hash:e.hash})},{path:"/web/applications/swcatalog",name:"softwareCatalog",component:()=>on(()=>import("./SoftwareCatalog-CXVjN_tf.js"),__vite__mapDeps([16,11,12,5,13,8,14,2,17,18,6,19]))},{path:"/web/applications/status",name:"applicationStatus",component:()=>on(()=>import("./ApplicationStatus-weJ1o5xY.js"),__vite__mapDeps([20,17,2,13,5,8,18,3,4,21]))},{path:"/web/applications/repository",component:()=>on(()=>import("./ApplicationRepository-DuzlT9V3.js"),__vite__mapDeps([22,1,2])),children:[{path:"",name:"repositoryList",component:()=>on(()=>import("./RepositoryList-CEHvsm8y.js"),__vite__mapDeps([23,3,4,24,5,6]))},{path:":repositoryName",name:"repositoryDetail",component:()=>on(()=>import("./RepositoryDetail-kNHmtnL-.js"),__vite__mapDeps([25,24,5,12,3,4]))}]},{path:"/web/softwareCatalog/list/test",name:"softwareCatalogListTest",component:()=>on(()=>import("./SoftwareCatalogListTest-DrdksJST.js"),__vite__mapDeps([26,1,2,13,5,8,12,11,14,27]))}]}),nw=vb("user",{state:()=>({accessToken:"",workspaceInfo:{id:"",name:"",description:"",created_at:"",updated_at:""},projectInfo:{id:"",ns_id:"",mci_id:"",cluster_id:"",name:"",description:"",created_at:"",updated_at:""},operationId:""}),actions:{setUser(e){this.accessToken=e.accessToken,this.workspaceInfo=e.workspaceInfo,this.projectInfo=e.projectInfo,this.operationId=e.operationId},getNsId(){var e,t,n,s;return((e=this.projectInfo)==null?void 0:e.ns_id)||((t=this.projectInfo)==null?void 0:t.nsid)||((n=this.projectInfo)==null?void 0:n.nsId)||((s=this.projectInfo)==null?void 0:s.NsId)||null},clearUser(){this.accessToken=null,this.workspaceInfo=null,this.projectInfo=null,this.operationId=null}}});let Ju=!1;dh.beforeEach(async(e,t,n)=>{Ju||(window.addEventListener("message",function(s){var f,p,d,m;const i=s.data;if(!i||typeof i!="object")return;const o=String(i.accessToken??"").trim(),a=((f=i.workspaceInfo)==null?void 0:f.id)??((p=i.workspaceInfo)==null?void 0:p.Id),c=((d=i.projectInfo)==null?void 0:d.id)??((m=i.projectInfo)==null?void 0:m.Id);if(!(!o||["undefined","null"].includes(o.toLowerCase())||!a||!c))try{nw().setUser(i)}catch{console.error("Unable to apply Web Console project context.")}}),Ju=!0),n()});const sw=e=>window.location.origin,f0=e=>e?/^(?:[a-z][a-z\d+\-.]*:)?\/\//i.test(e)||e.startsWith("data:")?e:`${window.location.origin}${e.startsWith("/")?"":"/"}${e}`:"";var rw=Object.defineProperty,Xu=Object.getOwnPropertySymbols,iw=Object.prototype.hasOwnProperty,ow=Object.prototype.propertyIsEnumerable,Qu=(e,t,n)=>t in e?rw(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,hh=(e,t)=>{for(var n in t||(t={}))iw.call(t,n)&&Qu(e,n,t[n]);if(Xu)for(var n of Xu(t))ow.call(t,n)&&Qu(e,n,t[n]);return e},Yi=e=>typeof e=="function",Zi=e=>typeof e=="string",ph=e=>Zi(e)&&e.trim().length>0,aw=e=>typeof e=="number",ls=e=>typeof e>"u",Tr=e=>typeof e=="object"&&e!==null,lw=e=>un(e,"tag")&&ph(e.tag),mh=e=>window.TouchEvent&&e instanceof TouchEvent,gh=e=>un(e,"component")&&_h(e.component),cw=e=>Yi(e)||Tr(e),_h=e=>!ls(e)&&(Zi(e)||cw(e)||gh(e)),Yu=e=>Tr(e)&&["height","width","right","left","top","bottom"].every(t=>aw(e[t])),un=(e,t)=>(Tr(e)||Yi(e))&&t in e,uw=(e=>()=>e++)(0);function Yo(e){return mh(e)?e.targetTouches[0].clientX:e.clientX}function Zu(e){return mh(e)?e.targetTouches[0].clientY:e.clientY}var fw=e=>{ls(e.remove)?e.parentNode&&e.parentNode.removeChild(e):e.remove()},kr=e=>gh(e)?kr(e.component):lw(e)?dn({render(){return e}}):typeof e=="string"?e:Ee(jn(e)),dw=e=>{if(typeof e=="string")return e;const t=un(e,"props")&&Tr(e.props)?e.props:{},n=un(e,"listeners")&&Tr(e.listeners)?e.listeners:{};return{component:kr(e),props:t,listeners:n}},hw=()=>typeof window<"u",Za=class{constructor(){this.allHandlers={}}getHandlers(e){return this.allHandlers[e]||[]}on(e,t){const n=this.getHandlers(e);n.push(t),this.allHandlers[e]=n}off(e,t){const n=this.getHandlers(e);n.splice(n.indexOf(t)>>>0,1)}emit(e,t){this.getHandlers(e).forEach(s=>s(t))}},pw=e=>["on","off","emit"].every(t=>un(e,t)&&Yi(e[t])),Tt;(function(e){e.SUCCESS="success",e.ERROR="error",e.WARNING="warning",e.INFO="info",e.DEFAULT="default"})(Tt||(Tt={}));var Pi;(function(e){e.TOP_LEFT="top-left",e.TOP_CENTER="top-center",e.TOP_RIGHT="top-right",e.BOTTOM_LEFT="bottom-left",e.BOTTOM_CENTER="bottom-center",e.BOTTOM_RIGHT="bottom-right"})(Pi||(Pi={}));var At;(function(e){e.ADD="add",e.DISMISS="dismiss",e.UPDATE="update",e.CLEAR="clear",e.UPDATE_DEFAULTS="update_defaults"})(At||(At={}));var Wt="Vue-Toastification",Vt={type:{type:String,default:Tt.DEFAULT},classNames:{type:[String,Array],default:()=>[]},trueBoolean:{type:Boolean,default:!0}},bh={type:Vt.type,customIcon:{type:[String,Boolean,Object,Function],default:!0}},bi={component:{type:[String,Object,Function,Boolean],default:"button"},classNames:Vt.classNames,showOnHover:{type:Boolean,default:!1},ariaLabel:{type:String,default:"close"}},Ea={timeout:{type:[Number,Boolean],default:5e3},hideProgressBar:{type:Boolean,default:!1},isRunning:{type:Boolean,default:!1}},yh={transition:{type:[Object,String],default:`${Wt}__bounce`}},mw={position:{type:String,default:Pi.TOP_RIGHT},draggable:Vt.trueBoolean,draggablePercent:{type:Number,default:.6},pauseOnFocusLoss:Vt.trueBoolean,pauseOnHover:Vt.trueBoolean,closeOnClick:Vt.trueBoolean,timeout:Ea.timeout,hideProgressBar:Ea.hideProgressBar,toastClassName:Vt.classNames,bodyClassName:Vt.classNames,icon:bh.customIcon,closeButton:bi.component,closeButtonClassName:bi.classNames,showCloseButtonOnHover:bi.showOnHover,accessibility:{type:Object,default:()=>({toastRole:"alert",closeButtonLabel:"close"})},rtl:{type:Boolean,default:!1},eventBus:{type:Object,required:!1,default:()=>new Za}},gw={id:{type:[String,Number],required:!0,default:0},type:Vt.type,content:{type:[String,Object,Function],required:!0,default:""},onClick:{type:Function,default:void 0},onClose:{type:Function,default:void 0}},_w={container:{type:[Object,Function],default:()=>document.body},newestOnTop:Vt.trueBoolean,maxToasts:{type:Number,default:20},transition:yh.transition,toastDefaults:Object,filterBeforeCreate:{type:Function,default:e=>e},filterToasts:{type:Function,default:e=>e},containerClassName:Vt.classNames,onMounted:Function,shareAppContext:[Boolean,Object]},Cn={CORE_TOAST:mw,TOAST:gw,CONTAINER:_w,PROGRESS_BAR:Ea,ICON:bh,TRANSITION:yh,CLOSE_BUTTON:bi},vh=dn({name:"VtProgressBar",props:Cn.PROGRESS_BAR,data(){return{hasClass:!0}},computed:{style(){return{animationDuration:`${this.timeout}ms`,animationPlayState:this.isRunning?"running":"paused",opacity:this.hideProgressBar?0:1}},cpClass(){return this.hasClass?`${Wt}__progress-bar`:""}},watch:{timeout(){this.hasClass=!1,this.$nextTick(()=>this.hasClass=!0)}},mounted(){this.$el.addEventListener("animationend",this.animationEnded)},beforeUnmount(){this.$el.removeEventListener("animationend",this.animationEnded)},methods:{animationEnded(){this.$emit("close-toast")}}});function bw(e,t){return Ue(),qt("div",{style:Or(e.style),class:Hn(e.cpClass)},null,6)}vh.render=bw;var yw=vh,wh=dn({name:"VtCloseButton",props:Cn.CLOSE_BUTTON,computed:{buttonComponent(){return this.component!==!1?kr(this.component):"button"},classes(){const e=[`${Wt}__close-button`];return this.showOnHover&&e.push("show-on-hover"),e.concat(this.classNames)}}}),vw=Bi(" × ");function ww(e,t){return Ue(),jt(Ua(e.buttonComponent),Hi({"aria-label":e.ariaLabel,class:e.classes},e.$attrs),{default:Ir(()=>[vw]),_:1},16,["aria-label","class"])}wh.render=ww;var Ew=wh,Eh={},Cw={"aria-hidden":"true",focusable:"false","data-prefix":"fas","data-icon":"check-circle",class:"svg-inline--fa fa-check-circle fa-w-16",role:"img",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 512 512"},Sw=_s("path",{fill:"currentColor",d:"M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zM227.314 387.314l184-184c6.248-6.248 6.248-16.379 0-22.627l-22.627-22.627c-6.248-6.249-16.379-6.249-22.628 0L216 308.118l-70.059-70.059c-6.248-6.248-16.379-6.248-22.628 0l-22.627 22.627c-6.248 6.248-6.248 16.379 0 22.627l104 104c6.249 6.249 16.379 6.249 22.628.001z"},null,-1),Tw=[Sw];function Aw(e,t){return Ue(),qt("svg",Cw,Tw)}Eh.render=Aw;var Ow=Eh,Ch={},xw={"aria-hidden":"true",focusable:"false","data-prefix":"fas","data-icon":"info-circle",class:"svg-inline--fa fa-info-circle fa-w-16",role:"img",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 512 512"},Rw=_s("path",{fill:"currentColor",d:"M256 8C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8zm0 110c23.196 0 42 18.804 42 42s-18.804 42-42 42-42-18.804-42-42 18.804-42 42-42zm56 254c0 6.627-5.373 12-12 12h-88c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h12v-64h-12c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h64c6.627 0 12 5.373 12 12v100h12c6.627 0 12 5.373 12 12v24z"},null,-1),Pw=[Rw];function Iw(e,t){return Ue(),qt("svg",xw,Pw)}Ch.render=Iw;var ef=Ch,Sh={},Lw={"aria-hidden":"true",focusable:"false","data-prefix":"fas","data-icon":"exclamation-circle",class:"svg-inline--fa fa-exclamation-circle fa-w-16",role:"img",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 512 512"},Dw=_s("path",{fill:"currentColor",d:"M504 256c0 136.997-111.043 248-248 248S8 392.997 8 256C8 119.083 119.043 8 256 8s248 111.083 248 248zm-248 50c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z"},null,-1),Nw=[Dw];function kw(e,t){return Ue(),qt("svg",Lw,Nw)}Sh.render=kw;var Mw=Sh,Th={},$w={"aria-hidden":"true",focusable:"false","data-prefix":"fas","data-icon":"exclamation-triangle",class:"svg-inline--fa fa-exclamation-triangle fa-w-18",role:"img",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 576 512"},Fw=_s("path",{fill:"currentColor",d:"M569.517 440.013C587.975 472.007 564.806 512 527.94 512H48.054c-36.937 0-59.999-40.055-41.577-71.987L246.423 23.985c18.467-32.009 64.72-31.951 83.154 0l239.94 416.028zM288 354c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z"},null,-1),jw=[Fw];function Bw(e,t){return Ue(),qt("svg",$w,jw)}Th.render=Bw;var Hw=Th,Ah=dn({name:"VtIcon",props:Cn.ICON,computed:{customIconChildren(){return un(this.customIcon,"iconChildren")?this.trimValue(this.customIcon.iconChildren):""},customIconClass(){return Zi(this.customIcon)?this.trimValue(this.customIcon):un(this.customIcon,"iconClass")?this.trimValue(this.customIcon.iconClass):""},customIconTag(){return un(this.customIcon,"iconTag")?this.trimValue(this.customIcon.iconTag,"i"):"i"},hasCustomIcon(){return this.customIconClass.length>0},component(){return this.hasCustomIcon?this.customIconTag:_h(this.customIcon)?kr(this.customIcon):this.iconTypeComponent},iconTypeComponent(){return{[Tt.DEFAULT]:ef,[Tt.INFO]:ef,[Tt.SUCCESS]:Ow,[Tt.ERROR]:Hw,[Tt.WARNING]:Mw}[this.type]},iconClasses(){const e=[`${Wt}__icon`];return this.hasCustomIcon?e.concat(this.customIconClass):e}},methods:{trimValue(e,t=""){return ph(e)?e.trim():t}}});function Uw(e,t){return Ue(),jt(Ua(e.component),{class:Hn(e.iconClasses)},{default:Ir(()=>[Bi(xa(e.customIconChildren),1)]),_:1},8,["class"])}Ah.render=Uw;var Vw=Ah,Oh=dn({name:"VtToast",components:{ProgressBar:yw,CloseButton:Ew,Icon:Vw},inheritAttrs:!1,props:Object.assign({},Cn.CORE_TOAST,Cn.TOAST),data(){return{isRunning:!0,disableTransitions:!1,beingDragged:!1,dragStart:0,dragPos:{x:0,y:0},dragRect:{}}},computed:{classes(){const e=[`${Wt}__toast`,`${Wt}__toast--${this.type}`,`${this.position}`].concat(this.toastClassName);return this.disableTransitions&&e.push("disable-transition"),this.rtl&&e.push(`${Wt}__toast--rtl`),e},bodyClasses(){return[`${Wt}__toast-${Zi(this.content)?"body":"component-body"}`].concat(this.bodyClassName)},draggableStyle(){return this.dragStart===this.dragPos.x?{}:this.beingDragged?{transform:`translateX(${this.dragDelta}px)`,opacity:1-Math.abs(this.dragDelta/this.removalDistance)}:{transition:"transform 0.2s, opacity 0.2s",transform:"translateX(0)",opacity:1}},dragDelta(){return this.beingDragged?this.dragPos.x-this.dragStart:0},removalDistance(){return Yu(this.dragRect)?(this.dragRect.right-this.dragRect.left)*this.draggablePercent:0}},mounted(){this.draggable&&this.draggableSetup(),this.pauseOnFocusLoss&&this.focusSetup()},beforeUnmount(){this.draggable&&this.draggableCleanup(),this.pauseOnFocusLoss&&this.focusCleanup()},methods:{hasProp:un,getVueComponentFromObj:kr,closeToast(){this.eventBus.emit(At.DISMISS,this.id)},clickHandler(){this.onClick&&this.onClick(this.closeToast),this.closeOnClick&&(!this.beingDragged||this.dragStart===this.dragPos.x)&&this.closeToast()},timeoutHandler(){this.closeToast()},hoverPause(){this.pauseOnHover&&(this.isRunning=!1)},hoverPlay(){this.pauseOnHover&&(this.isRunning=!0)},focusPause(){this.isRunning=!1},focusPlay(){this.isRunning=!0},focusSetup(){addEventListener("blur",this.focusPause),addEventListener("focus",this.focusPlay)},focusCleanup(){removeEventListener("blur",this.focusPause),removeEventListener("focus",this.focusPlay)},draggableSetup(){const e=this.$el;e.addEventListener("touchstart",this.onDragStart,{passive:!0}),e.addEventListener("mousedown",this.onDragStart),addEventListener("touchmove",this.onDragMove,{passive:!1}),addEventListener("mousemove",this.onDragMove),addEventListener("touchend",this.onDragEnd),addEventListener("mouseup",this.onDragEnd)},draggableCleanup(){const e=this.$el;e.removeEventListener("touchstart",this.onDragStart),e.removeEventListener("mousedown",this.onDragStart),removeEventListener("touchmove",this.onDragMove),removeEventListener("mousemove",this.onDragMove),removeEventListener("touchend",this.onDragEnd),removeEventListener("mouseup",this.onDragEnd)},onDragStart(e){this.beingDragged=!0,this.dragPos={x:Yo(e),y:Zu(e)},this.dragStart=Yo(e),this.dragRect=this.$el.getBoundingClientRect()},onDragMove(e){this.beingDragged&&(e.preventDefault(),this.isRunning&&(this.isRunning=!1),this.dragPos={x:Yo(e),y:Zu(e)})},onDragEnd(){this.beingDragged&&(Math.abs(this.dragDelta)>=this.removalDistance?(this.disableTransitions=!0,this.$nextTick(()=>this.closeToast())):setTimeout(()=>{this.beingDragged=!1,Yu(this.dragRect)&&this.pauseOnHover&&this.dragRect.bottom>=this.dragPos.y&&this.dragPos.y>=this.dragRect.top&&this.dragRect.left<=this.dragPos.x&&this.dragPos.x<=this.dragRect.right?this.isRunning=!1:this.isRunning=!0}))}}}),qw=["role"];function Ww(e,t){const n=cr("Icon"),s=cr("CloseButton"),i=cr("ProgressBar");return Ue(),qt("div",{class:Hn(e.classes),style:Or(e.draggableStyle),onClick:t[0]||(t[0]=(...o)=>e.clickHandler&&e.clickHandler(...o)),onMouseenter:t[1]||(t[1]=(...o)=>e.hoverPause&&e.hoverPause(...o)),onMouseleave:t[2]||(t[2]=(...o)=>e.hoverPlay&&e.hoverPlay(...o))},[e.icon?(Ue(),jt(n,{key:0,"custom-icon":e.icon,type:e.type},null,8,["custom-icon","type"])):Bo("v-if",!0),_s("div",{role:e.accessibility.toastRole||"alert",class:Hn(e.bodyClasses)},[typeof e.content=="string"?(Ue(),qt(tt,{key:0},[Bi(xa(e.content),1)],2112)):(Ue(),jt(Ua(e.getVueComponentFromObj(e.content)),Hi({key:1,"toast-id":e.id},e.hasProp(e.content,"props")?e.content.props:{},Hg(e.hasProp(e.content,"listeners")?e.content.listeners:{}),{onCloseToast:e.closeToast}),null,16,["toast-id","onCloseToast"]))],10,qw),e.closeButton?(Ue(),jt(s,{key:1,component:e.closeButton,"class-names":e.closeButtonClassName,"show-on-hover":e.showCloseButtonOnHover,"aria-label":e.accessibility.closeButtonLabel,onClick:lb(e.closeToast,["stop"])},null,8,["component","class-names","show-on-hover","aria-label","onClick"])):Bo("v-if",!0),e.timeout?(Ue(),jt(i,{key:2,"is-running":e.isRunning,"hide-progress-bar":e.hideProgressBar,timeout:e.timeout,onCloseToast:e.timeoutHandler},null,8,["is-running","hide-progress-bar","timeout","onCloseToast"])):Bo("v-if",!0)],38)}Oh.render=Ww;var zw=Oh,xh=dn({name:"VtTransition",props:Cn.TRANSITION,emits:["leave"],methods:{hasProp:un,leave(e){e instanceof HTMLElement&&(e.style.left=e.offsetLeft+"px",e.style.top=e.offsetTop+"px",e.style.width=getComputedStyle(e).width,e.style.position="absolute")}}});function Kw(e,t){return Ue(),jt(eb,{tag:"div","enter-active-class":e.transition.enter?e.transition.enter:`${e.transition}-enter-active`,"move-class":e.transition.move?e.transition.move:`${e.transition}-move`,"leave-active-class":e.transition.leave?e.transition.leave:`${e.transition}-leave-active`,onLeave:e.leave},{default:Ir(()=>[Bg(e.$slots,"default")]),_:3},8,["enter-active-class","move-class","leave-active-class","onLeave"])}xh.render=Kw;var Gw=xh,Rh=dn({name:"VueToastification",devtools:{hide:!0},components:{Toast:zw,VtTransition:Gw},props:Object.assign({},Cn.CORE_TOAST,Cn.CONTAINER,Cn.TRANSITION),data(){return{count:0,positions:Object.values(Pi),toasts:{},defaults:{}}},computed:{toastArray(){return Object.values(this.toasts)},filteredToasts(){return this.defaults.filterToasts(this.toastArray)}},beforeMount(){const e=this.eventBus;e.on(At.ADD,this.addToast),e.on(At.CLEAR,this.clearToasts),e.on(At.DISMISS,this.dismissToast),e.on(At.UPDATE,this.updateToast),e.on(At.UPDATE_DEFAULTS,this.updateDefaults),this.defaults=this.$props},mounted(){this.setup(this.container)},methods:{async setup(e){Yi(e)&&(e=await e()),fw(this.$el),e.appendChild(this.$el)},setToast(e){ls(e.id)||(this.toasts[e.id]=e)},addToast(e){e.content=dw(e.content);const t=Object.assign({},this.defaults,e.type&&this.defaults.toastDefaults&&this.defaults.toastDefaults[e.type],e),n=this.defaults.filterBeforeCreate(t,this.toastArray);n&&this.setToast(n)},dismissToast(e){const t=this.toasts[e];!ls(t)&&!ls(t.onClose)&&t.onClose(),delete this.toasts[e]},clearToasts(){Object.keys(this.toasts).forEach(e=>{this.dismissToast(e)})},getPositionToasts(e){const t=this.filteredToasts.filter(n=>n.position===e).slice(0,this.defaults.maxToasts);return this.defaults.newestOnTop?t.reverse():t},updateDefaults(e){ls(e.container)||this.setup(e.container),this.defaults=Object.assign({},this.defaults,e)},updateToast({id:e,options:t,create:n}){this.toasts[e]?(t.timeout&&t.timeout===this.toasts[e].timeout&&t.timeout++,this.setToast(Object.assign({},this.toasts[e],t))):n&&this.addToast(Object.assign({},{id:e},t))},getClasses(e){return[`${Wt}__container`,e].concat(this.defaults.containerClassName)}}});function Jw(e,t){const n=cr("Toast"),s=cr("VtTransition");return Ue(),qt("div",null,[(Ue(!0),qt(tt,null,jc(e.positions,i=>(Ue(),qt("div",{key:i},[nt(s,{transition:e.defaults.transition,class:Hn(e.getClasses(i))},{default:Ir(()=>[(Ue(!0),qt(tt,null,jc(e.getPositionToasts(i),o=>(Ue(),jt(n,Hi({key:o.id},o),null,16))),128))]),_:2},1032,["transition","class"])]))),128))])}Rh.render=Jw;var Xw=Rh,tf=(e={},t=!0)=>{const n=e.eventBus=e.eventBus||new Za;t&&Pr(()=>{const o=Td(Xw,hh({},e)),a=o.mount(document.createElement("div")),c=e.onMounted;if(ls(c)||c(a,o),e.shareAppContext){const f=e.shareAppContext;f===!0?console.warn(`[${Wt}] App to share context with was not provided.`):(o._context.components=f._context.components,o._context.directives=f._context.directives,o._context.mixins=f._context.mixins,o._context.provides=f._context.provides,o.config.globalProperties=f.config.globalProperties)}});const s=(o,a)=>{const c=Object.assign({},{id:uw(),type:Tt.DEFAULT},a,{content:o});return n.emit(At.ADD,c),c.id};s.clear=()=>n.emit(At.CLEAR,void 0),s.updateDefaults=o=>{n.emit(At.UPDATE_DEFAULTS,o)},s.dismiss=o=>{n.emit(At.DISMISS,o)};function i(o,{content:a,options:c},f=!1){const p=Object.assign({},c,{content:a});n.emit(At.UPDATE,{id:o,options:p,create:f})}return s.update=i,s.success=(o,a)=>s(o,Object.assign({},a,{type:Tt.SUCCESS})),s.info=(o,a)=>s(o,Object.assign({},a,{type:Tt.INFO})),s.error=(o,a)=>s(o,Object.assign({},a,{type:Tt.ERROR})),s.warning=(o,a)=>s(o,Object.assign({},a,{type:Tt.WARNING})),s},Qw=()=>{const e=()=>console.warn(`[${Wt}] This plugin does not support SSR!`);return new Proxy(e,{get(){return e}})};function Ph(e){return hw()?pw(e)?tf({eventBus:e},!1):tf(e,!0):Qw()}var Ih=Symbol("VueToastification"),Lh=new Za,Yw=(e,t)=>{(t==null?void 0:t.shareAppContext)===!0&&(t.shareAppContext=e);const n=Ph(hh({eventBus:Lh},t));e.provide(Ih,n)},d0=e=>{const t=hd()?xt(Ih,void 0):void 0;return t||Ph(Lh)},Zw=Yw,e0=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function h0(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var t0={exports:{}};/*! + * Bootstrap v5.3.3 (https://getbootstrap.com/) + * Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */(function(e,t){(function(n,s){e.exports=s()})(e0,function(){const n=new Map,s={set(u,r,l){n.has(u)||n.set(u,new Map);const h=n.get(u);h.has(r)||h.size===0?h.set(r,l):console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(h.keys())[0]}.`)},get:(u,r)=>n.has(u)&&n.get(u).get(r)||null,remove(u,r){if(!n.has(u))return;const l=n.get(u);l.delete(r),l.size===0&&n.delete(u)}},i="transitionend",o=u=>(u&&window.CSS&&window.CSS.escape&&(u=u.replace(/#([^\s"#']+)/g,(r,l)=>`#${CSS.escape(l)}`)),u),a=u=>{u.dispatchEvent(new Event(i))},c=u=>!(!u||typeof u!="object")&&(u.jquery!==void 0&&(u=u[0]),u.nodeType!==void 0),f=u=>c(u)?u.jquery?u[0]:u:typeof u=="string"&&u.length>0?document.querySelector(o(u)):null,p=u=>{if(!c(u)||u.getClientRects().length===0)return!1;const r=getComputedStyle(u).getPropertyValue("visibility")==="visible",l=u.closest("details:not([open])");if(!l)return r;if(l!==u){const h=u.closest("summary");if(h&&h.parentNode!==l||h===null)return!1}return r},d=u=>!u||u.nodeType!==Node.ELEMENT_NODE||!!u.classList.contains("disabled")||(u.disabled!==void 0?u.disabled:u.hasAttribute("disabled")&&u.getAttribute("disabled")!=="false"),m=u=>{if(!document.documentElement.attachShadow)return null;if(typeof u.getRootNode=="function"){const r=u.getRootNode();return r instanceof ShadowRoot?r:null}return u instanceof ShadowRoot?u:u.parentNode?m(u.parentNode):null},b=()=>{},w=u=>{u.offsetHeight},C=()=>window.jQuery&&!document.body.hasAttribute("data-bs-no-jquery")?window.jQuery:null,P=[],R=()=>document.documentElement.dir==="rtl",$=u=>{var r;r=()=>{const l=C();if(l){const h=u.NAME,y=l.fn[h];l.fn[h]=u.jQueryInterface,l.fn[h].Constructor=u,l.fn[h].noConflict=()=>(l.fn[h]=y,u.jQueryInterface)}},document.readyState==="loading"?(P.length||document.addEventListener("DOMContentLoaded",()=>{for(const l of P)l()}),P.push(r)):r()},N=(u,r=[],l=u)=>typeof u=="function"?u(...r):l,B=(u,r,l=!0)=>{if(!l)return void N(u);const h=(S=>{if(!S)return 0;let{transitionDuration:L,transitionDelay:j}=window.getComputedStyle(S);const J=Number.parseFloat(L),X=Number.parseFloat(j);return J||X?(L=L.split(",")[0],j=j.split(",")[0],1e3*(Number.parseFloat(L)+Number.parseFloat(j))):0})(r)+5;let y=!1;const v=({target:S})=>{S===r&&(y=!0,r.removeEventListener(i,v),N(u))};r.addEventListener(i,v),setTimeout(()=>{y||a(r)},h)},H=(u,r,l,h)=>{const y=u.length;let v=u.indexOf(r);return v===-1?!l&&h?u[y-1]:u[0]:(v+=l?1:-1,h&&(v=(v+y)%y),u[Math.max(0,Math.min(v,y-1))])},Y=/[^.]*(?=\..*)\.|.*/,ge=/\..*/,le=/::\d+$/,te={};let q=1;const oe={mouseenter:"mouseover",mouseleave:"mouseout"},ve=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function G(u,r){return r&&`${r}::${q++}`||u.uidEvent||q++}function be(u){const r=G(u);return u.uidEvent=r,te[r]=te[r]||{},te[r]}function He(u,r,l=null){return Object.values(u).find(h=>h.callable===r&&h.delegationSelector===l)}function st(u,r,l){const h=typeof r=="string",y=h?l:r||l;let v=Pt(u);return ve.has(v)||(v=u),[h,y,v]}function Oe(u,r,l,h,y){if(typeof r!="string"||!u)return;let[v,S,L]=st(r,l,h);r in oe&&(S=(ce=>function(ie){if(!ie.relatedTarget||ie.relatedTarget!==ie.delegateTarget&&!ie.delegateTarget.contains(ie.relatedTarget))return ce.call(this,ie)})(S));const j=be(u),J=j[L]||(j[L]={}),X=He(J,S,v?l:null);if(X)return void(X.oneOff=X.oneOff&&y);const K=G(S,r.replace(Y,"")),he=v?function(se,ce,ie){return function ue(Le){const Fe=se.querySelectorAll(ce);for(let{target:_e}=Le;_e&&_e!==this;_e=_e.parentNode)for(const Ae of Fe)if(Ae===_e)return _t(Le,{delegateTarget:_e}),ue.oneOff&&I.off(se,Le.type,ce,ie),ie.apply(_e,[Le])}}(u,l,S):function(se,ce){return function ie(ue){return _t(ue,{delegateTarget:se}),ie.oneOff&&I.off(se,ue.type,ce),ce.apply(se,[ue])}}(u,S);he.delegationSelector=v?l:null,he.callable=S,he.oneOff=y,he.uidEvent=K,J[K]=he,u.addEventListener(L,he,v)}function ae(u,r,l,h,y){const v=He(r[l],h,y);v&&(u.removeEventListener(l,v,!!y),delete r[l][v.uidEvent])}function Se(u,r,l,h){const y=r[l]||{};for(const[v,S]of Object.entries(y))v.includes(h)&&ae(u,r,l,S.callable,S.delegationSelector)}function Pt(u){return u=u.replace(ge,""),oe[u]||u}const I={on(u,r,l,h){Oe(u,r,l,h,!1)},one(u,r,l,h){Oe(u,r,l,h,!0)},off(u,r,l,h){if(typeof r!="string"||!u)return;const[y,v,S]=st(r,l,h),L=S!==r,j=be(u),J=j[S]||{},X=r.startsWith(".");if(v===void 0){if(X)for(const K of Object.keys(j))Se(u,j,K,r.slice(1));for(const[K,he]of Object.entries(J)){const se=K.replace(le,"");L&&!r.includes(se)||ae(u,j,S,he.callable,he.delegationSelector)}}else{if(!Object.keys(J).length)return;ae(u,j,S,v,y?l:null)}},trigger(u,r,l){if(typeof r!="string"||!u)return null;const h=C();let y=null,v=!0,S=!0,L=!1;r!==Pt(r)&&h&&(y=h.Event(r,l),h(u).trigger(y),v=!y.isPropagationStopped(),S=!y.isImmediatePropagationStopped(),L=y.isDefaultPrevented());const j=_t(new Event(r,{bubbles:v,cancelable:!0}),l);return L&&j.preventDefault(),S&&u.dispatchEvent(j),j.defaultPrevented&&y&&y.preventDefault(),j}};function _t(u,r={}){for(const[l,h]of Object.entries(r))try{u[l]=h}catch{Object.defineProperty(u,l,{configurable:!0,get:()=>h})}return u}function et(u){if(u==="true")return!0;if(u==="false")return!1;if(u===Number(u).toString())return Number(u);if(u===""||u==="null")return null;if(typeof u!="string")return u;try{return JSON.parse(decodeURIComponent(u))}catch{return u}}function Yt(u){return u.replace(/[A-Z]/g,r=>`-${r.toLowerCase()}`)}const rt={setDataAttribute(u,r,l){u.setAttribute(`data-bs-${Yt(r)}`,l)},removeDataAttribute(u,r){u.removeAttribute(`data-bs-${Yt(r)}`)},getDataAttributes(u){if(!u)return{};const r={},l=Object.keys(u.dataset).filter(h=>h.startsWith("bs")&&!h.startsWith("bsConfig"));for(const h of l){let y=h.replace(/^bs/,"");y=y.charAt(0).toLowerCase()+y.slice(1,y.length),r[y]=et(u.dataset[h])}return r},getDataAttribute:(u,r)=>et(u.getAttribute(`data-bs-${Yt(r)}`))};class Zt{static get Default(){return{}}static get DefaultType(){return{}}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}_getConfig(r){return r=this._mergeConfigObj(r),r=this._configAfterMerge(r),this._typeCheckConfig(r),r}_configAfterMerge(r){return r}_mergeConfigObj(r,l){const h=c(l)?rt.getDataAttribute(l,"config"):{};return{...this.constructor.Default,...typeof h=="object"?h:{},...c(l)?rt.getDataAttributes(l):{},...typeof r=="object"?r:{}}}_typeCheckConfig(r,l=this.constructor.DefaultType){for(const[y,v]of Object.entries(l)){const S=r[y],L=c(S)?"element":(h=S)==null?`${h}`:Object.prototype.toString.call(h).match(/\s([a-z]+)/i)[1].toLowerCase();if(!new RegExp(v).test(L))throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${y}" provided type "${L}" but expected type "${v}".`)}var h}}class Be extends Zt{constructor(r,l){super(),(r=f(r))&&(this._element=r,this._config=this._getConfig(l),s.set(this._element,this.constructor.DATA_KEY,this))}dispose(){s.remove(this._element,this.constructor.DATA_KEY),I.off(this._element,this.constructor.EVENT_KEY);for(const r of Object.getOwnPropertyNames(this))this[r]=null}_queueCallback(r,l,h=!0){B(r,l,h)}_getConfig(r){return r=this._mergeConfigObj(r,this._element),r=this._configAfterMerge(r),this._typeCheckConfig(r),r}static getInstance(r){return s.get(f(r),this.DATA_KEY)}static getOrCreateInstance(r,l={}){return this.getInstance(r)||new this(r,typeof l=="object"?l:null)}static get VERSION(){return"5.3.3"}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}static eventName(r){return`${r}${this.EVENT_KEY}`}}const x=u=>{let r=u.getAttribute("data-bs-target");if(!r||r==="#"){let l=u.getAttribute("href");if(!l||!l.includes("#")&&!l.startsWith("."))return null;l.includes("#")&&!l.startsWith("#")&&(l=`#${l.split("#")[1]}`),r=l&&l!=="#"?l.trim():null}return r?r.split(",").map(l=>o(l)).join(","):null},A={find:(u,r=document.documentElement)=>[].concat(...Element.prototype.querySelectorAll.call(r,u)),findOne:(u,r=document.documentElement)=>Element.prototype.querySelector.call(r,u),children:(u,r)=>[].concat(...u.children).filter(l=>l.matches(r)),parents(u,r){const l=[];let h=u.parentNode.closest(r);for(;h;)l.push(h),h=h.parentNode.closest(r);return l},prev(u,r){let l=u.previousElementSibling;for(;l;){if(l.matches(r))return[l];l=l.previousElementSibling}return[]},next(u,r){let l=u.nextElementSibling;for(;l;){if(l.matches(r))return[l];l=l.nextElementSibling}return[]},focusableChildren(u){const r=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map(l=>`${l}:not([tabindex^="-"])`).join(",");return this.find(r,u).filter(l=>!d(l)&&p(l))},getSelectorFromElement(u){const r=x(u);return r&&A.findOne(r)?r:null},getElementFromSelector(u){const r=x(u);return r?A.findOne(r):null},getMultipleElementsFromSelector(u){const r=x(u);return r?A.find(r):[]}},V=(u,r="hide")=>{const l=`click.dismiss${u.EVENT_KEY}`,h=u.NAME;I.on(document,l,`[data-bs-dismiss="${h}"]`,function(y){if(["A","AREA"].includes(this.tagName)&&y.preventDefault(),d(this))return;const v=A.getElementFromSelector(this)||this.closest(`.${h}`);u.getOrCreateInstance(v)[r]()})},Z=".bs.alert",Te=`close${Z}`,je=`closed${Z}`;class g extends Be{static get NAME(){return"alert"}close(){if(I.trigger(this._element,Te).defaultPrevented)return;this._element.classList.remove("show");const r=this._element.classList.contains("fade");this._queueCallback(()=>this._destroyElement(),this._element,r)}_destroyElement(){this._element.remove(),I.trigger(this._element,je),this.dispose()}static jQueryInterface(r){return this.each(function(){const l=g.getOrCreateInstance(this);if(typeof r=="string"){if(l[r]===void 0||r.startsWith("_")||r==="constructor")throw new TypeError(`No method named "${r}"`);l[r](this)}})}}V(g,"close"),$(g);const _='[data-bs-toggle="button"]';class E extends Be{static get NAME(){return"button"}toggle(){this._element.setAttribute("aria-pressed",this._element.classList.toggle("active"))}static jQueryInterface(r){return this.each(function(){const l=E.getOrCreateInstance(this);r==="toggle"&&l[r]()})}}I.on(document,"click.bs.button.data-api",_,u=>{u.preventDefault();const r=u.target.closest(_);E.getOrCreateInstance(r).toggle()}),$(E);const D=".bs.swipe",O=`touchstart${D}`,k=`touchmove${D}`,W=`touchend${D}`,U=`pointerdown${D}`,F=`pointerup${D}`,M={endCallback:null,leftCallback:null,rightCallback:null},ne={endCallback:"(function|null)",leftCallback:"(function|null)",rightCallback:"(function|null)"};class z extends Zt{constructor(r,l){super(),this._element=r,r&&z.isSupported()&&(this._config=this._getConfig(l),this._deltaX=0,this._supportPointerEvents=!!window.PointerEvent,this._initEvents())}static get Default(){return M}static get DefaultType(){return ne}static get NAME(){return"swipe"}dispose(){I.off(this._element,D)}_start(r){this._supportPointerEvents?this._eventIsPointerPenTouch(r)&&(this._deltaX=r.clientX):this._deltaX=r.touches[0].clientX}_end(r){this._eventIsPointerPenTouch(r)&&(this._deltaX=r.clientX-this._deltaX),this._handleSwipe(),N(this._config.endCallback)}_move(r){this._deltaX=r.touches&&r.touches.length>1?0:r.touches[0].clientX-this._deltaX}_handleSwipe(){const r=Math.abs(this._deltaX);if(r<=40)return;const l=r/this._deltaX;this._deltaX=0,l&&N(l>0?this._config.rightCallback:this._config.leftCallback)}_initEvents(){this._supportPointerEvents?(I.on(this._element,U,r=>this._start(r)),I.on(this._element,F,r=>this._end(r)),this._element.classList.add("pointer-event")):(I.on(this._element,O,r=>this._start(r)),I.on(this._element,k,r=>this._move(r)),I.on(this._element,W,r=>this._end(r)))}_eventIsPointerPenTouch(r){return this._supportPointerEvents&&(r.pointerType==="pen"||r.pointerType==="touch")}static isSupported(){return"ontouchstart"in document.documentElement||navigator.maxTouchPoints>0}}const Q=".bs.carousel",re=".data-api",pe="next",Ce="prev",ye="left",Xe="right",Qe=`slide${Q}`,at=`slid${Q}`,lt=`keydown${Q}`,Wn=`mouseenter${Q}`,$r=`mouseleave${Q}`,ct=`dragstart${Q}`,It=`load${Q}${re}`,Fr=`click${Q}${re}`,el="carousel",jr="active",tl=".active",nl=".carousel-item",Dh=tl+nl,Nh={ArrowLeft:Xe,ArrowRight:ye},kh={interval:5e3,keyboard:!0,pause:"hover",ride:!1,touch:!0,wrap:!0},Mh={interval:"(number|boolean)",keyboard:"boolean",pause:"(string|boolean)",ride:"(boolean|string)",touch:"boolean",wrap:"boolean"};class bs extends Be{constructor(r,l){super(r,l),this._interval=null,this._activeElement=null,this._isSliding=!1,this.touchTimeout=null,this._swipeHelper=null,this._indicatorsElement=A.findOne(".carousel-indicators",this._element),this._addEventListeners(),this._config.ride===el&&this.cycle()}static get Default(){return kh}static get DefaultType(){return Mh}static get NAME(){return"carousel"}next(){this._slide(pe)}nextWhenVisible(){!document.hidden&&p(this._element)&&this.next()}prev(){this._slide(Ce)}pause(){this._isSliding&&a(this._element),this._clearInterval()}cycle(){this._clearInterval(),this._updateInterval(),this._interval=setInterval(()=>this.nextWhenVisible(),this._config.interval)}_maybeEnableCycle(){this._config.ride&&(this._isSliding?I.one(this._element,at,()=>this.cycle()):this.cycle())}to(r){const l=this._getItems();if(r>l.length-1||r<0)return;if(this._isSliding)return void I.one(this._element,at,()=>this.to(r));const h=this._getItemIndex(this._getActive());if(h===r)return;const y=r>h?pe:Ce;this._slide(y,l[r])}dispose(){this._swipeHelper&&this._swipeHelper.dispose(),super.dispose()}_configAfterMerge(r){return r.defaultInterval=r.interval,r}_addEventListeners(){this._config.keyboard&&I.on(this._element,lt,r=>this._keydown(r)),this._config.pause==="hover"&&(I.on(this._element,Wn,()=>this.pause()),I.on(this._element,$r,()=>this._maybeEnableCycle())),this._config.touch&&z.isSupported()&&this._addTouchEventListeners()}_addTouchEventListeners(){for(const l of A.find(".carousel-item img",this._element))I.on(l,ct,h=>h.preventDefault());const r={leftCallback:()=>this._slide(this._directionToOrder(ye)),rightCallback:()=>this._slide(this._directionToOrder(Xe)),endCallback:()=>{this._config.pause==="hover"&&(this.pause(),this.touchTimeout&&clearTimeout(this.touchTimeout),this.touchTimeout=setTimeout(()=>this._maybeEnableCycle(),500+this._config.interval))}};this._swipeHelper=new z(this._element,r)}_keydown(r){if(/input|textarea/i.test(r.target.tagName))return;const l=Nh[r.key];l&&(r.preventDefault(),this._slide(this._directionToOrder(l)))}_getItemIndex(r){return this._getItems().indexOf(r)}_setActiveIndicatorElement(r){if(!this._indicatorsElement)return;const l=A.findOne(tl,this._indicatorsElement);l.classList.remove(jr),l.removeAttribute("aria-current");const h=A.findOne(`[data-bs-slide-to="${r}"]`,this._indicatorsElement);h&&(h.classList.add(jr),h.setAttribute("aria-current","true"))}_updateInterval(){const r=this._activeElement||this._getActive();if(!r)return;const l=Number.parseInt(r.getAttribute("data-bs-interval"),10);this._config.interval=l||this._config.defaultInterval}_slide(r,l=null){if(this._isSliding)return;const h=this._getActive(),y=r===pe,v=l||H(this._getItems(),h,y,this._config.wrap);if(v===h)return;const S=this._getItemIndex(v),L=K=>I.trigger(this._element,K,{relatedTarget:v,direction:this._orderToDirection(r),from:this._getItemIndex(h),to:S});if(L(Qe).defaultPrevented||!h||!v)return;const j=!!this._interval;this.pause(),this._isSliding=!0,this._setActiveIndicatorElement(S),this._activeElement=v;const J=y?"carousel-item-start":"carousel-item-end",X=y?"carousel-item-next":"carousel-item-prev";v.classList.add(X),w(v),h.classList.add(J),v.classList.add(J),this._queueCallback(()=>{v.classList.remove(J,X),v.classList.add(jr),h.classList.remove(jr,X,J),this._isSliding=!1,L(at)},h,this._isAnimated()),j&&this.cycle()}_isAnimated(){return this._element.classList.contains("slide")}_getActive(){return A.findOne(Dh,this._element)}_getItems(){return A.find(nl,this._element)}_clearInterval(){this._interval&&(clearInterval(this._interval),this._interval=null)}_directionToOrder(r){return R()?r===ye?Ce:pe:r===ye?pe:Ce}_orderToDirection(r){return R()?r===Ce?ye:Xe:r===Ce?Xe:ye}static jQueryInterface(r){return this.each(function(){const l=bs.getOrCreateInstance(this,r);if(typeof r!="number"){if(typeof r=="string"){if(l[r]===void 0||r.startsWith("_")||r==="constructor")throw new TypeError(`No method named "${r}"`);l[r]()}}else l.to(r)})}}I.on(document,Fr,"[data-bs-slide], [data-bs-slide-to]",function(u){const r=A.getElementFromSelector(this);if(!r||!r.classList.contains(el))return;u.preventDefault();const l=bs.getOrCreateInstance(r),h=this.getAttribute("data-bs-slide-to");return h?(l.to(h),void l._maybeEnableCycle()):rt.getDataAttribute(this,"slide")==="next"?(l.next(),void l._maybeEnableCycle()):(l.prev(),void l._maybeEnableCycle())}),I.on(window,It,()=>{const u=A.find('[data-bs-ride="carousel"]');for(const r of u)bs.getOrCreateInstance(r)}),$(bs);const Gs=".bs.collapse",$h=`show${Gs}`,Fh=`shown${Gs}`,jh=`hide${Gs}`,Bh=`hidden${Gs}`,Hh=`click${Gs}.data-api`,eo="show",ys="collapse",Br="collapsing",Uh=`:scope .${ys} .${ys}`,to='[data-bs-toggle="collapse"]',Vh={parent:null,toggle:!0},qh={parent:"(null|element)",toggle:"boolean"};class vs extends Be{constructor(r,l){super(r,l),this._isTransitioning=!1,this._triggerArray=[];const h=A.find(to);for(const y of h){const v=A.getSelectorFromElement(y),S=A.find(v).filter(L=>L===this._element);v!==null&&S.length&&this._triggerArray.push(y)}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return Vh}static get DefaultType(){return qh}static get NAME(){return"collapse"}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let r=[];if(this._config.parent&&(r=this._getFirstLevelChildren(".collapse.show, .collapse.collapsing").filter(y=>y!==this._element).map(y=>vs.getOrCreateInstance(y,{toggle:!1}))),r.length&&r[0]._isTransitioning||I.trigger(this._element,$h).defaultPrevented)return;for(const y of r)y.hide();const l=this._getDimension();this._element.classList.remove(ys),this._element.classList.add(Br),this._element.style[l]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;const h=`scroll${l[0].toUpperCase()+l.slice(1)}`;this._queueCallback(()=>{this._isTransitioning=!1,this._element.classList.remove(Br),this._element.classList.add(ys,eo),this._element.style[l]="",I.trigger(this._element,Fh)},this._element,!0),this._element.style[l]=`${this._element[h]}px`}hide(){if(this._isTransitioning||!this._isShown()||I.trigger(this._element,jh).defaultPrevented)return;const r=this._getDimension();this._element.style[r]=`${this._element.getBoundingClientRect()[r]}px`,w(this._element),this._element.classList.add(Br),this._element.classList.remove(ys,eo);for(const l of this._triggerArray){const h=A.getElementFromSelector(l);h&&!this._isShown(h)&&this._addAriaAndCollapsedClass([l],!1)}this._isTransitioning=!0,this._element.style[r]="",this._queueCallback(()=>{this._isTransitioning=!1,this._element.classList.remove(Br),this._element.classList.add(ys),I.trigger(this._element,Bh)},this._element,!0)}_isShown(r=this._element){return r.classList.contains(eo)}_configAfterMerge(r){return r.toggle=!!r.toggle,r.parent=f(r.parent),r}_getDimension(){return this._element.classList.contains("collapse-horizontal")?"width":"height"}_initializeChildren(){if(!this._config.parent)return;const r=this._getFirstLevelChildren(to);for(const l of r){const h=A.getElementFromSelector(l);h&&this._addAriaAndCollapsedClass([l],this._isShown(h))}}_getFirstLevelChildren(r){const l=A.find(Uh,this._config.parent);return A.find(r,this._config.parent).filter(h=>!l.includes(h))}_addAriaAndCollapsedClass(r,l){if(r.length)for(const h of r)h.classList.toggle("collapsed",!l),h.setAttribute("aria-expanded",l)}static jQueryInterface(r){const l={};return typeof r=="string"&&/show|hide/.test(r)&&(l.toggle=!1),this.each(function(){const h=vs.getOrCreateInstance(this,l);if(typeof r=="string"){if(h[r]===void 0)throw new TypeError(`No method named "${r}"`);h[r]()}})}}I.on(document,Hh,to,function(u){(u.target.tagName==="A"||u.delegateTarget&&u.delegateTarget.tagName==="A")&&u.preventDefault();for(const r of A.getMultipleElementsFromSelector(this))vs.getOrCreateInstance(r,{toggle:!1}).toggle()}),$(vs);var ut="top",vt="bottom",wt="right",ft="left",Hr="auto",ws=[ut,vt,wt,ft],zn="start",Es="end",sl="clippingParents",no="viewport",Cs="popper",rl="reference",so=ws.reduce(function(u,r){return u.concat([r+"-"+zn,r+"-"+Es])},[]),ro=[].concat(ws,[Hr]).reduce(function(u,r){return u.concat([r,r+"-"+zn,r+"-"+Es])},[]),il="beforeRead",ol="read",al="afterRead",ll="beforeMain",cl="main",ul="afterMain",fl="beforeWrite",dl="write",hl="afterWrite",pl=[il,ol,al,ll,cl,ul,fl,dl,hl];function en(u){return u?(u.nodeName||"").toLowerCase():null}function Et(u){if(u==null)return window;if(u.toString()!=="[object Window]"){var r=u.ownerDocument;return r&&r.defaultView||window}return u}function Kn(u){return u instanceof Et(u).Element||u instanceof Element}function Lt(u){return u instanceof Et(u).HTMLElement||u instanceof HTMLElement}function io(u){return typeof ShadowRoot<"u"&&(u instanceof Et(u).ShadowRoot||u instanceof ShadowRoot)}const oo={name:"applyStyles",enabled:!0,phase:"write",fn:function(u){var r=u.state;Object.keys(r.elements).forEach(function(l){var h=r.styles[l]||{},y=r.attributes[l]||{},v=r.elements[l];Lt(v)&&en(v)&&(Object.assign(v.style,h),Object.keys(y).forEach(function(S){var L=y[S];L===!1?v.removeAttribute(S):v.setAttribute(S,L===!0?"":L)}))})},effect:function(u){var r=u.state,l={popper:{position:r.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(r.elements.popper.style,l.popper),r.styles=l,r.elements.arrow&&Object.assign(r.elements.arrow.style,l.arrow),function(){Object.keys(r.elements).forEach(function(h){var y=r.elements[h],v=r.attributes[h]||{},S=Object.keys(r.styles.hasOwnProperty(h)?r.styles[h]:l[h]).reduce(function(L,j){return L[j]="",L},{});Lt(y)&&en(y)&&(Object.assign(y.style,S),Object.keys(v).forEach(function(L){y.removeAttribute(L)}))})}},requires:["computeStyles"]};function tn(u){return u.split("-")[0]}var Gn=Math.max,Ur=Math.min,Ss=Math.round;function ao(){var u=navigator.userAgentData;return u!=null&&u.brands&&Array.isArray(u.brands)?u.brands.map(function(r){return r.brand+"/"+r.version}).join(" "):navigator.userAgent}function ml(){return!/^((?!chrome|android).)*safari/i.test(ao())}function Ts(u,r,l){r===void 0&&(r=!1),l===void 0&&(l=!1);var h=u.getBoundingClientRect(),y=1,v=1;r&&Lt(u)&&(y=u.offsetWidth>0&&Ss(h.width)/u.offsetWidth||1,v=u.offsetHeight>0&&Ss(h.height)/u.offsetHeight||1);var S=(Kn(u)?Et(u):window).visualViewport,L=!ml()&&l,j=(h.left+(L&&S?S.offsetLeft:0))/y,J=(h.top+(L&&S?S.offsetTop:0))/v,X=h.width/y,K=h.height/v;return{width:X,height:K,top:J,right:j+X,bottom:J+K,left:j,x:j,y:J}}function lo(u){var r=Ts(u),l=u.offsetWidth,h=u.offsetHeight;return Math.abs(r.width-l)<=1&&(l=r.width),Math.abs(r.height-h)<=1&&(h=r.height),{x:u.offsetLeft,y:u.offsetTop,width:l,height:h}}function gl(u,r){var l=r.getRootNode&&r.getRootNode();if(u.contains(r))return!0;if(l&&io(l)){var h=r;do{if(h&&u.isSameNode(h))return!0;h=h.parentNode||h.host}while(h)}return!1}function hn(u){return Et(u).getComputedStyle(u)}function Wh(u){return["table","td","th"].indexOf(en(u))>=0}function An(u){return((Kn(u)?u.ownerDocument:u.document)||window.document).documentElement}function Vr(u){return en(u)==="html"?u:u.assignedSlot||u.parentNode||(io(u)?u.host:null)||An(u)}function _l(u){return Lt(u)&&hn(u).position!=="fixed"?u.offsetParent:null}function Js(u){for(var r=Et(u),l=_l(u);l&&Wh(l)&&hn(l).position==="static";)l=_l(l);return l&&(en(l)==="html"||en(l)==="body"&&hn(l).position==="static")?r:l||function(h){var y=/firefox/i.test(ao());if(/Trident/i.test(ao())&&Lt(h)&&hn(h).position==="fixed")return null;var v=Vr(h);for(io(v)&&(v=v.host);Lt(v)&&["html","body"].indexOf(en(v))<0;){var S=hn(v);if(S.transform!=="none"||S.perspective!=="none"||S.contain==="paint"||["transform","perspective"].indexOf(S.willChange)!==-1||y&&S.willChange==="filter"||y&&S.filter&&S.filter!=="none")return v;v=v.parentNode}return null}(u)||r}function co(u){return["top","bottom"].indexOf(u)>=0?"x":"y"}function Xs(u,r,l){return Gn(u,Ur(r,l))}function bl(u){return Object.assign({},{top:0,right:0,bottom:0,left:0},u)}function yl(u,r){return r.reduce(function(l,h){return l[h]=u,l},{})}const vl={name:"arrow",enabled:!0,phase:"main",fn:function(u){var r,l=u.state,h=u.name,y=u.options,v=l.elements.arrow,S=l.modifiersData.popperOffsets,L=tn(l.placement),j=co(L),J=[ft,wt].indexOf(L)>=0?"height":"width";if(v&&S){var X=function(De,Re){return bl(typeof(De=typeof De=="function"?De(Object.assign({},Re.rects,{placement:Re.placement})):De)!="number"?De:yl(De,ws))}(y.padding,l),K=lo(v),he=j==="y"?ut:ft,se=j==="y"?vt:wt,ce=l.rects.reference[J]+l.rects.reference[j]-S[j]-l.rects.popper[J],ie=S[j]-l.rects.reference[j],ue=Js(v),Le=ue?j==="y"?ue.clientHeight||0:ue.clientWidth||0:0,Fe=ce/2-ie/2,_e=X[he],Ae=Le-K[J]-X[se],me=Le/2-K[J]/2+Fe,we=Xs(_e,me,Ae),xe=j;l.modifiersData[h]=((r={})[xe]=we,r.centerOffset=we-me,r)}},effect:function(u){var r=u.state,l=u.options.element,h=l===void 0?"[data-popper-arrow]":l;h!=null&&(typeof h!="string"||(h=r.elements.popper.querySelector(h)))&&gl(r.elements.popper,h)&&(r.elements.arrow=h)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function As(u){return u.split("-")[1]}var zh={top:"auto",right:"auto",bottom:"auto",left:"auto"};function wl(u){var r,l=u.popper,h=u.popperRect,y=u.placement,v=u.variation,S=u.offsets,L=u.position,j=u.gpuAcceleration,J=u.adaptive,X=u.roundOffsets,K=u.isFixed,he=S.x,se=he===void 0?0:he,ce=S.y,ie=ce===void 0?0:ce,ue=typeof X=="function"?X({x:se,y:ie}):{x:se,y:ie};se=ue.x,ie=ue.y;var Le=S.hasOwnProperty("x"),Fe=S.hasOwnProperty("y"),_e=ft,Ae=ut,me=window;if(J){var we=Js(l),xe="clientHeight",De="clientWidth";we===Et(l)&&hn(we=An(l)).position!=="static"&&L==="absolute"&&(xe="scrollHeight",De="scrollWidth"),(y===ut||(y===ft||y===wt)&&v===Es)&&(Ae=vt,ie-=(K&&we===me&&me.visualViewport?me.visualViewport.height:we[xe])-h.height,ie*=j?1:-1),y!==ft&&(y!==ut&&y!==vt||v!==Es)||(_e=wt,se-=(K&&we===me&&me.visualViewport?me.visualViewport.width:we[De])-h.width,se*=j?1:-1)}var Re,We=Object.assign({position:L},J&&zh),Ct=X===!0?function(Ut,dt){var Nt=Ut.x,kt=Ut.y,Ve=dt.devicePixelRatio||1;return{x:Ss(Nt*Ve)/Ve||0,y:Ss(kt*Ve)/Ve||0}}({x:se,y:ie},Et(l)):{x:se,y:ie};return se=Ct.x,ie=Ct.y,j?Object.assign({},We,((Re={})[Ae]=Fe?"0":"",Re[_e]=Le?"0":"",Re.transform=(me.devicePixelRatio||1)<=1?"translate("+se+"px, "+ie+"px)":"translate3d("+se+"px, "+ie+"px, 0)",Re)):Object.assign({},We,((r={})[Ae]=Fe?ie+"px":"",r[_e]=Le?se+"px":"",r.transform="",r))}const uo={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(u){var r=u.state,l=u.options,h=l.gpuAcceleration,y=h===void 0||h,v=l.adaptive,S=v===void 0||v,L=l.roundOffsets,j=L===void 0||L,J={placement:tn(r.placement),variation:As(r.placement),popper:r.elements.popper,popperRect:r.rects.popper,gpuAcceleration:y,isFixed:r.options.strategy==="fixed"};r.modifiersData.popperOffsets!=null&&(r.styles.popper=Object.assign({},r.styles.popper,wl(Object.assign({},J,{offsets:r.modifiersData.popperOffsets,position:r.options.strategy,adaptive:S,roundOffsets:j})))),r.modifiersData.arrow!=null&&(r.styles.arrow=Object.assign({},r.styles.arrow,wl(Object.assign({},J,{offsets:r.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:j})))),r.attributes.popper=Object.assign({},r.attributes.popper,{"data-popper-placement":r.placement})},data:{}};var qr={passive:!0};const fo={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(u){var r=u.state,l=u.instance,h=u.options,y=h.scroll,v=y===void 0||y,S=h.resize,L=S===void 0||S,j=Et(r.elements.popper),J=[].concat(r.scrollParents.reference,r.scrollParents.popper);return v&&J.forEach(function(X){X.addEventListener("scroll",l.update,qr)}),L&&j.addEventListener("resize",l.update,qr),function(){v&&J.forEach(function(X){X.removeEventListener("scroll",l.update,qr)}),L&&j.removeEventListener("resize",l.update,qr)}},data:{}};var Kh={left:"right",right:"left",bottom:"top",top:"bottom"};function Wr(u){return u.replace(/left|right|bottom|top/g,function(r){return Kh[r]})}var Gh={start:"end",end:"start"};function El(u){return u.replace(/start|end/g,function(r){return Gh[r]})}function ho(u){var r=Et(u);return{scrollLeft:r.pageXOffset,scrollTop:r.pageYOffset}}function po(u){return Ts(An(u)).left+ho(u).scrollLeft}function mo(u){var r=hn(u),l=r.overflow,h=r.overflowX,y=r.overflowY;return/auto|scroll|overlay|hidden/.test(l+y+h)}function Cl(u){return["html","body","#document"].indexOf(en(u))>=0?u.ownerDocument.body:Lt(u)&&mo(u)?u:Cl(Vr(u))}function Qs(u,r){var l;r===void 0&&(r=[]);var h=Cl(u),y=h===((l=u.ownerDocument)==null?void 0:l.body),v=Et(h),S=y?[v].concat(v.visualViewport||[],mo(h)?h:[]):h,L=r.concat(S);return y?L:L.concat(Qs(Vr(S)))}function go(u){return Object.assign({},u,{left:u.x,top:u.y,right:u.x+u.width,bottom:u.y+u.height})}function Sl(u,r,l){return r===no?go(function(h,y){var v=Et(h),S=An(h),L=v.visualViewport,j=S.clientWidth,J=S.clientHeight,X=0,K=0;if(L){j=L.width,J=L.height;var he=ml();(he||!he&&y==="fixed")&&(X=L.offsetLeft,K=L.offsetTop)}return{width:j,height:J,x:X+po(h),y:K}}(u,l)):Kn(r)?function(h,y){var v=Ts(h,!1,y==="fixed");return v.top=v.top+h.clientTop,v.left=v.left+h.clientLeft,v.bottom=v.top+h.clientHeight,v.right=v.left+h.clientWidth,v.width=h.clientWidth,v.height=h.clientHeight,v.x=v.left,v.y=v.top,v}(r,l):go(function(h){var y,v=An(h),S=ho(h),L=(y=h.ownerDocument)==null?void 0:y.body,j=Gn(v.scrollWidth,v.clientWidth,L?L.scrollWidth:0,L?L.clientWidth:0),J=Gn(v.scrollHeight,v.clientHeight,L?L.scrollHeight:0,L?L.clientHeight:0),X=-S.scrollLeft+po(h),K=-S.scrollTop;return hn(L||v).direction==="rtl"&&(X+=Gn(v.clientWidth,L?L.clientWidth:0)-j),{width:j,height:J,x:X,y:K}}(An(u)))}function Tl(u){var r,l=u.reference,h=u.element,y=u.placement,v=y?tn(y):null,S=y?As(y):null,L=l.x+l.width/2-h.width/2,j=l.y+l.height/2-h.height/2;switch(v){case ut:r={x:L,y:l.y-h.height};break;case vt:r={x:L,y:l.y+l.height};break;case wt:r={x:l.x+l.width,y:j};break;case ft:r={x:l.x-h.width,y:j};break;default:r={x:l.x,y:l.y}}var J=v?co(v):null;if(J!=null){var X=J==="y"?"height":"width";switch(S){case zn:r[J]=r[J]-(l[X]/2-h[X]/2);break;case Es:r[J]=r[J]+(l[X]/2-h[X]/2)}}return r}function Os(u,r){r===void 0&&(r={});var l=r,h=l.placement,y=h===void 0?u.placement:h,v=l.strategy,S=v===void 0?u.strategy:v,L=l.boundary,j=L===void 0?sl:L,J=l.rootBoundary,X=J===void 0?no:J,K=l.elementContext,he=K===void 0?Cs:K,se=l.altBoundary,ce=se!==void 0&&se,ie=l.padding,ue=ie===void 0?0:ie,Le=bl(typeof ue!="number"?ue:yl(ue,ws)),Fe=he===Cs?rl:Cs,_e=u.rects.popper,Ae=u.elements[ce?Fe:he],me=function(dt,Nt,kt,Ve){var nn=Nt==="clippingParents"?function(Ne){var ht=Qs(Vr(Ne)),Mt=["absolute","fixed"].indexOf(hn(Ne).position)>=0&&Lt(Ne)?Js(Ne):Ne;return Kn(Mt)?ht.filter(function(xn){return Kn(xn)&&gl(xn,Mt)&&en(xn)!=="body"}):[]}(dt):[].concat(Nt),sn=[].concat(nn,[kt]),Ps=sn[0],Ye=sn.reduce(function(Ne,ht){var Mt=Sl(dt,ht,Ve);return Ne.top=Gn(Mt.top,Ne.top),Ne.right=Ur(Mt.right,Ne.right),Ne.bottom=Ur(Mt.bottom,Ne.bottom),Ne.left=Gn(Mt.left,Ne.left),Ne},Sl(dt,Ps,Ve));return Ye.width=Ye.right-Ye.left,Ye.height=Ye.bottom-Ye.top,Ye.x=Ye.left,Ye.y=Ye.top,Ye}(Kn(Ae)?Ae:Ae.contextElement||An(u.elements.popper),j,X,S),we=Ts(u.elements.reference),xe=Tl({reference:we,element:_e,strategy:"absolute",placement:y}),De=go(Object.assign({},_e,xe)),Re=he===Cs?De:we,We={top:me.top-Re.top+Le.top,bottom:Re.bottom-me.bottom+Le.bottom,left:me.left-Re.left+Le.left,right:Re.right-me.right+Le.right},Ct=u.modifiersData.offset;if(he===Cs&&Ct){var Ut=Ct[y];Object.keys(We).forEach(function(dt){var Nt=[wt,vt].indexOf(dt)>=0?1:-1,kt=[ut,vt].indexOf(dt)>=0?"y":"x";We[dt]+=Ut[kt]*Nt})}return We}function Jh(u,r){r===void 0&&(r={});var l=r,h=l.placement,y=l.boundary,v=l.rootBoundary,S=l.padding,L=l.flipVariations,j=l.allowedAutoPlacements,J=j===void 0?ro:j,X=As(h),K=X?L?so:so.filter(function(ce){return As(ce)===X}):ws,he=K.filter(function(ce){return J.indexOf(ce)>=0});he.length===0&&(he=K);var se=he.reduce(function(ce,ie){return ce[ie]=Os(u,{placement:ie,boundary:y,rootBoundary:v,padding:S})[tn(ie)],ce},{});return Object.keys(se).sort(function(ce,ie){return se[ce]-se[ie]})}const Al={name:"flip",enabled:!0,phase:"main",fn:function(u){var r=u.state,l=u.options,h=u.name;if(!r.modifiersData[h]._skip){for(var y=l.mainAxis,v=y===void 0||y,S=l.altAxis,L=S===void 0||S,j=l.fallbackPlacements,J=l.padding,X=l.boundary,K=l.rootBoundary,he=l.altBoundary,se=l.flipVariations,ce=se===void 0||se,ie=l.allowedAutoPlacements,ue=r.options.placement,Le=tn(ue),Fe=j||(Le!==ue&&ce?function(Ne){if(tn(Ne)===Hr)return[];var ht=Wr(Ne);return[El(Ne),ht,El(ht)]}(ue):[Wr(ue)]),_e=[ue].concat(Fe).reduce(function(Ne,ht){return Ne.concat(tn(ht)===Hr?Jh(r,{placement:ht,boundary:X,rootBoundary:K,padding:J,flipVariations:ce,allowedAutoPlacements:ie}):ht)},[]),Ae=r.rects.reference,me=r.rects.popper,we=new Map,xe=!0,De=_e[0],Re=0;Re<_e.length;Re++){var We=_e[Re],Ct=tn(We),Ut=As(We)===zn,dt=[ut,vt].indexOf(Ct)>=0,Nt=dt?"width":"height",kt=Os(r,{placement:We,boundary:X,rootBoundary:K,altBoundary:he,padding:J}),Ve=dt?Ut?wt:ft:Ut?vt:ut;Ae[Nt]>me[Nt]&&(Ve=Wr(Ve));var nn=Wr(Ve),sn=[];if(v&&sn.push(kt[Ct]<=0),L&&sn.push(kt[Ve]<=0,kt[nn]<=0),sn.every(function(Ne){return Ne})){De=We,xe=!1;break}we.set(We,sn)}if(xe)for(var Ps=function(Ne){var ht=_e.find(function(Mt){var xn=we.get(Mt);if(xn)return xn.slice(0,Ne).every(function(ei){return ei})});if(ht)return De=ht,"break"},Ye=ce?3:1;Ye>0&&Ps(Ye)!=="break";Ye--);r.placement!==De&&(r.modifiersData[h]._skip=!0,r.placement=De,r.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function Ol(u,r,l){return l===void 0&&(l={x:0,y:0}),{top:u.top-r.height-l.y,right:u.right-r.width+l.x,bottom:u.bottom-r.height+l.y,left:u.left-r.width-l.x}}function xl(u){return[ut,wt,vt,ft].some(function(r){return u[r]>=0})}const Rl={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(u){var r=u.state,l=u.name,h=r.rects.reference,y=r.rects.popper,v=r.modifiersData.preventOverflow,S=Os(r,{elementContext:"reference"}),L=Os(r,{altBoundary:!0}),j=Ol(S,h),J=Ol(L,y,v),X=xl(j),K=xl(J);r.modifiersData[l]={referenceClippingOffsets:j,popperEscapeOffsets:J,isReferenceHidden:X,hasPopperEscaped:K},r.attributes.popper=Object.assign({},r.attributes.popper,{"data-popper-reference-hidden":X,"data-popper-escaped":K})}},Pl={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(u){var r=u.state,l=u.options,h=u.name,y=l.offset,v=y===void 0?[0,0]:y,S=ro.reduce(function(X,K){return X[K]=function(he,se,ce){var ie=tn(he),ue=[ft,ut].indexOf(ie)>=0?-1:1,Le=typeof ce=="function"?ce(Object.assign({},se,{placement:he})):ce,Fe=Le[0],_e=Le[1];return Fe=Fe||0,_e=(_e||0)*ue,[ft,wt].indexOf(ie)>=0?{x:_e,y:Fe}:{x:Fe,y:_e}}(K,r.rects,v),X},{}),L=S[r.placement],j=L.x,J=L.y;r.modifiersData.popperOffsets!=null&&(r.modifiersData.popperOffsets.x+=j,r.modifiersData.popperOffsets.y+=J),r.modifiersData[h]=S}},_o={name:"popperOffsets",enabled:!0,phase:"read",fn:function(u){var r=u.state,l=u.name;r.modifiersData[l]=Tl({reference:r.rects.reference,element:r.rects.popper,strategy:"absolute",placement:r.placement})},data:{}},Il={name:"preventOverflow",enabled:!0,phase:"main",fn:function(u){var r=u.state,l=u.options,h=u.name,y=l.mainAxis,v=y===void 0||y,S=l.altAxis,L=S!==void 0&&S,j=l.boundary,J=l.rootBoundary,X=l.altBoundary,K=l.padding,he=l.tether,se=he===void 0||he,ce=l.tetherOffset,ie=ce===void 0?0:ce,ue=Os(r,{boundary:j,rootBoundary:J,padding:K,altBoundary:X}),Le=tn(r.placement),Fe=As(r.placement),_e=!Fe,Ae=co(Le),me=Ae==="x"?"y":"x",we=r.modifiersData.popperOffsets,xe=r.rects.reference,De=r.rects.popper,Re=typeof ie=="function"?ie(Object.assign({},r.rects,{placement:r.placement})):ie,We=typeof Re=="number"?{mainAxis:Re,altAxis:Re}:Object.assign({mainAxis:0,altAxis:0},Re),Ct=r.modifiersData.offset?r.modifiersData.offset[r.placement]:null,Ut={x:0,y:0};if(we){if(v){var dt,Nt=Ae==="y"?ut:ft,kt=Ae==="y"?vt:wt,Ve=Ae==="y"?"height":"width",nn=we[Ae],sn=nn+ue[Nt],Ps=nn-ue[kt],Ye=se?-De[Ve]/2:0,Ne=Fe===zn?xe[Ve]:De[Ve],ht=Fe===zn?-De[Ve]:-xe[Ve],Mt=r.elements.arrow,xn=se&&Mt?lo(Mt):{width:0,height:0},ei=r.modifiersData["arrow#persistent"]?r.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},_c=ei[Nt],bc=ei[kt],ti=Xs(0,xe[Ve],xn[Ve]),Sm=_e?xe[Ve]/2-Ye-ti-_c-We.mainAxis:Ne-ti-_c-We.mainAxis,Tm=_e?-xe[Ve]/2+Ye+ti+bc+We.mainAxis:ht+ti+bc+We.mainAxis,Po=r.elements.arrow&&Js(r.elements.arrow),Am=Po?Ae==="y"?Po.clientTop||0:Po.clientLeft||0:0,yc=(dt=Ct==null?void 0:Ct[Ae])!=null?dt:0,Om=nn+Tm-yc,vc=Xs(se?Ur(sn,nn+Sm-yc-Am):sn,nn,se?Gn(Ps,Om):Ps);we[Ae]=vc,Ut[Ae]=vc-nn}if(L){var wc,xm=Ae==="x"?ut:ft,Rm=Ae==="x"?vt:wt,ns=we[me],ni=me==="y"?"height":"width",Ec=ns+ue[xm],Cc=ns-ue[Rm],Io=[ut,ft].indexOf(Le)!==-1,Sc=(wc=Ct==null?void 0:Ct[me])!=null?wc:0,Tc=Io?Ec:ns-xe[ni]-De[ni]-Sc+We.altAxis,Ac=Io?ns+xe[ni]+De[ni]-Sc-We.altAxis:Cc,Oc=se&&Io?function(Pm,Im,Lo){var xc=Xs(Pm,Im,Lo);return xc>Lo?Lo:xc}(Tc,ns,Ac):Xs(se?Tc:Ec,ns,se?Ac:Cc);we[me]=Oc,Ut[me]=Oc-ns}r.modifiersData[h]=Ut}},requiresIfExists:["offset"]};function Xh(u,r,l){l===void 0&&(l=!1);var h,y,v=Lt(r),S=Lt(r)&&function(K){var he=K.getBoundingClientRect(),se=Ss(he.width)/K.offsetWidth||1,ce=Ss(he.height)/K.offsetHeight||1;return se!==1||ce!==1}(r),L=An(r),j=Ts(u,S,l),J={scrollLeft:0,scrollTop:0},X={x:0,y:0};return(v||!v&&!l)&&((en(r)!=="body"||mo(L))&&(J=(h=r)!==Et(h)&&Lt(h)?{scrollLeft:(y=h).scrollLeft,scrollTop:y.scrollTop}:ho(h)),Lt(r)?((X=Ts(r,!0)).x+=r.clientLeft,X.y+=r.clientTop):L&&(X.x=po(L))),{x:j.left+J.scrollLeft-X.x,y:j.top+J.scrollTop-X.y,width:j.width,height:j.height}}function Qh(u){var r=new Map,l=new Set,h=[];function y(v){l.add(v.name),[].concat(v.requires||[],v.requiresIfExists||[]).forEach(function(S){if(!l.has(S)){var L=r.get(S);L&&y(L)}}),h.push(v)}return u.forEach(function(v){r.set(v.name,v)}),u.forEach(function(v){l.has(v.name)||y(v)}),h}var Ll={placement:"bottom",modifiers:[],strategy:"absolute"};function Dl(){for(var u=arguments.length,r=new Array(u),l=0;lNumber.parseInt(l,10)):typeof r=="function"?l=>r(l,this._element):r}_getPopperConfig(){const r={placement:this._getPlacement(),modifiers:[{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"offset",options:{offset:this._getOffset()}}]};return(this._inNavbar||this._config.display==="static")&&(rt.setDataAttribute(this._menu,"popper","static"),r.modifiers=[{name:"applyStyles",enabled:!1}]),{...r,...N(this._config.popperConfig,[r])}}_selectMenuItem({key:r,target:l}){const h=A.find(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",this._menu).filter(y=>p(y));h.length&&H(h,l,r===Ml,!h.includes(l)).focus()}static jQueryInterface(r){return this.each(function(){const l=Ht.getOrCreateInstance(this,r);if(typeof r=="string"){if(l[r]===void 0)throw new TypeError(`No method named "${r}"`);l[r]()}})}static clearMenus(r){if(r.button===2||r.type==="keyup"&&r.key!=="Tab")return;const l=A.find(op);for(const h of l){const y=Ht.getInstance(h);if(!y||y._config.autoClose===!1)continue;const v=r.composedPath(),S=v.includes(y._menu);if(v.includes(y._element)||y._config.autoClose==="inside"&&!S||y._config.autoClose==="outside"&&S||y._menu.contains(r.target)&&(r.type==="keyup"&&r.key==="Tab"||/input|select|option|textarea|form/i.test(r.target.tagName)))continue;const L={relatedTarget:y._element};r.type==="click"&&(L.clickEvent=r),y._completeHide(L)}}static dataApiKeydownHandler(r){const l=/input|textarea/i.test(r.target.tagName),h=r.key==="Escape",y=[ep,Ml].includes(r.key);if(!y&&!h||l&&!h)return;r.preventDefault();const v=this.matches(Xn)?this:A.prev(this,Xn)[0]||A.next(this,Xn)[0]||A.findOne(Xn,r.delegateTarget.parentNode),S=Ht.getOrCreateInstance(v);if(y)return r.stopPropagation(),S.show(),void S._selectMenuItem(r);S._isShown()&&(r.stopPropagation(),S.hide(),v.focus())}}I.on(document,Fl,Xn,Ht.dataApiKeydownHandler),I.on(document,Fl,Kr,Ht.dataApiKeydownHandler),I.on(document,$l,Ht.clearMenus),I.on(document,ip,Ht.clearMenus),I.on(document,$l,Xn,function(u){u.preventDefault(),Ht.getOrCreateInstance(this).toggle()}),$(Ht);const jl="backdrop",Bl="show",Hl=`mousedown.bs.${jl}`,mp={className:"modal-backdrop",clickCallback:null,isAnimated:!1,isVisible:!0,rootElement:"body"},gp={className:"string",clickCallback:"(function|null)",isAnimated:"boolean",isVisible:"boolean",rootElement:"(element|string)"};class Ul extends Zt{constructor(r){super(),this._config=this._getConfig(r),this._isAppended=!1,this._element=null}static get Default(){return mp}static get DefaultType(){return gp}static get NAME(){return jl}show(r){if(!this._config.isVisible)return void N(r);this._append();const l=this._getElement();this._config.isAnimated&&w(l),l.classList.add(Bl),this._emulateAnimation(()=>{N(r)})}hide(r){this._config.isVisible?(this._getElement().classList.remove(Bl),this._emulateAnimation(()=>{this.dispose(),N(r)})):N(r)}dispose(){this._isAppended&&(I.off(this._element,Hl),this._element.remove(),this._isAppended=!1)}_getElement(){if(!this._element){const r=document.createElement("div");r.className=this._config.className,this._config.isAnimated&&r.classList.add("fade"),this._element=r}return this._element}_configAfterMerge(r){return r.rootElement=f(r.rootElement),r}_append(){if(this._isAppended)return;const r=this._getElement();this._config.rootElement.append(r),I.on(r,Hl,()=>{N(this._config.clickCallback)}),this._isAppended=!0}_emulateAnimation(r){B(r,this._getElement(),this._config.isAnimated)}}const Gr=".bs.focustrap",_p=`focusin${Gr}`,bp=`keydown.tab${Gr}`,Vl="backward",yp={autofocus:!0,trapElement:null},vp={autofocus:"boolean",trapElement:"element"};class ql extends Zt{constructor(r){super(),this._config=this._getConfig(r),this._isActive=!1,this._lastTabNavDirection=null}static get Default(){return yp}static get DefaultType(){return vp}static get NAME(){return"focustrap"}activate(){this._isActive||(this._config.autofocus&&this._config.trapElement.focus(),I.off(document,Gr),I.on(document,_p,r=>this._handleFocusin(r)),I.on(document,bp,r=>this._handleKeydown(r)),this._isActive=!0)}deactivate(){this._isActive&&(this._isActive=!1,I.off(document,Gr))}_handleFocusin(r){const{trapElement:l}=this._config;if(r.target===document||r.target===l||l.contains(r.target))return;const h=A.focusableChildren(l);h.length===0?l.focus():this._lastTabNavDirection===Vl?h[h.length-1].focus():h[0].focus()}_handleKeydown(r){r.key==="Tab"&&(this._lastTabNavDirection=r.shiftKey?Vl:"forward")}}const Wl=".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",zl=".sticky-top",Jr="padding-right",Kl="margin-right";class vo{constructor(){this._element=document.body}getWidth(){const r=document.documentElement.clientWidth;return Math.abs(window.innerWidth-r)}hide(){const r=this.getWidth();this._disableOverFlow(),this._setElementAttributes(this._element,Jr,l=>l+r),this._setElementAttributes(Wl,Jr,l=>l+r),this._setElementAttributes(zl,Kl,l=>l-r)}reset(){this._resetElementAttributes(this._element,"overflow"),this._resetElementAttributes(this._element,Jr),this._resetElementAttributes(Wl,Jr),this._resetElementAttributes(zl,Kl)}isOverflowing(){return this.getWidth()>0}_disableOverFlow(){this._saveInitialAttribute(this._element,"overflow"),this._element.style.overflow="hidden"}_setElementAttributes(r,l,h){const y=this.getWidth();this._applyManipulationCallback(r,v=>{if(v!==this._element&&window.innerWidth>v.clientWidth+y)return;this._saveInitialAttribute(v,l);const S=window.getComputedStyle(v).getPropertyValue(l);v.style.setProperty(l,`${h(Number.parseFloat(S))}px`)})}_saveInitialAttribute(r,l){const h=r.style.getPropertyValue(l);h&&rt.setDataAttribute(r,l,h)}_resetElementAttributes(r,l){this._applyManipulationCallback(r,h=>{const y=rt.getDataAttribute(h,l);y!==null?(rt.removeDataAttribute(h,l),h.style.setProperty(l,y)):h.style.removeProperty(l)})}_applyManipulationCallback(r,l){if(c(r))l(r);else for(const h of A.find(r,this._element))l(h)}}const Dt=".bs.modal",wp=`hide${Dt}`,Ep=`hidePrevented${Dt}`,Gl=`hidden${Dt}`,Jl=`show${Dt}`,Cp=`shown${Dt}`,Sp=`resize${Dt}`,Tp=`click.dismiss${Dt}`,Ap=`mousedown.dismiss${Dt}`,Op=`keydown.dismiss${Dt}`,xp=`click${Dt}.data-api`,Xl="modal-open",Ql="show",wo="modal-static",Rp={backdrop:!0,focus:!0,keyboard:!0},Pp={backdrop:"(boolean|string)",focus:"boolean",keyboard:"boolean"};class Qn extends Be{constructor(r,l){super(r,l),this._dialog=A.findOne(".modal-dialog",this._element),this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._isShown=!1,this._isTransitioning=!1,this._scrollBar=new vo,this._addEventListeners()}static get Default(){return Rp}static get DefaultType(){return Pp}static get NAME(){return"modal"}toggle(r){return this._isShown?this.hide():this.show(r)}show(r){this._isShown||this._isTransitioning||I.trigger(this._element,Jl,{relatedTarget:r}).defaultPrevented||(this._isShown=!0,this._isTransitioning=!0,this._scrollBar.hide(),document.body.classList.add(Xl),this._adjustDialog(),this._backdrop.show(()=>this._showElement(r)))}hide(){this._isShown&&!this._isTransitioning&&(I.trigger(this._element,wp).defaultPrevented||(this._isShown=!1,this._isTransitioning=!0,this._focustrap.deactivate(),this._element.classList.remove(Ql),this._queueCallback(()=>this._hideModal(),this._element,this._isAnimated())))}dispose(){I.off(window,Dt),I.off(this._dialog,Dt),this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}handleUpdate(){this._adjustDialog()}_initializeBackDrop(){return new Ul({isVisible:!!this._config.backdrop,isAnimated:this._isAnimated()})}_initializeFocusTrap(){return new ql({trapElement:this._element})}_showElement(r){document.body.contains(this._element)||document.body.append(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.scrollTop=0;const l=A.findOne(".modal-body",this._dialog);l&&(l.scrollTop=0),w(this._element),this._element.classList.add(Ql),this._queueCallback(()=>{this._config.focus&&this._focustrap.activate(),this._isTransitioning=!1,I.trigger(this._element,Cp,{relatedTarget:r})},this._dialog,this._isAnimated())}_addEventListeners(){I.on(this._element,Op,r=>{r.key==="Escape"&&(this._config.keyboard?this.hide():this._triggerBackdropTransition())}),I.on(window,Sp,()=>{this._isShown&&!this._isTransitioning&&this._adjustDialog()}),I.on(this._element,Ap,r=>{I.one(this._element,Tp,l=>{this._element===r.target&&this._element===l.target&&(this._config.backdrop!=="static"?this._config.backdrop&&this.hide():this._triggerBackdropTransition())})})}_hideModal(){this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._isTransitioning=!1,this._backdrop.hide(()=>{document.body.classList.remove(Xl),this._resetAdjustments(),this._scrollBar.reset(),I.trigger(this._element,Gl)})}_isAnimated(){return this._element.classList.contains("fade")}_triggerBackdropTransition(){if(I.trigger(this._element,Ep).defaultPrevented)return;const r=this._element.scrollHeight>document.documentElement.clientHeight,l=this._element.style.overflowY;l==="hidden"||this._element.classList.contains(wo)||(r||(this._element.style.overflowY="hidden"),this._element.classList.add(wo),this._queueCallback(()=>{this._element.classList.remove(wo),this._queueCallback(()=>{this._element.style.overflowY=l},this._dialog)},this._dialog),this._element.focus())}_adjustDialog(){const r=this._element.scrollHeight>document.documentElement.clientHeight,l=this._scrollBar.getWidth(),h=l>0;if(h&&!r){const y=R()?"paddingLeft":"paddingRight";this._element.style[y]=`${l}px`}if(!h&&r){const y=R()?"paddingRight":"paddingLeft";this._element.style[y]=`${l}px`}}_resetAdjustments(){this._element.style.paddingLeft="",this._element.style.paddingRight=""}static jQueryInterface(r,l){return this.each(function(){const h=Qn.getOrCreateInstance(this,r);if(typeof r=="string"){if(h[r]===void 0)throw new TypeError(`No method named "${r}"`);h[r](l)}})}}I.on(document,xp,'[data-bs-toggle="modal"]',function(u){const r=A.getElementFromSelector(this);["A","AREA"].includes(this.tagName)&&u.preventDefault(),I.one(r,Jl,h=>{h.defaultPrevented||I.one(r,Gl,()=>{p(this)&&this.focus()})});const l=A.findOne(".modal.show");l&&Qn.getInstance(l).hide(),Qn.getOrCreateInstance(r).toggle(this)}),V(Qn),$(Qn);const pn=".bs.offcanvas",Yl=".data-api",Ip=`load${pn}${Yl}`,Zl="show",ec="showing",tc="hiding",nc=".offcanvas.show",Lp=`show${pn}`,Dp=`shown${pn}`,Np=`hide${pn}`,sc=`hidePrevented${pn}`,rc=`hidden${pn}`,kp=`resize${pn}`,Mp=`click${pn}${Yl}`,$p=`keydown.dismiss${pn}`,Fp={backdrop:!0,keyboard:!0,scroll:!1},jp={backdrop:"(boolean|string)",keyboard:"boolean",scroll:"boolean"};class mn extends Be{constructor(r,l){super(r,l),this._isShown=!1,this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._addEventListeners()}static get Default(){return Fp}static get DefaultType(){return jp}static get NAME(){return"offcanvas"}toggle(r){return this._isShown?this.hide():this.show(r)}show(r){this._isShown||I.trigger(this._element,Lp,{relatedTarget:r}).defaultPrevented||(this._isShown=!0,this._backdrop.show(),this._config.scroll||new vo().hide(),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.classList.add(ec),this._queueCallback(()=>{this._config.scroll&&!this._config.backdrop||this._focustrap.activate(),this._element.classList.add(Zl),this._element.classList.remove(ec),I.trigger(this._element,Dp,{relatedTarget:r})},this._element,!0))}hide(){this._isShown&&(I.trigger(this._element,Np).defaultPrevented||(this._focustrap.deactivate(),this._element.blur(),this._isShown=!1,this._element.classList.add(tc),this._backdrop.hide(),this._queueCallback(()=>{this._element.classList.remove(Zl,tc),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._config.scroll||new vo().reset(),I.trigger(this._element,rc)},this._element,!0)))}dispose(){this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}_initializeBackDrop(){const r=!!this._config.backdrop;return new Ul({className:"offcanvas-backdrop",isVisible:r,isAnimated:!0,rootElement:this._element.parentNode,clickCallback:r?()=>{this._config.backdrop!=="static"?this.hide():I.trigger(this._element,sc)}:null})}_initializeFocusTrap(){return new ql({trapElement:this._element})}_addEventListeners(){I.on(this._element,$p,r=>{r.key==="Escape"&&(this._config.keyboard?this.hide():I.trigger(this._element,sc))})}static jQueryInterface(r){return this.each(function(){const l=mn.getOrCreateInstance(this,r);if(typeof r=="string"){if(l[r]===void 0||r.startsWith("_")||r==="constructor")throw new TypeError(`No method named "${r}"`);l[r](this)}})}}I.on(document,Mp,'[data-bs-toggle="offcanvas"]',function(u){const r=A.getElementFromSelector(this);if(["A","AREA"].includes(this.tagName)&&u.preventDefault(),d(this))return;I.one(r,rc,()=>{p(this)&&this.focus()});const l=A.findOne(nc);l&&l!==r&&mn.getInstance(l).hide(),mn.getOrCreateInstance(r).toggle(this)}),I.on(window,Ip,()=>{for(const u of A.find(nc))mn.getOrCreateInstance(u).show()}),I.on(window,kp,()=>{for(const u of A.find("[aria-modal][class*=show][class*=offcanvas-]"))getComputedStyle(u).position!=="fixed"&&mn.getOrCreateInstance(u).hide()}),V(mn),$(mn);const ic={"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],dd:[],div:[],dl:[],dt:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","srcset","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},Bp=new Set(["background","cite","href","itemtype","longdesc","poster","src","xlink:href"]),Hp=/^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i,Up=(u,r)=>{const l=u.nodeName.toLowerCase();return r.includes(l)?!Bp.has(l)||!!Hp.test(u.nodeValue):r.filter(h=>h instanceof RegExp).some(h=>h.test(l))},Vp={allowList:ic,content:{},extraClass:"",html:!1,sanitize:!0,sanitizeFn:null,template:"
"},qp={allowList:"object",content:"object",extraClass:"(string|function)",html:"boolean",sanitize:"boolean",sanitizeFn:"(null|function)",template:"string"},Wp={entry:"(string|element|function|null)",selector:"(string|element)"};class zp extends Zt{constructor(r){super(),this._config=this._getConfig(r)}static get Default(){return Vp}static get DefaultType(){return qp}static get NAME(){return"TemplateFactory"}getContent(){return Object.values(this._config.content).map(r=>this._resolvePossibleFunction(r)).filter(Boolean)}hasContent(){return this.getContent().length>0}changeContent(r){return this._checkContent(r),this._config.content={...this._config.content,...r},this}toHtml(){const r=document.createElement("div");r.innerHTML=this._maybeSanitize(this._config.template);for(const[y,v]of Object.entries(this._config.content))this._setContent(r,v,y);const l=r.children[0],h=this._resolvePossibleFunction(this._config.extraClass);return h&&l.classList.add(...h.split(" ")),l}_typeCheckConfig(r){super._typeCheckConfig(r),this._checkContent(r.content)}_checkContent(r){for(const[l,h]of Object.entries(r))super._typeCheckConfig({selector:l,entry:h},Wp)}_setContent(r,l,h){const y=A.findOne(h,r);y&&((l=this._resolvePossibleFunction(l))?c(l)?this._putElementInTemplate(f(l),y):this._config.html?y.innerHTML=this._maybeSanitize(l):y.textContent=l:y.remove())}_maybeSanitize(r){return this._config.sanitize?function(l,h,y){if(!l.length)return l;if(y&&typeof y=="function")return y(l);const v=new window.DOMParser().parseFromString(l,"text/html"),S=[].concat(...v.body.querySelectorAll("*"));for(const L of S){const j=L.nodeName.toLowerCase();if(!Object.keys(h).includes(j)){L.remove();continue}const J=[].concat(...L.attributes),X=[].concat(h["*"]||[],h[j]||[]);for(const K of J)Up(K,X)||L.removeAttribute(K.nodeName)}return v.body.innerHTML}(r,this._config.allowList,this._config.sanitizeFn):r}_resolvePossibleFunction(r){return N(r,[this])}_putElementInTemplate(r,l){if(this._config.html)return l.innerHTML="",void l.append(r);l.textContent=r.textContent}}const Kp=new Set(["sanitize","allowList","sanitizeFn"]),Eo="fade",Xr="show",oc=".modal",ac="hide.bs.modal",Ys="hover",Co="focus",Gp={AUTO:"auto",TOP:"top",RIGHT:R()?"left":"right",BOTTOM:"bottom",LEFT:R()?"right":"left"},Jp={allowList:ic,animation:!0,boundary:"clippingParents",container:!1,customClass:"",delay:0,fallbackPlacements:["top","right","bottom","left"],html:!1,offset:[0,6],placement:"top",popperConfig:null,sanitize:!0,sanitizeFn:null,selector:!1,template:'',title:"",trigger:"hover focus"},Xp={allowList:"object",animation:"boolean",boundary:"(string|element)",container:"(string|element|boolean)",customClass:"(string|function)",delay:"(number|object)",fallbackPlacements:"array",html:"boolean",offset:"(array|string|function)",placement:"(string|function)",popperConfig:"(null|object|function)",sanitize:"boolean",sanitizeFn:"(null|function)",selector:"(string|boolean)",template:"string",title:"(string|element|function)",trigger:"string"};class Yn extends Be{constructor(r,l){if(Nl===void 0)throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)");super(r,l),this._isEnabled=!0,this._timeout=0,this._isHovered=null,this._activeTrigger={},this._popper=null,this._templateFactory=null,this._newContent=null,this.tip=null,this._setListeners(),this._config.selector||this._fixTitle()}static get Default(){return Jp}static get DefaultType(){return Xp}static get NAME(){return"tooltip"}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(){this._isEnabled&&(this._activeTrigger.click=!this._activeTrigger.click,this._isShown()?this._leave():this._enter())}dispose(){clearTimeout(this._timeout),I.off(this._element.closest(oc),ac,this._hideModalHandler),this._element.getAttribute("data-bs-original-title")&&this._element.setAttribute("title",this._element.getAttribute("data-bs-original-title")),this._disposePopper(),super.dispose()}show(){if(this._element.style.display==="none")throw new Error("Please use show on visible elements");if(!this._isWithContent()||!this._isEnabled)return;const r=I.trigger(this._element,this.constructor.eventName("show")),l=(m(this._element)||this._element.ownerDocument.documentElement).contains(this._element);if(r.defaultPrevented||!l)return;this._disposePopper();const h=this._getTipElement();this._element.setAttribute("aria-describedby",h.getAttribute("id"));const{container:y}=this._config;if(this._element.ownerDocument.documentElement.contains(this.tip)||(y.append(h),I.trigger(this._element,this.constructor.eventName("inserted"))),this._popper=this._createPopper(h),h.classList.add(Xr),"ontouchstart"in document.documentElement)for(const v of[].concat(...document.body.children))I.on(v,"mouseover",b);this._queueCallback(()=>{I.trigger(this._element,this.constructor.eventName("shown")),this._isHovered===!1&&this._leave(),this._isHovered=!1},this.tip,this._isAnimated())}hide(){if(this._isShown()&&!I.trigger(this._element,this.constructor.eventName("hide")).defaultPrevented){if(this._getTipElement().classList.remove(Xr),"ontouchstart"in document.documentElement)for(const r of[].concat(...document.body.children))I.off(r,"mouseover",b);this._activeTrigger.click=!1,this._activeTrigger[Co]=!1,this._activeTrigger[Ys]=!1,this._isHovered=null,this._queueCallback(()=>{this._isWithActiveTrigger()||(this._isHovered||this._disposePopper(),this._element.removeAttribute("aria-describedby"),I.trigger(this._element,this.constructor.eventName("hidden")))},this.tip,this._isAnimated())}}update(){this._popper&&this._popper.update()}_isWithContent(){return!!this._getTitle()}_getTipElement(){return this.tip||(this.tip=this._createTipElement(this._newContent||this._getContentForTemplate())),this.tip}_createTipElement(r){const l=this._getTemplateFactory(r).toHtml();if(!l)return null;l.classList.remove(Eo,Xr),l.classList.add(`bs-${this.constructor.NAME}-auto`);const h=(y=>{do y+=Math.floor(1e6*Math.random());while(document.getElementById(y));return y})(this.constructor.NAME).toString();return l.setAttribute("id",h),this._isAnimated()&&l.classList.add(Eo),l}setContent(r){this._newContent=r,this._isShown()&&(this._disposePopper(),this.show())}_getTemplateFactory(r){return this._templateFactory?this._templateFactory.changeContent(r):this._templateFactory=new zp({...this._config,content:r,extraClass:this._resolvePossibleFunction(this._config.customClass)}),this._templateFactory}_getContentForTemplate(){return{".tooltip-inner":this._getTitle()}}_getTitle(){return this._resolvePossibleFunction(this._config.title)||this._element.getAttribute("data-bs-original-title")}_initializeOnDelegatedTarget(r){return this.constructor.getOrCreateInstance(r.delegateTarget,this._getDelegateConfig())}_isAnimated(){return this._config.animation||this.tip&&this.tip.classList.contains(Eo)}_isShown(){return this.tip&&this.tip.classList.contains(Xr)}_createPopper(r){const l=N(this._config.placement,[this,r,this._element]),h=Gp[l.toUpperCase()];return bo(this._element,r,this._getPopperConfig(h))}_getOffset(){const{offset:r}=this._config;return typeof r=="string"?r.split(",").map(l=>Number.parseInt(l,10)):typeof r=="function"?l=>r(l,this._element):r}_resolvePossibleFunction(r){return N(r,[this._element])}_getPopperConfig(r){const l={placement:r,modifiers:[{name:"flip",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:"offset",options:{offset:this._getOffset()}},{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"arrow",options:{element:`.${this.constructor.NAME}-arrow`}},{name:"preSetPlacement",enabled:!0,phase:"beforeMain",fn:h=>{this._getTipElement().setAttribute("data-popper-placement",h.state.placement)}}]};return{...l,...N(this._config.popperConfig,[l])}}_setListeners(){const r=this._config.trigger.split(" ");for(const l of r)if(l==="click")I.on(this._element,this.constructor.eventName("click"),this._config.selector,h=>{this._initializeOnDelegatedTarget(h).toggle()});else if(l!=="manual"){const h=l===Ys?this.constructor.eventName("mouseenter"):this.constructor.eventName("focusin"),y=l===Ys?this.constructor.eventName("mouseleave"):this.constructor.eventName("focusout");I.on(this._element,h,this._config.selector,v=>{const S=this._initializeOnDelegatedTarget(v);S._activeTrigger[v.type==="focusin"?Co:Ys]=!0,S._enter()}),I.on(this._element,y,this._config.selector,v=>{const S=this._initializeOnDelegatedTarget(v);S._activeTrigger[v.type==="focusout"?Co:Ys]=S._element.contains(v.relatedTarget),S._leave()})}this._hideModalHandler=()=>{this._element&&this.hide()},I.on(this._element.closest(oc),ac,this._hideModalHandler)}_fixTitle(){const r=this._element.getAttribute("title");r&&(this._element.getAttribute("aria-label")||this._element.textContent.trim()||this._element.setAttribute("aria-label",r),this._element.setAttribute("data-bs-original-title",r),this._element.removeAttribute("title"))}_enter(){this._isShown()||this._isHovered?this._isHovered=!0:(this._isHovered=!0,this._setTimeout(()=>{this._isHovered&&this.show()},this._config.delay.show))}_leave(){this._isWithActiveTrigger()||(this._isHovered=!1,this._setTimeout(()=>{this._isHovered||this.hide()},this._config.delay.hide))}_setTimeout(r,l){clearTimeout(this._timeout),this._timeout=setTimeout(r,l)}_isWithActiveTrigger(){return Object.values(this._activeTrigger).includes(!0)}_getConfig(r){const l=rt.getDataAttributes(this._element);for(const h of Object.keys(l))Kp.has(h)&&delete l[h];return r={...l,...typeof r=="object"&&r?r:{}},r=this._mergeConfigObj(r),r=this._configAfterMerge(r),this._typeCheckConfig(r),r}_configAfterMerge(r){return r.container=r.container===!1?document.body:f(r.container),typeof r.delay=="number"&&(r.delay={show:r.delay,hide:r.delay}),typeof r.title=="number"&&(r.title=r.title.toString()),typeof r.content=="number"&&(r.content=r.content.toString()),r}_getDelegateConfig(){const r={};for(const[l,h]of Object.entries(this._config))this.constructor.Default[l]!==h&&(r[l]=h);return r.selector=!1,r.trigger="manual",r}_disposePopper(){this._popper&&(this._popper.destroy(),this._popper=null),this.tip&&(this.tip.remove(),this.tip=null)}static jQueryInterface(r){return this.each(function(){const l=Yn.getOrCreateInstance(this,r);if(typeof r=="string"){if(l[r]===void 0)throw new TypeError(`No method named "${r}"`);l[r]()}})}}$(Yn);const Qp={...Yn.Default,content:"",offset:[0,8],placement:"right",template:'',trigger:"click"},Yp={...Yn.DefaultType,content:"(null|string|element|function)"};class Qr extends Yn{static get Default(){return Qp}static get DefaultType(){return Yp}static get NAME(){return"popover"}_isWithContent(){return this._getTitle()||this._getContent()}_getContentForTemplate(){return{".popover-header":this._getTitle(),".popover-body":this._getContent()}}_getContent(){return this._resolvePossibleFunction(this._config.content)}static jQueryInterface(r){return this.each(function(){const l=Qr.getOrCreateInstance(this,r);if(typeof r=="string"){if(l[r]===void 0)throw new TypeError(`No method named "${r}"`);l[r]()}})}}$(Qr);const So=".bs.scrollspy",Zp=`activate${So}`,lc=`click${So}`,em=`load${So}.data-api`,Rs="active",To="[href]",cc=".nav-link",tm=`${cc}, .nav-item > ${cc}, .list-group-item`,nm={offset:null,rootMargin:"0px 0px -25%",smoothScroll:!1,target:null,threshold:[.1,.5,1]},sm={offset:"(number|null)",rootMargin:"string",smoothScroll:"boolean",target:"element",threshold:"array"};class Zs extends Be{constructor(r,l){super(r,l),this._targetLinks=new Map,this._observableSections=new Map,this._rootElement=getComputedStyle(this._element).overflowY==="visible"?null:this._element,this._activeTarget=null,this._observer=null,this._previousScrollData={visibleEntryTop:0,parentScrollTop:0},this.refresh()}static get Default(){return nm}static get DefaultType(){return sm}static get NAME(){return"scrollspy"}refresh(){this._initializeTargetsAndObservables(),this._maybeEnableSmoothScroll(),this._observer?this._observer.disconnect():this._observer=this._getNewObserver();for(const r of this._observableSections.values())this._observer.observe(r)}dispose(){this._observer.disconnect(),super.dispose()}_configAfterMerge(r){return r.target=f(r.target)||document.body,r.rootMargin=r.offset?`${r.offset}px 0px -30%`:r.rootMargin,typeof r.threshold=="string"&&(r.threshold=r.threshold.split(",").map(l=>Number.parseFloat(l))),r}_maybeEnableSmoothScroll(){this._config.smoothScroll&&(I.off(this._config.target,lc),I.on(this._config.target,lc,To,r=>{const l=this._observableSections.get(r.target.hash);if(l){r.preventDefault();const h=this._rootElement||window,y=l.offsetTop-this._element.offsetTop;if(h.scrollTo)return void h.scrollTo({top:y,behavior:"smooth"});h.scrollTop=y}}))}_getNewObserver(){const r={root:this._rootElement,threshold:this._config.threshold,rootMargin:this._config.rootMargin};return new IntersectionObserver(l=>this._observerCallback(l),r)}_observerCallback(r){const l=S=>this._targetLinks.get(`#${S.target.id}`),h=S=>{this._previousScrollData.visibleEntryTop=S.target.offsetTop,this._process(l(S))},y=(this._rootElement||document.documentElement).scrollTop,v=y>=this._previousScrollData.parentScrollTop;this._previousScrollData.parentScrollTop=y;for(const S of r){if(!S.isIntersecting){this._activeTarget=null,this._clearActiveClass(l(S));continue}const L=S.target.offsetTop>=this._previousScrollData.visibleEntryTop;if(v&&L){if(h(S),!y)return}else v||L||h(S)}}_initializeTargetsAndObservables(){this._targetLinks=new Map,this._observableSections=new Map;const r=A.find(To,this._config.target);for(const l of r){if(!l.hash||d(l))continue;const h=A.findOne(decodeURI(l.hash),this._element);p(h)&&(this._targetLinks.set(decodeURI(l.hash),l),this._observableSections.set(l.hash,h))}}_process(r){this._activeTarget!==r&&(this._clearActiveClass(this._config.target),this._activeTarget=r,r.classList.add(Rs),this._activateParents(r),I.trigger(this._element,Zp,{relatedTarget:r}))}_activateParents(r){if(r.classList.contains("dropdown-item"))A.findOne(".dropdown-toggle",r.closest(".dropdown")).classList.add(Rs);else for(const l of A.parents(r,".nav, .list-group"))for(const h of A.prev(l,tm))h.classList.add(Rs)}_clearActiveClass(r){r.classList.remove(Rs);const l=A.find(`${To}.${Rs}`,r);for(const h of l)h.classList.remove(Rs)}static jQueryInterface(r){return this.each(function(){const l=Zs.getOrCreateInstance(this,r);if(typeof r=="string"){if(l[r]===void 0||r.startsWith("_")||r==="constructor")throw new TypeError(`No method named "${r}"`);l[r]()}})}}I.on(window,em,()=>{for(const u of A.find('[data-bs-spy="scroll"]'))Zs.getOrCreateInstance(u)}),$(Zs);const Zn=".bs.tab",rm=`hide${Zn}`,im=`hidden${Zn}`,om=`show${Zn}`,am=`shown${Zn}`,lm=`click${Zn}`,cm=`keydown${Zn}`,um=`load${Zn}`,fm="ArrowLeft",uc="ArrowRight",dm="ArrowUp",fc="ArrowDown",Ao="Home",dc="End",es="active",hc="fade",Oo="show",pc=".dropdown-toggle",xo=`:not(${pc})`,mc='[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]',Ro=`.nav-link${xo}, .list-group-item${xo}, [role="tab"]${xo}, ${mc}`,hm=`.${es}[data-bs-toggle="tab"], .${es}[data-bs-toggle="pill"], .${es}[data-bs-toggle="list"]`;class ts extends Be{constructor(r){super(r),this._parent=this._element.closest('.list-group, .nav, [role="tablist"]'),this._parent&&(this._setInitialAttributes(this._parent,this._getChildren()),I.on(this._element,cm,l=>this._keydown(l)))}static get NAME(){return"tab"}show(){const r=this._element;if(this._elemIsActive(r))return;const l=this._getActiveElem(),h=l?I.trigger(l,rm,{relatedTarget:r}):null;I.trigger(r,om,{relatedTarget:l}).defaultPrevented||h&&h.defaultPrevented||(this._deactivate(l,r),this._activate(r,l))}_activate(r,l){r&&(r.classList.add(es),this._activate(A.getElementFromSelector(r)),this._queueCallback(()=>{r.getAttribute("role")==="tab"?(r.removeAttribute("tabindex"),r.setAttribute("aria-selected",!0),this._toggleDropDown(r,!0),I.trigger(r,am,{relatedTarget:l})):r.classList.add(Oo)},r,r.classList.contains(hc)))}_deactivate(r,l){r&&(r.classList.remove(es),r.blur(),this._deactivate(A.getElementFromSelector(r)),this._queueCallback(()=>{r.getAttribute("role")==="tab"?(r.setAttribute("aria-selected",!1),r.setAttribute("tabindex","-1"),this._toggleDropDown(r,!1),I.trigger(r,im,{relatedTarget:l})):r.classList.remove(Oo)},r,r.classList.contains(hc)))}_keydown(r){if(![fm,uc,dm,fc,Ao,dc].includes(r.key))return;r.stopPropagation(),r.preventDefault();const l=this._getChildren().filter(y=>!d(y));let h;if([Ao,dc].includes(r.key))h=l[r.key===Ao?0:l.length-1];else{const y=[uc,fc].includes(r.key);h=H(l,r.target,y,!0)}h&&(h.focus({preventScroll:!0}),ts.getOrCreateInstance(h).show())}_getChildren(){return A.find(Ro,this._parent)}_getActiveElem(){return this._getChildren().find(r=>this._elemIsActive(r))||null}_setInitialAttributes(r,l){this._setAttributeIfNotExists(r,"role","tablist");for(const h of l)this._setInitialAttributesOnChild(h)}_setInitialAttributesOnChild(r){r=this._getInnerElement(r);const l=this._elemIsActive(r),h=this._getOuterElement(r);r.setAttribute("aria-selected",l),h!==r&&this._setAttributeIfNotExists(h,"role","presentation"),l||r.setAttribute("tabindex","-1"),this._setAttributeIfNotExists(r,"role","tab"),this._setInitialAttributesOnTargetPanel(r)}_setInitialAttributesOnTargetPanel(r){const l=A.getElementFromSelector(r);l&&(this._setAttributeIfNotExists(l,"role","tabpanel"),r.id&&this._setAttributeIfNotExists(l,"aria-labelledby",`${r.id}`))}_toggleDropDown(r,l){const h=this._getOuterElement(r);if(!h.classList.contains("dropdown"))return;const y=(v,S)=>{const L=A.findOne(v,h);L&&L.classList.toggle(S,l)};y(pc,es),y(".dropdown-menu",Oo),h.setAttribute("aria-expanded",l)}_setAttributeIfNotExists(r,l,h){r.hasAttribute(l)||r.setAttribute(l,h)}_elemIsActive(r){return r.classList.contains(es)}_getInnerElement(r){return r.matches(Ro)?r:A.findOne(Ro,r)}_getOuterElement(r){return r.closest(".nav-item, .list-group-item")||r}static jQueryInterface(r){return this.each(function(){const l=ts.getOrCreateInstance(this);if(typeof r=="string"){if(l[r]===void 0||r.startsWith("_")||r==="constructor")throw new TypeError(`No method named "${r}"`);l[r]()}})}}I.on(document,lm,mc,function(u){["A","AREA"].includes(this.tagName)&&u.preventDefault(),d(this)||ts.getOrCreateInstance(this).show()}),I.on(window,um,()=>{for(const u of A.find(hm))ts.getOrCreateInstance(u)}),$(ts);const On=".bs.toast",pm=`mouseover${On}`,mm=`mouseout${On}`,gm=`focusin${On}`,_m=`focusout${On}`,bm=`hide${On}`,ym=`hidden${On}`,vm=`show${On}`,wm=`shown${On}`,gc="hide",Yr="show",Zr="showing",Em={animation:"boolean",autohide:"boolean",delay:"number"},Cm={animation:!0,autohide:!0,delay:5e3};class er extends Be{constructor(r,l){super(r,l),this._timeout=null,this._hasMouseInteraction=!1,this._hasKeyboardInteraction=!1,this._setListeners()}static get Default(){return Cm}static get DefaultType(){return Em}static get NAME(){return"toast"}show(){I.trigger(this._element,vm).defaultPrevented||(this._clearTimeout(),this._config.animation&&this._element.classList.add("fade"),this._element.classList.remove(gc),w(this._element),this._element.classList.add(Yr,Zr),this._queueCallback(()=>{this._element.classList.remove(Zr),I.trigger(this._element,wm),this._maybeScheduleHide()},this._element,this._config.animation))}hide(){this.isShown()&&(I.trigger(this._element,bm).defaultPrevented||(this._element.classList.add(Zr),this._queueCallback(()=>{this._element.classList.add(gc),this._element.classList.remove(Zr,Yr),I.trigger(this._element,ym)},this._element,this._config.animation)))}dispose(){this._clearTimeout(),this.isShown()&&this._element.classList.remove(Yr),super.dispose()}isShown(){return this._element.classList.contains(Yr)}_maybeScheduleHide(){this._config.autohide&&(this._hasMouseInteraction||this._hasKeyboardInteraction||(this._timeout=setTimeout(()=>{this.hide()},this._config.delay)))}_onInteraction(r,l){switch(r.type){case"mouseover":case"mouseout":this._hasMouseInteraction=l;break;case"focusin":case"focusout":this._hasKeyboardInteraction=l}if(l)return void this._clearTimeout();const h=r.relatedTarget;this._element===h||this._element.contains(h)||this._maybeScheduleHide()}_setListeners(){I.on(this._element,pm,r=>this._onInteraction(r,!0)),I.on(this._element,mm,r=>this._onInteraction(r,!1)),I.on(this._element,gm,r=>this._onInteraction(r,!0)),I.on(this._element,_m,r=>this._onInteraction(r,!1))}_clearTimeout(){clearTimeout(this._timeout),this._timeout=null}static jQueryInterface(r){return this.each(function(){const l=er.getOrCreateInstance(this,r);if(typeof r=="string"){if(l[r]===void 0)throw new TypeError(`No method named "${r}"`);l[r](this)}})}}return V(er),$(er),{Alert:g,Button:E,Carousel:bs,Collapse:vs,Dropdown:Ht,Modal:Qn,Offcanvas:mn,Popover:Qr,ScrollSpy:Zs,Tab:ts,Toast:er,Tooltip:Yn}})})(t0);/*! +* Tabler v1.0.0-beta19 (https://tabler.io) +* @version 1.0.0-beta19 +* @link https://tabler.io +* Copyright 2018-2023 The Tabler Authors +* Copyright 2018-2023 codecalm.net Paweł Kuna +* Licensed under MIT (https://github.com/tabler/tabler/blob/master/LICENSE) +*/(function(e){typeof define=="function"&&define.amd?define(e):e()})(function(){var e,t="tablerTheme",n=new Proxy(new URLSearchParams(window.location.search),{get:function(i,o){return i.get(o)}});if(n.theme)localStorage.setItem(t,n.theme),e=n.theme;else{var s=localStorage.getItem(t);e=s||"light"}e==="dark"?document.body.setAttribute("data-bs-theme",e):document.body.removeAttribute("data-bs-theme")});const Mr=Td(Sy);Ke.defaults.baseURL=sw();Mr.config.globalProperties.axios=Ke;Mr.use(pb());Mr.use(dh);Mr.use(Zw,{});Mr.mount("#app");export{o0 as A,Pr as B,Or as C,f0 as D,u0 as E,tt as F,Ir as G,Ua as H,dh as I,c0 as J,sw as K,Ke as L,gd as M,e0 as N,h0 as O,Hd as R,_s as a,nt as b,qt as c,dn as d,Bi as e,d0 as f,Ft as g,fr as h,Bf as i,n0 as j,jc as k,i0 as l,Bo as m,Hn as n,Ue as o,s0 as p,nw as q,ja as r,jt as s,xa as t,jn as u,l0 as v,lb as w,Uf as x,r0 as y,a0 as z}; diff --git a/src/main/resources/static/assets/lodash-BpiFzpk2.js b/src/main/resources/static/assets/lodash-BpiFzpk2.js new file mode 100644 index 00000000..5427d106 --- /dev/null +++ b/src/main/resources/static/assets/lodash-BpiFzpk2.js @@ -0,0 +1,27 @@ +import{N as jt,O as rp}from"./index-DU977P1k.js";var Je={exports:{}};/** + * @license + * Lodash + * Copyright OpenJS Foundation and other contributors + * Released under MIT license + * Based on Underscore.js 1.8.3 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + */Je.exports;(function(Qe,Ve){(function(){var o,rl="4.17.21",ke=200,il="Unsupported core-js use. Try https://npms.io/search?q=ponyfill.",sn="Expected a function",ul="Invalid `variable` option passed into `_.template`",je="__lodash_hash_undefined__",fl=500,ne="__lodash_placeholder__",qn=1,Ii=2,at=4,ct=1,te=2,an=1,jn=2,Si=4,Tn=8,ht=16,Ln=32,gt=64,Wn=128,Ot=256,nr=512,ll=30,ol="...",sl=800,al=16,Ei=1,cl=2,hl=3,nt=1/0,Kn=9007199254740991,gl=17976931348623157e292,ee=NaN,yn=4294967295,_l=yn-1,pl=yn>>>1,vl=[["ary",Wn],["bind",an],["bindKey",jn],["curry",Tn],["curryRight",ht],["flip",nr],["partial",Ln],["partialRight",gt],["rearg",Ot]],_t="[object Arguments]",re="[object Array]",dl="[object AsyncFunction]",Wt="[object Boolean]",Pt="[object Date]",wl="[object DOMException]",ie="[object Error]",ue="[object Function]",Ti="[object GeneratorFunction]",xn="[object Map]",Bt="[object Number]",xl="[object Null]",Pn="[object Object]",Li="[object Promise]",Al="[object Proxy]",bt="[object RegExp]",An="[object Set]",Ft="[object String]",fe="[object Symbol]",Rl="[object Undefined]",Mt="[object WeakMap]",Il="[object WeakSet]",Ut="[object ArrayBuffer]",pt="[object DataView]",tr="[object Float32Array]",er="[object Float64Array]",rr="[object Int8Array]",ir="[object Int16Array]",ur="[object Int32Array]",fr="[object Uint8Array]",lr="[object Uint8ClampedArray]",or="[object Uint16Array]",sr="[object Uint32Array]",Sl=/\b__p \+= '';/g,El=/\b(__p \+=) '' \+/g,Tl=/(__e\(.*?\)|\b__t\)) \+\n'';/g,yi=/&(?:amp|lt|gt|quot|#39);/g,Ci=/[&<>"']/g,Ll=RegExp(yi.source),yl=RegExp(Ci.source),Cl=/<%-([\s\S]+?)%>/g,ml=/<%([\s\S]+?)%>/g,mi=/<%=([\s\S]+?)%>/g,Ol=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Wl=/^\w*$/,Pl=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,ar=/[\\^$.*+?()[\]{}|]/g,Bl=RegExp(ar.source),cr=/^\s+/,bl=/\s/,Fl=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,Ml=/\{\n\/\* \[wrapped with (.+)\] \*/,Ul=/,? & /,Dl=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,Nl=/[()=,{}\[\]\/\s]/,Gl=/\\(\\)?/g,Hl=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,Oi=/\w*$/,ql=/^[-+]0x[0-9a-f]+$/i,Kl=/^0b[01]+$/i,$l=/^\[object .+?Constructor\]$/,zl=/^0o[0-7]+$/i,Zl=/^(?:0|[1-9]\d*)$/,Yl=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,le=/($^)/,Xl=/['\n\r\u2028\u2029\\]/g,oe="\\ud800-\\udfff",Jl="\\u0300-\\u036f",Ql="\\ufe20-\\ufe2f",Vl="\\u20d0-\\u20ff",Wi=Jl+Ql+Vl,Pi="\\u2700-\\u27bf",Bi="a-z\\xdf-\\xf6\\xf8-\\xff",kl="\\xac\\xb1\\xd7\\xf7",jl="\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf",no="\\u2000-\\u206f",to=" \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",bi="A-Z\\xc0-\\xd6\\xd8-\\xde",Fi="\\ufe0e\\ufe0f",Mi=kl+jl+no+to,hr="['’]",eo="["+oe+"]",Ui="["+Mi+"]",se="["+Wi+"]",Di="\\d+",ro="["+Pi+"]",Ni="["+Bi+"]",Gi="[^"+oe+Mi+Di+Pi+Bi+bi+"]",gr="\\ud83c[\\udffb-\\udfff]",io="(?:"+se+"|"+gr+")",Hi="[^"+oe+"]",_r="(?:\\ud83c[\\udde6-\\uddff]){2}",pr="[\\ud800-\\udbff][\\udc00-\\udfff]",vt="["+bi+"]",qi="\\u200d",Ki="(?:"+Ni+"|"+Gi+")",uo="(?:"+vt+"|"+Gi+")",$i="(?:"+hr+"(?:d|ll|m|re|s|t|ve))?",zi="(?:"+hr+"(?:D|LL|M|RE|S|T|VE))?",Zi=io+"?",Yi="["+Fi+"]?",fo="(?:"+qi+"(?:"+[Hi,_r,pr].join("|")+")"+Yi+Zi+")*",lo="\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",oo="\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])",Xi=Yi+Zi+fo,so="(?:"+[ro,_r,pr].join("|")+")"+Xi,ao="(?:"+[Hi+se+"?",se,_r,pr,eo].join("|")+")",co=RegExp(hr,"g"),ho=RegExp(se,"g"),vr=RegExp(gr+"(?="+gr+")|"+ao+Xi,"g"),go=RegExp([vt+"?"+Ni+"+"+$i+"(?="+[Ui,vt,"$"].join("|")+")",uo+"+"+zi+"(?="+[Ui,vt+Ki,"$"].join("|")+")",vt+"?"+Ki+"+"+$i,vt+"+"+zi,oo,lo,Di,so].join("|"),"g"),_o=RegExp("["+qi+oe+Wi+Fi+"]"),po=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,vo=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],wo=-1,M={};M[tr]=M[er]=M[rr]=M[ir]=M[ur]=M[fr]=M[lr]=M[or]=M[sr]=!0,M[_t]=M[re]=M[Ut]=M[Wt]=M[pt]=M[Pt]=M[ie]=M[ue]=M[xn]=M[Bt]=M[Pn]=M[bt]=M[An]=M[Ft]=M[Mt]=!1;var F={};F[_t]=F[re]=F[Ut]=F[pt]=F[Wt]=F[Pt]=F[tr]=F[er]=F[rr]=F[ir]=F[ur]=F[xn]=F[Bt]=F[Pn]=F[bt]=F[An]=F[Ft]=F[fe]=F[fr]=F[lr]=F[or]=F[sr]=!0,F[ie]=F[ue]=F[Mt]=!1;var xo={À:"A",Á:"A",Â:"A",Ã:"A",Ä:"A",Å:"A",à:"a",á:"a",â:"a",ã:"a",ä:"a",å:"a",Ç:"C",ç:"c",Ð:"D",ð:"d",È:"E",É:"E",Ê:"E",Ë:"E",è:"e",é:"e",ê:"e",ë:"e",Ì:"I",Í:"I",Î:"I",Ï:"I",ì:"i",í:"i",î:"i",ï:"i",Ñ:"N",ñ:"n",Ò:"O",Ó:"O",Ô:"O",Õ:"O",Ö:"O",Ø:"O",ò:"o",ó:"o",ô:"o",õ:"o",ö:"o",ø:"o",Ù:"U",Ú:"U",Û:"U",Ü:"U",ù:"u",ú:"u",û:"u",ü:"u",Ý:"Y",ý:"y",ÿ:"y",Æ:"Ae",æ:"ae",Þ:"Th",þ:"th",ß:"ss",Ā:"A",Ă:"A",Ą:"A",ā:"a",ă:"a",ą:"a",Ć:"C",Ĉ:"C",Ċ:"C",Č:"C",ć:"c",ĉ:"c",ċ:"c",č:"c",Ď:"D",Đ:"D",ď:"d",đ:"d",Ē:"E",Ĕ:"E",Ė:"E",Ę:"E",Ě:"E",ē:"e",ĕ:"e",ė:"e",ę:"e",ě:"e",Ĝ:"G",Ğ:"G",Ġ:"G",Ģ:"G",ĝ:"g",ğ:"g",ġ:"g",ģ:"g",Ĥ:"H",Ħ:"H",ĥ:"h",ħ:"h",Ĩ:"I",Ī:"I",Ĭ:"I",Į:"I",İ:"I",ĩ:"i",ī:"i",ĭ:"i",į:"i",ı:"i",Ĵ:"J",ĵ:"j",Ķ:"K",ķ:"k",ĸ:"k",Ĺ:"L",Ļ:"L",Ľ:"L",Ŀ:"L",Ł:"L",ĺ:"l",ļ:"l",ľ:"l",ŀ:"l",ł:"l",Ń:"N",Ņ:"N",Ň:"N",Ŋ:"N",ń:"n",ņ:"n",ň:"n",ŋ:"n",Ō:"O",Ŏ:"O",Ő:"O",ō:"o",ŏ:"o",ő:"o",Ŕ:"R",Ŗ:"R",Ř:"R",ŕ:"r",ŗ:"r",ř:"r",Ś:"S",Ŝ:"S",Ş:"S",Š:"S",ś:"s",ŝ:"s",ş:"s",š:"s",Ţ:"T",Ť:"T",Ŧ:"T",ţ:"t",ť:"t",ŧ:"t",Ũ:"U",Ū:"U",Ŭ:"U",Ů:"U",Ű:"U",Ų:"U",ũ:"u",ū:"u",ŭ:"u",ů:"u",ű:"u",ų:"u",Ŵ:"W",ŵ:"w",Ŷ:"Y",ŷ:"y",Ÿ:"Y",Ź:"Z",Ż:"Z",Ž:"Z",ź:"z",ż:"z",ž:"z",IJ:"IJ",ij:"ij",Œ:"Oe",œ:"oe",ʼn:"'n",ſ:"s"},Ao={"&":"&","<":"<",">":">",'"':""","'":"'"},Ro={"&":"&","<":"<",">":">",""":'"',"'":"'"},Io={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},So=parseFloat,Eo=parseInt,Ji=typeof jt=="object"&&jt&&jt.Object===Object&&jt,To=typeof self=="object"&&self&&self.Object===Object&&self,z=Ji||To||Function("return this")(),dr=Ve&&!Ve.nodeType&&Ve,tt=dr&&!0&&Qe&&!Qe.nodeType&&Qe,Qi=tt&&tt.exports===dr,wr=Qi&&Ji.process,cn=function(){try{var a=tt&&tt.require&&tt.require("util").types;return a||wr&&wr.binding&&wr.binding("util")}catch{}}(),Vi=cn&&cn.isArrayBuffer,ki=cn&&cn.isDate,ji=cn&&cn.isMap,nu=cn&&cn.isRegExp,tu=cn&&cn.isSet,eu=cn&&cn.isTypedArray;function en(a,g,h){switch(h.length){case 0:return a.call(g);case 1:return a.call(g,h[0]);case 2:return a.call(g,h[0],h[1]);case 3:return a.call(g,h[0],h[1],h[2])}return a.apply(g,h)}function Lo(a,g,h,w){for(var S=-1,W=a==null?0:a.length;++S-1}function xr(a,g,h){for(var w=-1,S=a==null?0:a.length;++w-1;);return h}function au(a,g){for(var h=a.length;h--&&dt(g,a[h],0)>-1;);return h}function Fo(a,g){for(var h=a.length,w=0;h--;)a[h]===g&&++w;return w}var Mo=Sr(xo),Uo=Sr(Ao);function Do(a){return"\\"+Io[a]}function No(a,g){return a==null?o:a[g]}function wt(a){return _o.test(a)}function Go(a){return po.test(a)}function Ho(a){for(var g,h=[];!(g=a.next()).done;)h.push(g.value);return h}function yr(a){var g=-1,h=Array(a.size);return a.forEach(function(w,S){h[++g]=[S,w]}),h}function cu(a,g){return function(h){return a(g(h))}}function Zn(a,g){for(var h=-1,w=a.length,S=0,W=[];++h-1}function Cs(n,t){var e=this.__data__,r=ye(e,n);return r<0?(++this.size,e.push([n,t])):e[r][1]=t,this}Bn.prototype.clear=Es,Bn.prototype.delete=Ts,Bn.prototype.get=Ls,Bn.prototype.has=ys,Bn.prototype.set=Cs;function bn(n){var t=-1,e=n==null?0:n.length;for(this.clear();++t=t?n:t)),n}function pn(n,t,e,r,i,f){var l,s=t&qn,c=t&Ii,_=t&at;if(e&&(l=i?e(n,r,i,f):e(n)),l!==o)return l;if(!D(n))return n;var p=E(n);if(p){if(l=Pa(n),!s)return k(n,l)}else{var v=X(n),d=v==ue||v==Ti;if(kn(n))return Yu(n,s);if(v==Pn||v==_t||d&&!i){if(l=c||d?{}:gf(n),!s)return c?Ra(n,$s(l,n)):Aa(n,Su(l,n))}else{if(!F[v])return i?n:{};l=Ba(n,v,s)}}f||(f=new In);var x=f.get(n);if(x)return x;f.set(n,l),qf(n)?n.forEach(function(I){l.add(pn(I,t,e,I,n,f))}):Gf(n)&&n.forEach(function(I,C){l.set(C,pn(I,t,e,C,n,f))});var R=_?c?jr:kr:c?nn:$,L=p?o:R(n);return hn(L||n,function(I,C){L&&(C=I,I=n[C]),$t(l,C,pn(I,t,e,C,n,f))}),l}function zs(n){var t=$(n);return function(e){return Eu(e,n,t)}}function Eu(n,t,e){var r=e.length;if(n==null)return!r;for(n=b(n);r--;){var i=e[r],f=t[i],l=n[i];if(l===o&&!(i in n)||!f(l))return!1}return!0}function Tu(n,t,e){if(typeof n!="function")throw new gn(sn);return Vt(function(){n.apply(o,e)},t)}function zt(n,t,e,r){var i=-1,f=ae,l=!0,s=n.length,c=[],_=t.length;if(!s)return c;e&&(t=U(t,rn(e))),r?(f=xr,l=!1):t.length>=ke&&(f=Dt,l=!1,t=new it(t));n:for(;++ii?0:i+e),r=r===o||r>i?i:T(r),r<0&&(r+=i),r=e>r?0:$f(r);e0&&e(s)?t>1?Z(s,t-1,e,r,i):zn(i,s):r||(i[i.length]=s)}return i}var br=ju(),Cu=ju(!0);function Cn(n,t){return n&&br(n,t,$)}function Fr(n,t){return n&&Cu(n,t,$)}function me(n,t){return $n(t,function(e){return Nn(n[e])})}function ft(n,t){t=Qn(t,n);for(var e=0,r=t.length;n!=null&&et}function Xs(n,t){return n!=null&&B.call(n,t)}function Js(n,t){return n!=null&&t in b(n)}function Qs(n,t,e){return n>=Y(t,e)&&n=120&&p.length>=120)?new it(l&&p):o}p=n[0];var v=-1,d=s[0];n:for(;++v-1;)s!==n&&Ae.call(s,c,1),Ae.call(n,c,1);return n}function Nu(n,t){for(var e=n?t.length:0,r=e-1;e--;){var i=t[e];if(e==r||i!==f){var f=i;Dn(i)?Ae.call(n,i,1):zr(n,i)}}return n}function qr(n,t){return n+Se(xu()*(t-n+1))}function sa(n,t,e,r){for(var i=-1,f=K(Ie((t-n)/(e||1)),0),l=h(f);f--;)l[r?f:++i]=n,n+=e;return l}function Kr(n,t){var e="";if(!n||t<1||t>Kn)return e;do t%2&&(e+=n),t=Se(t/2),t&&(n+=n);while(t);return e}function y(n,t){return fi(vf(n,t,tn),n+"")}function aa(n){return Iu(mt(n))}function ca(n,t){var e=mt(n);return Ge(e,ut(t,0,e.length))}function Xt(n,t,e,r){if(!D(n))return n;t=Qn(t,n);for(var i=-1,f=t.length,l=f-1,s=n;s!=null&&++ii?0:i+t),e=e>i?i:e,e<0&&(e+=i),i=t>e?0:e-t>>>0,t>>>=0;for(var f=h(i);++r>>1,l=n[f];l!==null&&!fn(l)&&(e?l<=t:l=ke){var _=t?null:Ta(n);if(_)return he(_);l=!1,i=Dt,c=new it}else c=t?[]:s;n:for(;++r=r?n:vn(n,t,e)}var Zu=es||function(n){return z.clearTimeout(n)};function Yu(n,t){if(t)return n.slice();var e=n.length,r=_u?_u(e):new n.constructor(e);return n.copy(r),r}function Jr(n){var t=new n.constructor(n.byteLength);return new we(t).set(new we(n)),t}function va(n,t){var e=t?Jr(n.buffer):n.buffer;return new n.constructor(e,n.byteOffset,n.byteLength)}function da(n){var t=new n.constructor(n.source,Oi.exec(n));return t.lastIndex=n.lastIndex,t}function wa(n){return Kt?b(Kt.call(n)):{}}function Xu(n,t){var e=t?Jr(n.buffer):n.buffer;return new n.constructor(e,n.byteOffset,n.length)}function Ju(n,t){if(n!==t){var e=n!==o,r=n===null,i=n===n,f=fn(n),l=t!==o,s=t===null,c=t===t,_=fn(t);if(!s&&!_&&!f&&n>t||f&&l&&c&&!s&&!_||r&&l&&c||!e&&c||!i)return 1;if(!r&&!f&&!_&&n=s)return c;var _=e[r];return c*(_=="desc"?-1:1)}}return n.index-t.index}function Qu(n,t,e,r){for(var i=-1,f=n.length,l=e.length,s=-1,c=t.length,_=K(f-l,0),p=h(c+_),v=!r;++s1?e[i-1]:o,l=i>2?e[2]:o;for(f=n.length>3&&typeof f=="function"?(i--,f):o,l&&Q(e[0],e[1],l)&&(f=i<3?o:f,i=1),t=b(t);++r-1?i[f?t[l]:l]:o}}function ef(n){return Un(function(t){var e=t.length,r=e,i=_n.prototype.thru;for(n&&t.reverse();r--;){var f=t[r];if(typeof f!="function")throw new gn(sn);if(i&&!l&&De(f)=="wrapper")var l=new _n([],!0)}for(r=l?r:e;++r1&&O.reverse(),p&&cs))return!1;var _=f.get(n),p=f.get(t);if(_&&p)return _==t&&p==n;var v=-1,d=!0,x=e&te?new it:o;for(f.set(n,t),f.set(t,n);++v1?"& ":"")+t[r],t=t.join(e>2?", ":" "),n.replace(Fl,`{ +/* [wrapped with `+t+`] */ +`)}function Fa(n){return E(n)||st(n)||!!(du&&n&&n[du])}function Dn(n,t){var e=typeof n;return t=t??Kn,!!t&&(e=="number"||e!="symbol"&&Zl.test(n))&&n>-1&&n%1==0&&n0){if(++t>=sl)return arguments[0]}else t=0;return n.apply(o,arguments)}}function Ge(n,t){var e=-1,r=n.length,i=r-1;for(t=t===o?r:t;++e1?n[t-1]:o;return e=typeof e=="function"?(n.pop(),e):o,Cf(n,e)});function mf(n){var t=u(n);return t.__chain__=!0,t}function Zc(n,t){return t(n),n}function He(n,t){return t(n)}var Yc=Un(function(n){var t=n.length,e=t?n[0]:0,r=this.__wrapped__,i=function(f){return Br(f,n)};return t>1||this.__actions__.length||!(r instanceof m)||!Dn(e)?this.thru(i):(r=r.slice(e,+e+(t?1:0)),r.__actions__.push({func:He,args:[i],thisArg:o}),new _n(r,this.__chain__).thru(function(f){return t&&!f.length&&f.push(o),f}))});function Xc(){return mf(this)}function Jc(){return new _n(this.value(),this.__chain__)}function Qc(){this.__values__===o&&(this.__values__=Kf(this.value()));var n=this.__index__>=this.__values__.length,t=n?o:this.__values__[this.__index__++];return{done:n,value:t}}function Vc(){return this}function kc(n){for(var t,e=this;e instanceof Le;){var r=If(e);r.__index__=0,r.__values__=o,t?i.__wrapped__=r:t=r;var i=r;e=e.__wrapped__}return i.__wrapped__=n,t}function jc(){var n=this.__wrapped__;if(n instanceof m){var t=n;return this.__actions__.length&&(t=new m(this)),t=t.reverse(),t.__actions__.push({func:He,args:[li],thisArg:o}),new _n(t,this.__chain__)}return this.thru(li)}function nh(){return $u(this.__wrapped__,this.__actions__)}var th=Be(function(n,t,e){B.call(n,e)?++n[e]:Fn(n,e,1)});function eh(n,t,e){var r=E(n)?ru:Zs;return e&&Q(n,t,e)&&(t=o),r(n,A(t,3))}function rh(n,t){var e=E(n)?$n:yu;return e(n,A(t,3))}var ih=tf(Sf),uh=tf(Ef);function fh(n,t){return Z(qe(n,t),1)}function lh(n,t){return Z(qe(n,t),nt)}function oh(n,t,e){return e=e===o?1:T(e),Z(qe(n,t),e)}function Of(n,t){var e=E(n)?hn:Xn;return e(n,A(t,3))}function Wf(n,t){var e=E(n)?yo:Lu;return e(n,A(t,3))}var sh=Be(function(n,t,e){B.call(n,e)?n[e].push(t):Fn(n,e,[t])});function ah(n,t,e,r){n=j(n)?n:mt(n),e=e&&!r?T(e):0;var i=n.length;return e<0&&(e=K(i+e,0)),Ye(n)?e<=i&&n.indexOf(t,e)>-1:!!i&&dt(n,t,e)>-1}var ch=y(function(n,t,e){var r=-1,i=typeof t=="function",f=j(n)?h(n.length):[];return Xn(n,function(l){f[++r]=i?en(t,l,e):Zt(l,t,e)}),f}),hh=Be(function(n,t,e){Fn(n,e,t)});function qe(n,t){var e=E(n)?U:Bu;return e(n,A(t,3))}function gh(n,t,e,r){return n==null?[]:(E(t)||(t=t==null?[]:[t]),e=r?o:e,E(e)||(e=e==null?[]:[e]),Uu(n,t,e))}var _h=Be(function(n,t,e){n[e?0:1].push(t)},function(){return[[],[]]});function ph(n,t,e){var r=E(n)?Ar:lu,i=arguments.length<3;return r(n,A(t,4),e,i,Xn)}function vh(n,t,e){var r=E(n)?Co:lu,i=arguments.length<3;return r(n,A(t,4),e,i,Lu)}function dh(n,t){var e=E(n)?$n:yu;return e(n,ze(A(t,3)))}function wh(n){var t=E(n)?Iu:aa;return t(n)}function xh(n,t,e){(e?Q(n,t,e):t===o)?t=1:t=T(t);var r=E(n)?Hs:ca;return r(n,t)}function Ah(n){var t=E(n)?qs:ga;return t(n)}function Rh(n){if(n==null)return 0;if(j(n))return Ye(n)?xt(n):n.length;var t=X(n);return t==xn||t==An?n.size:Nr(n).length}function Ih(n,t,e){var r=E(n)?Rr:_a;return e&&Q(n,t,e)&&(t=o),r(n,A(t,3))}var Sh=y(function(n,t){if(n==null)return[];var e=t.length;return e>1&&Q(n,t[0],t[1])?t=[]:e>2&&Q(t[0],t[1],t[2])&&(t=[t[0]]),Uu(n,Z(t,1),[])}),Ke=rs||function(){return z.Date.now()};function Eh(n,t){if(typeof t!="function")throw new gn(sn);return n=T(n),function(){if(--n<1)return t.apply(this,arguments)}}function Pf(n,t,e){return t=e?o:t,t=n&&t==null?n.length:t,Mn(n,Wn,o,o,o,o,t)}function Bf(n,t){var e;if(typeof t!="function")throw new gn(sn);return n=T(n),function(){return--n>0&&(e=t.apply(this,arguments)),n<=1&&(t=o),e}}var si=y(function(n,t,e){var r=an;if(e.length){var i=Zn(e,yt(si));r|=Ln}return Mn(n,r,t,e,i)}),bf=y(function(n,t,e){var r=an|jn;if(e.length){var i=Zn(e,yt(bf));r|=Ln}return Mn(t,r,n,e,i)});function Ff(n,t,e){t=e?o:t;var r=Mn(n,Tn,o,o,o,o,o,t);return r.placeholder=Ff.placeholder,r}function Mf(n,t,e){t=e?o:t;var r=Mn(n,ht,o,o,o,o,o,t);return r.placeholder=Mf.placeholder,r}function Uf(n,t,e){var r,i,f,l,s,c,_=0,p=!1,v=!1,d=!0;if(typeof n!="function")throw new gn(sn);t=wn(t)||0,D(e)&&(p=!!e.leading,v="maxWait"in e,f=v?K(wn(e.maxWait)||0,t):f,d="trailing"in e?!!e.trailing:d);function x(H){var En=r,Hn=i;return r=i=o,_=H,l=n.apply(Hn,En),l}function R(H){return _=H,s=Vt(C,t),p?x(H):l}function L(H){var En=H-c,Hn=H-_,el=t-En;return v?Y(el,f-Hn):el}function I(H){var En=H-c,Hn=H-_;return c===o||En>=t||En<0||v&&Hn>=f}function C(){var H=Ke();if(I(H))return O(H);s=Vt(C,L(H))}function O(H){return s=o,d&&r?x(H):(r=i=o,l)}function ln(){s!==o&&Zu(s),_=0,r=c=i=s=o}function V(){return s===o?l:O(Ke())}function on(){var H=Ke(),En=I(H);if(r=arguments,i=this,c=H,En){if(s===o)return R(c);if(v)return Zu(s),s=Vt(C,t),x(c)}return s===o&&(s=Vt(C,t)),l}return on.cancel=ln,on.flush=V,on}var Th=y(function(n,t){return Tu(n,1,t)}),Lh=y(function(n,t,e){return Tu(n,wn(t)||0,e)});function yh(n){return Mn(n,nr)}function $e(n,t){if(typeof n!="function"||t!=null&&typeof t!="function")throw new gn(sn);var e=function(){var r=arguments,i=t?t.apply(this,r):r[0],f=e.cache;if(f.has(i))return f.get(i);var l=n.apply(this,r);return e.cache=f.set(i,l)||f,l};return e.cache=new($e.Cache||bn),e}$e.Cache=bn;function ze(n){if(typeof n!="function")throw new gn(sn);return function(){var t=arguments;switch(t.length){case 0:return!n.call(this);case 1:return!n.call(this,t[0]);case 2:return!n.call(this,t[0],t[1]);case 3:return!n.call(this,t[0],t[1],t[2])}return!n.apply(this,t)}}function Ch(n){return Bf(2,n)}var mh=pa(function(n,t){t=t.length==1&&E(t[0])?U(t[0],rn(A())):U(Z(t,1),rn(A()));var e=t.length;return y(function(r){for(var i=-1,f=Y(r.length,e);++i=t}),st=Ou(function(){return arguments}())?Ou:function(n){return N(n)&&B.call(n,"callee")&&!vu.call(n,"callee")},E=h.isArray,$h=Vi?rn(Vi):ks;function j(n){return n!=null&&Ze(n.length)&&!Nn(n)}function G(n){return N(n)&&j(n)}function zh(n){return n===!0||n===!1||N(n)&&J(n)==Wt}var kn=us||Ri,Zh=ki?rn(ki):js;function Yh(n){return N(n)&&n.nodeType===1&&!kt(n)}function Xh(n){if(n==null)return!0;if(j(n)&&(E(n)||typeof n=="string"||typeof n.splice=="function"||kn(n)||Ct(n)||st(n)))return!n.length;var t=X(n);if(t==xn||t==An)return!n.size;if(Qt(n))return!Nr(n).length;for(var e in n)if(B.call(n,e))return!1;return!0}function Jh(n,t){return Yt(n,t)}function Qh(n,t,e){e=typeof e=="function"?e:o;var r=e?e(n,t):o;return r===o?Yt(n,t,o,e):!!r}function ci(n){if(!N(n))return!1;var t=J(n);return t==ie||t==wl||typeof n.message=="string"&&typeof n.name=="string"&&!kt(n)}function Vh(n){return typeof n=="number"&&wu(n)}function Nn(n){if(!D(n))return!1;var t=J(n);return t==ue||t==Ti||t==dl||t==Al}function Nf(n){return typeof n=="number"&&n==T(n)}function Ze(n){return typeof n=="number"&&n>-1&&n%1==0&&n<=Kn}function D(n){var t=typeof n;return n!=null&&(t=="object"||t=="function")}function N(n){return n!=null&&typeof n=="object"}var Gf=ji?rn(ji):ta;function kh(n,t){return n===t||Dr(n,t,ti(t))}function jh(n,t,e){return e=typeof e=="function"?e:o,Dr(n,t,ti(t),e)}function ng(n){return Hf(n)&&n!=+n}function tg(n){if(Da(n))throw new S(il);return Wu(n)}function eg(n){return n===null}function rg(n){return n==null}function Hf(n){return typeof n=="number"||N(n)&&J(n)==Bt}function kt(n){if(!N(n)||J(n)!=Pn)return!1;var t=xe(n);if(t===null)return!0;var e=B.call(t,"constructor")&&t.constructor;return typeof e=="function"&&e instanceof e&&pe.call(e)==jo}var hi=nu?rn(nu):ea;function ig(n){return Nf(n)&&n>=-Kn&&n<=Kn}var qf=tu?rn(tu):ra;function Ye(n){return typeof n=="string"||!E(n)&&N(n)&&J(n)==Ft}function fn(n){return typeof n=="symbol"||N(n)&&J(n)==fe}var Ct=eu?rn(eu):ia;function ug(n){return n===o}function fg(n){return N(n)&&X(n)==Mt}function lg(n){return N(n)&&J(n)==Il}var og=Ue(Gr),sg=Ue(function(n,t){return n<=t});function Kf(n){if(!n)return[];if(j(n))return Ye(n)?Rn(n):k(n);if(Nt&&n[Nt])return Ho(n[Nt]());var t=X(n),e=t==xn?yr:t==An?he:mt;return e(n)}function Gn(n){if(!n)return n===0?n:0;if(n=wn(n),n===nt||n===-nt){var t=n<0?-1:1;return t*gl}return n===n?n:0}function T(n){var t=Gn(n),e=t%1;return t===t?e?t-e:t:0}function $f(n){return n?ut(T(n),0,yn):0}function wn(n){if(typeof n=="number")return n;if(fn(n))return ee;if(D(n)){var t=typeof n.valueOf=="function"?n.valueOf():n;n=D(t)?t+"":t}if(typeof n!="string")return n===0?n:+n;n=ou(n);var e=Kl.test(n);return e||zl.test(n)?Eo(n.slice(2),e?2:8):ql.test(n)?ee:+n}function zf(n){return mn(n,nn(n))}function ag(n){return n?ut(T(n),-Kn,Kn):n===0?n:0}function P(n){return n==null?"":un(n)}var cg=Tt(function(n,t){if(Qt(t)||j(t)){mn(t,$(t),n);return}for(var e in t)B.call(t,e)&&$t(n,e,t[e])}),Zf=Tt(function(n,t){mn(t,nn(t),n)}),Xe=Tt(function(n,t,e,r){mn(t,nn(t),n,r)}),hg=Tt(function(n,t,e,r){mn(t,$(t),n,r)}),gg=Un(Br);function _g(n,t){var e=Et(n);return t==null?e:Su(e,t)}var pg=y(function(n,t){n=b(n);var e=-1,r=t.length,i=r>2?t[2]:o;for(i&&Q(t[0],t[1],i)&&(r=1);++e1),f}),mn(n,jr(n),e),r&&(e=pn(e,qn|Ii|at,La));for(var i=t.length;i--;)zr(e,t[i]);return e});function Bg(n,t){return Xf(n,ze(A(t)))}var bg=Un(function(n,t){return n==null?{}:la(n,t)});function Xf(n,t){if(n==null)return{};var e=U(jr(n),function(r){return[r]});return t=A(t),Du(n,e,function(r,i){return t(r,i[0])})}function Fg(n,t,e){t=Qn(t,n);var r=-1,i=t.length;for(i||(i=1,n=o);++rt){var r=n;n=t,t=r}if(e||n%1||t%1){var i=xu();return Y(n+i*(t-n+So("1e-"+((i+"").length-1))),t)}return qr(n,t)}var Zg=Lt(function(n,t,e){return t=t.toLowerCase(),n+(e?Vf(t):t)});function Vf(n){return pi(P(n).toLowerCase())}function kf(n){return n=P(n),n&&n.replace(Yl,Mo).replace(ho,"")}function Yg(n,t,e){n=P(n),t=un(t);var r=n.length;e=e===o?r:ut(T(e),0,r);var i=e;return e-=t.length,e>=0&&n.slice(e,i)==t}function Xg(n){return n=P(n),n&&yl.test(n)?n.replace(Ci,Uo):n}function Jg(n){return n=P(n),n&&Bl.test(n)?n.replace(ar,"\\$&"):n}var Qg=Lt(function(n,t,e){return n+(e?"-":"")+t.toLowerCase()}),Vg=Lt(function(n,t,e){return n+(e?" ":"")+t.toLowerCase()}),kg=nf("toLowerCase");function jg(n,t,e){n=P(n),t=T(t);var r=t?xt(n):0;if(!t||r>=t)return n;var i=(t-r)/2;return Me(Se(i),e)+n+Me(Ie(i),e)}function n_(n,t,e){n=P(n),t=T(t);var r=t?xt(n):0;return t&&r>>0,e?(n=P(n),n&&(typeof t=="string"||t!=null&&!hi(t))&&(t=un(t),!t&&wt(n))?Vn(Rn(n),0,e):n.split(t,e)):[]}var l_=Lt(function(n,t,e){return n+(e?" ":"")+pi(t)});function o_(n,t,e){return n=P(n),e=e==null?0:ut(T(e),0,n.length),t=un(t),n.slice(e,e+t.length)==t}function s_(n,t,e){var r=u.templateSettings;e&&Q(n,t,e)&&(t=o),n=P(n),t=Xe({},t,r,of);var i=Xe({},t.imports,r.imports,of),f=$(i),l=Lr(i,f),s,c,_=0,p=t.interpolate||le,v="__p += '",d=Cr((t.escape||le).source+"|"+p.source+"|"+(p===mi?Hl:le).source+"|"+(t.evaluate||le).source+"|$","g"),x="//# sourceURL="+(B.call(t,"sourceURL")?(t.sourceURL+"").replace(/\s/g," "):"lodash.templateSources["+ ++wo+"]")+` +`;n.replace(d,function(I,C,O,ln,V,on){return O||(O=ln),v+=n.slice(_,on).replace(Xl,Do),C&&(s=!0,v+=`' + +__e(`+C+`) + +'`),V&&(c=!0,v+=`'; +`+V+`; +__p += '`),O&&(v+=`' + +((__t = (`+O+`)) == null ? '' : __t) + +'`),_=on+I.length,I}),v+=`'; +`;var R=B.call(t,"variable")&&t.variable;if(!R)v=`with (obj) { +`+v+` +} +`;else if(Nl.test(R))throw new S(ul);v=(c?v.replace(Sl,""):v).replace(El,"$1").replace(Tl,"$1;"),v="function("+(R||"obj")+`) { +`+(R?"":`obj || (obj = {}); +`)+"var __t, __p = ''"+(s?", __e = _.escape":"")+(c?`, __j = Array.prototype.join; +function print() { __p += __j.call(arguments, '') } +`:`; +`)+v+`return __p +}`;var L=nl(function(){return W(f,x+"return "+v).apply(o,l)});if(L.source=v,ci(L))throw L;return L}function a_(n){return P(n).toLowerCase()}function c_(n){return P(n).toUpperCase()}function h_(n,t,e){if(n=P(n),n&&(e||t===o))return ou(n);if(!n||!(t=un(t)))return n;var r=Rn(n),i=Rn(t),f=su(r,i),l=au(r,i)+1;return Vn(r,f,l).join("")}function g_(n,t,e){if(n=P(n),n&&(e||t===o))return n.slice(0,hu(n)+1);if(!n||!(t=un(t)))return n;var r=Rn(n),i=au(r,Rn(t))+1;return Vn(r,0,i).join("")}function __(n,t,e){if(n=P(n),n&&(e||t===o))return n.replace(cr,"");if(!n||!(t=un(t)))return n;var r=Rn(n),i=su(r,Rn(t));return Vn(r,i).join("")}function p_(n,t){var e=ll,r=ol;if(D(t)){var i="separator"in t?t.separator:i;e="length"in t?T(t.length):e,r="omission"in t?un(t.omission):r}n=P(n);var f=n.length;if(wt(n)){var l=Rn(n);f=l.length}if(e>=f)return n;var s=e-xt(r);if(s<1)return r;var c=l?Vn(l,0,s).join(""):n.slice(0,s);if(i===o)return c+r;if(l&&(s+=c.length-s),hi(i)){if(n.slice(s).search(i)){var _,p=c;for(i.global||(i=Cr(i.source,P(Oi.exec(i))+"g")),i.lastIndex=0;_=i.exec(p);)var v=_.index;c=c.slice(0,v===o?s:v)}}else if(n.indexOf(un(i),s)!=s){var d=c.lastIndexOf(i);d>-1&&(c=c.slice(0,d))}return c+r}function v_(n){return n=P(n),n&&Ll.test(n)?n.replace(yi,zo):n}var d_=Lt(function(n,t,e){return n+(e?" ":"")+t.toUpperCase()}),pi=nf("toUpperCase");function jf(n,t,e){return n=P(n),t=e?o:t,t===o?Go(n)?Xo(n):Wo(n):n.match(t)||[]}var nl=y(function(n,t){try{return en(n,o,t)}catch(e){return ci(e)?e:new S(e)}}),w_=Un(function(n,t){return hn(t,function(e){e=On(e),Fn(n,e,si(n[e],n))}),n});function x_(n){var t=n==null?0:n.length,e=A();return n=t?U(n,function(r){if(typeof r[1]!="function")throw new gn(sn);return[e(r[0]),r[1]]}):[],y(function(r){for(var i=-1;++iKn)return[];var e=yn,r=Y(n,yn);t=A(t),n-=yn;for(var i=Tr(r,t);++e0||t<0)?new m(e):(n<0?e=e.takeRight(-n):n&&(e=e.drop(n)),t!==o&&(t=T(t),e=t<0?e.dropRight(-t):e.take(t-n)),e)},m.prototype.takeRightWhile=function(n){return this.reverse().takeWhile(n).reverse()},m.prototype.toArray=function(){return this.take(yn)},Cn(m.prototype,function(n,t){var e=/^(?:filter|find|map|reject)|While$/.test(t),r=/^(?:head|last)$/.test(t),i=u[r?"take"+(t=="last"?"Right":""):t],f=r||/^find/.test(t);i&&(u.prototype[t]=function(){var l=this.__wrapped__,s=r?[1]:arguments,c=l instanceof m,_=s[0],p=c||E(l),v=function(C){var O=i.apply(u,zn([C],s));return r&&d?O[0]:O};p&&e&&typeof _=="function"&&_.length!=1&&(c=p=!1);var d=this.__chain__,x=!!this.__actions__.length,R=f&&!d,L=c&&!x;if(!f&&p){l=L?l:new m(this);var I=n.apply(l,s);return I.__actions__.push({func:He,args:[v],thisArg:o}),new _n(I,d)}return R&&L?n.apply(this,s):(I=this.thru(v),R?r?I.value()[0]:I.value():I)})}),hn(["pop","push","shift","sort","splice","unshift"],function(n){var t=ge[n],e=/^(?:push|sort|unshift)$/.test(n)?"tap":"thru",r=/^(?:pop|shift)$/.test(n);u.prototype[n]=function(){var i=arguments;if(r&&!this.__chain__){var f=this.value();return t.apply(E(f)?f:[],i)}return this[e](function(l){return t.apply(E(l)?l:[],i)})}}),Cn(m.prototype,function(n,t){var e=u[t];if(e){var r=e.name+"";B.call(St,r)||(St[r]=[]),St[r].push({name:t,func:e})}}),St[be(o,jn).name]=[{name:"wrapper",func:o}],m.prototype.clone=vs,m.prototype.reverse=ds,m.prototype.value=ws,u.prototype.at=Yc,u.prototype.chain=Xc,u.prototype.commit=Jc,u.prototype.next=Qc,u.prototype.plant=kc,u.prototype.reverse=jc,u.prototype.toJSON=u.prototype.valueOf=u.prototype.value=nh,u.prototype.first=u.prototype.head,Nt&&(u.prototype[Nt]=Vc),u},At=Jo();tt?((tt.exports=At)._=At,dr._=At):z._=At}).call(jt)})(Je,Je.exports);var ip=Je.exports;const fp=rp(ip);export{fp as _}; diff --git a/src/main/resources/static/assets/lodash-CprRz5WW.js b/src/main/resources/static/assets/lodash-CprRz5WW.js new file mode 100644 index 00000000..d57aeb15 --- /dev/null +++ b/src/main/resources/static/assets/lodash-CprRz5WW.js @@ -0,0 +1,27 @@ +import{N as jt,O as rp}from"./index-8PPGy_cS.js";var Je={exports:{}};/** + * @license + * Lodash + * Copyright OpenJS Foundation and other contributors + * Released under MIT license + * Based on Underscore.js 1.8.3 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + */Je.exports;(function(Qe,Ve){(function(){var o,rl="4.17.21",ke=200,il="Unsupported core-js use. Try https://npms.io/search?q=ponyfill.",sn="Expected a function",ul="Invalid `variable` option passed into `_.template`",je="__lodash_hash_undefined__",fl=500,ne="__lodash_placeholder__",qn=1,Ii=2,at=4,ct=1,te=2,an=1,jn=2,Si=4,Tn=8,ht=16,Ln=32,gt=64,Wn=128,Ot=256,nr=512,ll=30,ol="...",sl=800,al=16,Ei=1,cl=2,hl=3,nt=1/0,Kn=9007199254740991,gl=17976931348623157e292,ee=NaN,yn=4294967295,_l=yn-1,pl=yn>>>1,vl=[["ary",Wn],["bind",an],["bindKey",jn],["curry",Tn],["curryRight",ht],["flip",nr],["partial",Ln],["partialRight",gt],["rearg",Ot]],_t="[object Arguments]",re="[object Array]",dl="[object AsyncFunction]",Wt="[object Boolean]",Pt="[object Date]",wl="[object DOMException]",ie="[object Error]",ue="[object Function]",Ti="[object GeneratorFunction]",xn="[object Map]",Bt="[object Number]",xl="[object Null]",Pn="[object Object]",Li="[object Promise]",Al="[object Proxy]",bt="[object RegExp]",An="[object Set]",Ft="[object String]",fe="[object Symbol]",Rl="[object Undefined]",Mt="[object WeakMap]",Il="[object WeakSet]",Ut="[object ArrayBuffer]",pt="[object DataView]",tr="[object Float32Array]",er="[object Float64Array]",rr="[object Int8Array]",ir="[object Int16Array]",ur="[object Int32Array]",fr="[object Uint8Array]",lr="[object Uint8ClampedArray]",or="[object Uint16Array]",sr="[object Uint32Array]",Sl=/\b__p \+= '';/g,El=/\b(__p \+=) '' \+/g,Tl=/(__e\(.*?\)|\b__t\)) \+\n'';/g,yi=/&(?:amp|lt|gt|quot|#39);/g,Ci=/[&<>"']/g,Ll=RegExp(yi.source),yl=RegExp(Ci.source),Cl=/<%-([\s\S]+?)%>/g,ml=/<%([\s\S]+?)%>/g,mi=/<%=([\s\S]+?)%>/g,Ol=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Wl=/^\w*$/,Pl=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,ar=/[\\^$.*+?()[\]{}|]/g,Bl=RegExp(ar.source),cr=/^\s+/,bl=/\s/,Fl=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,Ml=/\{\n\/\* \[wrapped with (.+)\] \*/,Ul=/,? & /,Dl=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,Nl=/[()=,{}\[\]\/\s]/,Gl=/\\(\\)?/g,Hl=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,Oi=/\w*$/,ql=/^[-+]0x[0-9a-f]+$/i,Kl=/^0b[01]+$/i,$l=/^\[object .+?Constructor\]$/,zl=/^0o[0-7]+$/i,Zl=/^(?:0|[1-9]\d*)$/,Yl=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,le=/($^)/,Xl=/['\n\r\u2028\u2029\\]/g,oe="\\ud800-\\udfff",Jl="\\u0300-\\u036f",Ql="\\ufe20-\\ufe2f",Vl="\\u20d0-\\u20ff",Wi=Jl+Ql+Vl,Pi="\\u2700-\\u27bf",Bi="a-z\\xdf-\\xf6\\xf8-\\xff",kl="\\xac\\xb1\\xd7\\xf7",jl="\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf",no="\\u2000-\\u206f",to=" \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",bi="A-Z\\xc0-\\xd6\\xd8-\\xde",Fi="\\ufe0e\\ufe0f",Mi=kl+jl+no+to,hr="['’]",eo="["+oe+"]",Ui="["+Mi+"]",se="["+Wi+"]",Di="\\d+",ro="["+Pi+"]",Ni="["+Bi+"]",Gi="[^"+oe+Mi+Di+Pi+Bi+bi+"]",gr="\\ud83c[\\udffb-\\udfff]",io="(?:"+se+"|"+gr+")",Hi="[^"+oe+"]",_r="(?:\\ud83c[\\udde6-\\uddff]){2}",pr="[\\ud800-\\udbff][\\udc00-\\udfff]",vt="["+bi+"]",qi="\\u200d",Ki="(?:"+Ni+"|"+Gi+")",uo="(?:"+vt+"|"+Gi+")",$i="(?:"+hr+"(?:d|ll|m|re|s|t|ve))?",zi="(?:"+hr+"(?:D|LL|M|RE|S|T|VE))?",Zi=io+"?",Yi="["+Fi+"]?",fo="(?:"+qi+"(?:"+[Hi,_r,pr].join("|")+")"+Yi+Zi+")*",lo="\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",oo="\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])",Xi=Yi+Zi+fo,so="(?:"+[ro,_r,pr].join("|")+")"+Xi,ao="(?:"+[Hi+se+"?",se,_r,pr,eo].join("|")+")",co=RegExp(hr,"g"),ho=RegExp(se,"g"),vr=RegExp(gr+"(?="+gr+")|"+ao+Xi,"g"),go=RegExp([vt+"?"+Ni+"+"+$i+"(?="+[Ui,vt,"$"].join("|")+")",uo+"+"+zi+"(?="+[Ui,vt+Ki,"$"].join("|")+")",vt+"?"+Ki+"+"+$i,vt+"+"+zi,oo,lo,Di,so].join("|"),"g"),_o=RegExp("["+qi+oe+Wi+Fi+"]"),po=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,vo=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],wo=-1,M={};M[tr]=M[er]=M[rr]=M[ir]=M[ur]=M[fr]=M[lr]=M[or]=M[sr]=!0,M[_t]=M[re]=M[Ut]=M[Wt]=M[pt]=M[Pt]=M[ie]=M[ue]=M[xn]=M[Bt]=M[Pn]=M[bt]=M[An]=M[Ft]=M[Mt]=!1;var F={};F[_t]=F[re]=F[Ut]=F[pt]=F[Wt]=F[Pt]=F[tr]=F[er]=F[rr]=F[ir]=F[ur]=F[xn]=F[Bt]=F[Pn]=F[bt]=F[An]=F[Ft]=F[fe]=F[fr]=F[lr]=F[or]=F[sr]=!0,F[ie]=F[ue]=F[Mt]=!1;var xo={À:"A",Á:"A",Â:"A",Ã:"A",Ä:"A",Å:"A",à:"a",á:"a",â:"a",ã:"a",ä:"a",å:"a",Ç:"C",ç:"c",Ð:"D",ð:"d",È:"E",É:"E",Ê:"E",Ë:"E",è:"e",é:"e",ê:"e",ë:"e",Ì:"I",Í:"I",Î:"I",Ï:"I",ì:"i",í:"i",î:"i",ï:"i",Ñ:"N",ñ:"n",Ò:"O",Ó:"O",Ô:"O",Õ:"O",Ö:"O",Ø:"O",ò:"o",ó:"o",ô:"o",õ:"o",ö:"o",ø:"o",Ù:"U",Ú:"U",Û:"U",Ü:"U",ù:"u",ú:"u",û:"u",ü:"u",Ý:"Y",ý:"y",ÿ:"y",Æ:"Ae",æ:"ae",Þ:"Th",þ:"th",ß:"ss",Ā:"A",Ă:"A",Ą:"A",ā:"a",ă:"a",ą:"a",Ć:"C",Ĉ:"C",Ċ:"C",Č:"C",ć:"c",ĉ:"c",ċ:"c",č:"c",Ď:"D",Đ:"D",ď:"d",đ:"d",Ē:"E",Ĕ:"E",Ė:"E",Ę:"E",Ě:"E",ē:"e",ĕ:"e",ė:"e",ę:"e",ě:"e",Ĝ:"G",Ğ:"G",Ġ:"G",Ģ:"G",ĝ:"g",ğ:"g",ġ:"g",ģ:"g",Ĥ:"H",Ħ:"H",ĥ:"h",ħ:"h",Ĩ:"I",Ī:"I",Ĭ:"I",Į:"I",İ:"I",ĩ:"i",ī:"i",ĭ:"i",į:"i",ı:"i",Ĵ:"J",ĵ:"j",Ķ:"K",ķ:"k",ĸ:"k",Ĺ:"L",Ļ:"L",Ľ:"L",Ŀ:"L",Ł:"L",ĺ:"l",ļ:"l",ľ:"l",ŀ:"l",ł:"l",Ń:"N",Ņ:"N",Ň:"N",Ŋ:"N",ń:"n",ņ:"n",ň:"n",ŋ:"n",Ō:"O",Ŏ:"O",Ő:"O",ō:"o",ŏ:"o",ő:"o",Ŕ:"R",Ŗ:"R",Ř:"R",ŕ:"r",ŗ:"r",ř:"r",Ś:"S",Ŝ:"S",Ş:"S",Š:"S",ś:"s",ŝ:"s",ş:"s",š:"s",Ţ:"T",Ť:"T",Ŧ:"T",ţ:"t",ť:"t",ŧ:"t",Ũ:"U",Ū:"U",Ŭ:"U",Ů:"U",Ű:"U",Ų:"U",ũ:"u",ū:"u",ŭ:"u",ů:"u",ű:"u",ų:"u",Ŵ:"W",ŵ:"w",Ŷ:"Y",ŷ:"y",Ÿ:"Y",Ź:"Z",Ż:"Z",Ž:"Z",ź:"z",ż:"z",ž:"z",IJ:"IJ",ij:"ij",Œ:"Oe",œ:"oe",ʼn:"'n",ſ:"s"},Ao={"&":"&","<":"<",">":">",'"':""","'":"'"},Ro={"&":"&","<":"<",">":">",""":'"',"'":"'"},Io={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},So=parseFloat,Eo=parseInt,Ji=typeof jt=="object"&&jt&&jt.Object===Object&&jt,To=typeof self=="object"&&self&&self.Object===Object&&self,z=Ji||To||Function("return this")(),dr=Ve&&!Ve.nodeType&&Ve,tt=dr&&!0&&Qe&&!Qe.nodeType&&Qe,Qi=tt&&tt.exports===dr,wr=Qi&&Ji.process,cn=function(){try{var a=tt&&tt.require&&tt.require("util").types;return a||wr&&wr.binding&&wr.binding("util")}catch{}}(),Vi=cn&&cn.isArrayBuffer,ki=cn&&cn.isDate,ji=cn&&cn.isMap,nu=cn&&cn.isRegExp,tu=cn&&cn.isSet,eu=cn&&cn.isTypedArray;function en(a,g,h){switch(h.length){case 0:return a.call(g);case 1:return a.call(g,h[0]);case 2:return a.call(g,h[0],h[1]);case 3:return a.call(g,h[0],h[1],h[2])}return a.apply(g,h)}function Lo(a,g,h,w){for(var S=-1,W=a==null?0:a.length;++S-1}function xr(a,g,h){for(var w=-1,S=a==null?0:a.length;++w-1;);return h}function au(a,g){for(var h=a.length;h--&&dt(g,a[h],0)>-1;);return h}function Fo(a,g){for(var h=a.length,w=0;h--;)a[h]===g&&++w;return w}var Mo=Sr(xo),Uo=Sr(Ao);function Do(a){return"\\"+Io[a]}function No(a,g){return a==null?o:a[g]}function wt(a){return _o.test(a)}function Go(a){return po.test(a)}function Ho(a){for(var g,h=[];!(g=a.next()).done;)h.push(g.value);return h}function yr(a){var g=-1,h=Array(a.size);return a.forEach(function(w,S){h[++g]=[S,w]}),h}function cu(a,g){return function(h){return a(g(h))}}function Zn(a,g){for(var h=-1,w=a.length,S=0,W=[];++h-1}function Cs(n,t){var e=this.__data__,r=ye(e,n);return r<0?(++this.size,e.push([n,t])):e[r][1]=t,this}Bn.prototype.clear=Es,Bn.prototype.delete=Ts,Bn.prototype.get=Ls,Bn.prototype.has=ys,Bn.prototype.set=Cs;function bn(n){var t=-1,e=n==null?0:n.length;for(this.clear();++t=t?n:t)),n}function pn(n,t,e,r,i,f){var l,s=t&qn,c=t&Ii,_=t&at;if(e&&(l=i?e(n,r,i,f):e(n)),l!==o)return l;if(!D(n))return n;var p=E(n);if(p){if(l=Pa(n),!s)return k(n,l)}else{var v=X(n),d=v==ue||v==Ti;if(kn(n))return Yu(n,s);if(v==Pn||v==_t||d&&!i){if(l=c||d?{}:gf(n),!s)return c?Ra(n,$s(l,n)):Aa(n,Su(l,n))}else{if(!F[v])return i?n:{};l=Ba(n,v,s)}}f||(f=new In);var x=f.get(n);if(x)return x;f.set(n,l),qf(n)?n.forEach(function(I){l.add(pn(I,t,e,I,n,f))}):Gf(n)&&n.forEach(function(I,C){l.set(C,pn(I,t,e,C,n,f))});var R=_?c?jr:kr:c?nn:$,L=p?o:R(n);return hn(L||n,function(I,C){L&&(C=I,I=n[C]),$t(l,C,pn(I,t,e,C,n,f))}),l}function zs(n){var t=$(n);return function(e){return Eu(e,n,t)}}function Eu(n,t,e){var r=e.length;if(n==null)return!r;for(n=b(n);r--;){var i=e[r],f=t[i],l=n[i];if(l===o&&!(i in n)||!f(l))return!1}return!0}function Tu(n,t,e){if(typeof n!="function")throw new gn(sn);return Vt(function(){n.apply(o,e)},t)}function zt(n,t,e,r){var i=-1,f=ae,l=!0,s=n.length,c=[],_=t.length;if(!s)return c;e&&(t=U(t,rn(e))),r?(f=xr,l=!1):t.length>=ke&&(f=Dt,l=!1,t=new it(t));n:for(;++ii?0:i+e),r=r===o||r>i?i:T(r),r<0&&(r+=i),r=e>r?0:$f(r);e0&&e(s)?t>1?Z(s,t-1,e,r,i):zn(i,s):r||(i[i.length]=s)}return i}var br=ju(),Cu=ju(!0);function Cn(n,t){return n&&br(n,t,$)}function Fr(n,t){return n&&Cu(n,t,$)}function me(n,t){return $n(t,function(e){return Nn(n[e])})}function ft(n,t){t=Qn(t,n);for(var e=0,r=t.length;n!=null&&et}function Xs(n,t){return n!=null&&B.call(n,t)}function Js(n,t){return n!=null&&t in b(n)}function Qs(n,t,e){return n>=Y(t,e)&&n=120&&p.length>=120)?new it(l&&p):o}p=n[0];var v=-1,d=s[0];n:for(;++v-1;)s!==n&&Ae.call(s,c,1),Ae.call(n,c,1);return n}function Nu(n,t){for(var e=n?t.length:0,r=e-1;e--;){var i=t[e];if(e==r||i!==f){var f=i;Dn(i)?Ae.call(n,i,1):zr(n,i)}}return n}function qr(n,t){return n+Se(xu()*(t-n+1))}function sa(n,t,e,r){for(var i=-1,f=K(Ie((t-n)/(e||1)),0),l=h(f);f--;)l[r?f:++i]=n,n+=e;return l}function Kr(n,t){var e="";if(!n||t<1||t>Kn)return e;do t%2&&(e+=n),t=Se(t/2),t&&(n+=n);while(t);return e}function y(n,t){return fi(vf(n,t,tn),n+"")}function aa(n){return Iu(mt(n))}function ca(n,t){var e=mt(n);return Ge(e,ut(t,0,e.length))}function Xt(n,t,e,r){if(!D(n))return n;t=Qn(t,n);for(var i=-1,f=t.length,l=f-1,s=n;s!=null&&++ii?0:i+t),e=e>i?i:e,e<0&&(e+=i),i=t>e?0:e-t>>>0,t>>>=0;for(var f=h(i);++r>>1,l=n[f];l!==null&&!fn(l)&&(e?l<=t:l=ke){var _=t?null:Ta(n);if(_)return he(_);l=!1,i=Dt,c=new it}else c=t?[]:s;n:for(;++r=r?n:vn(n,t,e)}var Zu=es||function(n){return z.clearTimeout(n)};function Yu(n,t){if(t)return n.slice();var e=n.length,r=_u?_u(e):new n.constructor(e);return n.copy(r),r}function Jr(n){var t=new n.constructor(n.byteLength);return new we(t).set(new we(n)),t}function va(n,t){var e=t?Jr(n.buffer):n.buffer;return new n.constructor(e,n.byteOffset,n.byteLength)}function da(n){var t=new n.constructor(n.source,Oi.exec(n));return t.lastIndex=n.lastIndex,t}function wa(n){return Kt?b(Kt.call(n)):{}}function Xu(n,t){var e=t?Jr(n.buffer):n.buffer;return new n.constructor(e,n.byteOffset,n.length)}function Ju(n,t){if(n!==t){var e=n!==o,r=n===null,i=n===n,f=fn(n),l=t!==o,s=t===null,c=t===t,_=fn(t);if(!s&&!_&&!f&&n>t||f&&l&&c&&!s&&!_||r&&l&&c||!e&&c||!i)return 1;if(!r&&!f&&!_&&n=s)return c;var _=e[r];return c*(_=="desc"?-1:1)}}return n.index-t.index}function Qu(n,t,e,r){for(var i=-1,f=n.length,l=e.length,s=-1,c=t.length,_=K(f-l,0),p=h(c+_),v=!r;++s1?e[i-1]:o,l=i>2?e[2]:o;for(f=n.length>3&&typeof f=="function"?(i--,f):o,l&&Q(e[0],e[1],l)&&(f=i<3?o:f,i=1),t=b(t);++r-1?i[f?t[l]:l]:o}}function ef(n){return Un(function(t){var e=t.length,r=e,i=_n.prototype.thru;for(n&&t.reverse();r--;){var f=t[r];if(typeof f!="function")throw new gn(sn);if(i&&!l&&De(f)=="wrapper")var l=new _n([],!0)}for(r=l?r:e;++r1&&O.reverse(),p&&cs))return!1;var _=f.get(n),p=f.get(t);if(_&&p)return _==t&&p==n;var v=-1,d=!0,x=e&te?new it:o;for(f.set(n,t),f.set(t,n);++v1?"& ":"")+t[r],t=t.join(e>2?", ":" "),n.replace(Fl,`{ +/* [wrapped with `+t+`] */ +`)}function Fa(n){return E(n)||st(n)||!!(du&&n&&n[du])}function Dn(n,t){var e=typeof n;return t=t??Kn,!!t&&(e=="number"||e!="symbol"&&Zl.test(n))&&n>-1&&n%1==0&&n0){if(++t>=sl)return arguments[0]}else t=0;return n.apply(o,arguments)}}function Ge(n,t){var e=-1,r=n.length,i=r-1;for(t=t===o?r:t;++e1?n[t-1]:o;return e=typeof e=="function"?(n.pop(),e):o,Cf(n,e)});function mf(n){var t=u(n);return t.__chain__=!0,t}function Zc(n,t){return t(n),n}function He(n,t){return t(n)}var Yc=Un(function(n){var t=n.length,e=t?n[0]:0,r=this.__wrapped__,i=function(f){return Br(f,n)};return t>1||this.__actions__.length||!(r instanceof m)||!Dn(e)?this.thru(i):(r=r.slice(e,+e+(t?1:0)),r.__actions__.push({func:He,args:[i],thisArg:o}),new _n(r,this.__chain__).thru(function(f){return t&&!f.length&&f.push(o),f}))});function Xc(){return mf(this)}function Jc(){return new _n(this.value(),this.__chain__)}function Qc(){this.__values__===o&&(this.__values__=Kf(this.value()));var n=this.__index__>=this.__values__.length,t=n?o:this.__values__[this.__index__++];return{done:n,value:t}}function Vc(){return this}function kc(n){for(var t,e=this;e instanceof Le;){var r=If(e);r.__index__=0,r.__values__=o,t?i.__wrapped__=r:t=r;var i=r;e=e.__wrapped__}return i.__wrapped__=n,t}function jc(){var n=this.__wrapped__;if(n instanceof m){var t=n;return this.__actions__.length&&(t=new m(this)),t=t.reverse(),t.__actions__.push({func:He,args:[li],thisArg:o}),new _n(t,this.__chain__)}return this.thru(li)}function nh(){return $u(this.__wrapped__,this.__actions__)}var th=Be(function(n,t,e){B.call(n,e)?++n[e]:Fn(n,e,1)});function eh(n,t,e){var r=E(n)?ru:Zs;return e&&Q(n,t,e)&&(t=o),r(n,A(t,3))}function rh(n,t){var e=E(n)?$n:yu;return e(n,A(t,3))}var ih=tf(Sf),uh=tf(Ef);function fh(n,t){return Z(qe(n,t),1)}function lh(n,t){return Z(qe(n,t),nt)}function oh(n,t,e){return e=e===o?1:T(e),Z(qe(n,t),e)}function Of(n,t){var e=E(n)?hn:Xn;return e(n,A(t,3))}function Wf(n,t){var e=E(n)?yo:Lu;return e(n,A(t,3))}var sh=Be(function(n,t,e){B.call(n,e)?n[e].push(t):Fn(n,e,[t])});function ah(n,t,e,r){n=j(n)?n:mt(n),e=e&&!r?T(e):0;var i=n.length;return e<0&&(e=K(i+e,0)),Ye(n)?e<=i&&n.indexOf(t,e)>-1:!!i&&dt(n,t,e)>-1}var ch=y(function(n,t,e){var r=-1,i=typeof t=="function",f=j(n)?h(n.length):[];return Xn(n,function(l){f[++r]=i?en(t,l,e):Zt(l,t,e)}),f}),hh=Be(function(n,t,e){Fn(n,e,t)});function qe(n,t){var e=E(n)?U:Bu;return e(n,A(t,3))}function gh(n,t,e,r){return n==null?[]:(E(t)||(t=t==null?[]:[t]),e=r?o:e,E(e)||(e=e==null?[]:[e]),Uu(n,t,e))}var _h=Be(function(n,t,e){n[e?0:1].push(t)},function(){return[[],[]]});function ph(n,t,e){var r=E(n)?Ar:lu,i=arguments.length<3;return r(n,A(t,4),e,i,Xn)}function vh(n,t,e){var r=E(n)?Co:lu,i=arguments.length<3;return r(n,A(t,4),e,i,Lu)}function dh(n,t){var e=E(n)?$n:yu;return e(n,ze(A(t,3)))}function wh(n){var t=E(n)?Iu:aa;return t(n)}function xh(n,t,e){(e?Q(n,t,e):t===o)?t=1:t=T(t);var r=E(n)?Hs:ca;return r(n,t)}function Ah(n){var t=E(n)?qs:ga;return t(n)}function Rh(n){if(n==null)return 0;if(j(n))return Ye(n)?xt(n):n.length;var t=X(n);return t==xn||t==An?n.size:Nr(n).length}function Ih(n,t,e){var r=E(n)?Rr:_a;return e&&Q(n,t,e)&&(t=o),r(n,A(t,3))}var Sh=y(function(n,t){if(n==null)return[];var e=t.length;return e>1&&Q(n,t[0],t[1])?t=[]:e>2&&Q(t[0],t[1],t[2])&&(t=[t[0]]),Uu(n,Z(t,1),[])}),Ke=rs||function(){return z.Date.now()};function Eh(n,t){if(typeof t!="function")throw new gn(sn);return n=T(n),function(){if(--n<1)return t.apply(this,arguments)}}function Pf(n,t,e){return t=e?o:t,t=n&&t==null?n.length:t,Mn(n,Wn,o,o,o,o,t)}function Bf(n,t){var e;if(typeof t!="function")throw new gn(sn);return n=T(n),function(){return--n>0&&(e=t.apply(this,arguments)),n<=1&&(t=o),e}}var si=y(function(n,t,e){var r=an;if(e.length){var i=Zn(e,yt(si));r|=Ln}return Mn(n,r,t,e,i)}),bf=y(function(n,t,e){var r=an|jn;if(e.length){var i=Zn(e,yt(bf));r|=Ln}return Mn(t,r,n,e,i)});function Ff(n,t,e){t=e?o:t;var r=Mn(n,Tn,o,o,o,o,o,t);return r.placeholder=Ff.placeholder,r}function Mf(n,t,e){t=e?o:t;var r=Mn(n,ht,o,o,o,o,o,t);return r.placeholder=Mf.placeholder,r}function Uf(n,t,e){var r,i,f,l,s,c,_=0,p=!1,v=!1,d=!0;if(typeof n!="function")throw new gn(sn);t=wn(t)||0,D(e)&&(p=!!e.leading,v="maxWait"in e,f=v?K(wn(e.maxWait)||0,t):f,d="trailing"in e?!!e.trailing:d);function x(H){var En=r,Hn=i;return r=i=o,_=H,l=n.apply(Hn,En),l}function R(H){return _=H,s=Vt(C,t),p?x(H):l}function L(H){var En=H-c,Hn=H-_,el=t-En;return v?Y(el,f-Hn):el}function I(H){var En=H-c,Hn=H-_;return c===o||En>=t||En<0||v&&Hn>=f}function C(){var H=Ke();if(I(H))return O(H);s=Vt(C,L(H))}function O(H){return s=o,d&&r?x(H):(r=i=o,l)}function ln(){s!==o&&Zu(s),_=0,r=c=i=s=o}function V(){return s===o?l:O(Ke())}function on(){var H=Ke(),En=I(H);if(r=arguments,i=this,c=H,En){if(s===o)return R(c);if(v)return Zu(s),s=Vt(C,t),x(c)}return s===o&&(s=Vt(C,t)),l}return on.cancel=ln,on.flush=V,on}var Th=y(function(n,t){return Tu(n,1,t)}),Lh=y(function(n,t,e){return Tu(n,wn(t)||0,e)});function yh(n){return Mn(n,nr)}function $e(n,t){if(typeof n!="function"||t!=null&&typeof t!="function")throw new gn(sn);var e=function(){var r=arguments,i=t?t.apply(this,r):r[0],f=e.cache;if(f.has(i))return f.get(i);var l=n.apply(this,r);return e.cache=f.set(i,l)||f,l};return e.cache=new($e.Cache||bn),e}$e.Cache=bn;function ze(n){if(typeof n!="function")throw new gn(sn);return function(){var t=arguments;switch(t.length){case 0:return!n.call(this);case 1:return!n.call(this,t[0]);case 2:return!n.call(this,t[0],t[1]);case 3:return!n.call(this,t[0],t[1],t[2])}return!n.apply(this,t)}}function Ch(n){return Bf(2,n)}var mh=pa(function(n,t){t=t.length==1&&E(t[0])?U(t[0],rn(A())):U(Z(t,1),rn(A()));var e=t.length;return y(function(r){for(var i=-1,f=Y(r.length,e);++i=t}),st=Ou(function(){return arguments}())?Ou:function(n){return N(n)&&B.call(n,"callee")&&!vu.call(n,"callee")},E=h.isArray,$h=Vi?rn(Vi):ks;function j(n){return n!=null&&Ze(n.length)&&!Nn(n)}function G(n){return N(n)&&j(n)}function zh(n){return n===!0||n===!1||N(n)&&J(n)==Wt}var kn=us||Ri,Zh=ki?rn(ki):js;function Yh(n){return N(n)&&n.nodeType===1&&!kt(n)}function Xh(n){if(n==null)return!0;if(j(n)&&(E(n)||typeof n=="string"||typeof n.splice=="function"||kn(n)||Ct(n)||st(n)))return!n.length;var t=X(n);if(t==xn||t==An)return!n.size;if(Qt(n))return!Nr(n).length;for(var e in n)if(B.call(n,e))return!1;return!0}function Jh(n,t){return Yt(n,t)}function Qh(n,t,e){e=typeof e=="function"?e:o;var r=e?e(n,t):o;return r===o?Yt(n,t,o,e):!!r}function ci(n){if(!N(n))return!1;var t=J(n);return t==ie||t==wl||typeof n.message=="string"&&typeof n.name=="string"&&!kt(n)}function Vh(n){return typeof n=="number"&&wu(n)}function Nn(n){if(!D(n))return!1;var t=J(n);return t==ue||t==Ti||t==dl||t==Al}function Nf(n){return typeof n=="number"&&n==T(n)}function Ze(n){return typeof n=="number"&&n>-1&&n%1==0&&n<=Kn}function D(n){var t=typeof n;return n!=null&&(t=="object"||t=="function")}function N(n){return n!=null&&typeof n=="object"}var Gf=ji?rn(ji):ta;function kh(n,t){return n===t||Dr(n,t,ti(t))}function jh(n,t,e){return e=typeof e=="function"?e:o,Dr(n,t,ti(t),e)}function ng(n){return Hf(n)&&n!=+n}function tg(n){if(Da(n))throw new S(il);return Wu(n)}function eg(n){return n===null}function rg(n){return n==null}function Hf(n){return typeof n=="number"||N(n)&&J(n)==Bt}function kt(n){if(!N(n)||J(n)!=Pn)return!1;var t=xe(n);if(t===null)return!0;var e=B.call(t,"constructor")&&t.constructor;return typeof e=="function"&&e instanceof e&&pe.call(e)==jo}var hi=nu?rn(nu):ea;function ig(n){return Nf(n)&&n>=-Kn&&n<=Kn}var qf=tu?rn(tu):ra;function Ye(n){return typeof n=="string"||!E(n)&&N(n)&&J(n)==Ft}function fn(n){return typeof n=="symbol"||N(n)&&J(n)==fe}var Ct=eu?rn(eu):ia;function ug(n){return n===o}function fg(n){return N(n)&&X(n)==Mt}function lg(n){return N(n)&&J(n)==Il}var og=Ue(Gr),sg=Ue(function(n,t){return n<=t});function Kf(n){if(!n)return[];if(j(n))return Ye(n)?Rn(n):k(n);if(Nt&&n[Nt])return Ho(n[Nt]());var t=X(n),e=t==xn?yr:t==An?he:mt;return e(n)}function Gn(n){if(!n)return n===0?n:0;if(n=wn(n),n===nt||n===-nt){var t=n<0?-1:1;return t*gl}return n===n?n:0}function T(n){var t=Gn(n),e=t%1;return t===t?e?t-e:t:0}function $f(n){return n?ut(T(n),0,yn):0}function wn(n){if(typeof n=="number")return n;if(fn(n))return ee;if(D(n)){var t=typeof n.valueOf=="function"?n.valueOf():n;n=D(t)?t+"":t}if(typeof n!="string")return n===0?n:+n;n=ou(n);var e=Kl.test(n);return e||zl.test(n)?Eo(n.slice(2),e?2:8):ql.test(n)?ee:+n}function zf(n){return mn(n,nn(n))}function ag(n){return n?ut(T(n),-Kn,Kn):n===0?n:0}function P(n){return n==null?"":un(n)}var cg=Tt(function(n,t){if(Qt(t)||j(t)){mn(t,$(t),n);return}for(var e in t)B.call(t,e)&&$t(n,e,t[e])}),Zf=Tt(function(n,t){mn(t,nn(t),n)}),Xe=Tt(function(n,t,e,r){mn(t,nn(t),n,r)}),hg=Tt(function(n,t,e,r){mn(t,$(t),n,r)}),gg=Un(Br);function _g(n,t){var e=Et(n);return t==null?e:Su(e,t)}var pg=y(function(n,t){n=b(n);var e=-1,r=t.length,i=r>2?t[2]:o;for(i&&Q(t[0],t[1],i)&&(r=1);++e1),f}),mn(n,jr(n),e),r&&(e=pn(e,qn|Ii|at,La));for(var i=t.length;i--;)zr(e,t[i]);return e});function Bg(n,t){return Xf(n,ze(A(t)))}var bg=Un(function(n,t){return n==null?{}:la(n,t)});function Xf(n,t){if(n==null)return{};var e=U(jr(n),function(r){return[r]});return t=A(t),Du(n,e,function(r,i){return t(r,i[0])})}function Fg(n,t,e){t=Qn(t,n);var r=-1,i=t.length;for(i||(i=1,n=o);++rt){var r=n;n=t,t=r}if(e||n%1||t%1){var i=xu();return Y(n+i*(t-n+So("1e-"+((i+"").length-1))),t)}return qr(n,t)}var Zg=Lt(function(n,t,e){return t=t.toLowerCase(),n+(e?Vf(t):t)});function Vf(n){return pi(P(n).toLowerCase())}function kf(n){return n=P(n),n&&n.replace(Yl,Mo).replace(ho,"")}function Yg(n,t,e){n=P(n),t=un(t);var r=n.length;e=e===o?r:ut(T(e),0,r);var i=e;return e-=t.length,e>=0&&n.slice(e,i)==t}function Xg(n){return n=P(n),n&&yl.test(n)?n.replace(Ci,Uo):n}function Jg(n){return n=P(n),n&&Bl.test(n)?n.replace(ar,"\\$&"):n}var Qg=Lt(function(n,t,e){return n+(e?"-":"")+t.toLowerCase()}),Vg=Lt(function(n,t,e){return n+(e?" ":"")+t.toLowerCase()}),kg=nf("toLowerCase");function jg(n,t,e){n=P(n),t=T(t);var r=t?xt(n):0;if(!t||r>=t)return n;var i=(t-r)/2;return Me(Se(i),e)+n+Me(Ie(i),e)}function n_(n,t,e){n=P(n),t=T(t);var r=t?xt(n):0;return t&&r>>0,e?(n=P(n),n&&(typeof t=="string"||t!=null&&!hi(t))&&(t=un(t),!t&&wt(n))?Vn(Rn(n),0,e):n.split(t,e)):[]}var l_=Lt(function(n,t,e){return n+(e?" ":"")+pi(t)});function o_(n,t,e){return n=P(n),e=e==null?0:ut(T(e),0,n.length),t=un(t),n.slice(e,e+t.length)==t}function s_(n,t,e){var r=u.templateSettings;e&&Q(n,t,e)&&(t=o),n=P(n),t=Xe({},t,r,of);var i=Xe({},t.imports,r.imports,of),f=$(i),l=Lr(i,f),s,c,_=0,p=t.interpolate||le,v="__p += '",d=Cr((t.escape||le).source+"|"+p.source+"|"+(p===mi?Hl:le).source+"|"+(t.evaluate||le).source+"|$","g"),x="//# sourceURL="+(B.call(t,"sourceURL")?(t.sourceURL+"").replace(/\s/g," "):"lodash.templateSources["+ ++wo+"]")+` +`;n.replace(d,function(I,C,O,ln,V,on){return O||(O=ln),v+=n.slice(_,on).replace(Xl,Do),C&&(s=!0,v+=`' + +__e(`+C+`) + +'`),V&&(c=!0,v+=`'; +`+V+`; +__p += '`),O&&(v+=`' + +((__t = (`+O+`)) == null ? '' : __t) + +'`),_=on+I.length,I}),v+=`'; +`;var R=B.call(t,"variable")&&t.variable;if(!R)v=`with (obj) { +`+v+` +} +`;else if(Nl.test(R))throw new S(ul);v=(c?v.replace(Sl,""):v).replace(El,"$1").replace(Tl,"$1;"),v="function("+(R||"obj")+`) { +`+(R?"":`obj || (obj = {}); +`)+"var __t, __p = ''"+(s?", __e = _.escape":"")+(c?`, __j = Array.prototype.join; +function print() { __p += __j.call(arguments, '') } +`:`; +`)+v+`return __p +}`;var L=nl(function(){return W(f,x+"return "+v).apply(o,l)});if(L.source=v,ci(L))throw L;return L}function a_(n){return P(n).toLowerCase()}function c_(n){return P(n).toUpperCase()}function h_(n,t,e){if(n=P(n),n&&(e||t===o))return ou(n);if(!n||!(t=un(t)))return n;var r=Rn(n),i=Rn(t),f=su(r,i),l=au(r,i)+1;return Vn(r,f,l).join("")}function g_(n,t,e){if(n=P(n),n&&(e||t===o))return n.slice(0,hu(n)+1);if(!n||!(t=un(t)))return n;var r=Rn(n),i=au(r,Rn(t))+1;return Vn(r,0,i).join("")}function __(n,t,e){if(n=P(n),n&&(e||t===o))return n.replace(cr,"");if(!n||!(t=un(t)))return n;var r=Rn(n),i=su(r,Rn(t));return Vn(r,i).join("")}function p_(n,t){var e=ll,r=ol;if(D(t)){var i="separator"in t?t.separator:i;e="length"in t?T(t.length):e,r="omission"in t?un(t.omission):r}n=P(n);var f=n.length;if(wt(n)){var l=Rn(n);f=l.length}if(e>=f)return n;var s=e-xt(r);if(s<1)return r;var c=l?Vn(l,0,s).join(""):n.slice(0,s);if(i===o)return c+r;if(l&&(s+=c.length-s),hi(i)){if(n.slice(s).search(i)){var _,p=c;for(i.global||(i=Cr(i.source,P(Oi.exec(i))+"g")),i.lastIndex=0;_=i.exec(p);)var v=_.index;c=c.slice(0,v===o?s:v)}}else if(n.indexOf(un(i),s)!=s){var d=c.lastIndexOf(i);d>-1&&(c=c.slice(0,d))}return c+r}function v_(n){return n=P(n),n&&Ll.test(n)?n.replace(yi,zo):n}var d_=Lt(function(n,t,e){return n+(e?" ":"")+t.toUpperCase()}),pi=nf("toUpperCase");function jf(n,t,e){return n=P(n),t=e?o:t,t===o?Go(n)?Xo(n):Wo(n):n.match(t)||[]}var nl=y(function(n,t){try{return en(n,o,t)}catch(e){return ci(e)?e:new S(e)}}),w_=Un(function(n,t){return hn(t,function(e){e=On(e),Fn(n,e,si(n[e],n))}),n});function x_(n){var t=n==null?0:n.length,e=A();return n=t?U(n,function(r){if(typeof r[1]!="function")throw new gn(sn);return[e(r[0]),r[1]]}):[],y(function(r){for(var i=-1;++iKn)return[];var e=yn,r=Y(n,yn);t=A(t),n-=yn;for(var i=Tr(r,t);++e0||t<0)?new m(e):(n<0?e=e.takeRight(-n):n&&(e=e.drop(n)),t!==o&&(t=T(t),e=t<0?e.dropRight(-t):e.take(t-n)),e)},m.prototype.takeRightWhile=function(n){return this.reverse().takeWhile(n).reverse()},m.prototype.toArray=function(){return this.take(yn)},Cn(m.prototype,function(n,t){var e=/^(?:filter|find|map|reject)|While$/.test(t),r=/^(?:head|last)$/.test(t),i=u[r?"take"+(t=="last"?"Right":""):t],f=r||/^find/.test(t);i&&(u.prototype[t]=function(){var l=this.__wrapped__,s=r?[1]:arguments,c=l instanceof m,_=s[0],p=c||E(l),v=function(C){var O=i.apply(u,zn([C],s));return r&&d?O[0]:O};p&&e&&typeof _=="function"&&_.length!=1&&(c=p=!1);var d=this.__chain__,x=!!this.__actions__.length,R=f&&!d,L=c&&!x;if(!f&&p){l=L?l:new m(this);var I=n.apply(l,s);return I.__actions__.push({func:He,args:[v],thisArg:o}),new _n(I,d)}return R&&L?n.apply(this,s):(I=this.thru(v),R?r?I.value()[0]:I.value():I)})}),hn(["pop","push","shift","sort","splice","unshift"],function(n){var t=ge[n],e=/^(?:push|sort|unshift)$/.test(n)?"tap":"thru",r=/^(?:pop|shift)$/.test(n);u.prototype[n]=function(){var i=arguments;if(r&&!this.__chain__){var f=this.value();return t.apply(E(f)?f:[],i)}return this[e](function(l){return t.apply(E(l)?l:[],i)})}}),Cn(m.prototype,function(n,t){var e=u[t];if(e){var r=e.name+"";B.call(St,r)||(St[r]=[]),St[r].push({name:t,func:e})}}),St[be(o,jn).name]=[{name:"wrapper",func:o}],m.prototype.clone=vs,m.prototype.reverse=ds,m.prototype.value=ws,u.prototype.at=Yc,u.prototype.chain=Xc,u.prototype.commit=Jc,u.prototype.next=Qc,u.prototype.plant=kc,u.prototype.reverse=jc,u.prototype.toJSON=u.prototype.valueOf=u.prototype.value=nh,u.prototype.first=u.prototype.head,Nt&&(u.prototype[Nt]=Vc),u},At=Jo();tt?((tt.exports=At)._=At,dr._=At):z._=At}).call(jt)})(Je,Je.exports);var ip=Je.exports;const fp=rp(ip);export{fp as _}; diff --git a/src/main/resources/static/assets/lodash-DPUzVvBK.js b/src/main/resources/static/assets/lodash-DPUzVvBK.js new file mode 100644 index 00000000..d54ea77b --- /dev/null +++ b/src/main/resources/static/assets/lodash-DPUzVvBK.js @@ -0,0 +1,27 @@ +import{N as jt,O as rp}from"./index-BKFNv1Gc.js";var Je={exports:{}};/** + * @license + * Lodash + * Copyright OpenJS Foundation and other contributors + * Released under MIT license + * Based on Underscore.js 1.8.3 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + */Je.exports;(function(Qe,Ve){(function(){var o,rl="4.17.21",ke=200,il="Unsupported core-js use. Try https://npms.io/search?q=ponyfill.",sn="Expected a function",ul="Invalid `variable` option passed into `_.template`",je="__lodash_hash_undefined__",fl=500,ne="__lodash_placeholder__",qn=1,Ii=2,at=4,ct=1,te=2,an=1,jn=2,Si=4,Tn=8,ht=16,Ln=32,gt=64,Wn=128,Ot=256,nr=512,ll=30,ol="...",sl=800,al=16,Ei=1,cl=2,hl=3,nt=1/0,Kn=9007199254740991,gl=17976931348623157e292,ee=NaN,yn=4294967295,_l=yn-1,pl=yn>>>1,vl=[["ary",Wn],["bind",an],["bindKey",jn],["curry",Tn],["curryRight",ht],["flip",nr],["partial",Ln],["partialRight",gt],["rearg",Ot]],_t="[object Arguments]",re="[object Array]",dl="[object AsyncFunction]",Wt="[object Boolean]",Pt="[object Date]",wl="[object DOMException]",ie="[object Error]",ue="[object Function]",Ti="[object GeneratorFunction]",xn="[object Map]",Bt="[object Number]",xl="[object Null]",Pn="[object Object]",Li="[object Promise]",Al="[object Proxy]",bt="[object RegExp]",An="[object Set]",Ft="[object String]",fe="[object Symbol]",Rl="[object Undefined]",Mt="[object WeakMap]",Il="[object WeakSet]",Ut="[object ArrayBuffer]",pt="[object DataView]",tr="[object Float32Array]",er="[object Float64Array]",rr="[object Int8Array]",ir="[object Int16Array]",ur="[object Int32Array]",fr="[object Uint8Array]",lr="[object Uint8ClampedArray]",or="[object Uint16Array]",sr="[object Uint32Array]",Sl=/\b__p \+= '';/g,El=/\b(__p \+=) '' \+/g,Tl=/(__e\(.*?\)|\b__t\)) \+\n'';/g,yi=/&(?:amp|lt|gt|quot|#39);/g,Ci=/[&<>"']/g,Ll=RegExp(yi.source),yl=RegExp(Ci.source),Cl=/<%-([\s\S]+?)%>/g,ml=/<%([\s\S]+?)%>/g,mi=/<%=([\s\S]+?)%>/g,Ol=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Wl=/^\w*$/,Pl=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,ar=/[\\^$.*+?()[\]{}|]/g,Bl=RegExp(ar.source),cr=/^\s+/,bl=/\s/,Fl=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,Ml=/\{\n\/\* \[wrapped with (.+)\] \*/,Ul=/,? & /,Dl=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,Nl=/[()=,{}\[\]\/\s]/,Gl=/\\(\\)?/g,Hl=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,Oi=/\w*$/,ql=/^[-+]0x[0-9a-f]+$/i,Kl=/^0b[01]+$/i,$l=/^\[object .+?Constructor\]$/,zl=/^0o[0-7]+$/i,Zl=/^(?:0|[1-9]\d*)$/,Yl=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,le=/($^)/,Xl=/['\n\r\u2028\u2029\\]/g,oe="\\ud800-\\udfff",Jl="\\u0300-\\u036f",Ql="\\ufe20-\\ufe2f",Vl="\\u20d0-\\u20ff",Wi=Jl+Ql+Vl,Pi="\\u2700-\\u27bf",Bi="a-z\\xdf-\\xf6\\xf8-\\xff",kl="\\xac\\xb1\\xd7\\xf7",jl="\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf",no="\\u2000-\\u206f",to=" \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",bi="A-Z\\xc0-\\xd6\\xd8-\\xde",Fi="\\ufe0e\\ufe0f",Mi=kl+jl+no+to,hr="['’]",eo="["+oe+"]",Ui="["+Mi+"]",se="["+Wi+"]",Di="\\d+",ro="["+Pi+"]",Ni="["+Bi+"]",Gi="[^"+oe+Mi+Di+Pi+Bi+bi+"]",gr="\\ud83c[\\udffb-\\udfff]",io="(?:"+se+"|"+gr+")",Hi="[^"+oe+"]",_r="(?:\\ud83c[\\udde6-\\uddff]){2}",pr="[\\ud800-\\udbff][\\udc00-\\udfff]",vt="["+bi+"]",qi="\\u200d",Ki="(?:"+Ni+"|"+Gi+")",uo="(?:"+vt+"|"+Gi+")",$i="(?:"+hr+"(?:d|ll|m|re|s|t|ve))?",zi="(?:"+hr+"(?:D|LL|M|RE|S|T|VE))?",Zi=io+"?",Yi="["+Fi+"]?",fo="(?:"+qi+"(?:"+[Hi,_r,pr].join("|")+")"+Yi+Zi+")*",lo="\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",oo="\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])",Xi=Yi+Zi+fo,so="(?:"+[ro,_r,pr].join("|")+")"+Xi,ao="(?:"+[Hi+se+"?",se,_r,pr,eo].join("|")+")",co=RegExp(hr,"g"),ho=RegExp(se,"g"),vr=RegExp(gr+"(?="+gr+")|"+ao+Xi,"g"),go=RegExp([vt+"?"+Ni+"+"+$i+"(?="+[Ui,vt,"$"].join("|")+")",uo+"+"+zi+"(?="+[Ui,vt+Ki,"$"].join("|")+")",vt+"?"+Ki+"+"+$i,vt+"+"+zi,oo,lo,Di,so].join("|"),"g"),_o=RegExp("["+qi+oe+Wi+Fi+"]"),po=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,vo=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],wo=-1,M={};M[tr]=M[er]=M[rr]=M[ir]=M[ur]=M[fr]=M[lr]=M[or]=M[sr]=!0,M[_t]=M[re]=M[Ut]=M[Wt]=M[pt]=M[Pt]=M[ie]=M[ue]=M[xn]=M[Bt]=M[Pn]=M[bt]=M[An]=M[Ft]=M[Mt]=!1;var F={};F[_t]=F[re]=F[Ut]=F[pt]=F[Wt]=F[Pt]=F[tr]=F[er]=F[rr]=F[ir]=F[ur]=F[xn]=F[Bt]=F[Pn]=F[bt]=F[An]=F[Ft]=F[fe]=F[fr]=F[lr]=F[or]=F[sr]=!0,F[ie]=F[ue]=F[Mt]=!1;var xo={À:"A",Á:"A",Â:"A",Ã:"A",Ä:"A",Å:"A",à:"a",á:"a",â:"a",ã:"a",ä:"a",å:"a",Ç:"C",ç:"c",Ð:"D",ð:"d",È:"E",É:"E",Ê:"E",Ë:"E",è:"e",é:"e",ê:"e",ë:"e",Ì:"I",Í:"I",Î:"I",Ï:"I",ì:"i",í:"i",î:"i",ï:"i",Ñ:"N",ñ:"n",Ò:"O",Ó:"O",Ô:"O",Õ:"O",Ö:"O",Ø:"O",ò:"o",ó:"o",ô:"o",õ:"o",ö:"o",ø:"o",Ù:"U",Ú:"U",Û:"U",Ü:"U",ù:"u",ú:"u",û:"u",ü:"u",Ý:"Y",ý:"y",ÿ:"y",Æ:"Ae",æ:"ae",Þ:"Th",þ:"th",ß:"ss",Ā:"A",Ă:"A",Ą:"A",ā:"a",ă:"a",ą:"a",Ć:"C",Ĉ:"C",Ċ:"C",Č:"C",ć:"c",ĉ:"c",ċ:"c",č:"c",Ď:"D",Đ:"D",ď:"d",đ:"d",Ē:"E",Ĕ:"E",Ė:"E",Ę:"E",Ě:"E",ē:"e",ĕ:"e",ė:"e",ę:"e",ě:"e",Ĝ:"G",Ğ:"G",Ġ:"G",Ģ:"G",ĝ:"g",ğ:"g",ġ:"g",ģ:"g",Ĥ:"H",Ħ:"H",ĥ:"h",ħ:"h",Ĩ:"I",Ī:"I",Ĭ:"I",Į:"I",İ:"I",ĩ:"i",ī:"i",ĭ:"i",į:"i",ı:"i",Ĵ:"J",ĵ:"j",Ķ:"K",ķ:"k",ĸ:"k",Ĺ:"L",Ļ:"L",Ľ:"L",Ŀ:"L",Ł:"L",ĺ:"l",ļ:"l",ľ:"l",ŀ:"l",ł:"l",Ń:"N",Ņ:"N",Ň:"N",Ŋ:"N",ń:"n",ņ:"n",ň:"n",ŋ:"n",Ō:"O",Ŏ:"O",Ő:"O",ō:"o",ŏ:"o",ő:"o",Ŕ:"R",Ŗ:"R",Ř:"R",ŕ:"r",ŗ:"r",ř:"r",Ś:"S",Ŝ:"S",Ş:"S",Š:"S",ś:"s",ŝ:"s",ş:"s",š:"s",Ţ:"T",Ť:"T",Ŧ:"T",ţ:"t",ť:"t",ŧ:"t",Ũ:"U",Ū:"U",Ŭ:"U",Ů:"U",Ű:"U",Ų:"U",ũ:"u",ū:"u",ŭ:"u",ů:"u",ű:"u",ų:"u",Ŵ:"W",ŵ:"w",Ŷ:"Y",ŷ:"y",Ÿ:"Y",Ź:"Z",Ż:"Z",Ž:"Z",ź:"z",ż:"z",ž:"z",IJ:"IJ",ij:"ij",Œ:"Oe",œ:"oe",ʼn:"'n",ſ:"s"},Ao={"&":"&","<":"<",">":">",'"':""","'":"'"},Ro={"&":"&","<":"<",">":">",""":'"',"'":"'"},Io={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},So=parseFloat,Eo=parseInt,Ji=typeof jt=="object"&&jt&&jt.Object===Object&&jt,To=typeof self=="object"&&self&&self.Object===Object&&self,z=Ji||To||Function("return this")(),dr=Ve&&!Ve.nodeType&&Ve,tt=dr&&!0&&Qe&&!Qe.nodeType&&Qe,Qi=tt&&tt.exports===dr,wr=Qi&&Ji.process,cn=function(){try{var a=tt&&tt.require&&tt.require("util").types;return a||wr&&wr.binding&&wr.binding("util")}catch{}}(),Vi=cn&&cn.isArrayBuffer,ki=cn&&cn.isDate,ji=cn&&cn.isMap,nu=cn&&cn.isRegExp,tu=cn&&cn.isSet,eu=cn&&cn.isTypedArray;function en(a,g,h){switch(h.length){case 0:return a.call(g);case 1:return a.call(g,h[0]);case 2:return a.call(g,h[0],h[1]);case 3:return a.call(g,h[0],h[1],h[2])}return a.apply(g,h)}function Lo(a,g,h,w){for(var S=-1,W=a==null?0:a.length;++S-1}function xr(a,g,h){for(var w=-1,S=a==null?0:a.length;++w-1;);return h}function au(a,g){for(var h=a.length;h--&&dt(g,a[h],0)>-1;);return h}function Fo(a,g){for(var h=a.length,w=0;h--;)a[h]===g&&++w;return w}var Mo=Sr(xo),Uo=Sr(Ao);function Do(a){return"\\"+Io[a]}function No(a,g){return a==null?o:a[g]}function wt(a){return _o.test(a)}function Go(a){return po.test(a)}function Ho(a){for(var g,h=[];!(g=a.next()).done;)h.push(g.value);return h}function yr(a){var g=-1,h=Array(a.size);return a.forEach(function(w,S){h[++g]=[S,w]}),h}function cu(a,g){return function(h){return a(g(h))}}function Zn(a,g){for(var h=-1,w=a.length,S=0,W=[];++h-1}function Cs(n,t){var e=this.__data__,r=ye(e,n);return r<0?(++this.size,e.push([n,t])):e[r][1]=t,this}Bn.prototype.clear=Es,Bn.prototype.delete=Ts,Bn.prototype.get=Ls,Bn.prototype.has=ys,Bn.prototype.set=Cs;function bn(n){var t=-1,e=n==null?0:n.length;for(this.clear();++t=t?n:t)),n}function pn(n,t,e,r,i,f){var l,s=t&qn,c=t&Ii,_=t&at;if(e&&(l=i?e(n,r,i,f):e(n)),l!==o)return l;if(!D(n))return n;var p=E(n);if(p){if(l=Pa(n),!s)return k(n,l)}else{var v=X(n),d=v==ue||v==Ti;if(kn(n))return Yu(n,s);if(v==Pn||v==_t||d&&!i){if(l=c||d?{}:gf(n),!s)return c?Ra(n,$s(l,n)):Aa(n,Su(l,n))}else{if(!F[v])return i?n:{};l=Ba(n,v,s)}}f||(f=new In);var x=f.get(n);if(x)return x;f.set(n,l),qf(n)?n.forEach(function(I){l.add(pn(I,t,e,I,n,f))}):Gf(n)&&n.forEach(function(I,C){l.set(C,pn(I,t,e,C,n,f))});var R=_?c?jr:kr:c?nn:$,L=p?o:R(n);return hn(L||n,function(I,C){L&&(C=I,I=n[C]),$t(l,C,pn(I,t,e,C,n,f))}),l}function zs(n){var t=$(n);return function(e){return Eu(e,n,t)}}function Eu(n,t,e){var r=e.length;if(n==null)return!r;for(n=b(n);r--;){var i=e[r],f=t[i],l=n[i];if(l===o&&!(i in n)||!f(l))return!1}return!0}function Tu(n,t,e){if(typeof n!="function")throw new gn(sn);return Vt(function(){n.apply(o,e)},t)}function zt(n,t,e,r){var i=-1,f=ae,l=!0,s=n.length,c=[],_=t.length;if(!s)return c;e&&(t=U(t,rn(e))),r?(f=xr,l=!1):t.length>=ke&&(f=Dt,l=!1,t=new it(t));n:for(;++ii?0:i+e),r=r===o||r>i?i:T(r),r<0&&(r+=i),r=e>r?0:$f(r);e0&&e(s)?t>1?Z(s,t-1,e,r,i):zn(i,s):r||(i[i.length]=s)}return i}var br=ju(),Cu=ju(!0);function Cn(n,t){return n&&br(n,t,$)}function Fr(n,t){return n&&Cu(n,t,$)}function me(n,t){return $n(t,function(e){return Nn(n[e])})}function ft(n,t){t=Qn(t,n);for(var e=0,r=t.length;n!=null&&et}function Xs(n,t){return n!=null&&B.call(n,t)}function Js(n,t){return n!=null&&t in b(n)}function Qs(n,t,e){return n>=Y(t,e)&&n=120&&p.length>=120)?new it(l&&p):o}p=n[0];var v=-1,d=s[0];n:for(;++v-1;)s!==n&&Ae.call(s,c,1),Ae.call(n,c,1);return n}function Nu(n,t){for(var e=n?t.length:0,r=e-1;e--;){var i=t[e];if(e==r||i!==f){var f=i;Dn(i)?Ae.call(n,i,1):zr(n,i)}}return n}function qr(n,t){return n+Se(xu()*(t-n+1))}function sa(n,t,e,r){for(var i=-1,f=K(Ie((t-n)/(e||1)),0),l=h(f);f--;)l[r?f:++i]=n,n+=e;return l}function Kr(n,t){var e="";if(!n||t<1||t>Kn)return e;do t%2&&(e+=n),t=Se(t/2),t&&(n+=n);while(t);return e}function y(n,t){return fi(vf(n,t,tn),n+"")}function aa(n){return Iu(mt(n))}function ca(n,t){var e=mt(n);return Ge(e,ut(t,0,e.length))}function Xt(n,t,e,r){if(!D(n))return n;t=Qn(t,n);for(var i=-1,f=t.length,l=f-1,s=n;s!=null&&++ii?0:i+t),e=e>i?i:e,e<0&&(e+=i),i=t>e?0:e-t>>>0,t>>>=0;for(var f=h(i);++r>>1,l=n[f];l!==null&&!fn(l)&&(e?l<=t:l=ke){var _=t?null:Ta(n);if(_)return he(_);l=!1,i=Dt,c=new it}else c=t?[]:s;n:for(;++r=r?n:vn(n,t,e)}var Zu=es||function(n){return z.clearTimeout(n)};function Yu(n,t){if(t)return n.slice();var e=n.length,r=_u?_u(e):new n.constructor(e);return n.copy(r),r}function Jr(n){var t=new n.constructor(n.byteLength);return new we(t).set(new we(n)),t}function va(n,t){var e=t?Jr(n.buffer):n.buffer;return new n.constructor(e,n.byteOffset,n.byteLength)}function da(n){var t=new n.constructor(n.source,Oi.exec(n));return t.lastIndex=n.lastIndex,t}function wa(n){return Kt?b(Kt.call(n)):{}}function Xu(n,t){var e=t?Jr(n.buffer):n.buffer;return new n.constructor(e,n.byteOffset,n.length)}function Ju(n,t){if(n!==t){var e=n!==o,r=n===null,i=n===n,f=fn(n),l=t!==o,s=t===null,c=t===t,_=fn(t);if(!s&&!_&&!f&&n>t||f&&l&&c&&!s&&!_||r&&l&&c||!e&&c||!i)return 1;if(!r&&!f&&!_&&n=s)return c;var _=e[r];return c*(_=="desc"?-1:1)}}return n.index-t.index}function Qu(n,t,e,r){for(var i=-1,f=n.length,l=e.length,s=-1,c=t.length,_=K(f-l,0),p=h(c+_),v=!r;++s1?e[i-1]:o,l=i>2?e[2]:o;for(f=n.length>3&&typeof f=="function"?(i--,f):o,l&&Q(e[0],e[1],l)&&(f=i<3?o:f,i=1),t=b(t);++r-1?i[f?t[l]:l]:o}}function ef(n){return Un(function(t){var e=t.length,r=e,i=_n.prototype.thru;for(n&&t.reverse();r--;){var f=t[r];if(typeof f!="function")throw new gn(sn);if(i&&!l&&De(f)=="wrapper")var l=new _n([],!0)}for(r=l?r:e;++r1&&O.reverse(),p&&cs))return!1;var _=f.get(n),p=f.get(t);if(_&&p)return _==t&&p==n;var v=-1,d=!0,x=e&te?new it:o;for(f.set(n,t),f.set(t,n);++v1?"& ":"")+t[r],t=t.join(e>2?", ":" "),n.replace(Fl,`{ +/* [wrapped with `+t+`] */ +`)}function Fa(n){return E(n)||st(n)||!!(du&&n&&n[du])}function Dn(n,t){var e=typeof n;return t=t??Kn,!!t&&(e=="number"||e!="symbol"&&Zl.test(n))&&n>-1&&n%1==0&&n0){if(++t>=sl)return arguments[0]}else t=0;return n.apply(o,arguments)}}function Ge(n,t){var e=-1,r=n.length,i=r-1;for(t=t===o?r:t;++e1?n[t-1]:o;return e=typeof e=="function"?(n.pop(),e):o,Cf(n,e)});function mf(n){var t=u(n);return t.__chain__=!0,t}function Zc(n,t){return t(n),n}function He(n,t){return t(n)}var Yc=Un(function(n){var t=n.length,e=t?n[0]:0,r=this.__wrapped__,i=function(f){return Br(f,n)};return t>1||this.__actions__.length||!(r instanceof m)||!Dn(e)?this.thru(i):(r=r.slice(e,+e+(t?1:0)),r.__actions__.push({func:He,args:[i],thisArg:o}),new _n(r,this.__chain__).thru(function(f){return t&&!f.length&&f.push(o),f}))});function Xc(){return mf(this)}function Jc(){return new _n(this.value(),this.__chain__)}function Qc(){this.__values__===o&&(this.__values__=Kf(this.value()));var n=this.__index__>=this.__values__.length,t=n?o:this.__values__[this.__index__++];return{done:n,value:t}}function Vc(){return this}function kc(n){for(var t,e=this;e instanceof Le;){var r=If(e);r.__index__=0,r.__values__=o,t?i.__wrapped__=r:t=r;var i=r;e=e.__wrapped__}return i.__wrapped__=n,t}function jc(){var n=this.__wrapped__;if(n instanceof m){var t=n;return this.__actions__.length&&(t=new m(this)),t=t.reverse(),t.__actions__.push({func:He,args:[li],thisArg:o}),new _n(t,this.__chain__)}return this.thru(li)}function nh(){return $u(this.__wrapped__,this.__actions__)}var th=Be(function(n,t,e){B.call(n,e)?++n[e]:Fn(n,e,1)});function eh(n,t,e){var r=E(n)?ru:Zs;return e&&Q(n,t,e)&&(t=o),r(n,A(t,3))}function rh(n,t){var e=E(n)?$n:yu;return e(n,A(t,3))}var ih=tf(Sf),uh=tf(Ef);function fh(n,t){return Z(qe(n,t),1)}function lh(n,t){return Z(qe(n,t),nt)}function oh(n,t,e){return e=e===o?1:T(e),Z(qe(n,t),e)}function Of(n,t){var e=E(n)?hn:Xn;return e(n,A(t,3))}function Wf(n,t){var e=E(n)?yo:Lu;return e(n,A(t,3))}var sh=Be(function(n,t,e){B.call(n,e)?n[e].push(t):Fn(n,e,[t])});function ah(n,t,e,r){n=j(n)?n:mt(n),e=e&&!r?T(e):0;var i=n.length;return e<0&&(e=K(i+e,0)),Ye(n)?e<=i&&n.indexOf(t,e)>-1:!!i&&dt(n,t,e)>-1}var ch=y(function(n,t,e){var r=-1,i=typeof t=="function",f=j(n)?h(n.length):[];return Xn(n,function(l){f[++r]=i?en(t,l,e):Zt(l,t,e)}),f}),hh=Be(function(n,t,e){Fn(n,e,t)});function qe(n,t){var e=E(n)?U:Bu;return e(n,A(t,3))}function gh(n,t,e,r){return n==null?[]:(E(t)||(t=t==null?[]:[t]),e=r?o:e,E(e)||(e=e==null?[]:[e]),Uu(n,t,e))}var _h=Be(function(n,t,e){n[e?0:1].push(t)},function(){return[[],[]]});function ph(n,t,e){var r=E(n)?Ar:lu,i=arguments.length<3;return r(n,A(t,4),e,i,Xn)}function vh(n,t,e){var r=E(n)?Co:lu,i=arguments.length<3;return r(n,A(t,4),e,i,Lu)}function dh(n,t){var e=E(n)?$n:yu;return e(n,ze(A(t,3)))}function wh(n){var t=E(n)?Iu:aa;return t(n)}function xh(n,t,e){(e?Q(n,t,e):t===o)?t=1:t=T(t);var r=E(n)?Hs:ca;return r(n,t)}function Ah(n){var t=E(n)?qs:ga;return t(n)}function Rh(n){if(n==null)return 0;if(j(n))return Ye(n)?xt(n):n.length;var t=X(n);return t==xn||t==An?n.size:Nr(n).length}function Ih(n,t,e){var r=E(n)?Rr:_a;return e&&Q(n,t,e)&&(t=o),r(n,A(t,3))}var Sh=y(function(n,t){if(n==null)return[];var e=t.length;return e>1&&Q(n,t[0],t[1])?t=[]:e>2&&Q(t[0],t[1],t[2])&&(t=[t[0]]),Uu(n,Z(t,1),[])}),Ke=rs||function(){return z.Date.now()};function Eh(n,t){if(typeof t!="function")throw new gn(sn);return n=T(n),function(){if(--n<1)return t.apply(this,arguments)}}function Pf(n,t,e){return t=e?o:t,t=n&&t==null?n.length:t,Mn(n,Wn,o,o,o,o,t)}function Bf(n,t){var e;if(typeof t!="function")throw new gn(sn);return n=T(n),function(){return--n>0&&(e=t.apply(this,arguments)),n<=1&&(t=o),e}}var si=y(function(n,t,e){var r=an;if(e.length){var i=Zn(e,yt(si));r|=Ln}return Mn(n,r,t,e,i)}),bf=y(function(n,t,e){var r=an|jn;if(e.length){var i=Zn(e,yt(bf));r|=Ln}return Mn(t,r,n,e,i)});function Ff(n,t,e){t=e?o:t;var r=Mn(n,Tn,o,o,o,o,o,t);return r.placeholder=Ff.placeholder,r}function Mf(n,t,e){t=e?o:t;var r=Mn(n,ht,o,o,o,o,o,t);return r.placeholder=Mf.placeholder,r}function Uf(n,t,e){var r,i,f,l,s,c,_=0,p=!1,v=!1,d=!0;if(typeof n!="function")throw new gn(sn);t=wn(t)||0,D(e)&&(p=!!e.leading,v="maxWait"in e,f=v?K(wn(e.maxWait)||0,t):f,d="trailing"in e?!!e.trailing:d);function x(H){var En=r,Hn=i;return r=i=o,_=H,l=n.apply(Hn,En),l}function R(H){return _=H,s=Vt(C,t),p?x(H):l}function L(H){var En=H-c,Hn=H-_,el=t-En;return v?Y(el,f-Hn):el}function I(H){var En=H-c,Hn=H-_;return c===o||En>=t||En<0||v&&Hn>=f}function C(){var H=Ke();if(I(H))return O(H);s=Vt(C,L(H))}function O(H){return s=o,d&&r?x(H):(r=i=o,l)}function ln(){s!==o&&Zu(s),_=0,r=c=i=s=o}function V(){return s===o?l:O(Ke())}function on(){var H=Ke(),En=I(H);if(r=arguments,i=this,c=H,En){if(s===o)return R(c);if(v)return Zu(s),s=Vt(C,t),x(c)}return s===o&&(s=Vt(C,t)),l}return on.cancel=ln,on.flush=V,on}var Th=y(function(n,t){return Tu(n,1,t)}),Lh=y(function(n,t,e){return Tu(n,wn(t)||0,e)});function yh(n){return Mn(n,nr)}function $e(n,t){if(typeof n!="function"||t!=null&&typeof t!="function")throw new gn(sn);var e=function(){var r=arguments,i=t?t.apply(this,r):r[0],f=e.cache;if(f.has(i))return f.get(i);var l=n.apply(this,r);return e.cache=f.set(i,l)||f,l};return e.cache=new($e.Cache||bn),e}$e.Cache=bn;function ze(n){if(typeof n!="function")throw new gn(sn);return function(){var t=arguments;switch(t.length){case 0:return!n.call(this);case 1:return!n.call(this,t[0]);case 2:return!n.call(this,t[0],t[1]);case 3:return!n.call(this,t[0],t[1],t[2])}return!n.apply(this,t)}}function Ch(n){return Bf(2,n)}var mh=pa(function(n,t){t=t.length==1&&E(t[0])?U(t[0],rn(A())):U(Z(t,1),rn(A()));var e=t.length;return y(function(r){for(var i=-1,f=Y(r.length,e);++i=t}),st=Ou(function(){return arguments}())?Ou:function(n){return N(n)&&B.call(n,"callee")&&!vu.call(n,"callee")},E=h.isArray,$h=Vi?rn(Vi):ks;function j(n){return n!=null&&Ze(n.length)&&!Nn(n)}function G(n){return N(n)&&j(n)}function zh(n){return n===!0||n===!1||N(n)&&J(n)==Wt}var kn=us||Ri,Zh=ki?rn(ki):js;function Yh(n){return N(n)&&n.nodeType===1&&!kt(n)}function Xh(n){if(n==null)return!0;if(j(n)&&(E(n)||typeof n=="string"||typeof n.splice=="function"||kn(n)||Ct(n)||st(n)))return!n.length;var t=X(n);if(t==xn||t==An)return!n.size;if(Qt(n))return!Nr(n).length;for(var e in n)if(B.call(n,e))return!1;return!0}function Jh(n,t){return Yt(n,t)}function Qh(n,t,e){e=typeof e=="function"?e:o;var r=e?e(n,t):o;return r===o?Yt(n,t,o,e):!!r}function ci(n){if(!N(n))return!1;var t=J(n);return t==ie||t==wl||typeof n.message=="string"&&typeof n.name=="string"&&!kt(n)}function Vh(n){return typeof n=="number"&&wu(n)}function Nn(n){if(!D(n))return!1;var t=J(n);return t==ue||t==Ti||t==dl||t==Al}function Nf(n){return typeof n=="number"&&n==T(n)}function Ze(n){return typeof n=="number"&&n>-1&&n%1==0&&n<=Kn}function D(n){var t=typeof n;return n!=null&&(t=="object"||t=="function")}function N(n){return n!=null&&typeof n=="object"}var Gf=ji?rn(ji):ta;function kh(n,t){return n===t||Dr(n,t,ti(t))}function jh(n,t,e){return e=typeof e=="function"?e:o,Dr(n,t,ti(t),e)}function ng(n){return Hf(n)&&n!=+n}function tg(n){if(Da(n))throw new S(il);return Wu(n)}function eg(n){return n===null}function rg(n){return n==null}function Hf(n){return typeof n=="number"||N(n)&&J(n)==Bt}function kt(n){if(!N(n)||J(n)!=Pn)return!1;var t=xe(n);if(t===null)return!0;var e=B.call(t,"constructor")&&t.constructor;return typeof e=="function"&&e instanceof e&&pe.call(e)==jo}var hi=nu?rn(nu):ea;function ig(n){return Nf(n)&&n>=-Kn&&n<=Kn}var qf=tu?rn(tu):ra;function Ye(n){return typeof n=="string"||!E(n)&&N(n)&&J(n)==Ft}function fn(n){return typeof n=="symbol"||N(n)&&J(n)==fe}var Ct=eu?rn(eu):ia;function ug(n){return n===o}function fg(n){return N(n)&&X(n)==Mt}function lg(n){return N(n)&&J(n)==Il}var og=Ue(Gr),sg=Ue(function(n,t){return n<=t});function Kf(n){if(!n)return[];if(j(n))return Ye(n)?Rn(n):k(n);if(Nt&&n[Nt])return Ho(n[Nt]());var t=X(n),e=t==xn?yr:t==An?he:mt;return e(n)}function Gn(n){if(!n)return n===0?n:0;if(n=wn(n),n===nt||n===-nt){var t=n<0?-1:1;return t*gl}return n===n?n:0}function T(n){var t=Gn(n),e=t%1;return t===t?e?t-e:t:0}function $f(n){return n?ut(T(n),0,yn):0}function wn(n){if(typeof n=="number")return n;if(fn(n))return ee;if(D(n)){var t=typeof n.valueOf=="function"?n.valueOf():n;n=D(t)?t+"":t}if(typeof n!="string")return n===0?n:+n;n=ou(n);var e=Kl.test(n);return e||zl.test(n)?Eo(n.slice(2),e?2:8):ql.test(n)?ee:+n}function zf(n){return mn(n,nn(n))}function ag(n){return n?ut(T(n),-Kn,Kn):n===0?n:0}function P(n){return n==null?"":un(n)}var cg=Tt(function(n,t){if(Qt(t)||j(t)){mn(t,$(t),n);return}for(var e in t)B.call(t,e)&&$t(n,e,t[e])}),Zf=Tt(function(n,t){mn(t,nn(t),n)}),Xe=Tt(function(n,t,e,r){mn(t,nn(t),n,r)}),hg=Tt(function(n,t,e,r){mn(t,$(t),n,r)}),gg=Un(Br);function _g(n,t){var e=Et(n);return t==null?e:Su(e,t)}var pg=y(function(n,t){n=b(n);var e=-1,r=t.length,i=r>2?t[2]:o;for(i&&Q(t[0],t[1],i)&&(r=1);++e1),f}),mn(n,jr(n),e),r&&(e=pn(e,qn|Ii|at,La));for(var i=t.length;i--;)zr(e,t[i]);return e});function Bg(n,t){return Xf(n,ze(A(t)))}var bg=Un(function(n,t){return n==null?{}:la(n,t)});function Xf(n,t){if(n==null)return{};var e=U(jr(n),function(r){return[r]});return t=A(t),Du(n,e,function(r,i){return t(r,i[0])})}function Fg(n,t,e){t=Qn(t,n);var r=-1,i=t.length;for(i||(i=1,n=o);++rt){var r=n;n=t,t=r}if(e||n%1||t%1){var i=xu();return Y(n+i*(t-n+So("1e-"+((i+"").length-1))),t)}return qr(n,t)}var Zg=Lt(function(n,t,e){return t=t.toLowerCase(),n+(e?Vf(t):t)});function Vf(n){return pi(P(n).toLowerCase())}function kf(n){return n=P(n),n&&n.replace(Yl,Mo).replace(ho,"")}function Yg(n,t,e){n=P(n),t=un(t);var r=n.length;e=e===o?r:ut(T(e),0,r);var i=e;return e-=t.length,e>=0&&n.slice(e,i)==t}function Xg(n){return n=P(n),n&&yl.test(n)?n.replace(Ci,Uo):n}function Jg(n){return n=P(n),n&&Bl.test(n)?n.replace(ar,"\\$&"):n}var Qg=Lt(function(n,t,e){return n+(e?"-":"")+t.toLowerCase()}),Vg=Lt(function(n,t,e){return n+(e?" ":"")+t.toLowerCase()}),kg=nf("toLowerCase");function jg(n,t,e){n=P(n),t=T(t);var r=t?xt(n):0;if(!t||r>=t)return n;var i=(t-r)/2;return Me(Se(i),e)+n+Me(Ie(i),e)}function n_(n,t,e){n=P(n),t=T(t);var r=t?xt(n):0;return t&&r>>0,e?(n=P(n),n&&(typeof t=="string"||t!=null&&!hi(t))&&(t=un(t),!t&&wt(n))?Vn(Rn(n),0,e):n.split(t,e)):[]}var l_=Lt(function(n,t,e){return n+(e?" ":"")+pi(t)});function o_(n,t,e){return n=P(n),e=e==null?0:ut(T(e),0,n.length),t=un(t),n.slice(e,e+t.length)==t}function s_(n,t,e){var r=u.templateSettings;e&&Q(n,t,e)&&(t=o),n=P(n),t=Xe({},t,r,of);var i=Xe({},t.imports,r.imports,of),f=$(i),l=Lr(i,f),s,c,_=0,p=t.interpolate||le,v="__p += '",d=Cr((t.escape||le).source+"|"+p.source+"|"+(p===mi?Hl:le).source+"|"+(t.evaluate||le).source+"|$","g"),x="//# sourceURL="+(B.call(t,"sourceURL")?(t.sourceURL+"").replace(/\s/g," "):"lodash.templateSources["+ ++wo+"]")+` +`;n.replace(d,function(I,C,O,ln,V,on){return O||(O=ln),v+=n.slice(_,on).replace(Xl,Do),C&&(s=!0,v+=`' + +__e(`+C+`) + +'`),V&&(c=!0,v+=`'; +`+V+`; +__p += '`),O&&(v+=`' + +((__t = (`+O+`)) == null ? '' : __t) + +'`),_=on+I.length,I}),v+=`'; +`;var R=B.call(t,"variable")&&t.variable;if(!R)v=`with (obj) { +`+v+` +} +`;else if(Nl.test(R))throw new S(ul);v=(c?v.replace(Sl,""):v).replace(El,"$1").replace(Tl,"$1;"),v="function("+(R||"obj")+`) { +`+(R?"":`obj || (obj = {}); +`)+"var __t, __p = ''"+(s?", __e = _.escape":"")+(c?`, __j = Array.prototype.join; +function print() { __p += __j.call(arguments, '') } +`:`; +`)+v+`return __p +}`;var L=nl(function(){return W(f,x+"return "+v).apply(o,l)});if(L.source=v,ci(L))throw L;return L}function a_(n){return P(n).toLowerCase()}function c_(n){return P(n).toUpperCase()}function h_(n,t,e){if(n=P(n),n&&(e||t===o))return ou(n);if(!n||!(t=un(t)))return n;var r=Rn(n),i=Rn(t),f=su(r,i),l=au(r,i)+1;return Vn(r,f,l).join("")}function g_(n,t,e){if(n=P(n),n&&(e||t===o))return n.slice(0,hu(n)+1);if(!n||!(t=un(t)))return n;var r=Rn(n),i=au(r,Rn(t))+1;return Vn(r,0,i).join("")}function __(n,t,e){if(n=P(n),n&&(e||t===o))return n.replace(cr,"");if(!n||!(t=un(t)))return n;var r=Rn(n),i=su(r,Rn(t));return Vn(r,i).join("")}function p_(n,t){var e=ll,r=ol;if(D(t)){var i="separator"in t?t.separator:i;e="length"in t?T(t.length):e,r="omission"in t?un(t.omission):r}n=P(n);var f=n.length;if(wt(n)){var l=Rn(n);f=l.length}if(e>=f)return n;var s=e-xt(r);if(s<1)return r;var c=l?Vn(l,0,s).join(""):n.slice(0,s);if(i===o)return c+r;if(l&&(s+=c.length-s),hi(i)){if(n.slice(s).search(i)){var _,p=c;for(i.global||(i=Cr(i.source,P(Oi.exec(i))+"g")),i.lastIndex=0;_=i.exec(p);)var v=_.index;c=c.slice(0,v===o?s:v)}}else if(n.indexOf(un(i),s)!=s){var d=c.lastIndexOf(i);d>-1&&(c=c.slice(0,d))}return c+r}function v_(n){return n=P(n),n&&Ll.test(n)?n.replace(yi,zo):n}var d_=Lt(function(n,t,e){return n+(e?" ":"")+t.toUpperCase()}),pi=nf("toUpperCase");function jf(n,t,e){return n=P(n),t=e?o:t,t===o?Go(n)?Xo(n):Wo(n):n.match(t)||[]}var nl=y(function(n,t){try{return en(n,o,t)}catch(e){return ci(e)?e:new S(e)}}),w_=Un(function(n,t){return hn(t,function(e){e=On(e),Fn(n,e,si(n[e],n))}),n});function x_(n){var t=n==null?0:n.length,e=A();return n=t?U(n,function(r){if(typeof r[1]!="function")throw new gn(sn);return[e(r[0]),r[1]]}):[],y(function(r){for(var i=-1;++iKn)return[];var e=yn,r=Y(n,yn);t=A(t),n-=yn;for(var i=Tr(r,t);++e0||t<0)?new m(e):(n<0?e=e.takeRight(-n):n&&(e=e.drop(n)),t!==o&&(t=T(t),e=t<0?e.dropRight(-t):e.take(t-n)),e)},m.prototype.takeRightWhile=function(n){return this.reverse().takeWhile(n).reverse()},m.prototype.toArray=function(){return this.take(yn)},Cn(m.prototype,function(n,t){var e=/^(?:filter|find|map|reject)|While$/.test(t),r=/^(?:head|last)$/.test(t),i=u[r?"take"+(t=="last"?"Right":""):t],f=r||/^find/.test(t);i&&(u.prototype[t]=function(){var l=this.__wrapped__,s=r?[1]:arguments,c=l instanceof m,_=s[0],p=c||E(l),v=function(C){var O=i.apply(u,zn([C],s));return r&&d?O[0]:O};p&&e&&typeof _=="function"&&_.length!=1&&(c=p=!1);var d=this.__chain__,x=!!this.__actions__.length,R=f&&!d,L=c&&!x;if(!f&&p){l=L?l:new m(this);var I=n.apply(l,s);return I.__actions__.push({func:He,args:[v],thisArg:o}),new _n(I,d)}return R&&L?n.apply(this,s):(I=this.thru(v),R?r?I.value()[0]:I.value():I)})}),hn(["pop","push","shift","sort","splice","unshift"],function(n){var t=ge[n],e=/^(?:push|sort|unshift)$/.test(n)?"tap":"thru",r=/^(?:pop|shift)$/.test(n);u.prototype[n]=function(){var i=arguments;if(r&&!this.__chain__){var f=this.value();return t.apply(E(f)?f:[],i)}return this[e](function(l){return t.apply(E(l)?l:[],i)})}}),Cn(m.prototype,function(n,t){var e=u[t];if(e){var r=e.name+"";B.call(St,r)||(St[r]=[]),St[r].push({name:t,func:e})}}),St[be(o,jn).name]=[{name:"wrapper",func:o}],m.prototype.clone=vs,m.prototype.reverse=ds,m.prototype.value=ws,u.prototype.at=Yc,u.prototype.chain=Xc,u.prototype.commit=Jc,u.prototype.next=Qc,u.prototype.plant=kc,u.prototype.reverse=jc,u.prototype.toJSON=u.prototype.valueOf=u.prototype.value=nh,u.prototype.first=u.prototype.head,Nt&&(u.prototype[Nt]=Vc),u},At=Jo();tt?((tt.exports=At)._=At,dr._=At):z._=At}).call(jt)})(Je,Je.exports);var ip=Je.exports;const fp=rp(ip);export{fp as _}; diff --git a/src/main/resources/static/assets/lodash-pZBD3XEw.js b/src/main/resources/static/assets/lodash-pZBD3XEw.js new file mode 100644 index 00000000..46dc927a --- /dev/null +++ b/src/main/resources/static/assets/lodash-pZBD3XEw.js @@ -0,0 +1,27 @@ +import{N as jt,O as rp}from"./index-DKle5_5b.js";var Je={exports:{}};/** + * @license + * Lodash + * Copyright OpenJS Foundation and other contributors + * Released under MIT license + * Based on Underscore.js 1.8.3 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + */Je.exports;(function(Qe,Ve){(function(){var o,rl="4.17.21",ke=200,il="Unsupported core-js use. Try https://npms.io/search?q=ponyfill.",sn="Expected a function",ul="Invalid `variable` option passed into `_.template`",je="__lodash_hash_undefined__",fl=500,ne="__lodash_placeholder__",qn=1,Ii=2,at=4,ct=1,te=2,an=1,jn=2,Si=4,Tn=8,ht=16,Ln=32,gt=64,Wn=128,Ot=256,nr=512,ll=30,ol="...",sl=800,al=16,Ei=1,cl=2,hl=3,nt=1/0,Kn=9007199254740991,gl=17976931348623157e292,ee=NaN,yn=4294967295,_l=yn-1,pl=yn>>>1,vl=[["ary",Wn],["bind",an],["bindKey",jn],["curry",Tn],["curryRight",ht],["flip",nr],["partial",Ln],["partialRight",gt],["rearg",Ot]],_t="[object Arguments]",re="[object Array]",dl="[object AsyncFunction]",Wt="[object Boolean]",Pt="[object Date]",wl="[object DOMException]",ie="[object Error]",ue="[object Function]",Ti="[object GeneratorFunction]",xn="[object Map]",Bt="[object Number]",xl="[object Null]",Pn="[object Object]",Li="[object Promise]",Al="[object Proxy]",bt="[object RegExp]",An="[object Set]",Ft="[object String]",fe="[object Symbol]",Rl="[object Undefined]",Mt="[object WeakMap]",Il="[object WeakSet]",Ut="[object ArrayBuffer]",pt="[object DataView]",tr="[object Float32Array]",er="[object Float64Array]",rr="[object Int8Array]",ir="[object Int16Array]",ur="[object Int32Array]",fr="[object Uint8Array]",lr="[object Uint8ClampedArray]",or="[object Uint16Array]",sr="[object Uint32Array]",Sl=/\b__p \+= '';/g,El=/\b(__p \+=) '' \+/g,Tl=/(__e\(.*?\)|\b__t\)) \+\n'';/g,yi=/&(?:amp|lt|gt|quot|#39);/g,Ci=/[&<>"']/g,Ll=RegExp(yi.source),yl=RegExp(Ci.source),Cl=/<%-([\s\S]+?)%>/g,ml=/<%([\s\S]+?)%>/g,mi=/<%=([\s\S]+?)%>/g,Ol=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Wl=/^\w*$/,Pl=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,ar=/[\\^$.*+?()[\]{}|]/g,Bl=RegExp(ar.source),cr=/^\s+/,bl=/\s/,Fl=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,Ml=/\{\n\/\* \[wrapped with (.+)\] \*/,Ul=/,? & /,Dl=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,Nl=/[()=,{}\[\]\/\s]/,Gl=/\\(\\)?/g,Hl=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,Oi=/\w*$/,ql=/^[-+]0x[0-9a-f]+$/i,Kl=/^0b[01]+$/i,$l=/^\[object .+?Constructor\]$/,zl=/^0o[0-7]+$/i,Zl=/^(?:0|[1-9]\d*)$/,Yl=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,le=/($^)/,Xl=/['\n\r\u2028\u2029\\]/g,oe="\\ud800-\\udfff",Jl="\\u0300-\\u036f",Ql="\\ufe20-\\ufe2f",Vl="\\u20d0-\\u20ff",Wi=Jl+Ql+Vl,Pi="\\u2700-\\u27bf",Bi="a-z\\xdf-\\xf6\\xf8-\\xff",kl="\\xac\\xb1\\xd7\\xf7",jl="\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf",no="\\u2000-\\u206f",to=" \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",bi="A-Z\\xc0-\\xd6\\xd8-\\xde",Fi="\\ufe0e\\ufe0f",Mi=kl+jl+no+to,hr="['’]",eo="["+oe+"]",Ui="["+Mi+"]",se="["+Wi+"]",Di="\\d+",ro="["+Pi+"]",Ni="["+Bi+"]",Gi="[^"+oe+Mi+Di+Pi+Bi+bi+"]",gr="\\ud83c[\\udffb-\\udfff]",io="(?:"+se+"|"+gr+")",Hi="[^"+oe+"]",_r="(?:\\ud83c[\\udde6-\\uddff]){2}",pr="[\\ud800-\\udbff][\\udc00-\\udfff]",vt="["+bi+"]",qi="\\u200d",Ki="(?:"+Ni+"|"+Gi+")",uo="(?:"+vt+"|"+Gi+")",$i="(?:"+hr+"(?:d|ll|m|re|s|t|ve))?",zi="(?:"+hr+"(?:D|LL|M|RE|S|T|VE))?",Zi=io+"?",Yi="["+Fi+"]?",fo="(?:"+qi+"(?:"+[Hi,_r,pr].join("|")+")"+Yi+Zi+")*",lo="\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",oo="\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])",Xi=Yi+Zi+fo,so="(?:"+[ro,_r,pr].join("|")+")"+Xi,ao="(?:"+[Hi+se+"?",se,_r,pr,eo].join("|")+")",co=RegExp(hr,"g"),ho=RegExp(se,"g"),vr=RegExp(gr+"(?="+gr+")|"+ao+Xi,"g"),go=RegExp([vt+"?"+Ni+"+"+$i+"(?="+[Ui,vt,"$"].join("|")+")",uo+"+"+zi+"(?="+[Ui,vt+Ki,"$"].join("|")+")",vt+"?"+Ki+"+"+$i,vt+"+"+zi,oo,lo,Di,so].join("|"),"g"),_o=RegExp("["+qi+oe+Wi+Fi+"]"),po=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,vo=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],wo=-1,M={};M[tr]=M[er]=M[rr]=M[ir]=M[ur]=M[fr]=M[lr]=M[or]=M[sr]=!0,M[_t]=M[re]=M[Ut]=M[Wt]=M[pt]=M[Pt]=M[ie]=M[ue]=M[xn]=M[Bt]=M[Pn]=M[bt]=M[An]=M[Ft]=M[Mt]=!1;var F={};F[_t]=F[re]=F[Ut]=F[pt]=F[Wt]=F[Pt]=F[tr]=F[er]=F[rr]=F[ir]=F[ur]=F[xn]=F[Bt]=F[Pn]=F[bt]=F[An]=F[Ft]=F[fe]=F[fr]=F[lr]=F[or]=F[sr]=!0,F[ie]=F[ue]=F[Mt]=!1;var xo={À:"A",Á:"A",Â:"A",Ã:"A",Ä:"A",Å:"A",à:"a",á:"a",â:"a",ã:"a",ä:"a",å:"a",Ç:"C",ç:"c",Ð:"D",ð:"d",È:"E",É:"E",Ê:"E",Ë:"E",è:"e",é:"e",ê:"e",ë:"e",Ì:"I",Í:"I",Î:"I",Ï:"I",ì:"i",í:"i",î:"i",ï:"i",Ñ:"N",ñ:"n",Ò:"O",Ó:"O",Ô:"O",Õ:"O",Ö:"O",Ø:"O",ò:"o",ó:"o",ô:"o",õ:"o",ö:"o",ø:"o",Ù:"U",Ú:"U",Û:"U",Ü:"U",ù:"u",ú:"u",û:"u",ü:"u",Ý:"Y",ý:"y",ÿ:"y",Æ:"Ae",æ:"ae",Þ:"Th",þ:"th",ß:"ss",Ā:"A",Ă:"A",Ą:"A",ā:"a",ă:"a",ą:"a",Ć:"C",Ĉ:"C",Ċ:"C",Č:"C",ć:"c",ĉ:"c",ċ:"c",č:"c",Ď:"D",Đ:"D",ď:"d",đ:"d",Ē:"E",Ĕ:"E",Ė:"E",Ę:"E",Ě:"E",ē:"e",ĕ:"e",ė:"e",ę:"e",ě:"e",Ĝ:"G",Ğ:"G",Ġ:"G",Ģ:"G",ĝ:"g",ğ:"g",ġ:"g",ģ:"g",Ĥ:"H",Ħ:"H",ĥ:"h",ħ:"h",Ĩ:"I",Ī:"I",Ĭ:"I",Į:"I",İ:"I",ĩ:"i",ī:"i",ĭ:"i",į:"i",ı:"i",Ĵ:"J",ĵ:"j",Ķ:"K",ķ:"k",ĸ:"k",Ĺ:"L",Ļ:"L",Ľ:"L",Ŀ:"L",Ł:"L",ĺ:"l",ļ:"l",ľ:"l",ŀ:"l",ł:"l",Ń:"N",Ņ:"N",Ň:"N",Ŋ:"N",ń:"n",ņ:"n",ň:"n",ŋ:"n",Ō:"O",Ŏ:"O",Ő:"O",ō:"o",ŏ:"o",ő:"o",Ŕ:"R",Ŗ:"R",Ř:"R",ŕ:"r",ŗ:"r",ř:"r",Ś:"S",Ŝ:"S",Ş:"S",Š:"S",ś:"s",ŝ:"s",ş:"s",š:"s",Ţ:"T",Ť:"T",Ŧ:"T",ţ:"t",ť:"t",ŧ:"t",Ũ:"U",Ū:"U",Ŭ:"U",Ů:"U",Ű:"U",Ų:"U",ũ:"u",ū:"u",ŭ:"u",ů:"u",ű:"u",ų:"u",Ŵ:"W",ŵ:"w",Ŷ:"Y",ŷ:"y",Ÿ:"Y",Ź:"Z",Ż:"Z",Ž:"Z",ź:"z",ż:"z",ž:"z",IJ:"IJ",ij:"ij",Œ:"Oe",œ:"oe",ʼn:"'n",ſ:"s"},Ao={"&":"&","<":"<",">":">",'"':""","'":"'"},Ro={"&":"&","<":"<",">":">",""":'"',"'":"'"},Io={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},So=parseFloat,Eo=parseInt,Ji=typeof jt=="object"&&jt&&jt.Object===Object&&jt,To=typeof self=="object"&&self&&self.Object===Object&&self,z=Ji||To||Function("return this")(),dr=Ve&&!Ve.nodeType&&Ve,tt=dr&&!0&&Qe&&!Qe.nodeType&&Qe,Qi=tt&&tt.exports===dr,wr=Qi&&Ji.process,cn=function(){try{var a=tt&&tt.require&&tt.require("util").types;return a||wr&&wr.binding&&wr.binding("util")}catch{}}(),Vi=cn&&cn.isArrayBuffer,ki=cn&&cn.isDate,ji=cn&&cn.isMap,nu=cn&&cn.isRegExp,tu=cn&&cn.isSet,eu=cn&&cn.isTypedArray;function en(a,g,h){switch(h.length){case 0:return a.call(g);case 1:return a.call(g,h[0]);case 2:return a.call(g,h[0],h[1]);case 3:return a.call(g,h[0],h[1],h[2])}return a.apply(g,h)}function Lo(a,g,h,w){for(var S=-1,W=a==null?0:a.length;++S-1}function xr(a,g,h){for(var w=-1,S=a==null?0:a.length;++w-1;);return h}function au(a,g){for(var h=a.length;h--&&dt(g,a[h],0)>-1;);return h}function Fo(a,g){for(var h=a.length,w=0;h--;)a[h]===g&&++w;return w}var Mo=Sr(xo),Uo=Sr(Ao);function Do(a){return"\\"+Io[a]}function No(a,g){return a==null?o:a[g]}function wt(a){return _o.test(a)}function Go(a){return po.test(a)}function Ho(a){for(var g,h=[];!(g=a.next()).done;)h.push(g.value);return h}function yr(a){var g=-1,h=Array(a.size);return a.forEach(function(w,S){h[++g]=[S,w]}),h}function cu(a,g){return function(h){return a(g(h))}}function Zn(a,g){for(var h=-1,w=a.length,S=0,W=[];++h-1}function Cs(n,t){var e=this.__data__,r=ye(e,n);return r<0?(++this.size,e.push([n,t])):e[r][1]=t,this}Bn.prototype.clear=Es,Bn.prototype.delete=Ts,Bn.prototype.get=Ls,Bn.prototype.has=ys,Bn.prototype.set=Cs;function bn(n){var t=-1,e=n==null?0:n.length;for(this.clear();++t=t?n:t)),n}function pn(n,t,e,r,i,f){var l,s=t&qn,c=t&Ii,_=t&at;if(e&&(l=i?e(n,r,i,f):e(n)),l!==o)return l;if(!D(n))return n;var p=E(n);if(p){if(l=Pa(n),!s)return k(n,l)}else{var v=X(n),d=v==ue||v==Ti;if(kn(n))return Yu(n,s);if(v==Pn||v==_t||d&&!i){if(l=c||d?{}:gf(n),!s)return c?Ra(n,$s(l,n)):Aa(n,Su(l,n))}else{if(!F[v])return i?n:{};l=Ba(n,v,s)}}f||(f=new In);var x=f.get(n);if(x)return x;f.set(n,l),qf(n)?n.forEach(function(I){l.add(pn(I,t,e,I,n,f))}):Gf(n)&&n.forEach(function(I,C){l.set(C,pn(I,t,e,C,n,f))});var R=_?c?jr:kr:c?nn:$,L=p?o:R(n);return hn(L||n,function(I,C){L&&(C=I,I=n[C]),$t(l,C,pn(I,t,e,C,n,f))}),l}function zs(n){var t=$(n);return function(e){return Eu(e,n,t)}}function Eu(n,t,e){var r=e.length;if(n==null)return!r;for(n=b(n);r--;){var i=e[r],f=t[i],l=n[i];if(l===o&&!(i in n)||!f(l))return!1}return!0}function Tu(n,t,e){if(typeof n!="function")throw new gn(sn);return Vt(function(){n.apply(o,e)},t)}function zt(n,t,e,r){var i=-1,f=ae,l=!0,s=n.length,c=[],_=t.length;if(!s)return c;e&&(t=U(t,rn(e))),r?(f=xr,l=!1):t.length>=ke&&(f=Dt,l=!1,t=new it(t));n:for(;++ii?0:i+e),r=r===o||r>i?i:T(r),r<0&&(r+=i),r=e>r?0:$f(r);e0&&e(s)?t>1?Z(s,t-1,e,r,i):zn(i,s):r||(i[i.length]=s)}return i}var br=ju(),Cu=ju(!0);function Cn(n,t){return n&&br(n,t,$)}function Fr(n,t){return n&&Cu(n,t,$)}function me(n,t){return $n(t,function(e){return Nn(n[e])})}function ft(n,t){t=Qn(t,n);for(var e=0,r=t.length;n!=null&&et}function Xs(n,t){return n!=null&&B.call(n,t)}function Js(n,t){return n!=null&&t in b(n)}function Qs(n,t,e){return n>=Y(t,e)&&n=120&&p.length>=120)?new it(l&&p):o}p=n[0];var v=-1,d=s[0];n:for(;++v-1;)s!==n&&Ae.call(s,c,1),Ae.call(n,c,1);return n}function Nu(n,t){for(var e=n?t.length:0,r=e-1;e--;){var i=t[e];if(e==r||i!==f){var f=i;Dn(i)?Ae.call(n,i,1):zr(n,i)}}return n}function qr(n,t){return n+Se(xu()*(t-n+1))}function sa(n,t,e,r){for(var i=-1,f=K(Ie((t-n)/(e||1)),0),l=h(f);f--;)l[r?f:++i]=n,n+=e;return l}function Kr(n,t){var e="";if(!n||t<1||t>Kn)return e;do t%2&&(e+=n),t=Se(t/2),t&&(n+=n);while(t);return e}function y(n,t){return fi(vf(n,t,tn),n+"")}function aa(n){return Iu(mt(n))}function ca(n,t){var e=mt(n);return Ge(e,ut(t,0,e.length))}function Xt(n,t,e,r){if(!D(n))return n;t=Qn(t,n);for(var i=-1,f=t.length,l=f-1,s=n;s!=null&&++ii?0:i+t),e=e>i?i:e,e<0&&(e+=i),i=t>e?0:e-t>>>0,t>>>=0;for(var f=h(i);++r>>1,l=n[f];l!==null&&!fn(l)&&(e?l<=t:l=ke){var _=t?null:Ta(n);if(_)return he(_);l=!1,i=Dt,c=new it}else c=t?[]:s;n:for(;++r=r?n:vn(n,t,e)}var Zu=es||function(n){return z.clearTimeout(n)};function Yu(n,t){if(t)return n.slice();var e=n.length,r=_u?_u(e):new n.constructor(e);return n.copy(r),r}function Jr(n){var t=new n.constructor(n.byteLength);return new we(t).set(new we(n)),t}function va(n,t){var e=t?Jr(n.buffer):n.buffer;return new n.constructor(e,n.byteOffset,n.byteLength)}function da(n){var t=new n.constructor(n.source,Oi.exec(n));return t.lastIndex=n.lastIndex,t}function wa(n){return Kt?b(Kt.call(n)):{}}function Xu(n,t){var e=t?Jr(n.buffer):n.buffer;return new n.constructor(e,n.byteOffset,n.length)}function Ju(n,t){if(n!==t){var e=n!==o,r=n===null,i=n===n,f=fn(n),l=t!==o,s=t===null,c=t===t,_=fn(t);if(!s&&!_&&!f&&n>t||f&&l&&c&&!s&&!_||r&&l&&c||!e&&c||!i)return 1;if(!r&&!f&&!_&&n=s)return c;var _=e[r];return c*(_=="desc"?-1:1)}}return n.index-t.index}function Qu(n,t,e,r){for(var i=-1,f=n.length,l=e.length,s=-1,c=t.length,_=K(f-l,0),p=h(c+_),v=!r;++s1?e[i-1]:o,l=i>2?e[2]:o;for(f=n.length>3&&typeof f=="function"?(i--,f):o,l&&Q(e[0],e[1],l)&&(f=i<3?o:f,i=1),t=b(t);++r-1?i[f?t[l]:l]:o}}function ef(n){return Un(function(t){var e=t.length,r=e,i=_n.prototype.thru;for(n&&t.reverse();r--;){var f=t[r];if(typeof f!="function")throw new gn(sn);if(i&&!l&&De(f)=="wrapper")var l=new _n([],!0)}for(r=l?r:e;++r1&&O.reverse(),p&&cs))return!1;var _=f.get(n),p=f.get(t);if(_&&p)return _==t&&p==n;var v=-1,d=!0,x=e&te?new it:o;for(f.set(n,t),f.set(t,n);++v1?"& ":"")+t[r],t=t.join(e>2?", ":" "),n.replace(Fl,`{ +/* [wrapped with `+t+`] */ +`)}function Fa(n){return E(n)||st(n)||!!(du&&n&&n[du])}function Dn(n,t){var e=typeof n;return t=t??Kn,!!t&&(e=="number"||e!="symbol"&&Zl.test(n))&&n>-1&&n%1==0&&n0){if(++t>=sl)return arguments[0]}else t=0;return n.apply(o,arguments)}}function Ge(n,t){var e=-1,r=n.length,i=r-1;for(t=t===o?r:t;++e1?n[t-1]:o;return e=typeof e=="function"?(n.pop(),e):o,Cf(n,e)});function mf(n){var t=u(n);return t.__chain__=!0,t}function Zc(n,t){return t(n),n}function He(n,t){return t(n)}var Yc=Un(function(n){var t=n.length,e=t?n[0]:0,r=this.__wrapped__,i=function(f){return Br(f,n)};return t>1||this.__actions__.length||!(r instanceof m)||!Dn(e)?this.thru(i):(r=r.slice(e,+e+(t?1:0)),r.__actions__.push({func:He,args:[i],thisArg:o}),new _n(r,this.__chain__).thru(function(f){return t&&!f.length&&f.push(o),f}))});function Xc(){return mf(this)}function Jc(){return new _n(this.value(),this.__chain__)}function Qc(){this.__values__===o&&(this.__values__=Kf(this.value()));var n=this.__index__>=this.__values__.length,t=n?o:this.__values__[this.__index__++];return{done:n,value:t}}function Vc(){return this}function kc(n){for(var t,e=this;e instanceof Le;){var r=If(e);r.__index__=0,r.__values__=o,t?i.__wrapped__=r:t=r;var i=r;e=e.__wrapped__}return i.__wrapped__=n,t}function jc(){var n=this.__wrapped__;if(n instanceof m){var t=n;return this.__actions__.length&&(t=new m(this)),t=t.reverse(),t.__actions__.push({func:He,args:[li],thisArg:o}),new _n(t,this.__chain__)}return this.thru(li)}function nh(){return $u(this.__wrapped__,this.__actions__)}var th=Be(function(n,t,e){B.call(n,e)?++n[e]:Fn(n,e,1)});function eh(n,t,e){var r=E(n)?ru:Zs;return e&&Q(n,t,e)&&(t=o),r(n,A(t,3))}function rh(n,t){var e=E(n)?$n:yu;return e(n,A(t,3))}var ih=tf(Sf),uh=tf(Ef);function fh(n,t){return Z(qe(n,t),1)}function lh(n,t){return Z(qe(n,t),nt)}function oh(n,t,e){return e=e===o?1:T(e),Z(qe(n,t),e)}function Of(n,t){var e=E(n)?hn:Xn;return e(n,A(t,3))}function Wf(n,t){var e=E(n)?yo:Lu;return e(n,A(t,3))}var sh=Be(function(n,t,e){B.call(n,e)?n[e].push(t):Fn(n,e,[t])});function ah(n,t,e,r){n=j(n)?n:mt(n),e=e&&!r?T(e):0;var i=n.length;return e<0&&(e=K(i+e,0)),Ye(n)?e<=i&&n.indexOf(t,e)>-1:!!i&&dt(n,t,e)>-1}var ch=y(function(n,t,e){var r=-1,i=typeof t=="function",f=j(n)?h(n.length):[];return Xn(n,function(l){f[++r]=i?en(t,l,e):Zt(l,t,e)}),f}),hh=Be(function(n,t,e){Fn(n,e,t)});function qe(n,t){var e=E(n)?U:Bu;return e(n,A(t,3))}function gh(n,t,e,r){return n==null?[]:(E(t)||(t=t==null?[]:[t]),e=r?o:e,E(e)||(e=e==null?[]:[e]),Uu(n,t,e))}var _h=Be(function(n,t,e){n[e?0:1].push(t)},function(){return[[],[]]});function ph(n,t,e){var r=E(n)?Ar:lu,i=arguments.length<3;return r(n,A(t,4),e,i,Xn)}function vh(n,t,e){var r=E(n)?Co:lu,i=arguments.length<3;return r(n,A(t,4),e,i,Lu)}function dh(n,t){var e=E(n)?$n:yu;return e(n,ze(A(t,3)))}function wh(n){var t=E(n)?Iu:aa;return t(n)}function xh(n,t,e){(e?Q(n,t,e):t===o)?t=1:t=T(t);var r=E(n)?Hs:ca;return r(n,t)}function Ah(n){var t=E(n)?qs:ga;return t(n)}function Rh(n){if(n==null)return 0;if(j(n))return Ye(n)?xt(n):n.length;var t=X(n);return t==xn||t==An?n.size:Nr(n).length}function Ih(n,t,e){var r=E(n)?Rr:_a;return e&&Q(n,t,e)&&(t=o),r(n,A(t,3))}var Sh=y(function(n,t){if(n==null)return[];var e=t.length;return e>1&&Q(n,t[0],t[1])?t=[]:e>2&&Q(t[0],t[1],t[2])&&(t=[t[0]]),Uu(n,Z(t,1),[])}),Ke=rs||function(){return z.Date.now()};function Eh(n,t){if(typeof t!="function")throw new gn(sn);return n=T(n),function(){if(--n<1)return t.apply(this,arguments)}}function Pf(n,t,e){return t=e?o:t,t=n&&t==null?n.length:t,Mn(n,Wn,o,o,o,o,t)}function Bf(n,t){var e;if(typeof t!="function")throw new gn(sn);return n=T(n),function(){return--n>0&&(e=t.apply(this,arguments)),n<=1&&(t=o),e}}var si=y(function(n,t,e){var r=an;if(e.length){var i=Zn(e,yt(si));r|=Ln}return Mn(n,r,t,e,i)}),bf=y(function(n,t,e){var r=an|jn;if(e.length){var i=Zn(e,yt(bf));r|=Ln}return Mn(t,r,n,e,i)});function Ff(n,t,e){t=e?o:t;var r=Mn(n,Tn,o,o,o,o,o,t);return r.placeholder=Ff.placeholder,r}function Mf(n,t,e){t=e?o:t;var r=Mn(n,ht,o,o,o,o,o,t);return r.placeholder=Mf.placeholder,r}function Uf(n,t,e){var r,i,f,l,s,c,_=0,p=!1,v=!1,d=!0;if(typeof n!="function")throw new gn(sn);t=wn(t)||0,D(e)&&(p=!!e.leading,v="maxWait"in e,f=v?K(wn(e.maxWait)||0,t):f,d="trailing"in e?!!e.trailing:d);function x(H){var En=r,Hn=i;return r=i=o,_=H,l=n.apply(Hn,En),l}function R(H){return _=H,s=Vt(C,t),p?x(H):l}function L(H){var En=H-c,Hn=H-_,el=t-En;return v?Y(el,f-Hn):el}function I(H){var En=H-c,Hn=H-_;return c===o||En>=t||En<0||v&&Hn>=f}function C(){var H=Ke();if(I(H))return O(H);s=Vt(C,L(H))}function O(H){return s=o,d&&r?x(H):(r=i=o,l)}function ln(){s!==o&&Zu(s),_=0,r=c=i=s=o}function V(){return s===o?l:O(Ke())}function on(){var H=Ke(),En=I(H);if(r=arguments,i=this,c=H,En){if(s===o)return R(c);if(v)return Zu(s),s=Vt(C,t),x(c)}return s===o&&(s=Vt(C,t)),l}return on.cancel=ln,on.flush=V,on}var Th=y(function(n,t){return Tu(n,1,t)}),Lh=y(function(n,t,e){return Tu(n,wn(t)||0,e)});function yh(n){return Mn(n,nr)}function $e(n,t){if(typeof n!="function"||t!=null&&typeof t!="function")throw new gn(sn);var e=function(){var r=arguments,i=t?t.apply(this,r):r[0],f=e.cache;if(f.has(i))return f.get(i);var l=n.apply(this,r);return e.cache=f.set(i,l)||f,l};return e.cache=new($e.Cache||bn),e}$e.Cache=bn;function ze(n){if(typeof n!="function")throw new gn(sn);return function(){var t=arguments;switch(t.length){case 0:return!n.call(this);case 1:return!n.call(this,t[0]);case 2:return!n.call(this,t[0],t[1]);case 3:return!n.call(this,t[0],t[1],t[2])}return!n.apply(this,t)}}function Ch(n){return Bf(2,n)}var mh=pa(function(n,t){t=t.length==1&&E(t[0])?U(t[0],rn(A())):U(Z(t,1),rn(A()));var e=t.length;return y(function(r){for(var i=-1,f=Y(r.length,e);++i=t}),st=Ou(function(){return arguments}())?Ou:function(n){return N(n)&&B.call(n,"callee")&&!vu.call(n,"callee")},E=h.isArray,$h=Vi?rn(Vi):ks;function j(n){return n!=null&&Ze(n.length)&&!Nn(n)}function G(n){return N(n)&&j(n)}function zh(n){return n===!0||n===!1||N(n)&&J(n)==Wt}var kn=us||Ri,Zh=ki?rn(ki):js;function Yh(n){return N(n)&&n.nodeType===1&&!kt(n)}function Xh(n){if(n==null)return!0;if(j(n)&&(E(n)||typeof n=="string"||typeof n.splice=="function"||kn(n)||Ct(n)||st(n)))return!n.length;var t=X(n);if(t==xn||t==An)return!n.size;if(Qt(n))return!Nr(n).length;for(var e in n)if(B.call(n,e))return!1;return!0}function Jh(n,t){return Yt(n,t)}function Qh(n,t,e){e=typeof e=="function"?e:o;var r=e?e(n,t):o;return r===o?Yt(n,t,o,e):!!r}function ci(n){if(!N(n))return!1;var t=J(n);return t==ie||t==wl||typeof n.message=="string"&&typeof n.name=="string"&&!kt(n)}function Vh(n){return typeof n=="number"&&wu(n)}function Nn(n){if(!D(n))return!1;var t=J(n);return t==ue||t==Ti||t==dl||t==Al}function Nf(n){return typeof n=="number"&&n==T(n)}function Ze(n){return typeof n=="number"&&n>-1&&n%1==0&&n<=Kn}function D(n){var t=typeof n;return n!=null&&(t=="object"||t=="function")}function N(n){return n!=null&&typeof n=="object"}var Gf=ji?rn(ji):ta;function kh(n,t){return n===t||Dr(n,t,ti(t))}function jh(n,t,e){return e=typeof e=="function"?e:o,Dr(n,t,ti(t),e)}function ng(n){return Hf(n)&&n!=+n}function tg(n){if(Da(n))throw new S(il);return Wu(n)}function eg(n){return n===null}function rg(n){return n==null}function Hf(n){return typeof n=="number"||N(n)&&J(n)==Bt}function kt(n){if(!N(n)||J(n)!=Pn)return!1;var t=xe(n);if(t===null)return!0;var e=B.call(t,"constructor")&&t.constructor;return typeof e=="function"&&e instanceof e&&pe.call(e)==jo}var hi=nu?rn(nu):ea;function ig(n){return Nf(n)&&n>=-Kn&&n<=Kn}var qf=tu?rn(tu):ra;function Ye(n){return typeof n=="string"||!E(n)&&N(n)&&J(n)==Ft}function fn(n){return typeof n=="symbol"||N(n)&&J(n)==fe}var Ct=eu?rn(eu):ia;function ug(n){return n===o}function fg(n){return N(n)&&X(n)==Mt}function lg(n){return N(n)&&J(n)==Il}var og=Ue(Gr),sg=Ue(function(n,t){return n<=t});function Kf(n){if(!n)return[];if(j(n))return Ye(n)?Rn(n):k(n);if(Nt&&n[Nt])return Ho(n[Nt]());var t=X(n),e=t==xn?yr:t==An?he:mt;return e(n)}function Gn(n){if(!n)return n===0?n:0;if(n=wn(n),n===nt||n===-nt){var t=n<0?-1:1;return t*gl}return n===n?n:0}function T(n){var t=Gn(n),e=t%1;return t===t?e?t-e:t:0}function $f(n){return n?ut(T(n),0,yn):0}function wn(n){if(typeof n=="number")return n;if(fn(n))return ee;if(D(n)){var t=typeof n.valueOf=="function"?n.valueOf():n;n=D(t)?t+"":t}if(typeof n!="string")return n===0?n:+n;n=ou(n);var e=Kl.test(n);return e||zl.test(n)?Eo(n.slice(2),e?2:8):ql.test(n)?ee:+n}function zf(n){return mn(n,nn(n))}function ag(n){return n?ut(T(n),-Kn,Kn):n===0?n:0}function P(n){return n==null?"":un(n)}var cg=Tt(function(n,t){if(Qt(t)||j(t)){mn(t,$(t),n);return}for(var e in t)B.call(t,e)&&$t(n,e,t[e])}),Zf=Tt(function(n,t){mn(t,nn(t),n)}),Xe=Tt(function(n,t,e,r){mn(t,nn(t),n,r)}),hg=Tt(function(n,t,e,r){mn(t,$(t),n,r)}),gg=Un(Br);function _g(n,t){var e=Et(n);return t==null?e:Su(e,t)}var pg=y(function(n,t){n=b(n);var e=-1,r=t.length,i=r>2?t[2]:o;for(i&&Q(t[0],t[1],i)&&(r=1);++e1),f}),mn(n,jr(n),e),r&&(e=pn(e,qn|Ii|at,La));for(var i=t.length;i--;)zr(e,t[i]);return e});function Bg(n,t){return Xf(n,ze(A(t)))}var bg=Un(function(n,t){return n==null?{}:la(n,t)});function Xf(n,t){if(n==null)return{};var e=U(jr(n),function(r){return[r]});return t=A(t),Du(n,e,function(r,i){return t(r,i[0])})}function Fg(n,t,e){t=Qn(t,n);var r=-1,i=t.length;for(i||(i=1,n=o);++rt){var r=n;n=t,t=r}if(e||n%1||t%1){var i=xu();return Y(n+i*(t-n+So("1e-"+((i+"").length-1))),t)}return qr(n,t)}var Zg=Lt(function(n,t,e){return t=t.toLowerCase(),n+(e?Vf(t):t)});function Vf(n){return pi(P(n).toLowerCase())}function kf(n){return n=P(n),n&&n.replace(Yl,Mo).replace(ho,"")}function Yg(n,t,e){n=P(n),t=un(t);var r=n.length;e=e===o?r:ut(T(e),0,r);var i=e;return e-=t.length,e>=0&&n.slice(e,i)==t}function Xg(n){return n=P(n),n&&yl.test(n)?n.replace(Ci,Uo):n}function Jg(n){return n=P(n),n&&Bl.test(n)?n.replace(ar,"\\$&"):n}var Qg=Lt(function(n,t,e){return n+(e?"-":"")+t.toLowerCase()}),Vg=Lt(function(n,t,e){return n+(e?" ":"")+t.toLowerCase()}),kg=nf("toLowerCase");function jg(n,t,e){n=P(n),t=T(t);var r=t?xt(n):0;if(!t||r>=t)return n;var i=(t-r)/2;return Me(Se(i),e)+n+Me(Ie(i),e)}function n_(n,t,e){n=P(n),t=T(t);var r=t?xt(n):0;return t&&r>>0,e?(n=P(n),n&&(typeof t=="string"||t!=null&&!hi(t))&&(t=un(t),!t&&wt(n))?Vn(Rn(n),0,e):n.split(t,e)):[]}var l_=Lt(function(n,t,e){return n+(e?" ":"")+pi(t)});function o_(n,t,e){return n=P(n),e=e==null?0:ut(T(e),0,n.length),t=un(t),n.slice(e,e+t.length)==t}function s_(n,t,e){var r=u.templateSettings;e&&Q(n,t,e)&&(t=o),n=P(n),t=Xe({},t,r,of);var i=Xe({},t.imports,r.imports,of),f=$(i),l=Lr(i,f),s,c,_=0,p=t.interpolate||le,v="__p += '",d=Cr((t.escape||le).source+"|"+p.source+"|"+(p===mi?Hl:le).source+"|"+(t.evaluate||le).source+"|$","g"),x="//# sourceURL="+(B.call(t,"sourceURL")?(t.sourceURL+"").replace(/\s/g," "):"lodash.templateSources["+ ++wo+"]")+` +`;n.replace(d,function(I,C,O,ln,V,on){return O||(O=ln),v+=n.slice(_,on).replace(Xl,Do),C&&(s=!0,v+=`' + +__e(`+C+`) + +'`),V&&(c=!0,v+=`'; +`+V+`; +__p += '`),O&&(v+=`' + +((__t = (`+O+`)) == null ? '' : __t) + +'`),_=on+I.length,I}),v+=`'; +`;var R=B.call(t,"variable")&&t.variable;if(!R)v=`with (obj) { +`+v+` +} +`;else if(Nl.test(R))throw new S(ul);v=(c?v.replace(Sl,""):v).replace(El,"$1").replace(Tl,"$1;"),v="function("+(R||"obj")+`) { +`+(R?"":`obj || (obj = {}); +`)+"var __t, __p = ''"+(s?", __e = _.escape":"")+(c?`, __j = Array.prototype.join; +function print() { __p += __j.call(arguments, '') } +`:`; +`)+v+`return __p +}`;var L=nl(function(){return W(f,x+"return "+v).apply(o,l)});if(L.source=v,ci(L))throw L;return L}function a_(n){return P(n).toLowerCase()}function c_(n){return P(n).toUpperCase()}function h_(n,t,e){if(n=P(n),n&&(e||t===o))return ou(n);if(!n||!(t=un(t)))return n;var r=Rn(n),i=Rn(t),f=su(r,i),l=au(r,i)+1;return Vn(r,f,l).join("")}function g_(n,t,e){if(n=P(n),n&&(e||t===o))return n.slice(0,hu(n)+1);if(!n||!(t=un(t)))return n;var r=Rn(n),i=au(r,Rn(t))+1;return Vn(r,0,i).join("")}function __(n,t,e){if(n=P(n),n&&(e||t===o))return n.replace(cr,"");if(!n||!(t=un(t)))return n;var r=Rn(n),i=su(r,Rn(t));return Vn(r,i).join("")}function p_(n,t){var e=ll,r=ol;if(D(t)){var i="separator"in t?t.separator:i;e="length"in t?T(t.length):e,r="omission"in t?un(t.omission):r}n=P(n);var f=n.length;if(wt(n)){var l=Rn(n);f=l.length}if(e>=f)return n;var s=e-xt(r);if(s<1)return r;var c=l?Vn(l,0,s).join(""):n.slice(0,s);if(i===o)return c+r;if(l&&(s+=c.length-s),hi(i)){if(n.slice(s).search(i)){var _,p=c;for(i.global||(i=Cr(i.source,P(Oi.exec(i))+"g")),i.lastIndex=0;_=i.exec(p);)var v=_.index;c=c.slice(0,v===o?s:v)}}else if(n.indexOf(un(i),s)!=s){var d=c.lastIndexOf(i);d>-1&&(c=c.slice(0,d))}return c+r}function v_(n){return n=P(n),n&&Ll.test(n)?n.replace(yi,zo):n}var d_=Lt(function(n,t,e){return n+(e?" ":"")+t.toUpperCase()}),pi=nf("toUpperCase");function jf(n,t,e){return n=P(n),t=e?o:t,t===o?Go(n)?Xo(n):Wo(n):n.match(t)||[]}var nl=y(function(n,t){try{return en(n,o,t)}catch(e){return ci(e)?e:new S(e)}}),w_=Un(function(n,t){return hn(t,function(e){e=On(e),Fn(n,e,si(n[e],n))}),n});function x_(n){var t=n==null?0:n.length,e=A();return n=t?U(n,function(r){if(typeof r[1]!="function")throw new gn(sn);return[e(r[0]),r[1]]}):[],y(function(r){for(var i=-1;++iKn)return[];var e=yn,r=Y(n,yn);t=A(t),n-=yn;for(var i=Tr(r,t);++e0||t<0)?new m(e):(n<0?e=e.takeRight(-n):n&&(e=e.drop(n)),t!==o&&(t=T(t),e=t<0?e.dropRight(-t):e.take(t-n)),e)},m.prototype.takeRightWhile=function(n){return this.reverse().takeWhile(n).reverse()},m.prototype.toArray=function(){return this.take(yn)},Cn(m.prototype,function(n,t){var e=/^(?:filter|find|map|reject)|While$/.test(t),r=/^(?:head|last)$/.test(t),i=u[r?"take"+(t=="last"?"Right":""):t],f=r||/^find/.test(t);i&&(u.prototype[t]=function(){var l=this.__wrapped__,s=r?[1]:arguments,c=l instanceof m,_=s[0],p=c||E(l),v=function(C){var O=i.apply(u,zn([C],s));return r&&d?O[0]:O};p&&e&&typeof _=="function"&&_.length!=1&&(c=p=!1);var d=this.__chain__,x=!!this.__actions__.length,R=f&&!d,L=c&&!x;if(!f&&p){l=L?l:new m(this);var I=n.apply(l,s);return I.__actions__.push({func:He,args:[v],thisArg:o}),new _n(I,d)}return R&&L?n.apply(this,s):(I=this.thru(v),R?r?I.value()[0]:I.value():I)})}),hn(["pop","push","shift","sort","splice","unshift"],function(n){var t=ge[n],e=/^(?:push|sort|unshift)$/.test(n)?"tap":"thru",r=/^(?:pop|shift)$/.test(n);u.prototype[n]=function(){var i=arguments;if(r&&!this.__chain__){var f=this.value();return t.apply(E(f)?f:[],i)}return this[e](function(l){return t.apply(E(l)?l:[],i)})}}),Cn(m.prototype,function(n,t){var e=u[t];if(e){var r=e.name+"";B.call(St,r)||(St[r]=[]),St[r].push({name:t,func:e})}}),St[be(o,jn).name]=[{name:"wrapper",func:o}],m.prototype.clone=vs,m.prototype.reverse=ds,m.prototype.value=ws,u.prototype.at=Yc,u.prototype.chain=Xc,u.prototype.commit=Jc,u.prototype.next=Qc,u.prototype.plant=kc,u.prototype.reverse=jc,u.prototype.toJSON=u.prototype.valueOf=u.prototype.value=nh,u.prototype.first=u.prototype.head,Nt&&(u.prototype[Nt]=Vc),u},At=Jo();tt?((tt.exports=At)._=At,dr._=At):z._=At}).call(jt)})(Je,Je.exports);var ip=Je.exports;const fp=rp(ip);export{fp as _}; diff --git a/src/main/resources/static/assets/repository-CNj60vu0.js b/src/main/resources/static/assets/repository-CNj60vu0.js new file mode 100644 index 00000000..6ba7fac7 --- /dev/null +++ b/src/main/resources/static/assets/repository-CNj60vu0.js @@ -0,0 +1 @@ +import{s}from"./request-BD-3QCnG.js";const n=e=>s.get(`/oss/v1/repositories/${e}/list`);function i(e,t){return s.delete(`/oss/v1/repositories/${e}/delete/${t}`)}function p(e,t){return s.post(`/oss/v1/repositories/${e}/create`,t)}const a=(e,t)=>s.get(`/oss/v1/repositories/${e}/detail/${t}`),u=(e,t)=>s.put(`/oss/v1/repositories/${e}/update`,t);function c(e,t){return s.delete(`/oss/v1/components/${e}/delete/${t}`)}const $=(e,t)=>s.get(`/oss/v1/components/${e}/list/${t}`),d=(e,t,o)=>s.post(`/oss/v1/components/${e}/create/${t}`,o);export{n as a,c as b,d as c,i as d,$ as e,a as g,p as r,u}; diff --git a/src/main/resources/static/assets/repository-CdIWmRAQ.js b/src/main/resources/static/assets/repository-CdIWmRAQ.js new file mode 100644 index 00000000..a3ed4925 --- /dev/null +++ b/src/main/resources/static/assets/repository-CdIWmRAQ.js @@ -0,0 +1 @@ +import{s}from"./request-DSShymva.js";const n=e=>s.get(`/oss/v1/repositories/${e}/list`);function i(e,t){return s.delete(`/oss/v1/repositories/${e}/delete/${t}`)}function p(e,t){return s.post(`/oss/v1/repositories/${e}/create`,t)}const a=(e,t)=>s.get(`/oss/v1/repositories/${e}/detail/${t}`),u=(e,t)=>s.put(`/oss/v1/repositories/${e}/update`,t);function c(e,t){return s.delete(`/oss/v1/components/${e}/delete/${t}`)}const $=(e,t)=>s.get(`/oss/v1/components/${e}/list/${t}`),d=(e,t,o)=>s.post(`/oss/v1/components/${e}/create/${t}`,o);export{n as a,c as b,d as c,i as d,$ as e,a as g,p as r,u}; diff --git a/src/main/resources/static/assets/repository-DkJ-R22y.js b/src/main/resources/static/assets/repository-DkJ-R22y.js new file mode 100644 index 00000000..ed86b41c --- /dev/null +++ b/src/main/resources/static/assets/repository-DkJ-R22y.js @@ -0,0 +1 @@ +import{s}from"./request-D9joEmfF.js";const n=e=>s.get(`/oss/v1/repositories/${e}/list`);function i(e,t){return s.delete(`/oss/v1/repositories/${e}/delete/${t}`)}function p(e,t){return s.post(`/oss/v1/repositories/${e}/create`,t)}const a=(e,t)=>s.get(`/oss/v1/repositories/${e}/detail/${t}`),u=(e,t)=>s.put(`/oss/v1/repositories/${e}/update`,t);function c(e,t){return s.delete(`/oss/v1/components/${e}/delete/${t}`)}const $=(e,t)=>s.get(`/oss/v1/components/${e}/list/${t}`),d=(e,t,o)=>s.post(`/oss/v1/components/${e}/create/${t}`,o);export{n as a,c as b,d as c,i as d,$ as e,a as g,p as r,u}; diff --git a/src/main/resources/static/assets/repository-XiwfojAe.js b/src/main/resources/static/assets/repository-XiwfojAe.js new file mode 100644 index 00000000..9299e280 --- /dev/null +++ b/src/main/resources/static/assets/repository-XiwfojAe.js @@ -0,0 +1 @@ +import{s}from"./request-jyImEBot.js";const n=e=>s.get(`/oss/v1/repositories/${e}/list`);function i(e,t){return s.delete(`/oss/v1/repositories/${e}/delete/${t}`)}function p(e,t){return s.post(`/oss/v1/repositories/${e}/create`,t)}const a=(e,t)=>s.get(`/oss/v1/repositories/${e}/detail/${t}`),u=(e,t)=>s.put(`/oss/v1/repositories/${e}/update`,t);function c(e,t){return s.delete(`/oss/v1/components/${e}/delete/${t}`)}const $=(e,t)=>s.get(`/oss/v1/components/${e}/list/${t}`),d=(e,t,o)=>s.post(`/oss/v1/components/${e}/create/${t}`,o);export{n as a,c as b,d as c,i as d,$ as e,a as g,p as r,u}; diff --git a/src/main/resources/static/assets/request-BD-3QCnG.js b/src/main/resources/static/assets/request-BD-3QCnG.js new file mode 100644 index 00000000..8b3b3791 --- /dev/null +++ b/src/main/resources/static/assets/request-BD-3QCnG.js @@ -0,0 +1 @@ +import{f as m,L as f,K as I,q as P}from"./index-8PPGy_cS.js";const h=I(),l=m(),p=f.create({baseURL:h,timeout:3e5}),c=e=>{const t=String(e??"").trim();return["undefined","null"].includes(t.toLowerCase())?"":t},j=e=>{if(typeof document>"u")return"";const t=`${e}=`,s=document.cookie.split(";").map(n=>n.trim()).find(n=>n.startsWith(t));return s?s.slice(t.length):""},k=()=>{var i,r,u,d;let e;try{e=P()}catch{return{}}const t=c(j("Authorization")||e.accessToken),s=c(((i=e.workspaceInfo)==null?void 0:i.id)??((r=e.workspaceInfo)==null?void 0:r.Id)),n=c(((u=e.projectInfo)==null?void 0:u.id)??((d=e.projectInfo)==null?void 0:d.Id)),o=c(e.getNsId()),a={};return t&&(a.Authorization=t.toLowerCase().startsWith("bearer ")?`Bearer ${t.slice(7).trim()}`:`Bearer ${t}`),s&&(a["X-MCMP-Workspace-ID"]=s),n&&(a["X-MCMP-Project-ID"]=n),o&&(a["X-MCMP-Namespace-ID"]=o),a};p.interceptors.request.use(e=>{const t=k();return Object.entries(t).forEach(([s,n])=>{var o;typeof((o=e.headers)==null?void 0:o.set)=="function"?e.headers.set(s,n):e.headers[s]=n}),e},e=>(console.warn("API request setup failed",(e==null?void 0:e.message)||"Unknown error"),Promise.reject(e)));p.interceptors.response.use(e=>{const t=e.data;return t.code===200?t:(l.error(t.detail),Promise.reject(new Error(t.message||"Error")))},e=>{var s;const t=e.response;return console.warn("API request failed",{url:(s=e==null?void 0:e.config)==null?void 0:s.url,status:t==null?void 0:t.status,message:e==null?void 0:e.message}),(t==null?void 0:t.status)===404&&l.error("API Call Fail :: Code 404"),f.isCancel(e),Promise.reject(e)});export{k as g,p as s}; diff --git a/src/main/resources/static/assets/request-D9joEmfF.js b/src/main/resources/static/assets/request-D9joEmfF.js new file mode 100644 index 00000000..69934709 --- /dev/null +++ b/src/main/resources/static/assets/request-D9joEmfF.js @@ -0,0 +1 @@ +import{f as m,L as f,K as I,q as P}from"./index-BKFNv1Gc.js";const h=I(),l=m(),p=f.create({baseURL:h,timeout:3e5}),c=e=>{const t=String(e??"").trim();return["undefined","null"].includes(t.toLowerCase())?"":t},j=e=>{if(typeof document>"u")return"";const t=`${e}=`,s=document.cookie.split(";").map(n=>n.trim()).find(n=>n.startsWith(t));return s?s.slice(t.length):""},k=()=>{var i,r,u,d;let e;try{e=P()}catch{return{}}const t=c(j("Authorization")||e.accessToken),s=c(((i=e.workspaceInfo)==null?void 0:i.id)??((r=e.workspaceInfo)==null?void 0:r.Id)),n=c(((u=e.projectInfo)==null?void 0:u.id)??((d=e.projectInfo)==null?void 0:d.Id)),o=c(e.getNsId()),a={};return t&&(a.Authorization=t.toLowerCase().startsWith("bearer ")?`Bearer ${t.slice(7).trim()}`:`Bearer ${t}`),s&&(a["X-MCMP-Workspace-ID"]=s),n&&(a["X-MCMP-Project-ID"]=n),o&&(a["X-MCMP-Namespace-ID"]=o),a};p.interceptors.request.use(e=>{const t=k();return Object.entries(t).forEach(([s,n])=>{var o;typeof((o=e.headers)==null?void 0:o.set)=="function"?e.headers.set(s,n):e.headers[s]=n}),e},e=>(console.warn("API request setup failed",(e==null?void 0:e.message)||"Unknown error"),Promise.reject(e)));p.interceptors.response.use(e=>{const t=e.data;return t.code===200?t:(l.error(t.detail),Promise.reject(new Error(t.message||"Error")))},e=>{var s;const t=e.response;return console.warn("API request failed",{url:(s=e==null?void 0:e.config)==null?void 0:s.url,status:t==null?void 0:t.status,message:e==null?void 0:e.message}),(t==null?void 0:t.status)===404&&l.error("API Call Fail :: Code 404"),f.isCancel(e),Promise.reject(e)});export{k as g,p as s}; diff --git a/src/main/resources/static/assets/request-DSShymva.js b/src/main/resources/static/assets/request-DSShymva.js new file mode 100644 index 00000000..4b060bb8 --- /dev/null +++ b/src/main/resources/static/assets/request-DSShymva.js @@ -0,0 +1 @@ +import{f as m,L as f,K as I,q as P}from"./index-DKle5_5b.js";const h=I(),l=m(),p=f.create({baseURL:h,timeout:3e5}),c=e=>{const t=String(e??"").trim();return["undefined","null"].includes(t.toLowerCase())?"":t},j=e=>{if(typeof document>"u")return"";const t=`${e}=`,s=document.cookie.split(";").map(n=>n.trim()).find(n=>n.startsWith(t));return s?s.slice(t.length):""},k=()=>{var i,r,u,d;let e;try{e=P()}catch{return{}}const t=c(j("Authorization")||e.accessToken),s=c(((i=e.workspaceInfo)==null?void 0:i.id)??((r=e.workspaceInfo)==null?void 0:r.Id)),n=c(((u=e.projectInfo)==null?void 0:u.id)??((d=e.projectInfo)==null?void 0:d.Id)),o=c(e.getNsId()),a={};return t&&(a.Authorization=t.toLowerCase().startsWith("bearer ")?`Bearer ${t.slice(7).trim()}`:`Bearer ${t}`),s&&(a["X-MCMP-Workspace-ID"]=s),n&&(a["X-MCMP-Project-ID"]=n),o&&(a["X-MCMP-Namespace-ID"]=o),a};p.interceptors.request.use(e=>{const t=k();return Object.entries(t).forEach(([s,n])=>{var o;typeof((o=e.headers)==null?void 0:o.set)=="function"?e.headers.set(s,n):e.headers[s]=n}),e},e=>(console.warn("API request setup failed",(e==null?void 0:e.message)||"Unknown error"),Promise.reject(e)));p.interceptors.response.use(e=>{const t=e.data;return t.code===200?t:(l.error(t.detail),Promise.reject(new Error(t.message||"Error")))},e=>{var s;const t=e.response;return console.warn("API request failed",{url:(s=e==null?void 0:e.config)==null?void 0:s.url,status:t==null?void 0:t.status,message:e==null?void 0:e.message}),(t==null?void 0:t.status)===404&&l.error("API Call Fail :: Code 404"),f.isCancel(e),Promise.reject(e)});export{k as g,p as s}; diff --git a/src/main/resources/static/assets/request-jyImEBot.js b/src/main/resources/static/assets/request-jyImEBot.js new file mode 100644 index 00000000..0eddcd05 --- /dev/null +++ b/src/main/resources/static/assets/request-jyImEBot.js @@ -0,0 +1 @@ +import{f as m,L as f,K as I,q as P}from"./index-DU977P1k.js";const h=I(),l=m(),p=f.create({baseURL:h,timeout:3e5}),c=e=>{const t=String(e??"").trim();return["undefined","null"].includes(t.toLowerCase())?"":t},j=e=>{if(typeof document>"u")return"";const t=`${e}=`,s=document.cookie.split(";").map(n=>n.trim()).find(n=>n.startsWith(t));return s?s.slice(t.length):""},k=()=>{var i,r,u,d;let e;try{e=P()}catch{return{}}const t=c(j("Authorization")||e.accessToken),s=c(((i=e.workspaceInfo)==null?void 0:i.id)??((r=e.workspaceInfo)==null?void 0:r.Id)),n=c(((u=e.projectInfo)==null?void 0:u.id)??((d=e.projectInfo)==null?void 0:d.Id)),o=c(e.getNsId()),a={};return t&&(a.Authorization=t.toLowerCase().startsWith("bearer ")?`Bearer ${t.slice(7).trim()}`:`Bearer ${t}`),s&&(a["X-MCMP-Workspace-ID"]=s),n&&(a["X-MCMP-Project-ID"]=n),o&&(a["X-MCMP-Namespace-ID"]=o),a};p.interceptors.request.use(e=>{const t=k();return Object.entries(t).forEach(([s,n])=>{var o;typeof((o=e.headers)==null?void 0:o.set)=="function"?e.headers.set(s,n):e.headers[s]=n}),e},e=>(console.warn("API request setup failed",(e==null?void 0:e.message)||"Unknown error"),Promise.reject(e)));p.interceptors.response.use(e=>{const t=e.data;return t.code===200?t:(l.error(t.detail),Promise.reject(new Error(t.message||"Error")))},e=>{var s;const t=e.response;return console.warn("API request failed",{url:(s=e==null?void 0:e.config)==null?void 0:s.url,status:t==null?void 0:t.status,message:e==null?void 0:e.message}),(t==null?void 0:t.status)===404&&l.error("API Call Fail :: Code 404"),f.isCancel(e),Promise.reject(e)});export{k as g,p as s}; diff --git a/src/main/resources/static/assets/softwareCatalog-DbmZz9hR.js b/src/main/resources/static/assets/softwareCatalog-DbmZz9hR.js new file mode 100644 index 00000000..ca87d0ee --- /dev/null +++ b/src/main/resources/static/assets/softwareCatalog-DbmZz9hR.js @@ -0,0 +1 @@ +import{s as e,g as s}from"./request-DSShymva.js";import{K as i,L as r}from"./index-DKle5_5b.js";const l=i().replace(/\/$/,""),p=[90,30,7],g=t=>{const a=String((t==null?void 0:t.detail)||"");return a.includes("No static resource")&&a.includes("/policy-recommendation/analyze")},m=t=>e.get(`/catalog/software?name=${t}`),y=t=>e.get(`/catalog/software/${t}`),$=t=>e.get(`/search/dockerhub/${t}`),k=t=>e.get(`/search/artifacthub/${t}`),h=t=>e.post("/applications/vm/deploy",t),b=t=>e.post("/applications/action",t),v=t=>e.post("/applications/k8s/deploy",t),A=t=>{const a=t.targetType==="VM"?"/applications/vm/object-storage/smoke-check":"/applications/k8s/object-storage/smoke-check",{targetType:n,...o}=t;return e.post(a,o)},C=t=>e.get(`/applications/object-storages?namespace=${encodeURIComponent(t)}`),S=t=>e.get(`/applications/k8s/storage-classes?namespace=${t.namespace}&clusterName=${t.clusterName}`),w=t=>e.get(`/applications/vm/check?namespace=${t.namespace}&mciId=${t.mciName}&vmId=${t.vmName}&catalogId=${t.catalogId}`),L=t=>e.get(`/applications/k8s/check?namespace=${t.namespace}&clusterName=${t.clusterName}&catalogId=${t.catalogId}`),P=t=>e.post("/applications/k8s/ingress/check",t),N=t=>e.get(`/ape/log/${t}`);function j(t){return e.post("/catalog/software",t)}function z(t){return e.put(`/catalog/software/${t.id}`,t)}function I(t){return e.delete(`/catalog/software/${t}`)}function R(t){return e.get("/api/applications/status/groups",{params:t?{namespace:t}:void 0})}function O(t){return e.get(`/api/applications/integrated/catalog/${t}`)}function x(t){return e.post("/catalog/application/category",t)}function B(t){return e.post("/catalog/application/package",t)}function H(t){const a={target:t.target,applicationName:t.packageName,availableOnly:t.availableOnly};return e.post("/catalog/application/package/version",a)}function T(t){return e.get(`/search/dockerhub/tag/${t.path}`)}function E(t){return e.get(`/search/artifacthub/version/${t.kind}/${t.repository}/${t.packageName}`)}function F(t){return e.post("/catalog/docker/register",t)}function K(t){return e.post("/catalog/helm/register",t)}function q(t){return e.post("/catalog/rating/overall",t)}function U(t){return e.get(`/api/applications/integrated/deployment/${t}`)}function u(t,a=14){return e.post(`/api/applications/${t}/operation-profile/analyze?days=${a}`)}async function V(t){var a;try{const o=(await r.post(`${l}/api/applications/${t}/policy-recommendation/analyze`,void 0,{headers:s()})).data;return(o==null?void 0:o.code)===200?o:g(o)?c(t):Promise.reject(new Error((o==null?void 0:o.detail)||(o==null?void 0:o.message)||"Failed to analyze policy recommendation"))}catch(n){return((a=n==null?void 0:n.response)==null?void 0:a.status)===404?c(t):Promise.reject(n)}}async function c(t){const a=[];for(const n of p){const o=await u(t,n);a.push(o.data)}return{code:200,data:a,detail:null,message:"OK"}}function M(t,a){const n=a?`?days=${a}`:"";return e.get(`/api/applications/${t}/operation-profile${n}`)}function _(t){return e.get(`/api/applications/${t}/policy-recommendation`)}function W(t){return e.get(`/catalog/selectbox/options?type=${t}`)}export{h as A,v as B,P as C,w as D,L as E,A as F,k as a,T as b,E as c,j as d,y as e,B as f,x as g,H as h,F as i,K as j,O as k,I as l,m,W as n,q as o,R as p,U as q,b as r,$ as s,M as t,z as u,_ as v,V as w,N as x,S as y,C as z}; diff --git a/src/main/resources/static/assets/softwareCatalog-DfwfQXi9.js b/src/main/resources/static/assets/softwareCatalog-DfwfQXi9.js new file mode 100644 index 00000000..c2dbbd63 --- /dev/null +++ b/src/main/resources/static/assets/softwareCatalog-DfwfQXi9.js @@ -0,0 +1 @@ +import{s as e,g as c}from"./request-BD-3QCnG.js";import{K as i,L as r}from"./index-8PPGy_cS.js";const l=i().replace(/\/$/,""),p=[90,30,7],g=t=>{const a=String((t==null?void 0:t.detail)||"");return a.includes("No static resource")&&a.includes("/policy-recommendation/analyze")},m=t=>e.get(`/catalog/software?name=${t}`),y=t=>e.get(`/catalog/software/${t}`),k=t=>e.get(`/search/dockerhub/${t}`),$=t=>e.get(`/search/artifacthub/${t}`),h=t=>e.post("/applications/vm/deploy",t),b=t=>e.post("/applications/action",t),S=t=>e.post("/applications/k8s/deploy",t),v=t=>{const a=t.targetType==="VM"?"/applications/vm/object-storage/smoke-check":"/applications/k8s/object-storage/smoke-check",{targetType:n,...o}=t;return e.post(a,o)},w=t=>e.get(`/applications/object-storages?namespace=${encodeURIComponent(t)}`),A=t=>e.get(`/applications/k8s/storage-classes?namespace=${t.namespace}&clusterName=${t.clusterName}`),C=t=>e.get(`/applications/vm/check?namespace=${t.namespace}&mciId=${t.mciName}&vmId=${t.vmName}&catalogId=${t.catalogId}`),L=t=>e.get(`/applications/k8s/check?namespace=${t.namespace}&clusterName=${t.clusterName}&catalogId=${t.catalogId}`),P=t=>e.get(`/applications/k8s/ingress/tls-settings?${new URLSearchParams(t)}`),N=t=>e.post("/applications/k8s/ingress/check",t),j=t=>e.get(`/ape/log/${t}`);function z(t){return e.post("/catalog/software",t)}function I(t){return e.put(`/catalog/software/${t.id}`,t)}function R(t){return e.delete(`/catalog/software/${t}`)}function O(t){return e.get("/api/applications/status/groups",{params:t?{namespace:t}:void 0})}function T(t){return e.get(`/api/applications/integrated/catalog/${t}`)}function x(t){return e.post("/catalog/application/category",t)}function B(t){return e.post("/catalog/application/package",t)}function H(t){const a={target:t.target,applicationName:t.packageName,availableOnly:t.availableOnly};return e.post("/catalog/application/package/version",a)}function E(t){return e.get(`/search/dockerhub/tag/${t.path}`)}function F(t){return e.get(`/search/artifacthub/version/${t.kind}/${t.repository}/${t.packageName}`)}function K(t){return e.post("/catalog/docker/register",t)}function U(t){return e.post("/catalog/helm/register",t)}function q(t){return e.post("/catalog/rating/overall",t)}function V(t){return e.get(`/api/applications/integrated/deployment/${t}`)}function u(t,a=14){return e.post(`/api/applications/${t}/operation-profile/analyze?days=${a}`)}async function M(t){var a;try{const o=(await r.post(`${l}/api/applications/${t}/policy-recommendation/analyze`,void 0,{headers:c()})).data;return(o==null?void 0:o.code)===200?o:g(o)?s(t):Promise.reject(new Error((o==null?void 0:o.detail)||(o==null?void 0:o.message)||"Failed to analyze policy recommendation"))}catch(n){return((a=n==null?void 0:n.response)==null?void 0:a.status)===404?s(t):Promise.reject(n)}}async function s(t){const a=[];for(const n of p){const o=await u(t,n);a.push(o.data)}return{code:200,data:a,detail:null,message:"OK"}}function _(t,a){const n=a?`?days=${a}`:"";return e.get(`/api/applications/${t}/operation-profile${n}`)}function G(t){return e.get(`/api/applications/${t}/policy-recommendation`)}function W(t){return e.get(`/catalog/selectbox/options?type=${t}`)}export{h as A,S as B,N as C,C as D,L as E,v as F,P as G,$ as a,E as b,F as c,z as d,y as e,B as f,x as g,H as h,K as i,U as j,T as k,R as l,m,W as n,q as o,O as p,V as q,b as r,k as s,_ as t,I as u,G as v,M as w,j as x,A as y,w as z}; diff --git a/src/main/resources/static/assets/softwareCatalog-DuMGACG8.js b/src/main/resources/static/assets/softwareCatalog-DuMGACG8.js new file mode 100644 index 00000000..ede9a294 --- /dev/null +++ b/src/main/resources/static/assets/softwareCatalog-DuMGACG8.js @@ -0,0 +1 @@ +import{s as a,g as c}from"./request-D9joEmfF.js";import{K as i,L as r}from"./index-BKFNv1Gc.js";const p=i().replace(/\/$/,""),l=[90,30,7],g=t=>{const e=String((t==null?void 0:t.detail)||"");return e.includes("No static resource")&&e.includes("/policy-recommendation/analyze")},m=t=>a.get(`/catalog/software?name=${t}`),y=t=>a.get(`/catalog/software/${t}`),$=t=>a.get(`/search/dockerhub/${t}`),k=t=>a.get(`/search/artifacthub/${t}`),h=t=>a.post("/applications/vm/deploy",t),b=t=>a.post("/applications/action",t),C=t=>a.post("/applications/k8s/deploy",t),S=t=>{const e=t.targetType==="VM"?"/applications/vm/object-storage/smoke-check":"/applications/k8s/object-storage/smoke-check",{targetType:n,...o}=t;return a.post(e,o)},v=t=>a.get(`/applications/object-storages?namespace=${encodeURIComponent(t)}`),w=t=>a.get(`/applications/k8s/storage-classes?namespace=${t.namespace}&clusterName=${t.clusterName}`),A=t=>a.get(`/applications/vm/check?namespace=${t.namespace}&mciId=${t.mciName}&vmId=${t.vmName}&catalogId=${t.catalogId}`),P=t=>a.get(`/applications/k8s/check?namespace=${t.namespace}&clusterName=${t.clusterName}&catalogId=${t.catalogId}`),L=t=>a.post("/applications/k8s/ingress/preparations",t),I=(t,e)=>a.get(`/applications/k8s/ingress/preparations/${encodeURIComponent(e)}?${new URLSearchParams({namespace:t})}`),N=t=>a.post("/applications/k8s/ingress/check",t),j=t=>a.get(`/ape/log/${t}`);function z(t){return a.post("/catalog/software",t)}function R(t){return a.put(`/catalog/software/${t.id}`,t)}function H(t){return a.delete(`/catalog/software/${t}`)}function O(t){return a.get("/api/applications/status/groups",{params:t?{namespace:t}:void 0})}function x(t){return a.get(`/api/applications/integrated/catalog/${t}`)}function B(t){return a.post("/catalog/application/category",t)}function T(t){return a.post("/catalog/application/package",t)}function U(t){const e={target:t.target,applicationName:t.packageName,availableOnly:t.availableOnly};return a.post("/catalog/application/package/version",e)}function E(t){return a.get(`/search/dockerhub/tag/${t.path}`)}function F(t){return a.get(`/search/artifacthub/version/${t.kind}/${t.repository}/${t.packageName}`)}function K(t){return a.post("/catalog/docker/register",t)}function q(t){return a.post("/catalog/helm/register",t)}function V(t){return a.post("/catalog/rating/overall",t)}function M(t){return a.get(`/api/applications/integrated/deployment/${t}`)}function u(t,e=14){return a.post(`/api/applications/${t}/operation-profile/analyze?days=${e}`)}async function _(t){var e;try{const o=(await r.post(`${p}/api/applications/${t}/policy-recommendation/analyze`,void 0,{headers:c()})).data;return(o==null?void 0:o.code)===200?o:g(o)?s(t):Promise.reject(new Error((o==null?void 0:o.detail)||(o==null?void 0:o.message)||"Failed to analyze policy recommendation"))}catch(n){return((e=n==null?void 0:n.response)==null?void 0:e.status)===404?s(t):Promise.reject(n)}}async function s(t){const e=[];for(const n of l){const o=await u(t,n);e.push(o.data)}return{code:200,data:e,detail:null,message:"OK"}}function G(t,e){const n=e?`?days=${e}`:"";return a.get(`/api/applications/${t}/operation-profile${n}`)}function W(t){return a.get(`/api/applications/${t}/policy-recommendation`)}function J(t){return a.get(`/catalog/selectbox/options?type=${t}`)}export{h as A,L as B,I as C,C as D,N as E,A as F,P as G,S as H,k as a,E as b,F as c,z as d,y as e,T as f,B as g,U as h,K as i,q as j,x as k,H as l,m,J as n,V as o,O as p,M as q,b as r,$ as s,G as t,R as u,W as v,_ as w,j as x,w as y,v as z}; diff --git a/src/main/resources/static/assets/softwareCatalog-VAKfe9v1.js b/src/main/resources/static/assets/softwareCatalog-VAKfe9v1.js new file mode 100644 index 00000000..338b909f --- /dev/null +++ b/src/main/resources/static/assets/softwareCatalog-VAKfe9v1.js @@ -0,0 +1 @@ +import{s as e,g as s}from"./request-jyImEBot.js";import{K as i,L as r}from"./index-DU977P1k.js";const l=i().replace(/\/$/,""),p=[90,30,7],g=t=>{const a=String((t==null?void 0:t.detail)||"");return a.includes("No static resource")&&a.includes("/policy-recommendation/analyze")},m=t=>e.get(`/catalog/software?name=${t}`),y=t=>e.get(`/catalog/software/${t}`),$=t=>e.get(`/search/dockerhub/${t}`),k=t=>e.get(`/search/artifacthub/${t}`),h=t=>e.post("/applications/vm/deploy",t),b=t=>e.post("/applications/action",t),v=t=>e.post("/applications/k8s/deploy",t),A=t=>{const a=t.targetType==="VM"?"/applications/vm/object-storage/smoke-check":"/applications/k8s/object-storage/smoke-check",{targetType:n,...o}=t;return e.post(a,o)},C=t=>e.get(`/applications/object-storages?namespace=${encodeURIComponent(t)}`),S=t=>e.get(`/applications/k8s/storage-classes?namespace=${t.namespace}&clusterName=${t.clusterName}`),w=t=>e.get(`/applications/vm/check?namespace=${t.namespace}&mciId=${t.mciName}&vmId=${t.vmName}&catalogId=${t.catalogId}`),L=t=>e.get(`/applications/k8s/check?namespace=${t.namespace}&clusterName=${t.clusterName}&catalogId=${t.catalogId}`),P=t=>e.post("/applications/k8s/ingress/check",t),N=t=>e.get(`/ape/log/${t}`);function j(t){return e.post("/catalog/software",t)}function z(t){return e.put(`/catalog/software/${t.id}`,t)}function I(t){return e.delete(`/catalog/software/${t}`)}function R(t){return e.get("/api/applications/status/groups",{params:t?{namespace:t}:void 0})}function O(t){return e.get(`/api/applications/integrated/catalog/${t}`)}function x(t){return e.post("/catalog/application/category",t)}function B(t){return e.post("/catalog/application/package",t)}function H(t){const a={target:t.target,applicationName:t.packageName,availableOnly:t.availableOnly};return e.post("/catalog/application/package/version",a)}function T(t){return e.get(`/search/dockerhub/tag/${t.path}`)}function E(t){return e.get(`/search/artifacthub/version/${t.kind}/${t.repository}/${t.packageName}`)}function F(t){return e.post("/catalog/docker/register",t)}function K(t){return e.post("/catalog/helm/register",t)}function q(t){return e.post("/catalog/rating/overall",t)}function U(t){return e.get(`/api/applications/integrated/deployment/${t}`)}function u(t,a=14){return e.post(`/api/applications/${t}/operation-profile/analyze?days=${a}`)}async function V(t){var a;try{const o=(await r.post(`${l}/api/applications/${t}/policy-recommendation/analyze`,void 0,{headers:s()})).data;return(o==null?void 0:o.code)===200?o:g(o)?c(t):Promise.reject(new Error((o==null?void 0:o.detail)||(o==null?void 0:o.message)||"Failed to analyze policy recommendation"))}catch(n){return((a=n==null?void 0:n.response)==null?void 0:a.status)===404?c(t):Promise.reject(n)}}async function c(t){const a=[];for(const n of p){const o=await u(t,n);a.push(o.data)}return{code:200,data:a,detail:null,message:"OK"}}function M(t,a){const n=a?`?days=${a}`:"";return e.get(`/api/applications/${t}/operation-profile${n}`)}function _(t){return e.get(`/api/applications/${t}/policy-recommendation`)}function W(t){return e.get(`/catalog/selectbox/options?type=${t}`)}export{h as A,v as B,P as C,w as D,L as E,A as F,k as a,T as b,E as c,j as d,y as e,B as f,x as g,H as h,F as i,K as j,O as k,I as l,m,W as n,q as o,R as p,U as q,b as r,$ as s,M as t,z as u,_ as v,V as w,N as x,S as y,C as z}; diff --git a/src/main/resources/static/index.html b/src/main/resources/static/index.html index 6338755a..812de48d 100644 --- a/src/main/resources/static/index.html +++ b/src/main/resources/static/index.html @@ -5,8 +5,8 @@ App - - + +
diff --git a/src/test/java/kr/co/mcmp/ape/cbtumblebug/dto/NodeGroupCompatibilityTest.java b/src/test/java/kr/co/mcmp/ape/cbtumblebug/dto/NodeGroupCompatibilityTest.java new file mode 100644 index 00000000..5684eb43 --- /dev/null +++ b/src/test/java/kr/co/mcmp/ape/cbtumblebug/dto/NodeGroupCompatibilityTest.java @@ -0,0 +1,37 @@ +package kr.co.mcmp.ape.cbtumblebug.dto; + +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; +import static org.assertj.core.api.Assertions.assertThat; + +class NodeGroupCompatibilityTest { + private final ObjectMapper mapper = new ObjectMapper() + .disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES); + + @ParameterizedTest + @ValueSource(strings = {"nodeGroupId", "subGroupId"}) + void normalizesGroupForFrontendAndDeploymentResolver(String field) throws Exception { + VmAccessInfo vm = mapper.readValue("{\"id\":\"ng-aws-1\",\"" + field + + "\":\"ng-aws\",\"status\":\"Running\"}", VmAccessInfo.class); + assertThat(vm.getSubGroupId()).isEqualTo("ng-aws"); + assertThat(mapper.readTree(mapper.writeValueAsString(vm)).get("subGroupId").asText()) + .isEqualTo("ng-aws"); + } + + @ParameterizedTest + @ValueSource(booleans = {true, false}) + void readsAccessInfoInBothTumblebugFormats(boolean modern) throws Exception { + String json = modern + ? "{\"InfraId\":\"infra\",\"InfraNodeGroupAccessInfo\":[{\"NodeGroupId\":\"ng\",\"BastionNodeId\":\"b\",\"NodeAccessInfo\":[{\"nodeId\":\"vm\",\"privateKey\":\"test-key\"}]}]}" + : "{\"MciId\":\"infra\",\"MciSubGroupAccessInfo\":[{\"SubGroupId\":\"ng\",\"BastionVmId\":\"b\",\"MciVmAccessInfo\":[{\"vmId\":\"vm\",\"privateKey\":\"test-key\"}]}]}"; + MciAccessInfoDto result = mapper.readValue(json, MciAccessInfoDto.class); + assertThat(result.getMciId()).isEqualTo("infra"); + var group = result.getMciSubGroupAccessInfo().get(0); + assertThat(group.getSubGroupId()).isEqualTo("ng"); + assertThat(group.getBastionVmId()).isEqualTo("b"); + assertThat(group.getMciVmAccessInfo().get(0).getVmId()).isEqualTo("vm"); + assertThat(group.getMciVmAccessInfo().get(0).getPrivateKey()).isEqualTo("test-key"); + } +} diff --git a/src/test/java/kr/co/mcmp/softwarecatalog/application/controller/ApplicationIngressCheckControllerTest.java b/src/test/java/kr/co/mcmp/softwarecatalog/application/controller/ApplicationIngressCheckControllerTest.java new file mode 100644 index 00000000..099448f5 --- /dev/null +++ b/src/test/java/kr/co/mcmp/softwarecatalog/application/controller/ApplicationIngressCheckControllerTest.java @@ -0,0 +1,88 @@ +package kr.co.mcmp.softwarecatalog.application.controller; + +import static org.mockito.Mockito.*; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; + +import java.util.List; +import kr.co.mcmp.security.project.ProjectScopeAuthorizationService; +import kr.co.mcmp.softwarecatalog.application.dto.K8sIngressCheckResult; +import kr.co.mcmp.softwarecatalog.application.service.ApplicationOrchestrationService; +import kr.co.mcmp.softwarecatalog.kubernetes.service.KubernetesIngressPreflightService; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.web.server.ResponseStatusException; + +class ApplicationIngressCheckControllerTest { + private final ProjectScopeAuthorizationService scope = mock(ProjectScopeAuthorizationService.class); + private final KubernetesIngressPreflightService ingress = mock(KubernetesIngressPreflightService.class); + private final ApplicationOrchestrationService orchestration = mock(ApplicationOrchestrationService.class); + private final MockMvc mvc = MockMvcBuilders.standaloneSetup(new ApplicationController( + null, orchestration, null, null, null, scope, ingress)).build(); + + @Test void checksProjectAuthorizationBeforePreflightAndReturnsBlockingErrorsSeparately() throws Exception { + when(ingress.check(any())).thenReturn(new K8sIngressCheckResult(false, List.of("Host/Path conflict"), List.of())); + mvc.perform(post("/applications/k8s/ingress/check").contentType(MediaType.APPLICATION_JSON).content(""" + {"namespace":"project-a","clusterName":"cluster-a","catalogId":7, + "ingressEnabled":true,"ingressHost":"app.example.com","ingressPath":"/app"} + """)) + .andExpect(status().isOk()).andExpect(jsonPath("$.data.valid").value(false)) + .andExpect(jsonPath("$.data.errors[0]").value("Host/Path conflict")) + .andExpect(jsonPath("$.data.warnings").isEmpty()); + var order = inOrder(scope, ingress); + order.verify(scope).authorizeNamespace(any(), eq("project-a")); + order.verify(ingress).check(argThat(r -> "app.example.com".equals(r.getIngressHost()) && "/app".equals(r.getIngressPath()))); + verifyNoInteractions(orchestration); + } + + @ParameterizedTest @ValueSource(strings = { + "{}", "{\"namespace\":\"\",\"clusterName\":\"c\",\"catalogId\":1}", + "{\"namespace\":\"project-a\",\"clusterName\":\"\",\"catalogId\":1}", + "{\"namespace\":\"project-a\",\"clusterName\":\"c\",\"catalogId\":0}" + }) + void rejectsIncompleteTargetsBeforeAnyClusterLookup(String json) throws Exception { + mvc.perform(post("/applications/k8s/ingress/check").contentType(MediaType.APPLICATION_JSON).content(json)) + .andExpect(status().isBadRequest()); + verifyNoInteractions(ingress, orchestration); + } + + @Test void anotherProjectCannotUseThisEndpointToReadClusterRoutesOrSecrets() throws Exception { + when(scope.authorizeNamespace(any(), eq("other-project"))) + .thenThrow(new ResponseStatusException(HttpStatus.FORBIDDEN)); + mvc.perform(post("/applications/k8s/ingress/check").contentType(MediaType.APPLICATION_JSON) + .content("{\"namespace\":\"other-project\",\"clusterName\":\"c\",\"catalogId\":1}")) + .andExpect(status().isForbidden()); + verifyNoInteractions(ingress, orchestration); + } + + @Test void existingResourceCheckContractStaysBoolean() throws Exception { + when(orchestration.checkSpecForK8s("project-a", "c", 7L)).thenReturn(false); + mvc.perform(get("/applications/k8s/check").param("namespace", "project-a").param("clusterName", "c").param("catalogId", "7")) + .andExpect(status().isOk()).andExpect(jsonPath("$.data").value(false)); + verifyNoInteractions(ingress); + } + + @Test void tlsDiscoveryIsProjectScopedAndOnlyReturnsDomainHints() throws Exception { + when(ingress.tlsSettings("project-a", "c")).thenReturn(new kr.co.mcmp.softwarecatalog.application.dto.K8sIngressTlsSettings( + true, "cluster.jp-osa.containers.appdomain.cloud", List.of("*.company.com"), List.of())); + mvc.perform(get("/applications/k8s/ingress/tls-settings").param("namespace", "project-a").param("clusterName", "c")) + .andExpect(status().isOk()).andExpect(jsonPath("$.data.managedTls").value(true)) + .andExpect(jsonPath("$.data.customDomains[0]").value("*.company.com")) + .andExpect(jsonPath("$.data.secret").doesNotExist()); + var order = inOrder(scope, ingress); + order.verify(scope).authorizeNamespace(any(), eq("project-a")); + order.verify(ingress).tlsSettings("project-a", "c"); + } + + @Test void tlsDiscoveryCannotReadAnotherProject() throws Exception { + when(scope.authorizeNamespace(any(), eq("other-project"))).thenThrow(new ResponseStatusException(HttpStatus.FORBIDDEN)); + mvc.perform(get("/applications/k8s/ingress/tls-settings").param("namespace", "other-project").param("clusterName", "c")) + .andExpect(status().isForbidden()); + verifyNoInteractions(ingress); + } +} diff --git a/src/test/java/kr/co/mcmp/softwarecatalog/application/controller/ApplicationVmDeploymentControllerTest.java b/src/test/java/kr/co/mcmp/softwarecatalog/application/controller/ApplicationVmDeploymentControllerTest.java new file mode 100644 index 00000000..9f744a9e --- /dev/null +++ b/src/test/java/kr/co/mcmp/softwarecatalog/application/controller/ApplicationVmDeploymentControllerTest.java @@ -0,0 +1,86 @@ +package kr.co.mcmp.softwarecatalog.application.controller; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.ArgumentCaptor; +import org.springframework.http.MediaType; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; + +import kr.co.mcmp.security.project.ProjectScopeAuthorizationService; +import kr.co.mcmp.softwarecatalog.application.constants.DeploymentType; +import kr.co.mcmp.softwarecatalog.application.constants.VmDeploymentMode; +import kr.co.mcmp.softwarecatalog.application.dto.DeploymentRequest; +import kr.co.mcmp.softwarecatalog.application.model.DeploymentHistory; +import kr.co.mcmp.softwarecatalog.application.service.ApplicationOrchestrationService; + +class ApplicationVmDeploymentControllerTest { + + private ProjectScopeAuthorizationService scope; + private ApplicationOrchestrationService orchestration; + private MockMvc mvc; + + @BeforeEach + void setUp() { + scope = mock(ProjectScopeAuthorizationService.class); + orchestration = mock(ApplicationOrchestrationService.class); + when(orchestration.deployApplication(any())).thenReturn(DeploymentHistory.builder().build()); + mvc = MockMvcBuilders.standaloneSetup(new ApplicationController( + null, orchestration, null, null, null, scope, null)).build(); + } + + @Test + void acceptsLegacyVmRequestWithoutNodeGroup() throws Exception { + DeploymentRequest request = performAndCapture(""" + {"namespace":"project-a","mciId":"mci-a","vmIds":["vm-a"], + "catalogId":7,"vmDeploymentMode":"STANDALONE"} + """); + + assertThat(request.getDeploymentType()).isEqualTo(DeploymentType.VM); + assertThat(request.getVmIds()).containsExactly("vm-a"); + assertThat(request.getVmNodeGroupId()).isNull(); + } + + @Test + void passesNodeGroupWithOneVmForMembershipValidation() throws Exception { + DeploymentRequest request = performAndCapture(""" + {"namespace":"project-a","mciId":"mci-a","vmIds":["vm-a"], + "vmNodeGroupId":"group-a","catalogId":7,"vmDeploymentMode":"STANDALONE"} + """); + + assertThat(request.getVmIds()).containsExactly("vm-a"); + assertThat(request.getVmNodeGroupId()).isEqualTo("group-a"); + assertThat(request.getVmDeploymentMode()).isEqualTo(VmDeploymentMode.STANDALONE); + } + + @Test + void passesGroupOnlyRequestWithoutInventingVmIds() throws Exception { + DeploymentRequest request = performAndCapture(""" + {"namespace":"project-a","mciId":"mci-a","vmIds":[], + "vmNodeGroupId":"group-a","catalogId":7,"vmDeploymentMode":"STANDALONE"} + """); + + assertThat(request.getVmIds()).isEmpty(); + assertThat(request.getVmNodeGroupId()).isEqualTo("group-a"); + } + + private DeploymentRequest performAndCapture(String json) throws Exception { + mvc.perform(post("/applications/vm/deploy") + .contentType(MediaType.APPLICATION_JSON) + .content(json)) + .andExpect(status().isOk()); + + verify(scope).authorizeNamespace(any(), org.mockito.ArgumentMatchers.eq("project-a")); + ArgumentCaptor requestCaptor = ArgumentCaptor.forClass(DeploymentRequest.class); + verify(orchestration).deployApplication(requestCaptor.capture()); + return requestCaptor.getValue(); + } +} diff --git a/src/test/java/kr/co/mcmp/softwarecatalog/application/controller/K8sIngressPreparationControllerTest.java b/src/test/java/kr/co/mcmp/softwarecatalog/application/controller/K8sIngressPreparationControllerTest.java new file mode 100644 index 00000000..caf81c2e --- /dev/null +++ b/src/test/java/kr/co/mcmp/softwarecatalog/application/controller/K8sIngressPreparationControllerTest.java @@ -0,0 +1,39 @@ +package kr.co.mcmp.softwarecatalog.application.controller; + +import static org.mockito.Mockito.*; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; +import kr.co.mcmp.security.project.ProjectScopeAuthorizationService; +import kr.co.mcmp.softwarecatalog.kubernetes.service.K8sIngressPreparationJobs; +import org.junit.jupiter.api.Test; +import org.springframework.http.*; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.web.server.ResponseStatusException; + +class K8sIngressPreparationControllerTest { + final ProjectScopeAuthorizationService scope=mock(ProjectScopeAuthorizationService.class); + final K8sIngressPreparationJobs jobs=mock(K8sIngressPreparationJobs.class); + final org.springframework.test.web.servlet.MockMvc mvc=MockMvcBuilders.standaloneSetup(new K8sIngressPreparationController(scope,jobs)).build(); + static final String URL="/applications/k8s/ingress/preparations"; + static final String INPUT="{\"namespace\":\"project-a\",\"clusterName\":\"cluster-a\",\"catalogId\":7}"; + @Test void bothSubmissionAndPollingAuthorizeTheProjectFirst() throws Exception { + var status=new K8sIngressPreparationJobs.Status("job","project-a","cluster-a","RUNNING","Preparing"); + when(jobs.start(any())).thenReturn(status); when(jobs.get("project-a","job")).thenReturn(status); + mvc.perform(post(URL).contentType(MediaType.APPLICATION_JSON).content(INPUT)).andExpect(status().isOk()).andExpect(jsonPath("$.data.id").value("job")); + mvc.perform(get(URL+"/job").param("namespace","project-a")).andExpect(status().isOk()).andExpect(jsonPath("$.data.state").value("RUNNING")); + var order=inOrder(scope,jobs); + order.verify(scope).authorizeNamespace(any(),eq("project-a")); order.verify(jobs).start(any()); + order.verify(scope).authorizeNamespace(any(),eq("project-a")); order.verify(jobs).get("project-a","job"); + } + @Test void unprivilegedCallerCanNeitherStartNorReadJobs() throws Exception { + when(scope.authorizeNamespace(any(),any())).thenThrow(new ResponseStatusException(HttpStatus.FORBIDDEN)); + mvc.perform(post(URL).contentType(MediaType.APPLICATION_JSON).content(INPUT)).andExpect(status().isForbidden()); + mvc.perform(get(URL+"/job").param("namespace","project-a")).andExpect(status().isForbidden()); + verifyNoInteractions(jobs); + } + @Test void invalidInputFailsBeforeAuthorizationOrCloudWork() throws Exception { + mvc.perform(post(URL).contentType(MediaType.APPLICATION_JSON).content("{}")).andExpect(status().isBadRequest()); + mvc.perform(get(URL+"/job")).andExpect(status().isBadRequest()); + verifyNoInteractions(scope,jobs); + } +} diff --git a/src/test/java/kr/co/mcmp/softwarecatalog/application/service/impl/ApplicationOrchestrationServiceProjectScopeTest.java b/src/test/java/kr/co/mcmp/softwarecatalog/application/service/impl/ApplicationOrchestrationServiceProjectScopeTest.java index c275d135..d71e800c 100644 --- a/src/test/java/kr/co/mcmp/softwarecatalog/application/service/impl/ApplicationOrchestrationServiceProjectScopeTest.java +++ b/src/test/java/kr/co/mcmp/softwarecatalog/application/service/impl/ApplicationOrchestrationServiceProjectScopeTest.java @@ -43,6 +43,8 @@ class ApplicationOrchestrationServiceProjectScopeTest { private OperationHistoryRepository operationHistoryRepository; @Mock private VmSecurityGroupExposureService vmSecurityGroupExposureService; + @Mock + private VmNodeGroupTargetResolver vmNodeGroupTargetResolver; private ApplicationOrchestrationServiceImpl service; @@ -60,7 +62,8 @@ void setUp() { vmSecurityGroupExposureService, org.mockito.Mockito.mock(kr.co.mcmp.softwarecatalog.application.service.tunnel.ObjectStorageTunnelService.class), org.mockito.Mockito.mock(kr.co.mcmp.softwarecatalog.application.service.ObjectStorageAccessGrantService.class), - org.mockito.Mockito.mock(kr.co.mcmp.softwarecatalog.docker.service.DockerOperationService.class)); + org.mockito.Mockito.mock(kr.co.mcmp.softwarecatalog.docker.service.DockerOperationService.class), + vmNodeGroupTargetResolver); } @Test diff --git a/src/test/java/kr/co/mcmp/softwarecatalog/application/service/impl/DockerDeploymentTunnelTest.java b/src/test/java/kr/co/mcmp/softwarecatalog/application/service/impl/DockerDeploymentTunnelTest.java index 0fee1a1f..2107802c 100644 --- a/src/test/java/kr/co/mcmp/softwarecatalog/application/service/impl/DockerDeploymentTunnelTest.java +++ b/src/test/java/kr/co/mcmp/softwarecatalog/application/service/impl/DockerDeploymentTunnelTest.java @@ -67,7 +67,7 @@ class DockerDeploymentTunnelTest { void runtimeReady(){ var vm=new VmAccessInfo();vm.setPublicIP("192.0.2.10"); when(tumblebug.getVmInfo("default","infra","vm")).thenReturn(vm); - when(docker.runDockerContainer(eq(target),anyMap(),anyMap(),anyString(),anyList(),anyList(),eq(0))) + when(docker.runDockerContainer(eq(target),anyMap(),anyMap(),anyString(),anyList(),eq(List.of()),eq(-1))) .thenReturn(new ContainerDeployResult(cid,"ok",true)); when(docker.isContainerRunning(target,cid)).thenReturn(true); } @@ -98,7 +98,7 @@ void runtimeReady(){ @Test void imageFailurePreservesCauseAndDoesNotOpenIngressOrInstallTunnel(){ var vm=new VmAccessInfo();vm.setPublicIP("192.0.2.10"); when(tumblebug.getVmInfo("default","infra","vm")).thenReturn(vm); - when(docker.runDockerContainer(eq(target),anyMap(),anyMap(),anyString(),anyList(),anyList(),eq(0))) + when(docker.runDockerContainer(eq(target),anyMap(),anyMap(),anyString(),anyList(),eq(List.of()),eq(-1))) .thenReturn(new ContainerDeployResult(null,"VM image preparation failed: image pull timed out",false)); Object result=ReflectionTestUtils.invokeMethod(service,"deployToSingleVmAsync", request,catalog,history,null,"vm",0,List.of("vm"),null); diff --git a/src/test/java/kr/co/mcmp/softwarecatalog/application/service/impl/VmNodeGroupTargetResolverTest.java b/src/test/java/kr/co/mcmp/softwarecatalog/application/service/impl/VmNodeGroupTargetResolverTest.java new file mode 100644 index 00000000..93f0f620 --- /dev/null +++ b/src/test/java/kr/co/mcmp/softwarecatalog/application/service/impl/VmNodeGroupTargetResolverTest.java @@ -0,0 +1,181 @@ +package kr.co.mcmp.softwarecatalog.application.service.impl; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.verifyNoInteractions; +import static org.mockito.Mockito.when; + +import java.util.List; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +import kr.co.mcmp.ape.cbtumblebug.api.CbtumblebugRestApi; +import kr.co.mcmp.ape.cbtumblebug.dto.MciDto; +import kr.co.mcmp.ape.cbtumblebug.dto.VmAccessInfo; +import kr.co.mcmp.softwarecatalog.application.constants.DeploymentType; +import kr.co.mcmp.softwarecatalog.application.constants.VmDeploymentMode; +import kr.co.mcmp.softwarecatalog.application.dto.DeploymentRequest; + +@ExtendWith(MockitoExtension.class) +class VmNodeGroupTargetResolverTest { + + @Mock + private CbtumblebugRestApi cbtumblebugRestApi; + + private VmNodeGroupTargetResolver resolver; + + @BeforeEach + void setUp() { + resolver = new VmNodeGroupTargetResolver(cbtumblebugRestApi); + } + + @Test + void resolvesOnlyRunningMembersWhenVmIdsAreOmitted() { + MciDto mci = mci( + vm("vm-a", null, "group-a", "Running"), + vm("vm-b", null, "group-a", "RUNNING"), + vm("vm-c", null, "group-a", "Stopped"), + vm("vm-other", null, "group-b", "Running"), + vm("vm-a", null, "group-a", "Running"), + vm(null, "vm-by-name", "group-a", "running")); + when(cbtumblebugRestApi.getMciByMciId("project-a", "mci-a")).thenReturn(mci); + + DeploymentRequest request = nodeGroupRequest(" group-a ", VmDeploymentMode.STANDALONE); + + resolver.resolve(request); + + assertThat(request.getVmNodeGroupId()).isEqualTo("group-a"); + assertThat(request.getVmDeploymentMode()).isEqualTo(VmDeploymentMode.STANDALONE); + assertThat(request.getVmIds()).containsExactly("vm-a", "vm-b", "vm-by-name"); + verify(cbtumblebugRestApi).getMciByMciId("project-a", "mci-a"); + } + + @Test + void verifiesSelectedVmMembershipWithoutExpandingToTheWholeGroup() { + when(cbtumblebugRestApi.getMciByMciId("project-a", "mci-a")) + .thenReturn(mci( + vm("vm-a", null, "group-a", "Running"), + vm("vm-b", null, "group-a", "Running"))); + + DeploymentRequest request = nodeGroupRequest("group-a", VmDeploymentMode.STANDALONE); + request.setVmIds(List.of("vm-b")); + + resolver.resolve(request); + + assertThat(request.getVmIds()).containsExactly("vm-b"); + assertThat(request.getVmNodeGroupId()).isEqualTo("group-a"); + } + + @Test + void rejectsSelectedVmFromAnotherNodeGroup() { + when(cbtumblebugRestApi.getMciByMciId("project-a", "mci-a")) + .thenReturn(mci( + vm("vm-a", null, "group-a", "Running"), + vm("vm-b", null, "group-b", "Running"))); + + DeploymentRequest request = nodeGroupRequest("group-a", VmDeploymentMode.STANDALONE); + request.setVmIds(List.of("vm-b")); + + assertThatThrownBy(() -> resolver.resolve(request)) + .hasMessageContaining("does not belong"); + } + + @Test + void rejectsSelectedVmThatIsNotRunning() { + when(cbtumblebugRestApi.getMciByMciId("project-a", "mci-a")) + .thenReturn(mci(vm("vm-a", null, "group-a", "Stopped"))); + + DeploymentRequest request = nodeGroupRequest("group-a", VmDeploymentMode.STANDALONE); + request.setVmIds(List.of("vm-a")); + + assertThatThrownBy(() -> resolver.resolve(request)) + .hasMessageContaining("not running"); + } + + @Test + void rejectsClusteringWithoutCallingTumblebug() { + DeploymentRequest request = nodeGroupRequest("group-a", VmDeploymentMode.CLUSTERING); + + assertThatThrownBy(() -> resolver.resolve(request)) + .hasMessageContaining("STANDALONE"); + verifyNoInteractions(cbtumblebugRestApi); + } + + @Test + void rejectsUnknownNodeGroup() { + when(cbtumblebugRestApi.getMciByMciId("project-a", "mci-a")) + .thenReturn(mci(vm("vm-b", null, "group-b", "Running"))); + + assertThatThrownBy(() -> resolver.resolve(nodeGroupRequest("group-a", VmDeploymentMode.STANDALONE))) + .hasMessageContaining("was not found"); + } + + @Test + void rejectsNodeGroupWithoutRunningMembers() { + when(cbtumblebugRestApi.getMciByMciId("project-a", "mci-a")) + .thenReturn(mci( + vm("vm-a", null, "group-a", "Stopped"), + vm("vm-b", null, "group-a", null))); + + assertThatThrownBy(() -> resolver.resolve(nodeGroupRequest("group-a", VmDeploymentMode.STANDALONE))) + .hasMessageContaining("no running VMs"); + } + + @Test + void leavesLegacyVmSelectionUnchanged() { + DeploymentRequest request = DeploymentRequest.builder() + .deploymentType(DeploymentType.VM) + .namespace("project-a") + .mciId("mci-a") + .vmIds(List.of("vm-a")) + .vmDeploymentMode(VmDeploymentMode.STANDALONE) + .build(); + + resolver.resolve(request); + + assertThat(request.getVmIds()).containsExactly("vm-a"); + verifyNoInteractions(cbtumblebugRestApi); + } + + @Test + void rejectsNodeGroupOnNonVmDeployment() { + DeploymentRequest request = DeploymentRequest.builder() + .deploymentType(DeploymentType.K8S) + .vmNodeGroupId("group-a") + .build(); + + assertThatThrownBy(() -> resolver.resolve(request)) + .hasMessageContaining("only be used for VM deployment"); + verifyNoInteractions(cbtumblebugRestApi); + } + + private DeploymentRequest nodeGroupRequest(String nodeGroupId, VmDeploymentMode mode) { + return DeploymentRequest.builder() + .deploymentType(DeploymentType.VM) + .namespace("project-a") + .mciId("mci-a") + .vmNodeGroupId(nodeGroupId) + .vmDeploymentMode(mode) + .build(); + } + + private MciDto mci(VmAccessInfo... vms) { + MciDto mci = new MciDto(); + mci.setNode(List.of(vms)); + return mci; + } + + private VmAccessInfo vm(String id, String name, String subGroupId, String status) { + VmAccessInfo vm = new VmAccessInfo(); + vm.setId(id); + vm.setName(name); + vm.setSubGroupId(subGroupId); + vm.setStatus(status); + return vm; + } +} diff --git a/src/test/java/kr/co/mcmp/softwarecatalog/kubernetes/service/HelmChartServiceImageDefaultsTest.java b/src/test/java/kr/co/mcmp/softwarecatalog/kubernetes/service/HelmChartServiceImageDefaultsTest.java index 0c8e5055..53a51524 100644 --- a/src/test/java/kr/co/mcmp/softwarecatalog/kubernetes/service/HelmChartServiceImageDefaultsTest.java +++ b/src/test/java/kr/co/mcmp/softwarecatalog/kubernetes/service/HelmChartServiceImageDefaultsTest.java @@ -1,6 +1,7 @@ package kr.co.mcmp.softwarecatalog.kubernetes.service; import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException; import java.util.LinkedHashMap; import java.util.List; @@ -58,4 +59,26 @@ void preservesNonImageDeploymentValues() { void handlesAnEmptyValuesMapWithoutAddingImageArguments() { assertThat(HelmChartService.buildHelmSetArguments(Map.of())).isEmpty(); } + + @ParameterizedTest + @MethodSource("validKubernetesNamespaces") + void preservesAnExplicitKubernetesNamespace(String namespace) { + assertThat(HelmChartService.requireHelmNamespace(namespace)).isEqualTo(namespace); + } + + private static Stream validKubernetesNamespaces() { + return Stream.of("default", "application-team-a", "ingress-system"); + } + + @ParameterizedTest + @MethodSource("blankKubernetesNamespaces") + void rejectsABlankKubernetesNamespace(String namespace) { + assertThatIllegalArgumentException() + .isThrownBy(() -> HelmChartService.requireHelmNamespace(namespace)) + .withMessageContaining("cannot be blank"); + } + + private static Stream blankKubernetesNamespaces() { + return Stream.of((String) null, "", " ", "\t"); + } } diff --git a/src/test/java/kr/co/mcmp/softwarecatalog/kubernetes/service/HelmIngressPolicyMergeTest.java b/src/test/java/kr/co/mcmp/softwarecatalog/kubernetes/service/HelmIngressPolicyMergeTest.java new file mode 100644 index 00000000..b5a223d5 --- /dev/null +++ b/src/test/java/kr/co/mcmp/softwarecatalog/kubernetes/service/HelmIngressPolicyMergeTest.java @@ -0,0 +1,75 @@ +package kr.co.mcmp.softwarecatalog.kubernetes.service; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.stream.Stream; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; + +class HelmIngressPolicyMergeTest { + private static final String CIDR = "203.0.113.8/32"; + + static Stream chartsAndTlsModes() { + return Stream.concat(HelmIngressValuesTest.charts(), Stream.of( + Arguments.of("new-app", "https://example.com/charts", "1.0.0", "ingress"), + Arguments.of("rclone", "https://example.com/mirror", "1.0.0", "ingress"), + Arguments.of("prometheus", "https://example.com/mirror", "1.0.0", "ingress"))) + .flatMap(chart -> Stream.of(false, true).map(tls -> Arguments.of( + chart.get()[0], chart.get()[1], chart.get()[2], chart.get()[3], tls))); + } + + @ParameterizedTest + @MethodSource("chartsAndTlsModes") + void addsCidrWithoutOverwritingChartSpecificHostsAndTls( + String name, String url, String version, String root, boolean tls) { + var chart = HelmIngressValuesTest.chart(name, url, version); + var config = HelmIngressValuesTest.config(); + config.setIngressTlsEnabled(tls); + config.setIngressTlsSecret("selected-cert"); + var file = HelmIngressValues.from(chart, config); + var expected = new LinkedHashMap<>(HelmIngressValuesTest.ingress(file, root)); + var flat = new LinkedHashMap(); + flat.put("ingress.enabled", "true"); + flat.put("service.type", "ClusterIP"); + + K8sIngressPolicy.configureValues(name, flat, file, config, CIDR); + + var actual = new LinkedHashMap<>(HelmIngressValuesTest.ingress(file, root)); + Object annotations = actual.remove("annotations"); + assertThat(actual).containsExactlyEntriesOf(expected); + assertThat(annotations).isEqualTo(Map.of( + K8sIngressAccessService.CIDR_ANNOTATION, CIDR, + "kubernetes.io/ingress.class", "nginx")); + assertThat(flat).containsExactlyEntriesOf(Map.of("service.type", "ClusterIP")); + } + + @Test + void disabledIngressDoesNotAddAnExternalAccessRule() { + var config = HelmIngressValuesTest.config(); + config.setIngressEnabled(false); + var file = HelmIngressValues.from(HelmIngressValuesTest.chart( + "new-app", "https://example.com/charts", "1.0.0"), config); + + K8sIngressPolicy.configureValues("new-app", new LinkedHashMap<>(), file, config, null); + + assertThat(file).isEqualTo(Map.of("ingress", Map.of("enabled", false))); + } + + @Test + void keepsTheRemoteLokiGatewayRouteWhenTheGenericAdapterIsPresent() { + var config = HelmIngressValuesTest.config(); + var file = HelmIngressValues.from(HelmIngressValuesTest.chart( + "loki", "https://grafana.github.io/helm-charts", "6.0.0"), config); + K8sIngressPolicy.configureValues("loki", new LinkedHashMap<>(), file, config, CIDR); + + var gateway = HelmIngressValuesTest.ingress(file, "gateway.ingress"); + assertThat(gateway).containsEntry("enabled", true).containsEntry("className", "nginx"); + assertThat(((Map) gateway.get("annotations")).get(K8sIngressAccessService.CIDR_ANNOTATION)) + .isEqualTo(CIDR); + } +} diff --git a/src/test/java/kr/co/mcmp/softwarecatalog/kubernetes/service/HelmIngressPreflightTest.java b/src/test/java/kr/co/mcmp/softwarecatalog/kubernetes/service/HelmIngressPreflightTest.java new file mode 100644 index 00000000..b2fc6a94 --- /dev/null +++ b/src/test/java/kr/co/mcmp/softwarecatalog/kubernetes/service/HelmIngressPreflightTest.java @@ -0,0 +1,106 @@ +package kr.co.mcmp.softwarecatalog.kubernetes.service; + +import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException; +import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.mockito.Mockito.*; + +import java.util.Optional; + +import kr.co.mcmp.ape.cbtumblebug.api.CbtumblebugRestApi; +import kr.co.mcmp.softwarecatalog.SoftwareCatalog; +import kr.co.mcmp.softwarecatalog.application.dto.DeploymentRequest; +import kr.co.mcmp.softwarecatalog.application.model.HelmChart; +import kr.co.mcmp.softwarecatalog.kubernetes.config.KubeconfigResolver; +import kr.co.mcmp.softwarecatalog.kubernetes.config.KubernetesClientFactory; +import kr.co.mcmp.softwarecatalog.service.SoftwareSourceService; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.CsvSource; +import org.junit.jupiter.params.provider.ValueSource; + +class HelmIngressPreflightTest { + @ParameterizedTest + @CsvSource({"true,unknown", "false,unknown", "true,known", "false,known"}) + void rejectsBeforeConnectingOrInstallingClusterComponents(boolean withRequest, String scenario) { + KubernetesClientFactory factory = mock(KubernetesClientFactory.class); + HelmChartService helmService = mock(HelmChartService.class); + SoftwareSourceService sources = mock(SoftwareSourceService.class); + KubernetesDeployService service = new KubernetesDeployService( + factory, null, helmService, null, null, null, sources, null, null, IbmIngressAutomationTestSupport.legacy()); + SoftwareCatalog catalog = SoftwareCatalog.builder().id(1L).ingressEnabled(true) + .ingressHost("bad_host").build(); + HelmChart chart = HelmIngressValuesTest.chart("grafana", scenario.equals("unknown") + ? "https://unverified.example/charts" : "https://grafana.github.io/helm-charts", "7.3.0"); + when(sources.getArtifactHubSource(1L)).thenReturn(Optional.of(chart)); + + assertThatIllegalArgumentException().isThrownBy(() -> service.deployApplication( + "project-a", "cluster-a", catalog, "user", withRequest ? new DeploymentRequest() : null)) + .withMessageContaining("Host"); + verifyNoInteractions(factory, helmService); + } + + @ParameterizedTest + @ValueSource(booleans = {true, false}) + void directHelmEntryPointsAlsoRejectBeforeExternalActions(boolean withRequest) { + CbtumblebugRestApi api = mock(CbtumblebugRestApi.class); + KubeconfigResolver resolver = mock(KubeconfigResolver.class); + HelmChartService service = new HelmChartService(api, resolver, null, null, null, null); + SoftwareCatalog catalog = SoftwareCatalog.builder().ingressEnabled(true).ingressHost("bad_host").build(); + HelmChart chart = HelmIngressValuesTest.chart("unverified", "https://example.com/charts", "1.0.0"); + assertThatIllegalArgumentException().isThrownBy(() -> { + if (withRequest) service.deployHelmChartWithRequest(null, "project-a", catalog, chart, + "cluster-a", new DeploymentRequest()); + else service.deployHelmChart(null, "project-a", catalog, chart, "cluster-a"); + }).withMessageContaining("Host"); + verifyNoInteractions(api, resolver); + } + + @ParameterizedTest + @ValueSource(booleans = {true, false}) + void validUnknownChartsRespectCidrBeforeReachingTheClusterBoundary(boolean withRequest) { + KubernetesClientFactory factory = mock(KubernetesClientFactory.class); + HelmChartService helmService = mock(HelmChartService.class); + SoftwareSourceService sources = mock(SoftwareSourceService.class); + KubernetesDeployService service = new KubernetesDeployService( + factory, null, helmService, null, null, null, sources, null, null, IbmIngressAutomationTestSupport.legacy()); + SoftwareCatalog catalog = SoftwareCatalog.builder().id(1L).ingressEnabled(true) + .ingressHost("app.example.com").build(); + when(sources.getArtifactHubSource(1L)).thenReturn(Optional.of(HelmIngressValuesTest.chart( + "new-app", "https://example.com/charts", "1.0.0"))); + // Stop at the first external boundary: never connect to an actual cluster in this test. + IllegalStateException boundary = new IllegalStateException("test-cluster-boundary"); + if (withRequest) { + DeploymentRequest request = DeploymentRequest.builder().servicePortCidr("203.0.113.8/32").build(); + when(factory.getClient("project-a", "cluster-a")).thenThrow(boundary); + assertThatThrownBy(() -> service.deployApplication("project-a", "cluster-a", catalog, + "user", request)).hasCause(boundary); + verify(factory).getClient("project-a", "cluster-a"); + } else { + // The remote policy now requires an explicit source CIDR before + // any externally accessible application can contact the cluster. + assertThatThrownBy(() -> service.deployApplication("project-a", "cluster-a", catalog, + "user", null)).hasMessageContaining("CIDR"); + verifyNoInteractions(factory); + } + verifyNoInteractions(helmService); + } + + @ParameterizedTest + @ValueSource(booleans = {true, false}) + void bothDirectHelmEntryPointsAcceptValidUnknownCharts(boolean withRequest) { + CbtumblebugRestApi api = mock(CbtumblebugRestApi.class); + KubeconfigResolver resolver = mock(KubeconfigResolver.class); + HelmChartService service = new HelmChartService(api, resolver, null, null, null, null); + SoftwareCatalog catalog = SoftwareCatalog.builder().ingressEnabled(true) + .ingressHost("app.example.com").build(); + HelmChart chart = HelmIngressValuesTest.chart("new-app", "https://example.com/charts", "1.0.0"); + IllegalStateException boundary = new IllegalStateException("test-cluster-boundary"); + when(api.getK8sClusterByName("project-a", "cluster-a")).thenThrow(boundary); + assertThatThrownBy(() -> { + if (withRequest) service.deployHelmChartWithRequest(null, "project-a", catalog, chart, + "cluster-a", new DeploymentRequest()); + else service.deployHelmChart(null, "project-a", catalog, chart, "cluster-a"); + }).hasCause(boundary); + verify(api).getK8sClusterByName("project-a", "cluster-a"); + verifyNoInteractions(resolver); + } +} diff --git a/src/test/java/kr/co/mcmp/softwarecatalog/kubernetes/service/HelmIngressRenderTest.java b/src/test/java/kr/co/mcmp/softwarecatalog/kubernetes/service/HelmIngressRenderTest.java new file mode 100644 index 00000000..a7edac34 --- /dev/null +++ b/src/test/java/kr/co/mcmp/softwarecatalog/kubernetes/service/HelmIngressRenderTest.java @@ -0,0 +1,155 @@ +package kr.co.mcmp.softwarecatalog.kubernetes.service; + +import static org.assertj.core.api.Assertions.*; + +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.TimeUnit; +import java.util.stream.Stream; + +import com.fasterxml.jackson.databind.ObjectMapper; +import io.fabric8.kubernetes.api.model.networking.v1.Ingress; +import kr.co.mcmp.softwarecatalog.application.dto.DeploymentConfigDTO; +import org.junit.jupiter.api.condition.EnabledIfEnvironmentVariable; +import org.junit.jupiter.api.io.TempDir; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; +import org.springframework.test.util.ReflectionTestUtils; +import org.yaml.snakeyaml.Yaml; + +/** Opt-in offline rendering against locally downloaded, version-pinned upstream charts. */ +@EnabledIfEnvironmentVariable(named = "AM_HELM_TEST_CHARTS_DIR", matches = ".+") +class HelmIngressRenderTest { + @TempDir Path temp; + + static Stream renderCases() { + return Stream.concat(HelmIngressValuesTest.charts(), Stream.of( + Arguments.of("am-generic", "https://unverified.example/charts", "0.1.0"))) + .flatMap(chart -> Stream.of("default", "team-monitoring") + .flatMap(namespace -> Stream.of("disabled", "http", "subpath", "tls", "tls-default") + .flatMap(mode -> Stream.of("none", "nginx", IbmIngressSupport.PUBLIC_CLASS, IbmIngressSupport.PRIVATE_CLASS) + .map(ingressClass -> Arguments.of(chart.get()[0], chart.get()[1], chart.get()[2], namespace, mode, ingressClass))))); + } + + @ParameterizedTest(name = "{0} {2}, namespace={3}, mode={4}, cidr={5}") + @MethodSource("renderCases") + @SuppressWarnings("unchecked") + void rendersTheSelectedRouteAndARealBackendService(String name, String url, String version, + String namespace, String mode, String ingressClass) throws Exception { + boolean withCidr = !"none".equals(ingressClass); + Path chartPath = name.equals("nginx") ? Path.of("nginx") + : Path.of(System.getenv("AM_HELM_TEST_CHARTS_DIR"), name); + if (name.equals("am-generic")) { + // Exercise the fallback against a real helm-create chart, not a handcrafted template. + chartPath = temp.resolve(name); + Path createLog = temp.resolve("helm-create.log"); + Process create = new ProcessBuilder("helm", "create", chartPath.toString()) + .redirectErrorStream(true).redirectOutput(createLog.toFile()).start(); + boolean created = create.waitFor(30, TimeUnit.SECONDS); + if (!created) create.destroyForcibly(); + assertThat(created).as("Helm create timeout").isTrue(); + assertThat(create.exitValue()).as(Files.readString(createLog)).isZero(); + } + Map metadata = new Yaml().load(Files.readString(chartPath.resolve("Chart.yaml"))); + assertThat(metadata.get("version").toString()).isEqualTo(version); + + DeploymentConfigDTO config = HelmIngressValuesTest.config(); + config.setIngressEnabled(!mode.equals("disabled")); + config.setIngressTlsEnabled(mode.startsWith("tls")); + config.setIngressTlsSecret(mode.equals("tls-default") ? null : "externally-managed-cert"); + config = HelmIngressValues.resolveTlsConfig(config, "am-render"); + if (mode.equals("subpath")) { + config.setIngressHost(name.equals("prometheus") ? "app.example.com" : "*.example.com"); + config.setIngressPath("/app"); + config.setIngressClass("custom-ingress"); + } + if (withCidr) config.setIngressClass(ingressClass); + Map values = HelmIngressValues.from(HelmIngressValuesTest.chart(name, url, version), config); + HelmChartService service = new HelmChartService(null, null, null, null, null, null); + // Use the production YAML writer and chart-specific service defaults as the deployment does. + Map setValues = new LinkedHashMap<>(); + setValues.put("service.type", "ClusterIP"); + setValues.put("service.port", "80"); + setValues.put("persistence.enabled", "false"); + if (name.equals("rclone")) { + ReflectionTestUtils.invokeMethod(service, "applyRcloneGuiDefaults", setValues, 5572); + } + if (name.equals("prometheus")) { + ReflectionTestUtils.invokeMethod(service, "applyPrometheusPersistenceDefaults", setValues); + } + String cidr = withCidr && config.isIngressEnabled() ? "203.0.113.8/32" : null; + if (withCidr) K8sIngressPolicy.configureValues(name, setValues, values, config, cidr); + Path valuesFile = ReflectionTestUtils.invokeMethod(service, "createTempValuesFile", values); + assertThat(setValues.keySet()).noneMatch(key -> key.startsWith("ingress.")); + + Path output = temp.resolve("rendered.yaml"); + Path errors = temp.resolve("helm-errors.log"); + List command = new ArrayList<>(List.of("helm", "template", "am-render", chartPath.toString(), + "--namespace", namespace, "--kube-version", "1.30.0", "--values", valuesFile.toString())); + command.addAll(HelmChartService.buildHelmSetArguments(setValues)); + try { + Process process = new ProcessBuilder(command).redirectOutput(output.toFile()) + .redirectError(errors.toFile()).start(); + boolean completed = process.waitFor(30, TimeUnit.SECONDS); + if (!completed) process.destroyForcibly(); + assertThat(completed).as("Helm rendering timeout").isTrue(); + assertThat(process.exitValue()).as(Files.readString(errors)).isZero(); + if (withCidr) K8sIngressPolicy.verifyManifest(Files.readString(output), cidr, config.getIngressHost(), ingressClass); + } finally { + Files.deleteIfExists(valuesFile); + } + + List> resources = new ArrayList<>(); + for (Object document : new Yaml().loadAll(Files.readString(output))) { + if (document instanceof Map) resources.add((Map) document); + } + List> ingresses = resources.stream() + .filter(resource -> "Ingress".equals(resource.get("kind"))).toList(); + if (mode.equals("disabled")) { + assertThat(ingresses).isEmpty(); + return; + } + assertThat(ingresses).hasSize(1); + Ingress ingress = new ObjectMapper().convertValue(ingresses.get(0), Ingress.class); + assertThat(ingress.getApiVersion()).isEqualTo("networking.k8s.io/v1"); + // Helm supplies its release namespace when a namespaced resource omits metadata.namespace. + assertThat(ingress.getMetadata().getNamespace()).isIn(null, namespace); + Map rawSpec = (Map) ingresses.get(0).get("spec"); + assertThat(rawSpec.get("ingressClassName")).isInstanceOf(String.class); + assertThat(((List>) rawSpec.get("rules")).get(0).get("host")) + .isInstanceOf(String.class); + assertThat(ingress.getSpec().getIngressClassName()).isEqualTo(config.getIngressClass()); + assertThat(ingress.getSpec().getRules()).hasSize(1); + var rule = ingress.getSpec().getRules().get(0); + assertThat(rule.getHost()).isEqualTo(config.getIngressHost()); + assertThat(rule.getHttp().getPaths()).hasSize(1); + var path = rule.getHttp().getPaths().get(0); + assertThat(path.getPath()).isEqualTo(config.getIngressPath()); + assertThat(path.getPathType()).isEqualTo("Prefix"); + if (config.isTlsEnabled()) { + assertThat(ingress.getSpec().getTls()).hasSize(1); + assertThat(ingress.getSpec().getTls().get(0).getSecretName()).isEqualTo(config.getIngressTlsSecret()); + assertThat(ingress.getSpec().getTls().get(0).getHosts()).containsExactly(config.getIngressHost()); + } else { + assertThat(ingress.getSpec().getTls()).isNullOrEmpty(); + } + // The generated Ingress must point to an existing rendered Service and one of its ports. + var backend = path.getBackend().getService(); + List> backends = resources.stream() + .filter(resource -> "Service".equals(resource.get("kind"))) + .filter(resource -> backend.getName().equals(((Map) resource.get("metadata")).get("name"))) + .toList(); + assertThat(backends).hasSize(1); + assertThat(((Map) backends.get(0).get("metadata")).get("namespace")).isIn(null, namespace); + List> ports = (List>) + ((Map) backends.get(0).get("spec")).get("ports"); + assertThat(ports).anyMatch(port -> backend.getPort().getName() != null + ? backend.getPort().getName().equals(port.get("name")) + : backend.getPort().getNumber().equals(port.get("port"))); + } +} diff --git a/src/test/java/kr/co/mcmp/softwarecatalog/kubernetes/service/HelmIngressValuesTest.java b/src/test/java/kr/co/mcmp/softwarecatalog/kubernetes/service/HelmIngressValuesTest.java new file mode 100644 index 00000000..9c6b7925 --- /dev/null +++ b/src/test/java/kr/co/mcmp/softwarecatalog/kubernetes/service/HelmIngressValuesTest.java @@ -0,0 +1,226 @@ +package kr.co.mcmp.softwarecatalog.kubernetes.service; + +import static org.assertj.core.api.Assertions.*; + +import java.util.List; +import java.util.Map; +import java.util.function.Consumer; +import java.util.stream.Stream; + +import kr.co.mcmp.softwarecatalog.SoftwareCatalog; +import kr.co.mcmp.softwarecatalog.application.dto.DeploymentConfigDTO; +import kr.co.mcmp.softwarecatalog.application.dto.DeploymentRequest; +import kr.co.mcmp.softwarecatalog.application.model.HelmChart; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; +import org.yaml.snakeyaml.Yaml; + +class HelmIngressValuesTest { + static Stream charts() { + return Stream.of( + Arguments.of("grafana", "https://grafana.github.io/helm-charts", "7.3.0", "ingress"), + Arguments.of("prometheus", "https://prometheus-community.github.io/helm-charts", "25.8.0", "server.ingress"), + Arguments.of("rclone", "https://jacobcolvin.com/helm-charts", "1.0.1", "ingress.main"), + Arguments.of("nginx", "https://charts.bitnami.com/bitnami", "21.1.23", "ingress")); + } + + static HelmChart chart(String name, String url, String version) { + return HelmChart.builder().chartName(name).chartRepositoryUrl(url).chartVersion(version) + .repositoryName("user-chosen-alias").build(); + } + + static DeploymentConfigDTO config() { + return DeploymentConfigDTO.builder().ingressEnabled(true).ingressHost("app.example.com") + .ingressPath("/").ingressClass("nginx").ingressTlsEnabled(false).build(); + } + + @SuppressWarnings("unchecked") + static Map ingress(Map values, String root) { + Map result = values; + for (String part : root.split("\\.")) { + result = (Map) result.get(part); + } + return result; + } + + @ParameterizedTest + @MethodSource("charts") + void mapsHttpAndTlsUsingTheChartSchema(String name, String url, String version, String root) { + HelmChart chart = chart(name, url + "/", version); + DeploymentConfigDTO config = config(); + Map http = ingress(HelmIngressValues.from(chart, config), root); + assertThat(http).containsEntry("enabled", true).containsEntry("ingressClassName", "nginx"); + assertThat(http.get(name.equals("nginx") ? "extraTls" : "tls")).isEqualTo(List.of()); + config.setIngressTlsEnabled(true); + config.setIngressTlsSecret("chosen-cert"); + Map tls = ingress(HelmIngressValues.from(chart, config), root); + assertThat(tls.get(name.equals("nginx") ? "extraTls" : "tls")) + .isEqualTo(List.of(Map.of("secretName", "chosen-cert", "hosts", List.of("app.example.com")))); + if (name.equals("nginx")) { + assertThat(tls).containsEntry("hostname", "app.example.com").containsEntry("tls", false) + .containsEntry("selfSigned", false); + } else if (name.equals("rclone")) { + assertThat(tls.get("hosts")).isEqualTo(List.of(Map.of("host", "app.example.com", "paths", + List.of(Map.of("path", "/", "pathType", "Prefix"))))); + } else { + assertThat(tls).containsEntry("hosts", List.of("app.example.com")).containsEntry("path", "/"); + } + // Building TLS values must not mutate a previous deployment's HTTP values. + assertThat(http.get(name.equals("nginx") ? "extraTls" : "tls")).isEqualTo(List.of()); + } + + @ParameterizedTest + @MethodSource("charts") + void disabledIngressIgnoresStaleFormFields(String name, String url, String version, String root) { + DeploymentConfigDTO config = new DeploymentConfigDTO(); + config.setIngressEnabled(false); + config.setIngressTlsEnabled(true); + assertThat(ingress(HelmIngressValues.from(chart(name, url, version), config), root)) + .containsExactlyEntriesOf(Map.of("enabled", false)); + } + + @ParameterizedTest + @org.junit.jupiter.params.provider.NullAndEmptySource + @org.junit.jupiter.params.provider.ValueSource(strings = {"https://different-vendor.example/charts"}) + void unknownRepositoriesUseHelmCreateFallbackNotAnAdapterBasedOnlyOnName(String url) { + HelmChart chart = chart("grafana", url, "7.3.0"); + Map ingress = ingress(HelmIngressValues.from(chart, config()), "ingress"); + assertThat(ingress).containsEntry("enabled", true).containsEntry("className", "nginx") + .doesNotContainKeys("ingressClassName", "hostname", "path"); + assertThat(ingress.get("hosts")).isEqualTo(List.of(Map.of("host", "app.example.com", "paths", + List.of(Map.of("path", "/", "pathType", "Prefix"))))); + assertThat(ingress.get("tls")).isEqualTo(List.of()); + DeploymentConfigDTO disabled = new DeploymentConfigDTO(); + assertThat(HelmIngressValues.from(chart, disabled)).isEqualTo(Map.of("ingress", Map.of("enabled", false))); + } + + @Test + void unknownChartInAKnownRepositoryAlsoUsesFallbackWithTlsAndSubpath() { + DeploymentConfigDTO config = config(); + config.setIngressTlsEnabled(true); + config.setIngressTlsSecret("existing-cert"); + config.setIngressPath("/app"); + config.setIngressClass("custom-ingress"); + HelmChart chart = chart("new-app", "https://grafana.github.io/helm-charts", "1.0.0"); + Map ingress = ingress(HelmIngressValues.from(chart, config), "ingress"); + assertThat(ingress).containsEntry("className", "custom-ingress"); + assertThat(ingress.get("tls")).isEqualTo(List.of(Map.of("secretName", "existing-cert", + "hosts", List.of("app.example.com")))); + assertThat(ingress.get("hosts")).isEqualTo(List.of(Map.of("host", "app.example.com", "paths", + List.of(Map.of("path", "/app", "pathType", "Prefix"))))); + } + + @Test + void preservesStringsThatHelmSetCouldCoerceOrSplit() { + DeploymentConfigDTO config = config(); + config.setIngressHost("true"); + config.setIngressClass("nginx"); + config.setIngressPath("/a,b"); + Map values = HelmIngressValues.from( + chart("grafana", "https://grafana.github.io/helm-charts", "7.3.0"), config); + Map parsed = new Yaml().load(new Yaml().dump(values)); + assertThat(ingress(parsed, "ingress")).containsEntry("hosts", List.of("true")) + .containsEntry("ingressClassName", "nginx").containsEntry("path", "/a,b"); + } + + @ParameterizedTest + @org.junit.jupiter.params.provider.ValueSource(strings = {"*.example.com", "true", "123"}) + void rejectsPrometheusHostsThatItsUnquotedTemplateCannotRender(String host) { + DeploymentConfigDTO config = config(); + config.setIngressHost(host); + assertThatIllegalArgumentException().isThrownBy(() -> HelmIngressValues.from( + chart("prometheus", "https://prometheus-community.github.io/helm-charts", "25.8.0"), config)) + .withMessageContaining("Host"); + } + + @Test + void requestValuesOverrideCatalogAndLegacyUsesTheSameDefaults() { + SoftwareCatalog catalog = SoftwareCatalog.builder().ingressEnabled(true) + .ingressHost("https://Catalog.Example.com/path").ingressTlsEnabled(true) + .ingressTlsSecret("catalog-cert").build(); + DeploymentRequest request = new DeploymentRequest(); + request.setIngressHost("https://Request.Example.com:30880/ignored"); + request.setIngressTlsEnabled(false); + HelmChart chart = chart("grafana", "https://grafana.github.io/helm-charts", "7.3.0"); + assertThat(ingress(HelmIngressValues.from(chart, DeploymentConfigDTO.from(request, catalog)), "ingress")) + .containsEntry("hosts", List.of("request.example.com")).containsEntry("tls", List.of()); + assertThat(ingress(HelmIngressValues.from(chart, + DeploymentConfigDTO.from(new DeploymentRequest(), catalog)), "ingress")) + .containsEntry("hosts", List.of("catalog.example.com")); + } + + static Stream invalidSettings() { + return Stream.of( + Arguments.of((Consumer) c -> c.setIngressHost(null), "Host"), + Arguments.of((Consumer) c -> c.setIngressHost(""), "Host"), + Arguments.of((Consumer) c -> c.setIngressHost("127.0.0.1"), "Host"), + Arguments.of((Consumer) c -> c.setIngressHost("bad_name.example"), "Host"), + Arguments.of((Consumer) c -> c.setIngressHost("**.example.com"), "Host"), + Arguments.of((Consumer) c -> c.setIngressPath("grafana"), "Path"), + Arguments.of((Consumer) c -> c.setIngressPath("/a?b=c"), "Path"), + Arguments.of((Consumer) c -> c.setIngressPath("/a b"), "Path"), + Arguments.of((Consumer) c -> c.setIngressClass(""), "Class"), + Arguments.of((Consumer) c -> c.setIngressClass("false"), "Class"), + Arguments.of((Consumer) c -> { + c.setIngressTlsEnabled(true); c.setIngressTlsSecret(""); + }, "Secret"), + Arguments.of((Consumer) c -> { + c.setIngressTlsEnabled(true); c.setIngressTlsSecret("invalid/secret"); + }, "Secret")); + } + + @ParameterizedTest + @MethodSource("invalidSettings") + void rejectsInvalidEnabledIngress(Consumer mutate, String field) { + DeploymentConfigDTO config = config(); + mutate.accept(config); + assertThatIllegalArgumentException().isThrownBy(() -> HelmIngressValues.from( + chart("grafana", "https://grafana.github.io/helm-charts", "7.3.0"), config)) + .withMessageContaining(field); + } + + @ParameterizedTest + @MethodSource("charts") + void restoresNullSecretFallbackUsingActualReleaseWithoutChangingInput(String name, String url, String version, String root) { + var config = config(); + config.setIngressTlsEnabled(true); + var chart = chart(name, url, version); + assertThatCode(() -> HelmIngressValues.validate(chart, config)).doesNotThrowAnyException(); + var resolved = HelmIngressValues.resolveTlsConfig(config, "actual-release-123"); + assertThat(config.getIngressTlsSecret()).isNull(); + assertThat(resolved.getIngressTlsSecret()).isEqualTo("actual-release-123-tls"); + var values = ingress(HelmIngressValues.from(chart, resolved), root); + assertThat(values.get(name.equals("nginx") ? "extraTls" : "tls")) + .isEqualTo(List.of(Map.of("secretName", "actual-release-123-tls", "hosts", List.of("app.example.com")))); + } + + @Test + void genericAndLokiPolicyAlsoUseResolvedSecretAndExplicitSelectionIsPreserved() { + var config = config(); + config.setIngressTlsEnabled(true); + var resolved = HelmIngressValues.resolveTlsConfig(config, "actual-release"); + var values = HelmIngressValues.from(chart("loki", "https://unknown.example/charts", "1"), resolved); + assertThat(ingress(values, "ingress").get("tls")) + .isEqualTo(List.of(Map.of("secretName", "actual-release-tls", "hosts", List.of("app.example.com")))); + K8sIngressPolicy.configureValues("loki", new java.util.HashMap<>(), values, resolved, "203.0.113.8/32"); + assertThat(ingress(values, "gateway.ingress").get("tls")) + .isEqualTo(ingress(values, "ingress").get("tls")); + config.setIngressTlsSecret("chosen-cert"); + assertThat(HelmIngressValues.resolveTlsConfig(config, "different-release").getIngressTlsSecret()).isEqualTo("chosen-cert"); + config.setIngressTlsEnabled(false); + config.setIngressTlsSecret("invalid but ignored for HTTP"); + assertThatCode(() -> HelmIngressValues.from(chart("grafana", "https://grafana.github.io/helm-charts", "7.3.0"), config)) + .doesNotThrowAnyException(); + } + + @ParameterizedTest + @org.junit.jupiter.params.provider.NullAndEmptySource + @org.junit.jupiter.params.provider.ValueSource(strings = {"invalid/name", " ", "UPPERCASE"}) + void requiresAnActualValidReleaseForTheFallback(String release) { + var config = config(); + config.setIngressTlsEnabled(true); + assertThatIllegalArgumentException().isThrownBy(() -> HelmIngressValues.resolveTlsConfig(config, release)); + } +} diff --git a/src/test/java/kr/co/mcmp/softwarecatalog/kubernetes/service/IbmAutomationClusterFixture.java b/src/test/java/kr/co/mcmp/softwarecatalog/kubernetes/service/IbmAutomationClusterFixture.java new file mode 100644 index 00000000..1fd65f88 --- /dev/null +++ b/src/test/java/kr/co/mcmp/softwarecatalog/kubernetes/service/IbmAutomationClusterFixture.java @@ -0,0 +1,54 @@ +package kr.co.mcmp.softwarecatalog.kubernetes.service; + +import io.fabric8.kubernetes.client.server.mock.KubernetesServer; +import io.fabric8.kubernetes.client.KubernetesClient; +import io.fabric8.kubernetes.api.model.*; +import io.fabric8.kubernetes.api.model.apps.DeploymentBuilder; +import io.fabric8.kubernetes.api.model.networking.v1.IngressClassBuilder; +import io.fabric8.kubernetes.api.model.apiextensions.v1.CustomResourceDefinitionBuilder; +import java.util.*; + +/** Real Fabric8 HTTP serialization against an in-memory Kubernetes API, never an external cluster. */ +final class IbmAutomationClusterFixture implements AutoCloseable { + final KubernetesServer server = new KubernetesServer(false,true); + final KubernetesClient client; + IbmAutomationClusterFixture(boolean proxy) { + server.before(); client=server.getClient(); + server.expect().post().withPath("/apis/authorization.k8s.io/v1/selfsubjectaccessreviews") + .andReturn(201,new io.fabric8.kubernetes.api.model.authorization.v1.SelfSubjectAccessReviewBuilder() + .withNewStatus().withAllowed(true).endStatus().build()).always(); + for (var ns : List.of("default","kube-system","cert-manager")) client.namespaces().resource(new NamespaceBuilder().withNewMetadata().withName(ns).endMetadata().build()).create(); + String clazz=IbmIngressSupport.PUBLIC_CLASS; + client.network().v1().ingressClasses().resource(new IngressClassBuilder().withNewMetadata().withName(clazz).endMetadata() + .withNewSpec().withController("cloud.ibm.com/"+clazz).endSpec().build()).create(); + client.apps().deployments().inNamespace("kube-system").resource(new DeploymentBuilder().withNewMetadata().withName("public-alb") + .withLabels(Map.of("ingress-class",clazz)).endMetadata().withNewSpec().withNewTemplate().withNewSpec() + .addNewContainer().withName("nginx").withArgs("--default-ssl-certificate=default/"+IbmIngressTlsResolverTest.SECRET).endContainer() + .endSpec().endTemplate().endSpec().withNewStatus().withAvailableReplicas(2).endStatus().build()).create(); + client.services().inNamespace("kube-system").resource(new ServiceBuilder().withNewMetadata().withName("public-alb") + .withLabels(Map.of("app.kubernetes.io/part-of","managed-ingress")) + .withAnnotations(Map.of(IbmIngressSupport.PROXY_FEATURE,proxy?"proxy-protocol":"alb")).endMetadata() + .withNewSpec().withType("LoadBalancer").addNewPort().withPort(443).endPort().endSpec() + .withNewStatus().withNewLoadBalancer().addNewIngress().withHostname("a.lb.appdomain.cloud").endIngress().endLoadBalancer().endStatus().build()).create(); + client.configMaps().inNamespace("kube-system").resource(new ConfigMapBuilder().withNewMetadata().withName("ibm-k8s-controller-config").endMetadata() + .withData(Map.of("use-proxy-protocol",String.valueOf(proxy),"proxy-real-ip-cidr","10.2.0.0/24")).build()).create(); + client.secrets().inNamespace("default").resource(IbmIngressTlsResolverTest.certificate(IbmIngressTlsResolverTest.SECRET, + IbmIngressTlsResolverTest.RSA,IbmIngressTlsResolverTest.DOMAIN,"*."+IbmIngressTlsResolverTest.DOMAIN)).create(); + } + void proxyReady() { + var cm=client.configMaps().inNamespace("kube-system").withName("ibm-k8s-controller-config").get(); + cm.setData(Map.of("use-proxy-protocol","true","proxy-real-ip-cidr","10.2.0.0/24")); client.configMaps().inNamespace("kube-system").resource(cm).update(); + var service=client.services().inNamespace("kube-system").withName("public-alb").get(); + service.getMetadata().setAnnotations(Map.of(IbmIngressSupport.PROXY_FEATURE,"proxy-protocol")); client.services().inNamespace("kube-system").resource(service).update(); + } + void certManagerPresent() { + for (String definition: List.of("certificates.cert-manager.io","certificaterequests.cert-manager.io","issuers.cert-manager.io", + "clusterissuers.cert-manager.io","orders.acme.cert-manager.io","challenges.acme.cert-manager.io")) { + String plural=definition.substring(0,definition.indexOf('.')); String group=definition.substring(definition.indexOf('.')+1); + client.apiextensions().v1().customResourceDefinitions().resource(new CustomResourceDefinitionBuilder().withNewMetadata().withName(definition).endMetadata() + .withNewSpec().withGroup(group).withScope("Namespaced").withNewNames().withPlural(plural).withKind(plural).endNames() + .addNewVersion().withName("v1").withServed(true).withStorage(true).endVersion().endSpec().build()).create(); + } + } + public void close() { client.close(); server.after(); } +} diff --git a/src/test/java/kr/co/mcmp/softwarecatalog/kubernetes/service/IbmCertificateManagerTest.java b/src/test/java/kr/co/mcmp/softwarecatalog/kubernetes/service/IbmCertificateManagerTest.java new file mode 100644 index 00000000..a2b80c73 --- /dev/null +++ b/src/test/java/kr/co/mcmp/softwarecatalog/kubernetes/service/IbmCertificateManagerTest.java @@ -0,0 +1,186 @@ +package kr.co.mcmp.softwarecatalog.kubernetes.service; + +import static org.assertj.core.api.Assertions.*; +import static org.mockito.Mockito.*; +import io.fabric8.kubernetes.api.model.*; +import java.nio.file.*; +import java.util.*; +import java.util.function.BooleanSupplier; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; + +class IbmCertificateManagerTest { + @TempDir Path directory; + final IbmIngressAutomationProperties properties=new IbmIngressAutomationProperties(); + final IbmCertificateManager manager=spy(new IbmCertificateManager(properties,null)); + IbmIngressAutomationProperties.Profile profile() throws Exception { + var profile=new IbmIngressAutomationProperties.Profile(); profile.setAllowedDomains(List.of("company.com")); profile.setInstallCertManager(true); + var issuer=directory.resolve("issuer.yaml"); + Files.writeString(issuer,""" + apiVersion: cert-manager.io/v1 + kind: ClusterIssuer + metadata: + name: am-issuer + spec: + acme: + email: ops@company.com + server: https://acme-v02.api.letsencrypt.org/directory + privateKeySecretRef: + name: am-acme-account + solvers: + - dns01: + cloudflare: + apiTokenSecretRef: + name: am-dns + key: api-token + """); + var secret=directory.resolve("dns-secret.yaml"); Files.writeString(secret,""" + apiVersion: v1 + kind: Secret + metadata: + name: am-dns + namespace: cert-manager + type: Opaque + stringData: + api-token: fake-DNS-token-for-unit-test + """); + profile.setIssuerTemplateFile(issuer.toString()); profile.setDnsSecretFiles(List.of(secret.toString())); return profile; + } + @ParameterizedTest @ValueSource(strings={"company.com","grafana.company.com","deep.app.company.com"}) + void allowedDomainSuffixMatchesOnDnsLabelBoundaries(String host) throws Exception { assertThat(profile().allowsHost(host)).isTrue(); } + @ParameterizedTest @ValueSource(strings={"evilcompany.com","company.com.evil.net","*.company.com","http://company.com","127.0.0.1","test.com",""}) + void foreignOrInvalidHostsAreNeverAutomaticallyIssued(String host) throws Exception { assertThat(profile().allowsHost(host)).isFalse(); } + + @Test void installOnlyWhenAbsentAndReuseOneCertificateAndExistingBindings() throws Exception { + var profile=profile(); String host="grafana.company.com"; + try(var fixture=new IbmAutomationClusterFixture(true)) { + fixture.server.getKubernetesMockServer().setVersionInfo(new io.fabric8.kubernetes.client.VersionInfo.Builder().withMajor("1").withMinor("32").build()); + fixture.client.configMaps().inNamespace("default").resource(new ConfigMapBuilder().withNewMetadata().withName(IbmIngressTlsResolver.BINDINGS_CONFIG_MAP).endMetadata() + .withData(Map.of("other-data","keep","bindings.json","[{\"host\":\"existing.company.com\",\"secretName\":\"existing-tls\"}]")).build()).create(); + var plan=manager.plan(fixture.client,profile,host); assertThat(plan.install).isTrue(); + assertThat(fixture.client.secrets().inNamespace("cert-manager").list().getItems()).isEmpty(); // read-only plan + doAnswer(call -> { fixture.certManagerPresent(); return null; }).when(manager).install("project-a","cluster-a"); + doAnswer(call -> { + var issuers=fixture.client.genericKubernetesResources(IbmCertificateManager.ISSUER); + var issuer=issuers.withName("am-issuer").get(); + makeReady(issuer); issuers.resource(issuer).update(); + var certs=fixture.client.genericKubernetesResources(IbmCertificateManager.CERT).inNamespace("default"); + var cert=certs.withName(IbmCertificateManager.certificateName(host)).get(); + if (cert!=null) { + makeReady(cert); certs.resource(cert).update(); + if (fixture.client.secrets().inNamespace("default").withName(cert.getMetadata().getName()).get()==null) + fixture.client.secrets().inNamespace("default").resource(IbmIngressTlsResolverTest.certificate(cert.getMetadata().getName(),IbmIngressTlsResolverTest.RSA,host)).create(); + } + assertThat(((BooleanSupplier)call.getArgument(0)).getAsBoolean()).isTrue(); return null; + }).when(manager).await(any(),anyString()); + manager.prepare(fixture.client,"project-a","cluster-a","default",host,plan,m -> {}); + var second=manager.plan(fixture.client,profile,host); assertThat(second.install).isFalse(); + manager.prepare(fixture.client,"project-a","cluster-a","default",host,second,m -> {}); + verify(manager,times(1)).install(any(),any()); + assertThat(fixture.client.genericKubernetesResources(IbmCertificateManager.CERT).inNamespace("default").list().getItems()).hasSize(1); + var bindings=IbmIngressTlsResolver.bindings(fixture.client,"default"); + assertThat(bindings).containsEntry("existing.company.com","existing-tls").containsEntry(host,IbmCertificateManager.certificateName(host)); + assertThat(fixture.client.configMaps().inNamespace("default").withName(IbmIngressTlsResolver.BINDINGS_CONFIG_MAP).get().getData()).containsEntry("other-data","keep"); + var cfg=IbmIngressTlsResolverTest.config(); cfg.setIngressHost(host); + assertThat(IbmIngressTlsResolver.resolve(fixture.client,"default",cfg).getIngressTlsSecret()).isEqualTo(IbmCertificateManager.certificateName(host)); + } + } + @Test void neverOverwritesExistingIssuerOrDnsCredentials() throws Exception { + var profile=profile(); + try(var fixture=new IbmAutomationClusterFixture(true)) { + fixture.certManagerPresent(); + fixture.client.secrets().inNamespace("cert-manager").resource(new SecretBuilder().withNewMetadata().withName("am-dns").endMetadata() + .withType("Opaque").withData(Map.of("api-token","ZGlmZmVyZW50")).build()).create(); + assertThatThrownBy(() -> manager.plan(fixture.client,profile,"app.company.com")).hasMessageContaining("different data"); + assertThat(fixture.client.secrets().inNamespace("cert-manager").withName("am-dns").get().getData()).containsEntry("api-token","ZGlmZmVyZW50"); + } + } + @Test void installationRequiresExplicitOptInAndCompatibleVersion() throws Exception { + var profile=profile(); + try(var fixture=new IbmAutomationClusterFixture(true)) { + profile.setInstallCertManager(false); + assertThatThrownBy(() -> manager.plan(fixture.client,profile,"app.company.com")).hasMessageContaining("install-cert-manager"); + profile.setInstallCertManager(true); + fixture.server.getKubernetesMockServer().setVersionInfo(new io.fabric8.kubernetes.client.VersionInfo.Builder().withMajor("1").withMinor("30").build()); + assertThatThrownBy(() -> manager.plan(fixture.client,profile,"app.company.com")).hasMessageContaining("not supported"); + } + } + @Test void statusMustBeReadyForCurrentGeneration() { + var cert=IbmCertificateManager.certificateResource("default","app.company.com","issuer"); cert.getMetadata().setGeneration(2L); + assertThat(IbmCertificateManager.ready(cert)).isFalse(); makeReady(cert); + assertThat(IbmCertificateManager.ready(cert)).isTrue(); cert.getMetadata().setGeneration(3L); + assertThat(IbmCertificateManager.ready(cert)).isFalse(); + } + @Test void missingDnsCredentialKeyFailsWithoutInstallingAnything() throws Exception { + var profile=profile(); profile.setDnsSecretFiles(List.of()); + try(var fixture=new IbmAutomationClusterFixture(true)) { + fixture.certManagerPresent(); + assertThatThrownBy(() -> manager.plan(fixture.client,profile,"app.company.com")).hasMessageContaining("credential Secret/key"); + verify(manager,never()).install(any(),any()); + assertThat(fixture.client.genericKubernetesResources(IbmCertificateManager.ISSUER).list().getItems()).isEmpty(); + } + } + @Test void partialOrLegacyCrdInstallationIsNeverOverwritten() throws Exception { + var profile=profile(); + try(var fixture=new IbmAutomationClusterFixture(true)) { + fixture.certManagerPresent(); + var crds=fixture.client.apiextensions().v1().customResourceDefinitions(); + var old=crds.withName("certificates.cert-manager.io").get(); + old.getSpec().getVersions().get(0).setServed(false); crds.resource(old).update(); + assertThatThrownBy(() -> manager.plan(fixture.client,profile,"app.company.com")).hasMessageContaining("must serve"); + crds.withName("certificates.cert-manager.io").delete(); + assertThatThrownBy(() -> manager.plan(fixture.client,profile,"app.company.com")).hasMessageContaining("Partial"); + verify(manager,never()).install(any(),any()); + } + } + @Test void deniedKubernetesPrivilegesFailDuringPreflight() throws Exception { + var profile=profile(); + try(var fixture=new IbmAutomationClusterFixture(true)) { + fixture.certManagerPresent(); + fixture.server.getKubernetesMockServer().clearExpectations(); + fixture.server.expect().post().withPath("/apis/authorization.k8s.io/v1/selfsubjectaccessreviews") + .andReturn(201,new io.fabric8.kubernetes.api.model.authorization.v1.SelfSubjectAccessReviewBuilder() + .withNewStatus().withAllowed(false).endStatus().build()).always(); + assertThatThrownBy(() -> manager.plan(fixture.client,profile,"app.company.com")).hasMessageContaining("permission required"); + verify(manager,never()).install(any(),any()); + } + } + @Test void rejectHttp01AndArbitraryAcmeEndpointsBeforeClusterCalls() throws Exception { + var profile=profile(); var issuer=Path.of(profile.getIssuerTemplateFile()); String yaml=Files.readString(issuer); + var client=mock(io.fabric8.kubernetes.client.KubernetesClient.class); + for(String invalid : List.of(yaml.replace("dns01:","http01:"),yaml.replace("https://acme-v02.api.letsencrypt.org/directory","https://untrusted.example/issue"))) { + Files.writeString(issuer,invalid); + assertThatThrownBy(() -> manager.plan(client,profile,"app.company.com")).hasMessageContaining("Invalid server-side"); + } + verifyNoInteractions(client); + } + @Test void serverDefaultsAreAcceptedButChangedHostsAndIssuerAreRejected() { + var desired=IbmCertificateManager.certificateResource("default","app.company.com","issuer"); + var actual=IbmCertificateManager.certificateResource("default","app.company.com","issuer"); + var spec=new HashMap<>((Map)actual.getAdditionalProperties().get("spec")); spec.put("revisionHistoryLimit",1); actual.setAdditionalProperty("spec",spec); + assertThat(IbmCertificateManager.sameSpec(actual,desired)).isTrue(); spec.put("dnsNames",List.of("different.company.com")); + assertThat(IbmCertificateManager.sameSpec(actual,desired)).isFalse(); + } + @Test void issuerSolverAdmissionDefaultsAreAcceptedButDifferentDnsZonesAreNot() throws Exception { + var profile=profile(); + try(var fixture=new IbmAutomationClusterFixture(true)) { + fixture.certManagerPresent(); + var desired=manager.plan(fixture.client,profile,"app.company.com").issuer; + var json=new com.fasterxml.jackson.databind.ObjectMapper(); + var actual=json.valueToTree(desired); + ((com.fasterxml.jackson.databind.node.ObjectNode)actual.path("spec").path("acme").path("solvers").get(0).path("dns01")) + .put("cnameStrategy","None"); + assertThat(IbmCertificateManager.sameSpec(json.treeToValue(actual,GenericKubernetesResource.class),desired)).isTrue(); + ((com.fasterxml.jackson.databind.node.ObjectNode)actual.path("spec").path("acme").path("solvers").get(0).path("dns01").path("cloudflare").path("apiTokenSecretRef")) + .put("name","different-credentials"); + assertThat(IbmCertificateManager.sameSpec(json.treeToValue(actual,GenericKubernetesResource.class),desired)).isFalse(); + } + } + static void makeReady(GenericKubernetesResource resource) { + long generation=resource.getMetadata().getGeneration()==null?1:resource.getMetadata().getGeneration(); + resource.getMetadata().setGeneration(generation); + resource.setAdditionalProperty("status",Map.of("conditions",List.of(Map.of("type","Ready","status","True","observedGeneration",generation)))); + } +} diff --git a/src/test/java/kr/co/mcmp/softwarecatalog/kubernetes/service/IbmCloudIngressApiTest.java b/src/test/java/kr/co/mcmp/softwarecatalog/kubernetes/service/IbmCloudIngressApiTest.java new file mode 100644 index 00000000..4ba848c7 --- /dev/null +++ b/src/test/java/kr/co/mcmp/softwarecatalog/kubernetes/service/IbmCloudIngressApiTest.java @@ -0,0 +1,90 @@ +package kr.co.mcmp.softwarecatalog.kubernetes.service; + +import static org.assertj.core.api.Assertions.*; +import static org.mockito.Mockito.*; +import com.fasterxml.jackson.databind.ObjectMapper; +import java.net.URI; +import java.net.http.*; +import java.nio.file.*; +import java.util.*; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; + +class IbmCloudIngressApiTest { + final ObjectMapper json = new ObjectMapper(); + final IbmCloudIngressApi api = spy(new IbmCloudIngressApi()); + final IbmCloudIngressApi.Session session = new IbmCloudIngressApi.Session("test-token",URI.create("https://containers.cloud.ibm.com/global/"),URI.create("https://jp-osa.iaas.cloud.ibm.com")); + @TempDir Path directory; + + @Test void officialGetAndPatchContractsAndNoRawKeyInSession() throws Exception { + var profile = new IbmIngressAutomationProperties.Profile(); profile.setRegion("jp-osa"); + Path key=directory.resolve("api-key"); Files.writeString(key,"private-key-for-test"); profile.setApiKeyFile(key.toString()); + doReturn(json.readTree("{\"access_token\":\"test-token\"}")).when(api).request(eq("POST"),any(),isNull(),anyString(),eq("application/x-www-form-urlencoded")); + var login=api.login(profile); + assertThat(login.toString()).doesNotContain("test-token","private-key-for-test"); + assertThat(login.containers().toString()).endsWith("/global/"); + doReturn(json.readTree("{\"id\":\"cluster-id\",\"provider\":\"vpc-gen2\",\"proxyProtocol\":{\"enable\":false}}")).when(api).request(eq("GET"),any(),any(),isNull(),any()); + api.cluster(login,"cluster-id"); api.proxyConfig(login,"cluster-id","public"); + verify(api).request(eq("GET"),eq(URI.create("https://containers.cloud.ibm.com/global/ingress/v2/load-balancer/configuration?cluster=cluster-id&type=public")),eq("test-token"),isNull(),any()); + doReturn(json.createObjectNode()).when(api).request(eq("PATCH"),any(),any(),any(),any()); + api.enableProxy(login,"cluster-id",List.of("10.2.0.0/24")); + var body=org.mockito.ArgumentCaptor.forClass(String.class); + verify(api).request(eq("PATCH"),eq(URI.create("https://containers.cloud.ibm.com/global/ingress/v2/load-balancer/configuration")),eq("test-token"),body.capture(),eq("application/json")); + assertThat(json.readTree(body.getValue()).path("proxyProtocol").path("cidr").get(0).asText()).isEqualTo("10.2.0.0/24"); + assertThat(json.readTree(body.getValue()).path("proxyProtocol").path("enable").asBoolean()).isTrue(); + } + + void lbResponses(String vpc, int capacity, String cidr, String next) throws Exception { + doAnswer(call -> { + URI uri=call.getArgument(1); + if (uri.getPath().equals("/v1/load_balancers")) return json.readTree(""" + {"load_balancers":[{"hostname":"a.lb.appdomain.cloud","provisioning_status":"active","subnets":[{"id":"subnet-1"}]}, + {"hostname":"b.lb.appdomain.cloud","provisioning_status":"active","subnets":[{"id":"subnet-1"}]}],"next":{"href":"%s"}} + """.formatted(next)); + return json.readTree("{\"vpc\":{\"id\":\""+vpc+"\"},\"available_ipv4_address_count\":"+capacity+",\"ipv4_cidr_block\":\""+cidr+"\"}"); + }).when(api).request(eq("GET"),any(),any(),isNull(),any()); + } + @Test void discoversExactLbSubnetsAndCountsCapacityAcrossSharedLbs() throws Exception { + lbResponses("vpc-1",4,"10.2.0.0/24",""); + assertThat(api.trustedSubnets(session,json.readTree("{\"vpcs\":[\"vpc-1\"]}"),Set.of("a.lb.appdomain.cloud","b.lb.appdomain.cloud"),true)).containsExactly("10.2.0.0/24"); + } + @ParameterizedTest @ValueSource(ints={-1,0,1,2,3}) void insufficientCapacityStopsBeforePatch(int capacity) throws Exception { + lbResponses("vpc-1",capacity,"10.2.0.0/24",""); + assertThatThrownBy(() -> api.trustedSubnets(session,json.readTree("{\"vpcs\":[\"vpc-1\"]}"),Set.of("a.lb.appdomain.cloud","b.lb.appdomain.cloud"),true)).hasMessageContaining("Insufficient"); + verify(api,never()).request(eq("PATCH"),any(),any(),any(),any()); + } + @Test void rejectsUnmatchedLoadBalancerAndForeignVpc() throws Exception { + lbResponses("vpc-other",100,"10.2.0.0/24",""); + var cluster=json.readTree("{\"vpcs\":[\"vpc-1\"]}"); + assertThatThrownBy(() -> api.trustedSubnets(session,cluster,Set.of("missing.lb.appdomain.cloud"),true)).hasMessageContaining("Cannot match"); + assertThatThrownBy(() -> api.trustedSubnets(session,cluster,Set.of("a.lb.appdomain.cloud"),true)).hasMessageContaining("outside"); + } + @ParameterizedTest @ValueSource(strings={"https://evil.example/v1/load_balancers","http://jp-osa.iaas.cloud.ibm.com/v1/load_balancers","https://jp-osa.iaas.cloud.ibm.com/other"}) + void neverSendsBearerTokenToUntrustedPagination(String next) throws Exception { + lbResponses("vpc-1",10,"10.2.0.0/24",next); + assertThatThrownBy(() -> api.trustedSubnets(session,json.readTree("{\"vpcs\":[\"vpc-1\"]}"),Set.of("a.lb.appdomain.cloud"),true)).hasMessageContaining("pagination"); + verify(api,never()).request(eq("GET"),eq(URI.create(next)),any(),any(),any()); + } + @ParameterizedTest @ValueSource(ints={301,401,403,429,500}) void httpFailuresDoNotExposeCredentialsOrUpstreamBody(int status) throws Exception { + HttpClient http=mock(HttpClient.class); HttpResponse response=mock(HttpResponse.class); + when(http.send(any(),any(HttpResponse.BodyHandler.class))).thenReturn(response); + when(response.statusCode()).thenReturn(status); when(response.body()).thenReturn("private upstream key data"); + var real=new IbmCloudIngressApi(http); + assertThatThrownBy(() -> real.request("PATCH",URI.create("https://containers.cloud.ibm.com/global/test"),"secret-token","secret-body","application/json")) + .hasMessageContaining("HTTP "+status).hasMessageNotContaining("private upstream") + .hasMessageNotContaining("secret-token").hasMessageNotContaining("secret-body"); + } + @ParameterizedTest @ValueSource(strings={"", "../another-cluster", "https://bad", "cluster?x=y", "cluster\nheader"}) + void invalidIdsNeverReachNetwork(String id) { + assertThatThrownBy(() -> api.cluster(session,id)).isInstanceOf(IllegalArgumentException.class); + verify(api,never()).request(any(),any(),any(),any(),any()); + } + @ParameterizedTest @ValueSource(strings={"{}","{\"proxyProtocol\":{}}","{\"proxyProtocol\":{\"enable\":\"false\"}}"}) + void unknownProxyResponseIsNotTreatedAsDisabled(String response) throws Exception { + doReturn(json.readTree(response)).when(api).request(eq("GET"),any(),any(),isNull(),any()); + assertThatThrownBy(() -> api.proxyConfig(session,"cluster-id","public")).hasMessageContaining("unknown PROXY"); + verify(api,never()).request(eq("PATCH"),any(),any(),any(),any()); + } +} diff --git a/src/test/java/kr/co/mcmp/softwarecatalog/kubernetes/service/IbmIngressAutomationPropertiesTest.java b/src/test/java/kr/co/mcmp/softwarecatalog/kubernetes/service/IbmIngressAutomationPropertiesTest.java new file mode 100644 index 00000000..c2bea15c --- /dev/null +++ b/src/test/java/kr/co/mcmp/softwarecatalog/kubernetes/service/IbmIngressAutomationPropertiesTest.java @@ -0,0 +1,32 @@ +package kr.co.mcmp.softwarecatalog.kubernetes.service; + +import static org.assertj.core.api.Assertions.*; +import java.nio.file.*; +import java.util.*; +import org.junit.jupiter.api.Test; +import org.springframework.boot.context.properties.bind.*; +import org.springframework.boot.context.properties.source.MapConfigurationPropertySource; +import org.springframework.beans.factory.config.YamlPropertiesFactoryBean; +import org.springframework.core.io.FileSystemResource; + +class IbmIngressAutomationPropertiesTest { + @Test void shippedOperatorExampleBindsWithRealSpringPropertyRules() { + var yaml=new YamlPropertiesFactoryBean(); + yaml.setResources(new FileSystemResource("doc/examples/ibm-ingress-automation/application-ibm-ingress.yaml")); + Map values=new HashMap<>(); yaml.getObject().forEach((k,v) -> values.put(k.toString(),v)); + var config=new Binder(new MapConfigurationPropertySource(values)).bind("app.ibm-ingress.automation",Bindable.of(IbmIngressAutomationProperties.class)).get(); + var profile=config.profile("project-a","ibm-jp-osa"); + assertThat(profile).isNotNull(); assertThat(profile.isAllowSharedLbChanges()).isTrue(); + assertThat(profile.isInstallCertManager()).isTrue(); assertThat(profile.allowsHost("app.company.com")).isTrue(); + assertThat(profile.getApiKeyFile()).isEqualTo("/run/am-ingress/ibm-api-key"); + assertThat(config.getCertManagerVersion()).isEqualTo("v1.20.2"); + assertThat(config.profile("other-project","ibm-jp-osa")).isNull(); + } + @Test void defaultIsOptInAndDuplicateTargetsFailClosed() { + var config=new IbmIngressAutomationProperties(); assertThat(config.getProfiles()).isEmpty(); + var p=new IbmIngressAutomationProperties.Profile(); + assertThat(p.isAllowSharedLbChanges()).isFalse(); assertThat(p.isInstallCertManager()).isFalse(); + p.setNamespace("project-a"); p.setConnectionName("ibm-a"); config.setProfiles(List.of(p,p)); + assertThatThrownBy(() -> config.profile("project-a","ibm-a")).hasMessageContaining("Duplicate"); + } +} diff --git a/src/test/java/kr/co/mcmp/softwarecatalog/kubernetes/service/IbmIngressAutomationServiceTest.java b/src/test/java/kr/co/mcmp/softwarecatalog/kubernetes/service/IbmIngressAutomationServiceTest.java new file mode 100644 index 00000000..c25bb584 --- /dev/null +++ b/src/test/java/kr/co/mcmp/softwarecatalog/kubernetes/service/IbmIngressAutomationServiceTest.java @@ -0,0 +1,110 @@ +package kr.co.mcmp.softwarecatalog.kubernetes.service; + +import static org.assertj.core.api.Assertions.*; +import static org.mockito.Mockito.*; +import com.fasterxml.jackson.databind.ObjectMapper; +import io.fabric8.kubernetes.api.model.ConfigMapBuilder; +import kr.co.mcmp.ape.cbtumblebug.api.CbtumblebugRestApi; +import kr.co.mcmp.ape.cbtumblebug.dto.K8sClusterDto; +import java.net.URI; +import java.util.*; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; + +class IbmIngressAutomationServiceTest { + final CbtumblebugRestApi tb=mock(CbtumblebugRestApi.class); + final IbmCloudIngressApi cloud=mock(IbmCloudIngressApi.class); + final IbmIngressAutomationProperties properties=new IbmIngressAutomationProperties(); + final IbmCertificateManager certificates=spy(new IbmCertificateManager(properties,null)); + final IbmIngressAutomationService service=new IbmIngressAutomationService(tb,properties,cloud,certificates,new IbmKubernetesIngressSetup(tb,properties)); + final IbmCloudIngressApi.Session session=new IbmCloudIngressApi.Session("test",URI.create("https://containers.cloud.ibm.com/global/"),URI.create("https://jp-osa.iaas.cloud.ibm.com")); + final K8sClusterDto target=IbmIngressSupportTest.cluster("ibm"); + + IbmIngressAutomationServiceTest() throws Exception { + target.setConnectionName("ibm-jp-osa"); target.setCspResourceId("ibm-cluster-selected"); + when(tb.getK8sClusterByName("project-a","chosen-cluster")).thenReturn(target); + when(cloud.login(any())).thenReturn(session); + when(cloud.cluster(session,"ibm-cluster-selected")).thenReturn(new ObjectMapper().readTree("{\"region\":\"jp-osa\",\"vpcs\":[\"vpc-1\"]}")); + when(cloud.proxyConfig(session,"ibm-cluster-selected","public")).thenReturn(new ObjectMapper().readTree("{\"proxyProtocol\":{\"enable\":false}}")); + when(cloud.trustedSubnets(eq(session),any(),eq(Set.of("a.lb.appdomain.cloud")),eq(true))).thenReturn(List.of("10.2.0.0/24")); + } + IbmIngressAutomationProperties.Profile authorize() { + var p=new IbmIngressAutomationProperties.Profile(); p.setNamespace("project-a"); p.setConnectionName("ibm-jp-osa"); + p.setRegion("jp-osa"); p.setAllowSharedLbChanges(true); properties.setProfiles(List.of(p)); return p; + } + @Test void readyClusterUsesExistingCertificateWithoutAnyAutomationWrites() { + try(var fixture=new IbmAutomationClusterFixture(true)) { + var result=service.prepare(fixture.client,"project-a","chosen-cluster","default",IbmIngressTlsResolverTest.config(),m -> {}); + assertThat(result.isTlsEnabled()).isTrue(); + assertThat(result.getIngressTlsSecret()).isEqualTo(IbmIngressTlsResolverTest.SECRET); + assertThat(fixture.client.configMaps().inNamespace("kube-system").withName(IbmIngressAutomationService.LOCK).get()).isNull(); + verifyNoInteractions(cloud,certificates); + } + } + @Test void preflightOnlyWarnsButDeployAppliesOnceToTheSelectedCluster() throws Exception { + authorize(); + try(var fixture=new IbmAutomationClusterFixture(false)) { + var config=IbmIngressTlsResolverTest.config(); + assertThat(service.check(fixture.client,"project-a","chosen-cluster","default",config)).anyMatch(w -> w.contains("shared IBM LBs")); + verify(cloud,never()).enableProxy(any(),any(),any()); + assertThat(fixture.client.configMaps().inNamespace("kube-system").withName(IbmIngressAutomationService.INTENT).get()).isNull(); + doAnswer(call -> { fixture.proxyReady(); return null; }).when(cloud).enableProxy(session,"ibm-cluster-selected",List.of("10.2.0.0/24")); + service.prepare(fixture.client,"project-a","chosen-cluster","default",config,m -> {}); + service.prepare(fixture.client,"project-a","chosen-cluster","default",config,m -> {}); + verify(cloud,times(1)).enableProxy(session,"ibm-cluster-selected",List.of("10.2.0.0/24")); + assertThat(fixture.client.configMaps().inNamespace("kube-system").withName(IbmIngressAutomationService.INTENT).get().getData().get("clusterId")).isEqualTo("ibm-cluster-selected"); + assertThat(fixture.client.configMaps().inNamespace("kube-system").withName(IbmIngressAutomationService.LOCK).get()).isNull(); + assertThat(fixture.client.network().v1().ingresses().inAnyNamespace().list().getItems()).isEmpty(); + } + } + @ParameterizedTest @ValueSource(strings={"missing-profile","wrong-project","wrong-connection","not-authorized"}) + void unauthorizedProfilesCannotWriteSharedResources(String scenario) { + if (!scenario.equals("missing-profile")) { + var p=authorize(); + if (scenario.equals("wrong-project")) p.setNamespace("other"); + if (scenario.equals("wrong-connection")) p.setConnectionName("other"); + if (scenario.equals("not-authorized")) p.setAllowSharedLbChanges(false); + } + try(var fixture=new IbmAutomationClusterFixture(false)) { + assertThatThrownBy(() -> service.prepare(fixture.client,"project-a","chosen-cluster","default",IbmIngressTlsResolverTest.config(),m -> {})).hasMessageContaining("authorize"); + verifyNoInteractions(cloud); + assertThat(fixture.client.configMaps().inNamespace("kube-system").withName(IbmIngressAutomationService.LOCK).get()).isNull(); + } + } + @Test void uncertainPatchIsNotRepeatedOnRetry() { + authorize(); + try(var fixture=new IbmAutomationClusterFixture(false)) { + doThrow(new IllegalArgumentException("IBM request timed out")).when(cloud).enableProxy(any(),any(),any()); + assertThatThrownBy(() -> service.prepare(fixture.client,"project-a","chosen-cluster","default",IbmIngressTlsResolverTest.config(),m -> {})).hasMessageContaining("timed out"); + assertThatThrownBy(() -> service.prepare(fixture.client,"project-a","chosen-cluster","default",IbmIngressTlsResolverTest.config(),m -> {})).hasMessageContaining("unresolved"); + verify(cloud,times(1)).enableProxy(any(),any(),any()); + } + } + @Test void activePreparationLockCannotBeStolen() { + authorize(); + try(var fixture=new IbmAutomationClusterFixture(false)) { + fixture.client.configMaps().inNamespace("kube-system").resource(new ConfigMapBuilder().withNewMetadata().withName(IbmIngressAutomationService.LOCK) + .withLabels(Map.of(IbmCertificateManager.OWNER,"true")).endMetadata().withData(Map.of("holder","someone-else","clusterId","ibm-cluster-selected", + "expiresAt",java.time.Instant.now().plusSeconds(900).toString())).build()).create(); + assertThatThrownBy(() -> service.prepare(fixture.client,"project-a","chosen-cluster","default",IbmIngressTlsResolverTest.config(),m -> {})).hasMessageContaining("in progress"); + verify(cloud,never()).enableProxy(any(),any(),any()); + assertThat(fixture.client.configMaps().inNamespace("kube-system").withName(IbmIngressAutomationService.LOCK).get().getData().get("holder")).isEqualTo("someone-else"); + } + } + @Test void invalidDomainStopsBeforeAnyProxyChange() { + authorize(); + try(var fixture=new IbmAutomationClusterFixture(false)) { + var config=IbmIngressTlsResolverTest.config(); config.setIngressHost("unowned.test.com"); + assertThatThrownBy(() -> service.prepare(fixture.client,"project-a","chosen-cluster","default",config,m -> {})).hasMessageContaining("custom domain"); + verifyNoInteractions(cloud); + } + } + @Test void otherCspCannotBeClaimedAsIbm() { + target.getConnectionConfig().setProviderName("aws"); + try(var fixture=new IbmAutomationClusterFixture(true)) { + assertThatThrownBy(() -> service.check(fixture.client,"project-a","chosen-cluster","default",IbmIngressTlsResolverTest.config())).hasMessageContaining("IBM cluster"); + verifyNoInteractions(cloud,certificates); + } + } +} diff --git a/src/test/java/kr/co/mcmp/softwarecatalog/kubernetes/service/IbmIngressAutomationTestSupport.java b/src/test/java/kr/co/mcmp/softwarecatalog/kubernetes/service/IbmIngressAutomationTestSupport.java new file mode 100644 index 00000000..7e232672 --- /dev/null +++ b/src/test/java/kr/co/mcmp/softwarecatalog/kubernetes/service/IbmIngressAutomationTestSupport.java @@ -0,0 +1,24 @@ +package kr.co.mcmp.softwarecatalog.kubernetes.service; + +import static org.mockito.Mockito.*; +import io.fabric8.kubernetes.client.KubernetesClient; +import kr.co.mcmp.softwarecatalog.application.dto.DeploymentConfigDTO; + +/** Preserve legacy ready/not-ready assertions; automatic provisioning has separate integration tests. */ +final class IbmIngressAutomationTestSupport { + static IbmIngressAutomationService legacy() { + var automation = mock(IbmIngressAutomationService.class); + when(automation.check(any(), anyString(), anyString(), anyString(), any())).thenAnswer(call -> { + KubernetesClient client = call.getArgument(0); + DeploymentConfigDTO config = IbmIngressTlsResolver.resolve(client, call.getArgument(3), call.getArgument(4)); + return IbmIngressSupport.verify(client, config); + }); + when(automation.prepare(any(), anyString(), anyString(), anyString(), any(), any())).thenAnswer(call -> { + KubernetesClient client = call.getArgument(0); + DeploymentConfigDTO config = IbmIngressTlsResolver.resolve(client, call.getArgument(3), call.getArgument(4)); + IbmIngressSupport.verify(client,config); + return config; + }); + return automation; + } +} diff --git a/src/test/java/kr/co/mcmp/softwarecatalog/kubernetes/service/IbmIngressSupportTest.java b/src/test/java/kr/co/mcmp/softwarecatalog/kubernetes/service/IbmIngressSupportTest.java new file mode 100644 index 00000000..eaf3d10f --- /dev/null +++ b/src/test/java/kr/co/mcmp/softwarecatalog/kubernetes/service/IbmIngressSupportTest.java @@ -0,0 +1,164 @@ +package kr.co.mcmp.softwarecatalog.kubernetes.service; + +import static org.assertj.core.api.Assertions.*; +import static org.mockito.Mockito.*; + +import java.util.Map; +import io.fabric8.kubernetes.api.model.ConfigMapBuilder; +import io.fabric8.kubernetes.api.model.ServiceBuilder; +import io.fabric8.kubernetes.api.model.ServiceListBuilder; +import io.fabric8.kubernetes.api.model.apps.DeploymentBuilder; +import io.fabric8.kubernetes.api.model.apps.DeploymentListBuilder; +import io.fabric8.kubernetes.api.model.networking.v1.IngressClassBuilder; +import io.fabric8.kubernetes.client.KubernetesClient; +import io.fabric8.kubernetes.client.dsl.Resource; +import kr.co.mcmp.ape.cbtumblebug.api.CbtumblebugRestApi; +import kr.co.mcmp.ape.cbtumblebug.dto.K8sClusterDto; +import kr.co.mcmp.softwarecatalog.SoftwareCatalog; +import kr.co.mcmp.softwarecatalog.application.dto.DeploymentRequest; +import kr.co.mcmp.softwarecatalog.application.service.VmSecurityGroupExposureService; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; + +class IbmIngressSupportTest { + static K8sClusterDto cluster(String provider) { + var c = new K8sClusterDto(); var connection = new K8sClusterDto.ConnectionConfig(); + connection.setProviderName(provider); c.setConnectionConfig(connection); return c; + } + + @ParameterizedTest @ValueSource(strings={"ibm", "IBM", "ibmcloud", "ibm-cloud", "ibm-vpc", "ibmvpc"}) + void mapsExistingCatalogClassWithoutChangingCatalog(String provider) { + var config = HelmIngressValuesTest.config(); config.setIngressClass("nginx"); + assertThat(IbmIngressSupport.resolve(cluster(provider), config).getIngressClass()).isEqualTo(IbmIngressSupport.PUBLIC_CLASS); + assertThat(config.getIngressClass()).isEqualTo("nginx"); + config.setIngressClass(IbmIngressSupport.PRIVATE_CLASS); + assertThat(IbmIngressSupport.resolve(cluster(provider), config).getIngressClass()).isEqualTo(IbmIngressSupport.PRIVATE_CLASS); + } + + @ParameterizedTest @ValueSource(strings={"aws", "azure", "gcp", "tencent", "ncp"}) + void keepsOtherCspNodePortClassAndRejectsIbmClass(String provider) { + var config = HelmIngressValuesTest.config(); config.setIngressClass("nginx"); + assertThat(IbmIngressSupport.resolve(cluster(provider), config).getIngressClass()).isEqualTo("nginx"); + config.setIngressClass(IbmIngressSupport.PUBLIC_CLASS); + assertThatThrownBy(() -> IbmIngressSupport.resolve(cluster(provider), config)).hasMessageContaining("IBM cluster"); + } + + static KubernetesClient readyClient(String clazz, boolean proxy, String trusted, String features, boolean http) { + var client = mock(KubernetesClient.class, RETURNS_DEEP_STUBS); + Resource classResource = mock(Resource.class); + var classes = client.network().v1().ingressClasses(); + doReturn(classResource).when(classes).withName(clazz); + when(client.network().v1().ingressClasses().withName(clazz).get()).thenReturn(new IngressClassBuilder() + .withNewMetadata().withName(clazz).endMetadata().withNewSpec().withController("cloud.ibm.com/"+clazz).endSpec().build()); + var deployments = client.apps().deployments(); + var deploymentOps = mock(io.fabric8.kubernetes.client.dsl.NonNamespaceOperation.class); + doReturn(deploymentOps).when(deployments).inNamespace("kube-system"); + var filtered = mock(io.fabric8.kubernetes.client.dsl.FilterWatchListDeletable.class); + doReturn(filtered).when(deploymentOps).withLabel("ingress-class", clazz); + when(filtered.list()) + .thenReturn(new DeploymentListBuilder().withItems(new DeploymentBuilder().withNewStatus().withAvailableReplicas(2).endStatus().build()).build()); + var service = new ServiceBuilder().withNewMetadata().withName(clazz.startsWith("public")?"public-crtest":"private-crtest") + .withLabels(Map.of("app.kubernetes.io/part-of","managed-ingress")) + .withAnnotations(Map.of(IbmIngressSupport.PROXY_FEATURE,features)).endMetadata() + .withNewSpec().withType("LoadBalancer").addNewPort().withPort(http?80:443).endPort().endSpec() + .withNewStatus().withNewLoadBalancer().addNewIngress().withHostname("test.lb.appdomain.cloud") + .endIngress().endLoadBalancer().endStatus().build(); + var services = client.services(); + var serviceOps = mock(io.fabric8.kubernetes.client.dsl.NonNamespaceOperation.class); + doReturn(serviceOps).when(services).inNamespace("kube-system"); + when(serviceOps.list()).thenReturn(new ServiceListBuilder().withItems(service).build()); + Resource configResource = mock(Resource.class); + var configs = client.configMaps(); + var configMaps = mock(io.fabric8.kubernetes.client.dsl.NonNamespaceOperation.class); + doReturn(configMaps).when(configs).inNamespace("kube-system"); + doReturn(configResource).when(configMaps).withName("ibm-k8s-controller-config"); + when(configResource.get()) + .thenReturn(new ConfigMapBuilder().withData(Map.of("use-proxy-protocol",String.valueOf(proxy),"proxy-real-ip-cidr",trusted)).build()); + return client; + } + + @ParameterizedTest @ValueSource(strings={IbmIngressSupport.PUBLIC_CLASS,IbmIngressSupport.PRIVATE_CLASS}) + void readyManagedAlbsExposeHostnameWithoutNodePortLookup(String clazz) { + var client = readyClient(clazz,true,"10.150.0.0/24","proxy-protocol",true); + assertThat(IbmIngressSupport.verify(client,clazz)).singleElement().asString().contains("test.lb.appdomain.cloud"); + verify(client.services(),never()).inAnyNamespace(); + } + + @Test void missingOriginalClientIpStopsDeployment() { + var client = readyClient(IbmIngressSupport.PUBLIC_CLASS,false,"10.150.0.0/24","",true); + assertThatThrownBy(() -> IbmIngressSupport.verify(client,IbmIngressSupport.PUBLIC_CLASS)).hasMessageContaining("source IP preservation is disabled"); + } + + @ParameterizedTest @ValueSource(strings={"", "0.0.0.0/0", "::/0", "invalid", "10.0.0.0/0", "10.150.0.0/24,"}) + void doesNotTrustProxyHeadersFromEverySource(String cidr) { + var client = readyClient(IbmIngressSupport.PUBLIC_CLASS,true,cidr,"proxy-protocol",true); + assertThatThrownBy(() -> IbmIngressSupport.verify(client,IbmIngressSupport.PUBLIC_CLASS)).hasMessageContaining("proxy-real-ip-cidr"); + } + + @Test void bothLbAndControllerMustUseProxyProtocol() { + var client = readyClient(IbmIngressSupport.PUBLIC_CLASS,true,"10.150.0.0/24","alb",true); + assertThatThrownBy(() -> IbmIngressSupport.verify(client,IbmIngressSupport.PUBLIC_CLASS)).hasMessageContaining("does not enable PROXY"); + } + + @Test void httpIsRejectedOnHttpsOnlyLb() { + var client=readyClient(IbmIngressSupport.PUBLIC_CLASS,true,"10.150.0.0/24","proxy-protocol",false); + var config=HelmIngressValuesTest.config(); config.setIngressClass(IbmIngressSupport.PUBLIC_CLASS); config.setIngressTlsEnabled(false); + assertThatThrownBy(() -> IbmIngressSupport.verify(client,config)).hasMessageContaining("does not expose port 80"); + config.setIngressTlsEnabled(true); + assertThat(IbmIngressSupport.verify(client,config)).isNotEmpty(); + } + + @Test void classMustBelongToIbmController() { + var client=readyClient(IbmIngressSupport.PUBLIC_CLASS,true,"10.150.0.0/24","proxy-protocol",true); + when(client.network().v1().ingressClasses().withName(IbmIngressSupport.PUBLIC_CLASS).get()) + .thenReturn(new IngressClassBuilder().withNewSpec().withController("k8s.io/ingress-nginx").endSpec().build()); + assertThatThrownBy(() -> IbmIngressSupport.verify(client,IbmIngressSupport.PUBLIC_CLASS)).hasMessageContaining("unavailable"); + } + + @Test void oldApiClientsGetManagedClassAndNeverOpenWorkerSecurityGroup() { + var tb=mock(CbtumblebugRestApi.class); var ledger=mock(VmSecurityGroupExposureService.class); + var resolver=mock(K8sWorkerSecurityGroupResolver.class); var access=new K8sIngressAccessService(tb,ledger,resolver); + when(tb.getK8sClusterByName("default","ibm-cluster")).thenReturn(cluster("ibm")); + var request=DeploymentRequest.builder().namespace("default").clusterName("ibm-cluster") + .ingressEnabled(true).ingressClass("nginx").openServicePort(true).servicePortCidr("203.0.113.8/32").build(); + access.resolveTarget(request,new SoftwareCatalog()); + assertThat(request.getIngressClass()).isEqualTo(IbmIngressSupport.PUBLIC_CLASS); + access.open(request,null); + verifyNoInteractions(ledger,resolver); + } + + @Test void missingOrUnreadyManagedResourcesFailClosed() { + var client = readyClient(IbmIngressSupport.PUBLIC_CLASS,true,"10.150.0.0/24","proxy-protocol",true); + var service = client.services().inNamespace("kube-system").list().getItems().get(0); + service.setStatus(null); + assertThatThrownBy(() -> IbmIngressSupport.verify(client,IbmIngressSupport.PUBLIC_CLASS)).hasMessageContaining("no ready external endpoint"); + when(client.services().inNamespace("kube-system").list()).thenReturn(new ServiceListBuilder().build()); + assertThatThrownBy(() -> IbmIngressSupport.verify(client,IbmIngressSupport.PUBLIC_CLASS)).hasMessageContaining("No active"); + var other = readyClient(IbmIngressSupport.PUBLIC_CLASS,true,"10.150.0.0/24","proxy-protocol",true); + when(other.apps().deployments().inNamespace("kube-system").withLabel("ingress-class",IbmIngressSupport.PUBLIC_CLASS).list()) + .thenReturn(new DeploymentListBuilder().build()); + assertThatThrownBy(() -> IbmIngressSupport.verify(other,IbmIngressSupport.PUBLIC_CLASS)).hasMessageContaining("not ready"); + } + + @ParameterizedTest @ValueSource(strings={IbmIngressSupport.PUBLIC_CLASS,IbmIngressSupport.PRIVATE_CLASS}) + void managedRoutesMustKeepCidrAndCannotExposeBypassServices(String clazz) { + String route = """ + kind: Ingress + metadata: + annotations: + kubernetes.io/ingress.class: %s + nginx.ingress.kubernetes.io/whitelist-source-range: 203.0.113.8/32 + spec: + ingressClassName: %s + rules: + - host: app.example.com + """.formatted(clazz,clazz); + assertThatCode(() -> K8sIngressPolicy.verifyManifest(route,"203.0.113.8/32","app.example.com",clazz)).doesNotThrowAnyException(); + assertThatThrownBy(() -> K8sIngressPolicy.verifyManifest(route.replace("ingressClassName: "+clazz,"ingressClassName: nginx"),"203.0.113.8/32","app.example.com",clazz)).hasMessageContaining("restriction"); + assertThatThrownBy(() -> K8sIngressPolicy.verifyManifest(route.replace("203.0.113.8/32","0.0.0.0/0"),"203.0.113.8/32","app.example.com",clazz)).hasMessageContaining("restriction"); + for (String type : java.util.List.of("NodePort","LoadBalancer")) { + assertThatThrownBy(() -> K8sIngressPolicy.verifyManifest(route+"\n---\nkind: Service\nspec:\n type: "+type,"203.0.113.8/32","app.example.com",clazz)).hasMessageContaining("bypassing"); + } + } +} diff --git a/src/test/java/kr/co/mcmp/softwarecatalog/kubernetes/service/IbmIngressTlsResolverTest.java b/src/test/java/kr/co/mcmp/softwarecatalog/kubernetes/service/IbmIngressTlsResolverTest.java new file mode 100644 index 00000000..ee1bb22f --- /dev/null +++ b/src/test/java/kr/co/mcmp/softwarecatalog/kubernetes/service/IbmIngressTlsResolverTest.java @@ -0,0 +1,227 @@ +package kr.co.mcmp.softwarecatalog.kubernetes.service; + +import static org.assertj.core.api.Assertions.*; +import static org.mockito.Mockito.*; + +import java.io.StringWriter; +import java.math.BigInteger; +import java.security.KeyPair; +import java.security.KeyPairGenerator; +import java.time.Instant; +import java.util.*; +import java.util.stream.Stream; +import io.fabric8.kubernetes.api.model.*; +import io.fabric8.kubernetes.api.model.apps.DeploymentBuilder; +import io.fabric8.kubernetes.client.KubernetesClient; +import io.fabric8.kubernetes.client.dsl.Resource; +import org.bouncycastle.asn1.x500.X500Name; +import org.bouncycastle.asn1.x509.Extension; +import org.bouncycastle.asn1.x509.GeneralName; +import org.bouncycastle.asn1.x509.GeneralNames; +import org.bouncycastle.cert.jcajce.JcaX509v3CertificateBuilder; +import org.bouncycastle.openssl.jcajce.JcaPEMWriter; +import org.bouncycastle.operator.jcajce.JcaContentSignerBuilder; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; + +class IbmIngressTlsResolverTest { + static final String DOMAIN = "cluster-test.jp-osa.containers.appdomain.cloud"; + static final String HOST = "grafana." + DOMAIN; + static final String SECRET = "ibm-default-cert"; + static final KeyPair RSA = keyPair("RSA"); + static final KeyPair EC = keyPair("EC"); + + static KeyPair keyPair(String algorithm) { + try { var generator = KeyPairGenerator.getInstance(algorithm); generator.initialize("RSA".equals(algorithm) ? 2048 : 256); return generator.generateKeyPair(); } + catch (Exception e) { throw new AssertionError(e); } + } + + static Secret certificate(String name, KeyPair key, String... hosts) { + return certificate(name, key, Instant.now().minusSeconds(3600), Instant.now().plusSeconds(86400), hosts); + } + + static Secret certificate(String name, KeyPair key, Instant from, Instant until, String... hosts) { + try { + var subject = new X500Name("CN=AM test certificate"); + var builder = new JcaX509v3CertificateBuilder(subject, BigInteger.ONE, Date.from(from), Date.from(until), subject, key.getPublic()); + builder.addExtension(Extension.subjectAlternativeName, false, new GeneralNames(Stream.of(hosts).map(h -> new GeneralName(GeneralName.dNSName, h)).toArray(GeneralName[]::new))); + var cert = builder.build(new JcaContentSignerBuilder("RSA".equals(key.getPrivate().getAlgorithm()) ? "SHA256withRSA" : "SHA256withECDSA").build(key.getPrivate())); + var writer = new StringWriter(); + try (var pem = new JcaPEMWriter(writer)) { + // SunEC's private-key encoding keeps curve parameters in PKCS#8, not SEC1. + // Retain that information; a bare SEC1 conversion would generate an invalid fixture. + pem.writeObject("EC".equals(key.getPrivate().getAlgorithm()) + ? new org.bouncycastle.util.io.pem.PemObject("PRIVATE KEY", key.getPrivate().getEncoded()) : key.getPrivate()); + } + return new SecretBuilder().withNewMetadata().withName(name).withNamespace("default").endMetadata().withType("kubernetes.io/tls") + .withData(Map.of("tls.crt", Base64.getEncoder().encodeToString(cert.getEncoded()), + "tls.key", Base64.getEncoder().encodeToString(writer.toString().getBytes(java.nio.charset.StandardCharsets.US_ASCII)))).build(); + } catch (Exception e) { throw new AssertionError(e); } + } + + static Resource stubBindings(KubernetesClient client, String json) { + var ops = mock(io.fabric8.kubernetes.client.dsl.NonNamespaceOperation.class); + var configMaps = client.configMaps(); + doReturn(ops).when(configMaps).inNamespace("default"); + Resource resource = mock(Resource.class); + doReturn(resource).when(ops).withName(IbmIngressTlsResolver.BINDINGS_CONFIG_MAP); + when(resource.get()).thenReturn(json == null ? null : new ConfigMapBuilder().withData(Map.of("bindings.json", json)).build()); + return resource; + } + + static void configureDefault(KubernetesClient client) { + stubBindings(client, null); + var deployment = client.apps().deployments().inNamespace("kube-system").withLabel("ingress-class", IbmIngressSupport.PUBLIC_CLASS).list().getItems().get(0); + deployment.setSpec(new DeploymentBuilder().withNewSpec().withNewTemplate().withNewSpec() + .addNewContainer().withName("nginx").withArgs("--default-ssl-certificate=default/" + SECRET).endContainer() + .endSpec().endTemplate().endSpec().build().getSpec()); + when(KubernetesIngressTlsWarningsTest.stubSecret(client, "default", SECRET).get()).thenReturn(certificate(SECRET, RSA, DOMAIN, "*." + DOMAIN)); + } + + static KubernetesClient client() { + var client = IbmIngressSupportTest.readyClient(IbmIngressSupport.PUBLIC_CLASS, true, "10.150.0.0/24", "proxy-protocol", false); + configureDefault(client); + return client; + } + + static kr.co.mcmp.softwarecatalog.application.dto.DeploymentConfigDTO config() { + var config = HelmIngressValuesTest.config(); config.setIngressClass(IbmIngressSupport.PUBLIC_CLASS); + config.setIngressHost(HOST); config.setIngressTlsEnabled(true); config.setIngressTlsSecret("stale-catalog-cert"); + return config; + } + + @Test void explicitHttpsDiscoversDefaultWithoutChangingInputOrCluster() { + var client = client(); var input = config(); + var resolved = IbmIngressTlsResolver.resolve(client, "default", input); + assertThat(resolved.isTlsEnabled()).isTrue(); assertThat(resolved.getIngressTlsSecret()).isEqualTo(SECRET); + assertThat(input.isTlsEnabled()).isTrue(); assertThat(input.getIngressTlsSecret()).isEqualTo("stale-catalog-cert"); + assertThat(IbmIngressSupport.verify(client, resolved)).isNotEmpty(); // real resolved mode selects 443, not 80 + var settings = IbmIngressTlsResolver.describe(client, "default", IbmIngressSupport.PUBLIC_CLASS); + assertThat(settings.defaultDomain()).isEqualTo(DOMAIN); assertThat(settings.warnings()).isEmpty(); + assertThat(settings.toString()).doesNotContain("PRIVATE KEY", "tls.key", SECRET); + verify(client.secrets().inNamespace("default").withName(SECRET), never()).create(); + } + + @ParameterizedTest @ValueSource(strings={"rclone.test.com", "example.test", HOST}) + void httpDoesNotReadCertificatesOrBindingsAndClearsHiddenTlsSecret(String host) { + var client = mock(KubernetesClient.class); var input = config(); + input.setIngressHost(host); input.setIngressTlsEnabled(false); + var resolved = IbmIngressTlsResolver.resolve(client, "default", input); + assertThat(resolved.isTlsEnabled()).isFalse(); assertThat(resolved.getIngressTlsSecret()).isNull(); + var request = new kr.co.mcmp.softwarecatalog.application.dto.DeploymentRequest(); + IbmIngressTlsResolver.apply(request, resolved); + assertThat(request.getIngressTlsEnabled()).isFalse(); assertThat(request.getIngressTlsSecret()).isNull(); + verifyNoInteractions(client); + } + + @Test void customBindingWinsOverDefaultAndHonorsEcCertificates() { + var client = client(); stubBindings(client, "[{\"host\":\"*.company.com\",\"secretName\":\"company-tls\"}]"); + when(KubernetesIngressTlsWarningsTest.stubSecret(client, "default", "company-tls").get()).thenReturn(certificate("company-tls", EC, "*.company.com")); + var config = config(); config.setIngressHost("grafana.company.com"); + assertThat(IbmIngressTlsResolver.resolve(client, "default", config).getIngressTlsSecret()).isEqualTo("company-tls"); + assertThat(IbmIngressTlsResolver.describe(client, "default", IbmIngressSupport.PUBLIC_CLASS).customDomains()).containsExactly("*.company.com"); + } + + @Test void ecPemKeyPairVerification() throws Exception { + var secret = certificate("test", EC, "*.company.com"); + var cert = (java.security.cert.X509Certificate) java.security.cert.CertificateFactory.getInstance("X.509").generateCertificate( + new java.io.ByteArrayInputStream(Base64.getDecoder().decode(secret.getData().get("tls.crt")))); + IbmIngressTlsResolver.verifyKeyPair(cert, new String(Base64.getDecoder().decode(secret.getData().get("tls.key")), java.nio.charset.StandardCharsets.US_ASCII)); + var ec = (java.security.interfaces.ECPrivateKey) EC.getPrivate(); + var sec1 = new org.bouncycastle.asn1.sec.ECPrivateKey(256, ec.getS(), new org.bouncycastle.asn1.ASN1ObjectIdentifier("1.2.840.10045.3.1.7")); + var text = new StringWriter(); + try (var pem = new JcaPEMWriter(text)) { pem.writeObject(new org.bouncycastle.util.io.pem.PemObject("EC PRIVATE KEY", sec1.getEncoded())); } + IbmIngressTlsResolver.verifyKeyPair(cert, text.toString()); + } + + @Test void exactBindingOverridesWildcardAndDoesNotFallBackIfItsSecretIsBroken() { + assertThat(IbmIngressTlsResolver.selectBinding(Map.of("*.company.com", "wild", "app.company.com", "exact"), "app.company.com")).isEqualTo("exact"); + var client = client(); stubBindings(client, "[{\"host\":\"" + HOST + "\",\"secretName\":\"missing-cert\"}]"); + when(KubernetesIngressTlsWarningsTest.stubSecret(client, "default", "missing-cert").get()).thenReturn(null); + assertThatThrownBy(() -> IbmIngressTlsResolver.resolve(client, "default", config())).hasMessageContaining("does not exist"); + } + + @ParameterizedTest @ValueSource(strings={"grafana.company.com", "dev.grafana." + DOMAIN, "other-cluster.jp-osa.containers.appdomain.cloud", "*." + DOMAIN}) + void rejectsUnregisteredAndWildcardHosts(String host) { + var config = config(); config.setIngressHost(host); + assertThatThrownBy(() -> IbmIngressTlsResolver.resolve(client(), "default", config)).isInstanceOf(IllegalArgumentException.class); + } + + @Test void wildcardMatchesOneDnsLabelOnly() { + assertThat(IbmIngressTlsResolver.matches("*.company.com", "grafana.company.com")).isTrue(); + for (String host : List.of("company.com", "dev.grafana.company.com", "company.com.attacker.example", "*.company.com", "-bad.company.com")) + assertThat(IbmIngressTlsResolver.matches("*.company.com", host)).as(host).isFalse(); + } + + @Test void registeredHostMustStillBeCoveredByCertificate() { + var client = client(); stubBindings(client, "[{\"host\":\"grafana.company.com\",\"secretName\":\"" + SECRET + "\"}]"); + var config = config(); config.setIngressHost("grafana.company.com"); + assertThatThrownBy(() -> IbmIngressTlsResolver.resolve(client, "default", config)).hasMessageContaining("does not cover"); + } + + @ParameterizedTest @ValueSource(strings={"expired", "future", "mismatched-key", "bad-cert", "bad-key", "wrong-type", "missing-cert", "missing-key"}) + void invalidCertificateBlocksWithoutExposingSecretContents(String kind) { + var client = client(); Secret secret = certificate(SECRET, RSA, "*." + DOMAIN); + if (kind.equals("expired")) secret = certificate(SECRET, RSA, Instant.now().minusSeconds(86400), Instant.now().minusSeconds(60), "*." + DOMAIN); + if (kind.equals("future")) secret = certificate(SECRET, RSA, Instant.now().plusSeconds(3600), Instant.now().plusSeconds(86400), "*." + DOMAIN); + secret.setData(new HashMap<>(secret.getData())); + if (kind.equals("mismatched-key")) secret.getData().put("tls.key", certificate("other", EC, "*." + DOMAIN).getData().get("tls.key")); + if (kind.equals("bad-cert")) secret.getData().put("tls.crt", "sensitive-invalid-data"); + if (kind.equals("bad-key")) secret.getData().put("tls.key", "sensitive-invalid-data"); + if (kind.equals("wrong-type")) secret.setType("Opaque"); + if (kind.equals("missing-cert")) secret.getData().remove("tls.crt"); + if (kind.equals("missing-key")) secret.getData().remove("tls.key"); + when(client.secrets().inNamespace("default").withName(SECRET).get()).thenReturn(secret); + assertThatThrownBy(() -> IbmIngressTlsResolver.resolve(client, "default", config())).hasMessageContaining("currently valid certificate").hasMessageNotContaining("sensitive").hasMessageNotContaining("PRIVATE KEY"); + } + + @ParameterizedTest @ValueSource(strings={"", "{}", "null", "[1]", "[{\"host\":\"*.company.com\"}]", "[{\"host\":\"*.*.com\",\"secretName\":\"cert\"}]", "[{\"host\":\"app.company.com\",\"secretName\":\"default/cert\"}]", "[{\"host\":\"app.company.com\",\"secretName\":\"cert\",\"extra\":true}]", "[{\"host\":\"app.company.com\",\"secretName\":\"a\"},{\"host\":\"app.company.com\",\"secretName\":\"b\"}]"}) + void malformedAdministratorBindingsFailClosed(String json) { + var client = client(); stubBindings(client, json); + assertThatThrownBy(() -> IbmIngressTlsResolver.resolve(client, "default", config())).hasMessageContaining("Invalid am-ingress-tls-bindings"); + } + + @Test void readFailuresDoNotLeakUpstreamBodies() { + var client = client(); when(client.secrets().inNamespace("default").withName(SECRET).get()).thenThrow(new IllegalStateException("private content")); + assertThatThrownBy(() -> IbmIngressTlsResolver.resolve(client, "default", config())).hasMessageContaining("Secret read permission").hasMessageNotContaining("private content"); + when(stubBindings(client, null).get()).thenThrow(new IllegalStateException("private content")); + assertThatThrownBy(() -> IbmIngressTlsResolver.resolve(client, "default", config())).hasMessageContaining("ConfigMap read permission").hasMessageNotContaining("private content"); + } + + @Test void rereadsRotatedSecretsAndDoesNotCacheTheCertificate() { + var client = client(); assertThat(IbmIngressTlsResolver.resolve(client, "default", config()).isTlsEnabled()).isTrue(); + when(client.secrets().inNamespace("default").withName(SECRET).get()).thenReturn(certificate(SECRET, EC, "other.example.com")); + assertThatThrownBy(() -> IbmIngressTlsResolver.resolve(client, "default", config())).hasMessageContaining("does not identify one IBM Ingress domain"); + } + + @Test void missingOrDifferentDefaultReferencesAreRejected() { + var client = client(); var items = client.apps().deployments().inNamespace("kube-system").withLabel("ingress-class", IbmIngressSupport.PUBLIC_CLASS).list().getItems(); + items.get(0).getSpec().getTemplate().getSpec().getContainers().get(0).setArgs(List.of("--default-ssl-certificate", "other/" + SECRET)); + assertThatThrownBy(() -> IbmIngressTlsResolver.resolve(client, "default", config())).hasMessageContaining("another namespace"); + items.get(0).getSpec().getTemplate().getSpec().getContainers().get(0).setArgs(List.of()); + assertThatThrownBy(() -> IbmIngressTlsResolver.resolve(client, "default", config())).hasMessageContaining("Cannot identify"); + } + + @Test void otherProvidersAndDisabledIngressRemainUnchangedAndDoNotReadSecrets() { + var client = mock(KubernetesClient.class); var config = config(); config.setIngressClass("nginx"); + assertThat(IbmIngressTlsResolver.resolve(client, "default", config)).isSameAs(config); + config.setIngressClass(IbmIngressSupport.PUBLIC_CLASS); config.setIngressEnabled(false); + assertThat(IbmIngressTlsResolver.resolve(client, "default", config)).isSameAs(config); + verifyNoInteractions(client); + } + + @Test void selectedSecretFlowsThroughEveryChartProfileAndHistoryRequest() { + var config = IbmIngressTlsResolver.resolve(client(), "default", config()); + var request = new kr.co.mcmp.softwarecatalog.application.dto.DeploymentRequest(); + IbmIngressTlsResolver.apply(request, config); + assertThat(request.getIngressTlsSecret()).isEqualTo(SECRET); assertThat(request.getIngressTlsEnabled()).isTrue(); + for (var chart : List.of(HelmIngressValuesTest.chart("grafana", "https://grafana.github.io/helm-charts", "7.3.0"), + HelmIngressValuesTest.chart("nginx", "https://charts.bitnami.com/bitnami", "21.1.23"), + HelmIngressValuesTest.chart("prometheus", "https://prometheus-community.github.io/helm-charts", "25.8.0"), + HelmIngressValuesTest.chart("rclone", "https://jacobcolvin.com/helm-charts", "1.0.1"), + HelmIngressValuesTest.chart("unknown", "https://example.com", "1.0.0"))) { + assertThat(HelmIngressValues.from(chart, config).toString()).contains(SECRET, HOST, IbmIngressSupport.PUBLIC_CLASS).doesNotContain("stale-catalog-cert"); + } + } +} diff --git a/src/test/java/kr/co/mcmp/softwarecatalog/kubernetes/service/IbmKubernetesIngressSetupTest.java b/src/test/java/kr/co/mcmp/softwarecatalog/kubernetes/service/IbmKubernetesIngressSetupTest.java new file mode 100644 index 00000000..d1c3bfa5 --- /dev/null +++ b/src/test/java/kr/co/mcmp/softwarecatalog/kubernetes/service/IbmKubernetesIngressSetupTest.java @@ -0,0 +1,181 @@ +package kr.co.mcmp.softwarecatalog.kubernetes.service; + +import static org.assertj.core.api.Assertions.*; +import static org.mockito.Mockito.*; +import com.fasterxml.jackson.databind.ObjectMapper; +import io.fabric8.kubernetes.api.model.*; +import java.util.*; +import kr.co.mcmp.ape.cbtumblebug.api.CbtumblebugRestApi; +import kr.co.mcmp.ape.cbtumblebug.dto.K8sClusterDto; +import kr.co.mcmp.softwarecatalog.application.dto.DeploymentConfigDTO; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; + +class IbmKubernetesIngressSetupTest { + final CbtumblebugRestApi tb = mock(CbtumblebugRestApi.class); + final IbmIngressAutomationProperties props = new IbmIngressAutomationProperties(); + final IbmKubernetesIngressSetup setup = spy(new IbmKubernetesIngressSetup(tb,props)); + final K8sClusterDto cluster = IbmIngressSupportTest.cluster("ibm"); + final DeploymentConfigDTO config = IbmIngressTlsResolverTest.config().toBuilder().ingressTlsEnabled(false).ingressTlsSecret(null).ingressHost("app.test").build(); + IbmKubernetesIngressSetupTest() throws Exception { + cluster.setConnectionName("ibm-jp-osa"); cluster.setCspResourceId("cluster-1"); + cluster.setNetwork(new K8sClusterDto.Network("vpc-1", List.of("subnet-a","stale-subnet"),List.of(),List.of())); + when(tb.getVNetSecurityMetadata("project-a","vpc-1")).thenReturn(new ObjectMapper().readTree(""" + {"connectionName":"ibm-jp-osa","cspResourceId":"vpc-csp","subnetInfoList":[ + {"connectionName":"ibm-jp-osa","cspVNetId":"vpc-csp","cspResourceId":"subnet-csp","ipv4_CIDR":"10.2.0.0/24"}]} + """)); + doNothing().when(setup).awaitReady(any(),any(),any(),any()); + } + IbmAutomationClusterFixture fixture() { + var f = new IbmAutomationClusterFixture(false); + var s=f.client.services().inNamespace("kube-system").withName("public-alb").get(); + s.getMetadata().getAnnotations().put("service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-lb-name","kube-cluster-1-ingress-public"); + s.getMetadata().getAnnotations().put(IbmKubernetesIngressSetup.OUTBOUND,"443"); + s.getMetadata().getAnnotations().put("operator-keep","yes"); + s.getSpec().setClusterIP("172.21.0.4"); s.getSpec().setSelector(Map.of("operator-selector","keep")); + s.getSpec().getPorts().get(0).setNodePort(30660); s.getSpec().getPorts().get(0).setTargetPort(new IntOrString(443)); + f.client.services().inNamespace("kube-system").resource(s).update(); + var d=f.client.apps().deployments().inNamespace("kube-system").withName("public-alb").get(); + d.getSpec().getTemplate().getSpec().getContainers().get(0).getArgs().addAll(List.of("--configmap=kube-system/ibm-k8s-controller-config","--http-port=80","--https-port=443")); + f.client.apps().deployments().inNamespace("kube-system").resource(d).update(); + f.client.nodes().resource(new NodeBuilder().withNewMetadata().withName("worker-1").withLabels(Map.of("ibm-cloud.kubernetes.io/subnet-id","subnet-csp")).endMetadata() + .withNewStatus().addNewAddress().withType("InternalIP").withAddress("10.2.0.5").endAddress().endStatus().build()).create(); + return f; + } + @Test void specCheckReadsWithoutCreatingOrUpdatingAnything() { + try(var f=fixture()) { + String before=f.client.getKubernetesSerialization().asJson(f.client.services().inNamespace("kube-system").list()); + assertThat(setup.check(f.client,"project-a",cluster,config)).anyMatch(w -> w.contains("shared IBM")); + assertThat(f.client.getKubernetesSerialization().asJson(f.client.services().inNamespace("kube-system").list())).isEqualTo(before); + assertThat(f.client.configMaps().inNamespace("kube-system").withName(IbmKubernetesIngressSetup.JOURNAL).get()).isNull(); + verify(setup,never()).awaitReady(any(),any(),any(),any()); + } + } + @Test void httpOrchestrationUsesMcmpCredentialsWithoutIbmKeyOrCertificateCalls() { + try(var f=fixture()) { + var cloud=mock(IbmCloudIngressApi.class); var certificates=mock(IbmCertificateManager.class); + var service=new IbmIngressAutomationService(tb,props,cloud,certificates,setup); + when(tb.getK8sClusterByName("project-a","selected-cluster")).thenReturn(cluster); + assertThat(service.check(f.client,"project-a","selected-cluster","default",config)).isNotEmpty(); + var resolved=service.prepare(f.client,"project-a","selected-cluster","default",config,m -> {}); + assertThat(resolved.isTlsEnabled()).isFalse(); assertThat(resolved.getIngressTlsSecret()).isNull(); + assertThat(f.client.configMaps().inNamespace("kube-system").withName(IbmIngressAutomationService.LOCK).get()).isNull(); + verifyNoInteractions(cloud,certificates); + } + } + @Test void preparePreservesExistingHttpsAndUnknownSettingsAndIsIdempotent() { + try(var f=fixture()) { + setup.prepare(f.client,"project-a",cluster,config,m -> {}); + var s=f.client.services().inNamespace("kube-system").withName("public-alb").get(); + assertThat(s.getSpec().getPorts()).extracting(ServicePort::getPort).containsExactly(443,80); + assertThat(s.getSpec().getPorts().get(0).getNodePort()).isEqualTo(30660); + assertThat(s.getSpec().getClusterIP()).isEqualTo("172.21.0.4"); assertThat(s.getSpec().getSelector()).containsEntry("operator-selector","keep"); + assertThat(s.getMetadata().getAnnotations()).containsEntry("operator-keep","yes").containsEntry(IbmIngressSupport.PROXY_FEATURE,"alb,proxy-protocol"); + var cm=f.client.configMaps().inNamespace("kube-system").withName(IbmKubernetesIngressSetup.CONFIG).get(); + assertThat(cm.getData()).containsEntry("proxy-real-ip-cidr","10.2.0.0/24").containsEntry("use-forwarded-headers","false"); + assertThat(f.client.configMaps().inNamespace("kube-system").withName(IbmKubernetesIngressSetup.JOURNAL).get().getData()).containsEntry("state","READY"); + String version=s.getMetadata().getResourceVersion(); + setup.prepare(f.client,"project-a",cluster,config,m -> {}); + assertThat(f.client.services().inNamespace("kube-system").withName("public-alb").get().getMetadata().getResourceVersion()).isEqualTo(version); + verify(setup,times(1)).awaitReady(any(),any(),any(),any()); + assertThat(f.client.services().inNamespace("kube-system").list().getItems()).hasSize(1); + assertThat(f.client.network().v1().ingresses().inAnyNamespace().list().getItems()).isEmpty(); + } + } + @Test void failedConvergenceRestoresOwnFieldsAndPreservesConcurrentUnrelatedFields() { + try(var f=fixture()) { + doAnswer(call -> { + var s=f.client.services().inNamespace("kube-system").withName("public-alb").get(); + s.getMetadata().getAnnotations().put("operator-new","keep"); f.client.services().inNamespace("kube-system").resource(s).update(); + throw new IllegalArgumentException("timeout"); + }).when(setup).awaitReady(any(),any(),any(),any()); + assertThatThrownBy(() -> setup.prepare(f.client,"project-a",cluster,config,m -> {})).hasMessageContaining("restored"); + var s=f.client.services().inNamespace("kube-system").withName("public-alb").get(); + assertThat(s.getSpec().getPorts()).extracting(ServicePort::getPort).containsExactly(443); + assertThat(s.getMetadata().getAnnotations()).containsEntry("operator-new","keep").containsEntry(IbmIngressSupport.PROXY_FEATURE,"alb").containsEntry(IbmKubernetesIngressSetup.OUTBOUND,"443"); + assertThat(f.client.configMaps().inNamespace("kube-system").withName(IbmKubernetesIngressSetup.CONFIG).get().getData()).containsEntry("use-proxy-protocol","false"); + assertThat(f.client.configMaps().inNamespace("kube-system").withName(IbmKubernetesIngressSetup.JOURNAL).get().getData()).containsEntry("state","ROLLED_BACK"); + } + } + @Test void concurrentProxyChangesAreNotOverwrittenDuringRollback() { + try(var f=fixture()) { + doAnswer(call -> { + var s=f.client.services().inNamespace("kube-system").withName("public-alb").get(); + s.getMetadata().getAnnotations().put(IbmIngressSupport.PROXY_FEATURE,"operator-value"); f.client.services().inNamespace("kube-system").resource(s).update(); + throw new IllegalArgumentException("timeout"); + }).when(setup).awaitReady(any(),any(),any(),any()); + assertThatThrownBy(() -> setup.prepare(f.client,"project-a",cluster,config,m -> {})).hasMessageContaining("review"); + assertThat(f.client.services().inNamespace("kube-system").withName("public-alb").get().getMetadata().getAnnotations()).containsEntry(IbmIngressSupport.PROXY_FEATURE,"operator-value"); + assertThat(f.client.configMaps().inNamespace("kube-system").withName(IbmKubernetesIngressSetup.JOURNAL).get().getData()).containsEntry("state","REVIEW_REQUIRED"); + } + } + @ParameterizedTest @ValueSource(strings={"missing-label","foreign-subnet","foreign-internal-ip","explicit-unknown-lb-subnet","wrong-connection","wrong-vpc"}) + void unverifiedNetworkStopsBeforeWrites(String mode) { + try(var f=fixture()) { + var node=f.client.nodes().withName("worker-1").get(); + if(mode.equals("missing-label")) node.getMetadata().setLabels(Map.of()); + if(mode.equals("foreign-subnet")) node.getMetadata().getLabels().put("ibm-cloud.kubernetes.io/subnet-id","foreign"); + if(mode.equals("foreign-internal-ip")) node.getStatus().getAddresses().get(0).setAddress("10.9.0.1"); + f.client.nodes().resource(node).update(); + if(mode.equals("explicit-unknown-lb-subnet")) { + var s=f.client.services().inNamespace("kube-system").withName("public-alb").get(); + s.getMetadata().getAnnotations().put(IbmKubernetesIngressSetup.SUBNETS,"unknown"); f.client.services().inNamespace("kube-system").resource(s).update(); + } + if(mode.equals("wrong-connection")) cluster.setConnectionName("other"); + if(mode.equals("wrong-vpc")) cluster.getNetwork().setVNetId("other"); + assertThatThrownBy(() -> setup.prepare(f.client,"project-a",cluster,config,m -> {})).isInstanceOf(IllegalArgumentException.class); + assertThat(f.client.configMaps().inNamespace("kube-system").withName(IbmKubernetesIngressSetup.JOURNAL).get()).isNull(); + } + } + @ParameterizedTest @ValueSource(strings={"PREPARING","REVIEW_REQUIRED","unknown"}) + void restartDoesNotRepeatUnresolvedChanges(String state) { + try(var f=fixture()) { + f.client.configMaps().inNamespace("kube-system").resource(new ConfigMapBuilder().withNewMetadata().withName(IbmKubernetesIngressSetup.JOURNAL) + .withLabels(Map.of(IbmCertificateManager.OWNER,"true")).endMetadata().withData(Map.of("state",state)).build()).create(); + assertThatThrownBy(() -> setup.prepare(f.client,"project-a",cluster,config,m -> {})).hasMessageContaining("unresolved"); + verify(setup,never()).awaitReady(any(),any(),any(),any()); + } + } + @Test void controllerProxyWithoutLbProxyIsNotSilentlyOverwritten() { + try(var f=fixture()) { + var cm=f.client.configMaps().inNamespace("kube-system").withName(IbmKubernetesIngressSetup.CONFIG).get(); + cm.getData().put("use-proxy-protocol","true"); f.client.configMaps().inNamespace("kube-system").resource(cm).update(); + assertThatThrownBy(() -> setup.check(f.client,"project-a",cluster,config)).hasMessageContaining("mixed"); + } + } + @Test void nonIbmTargetIsRejectedWithoutClusterApiWrites() { + try(var f=fixture()) { + cluster.getConnectionConfig().setProviderName("aws"); + assertThatThrownBy(() -> setup.prepare(f.client,"project-a",cluster,config,m -> {})).hasMessageContaining("IBM cluster"); + verifyNoInteractions(tb); + } + } + @Test void newlyAddedHttpListenerIsReconciledWithoutChangingPortsOrFeatures() { + try(var f=fixture()) { + var ops=f.client.services().inNamespace("kube-system"); var before=ops.withName("public-alb").get(); + setup.prepare(f.client,"project-a",cluster,config,m -> {}); + var current=ops.withName("public-alb").get(); + var requests=IbmKubernetesIngressSetup.reconcileAddedListeners(f.client,List.of(before)); + var after=ops.withName("public-alb").get(); + assertThat(requests).containsKey("public-alb"); + assertThat(after.getSpec()).isEqualTo(current.getSpec()); + assertThat(after.getMetadata().getAnnotations()).containsEntry(IbmIngressSupport.PROXY_FEATURE,"alb,proxy-protocol").containsKey(IbmKubernetesIngressSetup.RECONCILE); + assertThat(after.getMetadata().getUid()).isEqualTo(before.getMetadata().getUid()); + } + } + @Test void existingHttpPortNeedsNoExtraReconciliation() { + try(var f=fixture()) { + setup.prepare(f.client,"project-a",cluster,config,m -> {}); + var current=f.client.services().inNamespace("kube-system").withName("public-alb").get(); + assertThat(IbmKubernetesIngressSetup.reconcileAddedListeners(f.client,List.of(current))).isEmpty(); + assertThat(f.client.services().inNamespace("kube-system").withName("public-alb").get().getMetadata().getResourceVersion()).isEqualTo(current.getMetadata().getResourceVersion()); + } + } + @Test void concurrentProxyDisableStopsAddedListenerReconciliation() { + try(var f=fixture()) { + var before=f.client.services().inNamespace("kube-system").withName("public-alb").get(); + assertThatThrownBy(() -> IbmKubernetesIngressSetup.reconcileAddedListeners(f.client,List.of(before))).hasMessageContaining("changed"); + } + } +} diff --git a/src/test/java/kr/co/mcmp/softwarecatalog/kubernetes/service/K8sIngressPreparationJobsTest.java b/src/test/java/kr/co/mcmp/softwarecatalog/kubernetes/service/K8sIngressPreparationJobsTest.java new file mode 100644 index 00000000..8b15adc9 --- /dev/null +++ b/src/test/java/kr/co/mcmp/softwarecatalog/kubernetes/service/K8sIngressPreparationJobsTest.java @@ -0,0 +1,87 @@ +package kr.co.mcmp.softwarecatalog.kubernetes.service; + +import static org.assertj.core.api.Assertions.*; +import static org.mockito.Mockito.*; +import java.util.*; +import java.util.concurrent.*; +import kr.co.mcmp.softwarecatalog.*; +import kr.co.mcmp.softwarecatalog.application.dto.*; +import kr.co.mcmp.softwarecatalog.kubernetes.config.KubernetesClientFactory; +import io.fabric8.kubernetes.client.KubernetesClient; +import org.junit.jupiter.api.*; + +class K8sIngressPreparationJobsTest { + final KubernetesIngressPreflightService preflight=mock(KubernetesIngressPreflightService.class); + final KubernetesClientFactory clients=mock(KubernetesClientFactory.class); + final CatalogRepository catalogs=mock(CatalogRepository.class); + final K8sIngressAccessService access=mock(K8sIngressAccessService.class); + final IbmIngressAutomationService automation=mock(IbmIngressAutomationService.class); + final K8sIngressPreparationJobs jobs=new K8sIngressPreparationJobs(preflight,clients,catalogs,access,automation); + @AfterEach void cleanup() { jobs.shutdown(); } + K8sIngressCheckRequest request(String ns, String cluster) { + var r=new K8sIngressCheckRequest(); r.setNamespace(ns); r.setClusterName(cluster); r.setCatalogId(7L); + r.setIngressEnabled(true); r.setIngressHost("app.company.com"); r.setIngressPath("/"); + r.setIngressClass(IbmIngressSupport.PUBLIC_CLASS); r.setServicePortCidr("203.0.113.4/32"); return r; + } + void valid() { + when(preflight.check(any())).thenReturn(new K8sIngressCheckResult(true,List.of(),List.of())); + when(catalogs.findById(7L)).thenReturn(Optional.of(new SoftwareCatalog())); + when(clients.getClient(any(),any())).thenReturn(mock(KubernetesClient.class)); + } + K8sIngressPreparationJobs.Status finish(K8sIngressPreparationJobs.Status initial) throws Exception { + long deadline=System.nanoTime()+TimeUnit.SECONDS.toNanos(5); + while(System.nanoTime() "app.company.com".equals(c.getIngressHost())),any()); + assertThatThrownBy(() -> jobs.get("other-project",status.id())).hasMessageContaining("not found"); + } + @Test void failedPreflightNeverPreparesAndProvidesActionableErrors() throws Exception { + when(preflight.check(any())).thenReturn(new K8sIngressCheckResult(false,List.of("Host conflict"),List.of())); + var status=finish(jobs.start(request("project-a","cluster-a"))); + assertThat(status.state()).isEqualTo("FAILED"); assertThat(status.message()).isEqualTo("Host conflict"); + verifyNoInteractions(automation,clients,catalogs); + } + @Test void secretBearingUpstreamExceptionsAreNeverReturned() throws Exception { + valid(); doThrow(new IllegalStateException("DNS Secret=private-secret")).when(automation).prepare(any(),any(),any(),any(),any(),any()); + var status=finish(jobs.start(request("project-a","cluster-a"))); + assertThat(status.state()).isEqualTo("FAILED"); assertThat(status.message()).doesNotContain("private-secret","DNS Secret"); + } + @Test void duplicateClicksReuseActiveJobButDifferentInputsDoNotQueueAnotherSharedChange() throws Exception { + valid(); var entered=new CountDownLatch(1); var release=new CountDownLatch(1); + doAnswer(c -> { entered.countDown(); assertThat(release.await(5,TimeUnit.SECONDS)).isTrue(); return null; }) + .when(automation).prepare(any(),any(),any(),any(),any(),any()); + try { + var first=jobs.start(request("project-a","cluster-a")); assertThat(entered.await(5,TimeUnit.SECONDS)).isTrue(); + assertThat(jobs.start(request("project-a","cluster-a")).id()).isEqualTo(first.id()); + var changed=request("project-a","cluster-a"); changed.setIngressHost("different.company.com"); + assertThatThrownBy(() -> jobs.start(changed)).hasMessageContaining("already running"); + release.countDown(); assertThat(finish(first).state()).isEqualTo("READY"); + verify(automation,times(1)).prepare(any(),any(),any(),any(),any(),any()); + } finally { release.countDown(); } + } + @Test void regularNginxCannotUseSharedIbmProvisioner() throws Exception { + valid(); var r=request("project-a","cluster-a"); r.setIngressClass("nginx"); + assertThat(finish(jobs.start(r)).state()).isEqualTo("FAILED"); verifyNoInteractions(automation); + } + @Test void queueIsBoundedAndRejectsExcessBeforeAnyProvisioning() throws Exception { + valid(); var release=new CountDownLatch(1); + when(preflight.check(any())).thenAnswer(c -> { release.await(5,TimeUnit.SECONDS); return new K8sIngressCheckResult(false,List.of("stopped"),List.of()); }); + try { + for(int i=0;i<6;i++) jobs.start(request("project-a","cluster-"+i)); + assertThatThrownBy(() -> jobs.start(request("project-a","cluster-7"))).hasMessageContaining("queue is full"); + verifyNoInteractions(automation); + } finally { release.countDown(); } + } +} diff --git a/src/test/java/kr/co/mcmp/softwarecatalog/kubernetes/service/K8sJupyterServiceTest.java b/src/test/java/kr/co/mcmp/softwarecatalog/kubernetes/service/K8sJupyterServiceTest.java index 9fc59036..f243471c 100644 --- a/src/test/java/kr/co/mcmp/softwarecatalog/kubernetes/service/K8sJupyterServiceTest.java +++ b/src/test/java/kr/co/mcmp/softwarecatalog/kubernetes/service/K8sJupyterServiceTest.java @@ -19,7 +19,7 @@ class K8sJupyterServiceTest { @Test void sshManifestKeepsKeysOutOfNotebookAndDoesNotPublishSsh() throws Exception { - var service=new K8sJupyterService(null,null,null,null,null,null,new ObjectMapper(),null); + var service=new K8sJupyterService(null,null,null,null,null,null,new ObjectMapper(),null,IbmIngressAutomationTestSupport.legacy()); var catalog=new SoftwareCatalog(); catalog.setPackageInfo(PackageInfo.builder().packageName("quay.io/jupyter/scipy-notebook").packageVersion("2026-07-28").build()); var secret=new SecretBuilder().withNewMetadata().withName("mcmp-jupyter-41-ssh").withNamespace("default").endMetadata() @@ -50,7 +50,7 @@ class K8sJupyterServiceTest { } @Test void lifecycleLookupExcludesRejectedRequestsWithoutManagedRelease() { var histories = mock(kr.co.mcmp.softwarecatalog.application.repository.DeploymentHistoryRepository.class); - var service = new K8sJupyterService(null, null, null, null, histories, null, new ObjectMapper(), null); + var service = new K8sJupyterService(null, null, null, null, histories, null, new ObjectMapper(), null,IbmIngressAutomationTestSupport.legacy()); service.latest("default", "cluster-a", 41L); verify(histories).findTopByCatalogIdAndClusterNameAndNamespaceAndActionTypeAndReleaseNameStartingWithOrderByExecutedAtDesc( 41L, "cluster-a", "default", kr.co.mcmp.softwarecatalog.application.constants.ActionType.INSTALL, "mcmp-jupyter-"); @@ -109,8 +109,27 @@ void rejectsInvalidOrWildcardHost(String host) { assertThatThrownBy(() -> K8sJupyterService.validate(r,"https://am.example.test")).hasMessageContaining("nginx"); } + @Test void ibmJupyterUsesTheSelectedManagedTlsSecretWithoutChangingThePodProtocol() throws Exception { + var service = new K8sJupyterService(null,null,null,null,null,null,new ObjectMapper(),null,IbmIngressAutomationTestSupport.legacy()); + ReflectionTestUtils.setField(service, "gatewayUrl", "https://gateway.example.com"); + var catalog = new SoftwareCatalog(); + catalog.setPackageInfo(PackageInfo.builder().packageName("quay.io/jupyter/scipy-notebook").packageVersion("2026-07-28").build()); + var r = request(); r.setIngressClass(IbmIngressSupport.PUBLIC_CLASS); + r.setIngressTlsEnabled(true); r.setIngressTlsSecret("ibm-existing-cert"); + K8sJupyterService.validate(r, "https://gateway.example.com"); + var resources = service.resources(r, catalog, "mcmp-jupyter-41", "grant-token", "login-token"); + var ingress = (Ingress) resources.stream().filter(Ingress.class::isInstance).findFirst().orElseThrow(); + assertThat(ingress.getSpec().getTls()).singleElement().satisfies(tls -> { + assertThat(tls.getSecretName()).isEqualTo("ibm-existing-cert"); + assertThat(tls.getHosts()).containsExactly(r.getIngressHost()); + }); + assertThat(ingress.getSpec().getRules().get(0).getHttp().getPaths().get(0).getBackend().getService().getPort().getNumber()).isEqualTo(8888); + r.setIngressClass("nginx"); + assertThatThrownBy(() -> K8sJupyterService.validate(r, "https://gateway.example.com")).hasMessageContaining("HTTP NodePort"); + } + @Test void manifestsUseExistingNotebookSecretAndIngressOnly() throws Exception { - var service=new K8sJupyterService(null,null,null,null,null,null,new ObjectMapper(), null); + var service=new K8sJupyterService(null,null,null,null,null,null,new ObjectMapper(), null,IbmIngressAutomationTestSupport.legacy()); ReflectionTestUtils.setField(service,"gatewayUrl","https://am.example.test/applications/object-storage-gateway"); var catalog=new SoftwareCatalog(); catalog.setPackageInfo(PackageInfo.builder().packageName("quay.io/jupyter/scipy-notebook").packageVersion("2026-07-28").build()); @@ -139,4 +158,3 @@ void rejectsInvalidOrWildcardHost(String host) { assertThat(pvc.getSpec().getStorageClassName()).isEqualTo("standard"); } } - diff --git a/src/test/java/kr/co/mcmp/softwarecatalog/kubernetes/service/KubernetesDeployRollbackTest.java b/src/test/java/kr/co/mcmp/softwarecatalog/kubernetes/service/KubernetesDeployRollbackTest.java index 548a1b5a..aa632c35 100644 --- a/src/test/java/kr/co/mcmp/softwarecatalog/kubernetes/service/KubernetesDeployRollbackTest.java +++ b/src/test/java/kr/co/mcmp/softwarecatalog/kubernetes/service/KubernetesDeployRollbackTest.java @@ -24,14 +24,16 @@ class KubernetesDeployRollbackTest { private void check(boolean rollbackFails) { var factory = mock(KubernetesClientFactory.class); - var client = mock(KubernetesClient.class); + var client = mock(KubernetesClient.class, RETURNS_DEEP_STUBS); + var routes = KubernetesIngressRouteValidatorTest.stubIngressList(client); + when(routes.list()).thenReturn(new io.fabric8.kubernetes.api.model.networking.v1.IngressListBuilder().build()); var helm = mock(HelmChartService.class); var histories = mock(DeploymentHistoryRepository.class); var access = mock(K8sIngressAccessService.class); var sources = mock(SoftwareSourceService.class); var service = new KubernetesDeployService(factory, mock(KubernetesNamespaceService.class), helm, mock(UserRepository.class), mock(ApplicationStatusRepository.class), histories, - sources, mock(KubeconfigResolver.class), access); + sources, mock(KubeconfigResolver.class), access, IbmIngressAutomationTestSupport.legacy()); var catalog = new SoftwareCatalog(); catalog.setId(10L); catalog.setDefaultPort(5572); var chart = new HelmChart(); chart.setChartName("rclone"); var request = DeploymentRequest.builder().namespace("default").clusterName("azure") diff --git a/src/test/java/kr/co/mcmp/softwarecatalog/kubernetes/service/KubernetesDeployServiceIngressConflictTest.java b/src/test/java/kr/co/mcmp/softwarecatalog/kubernetes/service/KubernetesDeployServiceIngressConflictTest.java new file mode 100644 index 00000000..fedfc691 --- /dev/null +++ b/src/test/java/kr/co/mcmp/softwarecatalog/kubernetes/service/KubernetesDeployServiceIngressConflictTest.java @@ -0,0 +1,149 @@ +package kr.co.mcmp.softwarecatalog.kubernetes.service; + +import static org.assertj.core.api.Assertions.*; +import static org.mockito.Mockito.*; + +import java.util.Optional; + +import io.fabric8.kubernetes.api.model.networking.v1.Ingress; +import io.fabric8.kubernetes.api.model.networking.v1.IngressList; +import io.fabric8.kubernetes.api.model.networking.v1.IngressListBuilder; +import io.fabric8.kubernetes.client.KubernetesClient; +import io.fabric8.kubernetes.client.KubernetesClientException; +import io.fabric8.kubernetes.client.dsl.AnyNamespaceOperation; +import io.fabric8.kubernetes.client.dsl.Resource; +import kr.co.mcmp.softwarecatalog.SoftwareCatalog; +import kr.co.mcmp.softwarecatalog.application.dto.DeploymentRequest; +import kr.co.mcmp.softwarecatalog.application.repository.ApplicationStatusRepository; +import kr.co.mcmp.softwarecatalog.application.repository.DeploymentHistoryRepository; +import kr.co.mcmp.softwarecatalog.kubernetes.config.KubernetesClientFactory; +import kr.co.mcmp.softwarecatalog.service.SoftwareSourceService; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; + +class KubernetesDeployServiceIngressConflictTest { + private final KubernetesClient client = mock(KubernetesClient.class, RETURNS_DEEP_STUBS); + private final AnyNamespaceOperation> routes = + KubernetesIngressRouteValidatorTest.stubIngressList(client); + private final KubernetesClientFactory factory = mock(KubernetesClientFactory.class); + private final HelmChartService helm = mock(HelmChartService.class); + private final K8sIngressAccessService access = mock(K8sIngressAccessService.class); + private final ApplicationStatusRepository statuses = mock(ApplicationStatusRepository.class); + private final DeploymentHistoryRepository histories = mock(DeploymentHistoryRepository.class); + private final SoftwareSourceService sources = mock(SoftwareSourceService.class); + private final KubernetesDeployService service = new KubernetesDeployService( + factory, null, helm, null, statuses, histories, sources, null, access, IbmIngressAutomationTestSupport.legacy()); + private final SoftwareCatalog catalog = SoftwareCatalog.builder().id(7L) + .ingressEnabled(true).ingressHost("app.example.com").ingressPath("/app").build(); + + KubernetesDeployServiceIngressConflictTest() { + when(sources.getArtifactHubSource(7L)).thenReturn(Optional.of(HelmIngressValuesTest.chart( + "grafana", "https://grafana.github.io/helm-charts", "7.3.0"))); + when(factory.getClient("project-a", "cluster-a")).thenReturn(client); + clearInvocations(client); + } + + private DeploymentRequest request() { + return DeploymentRequest.builder().namespace("project-a").clusterName("cluster-a") + .servicePortCidr("203.0.113.8/32").build(); + } + + @ParameterizedTest + @ValueSource(strings = {"/app", "/app/"}) + void duplicateCatalogRouteStopsBeforeStatusUpdatesInstallAndPortOpening(String existingPath) { + when(routes.list()).thenReturn(new IngressListBuilder() + .withItems(KubernetesIngressRouteValidatorTest.ingress( + "other-namespace", "old-app", "nginx", "app.example.com", existingPath)).build()); + + assertThatThrownBy(() -> service.deployApplication("project-a", "cluster-a", catalog, "user", request())) + .hasMessageContaining("Host/Path conflict").hasMessageContaining("other-namespace/old-app") + .hasRootCauseInstanceOf(IllegalArgumentException.class) + .rootCause().hasMessageContaining("Host/Path conflict").hasMessageContaining("other-namespace/old-app"); + verifyNoInteractions(helm, statuses, histories); + verify(access).resolveTarget(any(), same(catalog)); + verifyNoMoreInteractions(access); + verify(client).close(); + } + + @ParameterizedTest + @ValueSource(strings = {"/prometheus", "/app/child"}) + void differentRequestPathOverridesCatalogAndContinuesToNormalDeployment(String requestedPath) { + Ingress existing = KubernetesIngressRouteValidatorTest.ingress( + "default", "old-app", "nginx", "app.example.com", "/app"); + when(routes.list()) + .thenReturn(new IngressListBuilder().withItems(existing).build()); + DeploymentRequest request = request(); + request.setIngressPath(requestedPath); + IllegalStateException boundary = stopAtMetricsBoundary(); + + assertThatThrownBy(() -> service.deployApplication("project-a", "cluster-a", catalog, "user", request)) + .hasCause(boundary); + var order = inOrder(routes, helm); + order.verify(routes).list(); + order.verify(helm).ensureMetricsServer(client, "project-a", "cluster-a"); + verifyNoInteractions(histories); + verify(access).resolveTarget(any(), same(catalog)); + verifyNoMoreInteractions(access); + } + + @Test + void disabledIngressSkipsTheCheckAndPreservesNormalDeployment() { + DeploymentRequest request = request(); + request.setIngressEnabled(false); + request.setServicePortCidr(null); + IllegalStateException boundary = stopAtMetricsBoundary(); + assertThatThrownBy(() -> service.deployApplication("project-a", "cluster-a", catalog, "user", request)) + .hasCause(boundary); + verify(client, never()).network(); + verifyNoInteractions(access, histories); + } + + @Test + void readFailureStopsBeforeAnyInstallationOrFirewallChange() { + KubernetesClientException forbidden = new KubernetesClientException("Forbidden"); + when(routes.list()).thenThrow(forbidden); + assertThatThrownBy(() -> service.deployApplication("project-a", "cluster-a", catalog, "user", request())) + .hasMessageContaining("cluster-wide Ingress list permission") + .hasRootCause(forbidden); + verifyNoInteractions(helm, statuses, histories); + verify(access).resolveTarget(any(), same(catalog)); + verifyNoMoreInteractions(access); + } + + private IllegalStateException stopAtMetricsBoundary() { + when(statuses.findLatestByNamespaceAndClusterNameAndCatalogId("project-a", "cluster-a", 7L)) + .thenReturn(Optional.empty()); + IllegalStateException boundary = new IllegalStateException("test-metrics-boundary"); + doThrow(boundary).when(helm).ensureMetricsServer(client, "project-a", "cluster-a"); + return boundary; + } + + @ParameterizedTest @ValueSource(booleans={false,true}) + void ibmDeploymentRechecksPolicyAndNeverInstallsNodePortController(boolean proxyReady) { + var ibm = IbmIngressSupportTest.readyClient(IbmIngressSupport.PUBLIC_CLASS,proxyReady,"10.150.0.0/24","proxy-protocol",false); + IbmIngressTlsResolverTest.configureDefault(ibm); + var ibmRoutes = KubernetesIngressRouteValidatorTest.stubIngressList(ibm); + when(ibmRoutes.list()).thenReturn(new IngressListBuilder().build()); + when(factory.getClient("project-a","cluster-a")).thenReturn(ibm); + doAnswer(call -> { ((DeploymentRequest)call.getArgument(0)).setIngressClass(IbmIngressSupport.PUBLIC_CLASS); return null; }) + .when(access).resolveTarget(any(),same(catalog)); + var boundary = new IllegalStateException("test-application-helm-boundary"); + doThrow(boundary).when(helm).deployHelmChart(eq(ibm),eq("project-a"),same(catalog),any(),eq("cluster-a"),any()); + var request = request(); request.setIngressHost(IbmIngressTlsResolverTest.HOST); request.setIngressTlsEnabled(true); + var result = assertThatThrownBy(() -> service.deployApplication("project-a","cluster-a",catalog,"user",request)); + if (proxyReady) { + result.hasCause(boundary); + verify(helm).ensureMetricsServer(ibm,"project-a","cluster-a"); + verify(helm,never()).ensureIngressController(any(),any(),any()); + assertThat(request.getIngressTlsEnabled()).isTrue(); + assertThat(request.getIngressTlsSecret()).isEqualTo(IbmIngressTlsResolverTest.SECRET); + } else { + result.rootCause().hasMessageContaining("source IP preservation is disabled"); + verifyNoInteractions(helm); + } + verify(access).resolveTarget(any(),same(catalog)); + verifyNoMoreInteractions(access); + verifyNoInteractions(histories); + } +} diff --git a/src/test/java/kr/co/mcmp/softwarecatalog/kubernetes/service/KubernetesDeployServiceNamespaceTest.java b/src/test/java/kr/co/mcmp/softwarecatalog/kubernetes/service/KubernetesDeployServiceNamespaceTest.java new file mode 100644 index 00000000..9fbe90f9 --- /dev/null +++ b/src/test/java/kr/co/mcmp/softwarecatalog/kubernetes/service/KubernetesDeployServiceNamespaceTest.java @@ -0,0 +1,111 @@ +package kr.co.mcmp.softwarecatalog.kubernetes.service; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.mockStatic; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import java.util.Optional; + +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.MockedStatic; +import org.mockito.junit.jupiter.MockitoExtension; + +import io.fabric8.kubernetes.client.KubernetesClient; +import kr.co.mcmp.softwarecatalog.SoftwareCatalog; +import kr.co.mcmp.softwarecatalog.application.constants.DeploymentType; +import kr.co.mcmp.softwarecatalog.application.dto.DeploymentRequest; +import kr.co.mcmp.softwarecatalog.application.model.DeploymentHistory; +import kr.co.mcmp.softwarecatalog.application.model.HelmChart; +import kr.co.mcmp.softwarecatalog.application.repository.ApplicationStatusRepository; +import kr.co.mcmp.softwarecatalog.application.repository.DeploymentHistoryRepository; +import kr.co.mcmp.softwarecatalog.kubernetes.config.KubeconfigResolver; +import kr.co.mcmp.softwarecatalog.kubernetes.config.KubernetesClientFactory; +import kr.co.mcmp.softwarecatalog.kubernetes.config.KubernetesNamespaces; +import kr.co.mcmp.softwarecatalog.kubernetes.util.KubernetesUtils; +import kr.co.mcmp.softwarecatalog.service.SoftwareSourceService; +import kr.co.mcmp.softwarecatalog.users.repository.UserRepository; + +@ExtendWith(MockitoExtension.class) +class KubernetesDeployServiceNamespaceTest { + + @Mock + private KubernetesClientFactory clientFactory; + @Mock + private KubernetesNamespaceService namespaceService; + @Mock + private HelmChartService helmChartService; + @Mock + private UserRepository userRepository; + @Mock + private ApplicationStatusRepository applicationStatusRepository; + @Mock + private DeploymentHistoryRepository deploymentHistoryRepository; + @Mock + private SoftwareSourceService softwareSourceService; + @Mock + private KubeconfigResolver kubeconfigResolver; + + @InjectMocks + private KubernetesDeployService service; + + @ParameterizedTest + @ValueSource(strings = {"project-a", "project-b", "default"}) + void keepsTumblebugProjectSeparateFromKubernetesWorkloadNamespace(String tumblebugNamespace) { + String clusterName = "cluster-a"; + KubernetesClient client = mock(KubernetesClient.class); + HelmChart helmChart = HelmChart.builder().chartName("grafana").build(); + SoftwareCatalog catalog = SoftwareCatalog.builder() + .id(7L) + .name("Grafana") + .defaultPort(3000) + .ingressEnabled(false) + .helmChart(helmChart) + .build(); + DeploymentRequest request = DeploymentRequest.builder() + .namespace(tumblebugNamespace) + .clusterName(clusterName) + .catalogId(catalog.getId()) + .deploymentType(DeploymentType.K8S) + .build(); + + when(softwareSourceService.getArtifactHubSource(catalog.getId())).thenReturn(Optional.of(helmChart)); + when(clientFactory.getClient(tumblebugNamespace, clusterName)).thenReturn(client); + when(applicationStatusRepository.findLatestByNamespaceAndClusterNameAndCatalogId( + tumblebugNamespace, clusterName, catalog.getId())).thenReturn(Optional.empty()); + when(helmChartService.deployHelmChart( + client, tumblebugNamespace, catalog, helmChart, clusterName, request)).thenReturn(null); + when(helmChartService.findLatestReleaseNameForChart( + tumblebugNamespace, clusterName, helmChart.getChartName())).thenReturn("grafana-release"); + when(deploymentHistoryRepository.saveAndFlush(org.mockito.ArgumentMatchers.any(DeploymentHistory.class))) + .thenAnswer(invocation -> invocation.getArgument(0)); + + try (MockedStatic kubernetesUtils = mockStatic(KubernetesUtils.class)) { + kubernetesUtils.when(() -> KubernetesUtils.getPodStatus( + client, KubernetesNamespaces.APPLICATION_WORKLOAD, helmChart.getChartName())) + .thenReturn("Running"); + kubernetesUtils.when(() -> KubernetesUtils.getServicePort( + client, KubernetesNamespaces.APPLICATION_WORKLOAD, helmChart.getChartName())) + .thenReturn(3000); + + DeploymentHistory history = service.deployApplication( + tumblebugNamespace, clusterName, catalog, null, request); + + assertThat(history.getNamespace()).isEqualTo(tumblebugNamespace); + assertThat(history.getPodStatus()).isEqualTo("Running"); + assertThat(history.getServicePort()).isEqualTo(3000); + kubernetesUtils.verify(() -> KubernetesUtils.getPodStatus( + client, KubernetesNamespaces.APPLICATION_WORKLOAD, helmChart.getChartName())); + kubernetesUtils.verify(() -> KubernetesUtils.getServicePort( + client, KubernetesNamespaces.APPLICATION_WORKLOAD, helmChart.getChartName())); + } + + verify(clientFactory).getClient(tumblebugNamespace, clusterName); + verify(helmChartService).ensureMetricsServer(client, tumblebugNamespace, clusterName); + } +} diff --git a/src/test/java/kr/co/mcmp/softwarecatalog/kubernetes/service/KubernetesIngressPreflightServiceTest.java b/src/test/java/kr/co/mcmp/softwarecatalog/kubernetes/service/KubernetesIngressPreflightServiceTest.java new file mode 100644 index 00000000..71d75b53 --- /dev/null +++ b/src/test/java/kr/co/mcmp/softwarecatalog/kubernetes/service/KubernetesIngressPreflightServiceTest.java @@ -0,0 +1,167 @@ +package kr.co.mcmp.softwarecatalog.kubernetes.service; + +import static org.assertj.core.api.Assertions.*; +import static org.mockito.Mockito.*; + +import java.util.Optional; +import java.util.stream.Stream; +import java.util.function.Consumer; + +import io.fabric8.kubernetes.api.model.networking.v1.Ingress; +import io.fabric8.kubernetes.api.model.networking.v1.IngressList; +import io.fabric8.kubernetes.api.model.networking.v1.IngressListBuilder; +import io.fabric8.kubernetes.client.KubernetesClient; +import io.fabric8.kubernetes.client.dsl.AnyNamespaceOperation; +import io.fabric8.kubernetes.client.dsl.Resource; +import kr.co.mcmp.softwarecatalog.CatalogRepository; +import kr.co.mcmp.softwarecatalog.SoftwareCatalog; +import kr.co.mcmp.softwarecatalog.application.dto.K8sIngressCheckRequest; +import kr.co.mcmp.softwarecatalog.application.model.PackageInfo; +import kr.co.mcmp.softwarecatalog.kubernetes.config.KubernetesClientFactory; +import kr.co.mcmp.softwarecatalog.service.SoftwareSourceService; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; +import org.junit.jupiter.params.provider.ValueSource; + +class KubernetesIngressPreflightServiceTest { + private final CatalogRepository catalogs = mock(CatalogRepository.class); + private final SoftwareSourceService sources = mock(SoftwareSourceService.class); + private final KubernetesClientFactory clients = mock(KubernetesClientFactory.class); + private final KubernetesClient client = mock(KubernetesClient.class, RETURNS_DEEP_STUBS); + private final AnyNamespaceOperation> routes = + KubernetesIngressRouteValidatorTest.stubIngressList(client); + private final K8sIngressAccessService ingressAccess = mock(K8sIngressAccessService.class); + private final KubernetesIngressPreflightService service = new KubernetesIngressPreflightService(catalogs, sources, clients, ingressAccess, IbmIngressAutomationTestSupport.legacy()); + private final SoftwareCatalog catalog = SoftwareCatalog.builder().id(7L).ingressEnabled(true) + .ingressHost("catalog.example.com").ingressPath("/").ingressClass("nginx").build(); + + KubernetesIngressPreflightServiceTest() { + when(catalogs.findById(7L)).thenReturn(Optional.of(catalog)); + when(sources.getArtifactHubSource(7L)).thenReturn(Optional.of(HelmIngressValuesTest.chart( + "grafana", "https://grafana.github.io/helm-charts", "7.3.0"))); + when(clients.getClient("project-a", "cluster-a")).thenReturn(client); + when(routes.list()).thenReturn(new IngressListBuilder().build()); + clearInvocations(client); + } + + private K8sIngressCheckRequest request() { + var r = new K8sIngressCheckRequest(); + r.setNamespace("project-a"); r.setClusterName("cluster-a"); r.setCatalogId(7L); + r.setIngressHost("https://APP.Example.com:30880/ignored"); r.setIngressPath("/app"); + return r; + } + + @ParameterizedTest + @ValueSource(strings = {"/app", "/app/"}) + void checksCurrentFormNotCatalogAcrossAllWorkloadNamespaces(String path) { + when(routes.list()).thenReturn(new IngressListBuilder().withItems(KubernetesIngressRouteValidatorTest.ingress( + "other-workload", "existing", "nginx", "app.example.com", path)).build()); + var result = service.check(request()); + assertThat(result.valid()).isFalse(); + assertThat(result.errors()).singleElement().asString().contains("Host/Path conflict", "other-workload/existing"); + assertThat(result.warnings()).isEmpty(); + verify(client).close(); + verify(catalogs, never()).save(any()); + } + + @ParameterizedTest + @ValueSource(strings = {"/", "/other", "/app/child", "/App"}) + void differentPathsRemainAvailable(String path) { + when(routes.list()).thenReturn(new IngressListBuilder().withItems(KubernetesIngressRouteValidatorTest.ingress( + "default", "existing", "nginx", "app.example.com", path)).build()); + var result = service.check(request()); + assertThat(result.valid()).isTrue(); + assertThat(result.errors()).isEmpty(); + verify(client, never()).secrets(); + } + + @Test void disabledIngressDoesNotNeedClusterAccessEvenWithStaleInvalidFields() { + var r = request(); r.setIngressEnabled(false); r.setIngressHost("bad_host"); r.setIngressTlsEnabled(true); + assertThat(service.check(r).valid()).isTrue(); + verifyNoInteractions(clients, sources); + } + + static Stream> invalidInputs() { + return Stream.of(r -> r.setIngressHost("bad_host"), r -> r.setIngressPath("not/a/path"), + r -> r.setIngressClass(""), r -> {r.setIngressTlsEnabled(true); r.setIngressTlsSecret("bad/name");}, + r -> {r.setIngressTlsEnabled(true); r.setIngressTlsSecret("");}); + } + + @ParameterizedTest @MethodSource("invalidInputs") + void invalidInputBlocksBeforeClusterAccess(Consumer change) { + var r = request(); change.accept(r); + var result = service.check(r); + assertThat(result.valid()).isFalse(); + assertThat(result.errors()).isNotEmpty(); + verifyNoInteractions(clients); + } + + @Test void missingTlsSecretIsAnAdvisoryNotADeploymentBlock() { + var r = request(); r.setIngressTlsEnabled(true); + var result = service.check(r); + assertThat(result.valid()).isTrue(); + assertThat(result.warnings()).singleElement().asString().contains("-tls", "namespace default"); + verify(client, never()).secrets(); + } + + @Test void catalogSecretIsUsedWhenRequestOmitsItAndHttpOverrideSkipsIt() { + catalog.setIngressTlsEnabled(true); catalog.setIngressTlsSecret("catalog-cert"); + var secret = KubernetesIngressTlsWarningsTest.stubSecret(client, "default", "catalog-cert"); + when(secret.get()).thenReturn(null); + var result = service.check(request()); + assertThat(result.valid()).isTrue(); + assertThat(result.warnings()).singleElement().asString().contains("catalog-cert", "namespace default"); + var r = request(); r.setIngressTlsEnabled(false); + assertThat(service.check(r).warnings()).isEmpty(); + verify(secret, times(1)).get(); + } + + @Test void ingressListPermissionFailureBlocksButDoesNotLeakResponseDetails() { + when(routes.list()).thenThrow(new IllegalStateException("sensitive API content")); + var result = service.check(request()); + assertThat(result.valid()).isFalse(); + assertThat(result.errors()).singleElement().asString().contains("Ingress list permission").doesNotContain("sensitive"); + } + + @Test void missingListOrClusterAccessDoesNotCountAsAnEmptyCluster() { + when(routes.list()).thenReturn(null); + assertThat(service.check(request()).valid()).isFalse(); + when(clients.getClient("project-a", "cluster-a")).thenThrow(new IllegalStateException("private credentials")); + var result = service.check(request()); + assertThat(result.valid()).isFalse(); + assertThat(result.errors()).singleElement().asString().doesNotContain("private credentials"); + } + + @Test void nativeJupyterRetainsItsStricterDedicatedHostAndHttpPolicyWithoutAChart() { + catalog.setPackageInfo(PackageInfo.builder().packageName("jupyterlab").build()); + when(routes.list()).thenReturn(new IngressListBuilder().withItems(KubernetesIngressRouteValidatorTest.ingress( + "default", "existing", "other-class", "app.example.com", "/unrelated")).build()); + var r = request(); r.setIngressPath("/"); + assertThat(service.check(r).errors()).singleElement().asString().contains("dedicated hostname"); + r.setIngressTlsEnabled(true); + assertThat(service.check(r).errors()).singleElement().asString().contains("HTTP NodePort 30880"); + verifyNoInteractions(sources); + } + + @Test void ibmPreflightResolvesLegacyClassBeforeCheckingCollisionsAndSourceIp() { + var ibm = IbmIngressSupportTest.readyClient(IbmIngressSupport.PUBLIC_CLASS, false, "10.150.0.0/24", "", true); + IbmIngressTlsResolverTest.configureDefault(ibm); + var ibmRoutes = KubernetesIngressRouteValidatorTest.stubIngressList(ibm); + when(clients.getClient("project-a","cluster-a")).thenReturn(ibm); + doAnswer(call -> { ((kr.co.mcmp.softwarecatalog.application.dto.DeploymentRequest)call.getArgument(0)).setIngressClass(IbmIngressSupport.PUBLIC_CLASS); return null; }) + .when(ingressAccess).resolveTarget(any(),same(catalog)); + when(ibmRoutes.list()).thenReturn(new IngressListBuilder().withItems(KubernetesIngressRouteValidatorTest.ingress( + "default","existing",IbmIngressSupport.PUBLIC_CLASS,IbmIngressTlsResolverTest.HOST,"/app")).build()); + var r = request(); r.setIngressHost(IbmIngressTlsResolverTest.HOST); r.setServicePortCidr("203.0.113.8/32"); + assertThat(service.check(r).errors()).singleElement().asString().contains("Host/Path conflict"); + when(ibmRoutes.list()).thenReturn(new IngressListBuilder().build()); + assertThat(service.check(r).errors()).singleElement().asString().contains("source IP preservation is disabled"); + r.setServicePortCidr("0.0.0.0/0"); + assertThat(service.check(r).errors()).singleElement().asString().contains("CIDR").doesNotContain("connectivity"); + r.setServicePortCidr("203.0.113.8/32"); + when(ibm.network().v1().ingressClasses().withName(IbmIngressSupport.PUBLIC_CLASS).get()).thenThrow(new IllegalStateException("private API content")); + assertThat(service.check(r).errors()).singleElement().asString().doesNotContain("private API content"); + verify(catalogs,never()).save(any()); + } +} diff --git a/src/test/java/kr/co/mcmp/softwarecatalog/kubernetes/service/KubernetesIngressRouteValidatorTest.java b/src/test/java/kr/co/mcmp/softwarecatalog/kubernetes/service/KubernetesIngressRouteValidatorTest.java new file mode 100644 index 00000000..7f1f175f --- /dev/null +++ b/src/test/java/kr/co/mcmp/softwarecatalog/kubernetes/service/KubernetesIngressRouteValidatorTest.java @@ -0,0 +1,170 @@ +package kr.co.mcmp.softwarecatalog.kubernetes.service; + +import static org.assertj.core.api.Assertions.*; +import static org.mockito.Mockito.*; + +import java.util.List; +import java.util.Map; +import java.util.stream.Stream; + +import io.fabric8.kubernetes.api.model.networking.v1.Ingress; +import io.fabric8.kubernetes.api.model.networking.v1.IngressBuilder; +import io.fabric8.kubernetes.api.model.networking.v1.IngressList; +import io.fabric8.kubernetes.api.model.networking.v1.IngressListBuilder; +import io.fabric8.kubernetes.client.KubernetesClient; +import io.fabric8.kubernetes.client.KubernetesClientException; +import io.fabric8.kubernetes.client.dsl.AnyNamespaceOperation; +import io.fabric8.kubernetes.client.dsl.Resource; +import kr.co.mcmp.softwarecatalog.application.dto.DeploymentConfigDTO; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; +import org.junit.jupiter.params.provider.NullAndEmptySource; +import org.junit.jupiter.params.provider.ValueSource; + +class KubernetesIngressRouteValidatorTest { + @SuppressWarnings("unchecked") + static AnyNamespaceOperation> stubIngressList(KubernetesClient client) { + AnyNamespaceOperation> routes = mock(AnyNamespaceOperation.class); + when(client.network().v1().ingresses().inAnyNamespace()).thenReturn(routes); + return routes; + } + + static Ingress ingress(String namespace, String name, String clazz, String host, String path) { + return new IngressBuilder().withNewMetadata().withNamespace(namespace).withName(name).endMetadata() + .withNewSpec().withIngressClassName(clazz) + .addNewRule().withHost(host).withNewHttp().addNewPath().withPath(path).withPathType("Prefix") + .endPath().endHttp().endRule().endSpec().build(); + } + + private static DeploymentConfigDTO config(String host, String path) { + DeploymentConfigDTO config = HelmIngressValuesTest.config(); + config.setIngressHost(host); + config.setIngressPath(path); + return config; + } + + static Stream collisions() { + return Stream.of( + Arguments.of("app.example.com", "/", "app.example.com", "/"), + Arguments.of("APP.EXAMPLE.COM", "/app", "app.example.com", "/app"), + Arguments.of("app.example.com", "/app/", "app.example.com", "/app"), + Arguments.of("app.example.com", "/app", "app.example.com", "/app/"), + Arguments.of("*.example.com", "/", "app.example.com", "/"), + Arguments.of("app.example.com", "/", "*.example.com", "/"), + Arguments.of("*.example.com", "/", "*.example.com", "/"), + Arguments.of(null, "/", "app.example.com", "/"), + Arguments.of("", "/", "app.example.com", "/"), + Arguments.of("app.example.com", "", "app.example.com", "/")); + } + + @ParameterizedTest + @MethodSource("collisions") + void rejectsReservedHostAndPathAcrossNamespaces(String existingHost, String existingPath, + String requestedHost, String requestedPath) { + Ingress existing = ingress("other-namespace", "existing-app", "nginx", existingHost, existingPath); + assertThatIllegalArgumentException().isThrownBy(() -> KubernetesIngressRouteValidator.assertAvailable( + List.of(existing), config(requestedHost, requestedPath))) + .withMessageContaining("Host/Path conflict").withMessageContaining("other-namespace/existing-app"); + } + + static Stream distinctRoutes() { + return Stream.of( + Arguments.of("app.example.com", "/", "other.example.com", "/"), + Arguments.of("app.example.com", "/", "app.example.com", "/grafana"), + Arguments.of("app.example.com", "/grafana", "app.example.com", "/prometheus"), + Arguments.of("app.example.com", "/app", "app.example.com", "/app/child"), + Arguments.of("app.example.com", "/App", "app.example.com", "/app"), + Arguments.of("*.example.com", "/", "example.com", "/"), + Arguments.of("*.example.com", "/", "a.b.example.com", "/"), + Arguments.of("*.example.com", "/", "*.other.com", "/"), + Arguments.of("*.example.com", "/", "*.sub.example.com", "/")); + } + + @ParameterizedTest + @MethodSource("distinctRoutes") + void permitsDifferentRoutesIncludingIntentionalSubpaths(String existingHost, String existingPath, + String requestedHost, String requestedPath) { + assertThatCode(() -> KubernetesIngressRouteValidator.assertAvailable( + List.of(ingress("default", "existing-app", "nginx", existingHost, existingPath)), + config(requestedHost, requestedPath))).doesNotThrowAnyException(); + } + + @Test + void ignoresADifferentExplicitClassAndPrefersSpecOverLegacyAnnotation() { + Ingress existing = ingress("default", "existing-app", "internal-controller", "app.example.com", "/"); + existing.getMetadata().setAnnotations(Map.of("kubernetes.io/ingress.class", "nginx")); + assertThatCode(() -> KubernetesIngressRouteValidator.assertAvailable(List.of(existing), config("app.example.com", "/"))) + .doesNotThrowAnyException(); + } + + @ParameterizedTest + @NullAndEmptySource + @ValueSource(strings = {"nginx"}) + void checksLegacyAnnotationsAndConservativelyChecksClasslessRoutes(String annotation) { + Ingress existing = ingress("default", "legacy-app", null, "app.example.com", "/"); + if (annotation != null) existing.getMetadata().setAnnotations(Map.of("kubernetes.io/ingress.class", annotation)); + assertThatIllegalArgumentException().isThrownBy(() -> KubernetesIngressRouteValidator.assertAvailable( + List.of(existing), config("app.example.com", "/"))); + } + + @Test + void ignoresAnotherLegacyClass() { + Ingress existing = ingress("default", "legacy-app", null, "app.example.com", "/"); + existing.getMetadata().setAnnotations(Map.of("kubernetes.io/ingress.class", "another-controller")); + assertThatCode(() -> KubernetesIngressRouteValidator.assertAvailable(List.of(existing), config("app.example.com", "/"))) + .doesNotThrowAnyException(); + } + + @Test + void checksAllRulesAndDoesNotExemptDeletingOrSameNamedApplications() { + Ingress existing = ingress("default", "existing-app", "nginx", "other.example.com", "/"); + existing.getMetadata().setDeletionTimestamp("2026-09-08T00:00:00Z"); + existing.getSpec().getRules().add(ingress("default", "second", "nginx", "app.example.com", "/") + .getSpec().getRules().get(0)); + // Path-type differences do not permit reusing the same Host/Path reservation in AM. + existing.getSpec().getRules().get(1).getHttp().getPaths().get(0).setPathType("Exact"); + assertThatIllegalArgumentException().isThrownBy(() -> KubernetesIngressRouteValidator.assertAvailable( + List.of(existing), config("app.example.com", "/"))); + } + + @Test + void allowsAnEmptyClusterAndIgnoresResourcesWithoutHttpRules() { + assertThatCode(() -> KubernetesIngressRouteValidator.assertAvailable(List.of(), config("app.example.com", "/"))) + .doesNotThrowAnyException(); + assertThatCode(() -> KubernetesIngressRouteValidator.assertAvailable(List.of(new Ingress()), config("app.example.com", "/"))) + .doesNotThrowAnyException(); + } + + @Test + void queriesOnlyTheSuppliedClusterButAllItsNamespaces() { + KubernetesClient client = mock(KubernetesClient.class, RETURNS_DEEP_STUBS); + var routes = stubIngressList(client); + when(routes.list()).thenReturn(new IngressListBuilder() + .withItems(ingress("another-project", "existing-app", "nginx", "app.example.com", "/")).build()); + assertThatIllegalArgumentException().isThrownBy(() -> KubernetesIngressRouteValidator.assertAvailable( + client, config("app.example.com", "/"))).withMessageContaining("another-project/existing-app"); + verify(routes).list(); + } + + @Test + void disabledIngressDoesNotQueryTheCluster() { + KubernetesClient client = mock(KubernetesClient.class); + DeploymentConfigDTO config = config("app.example.com", "/"); + config.setIngressEnabled(false); + KubernetesIngressRouteValidator.assertAvailable(client, config); + verifyNoInteractions(client); + } + + @Test + void deniedReadsFailClosedAndPreserveTheCause() { + KubernetesClient client = mock(KubernetesClient.class, RETURNS_DEEP_STUBS); + var routes = stubIngressList(client); + KubernetesClientException forbidden = new KubernetesClientException("Forbidden"); + when(routes.list()).thenThrow(forbidden); + assertThatThrownBy(() -> KubernetesIngressRouteValidator.assertAvailable(client, config("app.example.com", "/"))) + .isInstanceOf(IllegalStateException.class).hasCause(forbidden) + .hasMessageContaining("cluster-wide Ingress list permission"); + } +} diff --git a/src/test/java/kr/co/mcmp/softwarecatalog/kubernetes/service/KubernetesIngressTlsWarningsTest.java b/src/test/java/kr/co/mcmp/softwarecatalog/kubernetes/service/KubernetesIngressTlsWarningsTest.java new file mode 100644 index 00000000..ae20cd15 --- /dev/null +++ b/src/test/java/kr/co/mcmp/softwarecatalog/kubernetes/service/KubernetesIngressTlsWarningsTest.java @@ -0,0 +1,68 @@ +package kr.co.mcmp.softwarecatalog.kubernetes.service; + +import static org.assertj.core.api.Assertions.*; +import static org.mockito.Mockito.*; + +import java.util.Map; +import io.fabric8.kubernetes.api.model.SecretBuilder; +import io.fabric8.kubernetes.api.model.Secret; +import io.fabric8.kubernetes.api.model.SecretList; +import io.fabric8.kubernetes.client.KubernetesClient; +import io.fabric8.kubernetes.client.dsl.MixedOperation; +import io.fabric8.kubernetes.client.dsl.NonNamespaceOperation; +import io.fabric8.kubernetes.client.dsl.Resource; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; + +class KubernetesIngressTlsWarningsTest { + private final KubernetesClient client = mock(KubernetesClient.class, RETURNS_DEEP_STUBS); + + @SuppressWarnings("unchecked") + static Resource stubSecret(KubernetesClient client, String namespace, String name) { + MixedOperation> secrets = mock(MixedOperation.class); + NonNamespaceOperation> scoped = mock(NonNamespaceOperation.class); + Resource selected = mock(Resource.class); + when(client.secrets()).thenReturn(secrets); + when(secrets.inNamespace(namespace)).thenReturn(scoped); + when(scoped.withName(name)).thenReturn(selected); + return selected; + } + + @Test void missingSecretAndReadFailureOnlyWarnWithoutExposingServerContents() { + var config = HelmIngressValuesTest.config(); + config.setIngressTlsEnabled(true); config.setIngressTlsSecret("external-cert"); + var selected = stubSecret(client, "default", "external-cert"); + when(selected.get()).thenReturn(null); + assertThat(KubernetesIngressTlsWarnings.inspect(client, "default", config)) + .singleElement().asString().contains("does not currently exist", "may continue"); + when(selected.get()).thenThrow(new IllegalStateException("sensitive server contents")); + assertThat(KubernetesIngressTlsWarnings.inspect(client, "default", config)) + .singleElement().asString().contains("read permission").doesNotContain("sensitive"); + verify(client.secrets(), never()).inNamespace("project-a"); + } + + @ParameterizedTest @ValueSource(strings = {"missing-key", "empty-cert", "wrong-type", "valid"}) + void inspectsSecretShapeWithoutReturningCertificateOrPrivateKey(String scenario) { + var config = HelmIngressValuesTest.config(); + config.setIngressTlsEnabled(true); config.setIngressTlsSecret("external-cert"); + Map data = switch (scenario) { + case "missing-key" -> Map.of("tls.crt", "private-test-cert"); + case "empty-cert" -> Map.of("tls.crt", "", "tls.key", "private-test-key"); + default -> Map.of("tls.crt", "private-test-cert", "tls.key", "private-test-key"); + }; + when(stubSecret(client, "default", "external-cert").get()).thenReturn(new SecretBuilder() + .withType(scenario.equals("wrong-type") ? "Opaque" : "kubernetes.io/tls").withData(data).build()); + var warnings = KubernetesIngressTlsWarnings.inspect(client, "default", config); + if (scenario.equals("valid")) assertThat(warnings).isEmpty(); + else assertThat(warnings).singleElement().asString().contains("not a complete").doesNotContain("private-test"); + } + + @Test void httpAndDisabledIngressNeverReadSecrets() { + var config = HelmIngressValuesTest.config(); + assertThat(KubernetesIngressTlsWarnings.inspect(client, "default", config)).isEmpty(); + config.setIngressEnabled(false); config.setIngressTlsEnabled(true); + assertThat(KubernetesIngressTlsWarnings.inspect(client, "default", config)).isEmpty(); + verifyNoInteractions(client); + } +}